:root { color: #1c1915; background: #1e3328; font-family: system-ui, sans-serif; font-size: 16px; line-height: 1.35; } *, *::before, *::after { box-sizing: border-box; } html, body { margin: 0; height: 100%; overflow: hidden; background: #1e3328; } button, input { font: inherit; font-size: 16px; } #app { height: 100dvh; max-height: 100dvh; display: flex; flex-direction: column; padding-top: env(safe-area-inset-top); padding-bottom: env(safe-area-inset-bottom); background: #1e3328; } .map { flex: 1 1 auto; min-height: 40dvh; position: relative; background: #e7e1d4; } .map-download { position: absolute; z-index: 2; right: max(12px, env(safe-area-inset-right)); bottom: max(12px, env(safe-area-inset-bottom)); box-shadow: 0 1px 3px rgba(28, 25, 21, 0.4); } .map .ol-viewport { background: #e7e1d4; } .panel { flex: 0 1 auto; max-height: 52dvh; overflow: auto; display: flex; flex-direction: column; gap: 10px; background: #e7e1d4; color: #1c1915; border-bottom: 4px solid #1e3328; padding: 8px max(16px, env(safe-area-inset-right)) 10px max(16px, env(safe-area-inset-left)); } .panel-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; } .panel-head h1 { flex: 1 1 auto; } .head-actions { display: flex; flex: 0 0 auto; gap: 8px; } .head-actions .icon-button { flex: 0 0 auto; } button.icon-button { position: relative; width: 44px; height: 44px; min-width: 44px; min-height: 44px; padding: 0; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: #e7e1d4; color: #1e3328; border-color: #1e3328; } .map-download.icon-button { position: absolute; } button.icon-button .glyph, button.icon-button .strike { width: 22px; height: 22px; display: block; } button.icon-button .strike { display: none; position: absolute; left: 50%; top: 50%; width: 26px; height: 26px; transform: translate(-50%, -50%); } button.icon-button[aria-expanded="true"] .strike { display: block; } .fold { display: flex; flex-direction: column; gap: 8px; } .info p { margin: 0; } .info a { color: #1d4e89; } h1 { margin: 0; font-size: 20px; font-weight: 700; letter-spacing: 0.06em; color: #1e3328; } form, .actions, .gebiet { display: flex; flex-direction: column; gap: 8px; } .fields { display: grid; grid-template-columns: 1fr; gap: 8px; } label { display: flex; flex-direction: column; gap: 4px; font-size: 16px; font-weight: 600; } .download-knopf { flex-direction: row; align-items: center; gap: 10px; min-height: 44px; } .download-knopf input { width: 1.25rem; height: 1.25rem; min-height: 0; margin: 0; padding: 0; flex: 0 0 auto; accent-color: #1e3328; } .download-knopf span { flex: 1 1 auto; min-width: 0; } input { width: 100%; min-height: 44px; padding: 8px 10px; border: 1px solid #1e3328; border-radius: 2px; background: #f4f0e6; color: #1c1915; } .fields input { width: 33%; min-width: 6.5rem; } button { min-height: 44px; padding: 10px 14px; border: 1px solid #1e3328; border-radius: 2px; background: #1e3328; color: #e7e1d4; font-weight: 600; } button.secondary { background: #e7e1d4; color: #1e3328; } button.hessen-download { background: #b42318; border-color: #b42318; color: #e7e1d4; } button:disabled { background: #e7e1d4; color: #6f675c; border-color: #c4bbaa; } .actions { flex-direction: row; } .actions button { flex: 1 1 0; } .gebiet p, .notice, .boot-error { margin: 0; font-size: 16px; } .ziel-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; } .ziel-list li { display: flex; gap: 8px; align-items: stretch; } .ziel-list .ziel-open { flex: 1 1 auto; text-align: left; } .notice { padding: 10px 12px; background: #1e3328; color: #e7e1d4; } .boot-failure { margin: 24px 16px; display: flex; flex-direction: column; align-items: stretch; gap: 12px; max-width: 28rem; color: #e7e1d4; } .boot-failure .boot-error, .boot-failure p { margin: 0; } .boot-detail { font-family: ui-monospace, SFMono-Regular, monospace; font-size: 14px; overflow-wrap: anywhere; } [hidden] { display: none !important; } dialog { border: none; max-width: min(22rem, calc(100vw - 32px)); padding: 20px 16px max(16px, env(safe-area-inset-bottom)); background: #e7e1d4; color: #1c1915; } dialog::backdrop { background: rgba(28, 25, 21, 0.5); } .ask { margin: 0 0 8px; font-size: 20px; font-weight: 700; } .explain { margin: 0 0 16px; font-size: 16px; } .dialog-actions { display: flex; gap: 8px; } .dialog-actions button { flex: 1 1 0; } button:focus-visible, input:focus-visible { outline: 2px solid #1d4e89; outline-offset: 2px; } @media (min-width: 520px) { .fields { grid-template-columns: repeat(3, max-content); justify-content: start; column-gap: 16px; } .fields input { width: 8.5rem; } }