PlanTempusApp/PlanTempus.Application/wwwroot/css/services.css
Janus C. H. Knudsen 4cf30e1f27 Add services feature with mock data and components
Introduces comprehensive services management module with:
- Dynamic service and category tables
- Localization support for services section
- Mock data for services and categories
- Responsive UI components for services listing
- Menu navigation and styling updates

Enhances application's service management capabilities
2026-01-15 23:29:26 +01:00

236 lines
5.4 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;
font-size: var(--font-size-base);
color: var(--color-text);
width: 100%;
&::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);
}