feat: add collapsible map controls
This commit is contained in:
+122
-8
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user