/** 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%; } } `;