/* Takoori — menu mobile "app-like" (15/08/2026). Barre d'onglets fixe en bas +
   feuilles plein ecran (sheets) qui montent depuis le bas, comme une app native.
   Uniquement visible < 900px. Utilise les tokens partages tk-tokens.r2.css. */

.tk-mobapp{display:none;color:var(--tk-ink)}
.tk-mobapp *{border-color:transparent}

@media (max-width:900px){
  .tk-mobapp{display:block;font-family:var(--tk-body)}

  /* Masque UNIQUEMENT le bouton hamburger + le tiroir off-canvas natifs Astra
     (pas #ast-mobile-header entier — il contient aussi logo/recherche/panier/compte
     qu'on garde). Verifie DOM reel (15/08) :
     bouton = .menu-toggle.main-header-menu-toggle
     tiroir = .ast-mobile-popup-drawer */
  .menu-toggle.main-header-menu-toggle,
  .ast-mobile-popup-drawer{ display:none !important }

  /* Barre d'onglets fixe en bas, style app */
  .tk-mobapp-tabbar{
    position:fixed;left:0;right:0;z-index:998;
    display:flex;background:var(--tk-bg);border-top:1px solid var(--tk-line);
    box-shadow:0 -4px 16px rgba(0,0,0,.06);
    /* 18/08 (4e tentative double-tap iOS) -- CAUSE ENFIN IDENTIFIEE. Safari
       iOS reserve les ~44 DERNIERS PIXELS du viewport comme zone de
       declenchement de sa propre barre d'outils : tout element qui s'y trouve
       (meme un simple lien) exige DEUX taps, le 1er etant absorbe par Safari
       (documente par Ben Frain + plusieurs fils developpeurs Apple ; un dev
       rapporte avoir eu besoin de jusqu'a 72px de marge pour en sortir).
       Nos icones etaient a ~31px du bas -> en plein dedans.
       Ca explique pourquoi les 3 correctifs precedents ont echoue : ce n'est
       ni un delai (touchstart/touchend), ni une couche de composition
       (translate3d), ni touch-action -- c'est une ZONE GEOGRAPHIQUE.
       Correctif : marge basse qui remonte les zones cliquables au-dessus de
       la bande. 38px = compromis (sort de la bande sans trop manger l'ecran) ;
       si le double-tap persiste, AUGMENTER cette valeur (44 -> 56 -> 72). */
    /* 18/08 (5e tentative) -- CORRECTION DE L'APPROCHE PRECEDENTE. Le fil
       developpeurs Apple #685481 est explicite : la combinaison
       position:fixed + bottom:0 + padding-bottom:env(safe-area-inset-bottom)
       EST la configuration buguee -- Safari peint le pied de page au-dessus
       de l'endroit ou il situe reellement sa zone de clic, ce qui le rend
       non-tapable. Augmenter le padding (tentative 4 : 48px) ne sort donc
       PAS du piege : c'est le padding lui-meme qui cree le decalage
       rendu/hit-test, donc plus on en met, plus l'ecart grandit.
       Correctif documente (Samuel Kraft, "Bottom tab bars on Safari iOS") :
       decaler via `bottom: calc(... + env(safe-area-inset-bottom))` au lieu
       de padding -- l'element entier se deplace, rendu et zone de clic
       ensemble, plus de desynchronisation. Le ::after prolonge le fond sous
       la barre pour qu'aucun contenu ne transparaisse dans l'espace libere. */
    bottom:calc(env(safe-area-inset-bottom, 0px) + 16px);
    padding-bottom:0;
    /* 18/08 -- masquage au scroll (JS ajoute/retire .tk-hidden). transform
       plutot que display/visibility : reste dans le flux de composition,
       transition fluide, pas de reflow. */
    transition:transform .25s ease;
    /* 18/08 (3e tentative sur le double-tap iOS) -- DIAGNOSTIC AFFINE : le
       correctif "tap rapide" JS (touchstart/touchend) n'a RIEN change chez
       Joffrey. C'est l'info decisive : si touchstart ne suffit pas, c'est que
       les evenements tactiles n'atteignent meme pas le bouton -- donc PAS un
       probleme de delai (hypothese 1 et 2, fausses), mais bien une ZONE DE
       CLIC mal placee. Sur iOS, un element position:fixed garde une hit-test
       region calculee par le thread principal, qui ne se resynchronise pas
       avec la position visuelle (geree par le compositeur) tant que le scroll
       / la barre Safari n'est pas stabilise -> le 1er tap tombe a cote.
       Correctif standard documente (Safari z-index/fixed/hit-test) : forcer
       l'element dans sa PROPRE couche de composition, ce qui aligne la zone
       de clic sur le rendu reel. translate3d au lieu de translateY pour que
       la couche existe aussi a l'etat visible, pas seulement pendant
       l'animation. CSS pur, additif, aucun JS -- contrairement a la tentative
       visualViewport qui avait casse la tabbar. */
    transform:translate3d(0,0,0);
    -webkit-backface-visibility:hidden;
    backface-visibility:hidden;
  }
  .tk-mobapp-tabbar.tk-hidden{transform:translate3d(0,calc(100% + env(safe-area-inset-bottom, 0px) + 16px),0)}
  /* Prolonge le fond sous la barre (espace libere par le decalage `bottom`)
     pour qu'aucun contenu de page ne transparaisse. pointer-events:none :
     purement decoratif, ne recree PAS de zone cliquable dans la bande
     reservee par Safari. */
  .tk-mobapp-tabbar::after{
    content:'';position:absolute;left:0;right:0;top:100%;
    height:calc(env(safe-area-inset-bottom, 0px) + 16px);
    background:var(--tk-bg);pointer-events:none;
  }
  .tk-mobapp-tab{
    flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
    padding:8px 4px 7px;color:var(--tk-muted);text-decoration:none;font-size:10.5px;font-weight:500;
    background:none;border:0;position:relative;-webkit-tap-highlight-color:transparent;
    /* 18/08 -- Astra applique text-transform:uppercase a tout <button> par
       defaut (reglage bouton du Customizer). "Menu" et "Tchat" sont des
       <button>, "Accueil/Panier/Compte" des <a> -- d'ou l'incoherence
       MENU/TCHAT en majuscules vs le reste en casse normale, signalee par
       Joffrey. On force la casse normale pour toute la tabbar. */
    text-transform:none;
    /* Meme piege que le text-transform : Astra applique aussi sa police
       native (Lato) + letter-spacing aux <button> (Menu, Tchat), differente
       de notre police de marque (Inter) sur les <a>. Force l'uniformite. */
    font-family:var(--tk-body) !important;letter-spacing:normal !important;
    /* 18/08 -- line-height natif differe entre <a> (herite, ~19.5px) et
       <button> (valeur navigateur ~10.5px) -- decalait le centrage vertical
       du contenu flex de 4-5px entre Menu/Tchat et le reste. Force une
       valeur identique partout, source du desalignement signale par Joffrey. */
    line-height:1 !important;
    /* 18/08 -- Joffrey signale un besoin de double-tap sur la tabbar quand la
       barre Safari iOS est encore visible (avant scroll). Piste connue : Safari
       peut absorber le 1er tap pres du bord bas de l'ecran pour retracter sa
       propre barre, le clic n'atteint alors notre bouton qu'au 2e tap.
       touch-action:manipulation supprime l'ambiguite de delai/double-tap-zoom
       que Safari applique par defaut aux zones tactiles -- fix conservateur,
       NON verifie sur vrai appareil (Playwright = Chromium headless, ne
       reproduit pas ce comportement Safari specifique). A confirmer par
       Joffrey sur iPhone reel avant d'aller plus loin si ca ne suffit pas. */
    touch-action:manipulation;
  }
  /* 18/08 (v2) -- Icones toujours jugees "sans personnalite" malgre le
     premier ajustement (traits arrondis seuls insuffisant). Nouvelle
     direction, calee sur le VRAI langage visuel Takoori identifie dans le
     favicon (inc/img/takoori-favicon.svg) : badge carre arrondi (rx doux),
     fond teal plein + glyphe blanc. Valide par Joffrey sur apercu avant
     implementation. Etat repos = badge teinte clair + icone teal ; etat actif
     (page courante, cf $is_home/$is_cart/$is_account en PHP) = badge teal
     plein + icone blanche. */
  .tk-mobapp-badge-icon{
    width:34px;height:34px;border-radius:10px;background:var(--tk-tint);
    color:var(--tk-accent-d);display:flex;align-items:center;justify-content:center;
    position:relative;transition:background .15s,color .15s;
  }
  .tk-mobapp-tab--active .tk-mobapp-badge-icon{background:var(--tk-accent);color:#fff}
  .tk-mobapp-tab--active span:last-child{color:var(--tk-accent);font-weight:600}
  .tk-mobapp-tab svg{width:18px;height:18px;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
  .tk-mobapp-tab:active{color:var(--tk-accent-d)}
  /* 18/08 -- Meme piege deja rencontre sur d'autres boutons du site (fiche
     produit 16/08, panier) : le CSS natif Astra applique border-color:#A7244E
     (bordeaux) sur TOUT bouton/lien au focus (main.min.css, "button:focus{...}").
     Notre "border:0" de base ne le neutralise pas specifiquement pour :focus --
     Joffrey voit un residu bordeaux au tap sur les icones tabbar. */
  .tk-mobapp-tab:focus, .tk-mobapp-tab:focus-visible, .tk-mobapp-tab:active{
    border-color:transparent !important; outline:none !important;
  }
  /* Badge quantite repositionne : vit desormais dans .tk-mobapp-badge-icon
     (34x34) au lieu de toute la largeur du tab -- coin haut-droit du badge
     icone, pas du bouton entier. */
  .tk-mobapp-badge{
    position:absolute;top:-3px;right:-3px;min-width:15px;height:15px;padding:0 3px;
    border-radius:999px;background:var(--tk-cta);color:#fff;font-size:9.5px;font-weight:700;
    display:flex;align-items:center;justify-content:center;line-height:1;
    border:1.5px solid var(--tk-bg);
  }

  /* Feuilles plein ecran (categories / recherche) — montent depuis le bas */
  .tk-mobapp-sheet{
    position:fixed;left:0;right:0;bottom:0;top:auto;max-height:88vh;z-index:1000;
    background:var(--tk-bg);border-radius:18px 18px 0 0;box-shadow:0 -10px 30px rgba(0,0,0,.18);
    transform:translateY(100%);transition:transform .28s cubic-bezier(.32,.72,0,1);
    display:flex;flex-direction:column;overflow:hidden;
  }
  /* 17/08 -- le panneau Recherche ne contient qu'un champ court -> se replie a
     sa hauteur de contenu (~143px observe), pousse le champ pres du bas de
     l'ecran. FiboSearch positionne ses suggestions en `position:fixed` juste
     sous le champ -> avec le champ deja en bas, la liste de resultats se
     retrouve quasi entierement sous le bas de l'ecran (invisible). Force ce
     panneau precis a la meme hauteur que celui des categories, pour laisser
     de la place sous le champ. */
  .tk-mobapp-sheet[data-tk-sheet="search"]{ min-height:88vh; justify-content:flex-start; }
  /* 17/08 -- transform:translateY(0) (meme a zero) cree un containing block
     pour les position:fixed enfants (spec CSS) : le panneau devient la reference
     du dropdown FiboSearch au lieu du vrai viewport -> scroll tactile casse sur
     Safari iOS notamment. transform:none une fois ouvert = plus de containing
     block, le dropdown se recale sur le vrai viewport, scroll natif restaure.
     Visuellement identique (translateY(0) et none = meme position). */
  .tk-mobapp-sheet.tk-open{transform:none}
  .tk-mobapp-sheet-head{
    display:flex;align-items:center;justify-content:space-between;padding:16px 18px 12px;
    border-bottom:1px solid var(--tk-line);font-weight:600;font-size:16px;color:var(--tk-ink);
    flex-shrink:0;position:relative;
  }
  .tk-mobapp-sheet-head::before{
    content:"";position:absolute;top:7px;left:50%;transform:translateX(-50%);
    width:36px;height:4px;border-radius:999px;background:var(--tk-line);
  }
  .tk-mobapp-close{
    width:30px;height:30px;border-radius:999px;border:0;background:var(--tk-tint);
    color:var(--tk-accent-d);font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;
    cursor:pointer;
  }
  .tk-mobapp-sheet-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 18px 24px;flex:1}

  /* Accordeon categories (drill-down tactile) */
  .tk-mobapp-acc{border-bottom:1px solid var(--tk-line)}
  .tk-mobapp-row{
    width:100%;display:flex;align-items:center;justify-content:space-between;
    padding:15px 2px;background:none;border:0;font-size:15.5px;font-weight:600;color:var(--tk-ink);
    text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent;
  }
  /* 17/08 -- Astra fixe globalement button:hover/:focus/:active en bordeaux
     (background+border+color ensemble, meme piege deja rencontre sur le panier
     10/08). .tk-mobapp-row etant un <button>, il heritait de cette regle des
     l'ouverture d'un accordeon (etat :focus au tap). Neutralise explicitement
     les 3 proprietes ensemble, sur tous les etats + l'etat ouvert. */
  .tk-mobapp-row:hover, .tk-mobapp-row:focus, .tk-mobapp-row:active,
  .tk-mobapp-acc.tk-open > .tk-mobapp-row{
    background-color:transparent!important; border-color:transparent!important; color:var(--tk-ink)!important;
  }
  .tk-mobapp-leaf:hover, .tk-mobapp-leaf:focus, .tk-mobapp-leaf:active, .tk-mobapp-leaf:visited{
    background-color:transparent!important; border-color:transparent!important; color:var(--tk-ink)!important;
  }
  .tk-mobapp-row-soon{color:var(--tk-muted);font-weight:500}
  .tk-mobapp-row-soon em{font-style:normal;font-size:11px;background:var(--tk-tint);color:var(--tk-accent-d);
    padding:2px 8px;border-radius:999px;font-weight:600}
  .tk-mobapp-chevron{
    width:8px;height:8px;border-right:2px solid var(--tk-muted);border-bottom:2px solid var(--tk-muted);
    transform:rotate(-45deg);transition:transform .2s;flex-shrink:0;
  }
  .tk-mobapp-acc.tk-open .tk-mobapp-chevron{transform:rotate(45deg)}
  .tk-mobapp-acc-panel{
    display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s ease;
  }
  .tk-mobapp-acc-inner{overflow:hidden;min-height:0}
  .tk-mobapp-acc.tk-open .tk-mobapp-acc-panel{grid-template-rows:1fr}
  .tk-mobapp-subhead{
    display:block;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--tk-muted);
    margin:10px 0 4px;padding-top:6px;
  }
  .tk-mobapp-leaf{
    display:flex;align-items:center;justify-content:space-between;padding:11px 2px;
    color:var(--tk-ink);text-decoration:none;font-size:14.5px;border-top:1px solid var(--tk-line);
  }
  .tk-mobapp-subhead + .tk-mobapp-leaf, .tk-mobapp-leaf:first-child{border-top:0}
  .tk-mobapp-leaf em{font-style:normal;font-size:11.5px;color:var(--tk-muted)}
  .tk-mobapp-leaf-disabled{color:var(--tk-muted);padding:11px 2px;font-size:14.5px}

  /* Recherche plein ecran (fallback brut, si FiboSearch desactive) */
  .tk-mobapp-search-form{display:flex;gap:8px;padding-top:8px}
  .tk-mobapp-search-input{
    flex:1;height:46px;border:1px solid var(--tk-line);border-radius:999px;
    padding:0 16px;font-size:16px;background:var(--tk-surface);color:var(--tk-ink);
  }
  .tk-mobapp-search-input:focus{outline:none;border-color:var(--tk-accent);background:var(--tk-bg)}
  .tk-mobapp-search-submit{
    height:46px;padding:0 18px;border-radius:999px;border:0;background:var(--tk-accent);
    color:#fff;font-weight:600;font-size:14px;cursor:pointer;
  }

  /* Recherche plein ecran — FiboSearch (dgwt-wcas), meme charte que le header desktop */
  .tk-mobapp-fibosearch{padding-top:8px;position:relative}
  .tk-mobapp-fibosearch .dgwt-wcas-search-wrapp,
  .tk-mobapp-fibosearch .dgwt-wcas-sf-wrapp,
  .tk-mobapp-fibosearch .dgwt-wcas-search-form{width:100% !important;max-width:100% !important}
  .tk-mobapp-fibosearch .dgwt-wcas-search-input{
    width:100% !important;height:46px !important;border:1px solid var(--tk-line) !important;
    border-radius:999px !important;background:var(--tk-surface) !important;
    font-family:var(--tk-body) !important;font-size:16px !important;color:var(--tk-ink) !important;
    transition:border-color .15s !important;
  }
  .tk-mobapp-fibosearch .dgwt-wcas-search-input:focus{
    outline:none !important;border-color:var(--tk-accent) !important;background:var(--tk-bg) !important;
  }
  .tk-mobapp-fibosearch .dgwt-wcas-icon svg, .tk-mobapp-fibosearch .dgwt-wcas-icon{
    color:var(--tk-muted) !important;fill:var(--tk-muted) !important;
  }
  /* Le panneau de suggestions doit rester DANS le sheet plein ecran, pas flotter derriere */
  /* 17/08 -- CORRECTIF (v2) : le plugin DETACHE la liste de suggestions du DOM
     du panneau et la reattache directement en enfant de <body> (classe
     .dgwt-wcas-suggestions-wrapp-fixed, position:fixed !important dans son
     propre CSS) -- notre 1ere tentative (position:static scopee au panneau)
     ne pouvait jamais matcher un element qui n'est plus dans le panneau.
     Fix retenu : garder position:fixed (necessaire, l'element est hors panneau)
     mais le borner a une portion de l'ecran + scroll interne force, pour que
     tout depassement reste explorable au doigt quelle que soit la longueur
     de la liste. Cible les 2 classes ensemble (specificite 0,2,0) pour battre
     la regle plugin (0,1,0) meme si le plugin charge apres nous. */
  .dgwt-wcas-suggestions-wrapp.dgwt-wcas-suggestions-wrapp-fixed{
    max-height:55vh !important; overflow-y:auto !important;
    -webkit-overflow-scrolling:touch !important;
  }

  /* Scrim (fond sombre derriere la feuille ouverte) */
  .tk-mobapp-scrim{
    position:fixed;inset:0;z-index:999;background:rgba(21,25,28,.4);
    opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s;
  }
  .tk-mobapp.tk-scrim-on .tk-mobapp-scrim{opacity:1;visibility:visible}

  /* Laisse de la place en bas de page pour ne pas passer sous la tabbar */
  html.tk-mobapp-lock{overflow:hidden}
  /* Reserve sous le contenu = hauteur barre + son decalage bottom, pour que
     rien ne finisse cache derriere la tabbar. */
  body{padding-bottom:calc(64px + env(safe-area-inset-bottom, 0px) + 16px)}
}

@media (max-width:900px){
  /* 18/08 -- Bulle Tidio flottante masquee en PERMANENCE sur mobile (plus
     seulement repositionnee) : l'onglet Tchat de la tabbar (.tk-btn-chat,
     meme listener de clic delegue que la bulle, cf tidio-ondemand.php) fait
     desormais ce travail. Bulle jugee "polluante visuellement" par Joffrey.
     DEUX elements a couvrir : #tk-chat-launcher (notre placeholder AVANT
     chargement du script Tidio) ET #tidio-chat (bulle NATIVE que Tidio genere
     lui-meme apres chargement -- reapparait a la fermeture du chat si non
     couverte ; le 1er masquage 18/08 ne visait que le placeholder, bug
     signale par Joffrey en rouvrant/refermant le chat). */
  #tk-chat-launcher{ display:none !important }

  /* 18/08 -- Recherche sortie du menu app-like (onglet dedie + feuille FiboSearch
     retires : experience jugee pas assez propre par Joffrey malgre les correctifs
     clavier/visualViewport du 17/08). La recherche desktop (dgwt-wcas, 420px,
     header-style.r*.css) redevient la SEULE recherche mobile -- native, deja
     fonctionnelle partout ailleurs sur le site, plus de composant maison a
     maintenir. Donc: PAS de display:none ici. */

  /* 18/08 -- Icone panier du header masquee sur mobile : doublon avec l'onglet
     Panier de la tabbar app (meme destination /panier/, meme badge quantite).
     L'onglet en bas est le pattern mobile pertinent (portee au pouce), l'icone
     du haut n'apporte rien de plus -- meme logique que le retrait recherche. */
  .ast-site-header-cart{ display:none !important }
}
