Simplify the import dialog copy; spell it "color"

- The save-import dialog body is now just "N seen · N caught in this
  save." — the button labels carry the merge/replace meaning.
- "colour" → "color" throughout (the visible "Accent color" field, plus
  comments and README for consistency).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Ve7HLspzeG2xDPtJQ8vmu
This commit is contained in:
chris 2026-09-10 10:01:54 -04:00
parent 840031c48a
commit d275117569
6 changed files with 12 additions and 14 deletions

View File

@ -92,19 +92,19 @@ Working app with a type-themed UI:
snapshot; a pill switcher on the detail page rebuilds types / stats / snapshot; a pill switcher on the detail page rebuilds types / stats /
matchups / abilities / learnset / artwork for the chosen form. Purely matchups / abilities / learnset / artwork for the chosen form. Purely
cosmetic variants (Unown's 27 letters, Vivillon's 19 patterns, Furfrou cosmetic variants (Unown's 27 letters, Vivillon's 19 patterns, Furfrou
trims, seasonal Deerling/Sawsbuck, Flabébé line colours, Alcremie's 62 trims, seasonal Deerling/Sawsbuck, Flabébé line colors, Alcremie's 62
decorations, Pikachu caps — 278 across 50 species) get a separate compact decorations, Pikachu caps — 278 across 50 species) get a separate compact
"Appearance" dropdown that only swaps the sprite. Cards show a "+N forms" "Appearance" dropdown that only swaps the sprite. Cards show a "+N forms"
badge. badge.
- **Detail** — type-gradient hero + tabbed sheet (About / Stats / Evolution / - **Detail** — type-gradient hero + tabbed sheet (About / Stats / Evolution /
Moves / Locations); coloured animated stat bars; defensive type matchups; Moves / Locations); colored animated stat bars; defensive type matchups;
evolution chain re-parented to the selected game's generation; learnset with evolution chain re-parented to the selected game's generation; learnset with
per-move power/type/accuracy/PP/effect (era-accurate via `past_values`, per-move power/type/accuracy/PP/effect (era-accurate via `past_values`,
incl. pre-Gen-4 physical/special-by-type), the TM/HM group ordered by incl. pre-Gen-4 physical/special-by-type), the TM/HM group ordered by
TM number for the selected game; wild encounter locations. TM number for the selected game; wild encounter locations.
- **Game-aware** — abilities gated to Gen 3+ (hidden to Gen 5+); type chart - **Game-aware** — abilities gated to Gen 3+ (hidden to Gen 5+); type chart
applies Gen 1 / pre-Gen 6 rules. applies Gen 1 / pre-Gen 6 rules.
- **Games** — overlay picker with stylised version-colour cover tiles, - **Games** — overlay picker with stylised version-color cover tiles,
sub-dex switch, and an "All games" (National, no gen limits) option. sub-dex switch, and an "All games" (National, no gen limits) option.
- **Search** — tabbed lookup: Pokémon, Moves, Items and Abilities, all - **Search** — tabbed lookup: Pokémon, Moves, Items and Abilities, all
browsable offline from the snapshot. Moves filter by type / damage class browsable offline from the snapshot. Moves filter by type / damage class
@ -133,7 +133,7 @@ Working app with a type-themed UI:
chart (tap a type for its offensive + defensive breakdown; both chart (tap a type for its offensive + defensive breakdown; both
gen-aware). gen-aware).
- **Settings** — theme (System / Light / Dark / Black / Sepia) + accent - **Settings** — theme (System / Light / Dark / Black / Sepia) + accent
colour, text size, an in-app reduce-motion override (on top of the OS color, text size, an in-app reduce-motion override (on top of the OS
preference, which is always respected too), sprite style, haptic preference, which is always respected too), sprite style, haptic
feedback on catch (Vibration API), which screen to land on at launch, feedback on catch (Vibration API), which screen to land on at launch,
JSON export/import. JSON export/import.

View File

@ -10,7 +10,7 @@ import { prettify } from '../data/pokedex-resolver.js';
/** /**
* One Pokémon in the dex feed. Tinted by its primary type: a soft top-down * One Pokémon in the dex feed. Tinted by its primary type: a soft top-down
* gradient, a type-coloured spotlight behind an oversized sprite that lifts * gradient, a type-colored spotlight behind an oversized sprite that lifts
* above the card, a number chip, and a big ghost number in the corner. * above the card, a number chip, and a big ghost number in the corner.
*/ */
export function Card(species, number, { spriteStyle = 'official', versionGroup, gen = 9, boxed = false, metric = null } = {}) { export function Card(species, number, { spriteStyle = 'official', versionGroup, gen = 9, boxed = false, metric = null } = {}) {

View File

@ -1,7 +1,7 @@
/** /**
* Signature colours for each game, used to render a stylised "cover" tile in * Signature colors for each game, used to render a stylised "cover" tile in
* the game picker (real box art is Nintendo's and not in the API). Two * the game picker (real box art is Nintendo's and not in the API). Two
* colours = the paired versions; games without a listed entry fall back to * colors = the paired versions; games without a listed entry fall back to
* a per-generation hue. * a per-generation hue.
*/ */
const GAME = { const GAME = {

View File

@ -1,5 +1,5 @@
// Resolve a Pokémon type to its hex colour by reading the --type-* CSS // Resolve a Pokémon type to its hex color by reading the --type-* CSS
// custom properties once and memoising. Type colours don't change between // custom properties once and memoising. Type colors do not change between
// light and dark, so the cache is safe for the session. // light and dark, so the cache is safe for the session.
const TYPES = [ const TYPES = [
'normal', 'fire', 'water', 'electric', 'grass', 'ice', 'fighting', 'poison', 'normal', 'fire', 'water', 'electric', 'grass', 'ice', 'fighting', 'poison',

View File

@ -647,7 +647,7 @@
text-transform: capitalize; text-transform: capitalize;
} }
/* Cover tiles: a clean split of the two version colours, no gloss. */ /* Cover tiles: a clean split of the two version colors, no gloss. */
.gamecard--cover { .gamecard--cover {
position: relative; position: relative;
overflow: hidden; overflow: hidden;

View File

@ -51,7 +51,7 @@ export async function SettingsView() {
}), }),
), ),
); );
const accentField = el('div', { class: 'field' }, el('span', {}, 'Accent colour'), accentRow); const accentField = el('div', { class: 'field' }, el('span', {}, 'Accent color'), accentRow);
const fontSizeField = selectField('Text size', st.fontScale || 'default', [ const fontSizeField = selectField('Text size', st.fontScale || 'default', [
['small', 'Small'], ['small', 'Small'],
@ -145,9 +145,7 @@ export async function SettingsView() {
const who = dex.trainer || dex.game; const who = dex.trainer || dex.game;
const choice = await chooseDialog({ const choice = await chooseDialog({
title: `${dex.game}${dex.trainer ? ` · ${dex.trainer}` : ''}`, title: `${dex.game}${dex.trainer ? ` · ${dex.trainer}` : ''}`,
body: `${dex.seen.length} seen · ${dex.caught.length} caught in this save (${dex.caught.length} of ${ body: `${dex.seen.length} seen · ${dex.caught.length} caught in this save.`,
[151, 251, 386][dex.gen - 1]
} for the game). Your caught record is shared across every game imported species also count toward the National Dex and any other game they appear in.`,
choices: [ choices: [
{ key: 'merge', label: 'Add to my Pokédex' }, { key: 'merge', label: 'Add to my Pokédex' },
{ key: 'replace', label: 'Replace mine with this', class: 'button--danger' }, { key: 'replace', label: 'Replace mine with this', class: 'button--danger' },