Implements advanced service search using Fuse.js Improves category expand/collapse animations Adds interactive search functionality for service list Enhances user experience by enabling quick service filtering and smooth UI interactions
242 lines
5.5 KiB
CSS
242 lines
5.5 KiB
CSS
/**
|
|
* Services List Styles
|
|
*
|
|
* Feature-specific styling only.
|
|
* Reuses: swp-stat-card (stats.css), swp-data-table (components.css),
|
|
* swp-sticky-header (page.css), swp-row-toggle (employees.css),
|
|
* swp-btn (components.css)
|
|
*/
|
|
|
|
/* ===========================================
|
|
SERVICES HEADER (Search + Button)
|
|
=========================================== */
|
|
|
|
swp-services-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: var(--section-gap);
|
|
}
|
|
|
|
swp-search-input {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--spacing-3);
|
|
padding: var(--spacing-3) var(--spacing-4);
|
|
background: var(--color-background);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-md);
|
|
min-width: 280px;
|
|
|
|
i {
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--font-size-lg);
|
|
}
|
|
|
|
input {
|
|
border: none;
|
|
background: transparent;
|
|
outline: none;
|
|
box-shadow: none;
|
|
font-size: var(--font-size-base);
|
|
color: var(--color-text);
|
|
width: 100%;
|
|
|
|
&:focus {
|
|
outline: none;
|
|
box-shadow: none;
|
|
}
|
|
|
|
&::placeholder {
|
|
color: var(--color-text-tertiary);
|
|
}
|
|
}
|
|
|
|
&:focus-within {
|
|
border-color: var(--color-teal);
|
|
}
|
|
}
|
|
|
|
/* ===========================================
|
|
SERVICES LIST TABLE
|
|
=========================================== */
|
|
|
|
swp-card.services-list {
|
|
padding: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Table columns: Service(1fr) | Varighed(100px) | Pris(100px) | Caret(40px) */
|
|
swp-card.services-list swp-data-table {
|
|
grid-template-columns: 1fr 100px 100px 40px;
|
|
}
|
|
|
|
swp-card.services-list swp-data-table-header,
|
|
swp-card.services-list swp-data-table-row,
|
|
swp-card.services-list swp-category-row {
|
|
padding: 0 var(--spacing-10);
|
|
}
|
|
|
|
swp-card.services-list swp-data-table-header swp-data-table-cell {
|
|
padding-top: var(--spacing-5);
|
|
padding-bottom: var(--spacing-5);
|
|
}
|
|
|
|
swp-card.services-list swp-data-table-row {
|
|
cursor: pointer;
|
|
}
|
|
|
|
swp-card.services-list swp-data-table-cell {
|
|
padding: var(--spacing-5) 0;
|
|
|
|
&:last-child {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
/* Mono font for duration and price columns */
|
|
swp-card.services-list swp-data-table-row swp-data-table-cell:nth-child(2),
|
|
swp-card.services-list swp-data-table-row swp-data-table-cell:nth-child(3) {
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
/* ===========================================
|
|
CATEGORY ROW
|
|
=========================================== */
|
|
|
|
swp-category-row {
|
|
display: grid;
|
|
grid-column: 1 / -1;
|
|
grid-template-columns: subgrid;
|
|
background: var(--bg-blue-subtle);
|
|
cursor: pointer;
|
|
border-bottom: 1px solid var(--color-border);
|
|
border-left: 4px solid var(--color-blue);
|
|
}
|
|
|
|
swp-category-row:hover {
|
|
background: var(--bg-blue-medium);
|
|
}
|
|
|
|
swp-category-row swp-data-table-cell {
|
|
padding: var(--spacing-5) 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--spacing-4);
|
|
}
|
|
|
|
swp-category-row swp-data-table-cell:first-child {
|
|
font-weight: var(--font-weight-semibold);
|
|
font-size: var(--font-size-base);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.03em;
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
swp-category-toggle {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 24px;
|
|
height: 24px;
|
|
color: var(--color-blue);
|
|
background: var(--bg-blue-medium);
|
|
border-radius: var(--radius-sm);
|
|
transition: background 0.2s ease;
|
|
}
|
|
|
|
swp-category-row:hover swp-category-toggle {
|
|
background: var(--bg-blue-strong);
|
|
}
|
|
|
|
swp-category-toggle i {
|
|
transition: transform 0.2s ease;
|
|
}
|
|
|
|
swp-category-row[data-expanded="false"] swp-category-toggle i {
|
|
transform: rotate(-90deg);
|
|
}
|
|
|
|
.category-name {
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.category-count {
|
|
color: var(--color-text-tertiary);
|
|
font-weight: var(--font-weight-normal);
|
|
font-size: var(--font-size-xs);
|
|
margin-left: var(--spacing-2);
|
|
}
|
|
|
|
/* ===========================================
|
|
SERVICE ROW (indented under category)
|
|
=========================================== */
|
|
|
|
swp-card.services-list swp-data-table-row swp-data-table-cell:first-child {
|
|
padding-left: 56px;
|
|
}
|
|
|
|
/* ===========================================
|
|
SERVICE ROW HOVER
|
|
=========================================== */
|
|
|
|
swp-card.services-list swp-data-table-row:hover {
|
|
background: var(--color-background-hover);
|
|
}
|
|
|
|
swp-card.services-list swp-data-table-row:hover swp-row-toggle {
|
|
color: var(--color-teal);
|
|
}
|
|
|
|
/* ===========================================
|
|
CATEGORIES LIST TABLE
|
|
=========================================== */
|
|
|
|
swp-card.categories-list {
|
|
padding: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* Table columns: Category(1fr) | ServiceCount(120px) | Caret(40px) */
|
|
swp-card.categories-list swp-data-table {
|
|
grid-template-columns: 1fr 120px 40px;
|
|
}
|
|
|
|
swp-card.categories-list swp-data-table-header,
|
|
swp-card.categories-list swp-data-table-row {
|
|
padding: 0 var(--spacing-10);
|
|
}
|
|
|
|
swp-card.categories-list swp-data-table-header swp-data-table-cell {
|
|
padding-top: var(--spacing-5);
|
|
padding-bottom: var(--spacing-5);
|
|
}
|
|
|
|
swp-card.categories-list swp-data-table-row {
|
|
cursor: pointer;
|
|
}
|
|
|
|
swp-card.categories-list swp-data-table-cell {
|
|
padding: var(--spacing-5) 0;
|
|
|
|
&:last-child {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
/* Mono font for service count */
|
|
swp-card.categories-list swp-data-table-row swp-data-table-cell:nth-child(2) {
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
swp-card.categories-list swp-data-table-row:hover {
|
|
background: var(--color-background-hover);
|
|
}
|
|
|
|
swp-card.categories-list swp-data-table-row:hover swp-row-toggle {
|
|
color: var(--color-teal);
|
|
}
|