/** * 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); }