/* 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 */ #remotestorage-widget { position: absolute; top: 10px; right: 10px; z-index: 1000; } /* Sidebar Styles */ .sidebar { position: absolute; top: 0; left: 0; bottom: 0; width: 300px; background: white; color: #333; z-index: 2000; box-shadow: 2px 0 5px rgb(0 0 0 / 10%); display: flex; flex-direction: column; } .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; } .close-btn { background: none; border: none; font-size: 1.5rem; cursor: pointer; padding: 0 0.5rem; } .back-btn { background: none; border: none; font-size: 1.2rem; cursor: pointer; margin-right: 0.5rem; } .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 { } .place-details .actions { padding-bottom: 0.3rem; } .btn-primary { background: #007bff; color: white; border: none; padding: 0.75rem 1.5rem; border-radius: 4px; cursor: pointer; width: 100%; font-size: 1rem; } .btn-primary:hover { background: #0056b3; } .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: 5em; /* Position below zoom controls (usually at .5em or similar) */ right: 0.5em; left: auto; } .ol-touch .ol-control.ol-locate { top: 5.5em; /* Adjust for touch devices where controls might be larger */ } 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); } }