/* Shared state template: homepage tokens, 1440px container, no global overrides. */
.dsf-state { background: var(--dsf-color-surface); }
.dsf-state [id] { scroll-margin-top: calc(var(--dsf-header-height, 5rem) + var(--dsf-admin-offset, 0px) + 24px); }
.dsf-state .dsf-button { display: inline-flex; align-items: center; justify-content: center; gap: 10px; min-block-size: 48px; padding: 12px 20px; border: 1px solid transparent; border-radius: var(--dsf-radius-medium); background: var(--dsf-color-accent); color: var(--dsf-color-surface); font-weight: 600; line-height: 1.4; text-decoration: none; cursor: pointer; }
.dsf-state .dsf-button:hover { background: var(--dsf-color-accent-hover); color: var(--dsf-color-surface); }
.dsf-state .dsf-button--secondary { border-color: var(--dsf-color-control-border); background: var(--dsf-color-surface); color: var(--dsf-color-primary); }
.dsf-state .dsf-button--secondary:hover { border-color: var(--dsf-color-accent); background: var(--dsf-color-tint); color: var(--dsf-color-primary); }
.dsf-state .dsf-button--subtle { min-block-size: 44px; padding: 10px 14px; border-color: var(--dsf-color-border); background: var(--dsf-color-background); color: var(--dsf-color-primary); font-size: var(--dsf-text-small); }
.dsf-state .dsf-button--subtle:hover { border-color: var(--dsf-color-accent); background: var(--dsf-color-tint); color: var(--dsf-color-primary); }
.dsf-state .dsf-button svg { flex: 0 0 auto; }
.dsf-state :where(button:disabled, [aria-disabled=true]) { opacity: .55; cursor: not-allowed; }
.dsf-state summary:focus-visible { outline-offset: 3px; }
.dsf-state__hero { padding-block: var(--dsf-space-7); background: var(--dsf-color-tint); border-block-end: 1px solid var(--dsf-color-border); }
.dsf-state__hero-grid { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: var(--dsf-space-7); align-items: center; }
.dsf-state__hero-grid > *, .dsf-state__calendar-layout > *, .dsf-state__download-layout > * { min-inline-size: 0; }
.dsf-state__breadcrumb { display: flex; flex-wrap: wrap; gap: var(--dsf-space-2); margin-block-end: var(--dsf-space-3); color: var(--dsf-color-muted); font-size: var(--dsf-text-small); }
.dsf-state h1 { margin: 0; font-size: clamp(2rem, 3.4vw, 3.25rem); font-weight: 800; }
.dsf-state__intro { max-inline-size: 62ch; margin-block-start: var(--dsf-space-4); font-size: var(--dsf-text-lead); }
.dsf-state__finder { margin-block-start: var(--dsf-space-5); }
.dsf-state__field { min-inline-size: 0; }
.dsf-state__field label { display: block; margin-block-end: 6px; color: var(--dsf-color-primary); font-size: var(--dsf-text-small); font-weight: 600; }
.dsf-state__select { position: relative; }
.dsf-state__select::after, .dsf-state__switch summary::after { content: ''; position: absolute; inset-inline-end: 18px; inset-block-start: 19px; inline-size: 7px; block-size: 7px; border-inline-end: 1.75px solid var(--dsf-color-primary); border-block-end: 1.75px solid var(--dsf-color-primary); transform: rotate(45deg); pointer-events: none; }
.dsf-state select { appearance: none; inline-size: 100%; block-size: 48px; min-block-size: 48px; margin: 0; padding: 0 44px 0 14px; border: 1px solid var(--dsf-color-control-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-surface); font: inherit; line-height: 1.4; color: var(--dsf-color-primary); }
.dsf-state__filters { display: grid; grid-template-columns: 105px minmax(0, 1fr); align-items: end; gap: 12px; }
.dsf-state__filters > button { grid-column: 1 / -1; justify-self: start; }
.dsf-state__filter-value { margin-block-start: 8px; color: var(--dsf-color-primary); font-size: var(--dsf-text-small); overflow-wrap: anywhere; }
.dsf-state__section-top > .dsf-state__filter-value { grid-column: 1 / -1; margin-block-start: -12px; }
.dsf-state__switch { position: relative; margin-block-end: var(--dsf-space-3); max-inline-size: 26rem; }
.dsf-state__switch summary { position: relative; display: flex; align-items: center; min-block-size: 48px; padding: 10px 44px 10px 14px; border: 1px solid var(--dsf-color-control-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-surface); color: var(--dsf-color-primary); font-weight: 600; cursor: pointer; list-style: none; }
.dsf-state__switch summary::-webkit-details-marker { display: none; }
.dsf-state__switch ul { position: absolute; z-index: 6; inset-block-start: calc(100% + 8px); inline-size: 100%; max-block-size: 20rem; overflow: auto; margin: 0; padding: 8px; list-style: none; border: 1px solid var(--dsf-color-control-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-surface); }
.dsf-state__switch a { display: block; padding: 10px; text-decoration: none; }
.dsf-state__switch a:hover, .dsf-state__switch [aria-current=page] { background: var(--dsf-color-tint); }
.dsf-state__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-block-start: var(--dsf-space-4); }
.dsf-state__actions .dsf-button { font-size: var(--dsf-text-small); }
.dsf-state__feedback { margin-block-start: 8px; color: var(--dsf-color-accent-hover); font-size: var(--dsf-text-small); }
.dsf-state__feedback:empty { display: none; }
.dsf-state__feedback[role=alert] { color: var(--dsf-color-error); }
.dsf-state__next { padding: clamp(20px, 3vw, 32px); border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-large); background: var(--dsf-color-surface); }
.dsf-state__next h2 { margin-block-end: 12px; color: var(--dsf-color-accent-hover); font-size: var(--dsf-text-body); letter-spacing: normal; }
.dsf-state__next > strong { display: block; color: var(--dsf-color-primary); font-family: var(--dsf-font-heading); font-size: clamp(1.5rem, 2.5vw, 2rem); line-height: 1.25; }
.dsf-state__next-dates { margin-block-start: 12px; font-variant-numeric: tabular-nums; }
.dsf-state__countdown { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-block-start: 24px; }
.dsf-state__countdown > div { padding: 16px 4px 12px; border-radius: var(--dsf-radius-medium); background: var(--dsf-color-tint); text-align: center; }
.dsf-state__countdown > div:first-child { background: var(--dsf-color-accent); color: var(--dsf-color-surface); }
.dsf-state__countdown > div:nth-child(3) { background: #E2F7EE; }
.dsf-state__countdown > div:nth-child(4) { background: #FFF2C6; }
.dsf-state__countdown strong { display: block; font-family: var(--dsf-font-heading); font-size: clamp(1.75rem, 3.1vw, 3rem); font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums; }
.dsf-state__countdown span { display: block; margin-block-start: 8px; font-size: .75rem; font-weight: 600; }
.dsf-state__countdown-message { margin-block-start: 16px; color: var(--dsf-color-primary); font-size: var(--dsf-text-small); }
.dsf-state__section { padding-block: var(--dsf-space-7); }
.dsf-state__section--tint { background: var(--dsf-color-background); border-block: 1px solid var(--dsf-color-border); }
.dsf-state__section h2 { font-size: var(--dsf-text-h2); }
.dsf-state__section-top { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--dsf-space-5); align-items: end; }
.dsf-state__section-top .dsf-state__filters { grid-template-columns: 105px minmax(0, 1fr) auto; }
.dsf-state__section-top .dsf-state__filters > button { grid-column: auto; }
.dsf-state__copy { max-inline-size: var(--dsf-measure); margin-block: var(--dsf-space-4) var(--dsf-space-5); }
.dsf-state__copy > * + * { margin-block-start: var(--dsf-space-4); }
.dsf-state__copy ul { padding-inline-start: var(--dsf-space-5); }
.dsf-state__copy li + li { margin-block-start: var(--dsf-space-2); }
.dsf-state__review, .dsf-state__scope { color: var(--dsf-color-muted); font-size: var(--dsf-text-small); }
.dsf-state__review { margin-block: var(--dsf-space-3); }
.dsf-state__table-scroll { overflow-x: auto; border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-surface); scrollbar-width: thin; scrollbar-color: var(--dsf-color-control-border) var(--dsf-color-background); }
.dsf-state__table { inline-size: 100%; min-inline-size: 36rem; border-collapse: collapse; text-align: start; font-variant-numeric: tabular-nums; }
.dsf-state__table :where(th, td) { padding: 12px 24px; vertical-align: middle; text-align: start; border-block-end: 1px solid var(--dsf-color-border); }
.dsf-state__table thead th { background: var(--dsf-color-primary); color: var(--dsf-color-surface); font-size: var(--dsf-text-small); }
.dsf-state__table tbody th { color: var(--dsf-color-primary); font-weight: 600; }
.dsf-state__table tbody tr:nth-child(even) { background: var(--dsf-color-background); }
.dsf-state__table tbody tr:last-child > * { border-block-end: 0; }
.dsf-state__table time { white-space: nowrap; }
.dsf-state__table small { display: block; max-inline-size: 50ch; margin-block-start: 4px; color: var(--dsf-color-muted); font-weight: 400; }
.dsf-state__date { display: inline-block; padding: 4px 10px; border-radius: 6px; background: var(--dsf-color-tint); color: var(--dsf-color-primary); font-size: var(--dsf-text-small); font-weight: 600; }
.dsf-state__table [data-holiday-type=osterferien] .dsf-state__date, .dsf-state__table [data-holiday-type=pfingstferien] .dsf-state__date { background: #E2F7EE; }
.dsf-state__table [data-holiday-type=sommerferien] .dsf-state__date { background: #FFF2C6; }
.dsf-state__table [data-holiday-type=herbstferien] .dsf-state__date { background: #FFE2DB; }
.dsf-state__table [data-holiday-type=weihnachtsferien] .dsf-state__date { background: #EEE7FF; }
.dsf-state__unpublished td { color: var(--dsf-color-muted); font-size: var(--dsf-text-small); }
.dsf-state__carry { margin-block-start: 16px; padding: 16px; border-radius: var(--dsf-radius-medium); background: var(--dsf-color-tint); font-size: var(--dsf-text-small); }
.dsf-state__archive { margin-block-start: 20px; }
.dsf-state__archive > summary { inline-size: fit-content; max-inline-size: 100%; list-style: none; text-align: start; }
.dsf-state__archive > summary::-webkit-details-marker { display: none; }
.dsf-state__archive[open] .dsf-state__plus { display: none; }
.dsf-state__archive h3 { margin-block: 24px 12px; }
.dsf-state__archive > .dsf-state__table-scroll { margin-block-start: 16px; }
.dsf-state__calendar-layout { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); align-items: start; gap: var(--dsf-space-7); }
.dsf-state__calendar-hint { color: var(--dsf-color-muted); font-size: var(--dsf-text-small); }
.dsf-state__calendar-copy > .dsf-state__scope { margin-block-start: 20px; }
.dsf-state__calendar { inline-size: 100%; padding: 24px; border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-large); background: var(--dsf-color-surface); }
.dsf-state__calendar-controls { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 12px; }
.dsf-state__month-navigation { display: flex; justify-content: space-between; gap: 12px; margin-block: 16px; }
.dsf-state__month { inline-size: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 4px; text-align: center; }
.dsf-state__month caption { margin-block: 4px 12px; color: var(--dsf-color-primary); font-family: var(--dsf-font-heading); font-size: var(--dsf-text-lead); font-weight: 700; }
.dsf-state__month th { padding-block: 6px; color: var(--dsf-color-muted); font-size: var(--dsf-text-small); }
.dsf-state__month td { padding: 0; }
.dsf-state__month :where(button, time) { display: grid; place-items: center; inline-size: 100%; min-block-size: 48px; padding: 4px 0; border: 1px solid transparent; border-radius: var(--dsf-radius-small); color: var(--dsf-color-text); font: inherit; font-variant-numeric: tabular-nums; }
.dsf-state__month button { background: var(--dsf-color-tint); cursor: pointer; }
.dsf-state__month button:hover { border-color: var(--dsf-color-accent); }
.dsf-state__month .has-public button { background: #FFE2DB; }
.dsf-state__month .has-school.has-public button { background: #EEE7FF; }
.dsf-state__month .is-regional button { border: 2px dashed var(--dsf-color-control-border); }
.dsf-state__month [aria-pressed=true] { outline: 2px solid var(--dsf-color-accent); outline-offset: -2px; font-weight: 700; }
.dsf-state__legend { display: grid; gap: 12px; margin-block-start: 24px; font-size: var(--dsf-text-small); }
.dsf-state__legend span { display: flex; align-items: center; gap: 10px; }
.dsf-state__legend span::before { content: ''; flex: 0 0 16px; block-size: 16px; border: 1px solid var(--dsf-color-border); border-radius: 4px; background: var(--dsf-color-tint); }
.dsf-state__legend span:nth-child(2)::before { background: #FFE2DB; }
.dsf-state__legend span:nth-child(3)::before { background: #EEE7FF; }
.dsf-state__legend span:nth-child(4)::before { border: 2px dashed var(--dsf-color-control-border); background: var(--dsf-color-surface); }
.dsf-state__day-detail { min-block-size: 2.75rem; margin-block-start: 16px; padding-block-start: 16px; border-block-start: 1px solid var(--dsf-color-border); color: var(--dsf-color-primary); font-size: var(--dsf-text-small); }
.dsf-state__facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--dsf-space-5); max-inline-size: none; }
.dsf-state__facts p { margin: 0; padding: var(--dsf-space-5); border-radius: var(--dsf-radius-large); background: #E2F7EE; }
.dsf-state__facts p:nth-child(2) { background: #FFF2C6; }
.dsf-state__facts p:nth-child(3) { background: #EEE7FF; }
.dsf-state__download-toolbar { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 16px; padding: 16px 20px; margin-block-end: 20px; border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-background); }
.dsf-state__categories { display: flex; flex-wrap: wrap; gap: 10px; min-inline-size: 0; border: 0; padding: 0; margin: 0; }
.dsf-state__categories legend { padding: 0; margin-block-end: 6px; color: var(--dsf-color-muted); font-size: var(--dsf-text-small); }
.dsf-state__categories label { display: inline-flex; align-items: center; gap: 10px; min-block-size: 44px; padding: 8px 16px; border: 1px solid var(--dsf-color-control-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-surface); color: var(--dsf-color-primary); font-weight: 600; cursor: pointer; }
.dsf-state__categories label:has(:checked) { border-color: var(--dsf-color-accent); background: var(--dsf-color-tint); }
.dsf-state__categories label:has(:disabled) { opacity: .55; cursor: not-allowed; }
.dsf-state__categories input { margin: 0; inline-size: 16px; block-size: 16px; }
.dsf-state__download-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); gap: 24px; }
.dsf-state__preview-panel { display: flex; flex-direction: column; gap: 16px; padding: 24px; border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-large); background: var(--dsf-color-background); }
.dsf-state__preview-panel > button { align-self: start; margin-block-start: auto; }
.dsf-state__preview-panel .dsf-download__months { gap: 16px; }
.dsf-state__preview-panel .dsf-download__preview-dates { gap: 12px; }
.dsf-state__download-options { display: grid; gap: 12px; }
.dsf-state__download-option { display: grid; grid-template-columns: 36px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 16px; border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-medium); }
.dsf-state__format-icon { display: grid; place-items: center; inline-size: 36px; block-size: 44px; border-radius: 8px; background: var(--dsf-color-tint); color: var(--dsf-color-accent-hover); }
.dsf-state__download-option:nth-child(2) .dsf-state__format-icon { background: #E2F7EE; color: var(--dsf-color-primary); }
.dsf-state__download-option:nth-child(3) .dsf-state__format-icon { background: #FFF2C6; color: var(--dsf-color-primary); }
.dsf-state__download-option:nth-child(4) .dsf-state__format-icon { background: #EEE7FF; color: var(--dsf-color-primary); }
.dsf-state__download-option h3 { font-size: var(--dsf-text-lead); }
.dsf-state__download-option p { margin-block-start: 4px; color: var(--dsf-color-muted); font-size: var(--dsf-text-small); line-height: 1.4; }
.dsf-state__download-option .dsf-button { font-size: var(--dsf-text-small); }
.dsf-state__download-form > .dsf-state__scope { margin-block-start: 16px; }
.dsf-state__type-links { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; padding: 0; list-style: none; }
.dsf-state__type-links a { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-block-size: 56px; padding: 16px; border: 1px solid var(--dsf-color-border); border-radius: var(--dsf-radius-medium); background: var(--dsf-color-surface); color: var(--dsf-color-primary); font-weight: 600; text-decoration: none; }
.dsf-state__type-links a::after { content: ''; flex: 0 0 7px; block-size: 7px; border-block-start: 1.75px solid; border-inline-end: 1.75px solid; transform: rotate(45deg); }
.dsf-state__type-links a:hover { background: var(--dsf-color-tint); border-color: var(--dsf-color-accent); }
.dsf-state__neighbors { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; margin-block-start: 20px; }
.dsf-state__neighbors a { display: inline-flex; align-items: center; min-block-size: 44px; }
.dsf-state.is-loading .dsf-state__table-scroll, .dsf-state.is-loading .dsf-state__calendar { opacity: .55; }
@media (max-width: 75rem) {
 .dsf-state__section-top { grid-template-columns: minmax(0, 1fr); }
 .dsf-state__section-top .dsf-state__filters { max-inline-size: 52rem; }
 .dsf-state__download-option { grid-template-columns: 36px minmax(0, 1fr); }
 .dsf-state__download-option .dsf-button { grid-column: 1 / -1; }
}
@media (max-width: 56rem) {
 .dsf-state__hero-grid, .dsf-state__calendar-layout, .dsf-state__download-layout { grid-template-columns: minmax(0, 1fr); gap: 24px; }
 .dsf-state__hero-grid { align-items: start; }
 .dsf-state__hero .dsf-state__filters { grid-template-columns: 105px minmax(0, 1fr) auto; }
 .dsf-state__hero .dsf-state__filters > button { grid-column: auto; }
 .dsf-state__countdown strong { font-size: clamp(2rem, 6vw, 3rem); }
 .dsf-state__next { max-inline-size: none; }
 .dsf-state__calendar-copy .dsf-state__copy { margin-block-end: 12px; }
 .dsf-state__legend { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 16px; margin-block-start: 16px; }
 .dsf-state__facts { grid-template-columns: minmax(0, 1fr); gap: 12px; }
 .dsf-state__type-links { grid-template-columns: repeat(2, minmax(0, 1fr)); }
 .dsf-state__download-option { grid-template-columns: 36px minmax(0, 1fr) auto; }
 .dsf-state__download-option .dsf-button { grid-column: auto; }
}
@media (max-width: 40rem) {
 .dsf-state__hero, .dsf-state__section { padding-block: var(--dsf-space-6); }
 .dsf-state__hero .dsf-state__filters, .dsf-state__section-top .dsf-state__filters { grid-template-columns: 95px minmax(0, 1fr); }
 .dsf-state__hero .dsf-state__filters > button, .dsf-state__section-top .dsf-state__filters > button { grid-column: 1 / -1; inline-size: 100%; }
 .dsf-state__switch { max-inline-size: none; }
 .dsf-state__actions { display: grid; grid-template-columns: minmax(0, 1fr); }
 .dsf-state__next { padding: 20px 16px; }
 .dsf-state__countdown { gap: 6px; margin-block-start: 16px; }
 .dsf-state__countdown span { font-size: .6875rem; }
 .dsf-state__calendar { padding: 16px 10px; }
 .dsf-state__calendar-controls { grid-template-columns: minmax(0, 1fr); }
 .dsf-state__calendar-controls > button { inline-size: 100%; }
 .dsf-state__month-navigation { gap: 8px; }
 .dsf-state__month-navigation .dsf-button { gap: 6px; padding: 10px 8px; font-size: .75rem; }
 .dsf-state__month-navigation svg { inline-size: 16px; }
 .dsf-state__month { border-spacing: 2px; }
 .dsf-state__month :where(button, time) { min-block-size: 44px; }
 .dsf-state__legend { grid-template-columns: minmax(0, 1fr); }
 .dsf-state__type-links { grid-template-columns: minmax(0, 1fr); }
 .dsf-state__table :where(th, td) { padding-inline: 16px; }
 .dsf-state__archive > summary { inline-size: 100%; justify-content: space-between; }
 .dsf-state__preview-panel { padding: 16px; }
 .dsf-state__download-option { grid-template-columns: 36px minmax(0, 1fr); }
 .dsf-state__download-option .dsf-button { grid-column: 1 / -1; }
 .dsf-state__download-toolbar { padding: 16px; }
 .dsf-state__preview-panel .dsf-download__months { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
 .dsf-state__preview-panel .dsf-download__calendar { font-size: .6875rem; }
 .dsf-state__preview-panel .dsf-download__calendar th { font-size: .625rem; }
}
@media (forced-colors: active) { .dsf-state select { appearance: auto; } .dsf-state__select::after { display: none; } .dsf-state__date { border: 1px solid; } }
@media print {
 .dsf-state__finder, .dsf-state__actions, .dsf-state__filters, .dsf-state__calendar-controls, .dsf-state__month-navigation, .dsf-state__categories, .dsf-state__download-options, .dsf-state__preview-panel > button { display: none; }
 .dsf-state__hero-grid, .dsf-state__facts, .dsf-state__calendar-layout, .dsf-state__download-layout { display: block; }
 .dsf-state__hero, .dsf-state__section--tint { background: none; }
 .dsf-state__section { padding-block: 24px; }
 .dsf-state__table { min-inline-size: 0; }
}
