/* ============================================ Lash Vanshy - Estilos del Panel Admin DiseƱo: Rosa Pastel (#F8B4C4) + Blanco ============================================ */ /* Variables CSS */ :root { --primary: #F8B4C4; --primary-dark: #E89AAD; --secondary: #FFE4EC; --accent: #E89AAD; --background: #F8F9FA; --surface: #FFFFFF; --text: #4A4A4A; --text-light: #6c757d; --text-muted: #adb5bd; --border: #E9ECEF; --success: #28a745; --danger: #dc3545; --warning: #ffc107; --info: #17a2b8; --sidebar-width: 260px; --header-height: 70px; --shadow: rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 30px rgba(248, 180, 196, 0.3); --font-family: 'Poppins', sans-serif; } /* Reset */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-family); color: var(--text); background-color: var(--background); overflow-x: hidden; } /* ============================================ LAYOUT ============================================ */ .admin-wrapper { display: flex; min-height: 100vh; } /* ============================================ SIDEBAR ============================================ */ .admin-sidebar { width: var(--sidebar-width); background: linear-gradient(180deg, #fff 0%, var(--secondary) 100%); box-shadow: 2px 0 20px var(--shadow); position: fixed; top: 0; left: 0; height: 100vh; z-index: 1000; display: flex; flex-direction: column; transition: transform 0.3s ease; } .sidebar-header { padding: 1.5rem; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--border); } .sidebar-header .brand { display: flex; align-items: center; gap: 0.5rem; text-decoration: none; } .sidebar-header .brand-icon { font-size: 1.5rem; } .sidebar-header .brand-text { font-size: 1.3rem; font-weight: 700; background: linear-gradient(135deg, var(--primary-dark), var(--primary)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .sidebar-header .badge { font-size: 0.7rem; padding: 0.25rem 0.5rem; } .sidebar-nav { flex: 1; padding: 1rem; overflow-y: auto; } .sidebar-nav .nav-item { margin-bottom: 0.5rem; } .sidebar-nav .nav-link { display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem 1rem; color: var(--text); text-decoration: none; border-radius: 10px; transition: all 0.3s ease; font-weight: 500; } .sidebar-nav .nav-link i { width: 20px; text-align: center; color: var(--primary-dark); } .sidebar-nav .nav-link:hover { background: rgba(248, 180, 196, 0.2); color: var(--primary-dark); } .sidebar-nav .nav-link.active { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; } .sidebar-nav .nav-link.active i { color: white; } .sidebar-nav .nav-link .badge { margin-left: auto; font-size: 0.75rem; padding: 0.25rem 0.5rem; } .sidebar-footer { padding: 1rem; border-top: 1px solid var(--border); background: white; } .user-info { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.5rem; } .user-avatar { width: 40px; height: 40px; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-weight: 600; font-size: 0.9rem; } .user-details { display: flex; flex-direction: column; } .user-name { font-weight: 600; font-size: 0.9rem; color: var(--text); } .user-role { font-size: 0.75rem; color: var(--text-light); } .btn-logout { background: transparent; border: 2px solid var(--border); color: var(--text); padding: 0.5rem 1rem; border-radius: 8px; font-weight: 500; transition: all 0.3s ease; } .btn-logout:hover { background: var(--danger); border-color: var(--danger); color: white; } /* ============================================ MAIN CONTENT ============================================ */ .admin-main { flex: 1; margin-left: var(--sidebar-width); display: flex; flex-direction: column; } .admin-header { height: var(--header-height); background: white; box-shadow: 0 2px 10px var(--shadow); padding: 0 2rem; display: flex; align-items: center; justify-content: space-between; position: sticky; top: 0; z-index: 100; } .header-left { display: flex; align-items: center; gap: 1rem; } .btn-toggle-sidebar { background: transparent; border: none; font-size: 1.25rem; color: var(--text); cursor: pointer; padding: 0.5rem; } .page-title { font-size: 1.5rem; font-weight: 600; color: var(--text); margin: 0; } .header-right { display: flex; align-items: center; gap: 1rem; } .current-date { color: var(--text-light); font-size: 0.9rem; } .admin-content { padding: 2rem; flex: 1; } /* ============================================ CARDS ============================================ */ .card-admin { background: white; border: none; border-radius: 15px; box-shadow: 0 5px 20px var(--shadow); overflow: hidden; } .card-admin .card-header { background: linear-gradient(135deg, var(--secondary), white); border-bottom: 1px solid var(--border); padding: 1.25rem 1.5rem; font-weight: 600; color: var(--text); } .card-admin .card-body { padding: 1.5rem; } /* Stats Cards */ .stat-card { background: white; border-radius: 15px; padding: 1.5rem; box-shadow: 0 5px 20px var(--shadow); display: flex; align-items: center; gap: 1rem; transition: all 0.3s ease; } .stat-card:hover { transform: translateY(-5px); box-shadow: 0 10px 30px var(--shadow-lg); } .stat-card .stat-icon { width: 60px; height: 60px; border-radius: 15px; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; } .stat-card .stat-icon.primary { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); color: white; } .stat-card .stat-icon.success { background: linear-gradient(135deg, #28a745, #20c997); color: white; } .stat-card .stat-icon.warning { background: linear-gradient(135deg, var(--warning), #fd7e14); color: white; } .stat-card .stat-icon.info { background: linear-gradient(135deg, var(--info), var(--primary-dark)); color: white; } .stat-card .stat-info h3 { font-size: 1.75rem; font-weight: 700; color: var(--text); margin-bottom: 0.25rem; } .stat-card .stat-info p { color: var(--text-light); margin: 0; font-size: 0.9rem; } /* ============================================ TABLES ============================================ */ .table-admin { width: 100%; border-collapse: collapse; } .table-admin thead th { background: var(--secondary); padding: 1rem; text-align: left; font-weight: 600; color: var(--text); border-bottom: 2px solid var(--primary); } .table-admin tbody td { padding: 1rem; border-bottom: 1px solid var(--border); vertical-align: middle; } .table-admin tbody tr:hover { background: rgba(248, 180, 196, 0.1); } .table-admin .actions { display: flex; gap: 0.5rem; } .table-admin .actions .btn { padding: 0.4rem 0.75rem; border-radius: 8px; font-size: 0.85rem; } /* ============================================ FORMS ============================================ */ .form-label { font-weight: 500; color: var(--text); margin-bottom: 0.5rem; } .form-control, .form-select { border: 2px solid var(--border); border-radius: 10px; padding: 0.75rem 1rem; font-family: var(--font-family); transition: all 0.3s ease; } .form-control:focus, .form-select:focus { border-color: var(--primary); box-shadow: 0 0 0 4px rgba(248, 180, 196, 0.2); outline: none; } .form-control.is-invalid { border-color: var(--danger); } .invalid-feedback { color: var(--danger); font-size: 0.85rem; margin-top: 0.25rem; } /* Form switch */ .form-switch { padding-left: 2.5rem; } .form-switch .form-check-input { width: 2rem; height: 1rem; cursor: pointer; } .form-switch .form-check-input:checked { background-color: var(--primary); border-color: var(--primary); } /* ============================================ BUTTONS ============================================ */ .btn-primary-admin { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); border: none; color: white; padding: 0.75rem 1.5rem; border-radius: 10px; font-weight: 500; transition: all 0.3s ease; } .btn-primary-admin:hover { background: linear-gradient(135deg, var(--primary-dark), var(--primary)); color: white; transform: translateY(-2px); box-shadow: 0 5px 15px var(--shadow-lg); } .btn-secondary-admin { background: white; border: 2px solid var(--border); color: var(--text); padding: 0.75rem 1.5rem; border-radius: 10px; font-weight: 500; transition: all 0.3s ease; } .btn-secondary-admin:hover { border-color: var(--primary); color: var(--primary-dark); } .btn-danger-admin { background: var(--danger); border: none; color: white; padding: 0.75rem 1.5rem; border-radius: 10px; font-weight: 500; transition: all 0.3s ease; } .btn-danger-admin:hover { background: #c82333; color: white; } .btn-sm { padding: 0.4rem 0.75rem; font-size: 0.85rem; } /* ============================================ ALERTS ============================================ */ .alert { border: none; border-radius: 10px; padding: 1rem 1.25rem; } .alert-success { background: linear-gradient(135deg, #d4edda, #c3e6cb); color: #155724; } .alert-danger { background: linear-gradient(135deg, #f8d7da, #f5c6cb); color: #721c24; } .alert-warning { background: linear-gradient(135deg, #fff3cd, #ffeeba); color: #856404; } .alert-info { background: linear-gradient(135deg, #d1ecf1, #bee5eb); color: #0c5460; } /* ============================================ PAGINATION ============================================ */ .pagination { margin-top: 1.5rem; } .pagination .page-link { color: var(--text); border: 2px solid var(--border); margin: 0 0.25rem; border-radius: 8px; padding: 0.5rem 0.75rem; } .pagination .page-link:hover { background: var(--primary); border-color: var(--primary); color: white; } .pagination .page-item.active .page-link { background: linear-gradient(135deg, var(--primary), var(--primary-dark)); border-color: transparent; color: white; } /* ============================================ UTILITIES ============================================ */ .text-primary { color: var(--primary-dark) !important; } .bg-primary-custom { background-color: var(--secondary) !important; } .badge-admin { padding: 0.4rem 0.75rem; border-radius: 20px; font-size: 0.8rem; font-weight: 500; } .badge-admin.bg-success { background: linear-gradient(135deg, #28a745, #20c997) !important; } .badge-admin.bg-warning { background: linear-gradient(135deg, var(--warning), #fd7e14) !important; color: #000; } .badge-admin.bg-danger { background: linear-gradient(135deg, var(--danger), #bd2130) !important; } .badge-admin.bg-info { background: linear-gradient(135deg, var(--info), var(--primary-dark)) !important; } /* Image preview */ .image-preview { width: 100%; max-height: 200px; object-fit: cover; border-radius: 10px; border: 2px dashed var(--border); } /* Empty state */ .empty-state { text-align: center; padding: 3rem; color: var(--text-light); } .empty-state i { font-size: 3rem; color: var(--border); margin-bottom: 1rem; } /* ============================================ SEARCH & FILTERS ============================================ */ .search-box { position: relative; max-width: 300px; } .search-box input { padding-left: 2.5rem; border-radius: 25px; } .search-box i { position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: var(--text-light); } .filters-bar { display: flex; gap: 1rem; margin-bottom: 1.5rem; flex-wrap: wrap; align-items: center; } /* ============================================ RESPONSIVE ============================================ */ @media (max-width: 992px) { .admin-sidebar { transform: translateX(-100%); } .admin-sidebar.show { transform: translateX(0); } .admin-main { margin-left: 0; } .admin-content { padding: 1rem; } } @media (max-width: 768px) { .stat-card { margin-bottom: 1rem; } .filters-bar { flex-direction: column; align-items: stretch; } .table-admin { font-size: 0.85rem; } .table-admin thead th, .table-admin tbody td { padding: 0.75rem 0.5rem; } } /* ============================================ MODAL ============================================ */ .modal-admin .modal-content { border: none; border-radius: 15px; box-shadow: 0 20px 60px var(--shadow-lg); } .modal-admin .modal-header { background: linear-gradient(135deg, var(--secondary), white); border-bottom: 1px solid var(--border); border-radius: 15px 15px 0 0; padding: 1.25rem 1.5rem; } .modal-admin .modal-title { font-weight: 600; color: var(--text); } .modal-admin .modal-body { padding: 1.5rem; } .modal-admin .modal-footer { border-top: 1px solid var(--border); padding: 1rem 1.5rem; } /* ============================================ LOADING ============================================ */ .loading-spinner { display: flex; justify-content: center; align-items: center; padding: 3rem; } .spinner { width: 40px; height: 40px; border: 4px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } }