/* ==========================================================================
   Curseur premium — desktop seulement (pointer:fine)
   ========================================================================== */
.cursor{display:none;}

@media (hover:hover) and (pointer:fine){
  html.has-cursor{cursor:none;}
  html.has-cursor a,html.has-cursor button,html.has-cursor [data-cursor]{cursor:none;}

  .cursor{
    display:block;position:fixed;top:0;left:0;z-index:var(--z-cursor);
    pointer-events:none;opacity:0;transition:opacity .5s var(--ease-out);
  }
  html.has-cursor .cursor.is-visible{opacity:1;}
  .cursor-dot{
    position:fixed;top:0;left:0;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;
    background:var(--ivo);
    transform:translate3d(var(--x,0px),var(--y,0px),0) scale(var(--ds,1));
    transition:opacity .3s var(--ease-out), background-color .4s var(--ease-out);
    mix-blend-mode:difference;
  }
  .cursor-ring{
    position:fixed;top:0;left:0;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;
    border:1px solid rgba(var(--ivo-rgb),0.55);
    display:flex;align-items:center;justify-content:center;
    transform:translate3d(var(--x,0px),var(--y,0px),0) scale(var(--rs,1));
    transition:border-color .5s var(--ease-out), background-color .5s var(--ease-out), width .5s var(--ease-out), height .5s var(--ease-out), margin .5s var(--ease-out);
    mix-blend-mode:difference;
  }
  .cursor-label{
    font-size:10px;font-weight:600;letter-spacing:0.12em;text-transform:uppercase;
    color:var(--obs);opacity:0;transform:scale(0.6);
    transition:opacity .4s var(--ease-out), transform .5s var(--ease-out);
    white-space:nowrap;
  }

  /* Survol d'un élément interactif : le cercle s'ouvre */
  .cursor.is-hover .cursor-ring{border-color:rgba(var(--ivo-rgb),0.9);}
  .cursor.is-hover .cursor-dot{--ds:0.6;}

  /* Aimanté : le cercle épouse la cible */
  .cursor.is-magnet .cursor-ring{border-color:rgba(var(--ivo-rgb),0.25);}
  .cursor.is-magnet .cursor-dot{opacity:0;}

  /* Sur un univers : disque plein avec un mot */
  .cursor.is-label .cursor-ring{
    width:84px;height:84px;margin:-42px 0 0 -42px;
    background:var(--ivo);border-color:var(--ivo);mix-blend-mode:normal;
  }
  .cursor.is-label .cursor-label{opacity:1;transform:none;}
  .cursor.is-label .cursor-dot{opacity:0;}

  /* Clic */
  .cursor.is-down .cursor-ring{--rs:0.85;}
}
