/* ────────────────────────────────────────────────────────────────────────────
   Fonts
──────────────────────────────────────────────────────────────────────────── */
@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');

/* ────────────────────────────────────────────────────────────────────────────
   Design tokens
──────────────────────────────────────────────────────────────────────────── */
:root{
  --c-primary-dark: #242855;
  --c-primary: #2e5ea9;
  --c-text: #000000de;
  --c-text-white: #ffffffde;
  --c-text-muted: #494949;
  --c-bg: #ffffff;
  --c-overlay: #000;
  --c-muted: #e0e0e0;
  --c-muted-2: #f0f0f0;

  --radius: 6px;
  --shadow: 0 5px 15px rgba(0,0,0,.30);
  --shadow-soft: 0 4px 8px rgba(0,0,0,.10);

  /* Layout fluid */
  --edge-pad: 16px;

  /* BarreInfo largeur fluide par défaut (desktop standard) */
  --barre-min: 320px;
  --barre-max: 720px;
  --barre-fluid: 28vw;

  --btn-fz: clamp(.68rem, .55rem + .35vw, .86rem);
  --btn-pad-y: 10px;
  --btn-pad-x: 20px;
}

/* ────────────────────────────────────────────────────────────────────────────
   Reset / base + viewport robuste (iOS/Android)
──────────────────────────────────────────────────────────────────────────── */
*,
*::before,
*::after{ box-sizing: border-box; }

html, body{
  margin: 0;
  padding: 0;
  width: 100vw;  width: 100svw;  width: 100dvw;
  height: 100vh; height: 100svh; height: 100dvh;
  overflow: hidden;                 /* canvas plein écran + UI flottante */
  font-size: 16px;
  font-family: 'Montserrat', system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
  cursor: grab;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  background:#f2f2f2;               /* masque toute bande noire résiduelle */
}
@supports (-webkit-touch-callout: none){
  html, body{ height: -webkit-fill-available; }
}
body:active{ cursor: grabbing; }

/* Canvas plein écran robuste */
canvas#MyCanvas{
  display:block;
  position:fixed; inset:0;
  width:100vw;  width:100svw;  width:100dvw;
  height:100vh; height:100svh; height:100dvh;
  z-index:0;
}
@supports (-webkit-touch-callout: none){
  canvas#MyCanvas{ height:-webkit-fill-available; }
}

/* ────────────────────────────────────────────────────────────────────────────
   Loader overlay
──────────────────────────────────────────────────────────────────────────── */
#loader-overlay{
  position:fixed; inset:0;
  display:flex; flex-direction:column; gap:16px;
  align-items:center; justify-content:center;
  background:var(--c-overlay); color:#fff; z-index:9999;
  transition:opacity .4s ease;
}
#loader-overlay.hidden{ opacity:0; pointer-events:none; }
.loader-logo{
  position:absolute; top: max(20px, env(safe-area-inset-top));
  right: max(20px, env(safe-area-inset-right));
  width:44px; height:44px;
  display:grid; place-items:center; text-decoration:none;
  backdrop-filter: blur(6px);
}
.loader-logo img{ width:28px; height:28px; display:block; }
.loader-ring{ position:relative; width:min(240px,70vw); aspect-ratio:1/1; display:grid; place-items:center; }
.ring{ width:100%; height:100%; transform: rotate(-90deg); }
.ring-track, .ring-progress{ fill:none; stroke-linecap:round; }
.ring-track{ stroke:#1f2230; stroke-width:12; opacity:.8; }
.ring-progress{
  stroke:url(#ringGradient);
  stroke-width:12;
  stroke-dasharray:351.86; /* 2πr (r = 56) */
  stroke-dashoffset:351.86;
  transition:stroke-dashoffset .12s ease;
  filter: drop-shadow(0 0 8px rgba(46,94,169,.45)) drop-shadow(0 0 16px rgba(36,40,85,.35));
  will-change: stroke-dashoffset;
}
.loader-center{
  position:absolute; inset:0; display:grid; place-items:center;
  font-weight:500; font-size:clamp(16px,5.2vw,26px);
  letter-spacing:.2px;
}
.loader-subtitle{
  color:#e7e7ea; opacity:.85;
  font-weight:400;
  font-size:clamp(11px,2.4vw,13px);
  letter-spacing:.2px; min-height:1em;
}
.loader-ring::after{
  content:""; position:absolute; inset:-8%;
  animation:breath 1.8s ease-in-out infinite;
}
@keyframes breath{ 0%,100%{ opacity:.6 } 50%{ opacity:1 } }

/* ────────────────────────────────────────────────────────────────────────────
   Header (logo + boutons) + Menu déroulant
──────────────────────────────────────────────────────────────────────────── */
#topHeader{
  position:fixed; top:0; left:0; width:100%;
  display:flex; justify-content:center; align-items:center; gap:10px;
  padding: max(10px, env(safe-area-inset-top)) max(var(--edge-pad), env(safe-area-inset-right))
           10px max(var(--edge-pad), env(safe-area-inset-left));
  z-index:10;
  pointer-events:auto;                 /* cliquable (fix dropdown) */
}
#topHeader #buttons{
  display:flex; gap:10px; align-items:center;
  pointer-events:auto;
  flex-wrap:wrap;                      /* wrap par défaut, scroll sur petits (voir media) */
  overflow-y:visible;                  /* laisse sortir le dropdown */
  position:relative; z-index:11;
}

/* Logo */
#topHeader .logo{ position:absolute; right:max(20px, env(safe-area-inset-right)); top:0; }
#topHeader .logo img{ height:50px; opacity:.2; padding-top:10px; width:auto; }

/* Boutons */
#topHeader #buttons > button,
#topHeader #buttons > .menu-deroulant > .menu-trigger{
  display:inline-block; margin:0;
  font-weight:500; color:#fff; border:none; cursor:pointer;
  letter-spacing:.05em; text-align:center; position:relative; overflow:hidden;
  background: linear-gradient(to right, var(--c-primary-dark), var(--c-primary), var(--c-primary-dark));
  background-size:200% 100%; background-position:0% 0%;
  transition: background-position .45s ease, box-shadow .25s ease, transform .25s ease, filter .25s ease;
  box-shadow: var(--shadow-soft);
  font-size: var(--btn-fz);
  padding: var(--btn-pad-y) var(--btn-pad-x);
}
#topHeader #buttons > button::after,
#topHeader #buttons > .menu-deroulant > .menu-trigger::after{
  content:"";
  position:absolute; inset:-40% -140%;
  background: linear-gradient(115deg, rgba(255,255,255,0) 20%, rgba(255,255,255,.28) 48%, rgba(255,255,255,0) 80%);
  transform: translateX(-120%) rotate(0.001deg);
  transition: transform .70s ease;
  pointer-events:none; mix-blend-mode:screen;
}
#topHeader #buttons > button:hover,
#topHeader #buttons > .menu-deroulant > .menu-trigger:hover{
  background-position:100% 0%; transform: translateY(-1px);
  filter: brightness(1.04);
  box-shadow: 0 8px 22px rgba(36,40,85,.35);
}
#topHeader #buttons > button:hover::after,
#topHeader #buttons > .menu-deroulant > .menu-trigger:hover::after{
  transform: translateX(120%) rotate(0.001deg);
}
@media (prefers-reduced-motion: reduce){
  #topHeader #buttons > button,
  #topHeader #buttons > .menu-deroulant > .menu-trigger,
  #topHeader #buttons > button::after,
  #topHeader #buttons > .menu-deroulant > .menu-trigger::after{ transition:none; }
}

/* Menu déroulant */
.menu-deroulant{ position:relative; z-index:150; }
.menu-panel{
  position:absolute; top:100%; left:0;
  display:none; z-index:2000; margin-top:6px;
  background: var(--c-bg);
  box-shadow: var(--shadow);
  overflow:hidden;
}
.menu-panel.ouvrir{ display:block; }
.menu-panel .menu-item{
  width:100%; padding:10px 14px; text-align:center;
  background:transparent; border:none; color:var(--c-text); font-size:.75rem; font-weight:500; letter-spacing:.01em;
  cursor:pointer; transition: background-color .2s ease, color .2s ease;
}
.menu-panel .menu-item:hover{
  background: linear-gradient(to right, var(--c-primary-dark), var(--c-primary), var(--c-primary-dark));
  color:#fff;
}

/* ────────────────────────────────────────────────────────────────────────────
   Legal (bouton + popup)
──────────────────────────────────────────────────────────────────────────── */
#legalButton{
  position:fixed;
  bottom:max(var(--edge-pad), env(safe-area-inset-bottom));
  right:max(var(--edge-pad), env(safe-area-inset-right));
  z-index:9;
  background-color: var(--c-muted-2);
  color:#888;
  border:none;
  padding:6px 10px;
  font-size:12px;
  cursor:pointer;
  transition: background-color .3s ease;
  box-shadow: var(--shadow-soft);
}
#legalButton:hover{ background-color: var(--c-muted); }

#popuplegal{
  position:fixed;
  top:50%; left:50%; transform: translate(-50%, -50%);
  width: clamp(320px, 40vw, 720px);
  max-width: 90vw; max-height: 80vh;
  background: var(--c-bg);
  padding: 30px;
  display:none;
  z-index:9500;
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  overflow:auto;
  text-align: justify;
  cursor: default;
  overscroll-behavior: contain;
}
#popuplegal p{
  font-family: 'Montserrat', sans-serif;
  font-weight: 400; color: var(--c-text-muted);
  line-height: 1.7; font-size: 1rem;
}
.close{
  position:absolute; top:10px; right:15px;
  background-color: var(--c-primary); color:#fff;
  border:none; cursor:pointer; padding:0;
  display:flex; align-items:center; justify-content:center;
  box-shadow: var(--shadow-soft);
}
.close svg{ width:24px; height:24px; display:block; }
.close:hover, .close:focus{ background-color: var(--c-primary-dark); color:#fff; }

/* ────────────────────────────────────────────────────────────────────────────
   Panneaux d’information (barreInfo)
──────────────────────────────────────────────────────────────────────────── */
@keyframes slideInFromLeft{
  0%{ transform: translateX(-100%); opacity: 0; }
  100%{ transform: translateX(0); opacity: 1; }
}
.barreInfo{
  position:fixed; top:5px; left:5px;
  max-height: calc(100vh - 10px);
  background: var(--c-bg); color: var(--c-text);
  padding: 20px;
  box-shadow: var(--shadow);
  border-radius: var(--radius);
  overflow-y:auto;
  display:flex; flex-direction:column; justify-content:space-between;
  cursor:default; z-index:8;
  animation: slideInFromLeft .5s ease forwards;

  /* largeur fluide */
  width: clamp(var(--barre-min), var(--barre-fluid), var(--barre-max));
}
.barreInfo h2{
  font-size: 1.3rem; margin: 0 0 10px 0; font-weight: 700;
  background: linear-gradient(180deg, var(--c-primary), var(--c-primary-dark));
  -webkit-background-clip: text; background-clip:text; -webkit-text-fill-color: transparent; color: transparent;
}
.barreInfo p{
  font-weight:300; color: var(--c-text-muted); font-size:1rem; line-height:1.5; flex-grow:1;
}
.barreInfo .image-barre-info{ margin:10px 0; text-align:center; }
.barreInfo .image-barre-info img{ max-width:100%; height:auto; }

.barreInfo .popup-footer{
  display:flex; justify-content:space-between; gap:12px; margin-top: 28px; flex-shrink:0;
}
.barreInfo .popup-footer button{
  padding:6px 12px; font-size:.8rem; font-family: 'Montserrat'; cursor:pointer;
  border:1px solid var(--c-primary-dark); background:transparent; color: var(--c-text);
  transition: all .25s ease; box-shadow: var(--shadow-soft);
}
.barreInfo .popup-footer button:hover{
  color: white;
  background: linear-gradient(to right, var(--c-primary-dark), var(--c-primary), var(--c-primary-dark));
}

/* Panneaux masqués par défaut */
#barreInfo1-1,
#barreInfo1-2,
#barreInfo1-4PAD,
#barreInfo1-SPECTRA,
#barreInfo2,
#barreInfo2-1,
#barreInfo3,
#barreInfo3-photon,
#barreInfo4,
#barreInfo-ecranUV{ display:none; }

/* 4 Pads */
#barreInfo1-4PAD .clickable{
  display:block; margin: 12px 0; padding:10px 16px;
  font-size:.8rem; font-weight:500; color:#fff; background:#bababa; border:none; cursor:pointer;
  letter-spacing:.02em; text-align:center; transition: all .25s ease;
}
#barreInfo1-4PAD .clickable:hover{
  background: linear-gradient(to right, var(--c-primary-dark), var(--c-primary), var(--c-primary-dark));
  color:#fff;
}
#barreInfo1-4PAD .info-text{
  margin: 8px 0 12px 0; padding-left: 8px; border-left: 3px solid var(--c-primary);
}

/* Petites mentions */
#legend{ font-size:.6rem; display:flex; align-items:center; flex-direction: column-reverse; }
#barreInfo3-photon i{ font-size:.6rem; }

/* ────────────────────────────────────────────────────────────────────────────
   Overlay orientation (rotation forcée)
──────────────────────────────────────────────────────────────────────────── */
#rotate-overlay{
  display:none; position:fixed; inset:0; z-index:10000;
  background:#000; color:#fff; align-items:center; justify-content:center; text-align:center;
  padding:24px;
}
#rotate-overlay .rotate-card{
  display:grid; gap:16px; place-items:center;
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.08);
  padding:24px 28px; border-radius:12px; max-width:min(90vw,520px);
  backdrop-filter: blur(6px);
}
#rotate-overlay svg{
  width:64px; height:64px; stroke:#bcd3ff; fill:none; stroke-width:1.5;
  filter: drop-shadow(0 0 14px rgba(77,163,255,.35));
}
#rotate-overlay p{
  margin:0; font-weight:500; letter-spacing:.2px;
  font-size:clamp(14px,2.8vw,18px); color:#e7e7ea;
}
body.force-rotate #rotate-overlay{ display:flex; }
body.force-rotate #topHeader,
body.force-rotate .barreInfo,
body.force-rotate #legalButton,
body.force-rotate #popuplegal,
body.force-rotate #loader-overlay{ display:none !important; }

/* ============================================================
   RESPONSIVE + LOCK PORTRAIT (à coller en bas de ton CSS)
   ------------------------------------------------------------
   - Tailles fluides + paliers (desktop/tablette/mobile)
   - Dropdown toujours cliquable
   - BarreInfo compacte sur petits écrans
   - Overlay d’orientation en portrait sous 1024px
   ============================================================ */

/* ---------- Variables d'échelle (fluides) ---------- */
:root{
  /* typographies et espacements généraux */
  --ui-gap: clamp(8px, 2.2vw, 20px);
  --font-base: clamp(12px, 1.5vw, 16px);
  --font-small: clamp(10px, 1.2vw, 14px);
  --font-title: clamp(16px, 2.0vw, 24px);

  /* largeur fluide par défaut des panneaux */
  --panel-w: clamp(300px, 34vw, 560px);

  /* boutons header (reprend tes vars existantes) */
  --btn-fz: clamp(.66rem, .5rem + .35vw, .9rem);
  --btn-pad-y: 10px;
  --btn-pad-x: 20px;

  /* barreInfo largeur (cohérent avec tes --barre-*) */
  --barre-min: 300px;
  --barre-max: 720px;
  --barre-fluid: 35vw;
}

/* Police globale fluide */
html, body{ font-size: var(--font-base); }

/* ========= Header / Buttons : typo & layout fluides ========= */
#topHeader{
  padding-left:  max(10px, env(safe-area-inset-left));
  padding-right: max(10px, env(safe-area-inset-right));
  pointer-events: auto;          /* dropdown cliquable */
  z-index: 10;
}
#topHeader #buttons{
  gap: var(--ui-gap);
  position: relative;
  z-index: 11;
  flex-wrap: wrap;               /* wrap par défaut, scroll activé + bas */
  overflow-y: visible;           /* laisse sortir le panel */
}
#topHeader #buttons > button,
#topHeader #buttons > .menu-deroulant > .menu-trigger{
  font-size: var(--btn-fz);
  padding: var(--btn-pad-y) var(--btn-pad-x);
}

/* ========= Dropdown : robustesse (z-index, clics) ========= */
.menu-deroulant{ position: relative; z-index: 150; }
.menu-panel{
  position: absolute; top: 100%; left: 0;
  z-index: 2000; pointer-events: auto;
}

/* ========= BarreInfo : largeur & typo fluides ========= */
.barreInfo{
  width: clamp(var(--barre-min), var(--barre-fluid), var(--barre-max));
  padding: clamp(14px, 1.6vw, 20px);
}
.barreInfo h2{ font-size: var(--font-title); }
.barreInfo p { font-size: clamp(.85rem, 1.2vw, 1rem); }

/* ========= Loader / Legal : safe-areas et tailles ========= */
#legalButton{
  bottom: max(12px, env(safe-area-inset-bottom));
  right:  max(12px, env(safe-area-inset-right));
  font-size: var(--font-small);
}

/* ============================================================
   BREAKPOINTS — gammes d’appareils
   ------------------------------------------------------------
   Desktop  : ~1024×600 → 1920×1200 (et plus bas)
   Tablette : ~800×600 → 1280×800
   Mobile   : ~320×480 → 1080×1920
   ============================================================ */

/* ≤ 1200px : tablettes larges / laptops compacts */
@media (max-width: 1200px){
  :root{
    --barre-min: 280px;
    --barre-max: 640px;
    --barre-fluid: 32vw;
    --panel-w: clamp(280px, 38vw, 520px);
  }
  #topHeader .logo img{ height: clamp(32px, 4vw, 46px); }
}

/* ≤ 992px : tablettes portrait et laptops très compacts */
@media (max-width: 992px){
  :root{
    --barre-min: 260px;
    --barre-max: 560px;
    --barre-fluid: 40vw;
  }
  #topHeader{ justify-content: center; }
}

/* ≤ 768px : smartphones/tablettes étroites */
@media (max-width: 768px){
  /* Boutons du header : une seule ligne scrollable */
  #topHeader #buttons{
    flex-wrap: nowrap;
    overflow-x: auto;
    white-space: nowrap;
    scrollbar-width: none; -ms-overflow-style: none;
  }
  #topHeader #buttons::-webkit-scrollbar{ display: none; }

  
  :root{
    --btn-fz: clamp(.58rem, 2.5vw, .78rem);
    --btn-pad-y: 8px;
    --btn-pad-x: clamp(10px, 2.6vw, 14px);

    --barre-min: 240px;
    --barre-max: 265px;
    --barre-fluid: 86vw;  /* quasi pleine largeur utile */
  }

  /* BarreInfo : à gauche, compacte, pleine hauteur utile */
  .barreInfo{
    left:  max(8px, env(safe-area-inset-left)) !important;
    top:   max(8px, env(safe-area-inset-top)) !important;
    transform: none !important;
    width: clamp(var(--barre-min), var(--barre-fluid), var(--barre-max)) !important;
    max-height: calc(100svh - 16px - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
    padding: clamp(12px, 2.4vw, 16px) !important;
  }

  /* Popup légal : pleine largeur utile à gauche */
  #popuplegal{
    left: max(8px, env(safe-area-inset-left)) !important;
    top:  max(8px, env(safe-area-inset-top)) !important;
    right:auto !important; bottom:auto !important; transform:none !important;
    width: calc(100svw - 16px - env(safe-area-inset-left) - env(safe-area-inset-right)) !important;
    max-height: calc(100svh - 16px - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important;
    overflow: auto !important;
  }
}

/* ≤ 600px : smartphones compacts */
@media (max-width: 600px){
  :root{
    --btn-fz: clamp(.56rem, 2.8vw, .72rem);
    --btn-pad-y: 6px;
    --btn-pad-x: clamp(8px, 2.8vw, 12px);
  }
  #legalButton{ bottom:12px; right:12px; }
}

/* Hauteurs faibles (ex: 1024×600) */
@media (max-height: 600px){
  :root{
    --btn-fz: clamp(.58rem, 1.3vw, .74rem);
    --btn-pad-y: 6px;
    --btn-pad-x: clamp(8px, 1.4vw, 14px);
  }
  .barreInfo{
    width: clamp(240px, 34vw, 440px);
    padding: clamp(10px, 1.4vw, 16px);
  }
}

/* Micro-écrans (≤ 480px) */
@media (max-width: 480px){
  :root{
    --barre-min: 220px;
    --barre-max: 360px;
    --barre-fluid: 90vw;
  }
  .barreInfo{ padding: 12px !important; }
}

/* ============================================================
   LOCK ORIENTATION : interdit le portrait sous 1024px
   ============================================================ */
@media (max-width: 1024px) and (orientation: portrait){
  /* adoucir l’arrière-plan */
  canvas#MyCanvas, #topHeader, .barreInfo, #legalButton, #loader-overlay{
    filter: blur(3px) opacity(.6);
  }
  /* overlay instructif */
  body::before{
    position: fixed; inset: 0;
    display:flex; align-items:center; justify-content:center;
    text-align:center;
    padding: 8vw 6vw;
    font-family: 'Montserrat', sans-serif;
    font-weight: 600;
    font-size: clamp(16px, 4.5vw, 28px);
    color:#fff;
    background: rgba(0,0,0,.82);
    backdrop-filter: blur(2px);
    z-index: 100000;
    pointer-events: all;
  }
  body *{ pointer-events: none !important; }
  body::before{ pointer-events: auto; }
  html, body{ overflow: hidden; }
}

/* ============================================================
   GRANDES RÉSOLUTIONS (≥ 1440 / 1920 / 2560 / 3840)
   ============================================================ */
@media (min-width: 1440px){
  :root{
    --ui-gap: 20px;
    --font-base: 18px;
    --font-title: 26px;
    --panel-w: clamp(520px, 32vw, 680px);
  }
}
@media (min-width: 1920px){
  :root{
    --ui-gap: 24px;
    --font-base: 19px;
    --font-title: 30px;
    --panel-w: clamp(600px, 30vw, 760px);
  }
  .barreInfo{ padding: 22px; }
}
@media (min-width: 2560px){
  :root{
    --ui-gap: 28px;
    --font-base: 21px;
    --font-title: 34px;
    --panel-w: clamp(720px, 28vw, 860px);
  }
  .barreInfo{ padding: 26px; }
}
@media (min-width: 3840px){
  :root{
    --ui-gap: 32px;
    --font-base: 24px;
    --font-title: 40px;
    --panel-w: clamp(900px, 26vw, 1100px);
  }
  .barreInfo{ padding: 32px; }
}



