v1.40.7 — Fix popover/modal scroll reset actually being a no-op (2026-08-15 18:31)
- The v1.40.5 scroll-to-top-on-close fix didn't actually take effect — `scrollTop` was being reset *after* the `.show` class was removed, and every one of these modals/popovers hides via `display:none`, which has no layout box, so the write silently no-oped per spec. Fixed by resetting scroll before hiding in every case (Edit Wayspot, Changelog, About, Log, Export, Plans, Map Settings, New Wayspot, and the search results dropdown)
v1.40.6 — Ruler live preview line, unified distance formatting (2026-08-15 16:45)
- The ruler tool now draws a live dashed line + distance label straight to the cursor/crosshair as soon as a start point is down, instead of only showing the running distance in the coordinate tooltip — it disappears again once the endpoint is set (or ruler mode is turned off)
- Removed the running distance from the coordinate tooltip that follows the cursor — the live ruler line above now carries it instead, so the tooltip is just the plain coordinates again
- Every on-screen distance (ruler measurements, the hover-over-marker distance-from-selection tooltip) now uses the same 2-decimal-place, round-up formatting the Conflict/Ambassador Zone readouts already used, instead of each having its own separate rounding rule
- The hover-over-marker distance-from-selection tooltip now also shows that marker's own name, above the distance
v1.40.5 — Reset scroll position on every popover/modal close (2026-08-15 15:58)
- Every popover and modal (Edit Wayspot, Changelog, About, Log, Export, Plans, Map Settings, New Wayspot, and the place-search results dropdown) now resets its scroll position back to the top when closed, instead of reopening wherever it was last left scrolled to
v1.40.4 — Fix footer Plans button sizing and icon/text alignment (2026-08-15 16:30)
- Fixed the footer's Plans button (`My Plan`) being much wider than its text needed, leaving a large empty gap after short plan names — its fixed width was left over from before the folder icon replaced a longer `"Plan - "` text prefix and was never shrunk to match
- Fixed the plan name text rendering visibly higher than the folder icon next to it, instead of vertically centered against it
v1.40.3 — Paste in Place (2026-08-15 13:56)
- Added Paste in Place (Ctrl+Shift+V, or the right-click menu's Paste in Place entry on the map and the wayspot list) — restores each copied wayspot to its own original coordinates, ignoring the cursor position, instead of the regular Ctrl+V paste which drops the copy wherever you click/hover. Useful for putting a copy back exactly where it came from after copying into a different Plan or browser tab
v1.40.2 — Anchor dot on PokéStop and Power Spot markers; Ambassador Generic markers back to full size (2026-08-15 15:00)
- Added a tiny dot, in the wayspot's own color, to the PokéStop and Power Spot marker badges at their exact geo-anchor point — unlike Gym's flag tip (already a single sharp pixel) or the Generic pin/dot (which already draw their own point), PokéStop's circular badge and Power Spot's X badge had no single pixel that read as "the point," making precise placement/alignment against imagery harder
- Ambassador-nominated Generic wayspots are back to their original (pre-v1.40.0) marker size — only Community-nominated Generic markers stay at the smaller size introduced last version. Ambassador nominations carry Niantic's actual spacing requirement, so they shouldn't read as the same low-emphasis marker as an ungraded Community pin. This also fixes the Ambassador star badge rendering almost entirely clipped off the smaller icon, since it never fit within the shrunk marker to begin with
- Fixed the sequence number on Generic markers (both Community and Ambassador) being unreadable — it's no longer squeezed to fit inside the marker's own small icon, so it now renders at the same real size and clarity as every other marker type regardless of how small the dot itself is
v1.40.1 — Sidebar scroll affordance fixes for dark theme and overlay-scrollbar browsers (2026-08-15 12:00)
- Fixed the dark theme's sidebar/wayspot-list scrollbar track being nearly the same color as the sidebar background, making it very hard to see
- Added a "there's more above/below" scroll shadow to the sidebar panel and wayspot list that works regardless of native scrollbar rendering — needed because Firefox on Windows can render the scrollbar as a zero-width overlay bar depending on the OS's own scrollbar-visibility setting, in which case no amount of scrollbar color/width CSS makes it visible
- Removed a redundant reserved-scrollbar-space margin and gutter on the wayspot list that showed up as dead empty space on browsers/settings where the actual scrollbar doesn't consume any layout width
v1.40.0 — Context menu This/Every/Selected targeting, Group popover overhaul, Sort direction, bulk Lock, search-bar & Edit-modal fixes (2026-08-14 19:00)
- Search bar: fixed it getting stuck open — moving the mouse away or losing focus now collapses it even with results or a "No results found" message still showing (previously that never collapsed except by clicking a result), and clearing the search box now drops a lingering result list or error message immediately instead of leaving it stuck under a blank input
- Edit modal: reskinned to match the New Wayspot popover — a proper header row (title + × close button) instead of a bare title line, and its type buttons are now tinted by type at rest instead of staying neutral gray until picked
- Generic-type markers are now half the size of the other three types' badges (was already smaller, now smaller still), reinforcing their lower-emphasis role
- Sort: added an Ascending/Descending direction switch (toolbar Sort popover, and mirrored as a toggle line in the context menu's Sort submenu) that flips whichever criterion is picked next
- Filter popover: Type/Nomination/Status reflowed into fixed two-row layouts (e.g. All+Generic on one row, PokéStop/Gym/Power Spot on the next) instead of one cramped auto-wrapping row; removed the by-Group filter section entirely (group a selection first, then use Select or the group header itself)
- Context menu: right-clicking a wayspot now offers a consistent three-way target choice depending on its relation to the current selection — not part of any selection → This Wayspot / Every *N* Wayspots (the whole board, including for the destructive Remove action); the only thing selected → applies directly, no submenu; part of a 2+ selection → This Wayspot / Selected *N* Wayspots (unchanged). With only one wayspot on the map, the menu stays flat rather than offering a redundant This/Every choice. Sort's own submenu was refactored onto the same shared shape so it reads consistently with the other actions
- Group popover: replaced the single label-flipping Group/Ungroup button with two always-available buttons — New Group always creates a fresh group even if the selection is already entirely in one (previously the only option in that case was to ungroup first), and Ungroup Selection always clears the group field. Added a contextual Collapse/Expand "*name*" for whichever single group the current selection sits in, alongside the existing global Collapse/Expand All Groups. The same "New Group always means new" fix was also applied to the context menu's Group By submenu, which had the identical latent bug
- Added a bulk Lock/Unlock button to the wayspot list toolbar, next to Hide/Edit/Remove, mirroring their exact pattern
v1.39.27 — Generic type stays a dot under the Generic Pin marker style too (2026-08-14 06:25)
- A Generic-type wayspot now renders as its own dot even while the "Generic Pin" marker style is active — previously it fell back to that style's shared teardrop pin like every other type, which was one step too far in reverting v1.39.24's marker-style change back
v1.39.26 — Type/nomination chips always show their color, not just once picked (2026-08-14 06:10)
- The New Wayspot popover's type buttons and the Filter dropdown's type/nomination/status chips now tint permanently, the same way the Select popover's own chips already did — previously they stayed plain gray until you'd actually picked one, so the type-color system wasn't visible until after the fact
v1.39.25 — Wayspot list's own type/nomination text now theme-aware (2026-08-14 05:50)
- The sidebar list's "PokéStop · Community" style meta line under each wayspot's name switched from a static inline color to the same class-based color system the Filter/Select chips use, so it now correctly brightens in dark theme instead of staying stuck on the light-theme shade
v1.39.24 — Generic Pin marker style reverted; readable Generic white/gray split (2026-08-14 05:30)
- The "Generic Pin" marker *style* (Map Settings → Marker Style) is back to its original teardrop-pin shape for every type — only the Generic *type*'s own badge (in the default GO marker style) is the new outlined dot; the two are independent, and only the type-specific one was ever meant to change
- Fixed the Summary Matrix's "Generic" row label rendering invisible in light theme (white text against the table's own light background, from a stale, unrelated `.row-generic{color:#fff}` rule with no counterpart on any other row) — it now inherits the same default text color every other row already uses
- Audited every other Generic-white spot this session had touched: the Filter/Select/type-picker/Edit-modal chips' plain white *outline* text (no fill behind it) had the identical low-contrast problem. Fixed by splitting the states — gray while inactive, same as every other type's own outline-text treatment; white only in the *active/selected* state, and there specifically as a solid white swatch with dark text (not bare white text), which is what actually reads legibly
v1.39.23 — Generic is spacing-exempt; a new same-coordinate conflict rule (2026-08-14 05:00)
- Generic-type wayspots no longer conflict via the usual spacing distance at all — only an exact-coordinate collision with another wayspot counts as a Generic conflict now, whatever type or nomination the other side is (Power Spot included)
- New rule, independent of the spacing checks above: any two wayspots sitting at the exact same coordinate always conflict — overrides the hidden-wayspot exemption, and counts toward the Valid/Conflict stats for Community wayspots too, not just Ambassador, since a literal duplicate placement is a data problem regardless of nomination. The one exception: two Community-nomination wayspots still never conflict with each other, same-coordinate or not — that exemption stays absolute
- Fixed a regression from the same-coordinate check above, caught before release: `wsIsOk()` now needs the wayspot's own coordinate, but the pending marker's two preview call sites (the live conflict warning and its sidebar list-row preview) were still passing a bare `{nomination}` object with no coordinate — throwing silently and leaving the "Conflicts with N nearby wayspots" warning stuck blank
v1.39.22 — Generic type color is now literal white, not a gray substitute (2026-08-14 04:30)
- The Filter/Select/type-picker/Edit-modal chips for the Generic type now show literal white (matching Generic's own default marker color) with a thin neutral border for visibility, instead of a gray stand-in. The wayspot list's own type label text is intentionally unchanged — literal white there would be unreadable against its own background
- Found and fixed a real, pre-existing bug along the way: a code comment in `src/app.css` contained the literal text `t-*/n-*` (describing CSS class-name patterns) — since CSS comments don't nest, that `*/` closed the comment early, and the resulting parser confusion silently swallowed the very next rule (`.ws-select-crit-opt.t-generic`'s color). That rule had never actually been applying, regardless of this change
v1.39.21 — Import as a new Plan (2026-08-14 04:10)
- Importing a file's external-view banner gained a + New Plan option alongside Close/Merge/Override — saves the imported data as a brand-new Plan, leaving the plan you were viewing completely untouched. Only shown for a file import, not a share link
- Fixed a race in the process: a debounced autosave still pending from an edit made just before the import (under 500ms old) could get force-flushed mid-switch and overwrite the plan being left with the *imported* data, or — after gating that — silently never reach disk at all. Both are fixed; the plan being left now always keeps exactly what it had before the import
v1.39.20 — S2 L17 cell highlight for the current selection (2026-08-14 03:40)
- With S2 Level 17 enabled, the cell(s) under the currently-selected wayspot(s) and/or the pending marker now draw with a thicker outline, in the same L17 blue, so it's obvious which cell they fall in
v1.39.19 — Ruler shows a live distance while aiming the second point (2026-08-14 03:25)
- After placing the ruler's first point, the coordinate readout that already follows the cursor now also shows the running distance from that point, until the second point is placed
v1.39.18 — New Wayspot popover follows the pending marker's lifecycle (2026-08-14 03:10)
- Placing a pending marker (map click) now auto-opens the New Wayspot popover; Create and discarding the pending marker (Cancel/🗑/right-click) both auto-close it again
v1.39.17 — Selecting a wayspot on the map scrolls it into view in the sidebar list (2026-08-14 02:55)
- Clicking a marker now scrolls `#ws-list` so that wayspot's row lands at the top — list-row and search-result selections (already visible or replacing what's visible) don't trigger this
v1.39.16 — Ambassador Zone highlight cleanup: float-above label, marker-anchored dots (2026-08-14 02:40)
- The farthest-pair distance label now floats above its point on the boundary circle instead of centering on it (same convention as the ruler's own label)
- The two farthest-apart wayspots' highlight dots now center exactly on each marker's own anchor point at a fixed, zoom-independent screen size, instead of a geo-radius circle inset toward the zone's center — previous version could balloon or shrink oddly across zoom levels
v1.39.15 — Generic wayspot marker redesigned as an outlined dot (2026-08-14 02:20)
- The Generic type's marker (both the default badge style and the "Generic Pin" marker style) is now a plain dot with a dark outline, visible against any fill color — including Generic's own default white, which the old solid teardrop-pin shape had no way to show against a bright map background
v1.39.14 — Sidebar/UI polish batch (2026-08-14 02:00)
- The wayspot list's Sort menu's "Conflict Status" criterion and the sidebar section above it are both renamed Validity; the Sort menu's Position criterion is now described as "(Latitude, Longitude)"
- Collapse/Expand All Groups is no longer disabled when there are no groups — it's a harmless no-op either way
- The footer's Plan button drops its "Plan – " text prefix for a small folder icon, matching the terse style of its Log/About/version siblings
- The New Wayspot popover gained a header (title + close button), matching every other floating panel
- The search bar now collapses whenever nothing inside it is focused, regardless of cursor position — previously a lingering cursor near the bar could keep it open indefinitely even after clicking away
- Interaction Zone's opacity default reverted to 50 (was briefly 25 in v1.39.2)
v1.39.13 — Import: Ambassador Campsite detection, locked-by-default for foreign KML (2026-08-14 01:45)
- Wayfarer CSV rows whose title contains "Community Ambassador Campsite" now import as Ambassador nomination, taking priority over every other nomination source in the row
- KML/KMZ placemarks with no `wp_locked` `ExtendedData` (i.e. from a foreign source, not this app's own export) now default to locked, matching the CSV importer's existing "freshly-imported candidates default to locked" rule — previously they defaulted to unlocked
v1.39.10 — Swap S2 Level 14/17 grid colors (2026-08-14 01:20)
- L14 now draws orange (`#ff8844`), L17 now draws blue (`#4488ff`) — reversed from before
v1.39.9 — Sidebar scrollbar was rendering at near-zero contrast (2026-08-14 01:05)
- The wayspot list/sidebar scrollbar thumb used `--border2` (`rgba(0,0,0,.18)` light / `rgba(255,255,255,.15)` dark) against its own `--surface2` track — a contrast ratio low enough to read as "no scrollbar" even though the element was correctly scrollable. Thumb color switched to `--text3` (with `--accent` on hover/active), matching the contrast level already used for other visible UI chrome
v1.39.8 — Match Interaction Zone's All/Opacity box widths to the rest (2026-08-14 00:35)
- `#interactDist` (All) and `#interactOpacity` were both 64px, inherited from a generic shared rule — wider than every per-type input box (44px) in the same section. Both now match at 44px
v1.39.7 — Toggle icons now match the input box's own height, still square (2026-08-14 00:25)
- The Conflict/Interaction Zone toggle icons are now sized to their row's own input box height (22px desktop, 28px on the mobile breakpoint) instead of a flat 20px — previously smaller than the input next to it; now the same height, and still square since width scales with it
- Discovered in the process: on the mobile breakpoint the icons weren't actually square before this fix either — a leftover `.tool-btn` mobile rule's `min-height:40px` was stretching them to 20×40px, which a desktop-only screenshot never would have shown
v1.39.6 — Further tighten the middle gap, clean up column headers, more breathing room per row (2026-08-14 00:10)
- Reduced the Conflict/Interaction Zone's Community-Ambassador column gap further (10px → 4px)
- Removed the divider line under the Community/Ambassador (and Interaction Zone's equivalent) column headers — it read as a stray line once the columns sat this close together
- The header text now centers over just its column's icon+input pair, not the whole column box — it previously centered over unused reserved space (the icon's own right-aligned slot, and the right column's unit-label track), reading as visibly off-center from the row content below it
- Widened the gap between each row's toggle icon, its input box, and its unit label (3px → 5px) for a little more visual separation
v1.39.5 — Actually close the Community/Ambassador middle gap (2026-08-13 22:35)
- The v1.39.3 gap fix only shrank each column to the width of its widest cell — but every cell reserved a fixed trailing unit-label slot even on the Community/Generic (left) side, which never renders one, leaving that dead reserved space sitting directly against the middle. Left-column cells now drop the unused trailing track entirely, closing the remaining gap in both the Conflict Zone and Interaction Zone grids
v1.39.4 — Fix Interaction Zone toggle icons ignoring the shared square-icon style (2026-08-13 22:20)
- Removed a stale CSS rule left over from the pre-v1.39.2 standalone-button-row layout (`#interactBtnPokestop, #interactBtnGym, #interactBtnPowerspot { width:26px; height:26px; padding:0 }`, plus a 32px mobile-breakpoint duplicate) that was still targeting those three buttons by ID and silently outranking the shared `.zone-icon-btn.tool-btn` square-icon class by specificity — despite having the right class, three of the four Interaction Zone icons rendered as mismatched, non-square, zero-padding boxes (and differently from the fourth, Generic, which was never in that stale selector). All four now render as an identical 20×20px square, matching the Conflict Zone icons exactly
v1.39.3 — Tighten the Conflict/Interaction Zone Community-Ambassador column gap, fix input misalignment (2026-08-13 22:00)
- Shrank the Conflict Zone's/Interaction Zone's Community and Ambassador columns to their own content width and centered the pair, instead of stretching each to half the popover width — the two columns now read as a tight, symmetric pair instead of drifting toward the popover's outer edges
- Fixed each row's range/opacity input landing at a different x within its column (the Opacity row's wider "Opacity" text label pushed its input right of the icon-led type rows above it) — every row's input now aligns to the same x regardless of whether its leading content is an icon, "All", or "Opacity"
v1.39.2 — Interaction Zone inline type toggles, revised Conflict/Interaction Zone defaults (2026-08-13 21:15)
- Interaction Zone now places each type's circle-toggle icon inline before its own range field, matching the Conflict Zone row layout, instead of a separate row of standalone icon buttons below the grid
- Revised default ranges to match the project owner's reference values: Conflict Zone PokéStop/Gym Community 45 m (was 0 m), Power Spot Community 22 m (was 0 m) / Ambassador 45 m (was 22 m); Interaction Zone Opacity default 25% (was 50%)
v1.39.1 — Fix Conflict Zone layout to match the intended design, square toggle buttons (2026-08-13 20:30)
- Conflict Zone now has two independent All fields (one per column, each bulk-setting only that column's 4 values) and a toggle icon inline in every row of both Community and Ambassador — not a single centered All with a separate button cluster below. Each type's Community/Ambassador circle can now be shown/hidden independently. Opacity is likewise shown as two boxes (still one shared value). Interaction Zone is unchanged
- Squared the Marker Style Generic/GO thumbnail buttons and every Conflict Zone/Interaction Zone/Conflict Indicators toggle icon button
v1.39.0 — Summary Matrix, Map Settings 2-column zones, Ambassador Zone highlight, robust CSV import (2026-08-13 18:00)
- Added a Summary Matrix above the wayspot list — a 5×4 table (Generic/PokéStop/Gym/Power Spot/Total rows × Community/Ambassador/Total columns) counting every wayspot; click any cell, row, or column total to select the matching wayspots. The Status panel was renamed Conflict Status and now sits in its own collapsible section alongside the matrix — the old single "Wayspots" section toggle (which used to hide the filter/select/list area along with everything else) was split apart so the wayspot list itself can no longer be hidden by accident
- Removed Select by Group from the sidebar's ☑ Select popover (Filter by Group is unaffected) — intentional, not a regression
- Reworked the Conflict Zone/Interaction Zone sections of Map Settings into a symmetric 2-column layout — Community/Ambassador side by side for Conflict Zone, a plain 2×2 grid for Interaction Zone — with a centered All master field and Opacity below. Every range/opacity field now shows its default as placeholder text instead of a pre-filled value; an emptied field falls back to that default, and Reset clears fields back to empty rather than writing the default number in. A 0 m range now visibly dims that type's own circle-toggle button, and Interaction Zone circles now dim for non-selected wayspots the same way Conflict Zone circles already did. Interaction Zone's default opacity is now 50% (was 25%)
- The Ambassador Zone circle now highlights the two farthest-apart wayspots driving its diameter reading with a small dot each, inset just inside the circle's own rim
- Coordinate fields (New Wayspot form) and the search bar now sanitize dirty pasted coordinates — wrapping parentheses/brackets/quotes are stripped before parsing, and pasting a combined `lat,lng` pair into one field live-fills the other
- CSV import now understands Google My Maps' own export shape (a `WKT` `POINT (lng lat)` geometry column instead of separate Latitude/Longitude columns) and Wayfarer's "nearby wayspots" export (`title`/`description`/`gameEntity`/`source` columns) — previously Google My Maps CSVs failed to import at all. A per-layer Google My Maps file with no type/nomination data of its own falls back to a hint parsed from the downloaded filename, and to Generic/Community (never an error) when even that's unrecognizable. CSV imports now default to locked
- The search bar now also searches the current plan's own wayspots by name/remark, showing matches above the usual place-name results — clicking one selects and recenters on the real wayspot instead of dropping a new marker
- Added a Show index number switch under Map Settings' Marker Style section to hide the sequence-number digit on map markers
- Added a loading overlay shown from first paint until the app has finished initializing, so there's no flash of a blank map while the page's script loads
v1.38.0 — Copy/paste, Hide UI, per-nomination conflict ranges for every type, naming & popover fixes (2026-08-10 00:00)
- Copy/paste wayspots: Ctrl+C copies the current selection, Ctrl+V pastes it anywhere on the map (via the real system clipboard, so it also works pasting into a different browser tab open on another Plan) — also available as Copy/Paste entries in the right-click menu, on both the map and the wayspot list
- Added a Hide UI button (top-right of the map) that collapses the header, sidebar, footer, and every floating control down to just the map — for a clean screenshot or export view; click it again (it's the only control left visible) to bring everything back
- Conflict Zone ranges are now split into separate Community/Ambassador inputs for every type, not just Generic — PokéStop/Gym/Power Spot each get their own pair, defaulting to 0 m for Community and their existing Ambassador default (45/45/22 m). A Power Spot's own range always wins outright regardless of the other side's type, including when the Power Spot itself is a Community nomination
- Renamed the Conflict/Interaction Zone All types input to Master Range and changed its default to 45 m
- Community is now listed before Ambassador everywhere nominations are enumerated (e.g. KML folder order)
- Added a plain white swatch to the front of the color picker, matching Generic's own default color
- The New Wayspot/Edit type-row now shows Generic alone on its own row, with PokéStop/Gym/Power Spot together on the row below
- Fixed: the New Wayspot popover now top-aligns with its button, displays above the wayspot list instead of underneath it, and word-wraps long Conflict/Interaction Zone labels instead of overflowing
- All displayed spacing/range numbers (Conflict Zone, Ambassador Zone) now show 2 decimal places, rounded up
- The Ambassador Zone circle now shows its live diameter as a label on the circle itself, at the point equidistant from both farthest-apart wayspots
- Group names are now uppercased in the stored data when renamed (not just visually via CSS)
- Bulk edit gained a Reset name (blank) option to clear the name on every selected wayspot at once
- An unnamed wayspot's fallback display name is now its nomination + type (e.g. "Ambassador PokéStop") instead of an index number
- The Plans footer button now reads Plan - {Plan Name} in a fixed-width button, with the name scrolling instead of truncating if it's too long to fit
- On mobile, the coordinate hint under your finger now hides during a pan or pinch-zoom instead of following the gesture, and no longer incorrectly appears while hovering the New Wayspot button/popover
- Fixed: circles/lines in the PNG map export could drift from their true position relative to the markers
v1.37.0 — Generic wayspot type, Community rename, floating New Wayspot popover (2026-08-09 20:02)
- Renamed the Regular nomination to Community throughout the app, exports, and share links (old share links and saved plans still decode correctly)
- Added a Generic wayspot type — a smaller pin icon, white by default, listed first alongside PokéStop/Gym/Power Spot everywhere types appear. Its Conflict Zone range depends on nomination instead of one flat value: 0 m by default for Community (adds no spacing requirement of its own), 45 m for Ambassador (same as PokéStop) — both independently adjustable in Map Settings
- New Community wayspots now start locked by default (Ambassador ones still start unlocked) — a creation-time default only, doesn't retroactively lock existing wayspots or change on a later nomination edit
- Moved the New Wayspot form out of the sidebar into a ✚ floating button + popover at the map's top-left — it stays open across map clicks instead of closing on outside click, so you can freely reposition the pending marker without losing the form
- Replaced the old in-panel Cancel button with a dedicated 🗑 floating button beneath ✚ New Wayspot for discarding a pending marker
v1.36.0 — Combinable Select-by chips, split Sort keys, selection-scoped Sort (2026-08-09 16:20)
- Select by Type/Nomination/Status/Group in the sidebar's ☑ Select popover are now toggle chips instead of instant single-click actions — toggle any combination on, then press the new Select button to apply it in one shot. Multiple chips combine (e.g. PokéStop or Gym, and Ambassador), so select-by options can finally be used together instead of each click replacing the last
- Split Sort's combined Type / Nomination option into two independent Type and Nomination entries, so you can sort by either one on its own
- Sort now scopes to the current selection when 2 or more wayspots are selected — only the selected wayspots get reordered (everyone else keeps both their value and their position); with 0 or 1 selected, it still sorts the whole list as before
- Added a Sort submenu to the right-click context menu, in its own section below Select All/None/Invert Selection — with 2 or more wayspots selected, it branches into All Wayspots / Selected *N* Wayspots, the same explicit scope choice Edit/Hide/etc. already offer. Only offered when right-clicking a wayspot list row or a group header — not a map marker or empty map, since there's no visible list there to reorder
- Moved the Sort button off the Filter/Select/Group row and onto the Wayspot list header directly above the list — fixes a layout bug where Select's live selection-count badge could push Sort onto its own row, shifting Hide/Edit/Remove down beneath it
v1.35.1 — Fix PokéStop/Power Spot marker anchor points (2026-08-09 13:50)
- PokéStop and Power Spot markers now point at their exact coordinate the same way Gym markers already do — anchored at the badge's own visual bottom tip instead of its center, so the marker's "point" lines up precisely with the wayspot's true location
v1.35.0 — Per-type circle toggles for Conflict Zone and Indicators (2026-08-09 10:30)
- Added PokéStop/Gym/Power Spot circle-icon buttons to the Conflict Zone section (Map Settings popover), matching the ones already in Interaction Zone — each independently toggles that type's own spacing-zone circles, without affecting the others
- Replaced the Conflict Indicators section's separate Glow/Line switches with the same per-type PokéStop/Gym/Power Spot buttons, now controlling the dashed conflict Line only — a line between two different-typed wayspots stays visible as long as at least one side's type is toggled on
- Removed the red Glow border-ring indicator on conflicting markers — redundant with the dashed connecting line and the marker's own red color, and didn't have a clean per-type equivalent since it belongs to a single marker rather than a pair
- Raised the default Conflict Zone spacing for PokéStop and Gym from 40 m to 45 m (Power Spot stays at 22 m)
- Added a small reset button to the Conflict Zone, Interaction Zone, and Ambassador Zone section headers in Map Settings, restoring just that section's range/opacity/max fields to their defaults
v1.34.0 — Named local Plans (2026-08-09 15:30)
- Added local Plans: instead of one autosaved draft, you can now create, switch between, rename, duplicate, and delete multiple named plans, each saved independently in your browser — the new Plans button in the footer shows the active plan's name and opens the switcher
- Each browser tab can now be pointed at a different plan, so you can work on two (or more) plans side by side in separate tabs without them overwriting each other's autosave — previously every tab shared the same single autosaved draft
- Your existing autosaved plan is migrated automatically into a first plan named "My Plan" the next time you open the app — nothing is lost
v1.33.1 — Fix Ambassador Zone measuring the wrong distance (2026-08-09 00:00)
- Fixed the Ambassador Zone diameter check computing a centroid-based "twice the distance from the group's average position" instead of the actual rule (the distance between the two farthest-apart wayspots in the batch) — the old formula could flag a valid 3+ point layout as over-limit even when no two individual wayspots were actually more than the Max apart; the purple circle now centers on that farthest pair directly
v1.33.0 — Per-type spacing ranges, sort, and sidebar/search polish (2026-08-08 19:00)
- Added a Sort button to the wayspot list (Name A→Z, Type/Nomination, Conflict Status, or Position top-to-bottom/left-to-right) — reorders the list in place, same as a manual drag-reorder
- Added independent PokéStop/Gym/Power Spot ranges for both Conflict Zone and Interaction Zone, each with its own "All types" master input that sets all three at once — a conflict check involving a Power Spot always uses the Power Spot's own range (default 22 m, vs. 40 m for PokéStop/Gym); a PokéStop/Gym pair uses the larger of the two
- Changed conflict/invalid counting so only Ambassador wayspots count as invalid — a Regular wayspot within range of an Ambassador one still shows the dashed conflict line but stays Valid, matching how only Ambassador nominations carry a spacing requirement
- Changed the Ambassador Zone diameter readout under the wayspot list's Status panel to always show whenever there are 2+ Ambassador wayspots, instead of only while the Ambassador Zone toggle is on — only the purple circle itself still depends on that toggle
- Fixed the search box not clearing after placing a marker or panning to a result
- Fixed the New Wayspot Name field carrying over into the next wayspot after Create
- Fixed the Ambassador Zone's "Current zone diameter" reading staying stuck on its last value instead of disappearing once every Ambassador wayspot is removed
- Fixed the wayspot list becoming unreadable at narrow sidebar widths — toolbar buttons now wrap instead of requiring horizontal scrolling, the minimum sidebar width was raised so the list row always has room for a name, and a truncated name now shows its full text on hover
v1.32.1 — Fix KML/KMZ import losing data on re-import (2026-08-08 03:10)
- Fixed KML/KMZ import silently reclassifying every Regular wayspot as Ambassador — Regular has no nomination text in the exported description (it's the unmarked default), but import used to default to Ambassador when it found none, which also dropped the Regular-vs-Regular conflict exemption and made re-imported plans show more conflicts than they were exported with
- Fixed a KMZ exported with the GO Pin marker icon style losing every wayspot's real color on re-import (came back white) — import now reads the color (and type/nomination) back from the exported icon's own filename instead of the KMZ's placeholder icon tint
- Fixed Remark text being silently dropped on KML/KMZ import, even though it was already visible in the file's description text
- Fixed Hide and Lock state being lost on KML/KMZ export entirely — both now round-trip through re-import
- Fixed locking an already-hidden wayspot throwing an error and silently failing to lock it
v1.32.0 — Ambassador Spread becomes Ambassador Zone (2026-08-08 00:10)
- Reworked the Ambassador Spread check into Ambassador Zone: instead of a circle centered on the two farthest-apart Ambassador wayspots, it's now centered on the average position of every Ambassador wayspot, sized out to whichever one sits farthest from that center. The Max field is now the zone's diameter, not the distance between a single pair
- Removed the separate Show pair switch — the zone circle now shows whenever the section's own on/off switch is on, whether or not the group is currently over the limit
v1.31.0 — Interaction Zone off by default (2026-08-07 22:15)
- Interaction Zone now defaults to off again (Ambassador Spread and Conflict Zone stay on by default)
v1.30.0 — My Location button gains Follow / Show tracking modes (2026-08-07 19:05)
- Clicking the crosshair button (My Location, above the zoom controls) now starts Follow mode instead of a one-shot fix — your device's position keeps updating live, and the map re-centers on it as you move. Manually dragging the map drops to Show mode — position updates keep coming, but the map stops re-centering; click again to jump back to Follow. Clicking while in Follow mode turns tracking off
v1.29.0 — Lock wayspots, zone circles on by default, Ambassador Spread limit (2026-08-06 12:55)
- Added Lock/Unlock for individual wayspots — a padlock button in the wayspot list row, plus a matching context-menu entry (single and bulk/group). A locked wayspot can't be dragged on the map (alone or as part of a group drag), and the Edit modal's coordinate fields are disabled while it's locked. Lock state survives undo/redo, local drafts, and share links, same as Hide/Show
- Conflict Zone and Interaction Zone now default to on instead of off
- Added an Ambassador Spread restriction: the ⚙ Map Settings popover gets a new section (on by default) with a configurable Max distance (default 300 m), a live Current farthest apart reading, and a Show pair switch that draws a circle sized so the two farthest-apart Ambassador wayspots sit exactly opposite each other on its circumference. That circle also appears automatically whenever the spread exceeds the Max, alongside a readout above the wayspot list showing the current spread
- Fixed: selecting a wayspot using the Generic marker style showed no white selection border — the ring was being drawn behind the pin's own opaque body and sized too small to peek out past it; it now surrounds the whole pin glyph, including its ground-shadow dot
v1.28.2 — Delete button for the pending wayspot's list preview (2026-08-02 18:27)
- The pending marker's live preview row at the top of the wayspot list now has its own 🗑 button, so you can cancel it directly from the list — same effect as the Cancel button or right-clicking the pending marker on the map
v1.28.1 — Marker number moves to the top-left corner (2026-08-02 18:01)
- The seqId number on every wayspot marker (both GO and Generic styles) now sits in the top-left corner instead of the center, mirroring the Ambassador star badge's own bottom-right corner — the two no longer sit close enough to overlap
v1.28.0 — Generic marker style, bottom-anchored markers (2026-08-02 01:08)
- Added a Marker Style section to the ⚙ Map Settings popover, letting you switch every wayspot marker between the type-specific GO badges (PokéStop/Gym/Power Spot) and a Generic pin — one shape for every type, matching Niantic's own Wayfarer review map. The choice is remembered across visits
- Markers with an actual visual tip — the Gym flag and the new Generic pin — now point at their wayspot's exact location from that tip, instead of their middle. PokéStop and Power Spot (plain round/star badges with no tip to point from) stay anchored at their center, unchanged
- Fixed: the Gym marker's bottom point sat slightly left of the icon's actual center
- Fixed: scrolling the mouse wheel over the ⚙ Map Settings popover (once its content grows tall enough to scroll) zoomed the map underneath instead of scrolling the popover
- Fixed: clicking the map to close the ⚙ Map Settings popover, or to defocus the search box, also placed a new wayspot's pending marker at that same click — dismissing either one is now a no-op for map placement
- Fixed: in Ruler mode, right-clicking to cancel a just-placed (not yet completed) point hid the Clear button, even with ruler mode still active
- Fixed: the Ambassador star badge on a Generic-style marker sat at the top of the pin (instead of the bottom-right corner every GO badge uses) and rendered far too small to read as a star
v1.27.1 — Map Settings popover symmetry fixes (2026-08-01 21:56)
- The Conflict Zone, Interaction Zone, and S2 Cell sections of the ⚙ Map Settings popover now put their On/Off toggle on its own centered line, instead of crowding it against the Range/L14/L17 controls next to it
- Fixed the Range and Opacity number inputs rendering off-center — their native up/down spinner arrows were eating into one side of the box
v1.27.0 — Auto-hiding search bar (2026-08-01 20:33)
- The place search bar now stays out of the way: it starts collapsed as a compact round 🔍 button at the top-center of the map, keeping more of the map visible
- Expand it by moving the mouse near the button (desktop), tapping it (touch), or pressing Ctrl+Shift+L — which now also expands the bar before focusing it
- It collapses again on its own once idle — but never while you're typing in it, results or an error are on screen, or a lookup is still running. Anything you'd typed is kept and reappears the next time it opens
- Escape still clears and dismisses the search, now collapsing the bar too
v1.26.0 — Address bar stays clean outside share-link previews (2026-08-01 20:14)
- Fixed: editing your own plan updated the browser's address bar with a data hash on every change, even if you never used 🔗 Share — so your tab's own URL silently became a live-encoded snapshot of your work. The address bar now only carries a hash while you're actively previewing a plan opened from someone else's share link, and drops back to the plain app URL as soon as you Merge, Override, or Close that preview
v1.25.1 — Documentation catch-up (2026-08-01 13:01)
- The About modal's Keyboard Shortcuts list now includes Ctrl+Shift+H (Hide/show selection), Ctrl+Shift+A (Select all), and Ctrl+Shift+D (Select none), and shows Ctrl+Backspace as the alternative to Ctrl+Delete — all of these already worked, they just weren't listed
- README corrections to match long-shipped behavior: the ruler keeps every measured segment (and can chain segments from an endpoint dot) instead of clearing on the third click; import goes through the Import modal or drag-and-drop, with DMS coordinates accepted; export goes through the single Export modal (File Type, Marker Icon, Wayspots To Export) instead of four separate buttons; the sidebar's Remove button is now documented
v1.25.0 — Selection actions and Touchpad Mode fixes (2026-08-01 10:47)
- Fixed: the wayspot list could render with zero visible rows when the sidebar didn't have enough vertical room (a short mobile viewport, or a busy Wayspots section on desktop) — every row was still there, just clipped to nothing; it now always keeps a usable minimum height
- Fixed: two-finger tap in Touchpad Mode — the only way to open the action menu on touch — never actually worked
- Right-clicking a pin, a group header, or empty map now offers Select All / Select None / Invert Selection, plus Add to Selection / Remove from Selection (and a group's Add Group to Selection) — a touch-friendly equivalent to Ctrl+click, which has no touchscreen analogue
- Fixed: long-pressing a pin or group header on touch to open its menu could also fire whatever the menu's first item happened to be (a browser ghost-click quirk after touch long-press)
- The sidebar's ☑ Select button now shows a live badge with how many wayspots are currently selected
- Fixed the "Status" label's styling to match the rest of the sidebar's section headers
v1.24.0 — Drag-and-drop fixes and cross-group dragging (2026-07-31 21:40)
- Fixed: dragging a wayspot row (or a group section header) did nothing at all in Firefox — the browser's own drag events can target a raw text node instead of an element (unlike Chrome), which crashed the drag handler before it ever got started
- Rows in the wayspot list are draggable again once groups exist — previously disabled entirely the moment any group was created
- Dragging a wayspot row onto a row in a *different* group section now moves it into that group, instead of doing nothing
- Multi-selecting several wayspots (from anywhere in the list) and dragging one of the selected rows now moves the whole selection together — landing them next to each other, in their existing relative order, in whichever group you dropped them on
- Fixed a long, unbroken error message (e.g. from a very long share link) visually overflowing the error toast instead of wrapping within it
v1.23.0 — Group section reordering, list numbering fixes (2026-07-31 15:01)
- Group sections in the wayspot list can now be manually reordered — drag a section's header (by its ⋮ handle) above or below another; persists across undo/redo, reloads (local autosave), and share links, same as the wayspots themselves. "No Group" always stays last and can't be dragged
- Fixed: dragging a group section over "No Group" never highlighted it as a drop target and could insert the section one position off — both the highlight and the insertion math now treat "No Group" as a valid drop target
- Fixed: Shift+click range-select in the wayspot list used the wayspots' underlying array order instead of the order they're actually rendered in — once grouped, a wayspot from a different section could silently drop out of a range that visually spanned it
- The sequence number shown in the list next to each wayspot now restarts at 1 within each group section, instead of jumping straight to that wayspot's plan-wide number — purely cosmetic, so the pin's own badge, conflict "✗ #N" references, and default name are unaffected
v1.22.0 — Context menu rework (2026-07-31 12:07)
- Right-clicking a wayspot always shows single-item actions for the exact one you clicked, with a further "Selected N Wayspots" branch appended wherever you're part of a real 2+ selection — instead of the menu swapping to bulk-only actions and losing single-item access
- Edit, Duplicate, Group By, Remove from Group, Hide/Show, Share, and Remove each collapse to a plain one-click action until there's an actual choice to make (an existing group to pick, or a live bulk selection), then grow into a This Wayspot / Selected N Wayspots (or, for Share, / Group) submenu — no more separate, easy-to-miss "Bulk Edit (N)"-style rows scattered further down the menu
- Group By replaces "Add to New Group": pick New Group or jump straight to an existing group in one click, instead of always creating a new group first and merging afterward
- Renamed Fit to Zoom to Fit for clarity
- Share This Wayspot / Share Group / the bulk Share leaf now scope the copied link to exactly what they say — previously every share action (including the per-wayspot one) copied a link to the *entire* board
- Reordered the info cluster to Copy Coordinates → Center on Map → Zoom to Fit → Share → Open in Google Maps
- The menu now supports nested flyout submenus (previously only a single flat list), with hover, click, and arrow-key (→/←) navigation, matching a native OS menu
v1.21.0 — Custom groups (grouping) (2026-07-30 15:28)
- Added a 🗂 Group button alongside Filter/Select — its Group Selection action selects wayspots and groups them into a custom group in one step (also right-click menu or Ctrl+Shift+G), same as Photoshop's layer grouping; running it again on an already-grouped selection ungroups it
- Auto-generated group names ("Group 1", "Group 2", ...) — click a group's name in the wayspot list to rename it inline
- The wayspot list automatically splits into a section per group (plus a "No Group" section) once any wayspot has one, instead of one flat list — manual drag-to-reorder is only available in the flat, ungrouped view
- Each group section has a fold/unfold chevron, plus a Collapse All Groups / Expand All Groups action in the Group popover
- Clicking a group's section header (not its name) selects every wayspot in it; right-clicking it offers Edit/Duplicate/Select/Fit/Hide or Show/Ungroup/Delete, applied to the whole group at once — the same actions the bulk-selection menu offers, scoped to group membership instead
- Added a Group option to the Filter popover and a Select by Group option to the Select popover, both hidden until at least one custom group exists
- CSV export/import gained a Group column (also recognizes `Layer`/`Batch` as a header alias on import)
- KML/KMZ export groups folders by group name (with an "Ungrouped" folder for anything left out) once any wayspot uses a custom group, instead of the usual Nomination/Type folders — unmodified plans export exactly as before
- Importing a KML/KMZ file — including a real Google My Maps export, where every layer is already its own folder — now recreates each unrecognized `<Folder>` as a custom group here
v1.20.0 — Search: unify link/coordinate handling with place results (2026-07-30 14:24)
- Pasting a Google Maps link or a raw `lat,lng` pair into the search bar now pans the map there and shows a single result row instead of placing a marker immediately — matches the existing place-name results, where the row itself only pans and its pin button places the marker
- Expanded the search bar's on-focus hint into a bulleted explanation of the three accepted input kinds, including which Google Maps link patterns are (and aren't — shortened `goo.gl`/`maps.app.goo.gl`) supported
v1.19.0 — Search refinements and list icon consistency (2026-07-30 13:00)
- Added a pin button next to each search result to drop a pending marker there directly, alongside the existing click-to-pan behavior
- Removed the app-wide "paste a Google Maps link anywhere on the page" shortcut — a Maps link now only works when pasted into the search bar (or via the right-click Paste Coordinates action, unchanged)
- The wayspot list's per-row Edit/Remove buttons now use the same icons as the bulk-action bar above the list, instead of plain text glyphs
v1.18.0 — Fullscreen toggle (2026-07-30 10:00)
- Added a fullscreen button to the header (next to the theme toggle) that fullscreens the whole app — header and sidebar included, not just the map
- Syncs correctly with the browser's native Esc-to-exit fullscreen path, and re-fits the map afterward
- Hidden automatically in browsers without Fullscreen API support
- The button's icon now swaps to a "collapse" arrangement while fullscreen is active, instead of staying on the same expand icon the whole time — same current-state convention the theme toggle's sun/moon icon already uses, with the title staying static either way
v1.17.0 — Place search (2026-07-29 16:20)
- Added a 🔍 Search bar (top-center of the map, below the header, or Ctrl+Shift+L to focus it) to look up a place by name and jump the map there, using OpenStreetMap's Nominatim geocoder — no API key needed
- Search only runs when you press Enter or click the search icon, never while typing, per Nominatim's usage policy against client-side auto-complete
- Submitting a Google Maps link or a raw `lat,lng` pair in the search bar drops a pending marker there directly instead of running a place search — same "paste a Maps link" detection the map/right-click paste actions already use
- Focusing the search bar shows a brief hint explaining all three accepted inputs (place name, Google Maps link, `lat,lng` pair), since the placeholder text alone isn't visible once you start typing
- Fixed: tapping the search bar on mobile could drop a pending marker on the map underneath (or show the map's coordinate-readout tooltip there) — the search bar was missing from the same overlay-exclusion lists the other floating map controls already use
- Fixed: clicking a search result also dropped a pending marker at the click's map coordinates — the result row's own click handler removed the results list from the DOM before the click event finished bubbling, which broke the propagation stop happening further up
v1.16.0 — Group drag, and selection fixes around the context menu and undo (2026-07-29 11:14)
- Dragging a marker that's part of a multi-wayspot group selection now moves the whole group together, instead of only the grabbed wayspot
- Dismissing a wayspot's right-click action menu with a left click (on the map or elsewhere on the page) now also deselects it, matching a plain map click
- Undo/Redo no longer clears your current selection — a select, then move, then Ctrl+Z now leaves the same wayspot(s) selected instead of deselecting them
v1.15.0 — Select All / Select None / Invert Selection (2026-07-28 17:35)
- Right-click empty map now also offers Select All, Select None, and Invert Selection (each shown only when it would actually change the current selection)
- Added a ☑ Select button in the Wayspots sidebar section, next to Filter, opening a popover with the same three actions
- Added Ctrl+Shift+A (Select All) and Ctrl+Shift+D (Select None) keyboard shortcuts
- The Status stat tiles (All/Valid/Conflict) now filter the list/map view instead of selecting — clicking one is a shortcut for the Filter popover's own Status option (both stay in sync), and no longer touches your current selection or moves the map. Ctrl+Shift+Left/Right cycles the same filter instead of a selection group
- Select All and Invert Selection now only ever consider wayspots the Filter popover currently leaves shown, instead of every wayspot regardless of the active filter
- Added Select by Type / Nomination / Status to the Select popover — selects only the currently-shown PokéStop/Gym/Power Spot, Regular/Ambassador, or Valid/Conflict wayspots; each option shows its type icon and a colored label/border matching the marker colors, tuned separately per theme
- The active Type/Nomination/Status color everywhere it appears (New Wayspot form, Edit modal, Filter popover, and the new Select popover) switched from a solid fill to a colored label + border on a neutral background — reads calmer with several options visible/colored at once, and now has explicit dark-theme variants instead of reusing the light-theme shade
v1.14.0 — Right-click action menu (2026-07-28 17:02)
- Right-clicking a wayspot (map marker or list row) now opens an action menu — Edit, Duplicate, Copy Coordinates, Center on Map, Open in Google Maps, Copy Share Link, Hide/Show, Remove — instead of instantly removing it; right-clicking a wayspot that's part of the current multi-selection shows selection-wide actions (Edit/Duplicate/Fit/Hide/Remove *N* Wayspots) instead, with their keyboard shortcuts shown alongside
- Right-clicking a wayspot also selects it, so the menu's shortcut hints always match the current selection
- Right-clicking empty map opens a menu with New Wayspot Here, Center Map, and Paste Coordinates (reads a coordinate pair or Google Maps link from the clipboard)
- A second right-click near the same spot zooms out around it (mirroring double-click-to-zoom-in), closing whatever menu the first click opened
- Right-click (or a two-finger tap) in Touchpad Mode acts on whatever's at the crosshair, same as every other tap there
v1.13.0 — Range-select, marquee-select, and box zoom (2026-07-28 14:37)
- Shift+click a row in the wayspot list to select every row between it and the last-clicked one (range-select); repeated Shift+clicks re-measure from the same anchor
- Ctrl/Cmd+Shift+drag a box on the map to select every wayspot inside it (marquee-select)
- Shift+drag a box on the map to zoom to that area, replacing the browser default box-zoom behavior; press Escape to cancel a drag in progress
v1.12.50 — Fix missing Ambassador star badge in GO Pin KMZ exports (2026-07-25 10:14)
- The GO Pin badged icon for Ambassador wayspots (PokéStop, Gym, and Power Spot) is baked from a triple-nested SVG-in-SVG-in-PNG data URI, a structure some browsers won't fully resolve — flattened to a single SVG-to-PNG reference so the purple star badge always renders
v1.12.49 — Add a Log button/modal and error toasts (2026-07-24 18:10)
- Added a Log button (footer, next to About) opening a log modal: a level filter (Error/Warn/Info/Debug, persisted across reloads), Clear, Copy (to clipboard), and Download (saves a `.txt` file)
- Uncaught exceptions and unhandled promise rejections are now caught globally, logged, and shown as a dismissible red toast in the bottom-left corner regardless of whether the log modal is open
v1.12.48 — Fix double-click side effects leaking into mouse mode (2026-07-24 17:55)
- Double-clicking empty map to zoom no longer also leaves behind a pending marker — the two `click` events that precede the zoom's `dblclick` had already placed one
- Double-clicking a not-yet-selected wayspot straight to Edit no longer leaves it selected once the modal closes — the first of those two `click`s had already selected it
- Both revert to whatever existed immediately before the double-click gesture once its trailing `dblclick` confirms what actually happened
v1.12.47 — Stop Touchpad Mode from silently re-arming a pending marker (2026-07-24 17:40)
- Placing/detaching an attached wayspot, turning Ruler off, removing the attached wayspot, and `+ Create` all used to unconditionally re-arm a fresh (now-visible) pending marker as a leftover from before the pending marker became tap-gated — none of those are a request to start a new placement, so none of them do this anymore; the coordinate preview still refreshes
v1.12.46 — Fix a double-click race that could open Edit alongside attach (2026-07-24 17:20)
- A double-click's trailing `dblclick` is now redirected through the same crosshair passthrough as `click`/`contextmenu` — previously it fired wherever the cursor literally was, which usually wasn't the marker itself, so the marker's own `dblclick` handler (and its veto of a wrongly-queued Edit-open) never ran and Edit could pop open right alongside the attach
- Widened the window a marker's `click` handler waits to see whether a trailing `dblclick` follows before opening Edit, since a real double-click/double-tap's timing can outlast a same-tick check
- Two slow, separate taps on an already-selected wayspot (no fast double-tap) still open Edit, same as mouse mode's "tap again to edit" shortcut
v1.12.45 — Touchpad Mode: the pending marker only appears from an actual tap (2026-07-24 16:30)
- The create-wayspot pending marker used to auto-arm (hidden) just from turning Touchpad Mode on or from panning alone — it now only springs into existence, visibly, from a deliberate tap on an empty spot, matching mouse mode; panning alone just keeps the coordinate preview live
- Once tapped, the marker stays pinned where it was placed instead of continuing to track the crosshair through further panning — a fresh tap relocates it, same as mouse mode
- An attached *existing* wayspot renders a small fixed offset bottom-right of the crosshair for the whole attach/pan session (instead of exactly underneath it), so the reticle stays visible; the coordinate tooltip now stays live while attached instead of freezing at the attach moment
v1.12.44 — Replace double-tap-drag with double-click attach/pan/detach (2026-07-20 03:30)
- Reworked how an existing wayspot is repositioned in Touchpad Mode: double-click it (or double-click anywhere, if it's at the crosshair — a native `dblclick` isn't redirected there like a plain tap is) to attach it to the crosshair and select it, pan the map (any number of separate pans) to move it, then double-click again to place it and deselect — replacing v1.12.41-43's single continuous double-tap-then-hold-drag gesture
- `doubleClickZoom` is now simply disabled for all of Touchpad Mode (double-click is fully repurposed), rather than the previous fragile disable/re-enable-around-one-gesture timing dance
- A single continuous drag directly on a marker's icon is unchanged — this only adds the attach/detach alternative for imprecise taps
v1.12.43 — Actually fix double-tap-drag still zooming the map (2026-07-20 02:05)
- v1.12.42's `doubleClickZoom.disable()` was undone too early — `dtdOnRelease` re-enabled it inline on `mouseup`, but the trailing native `dblclick` that ends a real double-click-then-drag fires *after* mouseup's own listeners finish (same synchronous dispatch), so the re-enable landed before the zoom-triggering `dblclick` arrived. Deferred the re-enable past that with a `setTimeout(0)`, guarded by a generation counter so a brand-new gesture starting in the meantime doesn't get its own disable clobbered by a stale re-enable
v1.12.42 — Fix double-tap-drag zooming the map and widen its touch tolerances (2026-07-20 01:10)
- The double-tap + drag gesture (v1.12.41) was releasing into a native `dblclick`, which zoomed the map instead of just dropping the drag — `doubleClickZoom` is now disabled for the gesture's duration, same as `map.dragging`
- Widened the double-tap timing window and tap/snap radius so a real finger's slower, less precise double-tap-then-hold is recognized reliably, not just a quick mouse double-click
- Added a `touchcancel` handler so an interrupted gesture re-enables map and marker dragging instead of leaving them stuck disabled
v1.12.41 — Double-tap + drag to move existing wayspots in Touchpad Mode (2026-07-20 00:20)
- In Touchpad Mode, a quick double-tap on (or near) an existing wayspot, whose second tap continues into a drag instead of lifting, now moves it — an alternative to the existing single-touch drag that doesn't need pixel-precise finger placement on the small icon
v1.12.40 — Tap-to-place parity for Touchpad Mode's crosshair (2026-07-19 15:10)
- In Touchpad Mode, a single tap now arms/moves the pending wayspot marker at the crosshair directly, matching a mouse-mode click — previously only panning kept it in sync
- Ruler taps in Touchpad Mode now add a point at the crosshair directly, same as a tap in mouse mode; removed the now-redundant + Point button
v1.12.39 — Add a Wiki section to the About modal (2026-07-19 14:00)
- Added a Wiki section to the About modal, under Keyboard Shortcuts, linking to the project's GitLab Wiki
v1.12.38 — Redirect touchpad taps to the crosshair (2026-07-19 13:30)
- In Touchpad Mode, tapping (or two-finger tapping for right-click) anywhere on the map now fires as if it landed exactly on the crosshair, since a finger can't reliably hit the crosshair itself or whatever tiny marker/ruler dot/segment happens to sit there
v1.12.37 — Ruler dot click & cascade-delete fixes (2026-07-19 13:02)
- Fixed ruler dot clicks sometimes missing and dropping a new, slightly-off point instead of connecting to the existing dot
- Right-clicking a dot shared by multiple measurements now deletes all of them, instead of only whichever measurement happened to be on top
v1.12.36 — Ruler support in Touchpad Mode (2026-07-19 12:26)
- Added a + Point button (in the ruler popover) to drop a ruler point at the crosshair while Touchpad Mode is active, and raw map taps are now ignored while both the ruler and Touchpad Mode are active
- The ruler's × Clear button now shows whenever the ruler is active, instead of only when there's a measurement left to clear
v1.12.35 — Fix S2 grid overlay gaps (2026-07-19 09:29)
- Fixed the S2 grid overlay's cell-size estimate being roughly 2.4x too large, which left large visible gaps in the mesh (measured at 52-58% of cells missing before this fix, 0% after)
- Layer L14 now consistently redraws above L17 and is drawn thicker, so it stays readable wherever the two grids overlap
v1.12.34 — Split conflict indicators into Glow/Line switches (2026-07-19 09:29)
- The Map Settings Conflict Indicators toggle is now two independent switches — Glow (red marker border) and Line (dashed connector) — plus a master switch that still turns both off/on together
v1.12.33 — Map Settings toggle for conflict indicators (2026-07-19 07:11)
- Added an On/Off switch in Map Settings to hide the red glow and dashed connecting lines on conflicting wayspots, independent of the existing conflict-zone circle toggle
v1.12.32 — Pending wayspot preview in the list (2026-07-18 22:30)
- The not-yet-created pending marker now shows a live preview row pinned to the top of the wayspot list, tracking its name/type/colour/nomination/coordinates/conflict status as you edit the New Wayspot form
- Fixed the pending marker's on-map circles/icon not refreshing when its colour swatch was changed
v1.12.31 — Purple nomination toggle (2026-07-18 21:55)
- The Regular/Ambassador nomination toggle now uses the same purple shade as its star badge, instead of the generic orange used by other switches
v1.12.30 — Restore Ambassador star badge (2026-07-18 21:52)
- Fixed the purple star badge on the Ambassador toggle label silently disappearing after the switch-based redesign — the badge targeted a CSS class the old button carried that the new toggle didn't
v1.12.29 — Single Ambassador toggle (2026-07-18 21:43)
- Replaced the separate Regular/Ambassador buttons in the New Wayspot form and Edit modal with a single toggle switch, matching the existing map-layer toggle style
v1.12.28 — "GO Pin" label (2026-07-18 21:22)
- Renamed the KMZ custom-icon export style's label from "GO Icon" to "GO Pin" (cosmetic only — the underlying export option is unchanged)
v1.12.27 — Rename Sponsored to Ambassador (2026-07-18 21:07)
- Renamed the "Sponsored" nomination to "Ambassador" everywhere (data model, UI, share links, CSV/KML export) — existing local drafts and share links saved under the old name still load correctly
- Added Ambassador-specific icon variants (purple star badge, per-wayspot-colour shape) for the KMZ "GO Icon" export style
v1.12.26 — Exclude hidden wayspots from conflicts (2026-07-18 12:24)
- Hidden wayspots no longer count toward conflict detection against other non-Regular wayspots — no connecting line, and they no longer affect another wayspot's Valid/Conflict status — unless the other side is Regular, since a Regular conflict always needs to surface
- Fixed a regression where a manually-hidden wayspot's list row (and its only Show button) vanished for good once deselected
v1.12.25 — Multi-select filters everywhere, drop Fade toggle (2026-07-18 11:40)
- Nomination and Status filters (sidebar popover and export modal) now support selecting more than one value at once, matching Type
- Removed the separate "Filtered-out wayspots" (Fade/Hide) and "Manually hidden" (Hide/Show) display toggles from the filter popover — filtered-out and manually-hidden wayspots are now always fully removed from the map instead of just dimmed
v1.12.24 — Wayspot list fills freed sidebar space (2026-07-18 11:40)
- The wayspot list now grows to fill the space freed when the New Wayspot panel is collapsed, instead of leaving dead space below a fixed-height list
v1.12.23 — Export icon choice, PNG filtering, multi-select filters (2026-07-18 09:42)
- The Export modal now offers a Google Pin / Custom Icon choice (Custom Icon is KMZ-only, since plain KML can't embed an icon file); the modal resets to defaults every time it's reopened instead of remembering the last session's picks
- PNG export now respects the "Wayspots To Export" filter, temporarily applying it to the map before capture and restoring the real view afterward
- The "Import Into Google My Maps" instructions now only show for KML/KMZ, not CSV, since CSV needs a different import flow
- The Type filter (sidebar popover and export modal) now supports selecting more than one value at once
v1.12.22 — Bake wayspot colour into exported icons (2026-07-18 07:36)
- Exported KML/KMZ wayspot icons now have their colour baked into the image itself (recoloured client-side before export) instead of relying on Google My Maps' icon-colour tinting, which only applies to My Maps' own stock icons and left custom icons showing in their native, untinted colour
v1.12.21 — Omit "Regular" label, name conflicts by wayspot (2026-07-17 22:12)
- "Regular" (the default nomination) no longer appears in the KML layer name or placemark description — only "Sponsored" is called out, as the exception
- Conflict descriptions in exported KML now name the conflicting wayspot (falling back to its type label) instead of showing its meaningless internal sequence number
v1.12.20 — Fold nomination into the KML layer name (2026-07-17 22:01)
- KML/KMZ export folders are now grouped as one folder per nomination+type combination (e.g. "Sponsored PokeStop") instead of nesting a nomination folder inside a type folder — Google My Maps flattens nested folders on import, which was silently dropping the nomination
- Reverted the previous version's placemark-name nomination prefix, now redundant since the layer name carries it instead
v1.12.19 — Equalize selection button widths (2026-07-17 19:12)
- Hide/Edit/Remove selection buttons in the Wayspots section now have equal width
v1.12.18 — KML export color & nomination-name fix (2026-07-17 18:41)
- Exported KML/KMZ pins are now recolored correctly on import into Google My Maps — a bare `<color>` with no `<Icon><href>` was being silently ignored, so colors previously vanished on import
- Auto-generated placemark names are now prefixed with the nomination (Regular/Sponsored), since My Maps flattens nested folders on import and the type folder was the only way to tell them apart
v1.12.17 — Sidebar action button cleanup (2026-07-17 18:24)
- Bulk toolbar and per-row wayspot buttons now consistently order Hide/Edit/Remove (previously mismatched)
- Renamed the bulk Delete selection button to Remove selection to match the per-row "Remove" wording used elsewhere (the Ctrl+Delete shortcut is unaffected)
v1.12.16 — Hide/show wayspots (2026-07-17 16:48)
- Added a hide/show toggle for individual wayspots and a bulk Ctrl+Shift+H shortcut, for decluttering the plan without deleting anything
- Added a Filter popover option to fully hide (instead of just fading) wayspots excluded by the active filters
- Hidden wayspots still round-trip through undo/redo, local drafts, and share links, and remain included in CSV/KML export regardless of the sidebar's current view
v1.12.15 — Bulk delete button (2026-07-17 13:54)
- Added a Delete button next to Bulk Edit for removing the current multi-selection, alongside the existing Ctrl+Delete shortcut
v1.12.14 — Fix import file chip layout (2026-07-17 13:11)
- The chosen-file name and size in the Import modal's file chip now sit on one line instead of stacking
v1.12.13 — Sponsored star badge (2026-07-17 12:03)
- Sponsored wayspots now show a star badge as a corner overlay on their shape icon in the sidebar list and read-only import/share preview rows, matching the badge already shown on map markers
- Wayspot names in the list use the default text color; type/nomination labels in the meta line now use their own AA-contrast colors
- Enlarged the star badge on map markers, ghost markers, and the list icon for better visibility
v1.12.12 — Import modal staged confirm flow (2026-07-16 18:37)
- Picking a file (via the Choose file... button, drag-and-drop, or the hidden input) no longer imports immediately — it shows a file chip with a Remove option, and the bottom Import button only commits it once the chip is showing
- The modal's Cancel/Import buttons now sit together in one bottom action row, matching the Export modal's layout
v1.12.11 — Combined export modal (2026-07-16 17:48)
- Replaced the four separate CSV/KML/KMZ/PNG export buttons with a single Export button that opens a modal to pick a file format and filter which wayspots to include (type/nomination/status), with numbered steps for importing the result into Google My Maps
- Moved the Import button next to Export/Share for a clearer grouping
v1.12.10 — Touchpad mode fixes (2026-07-16 16:26)
- The Cancel button is now hidden in touchpad mode, since the pending marker always re-arms itself and Cancel had no visible effect
- Selecting a wayspot, cycling selection, fitting to selection/all, or filtering by status no longer drags the touchpad-mode pending marker onto whatever got recentered
v1.12.9 — Fix stale distance tooltip (2026-07-16 11:20)
- Fixed a distance tooltip that could get stuck showing a stale selection after Ctrl+click group-selection changes, since that gesture doesn't fire a mouseout
v1.12.8 — DMS coordinates, Maps link paste & drag-and-drop import (2026-07-16 11:15)
- The New Wayspot form, Edit modal, and CSV/TSV import now accept degrees/minutes/seconds coordinates (e.g. `13°48'47.3"N`) alongside plain decimals
- Paste a Google Maps link anywhere on the page to drop a pending marker at that location
- Drag-and-drop an import file directly onto the page
- Redesigned the Import modal with format help and My Maps export instructions
v1.12.7 — Status bar as full-width footer (2026-07-15 00:06)
- The status bar now spans the full viewport width as a footer below the map/sidebar, instead of being scoped inside the sidebar column where it disappeared whenever the sidebar was collapsed
v1.12.6 — Touchpad mode (2026-07-14 15:10)
- Added touchpad mode: a screen-fixed crosshair reticle you pan the map underneath instead of dragging a marker with your finger (which would otherwise obscure it) — toggle via a new floating button or Ctrl+Shift+T
- Fixed Leaflet's map container size going stale against the mobile `dvh`-based height, which had been silently drifting every marker's position from anything CSS-native
- Coordinate precision (previously an inconsistent mix of 5/6/7 decimals across the app) is now centralized into one `fmtCoord()` helper at 7 decimals everywhere, matching Google Maps' share-link precision
v1.12.5 — Sidebar scrollbar rework (2026-07-14 11:42)
- The sidebar and wayspot list now use a wider (11px), more visible themed scrollbar with distinct track/thumb/hover/active colors and a stable gutter
v1.12.4 — Map Settings cursor & coordinate-readout fixes (2026-07-14 00:17)
- Fixed the crosshair cursor and a stuck coordinate readout that persisted while hovering the Map Settings panel, ruler config, or floating map controls
- Fixed the same stuck-readout issue over Leaflet's own zoom/locate/fit buttons
- The coordinate readout now flips to the free side of the cursor near the map's edges instead of getting clipped
v1.12.3 — Themed scrollbars (2026-07-13 19:08)
- Custom thin scrollbars (using the existing theme colors) now replace the browser default, matching light/dark mode automatically
v1.12.2 — Fix Thai/non-Latin text in exported CSV (2026-07-13 15:04)
- Exported CSV files now start with a UTF-8 byte-order mark, so Excel correctly detects the encoding and displays Thai (and other non-Latin) names/remarks instead of mojibake — text was always valid UTF-8 and looked fine in Notepad++ or on re-import, only Excel's own auto-detection was affected
- CSV import already stripped a leading BOM, so re-importing your own exports is unaffected
v1.12.1 — Right-click to cancel, live conflict warning, zone circles (2026-07-11 02:21)
- Right-clicking the temporary pending marker now discards it too, same as the Cancel button
- The pending marker now shows a live spacing-conflict warning (red marker + message + connecting line to each conflicting wayspot) if it's too close to an existing wayspot, before you ever click Create — same as the check applied after creation
- The pending marker now also shows its spacing-zone and interaction-zone circles (matching whichever toggles are on and whichever type is selected), same as real wayspots
- The connecting line between conflicting wayspots is now always visible, not just when Conflict Zone circles are toggled on
- Zone circles now use the wayspot's own color at two paleness levels (spacing zone, then interaction zone half as opaque again) instead of a fixed green
- Added Opacity number inputs to the Conflict Zone and Interaction Zone sections of Map Settings, defaulting to 50% and 25%
- Fixed the pending marker being difficult to drag — it now sets the same interaction options real wayspot markers use, so the map no longer fights the marker for the drag gesture
v1.12.0 — Two-step wayspot placement (2026-07-11 01:09)
- Tapping the map no longer creates a wayspot instantly — it drops a temporary marker and fills in the New Wayspot lat/lng fields, so you can fine-tune the spot before committing
- Drag the temporary marker, or tap a different spot on the map, to readjust it before placing
- The + Add button is now + Create, and a new Cancel button discards the temporary marker without creating anything
v1.11.6 — Code modernisation (2026-07-10 09:29)
- Adopted modern JavaScript APIs throughout (no behaviour changes): Number.isNaN/parseFloat/parseInt, optional chaining, replaceAll, .includes(), .at(), Math.hypot, and Blob.arrayBuffer() for KMZ import
- Dropped the deprecated document.execCommand copy fallback — the clipboard API covers https and localhost; elsewhere the share link is shown in a prompt for manual copy
- Removed two unused internal functions and documented every intentionally-ignored exception
- This clears the last of the 122 issues from the initial SonarCloud scan: 0 bugs, 0 vulnerabilities, 0 code smells
v1.11.5 — Accessibility & contrast (2026-07-10 09:05)
- Every form control now has a proper accessible name: real labels in the edit modal, screen-reader names for the Map Settings toggle switches, and aria-labels on the sidebar inputs — fixes all 11 accessibility bugs flagged by static analysis
- Active Type/Nomination/Filter chips use slightly deeper shades of the same colours so their white text meets WCAG AA contrast; map markers and colour swatches are unchanged
- Ruler distance labels and the dark-theme map attribution also bumped to AA contrast
- Pinch-zoom is no longer blocked on mobile (removed the viewport maximum-scale cap)
- More internal cleanup guided by SonarCloud: stateless helpers hoisted to script scope, modernised DOM calls, linear-time changelog parsing in the build script, and a flake-resistant persistence test
v1.11.4 — Internal refactoring (2026-07-09 22:10)
- Simplified the most complex internal functions (map refresh, CSV/KML import, edit-save, keyboard shortcuts, startup loading, ruler redraw) into smaller, single-purpose helpers — no behaviour changes
- Deduplicated logic along the way: type/nomination detection is now shared between the CSV and KML importers, and wayspot removal paths share one teardown helper
- Clears all 12 critical issues reported by SonarCloud static analysis
v1.11.3 — Accessibility & code health (2026-07-09 15:22)
- The All / Valid / Conflict status tiles in the sidebar are now real buttons — keyboard activation (Enter/Space) and screen-reader semantics come natively instead of via ARIA workarounds; appearance and behaviour are unchanged
- Internal code modernisation across the app (no behaviour changes): `let`/`const` everywhere, `.includes()`, `for...of`, optional chaining, and flatter nesting — driven by a full SonarQube static-analysis pass that now reports 0 bugs and 0 vulnerabilities
- Added SonarQube scanning config plus real line-coverage reporting from the Playwright suite (V8 coverage mapped back to source, no new dependencies)
- 12 new end-to-end tests covering bulk edit, multi-select, keyboard cycling, share-link viewing (including local-data preview and restore), KML import with colours, the S2 grid overlay, and the sidebar resizer — line coverage now 77% overall
v1.11.2 — About modal keyboard shortcuts & trademark cleanup (2026-07-09 11:58)
- Added a Keyboard Shortcuts section to the About modal listing all existing shortcuts (Undo/Redo, remove selection, multi-select, edit selection, fit selection, toggle ruler, cycle wayspot/status group, close popover), with key combos styled as key-cap chips and a mouse-icon badge for click
- Removed the unused Ingress and Campfire trademark mentions from the About modal and comment header — neither is referenced anywhere else in the app
v1.11.1 — Status bar readability (2026-07-09 11:17)
- Status bar text/background now uses higher-contrast colours instead of blending into the sidebar
- Cursor coordinates moved out of the status bar into a larger, bolder tooltip that follows the cursor on the map
- Long status messages (e.g. selection hints) now scroll left to reveal the full text instead of being cut off, pausing briefly at the start and end of each loop, and reset/pause when you hover over the status bar
v1.11.0 — Bulk edit (2026-07-09 10:52)
- Ctrl+Shift+E now opens a bulk-edit modal when multiple wayspots are selected, letting you apply Type, Nomination, Colour, and/or Remark to the whole selection at once — only the fields you touch are changed, everything else is left as-is per wayspot
- Name and coordinates are left out of bulk edit since they're inherently per-wayspot
- Added a dedicated Edit button next to Filter in the Wayspots sidebar section as a shortcut for the same edit/bulk-edit action — enabled whenever there's a selection
v1.10.23 — Click-to-edit selected marker (2026-07-08 16:20)
- Clicking a marker that's already selected now opens the Edit modal instead of deselecting it
- Clicking empty map now deselects the current selection instead of placing a new wayspot; with nothing selected, clicking the map still places a new wayspot as before
v1.10.22 — Keyboard shortcuts (2026-07-08 14:42)
- Added keyboard shortcuts: Ctrl+Delete/Backspace removes the selected wayspot(s), Ctrl+Shift+E opens the edit modal, Ctrl+Shift+M toggles the ruler, Ctrl+Shift+F fits the map to the selection (press again to fit all), Ctrl+Shift+Left/Right cycles the status group (All/Valid/Conflict/deselect), and Ctrl+Shift+Up/Down cycles through wayspots
- The floating Fit button now shares the same fit-selection/fit-all toggle behaviour as the Ctrl+Shift+F shortcut
v1.10.20 — Scrollable wayspot list (2026-07-07 17:24)
- The wayspot list now scrolls within its own area (capped height) instead of growing indefinitely, while the rest of the sidebar keeps scrolling as before
v1.10.19 — Fit button now fits all when nothing's selected (2026-07-07 17:11)
- The "Fit" map button now zooms/pans to fit all wayspots when nothing is selected, instead of doing nothing
- Moved the Fit button from the bottom-left Ruler/Map Settings cluster to the bottom-right stack, directly above the zoom in/out buttons
v1.10.18 — Grouped KML/KMZ export (2026-07-07 15:32)
- KML/KMZ export now nests Placemarks in Folders by Nomination (Sponsored/Regular), then by Type (PokéStop/Gym/Power Spot), instead of a flat list — lets you toggle groups on/off in Google Earth/My Maps
v1.10.17 — Multi-select and zoom-to-fit (2026-07-07 15:16)
- Ctrl+click (or Cmd+click on Mac) a wayspot marker on the map, or a row in the Wayspot list, to add/remove it from a multi-selection — works interchangeably between map and list
- Added a floating "Fit" map button (next to Ruler/Map Settings) that zooms/pans to fit whatever is currently selected (single or multiple wayspots)
v1.10.16 — Status stat wording/default fix (2026-07-07 14:33)
- Renamed the "Total" stat label to "All" so it matches the wording used by the Filter popover's Status group (All/Valid/Conflict)
- The "All" stat is now shown pre-selected (highlighted) by default instead of no stat being highlighted until one is clicked
v1.10.15 — Regular nomination restyle (2026-07-07 14:25)
- Removed the "Badge" label above the color swatch row in the New Wayspot form, and centered the swatches
- Regular nomination buttons/badges (New Wayspot form, Edit modal, Filter popover) are now white instead of green, and no longer show the star icon — Sponsored keeps its purple color and star
v1.10.14 — Floating map button polish (2026-07-07 14:10)
- Removed the faint border/shadow box around the zoom and locate buttons
- Zoom, locate, ruler, and map settings buttons are now bigger (42px) on desktop for easier clicking
- Both floating button groups now sit at the same height above the map edge with a comfortable gap from the scale bar / attribution text
v1.10.13 — Fix blank tiles at max zoom (2026-07-07 13:35)
- Tile layers now cap their native zoom per provider (OSM/Esri 19, CartoDB 20) so zooming past that level upscales the last loaded tile instead of requesting a nonexistent one and rendering blank
v1.10.12 — Edit panel color picker (2026-07-07 13:14)
- The Edit Wayspot modal's Color field now uses the same swatch palette + custom color picker as the New Wayspot panel, instead of a plain native color input
v1.10.11 — Internal nomination rename (2026-07-07 12:23)
- Renamed the internal wayspot data field and all related code (CSS classes, data-attributes, function/variable names) from "category" to "nomination" for consistency with the user-facing wording — local drafts and share/import data saved by previous versions still load correctly, since the old field name is still read as a fallback
v1.10.10 — Nomination label wording (2026-07-07 12:23)
- Renamed the "Nomination Category" label to "Nomination" in the Edit Wayspot modal, matching the wording already used by the Filter popover
v1.10.9 — Click stats to select and zoom (2026-07-07 11:46)
- Clicking the Total / Valid / Conflict numbers in the sidebar now selects that group of wayspots (highlighted on the map and in the list) and zooms the map to fit them; clicking the same number again deselects
v1.10.8 — Share link field order (2026-07-07 11:40)
- Share-link rows are now ordered [name, type, nomination, color, lat, lng, remark] (previously remark and nomination were in different slots) — matches the column order already used by CSV/TSV export and the internal wayspot data model
- Share links generated by v1.10.7 are no longer compatible and will fail to load correctly
v1.10.7 — Shorter share links (2026-07-07 01:31)
- Share links are now much shorter — wayspot data is packed into compact arrays instead of verbose objects, and text is base64-encoded directly from UTF-8 bytes instead of being percent-escaped first (which especially bloated non-ASCII names, e.g. Thai text)
- Share links generated by previous versions are no longer compatible and will fail to load
v1.10.6 — Sponsored map marker badge (2026-07-07 01:10)
- The small map marker badge now marks Sponsored wayspots (previously it marked Regular ones) — Regular markers are unbadged, matching the tool's default look
- The marker badge is now the same purple star icon used on the Regular/Sponsored buttons, replacing the small circle-with-letter badge
v1.10.5 — Zone toggle reload fix (2026-07-07 01:01)
- Fixed Conflict Zone / Interaction Zone / S2 Cell toggles sometimes showing "On" right after loading the page without actually drawing anything — some browsers restore a checkbox's checked state on reload without re-running its logic, so the switch and the real state could get out of sync; toggles now always start in sync with the (off) state on load
v1.10.4 — Selection highlight fix (2026-07-07 00:51)
- Selecting a wayspot no longer leaves unrelated conflicting pairs highlighted elsewhere on the map — only the selected wayspot and anything it actually conflicts with stay at full opacity; everything else fades, same as before
v1.10.3 — CSV column rename (2026-07-07 00:32)
- Renamed the CSV/TSV "Category" column to "Nomination" in export, the blank CSV template, and import column detection (older files with a "Category" or "Nomination Type" header still import fine)
v1.10.2 — Nomination badge colors (2026-07-07 00:17)
- Regular nomination badges/buttons are now green and Sponsored ones are purple, replacing the previous silver/gold scheme (New Wayspot form, Edit modal, Filter popover, and map markers)
- Added a star badge icon next to the Regular/Sponsored labels
v1.10.1 — Undo/redo fix (2026-07-06 23:24)
- Fixed an off-by-one bug where Undo/Redo needed two clicks to move one step — e.g. adding two wayspots then clicking Undo once used to jump straight past the last one to an empty list
- Removing a wayspot from the list (the trash icon) is now also undoable, matching every other add/edit/remove/reorder/clear action
v1.10.0 — Filter popover (2026-07-06 21:54)
- Replaced the wayspot type tabs above the Wayspots list with a single Filter button that opens a popover
- The popover now also filters by nomination category (Regular / Sponsored) and conflict status (Valid / Conflict), in addition to wayspot type
- The Filter button shows a badge with the number of active filters, and includes a Reset filters button
- Regular nomination badges/buttons are now silver and Sponsored ones are gold, consistently across the New Wayspot form, Edit modal, Filter popover, and map markers
- New wayspots now default to the Regular nomination category instead of Sponsored
v1.9.1 — Cleanup (2026-07-06 15:40)
- Removed legacy compatibility code for the old "notes" field name (renamed to "remark" in v1.7.2) — old share links/local drafts using "notes" are no longer read, and CSV import no longer matches a "notes"/"note" column header
v1.9.0 — Nomination category (2026-07-06 15:34)
- Wayspots can now be marked Sponsored or Regular, in the New Wayspot form and the Edit Wayspot modal
- Regular wayspots no longer conflict with each other on spacing checks (Sponsored wayspots still do)
- Regular wayspots are marked with a small green "R" badge on the map, and the category shows in the wayspot list
- CSV import/export and the CSV template now include a Category column; KML/KMZ import/export also carries the category
v1.8.1 — Form layout polish (2026-07-06 15:09)
- Remark box moved below the coordinates fields in both the New Wayspot form and Edit Wayspot modal
- Edit Wayspot modal labels now use Title Case instead of ALL CAPS
- Tightened spacing around the coordinates fields so an empty error message no longer reserves extra room
v1.8.0 — Wayspot type tabs (2026-07-06 14:53)
- Added All / PokéStop / Gym / Power Spot filter tabs above the Wayspots list, each with its icon and full type name
- Selecting a type tab dims markers and range circles for other types on the map, so the selected type stands out
- Updated the Power Spot icon artwork
v1.7.2 — Remark at creation (2026-07-06 14:29)
- Remark field added to the New Wayspot form — no more editing a wayspot just to add a remark
- CSV export now includes a Remark column, matching CSV import
- CSV import template updated with a Remark column
v1.7.1 — Floating button fixes (2026-07-03 19:44)
- Fixed double-clicking a floating map button (Ruler, Map Settings) or its popover triggering a map zoom underneath
- Bottom-right Zoom/My Location buttons now match the same card style (size, radius, shadow) as the bottom-left Ruler/Map Settings buttons
v1.7.0 — Consolidated Map Settings panel (2026-07-03 19:24)
- The five floating map/planning buttons are now one Map Settings panel (Google Maps “layers” style) with Tile Type, Conflict Zone, Interaction Zone, and S2 Cell sections
- Tile picker replaced with a visual grid of live preview thumbnails (real map tiles, centered on Thailand’s Kilometre Zero Marker) instead of a plain dropdown
- Conflict Zone, Interaction Zone, and S2 Cell each get an orange on/off toggle switch, synced with their existing fine-grained controls
- Ruler kept as its own floating button and popover, separate from Map Settings
- Floating map controls moved to the bottom-left of the map, above the scale bar
- Reset Sidebar Layout button resized to match the Theme toggle button; button spacing standardized (6px) across header, floating controls, modals, and export rows
- Removed the green highlight from the CSV export button for consistency with KML/KMZ/PNG
v1.6.0 — KMZ export & export panel reorder (2026-07-03 09:45)
- New KMZ export (zipped KML) alongside CSV/KML/PNG — lazily loads the same small zip library already used for KMZ import
- Export panel reordered: Import, Undo, Redo, and Clear now sit together in the top row; CSV, KML, KMZ, PNG, and Share moved to the row below
- Undo/Redo icons switched to circular ccw/cw arrows; Clear button now has a text label
v1.5.0 — Non-destructive import & share viewing (2026-07-02 20:35)
- Opening a share link or importing a file no longer overwrites your plan immediately — it loads as a preview with a banner to Merge, Override, or Close and go back to what you had
- New Show local data toggle while previewing: ghost markers on the map plus a separated, read-only “Local, not merged” group in the wayspot list, so you can compare before deciding
- Your plan now autosaves to your browser and is restored automatically on reload, even without a share link
- Import dialog simplified — files load straight into the new preview/banner flow instead of a separate Append/Replace choice
- Export panel reorganized into two rows; CSV export columns simplified to Name, Type, Color, Latitude, Longitude; TSV export removed (TSV import is still supported)
- New Wayspot panel spacing increased for a more comfortable layout
v1.4.1 — Floating controls polish (2026-07-01 10:43)
- Ruler button now toggles the ruler tool directly; popover only shows the Clear button when active
- Conflict circles default to hidden; the toggle button in the Conflict Range popover controls visibility (eye icon)
- Interaction Range popover now has a custom distance input and per-type circle toggles (PokéStop / Gym / Power Spot)
- Sidebar spacing increased for better readability
- All tooltip labels corrected to Title Case
v1.4.0 — Google My Maps round-trip (2026-07-01 01:22)
- Import now accepts .kmz files (zipped KML) in addition to .kml — lazily loads a small unzip library only when a .kmz is selected
- This makes import/export fully round-trippable with Google My Maps: export KML here → import into My Maps, or export from My Maps as KML/KMZ → import here
v1.3.7 — Security hardening (2026-07-01 00:45)
- Fixed a cross-site scripting (XSS) issue where a crafted share link or KML import could inject HTML via a wayspot's color value
- Fixed a crash when loading a share link containing an unrecognized wayspot type — now falls back to PokéStop instead of breaking the page
- KML and share-link imports now validate color/type the same way CSV/TSV imports already did
- Added a Subresource Integrity (SRI) check to the dynamically-loaded PNG export library
- Internal: extracted the inlined Leaflet library into its own source file for easier maintenance
v1.3.6 — Floating map controls (2026-07-01 00:16)
- Map and Planning settings moved out of the sidebar into floating icon buttons over the top-left of the map, freeing up sidebar space and keeping tools next to what they affect
- Clicking a floating control button no longer places a wayspot underneath it
- New default badge colours and an updated swatch palette for PokéStop / Gym / Power Spot
- Fixed the My Location button occasionally swallowing its own click
v1.3.5 — Esri tile authentication (2026-06-30 22:55)
- Esri Satellite & Street tiles now authenticated via API key — more reliable, less likely to be rate-limited
v1.3.4 — About & attribution (2026-06-30 22:04)
- About button added to status bar — shows affiliation disclaimer, trademark notices, and open-source credits
- Esri tile attribution corrected — full source list now shown on map for World Imagery and World Street Map
- S2 Geometry Library (Google LLC, Apache 2.0) credited in source
v1.3.3 — Performance & code cleanup (2026-06-04 12:02)
- S2 grid rendering debounced — map drag/zoom is visibly smoother
- Icon cache fixed — icons now persist across refreshes instead of being discarded every time
- Internal refactor: extracted helpers, removed duplicated teardown/creation code, improved conflict-check performance
v1.3.2 — Layout & map fixes (2026-05-22 23:50)
- Fixed page overflowing viewport due to UTF-8 BOM corrupting the CSS reset
- Leaflet controls now properly clipped and isolated within map bounds
- Sidebar height reliably matches map height across all browsers
- Leaflet attribution pinned flush to map corner with no gap
v1.3.1 — UI fixes (2026-05-22 17:16)
- Export panel and status bar pinned to sidebar bottom
- Sidebar sections now scroll independently
- Entire section header row clickable to collapse/expand
- Fixed Leaflet attribution and status bar clipping at viewport edge
v1.3.0 — Rebranded to Community Wayspot Planner (2026-05-22 16:49)
- Renamed to Community Wayspot Planner (short: Wayspot Planner)
- Export filenames updated to wayspot-planner.*
v1.2.1 — Mobile UI improvements (2026-05-22 15:55)
- Larger touch targets throughout (buttons, inputs, wayspot list rows)
- Export panel buttons taller and easier to tap
- Sidebar height increased on mobile for more content space
v1.2.0 — Type labels update (2026-05-22 15:10)
- Export type values simplified to Stop, Gym, Max
- Import accepts both old (PokéStop, Power Spot) and new (Stop, Max) names
- Changed default map tile to OpenStreetMap
- Fixed header title to "Wayspot Planner"
v1.1.1 — Bug fixes (2026-05-22 14:16)
- Fixed theme toggle button not rendering as a square
- Aligned theme button height to match Reset Layout button
v1.1.0 — Feature update (2026-05-22 13:53)
- S2 Level 14 & 17 cell grid overlay
- Undo / Redo — Ctrl+Z / Ctrl+Y with full history
- Share link via URL hash
- Per-wayspot notes field
- Distance display on hover when a wayspot is selected
- Type-prefixed auto-naming (e.g. PokéStop 1, Gym 2)
- PNG map export
- 80 m interaction range circles toggle
v1.0.0 — Initial release (2026-05-21 18:41)
- Wayspot placement — PokéStop, Gym, Power Spot with custom badge colours
- Conflict detection with configurable radius (default 40 m)
- Ruler — multi-segment distance measurement with snap-to-wayspot
- CSV / TSV / KML import & export
- Drag-to-move markers, drag-to-reorder list
- Dark / light theme with system preference detection
- Sidebar resizable and collapsible