/* 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; } #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 */ } /* 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: rgba(0,0,0,0.2); 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 rgba(0, 0, 0, 0.2); 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 rgba(0, 0, 0, 0.2); } /* 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 rgba(0, 0, 0, 0.15); padding: 1rem; z-index: 3001; } .menu-backdrop { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 3000; /* Below popover but above everything else */ /* background: rgba(0,0,0,0.1); 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 Mobile Overrides */ @media (max-width: 768px) { .settings-pane.sidebar { width: 100%; right: 0; border-radius: 0; /* Full screen, no rounded corners needed */ height: 100%; /* Ensure full height */ top: 0; /* Start from top */ 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 rgba(0, 123, 255, 0.1); } .edit-actions { display: flex; gap: 0.5rem; justify-content: flex-end; } .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; } .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 { } .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 0; } .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.75rem 1.5rem; border-radius: 4px; cursor: pointer; /* width: 50%; */ font-size: 1rem; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } .btn-sm { padding: 0.4rem 1rem !important; font-size: 0.9rem !important; } .btn-outline { background: transparent; color: #333; border: 1px solid #ccc; } .btn-outline:hover { border: 1px solid #898989; } .btn-secondary { color: #333; border: 1px solid rgba(255, 204, 51, 0.2); background: rgba(255, 204, 51, 0.3); } .btn-secondary:hover { background: rgba(255, 204, 51, 0.4); } .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; } .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; } .meta-info { font-size: 0.9rem; text-align: left; } .meta-info p:first-child { margin-top: 1.2rem; padding-top: 1.2rem; border-top: 1px solid #eee; } .meta-info p { margin: 0.75rem 0; line-height: 1.4; word-break: break-word; /* Prevent long URLs from breaking layout */ } .meta-info strong { font-weight: bold; } .meta-info a { color: #007bff; text-decoration: none; padding-bottom: 4rem; } .meta-info a:hover { text-decoration: underline; } /* Map Search Pulse Animation */ .search-pulse { border-radius: 50%; border: 2px solid rgba(255, 204, 51, 0.8); /* Gold/Yellow to match markers */ background: rgba(255, 204, 51, 0.2); 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: rgba(51, 153, 204, 0.8); background: rgba(51, 153, 204, 0.2); } @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 { top: auto; bottom: 2.5em; right: 0.5em; left: auto; } .ol-touch .ol-control.ol-locate { top: auto; bottom: 3.5em; } /* Rotate Control */ .ol-rotate { top: auto; bottom: 5em; right: 0.5em; left: auto; } .ol-touch .ol-rotate { top: auto; bottom: 6em; } 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: dropIn 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 rgba(0, 0, 0, 0.3)); } .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: rgba(0, 0, 0, 0.3); border-radius: 50%; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); z-index: -1; opacity: 0; animation: shadowFade 0.5s 0.2s forwards; } @keyframes dropIn { 0% { transform: translate(-50%, -200%) scale(0); opacity: 0; } 60% { opacity: 1; } 100% { transform: translate(-50%, -100%) scale(1); opacity: 1; } } @keyframes shadowFade { to { opacity: 1; } } @media (max-width: 768px) { .sidebar { top: auto; bottom: 0; left: 0; right: 0; width: 100%; height: 50vh; box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); border-top-left-radius: 16px; border-top-right-radius: 16px; } .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); } }