glam/frontend/src/pages/NDEMapPage.css

360 lines
5.6 KiB
CSS

/**
* NDE Map Page Styles
* Following Netwerk Digitaal Erfgoed (NDE) house style
*/
/* Page Layout */
.nde-map-page {
display: flex;
flex-direction: column;
height: calc(100vh - 60px); /* Subtract header height */
background: #f5f7fa;
}
/* Header */
.map-header {
background: linear-gradient(135deg, #0a3dfa 0%, #1e50ff 100%);
color: white;
padding: 1rem 1.5rem;
box-shadow: 0 2px 8px rgba(10, 61, 250, 0.2);
}
.header-content h1 {
margin: 0 0 0.25rem 0;
font-size: 1.5rem;
font-weight: 600;
letter-spacing: -0.02em;
}
.header-content .subtitle {
margin: 0;
font-size: 0.9rem;
opacity: 0.9;
}
/* Map Container */
.map-container {
display: flex;
flex: 1;
min-height: 0;
overflow: hidden;
}
/* Sidebar */
.map-sidebar {
width: 280px;
background: white;
border-right: 1px solid #e1e5eb;
display: flex;
flex-direction: column;
overflow-y: auto;
}
.map-sidebar h3 {
font-size: 0.85rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: #4a5568;
margin: 0 0 0.75rem 0;
}
/* Filter Section */
.filter-section {
padding: 1rem;
border-bottom: 1px solid #e1e5eb;
}
.filter-actions {
display: flex;
gap: 0.5rem;
margin-bottom: 0.75rem;
}
.filter-btn {
padding: 0.35rem 0.75rem;
font-size: 0.8rem;
border: 1px solid #d1d5db;
background: white;
border-radius: 4px;
cursor: pointer;
color: #4a5568;
transition: all 0.15s ease;
}
.filter-btn:hover {
background: #f3f4f6;
border-color: #0a3dfa;
color: #0a3dfa;
}
/* Type Filters */
.type-filters {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.type-filter {
display: flex;
align-items: center;
gap: 0.5rem;
cursor: pointer;
padding: 0.25rem 0;
font-size: 0.875rem;
color: #374151;
transition: color 0.15s ease;
}
.type-filter:hover {
color: #0a3dfa;
}
.type-filter input[type="checkbox"] {
width: 16px;
height: 16px;
cursor: pointer;
accent-color: #0a3dfa;
}
.type-color {
width: 14px;
height: 14px;
border-radius: 50%;
flex-shrink: 0;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
}
.type-label {
flex: 1;
}
.type-count {
color: #9ca3af;
font-size: 0.8rem;
}
/* Stats Section */
.stats-section {
padding: 1rem;
border-bottom: 1px solid #e1e5eb;
}
.stats-list {
display: grid;
grid-template-columns: 1fr auto;
gap: 0.5rem 1rem;
margin: 0;
}
.stats-list dt {
font-size: 0.85rem;
color: #6b7280;
}
.stats-list dd {
font-size: 0.85rem;
font-weight: 600;
color: #1f2937;
text-align: right;
margin: 0;
}
/* Legend Section */
.legend-section {
padding: 1rem;
flex: 1;
}
.data-source-info {
font-size: 0.8rem;
color: #6b7280;
line-height: 1.5;
margin: 0;
}
/* Map Wrapper */
.map-wrapper {
flex: 1;
position: relative;
}
.leaflet-map {
width: 100%;
height: 100%;
}
/* Leaflet Popup Customization */
.map-popup {
max-width: 280px;
}
.map-popup .type-badge {
display: inline-block;
padding: 0.2rem 0.5rem;
font-size: 0.7rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.03em;
color: white;
border-radius: 3px;
margin-bottom: 0.5rem;
}
.map-popup h3 {
margin: 0 0 0.5rem 0;
font-size: 1rem;
font-weight: 600;
color: #1f2937;
line-height: 1.3;
}
.map-popup p {
margin: 0 0 0.5rem 0;
font-size: 0.85rem;
color: #4b5563;
}
.map-popup .description {
font-size: 0.8rem;
color: #6b7280;
line-height: 1.4;
max-height: 60px;
overflow: hidden;
text-overflow: ellipsis;
}
.popup-links {
display: flex;
gap: 0.75rem;
margin-top: 0.75rem;
padding-top: 0.5rem;
border-top: 1px solid #e5e7eb;
}
.popup-links a {
font-size: 0.8rem;
color: #0a3dfa;
text-decoration: none;
font-weight: 500;
transition: color 0.15s ease;
}
.popup-links a:hover {
color: #1e50ff;
text-decoration: underline;
}
/* Loading State */
.loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
gap: 1rem;
}
.loading-spinner {
width: 48px;
height: 48px;
border: 4px solid #e1e5eb;
border-top-color: #0a3dfa;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.loading-container p {
font-size: 1rem;
color: #6b7280;
}
/* Error State */
.error-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
text-align: center;
padding: 2rem;
}
.error-container h2 {
color: #dc2626;
margin: 0 0 0.5rem 0;
}
.error-container p {
color: #6b7280;
margin: 0 0 1rem 0;
}
.error-hint {
background: #f3f4f6;
padding: 1rem;
border-radius: 6px;
font-size: 0.875rem;
}
.error-hint code {
display: block;
margin-top: 0.5rem;
padding: 0.5rem;
background: #1f2937;
color: #10b981;
border-radius: 4px;
font-family: 'Fira Code', 'Consolas', monospace;
font-size: 0.8rem;
}
/* Responsive Adjustments */
@media (max-width: 768px) {
.map-container {
flex-direction: column;
}
.map-sidebar {
width: 100%;
max-height: 40vh;
border-right: none;
border-bottom: 1px solid #e1e5eb;
}
.map-wrapper {
min-height: 60vh;
}
.map-header {
padding: 0.75rem 1rem;
}
.header-content h1 {
font-size: 1.25rem;
}
}
/* Leaflet overrides for NDE style */
.leaflet-control-zoom a {
background: white !important;
color: #0a3dfa !important;
}
.leaflet-control-zoom a:hover {
background: #f3f4f6 !important;
}
.leaflet-popup-content-wrapper {
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.leaflet-popup-tip {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}