/* Ember supports plain CSS out of the box. More info: https://cli.emberjs.com/release/advanced-use/stylesheets/ */ html, body { height: 100%; overscroll-behavior: none; /* Prevent pull-to-refresh on mobile */ } body { margin: 0; font-family: 'Noto Serif', serif; font-size: 16px; } #root, #ember-testing { height: 100%; } /* Ensure map container has a visible background while tiles load */ .map-container { background: #f8f9fa; -webkit-tap-highlight-color: transparent; outline: none; /* Prevent focus outline on click */ position: absolute; inset: 0; } /* Ensure RS widget is above the map but potentially hidden initially if needed */ #rs-widget-container { position: absolute; top: 60px; /* Below header */ right: 10px; z-index: 4000; display: none; /* Hidden by default */ } #rs-widget-container.visible { display: block; } .rs-backdrop { position: fixed; inset: 0; z-index: 3999; /* Below widget container but above everything else */ /* background: rgb(0 0 0 / 20%); Optional: dim background */ } /* App Header */ .app-header { position: absolute; top: 0; left: 0; right: 0; height: 60px; padding: 0 1rem; display: flex; justify-content: space-between; align-items: center; z-index: 3000; /* Above sidebar (2000) and map */ pointer-events: none; /* Let clicks pass through to map where transparent */ } .header-left, .header-right { pointer-events: auto; /* Re-enable clicks for buttons */ } .icon-btn { background: white; border: none; border-radius: 50%; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; box-shadow: 0 2px 5px rgb(0 0 0 / 20%); cursor: pointer; transition: transform 0.1s; } .icon-btn:active { transform: scale(0.95); } .user-btn { background: none; border: none; cursor: pointer; padding: 0; } .user-avatar-placeholder { width: 40px; height: 40px; background: #333; border-radius: 50%; display: flex; align-items: center; justify-content: center; box-shadow: 0 2px 5px rgb(0 0 0 / 20%); } /* User Menu Popover */ .user-menu-container { position: relative; } .user-menu-popover { position: absolute; top: 100%; right: 0; margin-top: 10px; width: 280px; background: white; border-radius: 8px; box-shadow: 0 4px 12px rgb(0 0 0 / 15%); padding: 1rem; z-index: 3001; } .menu-backdrop { position: fixed; inset: 0; z-index: 3000; /* Below popover but above everything else */ /* background: rgb(0 0 0 / 10%); Optional dimming */ } .user-status { padding-bottom: 1rem; margin-bottom: 1rem; border-bottom: 1px solid #eee; color: #666; font-size: 0.9rem; } .account-list { list-style: none; padding: 0; margin: 0; } .account-item { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 0; } .account-item.disabled { opacity: 0.5; pointer-events: none; } .account-info { display: flex; align-items: center; gap: 0.75rem; font-weight: 500; } .btn-text { background: none; border: none; padding: 0; font-weight: 600; cursor: pointer; font-size: 0.9rem; } .text-primary { color: #007bff; } .text-danger { color: #dc3545; } .btn-text:hover { text-decoration: underline; } /* Sidebar Styles */ .sidebar { position: absolute; top: 0; left: 0; bottom: 0; width: 300px; background: white; color: #333; z-index: 3100; /* Higher than Header (3000) */ box-shadow: 2px 0 5px rgb(0 0 0 / 10%); display: flex; flex-direction: column; } .settings-pane.sidebar { z-index: 3200; /* Higher than Places Sidebar (3100) */ } /* Settings Pane Mobile Overrides */ @media (width <= 768px) { .settings-pane.sidebar { width: 100%; right: 0; border-radius: 16px 16px 0 0; height: 66vh; top: auto; bottom: 0; } } .sidebar-header { padding: 1rem; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; } .sidebar-header h2 { margin: 0; font-size: 1.2rem; } .sidebar-content { padding: 1rem; } .edit-form { margin: -1rem; margin-bottom: 1rem; background: #f8f9fa; padding: 1rem; border-bottom: 1px solid #eee; } .form-group { margin-bottom: 0.75rem; } .form-group label { display: block; font-size: 0.85rem; color: #666; margin-bottom: 0.25rem; } .form-control { width: 100%; padding: 0.5rem; border: 1px solid #ddd; border-radius: 4px; font-family: inherit; font-size: 0.95rem; box-sizing: border-box; /* Ensure padding doesn't overflow width */ } .form-control:focus { outline: none; border-color: #007bff; box-shadow: 0 0 0 2px rgb(0 123 255 / 10%); } .edit-actions { display: flex; gap: 0.5rem; justify-content: flex-end; } .settings-section { margin-bottom: 2rem; } .settings-section h3 { font-size: 1rem; font-weight: bold; color: #666; margin: 0 0 0.5rem; text-transform: uppercase; letter-spacing: 0.5px; } .settings-section .form-group { margin-top: 1rem; } .settings-section p a { color: #007bff; text-decoration: none; } .settings-section p a:hover { text-decoration: underline; } .btn-full { width: 100%; } .btn-primary { background: #007bff; color: white; border: none; padding: 0.75rem; border-radius: 4px; font-weight: 500; cursor: pointer; } .btn-primary:hover { background: #0069d9; } .meta-info { font-size: 0.9rem; } .meta-info p:first-child { margin-top: 1.2rem; padding-top: 1.2rem; border-top: 1px solid #eee; } .meta-info a { color: #007bff; text-decoration: none; padding-bottom: 4rem; } .meta-info a:hover { text-decoration: underline; } .link-list { list-style: none; padding: 0; margin: 0; } .link-list li { margin-bottom: 0.5rem; } .link-list a { color: #007bff; text-decoration: none; font-size: 0.95rem; } .link-list a:hover { text-decoration: underline; } .places-list { list-style: none; padding: 0; margin: 0; } .places-list li { margin-bottom: 0.5rem; } .place-item { width: 100%; text-align: left; background: #f8f9fa; border: 1px solid #ddd; padding: 0.75rem; border-radius: 4px; cursor: pointer; transition: background 0.2s; } .place-item:hover { background: #e9ecef; } .place-name { font-weight: bold; margin-bottom: 0.25rem; } .place-type { color: #666; font-size: 0.85rem; text-transform: capitalize; } .back-btn { background: none; border: none; cursor: pointer; padding: 0 0.5rem; margin-left: -0.5rem; display: flex; align-items: center; justify-content: center; } .close-btn { background: none; border: none; cursor: pointer; padding: 0 0.5rem; margin-right: -0.5rem; display: flex; align-items: center; justify-content: center; } .place-details h3 { font-size: 1.2rem; margin-top: 0; margin-bottom: 0.5rem; } .place-details .place-type { color: #666; font-size: 0.9rem; text-transform: capitalize; margin: 0 0 1rem; } .place-details .place-description { margin-bottom: 1.5rem; } .place-details .actions { padding-bottom: 0.3rem; display: flex; flex-direction: row; gap: 1rem; } .btn { padding: 0.6rem 1.2rem; border-radius: 4px; cursor: pointer; font-size: 0.9rem; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } .btn-outline { background: transparent; color: #333; border: 1px solid #ccc; } .btn-outline:hover { border: 1px solid #898989; } .btn-secondary { color: #333; border: 1px solid rgb(255 204 51 / 20%); background: rgb(255 204 51 / 30%); } .btn-secondary:hover { background: rgb(255 204 51 / 40%); } .btn-blue { background: #007bff; color: white; border: none; } .btn-blue:hover { background: #0056b3; } .btn-green { background: #198754; color: white; border: none; } .btn-green:hover { background: #157347; } /* Map Search Pulse Animation */ .search-pulse { border-radius: 50%; border: 2px solid rgb(255 204 51 / 80%); /* Gold/Yellow to match markers */ background: rgb(255 204 51 / 20%); position: absolute; transform: translate(-50%, -50%); pointer-events: none; animation: pulse 1.5s infinite ease-out; box-sizing: border-box; /* Ensure border is included in width/height */ display: none; /* Hidden by default */ } .search-pulse.active { display: block; } .search-pulse.blue { border-color: rgb(51 153 204 / 80%); background: rgb(51 153 204 / 20%); } @keyframes pulse { 0% { transform: translate(-50%, -50%) scale(0.8); opacity: 0.8; } 100% { transform: translate(-50%, -50%) scale(1.4); opacity: 0; } } /* Locate Control */ .ol-control.ol-locate { inset: auto 0.5em 2.5em auto; } .ol-touch .ol-control.ol-locate { inset: auto 0.5em 3.5em auto; } /* Rotate Control */ .ol-rotate { inset: auto 0.5em 5em auto; } .ol-touch .ol-rotate { inset: auto 0.5em 6em auto; } span.icon { display: inline-block; } .icon { flex-shrink: 0; } .icon svg { width: 100%; height: 100%; stroke: currentcolor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .content-with-icon { display: flex; flex-direction: row; align-items: center; gap: 0.5rem; } /* Selected Pin Animation */ .selected-pin-container { position: absolute; /* Center the bottom tip of the pin at the coordinate */ transform: translate(-50%, -100%); pointer-events: none; /* Let clicks pass through to the map features below if needed */ display: none; } .selected-pin-container.active { display: block; animation: drop-in 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; } .selected-pin { width: 40px; height: 40px; color: #ea4335; /* Google Red */ filter: drop-shadow(0 4px 6px rgb(0 0 0 / 30%)); } .selected-pin svg { width: 100%; height: 100%; fill: #ea4335; stroke: #b31412; /* Darker red stroke */ stroke-width: 1; } /* Optional: Small dot at the bottom to ground it */ .selected-pin-shadow { width: 10px; height: 4px; background: rgb(0 0 0 / 30%); border-radius: 50%; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); z-index: -1; opacity: 0; animation: shadow-fade 0.5s 0.2s forwards; } @keyframes drop-in { 0% { transform: translate(-50%, -200%) scale(0); opacity: 0; } 60% { opacity: 1; } 100% { transform: translate(-50%, -100%) scale(1); opacity: 1; } } @keyframes shadow-fade { to { opacity: 1; } } @media (width <= 768px) { .sidebar { width: 100%; height: 50vh; box-shadow: 0 -2px 10px rgb(0 0 0 / 10%); border-top-left-radius: 16px; border-top-right-radius: 16px; inset: auto 0 0; } .sidebar-content { overflow-y: auto; overscroll-behavior: contain; /* Prevent scroll chaining */ /* Ensure content doesn't get hidden behind bottom safe areas on mobile */ padding-bottom: env(safe-area-inset-bottom, 20px); } }