/** * Employees Styles - User & Role Management * * Employees-specific styling only. * Reuses: swp-stat-card (stats.css), swp-stats-row (stats.css), swp-tab-bar (tabs.css), * swp-btn, swp-status-badge, swp-icon-btn, swp-card, swp-section-label (components.css), * swp-row-toggle (cash.css), * swp-sticky-header, swp-header-content (page.css), * swp-toggle-slider, swp-checkbox-list (controls.css) * * Creates: swp-employee-table, swp-employee-row, swp-user-info, * swp-employee-avatar-large, swp-employee-detail-header, * swp-fact-inline, swp-edit-row, swp-detail-grid */ /* =========================================== USERS HEADER =========================================== */ swp-users-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--section-gap); } swp-users-count { display: flex; align-items: center; gap: var(--spacing-4); font-size: var(--font-size-sm); color: var(--color-text-secondary); } swp-users-count strong { color: var(--color-text); font-weight: var(--font-weight-semibold); } swp-users-progress { width: 120px; height: 6px; background: var(--color-border); border-radius: var(--radius-sm); overflow: hidden; } swp-users-progress-bar { display: block; height: 100%; background: var(--color-teal); border-radius: var(--radius-sm); transition: width var(--transition-normal); } /* =========================================== EMPLOYEE TABLE (Grid + Subgrid) =========================================== */ swp-employee-table-card { display: block; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--border-radius-lg); overflow: hidden; } swp-employee-table { display: grid; grid-template-columns: minmax(220px, 1fr) 120px 140px 120px 40px; } swp-employee-table-header { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; background: var(--color-background-alt); padding: 0 var(--spacing-10); } swp-employee-table-body { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; } swp-employee-row { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; align-items: center; padding: 0 var(--spacing-10); border-bottom: 1px solid var(--color-border); transition: background var(--transition-fast); } swp-employee-table-body swp-employee-row { cursor: pointer; } swp-employee-table-body swp-employee-row:hover { background: var(--color-background-hover); } swp-employee-row:last-child { border-bottom: none; } swp-employee-cell { padding: var(--spacing-5) 0; font-size: var(--font-size-base); color: var(--color-text); } /* Chevron cell (last column) */ swp-employee-cell:last-child { display: flex; align-items: center; justify-content: center; } /* Header cells */ swp-employee-table-header swp-employee-cell { font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.5px; color: var(--color-text-secondary); padding-top: var(--spacing-5); padding-bottom: var(--spacing-5); } /* =========================================== USER INFO (Avatar + Details) =========================================== */ swp-user-info { display: flex; align-items: center; gap: var(--spacing-3); } swp-user-avatar { width: 36px; height: 36px; border-radius: 50%; background: var(--color-teal); color: white; display: flex; align-items: center; justify-content: center; font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); flex-shrink: 0; } swp-user-avatar.purple { background: var(--color-purple); } swp-user-avatar.blue { background: var(--color-blue); } swp-user-avatar.amber { background: var(--color-amber); } swp-user-details { min-width: 0; } swp-user-name { display: block; font-size: var(--font-size-base); font-weight: var(--font-weight-medium); color: var(--color-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } swp-user-email { display: block; font-size: var(--font-size-sm); color: var(--color-text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* =========================================== TABLE ACTIONS =========================================== */ swp-table-actions { display: flex; align-items: center; gap: var(--spacing-2); justify-content: flex-end; } /* Icon button styles in components.css */ /* =========================================== PERMISSIONS MATRIX =========================================== */ swp-permissions-matrix { display: block; background: var(--color-surface); border-radius: var(--radius-lg); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); overflow: hidden; } swp-permissions-matrix table { width: 100%; border-collapse: collapse; } swp-permissions-matrix th, swp-permissions-matrix td { padding: var(--spacing-5) var(--spacing-6); text-align: center; border-bottom: 1px solid var(--color-border); font-size: var(--font-size-base); } swp-permissions-matrix th:first-child, swp-permissions-matrix td:first-child { text-align: left; font-weight: var(--font-weight-medium); } swp-permissions-matrix thead th { background: var(--color-background-alt); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.5px; color: var(--color-text-secondary); } swp-permissions-matrix tbody tr:last-child td { border-bottom: none; } swp-permissions-matrix .permission-name { display: flex; align-items: center; gap: var(--spacing-3); font-size: var(--font-size-base); color: var(--color-text); } swp-permissions-matrix .permission-name i { font-size: 18px; color: var(--color-text-secondary); } swp-permissions-matrix .check { color: var(--color-teal); font-size: 20px; } swp-permissions-matrix .no-access { color: var(--color-border); font-size: 16px; } /* =========================================== EMPLOYEE DETAIL VIEW (replaces page content) =========================================== */ /* Large avatar for detail view */ swp-employee-avatar-large { width: 80px; height: 80px; border-radius: 50%; background: var(--color-teal); color: white; display: flex; align-items: center; justify-content: center; font-size: var(--font-size-2xl); font-weight: var(--font-weight-semibold); flex-shrink: 0; } swp-employee-avatar-large.purple { background: var(--color-purple); } swp-employee-avatar-large.blue { background: var(--color-blue); } swp-employee-avatar-large.amber { background: var(--color-amber); } /* Detail header content (inside swp-header-content) */ swp-employee-detail-header { display: flex; gap: var(--spacing-12); } swp-employee-info { flex: 1; display: flex; flex-direction: column; gap: var(--spacing-2); min-width: 0; } /* Name row with name + tags + status */ swp-employee-name-row { display: flex; align-items: center; gap: var(--spacing-8); } swp-employee-name { font-size: var(--font-size-2xl); font-weight: var(--font-weight-semibold); color: var(--color-text); } /* Tags row */ swp-tags-row { display: flex; align-items: center; gap: var(--spacing-2); flex-wrap: wrap; } swp-tag { display: inline-flex; align-items: center; gap: var(--spacing-1); padding: var(--spacing-1) var(--spacing-3); font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.3px; border-radius: var(--radius-sm); background: var(--color-background); color: var(--color-text-secondary); } swp-tag.master { background: color-mix(in srgb, var(--color-purple) 15%, white); color: var(--color-purple); } swp-tag.senior { background: color-mix(in srgb, var(--color-blue) 15%, white); color: var(--color-blue); } swp-tag.junior { background: color-mix(in srgb, var(--color-amber) 15%, white); color: #b45309; } swp-tag.cert { background: color-mix(in srgb, var(--color-teal) 15%, white); color: var(--color-teal); } /* Employee status indicator */ swp-employee-status { display: inline-flex; align-items: center; gap: var(--spacing-2); padding: var(--spacing-2) var(--spacing-4); font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); border-radius: var(--radius-md); cursor: pointer; transition: all var(--transition-fast); margin-left: auto; } swp-employee-status[data-active="true"] { background: color-mix(in srgb, var(--color-green) 15%, white); color: var(--color-green); border: 1px solid color-mix(in srgb, var(--color-green) 30%, white); } swp-employee-status[data-active="false"] { background: color-mix(in srgb, var(--color-red) 12%, white); color: var(--color-red); border: 1px solid color-mix(in srgb, var(--color-red) 30%, white); } swp-employee-status .icon { font-size: var(--font-size-base); } /* Inline fact boxes (horizontal baseline alignment) */ swp-fact-boxes-inline { display: flex; gap: var(--spacing-12); margin-top: var(--spacing-1); flex-wrap: wrap; } swp-fact-inline { display: flex; align-items: baseline; gap: var(--spacing-2); } swp-fact-inline-value { font-size: var(--font-size-lg); font-weight: var(--font-weight-semibold); font-family: var(--font-mono); color: var(--color-text); } swp-fact-inline-label { font-size: var(--font-size-sm); color: var(--color-text-secondary); } /* Edit rows for contenteditable (Grid + Subgrid) */ swp-edit-section { display: grid; grid-template-columns: 140px 1fr; gap: var(--spacing-4); } swp-edit-row { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; align-items: center; } swp-edit-label { font-size: var(--font-size-md); color: var(--color-text-secondary); } swp-edit-value { font-size: var(--font-size-base); color: var(--color-text); padding: var(--spacing-2) var(--spacing-4); border-radius: var(--radius-sm); background: var(--color-background-alt); border: 1px solid transparent; transition: all var(--transition-fast); cursor: text; } swp-edit-value:hover { background: var(--color-background); } swp-edit-value:focus { outline: none; background: var(--color-surface); border-color: var(--color-teal); } /* swp-section-label is now in components.css */ /* =========================================== VIEW CONTAINERS (List/Detail swap) =========================================== */ swp-employees-list-view { display: block; } swp-employee-detail-view { display: none; min-height: calc(100vh - 60px); } /* Back link */ swp-back-link { display: inline-flex; align-items: center; gap: var(--spacing-2); color: var(--color-text-secondary); font-size: var(--font-size-sm); cursor: pointer; transition: color var(--transition-fast); } swp-back-link:hover { color: var(--color-teal); } swp-back-link i { font-size: 16px; } /* Detail grid for cards (2-column layout) */ swp-detail-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--spacing-8); } swp-detail-grid > div { display: flex; flex-direction: column; gap: var(--spacing-8); } /* swp-card base styles in components.css */ @media (max-width: 900px) { swp-detail-grid { grid-template-columns: 1fr; } } /* =========================================== SCHEDULE GRID (Hours tab) =========================================== */ swp-schedule-grid { display: flex; flex-direction: column; } swp-schedule-row { display: flex; justify-content: space-between; align-items: center; padding: var(--spacing-4) 0; border-bottom: 1px solid var(--color-border); } swp-schedule-row:last-child { border-bottom: none; } swp-schedule-row.off { color: var(--color-text-secondary); } swp-schedule-day { font-size: var(--font-size-base); font-weight: var(--font-weight-medium); } swp-schedule-time { font-size: var(--font-size-base); font-family: var(--font-mono); color: var(--color-teal); } swp-schedule-row.off swp-schedule-time { color: var(--color-text-secondary); } /* =========================================== SERVICE LIST (Services tab) =========================================== */ swp-service-list { display: flex; flex-direction: column; } swp-service-item { display: grid; grid-template-columns: 1fr auto auto; gap: var(--spacing-6); align-items: center; padding: var(--spacing-4) 0; border-bottom: 1px solid var(--color-border); } swp-service-item:last-child { border-bottom: none; } swp-service-name { font-size: var(--font-size-base); font-weight: var(--font-weight-medium); } swp-service-duration { font-size: var(--font-size-sm); color: var(--color-text-secondary); } swp-service-price { font-size: var(--font-size-base); font-family: var(--font-mono); color: var(--color-teal); font-weight: var(--font-weight-medium); } /* =========================================== DOCUMENT LIST (HR tab) =========================================== */ swp-document-list { display: flex; flex-direction: column; } swp-document-item { display: flex; align-items: center; gap: var(--spacing-3); padding: var(--spacing-4) 0; border-bottom: 1px solid var(--color-border); cursor: pointer; transition: background var(--transition-fast); } swp-document-item:last-child { border-bottom: none; } swp-document-item:hover { background: var(--color-background-alt); margin: 0 calc(-1 * var(--spacing-3)); padding-left: var(--spacing-3); padding-right: var(--spacing-3); border-radius: var(--radius-sm); } swp-document-item i { font-size: 24px; color: var(--color-red); } swp-document-name { flex: 1; font-size: var(--font-size-base); font-weight: var(--font-weight-medium); } swp-document-date { font-size: var(--font-size-sm); color: var(--color-text-secondary); } /* Notes area */ swp-notes-area { display: block; min-height: 100px; padding: var(--spacing-4); background: var(--color-background-alt); border-radius: var(--radius-sm); font-size: var(--font-size-base); color: var(--color-text-secondary); line-height: 1.6; } swp-notes-area:focus { outline: none; color: var(--color-text); } /* =========================================== RESPONSIVE =========================================== */ @media (max-width: 1024px) { swp-employee-table { grid-template-columns: minmax(180px, 1fr) 100px 120px 100px 40px; } } @media (max-width: 768px) { swp-employee-table { grid-template-columns: minmax(160px, 1fr) 90px 110px 90px 40px; } swp-employee-cell { padding: var(--spacing-3) 0; } swp-employee-table-header, swp-employee-row { padding: 0 var(--spacing-4); } swp-users-header { flex-direction: column; align-items: flex-start; gap: var(--spacing-4); } swp-users-header swp-btn { width: 100%; justify-content: center; } }