feat: add collapsible map controls

This commit is contained in:
2026-07-21 03:02:49 +01:00
parent 4ddb7fc2d8
commit 41ded45b09
5 changed files with 171 additions and 10 deletions
+122 -8
View File
@@ -1,7 +1,7 @@
:root {
color-scheme: light;
--bg: #f3efe3;
--panel: rgba(253, 249, 240, 0.92);
--panel: rgba(253, 249, 240, 0.75);
--panel-border: rgba(92, 73, 49, 0.18);
--ink: #1f2a2e;
--muted: #5f6b6f;
@@ -30,10 +30,8 @@ body {
}
.app-shell {
display: grid;
grid-template-columns: minmax(320px, 380px) 1fr;
position: relative;
min-height: 100vh;
gap: 24px;
padding: 24px;
}
@@ -43,9 +41,70 @@ body {
}
.sidebar {
position: fixed;
z-index: 10;
top: 24px;
bottom: 24px;
left: 24px;
width: min(266px, calc(100vw - 48px));
display: flex;
flex-direction: column;
gap: 16px;
overflow-y: auto;
padding: 8px;
transition: transform 240ms ease;
backdrop-filter: blur(3px);
}
.sidebar-toggle {
position: fixed;
z-index: 11;
display: grid;
width: 42px;
height: 42px;
padding: 0;
place-items: center;
border: 1px solid var(--panel-border);
border-radius: 14px;
background: var(--panel);
color: var(--ink);
font-size: 1.65rem;
font-weight: 500;
line-height: 1;
box-shadow: var(--shadow);
}
.sidebar-toggle:hover {
transform: translateY(-1px);
}
.sidebar-open {
top: 32px;
left: 32px;
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity 180ms ease;
}
.sidebar-close {
position: absolute;
top: 18px;
right: 18px;
}
.sidebar-close span[aria-hidden="true"] {
transform: translateY(-1px);
}
.app-shell.sidebar-is-collapsed .sidebar {
transform: translateX(calc(-100% - 24px));
}
.app-shell.sidebar-is-collapsed .sidebar-open {
opacity: 1;
visibility: visible;
pointer-events: auto;
}
.brand,
@@ -61,6 +120,32 @@ body {
padding: 24px;
}
.brand-logo {
display: block;
width: min(100%, 178px);
height: auto;
}
.brand-subtitle {
margin-top: 8px;
color: var(--muted);
font-size: 1rem;
font-weight: 700;
letter-spacing: 0.04em;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
h1,
h2,
p {
@@ -210,11 +295,12 @@ button:disabled {
}
.map-wrap {
position: relative;
position: fixed;
z-index: 0;
inset: 24px;
overflow: hidden;
border-radius: 32px;
box-shadow: var(--shadow);
min-height: 70vh;
}
#map {
@@ -222,12 +308,40 @@ button:disabled {
inset: 0;
}
.map-wrap .ol-zoom {
top: 16px;
right: 16px;
left: auto;
}
@media (max-width: 920px) {
.app-shell {
grid-template-columns: 1fr;
padding: 16px;
}
.map-wrap {
min-height: 62vh;
inset: 16px;
border-radius: 24px;
}
.map-wrap .ol-zoom {
top: 12px;
right: 12px;
}
.sidebar {
top: 16px;
bottom: 16px;
left: 16px;
width: min(266px, calc(100vw - 32px));
}
.sidebar-open {
top: 24px;
left: 24px;
}
.app-shell.sidebar-is-collapsed .sidebar {
transform: translateX(calc(-100% - 16px));
}
}