/* =========================================================
   UNIPAY GLOBAL RESPONSIVE CORE
   ---------------------------------------------------------
   Global layer only:
   - viewport/orientation/fullscreen variables;
   - left and bottom shell bars;
   - safe-area reserves exposed for page-specific CSS.

   Page layouts must live in css/page-orientation/{page}.css.
========================================================= */
:root{
  --unipay-vh: 1vh;
  --unipay-mobile-vh: 1vh;
  --unipay-mobile-vw: 1vw;
  --unipay-vv-width: 100vw;
  --unipay-vv-height: 100vh;
  --unipay-vv-offset-left: 0px;
  --unipay-vv-offset-top: 0px;
  --unipay-safe-top: env(safe-area-inset-top, 0px);
  --unipay-safe-bottom: env(safe-area-inset-bottom, 0px);
  --unipay-safe-left: env(safe-area-inset-left, 0px);
  --unipay-safe-right: env(safe-area-inset-right, 0px);
  --unipay-sidebar-w: clamp(70px, 5.2vw, 94px);
  --unipay-sidebar-item: clamp(52px, 4.1vw, 70px);
  --unipay-bottom-h: clamp(68px, 7.2vh, 92px);
  --unipay-ui-gap: 12px;
  --unipay-leftbar-measured: var(--unipay-sidebar-w);
  --unipay-bottombar-measured: var(--unipay-bottom-h);
  --unipay-content-left-reserve: 0px;
  --unipay-content-bottom-reserve: calc(var(--unipay-bottombar-measured) + 14px);
}

html,
body{
  min-width:0 !important;
  max-width:var(--unipay-vv-width, 100vw) !important;
}

/* État initial déterministe : un objet explicitement masqué ne doit jamais
   apparaître pendant la lecture de session ou le chargement d'un module. */
html [hidden],
html .hidden{
  display:none !important;
  visibility:hidden !important;
  pointer-events:none !important;
}
html [role="dialog"][aria-hidden="true"],
html [aria-modal="true"][aria-hidden="true"]{
  display:none !important;
  visibility:hidden !important;
  opacity:0 !important;
  pointer-events:none !important;
}

html.unipay-interface-mobile :is(.modal,.dialog,[role="dialog"],.modal-content,.futuristic-modal){
  max-width:min(96%, calc(var(--unipay-vv-width, 100vw) - 16px));
  max-height:calc(var(--unipay-vv-height, 100vh) - 20px);
  box-sizing:border-box;
}

#fut-sidebar,
.fut-sidebar{
  display:block !important;
  position:fixed !important;
  left:calc(var(--unipay-safe-left) + var(--unipay-ui-gap)) !important;
  top:calc(var(--unipay-safe-top) + 78px) !important;
  bottom:calc(var(--unipay-bottom-h) + var(--unipay-safe-bottom) + 18px) !important;
  width:var(--unipay-sidebar-w) !important;
  min-width:var(--unipay-sidebar-w) !important;
  height:auto !important;
  max-height:calc((var(--unipay-vh, 1vh) * 100) - var(--unipay-safe-top) - var(--unipay-safe-bottom) - var(--unipay-bottom-h) - 106px) !important;
  transform:none !important;
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:auto !important;
  z-index:2147480800 !important;
  overflow-y:auto !important;
  overflow-x:hidden !important;
  -ms-overflow-style:none !important;
  scrollbar-width:none !important;
}

#fut-sidebar::-webkit-scrollbar,
.fut-sidebar::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}

#fut-sidebar .fut-sidebar-list,
.fut-sidebar .fut-sidebar-list{
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  gap:clamp(8px, 1.1vh, 13px) !important;
  padding:10px 0 !important;
}

#fut-sidebar .fut-item,
.fut-sidebar .fut-item{
  width:var(--unipay-sidebar-item) !important;
  height:var(--unipay-sidebar-item) !important;
  min-width:var(--unipay-sidebar-item) !important;
  min-height:var(--unipay-sidebar-item) !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  flex:0 0 auto !important;
}

#fut-sidebar .fut-icon,
.fut-sidebar .fut-icon{
  width:clamp(25px, 2.2vw, 34px) !important;
  height:clamp(25px, 2.2vw, 34px) !important;
}

#fut-bottombar,
.fut-bottombar,
.fut-bottom-bar,
.bottom-bar{
  display:flex !important;
  align-items:center !important;
  position:fixed !important;
  left:calc(var(--unipay-sidebar-w) + var(--unipay-safe-left) + 26px) !important;
  right:calc(var(--unipay-safe-right) + 14px) !important;
  bottom:calc(var(--unipay-safe-bottom) + 12px) !important;
  min-height:var(--unipay-bottom-h) !important;
  max-height:min(24vh, 112px) !important;
  transform:none !important;
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:auto !important;
  z-index:2147480790 !important;
  overflow-x:auto !important;
  overflow-y:hidden !important;
  white-space:nowrap !important;
  -ms-overflow-style:none !important;
  scrollbar-width:none !important;
}

#fut-bottombar::-webkit-scrollbar,
.fut-bottombar::-webkit-scrollbar,
.fut-bottom-bar::-webkit-scrollbar,
.bottom-bar::-webkit-scrollbar,
#fut-bottombar .fut-bottom-list::-webkit-scrollbar,
#fut-bottombar .fut-bottombar-list::-webkit-scrollbar,
.fut-bottom-list::-webkit-scrollbar,
.fut-bottombar-list::-webkit-scrollbar{
  width:0 !important;
  height:0 !important;
  display:none !important;
}

#fut-bottombar .fut-bottom-list,
#fut-bottombar .fut-bottombar-list,
.fut-bottom-list,
.fut-bottombar-list{
  overflow-x:auto !important;
  overflow-y:hidden !important;
  overscroll-behavior-x:contain !important;
  -ms-overflow-style:none !important;
  scrollbar-width:none !important;
}

#fut-bottombar .fut-bottom-item,
#fut-bottombar .fut-item,
.fut-bottombar .fut-item,
.fut-bottom-bar .fut-item,
.bottom-bar .fut-item{
  min-width:clamp(64px, 6.2vw, 94px) !important;
  min-height:clamp(52px, 5.4vh, 72px) !important;
  font-size:clamp(.78rem, .86vw, .98rem) !important;
  flex:0 0 auto !important;
}

html.unipay-native-fullscreen,
html:fullscreen,
body:fullscreen{
  width:100vw !important;
  height:calc(var(--unipay-vh, 1vh) * 100) !important;
  background:#020817 !important;
}

html.unipay-native-fullscreen #fut-sidebar,
html.unipay-native-fullscreen .fut-sidebar,
html:fullscreen #fut-sidebar,
html:fullscreen .fut-sidebar{
  z-index:2147483300 !important;
  visibility:visible !important;
  opacity:1 !important;
}

html.unipay-native-fullscreen #fut-bottombar,
html.unipay-native-fullscreen .fut-bottombar,
html.unipay-native-fullscreen .bottom-bar,
html.unipay-native-fullscreen .fut-bottom-bar,
html:fullscreen #fut-bottombar,
html:fullscreen .fut-bottombar,
html:fullscreen .bottom-bar,
html:fullscreen .fut-bottom-bar{
  z-index:2147483290 !important;
  visibility:visible !important;
  opacity:1 !important;
}

@media (min-width:1200px){
  :root{
    --unipay-sidebar-w: clamp(82px, 5.6vw, 104px);
    --unipay-sidebar-item: clamp(60px, 4.35vw, 76px);
    --unipay-bottom-h: clamp(76px, 7.4vh, 98px);
  }
}

@media (max-width:760px){
  :root{
    --unipay-sidebar-w:54px;
    --unipay-sidebar-item:44px;
    --unipay-bottom-h:72px;
    --unipay-ui-gap:6px;
  }

  #fut-sidebar,
  .fut-sidebar{
    left:calc(var(--unipay-safe-left) + 5px) !important;
    top:calc(var(--unipay-safe-top) + 62px) !important;
    bottom:calc(var(--unipay-bottom-h) + var(--unipay-safe-bottom) + 12px) !important;
    width:var(--unipay-sidebar-w) !important;
    min-width:var(--unipay-sidebar-w) !important;
    max-height:calc((var(--unipay-vh, 1vh) * 100) - var(--unipay-safe-top) - var(--unipay-safe-bottom) - var(--unipay-bottom-h) - 82px) !important;
  }

  #fut-sidebar .fut-sidebar-list,
  .fut-sidebar .fut-sidebar-list{
    gap:7px !important;
    padding:8px 0 !important;
  }

  #fut-sidebar .fut-icon,
  .fut-sidebar .fut-icon{
    width:23px !important;
    height:23px !important;
  }

  #fut-bottombar,
  .fut-bottombar,
  .fut-bottom-bar,
  .bottom-bar{
    left:calc(var(--unipay-safe-left) + 6px) !important;
    right:calc(var(--unipay-safe-right) + 6px) !important;
    bottom:calc(var(--unipay-safe-bottom) + 6px) !important;
    min-height:var(--unipay-bottom-h) !important;
    max-height:82px !important;
    border-radius:18px !important;
  }

  #fut-bottombar .fut-bottom-item,
  #fut-bottombar .fut-item,
  .fut-bottombar .fut-item,
  .fut-bottom-bar .fut-item,
  .bottom-bar .fut-item{
    min-width:58px !important;
    min-height:54px !important;
    font-size:11px !important;
  }
}

@media (max-width:420px){
  :root{
    --unipay-sidebar-w:50px;
    --unipay-sidebar-item:40px;
    --unipay-bottom-h:68px;
  }

  #fut-sidebar,
  .fut-sidebar{
    top:calc(var(--unipay-safe-top) + 58px) !important;
  }

  #fut-sidebar .fut-icon,
  .fut-sidebar .fut-icon{
    width:21px !important;
    height:21px !important;
  }

  #fut-bottombar .fut-bottom-item,
  #fut-bottombar .fut-item,
  .fut-bottombar .fut-item,
  .fut-bottom-bar .fut-item,
  .bottom-bar .fut-item{
    min-width:54px !important;
  }
}

/* =========================================================
   CORRECTIF 20260613G — ROOT FULLSCREEN SCROLLABLE
   Cette feuille est injectée après unipay-fullscreen-stability.css.
   On répète donc ici la règle critique pour neutraliser le height:100vh
   antérieur qui bloquait le défilement du root fullscreen sur Android.
   ========================================================= */
html.unipay-native-fullscreen,
html.unipay-root-fullscreen-active,
html.unipay-native-fullscreen:fullscreen,
html.unipay-root-fullscreen-active:fullscreen{
  height:auto !important;
  min-height:calc(var(--unipay-vh, 1vh) * 100) !important;
  overflow-x:hidden !important;
  overflow-y:auto !important;
  touch-action:pan-y !important;
  -webkit-overflow-scrolling:touch !important;
}
html.unipay-native-fullscreen body,
html.unipay-root-fullscreen-active body{
  height:auto !important;
  min-height:calc(var(--unipay-vh, 1vh) * 100) !important;
  overflow-x:hidden !important;
  overflow-y:auto !important;
  touch-action:pan-y !important;
  -webkit-overflow-scrolling:touch !important;
}

/* =========================================================
   CORRECTIF 20260616 — SÉPARATION INTERFACE / APPAREIL
   ---------------------------------------------------------
   Un téléphone en mode navigateur ordinateur garde le layout
   ordinateur : mêmes réserves, mêmes icônes, mêmes barres.
   Les règles mobiles restent actives uniquement avec
   html.unipay-interface-mobile / body.unipay-mobile.
   ========================================================= */
html.unipay-interface-desktop{
  --unipay-sidebar-w:clamp(82px,5.6vw,104px);
  --unipay-sidebar-item:clamp(60px,4.35vw,76px);
  --unipay-bottom-h:clamp(76px,7.4vh,98px);
  --unipay-ui-gap:12px;
  --unipay-content-left-reserve:0px;
}

html.unipay-interface-desktop #fut-sidebar,
html.unipay-interface-desktop .fut-sidebar{
  left:calc(var(--unipay-safe-left) + var(--unipay-ui-gap)) !important;
  top:calc(var(--unipay-safe-top) + 78px) !important;
  bottom:calc(var(--unipay-bottom-h) + var(--unipay-safe-bottom) + 18px) !important;
  width:var(--unipay-sidebar-w) !important;
  min-width:var(--unipay-sidebar-w) !important;
  max-width:var(--unipay-sidebar-w) !important;
  height:auto !important;
  max-height:calc((var(--unipay-vh, 1vh) * 100) - var(--unipay-safe-top) - var(--unipay-safe-bottom) - var(--unipay-bottom-h) - 106px) !important;
  transform:none !important;
}

html.unipay-interface-desktop #fut-sidebar .fut-sidebar-list,
html.unipay-interface-desktop .fut-sidebar .fut-sidebar-list{
  gap:clamp(8px,1.1vh,13px) !important;
  padding:10px 0 !important;
}

html.unipay-interface-desktop #fut-sidebar .fut-item,
html.unipay-interface-desktop .fut-sidebar .fut-item{
  width:var(--unipay-sidebar-item) !important;
  height:var(--unipay-sidebar-item) !important;
  min-width:var(--unipay-sidebar-item) !important;
  min-height:var(--unipay-sidebar-item) !important;
  flex:0 0 auto !important;
}

html.unipay-interface-desktop #fut-sidebar .fut-icon,
html.unipay-interface-desktop .fut-sidebar .fut-icon{
  width:clamp(25px,2.2vw,34px) !important;
  height:clamp(25px,2.2vw,34px) !important;
}

html.unipay-interface-desktop #fut-bottombar,
html.unipay-interface-desktop .fut-bottombar,
html.unipay-interface-desktop .fut-bottom-bar,
html.unipay-interface-desktop .bottom-bar{
  left:calc(var(--unipay-sidebar-w) + var(--unipay-safe-left) + 26px) !important;
  right:calc(var(--unipay-safe-right) + 14px) !important;
  bottom:calc(var(--unipay-safe-bottom) + 12px) !important;
  min-height:var(--unipay-bottom-h) !important;
  max-height:min(24vh,112px) !important;
  border-radius:inherit;
  transform:none !important;
}

html.unipay-interface-desktop #fut-bottombar .fut-bottom-item,
html.unipay-interface-desktop #fut-bottombar .fut-item,
html.unipay-interface-desktop .fut-bottombar .fut-item,
html.unipay-interface-desktop .fut-bottom-bar .fut-item,
html.unipay-interface-desktop .bottom-bar .fut-item{
  min-width:clamp(64px,6.2vw,94px) !important;
  min-height:clamp(52px,5.4vh,72px) !important;
  font-size:clamp(.78rem,.86vw,.98rem) !important;
}

html.unipay-desktop-on-mobile,
html.unipay-desktop-on-mobile body{
  overflow-x:auto !important;
  -webkit-text-size-adjust:100% !important;
  text-size-adjust:100% !important;
}

html.unipay-desktop-on-mobile .desktop-only{
  display:initial;
}

html.unipay-interface-desktop .mobile-only,
html.unipay-desktop-on-mobile .mobile-only{
  display:none !important;
}

/* =========================================================
   CORRECTIF 20260616B — GÉOMÉTRIE ACTIVE CENTRALE
   ---------------------------------------------------------
   Objectif : stabiliser la partie principale page par page,
   sans mélanger appareil physique, mode d'interface et orientation.
   Le routeur marque un seul conteneur principal avec .unipay-active-main.
========================================================= */
:root{
  --unipay-sidebar-width:var(--unipay-sidebar-w, 72px);
  --unipay-bottombar-height:var(--unipay-bottom-h, 72px);
  --unipay-topbar-height:var(--unipay-topbar-measured, 64px);
  --unipay-page-max-w:1480px;
  --unipay-page-pad-x:clamp(10px, 1.35vw, 22px);
  --unipay-page-pad-y:clamp(8px, 1.1vh, 18px);
  /* Les contrôles latéraux sont superposés : aucun espace horizontal réservé. */
  --unipay-active-left:0px;
  --unipay-active-top:var(--unipay-content-top-reserve, 0px);
  --unipay-active-bottom:var(--unipay-content-bottom-reserve, calc(var(--unipay-bottombar-height) + 14px));
  --unipay-active-right:var(--unipay-safe-right, 0px);
}

html.unipay-interface-desktop{
  --unipay-active-left:0px;
  --unipay-active-top:0px;
  --unipay-active-bottom:calc(var(--unipay-bottombar-measured, var(--unipay-bottom-h, 88px)) + 18px);
  --unipay-page-pad-x:clamp(12px, 1.6vw, 28px);
  --unipay-page-pad-y:clamp(10px, 1.2vh, 22px);
}

html.unipay-interface-mobile{
  --unipay-active-left:var(--unipay-content-left-reserve, 0px);
  --unipay-active-top:var(--unipay-content-top-reserve, 0px);
  --unipay-active-bottom:var(--unipay-content-bottom-reserve, calc(var(--unipay-bottombar-measured, 72px) + 14px));
  --unipay-page-pad-x:clamp(8px, 2.6vw, 14px);
  --unipay-page-pad-y:clamp(8px, 1.6vh, 14px);
}

html.unipay-interface-mobile.unipay-no-leftbar{
  --unipay-active-left:0px;
  --unipay-content-left-reserve:0px;
}

html.unipay-interface-mobile.unipay-no-bottombar{
  --unipay-active-bottom:14px;
  --unipay-content-bottom-reserve:14px;
}

html.unipay-interface-mobile.unipay-no-topbar{
  --unipay-active-top:0px;
  --unipay-content-top-reserve:0px;
}

html.unipay-interface-mobile body.unipay-mobile{
  padding-top:calc(var(--unipay-active-top) + var(--unipay-safe-top, 0px)) !important;
  padding-right:var(--unipay-safe-right, 0px) !important;
  padding-bottom:calc(var(--unipay-active-bottom) + var(--unipay-safe-bottom, 0px)) !important;
  padding-left:var(--unipay-safe-left, 0px) !important;
  box-sizing:border-box !important;
}

html.unipay-interface-mobile.unipay-no-leftbar body.unipay-mobile{
  padding-left:var(--unipay-safe-left, 0px) !important;
}

html.unipay-interface-mobile.unipay-no-bottombar body.unipay-mobile{
  padding-bottom:calc(14px + var(--unipay-safe-bottom, 0px)) !important;
}

html.unipay-geometry-ready .unipay-active-main{
  box-sizing:border-box !important;
  min-width:0 !important;
  isolation:isolate;
  overflow-x:hidden !important;
  scroll-margin-bottom:var(--unipay-active-bottom) !important;
}

html.unipay-interface-desktop .unipay-active-main{
  width:min(100%, calc(100vw - var(--unipay-safe-left, 0px) - var(--unipay-safe-right, 0px))) !important;
  max-width:min(var(--unipay-page-max-w, 1480px), calc(100vw - var(--unipay-safe-left, 0px) - var(--unipay-safe-right, 0px))) !important;
  margin-left:auto !important;
  margin-right:auto !important;
  padding-left:var(--unipay-page-pad-x) !important;
  padding-right:var(--unipay-page-pad-x) !important;
  padding-bottom:max(var(--unipay-active-bottom), var(--unipay-page-pad-y)) !important;
}

html.unipay-interface-desktop.unipay-desktop-on-mobile .unipay-active-main{
  width:min(100%, var(--unipay-desktop-layout-w, 1280px)) !important;
  max-width:min(var(--unipay-page-max-w, 1480px), var(--unipay-desktop-layout-w, 1280px)) !important;
}

html.unipay-interface-mobile .unipay-active-main{
  width:100% !important;
  max-width:100% !important;
  margin-left:0 !important;
  margin-right:0 !important;
  padding-left:var(--unipay-page-pad-x) !important;
  padding-right:var(--unipay-page-pad-x) !important;
  padding-bottom:max(12px, var(--unipay-page-pad-y)) !important;
}

html.unipay-interface-mobile.unipay-landscape .unipay-active-main{
  --unipay-page-pad-x:clamp(10px, 1.8vw, 18px);
  --unipay-page-pad-y:clamp(6px, 1.3vh, 12px);
}

html.unipay-interface-mobile.unipay-portrait .unipay-active-main{
  --unipay-page-pad-x:clamp(8px, 2.4vw, 12px);
}

html.unipay-interface-mobile .unipay-active-main :is(img, video, canvas, iframe){
  max-width:100% !important;
}

html.unipay-interface-mobile .unipay-active-main :is(.grid,.cards,.news-grid,.publications-grid,.main-grid,.form-grid,.dash-grid,.modules-grid,.cards-grid,.balance-container,.operations-grid,.partners-grid,.wallet-actions-grid){
  max-width:100% !important;
}

html.unipay-interface-desktop :is(#fut-sidebar,.fut-sidebar),
html.unipay-interface-desktop :is(#fut-bottombar,.fut-bottombar,.fut-bottom-bar,.bottom-bar){
  flex-shrink:0 !important;
}

html.unipay-interface-mobile.unipay-no-leftbar :is(#fut-bottombar,.fut-bottombar,.fut-bottom-bar,.bottom-bar){
  left:calc(var(--unipay-safe-left, 0px) + 6px) !important;
}

html.unipay-interface-mobile.unipay-has-leftbar :is(#fut-bottombar,.fut-bottombar,.fut-bottom-bar,.bottom-bar){
  left:calc(var(--unipay-safe-left, 0px) + 6px) !important;
}

html.unipay-interface-mobile.unipay-portrait :is(#fut-sidebar,.fut-sidebar,aside.sidebar){
  width:var(--unipay-sidebar-width) !important;
  min-width:var(--unipay-sidebar-width) !important;
  max-width:var(--unipay-sidebar-width) !important;
}

html.unipay-interface-mobile.unipay-landscape :is(#fut-sidebar,.fut-sidebar,aside.sidebar){
  width:clamp(52px, 6.4vw, 70px) !important;
  min-width:clamp(52px, 6.4vw, 70px) !important;
  max-width:clamp(52px, 6.4vw, 70px) !important;
}

html.unipay-interface-mobile :is(.modal,.modal-overlay,.overlay,.dialog,[role="dialog"]){
  box-sizing:border-box !important;
}

html.unipay-interface-mobile.unipay-has-leftbar :is(.modal,.modal-overlay,.overlay,.dialog[open]){
  padding-left:8px !important;
}


/* =========================================================
   CORRECTIF 20260616D — NEUTRALISATION CHIRURGICALE DU MAX-HEIGHT GLOBAL
   ---------------------------------------------------------
   Certaines feuilles anciennes imposaient main/.content { max-height: ... }.
   Cela coupait ou comprimait la partie principale lorsque le routeur marquait
   .unipay-active-main. On neutralise seulement la contrainte de hauteur ;
   les positions restent dans les feuilles locales page-orientation/*.css.
========================================================= */
html.unipay-geometry-ready .unipay-active-main{
  max-height:none !important;
  height:auto !important;
}
