diff --git a/src/components/ContactList.jsx b/src/components/ContactList.jsx
index 53e934c..432b33b 100644
--- a/src/components/ContactList.jsx
+++ b/src/components/ContactList.jsx
@@ -36,7 +36,7 @@ export default function ContactList() {
Sign in to save and sync your contacts
{ window.location.href = '/login' }}
+ onClick={() => { window.location.href = '/outpost.goauthentik.io/start?rd=%2F' }}
className="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium"
style={{ background: 'var(--accent)', color: 'var(--text-inverse)' }}
>
diff --git a/src/components/MapView.jsx b/src/components/MapView.jsx
index 2dee026..d4e11f8 100644
--- a/src/components/MapView.jsx
+++ b/src/components/MapView.jsx
@@ -1046,7 +1046,14 @@ const MapView = forwardRef(function MapView(_, ref) {
mapInstance.current = map
+ // ResizeObserver to handle layout settling, panel changes, window resize
+ const ro = new ResizeObserver(() => {
+ map.resize()
+ })
+ ro.observe(mapRef.current)
+
return () => {
+ ro.disconnect()
if (watchIdRef.current != null) navigator.geolocation.clearWatch(watchIdRef.current)
if (gpsMarkerRef.current) gpsMarkerRef.current.remove()
maplibregl.removeProtocol('pmtiles')
diff --git a/src/components/Panel.jsx b/src/components/Panel.jsx
index 63598b7..b12059c 100644
--- a/src/components/Panel.jsx
+++ b/src/components/Panel.jsx
@@ -61,7 +61,7 @@ export default function Panel({ onManeuverClick }) {
}
// Auth handlers
- const handleLogin = () => { window.location.href = '/login' }
+ const handleLogin = () => { window.location.href = '/outpost.goauthentik.io/start?rd=%2F' }
const handleLogout = () => { window.location.href = '/outpost.goauthentik.io/sign_out' }
// Optimize stops
diff --git a/src/components/PlaceCard.jsx b/src/components/PlaceCard.jsx
index 0b09bbc..41114c0 100644
--- a/src/components/PlaceCard.jsx
+++ b/src/components/PlaceCard.jsx
@@ -432,7 +432,7 @@ export function PlaceCard({ place, variant = "preview", expanded = true, onToggl
{auth.authenticated ? (
) : (
- { window.location.href = "/login" }} className="flex items-center gap-1 px-2 py-1.5 rounded-lg text-xs" style={{ background: "var(--accent-muted)", color: "var(--accent)", border: "1px solid var(--border)" }} title="Log in to save places">Save
+ { window.location.href = "/outpost.goauthentik.io/start?rd=%2F" }} className="flex items-center gap-1 px-2 py-1.5 rounded-lg text-xs" style={{ background: "var(--accent-muted)", color: "var(--accent)", border: "1px solid var(--border)" }} title="Log in to save places">Save
)}
setCopyOpen((v) => !v)} className="p-2 rounded-lg flex items-center gap-0.5" style={{ background: "var(--tan-muted)", color: "var(--tan)", border: "1px solid var(--border)" }} aria-label="Copy">
diff --git a/src/components/PlaceDetail.jsx b/src/components/PlaceDetail.jsx
index 77f2cff..32afd34 100644
--- a/src/components/PlaceDetail.jsx
+++ b/src/components/PlaceDetail.jsx
@@ -758,7 +758,7 @@ export default function PlaceDetail() {
) : (
{ window.location.href = '/login' }}
+ onClick={() => { window.location.href = '/outpost.goauthentik.io/start?rd=%2F' }}
className="flex items-center gap-1 px-2 py-1.5 rounded-lg text-xs"
style={{ background: 'var(--accent-muted)', color: 'var(--accent)', border: '1px solid var(--border)' }}
title="Log in to save places"