Files
HomeAssistantVS/custom_components/maintenance_supporter/frontend-src/calendar-styles.ts
T
2026-07-14 23:57:03 -04:00

209 lines
6.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** Calendar tab / card styles — shared between panel-styles.ts and the
* standalone maintenance-supporter-calendar-card.
*
* Extracted from panel-styles.ts in v1.9.0 so the new Lovelace card can
* render identically to the panel's Calendar tab without dragging in the
* full panel CSS.
*/
import { css } from "lit";
export const calendarStyles = css`
.cal-controls {
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
padding: 12px 16px;
border-bottom: 1px solid var(--divider-color);
}
.cal-window-chips {
display: flex;
gap: 4px;
background: var(--card-background-color, var(--ha-card-background, #1c1c1c));
border-radius: 999px;
padding: 3px;
}
.cal-window-chip {
padding: 6px 14px;
border: none;
background: transparent;
color: var(--secondary-text-color);
font-size: 13px;
font-weight: 500;
cursor: pointer;
border-radius: 999px;
transition: background 0.12s, color 0.12s;
}
.cal-window-chip:hover { color: var(--primary-text-color); }
.cal-window-chip.active {
background: var(--primary-color);
color: var(--text-primary-color, #fff);
}
/* v2.2.0 — past-window chips: visually distinguished from forward chips
so the user grasps the time-direction switch at a glance. Uses a
muted secondary tone instead of the primary blue. v2.3.x: explicit
"N d" / "+N d" prefixes + dot separator so past vs forward groups
read at a glance instead of being two pill rows that look identical
except for a small arrow. (User feedback: *"das 30 und die + sind
noch schlecht angeordnet"*.) */
.cal-past-chips {
/* margin-right replaced by explicit separator below */
}
.cal-past-chip.active {
background: var(--secondary-text-color, #888);
}
.cal-chip-separator {
color: var(--divider-color);
font-size: 8px;
align-self: center;
margin: 0 2px;
line-height: 1;
}
.cal-user-filter {
margin-left: auto;
padding: 6px 10px;
background: var(--card-background-color, var(--ha-card-background, #1c1c1c));
color: var(--primary-text-color);
border: 1px solid var(--divider-color);
border-radius: 6px;
font-size: 13px;
cursor: pointer;
}
.cal-rolling { padding: 8px 16px 32px; }
.cal-day-row {
display: flex;
gap: 12px;
padding: 12px 0;
border-bottom: 1px solid var(--divider-color);
}
.cal-day-pill {
width: 56px;
height: 56px;
border-radius: 12px;
background: var(--card-background-color, var(--ha-card-background, #1c1c1c));
border: 1px solid var(--divider-color);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.cal-day-pill.cal-today {
background: var(--primary-color);
border-color: var(--primary-color);
}
.cal-pill-weekday {
font-size: 10px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.4px;
color: var(--secondary-text-color);
}
.cal-pill-day {
font-size: 20px;
font-weight: 700;
color: var(--primary-text-color);
line-height: 1.1;
}
.cal-day-pill.cal-today .cal-pill-weekday,
.cal-day-pill.cal-today .cal-pill-day {
color: var(--text-primary-color, #fff);
}
.cal-day-content { flex: 1; min-width: 0; }
.cal-day-header {
display: flex;
align-items: baseline;
gap: 8px;
margin-bottom: 6px;
}
.cal-day-month { color: var(--secondary-text-color); font-size: 13px; }
.cal-day-today-badge {
color: var(--primary-color);
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.cal-empty {
color: var(--secondary-text-color);
font-size: 13px;
font-style: italic;
padding: 4px 0 4px;
}
.cal-event {
display: flex;
align-items: center;
gap: 10px;
padding: 8px 0;
cursor: pointer;
border-radius: 4px;
transition: background 0.12s;
}
.cal-event:hover { background: var(--state-icon-color, rgba(255,255,255,0.04)); }
.cal-event-projected { opacity: 0.55; }
.cal-event-body { flex: 1; min-width: 0; }
.cal-event-title {
font-size: 14px;
color: var(--primary-text-color);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.cal-event-recur {
display: block;
font-size: 11px;
color: var(--secondary-text-color);
margin-top: 2px;
}
.cal-event-icon {
--mdc-icon-size: 18px;
flex-shrink: 0;
}
.cal-source-time { color: var(--secondary-text-color); }
.cal-source-sensor { color: var(--primary-color); }
.cal-event-prediction {
display: inline-block;
font-size: 11px;
margin-top: 2px;
padding: 1px 6px;
border-radius: 999px;
background: var(--card-background-color, var(--ha-card-background, #1c1c1c));
border: 1px solid var(--divider-color);
}
.cal-conf-high { color: var(--success-color, #4caf50); border-color: #4caf5044; }
.cal-conf-medium { color: var(--warning-color, #f9a825); border-color: #f9a82544; }
.cal-conf-low { color: var(--error-color, #d32f2f); border-color: #d32f2f44; }
.cal-event-cost {
font-size: 12px;
color: var(--secondary-text-color);
flex-shrink: 0;
}
.cal-status-pill {
flex-shrink: 0;
padding: 2px 8px;
border-radius: 999px;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.4px;
color: #fff;
}
/* Same tokens as .status-badge (status-constants.ts) — the calendar used
to keep its own palette (triggered was even BLUE here) so identical
statuses wore different colors per view, and none followed the theme. */
.cal-status-overdue { background: var(--error-color, #f44336); }
.cal-status-triggered { background: var(--deep-orange-color, #ff5722); }
.cal-status-due_soon { background: var(--warning-color, #ff9800); color: #000; }
/* Dark text — white on green is only 2.8:1 (below the 3:1 UI floor). */
.cal-status-ok { background: var(--success-color, #4caf50); color: #000; }
@media (max-width: 600px) {
.cal-controls { padding: 10px 12px; }
.cal-rolling { padding: 6px 12px 24px; }
.cal-day-pill { width: 48px; height: 48px; }
.cal-pill-day { font-size: 17px; }
.cal-user-filter { margin-left: 0; width: 100%; }
}
`;