Files
eventmap/css/layout.css
T
dapelzaandClaude Sonnet 5 2aaff8f680 Seed-Daten per Fetch von externem Server laden, UI-Sprachumschalter (DE/EN) und KI-Übersetzungs-Prompt-Generator ergänzen
- Beispieldaten werden nicht mehr eingebettet (data/seed.js entfernt),
  sondern beim ersten Start per fetch(EventMap.config.SEED_DATA_URL) von
  einem externen, selbst gehosteten Server geladen (siehe ADR 0001,
  Revision 2026-07-28).
- Neuer UI-Sprachumschalter (Deutsch/Englisch) für die Bedienoberfläche:
  js/i18n/strings.js + js/i18n/i18n.js, Sprachwahl im Menü, Persistenz über
  settings.language, Retranslation ohne Reload.
- Neuer Menüpunkt "Ausflugsziel übersetzen (KI)": erzeugt einen Prompt, der
  eine externe KI bittet, Name/Beschreibungen eines bestehenden Ortes ins
  Englische, Spanische oder Französische zu übersetzen (js/ai/translatePromptBuilder.js,
  js/ui/translatePromptGenerator.js).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-28 15:16:31 +02:00

153 lines
2.8 KiB
CSS

/* 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);
}