/* Calendar grid */ .calendar-grid { display: grid; grid-template-columns: 56px repeat(7, 1fr); border: 1px solid oklch(var(--bc) / 0.1); border-radius: 0.5rem; overflow: hidden; position: relative; } .calendar-time-header { background: oklch(var(--b2)); border-bottom: 1px solid oklch(var(--bc) / 0.1); border-right: 1px solid oklch(var(--bc) / 0.1); } .calendar-day-header { text-align: center; padding: 0.25rem 0; background: oklch(var(--b2)); border-bottom: 1px solid oklch(var(--bc) / 0.1); border-right: 1px solid oklch(var(--bc) / 0.05); } .calendar-day-header:last-child { border-right: none; } .calendar-today { background: oklch(var(--p) / 0.07); } .calendar-time-label { font-size: 0.675rem; padding: 0.25rem 0.375rem; text-align: right; color: oklch(var(--bc) / 0.5); border-right: 1px solid oklch(var(--bc) / 0.1); border-bottom: 1px solid oklch(var(--bc) / 0.05); height: 3.5rem; } .calendar-cell { border-right: 1px solid oklch(var(--bc) / 0.05); border-bottom: 1px solid oklch(var(--bc) / 0.05); height: 3.5rem; } .calendar-cell:nth-child(8n) { border-right: none; } .calendar-cell-today { background: oklch(var(--p) / 0.03); } /* Calendar event overlay */ .calendar-overlay { display: grid; grid-template-columns: 56px repeat(7, 1fr); position: absolute; top: 0; left: 0; right: 0; pointer-events: none; } .calendar-overlay-time { /* matches the time column + day header height */ } .calendar-day-column { position: relative; /* total height = header row + 13 hour slots at 3.5rem each */ height: calc(13 * 3.5rem); margin-top: calc(0.25rem + 1rem + 1.5rem + 1px); /* day header height approx */ pointer-events: auto; } .calendar-event { position: absolute; left: 2px; right: 2px; border-left: 3px solid; border-radius: 0.25rem; padding: 0.125rem 0.25rem; overflow: hidden; cursor: pointer; text-decoration: none; color: inherit; z-index: 1; min-height: 1.25rem; transition: box-shadow 0.15s; } .calendar-event:hover { box-shadow: 0 2px 8px oklch(var(--bc) / 0.15); z-index: 2; } /* Responsive: stack on mobile */ @media (max-width: 768px) { .calendar-grid { grid-template-columns: 40px repeat(7, 1fr); } .calendar-overlay { grid-template-columns: 40px repeat(7, 1fr); } .calendar-time-label { font-size: 0.6rem; padding: 0.125rem 0.25rem; } .calendar-event { font-size: 0.625rem; } } /* Wrapper for positioning */ #calendar-grid { position: relative; } /* HTMX request-in-flight: swap button text + show spinner */ .htmx-request .btn-loading .btn-loading-text { display: inline; } .htmx-request .btn-loading .btn-default-text { display: none; } .htmx-request .btn-loading .loading { display: inline-block; } .btn-loading .btn-loading-text { display: none; } .btn-loading .loading { display: none; } /* Accessibility: focus-visible fallback */ :focus-visible { outline: 2px solid oklch(var(--p)); outline-offset: 2px; }