/* Layout Core */ .wrapper { display: flex; width: 100%; align-items: stretch; height: 100vh; overflow: hidden; } /* Sidebar */ .sidebar { min-width: 260px; max-width: 260px; background: var(--bg-surface); color: var(--text-main); transition: all 0.3s ease; border-right: 1px solid var(--border-color); display: flex; flex-direction: column; z-index: 1040; } .sidebar.collapsed { min-width: 80px; max-width: 80px; } .sidebar-header { padding: 0 1.5rem; display: flex; align-items: center; border-bottom: 1px solid var(--border-color); height: 75px; } .sidebar-header h5 { white-space: nowrap; overflow: hidden; transition: opacity 0.3s; } .sidebar.collapsed .sidebar-header h5 { opacity: 0; width: 0; } /* Shiny Logo */ .sidebar-logo { position: relative; overflow: hidden; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; min-width: 40px; margin-right: 12px; background-color: transparent; transition: margin 0.3s; } .sidebar-logo img { width: 100%; height: 100%; object-fit: cover; } .sidebar-logo::before { content: ''; position: absolute; top: 0; left: -100%; width: 50%; height: 100%; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.8) 50%, rgba(255,255,255,0) 100%); transform: skewX(-25deg); animation: shine 3s infinite; z-index: 1; } @keyframes shine { 0% { left: -100%; } 20% { left: 200%; } 100% { left: 200%; } } .sidebar.collapsed .sidebar-logo { margin-right: 0; } .sidebar-menu { padding: 1rem 0.5rem; overflow-y: auto; flex-grow: 1; } .sidebar-menu ul { list-style: none; padding: 0; margin: 0; } .sidebar-menu li { margin-bottom: 0.25rem; } .sidebar-menu a { display: flex; align-items: center; padding: 0.75rem 1rem; color: var(--text-muted); border-radius: 8px; transition: all 0.2s; font-weight: 500; } .sidebar-menu a i { font-size: 1.25rem; margin-right: 1rem; min-width: 24px; text-align: center; } .sidebar-menu a span { white-space: nowrap; transition: opacity 0.3s; } .sidebar.collapsed .sidebar-menu a span { opacity: 0; display: none; } .sidebar-menu a:hover, .sidebar-menu li.active a { background-color: var(--primary-light); color: var(--primary); } /* Sidebar Footer */ .sidebar-footer { min-height: 70px; overflow: hidden; } .sidebar.collapsed .sidebar-user-info, .sidebar.collapsed .sidebar-logout-btn { opacity: 0; display: none !important; } /* Main Content */ .main-content { flex-grow: 1; display: flex; flex-direction: column; overflow: hidden; background-color: var(--bg-body); } /* Topbar */ .topbar { height: 75px; padding: 0 1.5rem; background: var(--bg-surface-hover); border-bottom: 1px solid var(--border-color); display: flex; align-items: center; justify-content: space-between; z-index: 1030; } .topbar-left, .topbar-right { display: flex; align-items: center; gap: 1rem; } .btn-icon-only { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 50%; color: var(--text-muted); background: transparent; border: none; transition: all 0.2s; } .btn-icon-only:hover { background: var(--bg-surface-hover); color: var(--text-main); } .search-box { display: flex; align-items: center; background: var(--bg-surface-hover); border-radius: 20px; padding: 0.4rem 1rem; border: 1px solid var(--border-color); width: 300px; } .search-box i { color: var(--text-muted); margin-right: 0.5rem; } .search-box input { border: none; background: transparent; outline: none; width: 100%; color: var(--text-main); } .search-box .shortcut { font-size: 0.75rem; color: var(--text-muted); background: var(--border-color); padding: 0.1rem 0.4rem; border-radius: 4px; } /* Avatar Premium Styling */ .avatar-premium { border: 2px solid var(--bg-surface); box-shadow: 0 0 0 2px var(--primary), 0 4px 6px -1px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; } .avatar-premium:hover { transform: scale(1.05); box-shadow: 0 0 0 3px var(--primary), 0 8px 12px -3px rgba(0, 0, 0, 0.15); } .profile-dropdown img { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; border: 2px solid var(--bg-surface); box-shadow: 0 0 0 2px var(--primary), 0 4px 6px -1px rgba(0, 0, 0, 0.1); transition: all 0.3s ease; } .profile-dropdown img:hover { transform: scale(1.05); box-shadow: 0 0 0 3px var(--primary), 0 8px 12px -3px rgba(0, 0, 0, 0.15); } /* Page Content */ .page-content { flex-grow: 1; padding: 1.5rem; overflow-y: auto; } .page-header { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 1.5rem; } .page-title { font-size: 1.5rem; font-weight: 600; margin-bottom: 0.25rem; } .page-subtitle { color: var(--text-muted); font-size: 0.9rem; } /* DataTables Overrides */ .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter, .dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing, .dataTables_wrapper .dataTables_paginate { color: var(--text-main) !important; } table.dataTable { color: var(--text-main) !important; border-collapse: collapse !important; } table.dataTable thead th, table.dataTable thead td { border-bottom: 1px solid var(--border-color) !important; background-color: var(--bg-surface-hover); } table.dataTable tbody tr { background-color: transparent !important; } table.dataTable tbody th, table.dataTable tbody td { border-bottom: 1px solid var(--border-color) !important; } /* Command Palette Overlay */ #commandPalette { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 9999; align-items: flex-start; justify-content: center; padding-top: 10vh; } #commandPalette.active { display: flex; } .cmd-palette-box { width: 100%; max-width: 600px; background: var(--bg-surface); border-radius: 12px; box-shadow: var(--shadow-lg); overflow: hidden; } .cmd-input-wrap { padding: 1rem; border-bottom: 1px solid var(--border-color); display: flex; align-items: center; } .cmd-input-wrap i { font-size: 1.25rem; color: var(--text-muted); margin-right: 1rem; } .cmd-input-wrap input { width: 100%; border: none; background: transparent; font-size: 1.1rem; outline: none; color: var(--text-main); } .cmd-list { max-height: 300px; overflow-y: auto; padding: 0.5rem 0; } .cmd-item { padding: 0.75rem 1.5rem; display: flex; align-items: center; color: var(--text-main); cursor: pointer; } .cmd-item:hover, .cmd-item.active { background: var(--bg-surface-hover); color: var(--primary); } .cmd-item i { margin-right: 1rem; color: var(--text-muted); } /* Toast Container */ .toast-container { position: fixed; bottom: 20px; right: 20px; z-index: 1050; } /* Responsive */ @media (max-width: 991.98px) { .sidebar { position: fixed; left: -260px; height: 100%; } .sidebar.show { left: 0; } .main-content { width: 100%; } .search-box { display: none; } } /* Global DataTables Customization */ table.dataTable thead > tr > th, table.dataTable thead > tr > td { text-align: center !important; vertical-align: middle; } table.dataTable.table-sm thead > tr > th { padding-right: 20px !important; } /* Hide default DataTables sorting arrows */ table.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc { background-image: none !important; position: relative; padding-right: 25px !important; } /* Hide Native DataTables ::before (Up Triangle) */ table.dataTable thead > tr > th.sorting::before, table.dataTable thead > tr > th.sorting_asc::before, table.dataTable thead > tr > th.sorting_desc::before, table.dataTable thead > tr > td.sorting::before, table.dataTable thead > tr > td.sorting_asc::before, table.dataTable thead > tr > td.sorting_desc::before { display: none !important; content: none !important; } /* Custom Sort Icons using FontAwesome 5 (Matched to request) */ table.dataTable thead > tr > th.sorting::after, table.dataTable thead > tr > th.sorting_asc::after, table.dataTable thead > tr > th.sorting_desc::after, table.dataTable thead > tr > td.sorting::after, table.dataTable thead > tr > td.sorting_asc::after, table.dataTable thead > tr > td.sorting_desc::after { position: absolute !important; right: 8px !important; top: 50% !important; transform: translateY(-50%) !important; font-family: "Font Awesome 5 Free" !important; font-weight: 900 !important; font-size: 0.95rem !important; color: var(--text-muted) !important; opacity: 0.3 !important; line-height: 1 !important; display: block !important; } /* Unsorted state: show sort-down faded */ table.dataTable thead > tr > th.sorting::after, table.dataTable thead > tr > td.sorting::after { content: "\f160" !important; /* fa-sort-amount-down */ } /* Ascending state */ table.dataTable thead > tr > th.sorting_asc::after, table.dataTable thead > tr > td.sorting_asc::after { content: "\f162" !important; /* fa-sort-amount-up */ opacity: 1 !important; color: var(--primary) !important; } /* Descending state */ table.dataTable thead > tr > th.sorting_desc::after, table.dataTable thead > tr > td.sorting_desc::after { content: "\f160" !important; /* fa-sort-amount-down */ opacity: 1 !important; color: var(--primary) !important; }