Le paiement borne echouait en POST /api/orders -> 422 INVALID_SERVICE_MODE car le
mode de consommation (sur place / a emporter) n'atteignait jamais localStorage : la
1re page post-accueil (categories.html) ne chargeait pas nav.js, donc le ?mode= recu
de l'accueil n'etait pas persiste, et ses cartes statiques pointaient vers products.html
sans &mode=. Au paiement, mapServiceMode(null) -> service_mode null -> rejet serveur ;
le badge affichait en plus un faux 'Sur place' qui masquait l'absence de mode.
- categories.html : charge nav.js -> syncModeFromURL persiste le mode des l'etape
categories (cause racine du 422 ; sans ca la garde ci-dessous bouclerait).
- nav.js : needsModeRedirect (helper pur) renvoie a l'accueil si une page hors accueil
n'a pas de mode valide memorise ; modeLabel ne ment plus (vide si inconnu) ; listener
DOMContentLoaded garde derriere typeof document -> module importable en test pur.
- page-payment.js : garde finale dans startCheckout (pas de soumission sans mode valide,
retour accueil, panier conserve) + libelle recap honnete.
- tests/js/nav.test.js : table de verite des helpers + regression (categories.html charge nav.js).
Revue bmad-compliance : regression de flux normal identifiee (must_fix) corrigee. 92 tests JS verts.