# KA Tabbar v1 — barre de navigation mobile commune Groupe KA (2026-08-25) Langage de navigation mobile commun à l'écosystème : **pilule flottante fixe en bas d'écran**, détachée des bords (12 px + safe-area iOS), inspirée de la barre Immo-Ka et généralisée en design system. C'est le moyen PRINCIPAL de navigation sur mobile (≤ 760 px) ; le hamburger garde les fonctions secondaires (stats, sources, contact, légal…). ## Fichiers canoniques (ce dossier) | Fichier | Rôle | |---|---| | `ka-tabbar.css` | Styles complets — copie conforme dans `src/ka/ka-tabbar.css` de chaque app | | `KaTabbar.tsx` | Composant React (react-router) + jeu d'icônes intégré — copie dans `src/ka/` | | `ka-tabbar.js` | Version vanilla (`KaTabbar.mount({...})`) pour les sites sans React | | `TABBAR-STANDARD.md` | Ce document | ## Spécifications - **Dimensions** : onglets min-height 50 px, padding pilule 5 px, radius 18 px, max-width 440 px centrée, icônes 21 px stroke 1.7, labels 10 px/650. - **Position** : `position: fixed; left/right: max(12px, env(safe-area-inset-*)); bottom: calc(10px + env(safe-area-inset-bottom)); z-index: var(--z-bottombar, 600)`. - **Fond** : off-white translucide + blur 14 (clair) ou `.ka-tabbar--dark` (encre) ; surcharger `--ktb-bg` pour un fond de marque (ex. vert profond fabri-ka). Pas de glassmorphism appuyé. - **État actif** : icône = couleur signature (`--ktb-accent`), label = encre, trait 16×2.5 accent sous le label. Micro-interactions : pop d'icône 0.25 s, apparition du trait 0.22 s, press = scale 0.9 (désactivées en `prefers-reduced-motion`). - **Cohabitation** : `body:has(.ka-tabbar)` reçoit un padding-bottom 84 px ; `body:has(.cta-sticky)` masque la pilule (le CTA de fiche prend le bas) ; le widget KA Agent (`.kaa-btn`) est remonté au-dessus de la pilule. - **Onglets** : 4 (5 max). `to` (route), `href` (externe, ex. hub univers KA) ou `onPress` (action — ex. ouvrir/focus la recherche). Le composant ne devine PAS l'état actif : l'app le calcule (useLocation / routeur maison). ## Configurations par app (déployé 2026-08-25) | App | Onglets | Accent actif | Thème | Notes | |---|---|---|---|---| | immo-ka | Découvrir · Carte · Taux · Profil | lime | clair | barre d'origine (base du standard), classes `.tabbar` historiques | | auto-ka | Découvrir · Recherche · Favoris · Profil | `#ff5a2a` | clair | Recherche = focus recherche accueil ; Favoris = hub groupe-ka.com/compte | | food-ka | Produits · Recherche · Soldes · Favoris | `#1f9d55` | clair | Soldes = /aubaines ; Favoris = hub groupe-ka.com/compte | | fabri-ka | Accueil · Produits · Boutiques · Recherche | ambre sur vert profond | sombre (`--ktb-bg` #123f2e) | Recherche = overlay plein écran existant | | resto-ka | Découvrir · Recherche · Villes · Favoris | `#f08c00` | clair | pas de carte dans l'app → Villes (icône pin) | | sorti-ka | Découvrir · Recherche · Carte · Favoris | `#d6336c` | clair | vanilla ; Carte = vue résultats + bascule carte | | vrai-prix | Estimer · Marché · Ventes · Méthode | `#d8372e` | clair | Next.js (variante `src/ka/KaTabbar.tsx` avec next/link) ; bilingue fr/en ; Estimer = focus recherche d'adresse (id `vp-adresse`) ; Ventes = ancre `/#ventes` | ## Intégration (app React/Vite) 1. Copier `ka-tabbar.css` + `KaTabbar.tsx` dans `frontend/src/ka/`. 2. Dans `App.tsx` : composer les onglets avec `useLocation` (état actif) et monter `` après `
` ; retirer toute ancienne barre basse et ses styles. 3. Onglet Recherche : `onPress` qui navigue vers l'accueil puis focus le champ de recherche (`setTimeout` ~80 ms après navigation). 4. Vérifier : padding-bottom du body, footer non masqué, widget KA Agent dégagé, aucun doublon header/tabbar sur mobile. 5. Build + `pm2 restart` + healthcheck + commit/push (spbgit). ## Règles UX - La pilule ne doit JAMAIS masquer un CTA, un résultat ou un bouton de filtre (le padding-bottom du body est là pour ça ; les feuilles/sheets passent au-dessus via `--z-modal`). - Jamais plus de 5 onglets ; labels d'un seul mot ; fr-CA. - L'identité de marque passe par `--ktb-accent` (et `--ktb-bg` sombre au besoin) — dimensions, spacing et animations restent IDENTIQUES partout.