/**
 * PTS Archive Filters – Dropdown-Filter für /projekte/ und /termine/
 *
 * Alle Regeln sind unter .pts-archive-filters gekapselt. Bewusst KEINE
 * globalen Element-Selektoren (select, button, …), damit weder Theme noch
 * Elementor-Formulare beeinflusst werden.
 *
 * Umschaltung native Variante <-> Custom-Combobox passiert über die Klasse
 * `pts-js` am <html>-Element. Sie wird synchron im <head> gesetzt (siehe
 * PTS_Archive_Filters::print_head_snippet), damit es weder Flash noch
 * Layout-Shift gibt. Die beiden Grundregeln dazu stehen zusätzlich inline im
 * Head; hier werden sie der Vollständigkeit halber wiederholt.
 */

.pts-archive-filters {
    --pts-af-text:          #3B5F68;
    --pts-af-text-strong:   #253D41;
    /* Rahmen und Chevron bewusst heller als der Text: die Leiste ist
       Werkzeug, nicht Inhalt. Erst Hover und Fokus holen das kräftige
       Petrol (--pts-af-border-active) dazu. */
    --pts-af-border:        #A5C4CD;
    --pts-af-border-active: #55808B;
    --pts-af-chevron:       #9BBAC4;
    --pts-af-bg:            #FDFBF8;
    --pts-af-bg-hover:      #FFFFFF;
    --pts-af-option-hover:  #EDF2F3;
    --pts-af-option-active: #E3EBED;
    --pts-af-radius:        12px;
    --pts-af-radius-menu:   12px;
    --pts-af-height:        41px;
    --pts-af-gap:           9px;
    --pts-af-font-size:     .84rem;
    /* Grundbreite eines Controls; je Filter unten überschrieben. */
    --pts-af-w:             165px;
    --pts-af-font:          'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;

    display: block;
    /* Breite folgt dem umgebenden Elementor-/Loop-Container. */
    width: 100%;
    max-width: 100%;
    margin-block-end: 1.25rem;
    /* Bewusst ohne Rahmen, Hintergrund oder Schatten: der Block soll sich
       ruhig über dem Loop Grid einfügen und nicht wie ein Formular-Modul
       wirken. */
    background: none;
    border: 0;
    padding: 0;
}

/* ── Werkzeugleiste statt Raster ─────────────────────────────────────────
   Ein Grid verteilt Spuren über die Containerbreite; genau das ließ die
   Filter wie einen eigenen Inhaltsblock wirken. Flexbox mit fester Breite
   je Feld nimmt nur so viel Platz, wie der längste Eintrag braucht, und
   lässt den Rest der Zeile leer – die Gruppe steht links am Content. */
.pts-archive-filters__grid {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    gap: var(--pts-af-gap);
    width: auto;
    max-width: 100%;
}

.pts-archive-filters__field {
    position: relative;
    /* Kein Wachsen, kein Schrumpfen: die Breite kommt aus --pts-af-w. */
    flex: 0 0 auto;
    width: var(--pts-af-w);
    min-width: 0;
    max-width: 100%;
}

/* Breite je Filter, bemessen an der längsten Option plus Chevron. */
.pts-archive-filters__field--projekt-jahr  { --pts-af-w: 130px; }
.pts-archive-filters__field--projekt-genre { --pts-af-w: 168px; }
.pts-archive-filters__field--termin-jahr   { --pts-af-w: 120px; }
.pts-archive-filters__field--termin-monat  { --pts-af-w: 142px; }
.pts-archive-filters__field--termin-ort    { --pts-af-w: 195px; }
.pts-archive-filters__field--rolle         { --pts-af-w: 165px; }

/* Echtes Label, nur visuell versteckt – niemals display:none,
   sonst verschwindet es auch für Screenreader. */
.pts-archive-filters__label {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
}

/* ── Umschaltung native Variante / Custom-Combobox ───────────────────────── */
html.pts-js .pts-archive-filters__native,
html.pts-js .pts-archive-filters__submit {
    display: none;
}

html:not(.pts-js) .pts-archive-filters__combo {
    display: none;
}

/* ── Gemeinsame Optik von Select und Trigger ─────────────────────────────── */
.pts-archive-filters__native {
    position: relative;
    display: block;
    width: 100%;
}

.pts-archive-filters__select,
.pts-archive-filters__trigger {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;

    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;
    width: 100%;
    max-width: 100%;
    min-height: var(--pts-af-height);
    margin: 0;

    font-family: var(--pts-af-font);
    font-size: var(--pts-af-font-size);
    font-weight: 400;
    line-height: 1.2;
    text-align: start;
    color: var(--pts-af-text);

    background-color: var(--pts-af-bg);
    background-image: none;
    border: 1px solid var(--pts-af-border);
    border-radius: var(--pts-af-radius);
    box-shadow: none;
    padding: .4rem .7rem;

    cursor: pointer;
    transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}

/* Das native Select bekommt rechts Platz für seinen Chevron. */
.pts-archive-filters__select {
    display: block;
    padding-inline-end: 1.9rem;
    text-overflow: ellipsis;
}

.pts-archive-filters__select:hover {
    color: var(--pts-af-text-strong);
    border-color: var(--pts-af-border-active);
    background-color: var(--pts-af-bg-hover);
}

.pts-archive-filters__select:focus {
    outline: none;
    border-color: var(--pts-af-border-active);
    color: var(--pts-af-text-strong);
    background-color: var(--pts-af-bg);
}

.pts-archive-filters__select:focus-visible {
    outline: 2px solid var(--pts-af-border-active);
    outline-offset: 2px;
}

/* ── Button-Normalisierung ───────────────────────────────────────────────
   Trigger und Submit sind echte <button>. Das Theme-Reset stylt jeden
   Button als CTA:

     button                { border:1px solid #C36; color:#C36; … }
     button:hover, :focus  { background-color:#C36; color:#fff }

   `button:focus` wiegt mit (0,1,1) mehr als eine einzelne Klasse (0,1,0) –
   deshalb schlug beim Anklicken das Pink durch, obwohl der Grundzustand
   korrekt war. Alle Zustände sind hier darum unter `.pts-archive-filters`
   verschachtelt (mindestens 0,2,0) notiert UND setzen Hintergrund, Farbe,
   Rahmen und Schatten jeweils vollständig. Kein !important nötig. */
.pts-archive-filters .pts-archive-filters__trigger,
.pts-archive-filters .pts-archive-filters__toggle,
.pts-archive-filters .pts-archive-filters__submit {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    font: inherit;
    text-transform: none;
    letter-spacing: normal;
    text-decoration: none;
    text-shadow: none;
    background-image: none;
    outline-offset: 2px;
}

/* ── Trigger: ruhiges Formularfeld, kein CTA ─────────────────────────────
   Typografie bewusst leicht: Inter Regular, auch wenn ein Wert gewählt ist
   oder das Menü offen steht. */
.pts-archive-filters .pts-archive-filters__trigger {
    font-family: var(--pts-af-font);
    font-size: var(--pts-af-font-size);
    font-weight: 400;
    line-height: 1.2;
    text-align: start;
    border-radius: var(--pts-af-radius);
    padding: .4rem .7rem;
    transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}

.pts-archive-filters .pts-archive-filters__trigger,
.pts-archive-filters .pts-archive-filters__trigger:link,
.pts-archive-filters .pts-archive-filters__trigger:visited {
    background: var(--pts-af-bg);
    background-color: var(--pts-af-bg);
    color: var(--pts-af-text);
    border-color: var(--pts-af-border);
    box-shadow: none;
}

.pts-archive-filters .pts-archive-filters__trigger:hover {
    background: var(--pts-af-bg-hover);
    background-color: var(--pts-af-bg-hover);
    color: var(--pts-af-text-strong);
    border-color: var(--pts-af-border-active);
    box-shadow: none;
}

/* Klicken, Fokus und geöffnetes Menü verändern nur Rahmen, Textfarbe und
   Chevron – niemals eine gefüllte Hintergrundfarbe. */
.pts-archive-filters .pts-archive-filters__trigger:focus,
.pts-archive-filters .pts-archive-filters__trigger:active,
.pts-archive-filters .pts-archive-filters__trigger[aria-expanded="true"],
.pts-archive-filters .pts-archive-filters__trigger[aria-expanded="true"]:hover,
.pts-archive-filters .pts-archive-filters__trigger[aria-expanded="true"]:focus {
    background: var(--pts-af-bg);
    background-color: var(--pts-af-bg);
    color: var(--pts-af-text-strong);
    border-color: var(--pts-af-border-active);
    box-shadow: none;
    text-shadow: none;
    outline: none;
}

/* Einziger Fokusindikator: ein dezenter äußerer Ring. Kein zusätzlicher
   dicker Rahmen und kein Schatten daneben. */
.pts-archive-filters .pts-archive-filters__trigger:focus-visible {
    outline: 2px solid var(--pts-af-border-active);
    outline-offset: 2px;
}

/* Die geöffnete Liste trägt zwar den Fokus, bekommt aber bewusst KEINEN
   eigenen Ring: Bei aria-activedescendant ist die hervorgehobene Option der
   sichtbare Fokusindikator. Ein zusätzlicher Rahmen um das ganze Menü wäre
   doppelt und optisch laut. */
.pts-archive-filters__list:focus,
.pts-archive-filters__list:focus-visible {
    outline: none;
}

.pts-archive-filters__value {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ── Chevron ─────────────────────────────────────────────────────────────
   pointer-events:none am nativen Select, damit ein Klick durchgeht. */
.pts-archive-filters__chevron {
    flex: 0 0 auto;
    color: var(--pts-af-chevron);
    transition: transform .18s ease, color .15s ease;
}

.pts-archive-filters__native .pts-archive-filters__chevron {
    position: absolute;
    inset-inline-end: .7rem;
    inset-block-start: 50%;
    transform: translateY(-50%);
    pointer-events: none;
}

/* Erst im aktiven Zustand tritt der Chevron aus der Zurückhaltung. */
.pts-archive-filters__select:hover + .pts-archive-filters__chevron,
.pts-archive-filters__select:focus + .pts-archive-filters__chevron,
.pts-archive-filters .pts-archive-filters__trigger:hover .pts-archive-filters__chevron,
.pts-archive-filters .pts-archive-filters__trigger[aria-expanded="true"] .pts-archive-filters__chevron {
    color: var(--pts-af-border-active);
}

.pts-archive-filters__trigger[aria-expanded="true"] .pts-archive-filters__chevron--combo {
    transform: rotate(180deg);
}

/* ── Custom-Combobox ─────────────────────────────────────────────────────── */
.pts-archive-filters__combo {
    position: relative;
    display: block;
    width: 100%;
}

.pts-archive-filters__list {
    position: absolute;
    inset-inline-start: 0;
    inset-block-start: calc(100% + 4px);
    z-index: 999;

    display: block;
    width: 100%;
    max-height: 240px;
    overflow-y: auto;
    overscroll-behavior: contain;

    margin: 0;
    padding: 6px;
    list-style: none;

    background-color: var(--pts-af-bg-hover);
    border: 1px solid var(--pts-af-border);
    border-radius: var(--pts-af-radius-menu);
    /* Nur so viel Schatten, dass sich das Menü vom Content abhebt. */
    box-shadow: 0 4px 14px rgba(37, 61, 65, .08);
}

.pts-archive-filters__list[hidden] {
    display: none;
}

.pts-archive-filters__option {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .5rem;

    margin: 0;
    padding: 9px 10px;
    list-style: none;

    font-family: var(--pts-af-font);
    font-size: var(--pts-af-font-size);
    font-weight: 500;
    line-height: 1.25;
    color: var(--pts-af-text);

    border-radius: 8px;
    cursor: pointer;
    /* Keine blaue Browser-Auswahl beim Ziehen über die Liste. */
    user-select: none;
}

.pts-archive-filters__option:hover {
    background-color: var(--pts-af-option-hover);
    color: var(--pts-af-text-strong);
}

/* Tastaturposition in der Liste – ersetzt den Fokusring des Menüs. */
.pts-archive-filters__option.is-active {
    background-color: var(--pts-af-option-hover);
    color: var(--pts-af-text-strong);
    box-shadow: inset 0 0 0 1px var(--pts-af-border-active);
}

.pts-archive-filters__option[aria-selected="true"] {
    background-color: var(--pts-af-option-active);
    color: var(--pts-af-text-strong);
    /* Bewusst maximal 500 – die Auswahl wird über Hintergrund und Haken
       gekennzeichnet, nicht über fetten Text. */
    font-weight: 500;
}

.pts-archive-filters__option-text {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pts-archive-filters__check {
    flex: 0 0 auto;
    opacity: 0;
    color: var(--pts-af-border-active);
}

.pts-archive-filters__option[aria-selected="true"] .pts-archive-filters__check {
    opacity: 1;
}

/* ── Aktionen ────────────────────────────────────────────────────────────── */
.pts-archive-filters__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .75rem;
    margin-block-start: .6rem;
}

/* Fallback ohne JavaScript. Ebenfalls unter .pts-archive-filters
   verschachtelt, sonst überschriebe das `font: inherit` der
   Button-Normalisierung (0,2,0) diese Typografie (0,1,0). */
.pts-archive-filters .pts-archive-filters__submit {
    font-family: var(--pts-af-font);
    font-size: var(--pts-af-font-size);
    font-weight: 500;
    line-height: 1.2;
    min-height: var(--pts-af-height);
    padding: .4rem 1.1rem;
    border: 1px solid var(--pts-af-border);
    border-radius: var(--pts-af-radius);
    cursor: pointer;
    transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}

.pts-archive-filters .pts-archive-filters__submit {
    background: var(--pts-af-bg);
    background-color: var(--pts-af-bg);
    color: var(--pts-af-text);
    border-color: var(--pts-af-border);
    box-shadow: none;
}

.pts-archive-filters .pts-archive-filters__submit:hover {
    background: var(--pts-af-bg-hover);
    background-color: var(--pts-af-bg-hover);
    color: var(--pts-af-text-strong);
    border-color: var(--pts-af-border-active);
    box-shadow: none;
}

.pts-archive-filters .pts-archive-filters__submit:focus,
.pts-archive-filters .pts-archive-filters__submit:active {
    background: var(--pts-af-bg);
    background-color: var(--pts-af-bg);
    color: var(--pts-af-text-strong);
    border-color: var(--pts-af-border-active);
    box-shadow: none;
    outline: none;
}

.pts-archive-filters .pts-archive-filters__submit:focus-visible {
    outline: 2px solid var(--pts-af-border-active);
    outline-offset: 2px;
}

.pts-archive-filters__reset {
    font-family: var(--pts-af-font);
    font-size: .8rem;
    color: var(--pts-af-text);
    text-decoration: underline;
    text-underline-offset: 3px;
    transition: color .15s ease;
}

.pts-archive-filters__reset:hover,
.pts-archive-filters__reset:focus {
    color: var(--pts-af-text-strong);
}

.pts-archive-filters__reset:focus-visible {
    outline: 2px solid var(--pts-af-border-active);
    outline-offset: 3px;
    border-radius: 3px;
}

/* ── Mobiler Umschalter „Filter" ─────────────────────────────────────────
   Auf dem Desktop existiert der Knopf nur im Markup, nicht im Bild: dort
   ist die Leiste schmal genug, um dauerhaft zu stehen. Sichtbar wird er
   allein unter 640px – und nur mit JavaScript, denn ohne JS könnte er das
   Panel nicht öffnen und würde die Filter unerreichbar machen. */
.pts-archive-filters__toggle {
    display: none;
}

.pts-archive-filters .pts-archive-filters__toggle {
    align-items: center;
    gap: .45rem;
    width: auto;
    min-height: 38px;
    padding: .35rem .75rem;

    font-family: var(--pts-af-font);
    font-size: var(--pts-af-font-size);
    font-weight: 500;
    line-height: 1.2;

    border: 1px solid var(--pts-af-border);
    border-radius: var(--pts-af-radius);
    cursor: pointer;
    transition: border-color .15s ease, color .15s ease, background-color .15s ease;
}

.pts-archive-filters .pts-archive-filters__toggle,
.pts-archive-filters .pts-archive-filters__toggle:link,
.pts-archive-filters .pts-archive-filters__toggle:visited {
    background: var(--pts-af-bg);
    background-color: var(--pts-af-bg);
    color: var(--pts-af-text);
    border-color: var(--pts-af-border);
    box-shadow: none;
}

.pts-archive-filters .pts-archive-filters__toggle:hover,
.pts-archive-filters .pts-archive-filters__toggle:focus,
.pts-archive-filters .pts-archive-filters__toggle:active,
.pts-archive-filters .pts-archive-filters__toggle[aria-expanded="true"] {
    background: var(--pts-af-bg-hover);
    background-color: var(--pts-af-bg-hover);
    color: var(--pts-af-text-strong);
    border-color: var(--pts-af-border-active);
    box-shadow: none;
    text-shadow: none;
    outline: none;
}

.pts-archive-filters .pts-archive-filters__toggle:focus-visible {
    outline: 2px solid var(--pts-af-border-active);
    outline-offset: 2px;
}

.pts-archive-filters__toggle[aria-expanded="true"] .pts-archive-filters__chevron--toggle {
    transform: rotate(180deg);
}

/* Zahl der aktiven Filter – ersetzt im eingeklappten Zustand die Anzeige
   der gewählten Werte. */
.pts-archive-filters__toggle-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    font-size: .7rem;
    font-weight: 600;
    line-height: 1;
    color: #FFFFFF;
    background-color: var(--pts-af-border-active);
    border-radius: 999px;
}

/* ── Tablet: umbrechen, nicht strecken ───────────────────────────────────
   Die Breiten bleiben dieselben wie auf dem Desktop; passt eine Zeile
   nicht mehr, bricht sie um. Das hält zwei bis drei Controls nebeneinander,
   ohne dass ein einzelnes Feld in der letzten Zeile breit gezogen wird.
   Der Shrink-Faktor greift erst, wenn ein Feld allein schon zu breit für
   die Zeile ist – dann schrumpft es bis 110px, statt überzulaufen. */
@media (max-width: 900px) {
    .pts-archive-filters__field {
        flex: 0 1 var(--pts-af-w);
        min-width: 110px;
    }
}

/* ── Mobile: eingeklappter Filterbereich ─────────────────────────────────
   Vier Dropdowns übereinander schoben das Archiv unter die Falz. Der Block
   besteht darum nur noch aus einem 38px hohen Knopf; das Panel klappt bei
   Bedarf darunter auf. Ohne JavaScript (html:not(.pts-js)) bleibt das Panel
   sichtbar und der Knopf verborgen. */
@media (max-width: 640px) {
    .pts-archive-filters {
        margin-block-end: 1rem;
    }

    html.pts-js .pts-archive-filters__toggle {
        display: inline-flex;
    }

    html.pts-js .pts-archive-filters:not(.is-open) .pts-archive-filters__panel {
        display: none;
    }

    html.pts-js .pts-archive-filters.is-open .pts-archive-filters__panel {
        margin-block-start: .6rem;
    }

    .pts-archive-filters__field {
        flex: 1 1 100%;
        width: 100%;
        max-width: none;
    }

    .pts-archive-filters__actions {
        margin-block-start: .6rem;
    }

    .pts-archive-filters__submit {
        width: 100%;
    }
}

/* Ende der PTS-Archive-Filter-Stile. */
