/* Place-Liste — Bauteil-Stylesheet, Praefix tp-.
   Traegt Aufbau, Proportionen und Zustaende. Alle Farben, Radien und
   die Schriftwahl stehen als Variablen auf .tp-place-list; das Portal
   setzt sie je Rubrik neu und braucht dafuer KEINE Kopie dieser Datei
   und keine Sonderregel pro Seite.

   Die Werte unten sind die Vorgabewerte des Bauteils, nicht die
   Portalfarben. Gesetzt werden sie in der Portal-CSS. */
/* BEFUND 13.09.2026, im Live-DOM gemessen: die Tokens standen nur auf
   .tp-place-list. Seit die Discovery-Leiste im Hero sitzt — also
   ausserhalb dieses Containers — loesten dort ALLE var(--tp-…) ins
   Leere auf: Feldhintergrund transparent, Radius 0, Knopf ohne
   Fuellung. Gemessen: --tp-surface = "" auf der Hero-Komponente.

   Ein Bauteil muss seine eigenen Vorgabewerte mitbringen, egal wo es
   eingehaengt ist. Der Tokenblock steht deshalb auf BEIDEN Wurzeln. */
.tp-place-list,
.tp-loc{
	--tp-accent:#5C6338;          /* Rubrikfarbe */
	--tp-accent-ink:#FFFFFF;
	--tp-accent-deep:#33463A;     /* Knopffarbe, dunkles Zypressengruen */
	--tp-surface:#FFFFFF;
	--tp-surface-muted:#F6F1E7;   /* Creme */
	--tp-surface-sink:#EEE6D8;
	--tp-ink:#1A1A1A;
	--tp-ink-muted:#6B675E;
	--tp-line:#E3DCCB;
	--tp-radius:12px;
	--tp-radius-sm:8px;
	--tp-shadow:0 2px 10px rgba(184,92,56,.08);
	--tp-shadow-hover:0 6px 20px rgba(184,92,56,.14);
	--tp-serif:Georgia,"Iowan Old Style","Palatino Linotype",Palatino,"Times New Roman",serif;
	--tp-gap:1.5rem;
}
.tp-place-list,.tp-place-list *,.tp-place-list *::before,.tp-place-list *::after,
.tp-loc,.tp-loc *,.tp-loc *::before,.tp-loc *::after{box-sizing:border-box}

/* ── 1. Location Switcher ────────────────────────────────────────
   0.9.11. Vorher stand hier eine Suchleiste: Feld, Etikett "Ort",
   Knopf "Suchen". Sie behauptete, /restaurants/ beginne mit einer
   Eingabe — dabei zeigt die Seite ohne jedes Zutun schon alle
   erfassten Betriebe. Der Ort ist eine Verfeinerung, keine
   Voraussetzung.

   Die Komposition folgt daraus: Hauptinhalt ist der AKTUELLE
   geografische Zustand, gross und in der Rubrikschrift. Die Auswahl
   steht sichtbar nachgeordnet darunter — abgesetzt, aber leiser.
   Keine Lupe, kein Wort "Suchen", keine Systemoptik einer Selectbox.

   Das Bauteil liegt im Hero auf dem Bild, deshalb eigene Flaeche mit
   Schatten statt Rahmen auf transparentem Grund. */
.ts-herocard .tp-loc,
.tp-loc{
	display:block;width:100%;align-self:stretch;max-width:32rem;
	margin:1.6rem 0 0;
	background:var(--tp-surface);
	border:1px solid rgba(255,255,255,.62);
	border-radius:var(--tp-radius);
	box-shadow:0 14px 34px rgba(20,24,16,.26);
	padding:1.15rem 1.25rem 1.2rem;
}

/* Zustandszeile: Pin, kleines Etikett, grosser Ort, erklaerende
   Zeile. Das ist die Antwort auf "Wo suche ich gerade?" und deshalb
   der visuelle Schwerpunkt des Bauteils. */
.tp-loc__state{display:flex;align-items:flex-start;gap:.7rem;margin:0}
.tp-loc__pin{display:flex;flex:0 0 auto;color:var(--tp-accent);margin-top:.15rem}
.tp-loc__lead{display:flex;flex-direction:column;min-width:0}
.tp-loc__label{
	font-size:.68rem;line-height:1;letter-spacing:.1em;text-transform:uppercase;
	color:var(--tp-ink-muted);margin:0 0 .3rem;
}
.tp-loc__where{
	font-family:var(--tp-serif);font-size:1.6rem;line-height:1.15;font-weight:600;
	color:var(--tp-ink);margin:0;overflow-wrap:anywhere;
}
.tp-loc__hint{font-size:.9rem;line-height:1.35;color:var(--tp-ink-muted);margin:.22rem 0 0}

/* Auswahl und Ruecksetzer. Durch die Trennlinie klar als zweite
   Ebene erkennbar — Verfeinerung, nicht Voraussetzung. */
.tp-loc__actions{
	display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;
	margin:.95rem 0 0;padding:.9rem 0 0;
	border-top:1px solid var(--tp-line);
}
.tp-loc__form{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin:0;flex:1 1 auto;min-width:0}

/* Die Ortswahl ist eine Schaltflaeche, in der eine echte Selectbox
   liegt: das Bedienelement bleibt das native, die Optik nicht. Die
   Selectbox deckt die Flaeche vollstaendig ab und ist durchsichtig —
   dadurch oeffnet ein Klick irgendwo auf der Flaeche die Liste, und
   Tastatur sowie Vorleseprogramme finden weiterhin ein echtes
   <select>. */
.tp-loc__pick{
	position:relative;display:inline-flex;align-items:center;gap:.45rem;
	flex:1 1 15rem;min-width:0;min-height:3rem;
	padding:0 .95rem;
	background:var(--tp-surface-muted);
	border:1px solid var(--tp-line);border-radius:999px;
	color:var(--tp-ink);font-size:.95rem;font-weight:600;cursor:pointer;
}
.tp-loc__pick:hover{border-color:var(--tp-accent);background:var(--tp-surface-sink)}
.tp-loc__pick-ico{display:flex;flex:0 0 auto;color:var(--tp-accent)}
.tp-loc__pick-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tp-loc__pick-chev{display:flex;flex:0 0 auto;margin-left:auto;color:var(--tp-ink-muted)}
.tp-loc__select{
	position:absolute;inset:0;width:100%;height:100%;
	opacity:0;border:0;margin:0;padding:0;cursor:pointer;
	font:inherit;
}
.tp-loc__pick:focus-within{outline:2px solid var(--tp-accent);outline-offset:2px}

/* Absendeknopf. Ohne JavaScript ist er der Weg zum Ergebnis; das
   Skript setzt .is-auto und blendet ihn aus, weil die Auswahl dann
   selbst abschickt. Er verschwindet also nur, wenn sein Ersatz
   nachweislich laeuft. */
.tp-loc__go{
	flex:0 0 auto;min-height:3rem;padding:0 1.2rem;
	background:var(--tp-accent-deep);color:#fff;border:1px solid var(--tp-accent-deep);
	border-radius:999px;font:inherit;font-size:.95rem;font-weight:600;cursor:pointer;
}
.tp-loc__go:hover{background:#2C3A30;border-color:#2C3A30}
.tp-loc__go:focus-visible{outline:2px solid var(--tp-accent);outline-offset:2px}
.tp-loc__form.is-auto .tp-loc__go{display:none}

/* Ruecksetzer. Erscheint nur, wenn ein Ort gewaehlt ist — sonst
   waere er ein Knopf ohne Wirkung. */
.tp-loc__reset{
	display:inline-flex;align-items:center;gap:.35rem;flex:0 0 auto;
	min-height:3rem;padding:0 .9rem;
	color:var(--tp-ink-muted);text-decoration:none;font-size:.9rem;
	border:1px solid transparent;border-radius:999px;
}
.tp-loc__reset:hover{color:var(--tp-accent);border-color:var(--tp-line);background:var(--tp-surface-muted)}
.tp-loc__reset:focus-visible{outline:2px solid var(--tp-accent);outline-offset:2px}
.tp-loc__reset-x{font-size:1.15rem;line-height:1}

/* ── 2. Facetten-Chips ───────────────────────────────────────── */
/* Sekundaer zur Discovery-Leiste: kleiner, leiser, ohne Schatten.
   Es darf nicht wie eine zweite Filterleiste wirken. */
.tp-facets{display:flex;flex-wrap:wrap;gap:.45rem;margin:2rem 0 1.6rem}
.tp-facet{
	display:inline-flex;align-items:center;
	font-size:.845rem;line-height:1;padding:.5rem .85rem;
	border:1px solid var(--tp-line);border-radius:999px;
	color:var(--tp-ink-muted);background:transparent;
	text-decoration:none;white-space:nowrap;
}
.tp-facet:hover{border-color:var(--tp-accent);color:var(--tp-accent)}
.tp-facet:focus-visible{outline:2px solid var(--tp-accent);outline-offset:2px}
.tp-facet.is-current{background:var(--tp-accent);border-color:var(--tp-accent);color:var(--tp-accent-ink);font-weight:600}
.tp-facet.is-current:hover{color:var(--tp-accent-ink)}

/* ── 3. Abschnittskopf ───────────────────────────────────────── */
.tp-place-list__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.9rem;margin:0 0 1.15rem}
.tp-place-list__title{
	font-family:var(--tp-serif);font-size:clamp(1.5rem,2.6vw,2rem);
	font-weight:600;letter-spacing:0;line-height:1.2;color:var(--tp-ink);margin:0;
}
.tp-place-list__count{margin:0;font-size:.92rem;color:var(--tp-ink-muted)}
.tp-place-list__stale-note{margin:0;font-size:.85em;color:var(--tp-ink-muted);opacity:.8}

/* ── 4a. Karten ──────────────────────────────────────────────── */
/* 0.9.12: align-items:start statt Streckung. Eine Karte ohne Foto
   ist kuerzer als eine mit — das ist die Wahrheit ueber den
   Datenstand und soll auch so aussehen. Die erzwungene Gleichhoehe
   hatte bei bildlosen Karten eine gemessene Leerzone von rund 90 px
   zwischen Ortszeile und Handlungslink erzeugt. */
.tp-place-list__items{list-style:none;margin:0;padding:0;display:grid;gap:var(--tp-gap);grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));align-items:start}
.tp-place-list__item{margin:0}
.tp-card{
	height:100%;display:flex;flex-direction:column;
	background:var(--tp-surface);
	border:1px solid var(--tp-line);
	border-radius:var(--tp-radius);
	box-shadow:var(--tp-shadow);
	overflow:hidden;
	transition:box-shadow .18s ease, transform .18s ease, border-color .18s ease;
}
/* 0.9.11: der Schatten traegt die Karte, nicht der Rahmen. Beim
   Zeigen wird der Rahmen waermer statt dunkler — das Verzeichnis
   soll redaktionell wirken, nicht wie eine Trefferliste. */
.tp-card:hover{box-shadow:var(--tp-shadow-hover);transform:translateY(-2px);border-color:var(--tp-accent)}
.tp-card:focus-within{border-color:var(--tp-accent)}
.tp-card__media{position:relative;aspect-ratio:4/3;max-width:100%;background:var(--tp-surface-sink);display:flex;align-items:center;justify-content:center;overflow:hidden}
.tp-card__cover{display:block;width:100%;height:100%;object-fit:cover}
/* Bildlose Karte: bewusst gesetzte Flaeche, kein technischer
   Platzhalter. Das Monogramm ist ruhig und zurueckgenommen — es
   traegt die Karte nicht, es fuellt sie nur. */
/* Bildloser Zustand.
   Er ist bei den Pilotdaten der Normalfall, nicht die Ausnahme —
   also ein GESTALTETER Medienzustand und kein technischer Platzhalter.
   Ruhige Creme-Flaeche mit einer feinen Olivlinie als Signatur; das
   Monogramm ist bewusst klein und blass und traegt die Karte nicht.
   Eine Karte MIT Foto muss auf den ersten Blick wertiger wirken. */
/* 0.9.12 — der bildlose Zustand wird flach.
   Bis 0.9.11 trug er dieselbe 3:2-Flaeche wie ein Foto: gemessen
   272 px am Schreibtisch, 217 px am Telefon und damit 54 % der
   Karte. Eine leere Flaeche war so das groesste Element der Karte —
   der Betriebsname trat dahinter zurueck, und eine Karte MIT Foto
   sah nicht wertiger aus als eine ohne.

   Jetzt ist es ein schmales Band mit dem Monogramm oben links: eine
   gesetzte Signatur, kein Bildrahmen und erst recht kein Hinweis auf
   ein fehlendes Bild. Die Karte wird dadurch kuerzer, und die
   Fuehrung uebernimmt der Name. */
.tp-card--no-photo .tp-card__media{
	aspect-ratio:auto;min-height:3.4rem;
	align-items:flex-start;justify-content:flex-start;
	padding:.95rem 1.1rem .85rem;
	background:linear-gradient(105deg, var(--tp-surface-muted) 0%, var(--tp-surface-sink) 100%);
	border-bottom:1px solid var(--tp-line);
}
.tp-card--no-photo .tp-card__media::after{content:none}
/* Ohne Streckung braucht der Handlungslink keinen auto-Abstand mehr —
   er folgt dem Inhalt. */
.tp-card--no-photo .tp-card__more{margin-top:1.05rem}
.tp-card__monogram{
	font-family:var(--tp-serif);font-size:1rem;font-weight:600;
	letter-spacing:.2em;line-height:1;text-indent:.2em;
	color:var(--tp-accent);opacity:.58;
	user-select:none;margin:0;
}
.tp-card__body{display:flex;flex-direction:column;gap:.45rem;padding:1.375rem 1.5rem 1.625rem;flex:1 1 auto}
.tp-card__title{
	font-family:var(--tp-serif);font-size:1.28rem;font-weight:600;
	letter-spacing:0;line-height:1.24;margin:0;color:var(--tp-ink);
	text-wrap:balance;
}
.tp-card__link{color:inherit;text-decoration:none}
.tp-card__link:hover{color:var(--tp-accent)}
.tp-card__link:focus-visible{outline:2px solid var(--tp-accent);outline-offset:3px;border-radius:3px}
.tp-card__where{margin:.05rem 0 0;font-size:.88rem;letter-spacing:.01em;color:var(--tp-ink-muted);display:flex;align-items:center;gap:.35rem}
.tp-card__where .tp-i{color:var(--tp-accent);flex:0 0 auto}
.tp-card__desc{margin:.35rem 0 0;font-size:.95rem;line-height:1.6;color:var(--tp-ink)}
.tp-card__chips{list-style:none;margin:.5rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.35rem}
.tp-card__chip{
	font-size:.76rem;line-height:1;padding:.38rem .62rem;
	border:1px solid var(--tp-line);border-radius:999px;
	color:var(--tp-ink-muted);background:var(--tp-surface-muted);white-space:nowrap;
}
/* Merkmale mit Symbol. Das Bild steht links vom Wort und faellt mit
   ihm auf eine Grundlinie; es ersetzt die Beschriftung nicht, sondern
   markiert nur, um welche Art von Angabe es geht. Nur bejahte
   Merkmale tragen ein Symbol — siehe facet_chip_list(). */
.tp-facet--ico{display:inline-flex;align-items:center;gap:.38rem}
.tp-facet--ico .tp-ico{width:14px;height:14px;flex:0 0 auto;opacity:.8}
.tp-card__chip--ico{display:inline-flex;align-items:center;gap:.3rem;padding-left:.5rem}
.tp-card__chip--ico .tp-ico{width:13px;height:13px;flex:0 0 auto;opacity:.75}
/* Handlungslink am Fuss der Karte, wie in der Vorlage unterstrichen.
   margin-top:auto haelt ihn auf gleicher Hoehe, auch wenn die Karten
   unterschiedlich viel Text tragen. */
.tp-card__more{margin:.85rem 0 0;padding-top:.15rem}
.tp-card__cta{
	font-size:.92rem;font-weight:600;color:var(--tp-accent);
	text-decoration:underline;text-underline-offset:.22em;
	text-decoration-thickness:1px;
}
.tp-card__cta:hover{color:var(--tp-accent-text,var(--tp-accent-deep))}
.tp-card__cta:focus-visible{outline:2px solid var(--tp-accent);outline-offset:3px;border-radius:3px}
.tp-card__body > .tp-card__more{margin-top:auto}

/* ── 4b. Leerzustand ─────────────────────────────────────────────
   Der Grund, warum es dieses Bauteil gibt: vorher gab die Liste bei
   null Treffern eine Flaeche von null Pixeln aus. Wer ueber die
   Ortswahl dort landete, sass in einer Sackgasse. */
.tp-empty{
	background:var(--tp-surface-muted);
	border:1px solid var(--tp-line);
	border-radius:var(--tp-radius);
	padding:2.1rem 1.6rem 2.2rem;
	text-align:center;
}
.tp-empty__title{
	font-family:var(--tp-serif);font-size:1.24rem;font-weight:600;
	line-height:1.3;margin:0;color:var(--tp-ink);
}
.tp-empty__text{margin:.6rem auto 0;max-width:34rem;font-size:.96rem;line-height:1.6;color:var(--tp-ink-muted)}
.tp-empty__actions{display:flex;flex-wrap:wrap;gap:.6rem;justify-content:center;margin-top:1.3rem}
.tp-btn{
	display:inline-flex;align-items:center;justify-content:center;
	min-height:2.9rem;padding:0 1.35rem;
	background:var(--tp-accent-deep);color:#fff;border:1px solid var(--tp-accent-deep);
	border-radius:var(--tp-radius-sm);
	font-size:.95rem;font-weight:600;text-decoration:none;
}
.tp-btn:hover{background:#2C3A30;border-color:#2C3A30;color:#fff}
.tp-btn:focus-visible{outline:2px solid var(--tp-accent-deep);outline-offset:3px}
.tp-btn--ghost{background:transparent;color:var(--tp-accent-text,var(--tp-accent-deep));border-color:var(--tp-line)}
.tp-btn--ghost:hover{background:var(--tp-surface);color:var(--tp-accent-text,var(--tp-accent-deep));border-color:var(--tp-accent)}

/* ── Schmale Schirme ─────────────────────────────────────────── */
@media (max-width:780px){
	/* Der Switcher wird auf schmalen Schirmen nicht zusammengedrueckt,
	   sondern gestapelt: Zustand oben, Auswahl darunter ueber die
	   volle Breite, Ruecksetzer als eigene Zeile. Die Reihenfolge
	   bleibt dieselbe wie am Schreibtisch. */
	.tp-loc{max-width:none}
	.tp-loc__where{font-size:1.45rem}
	.tp-loc__actions{flex-direction:column;align-items:stretch}
	.tp-loc__form{flex-direction:column;align-items:stretch}
	.tp-loc__pick{flex:1 1 auto;width:100%;min-height:3.25rem}
	.tp-loc__go{width:100%;min-height:3.25rem}
	.tp-loc__reset{width:100%;justify-content:center;min-height:3rem;border-color:var(--tp-line)}
}
@media (max-width:560px){
	.tp-place-list__items{grid-template-columns:1fr}
	.tp-card__media{aspect-ratio:16/10}
	.tp-empty{padding:1.6rem 1.1rem 1.8rem}
	.tp-empty__actions .tp-btn{flex:1 1 100%}
	.tp-facets{gap:.4rem;margin:1.5rem 0 1.2rem}
	/* 0.9.12: gemessen waren die Pillen 32 px hoch. Am Telefon ist das
	   kein verlaessliches Beruehrungsziel; 44 px ist die uebliche
	   Untergrenze. Die Schriftgroesse bleibt, nur die Flaeche waechst. */
	.tp-facet{min-height:44px;padding-top:0;padding-bottom:0}
	.tp-card--no-photo .tp-card__media{min-height:3.1rem}
}
/* 0.9.45 — bildloser Ersatz, bis das Skript ihn bei fehlender Datei zeigt */
[data-tp-bild-ersatz][hidden]{display:none}
