The global :focus-visible outline was drawing a square border around the
inner (square-cornered) input, sticking out of the group's rounded
focus-within ring. Suppress child outlines inside .input-group.
Each collection row is a unique card (own condition/notes), so quantity
was noise: dropped the field in Directus and removed it from the add
dialog, collection/grid/table views, dashboard stats and sort options.
Cards without Cardmarket data now consistently show 0,00 € (base price
row is always displayed on the card page).
The Directus read permission intentionally allows friends' collections
(used by /friends/[username]); the own-collection pages need an explicit
user = current-user filter on top of it.
- inline error message on the login form (401 shows a visible French
message, hidden again on submit)
- import basecoat-css/toast in BaseLayout: every showToast in the app
was silently no-oping because the toast JS was never loaded
Full cutover: auth, users, collection and friendships now run on Directus
via @directus/sdk, with owner/visibility rules enforced by Directus
permissions.
- middleware: Directus session (directus_auth cookie) with token refresh
- /login is Directus (email normalized to lowercase), new /register page
(first/last name, username) backed by public registration
- collection, friends and profile pages + all API endpoints ported;
ownership and addressee-only accept/decline enforced by permissions
- display names use first_name/last_name everywhere (nav, friends, profile)
- PocketBase SDK, POCKETBASE_URL and pb_schema.json removed
- README and compose updated for DIRECTUS_URL