Nav mobile v2 : hamburger + panneau plein écran fixed sur les pages web
Standard KA 2026-08-25 : la .topnav wrappait en pleine largeur sous 1023px ; elle est remplacée par un hamburger 44px + panneau position:fixed inset:0 (z-modal) — menu visible peu importe la position de scroll, verrou de scroll, fermeture lien/✕/Escape. Liens du panneau générés depuis la topnav de chaque page (aria-current conservé). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3 changed files +229 −3
modified
src/api/web/contact.html
+76 −1
@@ -52,7 +52,7 @@ Page /contact — courriels officiels Groupe KA (ecosystem.json) + compte KA ID. | ||
| 52 | 52 | .ka-user{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2)} |
| 53 | 53 | .ka-user b{font-family:var(--font-display);font-size:13px;text-transform:none;letter-spacing:-.01em;color:var(--ink)} |
| 54 | 54 | .ka-avatar{width:28px;height:28px;border-radius:50%;border:1.5px solid var(--ink);object-fit:cover} |
| 55 | −@media(max-width:1023px){.topnav{order:5;flex-basis:100%;margin-left:0}} | |
| 55 | +@media(max-width:1023px){.topnav{display:none}.ka-mnav-btn{display:flex}} | |
| 56 | 56 | |
| 57 | 57 | /* ---- page contact ---- */ |
| 58 | 58 | .hero-c{padding:64px 0 56px;border-bottom:1.5px solid var(--ink);background:linear-gradient(rgba(59,91,219,.05),transparent 60%),var(--paper)} |
@@ -66,6 +66,42 @@ section{padding:64px 0} | ||
| 66 | 66 | .account{margin-top:56px;background:var(--surface);border:1.5px solid var(--ink);border-radius:var(--r-card);box-shadow:var(--shadow-off-soft);padding:28px;display:flex;flex-wrap:wrap;align-items:center;gap:20px;justify-content:space-between} |
| 67 | 67 | .account p{margin:0;max-width:56ch;color:var(--ink-2);font-size:14.5px} |
| 68 | 68 | .account b{color:var(--ink)} |
| 69 | + | |
| 70 | +/* ===== KA Nav v2 - menu mobile plein ecran (standard 2026-08-25) ===== */ | |
| 71 | +.ka-mnav-btn{display:none;width:44px;height:44px;margin-left:auto;flex:none; | |
| 72 | + flex-direction:column;align-items:center;justify-content:center;gap:5px; | |
| 73 | + background:var(--paper);border:1.5px solid var(--ink);border-radius:999px; | |
| 74 | + cursor:pointer;padding:0} | |
| 75 | +.ka-mnav-btn span{display:block;width:18px;height:2px;background:var(--ink); | |
| 76 | + border-radius:2px;transition:transform .18s ease,opacity .14s ease} | |
| 77 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)} | |
| 78 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(2){opacity:0} | |
| 79 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)} | |
| 80 | +.ka-mnav{position:fixed;inset:0;z-index:var(--z-modal,900);background:var(--paper); | |
| 81 | + display:none;flex-direction:column;overflow-y:auto;overscroll-behavior:contain} | |
| 82 | +.ka-mnav.open{display:flex;animation:ka-mnav-in .16s ease} | |
| 83 | +@keyframes ka-mnav-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}} | |
| 84 | +.ka-mnav-top{display:flex;align-items:center;justify-content:space-between;flex:none; | |
| 85 | + min-height:64px;padding:0 18px;border-bottom:2px solid var(--ink);background:var(--paper)} | |
| 86 | +.ka-mnav-close{width:44px;height:44px;flex:none;display:flex;align-items:center; | |
| 87 | + justify-content:center;border:1.5px solid var(--ink);border-radius:999px; | |
| 88 | + background:var(--ink);color:var(--paper);font-size:17px;font-weight:700; | |
| 89 | + cursor:pointer;padding:0;line-height:1} | |
| 90 | +.ka-mnav-links{display:flex;flex-direction:column;justify-content:center;flex:1; | |
| 91 | + padding:28px 24px;counter-reset:mnav} | |
| 92 | +.ka-mnav-links a{display:flex;align-items:baseline;gap:14px;padding:16px 0; | |
| 93 | + border-bottom:1.5px dashed rgba(20,24,20,.18);color:var(--ink);text-decoration:none} | |
| 94 | +.ka-mnav-links a:last-child{border-bottom:0} | |
| 95 | +.ka-mnav-links a::before{counter-increment:mnav;content:"0" counter(mnav); | |
| 96 | + font-family:var(--font-mono,ui-monospace,monospace);font-size:12px;font-weight:700; | |
| 97 | + color:var(--accent-deep,var(--ink-3))} | |
| 98 | +.ka-mnav-links a b{font-family:var(--font-display,system-ui);font-weight:700; | |
| 99 | + font-size:25px;line-height:1;letter-spacing:-.03em;text-transform:uppercase} | |
| 100 | +.ka-mnav-links a[aria-current] b{background:var(--ink);color:var(--paper); | |
| 101 | + border-radius:6px;padding:4px 10px 6px} | |
| 102 | +.ka-mnav-foot{flex:none;border-top:2px solid var(--ink);padding:16px 24px; | |
| 103 | + padding-bottom:max(20px,env(safe-area-inset-bottom))} | |
| 104 | +html.ka-menu-locked,html.ka-menu-locked body{overflow:hidden} | |
| 69 | 105 | </style> |
| 70 | 106 | <link rel="canonical" href="https://www.api-ka.com/contact"> |
| 71 | 107 | <link rel="alternate" hreflang="fr-ca" href="https://www.api-ka.com/contact"> |
@@ -88,9 +124,34 @@ section{padding:64px 0} | ||
| 88 | 124 | <li><a href="/docs">Swagger</a></li> |
| 89 | 125 | <li><a href="/contact">Contact</a></li> |
| 90 | 126 | </ul> |
| 127 | + <button id="ka-mnav-btn" class="ka-mnav-btn" aria-label="Ouvrir le menu" | |
| 128 | + aria-expanded="false" aria-controls="ka-mnav"> | |
| 129 | + <span></span><span></span><span></span> | |
| 130 | + </button> | |
| 91 | 131 | <div id="ka-auth"></div> |
| 92 | 132 | </div></div> |
| 93 | 133 | |
| 134 | +<!-- KA Nav v2 : panneau mobile plein ecran (fixed inset:0) --> | |
| 135 | +<div id="ka-mnav" class="ka-mnav" role="dialog" aria-modal="true" aria-label="Menu"> | |
| 136 | + <div class="ka-mnav-top"> | |
| 137 | + <a class="brand" href="/" aria-label="API-Ka — accueil">API<span class="ka">·Ka</span></a> | |
| 138 | + <button class="ka-mnav-close" data-ka-mnav-close aria-label="Fermer le menu">✕</button> | |
| 139 | + </div> | |
| 140 | + <nav class="ka-mnav-links"> | |
| 141 | + <a href="/#services"><b>Services</b></a> | |
| 142 | + <a href="/#endpoints"><b>Endpoints</b></a> | |
| 143 | + <a href="/#playground"><b>Playground</b></a> | |
| 144 | + <a href="/stats"><b>Stats</b></a> | |
| 145 | + <a href="/docs"><b>Swagger</b></a> | |
| 146 | + <a href="/contact"><b>Contact</b></a> | |
| 147 | + </nav> | |
| 148 | + <div class="ka-mnav-foot"> | |
| 149 | + <a class="gk-badge" href="https://www.groupe-ka.com" target="_blank" rel="noopener noreferrer" | |
| 150 | + aria-label="Un service Groupe KA — visiter le portail de l'écosystème"> | |
| 151 | + Un service <b>Groupe<span class="ka">KA</span></b></a> | |
| 152 | + </div> | |
| 153 | +</div> | |
| 154 | + | |
| 94 | 155 | <header class="hero-c"><div class="container"> |
| 95 | 156 | <span class="kicker">Contact · Groupe KA</span> |
| 96 | 157 | <h1>Nous <span class="hl">joindre</span></h1> |
@@ -117,5 +178,19 @@ section{padding:64px 0} | ||
| 117 | 178 | <script src="/ka/ka-shell.js" defer></script> |
| 118 | 179 | <script>window.KA_AGENT={site:"api-ka"}</script> |
| 119 | 180 | <script src="/ka-agent.js" defer></script> |
| 181 | +<script> | |
| 182 | +/* KA Nav v2 : ouverture/fermeture du panneau mobile plein ecran (2026-08-25) */ | |
| 183 | +(function(){ | |
| 184 | + var btn=document.getElementById("ka-mnav-btn"),panel=document.getElementById("ka-mnav"); | |
| 185 | + if(!btn||!panel)return; | |
| 186 | + function set(o){panel.classList.toggle("open",o); | |
| 187 | + btn.setAttribute("aria-expanded",o?"true":"false"); | |
| 188 | + document.documentElement.classList.toggle("ka-menu-locked",o);} | |
| 189 | + btn.addEventListener("click",function(){set(!panel.classList.contains("open"))}); | |
| 190 | + panel.addEventListener("click",function(e){ | |
| 191 | + if(e.target.closest("a")||e.target.closest("[data-ka-mnav-close]"))set(false)}); | |
| 192 | + document.addEventListener("keydown",function(e){if(e.key==="Escape")set(false)}); | |
| 193 | +})(); | |
| 194 | +</script> | |
| 120 | 195 | </body> |
| 121 | 196 | </html> |
modified
src/api/web/index.html
+77 −1
@@ -60,7 +60,7 @@ html{scroll-padding-top:80px} | ||
| 60 | 60 | .pulse.ok{background:var(--accent);box-shadow:0 0 0 4px var(--accent-soft);animation:pulse 2.4s ease infinite} |
| 61 | 61 | .pulse.err{background:var(--danger);box-shadow:0 0 0 4px var(--danger-soft)} |
| 62 | 62 | @keyframes pulse{0%,100%{box-shadow:0 0 0 4px var(--accent-soft)}50%{box-shadow:0 0 0 7px rgba(59,91,219,.22)}} |
| 63 | −@media(max-width:1023px){.topnav{order:5;flex-basis:100%;margin-left:0}} | |
| 63 | +@media(max-width:1023px){.topnav{display:none}.ka-mnav-btn{display:flex}} | |
| 64 | 64 | @media(max-width:767px){.live-chip{display:none}} |
| 65 | 65 | |
| 66 | 66 | /* ================= hero ================= */ |
@@ -164,6 +164,42 @@ pre{margin:0;background:var(--ink);color:var(--paper);padding:16px 18px;overflow | ||
| 164 | 164 | .reveal{opacity:0;transform:translateY(14px);transition:opacity .5s ease,transform .5s ease} |
| 165 | 165 | .reveal.in{opacity:1;transform:none} |
| 166 | 166 | @media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.hero-tile{transform:none}.pulse.ok{animation:none}} |
| 167 | + | |
| 168 | +/* ===== KA Nav v2 - menu mobile plein ecran (standard 2026-08-25) ===== */ | |
| 169 | +.ka-mnav-btn{display:none;width:44px;height:44px;margin-left:auto;flex:none; | |
| 170 | + flex-direction:column;align-items:center;justify-content:center;gap:5px; | |
| 171 | + background:var(--paper);border:1.5px solid var(--ink);border-radius:999px; | |
| 172 | + cursor:pointer;padding:0} | |
| 173 | +.ka-mnav-btn span{display:block;width:18px;height:2px;background:var(--ink); | |
| 174 | + border-radius:2px;transition:transform .18s ease,opacity .14s ease} | |
| 175 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)} | |
| 176 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(2){opacity:0} | |
| 177 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)} | |
| 178 | +.ka-mnav{position:fixed;inset:0;z-index:var(--z-modal,900);background:var(--paper); | |
| 179 | + display:none;flex-direction:column;overflow-y:auto;overscroll-behavior:contain} | |
| 180 | +.ka-mnav.open{display:flex;animation:ka-mnav-in .16s ease} | |
| 181 | +@keyframes ka-mnav-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}} | |
| 182 | +.ka-mnav-top{display:flex;align-items:center;justify-content:space-between;flex:none; | |
| 183 | + min-height:64px;padding:0 18px;border-bottom:2px solid var(--ink);background:var(--paper)} | |
| 184 | +.ka-mnav-close{width:44px;height:44px;flex:none;display:flex;align-items:center; | |
| 185 | + justify-content:center;border:1.5px solid var(--ink);border-radius:999px; | |
| 186 | + background:var(--ink);color:var(--paper);font-size:17px;font-weight:700; | |
| 187 | + cursor:pointer;padding:0;line-height:1} | |
| 188 | +.ka-mnav-links{display:flex;flex-direction:column;justify-content:center;flex:1; | |
| 189 | + padding:28px 24px;counter-reset:mnav} | |
| 190 | +.ka-mnav-links a{display:flex;align-items:baseline;gap:14px;padding:16px 0; | |
| 191 | + border-bottom:1.5px dashed rgba(20,24,20,.18);color:var(--ink);text-decoration:none} | |
| 192 | +.ka-mnav-links a:last-child{border-bottom:0} | |
| 193 | +.ka-mnav-links a::before{counter-increment:mnav;content:"0" counter(mnav); | |
| 194 | + font-family:var(--font-mono,ui-monospace,monospace);font-size:12px;font-weight:700; | |
| 195 | + color:var(--accent-deep,var(--ink-3))} | |
| 196 | +.ka-mnav-links a b{font-family:var(--font-display,system-ui);font-weight:700; | |
| 197 | + font-size:25px;line-height:1;letter-spacing:-.03em;text-transform:uppercase} | |
| 198 | +.ka-mnav-links a[aria-current] b{background:var(--ink);color:var(--paper); | |
| 199 | + border-radius:6px;padding:4px 10px 6px} | |
| 200 | +.ka-mnav-foot{flex:none;border-top:2px solid var(--ink);padding:16px 24px; | |
| 201 | + padding-bottom:max(20px,env(safe-area-inset-bottom))} | |
| 202 | +html.ka-menu-locked,html.ka-menu-locked body{overflow:hidden} | |
| 167 | 203 | </style> |
| 168 | 204 | <link rel="canonical" href="https://www.api-ka.com/"> |
| 169 | 205 | <link rel="alternate" hreflang="fr-ca" href="https://www.api-ka.com/"> |
@@ -189,12 +225,38 @@ pre{margin:0;background:var(--ink);color:var(--paper);padding:16px 18px;overflow | ||
| 189 | 225 | <li><a href="/docs">Swagger</a></li> |
| 190 | 226 | <li><a href="/contact">Contact</a></li> |
| 191 | 227 | </ul> |
| 228 | + <button id="ka-mnav-btn" class="ka-mnav-btn" aria-label="Ouvrir le menu" | |
| 229 | + aria-expanded="false" aria-controls="ka-mnav"> | |
| 230 | + <span></span><span></span><span></span> | |
| 231 | + </button> | |
| 192 | 232 | <div class="topbar-tools"> |
| 193 | 233 | <span class="live-chip"><span class="pulse" id="live-dot"></span><span id="live-txt">vérification…</span></span> |
| 194 | 234 | <div id="ka-auth"></div> |
| 195 | 235 | </div> |
| 196 | 236 | </div></div> |
| 197 | 237 | |
| 238 | +<!-- KA Nav v2 : panneau mobile plein ecran (fixed inset:0) --> | |
| 239 | +<div id="ka-mnav" class="ka-mnav" role="dialog" aria-modal="true" aria-label="Menu"> | |
| 240 | + <div class="ka-mnav-top"> | |
| 241 | + <a class="brand" href="/" aria-label="API-Ka — accueil">API<span class="ka">·Ka</span></a> | |
| 242 | + <button class="ka-mnav-close" data-ka-mnav-close aria-label="Fermer le menu">✕</button> | |
| 243 | + </div> | |
| 244 | + <nav class="ka-mnav-links"> | |
| 245 | + <a href="#services"><b>Services</b></a> | |
| 246 | + <a href="#endpoints"><b>Endpoints</b></a> | |
| 247 | + <a href="#playground"><b>Playground</b></a> | |
| 248 | + <a href="#conventions"><b>Conventions</b></a> | |
| 249 | + <a href="/stats"><b>Stats</b></a> | |
| 250 | + <a href="/docs"><b>Swagger</b></a> | |
| 251 | + <a href="/contact"><b>Contact</b></a> | |
| 252 | + </nav> | |
| 253 | + <div class="ka-mnav-foot"> | |
| 254 | + <a class="gk-badge" href="https://www.groupe-ka.com" target="_blank" rel="noopener noreferrer" | |
| 255 | + aria-label="Un service Groupe KA — visiter le portail de l'écosystème"> | |
| 256 | + Un service <b>Groupe<span class="ka">KA</span></b></a> | |
| 257 | + </div> | |
| 258 | +</div> | |
| 259 | + | |
| 198 | 260 | <header class="hero"><div class="container"><div class="hero-grid"> |
| 199 | 261 | <div> |
| 200 | 262 | <span class="kicker">Plateforme centrale · Node m3u96b</span> |
@@ -601,5 +663,19 @@ observeReveals(); | ||
| 601 | 663 | </script> |
| 602 | 664 | <script>window.KA_AGENT={site:"api-ka"}</script> |
| 603 | 665 | <script src="/ka-agent.js" defer></script> |
| 666 | +<script> | |
| 667 | +/* KA Nav v2 : ouverture/fermeture du panneau mobile plein ecran (2026-08-25) */ | |
| 668 | +(function(){ | |
| 669 | + var btn=document.getElementById("ka-mnav-btn"),panel=document.getElementById("ka-mnav"); | |
| 670 | + if(!btn||!panel)return; | |
| 671 | + function set(o){panel.classList.toggle("open",o); | |
| 672 | + btn.setAttribute("aria-expanded",o?"true":"false"); | |
| 673 | + document.documentElement.classList.toggle("ka-menu-locked",o);} | |
| 674 | + btn.addEventListener("click",function(){set(!panel.classList.contains("open"))}); | |
| 675 | + panel.addEventListener("click",function(e){ | |
| 676 | + if(e.target.closest("a")||e.target.closest("[data-ka-mnav-close]"))set(false)}); | |
| 677 | + document.addEventListener("keydown",function(e){if(e.key==="Escape")set(false)}); | |
| 678 | +})(); | |
| 679 | +</script> | |
| 604 | 680 | </body> |
| 605 | 681 | </html> |
modified
src/api/web/stats.html
+76 −1
@@ -58,7 +58,7 @@ Données : GET /api/stats/dashboard — rien d'inventé. | ||
| 58 | 58 | .ka-user{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2)} |
| 59 | 59 | .ka-user b{font-family:var(--font-display);font-size:13px;text-transform:none;letter-spacing:-.01em;color:var(--ink)} |
| 60 | 60 | .ka-avatar{width:28px;height:28px;border-radius:50%;border:1.5px solid var(--ink);object-fit:cover} |
| 61 | −@media(max-width:1023px){.topnav{order:5;flex-basis:100%;margin-left:0}} | |
| 61 | +@media(max-width:1023px){.topnav{display:none}.ka-mnav-btn{display:flex}} | |
| 62 | 62 | |
| 63 | 63 | /* ---- entête de page ---- */ |
| 64 | 64 | .hero-s{padding:52px 0 40px;border-bottom:1.5px solid var(--ink);background:linear-gradient(rgba(59,91,219,.05),transparent 60%),var(--paper)} |
@@ -211,6 +211,42 @@ table.dt tbody tr:nth-child(even){background:var(--surface-2)} | ||
| 211 | 211 | .stb-empty{border:1px dashed var(--line);border-radius:8px;padding:16px;color:var(--ink-3); |
| 212 | 212 | font-size:13px;text-align:center} |
| 213 | 213 | .hidden{display:none!important} |
| 214 | + | |
| 215 | +/* ===== KA Nav v2 - menu mobile plein ecran (standard 2026-08-25) ===== */ | |
| 216 | +.ka-mnav-btn{display:none;width:44px;height:44px;margin-left:auto;flex:none; | |
| 217 | + flex-direction:column;align-items:center;justify-content:center;gap:5px; | |
| 218 | + background:var(--paper);border:1.5px solid var(--ink);border-radius:999px; | |
| 219 | + cursor:pointer;padding:0} | |
| 220 | +.ka-mnav-btn span{display:block;width:18px;height:2px;background:var(--ink); | |
| 221 | + border-radius:2px;transition:transform .18s ease,opacity .14s ease} | |
| 222 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)} | |
| 223 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(2){opacity:0} | |
| 224 | +.ka-mnav-btn[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)} | |
| 225 | +.ka-mnav{position:fixed;inset:0;z-index:var(--z-modal,900);background:var(--paper); | |
| 226 | + display:none;flex-direction:column;overflow-y:auto;overscroll-behavior:contain} | |
| 227 | +.ka-mnav.open{display:flex;animation:ka-mnav-in .16s ease} | |
| 228 | +@keyframes ka-mnav-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}} | |
| 229 | +.ka-mnav-top{display:flex;align-items:center;justify-content:space-between;flex:none; | |
| 230 | + min-height:64px;padding:0 18px;border-bottom:2px solid var(--ink);background:var(--paper)} | |
| 231 | +.ka-mnav-close{width:44px;height:44px;flex:none;display:flex;align-items:center; | |
| 232 | + justify-content:center;border:1.5px solid var(--ink);border-radius:999px; | |
| 233 | + background:var(--ink);color:var(--paper);font-size:17px;font-weight:700; | |
| 234 | + cursor:pointer;padding:0;line-height:1} | |
| 235 | +.ka-mnav-links{display:flex;flex-direction:column;justify-content:center;flex:1; | |
| 236 | + padding:28px 24px;counter-reset:mnav} | |
| 237 | +.ka-mnav-links a{display:flex;align-items:baseline;gap:14px;padding:16px 0; | |
| 238 | + border-bottom:1.5px dashed rgba(20,24,20,.18);color:var(--ink);text-decoration:none} | |
| 239 | +.ka-mnav-links a:last-child{border-bottom:0} | |
| 240 | +.ka-mnav-links a::before{counter-increment:mnav;content:"0" counter(mnav); | |
| 241 | + font-family:var(--font-mono,ui-monospace,monospace);font-size:12px;font-weight:700; | |
| 242 | + color:var(--accent-deep,var(--ink-3))} | |
| 243 | +.ka-mnav-links a b{font-family:var(--font-display,system-ui);font-weight:700; | |
| 244 | + font-size:25px;line-height:1;letter-spacing:-.03em;text-transform:uppercase} | |
| 245 | +.ka-mnav-links a[aria-current] b{background:var(--ink);color:var(--paper); | |
| 246 | + border-radius:6px;padding:4px 10px 6px} | |
| 247 | +.ka-mnav-foot{flex:none;border-top:2px solid var(--ink);padding:16px 24px; | |
| 248 | + padding-bottom:max(20px,env(safe-area-inset-bottom))} | |
| 249 | +html.ka-menu-locked,html.ka-menu-locked body{overflow:hidden} | |
| 214 | 250 | </style> |
| 215 | 251 | <link rel="canonical" href="https://www.api-ka.com/stats"> |
| 216 | 252 | <link rel="alternate" hreflang="fr-ca" href="https://www.api-ka.com/stats"> |
@@ -233,9 +269,34 @@ table.dt tbody tr:nth-child(even){background:var(--surface-2)} | ||
| 233 | 269 | <li><a href="/docs">Swagger</a></li> |
| 234 | 270 | <li><a href="/contact">Contact</a></li> |
| 235 | 271 | </ul> |
| 272 | + <button id="ka-mnav-btn" class="ka-mnav-btn" aria-label="Ouvrir le menu" | |
| 273 | + aria-expanded="false" aria-controls="ka-mnav"> | |
| 274 | + <span></span><span></span><span></span> | |
| 275 | + </button> | |
| 236 | 276 | <div id="ka-auth"></div> |
| 237 | 277 | </div></div> |
| 238 | 278 | |
| 279 | +<!-- KA Nav v2 : panneau mobile plein ecran (fixed inset:0) --> | |
| 280 | +<div id="ka-mnav" class="ka-mnav" role="dialog" aria-modal="true" aria-label="Menu"> | |
| 281 | + <div class="ka-mnav-top"> | |
| 282 | + <a class="brand" href="/" aria-label="API-Ka — accueil">API<span class="ka">·Ka</span></a> | |
| 283 | + <button class="ka-mnav-close" data-ka-mnav-close aria-label="Fermer le menu">✕</button> | |
| 284 | + </div> | |
| 285 | + <nav class="ka-mnav-links"> | |
| 286 | + <a href="/#services"><b>Services</b></a> | |
| 287 | + <a href="/#endpoints"><b>Endpoints</b></a> | |
| 288 | + <a href="/#playground"><b>Playground</b></a> | |
| 289 | + <a href="/stats" aria-current="page"><b>Stats</b></a> | |
| 290 | + <a href="/docs"><b>Swagger</b></a> | |
| 291 | + <a href="/contact"><b>Contact</b></a> | |
| 292 | + </nav> | |
| 293 | + <div class="ka-mnav-foot"> | |
| 294 | + <a class="gk-badge" href="https://www.groupe-ka.com" target="_blank" rel="noopener noreferrer" | |
| 295 | + aria-label="Un service Groupe KA — visiter le portail de l'écosystème"> | |
| 296 | + Un service <b>Groupe<span class="ka">KA</span></b></a> | |
| 297 | + </div> | |
| 298 | +</div> | |
| 299 | + | |
| 239 | 300 | <header class="hero-s"><div class="container"> |
| 240 | 301 | <span class="kicker">Statistiques · Plateforme</span> |
| 241 | 302 | <h1>Les <span class="hl">stats</span> de la plateforme</h1> |
@@ -1148,5 +1209,19 @@ $("st-custom-btn").onclick = () => { SB.cat = null; SB.err = ""; sbOpen(); }; | ||
| 1148 | 1209 | </script> |
| 1149 | 1210 | <script>window.KA_AGENT={site:"api-ka"}</script> |
| 1150 | 1211 | <script src="/ka-agent.js" defer></script> |
| 1212 | +<script> | |
| 1213 | +/* KA Nav v2 : ouverture/fermeture du panneau mobile plein ecran (2026-08-25) */ | |
| 1214 | +(function(){ | |
| 1215 | + var btn=document.getElementById("ka-mnav-btn"),panel=document.getElementById("ka-mnav"); | |
| 1216 | + if(!btn||!panel)return; | |
| 1217 | + function set(o){panel.classList.toggle("open",o); | |
| 1218 | + btn.setAttribute("aria-expanded",o?"true":"false"); | |
| 1219 | + document.documentElement.classList.toggle("ka-menu-locked",o);} | |
| 1220 | + btn.addEventListener("click",function(){set(!panel.classList.contains("open"))}); | |
| 1221 | + panel.addEventListener("click",function(e){ | |
| 1222 | + if(e.target.closest("a")||e.target.closest("[data-ka-mnav-close]"))set(false)}); | |
| 1223 | + document.addEventListener("keydown",function(e){if(e.key==="Escape")set(false)}); | |
| 1224 | +})(); | |
| 1225 | +</script> | |
| 1151 | 1226 | </body> |
| 1152 | 1227 | </html> |
| 1153 | 1228 | |