You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Five-issue bundle from `_fe-fix-prompt-pass9.md`. Order picked
foundation-first (F-05 → F-04 → F-02 → F-03 → F-01) so each later
fix builds on the structural primitives the earlier ones add.
F-05 — unify building tile on / and /miasto.
Homepage hero rendered pitched-roof silhouettes that grew with
level (`0.7 + 0.05 * level`). /miasto rendered the SAME slots as
flat rects with a 14-px roof BAND, no level scaling. Same data,
two looks. Extracted `BuildingTile` + `EmptyBuildingTile` into
`components/building-tile.tsx`; both surfaces now mount them. The
/miasto manager keeps interactivity by passing optional onClick +
isSelected + ariaLabel props — visual rendering identical.
F-04 — BuildingStackBadge + MedalRing primitives.
Dashboard's two ring widgets (CityLevelCard + XP hero) both used
`--accent` and showed an unlabelled number. Players reported "tier
confusion" — they couldn't tell that 3 (city level) and 4 (XP tier)
measured different things. Fixed: city-level ring keeps `--accent`
(navy) + new `BuildingStackBadge` icon + "Stupeň města" label; XP
ring switches to `--sales` (orange) + new `MedalRing` icon + "Tvůj
tier" label. Both rings now carry a tooltip explaining the metric.
Added `yourTier` + `yourTierTooltip` keys + `levelTooltip` key
across all 4 locale dicts.
F-02 — solid coloured buildings on /games (root-cause fix).
The `.city-scene-root` `saturate(0.35) brightness(1.55)` filter
PLUS the broad `[fill="#0f172a"]` etc retints in globals.css washed
every BUILDING_PLAN body to identical muted grey. Buildings on
/games read as outline-only wireframes, hiding the carefully-drawn
powered/unpowered window neons. Each building wrapper now carries
`data-building-body="true"`. Two new CSS rules:
1. inverse filter (`contrast 1.087 brightness 0.645 saturate 2.857`)
cancels the parent filter on building scope only
2. per-hex passthrough rules re-set every retinted hex to itself
inside `[data-building-body]` (specificity 0,2,1 beats 0,1,1)
Sky/ground/atmosphere stay tinted; only foreground buildings render
in their original draw-function colours.
F-03 — Brzy fáze 2 filter.
3 of 4 loan-typed cards in COMING_SOON_TILES (leasing, kredyt
obrotowy, kredyt konsumencki) are already shipped via
LoanComparison's `LOAN_CONFIGS`. Removed those entries; only
`inwestycyjny` (Tier-7 secondary market — not yet implemented) and
the four non-loan items (parent panel, class mode, P2P trade, PKO
Junior mirror) remain. Replaced the `🔒` chip with a `Phase 2`
badge that sets honest expectation without committing to a calendar
date — PO can later swap to Q3/Q4 2026 strings.
F-01 — /loans/compare → inline LoanComparison in Hypotéka panel.
Largest scope.
- MortgageCard interior was a mortgage-only quote+slider+take
flow with a "Compare all loans →" link to /loans/compare.
Replaced the entire open-state body with `<LoanComparison
variant="inline" />` — players see all 4 products inline now,
mortgage included. Removed ~250 lines of bespoke quote logic
(debounce + AbortController + maxPrincipal + noCapacity branch
+ MORTGAGE_PRINCIPAL_MIN/MAX/STEP + MORTGAGE_ERROR_COPY +
translateError); LoanComparison owns those concerns now.
- Added `loanComparison` field to WattCityBootstrap; /miasto/page.tsx
server-computes rows via `compareLoans(principal, term, state)`
using ?principal=&term= URL params (mirrors the legacy
/loans/compare query semantics so the redirect preserves user
state).
- LoanComparison gained an `onLoanTaken` callback prop so inline
hosts can refresh parent state after a successful take.
- `app/loans/compare/page.tsx` now 308-redirects to
`/miasto?{principal}&{term}#hypoteka` — preserves bookmarks +
SEO without a 404. Added `id="hypoteka"` + `scroll-mt-24` to
the MortgageCard section.
- Removed the 5th `loans` nav slot from site-nav.tsx (back to 4).
- Updated onboarding-tour step 4 across 4 locales: cta href
now points at `/miasto#hypoteka` and copy mentions "porovnaj
4 produkty inline".
Validation:
- pnpm typecheck → 0 errors
- pnpm lint → 0 errors, 29 warnings (== baseline)
- pnpm test → 719/719
- pnpm test:e2e ux-fixes → 14/14
- pnpm test:e2e i18n-consistency → 4/4
- pnpm test:walk → 1/1 (3.0 min)
- pnpm test:walk:diff pre-pr-o post-pr-o:
Δ a11y: -1 (one fewer serious finding)
Δ console: 0
Δ page: 0
Decisions confirmed (per spec):
- F-03 timing badge — `Phase 2` placeholder used (no PO calendar
date available)
- F-04 — Option B (re-label + visual differentiation) shipped, no
blockers encountered
- F-02 — root-cause fix preferred over data-attribute exception
alone; both layers (data-attribute + CSS override) included for
belt-and-braces
Open follow-ups (Pass-10 candidates):
- `nav.loans` dict key is no longer consumed (4 locales) — can
delete from the type if a Pass-10 cleanup wants the reduction
- `e2e/i18n-consistency.spec.ts` doesn't yet assert the new
`yourTier` + `yourTierTooltip` keys — could add a test for the
dashboard XP ring tooltip text per locale
- `LoanComparison`'s baseline lint warning (line 164 setState in
effect) is pre-existing and would be fixed by the documented
`useDeferredValue` migration
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments