- .card__art gets 36px top padding so the sprite centres in the space
below the dex number instead of colliding with it; min-height raised to
keep short cards showing the full sprite; spot glow moved down to match
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Card sprite sits centred in the upper area (flex:1 + place-items:center)
instead of a forced margin; sprite-style / boxed sizing moved onto the
img so it stays centred
- .card__ghost number nudged to top: 2px
- Feed Back-navigation restores the raw scroll offset again (dropped the
card-anchor approach); keeps manual scrollRestoration + retry-on-reflow
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Feed remembers the opened card (ui.feedAnchor) and, on Back, scrolls that
exact card just below the sticky header via scrollIntoView + a computed
scroll-margin-top; re-corrects on webfont load and as off-screen cards
render their real height, but yields once the user scrolls
- history.scrollRestoration = 'manual' so the browser doesn't fight it;
per-session scroll memory cleared on cold launch
- Cards: ghost number nudged off the top edge; sprite dropped 10px (flex
column grows the card, so nothing overlaps); intrinsic size bumped to match
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- The dex feed remembers scrollY on teardown (ui.feedScroll) and restores
it on re-mount, so viewing a Pokémon and going back lands where you were.
Reset to top when the filter, sort, direction or game changes.
- Router no longer force-scrolls after mount; it scrolls to top on the
loading placeholder and each view manages its own position (detail pages
land at top, feed and search restore).
- .phero__back is now a rounded pill with a real 40px tap target.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Learnset 'By TM / HM' rows show the machine number for the selected game
(TM25 / HM05 / TR10), resolved from /machine when the group is expanded
- Move detail page gains a 'TM / HM' fact (marked '(latest)' when the move
isn't a machine in the currently-selected game)
- machineNumber() exported from MovesList and reused by MoveDetail
- Fresh installs now open on the National Dex (versionGroup 'all') instead
of Scarlet/Violet
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Search becomes a tabbed lookup: Pokémon (offline snapshot) / Moves /
Items. Moves + Items lazy-load a name index from PokéAPI (SW-cached) and
filter client-side; short move result sets get type/class/power chips
- MoveDetail (#/move/:id): type-themed header, power/accuracy/PP/priority,
effect text with %-substitution, target, ailment/crit/drain/stat-change
summary, learned-by count
- ItemDetail (#/item/:id): item sprite, category, cost, fling power,
attributes, held-by count, effect text
- Loose name matching (hyphens vs spaces); run-token guards stale async
renders when the query or tab changes mid-fetch
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Each game renders as a two-tone tile split in its version colours
(Scarlet/Violet, Sword/Shield, Ruby/Sapphire…), keyed by version group
with a per-generation fallback (src/data/game-colors.js)
- Clean flat split with a bottom scrim for legibility — no gloss/bubble
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Feed header: the game pill is gone (the nav Games button opens the sheet);
the active game is now a quiet text label under the title
- Settings > Theme: add Black (OLED) and Sepia alongside System/Light/Dark
- Settings > Accent colour: six swatches (red default, blue, green, amber,
violet, rose) layered over any theme via [data-accent]; persisted
- applyTheme() takes the settings object; system theme now keys off the
absence of [data-theme] so explicit light/sepia don't fight the media query
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Snapshot now carries per-species base stats + BST, height, weight, base
EXP, capture rate, growth rate, colour, egg groups, gender rate,
legendary/mythical/baby flags, and past typings (~72 KB gzip)
- Dex feed: Sort control (dex / name / BST / each stat / height / weight /
base EXP / catch rate / recently caught) with a direction toggle;
sort + filter persisted in the ui store; cards show the sorted metric
- New 'Legendary' filter chip (legendary or mythical) with a live count
- Detail hero: shiny toggle moved up beside the favourite, top of the hero
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- FlavorText: 'All Pokédex entries' disclosure listing every distinct
English entry across all games (newest first, labelled by game) — not
just the selected game's one line
- Search remembers its query and scroll position in the ui store, so Back
or re-opening the tab restores the results; header explains the scope
(matches all species; opens for the selected game / all games)
- GameSheet 'All games' option: National Dex, newest data, no generation
limits — abilities/shiny ungated, types untrimmed, evolution unpruned;
Moves/Locations prompt to pick a game
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- FlavorText: shows a version pill toggle (Sword/Shield, Scarlet/Violet…)
when the two entries differ, sliding between them; collapses identical
entries; falls back to the newest English entry, captioned
- Switching games while viewing a Pokémon now rebuilds the detail page
(router.rerender wired from a settings subscription in main.js) so
flavour text, learnset, matchups, evolution, abilities, locations and
era sprites all follow the newly selected game
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- New GameSheet: bottom drop-up overlay (backdrop / grab handle / Esc to
dismiss) summoned from the nav 'Games' button or the feed's game pill;
picking a game/sub-dex writes settings and the feed updates in place
- Removed the #/games route and GamePicker view
- Detail page remembers the last-opened tab in a new pdx.ui store and
restores it on return; selectTab guards unknown ids
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Detail page resolves a Pokemon's typing from PokeAPI past_types for the
selected game's generation (Gen 1 Magnemite is pure Electric, pre-Gen 6
Clefairy is Normal); feeds hero pills, theming and matchups
- Type chart excludes Steel/Dark (pre-Gen 2) and Fairy (pre-Gen 6) as
attacking types entirely
- Gen 1-2 game-era sprites (opaque white bg) shown as a small framed tile
on cards and the detail hero
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Feed header: large title, tappable game pill, circular progress ring,
icon-in-field search, filter chips with live counts (All/Caught/Missing/Favorites)
- Cards: left-aligned info, number chip, corner ghost number (no longer hidden
behind the sprite), top-down type gradient, staggered entrance animation;
caught toggle moved to top-left
- Detail: hide the shiny toggle for Gen 1 games (shinies are Gen 2+);
add Category (genus) to the About tab
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Detail page: base stats, type matchups (defending), evolution chain,
learnset with per-move power/type/acc/PP/effect, wild locations
- Game-aware: abilities gated to Gen 3+ (hidden to Gen 5+), type chart
applies Gen 1 / pre-Gen 6 rules, move stats use PokeAPI past_values,
pre-Gen 4 physical/special-by-type, evolution tree re-parented to the
selected generation
- Moves and evolution clickable/expandable; no horizontal scroll
- Fix: .view-host shrink-wrapped as a grid item on desktop (margin:0 auto)
- Era-accurate sprite option; Search tab relabelled as global lookup
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>