/* Grundlegendes App-Layout: Header + Karte/Liste. Mobile-first; Desktop-Anpassungen (>=1024px) siehe css/responsive.css. body ist ein Flex-Container (Header + app-status + app-layout untereinander). app-layout bekommt flex:1 und füllt damit immer den verbleibenden Platz - unabhängig davon, wie hoch der Header gerade ist. Das ist bewusst kein fixes calc(100vh - Header-Höhe) mehr, da der Header jetzt wächst, sobald das Aktionen-Menü (.app-menu) geöffnet ist. */ body { display: flex; flex-direction: column; min-height: 100vh; } .app-header { flex-shrink: 0; padding: var(--space-sm) var(--space-lg); background: var(--color-primary); color: #fff; } .app-header__row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); min-height: 48px; } .app-header__title { font-size: 1.4rem; font-weight: 700; } .app-header__subtitle { font-size: 0.85rem; opacity: 0.9; } .app-header__menu-toggle { flex-shrink: 0; width: 44px; height: 44px; border: none; border-radius: var(--radius-sm); background: rgba(255, 255, 255, 0.15); color: #fff; font-size: 1.3rem; line-height: 1; } .app-header__menu-toggle[aria-expanded="true"] { background: rgba(255, 255, 255, 0.3); } .app-menu { display: flex; flex-wrap: wrap; gap: var(--space-sm); padding-top: var(--space-md); } .app-menu[hidden] { display: none; } .app-menu__language { display: flex; align-items: center; gap: var(--space-sm); flex-basis: 100%; } .app-menu__language-label { font-size: 0.85rem; color: #fff; } .app-menu__language-select { padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-sm); border: none; font-size: 0.9rem; } .app-layout { flex: 1; min-height: 0; display: flex; flex-direction: column; } .map-panel { position: relative; height: 50vh; min-height: 320px; display: flex; flex-direction: column; } .map-panel__map { flex: 1; width: 100%; height: 100%; background: var(--color-border); } .map-panel__map--picking { cursor: crosshair; } .map-picking-hint { position: absolute; top: var(--space-sm); left: var(--space-sm); z-index: 1000; display: flex; align-items: center; gap: var(--space-sm); background: var(--color-surface); color: var(--color-primary-dark); padding: var(--space-sm) var(--space-md); border-radius: var(--radius-sm); box-shadow: var(--shadow-card); font-size: 0.85rem; } .map-picking-hint[hidden] { display: none; } .map-picking-hint__cancel { flex-shrink: 0; border: none; background: transparent; color: var(--color-primary-dark); font-weight: 600; text-decoration: underline; cursor: pointer; padding: 0; } .list-panel { padding: var(--space-md); overflow-y: auto; } .list-panel__title { font-size: 1.1rem; margin-bottom: var(--space-md); }