SPB Git forge

spb/ka-ui

Public
30commits 1branches 0releases
145.7 MBsize
maindefault branch
27 days agolast push
Python 33.5% JavaScript 30.1% TypeScript 25% CSS 10% Shell 1.4%

Socle mobile obligatoire : échelle z-index --z-*, unités dvh (--vh100), .ka-bottombar+has-bottombar (safe-area+compensation), .ka-scroll-lock, .ka-menu tactile, filet anti-zoom iOS 16px, zone tactile gk-badge ; KA Agent : safe-area bulle/panneau, textarea 16px, plein écran auto mobile + verrou de scroll ; mobile-audit.mjs (audit Playwright 13 sites) + inventaire des bugs mobiles

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 mo ago (Aug 19, 2026) parent 251d28a

6 changed files +5,702 −7

modified README.md +39 −0
@@ -59,3 +59,42 @@ resto-ka, sorti-ka, crea-ka, api-ka). Repo canonique : `spbgit` →
59 59 `vrai-prix/src/lib/ka-auth.ts` pour Next).
60 60 4. `./sync.sh` ajoutera le site aux footers des autres apps au prochain rebuild
61 61 (la liste vient d'`ecosystem.json`).
62 +
63 +## Règles mobiles OBLIGATOIRES (2026-08-19 — tout composant, présent et futur)
64 +
65 +Le socle correspondant vit dans `tokens.css` (section « SOCLE MOBILE OBLIGATOIRE »).
66 +
67 +1. **Tap, jamais `:hover`** pour ouvrir un menu/sous-menu (le survol n'existe pas
68 + au doigt). Le `:hover` est réservé aux effets décoratifs, idéalement sous
69 + `@media (hover: hover)`. Sous-menus mobiles = accordéon ou navigation par
70 + niveaux, pas de cascade au survol. Fermeture toujours possible : tap
71 + extérieur + bouton fermer + Escape.
72 +2. **`viewport-fit=cover` requis** dans la meta viewport de CHAQUE site, sinon
73 + `env(safe-area-inset-*)` vaut 0 sur iPhone et toutes les safe-areas sont
74 + inertes : `width=device-width, initial-scale=1, viewport-fit=cover`.
75 +3. **Jamais `100vh`** pour un élément calé sur le viewport (la barre d'adresse
76 + mobile se replie au scroll et change la hauteur) : utiliser `var(--vh100)`,
77 + les classes `.h-viewport`/`.min-h-viewport`, ou le doublet
78 + `height:100vh; height:100dvh;` (repli navigateurs anciens).
79 +4. **`position:fixed` fiable** : aucun ancêtre avec `transform`, `filter`,
80 + `backdrop-filter`, `perspective` ou `will-change` (ils re-parentent le fixed
81 + → barres qui « suivent » le scroll). En cas de doute, monter l'élément
82 + directement sous `<body>` (portal).
83 +5. **Barre basse fixe** = classe `.ka-bottombar` (safe-area incluse) + classe
84 + `has-bottombar` sur `<body>` (+ `--bottombar-h` si ≠ 64px) pour réserver
85 + l'espace sous le contenu.
86 +6. **Menu/panneau/modale ouvert** = `.ka-scroll-lock` sur `<html>` (gel du
87 + scroll d'arrière-plan) ; liste longue = scroll interne (`.ka-menu` :
88 + max-height dvh + `overscroll-behavior: contain`).
89 +7. **z-index** : uniquement l'échelle `--z-*` de tokens.css (content 1, sticky
90 + 300, header 500, bottombar 600, dropdown 700, overlay 800, modal 900,
91 + toast 950 ; grain de film 9999 non interactif). Aucune valeur arbitraire.
92 +8. **Zones tactiles ≥ 44×44 px** (`--touch`) pour tout item interactif de menu.
93 +9. **Champs ≥ 16 px** sur mobile (sinon zoom automatique iOS au focus) — filet
94 + de sécurité global dans tokens.css (`@media (hover:none) and (pointer:coarse)`),
95 + mais viser 16 px dans le style du composant lui-même.
96 +10. **Un menu déroulant ne sort jamais de l'écran** : repositionnement (ouvrir
97 + vers le haut si pas de place) ou `.ka-menu` ancré avec `left/right` bornés ;
98 + sélecteur natif (`<select>`) privilégié pour les choix simples.
99 +11. **Navigation mobile toujours joignable** : jamais de liens de nav simplement
100 + masqués sous 768 px sans hamburger/tab-bar de remplacement.
modified agent/ka-agent.js +25 −7
@@ -17,18 +17,19 @@
17 17
18 18 /* ---------- styles ---------- */
19 19 var css = `
20 − .kaa-btn{position:fixed;right:18px;bottom:18px;z-index:2147483000;width:58px;height:58px;
20 + .kaa-btn{position:fixed;right:18px;bottom:calc(18px + env(safe-area-inset-bottom,0px));z-index:2147483000;width:58px;height:58px;
21 21 border-radius:50%;border:2px solid var(--ink,#141814);background:var(--accent,#d9f26b);
22 22 color:var(--on-accent,#141814);font:700 17px/1 "Space Grotesk",system-ui,sans-serif;
23 23 cursor:pointer;box-shadow:4px 4px 0 rgba(20,24,20,.85);display:flex;align-items:center;
24 − justify-content:center;transition:transform .15s;padding-bottom:env(safe-area-inset-bottom,0)}
24 + justify-content:center;transition:transform .15s}
25 25 .kaa-btn:hover{transform:translate(-2px,-2px)}
26 − .kaa-panel{position:fixed;right:16px;bottom:86px;z-index:2147483001;width:min(392px,calc(100vw - 24px));
27 − height:min(580px,calc(100dvh - 110px));display:none;flex-direction:column;background:var(--paper,#f5f3ee);
26 + .kaa-panel{position:fixed;right:16px;bottom:calc(86px + env(safe-area-inset-bottom,0px));z-index:2147483001;width:min(392px,calc(100vw - 24px));
27 + height:min(580px,calc(100vh - 110px));height:min(580px,calc(100dvh - 110px));display:none;flex-direction:column;background:var(--paper,#f5f3ee);
28 28 border:2px solid var(--ink,#141814);border-radius:14px;box-shadow:8px 8px 0 rgba(20,24,20,.85);
29 29 overflow:hidden;font-family:Inter,system-ui,sans-serif}
30 30 .kaa-panel.kaa-open{display:flex}
31 − .kaa-panel.kaa-full{right:0;bottom:0;width:100vw;height:100dvh;border-radius:0;border:0;box-shadow:none}
31 + .kaa-panel.kaa-full{right:0;bottom:0;width:100vw;height:100vh;height:100dvh;border-radius:0;border:0;box-shadow:none}
32 + html.kaa-lock,html.kaa-lock body{overflow:hidden!important;overscroll-behavior:none}
32 33 .kaa-head{display:flex;align-items:center;gap:9px;padding:11px 14px;background:var(--ink,#141814);
33 34 color:var(--paper,#f5f3ee);flex:none}
34 35 .kaa-head b{font:700 15px "Space Grotesk",system-ui,sans-serif;letter-spacing:-.02em}
@@ -53,7 +54,7 @@
53 54 border-radius:999px;background:var(--surface-2,#faf9f5)}
54 55 .kaa-in{display:flex;gap:8px;padding:11px;border-top:2px solid var(--ink,#141814);background:#fff;flex:none;
55 56 padding-bottom:calc(11px + env(safe-area-inset-bottom,0))}
56 − .kaa-in textarea{flex:1;resize:none;min-height:44px;max-height:110px;padding:11px 12px;font:13.5px/1.4 Inter,system-ui,sans-serif;
57 + .kaa-in textarea{flex:1;resize:none;min-height:44px;max-height:110px;padding:10px 12px;font:16px/1.4 Inter,system-ui,sans-serif;
57 58 border:1.5px solid var(--ink,#141814);border-radius:9px;background:var(--paper,#f5f3ee);outline:none}
58 59 .kaa-in button{min-width:52px;min-height:44px;border:1.5px solid var(--ink,#141814);border-radius:9px;
59 60 background:var(--ink,#141814);color:var(--accent,#d9f26b);font:700 16px "Space Grotesk",system-ui;cursor:pointer}
@@ -142,15 +143,32 @@
142 143 }
143 144
144 145 /* ---------- ouverture / plein écran ---------- */
146 + /* Sur téléphone : panneau plein écran d'office + scroll d'arrière-plan
147 + verrouillé tant qu'il est ouvert (html.kaa-lock). Pas de focus clavier
148 + forcé au tap (le clavier ne s'ouvre que si l'utilisateur touche le champ). */
149 + var mobileMq = window.matchMedia("(max-width: 640px)");
150 + var fineInput = window.matchMedia("(hover: hover) and (pointer: fine)");
151 + function syncLock() {
152 + var open = panel.classList.contains("kaa-open");
153 + if (open && mobileMq.matches) panel.classList.add("kaa-full");
154 + document.documentElement.classList.toggle(
155 + "kaa-lock", open && panel.classList.contains("kaa-full"));
156 + }
145 157 btn.addEventListener("click", function () {
146 158 panel.classList.toggle("kaa-open");
147 − if (panel.classList.contains("kaa-open")) { render(); ta.focus(); }
159 + if (panel.classList.contains("kaa-open")) {
160 + render();
161 + if (fineInput.matches) ta.focus();
162 + }
163 + syncLock();
148 164 });
149 165 panel.querySelector(".kaa-x2").addEventListener("click", function () {
150 166 panel.classList.remove("kaa-open", "kaa-full");
167 + syncLock();
151 168 });
152 169 panel.querySelector(".kaa-x1").addEventListener("click", function () {
153 170 panel.classList.toggle("kaa-full");
171 + syncLock();
154 172 scroll();
155 173 });
156 174
added audit/INVENTAIRE.md +100 −0
@@ -0,0 +1,100 @@
1 +# Inventaire des bugs mobiles — 13 plateformes Groupe KA (2026-08-19)
2 +
3 +Audit : Playwright (Pixel 7 / chromium « android » + iPhone 13 / webkit « ios »),
4 +accueil + 2 pages internes par site. Détails bruts : `report.json`,
5 +captures : `audit/*.png`. Inventaire croisé avec la lecture du code source des
6 +13 apps sur leurs nœuds (agents d'exploration, 2026-08-19).
7 +
8 +Priorités : **P0** = bloquant (élément inutilisable) · **P1** = bug majeur
9 +(comportement cassé dans un cas réel) · **P2** = finition.
10 +
11 +## Causes racines COMMUNES (corrigées une fois dans ka-ui, propagées partout)
12 +
13 +| # | Cause racine | Effet | Correctif ka-ui |
14 +|---|---|---|---|
15 +| R1 | `textarea` du widget KA Agent à 13,5 px | zoom automatique iOS au focus, sur les 13 sites | `agent/ka-agent.js` → 16 px |
16 +| R2 | Bulle/panneau KA Agent sans safe-area sur `bottom` (padding-bottom parasite sur un bouton 58 px) | bulle collée sous la barre de geste iPhone | `bottom: calc(18px + env(safe-area-inset-bottom))` |
17 +| R3 | Panneau KA Agent ouvert sans verrou de scroll ; pas de plein écran auto sur téléphone | la page défile derrière le chat | `html.kaa-lock` + plein écran auto ≤640 px + pas de focus clavier forcé au tap |
18 +| R4 | Aucune échelle z-index commune (6 à 18 valeurs ad hoc par site, collision fab/cookie 80/80 sur food-ka, account-menu 60 < tabbar 85 sur resto-ka) | menus sous les barres, empilements imprévisibles | tokens.css : échelle `--z-*` documentée obligatoire |
19 +| R5 | Pas de socle mobile commun (dvh, scroll-lock, barre basse, menu tactile) | chaque site réinvente (ou oublie) | tokens.css : `--vh100`, `.h-viewport`, `.ka-bottombar`+`has-bottombar`, `.ka-scroll-lock`, `.ka-menu`, `.ka-overlay` |
20 +| R6 | Champs < 16 px déclarés par les CSS de site | zoom iOS au focus (constaté sur les 13 sites) | tokens.css : filet `font-size:max(16px,1em)!important` sous `(hover:none) and (pointer:coarse)` |
21 +| R7 | `.gk-badge` 30 px de haut (13 sites) | cible tactile trop petite | tokens.css : extension de zone tactile `::after inset:-8px` au doigt |
22 +| R8 | `viewport-fit=cover` absent (groupe-ka, vrai-prix, sorti-ka, job-ka, trouve-ka) | `env(safe-area-inset-*)` = 0 → toutes les safe-areas codées sont INERTES sur iPhone | à poser par site (meta/`export const viewport`) + règle README |
23 +| R9 | `backdrop-filter` sur headers sticky contenant des éléments `position:fixed` | le `fixed` se re-parente au header (overlay menu réduit à 64 px de haut, backdrops de menus compte qui ne couvrent que le header) | règle README n°4 + correctifs par site (portal / retrait du blur) |
24 +
25 +## Par site
26 +
27 +### groupe-ka.com (M3U96b, Next 16 + Tailwind v4)
28 +- **P0** — Overlay du menu mobile `fixed inset-0 z-[3000]` DANS le header `md:backdrop-blur-xl` : entre 768 et 1280 px le menu se résout par rapport au header (64 px) → menu inutilisable sur tablette/paysage. (R9)
29 +- **P1** — Menu mobile CSS-only sans verrou de scroll : la page défile derrière le menu ouvert.
30 +- **P1** — Débordement horizontal +141 px sur iOS (`div.ticker-inner`, marquee) — pas de `overflow-x` de garde (tokens.css non importé !).
31 +- **P1** — `src/ka/tokens.css` PRÉSENT MAIS JAMAIS IMPORTÉ (tokens dupliqués dans globals.css, dérive garantie ; safe-area body absente). Pas de `viewport-fit=cover`. (R8)
32 +- **P2** — stat-chips 33 px de haut (/stats), champs du widget (R1).
33 +
34 +### lou-ka.com (M3U96b, Vite React)
35 +- **P1** — `.account-backdrop` `fixed inset-0` rendu DANS le header `backdrop-filter:blur(16px)` → le voile ne couvre que 66 px ; tap « à l'extérieur » sous le header ne ferme pas le menu compte. (R9)
36 +- **P1** — Bottom-sheet filtres (`.filterbar.open`) sans verrou de scroll d'arrière-plan.
37 +- **P1** — Champs filtres < 16 px (`input#f-q`, selects) → zoom iOS. (R6)
38 +- **P2** — `a.brand` 124×30 (cible), widget (R1-R3).
39 +- (Bon élève par ailleurs : tabbar + safe-area + `--consent-h` + dvh partout.)
40 +
41 +### immo-ka.com (M4M64a, Vite React)
42 +- **P1** — Menu compte ouvert SANS blocage du scroll (constaté à l'audit sur android ET ios).
43 +- **P1** — Bottom-sheet filtres sans verrou de scroll.
44 +- **P1** — `a.ka-signup` 99×17 px — cible tactile quasi intapable.
45 +- **P2** — `a.brand` 92×27, selects < 16 px résiduels, `frontend/styles.css` orphelin (46 Ko) à supprimer.
46 +
47 +### vrai-prix.com (M3U96a, Next 16 + Tailwind v4)
48 +- **P1** — Bandeau cookies `fixed bottom-0` SANS `env(safe-area-inset-bottom)` → boutons sous la barre de geste iPhone… et de toute façon inertes : pas de `viewport-fit=cover`. (R8)
49 +- **P1** — Modale préférences cookies sans verrou de scroll.
50 +- **P2** — `a.vp-display` 92×28 (cible), widget (R1-R3).
51 +- (Hamburger CSS-only correct avec scroll lock JS ; blur header déjà limité à `md:` avec commentaire.)
52 +
53 +### auto-ka.com (M4M64b, Vite React)
54 +- **P1** — Menu compte sans verrou de scroll (aucun scroll-lock dans toute l'app).
55 +- **P1** — Pas de navigation mobile structurée : nav en bande scrollable horizontale, cibles compressées. `select#f-sort` < 16 px. (R6)
56 +- **P2** — `a.brand` 102×32 (cible).
57 +
58 +### fabri-ka.com (M4M64a, Vite React) — le plus propre
59 +- **P1** — `input#header-search-input` + selects < 16 px. (R6)
60 +- **P2** — `.filters { max-height: calc(100vh …) }` (styles.css:1239) → dvh ; `a.logo` 98×29 ; grain redéfini z-0 localement (diverge de tokens 9999) — à réconcilier.
61 +
62 +### food-ka.com (M4M64b, Vite React)
63 +- **P1** — Collision z-index 80/80 entre `.fab` et `.cookie-banner` (deux fixed en bas au même niveau, chevauchement possible).
64 +- **P1** — Lightbox ET bottom-sheet sans verrou de scroll (seul le hamburger locke).
65 +- **P1** — `input#f-q` + selects < 16 px ; bandeau cookies /sources = 243 px de haut sans compensation. (R6)
66 +- **P2** — `a.brand` 121×27, `gk-badge` (R7).
67 +
68 +### api-ka.com (M3U96b, HTML statique + FastAPI)
69 +- **P1** — Selects et input du playground < 16 px (`#pg-ep`, `#pgf-service`, `#pgf-page`, dates /stats). (R6)
70 +- **P2** — widget (R1-R3) ; nav mobile en bande scrollable (fonctionnelle).
71 +
72 +### trouve-ka.com (M2M32, Next 15 + Tailwind 3)
73 +- **P0** — AUCUNE navigation mobile : les 4 liens de nav sont `hidden md:block` sans hamburger ni tabbar → sections inaccessibles au téléphone (sauf footer).
74 +- **P1** — `viewport-fit=cover` absent → safe-areas inertes (R8) ; `min-h-screen` (100vh) sur body ; panneau chat plein écran sans verrou (R3).
75 +- **P2** — `./ka/**` absent du `content` de tailwind.config.ts (piège futur) ; suggest-panel sous le grain (OK visuellement, à surveiller).
76 +
77 +### crea-ka.com (M3U96b, SPA vanilla générée par build_frontend.py)
78 +- **P1** — Boutons d'en-tête simplement masqués ≤940 px (compensé par la tabbar — vérifier que TOUTES les destinations restent joignables).
79 +- **P2** — `a.brand` 112×26 (cible) ; widget (R1-R3) ; textarea < 16 px.
80 +
81 +### resto-ka.com (M3U96b, Vite React — fork de lou-ka)
82 +- **P1** — `.account-backdrop` fixed DANS le header blurré (même bug que lou-ka). (R9)
83 +- **P1** — `account-backdrop` z-55 / `account-menu` z-60 SOUS la tabbar z-85 et le fab z-80 → le menu compte passe sous la barre basse. (R4)
84 +- **P1** — Bottom-sheet filtres sans verrou de scroll ; 7 selects < 16 px. (R6)
85 +- **P2** — `a.brand` 138×30, gk-badge (R7).
86 +
87 +### sorti-ka.com (M3U96a, SPA mono-fichier index.html + FastAPI SSR)
88 +- **P1** — `input#q`, `select#region`, `select#period` < 16 px. (R6)
89 +- **P1** — `viewport-fit=cover` absent (R8) ; header sticky `backdrop-filter: blur(12px)` sans garde (piège R9, pas de fixed dedans aujourd'hui).
90 +- **P2** — `a.brand` 98×26, gk-badge ; footer/badge recopiés à la main (resync inline).
91 +
92 +### job-ka.com (M3U96a, Vite React)
93 +- **P1** — Carte `/carte` : `.map-wrap { height: calc(100vh - 58px) }` → la carte bouge/déborde quand la barre du navigateur se replie, et le 58 px est faux quand le header wrappe sur 2 lignes → passer en dvh + hauteur de header mesurée.
94 +- **P1** — Pas de menu mobile : 6 liens de nav en `flex-wrap` sur 2-3 lignes ≤600 px (header envahissant). 8 champs < 16 px. `viewport-fit=cover` absent. (R6, R8)
95 +- **P2** — `a.logo` 63×31, gk-badge--dark (R7).
96 +
97 +## Faux positifs identifiés à l'audit (écartés)
98 +- `input#gk-menu` / `input#vp-menu` < 16 px : checkboxes `sr-only` des menus CSS-only (le script d'audit a été corrigé pour les ignorer).
99 +- « pas de compensation padding sous la barre basse [button.kaa-btn/.fab] » : la bulle KA Agent et les FAB ne sont pas des barres pleine largeur — pas de compensation requise (script corrigé : seuil 60 % de largeur).
100 +- fabri-ka bottom-nav « sans compensation » : la compensation existe sur `.app` (styles.css:500), le script ne regardait que body/main.
added audit/report.json +5128 −0
@@ -0,0 +1,5128 @@
1 +[
2 + {
3 + "site": "groupe-ka",
4 + "engine": "android",
5 + "pages": [
6 + {
7 + "url": "https://www.groupe-ka.com/",
8 + "tag": "accueil",
9 + "issues": [
10 + "2 champ(s) <16px (zoom iOS) : input#gk-menu, textarea"
11 + ],
12 + "data": {
13 + "viewport": "width=device-width, initial-scale=1",
14 + "overflowPx": 0,
15 + "overflowEls": [],
16 + "fixed": [
17 + {
18 + "sel": "button.kaa-btn",
19 + "pos": "fixed",
20 + "rect": {
21 + "t": 1004,
22 + "b": 1062,
23 + "h": 58
24 + },
25 + "bottomAnchored": true,
26 + "z": "2147483000",
27 + "brokenBy": null,
28 + "padBottom": "0px",
29 + "cssBottom": "18px"
30 + }
31 + ],
32 + "bottomBar": {
33 + "sel": "button.kaa-btn",
34 + "h": 58,
35 + "bodyPadBottom": 0,
36 + "mainPadBottom": 64
37 + },
38 + "smallInputs": [
39 + {
40 + "sel": "input#gk-menu",
41 + "fs": 15
42 + },
43 + {
44 + "sel": "textarea",
45 + "fs": 13.5
46 + }
47 + ],
48 + "smallTargets": [],
49 + "dropdownCandidates": [
50 + {
51 + "sel": "label.gk-mono.flex.h-11",
52 + "tag": "label"
53 + }
54 + ],
55 + "styleSheets": [
56 + "https://www.groupe-ka.com/_next/static/chunks/32-8xlxw0pm-g.css"
57 + ]
58 + },
59 + "css": {
60 + "vh100": 0,
61 + "dvh": 2,
62 + "svh": 1,
63 + "safeArea": 2,
64 + "hoverReveal": [],
65 + "zMax": 2147483001
66 + }
67 + },
68 + {
69 + "url": "https://www.groupe-ka.com/stats",
70 + "tag": "/stats",
71 + "issues": [
72 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 48px)",
73 + "2 champ(s) <16px (zoom iOS) : input#gk-menu, textarea",
74 + "8 cible(s) tactile(s) <34px : a.stat-chip.!py-[6px].transition-colors(100×33), a.stat-chip.!py-[6px].transition-colors(71×33), a.stat-chip.!py-[6px].transition-colors(80×33)"
75 + ],
76 + "data": {
77 + "viewport": "width=device-width, initial-scale=1",
78 + "overflowPx": 0,
79 + "overflowEls": [],
80 + "fixed": [
81 + {
82 + "sel": "button.kaa-btn",
83 + "pos": "fixed",
84 + "rect": {
85 + "t": 763,
86 + "b": 821,
87 + "h": 58
88 + },
89 + "bottomAnchored": true,
90 + "z": "2147483000",
91 + "brokenBy": null,
92 + "padBottom": "0px",
93 + "cssBottom": "18px"
94 + }
95 + ],
96 + "bottomBar": {
97 + "sel": "button.kaa-btn",
98 + "h": 58,
99 + "bodyPadBottom": 0,
100 + "mainPadBottom": 48
101 + },
102 + "smallInputs": [
103 + {
104 + "sel": "input#gk-menu",
105 + "fs": 15
106 + },
107 + {
108 + "sel": "textarea",
109 + "fs": 13.5
110 + }
111 + ],
112 + "smallTargets": [
113 + {
114 + "sel": "a.stat-chip.!py-[6px].transition-colors",
115 + "w": 100,
116 + "h": 33,
117 + "text": "Aujourd'hui"
118 + },
119 + {
120 + "sel": "a.stat-chip.!py-[6px].transition-colors",
121 + "w": 71,
122 + "h": 33,
123 + "text": "7 jours"
124 + },
125 + {
126 + "sel": "a.stat-chip.!py-[6px].transition-colors",
127 + "w": 80,
128 + "h": 33,
129 + "text": "30 jours"
130 + },
131 + {
132 + "sel": "a.stat-chip.!py-[6px].transition-colors",
133 + "w": 70,
134 + "h": 33,
135 + "text": "3 mois"
136 + },
137 + {
138 + "sel": "a.stat-chip.!py-[6px].transition-colors",
139 + "w": 70,
140 + "h": 33,
141 + "text": "6 mois"
142 + },
143 + {
144 + "sel": "a.stat-chip.!py-[6px].transition-colors",
145 + "w": 76,
146 + "h": 33,
147 + "text": "12 mois"
148 + },
149 + {
150 + "sel": "a.stat-chip.!py-[6px].transition-colors",
151 + "w": 123,
152 + "h": 33,
153 + "text": "Année en cours"
154 + },
155 + {
156 + "sel": "a.stat-chip.!py-[6px].transition-colors",
157 + "w": 57,
158 + "h": 33,
159 + "text": "Tout"
160 + }
161 + ],
162 + "dropdownCandidates": [
163 + {
164 + "sel": "label.gk-mono.flex.h-11",
165 + "tag": "label"
166 + }
167 + ],
168 + "styleSheets": [
169 + "https://www.groupe-ka.com/_next/static/chunks/32-8xlxw0pm-g.css"
170 + ]
171 + },
172 + "css": {
173 + "vh100": 0,
174 + "dvh": 2,
175 + "svh": 1,
176 + "safeArea": 2,
177 + "hoverReveal": [],
178 + "zMax": 2147483001
179 + }
180 + },
181 + {
182 + "url": "https://www.groupe-ka.com/telecharger",
183 + "tag": "/telecharger",
184 + "issues": [
185 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 48px)",
186 + "2 champ(s) <16px (zoom iOS) : input#gk-menu, textarea"
187 + ],
188 + "data": {
189 + "viewport": "width=device-width, initial-scale=1",
190 + "overflowPx": 0,
191 + "overflowEls": [],
192 + "fixed": [
193 + {
194 + "sel": "button.kaa-btn",
195 + "pos": "fixed",
196 + "rect": {
197 + "t": 763,
198 + "b": 821,
199 + "h": 58
200 + },
201 + "bottomAnchored": true,
202 + "z": "2147483000",
203 + "brokenBy": null,
204 + "padBottom": "0px",
205 + "cssBottom": "18px"
206 + }
207 + ],
208 + "bottomBar": {
209 + "sel": "button.kaa-btn",
210 + "h": 58,
211 + "bodyPadBottom": 0,
212 + "mainPadBottom": 48
213 + },
214 + "smallInputs": [
215 + {
216 + "sel": "input#gk-menu",
217 + "fs": 15
218 + },
219 + {
220 + "sel": "textarea",
221 + "fs": 13.5
222 + }
223 + ],
224 + "smallTargets": [],
225 + "dropdownCandidates": [
226 + {
227 + "sel": "label.gk-mono.flex.h-11",
228 + "tag": "label"
229 + }
230 + ],
231 + "styleSheets": [
232 + "https://www.groupe-ka.com/_next/static/chunks/32-8xlxw0pm-g.css"
233 + ]
234 + },
235 + "css": {
236 + "vh100": 0,
237 + "dvh": 2,
238 + "svh": 1,
239 + "safeArea": 2,
240 + "hoverReveal": [],
241 + "zMax": 2147483001
242 + }
243 + }
244 + ]
245 + },
246 + {
247 + "site": "trouve-ka",
248 + "engine": "android",
249 + "pages": [
250 + {
251 + "url": "https://www.trouve-ka.com/",
252 + "tag": "accueil",
253 + "issues": [
254 + "1 champ(s) <16px (zoom iOS) : textarea"
255 + ],
256 + "data": {
257 + "viewport": "width=device-width, initial-scale=1",
258 + "overflowPx": 0,
259 + "overflowEls": [],
260 + "fixed": [
261 + {
262 + "sel": "header.sticky.top-0.z-40",
263 + "pos": "sticky",
264 + "rect": {
265 + "t": 0,
266 + "b": 57,
267 + "h": 57
268 + },
269 + "bottomAnchored": false,
270 + "z": "40",
271 + "brokenBy": null,
272 + "padBottom": "0px",
273 + "cssBottom": "auto"
274 + },
275 + {
276 + "sel": "button.kaa-btn",
277 + "pos": "fixed",
278 + "rect": {
279 + "t": 763,
280 + "b": 821,
281 + "h": 58
282 + },
283 + "bottomAnchored": true,
284 + "z": "2147483000",
285 + "brokenBy": null,
286 + "padBottom": "0px",
287 + "cssBottom": "18px"
288 + }
289 + ],
290 + "bottomBar": {
291 + "sel": "button.kaa-btn",
292 + "h": 58,
293 + "bodyPadBottom": 0,
294 + "mainPadBottom": 56
295 + },
296 + "smallInputs": [
297 + {
298 + "sel": "textarea",
299 + "fs": 13.5
300 + }
301 + ],
302 + "smallTargets": [],
303 + "dropdownCandidates": [],
304 + "styleSheets": [
305 + "https://www.trouve-ka.com/_next/static/css/32d504446087a2a3.css"
306 + ]
307 + },
308 + "css": {
309 + "vh100": 1,
310 + "dvh": 2,
311 + "svh": 0,
312 + "safeArea": 3,
313 + "hoverReveal": [],
314 + "zMax": 2147483001
315 + }
316 + },
317 + {
318 + "url": "https://www.trouve-ka.com/status",
319 + "tag": "/status",
320 + "issues": [
321 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 40px)",
322 + "1 champ(s) <16px (zoom iOS) : textarea"
323 + ],
324 + "data": {
325 + "viewport": "width=device-width, initial-scale=1",
326 + "overflowPx": 0,
327 + "overflowEls": [],
328 + "fixed": [
329 + {
330 + "sel": "header.sticky.top-0.z-40",
331 + "pos": "sticky",
332 + "rect": {
333 + "t": 0,
334 + "b": 57,
335 + "h": 57
336 + },
337 + "bottomAnchored": false,
338 + "z": "40",
339 + "brokenBy": null,
340 + "padBottom": "0px",
341 + "cssBottom": "auto"
342 + },
343 + {
344 + "sel": "button.kaa-btn",
345 + "pos": "fixed",
346 + "rect": {
347 + "t": 763,
348 + "b": 821,
349 + "h": 58
350 + },
351 + "bottomAnchored": true,
352 + "z": "2147483000",
353 + "brokenBy": null,
354 + "padBottom": "0px",
355 + "cssBottom": "18px"
356 + }
357 + ],
358 + "bottomBar": {
359 + "sel": "button.kaa-btn",
360 + "h": 58,
361 + "bodyPadBottom": 0,
362 + "mainPadBottom": 40
363 + },
364 + "smallInputs": [
365 + {
366 + "sel": "textarea",
367 + "fs": 13.5
368 + }
369 + ],
370 + "smallTargets": [],
371 + "dropdownCandidates": [],
372 + "styleSheets": [
373 + "https://www.trouve-ka.com/_next/static/css/32d504446087a2a3.css"
374 + ]
375 + },
376 + "css": {
377 + "vh100": 1,
378 + "dvh": 2,
379 + "svh": 0,
380 + "safeArea": 3,
381 + "hoverReveal": [],
382 + "zMax": 2147483001
383 + }
384 + },
385 + {
386 + "url": "https://www.trouve-ka.com/stats",
387 + "tag": "/stats",
388 + "issues": [
389 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 40px)",
390 + "7 champ(s) <16px (zoom iOS) : input.input, input.input, input.input"
391 + ],
392 + "data": {
393 + "viewport": "width=device-width, initial-scale=1",
394 + "overflowPx": 0,
395 + "overflowEls": [],
396 + "fixed": [
397 + {
398 + "sel": "header.sticky.top-0.z-40",
399 + "pos": "sticky",
400 + "rect": {
401 + "t": 0,
402 + "b": 57,
403 + "h": 57
404 + },
405 + "bottomAnchored": false,
406 + "z": "40",
407 + "brokenBy": null,
408 + "padBottom": "0px",
409 + "cssBottom": "auto"
410 + },
411 + {
412 + "sel": "button.kaa-btn",
413 + "pos": "fixed",
414 + "rect": {
415 + "t": 763,
416 + "b": 821,
417 + "h": 58
418 + },
419 + "bottomAnchored": true,
420 + "z": "2147483000",
421 + "brokenBy": null,
422 + "padBottom": "0px",
423 + "cssBottom": "18px"
424 + }
425 + ],
426 + "bottomBar": {
427 + "sel": "button.kaa-btn",
428 + "h": 58,
429 + "bodyPadBottom": 0,
430 + "mainPadBottom": 40
431 + },
432 + "smallInputs": [
433 + {
434 + "sel": "input.input",
435 + "fs": 15
436 + },
437 + {
438 + "sel": "input.input",
439 + "fs": 15
440 + },
441 + {
442 + "sel": "input.input",
443 + "fs": 15
444 + },
445 + {
446 + "sel": "input.input",
447 + "fs": 15
448 + },
449 + {
450 + "sel": "input.input",
451 + "fs": 15
452 + },
453 + {
454 + "sel": "input.input",
455 + "fs": 15
456 + },
457 + {
458 + "sel": "textarea",
459 + "fs": 13.5
460 + }
461 + ],
462 + "smallTargets": [],
463 + "dropdownCandidates": [],
464 + "styleSheets": [
465 + "https://www.trouve-ka.com/_next/static/css/32d504446087a2a3.css"
466 + ]
467 + },
468 + "css": {
469 + "vh100": 1,
470 + "dvh": 2,
471 + "svh": 0,
472 + "safeArea": 3,
473 + "hoverReveal": [],
474 + "zMax": 2147483001
475 + }
476 + }
477 + ]
478 + },
479 + {
480 + "site": "lou-ka",
481 + "engine": "android",
482 + "pages": [
483 + {
484 + "url": "https://www.lou-ka.com/",
485 + "tag": "accueil",
486 + "issues": [
487 + "6 champ(s) <16px (zoom iOS) : input#f-q, select, select",
488 + "1 cible(s) tactile(s) <34px : a.brand.active(124×30)"
489 + ],
490 + "data": {
491 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
492 + "overflowPx": 0,
493 + "overflowEls": [],
494 + "fixed": [
495 + {
496 + "sel": "header.header",
497 + "pos": "sticky",
498 + "rect": {
499 + "t": 0,
500 + "b": 59,
501 + "h": 59
502 + },
503 + "bottomAnchored": false,
504 + "z": "50",
505 + "brokenBy": null,
506 + "padBottom": "0px",
507 + "cssBottom": "auto"
508 + },
509 + {
510 + "sel": "button.fab",
511 + "pos": "fixed",
512 + "rect": {
513 + "t": 467,
514 + "b": 514,
515 + "h": 47
516 + },
517 + "bottomAnchored": false,
518 + "z": "80",
519 + "brokenBy": null,
520 + "padBottom": "13px",
521 + "cssBottom": "325px"
522 + },
523 + {
524 + "sel": "nav.tabbar",
525 + "pos": "fixed",
526 + "rect": {
527 + "t": 777,
528 + "b": 839,
529 + "h": 62
530 + },
531 + "bottomAnchored": true,
532 + "z": "85",
533 + "brokenBy": null,
534 + "padBottom": "6px",
535 + "cssBottom": "0px"
536 + },
537 + {
538 + "sel": "div.cookie-banner",
539 + "pos": "fixed",
540 + "rect": {
541 + "t": 588,
542 + "b": 827,
543 + "h": 239
544 + },
545 + "bottomAnchored": true,
546 + "z": "80",
547 + "brokenBy": null,
548 + "padBottom": "0px",
549 + "cssBottom": "12px"
550 + },
551 + {
552 + "sel": "button.kaa-btn",
553 + "pos": "fixed",
554 + "rect": {
555 + "t": 763,
556 + "b": 821,
557 + "h": 58
558 + },
559 + "bottomAnchored": true,
560 + "z": "2147483000",
561 + "brokenBy": null,
562 + "padBottom": "0px",
563 + "cssBottom": "18px"
564 + }
565 + ],
566 + "bottomBar": {
567 + "sel": "nav.tabbar",
568 + "h": 62,
569 + "bodyPadBottom": 64,
570 + "mainPadBottom": 0
571 + },
572 + "smallInputs": [
573 + {
574 + "sel": "input#f-q",
575 + "fs": 14
576 + },
577 + {
578 + "sel": "select",
579 + "fs": 14.5
580 + },
581 + {
582 + "sel": "select",
583 + "fs": 14.5
584 + },
585 + {
586 + "sel": "select",
587 + "fs": 14.5
588 + },
589 + {
590 + "sel": "select",
591 + "fs": 14.5
592 + },
593 + {
594 + "sel": "textarea",
595 + "fs": 13.5
596 + }
597 + ],
598 + "smallTargets": [
599 + {
600 + "sel": "a.brand.active",
601 + "w": 124,
602 + "h": 30,
603 + "text": "Lou-KaLa porte d'ent"
604 + }
605 + ],
606 + "dropdownCandidates": [],
607 + "styleSheets": [
608 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
609 + "https://www.lou-ka.com/assets/index-CQHhYl_0.css"
610 + ]
611 + },
612 + "css": {
613 + "vh100": 0,
614 + "dvh": 7,
615 + "svh": 0,
616 + "safeArea": 15,
617 + "hoverReveal": [],
618 + "zMax": 2147483001
619 + }
620 + },
621 + {
622 + "url": "https://www.lou-ka.com/stats",
623 + "tag": "/stats",
624 + "issues": [
625 + "6 champ(s) <16px (zoom iOS) : input.input, input.input, input.input",
626 + "1 cible(s) tactile(s) <34px : a.brand(124×30)"
627 + ],
628 + "data": {
629 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
630 + "overflowPx": 0,
631 + "overflowEls": [],
632 + "fixed": [
633 + {
634 + "sel": "header.header",
635 + "pos": "sticky",
636 + "rect": {
637 + "t": 0,
638 + "b": 59,
639 + "h": 59
640 + },
641 + "bottomAnchored": false,
642 + "z": "50",
643 + "brokenBy": null,
644 + "padBottom": "0px",
645 + "cssBottom": "auto"
646 + },
647 + {
648 + "sel": "nav.tabbar",
649 + "pos": "fixed",
650 + "rect": {
651 + "t": 777,
652 + "b": 839,
653 + "h": 62
654 + },
655 + "bottomAnchored": true,
656 + "z": "85",
657 + "brokenBy": null,
658 + "padBottom": "6px",
659 + "cssBottom": "0px"
660 + },
661 + {
662 + "sel": "div.cookie-banner",
663 + "pos": "fixed",
664 + "rect": {
665 + "t": 588,
666 + "b": 827,
667 + "h": 239
668 + },
669 + "bottomAnchored": true,
670 + "z": "80",
671 + "brokenBy": null,
672 + "padBottom": "0px",
673 + "cssBottom": "12px"
674 + },
675 + {
676 + "sel": "button.kaa-btn",
677 + "pos": "fixed",
678 + "rect": {
679 + "t": 763,
680 + "b": 821,
681 + "h": 58
682 + },
683 + "bottomAnchored": true,
684 + "z": "2147483000",
685 + "brokenBy": null,
686 + "padBottom": "0px",
687 + "cssBottom": "18px"
688 + }
689 + ],
690 + "bottomBar": {
691 + "sel": "nav.tabbar",
692 + "h": 62,
693 + "bodyPadBottom": 64,
694 + "mainPadBottom": 0
695 + },
696 + "smallInputs": [
697 + {
698 + "sel": "input.input",
699 + "fs": 15
700 + },
701 + {
702 + "sel": "input.input",
703 + "fs": 15
704 + },
705 + {
706 + "sel": "input.input",
707 + "fs": 15
708 + },
709 + {
710 + "sel": "input.input",
711 + "fs": 15
712 + },
713 + {
714 + "sel": "input.input",
715 + "fs": 15
716 + },
717 + {
718 + "sel": "textarea",
719 + "fs": 13.5
720 + }
721 + ],
722 + "smallTargets": [
723 + {
724 + "sel": "a.brand",
725 + "w": 124,
726 + "h": 30,
727 + "text": "Lou-KaLa porte d'ent"
728 + }
729 + ],
730 + "dropdownCandidates": [],
731 + "styleSheets": [
732 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
733 + "https://www.lou-ka.com/assets/index-CQHhYl_0.css"
734 + ]
735 + },
736 + "css": {
737 + "vh100": 0,
738 + "dvh": 7,
739 + "svh": 0,
740 + "safeArea": 15,
741 + "hoverReveal": [],
742 + "zMax": 2147483001
743 + }
744 + },
745 + {
746 + "url": "https://www.lou-ka.com/sources",
747 + "tag": "/sources",
748 + "issues": [
749 + "1 champ(s) <16px (zoom iOS) : textarea",
750 + "1 cible(s) tactile(s) <34px : a.brand(124×30)"
751 + ],
752 + "data": {
753 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
754 + "overflowPx": 0,
755 + "overflowEls": [],
756 + "fixed": [
757 + {
758 + "sel": "header.header",
759 + "pos": "sticky",
760 + "rect": {
761 + "t": 0,
762 + "b": 59,
763 + "h": 59
764 + },
765 + "bottomAnchored": false,
766 + "z": "50",
767 + "brokenBy": null,
768 + "padBottom": "0px",
769 + "cssBottom": "auto"
770 + },
771 + {
772 + "sel": "nav.tabbar",
773 + "pos": "fixed",
774 + "rect": {
775 + "t": 777,
776 + "b": 839,
777 + "h": 62
778 + },
779 + "bottomAnchored": true,
780 + "z": "85",
781 + "brokenBy": null,
782 + "padBottom": "6px",
783 + "cssBottom": "0px"
784 + },
785 + {
786 + "sel": "div.cookie-banner",
787 + "pos": "fixed",
788 + "rect": {
789 + "t": 588,
790 + "b": 827,
791 + "h": 239
792 + },
793 + "bottomAnchored": true,
794 + "z": "80",
795 + "brokenBy": null,
796 + "padBottom": "0px",
797 + "cssBottom": "12px"
798 + },
799 + {
800 + "sel": "button.kaa-btn",
801 + "pos": "fixed",
802 + "rect": {
803 + "t": 763,
804 + "b": 821,
805 + "h": 58
806 + },
807 + "bottomAnchored": true,
808 + "z": "2147483000",
809 + "brokenBy": null,
810 + "padBottom": "0px",
811 + "cssBottom": "18px"
812 + }
813 + ],
814 + "bottomBar": {
815 + "sel": "nav.tabbar",
816 + "h": 62,
817 + "bodyPadBottom": 64,
818 + "mainPadBottom": 0
819 + },
820 + "smallInputs": [
821 + {
822 + "sel": "textarea",
823 + "fs": 13.5
824 + }
825 + ],
826 + "smallTargets": [
827 + {
828 + "sel": "a.brand",
829 + "w": 124,
830 + "h": 30,
831 + "text": "Lou-KaLa porte d'ent"
832 + }
833 + ],
834 + "dropdownCandidates": [],
835 + "styleSheets": [
836 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
837 + "https://www.lou-ka.com/assets/index-CQHhYl_0.css"
838 + ]
839 + },
840 + "css": {
841 + "vh100": 0,
842 + "dvh": 7,
843 + "svh": 0,
844 + "safeArea": 15,
845 + "hoverReveal": [],
846 + "zMax": 2147483001
847 + }
848 + }
849 + ]
850 + },
851 + {
852 + "site": "immo-ka",
853 + "engine": "android",
854 + "pages": [
855 + {
856 + "url": "https://www.immo-ka.com/",
857 + "tag": "accueil",
858 + "issues": [
859 + "pas de compensation padding sous la barre basse [button.fab] h=47px (body 0px / main 0px)",
860 + "2 champ(s) <16px (zoom iOS) : select, textarea",
861 + "3 cible(s) tactile(s) <34px : a.brand.active(92×27), a.ka-signup(99×17), a.gk-badge(165×30)",
862 + "menu ouvert SANS blocage du scroll d'arrière-plan"
863 + ],
864 + "data": {
865 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
866 + "overflowPx": 0,
867 + "overflowEls": [],
868 + "fixed": [
869 + {
870 + "sel": "header.header",
871 + "pos": "sticky",
872 + "rect": {
873 + "t": 0,
874 + "b": 58,
875 + "h": 58
876 + },
877 + "bottomAnchored": false,
878 + "z": "50",
879 + "brokenBy": null,
880 + "padBottom": "0px",
881 + "cssBottom": "auto"
882 + },
883 + {
884 + "sel": "button.fab",
885 + "pos": "fixed",
886 + "rect": {
887 + "t": 774,
888 + "b": 821,
889 + "h": 47
890 + },
891 + "bottomAnchored": true,
892 + "z": "80",
893 + "brokenBy": null,
894 + "padBottom": "13px",
895 + "cssBottom": "18px"
896 + },
897 + {
898 + "sel": "button.kaa-btn",
899 + "pos": "fixed",
900 + "rect": {
901 + "t": 693,
902 + "b": 751,
903 + "h": 58
904 + },
905 + "bottomAnchored": true,
906 + "z": "2147483000",
907 + "brokenBy": null,
908 + "padBottom": "0px",
909 + "cssBottom": "88px"
910 + }
911 + ],
912 + "bottomBar": {
913 + "sel": "button.fab",
914 + "h": 47,
915 + "bodyPadBottom": 0,
916 + "mainPadBottom": 0
917 + },
918 + "smallInputs": [
919 + {
920 + "sel": "select",
921 + "fs": 12
922 + },
923 + {
924 + "sel": "textarea",
925 + "fs": 13.5
926 + }
927 + ],
928 + "smallTargets": [
929 + {
930 + "sel": "a.brand.active",
931 + "w": 92,
932 + "h": 27,
933 + "text": "ImmoKa"
934 + },
935 + {
936 + "sel": "a.ka-signup",
937 + "w": 99,
938 + "h": 17,
939 + "text": "Créer un compte"
940 + },
941 + {
942 + "sel": "a.gk-badge",
943 + "w": 165,
944 + "h": 30,
945 + "text": "Un serviceGroupeKA"
946 + }
947 + ],
948 + "dropdownCandidates": [],
949 + "styleSheets": [
950 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
951 + "https://www.immo-ka.com/assets/index-GVlL0Z3K.css"
952 + ]
953 + },
954 + "css": {
955 + "vh100": 0,
956 + "dvh": 5,
957 + "svh": 0,
958 + "safeArea": 8,
959 + "hoverReveal": [],
960 + "zMax": 2147483001
961 + }
962 + },
963 + {
964 + "url": "https://www.immo-ka.com/stats",
965 + "tag": "/stats",
966 + "issues": [
967 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
968 + "5 champ(s) <16px (zoom iOS) : input.input, input.input, input.input",
969 + "3 cible(s) tactile(s) <34px : a.brand(92×27), a.ka-signup(99×17), a.gk-badge(165×30)",
970 + "menu ouvert SANS blocage du scroll d'arrière-plan"
971 + ],
972 + "data": {
973 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
974 + "overflowPx": 0,
975 + "overflowEls": [],
976 + "fixed": [
977 + {
978 + "sel": "header.header",
979 + "pos": "sticky",
980 + "rect": {
981 + "t": 0,
982 + "b": 58,
983 + "h": 58
984 + },
985 + "bottomAnchored": false,
986 + "z": "50",
987 + "brokenBy": null,
988 + "padBottom": "0px",
989 + "cssBottom": "auto"
990 + },
991 + {
992 + "sel": "button.kaa-btn",
993 + "pos": "fixed",
994 + "rect": {
995 + "t": 693,
996 + "b": 751,
997 + "h": 58
998 + },
999 + "bottomAnchored": true,
1000 + "z": "2147483000",
1001 + "brokenBy": null,
1002 + "padBottom": "0px",
1003 + "cssBottom": "88px"
1004 + }
1005 + ],
1006 + "bottomBar": {
1007 + "sel": "button.kaa-btn",
1008 + "h": 58,
1009 + "bodyPadBottom": 0,
1010 + "mainPadBottom": 0
1011 + },
1012 + "smallInputs": [
1013 + {
1014 + "sel": "input.input",
1015 + "fs": 15
1016 + },
1017 + {
1018 + "sel": "input.input",
1019 + "fs": 15
1020 + },
1021 + {
1022 + "sel": "input.input",
1023 + "fs": 15
1024 + },
1025 + {
1026 + "sel": "input.input",
1027 + "fs": 15
1028 + },
1029 + {
1030 + "sel": "textarea",
1031 + "fs": 13.5
1032 + }
1033 + ],
1034 + "smallTargets": [
1035 + {
1036 + "sel": "a.brand",
1037 + "w": 92,
1038 + "h": 27,
1039 + "text": "ImmoKa"
1040 + },
1041 + {
1042 + "sel": "a.ka-signup",
1043 + "w": 99,
1044 + "h": 17,
1045 + "text": "Créer un compte"
1046 + },
1047 + {
1048 + "sel": "a.gk-badge",
1049 + "w": 165,
1050 + "h": 30,
1051 + "text": "Un serviceGroupeKA"
1052 + }
1053 + ],
1054 + "dropdownCandidates": [],
1055 + "styleSheets": [
1056 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
1057 + "https://www.immo-ka.com/assets/index-GVlL0Z3K.css"
1058 + ]
1059 + },
1060 + "css": {
1061 + "vh100": 0,
1062 + "dvh": 5,
1063 + "svh": 0,
1064 + "safeArea": 8,
1065 + "hoverReveal": [],
1066 + "zMax": 2147483001
1067 + }
1068 + },
1069 + {
1070 + "url": "https://www.immo-ka.com/telecharger",
1071 + "tag": "/telecharger",
1072 + "issues": [
1073 + "HTTP 404"
1074 + ],
1075 + "data": null
1076 + }
1077 + ]
1078 + },
1079 + {
1080 + "site": "vrai-prix",
1081 + "engine": "android",
1082 + "pages": [
1083 + {
1084 + "url": "https://www.vrai-prix.com/",
1085 + "tag": "accueil",
1086 + "issues": [
1087 + "2 champ(s) <16px (zoom iOS) : input#vp-menu, textarea",
1088 + "1 cible(s) tactile(s) <34px : a.vp-display.group.flex(92×28)"
1089 + ],
1090 + "data": {
1091 + "viewport": "width=device-width, initial-scale=1",
1092 + "overflowPx": 0,
1093 + "overflowEls": [],
1094 + "fixed": [
1095 + {
1096 + "sel": "button.kaa-btn",
1097 + "pos": "fixed",
1098 + "rect": {
1099 + "t": 763,
1100 + "b": 821,
1101 + "h": 58
1102 + },
1103 + "bottomAnchored": true,
1104 + "z": "2147483000",
1105 + "brokenBy": null,
1106 + "padBottom": "0px",
1107 + "cssBottom": "18px"
1108 + }
1109 + ],
1110 + "bottomBar": {
1111 + "sel": "button.kaa-btn",
1112 + "h": 58,
1113 + "bodyPadBottom": 0,
1114 + "mainPadBottom": 64
1115 + },
1116 + "smallInputs": [
1117 + {
1118 + "sel": "input#vp-menu",
1119 + "fs": 15
1120 + },
1121 + {
1122 + "sel": "textarea",
1123 + "fs": 13.5
1124 + }
1125 + ],
1126 + "smallTargets": [
1127 + {
1128 + "sel": "a.vp-display.group.flex",
1129 + "w": 92,
1130 + "h": 28,
1131 + "text": "VraiPrix"
1132 + }
1133 + ],
1134 + "dropdownCandidates": [],
1135 + "styleSheets": [
1136 + "https://www.vrai-prix.com/_next/static/chunks/3lolbwhnol3ir.css"
1137 + ]
1138 + },
1139 + "css": {
1140 + "vh100": 0,
1141 + "dvh": 4,
1142 + "svh": 1,
1143 + "safeArea": 6,
1144 + "hoverReveal": [],
1145 + "zMax": 2147483001
1146 + }
1147 + },
1148 + {
1149 + "url": "https://www.vrai-prix.com/carte",
1150 + "tag": "/carte",
1151 + "issues": [
1152 + "2 champ(s) <16px (zoom iOS) : input#vp-menu, textarea",
1153 + "1 cible(s) tactile(s) <34px : a.vp-display.group.flex(92×28)"
1154 + ],
1155 + "data": {
1156 + "viewport": "width=device-width, initial-scale=1",
1157 + "overflowPx": 0,
1158 + "overflowEls": [],
1159 + "fixed": [
1160 + {
1161 + "sel": "button.kaa-btn",
1162 + "pos": "fixed",
1163 + "rect": {
1164 + "t": 763,
1165 + "b": 821,
1166 + "h": 58
1167 + },
1168 + "bottomAnchored": true,
1169 + "z": "2147483000",
1170 + "brokenBy": null,
1171 + "padBottom": "0px",
1172 + "cssBottom": "18px"
1173 + }
1174 + ],
1175 + "bottomBar": {
1176 + "sel": "button.kaa-btn",
1177 + "h": 58,
1178 + "bodyPadBottom": 0,
1179 + "mainPadBottom": 64
1180 + },
1181 + "smallInputs": [
1182 + {
1183 + "sel": "input#vp-menu",
1184 + "fs": 15
1185 + },
1186 + {
1187 + "sel": "textarea",
1188 + "fs": 13.5
1189 + }
1190 + ],
1191 + "smallTargets": [
1192 + {
1193 + "sel": "a.vp-display.group.flex",
1194 + "w": 92,
1195 + "h": 28,
1196 + "text": "VraiPrix"
1197 + }
1198 + ],
1199 + "dropdownCandidates": [],
1200 + "styleSheets": [
1201 + "https://www.vrai-prix.com/_next/static/chunks/3lolbwhnol3ir.css",
1202 + "https://www.vrai-prix.com/_next/static/chunks/0q1qd3ql30zg7.css"
1203 + ]
1204 + },
1205 + "css": {
1206 + "vh100": 0,
1207 + "dvh": 4,
1208 + "svh": 1,
1209 + "safeArea": 7,
1210 + "hoverReveal": [],
1211 + "zMax": 2147483001
1212 + }
1213 + },
1214 + {
1215 + "url": "https://www.vrai-prix.com/ka",
1216 + "tag": "/ka",
1217 + "issues": [
1218 + "2 champ(s) <16px (zoom iOS) : input#vp-menu, textarea",
1219 + "1 cible(s) tactile(s) <34px : a.vp-display.group.flex(92×28)"
1220 + ],
1221 + "data": {
1222 + "viewport": "width=device-width, initial-scale=1",
1223 + "overflowPx": 0,
1224 + "overflowEls": [],
1225 + "fixed": [
1226 + {
1227 + "sel": "button.kaa-btn",
1228 + "pos": "fixed",
1229 + "rect": {
1230 + "t": 763,
1231 + "b": 821,
1232 + "h": 58
1233 + },
1234 + "bottomAnchored": true,
1235 + "z": "2147483000",
1236 + "brokenBy": null,
1237 + "padBottom": "0px",
1238 + "cssBottom": "18px"
1239 + }
1240 + ],
1241 + "bottomBar": {
1242 + "sel": "button.kaa-btn",
1243 + "h": 58,
1244 + "bodyPadBottom": 0,
1245 + "mainPadBottom": 64
1246 + },
1247 + "smallInputs": [
1248 + {
1249 + "sel": "input#vp-menu",
1250 + "fs": 15
1251 + },
1252 + {
1253 + "sel": "textarea",
1254 + "fs": 13.5
1255 + }
1256 + ],
1257 + "smallTargets": [
1258 + {
1259 + "sel": "a.vp-display.group.flex",
1260 + "w": 92,
1261 + "h": 28,
1262 + "text": "VraiPrix"
1263 + }
1264 + ],
1265 + "dropdownCandidates": [],
1266 + "styleSheets": [
1267 + "https://www.vrai-prix.com/_next/static/chunks/3lolbwhnol3ir.css"
1268 + ]
1269 + },
1270 + "css": {
1271 + "vh100": 0,
1272 + "dvh": 4,
1273 + "svh": 1,
1274 + "safeArea": 6,
1275 + "hoverReveal": [],
1276 + "zMax": 2147483001
1277 + }
1278 + }
1279 + ]
1280 + },
1281 + {
1282 + "site": "auto-ka",
1283 + "engine": "android",
1284 + "pages": [
1285 + {
1286 + "url": "https://www.auto-ka.com/",
1287 + "tag": "accueil",
1288 + "issues": [
1289 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
1290 + "2 champ(s) <16px (zoom iOS) : select#f-sort, textarea",
1291 + "1 cible(s) tactile(s) <34px : a.brand.active(102×32)"
1292 + ],
1293 + "data": {
1294 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1295 + "overflowPx": 0,
1296 + "overflowEls": [],
1297 + "fixed": [
1298 + {
1299 + "sel": "header.header",
1300 + "pos": "sticky",
1301 + "rect": {
1302 + "t": 0,
1303 + "b": 66,
1304 + "h": 66
1305 + },
1306 + "bottomAnchored": false,
1307 + "z": "50",
1308 + "brokenBy": null,
1309 + "padBottom": "0px",
1310 + "cssBottom": "auto"
1311 + },
1312 + {
1313 + "sel": "button.kaa-btn",
1314 + "pos": "fixed",
1315 + "rect": {
1316 + "t": 763,
1317 + "b": 821,
1318 + "h": 58
1319 + },
1320 + "bottomAnchored": true,
1321 + "z": "2147483000",
1322 + "brokenBy": null,
1323 + "padBottom": "0px",
1324 + "cssBottom": "18px"
1325 + }
1326 + ],
1327 + "bottomBar": {
1328 + "sel": "button.kaa-btn",
1329 + "h": 58,
1330 + "bodyPadBottom": 0,
1331 + "mainPadBottom": 0
1332 + },
1333 + "smallInputs": [
1334 + {
1335 + "sel": "select#f-sort",
1336 + "fs": 13.5
1337 + },
1338 + {
1339 + "sel": "textarea",
1340 + "fs": 13.5
1341 + }
1342 + ],
1343 + "smallTargets": [
1344 + {
1345 + "sel": "a.brand.active",
1346 + "w": 102,
1347 + "h": 32,
1348 + "text": "AutoKaVoitures usagé"
1349 + }
1350 + ],
1351 + "dropdownCandidates": [],
1352 + "styleSheets": [
1353 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
1354 + "https://www.auto-ka.com/assets/index-L7B7KA-g.css"
1355 + ]
1356 + },
1357 + "css": {
1358 + "vh100": 0,
1359 + "dvh": 2,
1360 + "svh": 0,
1361 + "safeArea": 3,
1362 + "hoverReveal": [],
1363 + "zMax": 2147483001
1364 + }
1365 + },
1366 + {
1367 + "url": "https://www.auto-ka.com/motos",
1368 + "tag": "/motos",
1369 + "issues": [
1370 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
1371 + "2 champ(s) <16px (zoom iOS) : select#f-sort, textarea",
1372 + "1 cible(s) tactile(s) <34px : a.brand(102×32)"
1373 + ],
1374 + "data": {
1375 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1376 + "overflowPx": 0,
1377 + "overflowEls": [],
1378 + "fixed": [
1379 + {
1380 + "sel": "header.header",
1381 + "pos": "sticky",
1382 + "rect": {
1383 + "t": 0,
1384 + "b": 66,
1385 + "h": 66
1386 + },
1387 + "bottomAnchored": false,
1388 + "z": "50",
1389 + "brokenBy": null,
1390 + "padBottom": "0px",
1391 + "cssBottom": "auto"
1392 + },
1393 + {
1394 + "sel": "button.kaa-btn",
1395 + "pos": "fixed",
1396 + "rect": {
1397 + "t": 763,
1398 + "b": 821,
1399 + "h": 58
1400 + },
1401 + "bottomAnchored": true,
1402 + "z": "2147483000",
1403 + "brokenBy": null,
1404 + "padBottom": "0px",
1405 + "cssBottom": "18px"
1406 + }
1407 + ],
1408 + "bottomBar": {
1409 + "sel": "button.kaa-btn",
1410 + "h": 58,
1411 + "bodyPadBottom": 0,
1412 + "mainPadBottom": 0
1413 + },
1414 + "smallInputs": [
1415 + {
1416 + "sel": "select#f-sort",
1417 + "fs": 13.5
1418 + },
1419 + {
1420 + "sel": "textarea",
1421 + "fs": 13.5
1422 + }
1423 + ],
1424 + "smallTargets": [
1425 + {
1426 + "sel": "a.brand",
1427 + "w": 102,
1428 + "h": 32,
1429 + "text": "AutoKaVoitures usagé"
1430 + }
1431 + ],
1432 + "dropdownCandidates": [],
1433 + "styleSheets": [
1434 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
1435 + "https://www.auto-ka.com/assets/index-L7B7KA-g.css"
1436 + ]
1437 + },
1438 + "css": {
1439 + "vh100": 0,
1440 + "dvh": 2,
1441 + "svh": 0,
1442 + "safeArea": 3,
1443 + "hoverReveal": [],
1444 + "zMax": 2147483001
1445 + }
1446 + },
1447 + {
1448 + "url": "https://www.auto-ka.com/scooters",
1449 + "tag": "/scooters",
1450 + "issues": [
1451 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
1452 + "2 champ(s) <16px (zoom iOS) : select#f-sort, textarea",
1453 + "1 cible(s) tactile(s) <34px : a.brand(102×32)"
1454 + ],
1455 + "data": {
1456 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1457 + "overflowPx": 0,
1458 + "overflowEls": [],
1459 + "fixed": [
1460 + {
1461 + "sel": "header.header",
1462 + "pos": "sticky",
1463 + "rect": {
1464 + "t": 0,
1465 + "b": 66,
1466 + "h": 66
1467 + },
1468 + "bottomAnchored": false,
1469 + "z": "50",
1470 + "brokenBy": null,
1471 + "padBottom": "0px",
1472 + "cssBottom": "auto"
1473 + },
1474 + {
1475 + "sel": "button.kaa-btn",
1476 + "pos": "fixed",
1477 + "rect": {
1478 + "t": 763,
1479 + "b": 821,
1480 + "h": 58
1481 + },
1482 + "bottomAnchored": true,
1483 + "z": "2147483000",
1484 + "brokenBy": null,
1485 + "padBottom": "0px",
1486 + "cssBottom": "18px"
1487 + }
1488 + ],
1489 + "bottomBar": {
1490 + "sel": "button.kaa-btn",
1491 + "h": 58,
1492 + "bodyPadBottom": 0,
1493 + "mainPadBottom": 0
1494 + },
1495 + "smallInputs": [
1496 + {
1497 + "sel": "select#f-sort",
1498 + "fs": 13.5
1499 + },
1500 + {
1501 + "sel": "textarea",
1502 + "fs": 13.5
1503 + }
1504 + ],
1505 + "smallTargets": [
1506 + {
1507 + "sel": "a.brand",
1508 + "w": 102,
1509 + "h": 32,
1510 + "text": "AutoKaVoitures usagé"
1511 + }
1512 + ],
1513 + "dropdownCandidates": [],
1514 + "styleSheets": [
1515 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
1516 + "https://www.auto-ka.com/assets/index-L7B7KA-g.css"
1517 + ]
1518 + },
1519 + "css": {
1520 + "vh100": 0,
1521 + "dvh": 2,
1522 + "svh": 0,
1523 + "safeArea": 3,
1524 + "hoverReveal": [],
1525 + "zMax": 2147483001
1526 + }
1527 + }
1528 + ]
1529 + },
1530 + {
1531 + "site": "fabri-ka",
1532 + "engine": "android",
1533 + "pages": [
1534 + {
1535 + "url": "https://www.fabri-ka.com/",
1536 + "tag": "accueil",
1537 + "issues": [
1538 + "pas de compensation padding sous la barre basse [nav.bottom-nav] h=58px (body 0px / main 0px)",
1539 + "2 champ(s) <16px (zoom iOS) : input#header-search-input, textarea",
1540 + "1 cible(s) tactile(s) <34px : a.logo(98×29)"
1541 + ],
1542 + "data": {
1543 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1544 + "overflowPx": 0,
1545 + "overflowEls": [],
1546 + "fixed": [
1547 + {
1548 + "sel": "header.site-header",
1549 + "pos": "sticky",
1550 + "rect": {
1551 + "t": 0,
1552 + "b": 58,
1553 + "h": 58
1554 + },
1555 + "bottomAnchored": false,
1556 + "z": "60",
1557 + "brokenBy": null,
1558 + "padBottom": "0px",
1559 + "cssBottom": "auto"
1560 + },
1561 + {
1562 + "sel": "nav.bottom-nav",
1563 + "pos": "fixed",
1564 + "rect": {
1565 + "t": 781,
1566 + "b": 839,
1567 + "h": 58
1568 + },
1569 + "bottomAnchored": true,
1570 + "z": "70",
1571 + "brokenBy": null,
1572 + "padBottom": "0px",
1573 + "cssBottom": "0px"
1574 + },
1575 + {
1576 + "sel": "button.kaa-btn",
1577 + "pos": "fixed",
1578 + "rect": {
1579 + "t": 763,
1580 + "b": 821,
1581 + "h": 58
1582 + },
1583 + "bottomAnchored": true,
1584 + "z": "2147483000",
1585 + "brokenBy": null,
1586 + "padBottom": "0px",
1587 + "cssBottom": "18px"
1588 + }
1589 + ],
1590 + "bottomBar": {
1591 + "sel": "nav.bottom-nav",
1592 + "h": 58,
1593 + "bodyPadBottom": 0,
1594 + "mainPadBottom": 0
1595 + },
1596 + "smallInputs": [
1597 + {
1598 + "sel": "input#header-search-input",
1599 + "fs": 14.4
1600 + },
1601 + {
1602 + "sel": "textarea",
1603 + "fs": 13.5
1604 + }
1605 + ],
1606 + "smallTargets": [
1607 + {
1608 + "sel": "a.logo",
1609 + "w": 98,
1610 + "h": 29,
1611 + "text": "Fabri·Ka"
1612 + }
1613 + ],
1614 + "dropdownCandidates": [],
1615 + "styleSheets": [
1616 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
1617 + "https://www.fabri-ka.com/assets/index-CixgUAZQ.css"
1618 + ]
1619 + },
1620 + "css": {
1621 + "vh100": 2,
1622 + "dvh": 4,
1623 + "svh": 0,
1624 + "safeArea": 4,
1625 + "hoverReveal": [],
1626 + "zMax": 2147483001
1627 + }
1628 + },
1629 + {
1630 + "url": "https://www.fabri-ka.com/produits",
1631 + "tag": "/produits",
1632 + "issues": [
1633 + "pas de compensation padding sous la barre basse [button.filter-fab] h=46px (body 0px / main 0px)",
1634 + "10 champ(s) <16px (zoom iOS) : input#header-search-input, input, input#side-filter-search",
1635 + "1 cible(s) tactile(s) <34px : a.logo(98×29)"
1636 + ],
1637 + "data": {
1638 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1639 + "overflowPx": 0,
1640 + "overflowEls": [],
1641 + "fixed": [
1642 + {
1643 + "sel": "header.site-header",
1644 + "pos": "sticky",
1645 + "rect": {
1646 + "t": 0,
1647 + "b": 58,
1648 + "h": 58
1649 + },
1650 + "bottomAnchored": false,
1651 + "z": "60",
1652 + "brokenBy": null,
1653 + "padBottom": "0px",
1654 + "cssBottom": "auto"
1655 + },
1656 + {
1657 + "sel": "div.catalog-searchbar",
1658 + "pos": "sticky",
1659 + "rect": {
1660 + "t": 70,
1661 + "b": 137,
1662 + "h": 67
1663 + },
1664 + "bottomAnchored": false,
1665 + "z": "40",
1666 + "brokenBy": null,
1667 + "padBottom": "10.4px",
1668 + "cssBottom": "auto"
1669 + },
1670 + {
1671 + "sel": "button.filter-fab",
1672 + "pos": "fixed",
1673 + "rect": {
1674 + "t": 721,
1675 + "b": 767,
1676 + "h": 46
1677 + },
1678 + "bottomAnchored": true,
1679 + "z": "55",
1680 + "brokenBy": null,
1681 + "padBottom": "0px",
1682 + "cssBottom": "72px"
1683 + },
1684 + {
1685 + "sel": "nav.bottom-nav",
1686 + "pos": "fixed",
1687 + "rect": {
1688 + "t": 781,
1689 + "b": 839,
1690 + "h": 58
1691 + },
1692 + "bottomAnchored": true,
1693 + "z": "70",
1694 + "brokenBy": null,
1695 + "padBottom": "0px",
1696 + "cssBottom": "0px"
1697 + },
1698 + {
1699 + "sel": "button.kaa-btn",
1700 + "pos": "fixed",
1701 + "rect": {
1702 + "t": 763,
1703 + "b": 821,
1704 + "h": 58
1705 + },
1706 + "bottomAnchored": true,
1707 + "z": "2147483000",
1708 + "brokenBy": null,
1709 + "padBottom": "0px",
1710 + "cssBottom": "18px"
1711 + }
1712 + ],
1713 + "bottomBar": {
1714 + "sel": "button.filter-fab",
1715 + "h": 46,
1716 + "bodyPadBottom": 0,
1717 + "mainPadBottom": 0
1718 + },
1719 + "smallInputs": [
1720 + {
1721 + "sel": "input#header-search-input",
1722 + "fs": 14.4
1723 + },
1724 + {
1725 + "sel": "input",
1726 + "fs": 15.2
1727 + },
1728 + {
1729 + "sel": "input#side-filter-search",
1730 + "fs": 15.2
1731 + },
1732 + {
1733 + "sel": "select#side-filter-region",
1734 + "fs": 15.2
1735 + },
1736 + {
1737 + "sel": "input",
1738 + "fs": 15.2
1739 + },
1740 + {
1741 + "sel": "input",
1742 + "fs": 15.2
1743 + },
1744 + {
1745 + "sel": "input",
1746 + "fs": 15.2
1747 + },
1748 + {
1749 + "sel": "input",
1750 + "fs": 15.2
1751 + },
1752 + {
1753 + "sel": "input",
1754 + "fs": 15.2
1755 + },
1756 + {
1757 + "sel": "input",
1758 + "fs": 15.2
1759 + }
1760 + ],
1761 + "smallTargets": [
1762 + {
1763 + "sel": "a.logo",
1764 + "w": 98,
1765 + "h": 29,
1766 + "text": "Fabri·Ka"
1767 + }
1768 + ],
1769 + "dropdownCandidates": [
1770 + {
1771 + "sel": "button.filter-fab",
1772 + "tag": "button"
1773 + }
1774 + ],
1775 + "styleSheets": [
1776 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
1777 + "https://www.fabri-ka.com/assets/index-CixgUAZQ.css"
1778 + ]
1779 + },
1780 + "css": {
1781 + "vh100": 2,
1782 + "dvh": 4,
1783 + "svh": 0,
1784 + "safeArea": 4,
1785 + "hoverReveal": [],
1786 + "zMax": 2147483001
1787 + }
1788 + },
1789 + {
1790 + "url": "https://www.fabri-ka.com/boutiques",
1791 + "tag": "/boutiques",
1792 + "issues": [
1793 + "pas de compensation padding sous la barre basse [nav.bottom-nav] h=58px (body 0px / main 0px)",
1794 + "5 champ(s) <16px (zoom iOS) : input#header-search-input, input, select",
1795 + "1 cible(s) tactile(s) <34px : a.logo(98×29)"
1796 + ],
1797 + "data": {
1798 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1799 + "overflowPx": 0,
1800 + "overflowEls": [],
1801 + "fixed": [
1802 + {
1803 + "sel": "header.site-header",
1804 + "pos": "sticky",
1805 + "rect": {
1806 + "t": 0,
1807 + "b": 58,
1808 + "h": 58
1809 + },
1810 + "bottomAnchored": false,
1811 + "z": "60",
1812 + "brokenBy": null,
1813 + "padBottom": "0px",
1814 + "cssBottom": "auto"
1815 + },
1816 + {
1817 + "sel": "nav.bottom-nav",
1818 + "pos": "fixed",
1819 + "rect": {
1820 + "t": 781,
1821 + "b": 839,
1822 + "h": 58
1823 + },
1824 + "bottomAnchored": true,
1825 + "z": "70",
1826 + "brokenBy": null,
1827 + "padBottom": "0px",
1828 + "cssBottom": "0px"
1829 + },
1830 + {
1831 + "sel": "button.kaa-btn",
1832 + "pos": "fixed",
1833 + "rect": {
1834 + "t": 763,
1835 + "b": 821,
1836 + "h": 58
1837 + },
1838 + "bottomAnchored": true,
1839 + "z": "2147483000",
1840 + "brokenBy": null,
1841 + "padBottom": "0px",
1842 + "cssBottom": "18px"
1843 + }
1844 + ],
1845 + "bottomBar": {
1846 + "sel": "nav.bottom-nav",
1847 + "h": 58,
1848 + "bodyPadBottom": 0,
1849 + "mainPadBottom": 0
1850 + },
1851 + "smallInputs": [
1852 + {
1853 + "sel": "input#header-search-input",
1854 + "fs": 14.4
1855 + },
1856 + {
1857 + "sel": "input",
1858 + "fs": 15.2
1859 + },
1860 + {
1861 + "sel": "select",
1862 + "fs": 15.2
1863 + },
1864 + {
1865 + "sel": "input",
1866 + "fs": 15.2
1867 + },
1868 + {
1869 + "sel": "textarea",
1870 + "fs": 13.5
1871 + }
1872 + ],
1873 + "smallTargets": [
1874 + {
1875 + "sel": "a.logo",
1876 + "w": 98,
1877 + "h": 29,
1878 + "text": "Fabri·Ka"
1879 + }
1880 + ],
1881 + "dropdownCandidates": [],
1882 + "styleSheets": [
1883 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
1884 + "https://www.fabri-ka.com/assets/index-CixgUAZQ.css"
1885 + ]
1886 + },
1887 + "css": {
1888 + "vh100": 2,
1889 + "dvh": 4,
1890 + "svh": 0,
1891 + "safeArea": 4,
1892 + "hoverReveal": [],
1893 + "zMax": 2147483001
1894 + }
1895 + }
1896 + ]
1897 + },
1898 + {
1899 + "site": "food-ka",
1900 + "engine": "android",
1901 + "pages": [
1902 + {
1903 + "url": "https://www.food-ka.com/",
1904 + "tag": "accueil",
1905 + "issues": [
1906 + "pas de compensation padding sous la barre basse [button.fab] h=47px (body 0px / main 0px)",
1907 + "6 champ(s) <16px (zoom iOS) : input#f-q, select, select",
1908 + "2 cible(s) tactile(s) <34px : a.brand.active(121×27), a.gk-badge(165×30)"
1909 + ],
1910 + "data": {
1911 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
1912 + "overflowPx": 0,
1913 + "overflowEls": [],
1914 + "fixed": [
1915 + {
1916 + "sel": "header.header",
1917 + "pos": "sticky",
1918 + "rect": {
1919 + "t": 0,
1920 + "b": 58,
1921 + "h": 58
1922 + },
1923 + "bottomAnchored": false,
1924 + "z": "50",
1925 + "brokenBy": null,
1926 + "padBottom": "0px",
1927 + "cssBottom": "auto"
1928 + },
1929 + {
1930 + "sel": "button.fab",
1931 + "pos": "fixed",
1932 + "rect": {
1933 + "t": 774,
1934 + "b": 821,
1935 + "h": 47
1936 + },
1937 + "bottomAnchored": true,
1938 + "z": "80",
1939 + "brokenBy": null,
1940 + "padBottom": "13px",
1941 + "cssBottom": "18px"
1942 + },
1943 + {
1944 + "sel": "div.cookie-banner",
1945 + "pos": "fixed",
1946 + "rect": {
1947 + "t": 584,
1948 + "b": 827,
1949 + "h": 243
1950 + },
1951 + "bottomAnchored": true,
1952 + "z": "80",
1953 + "brokenBy": null,
1954 + "padBottom": "0px",
1955 + "cssBottom": "12px"
1956 + },
1957 + {
1958 + "sel": "button.kaa-btn",
1959 + "pos": "fixed",
1960 + "rect": {
1961 + "t": 763,
1962 + "b": 821,
1963 + "h": 58
1964 + },
1965 + "bottomAnchored": true,
1966 + "z": "2147483000",
1967 + "brokenBy": null,
1968 + "padBottom": "0px",
1969 + "cssBottom": "18px"
1970 + }
1971 + ],
1972 + "bottomBar": {
1973 + "sel": "button.fab",
1974 + "h": 47,
1975 + "bodyPadBottom": 0,
1976 + "mainPadBottom": 0
1977 + },
1978 + "smallInputs": [
1979 + {
1980 + "sel": "input#f-q",
1981 + "fs": 15
1982 + },
1983 + {
1984 + "sel": "select",
1985 + "fs": 14.5
1986 + },
1987 + {
1988 + "sel": "select",
1989 + "fs": 14.5
1990 + },
1991 + {
1992 + "sel": "select",
1993 + "fs": 14.5
1994 + },
1995 + {
1996 + "sel": "select",
1997 + "fs": 14.5
1998 + },
1999 + {
2000 + "sel": "textarea",
2001 + "fs": 13.5
2002 + }
2003 + ],
2004 + "smallTargets": [
2005 + {
2006 + "sel": "a.brand.active",
2007 + "w": 121,
2008 + "h": 27,
2009 + "text": "FoodKaÉpicerie — tou"
2010 + },
2011 + {
2012 + "sel": "a.gk-badge",
2013 + "w": 165,
2014 + "h": 30,
2015 + "text": "Un serviceGroupeKA"
2016 + }
2017 + ],
2018 + "dropdownCandidates": [],
2019 + "styleSheets": [
2020 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
2021 + "https://www.food-ka.com/assets/index-D17kJdwk.css"
2022 + ]
2023 + },
2024 + "css": {
2025 + "vh100": 0,
2026 + "dvh": 3,
2027 + "svh": 0,
2028 + "safeArea": 8,
2029 + "hoverReveal": [],
2030 + "zMax": 2147483001
2031 + }
2032 + },
2033 + {
2034 + "url": "https://www.food-ka.com/aubaines",
2035 + "tag": "/aubaines",
2036 + "issues": [
2037 + "pas de compensation padding sous la barre basse [button.fab] h=47px (body 0px / main 0px)",
2038 + "6 champ(s) <16px (zoom iOS) : input#f-q, select, select",
2039 + "2 cible(s) tactile(s) <34px : a.brand(121×27), a.gk-badge(165×30)"
2040 + ],
2041 + "data": {
2042 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
2043 + "overflowPx": 0,
2044 + "overflowEls": [],
2045 + "fixed": [
2046 + {
2047 + "sel": "header.header",
2048 + "pos": "sticky",
2049 + "rect": {
2050 + "t": 0,
2051 + "b": 58,
2052 + "h": 58
2053 + },
2054 + "bottomAnchored": false,
2055 + "z": "50",
2056 + "brokenBy": null,
2057 + "padBottom": "0px",
2058 + "cssBottom": "auto"
2059 + },
2060 + {
2061 + "sel": "button.fab",
2062 + "pos": "fixed",
2063 + "rect": {
2064 + "t": 774,
2065 + "b": 821,
2066 + "h": 47
2067 + },
2068 + "bottomAnchored": true,
2069 + "z": "80",
2070 + "brokenBy": null,
2071 + "padBottom": "13px",
2072 + "cssBottom": "18px"
2073 + },
2074 + {
2075 + "sel": "div.cookie-banner",
2076 + "pos": "fixed",
2077 + "rect": {
2078 + "t": 584,
2079 + "b": 827,
2080 + "h": 243
2081 + },
2082 + "bottomAnchored": true,
2083 + "z": "80",
2084 + "brokenBy": null,
2085 + "padBottom": "0px",
2086 + "cssBottom": "12px"
2087 + },
2088 + {
2089 + "sel": "button.kaa-btn",
2090 + "pos": "fixed",
2091 + "rect": {
2092 + "t": 763,
2093 + "b": 821,
2094 + "h": 58
2095 + },
2096 + "bottomAnchored": true,
2097 + "z": "2147483000",
2098 + "brokenBy": null,
2099 + "padBottom": "0px",
2100 + "cssBottom": "18px"
2101 + }
2102 + ],
2103 + "bottomBar": {
2104 + "sel": "button.fab",
2105 + "h": 47,
2106 + "bodyPadBottom": 0,
2107 + "mainPadBottom": 0
2108 + },
2109 + "smallInputs": [
2110 + {
2111 + "sel": "input#f-q",
2112 + "fs": 15
2113 + },
2114 + {
2115 + "sel": "select",
2116 + "fs": 14.5
2117 + },
2118 + {
2119 + "sel": "select",
2120 + "fs": 14.5
2121 + },
2122 + {
2123 + "sel": "select",
2124 + "fs": 14.5
2125 + },
2126 + {
2127 + "sel": "select",
2128 + "fs": 14.5
2129 + },
2130 + {
2131 + "sel": "textarea",
2132 + "fs": 13.5
2133 + }
2134 + ],
2135 + "smallTargets": [
2136 + {
2137 + "sel": "a.brand",
2138 + "w": 121,
2139 + "h": 27,
2140 + "text": "FoodKaÉpicerie — tou"
2141 + },
2142 + {
2143 + "sel": "a.gk-badge",
2144 + "w": 165,
2145 + "h": 30,
2146 + "text": "Un serviceGroupeKA"
2147 + }
2148 + ],
2149 + "dropdownCandidates": [],
2150 + "styleSheets": [
2151 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
2152 + "https://www.food-ka.com/assets/index-D17kJdwk.css"
2153 + ]
2154 + },
2155 + "css": {
2156 + "vh100": 0,
2157 + "dvh": 3,
2158 + "svh": 0,
2159 + "safeArea": 8,
2160 + "hoverReveal": [],
2161 + "zMax": 2147483001
2162 + }
2163 + },
2164 + {
2165 + "url": "https://www.food-ka.com/sources",
2166 + "tag": "/sources",
2167 + "issues": [
2168 + "pas de compensation padding sous la barre basse [div.cookie-banner] h=243px (body 0px / main 0px)",
2169 + "1 champ(s) <16px (zoom iOS) : textarea",
2170 + "2 cible(s) tactile(s) <34px : a.brand(121×27), a.gk-badge(165×30)"
2171 + ],
2172 + "data": {
2173 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
2174 + "overflowPx": 0,
2175 + "overflowEls": [],
2176 + "fixed": [
2177 + {
2178 + "sel": "header.header",
2179 + "pos": "sticky",
2180 + "rect": {
2181 + "t": 0,
2182 + "b": 58,
2183 + "h": 58
2184 + },
2185 + "bottomAnchored": false,
2186 + "z": "50",
2187 + "brokenBy": null,
2188 + "padBottom": "0px",
2189 + "cssBottom": "auto"
2190 + },
2191 + {
2192 + "sel": "div.cookie-banner",
2193 + "pos": "fixed",
2194 + "rect": {
2195 + "t": 584,
2196 + "b": 827,
2197 + "h": 243
2198 + },
2199 + "bottomAnchored": true,
2200 + "z": "80",
2201 + "brokenBy": null,
2202 + "padBottom": "0px",
2203 + "cssBottom": "12px"
2204 + },
2205 + {
2206 + "sel": "button.kaa-btn",
2207 + "pos": "fixed",
2208 + "rect": {
2209 + "t": 763,
2210 + "b": 821,
2211 + "h": 58
2212 + },
2213 + "bottomAnchored": true,
2214 + "z": "2147483000",
2215 + "brokenBy": null,
2216 + "padBottom": "0px",
2217 + "cssBottom": "18px"
2218 + }
2219 + ],
2220 + "bottomBar": {
2221 + "sel": "div.cookie-banner",
2222 + "h": 243,
2223 + "bodyPadBottom": 0,
2224 + "mainPadBottom": 0
2225 + },
2226 + "smallInputs": [
2227 + {
2228 + "sel": "textarea",
2229 + "fs": 13.5
2230 + }
2231 + ],
2232 + "smallTargets": [
2233 + {
2234 + "sel": "a.brand",
2235 + "w": 121,
2236 + "h": 27,
2237 + "text": "FoodKaÉpicerie — tou"
2238 + },
2239 + {
2240 + "sel": "a.gk-badge",
2241 + "w": 165,
2242 + "h": 30,
2243 + "text": "Un serviceGroupeKA"
2244 + }
2245 + ],
2246 + "dropdownCandidates": [],
2247 + "styleSheets": [
2248 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
2249 + "https://www.food-ka.com/assets/index-D17kJdwk.css"
2250 + ]
2251 + },
2252 + "css": {
2253 + "vh100": 0,
2254 + "dvh": 3,
2255 + "svh": 0,
2256 + "safeArea": 8,
2257 + "hoverReveal": [],
2258 + "zMax": 2147483001
2259 + }
2260 + }
2261 + ]
2262 + },
2263 + {
2264 + "site": "resto-ka",
2265 + "engine": "android",
2266 + "pages": [
2267 + {
2268 + "url": "https://www.resto-ka.com/",
2269 + "tag": "accueil",
2270 + "issues": [
2271 + "1 champ(s) <16px (zoom iOS) : textarea",
2272 + "2 cible(s) tactile(s) <34px : a.brand.active(138×30), a.gk-badge(165×30)"
2273 + ],
2274 + "data": {
2275 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
2276 + "overflowPx": 0,
2277 + "overflowEls": [],
2278 + "fixed": [
2279 + {
2280 + "sel": "header.header",
2281 + "pos": "sticky",
2282 + "rect": {
2283 + "t": 0,
2284 + "b": 59,
2285 + "h": 59
2286 + },
2287 + "bottomAnchored": false,
2288 + "z": "50",
2289 + "brokenBy": null,
2290 + "padBottom": "0px",
2291 + "cssBottom": "auto"
2292 + },
2293 + {
2294 + "sel": "button.fab",
2295 + "pos": "fixed",
2296 + "rect": {
2297 + "t": 718,
2298 + "b": 765,
2299 + "h": 47
2300 + },
2301 + "bottomAnchored": true,
2302 + "z": "80",
2303 + "brokenBy": null,
2304 + "padBottom": "13px",
2305 + "cssBottom": "74px"
2306 + },
2307 + {
2308 + "sel": "nav.tabbar.tabbar-3",
2309 + "pos": "fixed",
2310 + "rect": {
2311 + "t": 778,
2312 + "b": 839,
2313 + "h": 62
2314 + },
2315 + "bottomAnchored": true,
2316 + "z": "85",
2317 + "brokenBy": null,
2318 + "padBottom": "6px",
2319 + "cssBottom": "0px"
2320 + },
2321 + {
2322 + "sel": "button.kaa-btn",
2323 + "pos": "fixed",
2324 + "rect": {
2325 + "t": 763,
2326 + "b": 821,
2327 + "h": 58
2328 + },
2329 + "bottomAnchored": true,
2330 + "z": "2147483000",
2331 + "brokenBy": null,
2332 + "padBottom": "0px",
2333 + "cssBottom": "18px"
2334 + }
2335 + ],
2336 + "bottomBar": {
2337 + "sel": "button.fab",
2338 + "h": 47,
2339 + "bodyPadBottom": 64,
2340 + "mainPadBottom": 0
2341 + },
2342 + "smallInputs": [
2343 + {
2344 + "sel": "textarea",
2345 + "fs": 13.5
2346 + }
2347 + ],
2348 + "smallTargets": [
2349 + {
2350 + "sel": "a.brand.active",
2351 + "w": 138,
2352 + "h": 30,
2353 + "text": "Resto-KaChaque resto"
2354 + },
2355 + {
2356 + "sel": "a.gk-badge",
2357 + "w": 165,
2358 + "h": 30,
2359 + "text": "Un serviceGroupeKA"
2360 + }
2361 + ],
2362 + "dropdownCandidates": [],
2363 + "styleSheets": [
2364 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
2365 + "https://www.resto-ka.com/assets/index-CTEArry7.css"
2366 + ]
2367 + },
2368 + "css": {
2369 + "vh100": 0,
2370 + "dvh": 3,
2371 + "svh": 0,
2372 + "safeArea": 9,
2373 + "hoverReveal": [],
2374 + "zMax": 2147483001
2375 + }
2376 + },
2377 + {
2378 + "url": "https://www.resto-ka.com/stats",
2379 + "tag": "/stats",
2380 + "issues": [
2381 + "7 champ(s) <16px (zoom iOS) : input.input, input.input, input.input",
2382 + "2 cible(s) tactile(s) <34px : a.brand(138×30), a.gk-badge(165×30)"
2383 + ],
2384 + "data": {
2385 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
2386 + "overflowPx": 0,
2387 + "overflowEls": [],
2388 + "fixed": [
2389 + {
2390 + "sel": "header.header",
2391 + "pos": "sticky",
2392 + "rect": {
2393 + "t": 0,
2394 + "b": 59,
2395 + "h": 59
2396 + },
2397 + "bottomAnchored": false,
2398 + "z": "50",
2399 + "brokenBy": null,
2400 + "padBottom": "0px",
2401 + "cssBottom": "auto"
2402 + },
2403 + {
2404 + "sel": "nav.tabbar.tabbar-3",
2405 + "pos": "fixed",
2406 + "rect": {
2407 + "t": 778,
2408 + "b": 839,
2409 + "h": 62
2410 + },
2411 + "bottomAnchored": true,
2412 + "z": "85",
2413 + "brokenBy": null,
2414 + "padBottom": "6px",
2415 + "cssBottom": "0px"
2416 + },
2417 + {
2418 + "sel": "button.kaa-btn",
2419 + "pos": "fixed",
2420 + "rect": {
2421 + "t": 763,
2422 + "b": 821,
2423 + "h": 58
2424 + },
2425 + "bottomAnchored": true,
2426 + "z": "2147483000",
2427 + "brokenBy": null,
2428 + "padBottom": "0px",
2429 + "cssBottom": "18px"
2430 + }
2431 + ],
2432 + "bottomBar": {
2433 + "sel": "nav.tabbar.tabbar-3",
2434 + "h": 62,
2435 + "bodyPadBottom": 64,
2436 + "mainPadBottom": 0
2437 + },
2438 + "smallInputs": [
2439 + {
2440 + "sel": "input.input",
2441 + "fs": 15
2442 + },
2443 + {
2444 + "sel": "input.input",
2445 + "fs": 15
2446 + },
2447 + {
2448 + "sel": "input.input",
2449 + "fs": 15
2450 + },
2451 + {
2452 + "sel": "input.input",
2453 + "fs": 15
2454 + },
2455 + {
2456 + "sel": "input.input",
2457 + "fs": 15
2458 + },
2459 + {
2460 + "sel": "input.input",
2461 + "fs": 15
2462 + },
2463 + {
2464 + "sel": "textarea",
2465 + "fs": 13.5
2466 + }
2467 + ],
2468 + "smallTargets": [
2469 + {
2470 + "sel": "a.brand",
2471 + "w": 138,
2472 + "h": 30,
2473 + "text": "Resto-KaChaque resto"
2474 + },
2475 + {
2476 + "sel": "a.gk-badge",
2477 + "w": 165,
2478 + "h": 30,
2479 + "text": "Un serviceGroupeKA"
2480 + }
2481 + ],
2482 + "dropdownCandidates": [],
2483 + "styleSheets": [
2484 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
2485 + "https://www.resto-ka.com/assets/index-CTEArry7.css"
2486 + ]
2487 + },
2488 + "css": {
2489 + "vh100": 0,
2490 + "dvh": 3,
2491 + "svh": 0,
2492 + "safeArea": 9,
2493 + "hoverReveal": [],
2494 + "zMax": 2147483001
2495 + }
2496 + },
2497 + {
2498 + "url": "https://www.resto-ka.com/sources",
2499 + "tag": "/sources",
2500 + "issues": [
2501 + "1 champ(s) <16px (zoom iOS) : textarea",
2502 + "2 cible(s) tactile(s) <34px : a.brand(138×30), a.gk-badge(165×30)"
2503 + ],
2504 + "data": {
2505 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
2506 + "overflowPx": 0,
2507 + "overflowEls": [],
2508 + "fixed": [
2509 + {
2510 + "sel": "header.header",
2511 + "pos": "sticky",
2512 + "rect": {
2513 + "t": 0,
2514 + "b": 59,
2515 + "h": 59
2516 + },
2517 + "bottomAnchored": false,
2518 + "z": "50",
2519 + "brokenBy": null,
2520 + "padBottom": "0px",
2521 + "cssBottom": "auto"
2522 + },
2523 + {
2524 + "sel": "nav.tabbar.tabbar-3",
2525 + "pos": "fixed",
2526 + "rect": {
2527 + "t": 778,
2528 + "b": 839,
2529 + "h": 62
2530 + },
2531 + "bottomAnchored": true,
2532 + "z": "85",
2533 + "brokenBy": null,
2534 + "padBottom": "6px",
2535 + "cssBottom": "0px"
2536 + },
2537 + {
2538 + "sel": "button.kaa-btn",
2539 + "pos": "fixed",
2540 + "rect": {
2541 + "t": 763,
2542 + "b": 821,
2543 + "h": 58
2544 + },
2545 + "bottomAnchored": true,
2546 + "z": "2147483000",
2547 + "brokenBy": null,
2548 + "padBottom": "0px",
2549 + "cssBottom": "18px"
2550 + }
2551 + ],
2552 + "bottomBar": {
2553 + "sel": "nav.tabbar.tabbar-3",
2554 + "h": 62,
2555 + "bodyPadBottom": 64,
2556 + "mainPadBottom": 0
2557 + },
2558 + "smallInputs": [
2559 + {
2560 + "sel": "textarea",
2561 + "fs": 13.5
2562 + }
2563 + ],
2564 + "smallTargets": [
2565 + {
2566 + "sel": "a.brand",
2567 + "w": 138,
2568 + "h": 30,
2569 + "text": "Resto-KaChaque resto"
2570 + },
2571 + {
2572 + "sel": "a.gk-badge",
2573 + "w": 165,
2574 + "h": 30,
2575 + "text": "Un serviceGroupeKA"
2576 + }
2577 + ],
2578 + "dropdownCandidates": [],
2579 + "styleSheets": [
2580 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
2581 + "https://www.resto-ka.com/assets/index-CTEArry7.css"
2582 + ]
2583 + },
2584 + "css": {
2585 + "vh100": 0,
2586 + "dvh": 3,
2587 + "svh": 0,
2588 + "safeArea": 9,
2589 + "hoverReveal": [],
2590 + "zMax": 2147483001
2591 + }
2592 + }
2593 + ]
2594 + },
2595 + {
2596 + "site": "sorti-ka",
2597 + "engine": "android",
2598 + "pages": [
2599 + {
2600 + "url": "https://www.sorti-ka.com/",
2601 + "tag": "accueil",
2602 + "issues": [
2603 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
2604 + "6 champ(s) <16px (zoom iOS) : input#q, select#region, select#period",
2605 + "2 cible(s) tactile(s) <34px : a.brand(98×26), a.gk-badge(165×30)"
2606 + ],
2607 + "data": {
2608 + "viewport": "width=device-width, initial-scale=1",
2609 + "overflowPx": 0,
2610 + "overflowEls": [],
2611 + "fixed": [
2612 + {
2613 + "sel": "header.header",
2614 + "pos": "sticky",
2615 + "rect": {
2616 + "t": 31,
2617 + "b": 178,
2618 + "h": 147
2619 + },
2620 + "bottomAnchored": false,
2621 + "z": "50",
2622 + "brokenBy": null,
2623 + "padBottom": "0px",
2624 + "cssBottom": "auto"
2625 + },
2626 + {
2627 + "sel": "button.kaa-btn",
2628 + "pos": "fixed",
2629 + "rect": {
2630 + "t": 763,
2631 + "b": 821,
2632 + "h": 58
2633 + },
2634 + "bottomAnchored": true,
2635 + "z": "2147483000",
2636 + "brokenBy": null,
2637 + "padBottom": "0px",
2638 + "cssBottom": "18px"
2639 + }
2640 + ],
2641 + "bottomBar": {
2642 + "sel": "button.kaa-btn",
2643 + "h": 58,
2644 + "bodyPadBottom": 0,
2645 + "mainPadBottom": 0
2646 + },
2647 + "smallInputs": [
2648 + {
2649 + "sel": "input#q",
2650 + "fs": 14
2651 + },
2652 + {
2653 + "sel": "select#region",
2654 + "fs": 13.5
2655 + },
2656 + {
2657 + "sel": "select#period",
2658 + "fs": 13.5
2659 + },
2660 + {
2661 + "sel": "input#st-from",
2662 + "fs": 13
2663 + },
2664 + {
2665 + "sel": "input#st-to",
2666 + "fs": 13
2667 + },
2668 + {
2669 + "sel": "textarea",
2670 + "fs": 13.5
2671 + }
2672 + ],
2673 + "smallTargets": [
2674 + {
2675 + "sel": "a.brand",
2676 + "w": 98,
2677 + "h": 26,
2678 + "text": "Sorti·Ka"
2679 + },
2680 + {
2681 + "sel": "a.gk-badge",
2682 + "w": 165,
2683 + "h": 30,
2684 + "text": "Un service GroupeKA"
2685 + }
2686 + ],
2687 + "dropdownCandidates": [],
2688 + "styleSheets": [
2689 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
2690 + "https://www.sorti-ka.com/src/ka/tokens.css"
2691 + ]
2692 + },
2693 + "css": {
2694 + "vh100": 0,
2695 + "dvh": 2,
2696 + "svh": 0,
2697 + "safeArea": 3,
2698 + "hoverReveal": [],
2699 + "zMax": 2147483001
2700 + }
2701 + },
2702 + {
2703 + "url": "https://www.sorti-ka.com/stats",
2704 + "tag": "/stats",
2705 + "issues": [
2706 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
2707 + "9 champ(s) <16px (zoom iOS) : input#q, select#region, select#period",
2708 + "2 cible(s) tactile(s) <34px : a.brand(98×26), a.gk-badge(165×30)"
2709 + ],
2710 + "data": {
2711 + "viewport": "width=device-width, initial-scale=1",
2712 + "overflowPx": 0,
2713 + "overflowEls": [],
2714 + "fixed": [
2715 + {
2716 + "sel": "header.header",
2717 + "pos": "sticky",
2718 + "rect": {
2719 + "t": 31,
2720 + "b": 178,
2721 + "h": 147
2722 + },
2723 + "bottomAnchored": false,
2724 + "z": "50",
2725 + "brokenBy": null,
2726 + "padBottom": "0px",
2727 + "cssBottom": "auto"
2728 + },
2729 + {
2730 + "sel": "button.kaa-btn",
2731 + "pos": "fixed",
2732 + "rect": {
2733 + "t": 763,
2734 + "b": 821,
2735 + "h": 58
2736 + },
2737 + "bottomAnchored": true,
2738 + "z": "2147483000",
2739 + "brokenBy": null,
2740 + "padBottom": "0px",
2741 + "cssBottom": "18px"
2742 + }
2743 + ],
2744 + "bottomBar": {
2745 + "sel": "button.kaa-btn",
2746 + "h": 58,
2747 + "bodyPadBottom": 0,
2748 + "mainPadBottom": 0
2749 + },
2750 + "smallInputs": [
2751 + {
2752 + "sel": "input#q",
2753 + "fs": 14
2754 + },
2755 + {
2756 + "sel": "select#region",
2757 + "fs": 13.5
2758 + },
2759 + {
2760 + "sel": "select#period",
2761 + "fs": 13.5
2762 + },
2763 + {
2764 + "sel": "input#st-from",
2765 + "fs": 13
2766 + },
2767 + {
2768 + "sel": "input#st-to",
2769 + "fs": 13
2770 + },
2771 + {
2772 + "sel": "input.input",
2773 + "fs": 13
2774 + },
2775 + {
2776 + "sel": "input.input",
2777 + "fs": 13
2778 + },
2779 + {
2780 + "sel": "input.input",
2781 + "fs": 13
2782 + },
2783 + {
2784 + "sel": "textarea",
2785 + "fs": 13.5
2786 + }
2787 + ],
2788 + "smallTargets": [
2789 + {
2790 + "sel": "a.brand",
2791 + "w": 98,
2792 + "h": 26,
2793 + "text": "Sorti·Ka"
2794 + },
2795 + {
2796 + "sel": "a.gk-badge",
2797 + "w": 165,
2798 + "h": 30,
2799 + "text": "Un service GroupeKA"
2800 + }
2801 + ],
2802 + "dropdownCandidates": [],
2803 + "styleSheets": [
2804 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
2805 + "https://www.sorti-ka.com/src/ka/tokens.css"
2806 + ]
2807 + },
2808 + "css": {
2809 + "vh100": 0,
2810 + "dvh": 2,
2811 + "svh": 0,
2812 + "safeArea": 3,
2813 + "hoverReveal": [],
2814 + "zMax": 2147483001
2815 + }
2816 + },
2817 + {
2818 + "url": "https://www.sorti-ka.com/contact",
2819 + "tag": "/contact",
2820 + "issues": [
2821 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
2822 + "6 champ(s) <16px (zoom iOS) : input#q, select#region, select#period",
2823 + "2 cible(s) tactile(s) <34px : a.brand(98×26), a.gk-badge(165×30)"
2824 + ],
2825 + "data": {
2826 + "viewport": "width=device-width, initial-scale=1",
2827 + "overflowPx": 0,
2828 + "overflowEls": [],
2829 + "fixed": [
2830 + {
2831 + "sel": "header.header",
2832 + "pos": "sticky",
2833 + "rect": {
2834 + "t": 31,
2835 + "b": 178,
2836 + "h": 147
2837 + },
2838 + "bottomAnchored": false,
2839 + "z": "50",
2840 + "brokenBy": null,
2841 + "padBottom": "0px",
2842 + "cssBottom": "auto"
2843 + },
2844 + {
2845 + "sel": "button.kaa-btn",
2846 + "pos": "fixed",
2847 + "rect": {
2848 + "t": 763,
2849 + "b": 821,
2850 + "h": 58
2851 + },
2852 + "bottomAnchored": true,
2853 + "z": "2147483000",
2854 + "brokenBy": null,
2855 + "padBottom": "0px",
2856 + "cssBottom": "18px"
2857 + }
2858 + ],
2859 + "bottomBar": {
2860 + "sel": "button.kaa-btn",
2861 + "h": 58,
2862 + "bodyPadBottom": 0,
2863 + "mainPadBottom": 0
2864 + },
2865 + "smallInputs": [
2866 + {
2867 + "sel": "input#q",
2868 + "fs": 14
2869 + },
2870 + {
2871 + "sel": "select#region",
2872 + "fs": 13.5
2873 + },
2874 + {
2875 + "sel": "select#period",
2876 + "fs": 13.5
2877 + },
2878 + {
2879 + "sel": "input#st-from",
2880 + "fs": 13
2881 + },
2882 + {
2883 + "sel": "input#st-to",
2884 + "fs": 13
2885 + },
2886 + {
2887 + "sel": "textarea",
2888 + "fs": 13.5
2889 + }
2890 + ],
2891 + "smallTargets": [
2892 + {
2893 + "sel": "a.brand",
2894 + "w": 98,
2895 + "h": 26,
2896 + "text": "Sorti·Ka"
2897 + },
2898 + {
2899 + "sel": "a.gk-badge",
2900 + "w": 165,
2901 + "h": 30,
2902 + "text": "Un service GroupeKA"
2903 + }
2904 + ],
2905 + "dropdownCandidates": [],
2906 + "styleSheets": [
2907 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
2908 + "https://www.sorti-ka.com/src/ka/tokens.css"
2909 + ]
2910 + },
2911 + "css": {
2912 + "vh100": 0,
2913 + "dvh": 2,
2914 + "svh": 0,
2915 + "safeArea": 3,
2916 + "hoverReveal": [],
2917 + "zMax": 2147483001
2918 + }
2919 + }
2920 + ]
2921 + },
2922 + {
2923 + "site": "crea-ka",
2924 + "engine": "android",
2925 + "pages": [
2926 + {
2927 + "url": "https://www.crea-ka.com/",
2928 + "tag": "accueil",
2929 + "issues": [
2930 + "1 champ(s) <16px (zoom iOS) : textarea",
2931 + "2 cible(s) tactile(s) <34px : a.brand(129×30), a.gk-badge(90×30)"
2932 + ],
2933 + "data": {
2934 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
2935 + "overflowPx": 0,
2936 + "overflowEls": [],
2937 + "fixed": [
2938 + {
2939 + "sel": "header.header",
2940 + "pos": "sticky",
2941 + "rect": {
2942 + "t": 0,
2943 + "b": 65,
2944 + "h": 65
2945 + },
2946 + "bottomAnchored": false,
2947 + "z": "50",
2948 + "brokenBy": null,
2949 + "padBottom": "0px",
2950 + "cssBottom": "auto"
2951 + },
2952 + {
2953 + "sel": "div#annuaire",
2954 + "pos": "sticky",
2955 + "rect": {
2956 + "t": 898,
2957 + "b": 1030,
2958 + "h": 133
2959 + },
2960 + "bottomAnchored": false,
2961 + "z": "40",
2962 + "brokenBy": null,
2963 + "padBottom": "12px",
2964 + "cssBottom": "auto"
2965 + },
2966 + {
2967 + "sel": "nav.tabbar",
2968 + "pos": "fixed",
2969 + "rect": {
2970 + "t": 778,
2971 + "b": 839,
2972 + "h": 61
2973 + },
2974 + "bottomAnchored": true,
2975 + "z": "85",
2976 + "brokenBy": null,
2977 + "padBottom": "6px",
2978 + "cssBottom": "0px"
2979 + },
2980 + {
2981 + "sel": "button.kaa-btn",
2982 + "pos": "fixed",
2983 + "rect": {
2984 + "t": 763,
2985 + "b": 821,
2986 + "h": 58
2987 + },
2988 + "bottomAnchored": true,
2989 + "z": "2147483000",
2990 + "brokenBy": null,
2991 + "padBottom": "0px",
2992 + "cssBottom": "18px"
2993 + }
2994 + ],
2995 + "bottomBar": {
2996 + "sel": "nav.tabbar",
2997 + "h": 61,
2998 + "bodyPadBottom": 64,
2999 + "mainPadBottom": 0
3000 + },
3001 + "smallInputs": [
3002 + {
3003 + "sel": "textarea",
3004 + "fs": 13.5
3005 + }
3006 + ],
3007 + "smallTargets": [
3008 + {
3009 + "sel": "a.brand",
3010 + "w": 129,
3011 + "h": 30,
3012 + "text": "CréaKa"
3013 + },
3014 + {
3015 + "sel": "a.gk-badge",
3016 + "w": 90,
3017 + "h": 30,
3018 + "text": "Un service\n Groupe"
3019 + }
3020 + ],
3021 + "dropdownCandidates": [],
3022 + "styleSheets": [
3023 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap"
3024 + ]
3025 + },
3026 + "css": {
3027 + "vh100": 0,
3028 + "dvh": 2,
3029 + "svh": 0,
3030 + "safeArea": 6,
3031 + "hoverReveal": [],
3032 + "zMax": 2147483001
3033 + }
3034 + },
3035 + {
3036 + "url": "https://www.crea-ka.com/stats",
3037 + "tag": "/stats",
3038 + "issues": [
3039 + "1 champ(s) <16px (zoom iOS) : textarea",
3040 + "2 cible(s) tactile(s) <34px : a.brand(129×30), a.gk-badge(90×30)"
3041 + ],
3042 + "data": {
3043 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
3044 + "overflowPx": 0,
3045 + "overflowEls": [],
3046 + "fixed": [
3047 + {
3048 + "sel": "header.header",
3049 + "pos": "sticky",
3050 + "rect": {
3051 + "t": 0,
3052 + "b": 65,
3053 + "h": 65
3054 + },
3055 + "bottomAnchored": false,
3056 + "z": "50",
3057 + "brokenBy": null,
3058 + "padBottom": "0px",
3059 + "cssBottom": "auto"
3060 + },
3061 + {
3062 + "sel": "nav.tabbar",
3063 + "pos": "fixed",
3064 + "rect": {
3065 + "t": 778,
3066 + "b": 839,
3067 + "h": 61
3068 + },
3069 + "bottomAnchored": true,
3070 + "z": "85",
3071 + "brokenBy": null,
3072 + "padBottom": "6px",
3073 + "cssBottom": "0px"
3074 + },
3075 + {
3076 + "sel": "button.kaa-btn",
3077 + "pos": "fixed",
3078 + "rect": {
3079 + "t": 763,
3080 + "b": 821,
3081 + "h": 58
3082 + },
3083 + "bottomAnchored": true,
3084 + "z": "2147483000",
3085 + "brokenBy": null,
3086 + "padBottom": "0px",
3087 + "cssBottom": "18px"
3088 + }
3089 + ],
3090 + "bottomBar": {
3091 + "sel": "nav.tabbar",
3092 + "h": 61,
3093 + "bodyPadBottom": 64,
3094 + "mainPadBottom": 0
3095 + },
3096 + "smallInputs": [
3097 + {
3098 + "sel": "textarea",
3099 + "fs": 13.5
3100 + }
3101 + ],
3102 + "smallTargets": [
3103 + {
3104 + "sel": "a.brand",
3105 + "w": 129,
3106 + "h": 30,
3107 + "text": "CréaKa"
3108 + },
3109 + {
3110 + "sel": "a.gk-badge",
3111 + "w": 90,
3112 + "h": 30,
3113 + "text": "Un service\n Groupe"
3114 + }
3115 + ],
3116 + "dropdownCandidates": [],
3117 + "styleSheets": [
3118 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap"
3119 + ]
3120 + },
3121 + "css": {
3122 + "vh100": 0,
3123 + "dvh": 2,
3124 + "svh": 0,
3125 + "safeArea": 6,
3126 + "hoverReveal": [],
3127 + "zMax": 2147483001
3128 + }
3129 + },
3130 + {
3131 + "url": "https://www.crea-ka.com/contact",
3132 + "tag": "/contact",
3133 + "issues": [
3134 + "1 champ(s) <16px (zoom iOS) : textarea",
3135 + "2 cible(s) tactile(s) <34px : a.brand(129×30), a.gk-badge(90×30)"
3136 + ],
3137 + "data": {
3138 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
3139 + "overflowPx": 0,
3140 + "overflowEls": [],
3141 + "fixed": [
3142 + {
3143 + "sel": "header.header",
3144 + "pos": "sticky",
3145 + "rect": {
3146 + "t": 0,
3147 + "b": 65,
3148 + "h": 65
3149 + },
3150 + "bottomAnchored": false,
3151 + "z": "50",
3152 + "brokenBy": null,
3153 + "padBottom": "0px",
3154 + "cssBottom": "auto"
3155 + },
3156 + {
3157 + "sel": "nav.tabbar",
3158 + "pos": "fixed",
3159 + "rect": {
3160 + "t": 778,
3161 + "b": 839,
3162 + "h": 61
3163 + },
3164 + "bottomAnchored": true,
3165 + "z": "85",
3166 + "brokenBy": null,
3167 + "padBottom": "6px",
3168 + "cssBottom": "0px"
3169 + },
3170 + {
3171 + "sel": "button.kaa-btn",
3172 + "pos": "fixed",
3173 + "rect": {
3174 + "t": 763,
3175 + "b": 821,
3176 + "h": 58
3177 + },
3178 + "bottomAnchored": true,
3179 + "z": "2147483000",
3180 + "brokenBy": null,
3181 + "padBottom": "0px",
3182 + "cssBottom": "18px"
3183 + }
3184 + ],
3185 + "bottomBar": {
3186 + "sel": "nav.tabbar",
3187 + "h": 61,
3188 + "bodyPadBottom": 64,
3189 + "mainPadBottom": 0
3190 + },
3191 + "smallInputs": [
3192 + {
3193 + "sel": "textarea",
3194 + "fs": 13.5
3195 + }
3196 + ],
3197 + "smallTargets": [
3198 + {
3199 + "sel": "a.brand",
3200 + "w": 129,
3201 + "h": 30,
3202 + "text": "CréaKa"
3203 + },
3204 + {
3205 + "sel": "a.gk-badge",
3206 + "w": 90,
3207 + "h": 30,
3208 + "text": "Un service\n Groupe"
3209 + }
3210 + ],
3211 + "dropdownCandidates": [],
3212 + "styleSheets": [
3213 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap"
3214 + ]
3215 + },
3216 + "css": {
3217 + "vh100": 0,
3218 + "dvh": 2,
3219 + "svh": 0,
3220 + "safeArea": 6,
3221 + "hoverReveal": [],
3222 + "zMax": 2147483001
3223 + }
3224 + }
3225 + ]
3226 + },
3227 + {
3228 + "site": "api-ka",
3229 + "engine": "android",
3230 + "pages": [
3231 + {
3232 + "url": "https://www.api-ka.com/",
3233 + "tag": "accueil",
3234 + "issues": [
3235 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
3236 + "5 champ(s) <16px (zoom iOS) : select#pg-ep, select#pgf-service, input#pgf-page"
3237 + ],
3238 + "data": {
3239 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
3240 + "overflowPx": 0,
3241 + "overflowEls": [],
3242 + "fixed": [
3243 + {
3244 + "sel": "div.topbar",
3245 + "pos": "sticky",
3246 + "rect": {
3247 + "t": 0,
3248 + "b": 177,
3249 + "h": 177
3250 + },
3251 + "bottomAnchored": false,
3252 + "z": "60",
3253 + "brokenBy": null,
3254 + "padBottom": "0px",
3255 + "cssBottom": "auto"
3256 + },
3257 + {
3258 + "sel": "button.kaa-btn",
3259 + "pos": "fixed",
3260 + "rect": {
3261 + "t": 763,
3262 + "b": 821,
3263 + "h": 58
3264 + },
3265 + "bottomAnchored": true,
3266 + "z": "2147483000",
3267 + "brokenBy": null,
3268 + "padBottom": "0px",
3269 + "cssBottom": "18px"
3270 + }
3271 + ],
3272 + "bottomBar": {
3273 + "sel": "button.kaa-btn",
3274 + "h": 58,
3275 + "bodyPadBottom": 0,
3276 + "mainPadBottom": 0
3277 + },
3278 + "smallInputs": [
3279 + {
3280 + "sel": "select#pg-ep",
3281 + "fs": 13
3282 + },
3283 + {
3284 + "sel": "select#pgf-service",
3285 + "fs": 13
3286 + },
3287 + {
3288 + "sel": "input#pgf-page",
3289 + "fs": 13
3290 + },
3291 + {
3292 + "sel": "input#pgf-limit",
3293 + "fs": 13
3294 + },
3295 + {
3296 + "sel": "textarea",
3297 + "fs": 13.5
3298 + }
3299 + ],
3300 + "smallTargets": [],
3301 + "dropdownCandidates": [],
3302 + "styleSheets": [
3303 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
3304 + "https://www.api-ka.com/ka/tokens.css"
3305 + ]
3306 + },
3307 + "css": {
3308 + "vh100": 0,
3309 + "dvh": 2,
3310 + "svh": 0,
3311 + "safeArea": 3,
3312 + "hoverReveal": [],
3313 + "zMax": 2147483001
3314 + }
3315 + },
3316 + {
3317 + "url": "https://www.api-ka.com/stats",
3318 + "tag": "/stats",
3319 + "issues": [
3320 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
3321 + "5 champ(s) <16px (zoom iOS) : input#d-from, input#d-to, input.input"
3322 + ],
3323 + "data": {
3324 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
3325 + "overflowPx": 0,
3326 + "overflowEls": [],
3327 + "fixed": [
3328 + {
3329 + "sel": "div.topbar",
3330 + "pos": "sticky",
3331 + "rect": {
3332 + "t": 0,
3333 + "b": 119,
3334 + "h": 119
3335 + },
3336 + "bottomAnchored": false,
3337 + "z": "60",
3338 + "brokenBy": null,
3339 + "padBottom": "0px",
3340 + "cssBottom": "auto"
3341 + },
3342 + {
3343 + "sel": "button.kaa-btn",
3344 + "pos": "fixed",
3345 + "rect": {
3346 + "t": 763,
3347 + "b": 821,
3348 + "h": 58
3349 + },
3350 + "bottomAnchored": true,
3351 + "z": "2147483000",
3352 + "brokenBy": null,
3353 + "padBottom": "0px",
3354 + "cssBottom": "18px"
3355 + }
3356 + ],
3357 + "bottomBar": {
3358 + "sel": "button.kaa-btn",
3359 + "h": 58,
3360 + "bodyPadBottom": 0,
3361 + "mainPadBottom": 0
3362 + },
3363 + "smallInputs": [
3364 + {
3365 + "sel": "input#d-from",
3366 + "fs": 15
3367 + },
3368 + {
3369 + "sel": "input#d-to",
3370 + "fs": 15
3371 + },
3372 + {
3373 + "sel": "input.input",
3374 + "fs": 15
3375 + },
3376 + {
3377 + "sel": "input.input",
3378 + "fs": 15
3379 + },
3380 + {
3381 + "sel": "textarea",
3382 + "fs": 13.5
3383 + }
3384 + ],
3385 + "smallTargets": [],
3386 + "dropdownCandidates": [],
3387 + "styleSheets": [
3388 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
3389 + "https://www.api-ka.com/ka/tokens.css"
3390 + ]
3391 + },
3392 + "css": {
3393 + "vh100": 0,
3394 + "dvh": 2,
3395 + "svh": 0,
3396 + "safeArea": 3,
3397 + "hoverReveal": [],
3398 + "zMax": 2147483001
3399 + }
3400 + },
3401 + {
3402 + "url": "https://www.api-ka.com/docs",
3403 + "tag": "/docs",
3404 + "issues": [],
3405 + "data": {
3406 + "viewport": "width=device-width, initial-scale=1.0",
3407 + "overflowPx": 0,
3408 + "overflowEls": [],
3409 + "fixed": [],
3410 + "smallInputs": [],
3411 + "smallTargets": [],
3412 + "dropdownCandidates": [],
3413 + "styleSheets": [
3414 + "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css"
3415 + ]
3416 + },
3417 + "css": {
3418 + "vh100": 0,
3419 + "dvh": 0,
3420 + "svh": 0,
3421 + "safeArea": 0,
3422 + "hoverReveal": [],
3423 + "zMax": 0
3424 + }
3425 + }
3426 + ]
3427 + },
3428 + {
3429 + "site": "job-ka",
3430 + "engine": "android",
3431 + "pages": [
3432 + {
3433 + "url": "https://www.job-ka.com/",
3434 + "tag": "accueil",
3435 + "issues": [
3436 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
3437 + "8 champ(s) <16px (zoom iOS) : input, select, select",
3438 + "2 cible(s) tactile(s) <34px : a.logo.active(63×31), a.gk-badge.gk-badge--dark(150×30)"
3439 + ],
3440 + "data": {
3441 + "viewport": "width=device-width, initial-scale=1.0",
3442 + "overflowPx": 0,
3443 + "overflowEls": [],
3444 + "fixed": [
3445 + {
3446 + "sel": "header.site",
3447 + "pos": "sticky",
3448 + "rect": {
3449 + "t": 0,
3450 + "b": 126,
3451 + "h": 126
3452 + },
3453 + "bottomAnchored": false,
3454 + "z": "50",
3455 + "brokenBy": null,
3456 + "padBottom": "0px",
3457 + "cssBottom": "auto"
3458 + },
3459 + {
3460 + "sel": "button.kaa-btn",
3461 + "pos": "fixed",
3462 + "rect": {
3463 + "t": 763,
3464 + "b": 821,
3465 + "h": 58
3466 + },
3467 + "bottomAnchored": true,
3468 + "z": "2147483000",
3469 + "brokenBy": null,
3470 + "padBottom": "0px",
3471 + "cssBottom": "18px"
3472 + }
3473 + ],
3474 + "bottomBar": {
3475 + "sel": "button.kaa-btn",
3476 + "h": 58,
3477 + "bodyPadBottom": 0,
3478 + "mainPadBottom": 0
3479 + },
3480 + "smallInputs": [
3481 + {
3482 + "sel": "input",
3483 + "fs": 15
3484 + },
3485 + {
3486 + "sel": "select",
3487 + "fs": 15
3488 + },
3489 + {
3490 + "sel": "select",
3491 + "fs": 15
3492 + },
3493 + {
3494 + "sel": "select",
3495 + "fs": 15
3496 + },
3497 + {
3498 + "sel": "select",
3499 + "fs": 15
3500 + },
3501 + {
3502 + "sel": "input",
3503 + "fs": 13.3333
3504 + },
3505 + {
3506 + "sel": "select",
3507 + "fs": 13
3508 + },
3509 + {
3510 + "sel": "textarea",
3511 + "fs": 13.5
3512 + }
3513 + ],
3514 + "smallTargets": [
3515 + {
3516 + "sel": "a.logo.active",
3517 + "w": 63,
3518 + "h": 31,
3519 + "text": "Job·Ka"
3520 + },
3521 + {
3522 + "sel": "a.gk-badge.gk-badge--dark",
3523 + "w": 150,
3524 + "h": 30,
3525 + "text": "Un serviceGroupeKA"
3526 + }
3527 + ],
3528 + "dropdownCandidates": [],
3529 + "styleSheets": [
3530 + "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Space+Grotesk:wght@500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
3531 + "https://www.job-ka.com/assets/index-BG5XH6jv.css"
3532 + ]
3533 + },
3534 + "css": {
3535 + "vh100": 1,
3536 + "dvh": 2,
3537 + "svh": 0,
3538 + "safeArea": 3,
3539 + "hoverReveal": [],
3540 + "zMax": 2147483001
3541 + }
3542 + },
3543 + {
3544 + "url": "https://www.job-ka.com/carte",
3545 + "tag": "/carte",
3546 + "issues": [
3547 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
3548 + "1 champ(s) <16px (zoom iOS) : textarea",
3549 + "2 cible(s) tactile(s) <34px : a.logo(63×31), a.gk-badge.gk-badge--dark(150×30)"
3550 + ],
3551 + "data": {
3552 + "viewport": "width=device-width, initial-scale=1.0",
3553 + "overflowPx": 0,
3554 + "overflowEls": [],
3555 + "fixed": [
3556 + {
3557 + "sel": "header.site",
3558 + "pos": "sticky",
3559 + "rect": {
3560 + "t": 0,
3561 + "b": 126,
3562 + "h": 126
3563 + },
3564 + "bottomAnchored": false,
3565 + "z": "50",
3566 + "brokenBy": null,
3567 + "padBottom": "0px",
3568 + "cssBottom": "auto"
3569 + },
3570 + {
3571 + "sel": "button.kaa-btn",
3572 + "pos": "fixed",
3573 + "rect": {
3574 + "t": 763,
3575 + "b": 821,
3576 + "h": 58
3577 + },
3578 + "bottomAnchored": true,
3579 + "z": "2147483000",
3580 + "brokenBy": null,
3581 + "padBottom": "0px",
3582 + "cssBottom": "18px"
3583 + }
3584 + ],
3585 + "bottomBar": {
3586 + "sel": "button.kaa-btn",
3587 + "h": 58,
3588 + "bodyPadBottom": 0,
3589 + "mainPadBottom": 0
3590 + },
3591 + "smallInputs": [
3592 + {
3593 + "sel": "textarea",
3594 + "fs": 13.5
3595 + }
3596 + ],
3597 + "smallTargets": [
3598 + {
3599 + "sel": "a.logo",
3600 + "w": 63,
3601 + "h": 31,
3602 + "text": "Job·Ka"
3603 + },
3604 + {
3605 + "sel": "a.gk-badge.gk-badge--dark",
3606 + "w": 150,
3607 + "h": 30,
3608 + "text": "Un serviceGroupeKA"
3609 + }
3610 + ],
3611 + "dropdownCandidates": [
3612 + {
3613 + "sel": "details.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact",
3614 + "tag": "details"
3615 + }
3616 + ],
3617 + "styleSheets": [
3618 + "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Space+Grotesk:wght@500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
3619 + "https://www.job-ka.com/assets/index-BG5XH6jv.css",
3620 + "https://www.job-ka.com/assets/MapPage-CuCRB34y.css"
3621 + ]
3622 + },
3623 + "css": {
3624 + "vh100": 1,
3625 + "dvh": 2,
3626 + "svh": 0,
3627 + "safeArea": 3,
3628 + "hoverReveal": [],
3629 + "zMax": 2147483001
3630 + }
3631 + },
3632 + {
3633 + "url": "https://www.job-ka.com/sources",
3634 + "tag": "/sources",
3635 + "issues": [
3636 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
3637 + "1 champ(s) <16px (zoom iOS) : textarea",
3638 + "2 cible(s) tactile(s) <34px : a.logo(63×31), a.gk-badge.gk-badge--dark(150×30)"
3639 + ],
3640 + "data": {
3641 + "viewport": "width=device-width, initial-scale=1.0",
3642 + "overflowPx": 0,
3643 + "overflowEls": [],
3644 + "fixed": [
3645 + {
3646 + "sel": "header.site",
3647 + "pos": "sticky",
3648 + "rect": {
3649 + "t": 0,
3650 + "b": 126,
3651 + "h": 126
3652 + },
3653 + "bottomAnchored": false,
3654 + "z": "50",
3655 + "brokenBy": null,
3656 + "padBottom": "0px",
3657 + "cssBottom": "auto"
3658 + },
3659 + {
3660 + "sel": "button.kaa-btn",
3661 + "pos": "fixed",
3662 + "rect": {
3663 + "t": 1509,
3664 + "b": 1567,
3665 + "h": 58
3666 + },
3667 + "bottomAnchored": true,
3668 + "z": "2147483000",
3669 + "brokenBy": null,
3670 + "padBottom": "0px",
3671 + "cssBottom": "18px"
3672 + }
3673 + ],
3674 + "bottomBar": {
3675 + "sel": "button.kaa-btn",
3676 + "h": 58,
3677 + "bodyPadBottom": 0,
3678 + "mainPadBottom": 0
3679 + },
3680 + "smallInputs": [
3681 + {
3682 + "sel": "textarea",
3683 + "fs": 13.5
3684 + }
3685 + ],
3686 + "smallTargets": [
3687 + {
3688 + "sel": "a.logo",
3689 + "w": 63,
3690 + "h": 31,
3691 + "text": "Job·Ka"
3692 + },
3693 + {
3694 + "sel": "a.gk-badge.gk-badge--dark",
3695 + "w": 150,
3696 + "h": 30,
3697 + "text": "Un serviceGroupeKA"
3698 + }
3699 + ],
3700 + "dropdownCandidates": [],
3701 + "styleSheets": [
3702 + "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Space+Grotesk:wght@500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
3703 + "https://www.job-ka.com/assets/index-BG5XH6jv.css"
3704 + ]
3705 + },
3706 + "css": {
3707 + "vh100": 1,
3708 + "dvh": 2,
3709 + "svh": 0,
3710 + "safeArea": 3,
3711 + "hoverReveal": [],
3712 + "zMax": 2147483001
3713 + }
3714 + }
3715 + ]
3716 + },
3717 + {
3718 + "site": "groupe-ka",
3719 + "engine": "ios",
3720 + "pages": [
3721 + {
3722 + "url": "https://www.groupe-ka.com/",
3723 + "tag": "accueil",
3724 + "issues": [
3725 + "débordement horizontal +141px : div.ticker-inner, span, span.ticker-item, span.ticker-item",
3726 + "2 champ(s) <16px (zoom iOS) : input#gk-menu, textarea"
3727 + ],
3728 + "data": {
3729 + "viewport": "width=device-width, initial-scale=1",
3730 + "overflowPx": 141,
3731 + "overflowEls": [
3732 + {
3733 + "sel": "div.ticker-inner",
3734 + "left": -497,
3735 + "right": 18668,
3736 + "w": 19165
3737 + },
3738 + {
3739 + "sel": "span",
3740 + "left": -497,
3741 + "right": 9085,
3742 + "w": 9582
3743 + },
3744 + {
3745 + "sel": "span.ticker-item",
3746 + "left": -497,
3747 + "right": -116,
3748 + "w": 381
3749 + },
3750 + {
3751 + "sel": "span.ticker-item",
3752 + "left": -116,
3753 + "right": 462,
3754 + "w": 578
3755 + },
3756 + {
3757 + "sel": "span.ticker-item",
3758 + "left": 462,
3759 + "right": 991,
3760 + "w": 529
3761 + },
3762 + {
3763 + "sel": "span.ticker-item",
3764 + "left": 991,
3765 + "right": 1425,
3766 + "w": 434
3767 + },
3768 + {
3769 + "sel": "span.ticker-item",
3770 + "left": 1425,
3771 + "right": 1867,
3772 + "w": 442
3773 + },
3774 + {
3775 + "sel": "span.ticker-item",
3776 + "left": 1867,
3777 + "right": 2439,
3778 + "w": 572
3779 + },
3780 + {
3781 + "sel": "span.ticker-item",
3782 + "left": 2439,
3783 + "right": 2836,
3784 + "w": 397
3785 + },
3786 + {
3787 + "sel": "span.ticker-item",
3788 + "left": 2836,
3789 + "right": 3423,
3790 + "w": 587
3791 + },
3792 + {
3793 + "sel": "span.ticker-item",
3794 + "left": 3423,
3795 + "right": 4038,
3796 + "w": 615
3797 + },
3798 + {
3799 + "sel": "span.ticker-item",
3800 + "left": 4038,
3801 + "right": 4447,
3802 + "w": 409
3803 + }
3804 + ],
3805 + "fixed": [
3806 + {
3807 + "sel": "button.kaa-btn",
3808 + "pos": "fixed",
3809 + "rect": {
3810 + "t": 588,
3811 + "b": 646,
3812 + "h": 58
3813 + },
3814 + "bottomAnchored": true,
3815 + "z": "2147483000",
3816 + "brokenBy": null,
3817 + "padBottom": "0px",
3818 + "cssBottom": "18px"
3819 + }
3820 + ],
3821 + "bottomBar": {
3822 + "sel": "button.kaa-btn",
3823 + "h": 58,
3824 + "bodyPadBottom": 0,
3825 + "mainPadBottom": 64
3826 + },
3827 + "smallInputs": [
3828 + {
3829 + "sel": "input#gk-menu",
3830 + "fs": 15
3831 + },
3832 + {
3833 + "sel": "textarea",
3834 + "fs": 13.5
3835 + }
3836 + ],
3837 + "smallTargets": [],
3838 + "dropdownCandidates": [
3839 + {
3840 + "sel": "label.gk-mono.flex.h-11",
3841 + "tag": "label"
3842 + }
3843 + ],
3844 + "styleSheets": [
3845 + "https://www.groupe-ka.com/_next/static/chunks/32-8xlxw0pm-g.css"
3846 + ]
3847 + },
3848 + "css": {
3849 + "vh100": 0,
3850 + "dvh": 2,
3851 + "svh": 1,
3852 + "safeArea": 2,
3853 + "hoverReveal": [],
3854 + "zMax": 2147483001
3855 + }
3856 + }
3857 + ]
3858 + },
3859 + {
3860 + "site": "trouve-ka",
3861 + "engine": "ios",
3862 + "pages": [
3863 + {
3864 + "url": "https://www.trouve-ka.com/",
3865 + "tag": "accueil",
3866 + "issues": [
3867 + "1 champ(s) <16px (zoom iOS) : textarea"
3868 + ],
3869 + "data": {
3870 + "viewport": "width=device-width, initial-scale=1",
3871 + "overflowPx": 0,
3872 + "overflowEls": [],
3873 + "fixed": [
3874 + {
3875 + "sel": "header.sticky.top-0.z-40",
3876 + "pos": "sticky",
3877 + "rect": {
3878 + "t": 0,
3879 + "b": 57,
3880 + "h": 57
3881 + },
3882 + "bottomAnchored": false,
3883 + "z": "40",
3884 + "brokenBy": null,
3885 + "padBottom": "0px",
3886 + "cssBottom": "auto"
3887 + },
3888 + {
3889 + "sel": "button.kaa-btn",
3890 + "pos": "fixed",
3891 + "rect": {
3892 + "t": 588,
3893 + "b": 646,
3894 + "h": 58
3895 + },
3896 + "bottomAnchored": true,
3897 + "z": "2147483000",
3898 + "brokenBy": null,
3899 + "padBottom": "0px",
3900 + "cssBottom": "18px"
3901 + }
3902 + ],
3903 + "bottomBar": {
3904 + "sel": "button.kaa-btn",
3905 + "h": 58,
3906 + "bodyPadBottom": 0,
3907 + "mainPadBottom": 56
3908 + },
3909 + "smallInputs": [
3910 + {
3911 + "sel": "textarea",
3912 + "fs": 13.5
3913 + }
3914 + ],
3915 + "smallTargets": [],
3916 + "dropdownCandidates": [],
3917 + "styleSheets": [
3918 + "https://www.trouve-ka.com/_next/static/css/32d504446087a2a3.css"
3919 + ]
3920 + },
3921 + "css": {
3922 + "vh100": 1,
3923 + "dvh": 2,
3924 + "svh": 0,
3925 + "safeArea": 3,
3926 + "hoverReveal": [],
3927 + "zMax": 2147483001
3928 + }
3929 + }
3930 + ]
3931 + },
3932 + {
3933 + "site": "lou-ka",
3934 + "engine": "ios",
3935 + "pages": [
3936 + {
3937 + "url": "https://www.lou-ka.com/",
3938 + "tag": "accueil",
3939 + "issues": [
3940 + "6 champ(s) <16px (zoom iOS) : input#f-q, select, select",
3941 + "1 cible(s) tactile(s) <34px : a.brand.active(124×30)"
3942 + ],
3943 + "data": {
3944 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
3945 + "overflowPx": 0,
3946 + "overflowEls": [],
3947 + "fixed": [
3948 + {
3949 + "sel": "header.header",
3950 + "pos": "sticky",
3951 + "rect": {
3952 + "t": 0,
3953 + "b": 59,
3954 + "h": 59
3955 + },
3956 + "bottomAnchored": false,
3957 + "z": "50",
3958 + "brokenBy": null,
3959 + "padBottom": "0px",
3960 + "cssBottom": "auto"
3961 + },
3962 + {
3963 + "sel": "button.fab",
3964 + "pos": "fixed",
3965 + "rect": {
3966 + "t": 270,
3967 + "b": 317,
3968 + "h": 48
3969 + },
3970 + "bottomAnchored": false,
3971 + "z": "80",
3972 + "brokenBy": null,
3973 + "padBottom": "13px",
3974 + "cssBottom": "346.5625px"
3975 + },
3976 + {
3977 + "sel": "nav.tabbar",
3978 + "pos": "fixed",
3979 + "rect": {
3980 + "t": 601,
3981 + "b": 664,
3982 + "h": 63
3983 + },
3984 + "bottomAnchored": true,
3985 + "z": "85",
3986 + "brokenBy": null,
3987 + "padBottom": "6px",
3988 + "cssBottom": "0px"
3989 + },
3990 + {
3991 + "sel": "div.cookie-banner",
3992 + "pos": "fixed",
3993 + "rect": {
3994 + "t": 391,
3995 + "b": 652,
3996 + "h": 261
3997 + },
3998 + "bottomAnchored": true,
3999 + "z": "80",
4000 + "brokenBy": null,
4001 + "padBottom": "0px",
4002 + "cssBottom": "12px"
4003 + },
4004 + {
4005 + "sel": "button.kaa-btn",
4006 + "pos": "fixed",
4007 + "rect": {
4008 + "t": 588,
4009 + "b": 646,
4010 + "h": 58
4011 + },
4012 + "bottomAnchored": true,
4013 + "z": "2147483000",
4014 + "brokenBy": null,
4015 + "padBottom": "0px",
4016 + "cssBottom": "18px"
4017 + }
4018 + ],
4019 + "bottomBar": {
4020 + "sel": "nav.tabbar",
4021 + "h": 63,
4022 + "bodyPadBottom": 64,
4023 + "mainPadBottom": 0
4024 + },
4025 + "smallInputs": [
4026 + {
4027 + "sel": "input#f-q",
4028 + "fs": 14
4029 + },
4030 + {
4031 + "sel": "select",
4032 + "fs": 14.5
4033 + },
4034 + {
4035 + "sel": "select",
4036 + "fs": 14.5
4037 + },
4038 + {
4039 + "sel": "select",
4040 + "fs": 14.5
4041 + },
4042 + {
4043 + "sel": "select",
4044 + "fs": 14.5
4045 + },
4046 + {
4047 + "sel": "textarea",
4048 + "fs": 13.5
4049 + }
4050 + ],
4051 + "smallTargets": [
4052 + {
4053 + "sel": "a.brand.active",
4054 + "w": 124,
4055 + "h": 30,
4056 + "text": "Lou-KaLa porte d'ent"
4057 + }
4058 + ],
4059 + "dropdownCandidates": [],
4060 + "styleSheets": [
4061 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
4062 + "https://www.lou-ka.com/assets/index-CQHhYl_0.css"
4063 + ]
4064 + },
4065 + "css": {
4066 + "vh100": 0,
4067 + "dvh": 7,
4068 + "svh": 0,
4069 + "safeArea": 15,
4070 + "hoverReveal": [],
4071 + "zMax": 2147483001
4072 + }
4073 + }
4074 + ]
4075 + },
4076 + {
4077 + "site": "immo-ka",
4078 + "engine": "ios",
4079 + "pages": [
4080 + {
4081 + "url": "https://www.immo-ka.com/",
4082 + "tag": "accueil",
4083 + "issues": [
4084 + "pas de compensation padding sous la barre basse [button.fab] h=48px (body 0px / main 0px)",
4085 + "2 champ(s) <16px (zoom iOS) : select, textarea",
4086 + "3 cible(s) tactile(s) <34px : a.brand.active(92×27), a.ka-signup(99×17), a.gk-badge(166×30)",
4087 + "menu ouvert SANS blocage du scroll d'arrière-plan"
4088 + ],
4089 + "data": {
4090 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
4091 + "overflowPx": 0,
4092 + "overflowEls": [],
4093 + "fixed": [
4094 + {
4095 + "sel": "header.header",
4096 + "pos": "sticky",
4097 + "rect": {
4098 + "t": 0,
4099 + "b": 58,
4100 + "h": 58
4101 + },
4102 + "bottomAnchored": false,
4103 + "z": "50",
4104 + "brokenBy": null,
4105 + "padBottom": "0px",
4106 + "cssBottom": "auto"
4107 + },
4108 + {
4109 + "sel": "button.fab",
4110 + "pos": "fixed",
4111 + "rect": {
4112 + "t": 598,
4113 + "b": 646,
4114 + "h": 48
4115 + },
4116 + "bottomAnchored": true,
4117 + "z": "80",
4118 + "brokenBy": null,
4119 + "padBottom": "13px",
4120 + "cssBottom": "18px"
4121 + },
4122 + {
4123 + "sel": "button.kaa-btn",
4124 + "pos": "fixed",
4125 + "rect": {
4126 + "t": 518,
4127 + "b": 576,
4128 + "h": 58
4129 + },
4130 + "bottomAnchored": true,
4131 + "z": "2147483000",
4132 + "brokenBy": null,
4133 + "padBottom": "0px",
4134 + "cssBottom": "88px"
4135 + }
4136 + ],
4137 + "bottomBar": {
4138 + "sel": "button.fab",
4139 + "h": 48,
4140 + "bodyPadBottom": 0,
4141 + "mainPadBottom": 0
4142 + },
4143 + "smallInputs": [
4144 + {
4145 + "sel": "select",
4146 + "fs": 12
4147 + },
4148 + {
4149 + "sel": "textarea",
4150 + "fs": 13.5
4151 + }
4152 + ],
4153 + "smallTargets": [
4154 + {
4155 + "sel": "a.brand.active",
4156 + "w": 92,
4157 + "h": 27,
4158 + "text": "ImmoKa"
4159 + },
4160 + {
4161 + "sel": "a.ka-signup",
4162 + "w": 99,
4163 + "h": 17,
4164 + "text": "Créer un compte"
4165 + },
4166 + {
4167 + "sel": "a.gk-badge",
4168 + "w": 166,
4169 + "h": 30,
4170 + "text": "Un serviceGroupeKA"
4171 + }
4172 + ],
4173 + "dropdownCandidates": [],
4174 + "styleSheets": [
4175 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
4176 + "https://www.immo-ka.com/assets/index-GVlL0Z3K.css"
4177 + ]
4178 + },
4179 + "css": {
4180 + "vh100": 0,
4181 + "dvh": 5,
4182 + "svh": 0,
4183 + "safeArea": 8,
4184 + "hoverReveal": [],
4185 + "zMax": 2147483001
4186 + }
4187 + }
4188 + ]
4189 + },
4190 + {
4191 + "site": "vrai-prix",
4192 + "engine": "ios",
4193 + "pages": [
4194 + {
4195 + "url": "https://www.vrai-prix.com/",
4196 + "tag": "accueil",
4197 + "issues": [
4198 + "2 champ(s) <16px (zoom iOS) : input#vp-menu, textarea",
4199 + "1 cible(s) tactile(s) <34px : a.vp-display.group.flex(92×28)"
4200 + ],
4201 + "data": {
4202 + "viewport": "width=device-width, initial-scale=1",
4203 + "overflowPx": 0,
4204 + "overflowEls": [],
4205 + "fixed": [
4206 + {
4207 + "sel": "button.kaa-btn",
4208 + "pos": "fixed",
4209 + "rect": {
4210 + "t": 588,
4211 + "b": 646,
4212 + "h": 58
4213 + },
4214 + "bottomAnchored": true,
4215 + "z": "2147483000",
4216 + "brokenBy": null,
4217 + "padBottom": "0px",
4218 + "cssBottom": "18px"
4219 + }
4220 + ],
4221 + "bottomBar": {
4222 + "sel": "button.kaa-btn",
4223 + "h": 58,
4224 + "bodyPadBottom": 0,
4225 + "mainPadBottom": 64
4226 + },
4227 + "smallInputs": [
4228 + {
4229 + "sel": "input#vp-menu",
4230 + "fs": 15
4231 + },
4232 + {
4233 + "sel": "textarea",
4234 + "fs": 13.5
4235 + }
4236 + ],
4237 + "smallTargets": [
4238 + {
4239 + "sel": "a.vp-display.group.flex",
4240 + "w": 92,
4241 + "h": 28,
4242 + "text": "VraiPrix"
4243 + }
4244 + ],
4245 + "dropdownCandidates": [],
4246 + "styleSheets": [
4247 + "https://www.vrai-prix.com/_next/static/chunks/3lolbwhnol3ir.css"
4248 + ]
4249 + },
4250 + "css": {
4251 + "vh100": 0,
4252 + "dvh": 4,
4253 + "svh": 1,
4254 + "safeArea": 6,
4255 + "hoverReveal": [],
4256 + "zMax": 2147483001
4257 + }
4258 + }
4259 + ]
4260 + },
4261 + {
4262 + "site": "auto-ka",
4263 + "engine": "ios",
4264 + "pages": [
4265 + {
4266 + "url": "https://www.auto-ka.com/",
4267 + "tag": "accueil",
4268 + "issues": [
4269 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
4270 + "2 champ(s) <16px (zoom iOS) : select#f-sort, textarea",
4271 + "1 cible(s) tactile(s) <34px : a.brand.active(89×28)"
4272 + ],
4273 + "data": {
4274 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
4275 + "overflowPx": 0,
4276 + "overflowEls": [],
4277 + "fixed": [
4278 + {
4279 + "sel": "header.header",
4280 + "pos": "sticky",
4281 + "rect": {
4282 + "t": 0,
4283 + "b": 66,
4284 + "h": 66
4285 + },
4286 + "bottomAnchored": false,
4287 + "z": "50",
4288 + "brokenBy": null,
4289 + "padBottom": "0px",
4290 + "cssBottom": "auto"
4291 + },
4292 + {
4293 + "sel": "button.kaa-btn",
4294 + "pos": "fixed",
4295 + "rect": {
4296 + "t": 588,
4297 + "b": 646,
4298 + "h": 58
4299 + },
4300 + "bottomAnchored": true,
4301 + "z": "2147483000",
4302 + "brokenBy": null,
4303 + "padBottom": "0px",
4304 + "cssBottom": "18px"
4305 + }
4306 + ],
4307 + "bottomBar": {
4308 + "sel": "button.kaa-btn",
4309 + "h": 58,
4310 + "bodyPadBottom": 0,
4311 + "mainPadBottom": 0
4312 + },
4313 + "smallInputs": [
4314 + {
4315 + "sel": "select#f-sort",
4316 + "fs": 13.5
4317 + },
4318 + {
4319 + "sel": "textarea",
4320 + "fs": 13.5
4321 + }
4322 + ],
4323 + "smallTargets": [
4324 + {
4325 + "sel": "a.brand.active",
4326 + "w": 89,
4327 + "h": 28,
4328 + "text": "AutoKaVoitures usagé"
4329 + }
4330 + ],
4331 + "dropdownCandidates": [],
4332 + "styleSheets": [
4333 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
4334 + "https://www.auto-ka.com/assets/index-L7B7KA-g.css"
4335 + ]
4336 + },
4337 + "css": {
4338 + "vh100": 0,
4339 + "dvh": 2,
4340 + "svh": 0,
4341 + "safeArea": 3,
4342 + "hoverReveal": [],
4343 + "zMax": 2147483001
4344 + }
4345 + }
4346 + ]
4347 + },
4348 + {
4349 + "site": "fabri-ka",
4350 + "engine": "ios",
4351 + "pages": [
4352 + {
4353 + "url": "https://www.fabri-ka.com/",
4354 + "tag": "accueil",
4355 + "issues": [
4356 + "pas de compensation padding sous la barre basse [nav.bottom-nav] h=58px (body 0px / main 0px)",
4357 + "2 champ(s) <16px (zoom iOS) : input#header-search-input, textarea",
4358 + "1 cible(s) tactile(s) <34px : a.logo(98×29)"
4359 + ],
4360 + "data": {
4361 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
4362 + "overflowPx": 0,
4363 + "overflowEls": [],
4364 + "fixed": [
4365 + {
4366 + "sel": "header.site-header",
4367 + "pos": "sticky",
4368 + "rect": {
4369 + "t": 0,
4370 + "b": 58,
4371 + "h": 58
4372 + },
4373 + "bottomAnchored": false,
4374 + "z": "60",
4375 + "brokenBy": null,
4376 + "padBottom": "0px",
4377 + "cssBottom": "auto"
4378 + },
4379 + {
4380 + "sel": "nav.bottom-nav",
4381 + "pos": "fixed",
4382 + "rect": {
4383 + "t": 606,
4384 + "b": 664,
4385 + "h": 58
4386 + },
4387 + "bottomAnchored": true,
4388 + "z": "70",
4389 + "brokenBy": null,
4390 + "padBottom": "0px",
4391 + "cssBottom": "0px"
4392 + },
4393 + {
4394 + "sel": "button.kaa-btn",
4395 + "pos": "fixed",
4396 + "rect": {
4397 + "t": 588,
4398 + "b": 646,
4399 + "h": 58
4400 + },
4401 + "bottomAnchored": true,
4402 + "z": "2147483000",
4403 + "brokenBy": null,
4404 + "padBottom": "0px",
4405 + "cssBottom": "18px"
4406 + }
4407 + ],
4408 + "bottomBar": {
4409 + "sel": "nav.bottom-nav",
4410 + "h": 58,
4411 + "bodyPadBottom": 0,
4412 + "mainPadBottom": 0
4413 + },
4414 + "smallInputs": [
4415 + {
4416 + "sel": "input#header-search-input",
4417 + "fs": 14.4
4418 + },
4419 + {
4420 + "sel": "textarea",
4421 + "fs": 13.5
4422 + }
4423 + ],
4424 + "smallTargets": [
4425 + {
4426 + "sel": "a.logo",
4427 + "w": 98,
4428 + "h": 29,
4429 + "text": "Fabri·Ka"
4430 + }
4431 + ],
4432 + "dropdownCandidates": [],
4433 + "styleSheets": [
4434 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap",
4435 + "https://www.fabri-ka.com/assets/index-CixgUAZQ.css"
4436 + ]
4437 + },
4438 + "css": {
4439 + "vh100": 2,
4440 + "dvh": 4,
4441 + "svh": 0,
4442 + "safeArea": 4,
4443 + "hoverReveal": [],
4444 + "zMax": 2147483001
4445 + }
4446 + }
4447 + ]
4448 + },
4449 + {
4450 + "site": "food-ka",
4451 + "engine": "ios",
4452 + "pages": [
4453 + {
4454 + "url": "https://www.food-ka.com/",
4455 + "tag": "accueil",
4456 + "issues": [
4457 + "pas de compensation padding sous la barre basse [button.fab] h=48px (body 0px / main 0px)",
4458 + "6 champ(s) <16px (zoom iOS) : input#f-q, select, select",
4459 + "2 cible(s) tactile(s) <34px : a.brand.active(121×27), a.gk-badge(166×30)"
4460 + ],
4461 + "data": {
4462 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
4463 + "overflowPx": 0,
4464 + "overflowEls": [],
4465 + "fixed": [
4466 + {
4467 + "sel": "header.header",
4468 + "pos": "sticky",
4469 + "rect": {
4470 + "t": 0,
4471 + "b": 58,
4472 + "h": 58
4473 + },
4474 + "bottomAnchored": false,
4475 + "z": "50",
4476 + "brokenBy": null,
4477 + "padBottom": "0px",
4478 + "cssBottom": "auto"
4479 + },
4480 + {
4481 + "sel": "button.fab",
4482 + "pos": "fixed",
4483 + "rect": {
4484 + "t": 598,
4485 + "b": 646,
4486 + "h": 48
4487 + },
4488 + "bottomAnchored": true,
4489 + "z": "80",
4490 + "brokenBy": null,
4491 + "padBottom": "13px",
4492 + "cssBottom": "18px"
4493 + },
4494 + {
4495 + "sel": "div.cookie-banner",
4496 + "pos": "fixed",
4497 + "rect": {
4498 + "t": 388,
4499 + "b": 652,
4500 + "h": 264
4501 + },
4502 + "bottomAnchored": true,
4503 + "z": "80",
4504 + "brokenBy": null,
4505 + "padBottom": "0px",
4506 + "cssBottom": "12px"
4507 + },
4508 + {
4509 + "sel": "button.kaa-btn",
4510 + "pos": "fixed",
4511 + "rect": {
4512 + "t": 588,
4513 + "b": 646,
4514 + "h": 58
4515 + },
4516 + "bottomAnchored": true,
4517 + "z": "2147483000",
4518 + "brokenBy": null,
4519 + "padBottom": "0px",
4520 + "cssBottom": "18px"
4521 + }
4522 + ],
4523 + "bottomBar": {
4524 + "sel": "button.fab",
4525 + "h": 48,
4526 + "bodyPadBottom": 0,
4527 + "mainPadBottom": 0
4528 + },
4529 + "smallInputs": [
4530 + {
4531 + "sel": "input#f-q",
4532 + "fs": 15
4533 + },
4534 + {
4535 + "sel": "select",
4536 + "fs": 14.5
4537 + },
4538 + {
4539 + "sel": "select",
4540 + "fs": 14.5
4541 + },
4542 + {
4543 + "sel": "select",
4544 + "fs": 14.5
4545 + },
4546 + {
4547 + "sel": "select",
4548 + "fs": 14.5
4549 + },
4550 + {
4551 + "sel": "textarea",
4552 + "fs": 13.5
4553 + }
4554 + ],
4555 + "smallTargets": [
4556 + {
4557 + "sel": "a.brand.active",
4558 + "w": 121,
4559 + "h": 27,
4560 + "text": "FoodKaÉpicerie — tou"
4561 + },
4562 + {
4563 + "sel": "a.gk-badge",
4564 + "w": 166,
4565 + "h": 30,
4566 + "text": "Un serviceGroupeKA"
4567 + }
4568 + ],
4569 + "dropdownCandidates": [],
4570 + "styleSheets": [
4571 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
4572 + "https://www.food-ka.com/assets/index-D17kJdwk.css"
4573 + ]
4574 + },
4575 + "css": {
4576 + "vh100": 0,
4577 + "dvh": 3,
4578 + "svh": 0,
4579 + "safeArea": 8,
4580 + "hoverReveal": [],
4581 + "zMax": 2147483001
4582 + }
4583 + }
4584 + ]
4585 + },
4586 + {
4587 + "site": "resto-ka",
4588 + "engine": "ios",
4589 + "pages": [
4590 + {
4591 + "url": "https://www.resto-ka.com/",
4592 + "tag": "accueil",
4593 + "issues": [
4594 + "1 champ(s) <16px (zoom iOS) : textarea",
4595 + "2 cible(s) tactile(s) <34px : a.brand.active(138×30), a.gk-badge(166×30)"
4596 + ],
4597 + "data": {
4598 + "viewport": "width=device-width, initial-scale=1.0, viewport-fit=cover",
4599 + "overflowPx": 0,
4600 + "overflowEls": [],
4601 + "fixed": [
4602 + {
4603 + "sel": "header.header",
4604 + "pos": "sticky",
4605 + "rect": {
4606 + "t": 0,
4607 + "b": 59,
4608 + "h": 59
4609 + },
4610 + "bottomAnchored": false,
4611 + "z": "50",
4612 + "brokenBy": null,
4613 + "padBottom": "0px",
4614 + "cssBottom": "auto"
4615 + },
4616 + {
4617 + "sel": "button.fab",
4618 + "pos": "fixed",
4619 + "rect": {
4620 + "t": 542,
4621 + "b": 590,
4622 + "h": 48
4623 + },
4624 + "bottomAnchored": true,
4625 + "z": "80",
4626 + "brokenBy": null,
4627 + "padBottom": "13px",
4628 + "cssBottom": "74px"
4629 + },
4630 + {
4631 + "sel": "nav.tabbar.tabbar-3",
4632 + "pos": "fixed",
4633 + "rect": {
4634 + "t": 602,
4635 + "b": 664,
4636 + "h": 62
4637 + },
4638 + "bottomAnchored": true,
4639 + "z": "85",
4640 + "brokenBy": null,
4641 + "padBottom": "6px",
4642 + "cssBottom": "0px"
4643 + },
4644 + {
4645 + "sel": "button.kaa-btn",
4646 + "pos": "fixed",
4647 + "rect": {
4648 + "t": 588,
4649 + "b": 646,
4650 + "h": 58
4651 + },
4652 + "bottomAnchored": true,
4653 + "z": "2147483000",
4654 + "brokenBy": null,
4655 + "padBottom": "0px",
4656 + "cssBottom": "18px"
4657 + }
4658 + ],
4659 + "bottomBar": {
4660 + "sel": "button.fab",
4661 + "h": 48,
4662 + "bodyPadBottom": 64,
4663 + "mainPadBottom": 0
4664 + },
4665 + "smallInputs": [
4666 + {
4667 + "sel": "textarea",
4668 + "fs": 13.5
4669 + }
4670 + ],
4671 + "smallTargets": [
4672 + {
4673 + "sel": "a.brand.active",
4674 + "w": 138,
4675 + "h": 30,
4676 + "text": "Resto-KaChaque resto"
4677 + },
4678 + {
4679 + "sel": "a.gk-badge",
4680 + "w": 166,
4681 + "h": 30,
4682 + "text": "Un serviceGroupeKA"
4683 + }
4684 + ],
4685 + "dropdownCandidates": [],
4686 + "styleSheets": [
4687 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
4688 + "https://www.resto-ka.com/assets/index-CTEArry7.css"
4689 + ]
4690 + },
4691 + "css": {
4692 + "vh100": 0,
4693 + "dvh": 3,
4694 + "svh": 0,
4695 + "safeArea": 9,
4696 + "hoverReveal": [],
4697 + "zMax": 2147483001
4698 + }
4699 + }
4700 + ]
4701 + },
4702 + {
4703 + "site": "sorti-ka",
4704 + "engine": "ios",
4705 + "pages": [
4706 + {
4707 + "url": "https://www.sorti-ka.com/",
4708 + "tag": "accueil",
4709 + "issues": [
4710 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
4711 + "6 champ(s) <16px (zoom iOS) : input#q, select#region, select#period",
4712 + "2 cible(s) tactile(s) <34px : a.brand(98×26), a.gk-badge(166×30)"
4713 + ],
4714 + "data": {
4715 + "viewport": "width=device-width, initial-scale=1",
4716 + "overflowPx": 0,
4717 + "overflowEls": [],
4718 + "fixed": [
4719 + {
4720 + "sel": "header.header",
4721 + "pos": "sticky",
4722 + "rect": {
4723 + "t": 31,
4724 + "b": 178,
4725 + "h": 147
4726 + },
4727 + "bottomAnchored": false,
4728 + "z": "50",
4729 + "brokenBy": null,
4730 + "padBottom": "0px",
4731 + "cssBottom": "auto"
4732 + },
4733 + {
4734 + "sel": "button.kaa-btn",
4735 + "pos": "fixed",
4736 + "rect": {
4737 + "t": 588,
4738 + "b": 646,
4739 + "h": 58
4740 + },
4741 + "bottomAnchored": true,
4742 + "z": "2147483000",
4743 + "brokenBy": null,
4744 + "padBottom": "0px",
4745 + "cssBottom": "18px"
4746 + }
4747 + ],
4748 + "bottomBar": {
4749 + "sel": "button.kaa-btn",
4750 + "h": 58,
4751 + "bodyPadBottom": 0,
4752 + "mainPadBottom": 0
4753 + },
4754 + "smallInputs": [
4755 + {
4756 + "sel": "input#q",
4757 + "fs": 14
4758 + },
4759 + {
4760 + "sel": "select#region",
4761 + "fs": 13.5
4762 + },
4763 + {
4764 + "sel": "select#period",
4765 + "fs": 13.5
4766 + },
4767 + {
4768 + "sel": "input#st-from",
4769 + "fs": 13
4770 + },
4771 + {
4772 + "sel": "input#st-to",
4773 + "fs": 13
4774 + },
4775 + {
4776 + "sel": "textarea",
4777 + "fs": 13.5
4778 + }
4779 + ],
4780 + "smallTargets": [
4781 + {
4782 + "sel": "a.brand",
4783 + "w": 98,
4784 + "h": 26,
4785 + "text": "Sorti·Ka"
4786 + },
4787 + {
4788 + "sel": "a.gk-badge",
4789 + "w": 166,
4790 + "h": 30,
4791 + "text": "Un service GroupeKA"
4792 + }
4793 + ],
4794 + "dropdownCandidates": [],
4795 + "styleSheets": [
4796 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
4797 + "https://www.sorti-ka.com/src/ka/tokens.css"
4798 + ]
4799 + },
4800 + "css": {
4801 + "vh100": 0,
4802 + "dvh": 2,
4803 + "svh": 0,
4804 + "safeArea": 3,
4805 + "hoverReveal": [],
4806 + "zMax": 2147483001
4807 + }
4808 + }
4809 + ]
4810 + },
4811 + {
4812 + "site": "crea-ka",
4813 + "engine": "ios",
4814 + "pages": [
4815 + {
4816 + "url": "https://www.crea-ka.com/",
4817 + "tag": "accueil",
4818 + "issues": [
4819 + "1 champ(s) <16px (zoom iOS) : textarea",
4820 + "1 cible(s) tactile(s) <34px : a.brand(112×26)"
4821 + ],
4822 + "data": {
4823 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
4824 + "overflowPx": 0,
4825 + "overflowEls": [],
4826 + "fixed": [
4827 + {
4828 + "sel": "header.header",
4829 + "pos": "sticky",
4830 + "rect": {
4831 + "t": 0,
4832 + "b": 65,
4833 + "h": 65
4834 + },
4835 + "bottomAnchored": false,
4836 + "z": "50",
4837 + "brokenBy": null,
4838 + "padBottom": "0px",
4839 + "cssBottom": "auto"
4840 + },
4841 + {
4842 + "sel": "div#annuaire",
4843 + "pos": "sticky",
4844 + "rect": {
4845 + "t": 901,
4846 + "b": 1035,
4847 + "h": 134
4848 + },
4849 + "bottomAnchored": false,
4850 + "z": "40",
4851 + "brokenBy": null,
4852 + "padBottom": "12px",
4853 + "cssBottom": "auto"
4854 + },
4855 + {
4856 + "sel": "nav.tabbar",
4857 + "pos": "fixed",
4858 + "rect": {
4859 + "t": 603,
4860 + "b": 664,
4861 + "h": 61
4862 + },
4863 + "bottomAnchored": true,
4864 + "z": "85",
4865 + "brokenBy": null,
4866 + "padBottom": "6px",
4867 + "cssBottom": "0px"
4868 + },
4869 + {
4870 + "sel": "button.kaa-btn",
4871 + "pos": "fixed",
4872 + "rect": {
4873 + "t": 588,
4874 + "b": 646,
4875 + "h": 58
4876 + },
4877 + "bottomAnchored": true,
4878 + "z": "2147483000",
4879 + "brokenBy": null,
4880 + "padBottom": "0px",
4881 + "cssBottom": "18px"
4882 + }
4883 + ],
4884 + "bottomBar": {
4885 + "sel": "nav.tabbar",
4886 + "h": 61,
4887 + "bodyPadBottom": 64,
4888 + "mainPadBottom": 0
4889 + },
4890 + "smallInputs": [
4891 + {
4892 + "sel": "textarea",
4893 + "fs": 13.5
4894 + }
4895 + ],
4896 + "smallTargets": [
4897 + {
4898 + "sel": "a.brand",
4899 + "w": 112,
4900 + "h": 26,
4901 + "text": "CréaKa"
4902 + }
4903 + ],
4904 + "dropdownCandidates": [],
4905 + "styleSheets": [
4906 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap"
4907 + ]
4908 + },
4909 + "css": {
4910 + "vh100": 0,
4911 + "dvh": 2,
4912 + "svh": 0,
4913 + "safeArea": 6,
4914 + "hoverReveal": [],
4915 + "zMax": 2147483001
4916 + }
4917 + }
4918 + ]
4919 + },
4920 + {
4921 + "site": "api-ka",
4922 + "engine": "ios",
4923 + "pages": [
4924 + {
4925 + "url": "https://www.api-ka.com/",
4926 + "tag": "accueil",
4927 + "issues": [
4928 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
4929 + "5 champ(s) <16px (zoom iOS) : select#pg-ep, select#pgf-service, input#pgf-page"
4930 + ],
4931 + "data": {
4932 + "viewport": "width=device-width, initial-scale=1, viewport-fit=cover",
4933 + "overflowPx": 0,
4934 + "overflowEls": [],
4935 + "fixed": [
4936 + {
4937 + "sel": "div.topbar",
4938 + "pos": "sticky",
4939 + "rect": {
4940 + "t": 0,
4941 + "b": 177,
4942 + "h": 177
4943 + },
4944 + "bottomAnchored": false,
4945 + "z": "60",
4946 + "brokenBy": null,
4947 + "padBottom": "0px",
4948 + "cssBottom": "auto"
4949 + },
4950 + {
4951 + "sel": "button.kaa-btn",
4952 + "pos": "fixed",
4953 + "rect": {
4954 + "t": 588,
4955 + "b": 646,
4956 + "h": 58
4957 + },
4958 + "bottomAnchored": true,
4959 + "z": "2147483000",
4960 + "brokenBy": null,
4961 + "padBottom": "0px",
4962 + "cssBottom": "18px"
4963 + }
4964 + ],
4965 + "bottomBar": {
4966 + "sel": "button.kaa-btn",
4967 + "h": 58,
4968 + "bodyPadBottom": 0,
4969 + "mainPadBottom": 0
4970 + },
4971 + "smallInputs": [
4972 + {
4973 + "sel": "select#pg-ep",
4974 + "fs": 13
4975 + },
4976 + {
4977 + "sel": "select#pgf-service",
4978 + "fs": 13
4979 + },
4980 + {
4981 + "sel": "input#pgf-page",
4982 + "fs": 13
4983 + },
4984 + {
4985 + "sel": "input#pgf-limit",
4986 + "fs": 13
4987 + },
4988 + {
4989 + "sel": "textarea",
4990 + "fs": 13.5
4991 + }
4992 + ],
4993 + "smallTargets": [],
4994 + "dropdownCandidates": [],
4995 + "styleSheets": [
4996 + "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap",
4997 + "https://www.api-ka.com/ka/tokens.css"
4998 + ]
4999 + },
5000 + "css": {
5001 + "vh100": 0,
5002 + "dvh": 2,
5003 + "svh": 0,
5004 + "safeArea": 3,
5005 + "hoverReveal": [],
5006 + "zMax": 2147483001
5007 + }
5008 + }
5009 + ]
5010 + },
5011 + {
5012 + "site": "job-ka",
5013 + "engine": "ios",
5014 + "pages": [
5015 + {
5016 + "url": "https://www.job-ka.com/",
5017 + "tag": "accueil",
5018 + "issues": [
5019 + "pas de compensation padding sous la barre basse [button.kaa-btn] h=58px (body 0px / main 0px)",
5020 + "8 champ(s) <16px (zoom iOS) : input, select, select",
5021 + "2 cible(s) tactile(s) <34px : a.logo.active(63×31), a.gk-badge.gk-badge--dark(150×30)"
5022 + ],
5023 + "data": {
5024 + "viewport": "width=device-width, initial-scale=1.0",
5025 + "overflowPx": 0,
5026 + "overflowEls": [],
5027 + "fixed": [
5028 + {
5029 + "sel": "header.site",
5030 + "pos": "sticky",
5031 + "rect": {
5032 + "t": 0,
5033 + "b": 126,
5034 + "h": 126
5035 + },
5036 + "bottomAnchored": false,
5037 + "z": "50",
5038 + "brokenBy": null,
5039 + "padBottom": "0px",
5040 + "cssBottom": "auto"
5041 + },
5042 + {
5043 + "sel": "button.kaa-btn",
5044 + "pos": "fixed",
5045 + "rect": {
5046 + "t": 588,
5047 + "b": 646,
5048 + "h": 58
5049 + },
5050 + "bottomAnchored": true,
5051 + "z": "2147483000",
5052 + "brokenBy": null,
5053 + "padBottom": "0px",
5054 + "cssBottom": "18px"
5055 + }
5056 + ],
5057 + "bottomBar": {
5058 + "sel": "button.kaa-btn",
5059 + "h": 58,
5060 + "bodyPadBottom": 0,
5061 + "mainPadBottom": 0
5062 + },
5063 + "smallInputs": [
5064 + {
5065 + "sel": "input",
5066 + "fs": 15
5067 + },
5068 + {
5069 + "sel": "select",
5070 + "fs": 15
5071 + },
5072 + {
5073 + "sel": "select",
5074 + "fs": 15
5075 + },
5076 + {
5077 + "sel": "select",
5078 + "fs": 15
5079 + },
5080 + {
5081 + "sel": "select",
5082 + "fs": 15
5083 + },
5084 + {
5085 + "sel": "input",
5086 + "fs": 11
5087 + },
5088 + {
5089 + "sel": "select",
5090 + "fs": 13
5091 + },
5092 + {
5093 + "sel": "textarea",
5094 + "fs": 13.5
5095 + }
5096 + ],
5097 + "smallTargets": [
5098 + {
5099 + "sel": "a.logo.active",
5100 + "w": 63,
5101 + "h": 31,
5102 + "text": "Job·Ka"
5103 + },
5104 + {
5105 + "sel": "a.gk-badge.gk-badge--dark",
5106 + "w": 150,
5107 + "h": 30,
5108 + "text": "Un serviceGroupeKA"
5109 + }
5110 + ],
5111 + "dropdownCandidates": [],
5112 + "styleSheets": [
5113 + "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Space+Grotesk:wght@500;600;700&family=JetBrains+Mono:wght@500;700&display=swap",
5114 + "https://www.job-ka.com/assets/index-BG5XH6jv.css"
5115 + ]
5116 + },
5117 + "css": {
5118 + "vh100": 1,
5119 + "dvh": 2,
5120 + "svh": 0,
5121 + "safeArea": 3,
5122 + "hoverReveal": [],
5123 + "zMax": 2147483001
5124 + }
5125 + }
5126 + ]
5127 + }
5128 +]
\ No newline at end of file
added mobile-audit.mjs +323 −0
@@ -0,0 +1,323 @@
1 +// Auteur : Simon-Pierre Boucher — contact@spboucher.ai
2 +// ka-ui/mobile-audit.mjs — audit mobile approfondi des 13 sites Groupe KA.
3 +// Usage : cd ~/Desktop/ka-ui && node mobile-audit.mjs [site…]
4 +// Pour chaque site (chromium mobile 390×844 + webkit iPhone) :
5 +// - meta viewport, débordement horizontal (+ éléments fautifs)
6 +// - inventaire des éléments fixed/sticky : ancrage bas, ancêtre transform/filter
7 +// (casse le fixed), safe-area, compensation padding, stabilité au scroll
8 +// - scan CSS : 100vh sans dvh, env(safe-area-inset-bottom), z-index extrêmes
9 +// - menus déroulants : règles :hover-reveal, cibles tactiles <44px, test tap
10 +// - champs avec font-size <16px (zoom iOS)
11 +// Sortie : audit/report.json + captures audit/*.png + résumé console.
12 +import { chromium, webkit, devices } from "playwright";
13 +import { mkdirSync, readFileSync, writeFileSync } from "fs";
14 +import { dirname, join } from "path";
15 +import { fileURLToPath } from "url";
16 +
17 +const here = dirname(fileURLToPath(import.meta.url));
18 +const eco = JSON.parse(readFileSync(join(here, "ecosystem.json"), "utf8"));
19 +const outDir = join(here, "audit");
20 +mkdirSync(outDir, { recursive: true });
21 +
22 +const only = process.argv.slice(2);
23 +const sites = eco.sites.filter((s) => !only.length || only.includes(s.id));
24 +
25 +// ---------- code injecté dans la page ----------
26 +const PAGE_AUDIT = `(() => {
27 + const res = {};
28 + const sel = (el) => {
29 + if (!el || el === document.documentElement) return "html";
30 + let s = el.tagName.toLowerCase();
31 + if (el.id) return s + "#" + el.id;
32 + const c = (el.className && typeof el.className === "string")
33 + ? el.className.trim().split(/\\s+/).slice(0, 3).join(".") : "";
34 + return c ? s + "." + c : s;
35 + };
36 +
37 + // meta viewport
38 + const mv = document.querySelector('meta[name="viewport"]');
39 + res.viewport = mv ? mv.getAttribute("content") : null;
40 +
41 + // débordement horizontal + fautifs
42 + const iw = window.innerWidth;
43 + res.overflowPx = Math.max(
44 + document.documentElement.scrollWidth - iw,
45 + document.body ? document.body.scrollWidth - iw : 0);
46 + res.overflowEls = [];
47 + if (res.overflowPx > 1) {
48 + for (const el of document.querySelectorAll("body *")) {
49 + const r = el.getBoundingClientRect();
50 + if (r.width > 1 && (r.right > iw + 1 || r.left < -1) && r.height > 4) {
51 + const cs = getComputedStyle(el);
52 + if (cs.position === "fixed" && r.left >= -1 && r.right <= iw + 1) continue;
53 + res.overflowEls.push({ sel: sel(el), left: Math.round(r.left), right: Math.round(r.right), w: Math.round(r.width) });
54 + if (res.overflowEls.length >= 12) break;
55 + }
56 + }
57 + }
58 +
59 + // fixed / sticky
60 + const breaksFixed = (el) => {
61 + let p = el.parentElement;
62 + while (p && p !== document.documentElement) {
63 + const cs = getComputedStyle(p);
64 + if (cs.transform !== "none" || cs.filter !== "none" ||
65 + cs.backdropFilter && cs.backdropFilter !== "none" ||
66 + cs.perspective !== "none" ||
67 + (cs.willChange && /transform|filter|perspective/.test(cs.willChange)) ||
68 + (cs.contain && /layout|paint|strict|content/.test(cs.contain)))
69 + return sel(p) + " (" + [
70 + cs.transform !== "none" ? "transform" : "",
71 + cs.filter !== "none" ? "filter" : "",
72 + cs.backdropFilter && cs.backdropFilter !== "none" ? "backdrop-filter" : "",
73 + cs.perspective !== "none" ? "perspective" : "",
74 + cs.willChange && /transform|filter/.test(cs.willChange) ? "will-change" : "",
75 + ].filter(Boolean).join(",") + ")";
76 + p = p.parentElement;
77 + }
78 + return null;
79 + };
80 + res.fixed = [];
81 + for (const el of document.querySelectorAll("body *")) {
82 + const cs = getComputedStyle(el);
83 + if (cs.position !== "fixed" && cs.position !== "sticky") continue;
84 + const r = el.getBoundingClientRect();
85 + if (r.width < 8 || r.height < 8 || cs.display === "none") continue;
86 + const vh = window.innerHeight;
87 + /* une « barre » basse = pleine largeur (≥60 % du viewport) ; un bouton
88 + flottant (FAB, bulle KA Agent) n'exige pas de compensation de contenu */
89 + const bottomAnchored = cs.position === "fixed" && r.bottom > vh - 120 && r.top > vh * 0.4
90 + && r.width >= window.innerWidth * 0.6;
91 + res.fixed.push({
92 + sel: sel(el), pos: cs.position,
93 + rect: { t: Math.round(r.top), b: Math.round(r.bottom), h: Math.round(r.height) },
94 + bottomAnchored,
95 + z: cs.zIndex,
96 + brokenBy: cs.position === "fixed" ? breaksFixed(el) : null,
97 + padBottom: cs.paddingBottom, cssBottom: cs.bottom,
98 + });
99 + if (res.fixed.length >= 25) break;
100 + }
101 +
102 + // compensation : padding-bottom du body/main vs barre basse
103 + const bar = res.fixed.find((f) => f.bottomAnchored);
104 + if (bar) {
105 + const bodyPad = parseFloat(getComputedStyle(document.body).paddingBottom) || 0;
106 + const main = document.querySelector("main");
107 + const mainPad = main ? parseFloat(getComputedStyle(main).paddingBottom) || 0 : 0;
108 + res.bottomBar = { sel: bar.sel, h: bar.rect.h, bodyPadBottom: bodyPad, mainPadBottom: mainPad };
109 + }
110 +
111 + // champs zoom iOS
112 + res.smallInputs = [];
113 + for (const el of document.querySelectorAll("input, select, textarea")) {
114 + const cs = getComputedStyle(el);
115 + if (el.type === "hidden" || el.type === "checkbox" || el.type === "radio" || cs.display === "none") continue;
116 + const rr = el.getBoundingClientRect();
117 + if (rr.width < 4 || rr.height < 4) continue; /* sr-only / clip */
118 + const fs = parseFloat(cs.fontSize);
119 + if (fs && fs < 16) res.smallInputs.push({ sel: sel(el), fs });
120 + if (res.smallInputs.length >= 10) break;
121 + }
122 +
123 + // cibles tactiles dans header/nav
124 + res.smallTargets = [];
125 + for (const el of document.querySelectorAll("header a, header button, nav a, nav button, [class*=menu] a, [class*=menu] button")) {
126 + const r = el.getBoundingClientRect();
127 + if (r.width === 0 || r.height === 0) continue;
128 + if ((r.height < 34 || r.width < 34) && r.top >= 0 && r.top < window.innerHeight) {
129 + res.smallTargets.push({ sel: sel(el), w: Math.round(r.width), h: Math.round(r.height), text: (el.textContent || "").trim().slice(0, 20) });
130 + if (res.smallTargets.length >= 10) break;
131 + }
132 + }
133 +
134 + // candidats menus déroulants
135 + res.dropdownCandidates = [];
136 + for (const el of document.querySelectorAll('[aria-haspopup], [class*="dropdown"], [class*="Dropdown"], details, [data-menu], [class*="select"]:not(select)')) {
137 + const r = el.getBoundingClientRect();
138 + if (r.width === 0) continue;
139 + res.dropdownCandidates.push({ sel: sel(el), tag: el.tagName.toLowerCase() });
140 + if (res.dropdownCandidates.length >= 15) break;
141 + }
142 +
143 + // feuilles de style (mêmes origines) pour scan texte
144 + res.styleSheets = [...document.styleSheets].map((ss) => ss.href).filter(Boolean);
145 + res.inlineCss = [...document.querySelectorAll("style")].map((s) => s.textContent || "").join("\\n");
146 + return res;
147 +})()`;
148 +
149 +// détection des règles :hover qui révèlent un sous-menu
150 +function scanCss(text) {
151 + const out = { vh100: 0, dvh: 0, svh: 0, safeArea: 0, hoverReveal: [], zMax: 0 };
152 + if (!text) return out;
153 + out.vh100 = (text.match(/100vh/g) || []).length;
154 + out.dvh = (text.match(/dvh/g) || []).length;
155 + out.svh = (text.match(/svh/g) || []).length;
156 + out.safeArea = (text.match(/safe-area-inset-bottom/g) || []).length;
157 + const rules = text.match(/[^{}]+\{[^{}]*\}/g) || [];
158 + for (const rule of rules) {
159 + const [selPart, body] = rule.split("{");
160 + if (!selPart || !body) continue;
161 + if (/:hover/.test(selPart) &&
162 + /(display\s*:\s*(block|flex|grid)|visibility\s*:\s*visible|opacity\s*:\s*1|pointer-events\s*:\s*auto)/.test(body) &&
163 + /(menu|dropdown|nav|sub)/i.test(selPart)) {
164 + out.hoverReveal.push(selPart.trim().replace(/\s+/g, " ").slice(0, 90));
165 + if (out.hoverReveal.length >= 8) break;
166 + }
167 + const zm = body.match(/z-index\s*:\s*(\d+)/g) || [];
168 + for (const z of zm) out.zMax = Math.max(out.zMax, parseInt(z.replace(/\D+/g, ""), 10) || 0);
169 + }
170 + return out;
171 +}
172 +
173 +async function auditPage(page, url, tag, shot) {
174 + const r = { url, tag, issues: [], data: null };
175 + const resp = await page.goto(url, { waitUntil: "domcontentloaded", timeout: 45000 });
176 + if (!resp || resp.status() >= 400) { r.issues.push(`HTTP ${resp ? resp.status() : "??"}`); return r; }
177 + await page.waitForLoadState("networkidle", { timeout: 20000 }).catch(() => {});
178 + await page.waitForTimeout(1500);
179 + const d = await page.evaluate(PAGE_AUDIT);
180 + r.data = d;
181 +
182 + // scan CSS (inline + feuilles même origine)
183 + let cssText = d.inlineCss || "";
184 + const origin = new URL(url).origin;
185 + for (const href of d.styleSheets.slice(0, 8)) {
186 + try {
187 + if (!href.startsWith(origin) && !href.startsWith("/")) continue;
188 + const t = await page.evaluate(async (h) => { try { const x = await fetch(h); return await x.text(); } catch { return ""; } }, href);
189 + cssText += "\n" + t;
190 + } catch {}
191 + }
192 + r.css = scanCss(cssText);
193 + delete d.inlineCss;
194 +
195 + // stabilité au scroll de la barre basse
196 + const bar = (d.fixed || []).find((f) => f.bottomAnchored);
197 + if (bar) {
198 + const track = await page.evaluate(async (barSel) => {
199 + const find = () => {
200 + for (const el of document.querySelectorAll("body *")) {
201 + const cs = getComputedStyle(el);
202 + if (cs.position !== "fixed") continue;
203 + const r = el.getBoundingClientRect();
204 + if (r.bottom > innerHeight - 120 && r.top > innerHeight * 0.4 && r.height >= 8) return el;
205 + }
206 + return null;
207 + };
208 + const el = find();
209 + if (!el) return null;
210 + const pos = [];
211 + for (let i = 0; i < 4; i++) {
212 + window.scrollBy(0, 600);
213 + await new Promise((r2) => setTimeout(r2, 350));
214 + const r = el.getBoundingClientRect();
215 + pos.push({ b: Math.round(innerHeight - r.bottom), visible: r.height > 0 && getComputedStyle(el).display !== "none" });
216 + }
217 + window.scrollTo(0, 0);
218 + return pos;
219 + }, bar.sel).catch(() => null);
220 + if (track) {
221 + const bottoms = track.map((p) => p.b);
222 + const drift = Math.max(...bottoms) - Math.min(...bottoms);
223 + if (drift > 2) r.issues.push(`barre basse instable au scroll (dérive ${drift}px) [${bar.sel}]`);
224 + if (track.some((p) => !p.visible)) r.issues.push(`barre basse disparaît au scroll [${bar.sel}]`);
225 + }
226 + }
227 +
228 + // signalements
229 + if (!d.viewport || !/width=device-width/.test(d.viewport)) r.issues.push(`meta viewport: ${d.viewport || "ABSENTE"}`);
230 + if (d.overflowPx > 1) r.issues.push(`débordement horizontal +${d.overflowPx}px : ${(d.overflowEls || []).map((e) => e.sel).slice(0, 4).join(", ")}`);
231 + for (const f of d.fixed || []) if (f.brokenBy) r.issues.push(`fixed cassé par ancêtre ${f.brokenBy} → [${f.sel}]`);
232 + const bb = d.bottomBar;
233 + if (bb && bb.bodyPadBottom < bb.h - 8 && bb.mainPadBottom < bb.h - 8)
234 + r.issues.push(`pas de compensation padding sous la barre basse [${bb.sel}] h=${bb.h}px (body ${bb.bodyPadBottom}px / main ${bb.mainPadBottom}px)`);
235 + if (bar && !/env\(|calc\(/.test(bar.cssBottom || "") && r.css.safeArea === 0)
236 + r.issues.push(`aucune trace de safe-area-inset-bottom (barre basse [${bar.sel}])`);
237 + if (r.css.vh100 > 0 && r.css.dvh === 0 && r.css.svh === 0) r.issues.push(`${r.css.vh100}× 100vh sans dvh/svh`);
238 + if (r.css.hoverReveal.length) r.issues.push(`menus :hover-reveal CSS : ${r.css.hoverReveal.slice(0, 3).join(" | ")}`);
239 + if (d.smallInputs.length) r.issues.push(`${d.smallInputs.length} champ(s) <16px (zoom iOS) : ${d.smallInputs.slice(0, 3).map((i) => i.sel).join(", ")}`);
240 + if (d.smallTargets.length) r.issues.push(`${d.smallTargets.length} cible(s) tactile(s) <34px : ${d.smallTargets.slice(0, 3).map((t) => t.sel + "(" + t.w + "×" + t.h + ")").join(", ")}`);
241 +
242 + // test tap : ouvrir le premier bouton menu/hamburger trouvé
243 + try {
244 + const btn = page.locator('header button, [class*="burger"], [class*="hamburger"], button[aria-label*="menu" i], button[aria-label*="Menu"]').first();
245 + if (await btn.count()) {
246 + const before = await page.evaluate(() => document.body.innerHTML.length);
247 + await btn.tap({ timeout: 3000 }).catch(() => btn.click({ timeout: 3000 }));
248 + await page.waitForTimeout(600);
249 + const after = await page.evaluate(() => ({
250 + len: document.body.innerHTML.length,
251 + bodyOverflow: getComputedStyle(document.body).overflow,
252 + htmlOverflow: getComputedStyle(document.documentElement).overflow,
253 + }));
254 + const opened = Math.abs(after.len - before) > 50;
255 + if (opened && after.bodyOverflow !== "hidden" && after.htmlOverflow !== "hidden")
256 + r.issues.push("menu ouvert SANS blocage du scroll d'arrière-plan");
257 + if (shot) await page.screenshot({ path: shot.replace(".png", "-menu.png") });
258 + await page.keyboard.press("Escape").catch(() => {});
259 + await page.mouse.click(5, Math.round((page.viewportSize()?.height || 800) * 0.75)).catch(() => {});
260 + }
261 + } catch {}
262 +
263 + if (shot) {
264 + await page.evaluate(() => window.scrollTo(0, 0));
265 + await page.waitForTimeout(300);
266 + await page.screenshot({ path: shot });
267 + await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
268 + await page.waitForTimeout(500);
269 + await page.screenshot({ path: shot.replace(".png", "-bas.png") });
270 + }
271 + return r;
272 +}
273 +
274 +const engines = [
275 + { name: "android", launcher: chromium, ctx: { ...devices["Pixel 7"] } },
276 + { name: "ios", launcher: webkit, ctx: { ...devices["iPhone 13"] } },
277 +];
278 +
279 +const report = [];
280 +for (const engine of engines) {
281 + const browser = await engine.launcher.launch();
282 + for (const site of sites) {
283 + const ctx = await browser.newContext(engine.ctx);
284 + const page = await ctx.newPage();
285 + const siteRep = { site: site.id, engine: engine.name, pages: [] };
286 + try {
287 + const home = `https://${site.domain}/`;
288 + const shot = join(outDir, `${site.id}-${engine.name}.png`);
289 + siteRep.pages.push(await auditPage(page, home, "accueil", shot));
290 + // pages internes : 2 liens de nav distincts (chromium seulement pour limiter le temps)
291 + if (engine.name === "android") {
292 + const links = await page.evaluate(() => {
293 + const seen = new Set();
294 + const out = [];
295 + for (const a of document.querySelectorAll("a[href]")) {
296 + const h = a.getAttribute("href");
297 + if (!h || !h.startsWith("/") || h === "/" || h.startsWith("//") || h.startsWith("/#")) continue;
298 + const p = h.split("?")[0].split("#")[0];
299 + if (seen.has(p) || /\.(png|jpg|pdf|xml|js)$/.test(p)) continue;
300 + seen.add(p);
301 + out.push(p);
302 + if (out.length >= 6) break;
303 + }
304 + return out;
305 + }).catch(() => []);
306 + for (const l of links.slice(0, 2)) {
307 + siteRep.pages.push(await auditPage(page, `https://${site.domain}${l}`, l, null)
308 + .catch((e) => ({ url: l, issues: ["ERREUR " + String(e).slice(0, 80)] })));
309 + }
310 + }
311 + } catch (e) {
312 + siteRep.pages.push({ url: site.domain, issues: ["ERREUR " + String(e).split("\n")[0].slice(0, 120)] });
313 + }
314 + report.push(siteRep);
315 + const n = siteRep.pages.reduce((a, p) => a + (p.issues || []).length, 0);
316 + console.log(`${n ? "⚠️ " : "✅"} ${engine.name.padEnd(7)} ${site.id.padEnd(10)} ${n} problème(s)`);
317 + for (const p of siteRep.pages) for (const i of p.issues || []) console.log(` [${p.tag || p.url}] ${i}`);
318 + await ctx.close();
319 + }
320 + await browser.close();
321 +}
322 +writeFileSync(join(outDir, "report.json"), JSON.stringify(report, null, 2));
323 +console.log(`\nRapport : ${join(outDir, "report.json")}`);
modified tokens.css +87 −0
@@ -69,7 +69,24 @@
69 69
70 70 /* Cible tactile minimale */
71 71 --touch: 44px;
72 +
73 + /* ---- Échelle z-index COMMUNE (obligatoire — aucune valeur arbitraire) ----
74 + grain de film body::before = 9999 (pointer-events:none, toujours au-dessus,
75 + purement visuel). Tout composant interactif se place sous 9999 : */
76 + --z-content: 1; /* contenu positionné ordinaire */
77 + --z-sticky: 300; /* éléments sticky de contenu (sous-nav…) */
78 + --z-header: 500; /* header du site */
79 + --z-bottombar: 600; /* tab bar / barre d'action basse */
80 + --z-dropdown: 700; /* menus déroulants (au-dessus des barres) */
81 + --z-overlay: 800; /* voile sous modale/panneau */
82 + --z-modal: 900; /* modales, panneaux de filtres, galeries */
83 + --z-toast: 950; /* notifications */
84 +
85 + /* ---- Hauteur de viewport DYNAMIQUE (barre du navigateur mobile qui se
86 + replie au scroll) : toujours var(--vh100), JAMAIS 100vh en dur. ---- */
87 + --vh100: 100vh;
72 88 }
89 +@supports (height: 100dvh) { :root { --vh100: 100dvh; } }
73 90
74 91 /* ---- Socle ---- */
75 92 * { box-sizing: border-box; }
@@ -227,3 +244,73 @@ body > * { position: relative; }
227 244 /* ---- Utilitaires responsive ---- */
228 245 .only-mobile { display: initial; } .only-desktop { display: none; }
229 246 @media (min-width: 768px) { .only-mobile { display: none; } .only-desktop { display: initial; } }
247 +
248 +/* =============================================================================
249 + SOCLE MOBILE OBLIGATOIRE (2026-08-19) — règles communes aux 13 sites.
250 + RÈGLES pour tout composant futur :
251 + · TAP, jamais :hover, pour ouvrir un menu (le survol n'existe pas au doigt) ;
252 + le :hover ne sert qu'aux effets décoratifs, sous @media (hover: hover).
253 + · var(--vh100) (dvh) et JAMAIS 100vh pour tout élément calé sur le viewport.
254 + · position:fixed exige qu'AUCUN ancêtre n'ait transform/filter/perspective/
255 + will-change/backdrop-filter — sinon monter l'élément à la racine (body).
256 + · Barre basse fixe = .ka-bottombar + classe has-bottombar sur <body>.
257 + · Menu/panneau ouvert = .ka-scroll-lock sur <html> (scroll arrière-plan gelé).
258 + · z-index : uniquement l'échelle --z-* ci-dessus.
259 + · Zones tactiles ≥ var(--touch) (44 px), champs ≥ 16 px (zoom iOS).
260 + ========================================================================== */
261 +
262 +/* Anti-zoom iOS : au doigt, aucun champ sous 16 px (le focus d'un champ <16 px
263 + déclenche un zoom automatique de page sur Safari iOS). !important assumé :
264 + c'est un filet d'accessibilité, un champ plus petit casse le zoom quoi
265 + qu'il arrive — ne s'applique qu'aux écrans tactiles. */
266 +@media (hover: none) and (pointer: coarse) {
267 + input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
268 + select, textarea { font-size: max(16px, 1em) !important; }
269 +}
270 +
271 +/* Zone tactile du badge Groupe KA étendue à ≥44 px au doigt, sans changer
272 + son rendu (débord de la zone cliquable via pseudo-élément). */
273 +@media (pointer: coarse) {
274 + .gk-badge { position: relative; }
275 + .gk-badge::after { content: ""; position: absolute; inset: -8px; }
276 +}
277 +
278 +/* Hauteurs viewport dynamiques */
279 +.h-viewport { height: 100vh; height: 100dvh; }
280 +.min-h-viewport { min-height: 100vh; min-height: 100dvh; }
281 +
282 +/* Barre fixe basse fiable : safe-area iPhone incluse, immunisée contre les
283 + transforms accidentels, et compensation d'espace via body.has-bottombar. */
284 +.ka-bottombar {
285 + position: fixed; left: 0; right: 0; bottom: 0;
286 + z-index: var(--z-bottombar);
287 + padding-bottom: env(safe-area-inset-bottom, 0px);
288 + background: var(--surface);
289 + border-top: 1.5px solid var(--ink);
290 + transform: none !important; filter: none !important;
291 +}
292 +body.has-bottombar { padding-bottom: calc(var(--bottombar-h, 64px) + env(safe-area-inset-bottom, 0px)); }
293 +
294 +/* Verrou de scroll d'arrière-plan (menu mobile, modale, panneau de filtres
295 + ouverts) : ajouter/retirer .ka-scroll-lock sur <html>. */
296 +html.ka-scroll-lock, html.ka-scroll-lock body { overflow: hidden !important; overscroll-behavior: none; }
297 +
298 +/* Menu déroulant de référence : au-dessus de tout contenu (cartes Mapbox
299 + incluses), défilement interne avec élan, jamais plus haut que l'écran. */
300 +.ka-menu {
301 + position: absolute; z-index: var(--z-dropdown);
302 + min-width: 180px;
303 + max-height: min(60vh, 420px); max-height: min(60dvh, 420px);
304 + overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain;
305 + background: var(--surface); border: 1.5px solid var(--ink);
306 + border-radius: var(--r-card); box-shadow: var(--shadow-off-mid);
307 +}
308 +.ka-menu a, .ka-menu button, .ka-menu label, .ka-menu [role="menuitem"], .ka-menu [role="option"] {
309 + display: flex; align-items: center; min-height: var(--touch);
310 + padding: 10px 14px; width: 100%; text-decoration: none;
311 +}
312 +/* Voile plein écran sous une modale / un panneau */
313 +.ka-overlay {
314 + position: fixed; inset: 0; z-index: var(--z-overlay);
315 + background: rgba(20, 24, 20, 0.45);
316 +}
230 317