/** * NDE Map Page Styles * Following Netwerk Digitaal Erfgoed (NDE) house style */ /* Page Layout */ .nde-map-page { display: flex; flex-direction: column; height: calc(100vh - var(--nav-height, 100px)); /* Dynamic nav height via CSS variable */ background: #f5f7fa; transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* 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); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); overflow: hidden; } /* Collapsed header state */ .map-header.collapsible-header--collapsed { padding: 0; max-height: 0; opacity: 0; pointer-events: none; } /* DuckLake Fallback Warning Banner */ .ducklake-fallback-warning { display: flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.5rem 1rem; background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%); color: white; font-size: 0.85rem; font-weight: 500; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); z-index: 100; } .ducklake-fallback-warning svg { flex-shrink: 0; } /* Dark mode for fallback warning */ [data-theme="dark"] .ducklake-fallback-warning { background: linear-gradient(135deg, #b86e00 0%, #8b5500 100%); } /* View Controls Bar */ .map-view-controls { display: flex; align-items: center; justify-content: flex-end; gap: 0.5rem; padding: 0.35rem 1rem; background: #f8f9fa; border-bottom: 1px solid #e1e5eb; position: relative; z-index: 1001; /* Ensure dropdown can overlay map */ overflow: visible; /* Allow search results to overflow */ } /* Search Bar Styles */ .map-search-container { position: relative; flex: 1; max-width: 400px; margin-right: auto; z-index: 1002; /* Above controls bar for dropdown */ } .map-search-input { width: 100%; padding: 0.4rem 2rem 0.4rem 0.75rem; font-size: 0.85rem; border: 1px solid #d1d5db; border-radius: 6px; background: white; color: #1f2937; transition: all 0.15s ease; } .map-search-input:focus { outline: none; border-color: #0a3dfa; box-shadow: 0 0 0 3px rgba(10, 61, 250, 0.1); } .map-search-input::placeholder { color: #9ca3af; } .map-search-clear { position: absolute; right: 0.5rem; top: 50%; transform: translateY(-50%); width: 20px; height: 20px; padding: 0; background: #e5e7eb; border: none; border-radius: 50%; color: #6b7280; font-size: 14px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s ease; } .map-search-clear:hover { background: #dc2626; color: white; } /* Search Results Dropdown */ .map-search-results { position: absolute; top: calc(100% + 4px); left: 0; right: 0; background: white; border: 1px solid #d1d5db; border-radius: 10px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18), 0 2px 8px rgba(0, 0, 0, 0.08); max-height: 420px; overflow-y: auto; overflow-x: hidden; z-index: 2000; animation: searchResultsSlideIn 0.15s ease-out; } @keyframes searchResultsSlideIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } } .search-results-count { position: sticky; top: 0; padding: 0.6rem 1rem; font-size: 0.75rem; font-weight: 600; color: #4b5563; background: linear-gradient(to bottom, #f3f4f6, #f9fafb); border-bottom: 1px solid #e5e7eb; z-index: 1; } .search-result-item { display: flex; align-items: center; gap: 0.85rem; padding: 0.75rem 1rem; cursor: pointer; border-bottom: 1px solid #f3f4f6; transition: all 0.15s ease; } .search-result-item:last-child { border-bottom: none; } .search-result-item:hover { background: linear-gradient(to right, #eff6ff, #f0f9ff); } .search-result-item:active { background: #dbeafe; } .search-result-type { flex-shrink: 0; width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; font-size: 0.7rem; font-weight: 700; color: white; border-radius: 6px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); } .search-result-info { display: flex; flex-direction: column; gap: 0.2rem; min-width: 0; flex: 1; } .search-result-name { font-size: 0.9rem; font-weight: 600; color: #111827; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; line-height: 1.3; } .search-result-location { font-size: 0.78rem; color: #6b7280; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .search-no-results { padding: 1.5rem 1rem; text-align: center; font-size: 0.9rem; color: #6b7280; } /* Show More Button */ .search-show-more { display: block; width: 100%; padding: 0.75rem 1rem; background: linear-gradient(to bottom, #f8fafc, #f1f5f9); border: none; border-top: 1px solid #e2e8f0; color: #3b82f6; font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.15s ease; text-align: center; } .search-show-more:hover { background: linear-gradient(to bottom, #eff6ff, #dbeafe); color: #2563eb; } .search-show-more:active { background: #dbeafe; } /* Header Toggle Bar */ .header-toggle-bar { display: flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.35rem 1rem; background: linear-gradient(135deg, #0a3dfa 0%, #1e50ff 100%); color: white; cursor: pointer; font-size: 0.75rem; font-weight: 500; transition: all 0.2s ease; } .header-toggle-bar:hover { background: linear-gradient(135deg, #1e50ff 0%, #3366ff 100%); } .header-toggle-bar .toggle-hint { opacity: 0.9; } .header-toggle-bar .toggle-icon { font-size: 0.65rem; } /* Header collapse button in view controls */ .view-control-btn.header-toggle-btn { color: #0a3dfa; border-color: #0a3dfa; } .view-control-btn.header-toggle-btn:hover { background: #0a3dfa; color: white; } .view-control-btn { display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.35rem 0.75rem; font-size: 0.75rem; font-weight: 500; background: white; border: 1px solid #d1d5db; border-radius: 4px; cursor: pointer; color: #4a5568; transition: all 0.15s ease; } .view-control-btn:hover { background: #f3f4f6; border-color: #0a3dfa; color: #0a3dfa; } .view-control-btn.fullscreen-btn--active { background: #0a3dfa; border-color: #0a3dfa; color: white; } .view-control-btn.fullscreen-btn--active:hover { background: #1e50ff; } /* Fullscreen mode styles */ .nde-map-page.fullscreen-active { position: fixed; top: 0; left: 0; right: 0; bottom: 0; width: 100vw; height: 100vh; z-index: 9999; background: #f5f7fa; } .nde-map-page.fullscreen-active .map-header { display: none; } .nde-map-page.fullscreen-active .header-toggle-bar { display: none; } .nde-map-page.fullscreen-active .map-view-controls { position: absolute; top: 0.5rem; right: 0.5rem; left: 0.5rem; z-index: 1000; background: rgba(255, 255, 255, 0.95); border-radius: 6px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); border: none; padding: 0.35rem; } .nde-map-page.fullscreen-active .map-container { height: 100%; } .nde-map-page.fullscreen-active .map-sidebar { display: none; } .nde-map-page.fullscreen-active .map-wrapper { width: 100%; } .header-content h1 { margin: 0 0 0.25rem 0; font-size: 1.5rem; font-weight: 600; letter-spacing: -0.02em; color: white; } .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; overscroll-behavior: contain; /* Prevent scroll propagation to parent/footer */ transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Desktop sidebar header with collapse toggle */ .sidebar-header-desktop { display: flex; justify-content: flex-end; padding: 0.5rem; border-bottom: 1px solid #e1e5eb; background: #f8fafc; } .sidebar-toggle-btn { display: flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; padding: 0; background: white; border: 1px solid #e1e5eb; border-radius: 4px; cursor: pointer; font-size: 1rem; font-weight: bold; color: #64748b; transition: all 0.2s ease; } .sidebar-toggle-btn:hover { background: var(--primary-color, #1976d2); border-color: var(--primary-color, #1976d2); color: white; } /* Collapsed desktop sidebar */ .map-sidebar.collapsed:not(.map-sidebar--mobile) { width: 48px; min-width: 48px; overflow: hidden; } .map-sidebar.collapsed:not(.map-sidebar--mobile) .sidebar-header-desktop { justify-content: center; } .map-sidebar.collapsed:not(.map-sidebar--mobile) .filter-section, .map-sidebar.collapsed:not(.map-sidebar--mobile) .active-filters-section, .map-sidebar.collapsed:not(.map-sidebar--mobile) .data-backend-section, .map-sidebar.collapsed:not(.map-sidebar--mobile) .clear-all-filters-section, .map-sidebar.collapsed:not(.map-sidebar--mobile) > *:not(.sidebar-header-desktop) { display: none; } .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; } /* Active Filters Section (in sidebar) */ .active-filters-section { padding: 1rem; background: linear-gradient(135deg, #eef2ff 0%, #e0e7ff 100%); border-bottom: 2px solid #c7d2fe; } .active-filters-section h3 { font-size: 0.8rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: #4338ca; margin: 0 0 0.75rem 0; } .active-filters-section .filter-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 0.75rem; } .active-filters-section .filter-tag { display: inline-flex; align-items: center; padding: 0.25rem 0.5rem; font-size: 0.7rem; font-weight: 600; border-radius: 4px; background: white; color: #374151; border: 1px solid #d1d5db; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .active-filters-section .filter-tag.province-tag { background: #d1fae5; color: #065f46; border-color: #6ee7b7; } .active-filters-section .filter-tag.type-tag { color: white; border: none; } .active-filters-section .filter-tag.city-tag { background: #dbeafe; color: #1e40af; border-color: #93c5fd; } .active-filters-section .filter-tag.highlight-tag { background: #fef3c7; color: #92400e; border-color: #fcd34d; } .active-filters-section .filter-tag.highlight-tag .match-indicator { font-size: 0.65rem; opacity: 0.7; font-style: italic; } .active-filters-section .filter-tag.highlight-tag.no-match, .active-filters-section .filter-tag.ghcid-tag.no-match { background: #fee2e2; color: #991b1b; border-color: #fca5a5; } .active-filters-section .filter-tag.enriched-tag { background: #ecfdf5; color: #065f46; border-color: #a7f3d0; } .active-filters-section .filter-tag.source-tag { background: #f3e8ff; color: #6b21a8; border-color: #d8b4fe; } .active-filters-section .filter-tag.has-tag { background: #fef9c3; color: #713f12; border-color: #fde047; } .active-filters-section .filter-tag.rating-tag { background: #fff7ed; color: #9a3412; border-color: #fdba74; } .active-filters-section .filter-tag.ghcid-tag { background: #eef2ff; color: #3730a3; border-color: #a5b4fc; } .active-filters-section .clear-filters-btn { width: 100%; padding: 0.4rem 0.75rem; font-size: 0.75rem; font-weight: 500; background: white; border: 1px solid #d1d5db; border-radius: 4px; color: #4b5563; cursor: pointer; transition: all 0.15s ease; } .active-filters-section .clear-filters-btn:hover { background: #f3f4f6; border-color: #dc2626; color: #dc2626; } .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; } /* Data Coverage Section */ .data-coverage-section { border-bottom: 1px solid #e1e5eb; } .data-coverage-section summary { cursor: pointer; padding: 1rem; list-style: none; display: flex; align-items: center; background: #f8fafc; } .data-coverage-section summary::-webkit-details-marker { display: none; } .data-coverage-section summary::before { content: '▶'; font-size: 0.7rem; margin-right: 0.5rem; transition: transform 0.2s ease; } .data-coverage-section[open] summary::before { transform: rotate(90deg); } .data-coverage-section summary h3 { font-size: 0.9rem; font-weight: 600; color: #1e3a5f; margin: 0; } .data-coverage-section .stats-list { padding: 0 1rem 1rem 1rem; } .data-sources-list { display: flex; flex-direction: column; gap: 0.25rem; } .data-source-row { display: flex; justify-content: space-between; align-items: center; padding: 0.25rem 0; border-bottom: 1px solid #f3f4f6; } .data-source-row:last-child { border-bottom: none; } .data-source-row dt { font-size: 0.8rem; color: #4b5563; } .data-source-row dd { display: flex; align-items: center; gap: 0.35rem; font-size: 0.8rem; font-weight: 600; margin: 0; } .data-source-row dd.has-data { color: #059669; } .data-source-row dd.no-data { color: #9ca3af; } .data-source-row .percentage { font-size: 0.7rem; font-weight: 400; color: #6b7280; } /* 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; } .maplibre-map { width: 100%; height: 100%; } /* Leaflet Popup Customization */ .map-popup { width: 100%; min-width: 0; } .map-popup .popup-photo { margin: -14px -14px 10px -14px; border-radius: 8px 8px 0 0; overflow: hidden; } .map-popup .popup-photo img { width: 100%; max-height: 200px; min-height: 100px; object-fit: cover; display: block; } .map-popup .popup-content { padding: 0; } .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; margin-right: 0.35rem; } .map-popup .status-badge { display: inline-block; padding: 0.2rem 0.5rem; font-size: 0.65rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.03em; border-radius: 3px; margin-bottom: 0.5rem; } .map-popup .status-badge.closed { background: #dc2626; color: white; } .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; /* Remove truncation - let it flow naturally when popup is resized */ } /* Rating styles */ .popup-rating { display: flex; align-items: center; gap: 0.35rem; margin-bottom: 0.5rem; } .popup-rating .stars { color: #f59e0b; font-size: 0.9rem; letter-spacing: -1px; } .popup-rating .rating-value { font-weight: 600; color: #1f2937; font-size: 0.85rem; } .popup-rating .rating-count { color: #6b7280; font-size: 0.75rem; } /* Address and phone */ .popup-address, .popup-phone { font-size: 0.8rem !important; color: #4b5563 !important; margin-bottom: 0.35rem !important; } .popup-phone a { color: #0a3dfa; text-decoration: none; } .popup-phone a:hover { text-decoration: underline; } /* Opening hours and reviews (collapsible) */ .popup-hours, .popup-reviews { font-size: 0.8rem; margin: 0.5rem 0; border: 1px solid #e5e7eb; border-radius: 6px; overflow: hidden; } .popup-hours summary, .popup-reviews summary { padding: 0.5rem; background: #f9fafb; cursor: pointer; font-weight: 500; color: #374151; list-style: none; } .popup-hours summary::-webkit-details-marker, .popup-reviews summary::-webkit-details-marker { display: none; } .popup-hours summary::before, .popup-reviews summary::before { content: '▶ '; font-size: 0.65rem; margin-right: 0.35rem; } .popup-hours[open] summary::before, .popup-reviews[open] summary::before { content: '▼ '; } .popup-hours ul { list-style: none; margin: 0; padding: 0.5rem; background: white; max-height: 140px; overflow-y: auto; } .popup-hours li { padding: 0.2rem 0; color: #4b5563; font-size: 0.75rem; border-bottom: 1px solid #f3f4f6; } .popup-hours li:last-child { border-bottom: none; } /* Reviews list */ .reviews-list { padding: 0.5rem; background: white; max-height: 350px; overflow-y: auto; } .review { padding: 0.5rem 0; border-bottom: 1px solid #f3f4f6; } .review:last-child { border-bottom: none; } .review-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.25rem; } .review-header strong { font-size: 0.75rem; color: #1f2937; } .review-rating { color: #f59e0b; font-size: 0.7rem; } .review-text { font-size: 0.75rem; color: #4b5563; line-height: 1.4; margin: 0.25rem 0; } .review-time { font-size: 0.65rem; color: #9ca3af; } /* Links section */ .popup-links { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.75rem; padding-top: 0.5rem; border-top: 1px solid #e5e7eb; } .popup-links a { font-size: 0.75rem; color: #0a3dfa; text-decoration: none; font-weight: 500; transition: color 0.15s ease; white-space: nowrap; } .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; } /* Mobile search and controls */ .map-view-controls { flex-wrap: wrap; padding: 0.5rem; gap: 0.35rem; } .map-search-container { width: 100%; max-width: none; order: -1; } .view-control-btn { font-size: 0.7rem; padding: 0.3rem 0.5rem; } .view-control-btn.header-toggle-btn { flex: 1; } } /* MapLibre GL Controls */ .maplibregl-ctrl-group { background: white !important; border-radius: 8px !important; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15) !important; } .maplibregl-ctrl-group button { color: #0a3dfa !important; } .maplibregl-ctrl-group button:hover { background: #f3f4f6 !important; } /* URL Filter Bar */ .url-filter-bar { display: flex; align-items: center; gap: 0.75rem; margin-top: 0.75rem; padding: 0.6rem 1rem; background: rgba(255, 255, 255, 0.15); border-radius: 8px; flex-wrap: wrap; } .url-filter-bar .filter-label { font-size: 0.8rem; font-weight: 500; opacity: 0.9; } .url-filter-bar .filter-tags { display: flex; gap: 0.5rem; flex-wrap: wrap; } .url-filter-bar .filter-tag { display: inline-flex; align-items: center; padding: 0.25rem 0.6rem; font-size: 0.75rem; font-weight: 600; border-radius: 20px; background: rgba(255, 255, 255, 0.25); backdrop-filter: blur(4px); } .url-filter-bar .filter-tag.province-tag { background: rgba(46, 204, 113, 0.8); } .url-filter-bar .filter-tag.type-tag { color: white; } .url-filter-bar .filter-tag.city-tag { background: rgba(52, 152, 219, 0.9); color: white; } .url-filter-bar .filter-tag.highlight-tag { background: rgba(255, 215, 0, 0.9); color: #1f2937; } .url-filter-bar .filter-tag.highlight-tag .match-indicator { font-size: 0.7rem; opacity: 0.7; font-style: italic; } .url-filter-bar .filter-tag.highlight-tag.no-match { background: rgba(239, 68, 68, 0.9); color: white; } .url-filter-bar .clear-filters-btn { margin-left: auto; padding: 0.35rem 0.75rem; font-size: 0.75rem; font-weight: 500; background: rgba(255, 255, 255, 0.2); border: 1px solid rgba(255, 255, 255, 0.4); border-radius: 4px; color: white; cursor: pointer; transition: all 0.15s ease; } .url-filter-bar .clear-filters-btn:hover { background: rgba(255, 255, 255, 0.3); border-color: rgba(255, 255, 255, 0.6); } /* Responsive: stack filter bar on mobile */ @media (max-width: 768px) { .url-filter-bar { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .url-filter-bar .clear-filters-btn { margin-left: 0; margin-top: 0.25rem; width: 100%; text-align: center; } } /* New enrichment data styles */ /* Alternative name when verified name differs */ .popup-alt-name { font-size: 0.75rem !important; color: #9ca3af !important; font-style: italic; margin-top: -0.25rem !important; margin-bottom: 0.5rem !important; } /* Identifiers (GHCID, ISIL) */ .popup-identifiers { display: flex; flex-wrap: wrap; gap: 0.35rem; margin: 0.5rem 0; } .identifier-badge { display: inline-flex; align-items: center; gap: 0.25rem; padding: 0.2rem 0.5rem; font-size: 0.7rem; font-family: 'Fira Code', 'Consolas', monospace; border-radius: 4px; background: #f3f4f6; color: #4b5563; border: 1px solid #e5e7eb; } .identifier-badge.ghcid { background: #eef2ff; color: #3730a3; border-color: #c7d2fe; } .identifier-badge.isil { background: #f0fdf4; color: #166534; border-color: #bbf7d0; } /* Clickable GHCID badge - click to copy UUID */ .identifier-badge.ghcid.clickable { cursor: pointer; transition: all 0.15s ease; } .identifier-badge.ghcid.clickable:hover { background: #c7d2fe; border-color: #a5b4fc; transform: scale(1.02); } .identifier-badge.ghcid.clickable:active { transform: scale(0.98); } /* Copied state - brief visual feedback */ .identifier-badge.ghcid.clickable.copied { background: #d1fae5; border-color: #6ee7b7; color: #065f46; } .identifier-badge.ghcid.clickable.copied::after { content: ' ✓'; font-size: 0.8em; } /* Museum Register badge */ .popup-museum-register { font-size: 0.8rem !important; color: #b45309 !important; background: #fef3c7; padding: 0.3rem 0.5rem; border-radius: 4px; margin: 0.5rem 0 !important; border: 1px solid #fcd34d; } /* Social media links */ .popup-social { display: flex; gap: 0.5rem; margin: 0.5rem 0; padding: 0.35rem 0; } .popup-social a { font-size: 1.1rem; text-decoration: none; opacity: 0.8; transition: opacity 0.15s ease, transform 0.15s ease; } .popup-social a:hover { opacity: 1; transform: scale(1.15); } /* Selected marker pulsing animation */ .marker-selected { animation: markerPulse 1.5s ease-in-out infinite; } @keyframes markerPulse { 0% { filter: drop-shadow(0 0 0 rgba(255, 215, 0, 0)); } 50% { filter: drop-shadow(0 0 12px rgba(255, 215, 0, 0.8)); } 100% { filter: drop-shadow(0 0 0 rgba(255, 215, 0, 0)); } } /* Wikidata type filter tag */ .active-filters-section .filter-tag.wikidata-type-tag { background: #fef3c7; color: #92400e; border-color: #fcd34d; } /* ============================================ MOBILE SIDEBAR OVERLAY & SWIPE GESTURES ============================================ */ /* Mobile mode indicator class */ .nde-map-page.is-mobile { /* No special base styles needed, just for targeting */ } /* Sidebar overlay for mobile */ .sidebar-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); z-index: 199; opacity: 1; transition: opacity 0.3s ease; } /* Mobile sidebar toggle button */ .sidebar-toggle { position: fixed; top: 100px; left: 10px; z-index: 100; background: white; border: 1px solid #e0e0e0; border-radius: 8px; padding: 0.75rem; cursor: pointer; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); transition: all 0.2s; display: flex; align-items: center; justify-content: center; } .sidebar-toggle:hover { background: #f8f9fa; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } .sidebar-toggle--mobile { top: 70px; z-index: 150; background: white; border: 1px solid #e0e0e0; border-radius: 8px; padding: 0.75rem; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); } /* Mobile sidebar - slides in from left */ .map-sidebar--mobile { position: fixed !important; top: 60px; /* Mobile nav height */ left: 0; bottom: 0; width: 85vw !important; max-width: 320px !important; z-index: 200; transform: translateX(0); transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); box-shadow: 4px 0 20px rgba(0, 0, 0, 0.2); border-right: none; max-height: none !important; height: calc(100vh - 60px) !important; overflow-y: auto; } .map-sidebar--mobile.collapsed { transform: translateX(-100%); opacity: 1; width: 85vw !important; max-width: 320px !important; } /* Mobile sidebar header */ .sidebar-header-mobile { display: flex; align-items: center; justify-content: space-between; padding: 1rem; background: linear-gradient(135deg, #0a3dfa 0%, #1e50ff 100%); color: white; border-bottom: 1px solid #e0e0e0; } .sidebar-header-mobile h2 { margin: 0; font-size: 1.1rem; font-weight: 600; } .sidebar-close-btn { background: rgba(255, 255, 255, 0.2); border: none; border-radius: 4px; padding: 0.5rem; cursor: pointer; color: white; display: flex; align-items: center; justify-content: center; transition: all 0.2s; } .sidebar-close-btn:hover { background: rgba(255, 255, 255, 0.3); } /* Clear All Filters Button */ .clear-all-filters-section { padding: 0.75rem 1rem; border-bottom: 1px solid #e5e7eb; background: linear-gradient(to bottom, #fef2f2, #fff5f5); } .clear-all-filters-btn { display: flex; align-items: center; justify-content: center; gap: 0.5rem; width: 100%; padding: 0.6rem 1rem; font-size: 0.85rem; font-weight: 600; background: #dc2626; border: none; border-radius: 6px; color: white; cursor: pointer; transition: all 0.2s ease; box-shadow: 0 2px 4px rgba(220, 38, 38, 0.25); } .clear-all-filters-btn:hover { background: #b91c1c; box-shadow: 0 4px 8px rgba(220, 38, 38, 0.35); transform: translateY(-1px); } .clear-all-filters-btn:active { transform: translateY(0); box-shadow: 0 1px 2px rgba(220, 38, 38, 0.25); } /* Swipe hint indicator (edge zone) */ .nde-map-page.is-mobile::before { content: ''; position: fixed; top: 60px; left: 0; width: 8px; height: calc(100vh - 60px); background: linear-gradient(to right, rgba(10, 61, 250, 0.1), transparent); z-index: 100; pointer-events: none; opacity: 0; transition: opacity 0.3s ease; } /* Show swipe hint when sidebar is closed */ .nde-map-page.is-mobile:not(:has(.map-sidebar:not(.collapsed)))::before { opacity: 1; } /* Mobile: Main content takes full width */ .nde-map-page.is-mobile .map-container { width: 100%; } .nde-map-page.is-mobile .map-wrapper { width: 100%; } /* Hide desktop sidebar when mobile is-mobile class is present */ .nde-map-page.is-mobile .map-sidebar:not(.map-sidebar--mobile) { display: none; } /* Mobile: Adjust view controls bar */ .nde-map-page.is-mobile .map-view-controls { flex-wrap: wrap; gap: 0.35rem; padding: 0.5rem; } .nde-map-page.is-mobile .map-search-container { flex: 1 1 100%; max-width: none; order: 1; } .nde-map-page.is-mobile .view-control-btn { font-size: 0.7rem; padding: 0.25rem 0.5rem; } /* Mobile: Hide header toggle text on very small screens */ @media (max-width: 480px) { .map-sidebar--mobile { top: 56px; height: calc(100vh - 56px) !important; } .sidebar-toggle--mobile { top: 66px; padding: 0.5rem; } .nde-map-page.is-mobile::before { top: 56px; height: calc(100vh - 56px); } .nde-map-page.is-mobile .view-control-btn.header-toggle-btn { display: none; } } /* Prevent body scroll when sidebar is open on mobile */ body:has(.nde-map-page.is-mobile .map-sidebar--mobile:not(.collapsed)) { overflow: hidden; } /* ============================================ COLLAPSIBLE FILTER SECTIONS ============================================ */ /* Collapsible filter container */ .collapsible-filter { padding: 0; } .collapsible-filter .filter-header { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; cursor: pointer; background: #f9fafb; border-bottom: 1px solid #e5e7eb; transition: background 0.15s ease; user-select: none; } .collapsible-filter .filter-header:hover { background: #f3f4f6; } .collapsible-filter .filter-header h3 { margin: 0; flex: 1; font-size: 0.8rem; } .collapsible-filter .filter-header svg { flex-shrink: 0; color: #6b7280; } .collapsible-filter .filter-count { font-size: 0.7rem; color: #6b7280; background: #e5e7eb; padding: 0.15rem 0.5rem; border-radius: 10px; font-weight: 500; transition: all 0.2s ease; } .collapsible-filter .filter-count.filter-active { color: #fff; background: #0a3dfa; font-weight: 600; } .collapsible-filter .filter-content { padding: 0.75rem 1rem; } /* Data Source Filters */ .source-filters { display: flex; flex-direction: column; gap: 0.4rem; } .source-filter { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; padding: 0.2rem 0; font-size: 0.85rem; color: #374151; transition: color 0.15s ease; } .source-filter:hover { color: #0a3dfa; } .source-filter input[type="checkbox"] { width: 15px; height: 15px; cursor: pointer; accent-color: #0a3dfa; } .source-label { flex: 1; display: flex; align-items: center; justify-content: space-between; } .source-count { color: #9ca3af; font-size: 0.75rem; } /* Location Filters */ .location-subsection { margin-bottom: 1rem; } .location-subsection:last-child { margin-bottom: 0; } .location-subsection h4 { font-size: 0.75rem; font-weight: 600; color: #6b7280; margin: 0 0 0.5rem 0; text-transform: uppercase; letter-spacing: 0.03em; } .location-filters { display: flex; flex-direction: column; gap: 0.35rem; } .location-filters.scrollable { max-height: 200px; overflow-y: auto; padding-right: 0.5rem; } .location-filters.scrollable::-webkit-scrollbar { width: 4px; } .location-filters.scrollable::-webkit-scrollbar-track { background: #f3f4f6; border-radius: 2px; } .location-filters.scrollable::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 2px; } .location-filters.scrollable::-webkit-scrollbar-thumb:hover { background: #9ca3af; } .location-filter { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; padding: 0.15rem 0; font-size: 0.8rem; color: #374151; transition: color 0.15s ease; } .location-filter:hover { color: #0a3dfa; } .location-filter input[type="checkbox"] { width: 14px; height: 14px; cursor: pointer; accent-color: #0a3dfa; } .location-label { flex: 1; display: flex; align-items: center; justify-content: space-between; } .location-count { color: #9ca3af; font-size: 0.7rem; } /* Rating Filters */ .rating-filters { display: flex; flex-direction: column; gap: 0.4rem; } .rating-filter { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; padding: 0.25rem 0; font-size: 0.85rem; color: #374151; transition: color 0.15s ease; } .rating-filter:hover { color: #f59e0b; } .rating-filter input[type="radio"] { width: 15px; height: 15px; cursor: pointer; accent-color: #f59e0b; } .rating-label { flex: 1; display: flex; align-items: center; justify-content: space-between; } .rating-count { color: #9ca3af; font-size: 0.75rem; } .clear-rating-btn { margin-top: 0.5rem; padding: 0.3rem 0.6rem; font-size: 0.75rem; color: #dc2626; border-color: #fca5a5; } .clear-rating-btn:hover { background: #fee2e2; color: #b91c1c; border-color: #f87171; } /* Mobile Light Mode Override */ @media (max-width: 900px) { .nde-map-page { background: #f5f7fa !important; } .map-sidebar, .map-sidebar--mobile { background: #ffffff !important; } .map-sidebar h3 { color: #4a5568 !important; } .filter-section { border-bottom-color: #e1e5eb !important; } .type-filter { color: #1f2937 !important; } .type-label { color: #1f2937 !important; } .stats-list dt { color: #4b5563 !important; } .stats-list dd { color: #1f2937 !important; } .data-source-info { color: #4b5563 !important; } /* Collapsible filters mobile adjustments */ .collapsible-filter .filter-header { padding: 0.6rem 0.75rem; } .collapsible-filter .filter-content { padding: 0.6rem 0.75rem; } .location-filters.scrollable { max-height: 150px; } } /* Werkgebied (service area) polygon styles */ .werkgebied-tooltip { background: rgba(52, 152, 219, 0.95); border: none; border-radius: 4px; color: white; font-size: 12px; padding: 4px 8px; font-weight: 500; } .werkgebied-tooltip::before { border-top-color: rgba(52, 152, 219, 0.95); } /* Werkgebied Active Indicator */ .werkgebied-indicator { display: flex; align-items: center; gap: 0.5rem; background: linear-gradient(135deg, #3498db 0%, #2980b9 100%); color: white; padding: 0.5rem 0.75rem; border-radius: 8px; font-size: 0.85rem; box-shadow: 0 2px 8px rgba(52, 152, 219, 0.4); animation: werkgebied-fade-in 0.3s ease; } @keyframes werkgebied-fade-in { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .werkgebied-indicator__icon { font-size: 1rem; } .werkgebied-indicator__text { font-weight: 500; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .werkgebied-indicator__count { color: rgba(255, 255, 255, 0.8); font-size: 0.8rem; } .werkgebied-indicator__close { display: flex; align-items: center; justify-content: center; width: 20px; height: 20px; background: rgba(255, 255, 255, 0.2); border: none; border-radius: 50%; color: white; font-size: 14px; font-weight: bold; cursor: pointer; transition: background 0.15s ease; margin-left: 0.25rem; } .werkgebied-indicator__close:hover { background: rgba(255, 255, 255, 0.35); } /* Mobile responsive for werkgebied indicator */ @media (max-width: 768px) { .werkgebied-indicator { padding: 0.4rem 0.6rem; font-size: 0.75rem; gap: 0.35rem; } .werkgebied-indicator__text { max-width: 120px; } .werkgebied-indicator__icon { font-size: 0.9rem; } } /* ============================================ DARK MODE STYLES ============================================ */ [data-theme="dark"] .nde-map-page { background: #1a1a2e; } [data-theme="dark"] .nde-map-page.fullscreen-active { background: #1a1a2e; } /* View Controls Bar - Dark Mode */ [data-theme="dark"] .map-view-controls { background: #16213e; border-bottom-color: #2a2a4a; } [data-theme="dark"] .map-search-input { background: #1a1a2e; border-color: #3a3a5a; color: #f0f0f0; } [data-theme="dark"] .map-search-input:focus { border-color: #4a7cff; box-shadow: 0 0 0 3px rgba(74, 124, 255, 0.2); } [data-theme="dark"] .map-search-input::placeholder { color: #6b6b8b; } [data-theme="dark"] .map-search-clear { background: #3a3a5a; color: #c0c0d0; } [data-theme="dark"] .map-search-clear:hover { background: #dc2626; color: white; } /* Search Results Dropdown - Dark Mode */ [data-theme="dark"] .map-search-results { background: #1e293b; border-color: #334155; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3); } [data-theme="dark"] .search-results-count { background: linear-gradient(to bottom, #1e293b, #263347); border-bottom-color: #334155; color: #94a3b8; } [data-theme="dark"] .search-result-item { border-bottom-color: #334155; } [data-theme="dark"] .search-result-item:hover { background: linear-gradient(to right, #1e3a5f, #1e3a5f); } [data-theme="dark"] .search-result-item:active { background: #1e4976; } [data-theme="dark"] .search-result-name { color: #f1f5f9; } [data-theme="dark"] .search-result-location { color: #94a3b8; } [data-theme="dark"] .search-no-results { color: #94a3b8; } [data-theme="dark"] .search-show-more { background: linear-gradient(to bottom, #1e293b, #263347); border-top-color: #334155; color: #60a5fa; } [data-theme="dark"] .search-show-more:hover { background: linear-gradient(to bottom, #1e3a5f, #1e4976); color: #93c5fd; } [data-theme="dark"] .search-show-more:active { background: #1e4976; } /* View Control Buttons - Dark Mode */ [data-theme="dark"] .view-control-btn { background: #1a1a2e; border-color: #3a3a5a; color: #c0c0d0; } [data-theme="dark"] .view-control-btn:hover { background: #2a2a4a; border-color: #4a7cff; color: #4a7cff; } [data-theme="dark"] .view-control-btn.header-toggle-btn { color: #4a7cff; border-color: #4a7cff; } [data-theme="dark"] .view-control-btn.header-toggle-btn:hover { background: #4a7cff; color: white; } /* Fullscreen mode - Dark Mode */ [data-theme="dark"] .nde-map-page.fullscreen-active .map-view-controls { background: rgba(22, 33, 62, 0.95); } /* Sidebar - Dark Mode */ [data-theme="dark"] .map-sidebar { background: #16213e; border-right-color: #2a2a4a; } [data-theme="dark"] .map-sidebar h3 { color: #c0c0d0; } /* Filter Section - Dark Mode */ [data-theme="dark"] .filter-section { border-bottom-color: #2a2a4a; } /* Active Filters Section - Dark Mode */ [data-theme="dark"] .active-filters-section { background: linear-gradient(135deg, #1e2746 0%, #252f4a 100%); border-bottom-color: #3a4a6a; } [data-theme="dark"] .active-filters-section h3 { color: #7c9aff; } [data-theme="dark"] .active-filters-section .filter-tag { background: #1a1a2e; color: #c0c0d0; border-color: #3a3a5a; } [data-theme="dark"] .active-filters-section .filter-tag.province-tag { background: #064e3b; color: #a7f3d0; border-color: #059669; } [data-theme="dark"] .active-filters-section .filter-tag.city-tag { background: #1e3a5f; color: #93c5fd; border-color: #3b82f6; } [data-theme="dark"] .active-filters-section .filter-tag.highlight-tag { background: #78350f; color: #fde68a; border-color: #f59e0b; } [data-theme="dark"] .active-filters-section .filter-tag.highlight-tag.no-match, [data-theme="dark"] .active-filters-section .filter-tag.ghcid-tag.no-match { background: #7f1d1d; color: #fecaca; border-color: #ef4444; } [data-theme="dark"] .active-filters-section .filter-tag.enriched-tag { background: #064e3b; color: #a7f3d0; border-color: #10b981; } [data-theme="dark"] .active-filters-section .filter-tag.source-tag { background: #4c1d95; color: #ddd6fe; border-color: #8b5cf6; } [data-theme="dark"] .active-filters-section .filter-tag.has-tag { background: #713f12; color: #fef08a; border-color: #eab308; } [data-theme="dark"] .active-filters-section .filter-tag.rating-tag { background: #7c2d12; color: #fed7aa; border-color: #f97316; } [data-theme="dark"] .active-filters-section .filter-tag.ghcid-tag { background: #312e81; color: #c7d2fe; border-color: #6366f1; } [data-theme="dark"] .active-filters-section .clear-filters-btn { background: #1a1a2e; border-color: #3a3a5a; color: #c0c0d0; } [data-theme="dark"] .active-filters-section .clear-filters-btn:hover { background: #2a2a4a; border-color: #ef4444; color: #ef4444; } /* Filter Buttons - Dark Mode */ [data-theme="dark"] .filter-btn { background: #1a1a2e; border-color: #3a3a5a; color: #c0c0d0; } [data-theme="dark"] .filter-btn:hover { background: #2a2a4a; border-color: #4a7cff; color: #4a7cff; } /* Type Filter Grid - Dark Mode */ [data-theme="dark"] .type-filter-grid { background: #1a1a2e; } [data-theme="dark"] .type-filter-item { border-color: #3a3a5a; } [data-theme="dark"] .type-filter-item:hover { border-color: #4a7cff; } [data-theme="dark"] .type-filter-name { color: #c0c0d0; } [data-theme="dark"] .type-filter-count { color: #a0a0b5; } /* Province/City Checkboxes - Dark Mode */ [data-theme="dark"] .province-checkbox-wrapper, [data-theme="dark"] .city-checkbox-wrapper { color: #c0c0d0; } [data-theme="dark"] .province-checkbox-wrapper:hover, [data-theme="dark"] .city-checkbox-wrapper:hover { background: #2a2a4a; } [data-theme="dark"] .province-count, [data-theme="dark"] .city-count { color: #a0a0b5; } /* Stats Section - Dark Mode */ [data-theme="dark"] .stats-section { background: #1a1a2e; border-top-color: #2a2a4a; } [data-theme="dark"] .stat-item { color: #c0c0d0; } [data-theme="dark"] .stat-value { color: #f0f0f0; } /* Legend Section - Dark Mode */ [data-theme="dark"] .legend-section { background: #1a1a2e; border-top-color: #2a2a4a; } [data-theme="dark"] .legend-item .legend-label { color: #c0c0d0; } [data-theme="dark"] .legend-item .legend-count { color: #a0a0b5; } /* Map Footer - Dark Mode */ [data-theme="dark"] .map-footer { background: #16213e; border-top-color: #2a2a4a; color: #a0a0b5; } [data-theme="dark"] .map-footer a { color: #7c9aff; } /* Tooltip - Dark Mode */ [data-theme="dark"] .map-tooltip { background: rgba(22, 33, 62, 0.95); border-color: #3a3a5a; color: #f0f0f0; } [data-theme="dark"] .tooltip-name { color: #f0f0f0; } [data-theme="dark"] .tooltip-city { color: #c0c0d0; } /* Cluster Tooltip - Dark Mode */ [data-theme="dark"] .cluster-tooltip { background: rgba(22, 33, 62, 0.95); border-color: #3a3a5a; color: #f0f0f0; } /* Loading Spinner - Dark Mode */ [data-theme="dark"] .map-loading { background: rgba(26, 26, 46, 0.9); color: #c0c0d0; } /* Error State - Dark Mode */ [data-theme="dark"] .map-error { background: #1a1a2e; border-color: #ef4444; color: #fca5a5; } /* Collapsible Sections - Dark Mode */ [data-theme="dark"] .collapsible-header { background: #1a1a2e; border-color: #3a3a5a; color: #c0c0d0; } [data-theme="dark"] .collapsible-header:hover { background: #2a2a4a; } /* Source Filter Dropdown - Dark Mode */ [data-theme="dark"] .source-filter-dropdown { background: #16213e; border-color: #3a3a5a; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); } [data-theme="dark"] .source-option { color: #c0c0d0; border-bottom-color: #2a2a4a; } [data-theme="dark"] .source-option:hover { background: #2a2a4a; } [data-theme="dark"] .source-option.selected { background: #1e3a5f; } /* Filter Search Input - Dark Mode */ [data-theme="dark"] .filter-search-input { background: #1a1a2e; border-color: #3a3a5a; color: #f0f0f0; } [data-theme="dark"] .filter-search-input:focus { border-color: #4a7cff; } [data-theme="dark"] .filter-search-input::placeholder { color: #6b6b8b; } /* Province/City List - Dark Mode */ [data-theme="dark"] .province-list, [data-theme="dark"] .city-list { background: #1a1a2e; } /* Scrollbar - Dark Mode */ [data-theme="dark"] .map-sidebar::-webkit-scrollbar { width: 8px; } [data-theme="dark"] .map-sidebar::-webkit-scrollbar-track { background: #1a1a2e; } [data-theme="dark"] .map-sidebar::-webkit-scrollbar-thumb { background: #3a3a5a; border-radius: 4px; } [data-theme="dark"] .map-sidebar::-webkit-scrollbar-thumb:hover { background: #4a4a6a; } /* Werkgebied Indicator - Dark Mode */ [data-theme="dark"] .werkgebied-indicator { background: linear-gradient(135deg, #1e3a5f 0%, #2a4a7a 100%); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); } /* Mobile Filters Toggle - Dark Mode */ [data-theme="dark"] .mobile-filters-toggle { background: #16213e; border-color: #3a3a5a; color: #c0c0d0; } [data-theme="dark"] .mobile-filters-toggle:hover { background: #2a2a4a; border-color: #4a7cff; color: #4a7cff; } /* Select Dropdown - Dark Mode */ [data-theme="dark"] select { background: #1a1a2e; border-color: #3a3a5a; color: #f0f0f0; } [data-theme="dark"] select:focus { border-color: #4a7cff; } /* Checkbox Styling - Dark Mode */ [data-theme="dark"] input[type="checkbox"] { accent-color: #4a7cff; } /* ============================================== Data Backend Selector Styles ============================================== */ .data-backend-section { border-bottom: 2px solid #e1e5eb; padding-bottom: 1rem; margin-bottom: 0.5rem; } .data-backend-section .filter-header { padding-bottom: 0.5rem; } .data-backend-section .filter-header svg { color: #0a3dfa; } .backend-selector { display: flex; flex-direction: column; gap: 0.5rem; } .backend-option { display: flex; align-items: center; gap: 0.5rem; padding: 0.6rem 0.75rem; background: #f8f9fa; border: 1px solid #e1e5eb; border-radius: 6px; cursor: pointer; transition: all 0.15s ease; } .backend-option:hover { background: #e8f0fe; border-color: #0a3dfa; } .backend-option.active { background: linear-gradient(135deg, #e8f0fe 0%, #d0e3ff 100%); border-color: #0a3dfa; box-shadow: 0 0 0 2px rgba(10, 61, 250, 0.1); } .backend-option input[type="radio"] { accent-color: #0a3dfa; margin: 0; flex-shrink: 0; } .backend-label { display: flex; align-items: center; gap: 0.5rem; flex: 1; } .backend-label svg { color: #6b7280; flex-shrink: 0; } .backend-option.active .backend-label svg { color: #0a3dfa; } .backend-name { font-weight: 500; color: #1f2937; font-size: 0.9rem; } .backend-desc { font-size: 0.75rem; color: #6b7280; margin-left: auto; } /* Active Source Indicator */ .active-source-indicator { display: flex; align-items: center; gap: 0.35rem; padding: 0.5rem 0.75rem; margin-top: 0.75rem; border-radius: 6px; font-size: 0.8rem; font-weight: 500; } .active-source-indicator span { display: flex; align-items: center; gap: 0.35rem; } .active-source-indicator.ducklake { background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); color: #166534; border: 1px solid #86efac; } .active-source-indicator.geoapi { background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%); color: #1e40af; border: 1px solid #93c5fd; } .active-source-indicator.fallback { background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); color: #92400e; border: 1px solid #fcd34d; } /* Dark mode - Data Backend Selector */ [data-theme="dark"] .data-backend-section { border-bottom-color: #3a3a5a; } [data-theme="dark"] .data-backend-section .filter-header svg { color: #6b9eff; } [data-theme="dark"] .backend-option { background: #16213e; border-color: #3a3a5a; } [data-theme="dark"] .backend-option:hover { background: #1e3a5f; border-color: #4a7cff; } [data-theme="dark"] .backend-option.active { background: linear-gradient(135deg, #1e3a5f 0%, #2a4a7a 100%); border-color: #4a7cff; box-shadow: 0 0 0 2px rgba(74, 124, 255, 0.2); } [data-theme="dark"] .backend-label svg { color: #9ca3af; } [data-theme="dark"] .backend-option.active .backend-label svg { color: #6b9eff; } [data-theme="dark"] .backend-name { color: #f0f0f0; } [data-theme="dark"] .backend-desc { color: #9ca3af; } [data-theme="dark"] .active-source-indicator.ducklake { background: linear-gradient(135deg, #065f46 0%, #047857 100%); color: #a7f3d0; border-color: #10b981; } [data-theme="dark"] .active-source-indicator.geoapi { background: linear-gradient(135deg, #1e3a8a 0%, #1d4ed8 100%); color: #bfdbfe; border-color: #3b82f6; } [data-theme="dark"] .active-source-indicator.fallback { background: linear-gradient(135deg, #78350f 0%, #92400e 100%); color: #fde68a; border-color: #f59e0b; } /* ====================================== Map View Transition & Country Tooltips ====================================== */ /* View transition loading overlay */ .map-transition-overlay { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 100; display: flex; align-items: center; justify-content: center; pointer-events: none; } .map-transition-spinner { width: 40px; height: 40px; border: 3px solid rgba(255, 255, 255, 0.3); border-top-color: #3498db; border-radius: 50%; animation: spin 0.8s linear infinite; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); background: rgba(255, 255, 255, 0.8); } @keyframes spin { to { transform: rotate(360deg); } } /* Country hover tooltip */ .country-hover-tooltip { position: absolute; z-index: 150; background: rgba(255, 255, 255, 0.95); border-radius: 8px; padding: 0.5rem 0.75rem; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1); pointer-events: none; min-width: 120px; max-width: 200px; backdrop-filter: blur(8px); border: 1px solid rgba(41, 128, 185, 0.3); } .tooltip-country-name { font-weight: 600; font-size: 0.9rem; color: #1f2937; margin-bottom: 0.25rem; } .tooltip-institution-count { font-size: 0.8rem; color: #2980b9; font-weight: 500; } /* Dark mode for country tooltip */ [data-theme="dark"] .country-hover-tooltip { background: rgba(31, 41, 55, 0.95); border-color: rgba(59, 130, 246, 0.4); } [data-theme="dark"] .tooltip-country-name { color: #f3f4f6; } [data-theme="dark"] .tooltip-institution-count { color: #60a5fa; } [data-theme="dark"] .map-transition-spinner { background: rgba(31, 41, 55, 0.8); border-color: rgba(255, 255, 255, 0.2); border-top-color: #60a5fa; }