feat: add settings modal for map display

This commit is contained in:
zv
2026-06-23 20:35:45 +02:00
parent 0a008a4d39
commit c53d109c41
4 changed files with 441 additions and 57 deletions

View File

@@ -150,6 +150,13 @@ a {
line-height: 1.1;
}
.brand-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 0.9rem;
}
.brand-header p {
margin: 0.25rem 0 0;
color: #66726a;
@@ -313,6 +320,12 @@ a {
line-height: 1.2;
}
.section-heading h3 {
margin: 0;
font-size: 0.98rem;
line-height: 1.2;
}
.section-heading span,
.field-note {
color: #66726a;
@@ -821,6 +834,12 @@ a {
height: 100%;
}
.map-view-dimmed .leaflet-pane,
.map-view-dimmed .leaflet-control-container {
opacity: 0.55;
transition: opacity 140ms ease;
}
.map-view .leaflet-control-zoom {
overflow: hidden;
border: 1px solid #a7b6ad;
@@ -867,6 +886,20 @@ a {
cursor: not-allowed;
}
.map-view .leaflet-tooltip {
border: 1px solid #a7b6ad;
border-radius: 6px;
background: #ffffff;
color: #17211c;
box-shadow: 0 4px 14px rgb(23 33 28 / 14%);
font-size: 0.76rem;
font-weight: 720;
}
.map-view .leaflet-tooltip::before {
border-top-color: #ffffff;
}
.result-marker {
display: grid;
place-items: center;
@@ -960,6 +993,131 @@ a {
line-height: 1.45;
}
.modal-backdrop {
position: fixed;
z-index: 3000;
inset: 0;
display: grid;
place-items: center;
background: rgb(23 33 28 / 38%);
padding: 1rem;
}
.settings-modal {
display: grid;
gap: 1rem;
width: min(560px, 100%);
max-height: min(760px, calc(100vh - 2rem));
overflow: auto;
border: 1px solid #a7b6ad;
border-radius: 10px;
background: #fafbf8;
padding: 1rem;
box-shadow:
0 24px 70px rgb(23 33 28 / 26%),
0 8px 24px rgb(23 33 28 / 16%);
}
.settings-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 1rem;
border-bottom: 1px solid #dde5de;
padding-bottom: 0.8rem;
}
.settings-header h2 {
margin: 0;
font-size: 1.25rem;
}
.settings-header p {
margin: 0.25rem 0 0;
color: #66726a;
font-size: 0.88rem;
line-height: 1.4;
}
.settings-section {
display: grid;
gap: 0.75rem;
border-bottom: 1px solid #e1e6df;
padding-bottom: 1rem;
}
.settings-section:last-child {
border-bottom: 0;
padding-bottom: 0;
}
.settings-toggle-grid {
display: grid;
gap: 0.5rem;
}
.settings-toggle-grid label {
display: flex;
align-items: center;
gap: 0.55rem;
min-height: 38px;
border: 1px solid #c8d2ca;
border-radius: 7px;
background: linear-gradient(#ffffff, #f7f9f6);
padding: 0.48rem 0.6rem;
font-weight: 620;
cursor: pointer;
}
.settings-toggle-grid label:hover {
border-color: #7f9588;
background: #f3f9f6;
}
.settings-toggle-grid input {
position: relative;
flex: 0 0 1rem;
width: 1rem !important;
min-width: 1rem;
max-width: 1rem;
height: 1rem;
min-height: 1rem;
margin: 0;
border: 1px solid #8ea098;
border-radius: 4px;
appearance: none;
background: #ffffff;
padding: 0;
}
.settings-toggle-grid input::before {
content: "";
position: absolute;
left: 50%;
top: 46%;
width: 0.28rem;
height: 0.52rem;
border-right: 2px solid #ffffff;
border-bottom: 2px solid #ffffff;
transform: translate(-50%, -50%) rotate(45deg) scale(0);
transition: transform 120ms ease;
}
.settings-toggle-grid input:checked {
border-color: #226a5d;
background: #226a5d;
}
.settings-toggle-grid input:checked::before {
transform: translate(-50%, -50%) rotate(45deg) scale(1);
}
.settings-toggle-grid label:has(input:checked) {
border-color: #5f9488;
background: #e5f2ee;
box-shadow: inset 0 0 0 1px rgb(34 106 93 / 16%);
}
@media (max-width: 900px) {
.app-shell {
grid-template-columns: 1fr;
@@ -1001,4 +1159,9 @@ a {
.query-actions button {
width: 100%;
}
.settings-header {
align-items: stretch;
flex-direction: column;
}
}