/* tools/portal-shell.css — coquille CSS COMMUNE des portails terrain (ge-109, 2026-09-13).
   Chargée par tools/parc.php (téléphone du chef de parc) et tools/atelier.php (tablette du chef d'atelier)
   dans <head>, AVANT leur feuille propre (bloc <style> inline de parc.php, tools/atelier/app.css) : à
   spécificité égale, une règle propre déclarée après surcharge donc une règle d'ici.
   Règle : toute règle commune aux deux portails vit ICI ; une règle propre à un portail vit dans son fichier.
   Garde-fou : node scripts/css_shared_diff.js (0 règle dupliquée entre ce fichier et chaque portail).
   Restent propres à chaque portail, volontairement : les seuils desktop (parc ≥1024 px, atelier ≥900 px —
   viewport tablette mesuré 600×936 / 960×576), .pk-dim/.pk-sheet (z-index 180/181 parc, 201/202 atelier ;
   le sheet atelier reste visible en paysage : il porte tous les formulaires), .pk-row (min-height 48 px atelier),
   .scan-torch et .pdf-zoombtns button (40/42 px parc, 48 px atelier : cible gantée), #pk-minimap (isolation
   atelier), et tout ce qui n'existe que d'un côté (carte, échéances, entretiens… côté parc ; at-* côté atelier).
   Contenu extrait tel quel du bloc <style> de parc.php, ordre conservé ; les commentaires terrain datés sont
   ceux d'origine.

   --orange corrigé le 2026-09-14 (chantier Suivi GPS atelier). #c96a08 donnait 3,78:1 en texte
   blanc sur chip plein (.at-chip.f-orange) et 3,38:1 en pâle (.at-chip.warn sur --orange-soft) :
   deux échecs WCAG AA pour du texte de 10,6 px en gras. #a55505 remonte à 5,38:1 et 4,81:1 en
   gardant la teinte. Les 34 usages du token ont été relevés avant le changement : les 4 en
   `background` portent tous du texte blanc, les 17 en `color` sont sur fond clair — assombrir
   améliore le contraste dans TOUS les cas, aucun ne se dégrade.
   ⚠️ Token PARTAGÉ parc + atelier : toute modification se revoit sur les DEUX portails. */
:root{--bg:#f4f6f9;--surface:#fff;--border:#dde2ec;--eld-blue:#1e3a7b;--eld-blue2:#163068;--eld-blue-soft:#e6ebf5;--green:#1a7d4f;--green-soft:#e4f4ec;--orange:#a55505;--orange-soft:#fef0e0;--red:#c8281a;--red-soft:#fde8e6;--text:#1a1f2e;--text2:#4a5568;--text3:#6b7280;--radius:12px;--shadow:0 1px 2px rgba(22,32,58,.04),0 12px 28px -18px rgba(30,58,123,.28)}
*{box-sizing:border-box;margin:0;padding:0}
/* Double-tap = zoom page sur iOS (et l'app standalone RESTE zoomée) : manipulation
   garde pan + pinch (accessibilité, jamais via maximum-scale) et ne bloque que le
   double-tap. Leaflet gère son propre zoom en JS, non affecté. Terrain 2026-09-05. */
html,body{touch-action:manipulation}
html,body{overflow-x:hidden;max-width:100%}
body{font-family:'DM Sans',sans-serif;background:var(--bg);color:var(--text);line-height:1.5;-webkit-font-smoothing:antialiased}
/* Police unique (09/10) : champs, boutons et listes n'héritent pas de la page dans les navigateurs ; Leaflet impose Helvetica Neue. */
button,input,select,textarea,optgroup{font-family:inherit}body .leaflet-container{font-family:inherit}
h1,h2{font-family:'DM Sans',sans-serif;font-weight:700}
.mono{font-family:'DM Sans',sans-serif;font-variant-numeric:tabular-nums}
input,select,textarea,button{font-family:inherit}
.req{color:var(--red)}
.btn-primary,.btn-secondary,.btn-danger{padding:10px 18px;border-radius:10px;border:none;cursor:pointer;font-weight:600;font-size:.84rem;display:inline-flex;align-items:center;gap:6px;transition:all .15s}
.btn-primary{background:var(--eld-blue);color:#fff}
.btn-primary:hover{background:var(--eld-blue2)}
.btn-secondary{background:#fff;color:var(--text2);border:1.5px solid var(--border)}
.btn-secondary:hover{background:#f9fafb}
.btn-danger{background:var(--red);color:#fff}
.btn-sm{padding:6px 12px;font-size:.76rem;border-radius:8px}
.field{margin-bottom:12px}
.field label{display:block;font-size:.72rem;color:var(--text2);font-weight:700;text-transform:uppercase;letter-spacing:.3px;margin-bottom:4px}
input[type=text],input[type=email],input[type=password],input[type=date],input[type=number],textarea,select{width:100%;padding:10px 12px;border:1.5px solid var(--border);border-radius:10px;font-size:.88rem;background:#fff;outline:none;font-family:inherit}
/* input file : largeur intrinsèque sinon (~333px) → débordait de la modale à 390px (terrain 2026-09-05) */
input[type=file]{width:100%;max-width:100%}
/* Scanner : cadre de visée (guide visuel — ZXing décode toute la frame) + torche + zoom
   (.scan-torch lui-même : taille propre à chaque portail — 40 px parc, 48 px atelier) */
.scan-window{position:absolute;left:10%;right:10%;top:28%;bottom:28%;border-radius:10px;box-shadow:0 0 0 999px rgba(0,0,0,.38);pointer-events:none}
.scan-window i{position:absolute;width:22px;height:22px;border:0 solid #fff;border-radius:2px}
.scan-window .c1{top:-2px;left:-2px;border-top-width:3px;border-left-width:3px}
.scan-window .c2{top:-2px;right:-2px;border-top-width:3px;border-right-width:3px}
.scan-window .c3{bottom:-2px;left:-2px;border-bottom-width:3px;border-left-width:3px}
.scan-window .c4{bottom:-2px;right:-2px;border-bottom-width:3px;border-right-width:3px}
.scan-line{position:absolute;left:8px;right:8px;top:0;height:2px;background:linear-gradient(90deg,transparent,rgba(122,255,180,.9),transparent);animation:scanline 2.2s ease-in-out infinite}
@keyframes scanline{0%,100%{top:8%}50%{top:88%}}
@media (prefers-reduced-motion:reduce){.scan-line{display:none}}
.scan-torch.on{background:#fff;color:var(--eld-blue)}
.scan-zoom{position:absolute;left:14%;right:14%;bottom:12px;width:72%;accent-color:#fff}
/* Visionneuse image (PV photo, GED) : fit à l'écran + pinch/pan (touch-action:none
   requis pour les pointer events du zoom maison). Les boutons de zoom eux-mêmes
   (.pdf-zoombtns button) ont une taille propre à chaque portail : 42 px parc, 48 px atelier. */
.pdf-imgbox{position:relative;flex:1;overflow:hidden;touch-action:none;background:#1c2330;display:flex;align-items:center;justify-content:center}
.pdf-imgbox img{max-width:100%;max-height:100%;object-fit:contain;transform-origin:center center;user-select:none;-webkit-user-drag:none}
.pdf-zoombtns{position:absolute;right:12px;bottom:calc(14px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:8px;z-index:2}
/* input date iOS : min-width intrinsèque > 100% → débordait du padding droit de la
   modale (terrain 2026-09-05, IMG_8600 + recopie d'écran) ; et Safari centre la valeur.
   min-width:0 seul ne suffisait pas sur l'iPhone → en mobile on neutralise le rendu
   natif (appearance:none), ce qui supprime la largeur intrinsèque à la racine.
   Desktop non touché (garde l'icône calendrier de Chrome).
   La règle mobile (appearance:none…) vit dans chaque portail, à son seuil : ≤1023 px parc, ≤899 px atelier. */
input[type=date]{min-width:0;max-width:100%}
input[type=date]::-webkit-date-and-time-value{text-align:left}
input:focus,textarea:focus,select:focus{border-color:var(--eld-blue)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-row.full{grid-template-columns:1fr}
/* Login */
#login-screen,#chpass-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--eld-blue) 0%,#0c1f4d 100%);padding:20px}
.login-box{background:#fff;padding:36px;border-radius:18px;box-shadow:0 20px 60px rgba(0,0,0,.2);max-width:420px;width:100%}
.login-box h1{font-size:1.4rem;margin-bottom:4px;color:var(--eld-blue);text-align:center}
.login-box .tag{text-align:center;color:var(--text3);font-size:.82rem;margin-bottom:24px}
.login-box .btn-primary{width:100%;justify-content:center;padding:14px}
/* App */
#app{display:none;min-height:100vh}
#app.pk-on{display:block}
.topbar{background:linear-gradient(180deg,#1e3a7b 0%,#17306a 100%);color:#fff;padding:14px 24px;padding-top:calc(14px + env(safe-area-inset-top,0px));display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:50;box-shadow:0 2px 12px rgba(0,0,0,.1)}
.topbar .logo{font-family:'DM Sans',sans-serif;font-weight:700;color:#fff;font-size:1rem;letter-spacing:.01em}
.topbar .user{display:flex;align-items:center;gap:10px}
.topbar .user-name{font-size:.88rem;font-weight:600;color:#fff}
.avatar{width:34px;height:34px;border-radius:99px;background:rgba(255,255,255,.15);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.82rem;font-family:'DM Sans',sans-serif}
.btn-logout{background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.2);padding:8px 14px;border-radius:10px;cursor:pointer;font-size:.82rem;font-weight:600;display:inline-flex;align-items:center;gap:6px;font-family:inherit;transition:background .2s}
.btn-logout:hover{background:rgba(255,255,255,.18)}
.main{padding:20px;max-width:1400px;margin:0 auto}
/* Stock cards — base commune ; le parc ajoute :hover, vignette et chips, l'atelier surcharge min-height/border */
.stock-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.stock-card{background:var(--surface);border-radius:14px;padding:14px;display:flex;gap:14px;box-shadow:var(--shadow);cursor:pointer;transition:all .15s}
/* Modal */
/* padding : jamais sous la Dynamic Island / barre système en haut ni la home bar en
   bas (safe-areas, standalone) — une modale 90vh centrée y passait (terrain 2026-09-05) */
.modal-overlay{position:fixed;inset:0;background:rgba(15,25,55,.45);backdrop-filter:blur(4px);z-index:200;display:none;align-items:center;justify-content:center;padding:max(20px,env(safe-area-inset-top,0px)) 20px max(20px,env(safe-area-inset-bottom,0px));overscroll-behavior:contain}
/* Fond figé modale ouverte — overflow:hidden html+body (iOS 16+), SANS position:fixed
   (v1 : la page remontée de scrollY laissait une bande blanche en bas) */
html.modal-open,body.modal-open{overflow:hidden}
.modal-overlay.open{display:flex}
.modal{background:var(--surface);border-radius:20px;width:100%;max-width:640px;max-height:90vh;overflow-y:auto;box-shadow:0 24px 80px rgba(15,25,55,.18);overscroll-behavior:contain}
.modal.xl{max-width:860px}
.modal-header{padding:20px 24px 16px;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:12px;position:sticky;top:0;background:#fff;z-index:5;border-radius:20px 20px 0 0}
.modal-title{font-family:'DM Sans',sans-serif;font-weight:700;font-size:1.05rem}
/* [ge-146] 44×44 : cible tactile (était 32). */
.modal-close{width:44px;height:44px;border-radius:10px;border:none;background:#f0f3f7;cursor:pointer;font-size:1rem}
.modal-body{padding:20px 24px}
.modal-footer{padding:16px 24px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:10px;position:sticky;bottom:0;background:#fff;border-radius:0 0 20px 20px}
/* Toast */
.toast{position:fixed;top:20px;right:20px;background:var(--green);color:#fff;padding:12px 20px;border-radius:10px;font-size:.84rem;font-weight:600;z-index:500;animation:fadeIn .3s;box-shadow:0 8px 24px rgba(0,0,0,.18)}
.toast.err{background:var(--red)}
@keyframes fadeIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}
/* ══ Refonte — coquille pk-* : topbar logo, tab bar basse + FAB, sheet scan, menu, sidebar desktop ══ */
/* Topbar : blanche (maquette), écrase le bleu hérité — définie après, même spécificité = elle gagne */
.topbar{background:var(--surface);border-bottom:1px solid var(--border);color:var(--text)}
.topbar .avatar{background:linear-gradient(140deg,#2c53b0,var(--eld-blue));color:#fff;box-shadow:inset 0 1px 0 rgba(255,255,255,.22)}
.topbar .user-name{color:var(--text2)}
.topbar .btn-logout{background:var(--bg);color:var(--text2);border:1px solid var(--border)}
.pk-brand{display:flex;align-items:center;gap:11px}
.pk-logo{height:25px;width:auto;display:block}
.pk-sep{width:1px;height:22px;background:var(--border)}
.pk-word{font-family:'DM Sans',sans-serif;font-weight:700;font-size:.95rem;color:var(--eld-blue);letter-spacing:-.01em;white-space:nowrap}
.pk-section{animation:pkfade .18s ease}
@keyframes pkfade{from{opacity:.4}to{opacity:1}}
/* ⚠️ .pk-sheet{transition:none} est déclaré AVANT la base .pk-sheet de chaque portail (même spécificité) :
   inerte depuis l'origine — constaté à ge-109, laissé tel quel (rendu identique exigé), à traiter à part. */
@media (prefers-reduced-motion:reduce){.pk-section{animation:none}.pk-sheet{transition:none}}
.pk-page-head{margin:2px 2px 14px;position:relative}
/* Chevron de retour vers le Menu, dans la BARRE D'EN-TETE des deux portails.
   Dans la barre et non dans chaque en-tete de section : un seul bouton, toujours au meme
   endroit, y compris sur les ecrans d'erreur — qu'il aurait fallu penser un par un.
   Il reste VISIBLE au-dessus du seuil desktop, la ou la tab bar est masquee et ou 'menu'
   est absent du rail : sans lui l'ecran Menu — et « Changer le mot de passe », qui n'existe
   que la — devient strictement injoignable (mesure des deux portails, 2026-09-14).
   Couleur --eld-blue, comme les chevrons de contenu : la regle .topbar de la coquille est
   SURCHARGEE plus bas (portal-shell.css) en fond clair — un chevron blanc y serait
   invisible. Verifie : 10,79:1 sur --surface.
   Et `.logo{margin-right:auto}` : la topbar est en justify-content:space-between, un
   TROISIEME enfant y recentrait le logo. La marge automatique rend l'espace libre au
   logo, qui repousse le bloc utilisateur a droite et garde chevron+logo colles a gauche. */
.topbar .topbar-back{width:44px;height:44px;align-items:center;justify-content:center;margin-left:-8px;margin-right:2px;color:var(--eld-blue);background:none;border:none;cursor:pointer;flex:none}
.topbar .topbar-back + .logo{margin-right:auto}
.topbar .topbar-back svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

.pk-page-head .eyeb{font-size:.64rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:#2c53b0;margin-bottom:3px}
.pk-page-head h1{font-family:'DM Sans',sans-serif;font-weight:800;font-size:1.5rem;letter-spacing:-.02em;color:var(--text)}
.pk-page-head .sub{font-size:.78rem;color:var(--text3);margin-top:2px;font-weight:400}
#app .main{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
/* tab bar basse (mobile) */
.pk-tabbar{position:fixed;bottom:0;left:0;right:0;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border);display:flex;align-items:stretch;justify-content:space-around;padding:6px 6px calc(12px + env(safe-area-inset-bottom));z-index:150}
.pk-tab{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:.62rem;font-weight:600;color:var(--text3);background:none;border:none;cursor:pointer;padding:4px 0 0;font-family:inherit}
.pk-tab svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.pk-tab.on{color:var(--eld-blue)}
.pk-tab.on svg{stroke-width:2.2}
.pk-tab.on::before{content:"";position:absolute;top:-2px;left:50%;transform:translateX(-50%);width:18px;height:3px;border-radius:2px;background:var(--eld-blue)}
.pk-tab-fab{flex:1.1;position:relative;border:none;background:none;cursor:pointer;padding:0;font-family:inherit}
/* color:#fff n'est pas décoratif — l'icône est injectée par icon(), qui pose un style INLINE
   `stroke:currentColor`. Un style inline bat toute règle externe : la ligne `.pk-fab svg{stroke:#fff}`
   ci-dessous ne s'appliquait donc jamais, et currentColor valait le noir hérité (mesuré rgb(0,0,0)
   sur le portail atelier, 2026-09-14). En posant la couleur ICI, currentColor résout en blanc. */
.pk-fab{position:absolute;left:50%;top:-30px;transform:translateX(-50%);width:58px;height:58px;border-radius:50%;background:linear-gradient(160deg,#3a63c4,var(--eld-blue) 70%);display:flex;align-items:center;justify-content:center;border:4px solid var(--bg);box-shadow:inset 0 1px 0 rgba(255,255,255,.28),0 0 0 1px rgba(30,58,123,.12);color:#fff}
.pk-fab svg{width:25px;height:25px;stroke:#fff;stroke-width:2;fill:none;stroke-linecap:round}
.pk-tab-fab .pk-lbl{position:absolute;bottom:2px;left:0;right:0;text-align:center;font-size:.62rem;font-weight:700;color:var(--eld-blue)}
/* sheet : .pk-dim et .pk-sheet (z-index, géométrie, débordement) sont propres à chaque portail ; états .open et contenu communs */
.pk-dim.open{display:block}
.pk-sheet.open{transform:none}
.pk-grab{width:40px;height:4px;border-radius:99px;background:#dfe4ee;margin:0 auto 14px}
.pk-sheet h3{font-family:'DM Sans',sans-serif;font-weight:800;font-size:1.15rem;margin-bottom:4px;color:var(--text)}
.pk-sheet .pk-sub{font-size:.8rem;color:var(--text3);margin-bottom:16px}
.pk-choice{display:flex;align-items:center;gap:14px;border:1.5px solid var(--border);border-radius:14px;padding:15px;margin-bottom:10px;background:var(--bg);width:100%;cursor:pointer;text-align:left;font-family:inherit}
.pk-choice .ic{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex:none}
.pk-choice .ic svg{width:25px;height:25px;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.pk-choice .a{font-family:'DM Sans',sans-serif;font-weight:700;font-size:.95rem;color:var(--text)}
.pk-choice .b{font-size:.76rem;color:var(--text2);margin-top:2px}
.pk-choice .arr{margin-left:auto;color:#c3cad8;font-size:1.1rem;font-weight:700}
/* menu */
.pk-group{font-size:.7rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text3);margin:16px 4px 8px}
.pk-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
/* .pk-row de base : propre à chaque portail (l'atelier impose min-height:48px) */
.pk-row:last-child{border-bottom:0}
.pk-row .ic{width:38px;height:38px;border-radius:10px;background:var(--eld-blue-soft);color:var(--eld-blue);display:flex;align-items:center;justify-content:center;flex:none}
.pk-row .ic svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.pk-row .lbl{flex:1}
.pk-row .lbl .s{display:block;font-size:.7rem;font-weight:500;color:var(--text3);margin-top:1px}
.pk-ct{font-size:.7rem;font-weight:700;border-radius:99px;padding:2px 9px;font-variant-numeric:tabular-nums}
.pk-ct.warn{background:var(--orange-soft);color:var(--orange)}
.pk-ct.info{background:var(--eld-blue-soft);color:#2c53b0}
.pk-ct.crit{background:var(--red-soft);color:var(--red)}
.pk-chev{color:#c3cad8;font-weight:700;font-size:1rem}
.pk-avatar{width:38px;height:38px;border-radius:10px;background:linear-gradient(140deg,#2c53b0,var(--eld-blue));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.8rem;box-shadow:inset 0 1px 0 rgba(255,255,255,.22);flex:none}
/* accueil */
.pk-tiles{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}
.pk-tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px;box-shadow:var(--shadow);position:relative;cursor:pointer;text-align:left;font-family:inherit}
.pk-tile .n{font-family:'DM Sans',sans-serif;font-weight:800;font-size:1.55rem;font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:var(--text)}
.pk-tile .l{font-size:.78rem;font-weight:600;color:var(--text2);margin-top:2px;padding-right:16px}
.pk-tile .s{font-size:.7rem;color:var(--text3);margin-top:1px}
.pk-tile .chev{position:absolute;top:50%;right:12px;transform:translateY(-50%);color:#c3cad8;font-size:1rem;font-weight:700}
.pk-tile.crit .n{color:var(--red)} .pk-tile.warn .n{color:var(--orange)}
.pk-tile.info .n{color:#2c53b0} .pk-tile.ok .n{color:var(--green)}
.pk-map-card{position:relative;z-index:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;margin-bottom:16px}
/* #pk-minimap : propre à chaque portail (hauteur desktop, isolation côté atelier) */
.pk-map-foot{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;gap:10px}
.pk-map-foot .txt{font-size:.78rem;color:var(--text2)}
.pk-map-foot .txt b{color:var(--text)}
.pk-map-foot .go{background:var(--eld-blue-soft);color:var(--eld-blue);border:none;border-radius:10px;padding:7px 12px;font-weight:700;font-size:.8rem;cursor:pointer;font-family:inherit;white-space:nowrap}
.pk-hsec{display:flex;align-items:baseline;justify-content:space-between;margin:4px 2px 10px}
.pk-hsec h2{font-family:'DM Sans',sans-serif;font-weight:700;font-size:1.02rem;letter-spacing:-.01em;color:var(--text)}
.pk-hsec .lnk{font-size:.78rem;font-weight:600;color:#2c53b0;background:none;border:none;cursor:pointer;font-family:inherit}
.pk-act{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:4px 14px}
.pk-act .row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}
.pk-act .row:last-child{border-bottom:none}
.pk-act .ic{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex:none;font-size:.72rem;font-weight:700}
.pk-act .ic.g{background:var(--green-soft);color:var(--green)} .pk-act .ic.o{background:var(--orange-soft);color:var(--orange)}
.pk-act .ic.b{background:var(--eld-blue-soft);color:#2c53b0} .pk-act .ic.r{background:var(--red-soft);color:var(--red)}
.pk-act .ic.v{background:#ede9fe;color:#7c3aed} .pk-act .ic.t{background:#ccfbf1;color:#0f766e} .pk-act .ic.p{background:#fce7f3;color:#be185d}
.pk-act .tx{flex:1;min-width:0}
.pk-act .tx .a{font-size:.8rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pk-act .tx .b2{font-size:.7rem;color:var(--text3)}
/* chips de filtre : carte et stock côté parc, stock et pneus côté atelier (qui remonte .pk-fchip à 48 px) */
.pk-fchips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.pk-fchips::-webkit-scrollbar{display:none}
.pk-fchip{flex:none;border-radius:99px;padding:7px 14px;font-size:.76rem;font-weight:600;background:rgba(255,255,255,.94);border:1px solid var(--border);color:var(--text2);cursor:pointer;font-family:inherit}
.pk-fchip.on{background:linear-gradient(160deg,#2c53b0,var(--eld-blue));border-color:transparent;color:#fff}
/* pneus : KPIs + timeline */
.pk-kpis{display:flex;gap:8px;margin-bottom:12px}
.pk-kpi{flex:1;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:8px 10px;text-align:center;box-shadow:var(--shadow)}
.pk-kpi .n{font-family:'DM Sans',sans-serif;font-weight:800;font-size:1.1rem;color:var(--eld-blue);font-variant-numeric:tabular-nums}
.pk-kpi .n.warn{color:var(--orange)}
.pk-kpi .l{font-size:.62rem;color:var(--text3);font-weight:600}
.pk-day{font-size:.7rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text3);margin:14px 2px 8px}
.pk-mv{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 14px;margin-bottom:8px;display:flex;gap:12px}
.pk-mv .badge{flex:none;min-width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-family:'DM Sans',sans-serif;font-weight:800;font-size:1rem;padding:0 6px}
.pk-mv .badge.out{background:var(--red-soft);color:var(--red)}
.pk-mv .badge.in{background:var(--green-soft);color:var(--green)}
.pk-mv .badge.ext{background:var(--orange-soft);color:var(--orange)}
.pk-mv .c{flex:1;min-width:0}
.pk-mv .l1{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.pk-mv .l1 .ref{font-weight:700;font-size:.85rem;color:var(--text)}
.pk-mv .l1 .qty{font-size:.72rem;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}
.pk-mv .l2{font-size:.75rem;color:var(--text2);margin-top:3px;display:flex;gap:10px;flex-wrap:wrap}
.pk-plate{font-family:'DM Sans',sans-serif;font-variant-numeric:tabular-nums;background:var(--eld-blue-soft);color:var(--eld-blue);border-radius:5px;padding:1px 6px;font-size:.7rem}
.pk-plate.ext{background:var(--orange-soft);color:var(--orange)}
.pk-mv .l3{font-size:.68rem;color:var(--text3);margin-top:4px}
/* sidebar desktop : cachée par défaut, chaque portail l'affiche à son seuil (parc ≥1024 px, atelier ≥900 px) */
.pk-side{display:none}
