.course-calendar { max-width: 1600px; --calendar-site-header-height:4rem; --calendar-scroll-offset:13rem; }
.calendar-sticky-controls { position:sticky; top:var(--calendar-site-header-height); z-index:40; padding:.75rem 0; margin-bottom:1.5rem; background:var(--color-bg, var(--color-surface)); border-bottom:1px solid var(--color-border); }
.calendar-sticky-controls .calendar-heading { margin-bottom:.75rem; }
.calendar-sticky-controls .calendar-navigation { margin-bottom:0; }
.calendar-navigation-buttons { display:flex; align-items:center; gap:.75rem; }
.calendar-navigation-buttons > [aria-disabled="true"] { opacity:.45; cursor:default; }
.calendar-visible-period { font-weight:700; color:var(--color-primary); text-transform:capitalize; }
.calendar-subscription:not([open]) { display:none; }
.calendar-subscription::backdrop { background:rgba(0,0,0,.55); }
.calendar-subscription-header { display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; margin-bottom:1rem; }
.calendar-subscription-header h2 { margin:0; flex:1; }
.calendar-subscription-header button { flex-shrink:0; }
.calendar-subscription-help h3 { font-weight:700; font-size:1.1rem; }
.calendar-subscription { margin:auto; width:calc(100% - 2rem); max-width:760px; max-height:calc(100dvh - 2rem); overflow-y:auto; color:var(--color-text-strong); padding:1.25rem; border:1px solid var(--color-border); border-radius:12px; background:var(--color-surface-subtle); font-size:1rem; line-height:1.6; }
.calendar-subscription-intro { display:flex; align-items:center; justify-content:space-between; gap:1rem 2rem; flex-wrap:wrap; }
.calendar-subscription-intro > div { flex:1 1 25rem; }
.calendar-subscription h2 { font-size:1.25rem; font-weight:700; margin-bottom:.35rem; }
.calendar-subscription-note { color:var(--color-text-muted); margin-top:.75rem; }
.calendar-subscription-help { margin-top:.75rem; }
.calendar-subscription summary { padding:.6rem 0; cursor:pointer; font-weight:700; color:var(--color-primary); }
.calendar-subscription summary:focus-visible,.calendar-subscription input:focus-visible { outline:3px solid var(--color-primary); outline-offset:3px; }
.calendar-subscription-help > details { border-top:1px solid var(--color-border); margin-top:.5rem; }
.calendar-subscription-help p { margin:.5rem 0; }
.calendar-subscription ol { list-style:decimal; padding-left:1.5rem; margin:.5rem 0; }
.calendar-subscription li { padding:.2rem 0; }
.calendar-subscription-help a { color:var(--color-primary); text-decoration:underline; }
.calendar-subscription-copy { margin:1rem 0; }
.calendar-subscription-copy label { display:block; font-weight:700; margin-bottom:.4rem; }
.calendar-subscription-copy > div { display:flex; gap:.75rem; flex-wrap:wrap; }
.calendar-subscription-copy input { flex:1 1 18rem; min-width:0; width:100%; padding:.75rem; border:1px solid var(--color-border); border-radius:8px; background:var(--color-surface); color:var(--color-text-strong); font-size:1rem; }
#calendar-today,.course-calendar [id^="day-"],.course-calendar [id^="month-"],.course-calendar [id^="week-"],#calendar-filters { scroll-margin-top:var(--calendar-scroll-offset); }
.calendar-filters { border-top:1px solid var(--color-border); border-bottom:1px solid var(--color-border); padding:1rem 0; margin-bottom:1.5rem; }
.calendar-filter-row,.calendar-filter-groups,.calendar-filter-group { display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:.5rem; }
.calendar-filter-row { margin-bottom:.75rem; }
.calendar-filter-groups { gap:.75rem 1.5rem; }
.calendar-filter-label { width:100%; text-align:center; font-size:.75rem; font-weight:700; color:var(--color-text-muted); }
.calendar-filter-chip-form { display:inline-flex; min-width:0; max-width:100%; }
.calendar-filter-chip-form button { white-space:normal; }
.calendar-filters-mobile { display:none; }
.calendar-filter-summary { display:flex; flex-wrap:wrap; justify-content:center; gap:.5rem 1rem; margin-top:1rem; font-size:.875rem; color:var(--color-text-muted); }
.calendar-filter-summary a { color:var(--color-primary); text-decoration:underline; }
.calendar-course-status { font-size:.7rem; color:var(--color-text-muted); font-weight:700; }
.calendar-heading { display:flex; align-items:center; justify-content:space-between; gap:1.5rem; margin-bottom:1.5rem; flex-wrap:wrap; }
.calendar-heading-actions { display:flex; align-items:center; gap:.75rem; max-width:100%; }
.calendar-heading-actions > button { min-width:0; white-space:normal; }
.calendar-heading-actions .calendar-view-switch { flex-shrink:0; }
.calendar-view-switch { display:inline-flex; padding:4px; gap:4px; background:var(--color-surface-subtle); border:1px solid var(--color-border); border-radius:12px; }
.calendar-view-switch a { padding:.6rem 1.25rem; border-radius:8px; font-weight:700; color:var(--color-text-muted); }
.calendar-view-switch a[aria-current] { background:var(--color-primary); color:var(--color-text-inverse); }
.calendar-view-switch a:focus-visible,.calendar-course:focus-visible { outline:3px solid var(--color-primary); outline-offset:3px; }
.calendar-navigation { display:flex; align-items:center; flex-wrap:wrap; gap:.75rem; margin-bottom:1.5rem; }
.calendar-navigation > button:disabled { opacity:.45; cursor:default; }
.calendar-legend { display:flex; flex-wrap:wrap; gap:.75rem 1.5rem; margin-right:auto; font-size:.875rem; color:var(--color-text-muted); }
.calendar-legend span { display:inline-flex; align-items:center; gap:.5rem; }
.calendar-legend i { width:16px; height:16px; border-radius:4px; border:1px solid var(--color-border); }
.calendar-legend-holiday { background:var(--color-error-light); }
.calendar-legend-school { background:var(--color-calendar-school-holiday); }
.calendar-admin { margin-bottom:1rem; }
.calendar-period-heading { display:flex; align-items:baseline; flex-wrap:wrap; gap:1rem; padding:1.25rem; }
.calendar-period-heading h2,.calendar-month-title { font-size:1.6rem; font-weight:700; }
.calendar-period-heading > span { font-size:.875rem; color:var(--color-text-muted); }
.calendar-week,.calendar-month { border:1px solid var(--color-border); border-radius:16px; background:var(--color-surface); overflow:hidden; box-shadow:var(--shadow-md); }
.calendar-week-grid { display:grid; grid-template-columns:3.4rem repeat(7,minmax(0,1fr)); align-items:stretch; }
.calendar-week-day,.calendar-week-axis { display:grid; grid-row:1 / -1; grid-template-rows:subgrid; min-width:0; }
.calendar-week-axis { grid-column:1; background:var(--color-surface-subtle); }
.calendar-week-axis-heading { padding:.8rem .25rem; font-size:.65rem; color:var(--color-text-muted); }
.calendar-week-time { font-size:.7rem; color:var(--color-text-muted); text-align:center; padding-top:3px; }
.calendar-week-day { grid-template-columns:repeat(var(--day-lanes),minmax(0,1fr)); border-left:1px solid var(--color-border); background:var(--color-surface); }
.calendar-week-day-heading { grid-row:1; grid-column:1 / -1; padding:.8rem .5rem; background:var(--color-surface-subtle); border-bottom:1px solid var(--color-border); }
.calendar-week-day-heading h3 { font-size:.85rem; font-weight:700; color:var(--color-text-strong); overflow-wrap:anywhere; }
.calendar-week-day-heading time { display:block; margin-top:.2rem; font-size:1.25rem; color:var(--color-primary); }
.calendar-week-slot { grid-column:1 / -1; border-top:1px dotted var(--color-border); pointer-events:none; }
.calendar-week-slot.is-hour { border-top-style:solid; }
.calendar-week-day > .calendar-course { z-index:1; align-self:stretch; margin:3px; }
.calendar-week-untimed { grid-column:1 / -1; padding:3px; display:grid; gap:5px; }
.calendar-empty-day { grid-column:1 / -1; padding:.7rem .5rem; font-size:.8rem; color:var(--color-text-muted); z-index:1; }
.calendar-course { display:flex; flex-direction:column; gap:.4rem; min-width:0; padding:.65rem; border:1px solid var(--color-primary); border-left-width:3px; border-radius:8px; background:var(--color-calendar-course); color:var(--color-calendar-course-text); text-decoration:none; overflow-wrap:anywhere; }
.calendar-course:hover { background:var(--color-calendar-course-hover); }
.calendar-course-title { font-size:.85rem; font-weight:700; line-height:1.35; }
.calendar-course-detail { display:flex; align-items:baseline; gap:.35rem; font-size:.75rem; line-height:1.4; }
.calendar-course-detail i { flex:0 0 .8rem; font-size:.7rem; }
.calendar-course-detail > span { min-width:0; }
.calendar-months,.calendar-weeks { display:grid; gap:1.5rem; }
/* Auch eine kurze letzte Woche lässt sich unter der festen Leiste ausrichten. */
.calendar-weeks > .calendar-week:last-child { min-height:calc(100dvh - var(--calendar-scroll-offset)); }
.calendar-month-title { padding:1.25rem; text-transform:capitalize; }
.calendar-month-grid { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); }
.calendar-weekday { padding:.6rem; text-align:center; font-size:.8rem; font-weight:700; color:var(--color-text-muted); background:var(--color-surface-subtle); border:1px solid var(--color-border); }
.calendar-month-day { min-width:0; min-height:6rem; padding:.5rem; border:1px solid var(--color-border); }
.calendar-day-heading { display:flex; gap:.3rem; flex-wrap:wrap; font-size:.875rem; font-weight:700; }
.calendar-mobile-weekday { display:none; }
.calendar-day-info { display:block; font-size:.75rem; line-height:1.35; margin-top:.3rem; overflow-wrap:anywhere; }
.calendar-day-courses { display:grid; gap:.5rem; margin-top:.5rem; }
.calendar-today-label { display:inline-block; color:var(--color-calendar-today-text); font-size:.7rem; font-weight:700; margin-top:.2rem; }
.calendar-month-day.other-month { background:var(--color-surface-subtle); color:var(--color-history-text); }
.is-public-holiday,.is-public-holiday .calendar-week-day-heading { background:var(--color-error-light); }
.is-public-holiday .calendar-day-info { color:var(--color-error-strong); }
.is-school-holiday,.is-school-holiday .calendar-week-day-heading { background:var(--color-calendar-school-holiday); }
.is-school-holiday .calendar-day-info { color:var(--color-info); }
.is-today { box-shadow:inset 0 0 0 2px var(--color-calendar-today-ring); }
.is-today .calendar-week-day-heading { background:var(--color-success-light); }
@media (max-width:900px) {
    .calendar-filters-desktop { display:none; }
    .calendar-filters-mobile { display:grid; grid-template-columns:minmax(0,1fr); gap:.75rem; }
    .calendar-filters-mobile label { display:flex; flex-direction:column; gap:.3rem; min-width:0; color:var(--color-text-muted); font-size:.875rem; font-weight:700; }
    .calendar-filters-mobile select { width:100%; min-width:0; height:var(--button-height); min-height:var(--button-height); padding:0 .5rem; background:var(--color-surface); color:var(--color-text-body); border:1px solid var(--color-border); border-radius:8px; font-size:1rem; font-weight:400; line-height:1.2; }
    .calendar-filters-mobile select:focus-visible { outline:2px solid var(--color-primary); outline-offset:2px; }
    .calendar-filters-mobile.is-auto-submit .calendar-filters-apply { display:none; }
    .calendar-week-grid { display:block; }
    .calendar-week-axis,.calendar-week-slot { display:none; }
    .calendar-week-day { display:block; border-left:0; border-top:1px solid var(--color-border); padding-bottom:.75rem; }
    .is-filtered .calendar-week-day.is-empty,.is-filtered .calendar-month-day.is-empty { display:none; }
    .is-filtered .calendar-month-grid { display:block; }
    .is-filtered .calendar-weekday { display:none; }
    .is-filtered .calendar-month-day { min-height:0; padding:1rem; border-left:0; border-right:0; }
    .is-filtered .calendar-mobile-weekday { display:inline; }
    .is-filtered .calendar-day-heading { font-size:1rem; }
    /* Ein unsichtbares Scrollziel erhält die Heute-Navigation auch ohne Kurs. */
    .is-filtered #calendar-today.is-empty { display:block; height:0; min-height:0; padding:0; border:0; overflow:hidden; box-shadow:none; }
    .is-filtered #calendar-today.is-empty > * { display:none; }
    .calendar-week-day-heading { padding:1rem; }
    .calendar-week-day-heading h3 { display:flex; align-items:baseline; gap:.5rem; font-size:1rem; }
    .calendar-week-day-heading time { display:inline; margin:0; font-size:1rem; }
    .calendar-week-day > .calendar-course { margin:.75rem 1rem 0; }
    .calendar-week-untimed { padding:.75rem 1rem 0; gap:.75rem; }
    .calendar-course-title { font-size:1rem; }
    .calendar-course-detail { font-size:.875rem; }
    .calendar-empty-day { padding:1rem; }
    .calendar-heading { align-items:flex-start; gap:1rem; }
    .calendar-legend { width:100%; }
    .calendar-navigation-buttons { width:100%; }
    .calendar-navigation-buttons > a,.calendar-navigation-buttons > button { flex:1; }
    .calendar-sticky-controls .calendar-heading { align-items:center; gap:.5rem; }
    .calendar-sticky-controls h1 { font-size:1.5rem; }
    .calendar-view-switch a { padding:.4rem .75rem; }
    .calendar-navigation { gap:.5rem; }
    .calendar-legend { gap:.5rem 1rem; font-size:.8rem; }
    .calendar-month-grid { display:block; }
    .calendar-weekday,.calendar-month-day.other-month { display:none; }
    .calendar-month-day { min-height:0; padding:1rem; border-left:0; border-right:0; }
    .calendar-mobile-weekday { display:inline; }
    .calendar-day-heading { font-size:1rem; }
    .calendar-month-day:not(:has(.calendar-course)) .calendar-day-courses { margin:0; }
}
