/* AD WORKSHOPS 2.18 : animations et retours visuels (charte « Mouvement et retours visuels », validée le 24/10/2026 sur AD SURVEY).
   Effet décollé réservé aux boutons ; une ligne de session ne prend qu'un fond très léger ; rien ne bouge sur un élément
   non cliquable ; tout est coupé si le système demande moins d'animations, et à l'impression. */
:root{--mo-e:cubic-bezier(.2,.7,.2,1);--mo-t:.18s}
/* 1. Boutons : survol, appui, clavier */
.btn,.ghost-btn,.seg,.av{transition:background-color var(--mo-t) var(--mo-e),border-color var(--mo-t) var(--mo-e),box-shadow var(--mo-t) var(--mo-e),transform .12s var(--mo-e),color var(--mo-t)}
.btn:not(:disabled):hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(19,36,56,.12);border-color:var(--navy)}
.btn.primary:not(:disabled):hover{background:#3FA6DB;border-color:#3FA6DB}
.btn.dark:not(:disabled):hover{background:#1E3350;border-color:#1E3350}
.btn.danger:not(:disabled):hover{border-color:var(--hi)}
.btn.ob-skip:not(:disabled):hover{transform:none;box-shadow:none}
.btn:not(:disabled):active,.ghost-btn:not(:disabled):active,.seg:not(:disabled):active{transform:scale(.97);box-shadow:none;transition-duration:.06s}
.ghost-btn:not(:disabled):hover{border-color:#fff;background:rgba(255,255,255,.08)}
.seg:not(.on):not(:disabled):hover{background:rgba(255,255,255,.65)}
.btn:focus-visible,.ghost-btn:focus-visible,.seg:focus-visible{outline:3px solid rgba(77,180,232,.6);outline-offset:2px}
/* 2. Onglets : soulignement jaune qui glisse (posé par motion.js) */
.top nav,.tabs{position:relative}
.mo-ul{position:absolute;bottom:0;height:3px;background:var(--yellow);border-radius:2px 2px 0 0;pointer-events:none;transition:left .28s var(--mo-e),width .28s var(--mo-e)}
.tabs .mo-ul{bottom:-1.5px}
.mo-hasul > a.on{box-shadow:none}
.mo-hasul > button.on{border-bottom-color:transparent}
.top nav a,.tabs button{transition:color var(--mo-t)}
.tabs button:not(.on):hover{color:var(--navy)}
/* 3. Champs */
.fld input,.fld textarea,input.input,textarea.input{transition:border-color var(--mo-t),box-shadow var(--mo-t)}
.fld input:hover:not(:focus):not([readonly]):not(:disabled),.fld textarea:hover:not(:focus):not(:disabled){border-color:var(--navy)}
.fld input:focus,.fld textarea:focus,input.input:focus,textarea.input:focus{outline:0;border-color:var(--blue);box-shadow:0 0 0 4px rgba(77,180,232,.22)}
/* 4. Écrans, fenêtres, messages */
@keyframes mo-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes mo-fade{from{opacity:0}to{opacity:1}}
@keyframes mo-pop{from{opacity:0;transform:translateY(6px) scale(.97)}to{opacity:1;transform:none}}
.mo-enter{animation:mo-in .22s var(--mo-e) both}
.modal-bg{animation:mo-fade .18s both}
.modal-bg .modal{animation:mo-pop .2s var(--mo-e) both}
#toast{transition:opacity .22s var(--mo-e),transform .22s var(--mo-e)}
/* 5. Chargement : silhouettes à la place de « Chargement… » */
.boot.mo-sk-on:has(>.mo-sk){padding:26px 28px;max-width:1240px;margin:0 auto;text-align:left;color:transparent;font-size:0}
.mo-sk{display:block;border-radius:10px;background:linear-gradient(90deg,#E8EDF4 0,#F4F7FB 50%,#E8EDF4 100%) 0 0/800px 100%;animation:mo-shim 1.1s linear infinite}
.mo-skg{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:14px 0}
@keyframes mo-shim{from{background-position:-400px 0}to{background-position:400px 0}}
@media print{.mo-enter,.modal-bg,.modal{animation:none!important}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
.modal-bg.mo-still,.modal-bg.mo-still .modal{animation:none}
