/* ============================================================
   Move2Beruf – Karte (/karte)

   Ergänzt backend.css um das, was nur diese Seite braucht: die
   Zweiteilung aus Karte und Liste, die Nadeln und die Sprechblasen.
   Alles andere (Karten, Kennzahlen, Filterfelder, Knöpfe) kommt aus
   dem gemeinsamen Baukasten – deshalb steht hier nichts, was auch
   eine zweite Seite gebrauchen könnte.

   Geladen über das Modell-Attribut pageStyles, damit die Datei nur
   auf dieser Seite im Netz landet und nicht in jedem Backend-Aufruf.
   ============================================================ */

/* ---------- Zweiteilung ---------- */
/* Auf dem Handy untereinander: erst die Karte für den Überblick,
   darunter die Liste zum Durchgehen. */
.kartenseite {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 1.25rem;
    align-items: start;
}

.kartenbox {
    position: relative;
    background: var(--surface);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
}

#karte {
    /* Feste Höhe auf dem Handy, damit die Liste darunter nicht erst
       nach einem halben Bildschirm Karte beginnt. */
    height: 340px;
    width: 100%;
    background: var(--surface-3);
    z-index: 0;
}
#karte:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }

.kartenbox__leiste {
    display: flex;
    align-items: center;
    gap: .75rem;
    flex-wrap: wrap;
    padding: .6rem .75rem;
    border-top: 1px solid var(--line);
    background: var(--surface-2);
}
.kartenbox__hinweis {
    margin: 0;
    font-size: .84rem;
    color: var(--text-subtle);
    min-width: 0;
}

/* ---------- Ganze Karte ---------- */
/* "Ganze Karte" legt die Kartenbox über die ganze Seite. Die Karte
   nimmt dann alles außer der Leiste ein; die festen Höhen oben gelten
   dort nicht. z-index über der Kopfleiste (60). */
.kartenbox.is-gross {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    flex-direction: column;
    border: 0;
    border-radius: 0;
    /* Auf der öffentlichen Seite sind die Flächen halb durchsichtig;
       ohne deckenden Grund schiene die Fußzeile durch die Leiste. */
    background: var(--bg);
}
.kartenbox.is-gross #karte {
    flex: 1 1 auto;
    height: auto;
    min-height: 0;
}
.kartenbox.is-gross .kartenbox__leiste {
    padding-bottom: max(.6rem, env(safe-area-inset-bottom));
}
/* Die Seite darunter soll nicht mitscrollen. Die Kartenspalte ist ab
   1000px sticky und damit ein eigener Stapelkontext – ohne eigenen
   z-index läge die Kopfleiste trotz der 1000 oben über der Karte. */
body.karte-gross { overflow: hidden; }
body.karte-gross .kartenseite__karte { z-index: 1000; }

/* ---------- Liste ---------- */
.firmenliste {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
    gap: .9rem;
}
.firmenliste li[hidden] { display: none; }

.firmakachel {
    display: flex;
    flex-direction: column;
    gap: .6rem;
    background: var(--surface);
    border: 1px solid var(--line);
    border-left: 3px solid transparent;
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-sm);
    padding: .9rem;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.firmakachel:hover { box-shadow: var(--shadow); }
/* Der hervorgehobene Betrieb – gesetzt vom Klick in der Liste wie vom
   Klick auf die Nadel, damit beide Richtungen dasselbe zeigen. */
.firmakachel.is-aktiv {
    border-left-color: var(--accent);
    box-shadow: 0 0 0 2px var(--accent-line), var(--shadow);
}

.firmakachel__kopf { display: flex; gap: .7rem; align-items: flex-start; }
.firmakachel__logo {
    flex: none;
    width: 46px;
    height: 46px;
    border-radius: var(--radius);
    object-fit: contain;
    background: var(--surface-2);
    border: 1px solid var(--line);
    padding: 3px;
}
.firmakachel__logo--leer {
    display: grid;
    place-items: center;
    color: var(--text-subtle);
    padding: 0;
}
.firmakachel__name {
    font-size: 1rem;
    font-weight: 650;
    margin: 0;
    line-height: 1.25;
}
.firmakachel__ort {
    margin: .1rem 0 0;
    font-size: .85rem;
    color: var(--text-muted);
}

.firmakachel__angebote {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: .35rem;
}
.firmakachel__angebote li {
    font-size: .78rem;
    font-weight: 600;
    color: var(--ok);
    background: var(--ok-soft);
    border: 1px solid var(--ok-line);
    border-radius: 999px;
    padding: .1rem .55rem;
}

.firmakachel__tags { display: flex; flex-wrap: wrap; gap: .35rem; }

.firmakachel__fuss {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: .5rem;
    margin-top: auto;
    padding-top: .3rem;
}
.firmakachel__unverortet {
    font-size: .8rem;
    color: var(--text-subtle);
}

/* ---------- Nadeln ---------- */
/* Eigene Nadel statt der Bild-Marker von Leaflet: sie trägt den
   Anfangsbuchstaben, lässt sich hervorheben und braucht keine
   Bilddatei. */
.nadel {
    position: relative;
    display: block;
}
.nadel__kopf {
    position: absolute;
    left: 50%;
    top: 0;
    width: 30px;
    height: 30px;
    margin-left: -15px;
    border-radius: 50% 50% 50% 0;
    transform: rotate(-45deg);
    background: var(--accent);
    border: 2px solid #fff;
    box-shadow: 0 2px 6px rgba(15, 23, 42, .35);
    transition: background .15s ease, transform .15s ease;
}
.nadel__text {
    position: absolute;
    left: 0;
    top: 0;
    width: 30px;
    height: 30px;
    display: grid;
    place-items: center;
    color: #fff;
    font: 700 14px/1 var(--font);
    pointer-events: none;
}
.nadel:hover .nadel__kopf { background: var(--accent-hover); }
.nadel--aktiv .nadel__kopf {
    background: var(--danger);
    transform: rotate(-45deg) scale(1.15);
}
/* Leaflet setzt den Fokus auf das Markerelement selbst. */
.nadel:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ---------- Stadtnamen ---------- */
/* Herne und Bochum tragen ihren Namen mitten in der Fläche. Der Anker
   ist ein Punkt ohne Größe, das Schild wird darüber zentriert. Die
   Farben hängen nicht an den Seitenfarben: die Kartenkacheln sind in
   beiden Rahmen hell, und die Stadtfarbe kommt aus dem Skript. */
.stadtname-anker { position: relative; }
.stadtname {
    position: absolute;
    left: 0;
    top: 0;
    transform: translate(-50%, -50%);
    white-space: nowrap;
    padding: .2rem .6rem;
    border: 2px solid var(--stadt, #0f172a);
    border-radius: 999px;
    background: rgba(255, 255, 255, .92);
    color: var(--stadt, #0f172a);
    font: 800 .8rem/1.2 var(--font, system-ui, sans-serif);
    letter-spacing: .08em;
    text-transform: uppercase;
    box-shadow: 0 1px 4px rgba(15, 23, 42, .25);
    pointer-events: none;
}

/* ---------- Sprechblase ---------- */
.leaflet-popup-content { margin: .75rem .85rem; font-family: var(--font); }
.leaflet-popup-content-wrapper { border-radius: var(--radius-lg); }

.blase p { margin: 0; }
.blase__name { font-size: 1rem; font-weight: 700; color: var(--text); }
.blase__standort { font-size: .85rem; color: var(--text-muted); margin-top: .1rem !important; }
.blase__adresse { font-size: .85rem; color: var(--text-muted); margin-top: .25rem !important; }
.blase__angebote {
    font-size: .8rem;
    color: var(--ok);
    font-weight: 600;
    margin-top: .4rem !important;
}
.blase__plaetze { font-size: .8rem; color: var(--text-subtle); margin-top: .15rem !important; }
.blase__fuss {
    display: flex;
    align-items: center;
    gap: .6rem;
    flex-wrap: wrap;
    margin-top: .6rem !important;
}
.blase__link {
    display: inline-flex;
    align-items: center;
    background: var(--accent);
    color: #fff !important;
    text-decoration: none;
    font-weight: 650;
    font-size: .84rem;
    padding: .35rem .75rem;
    border-radius: var(--radius);
}
.blase__link:hover { background: var(--accent-hover); }
.blase__route { font-size: .82rem; }

/* ---------- Ab 1000px: Karte links, Liste rechts ---------- */
@media (min-width: 1000px) {
    .kartenseite { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); }

    /* Die Karte bleibt stehen, während die Liste daneben scrollt. 5rem
       Abstand nach oben, damit sie nicht unter der Kopfleiste klebt. */
    .kartenseite__karte {
        position: sticky;
        top: 5rem;
    }
    #karte { height: min(70vh, 620px); }

    /* Die Liste bekommt eine Spalte und behält ihre Kacheln untereinander –
       zwei nebeneinander wären neben der Karte zu schmal für einen Namen. */
    .firmenliste { grid-template-columns: minmax(0, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
    .nadel__kopf, .firmakachel { transition: none; }
}
