.appointment ul {
    margin: 0;
    padding: 0;
    margin-top: 1rem;
    padding-bottom: 1rem;
    border-bottom: 2px solid var(--color-green);
}

.appointment ul:last-child {
    border-bottom: 0px;
}

.appointment h3 {
    margin-top: 1.25rem;
    font-size: var(--fs-300);
    text-transform: uppercase;
    letter-spacing: 2px;
}

/* one appointment (snippets/appointment.php): date block | title, time/location, info, category */
.appointment-item {
    list-style: none;
    border: 1px var(--color-dark-grey) solid;
    width: 100%;
    display: grid;
    /* fixed date column, wider only for ranges across months like "22.12.–6.1." */
    grid-template-columns: minmax(6.5rem, max-content) minmax(0, 1fr);
    overflow: hidden;
    margin-bottom: 1rem;
    background: var(--color-white);
}

/* running appointment */
.appointment-item.is-running {
    border: 2px solid var(--color-link);
}

.appointment-date {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    gap: .125rem;
    padding: .75rem .5rem;
    background: var(--color-code-green);
    text-align: center;
    /* keep ranges like "19.–30." on one line */
    white-space: nowrap;
}
.appointment-weekday {
    font-size: var(--fs-200);
    font-weight: var(--fw-semi-bold);
    text-transform: uppercase;
    letter-spacing: 1px;
}
.appointment-day {
    font-size: var(--fs-500);
    font-weight: var(--fw-bold);
    line-height: 1.2;
}

.appointment-body {
    display: flex;
    flex-direction: column;
    gap: .375rem;
    padding: .75rem 1rem;
    /* allow the grid item to shrink, so overflow-wrap can break very long words */
    min-width: 0;
    overflow-wrap: break-word;
    hyphens: manual;
}
.appointment-body p {
    margin: 0;
}
.appointment-head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: .25rem 1rem;
}
.appointment-title {
    flex: 1 1 14rem;
    /* German hyphenation for long words like "Informationsveranstaltung" */
    hyphens: auto;
    font-size: var(--fs-400);
    font-weight: var(--fw-semi-bold);
    line-height: 1.3;
}
.appointment-meta {
    display: flex;
    flex-wrap: wrap;
    gap: .25rem 1.25rem;
}
/* time, location and info: regular weight (the body text is light 300), full text colour */
.appointment-meta,
.appointment-info {
    font-size: var(--fs-300);
    font-weight: 400;
    color: var(--color-text);
    line-height: 1.5;
}
.appointment-info a {
    color: var(--color-link);
}
.appointment-meta > span {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
}
.appointment-meta svg {
    flex-shrink: 0;
    color: var(--color-link);
}
.appointment-info p {
    margin: 0;
}
.appointment-category {
    flex-shrink: 0;
    /* stays right-aligned when it wraps below a long title */
    margin-left: auto;
    margin-top: .125rem;
    padding: .125rem .625rem;
    border-radius: 1rem;
    background: #eef3ea;
    color: var(--color-link);
    font-size: var(--fs-200);
    font-weight: var(--fw-semi-bold);
}

/* category tag as link to the category filter (snippets/appointment.php) */
a.appointment-category {
    position: relative;
    text-decoration: none;
}
a.appointment-category:hover,
a.appointment-category:focus-visible {
    text-decoration: underline;
}
a.appointment-category.is-active {
    background: var(--color-link);
    color: var(--color-white);
}

.appointment-empty,
.appointment-note {
    color: var(--color-text-grey);
}
.appointment-note a {
    color: var(--color-link);
}

@media screen and (max-width: 40rem) {
    .appointment-item {
        grid-template-columns: minmax(5rem, max-content) minmax(0, 1fr);
    }
    .appointment-day {
        font-size: var(--fs-400);
    }
    .appointment-body {
        padding: .625rem .75rem;
    }
    /* category tag at the end of the entry, left-aligned below the info */
    .appointment-head {
        display: contents;
    }
    .appointment-title {
        flex: none;
    }
    .appointment-category {
        order: 1;
        align-self: flex-start;
        margin-left: 0;
    }
    /* tap area of the tag link at least 44px high without enlarging the tag */
    a.appointment-category::after {
        content: "";
        position: absolute;
        inset: -.625rem 0;
    }
}

.appointment-year {
    margin-bottom: 0;
    font-size: var(--fs-500);
    font-weight: var(--fw-bold);
    text-transform: none;
}

/* category filter: disclosure above the list on small screens (snippets/category-filter.php),
   box in the side column on large screens (snippets/category-filter-box.php) */
.category-filter-main {
    padding: .25rem 0 .875rem;
    border-bottom: 1px solid #e3e3e3;
}
.category-select summary {
    display: flex;
    align-items: center;
    gap: .625rem;
    min-height: 44px;
    box-sizing: border-box;
    padding: .5rem .875rem .5rem 1rem;
    border: 1px solid var(--color-link);
    border-radius: 22px;
    background: var(--color-white);
    color: var(--color-link);
    font-weight: var(--fw-semi-bold);
    line-height: 1.3;
    cursor: pointer;
    list-style: none;
}
.category-select summary::-webkit-details-marker {
    display: none;
}
.category-select summary svg {
    flex-shrink: 0;
}
.category-select summary.is-active {
    background: var(--color-link);
    color: var(--color-white);
}
.category-select-text {
    flex-grow: 1;
}
.category-select-label {
    font-weight: 400;
}
.category-select details[open] .category-select-chevron {
    transform: rotate(180deg);
}
.category-select .category-filter-list {
    margin: .5rem 0 0;
    padding: 0 .75rem;
    border: 1px solid var(--color-dark-grey);
    background: var(--color-white);
}
.category-select .category-filter-list li + li {
    border-top: 1px solid #e3e3e3;
}
.category-select .category-filter-list a {
    min-height: 48px;
}

.category-filter-list {
    list-style: none;
}
.category-filter-list a {
    display: flex;
    align-items: center;
    gap: .5rem;
    color: var(--color-text);
    text-decoration: none;
}
.category-filter-list a:hover .category-filter-label,
.category-filter-list a:focus-visible .category-filter-label {
    text-decoration: underline;
}
.category-filter-list a[aria-current] {
    color: var(--color-link);
    font-weight: var(--fw-semi-bold);
}
.category-filter-check {
    display: inline-flex;
    flex-shrink: 0;
    width: 16px;
}
.category-filter-label {
    flex-grow: 1;
    line-height: 1.3;
}
.category-filter-count {
    font-size: var(--fs-200);
    font-weight: 400;
    color: var(--color-text-grey);
}

.category-filter-status {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0 .5rem;
    margin: .25rem 0 0;
    font-size: var(--fs-200);
    font-weight: 400;
}
.category-filter-status strong {
    font-weight: var(--fw-semi-bold);
}
.category-filter-status a {
    display: inline-flex;
    align-items: center;
    gap: .375rem;
    min-height: 44px;
    color: var(--color-link);
    font-weight: var(--fw-semi-bold);
    text-decoration: none;
}
.category-filter-status a:hover,
.category-filter-status a:focus-visible {
    text-decoration: underline;
}

aside .category-filter-box {
    display: none;
    padding: .5rem 1rem .75rem;
}
.category-filter-title {
    display: flex;
    align-items: center;
    gap: .625rem;
    min-height: 44px;
    font-size: var(--fs-400);
    font-weight: var(--fw-bold);
    line-height: 1.3;
}
.category-filter-title svg {
    flex-shrink: 0;
    color: var(--color-link);
}
aside .category-filter-box ul {
    margin: .25rem 0 0;
}
aside .category-filter-box li {
    border-top: 1px solid #d6d6d6;
    line-height: 1.5;
}
aside .category-filter-box li a {
    min-height: 44px;
    margin: 0 -.5rem;
    padding: 0 .5rem;
    font-size: var(--fs-300);
    color: var(--color-text);
    font-weight: var(--fw-regular);
}
aside .category-filter-box li a:hover {
    font-weight: var(--fw-regular);
}
aside .category-filter-box li a[aria-current] {
    background: var(--color-white);
    color: var(--color-link);
    font-weight: var(--fw-semi-bold);
}

@media screen and (min-width: 66rem) {
    .category-select {
        display: none;
    }
    .category-filter-main {
        padding: 0;
        border-bottom: 0;
    }
    .category-filter-status {
        padding: .25rem .5rem .25rem 1rem;
        background: #eef3ea;
        font-size: var(--fs-300);
    }
    aside .category-filter-box {
        display: flex;
    }
}

/* calendar subscription (snippets/calendar-subscription.php) */
.calendar-subscription summary {
    display: flex;
    align-items: center;
    gap: .625rem;
    min-height: 44px;
    cursor: pointer;
    list-style: none;
}
.calendar-subscription summary::-webkit-details-marker {
    display: none;
}
.calendar-subscription summary svg {
    flex-shrink: 0;
    color: var(--color-link);
}
.calendar-subscription-title {
    flex-grow: 1;
    font-size: var(--fs-400);
    font-weight: var(--fw-bold);
    line-height: 1.3;
}
.calendar-subscription details[open] .calendar-subscription-chevron {
    transform: rotate(180deg);
}
.calendar-subscription details p {
    margin: 0 0 .5rem;
    font-size: var(--fs-200);
    color: var(--color-text-grey);
    line-height: 1.5;
}
.calendar-subscription details p strong {
    font-weight: var(--fw-semi-bold);
    color: var(--color-text);
}
.calendar-subscription-link {
    display: flex;
    align-items: center;
    gap: .625rem;
    min-height: 48px;
    border-top: 1px solid #d6d6d6;
    color: var(--color-text);
    text-decoration: none;
}
.calendar-subscription-link svg {
    flex-shrink: 0;
    color: var(--color-link);
}
.calendar-subscription-link span {
    display: flex;
    flex-direction: column;
}
.calendar-subscription-link strong {
    font-weight: var(--fw-semi-bold);
}
.calendar-subscription-link small {
    color: var(--color-text-grey);
}
.calendar-subscription-link:hover strong,
.calendar-subscription-link:focus-visible strong {
    text-decoration: underline;
}
.calendar-subscription-copy {
    display: flex;
    flex-direction: column;
    gap: .375rem;
    margin-bottom: .5rem;
    padding-top: .625rem;
    border-top: 1px solid #d6d6d6;
}
.calendar-subscription-copy label {
    font-weight: var(--fw-semi-bold);
    font-size: var(--fs-300);
}
.calendar-subscription-copy div {
    display: flex;
    gap: .5rem;
}
.calendar-subscription-copy input {
    flex-grow: 1;
    min-width: 0;
    height: 40px;
    box-sizing: border-box;
    border: 1px solid var(--color-dark-grey);
    padding: 0 .5rem;
    font: inherit;
    font-size: var(--fs-200);
    color: var(--color-text);
    background: var(--color-white);
}
.calendar-subscription-copy button {
    height: 40px;
    border: 1.5px solid var(--color-link);
    background: var(--color-white);
    color: var(--color-link);
    font: inherit;
    font-weight: var(--fw-semi-bold);
    margin: 0;
    padding: 0 .75rem;
    text-transform: none;
    letter-spacing: normal;
    cursor: pointer;
}
