/* ============================================================
   STOKHOS — écrans : Séances, détail, Râtelier, fiche arme,
   wizard, célébration, onboarding
   ============================================================ */

/* ---- Header commun des onglets ---- */
.apphead {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 0 18px;
}
.apphead__brand { display: flex; align-items: center; gap: 9px; }
.wordmark {
  font-family: var(--f-display);
  font-weight: 700;
  font-size: 18px;
  letter-spacing: .2em;
}
.wordmark .kh { color: var(--c-brass); }
.avatar {
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: 1px solid var(--c-border);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--f-mono);
  font-size: 11px;
  color: var(--c-grey);
  cursor: pointer;
}
.avatar:hover { border-color: var(--c-grey); }

/* ---- Séances : bloc stats ---- */
.stats {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  background: var(--c-card);
  margin-bottom: 24px;
}
.stats__cell { padding: 14px 12px; }
.stats__cell + .stats__cell { border-left: 1px solid var(--c-border); }
.stats__num { font-family: var(--f-display); font-weight: 700; font-size: 26px; }
.stats__num--brass { color: var(--c-brass); }
.stats__num .sub { font-size: 14px; color: var(--c-grey); }
.stats__cell .lbl-sm { display: block; margin-top: 3px; font-size: 10px; }

/* ---- Séances : cartes ---- */
.sea-list { display: flex; flex-direction: column; gap: 10px; }
.sea-card {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 14px 16px;
  cursor: pointer;
  transition: all var(--t-micro) var(--ease);
}
.sea-card:hover { border-color: var(--c-border-light); }
.sea-card:active { transform: scale(.98); }
.sea-card--new { border-color: var(--c-brass-border-strong); animation: fadeUp .4s var(--ease) both; }
.sea-card__top { display: flex; justify-content: space-between; align-items: baseline; }
.sea-card__date { font-family: var(--f-mono); font-size: 11px; color: var(--c-grey); }
.sea-card__score { font-family: var(--f-display); font-weight: 700; font-size: 22px; }
.sea-card__score--brass { color: var(--c-brass); }
.sea-card__score--grp { font-family: var(--f-mono); font-size: 13px; font-weight: 500; color: var(--c-grey); }
.sea-card__score .sub { font-size: 13px; color: var(--c-grey); font-family: var(--f-body); }
.sea-card__stand { font-size: 15px; font-weight: 600; margin: 4px 0 10px; }
.sea-card__chips { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.record {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-left: auto;
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .12em;
  color: var(--c-spotter);
}
.record::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--c-spotter); }

/* ---- État vide ---- */
.empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
  padding: 44px 20px;
  text-align: center;
}
.empty__title {
  font-family: var(--f-display);
  font-weight: 700;
  font-size: 22px;
  letter-spacing: .1em;
  color: var(--c-grey);
}
.empty__copy { font-size: 13px; line-height: 1.6; color: var(--c-grey); max-width: 250px; }

/* ---- Détail séance / fiche arme (overlay élément partagé) ---- */
.ov {
  position: absolute;
  z-index: 20;
  overflow: hidden;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  transition: all var(--t-screen) var(--ease);
}
.ov--open {
  background: var(--c-bg);
  border-color: transparent;
  border-radius: 0;
}
.ov__inner {
  opacity: 0;
  transition: opacity .18s ease 0s;
  height: 100%;
  display: flex;
  flex-direction: column;
}
.ov--open .ov__inner { opacity: 1; transition-delay: .12s; }
/* min-height:0 : sans lui, un enfant flex ne rétrécit jamais sous la taille
   de son contenu → l'overflow ne se déclenche pas et le bas est clippé */
.ov__scroll {
  flex: 1; min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  /* Le bas réserve la place de la tabbar (elle reste visible sur les fiches,
     z-index supérieur) — même mécanisme que .screen--tab .screen-scroll */
  padding: calc(var(--safe-top) + 14px) 20px calc(var(--tabbar-h) + 24px);
}

/* Titres de section des fiches en laiton — le relief demandé */
.ov__scroll .msep .lbl,
.arm-note > .lbl { color: var(--c-brass); }

/* Fiche technique : vraie section carte, repliable */
.fiche-tech {
  margin-top: 12px;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  background: var(--c-card);
  overflow: hidden;
}
.fiche-tech--open { border-color: var(--c-brass-border); }
.fiche-tech__head {
  width: 100%;
  display: flex; align-items: center; justify-content: space-between;
  background: transparent; border: none; cursor: pointer;
  padding: 12px 14px;
  color: var(--c-brass);
}
.fiche-tech__head .lbl { color: var(--c-brass); margin: 0; }
.fiche-tech__arrow {
  font-size: 11px; color: var(--c-brass);
  transition: transform .3s var(--ease);
}
.fiche-tech--open .fiche-tech__arrow { transform: rotate(180deg); }
/* Dépliage = vraie transition de hauteur (grid-rows 0fr → 1fr) + fondu.
   Le corps reste dans le DOM : aucune animation à rejouer au re-render. */
.fiche-tech__wrap {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows .32s var(--ease);
}
.fiche-tech--open .fiche-tech__wrap { grid-template-rows: 1fr; }
.fiche-tech__body {
  overflow: hidden;
  min-height: 0;
  padding: 0 14px;
  opacity: 0;
  transition: opacity .25s var(--ease) .08s;
}
.fiche-tech--open .fiche-tech__body { opacity: 1; }

/* Confirmation de persistance de l'avis (offline-first : pas de bouton).
   Toujours dans le DOM, révélée par classe — jamais par re-render (le champ
   perdrait le focus en pleine frappe). */
.review-saved {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em;
  color: var(--c-brass); text-align: right; margin-top: 5px;
  opacity: 0;
  transition: opacity .25s var(--ease);
}
.review-saved--show { opacity: 1; }

.ovhead {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 0 16px;
}
.ovhead .back, .ovhead .edit {
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .18em;
  color: var(--c-grey);
  padding: 10px 12px 10px 0;
  cursor: pointer;
}
/* MODIFIER : action principale de la fiche — bouton chip laiton, voyant */
.ovhead .edit {
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 7px 14px;
}
.ovhead .edit:active { transform: scale(.96); }

/* Fiche séance : le stand est LE titre — laiton */
.det-title { color: var(--c-brass); }

/* Nom d'arme → fiche Râtelier : chip bordée + chevron, affordance claire
   (un simple texte cliquable = missclics frustrants) */
.arme-link {
  display: inline-flex; align-items: baseline; gap: 7px;
  background: transparent;
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 6px 11px;
  cursor: pointer;
  max-width: 100%;
}
.arme-link:active { transform: scale(.97); }
.arme-link__nom {
  font-family: var(--f-display); font-weight: 700; font-size: 14px;
  letter-spacing: .05em; color: var(--c-brass);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.arme-link__serie { font-family: var(--f-mono); font-size: 10.5px; color: var(--c-grey); }
.arme-link__go { color: var(--c-brass); font-size: 15px; line-height: 1; align-self: center; }

.det-title { font-family: var(--f-display); font-weight: 800; font-size: 30px; letter-spacing: .05em; margin: 6px 0 12px; }
.det-chips { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 18px; }

.scorecard {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 16px;
  align-items: center;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 16px 18px;
  margin-bottom: 16px;
}
.scorecard__num {
  font-family: var(--f-display);
  font-weight: 800;
  font-size: 48px;
  line-height: 1;
  color: var(--c-brass);
}
.scorecard__total { font-family: var(--f-mono); font-size: 14px; color: var(--c-grey); }
.c50wrap { position: relative; display: flex; align-items: center; justify-content: center; }
.c50wrap .c50tag {
  position: absolute;
  bottom: -2px;
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .1em;
  color: var(--c-grey);
  background: var(--c-card);
  padding: 0 4px;
}

.notes-block {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 13px 15px;
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--c-text2);
}

/* ---- Râtelier ---- */
.rat-hero { display: flex; align-items: flex-end; gap: 16px; padding: 4px 0 2px; }
.rat-hero__num {
  font-family: var(--f-display);
  font-weight: 800;
  font-size: 64px;
  line-height: .9;
  color: var(--c-brass);
}
.rat-hero__num--pop { animation: popNum .5s var(--ease); }
.rat-hero__labels { padding-bottom: 10px; }
.rat-hero__labels div { font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em; }
.rat-hero__labels .l1 { color: var(--c-paper); }
.rat-hero__labels .l2 { color: var(--c-grey); margin-top: 3px; }
.rat-hero__labels .l2 .prive { color: var(--c-grey); }

.rat-filters { display: flex; gap: 8px; margin: 14px 0 16px; flex-wrap: wrap; }

.rat-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 11px; }
.rat-card {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  overflow: hidden;
  cursor: pointer;
  transition: all var(--t-micro) var(--ease);
  position: relative;
}
.rat-card:active { transform: scale(.97); }
.rat-card--new { border-color: var(--c-brass-border-strong); }
.rat-card__img {
  height: 84px;
  border-bottom: 1px solid var(--c-border);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 8px;
}
.rat-card__body { padding: 11px 13px; }
.rat-card__name { font-family: var(--f-display); font-weight: 700; font-size: 16px; letter-spacing: .05em; }
.rat-card__cal { font-family: var(--f-mono); font-size: 10.5px; color: var(--c-brass); margin: 3px 0 9px; }
.rat-card__meta { display: flex; align-items: center; gap: 4px; }
.rat-card__count { margin-left: auto; font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); white-space: nowrap; }
.rat-card__badge {
  position: absolute;
  top: 6px;
  right: 6px;
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .12em;
  color: var(--c-grey);
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: 3px;
  padding: 2px 5px;
}
.rat-card__customs {
  font-family: var(--f-mono);
  font-size: 10px;
  color: var(--c-grey);
  margin-top: 4px;
}

.wish-card {
  border: 1px dashed var(--c-border-light);
  border-radius: var(--r);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 160px;
  cursor: pointer;
}
.wish-card:hover { border-color: var(--c-grey); }
.wish-card__plus {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 1px dashed var(--c-border-light);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--c-grey);
  font-size: 15px;
}
.wish-card .lbl-sm { letter-spacing: .16em; color: var(--c-grey); }
.rat-empty-copy { font-size: 12.5px; line-height: 1.6; color: var(--c-grey); text-align: center; padding: 18px 30px 0; }

/* ---- Fiche arme ---- */
.arm-img {
  height: 130px;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 10px;
  margin-bottom: 16px;
  position: relative;
  overflow: hidden;
}
.arm-img svg.rings { position: absolute; top: -115px; left: 50%; margin-left: -180px; opacity: .5; }
.arm-img img, .arm-img .silh-img { max-height: 100%; max-width: 80%; object-fit: contain; position: relative; }
.arm-img .silh-placeholder { position: relative; height: 70%; }
.arm-title { display: flex; align-items: baseline; justify-content: space-between; }
.arm-title .name { font-family: var(--f-display); font-weight: 800; font-size: 34px; letter-spacing: .06em; }
.arm-title .cal { font-family: var(--f-mono); font-size: 14px; color: var(--c-brass); }
.arm-note { display: flex; align-items: center; gap: 10px; margin: 10px 0 18px; }
.arm-note .impacts { display: flex; gap: 6px; }
.arm-note .val { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); margin-left: auto; }
/* Le bloc VOTRE AVIS regroupe le subjectif (note, avis écrit, traits) —
   pointillé laiton = « à vous, éditable » (même langage que la bio), et
   c'est exactement ce que l'œil expose aux binômes. */
.avis-bloc {
  border: 1px dashed var(--c-brass-border);
  border-radius: var(--r);
  padding: 12px 12px 14px;
  margin: 8px 0 24px;
}
.avis-bloc .arm-note { margin: 0 0 10px; }
.avis-bloc .arm-review { margin: 0; }
.arm-custom-desc {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 11px 13px;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--c-text2);
  margin-bottom: 16px;
}
/* Groupe historique : la ligne d'infos + ses cibles, séparateur SOUS le tout
   (la cible est visuellement liée à sa séance) */
.hist-item { border-bottom: 1px solid var(--c-card); }
.hist-item:last-child { border-bottom: none; }
.hist-row:active { background: var(--c-navy); }
.hist-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 11px 2px;
}
.hist-row .d { font-family: var(--f-mono); font-size: 11px; color: var(--c-grey); }
.hist-row .s { font-size: 13px; color: var(--c-text2); }
.hist-row .v { font-family: var(--f-mono); font-size: 12px; }
.hist-row .v--brass { color: var(--c-brass); }

/* ---- Wizard ---- */
.wiz-head {
  padding: calc(var(--safe-top) + 14px) 20px 14px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px solid var(--c-border);
}
.wiz-head__left { display: flex; align-items: center; gap: 14px; }
.wiz-head__step { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .2em; color: var(--c-brass); margin-bottom: 4px; }
.wiz-head__title { font-family: var(--f-display); font-weight: 700; font-size: 24px; letter-spacing: .06em; }
.wiz-head__title--sm { font-size: 22px; }

.wiz-body {
  flex: 1;
  padding: 22px 20px;
  display: flex;
  flex-direction: column;
  gap: 22px;
  overflow-y: auto;
}
.wiz-body--s1 { animation: fadeUp .22s var(--ease) both; }
.wiz-body--slide { animation: slideIn .22s var(--ease) both; gap: 18px; padding: 20px; }
.wiz-foot { padding: 14px 20px calc(var(--safe-bottom) + 20px); display: flex; flex-direction: column; gap: 8px; }

.field .lbl { display: block; margin-bottom: 8px; }
.input-card {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 15px 16px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  cursor: pointer;
}
.input-card--sel { border-color: var(--c-brass); }
.input-card .main { font-size: 15px; font-weight: 600; }
.input-card .sub { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); margin-top: 3px; }
.input-card .arrow { color: var(--c-brass); font-size: 13px; }
.badge-now {
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .14em;
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 3px 7px;
}
.grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.chips-row { display: flex; gap: 8px; flex-wrap: wrap; }

/* Étape 2 : cartes armes multi-sélection */
.warm {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 12px 14px;
  transition: all var(--t-micro) var(--ease);
}
.warm--on { background: var(--c-raised); border-color: var(--c-brass); }
.warm__row { display: flex; align-items: center; gap: 12px; cursor: pointer; }
.warm__img { width: 64px; height: 42px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.warm__img .silh-placeholder { width: 60px; height: 40px; border: 1px solid var(--c-border-light); border-radius: var(--r-chip); font-size: 6.5px; color: var(--c-grey); }
.warm__name { font-family: var(--f-display); font-weight: 700; font-size: 17px; letter-spacing: .06em; }
.warm__sub { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); margin-top: 2px; }
.warm__badge {
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .12em;
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: 3px;
  padding: 2px 6px;
  margin-right: 10px;
  white-space: nowrap;
}
.warm__check {
  width: 20px;
  height: 20px;
  border-radius: var(--r-chip);
  border: 1px solid var(--c-border-light);
  background: transparent;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  transition: all var(--t-micro) var(--ease);
}
.warm--on .warm__check { border-color: var(--c-brass); background: var(--c-brass); }
.warm__detail {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--c-border);
  animation: fadeUp var(--t-ui) var(--ease) both;
}
.warm__detail .lbl-sm { display: block; letter-spacing: .16em; margin-bottom: 7px; }
.warm__detail .grid-3 { gap: 6px; }

/* Étape 3 : carte score */
.wiz-score {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 16px;
  align-items: center;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 16px 18px;
}
.wiz-score__num {
  font-family: var(--f-display);
  font-weight: 800;
  font-size: 52px;
  line-height: 1;
  color: var(--c-brass);
}
.wiz-score__total { font-family: var(--f-mono); font-size: 15px; color: var(--c-grey); }
.wiz-score__btns { display: flex; gap: 8px; margin-top: 12px; }

.wiz-notes {
  width: 100%;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 13px 15px;
  min-height: 76px;
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--c-text2);
  resize: none;
}
.wiz-notes:focus { border-color: var(--c-brass); }

/* Vécu à l'ajout : cartes radio — la conséquence sur la note est écrite
   sous chaque choix (retour bêta : l'impact des chips ne se voyait pas) */
.vecu-card {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 10px 12px;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  cursor: pointer;
  user-select: none;
  transition: border-color var(--t-ui) var(--ease), background var(--t-ui) var(--ease);
}
.vecu-card:active { transform: scale(.97); }
.vecu-card--on { border-color: var(--c-brass); background: var(--c-raised); }
.vecu-card__t {
  font-family: var(--f-mono);
  font-size: 11px;
  letter-spacing: .08em;
  color: var(--c-grey);
}
.vecu-card--on .vecu-card__t { color: var(--c-brass); }
.vecu-card__d {
  font-size: 11px;
  line-height: 1.35;
  color: var(--c-dim);
}
.vecu-card--on .vecu-card__d { color: var(--c-text2); }

/* ---- Célébration ---- */
.celeb {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 22px;
  background: var(--c-bg);
  padding: 30px;
  animation: fadeUp var(--t-screen) var(--ease) both;
  text-align: center;
}
.celeb__label { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .26em; color: var(--c-grey); }
.celeb__stage { position: relative; width: 280px; height: 230px; display: flex; align-items: center; justify-content: center; }
.celeb__rings { position: absolute; inset: 0; margin: auto; animation: ringOpen .6s var(--ease) both; }
.celeb__engrave { position: relative; width: 210px; height: 150px; display: flex; align-items: center; justify-content: center; overflow: hidden; }
.celeb__engrave img, .celeb__engrave .silh { width: 180px; animation: engrave 1.1s var(--ease) .45s both; }
.celeb__engrave .silh-placeholder { width: 180px; height: 100px; }
.celeb__sweep { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--c-brass); animation: sweepx 1.1s var(--ease) .45s both; }
.celeb__name { font-family: var(--f-display); font-weight: 800; font-size: 32px; letter-spacing: .08em; }
.celeb__meta { font-family: var(--f-mono); font-size: 10.5px; color: var(--c-brass); margin-top: 6px; }
.celeb__sep { width: 180px; height: 1px; background: var(--c-border); }
.celeb__count {
  font-family: var(--f-display);
  font-weight: 800;
  font-size: 52px;
  line-height: 1;
  color: var(--c-brass);
}
/* Passage N → N+1 : odomètre (motion J) délégué à UI.odometre, délai 1,8 s */
.celeb__count .odo { justify-content: center; }
.celeb__serie { font-size: 18px; color: var(--c-brass); letter-spacing: .1em; }
.celeb__countlbl { font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em; color: var(--c-grey); margin-top: 4px; }
.celeb__note {
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .08em;
  line-height: 1.7; color: var(--c-grey); margin-top: 10px; text-align: center;
}
.celeb__actions { display: flex; flex-direction: column; gap: 8px; width: 220px; margin-top: 6px; }
.celeb__engrave .silh-img { width: 180px; height: 130px; background-size: contain;
  background-repeat: no-repeat; background-position: center; animation: engrave 1.1s var(--ease) .45s both; }

/* ---- Onboarding ---- */
.onb {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 26px;
  background: var(--c-bg);
  padding: 40px 34px;
  text-align: center;
  animation: fadeUp var(--t-screen) var(--ease) both;
}
.onb__title { font-family: var(--f-display); font-weight: 800; font-size: 30px; letter-spacing: .08em; }
.onb__copy { font-size: 14px; line-height: 1.7; color: var(--c-text2); max-width: 280px; }
.onb__dots { display: flex; gap: 8px; }
.onb__dot { width: 7px; height: 7px; border-radius: 50%; border: 1px solid var(--c-border-light); }
.onb__dot--on { background: var(--c-brass); border-color: var(--c-brass); }
.onb__foot { position: absolute; bottom: calc(var(--safe-bottom) + 26px); left: 20px; right: 20px; display: flex; flex-direction: column; gap: 8px; }

/* ---- Auth ---- */
.auth {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 26px;
  padding: calc(var(--safe-top) + 30px) 26px calc(var(--safe-bottom) + 30px);
  max-width: 360px;
  width: 100%;
  margin: 0 auto;
}
.auth__brand { display: flex; flex-direction: column; align-items: center; gap: 10px; }
/* La marque-lien vers la landing (invités d'un lien de partage) : le texte
   garde sa tenue, seule la ligne DÉCOUVREZ porte l'affordance de lien */
.auth__brand--lien { text-decoration: none; color: inherit; }
.auth__brand--lien:hover { color: inherit; }
.auth__brand--lien:active { opacity: .75; }
.auth-decouvrir {
  font-family: var(--f-mono);
  font-size: 10.5px;
  letter-spacing: .14em;
  color: var(--c-brass);
  text-decoration: underline dotted;
  text-underline-offset: 3px;
}
.auth__tabs { display: flex; gap: 8px; justify-content: center; }
.auth form { display: flex; flex-direction: column; gap: 18px; }
.auth-input {
  width: 100%;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 15px 16px;
  font-size: 15px;
  color: var(--c-paper);
  transition: border-color var(--t-micro) var(--ease);
}
.auth-input::placeholder { color: var(--c-grey); }
/* Bio du profil : deux lignes visibles, retour à la ligne naturel */
.bio-input { resize: none; line-height: 1.45; }
.auth-input:focus { border-color: var(--c-brass); }
.auth-error {
  font-size: 13px;
  line-height: 1.5;
  color: var(--c-spotter);
  text-align: center;
}
.auth-info {
  font-size: 13px;
  line-height: 1.5;
  color: var(--c-text2);
  text-align: center;
}
.cta:disabled, .cta[disabled] { opacity: .6; pointer-events: none; }

/* ---- Autocomplete référentiel (wizard étape 2) ---- */
.acp { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
.acp-row {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 12px 14px;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 10px;
  cursor: pointer;
  transition: border-color var(--t-micro) var(--ease);
}
.acp-row:hover { border-color: var(--c-border-light); }
.acp-row:active { transform: scale(.98); }
.acp-row__name { font-family: var(--f-display); font-weight: 700; font-size: 15px; letter-spacing: .05em; }
.acp-row__meta { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); white-space: nowrap; }
.acp-row--create { border-style: dashed; }
.acp-row--create .acp-row__name { font-family: var(--f-body); font-weight: 600; font-size: 13.5px; color: var(--c-text2); }

/* ============================================================================
 * Page unique « Nouvelle séance » V3 — blocs arme répétables
 * (BRIEF-STOKHOS-SEANCE-FIX-V3)
 * ============================================================================ */

.bloc {
  background: transparent; /* délimité par la bordure seule (rendu validé) */
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 14px;
  margin-bottom: 10px;
  transition: border-color .2s var(--ease);
}
.bloc--active { border-color: var(--c-brass); background: var(--c-raised); }
.bloc--collapsed { padding: 12px 14px; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.bloc--collapsed:hover { border-color: var(--c-border-light); }
.bloc__resume {
  flex: 1;
  font-family: var(--f-mono);
  font-size: 11px;
  color: var(--c-text2);
  letter-spacing: .04em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.bloc__x {
  background: transparent;
  border: 1px solid var(--c-border);
  color: var(--c-grey);
  border-radius: 50%;
  width: 26px; height: 26px;
  font-size: 16px; line-height: 1;
  cursor: pointer;
  padding: 0;
}
.bloc__x:hover { border-color: var(--c-alert); color: var(--c-alert); }
/* Les .field du bloc respirent — la page unique est plus dense que le wizard */
.bloc--active .field { margin-bottom: 18px; }
.bloc--active .field:last-of-type { margin-bottom: 0; }

.bloc__head { margin-bottom: 18px; }
.bloc__head-row { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.bloc__title { font-family: var(--f-display); font-weight: 700; font-size: 17px; letter-spacing: .06em; }
.bloc__sub { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); margin-top: 2px; }
/* Action secondaire dans le coin de la carte — padding généreux pour garder
   une zone de tap correcte malgré la petite typo */
.bloc__change {
  background: transparent; border: none;
  font-family: var(--f-mono); font-size: 10px; color: var(--c-brass);
  letter-spacing: .12em; text-transform: uppercase;
  cursor: pointer; padding: 12px 0 12px 12px;
  text-decoration: underline dashed;
  text-decoration-color: var(--c-brass-border);
  text-underline-offset: 4px;
  margin: -8px 0;
  flex-shrink: 0;
  white-space: nowrap;
}
.bloc__change:hover { text-decoration: underline; }

.bloc__armes { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.bloc__arme-item {
  padding: 10px 12px;
  background: transparent;
  border: 1px solid var(--c-border);
  border-radius: var(--r-chip);
  cursor: pointer;
}
.bloc__arme-item:hover { border-color: var(--c-brass); }
.bloc__arme-name { font-family: var(--f-display); font-weight: 600; font-size: 14px; letter-spacing: .04em; }
.bloc__arme-meta { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); margin-top: 2px; }

/* Date & heure — input natif fondu dans l'input-card */
.wiz-date {
  background: transparent;
  border: none;
  color: var(--c-paper);
  font-family: var(--f-mono);
  font-size: 14px;
  width: 100%;
  padding: 0;
  color-scheme: dark;
}
.wiz-date:focus { outline: none; }

/* Munition compacte : placeholder grisé tant que rien n'est précisé ;
   crayon (pas de chevron : c'est une saisie, pas une liste déroulante) */
.input-card .main--muted { color: var(--c-grey); font-weight: 400; }
.muni-edit { display: flex; flex-shrink: 0; opacity: .85; }
.muni-edit svg { width: 16px; height: 16px; }

/* Badge « Nouvelle ! » — arme jamais tirée, discret (la célébration vient après) */
.badge-new {
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .14em;
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 2px 7px;
  vertical-align: 2px;
  margin-left: 6px;
  white-space: nowrap;
}

.link-add {
  background: transparent; border: none;
  font-family: var(--f-mono); font-size: 11px; color: var(--c-brass);
  letter-spacing: .1em; text-transform: uppercase;
  cursor: pointer; padding: 12px 6px;
  display: inline-block;
  /* Soulignement pointillé PERMANENT : l'action texte se lit comme telle
     au premier regard, pas seulement au survol (audit 2026-07-20) */
  text-decoration: underline dashed;
  text-decoration-color: var(--c-brass-border);
  text-underline-offset: 4px;
}
.link-add--danger { text-decoration-color: var(--c-alert-border); }
.link-add:hover { text-decoration-style: solid; text-decoration-color: var(--c-brass); }
.link-add:active { opacity: .55; }
.link-add--danger { color: var(--c-alert); display: block; text-align: center; width: 100%; }

.wiz-add-bloc { margin-top: 4px; text-align: center; padding: 8px 0 12px; }
.wiz-add-bloc__btn {
  width: 100%;
  background: transparent;
  border: 1px dashed var(--c-border-light);
  color: var(--c-brass);
  font-family: var(--f-mono);
  font-size: 12px;
  letter-spacing: .16em;
  padding: 14px;
  border-radius: var(--r);
  cursor: pointer;
  transition: border-color .2s var(--ease);
}
.wiz-add-bloc__btn:hover { border-color: var(--c-brass); }

.cta--disabled { opacity: .35; pointer-events: none; }

/* Séance loggée a minima au stand (sans arme) : nettement grisée, à compléter
   chez soi via l'édition — le badge invite sans bloquer (§4.6) */
.sea-card--todo { opacity: .45; border-style: dashed; filter: grayscale(.6); }

/* ============================================================================
 * Cibles photographiées (V3-c) — miniatures, chips distance, visionneuse
 * ============================================================================ */

.cibles-row {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 2px 0 6px;
  -webkit-overflow-scrolling: touch;
}
.cible-thumb {
  position: relative;
  flex-shrink: 0;
  width: 72px; height: 72px;
  border: 1px solid var(--c-border);
  border-radius: var(--r-chip);
  overflow: hidden;
  background: var(--c-card);
  cursor: pointer;
}
.cible-thumb--lg { width: 96px; height: 96px; }
.cible-thumb--sm { width: 48px; height: 48px; }
.cibles-row--hist { padding: 4px 0 10px; }
.cible-thumb--sel { border-color: var(--c-brass); }
.cible-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cible-thumb__ph { display: block; width: 100%; height: 100%; background: transparent; }
.cible-thumb__x {
  position: absolute; top: 0; right: 0;
  width: 30px; height: 30px;
  border: none; border-radius: 50%;
  background: rgba(10, 14, 20, .78); color: var(--c-text2);
  font-size: 13px; line-height: 1; cursor: pointer; padding: 0;
}
.cible-thumb__dist {
  position: absolute; left: 3px; bottom: 3px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em;
  color: var(--c-brass);
  background: rgba(10, 14, 20, .78);
  border-radius: var(--r-chip);
  padding: 1px 5px;
}
.cible-thumb__pending {
  position: absolute; top: 5px; left: 5px;
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--c-brass);
  animation: pulse 1.6s ease-in-out infinite;
}
/* Badge résultat d'analyse (SC-c §4.1) sur la miniature — l'état, pas l'action */
.cible-thumb__ana {
  position: absolute; right: 3px; bottom: 3px;
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .06em;
  color: var(--c-impact);
  background: rgba(10, 14, 20, .82);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 1px 5px;
}
.cible-thumb__ana--wait { color: var(--c-grey); animation: pulse 1.6s ease-in-out infinite; }
/* Formats compacts (vignettes 48px de la fiche arme) : score seul ou pastille */
.cible-thumb__ana--xs { font-size: 8px; padding: 0 3px; right: 2px; bottom: 2px; letter-spacing: .02em; }
.cible-thumb__anadot {
  position: absolute; right: 4px; bottom: 4px;
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--c-spotter);
  box-shadow: 0 0 0 1.5px rgba(14, 17, 22, .85);
}
/* Le flex de la fiche arme : meilleur groupement (≥ 3 cibles analysées
   avec distance — sinon la ligne n'existe pas, jamais de chiffre esseulé) */
.fiche-grp {
  display: flex; align-items: baseline; gap: 10px;
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r);
  padding: 10px 12px;
  margin: 2px 0 10px;
}
.fiche-grp__lbl { font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; color: var(--c-grey); }
.fiche-grp__val { font-family: var(--f-mono); font-size: 13px; letter-spacing: .08em; color: var(--c-brass); margin-left: auto; }
/* Motion K transposée : la nouvelle miniature s'enclenche d'un cran (12°) */
.cible-thumb--in { animation: crant .18s var(--ease) both; }
@keyframes crant {
  from { transform: rotate(-12deg) scale(.86); opacity: 0; }
  to { transform: none; opacity: 1; }
}
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }

.cible-add {
  flex-shrink: 0;
  width: 72px; height: 72px;
  border: 1px dashed var(--c-border-light);
  border-radius: var(--r-chip);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 3px;
  cursor: pointer;
  color: var(--c-brass);
}
.cible-add__ico { font-size: 20px; }
.cible-add__lbl { font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; }
.cible-add:hover { border-color: var(--c-brass); }

.dist-libre { width: 58px; flex-shrink: 0; text-align: center; padding: 8px 6px; }

.cible-viewer {
  position: fixed; inset: 0; z-index: 60;
  background: rgba(8, 11, 16, .96);
  display: flex; align-items: center; justify-content: center;
  cursor: zoom-out;
  animation: fadeUp .16s var(--ease) both;
}
.cible-viewer img { max-width: 96vw; max-height: 92vh; object-fit: contain; }
.cible-viewer__close {
  position: absolute; top: calc(var(--safe-top) + 6px); right: 8px;
  font-size: 20px; color: var(--c-text2);
  padding: 10px 12px;
}
/* Distance de la cible affichée en visionneuse — donnée clé de la photo */
.cible-viewer__dist {
  position: absolute; bottom: calc(var(--safe-bottom) + 22px); left: 50%;
  transform: translateX(-50%);
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .18em;
  color: var(--c-brass);
  background: rgba(10, 14, 20, .78);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 6px 12px;
}

/* ===== Analyse de cible (SC-c) — scène, points d'impact, bandeau ===== */
/* La scène épouse exactement l'image affichée : les points posés en % de ses
   dimensions (coordonnées normalisées du contrat) tombent juste, quelle que
   soit la résolution. Le bandeau réserve la hauteur basse de l'écran. */
.cv-stage { position: relative; display: inline-block; }
/* La visionneuse est une SURCOUCHE globale (région modale) : plein écran,
   la tabbar passe derrière comme pour toute surcouche. L'image se centre
   au-dessus du bandeau : aucun impact sous une surface intouchable */
.cible-viewer--ana { padding-bottom: calc(215px + var(--safe-bottom)); }
.cible-viewer--ana .cv-stage img { max-height: calc(100vh - 260px); }
.cv-dots { position: absolute; inset: 0; pointer-events: none; }
.cv-dots--edit { pointer-events: auto; cursor: crosshair; touch-action: none; }
.cv-dot {
  position: absolute; left: var(--cv-x); top: var(--cv-y);
  width: 32px; height: 32px; margin: -16px 0 0 -16px;
  padding: 0; border: none; background: transparent;
  pointer-events: none;
}
.cv-dots--edit .cv-dot { pointer-events: auto; cursor: grab; }
/* Pastille spotter : franc = pleine, à vérifier = cerclée */
.cv-dot::after {
  content: '';
  position: absolute; inset: 10px;
  border-radius: 50%;
  background: var(--c-spotter);
  box-shadow: 0 0 0 1.5px rgba(14, 17, 22, .85), 0 0 8px rgba(232, 86, 42, .5);
}
.cv-dot--doute::after { background: transparent; border: 2.5px solid var(--c-spotter); inset: 9px; }
.cv-dot--drag { z-index: 2; }
.cv-dot--drag::after { transform: scale(1.5); box-shadow: 0 0 0 2px var(--c-paper), 0 0 14px rgba(232, 86, 42, .8); }

.cv-band {
  position: fixed;
  /* Largeur PLAFONNÉE et centrée : sur desktop le bandeau reste une carte,
     jamais une barre pleine largeur. La tabbar réelle = contenu + safe-area :
     les deux se réservent (sinon le bandeau passe dessous sur mobile à encoche) */
  left: 50%;
  transform: translateX(-50%);
  width: min(calc(100% - 20px), 430px);
  bottom: calc(var(--safe-bottom) + 14px);
  z-index: 61;
  background: rgba(13, 17, 24, .94);
  border: 1px solid var(--c-border);
  border-radius: var(--r-plus);
  padding: 12px 14px;
  cursor: default;
}
.cv-band__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.cv-band__title { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .18em; color: var(--c-grey); }
.cv-beta {
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .14em;
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 1px 5px;
}
.cv-band__quota { margin-left: auto; font-family: var(--f-mono); font-size: 10px; letter-spacing: .1em; color: var(--c-dim); }
.cv-stats { font-family: var(--f-mono); font-size: 12.5px; letter-spacing: .08em; color: var(--c-impact); }
.cv-stats--wait { color: var(--c-brass); animation: pulse 1.6s ease-in-out infinite; }
.cv-hint { font-size: 12px; color: var(--c-text2); margin-top: 6px; }
.cv-disclaimer { font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em; color: var(--c-dim); margin-top: 8px; }
/* Boutons EMPILÉS pleine largeur : pas de libellés tronqués côte à côte,
   une seule action pleine (le CTA), les secondaires en ghost dessous */
.cv-ctas { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.cv-ctas .btn-ghost { text-align: center; }
.cv-undo { margin-top: 8px; }

/* ===== Cibles à rattacher + surcouches Analyse cible (SC-d) ===== */
.cibles-row--orph { overflow-x: auto; padding-bottom: 4px; }
.cible-orph { flex-shrink: 0; display: flex; flex-direction: column; gap: 5px; width: 104px; }
.cible-orph .cible-thumb { width: 104px; height: 104px; }
.cible-orph__etat {
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .08em;
  color: var(--c-impact);
  text-align: center;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.cible-orph__etat--wait { color: var(--c-grey); animation: pulse 1.6s ease-in-out infinite; }
/* Photo rejetée (pas une cible) : la vignette se cercle de rouge — l'état
   se voit avant même d'ouvrir la visionneuse */
.cible-thumb--rejet { box-shadow: 0 0 0 2px var(--c-alert); }
.cible-orph__etat--rejet { color: var(--c-alert); }
.cv-band--rejet { border-color: var(--c-alert-border); }
.cv-hint--rejet { color: var(--c-alert); }
/* RATTACHER en pointillé : le langage « à compléter » du DS */
.cible-orph__ratt {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em;
  color: var(--c-brass);
  background: transparent;
  border: 1px dashed var(--c-brass-border-strong);
  border-radius: var(--r-chip);
  padding: 6px 0;
  cursor: pointer;
}
.cible-orph__ratt:active { transform: scale(.97); }

/* Cartes des surcouches (capture + rattachement) : contenu à gauche,
   plus larges que la carte QR — elles listent */
.ca-card { max-width: 400px; align-items: stretch; text-align: left; }
.ca-card .cv-band__title { white-space: nowrap; }
.ca-intro { font-size: 13px; line-height: 1.5; color: var(--c-text2); }
/* Les CTA des surcouches/bandeau RESPIRENT : hauteur pleine (56px), marges
   internes réelles, lettres aérées (retour Pauline « trop compacté ») */
.ca-cta { letter-spacing: .1em; font-size: 13.5px; }
.cv-ctas .cta, .ca-cta { padding: 0 24px; }
.ca-card .cv-ctas .cta { height: 52px; }
.ca-preview {
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  overflow: hidden;
  background: #0A0E14;
}
.ca-preview img { display: block; width: 100%; max-height: 36vh; object-fit: contain; }

.ratt-row {
  display: flex; align-items: baseline; gap: 8px;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 11px 12px;
  margin-bottom: 6px;
  cursor: pointer;
}
.ratt-row:active { transform: scale(.98); }
.ratt-row__nom { font-family: var(--f-mono); font-size: 12px; letter-spacing: .06em; color: var(--c-paper); }
.ratt-row__meta { font-family: var(--f-mono); font-size: 10px; letter-spacing: .06em; color: var(--c-grey); margin-left: auto; }
/* Attribution multi-cibles : la courante cerclée laiton, les faites cochées */
.ratt-cibles { padding-bottom: 2px; }
.ratt-cible--cur { box-shadow: 0 0 0 2px var(--c-brass); }
.ratt-cible--faite { opacity: .45; }
.ratt-cible__check {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 16px; color: var(--c-brass);
  background: rgba(10, 14, 20, .45);
}
.ratt-row__jour {
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .12em;
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 1px 5px;
}

/* Poinçon d'épreuve (motion D) — cartouche STK·millésime frappé en bas-droite
   des cartes non notées ; il reste jusqu'à la notation. Frappe stampIn +
   recul de la carte uniquement à la première visite (rat-card--kick). */
.stamp {
  position: absolute;
  right: 8px; bottom: 8px;
  width: 46px; height: 46px;
  border: 1.5px solid var(--c-brass);
  border-radius: 4px;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 1px;
  transform: rotate(-8deg);
  color: var(--c-brass);
  /* Fond OPAQUE + relief marqué : un poinçon se lit, il ne se devine pas */
  background: var(--c-card);
  box-shadow: 0 3px 10px rgba(0, 0, 0, .55),
    inset 0 1px 0 rgba(255, 255, 255, .07),
    inset 0 -1px 0 rgba(0, 0, 0, .35);
  pointer-events: none;
  z-index: 2;
}
.stamp__chi { font-family: var(--f-display); font-size: 17px; line-height: 1; }
.stamp__txt { font-family: var(--f-mono); font-size: 5.5px; letter-spacing: .14em; }
.stamp--in { animation: stampIn .45s var(--ease) .35s both; }
.rat-card--kick { animation: cardKick .3s var(--ease) .6s; }
/* Frappe du tampon À TESTER (mini-célébration d'ajout sans séance) — même
   geste que le poinçon, transform propre (translate de centrage + -14deg).
   Pilotée par le flag TRANSITOIRE stampCle (pas par no-anim) : la sync
   re-rend la grille pendant l'animation, no-anim la couperait net. */
.rat-card__totest--in { animation: totestIn .45s var(--ease) .35s both; }
.rat-card--stampkick { animation: cardKick .3s var(--ease) .6s; }
@keyframes totestIn {
  0% { transform: translate(-50%, -50%) scale(2.4) rotate(-20deg); opacity: 0; }
  55% { transform: translate(-50%, -50%) scale(.92) rotate(-14deg); opacity: 1; }
  75% { transform: translate(-50%, -50%) scale(1.05) rotate(-14deg); }
  100% { transform: translate(-50%, -50%) scale(1) rotate(-14deg); opacity: 1; }
}
@keyframes stampIn {
  0% { transform: scale(2.6) rotate(-14deg); opacity: 0; }
  55% { transform: scale(.92) rotate(-8deg); opacity: 1; }
  75% { transform: scale(1.05) rotate(-8deg); }
  100% { transform: scale(1) rotate(-8deg); opacity: 1; }
}
@keyframes cardKick {
  0%, 100% { transform: translate(0, 0); }
  20% { transform: translate(1.5px, 2px); }
  40% { transform: translate(-1.5px, -1px); }
  60% { transform: translate(1px, 1px); }
}

/* Confirmation d'abandon de saisie — modale interne du wizard */
.wiz-confirm {
  position: absolute; inset: 0;
  z-index: 30;
  background: rgba(6, 9, 14, .78);
  display: flex; align-items: center; justify-content: center;
  padding: 24px;
  animation: fadeUp .16s var(--ease) both;
}
.wiz-confirm__card {
  width: 100%; max-width: 300px;
  background: var(--c-card);
  border: 1px solid var(--c-border-light);
  border-radius: var(--r);
  padding: 20px 18px;
  display: flex; flex-direction: column; gap: 10px;
  text-align: center;
}
.wiz-confirm__title { font-family: var(--f-display); font-weight: 700; font-size: 17px; letter-spacing: .04em; }
/* Variante formulaire (création de déclinaison) : alignée à gauche,
   scrollable si l'autocomplete allonge la carte */
.wiz-confirm__card--form {
  text-align: left;
  max-width: 330px;
  max-height: calc(100% - 40px);
  overflow: auto;
}
.wiz-confirm__copy { font-size: 12.5px; line-height: 1.5; color: var(--c-grey); margin-bottom: 6px; }

/* Douille éjectée (motion H) — une seule, arc vers la droite, 700 ms */
.shell {
  position: absolute;
  z-index: 50;
  pointer-events: none;
  animation: shellFly .7s cubic-bezier(.3, 0, .6, 1) both;
}
@keyframes shellFly {
  0% { transform: translate(0, 0) rotate(0deg); opacity: 0; }
  8% { opacity: 1; }
  55% { transform: translate(52px, -64px) rotate(150deg); opacity: 1; }
  100% { transform: translate(96px, -8px) rotate(290deg); opacity: 0; }
}

/* Odomètre (motion J) — tambours verticaux, roulent jusqu'à leur chiffre */
.odo { display: inline-flex; }
.odo__drum {
  display: inline-block;
  height: 1em; line-height: 1;
  overflow: hidden;
}
.odo__band { display: inline-flex; flex-direction: column; }
.odo__band span { height: 1em; line-height: 1; }
.odo__band--roll { animation: odoRoll .6s var(--ease) both; }
.odo__band--fromto { animation: odoFromTo .6s var(--ease) both; }
@keyframes odoRoll { from { transform: translateY(0); } to { transform: translateY(var(--odo-to)); } }
@keyframes odoFromTo { from { transform: translateY(var(--odo-from)); } to { transform: translateY(var(--odo-to)); } }

/* ============================================================================
 * Vault — ouverture « coffre-fort » du Râtelier (vault_handoff, ~2,5 s)
 * ============================================================================ */
.vault {
  position: absolute; inset: 0;
  z-index: 40;
  overflow: hidden;
  pointer-events: none;
}
/* Battants au fond de l'APP (pas un gris rapporté) : le coffre se fond dans
   l'écran, seuls le filet central et la roue le trahissent */
.vault__pane {
  position: absolute; top: 0; bottom: 0; width: 50%;
  background: var(--c-bg);
}
.vault__pane--l { left: 0; border-right: 1px solid var(--c-raised); animation: vaultLeft 2.5s var(--ease) both; }
.vault__pane--r { right: 0; border-left: 1px solid var(--c-raised); animation: vaultRight 2.5s var(--ease) both; }
.vault__center {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 18px;
  animation: vaultDialOut 2.5s var(--ease) both;
}
.vault__dial {
  transform-origin: 48px 48px;
  animation: vaultDial 2.1s var(--ease-stop) both;
}
.vault__label {
  font-family: var(--f-mono); font-size: 10px;
  letter-spacing: .26em; color: var(--c-grey);
}
.rat-hero__num--vault { animation: vaultHero 2.9s var(--ease) both; }
@keyframes vaultDial {
  0% { transform: rotate(0deg); }
  28% { transform: rotate(118deg); } 34% { transform: rotate(110deg); } 40% { transform: rotate(110deg); }
  60% { transform: rotate(236deg); } 66% { transform: rotate(228deg); } 72% { transform: rotate(228deg); }
  94% { transform: rotate(367deg); } 100% { transform: rotate(360deg); }
}
@keyframes vaultLeft { 0%, 62% { transform: translateX(0); } 100% { transform: translateX(-101%); } }
@keyframes vaultRight { 0%, 62% { transform: translateX(0); } 100% { transform: translateX(101%); } }
@keyframes vaultDialOut { 0%, 62% { opacity: 1; transform: scale(1); } 76% { opacity: 0; transform: scale(.85); } 100% { opacity: 0; transform: scale(.85); } }
@keyframes vaultHero { 0%, 60% { opacity: 0; transform: scale(1.3); } 80% { transform: scale(.96); } 100% { opacity: 1; transform: scale(1); } }

/* Arme « à tester » (ajoutée sans séance) : pointillés, pas débloquée —
   sa première séance déclenchera la célébration. Le tampon barre l'image
   en travers, façon marquage de contrôle. */
.rat-card--totest { border-style: dashed; opacity: .85; }
.rat-card__totest {
  position: absolute;
  left: 50%; top: 36%;
  transform: translate(-50%, -50%) rotate(-14deg);
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .3em;
  text-indent: .3em; /* compense la dernière lettre pour un centrage optique */
  color: var(--c-grey);
  border: 1.5px dashed var(--c-border-light);
  border-radius: 3px;
  padding: 5px 12px;
  background: rgba(18, 22, 29, .55);
  white-space: nowrap;
  z-index: 2;
  pointer-events: none;
}

/* Étoile favorite — les favorites peuplent le picker de séance */
.fav {
  position: absolute;
  top: 6px; right: 8px;
  z-index: 3;
  background: transparent; border: none; padding: 6px;
  font-size: 16px; line-height: 1;
  color: var(--c-grey);
  cursor: pointer;
  transition: transform var(--t-micro) var(--ease), color .2s var(--ease);
}
.fav--on { color: var(--c-brass); }
.fav:active { transform: scale(1.3); }
.fav-inline { color: var(--c-brass); font-size: 11px; }

/* La série au niveau du titre — c'est elle qui différencie les cartes */
.rat-card__serie { color: var(--c-brass); font-weight: 700; }
.acp-row__serie { color: var(--c-brass); }

/* Re-render du même écran (sync, toggle, badge…) : les animations d'entrée
   ne rejouent pas — sinon chaque mise à jour « flashe » l'écran entier */
#screen.no-anim .screen--tab,
#screen.no-anim .sea-card--new,
#screen.no-anim .rat-card--new,
#screen.no-anim .rat-card--kick,
#screen.no-anim .stamp--in { animation: none; }
#screen.no-anim .warm--on { animation: none !important; } /* anim posée en style inline */
.badge-todo {
  font-family: var(--f-mono);
  font-size: 10px;
  letter-spacing: .14em;
  color: var(--c-grey);
  border: 1px dashed var(--c-border-light);
  border-radius: var(--r-chip);
  padding: 2px 7px;
  white-space: nowrap;
}

/* ---- Classes issues du remplacement des styles inline (audit 2026-07-17).
   En fin de fichier : elles doivent gagner la cascade sur les classes
   qu'elles modulent (spécificité égale → l'ordre tranche). ---- */
.pl-0 { padding-left: 0; }
.input-card--static { cursor: default; }
.bloc__title--sm { font-size: 15px; }
.notes-block--sm { font-size: 12.5px; }
.wiz-notes--sm { margin-top: 7px; min-height: 52px; }
.auth-error--left { text-align: left; margin-top: 10px; }
.warm--in { animation: fadeUp var(--t-ui) var(--ease) both; }
.rat-empty-copy--py4 { padding: 4px 0; }
.rat-empty-copy--py8 { padding: 8px 0; }
.rat-empty-copy--pt8 { padding: 8px 0 0; }
.rat-empty-copy--pb12 { padding: 0 0 12px; }
.arm-review { margin: 2px 0 4px; }
.avatar--lg { width: 52px; height: 52px; font-size: 16px; }
.wordmark--lg { font-size: 26px; }
.profile-id { margin: 8px 0 22px; }
.profile-name { font-size: 24px; letter-spacing: .06em; }
.item-title { font-weight: 600; font-size: 13.5px; }
.legal-copy { font-size: 11.5px; line-height: 1.7; color: var(--c-grey); }
.legal-link { display: inline-block; margin-top: 6px; color: var(--c-brass); text-decoration: underline dotted; text-underline-offset: 3px; }
.legal-link:active { opacity: .6; }
.foot-note { display: block; text-align: center; margin-top: 30px; }
.auth-disclaimer { text-align: center; max-width: 280px; margin: 0 auto; }
.onb-disclaimer { max-width: 280px; }
.onb-brand { display: flex; flex-direction: column; align-items: center; gap: 20px; }

/* Écran de navigation à tabbar dont le corps scrolle en .wiz-body
   (« Nouvelle arme ») : même réserve que .screen-scroll */
.screen--tab .wiz-body { padding-bottom: calc(var(--tabbar-h) + 16px); }

/* Dispo du pseudo en temps réel (inscription / porte de migration / profil) */
.pseudo-check {
  min-height: 16px;
  margin-top: 6px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em;
}
.pseudo-check__ok { color: var(--c-brass); }
.pseudo-check__ko { color: var(--c-alert); }

/* Fiche light (« Nouvelle arme ») — version allégée des cartes Râtelier :
   photo cadrée sur fond app, corps nom/série/calibre aux styles rat-card */
.fiche-light {
  background: var(--c-card);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r);
  overflow: hidden;
}
.fiche-light__img {
  height: 128px;
  padding: 14px 18px;
  display: flex; align-items: center; justify-content: center;
  background: var(--c-bg);
  border-bottom: 1px solid var(--c-border);
}
.fiche-light__body { padding: 12px 14px; }

/* Ligne de résultat déjà possédée : elle doit SAUTER aux yeux dans une
   longue liste de séries — bordure + fond laiton, remontée en tête,
   cartouche qui pulse (onde sonar discrète) */
.acp-row--owned { border-color: var(--c-brass-border); background: var(--c-raised); }
.acp-row--owned:hover { border-color: var(--c-brass); }
.acp-row--owned .acp-row__flag { animation: flagPulse 1.8s var(--ease) infinite; }
@keyframes flagPulse {
  0% { box-shadow: 0 0 0 0 rgba(194, 160, 94, .4); }
  60% { box-shadow: 0 0 0 6px rgba(194, 160, 94, 0); }
  100% { box-shadow: 0 0 0 0 rgba(194, 160, 94, 0); }
}

/* Flag « déjà dans la collection » (résultats de recherche + aperçu d'ajout) */
.acp-row__flag, .warm__flag {
  font-family: var(--f-mono); font-size: 10px; font-weight: 400;
  letter-spacing: .12em;
  color: var(--c-brass);
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r-chip);
  padding: 2px 6px;
  margin-left: 8px;
  vertical-align: 2px;
  white-space: nowrap;
}

/* ============================================================
   SOCIAL S-b — hub Profil (2a), Mon QR (1c), demande (1b)
   (handoff binomes_handoff — tokens navy/ghost dans tokens.css)
   ============================================================ */
.avatar { position: relative; }
.avatar__dot {
  position: absolute; top: -1px; right: -1px;
  width: 9px; height: 9px; border-radius: 50%;
  background: var(--c-brass);
  border: 2px solid var(--c-bg);
}

/* Hub 2a */
.avatar--hub {
  width: 64px; height: 64px;
  border-color: var(--c-brass); background: var(--c-card);
  font-family: var(--f-display); font-weight: 700; font-size: 24px;
  color: var(--c-brass);
  flex-shrink: 0; cursor: default;
}
.hub-pseudo { font-family: var(--f-display); font-weight: 800; font-size: 26px; letter-spacing: .08em; }
/* Hiérarchie calmée (retour bêta : « trois encadrés laiton, on ne sait pas
   où donner de la tête ») : la ligne est une carte sobre, SEUL le disque
   de l'icône porte le laiton (façon chambre de barillet) */
.qr-row {
  display: flex; align-items: center; gap: 12px;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r-plus);
  padding: 12px 14px;
  cursor: pointer;
}
.qr-row:active { transform: scale(.98); }
.qr-row__disc {
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--c-brass);
  background: var(--c-navy);
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.qr-row__title { font-size: 13.5px; font-weight: 600; }
.qr-row__sub { font-family: var(--f-mono); font-size: 10px; letter-spacing: .18em; color: var(--c-brass); margin-top: 2px; }
.msep--social { margin: 26px 0 10px; }

/* Premiers pas — onboarding par l'action : encart pointillé (à compléter),
   disques d'icônes façon chambres, jauge qui se remplit, lignes-boutons */
.pp {
  border: 1px dashed var(--c-brass-border);
  border-radius: var(--r-plus);
  padding: 12px 14px 6px;
}
.pp__head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.pp__bar {
  flex: 1; height: 3px; border-radius: 2px;
  background: var(--c-border);
  overflow: hidden;
}
.pp__fill { display: block; height: 100%; background: var(--c-brass); border-radius: 2px; transition: width .5s var(--ease); }
.pp__count { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); }
.pp__x { font-size: 13px; color: var(--c-grey); cursor: pointer; padding: 4px 2px 4px 8px; }
.pp__x:active { opacity: .6; }
.pp-row {
  display: flex; align-items: center; gap: 12px;
  padding: 8px 0;
  cursor: pointer;
}
.pp-row:active { opacity: .7; }
.pp-row--fait { cursor: default; }
.pp-row--fait .pp-row__lbl { color: var(--c-grey); }
.pp-disc {
  width: 36px; height: 36px; border-radius: 50%;
  border: 1px solid var(--c-brass-border);
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  transition: background .3s var(--ease);
}
.pp-disc--fait { background: var(--c-brass); border-color: var(--c-brass); }
.pp-row__lbl { font-size: 13.5px; font-weight: 600; flex: 1; }
.pp-row__ou { display: block; font-family: var(--f-mono); font-size: 9.5px; font-weight: 400; letter-spacing: .12em; color: var(--c-grey); margin-top: 3px; }
.pp-row__etat { font-family: var(--f-mono); font-size: 13px; color: var(--c-grey); }
.pp-row__etat--fait { color: var(--c-brass); }

/* Tutoriel « VOICI OÙ » : le SPOTLIGHT (guide-spot) assombrit tout l'écran
   SAUF la cible — il tient tant que le coach parle, re-posé à chaque
   render ; le halo (guide-pulse) respire deux fois par-dessus. z-index
   seul : le position:relative vient de guideFx, uniquement sur les cibles
   statiques (il faisait sauter les chambres absolues du barillet). */
.guide-spot { z-index: 5; box-shadow: 0 0 0 9999px var(--c-guide-scrim); }
.guide-pulse { z-index: 5; animation: guidePulse 1.15s cubic-bezier(.4, 0, .55, 1) 2; }
.guide-spot.guide-pulse { animation: guidePulseSpot 1.15s cubic-bezier(.4, 0, .55, 1) 2 both; }
@keyframes guidePulse {
  0%, 100% { box-shadow: 0 0 0 0 transparent; }
  42%, 58% { box-shadow: 0 0 0 9px var(--c-brass-border); }
}
@keyframes guidePulseSpot {
  0%, 100% { box-shadow: 0 0 0 0 transparent, 0 0 0 9999px var(--c-guide-scrim); }
  42%, 58% { box-shadow: 0 0 0 9px var(--c-brass-border), 0 0 0 9999px var(--c-guide-scrim); }
}

/* Le « ? » de l'apphead : rouvre les premiers pas masqués */
.pp-help {
  width: 26px; height: 26px; border-radius: 50%;
  border: 1px solid var(--c-brass-border);
  color: var(--c-brass);
  font-family: var(--f-mono); font-size: 12px;
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
}
.pp-help:active { transform: scale(.94); }
.buddy-row {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 14px;
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  margin-bottom: 8px;
  cursor: pointer;
  transition: border-color var(--t-micro) var(--ease);
}
.buddy-row:hover { border-color: var(--c-border-light); }
.buddy-row__pseudo { flex: 1; font-size: 13.5px; font-weight: 600; }
.buddy-row__depuis { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-grey); }
.buddy-row__chev { color: var(--c-grey); }
.mini-av {
  width: 20px; height: 20px; border-radius: 50%;
  background: var(--c-card); border: 1px solid var(--c-border);
  display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--f-mono); font-size: 7px; color: var(--c-grey);
  flex-shrink: 0;
}
.mini-av + .mini-av { margin-left: -7px; }
.mini-av--32 { width: 32px; height: 32px; font-size: 10px; }
.mini-av--or { border-color: var(--c-brass); color: var(--c-brass); }
.pending-band {
  display: flex; align-items: center; gap: 10px;
  border: 1px solid var(--c-brass-border);
  border-radius: var(--r);
  padding: 11px 14px;
  cursor: pointer;
}
.pending-band:hover { border-color: var(--c-brass); }
.pending-band__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c-brass); flex-shrink: 0;   animation: dotPulse 2s var(--ease) infinite;
}
@keyframes dotPulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--c-brass-border); }
  55% { box-shadow: 0 0 0 5px rgba(194, 160, 94, 0); }
}
.pending-band__dot--calm { animation: none; }
@media (prefers-reduced-motion: reduce) {
  .pending-band__dot { animation: none; }
}
.pending-band__lbl { flex: 1; font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .16em; color: var(--c-brass); }
.hub-row {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 2px;
  border-top: 1px solid var(--c-card);
  cursor: pointer;
}
.hub-row__lbl { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .18em; color: var(--c-grey); }
.hub-row__count { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-brass); }
.hub-foot {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em;
  color: var(--c-grey);
  padding: 12px 0 4px; border-top: 1px solid var(--c-card);
}

/* 1c — Mon QR : SURCOUCHE flottante « coup de feu » (au-dessus du
   barillet ouvert ou du profil), carte centrée + recherche pseudo dessous */
.qr-pop { position: absolute; inset: 0; }
.qr-pop__scrim {
  position: absolute; inset: 0;
  background: rgba(6, 9, 14, .78);
}
.qr-pop__stage {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 12px;
  padding: 24px 20px calc(var(--tabbar-h) + 16px);
  pointer-events: none;
}
.qr-pop__stage > * { pointer-events: auto; }
/* Le tir : la carte claque au centre (échelle chiHit) + onde de choc or */
.qr-pop__card {
  position: relative;
  width: 100%; max-width: 320px;
  background: var(--c-navy);
  border: 1px solid var(--c-brass-border);
  border-radius: 8px;
  padding: 22px 22px 18px;
  display: flex; flex-direction: column; align-items: center;
}
/* Entrée DOUCE — une seule pose par ouverture (app.js) ; les rebuilds
   reconstruisent sans la classe, à l'état final (retour terrain : la
   claque « coup de feu » était trop violente pour une simple surcouche) */
.qr-pop--in .qr-pop__scrim { animation: fadeUp .2s var(--ease) both; }
.qr-pop--in .qr-pop__card { animation: popSoft .28s cubic-bezier(.2, 0, 0, 1) both; }
.qr-pop--in .qr-pop__card--search { animation-delay: .08s; }
@keyframes popSoft {
  0% { transform: translateY(12px) scale(.98); opacity: 0; }
  100% { transform: none; opacity: 1; }
}
/* Onde de choc (famille célébrations — opacity:0 + forwards, jamais both :
   la frame 0 % resterait visible pendant le delay, correctif du handoff) */
@keyframes shock {
  0% { transform: scale(.22); opacity: .8; }
  100% { transform: scale(2.8); opacity: 0; }
}
.qr-pop__close {
  position: absolute; top: 0; right: 0;
  font-size: 16px; color: var(--c-grey);
  cursor: pointer;
  padding: 14px 16px;
}
.qr-minis { margin-top: 16px; justify-content: center; }
.qr-mini {
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--c-brass-border);
  color: var(--c-brass);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
  background: transparent;
  text-decoration: none;
}
.qr-mini:hover { border-color: var(--c-brass); color: var(--c-brass-hover); }
.qr-mini:active { transform: scale(.92); }
.qr-copied {
  margin-top: 10px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em;
  color: var(--c-brass);
}
.qr-search__go { width: auto; padding: 0 18px; flex-shrink: 0; }
.qr-card__pseudo { font-family: var(--f-display); font-weight: 800; font-size: 28px; letter-spacing: .1em; }
.qr-wrap { position: relative; width: 210px; height: 210px; margin-top: 22px; }
.qr-svg, .qr-svg svg { width: 100%; height: 100%; display: block; }
.qr-loading { display: flex; align-items: center; justify-content: center; height: 100%; }
.qr-eye {
  position: absolute;
  width: var(--qr-eye); height: var(--qr-eye);
  background: var(--c-navy);
}
.qr-eye__ring { position: absolute; inset: 0; border: 5px solid var(--c-brass); border-radius: 7px; }
.qr-eye__core { position: absolute; inset: 30%; background: var(--c-brass); border-radius: 3px; }
.qr-medaillon {
  position: absolute; left: 50%; top: 50%;
  width: 58px; height: 58px; margin: -29px 0 0 -29px;
  background: var(--c-navy);
  border: 1px solid var(--c-brass);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
}
.qr-medaillon__dash {
  position: absolute; inset: 5px;
  border: 1px dashed var(--c-brass-border-strong);
  border-radius: 50%;
}
.qr-card__foot { margin-top: 24px; width: 100%; }
.qr-card__scanme {
  font-family: var(--f-mono); font-size: 10.5px;
  letter-spacing: .14em; text-indent: .14em;
  color: var(--c-brass);
  text-align: center; line-height: 1.7;
  min-width: 0;
}
.qr-search { margin-top: 14px; }
.btn-outline {
  width: 100%; height: 48px;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  background: transparent;
  display: flex; align-items: center; justify-content: center; gap: 9px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em;
  color: var(--c-grey);
  cursor: pointer;
}
.btn-outline:hover { border-color: var(--c-border-light); color: var(--c-paper); }
.btn-outline:active { transform: scale(.98); }

/* 1b — demande de binôme / côté scanner */
.social-col { display: flex; flex-direction: column; }
.social-center { align-items: center; text-align: center; }
.avatar--xl {
  width: 100px; height: 100px;
  border-color: var(--c-brass); background: var(--c-card);
  font-family: var(--f-display); font-weight: 700; font-size: 34px;
  letter-spacing: .06em; color: var(--c-brass);
  cursor: default;
}
.social-name { font-family: var(--f-display); font-weight: 800; font-size: 32px; letter-spacing: .08em; margin-top: 18px; }
.social-commons-lbl { letter-spacing: .22em; color: var(--c-grey); }
.tag-or {
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--c-brass);
  border-radius: var(--r-chip);
  padding: 7px 13px;
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .16em;
  color: var(--c-brass);
}
.invite-band { align-self: center; }
.social-cta { height: 52px; font-size: 14px; letter-spacing: .06em; }
.social-fill { width: 100%; }
.social-chip {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(194, 160, 94, .1);
  border: 1px solid var(--c-brass);
  border-radius: var(--r-chip);
  padding: 10px 18px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em;
  color: var(--c-brass);
}
.social-chip__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--c-brass); }

/* ============================================================
   SOCIAL S-c — célébration « Dans le mille » (1a pleine / 1b compacte)
   Timings du README. ⚠ flash + ondes : opacity:0 de base +
   fill-mode FORWARDS (jamais both — la frame 0 % du flash resterait
   affichée pendant tout le delay : halo diffus dès le début).
   ============================================================ */
.mille {
  position: absolute; inset: 0;
  background: var(--c-bg);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  cursor: pointer;
  animation: dimIn .12s both;
}
.mille--out { animation: dimOut .2s var(--ease) both; }
.mille__stage {
  position: relative;
  width: 220px; height: 220px;
  display: flex; align-items: center; justify-content: center;
}
.mille--compact .mille__stage { width: 180px; height: 180px; }
.mille__ring {
  position: absolute;
  border: 1px dashed var(--c-border-light);
  border-radius: 50%;
  animation: ringIn .2s var(--ease) both;
}
.mille__ring--1 { inset: 0; }
.mille__ring--2 { inset: 17%; animation-delay: .05s; }
.mille__ring--3 { inset: 34.5%; border-color: var(--c-ghost); animation-delay: .1s; }
.mille__chi { position: absolute; animation: chiHit .3s cubic-bezier(.3, 0, .2, 1) .28s both; }
.mille__flash {
  position: absolute;
  width: 90px; height: 90px; border-radius: 50%;
  background: radial-gradient(circle, rgba(216, 188, 126, .9), rgba(194, 160, 94, 0) 70%);
  opacity: 0;
  animation: flashOut .18s ease-out .3s forwards;
}
.mille__shock {
  position: absolute;
  width: 95px; height: 95px;
  border: 1px solid var(--c-brass);
  border-radius: 50%;
  opacity: 0;
}
.mille__shock--1 { animation: shock1 .5s cubic-bezier(.1, .6, .3, 1) .3s forwards; }
.mille__shock--2 { animation: shock2 .55s cubic-bezier(.1, .6, .3, 1) .3s forwards; }
.mille__word {
  display: flex;
  font-family: var(--f-display); font-weight: 800; font-size: 52px;
  letter-spacing: .1em; line-height: 1;
  margin-top: 22px;
}
.mille--compact .mille__word { font-size: 42px; margin-top: 20px; }
.mille__letter { display: inline-block; opacity: 0; animation: letterUp .16s var(--ease) both; }
.mille__letter--or { color: var(--c-brass); }
.mille__sub {
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .3em; text-indent: .3em;
  color: var(--c-brass);
  margin-top: 16px;
  animation: fadeUp .2s var(--ease) .92s both;
}
@keyframes ringIn { 0% { transform: scale(.72); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }
@keyframes chiHit { 0% { transform: scale(3.2); opacity: 0; } 55% { transform: scale(.9); opacity: 1; } 75% { transform: scale(1.04); } 100% { transform: scale(1); } }
@keyframes flashOut { 0% { opacity: .95; transform: scale(.5); } 100% { opacity: 0; transform: scale(1.45); } }
@keyframes shock1 { 0% { transform: scale(.22); opacity: .85; } 100% { transform: scale(2.8); opacity: 0; } }
@keyframes shock2 { 0% { transform: scale(.3); opacity: .7; } 100% { transform: scale(3.4); opacity: 0; } }
@keyframes letterUp { 0% { transform: translateY(16px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } }
@keyframes dimIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes dimOut { from { opacity: 1; } to { opacity: 0; } }
/* prefers-reduced-motion : état final DIRECT (le kill global de motion.css
   coupe les animations — les bases doivent donc être l'état final) */
@media (prefers-reduced-motion: reduce) {
  .mille__letter { opacity: 1; }
  .mille__flash, .mille__shock { opacity: 0 !important; }
}

/* ============================================================
   SOCIAL S-d — toggles d'exposition (1e, double verrou)
   OFF (defaut) : oeil barre ghost, PRIVE. ON : oeil + bordure or,
   VISIBLE PAR TES BINOMES. eyePop a chaque bascule, pulseGold au
   passage ON uniquement (fx transitoire pose par l'action).
   ============================================================ */
.expose-row {
  display: flex; align-items: center; gap: 10px;
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 6px 12px 6px 6px;
  margin: 10px 0;
  transition: border-color .15s var(--ease);
}
.expose-row--on { border-color: var(--c-brass); }
.expose-row--pulse { animation: pulseGold .45s ease-out both; }
.eye {
  width: 38px; height: 38px; border-radius: 50%;
  border: 1px solid var(--c-border);
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--c-ghost);
  cursor: pointer;
  flex-shrink: 0;
  background: transparent;
}
.eye:hover { border-color: var(--c-border-light); }
.eye:active { transform: scale(.9); }
.eye--on { color: var(--c-brass); }
.eye--pop svg { animation: eyePop .18s var(--ease) both; }
.expose-row__what {
  flex: 1; min-width: 0;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em;
  color: var(--c-grey);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.expose-row__state { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-grey); white-space: nowrap; }
.expose-row__state--on { color: var(--c-brass); }
@keyframes eyePop { 0% { transform: scale(.5) rotate(-25deg); } 100% { transform: scale(1) rotate(0deg); } }
@keyframes pulseGold { 0% { box-shadow: 0 0 0 0 rgba(194, 160, 94, .45); } 100% { box-shadow: 0 0 0 14px rgba(194, 160, 94, 0); } }

/* Exposition rapide (retours S-d) : oeil sur la vignette seance (a la
   place de X CPS) + mode PARTAGE du Ratelier (oeil a la place de
   l'etoile tant que le mode est actif) — effet porte par la CARTE */
.eye--sm { width: 28px; height: 28px; }
.sea-card--exposed { border-color: var(--c-brass-border); }
.rat-card--exposed { border-color: var(--c-brass-border); }
.pulse-gold { animation: pulseGold .45s ease-out both; }
.fav--eye { color: var(--c-ghost); font-size: 0; display: inline-flex; align-items: center; justify-content: center; }
.fav--eye.eye--on { color: var(--c-brass); }
.fav--eye.eye--pop svg { animation: eyePop .18s var(--ease) both; }
.fchip--eye { display: inline-flex; align-items: center; gap: 6px; }

/* ============================================================
   SOCIAL S-e — fiche binôme 2b (page), badge 1f, comparaison 1g
   ============================================================ */
.tag-grey {
  display: inline-flex; align-items: center;
  border: 1px solid var(--c-border-light); border-radius: var(--r-chip);
  padding: 5px 10px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; color: var(--c-grey);
}
/* Onglets segmentés (RÂTELIER / SÉANCES / AVIS) */
.fseg-row { display: flex; gap: 4px; border: 1px solid var(--c-border); border-radius: var(--r); padding: 3px; }
.fseg {
  flex: 1; text-align: center; padding: 12px 0;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .18em; color: var(--c-grey);
  border-radius: var(--r-chip); cursor: pointer;
  transition: color var(--t-micro) var(--ease);
}
.fseg--on { background: var(--c-card); color: var(--c-brass); }
.fseg:active { transform: scale(.97); }
.fseg-body { margin-top: 16px; animation: fadeUp .18s var(--ease) both; }
.buddy-empty { padding: 24px 8px; text-align: center; color: var(--c-grey); }

/* Carte arme du râtelier binôme */
.buddy-arme { background: var(--c-card); border: 1px solid var(--c-border); border-radius: var(--r); padding: 16px; margin-bottom: 12px; }
/* Configuration en pattern « réglages » : titre discret AU-DESSUS,
   rows groupées dans une CARTE, indication en phrase sous la carte —
   trois niveaux qui ne se confondent plus */
.cfg-title {
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .22em;
  color: var(--c-grey);
  margin: 28px 2px 8px;
}
.cfg-group {
  background: var(--c-card);
  border: 1px solid var(--c-border);
  border-radius: var(--r);
  padding: 2px 14px;
}
.cfg-group .hub-row + .hub-row { border-top: 1px solid var(--c-border); }
.cfg-group .hub-row:active { background: transparent; }
.cfg-note {
  font-size: 11.5px; line-height: 1.5;
  color: var(--c-grey);
  margin: 8px 2px 0;
}

/* Détail de séance binôme : une ligne par arme, aérée et lisible */
.bsea-ligne { border-top: 1px solid var(--c-border); margin-top: 14px; padding-top: 14px; }
.bsea-cps {
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .08em;
  color: var(--c-brass);
  white-space: nowrap; flex-shrink: 0;
}

/* Étoile « club principal » des rows MES STANDS (en flux, pas en absolu) */
.fav--stand { position: static; flex-shrink: 0; font-size: 17px; }

/* La carte séance passée s'ouvre (détail exposé) */
.buddy-sea--tap { cursor: pointer; transition: border-color var(--t-micro) var(--ease); }
.buddy-sea--tap:hover { border-color: var(--c-border-light); }
.buddy-sea--tap:active { transform: scale(.985); }

/* La carte s'ouvre (aperçu produit) */
.buddy-arme--tap { cursor: pointer; transition: border-color var(--t-micro) var(--ease); }
.buddy-arme--tap:hover { border-color: var(--c-border-light); }
.buddy-arme--tap:active { transform: scale(.985); }
/* Son avis écrit — sa voix, en italique de carnet */
.buddy-avis {
  border-top: 1px solid var(--c-border);
  margin-top: 12px; padding-top: 10px;
  font-style: italic; font-size: 13px; line-height: 1.55;
  color: var(--c-text2);
}
/* Silhouette dans l'aperçu */
/* Pleine largeur imposée : la carte est un flex centré, un div sans
   contenu en flux s'y comprimait à rien — l'image ne peignait jamais */
.buddy-arme-img { width: 100%; height: 110px; }
.buddy-arme-img .silh-img { width: 100%; height: 100%; }
/* La carte d'aperçu scrolle si la fiche technique est longue */
.qr-pop__card--scroll { max-height: calc(100% - 32px); overflow: auto; }
.buddy-arme__name { font-family: var(--f-display); font-weight: 700; font-size: 22px; letter-spacing: .05em; margin-top: 5px; }
.impacts-ro { display: inline-flex; align-items: center; gap: 6px; }
.impact--ro { cursor: default; }
.impact--ro::before { display: none; }
.g-6 { gap: 6px; }

/* Badge 1f « TOI AUSSI — NON PARTAGÉ » + CTA Partager */
.toi-aussi {
  display: flex; align-items: center; gap: 8px;
  border-top: 1px solid var(--c-border); margin-top: 14px; padding-top: 12px;
  color: var(--c-grey);
}
.toi-aussi__lbl { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; }
.toi-aussi__cta { margin-left: auto; font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-brass); cursor: pointer; }
.toi-aussi__cta:hover { color: var(--c-brass-hover); }
.toi-aussi__cta:active { opacity: .55; }

/* Comparaison d'avis 1g */
.avis-compare { background: var(--c-card); border: 1px solid var(--c-border); border-radius: var(--r); padding: 16px; margin-bottom: 12px; }
.avis-compare__name { font-family: var(--f-display); font-weight: 700; font-size: 18px; letter-spacing: .05em; margin-bottom: 12px; }
.avis-line { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.avis-line__who { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-grey); width: 68px; flex-shrink: 0; }
.avis-line__who--me { color: var(--c-brass); }
.avis-compare__ecart { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-grey); border-top: 1px solid var(--c-border); margin-top: 6px; padding-top: 10px; }

/* ============================================================
   SOCIAL S-f — invitations de séance (3a/3b), futures séances,
   célébration « PRÉSENT. »
   ============================================================ */
/* Section À VENIR du carnet (séances prévues) — se distingue du journal */
.msep--avenir .lbl, .msep--avenir .count { color: var(--c-brass); }

/* En-tête des listes d'autocomplete — la liste dit CE qu'elle propose */
.acp-head {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em;
  color: var(--c-grey);
  padding: 8px 12px 4px;
}

/* Chip-recherche extensible (retours UX) : la loupe s'étire en champ
   inline — jamais d'input surgissant sous la ligne de filtres */
.fchip--search { display: inline-flex; align-items: center; padding: 8px 12px; }
.fchip--search-open { border-color: var(--c-brass); }
.fchip-search__ico { display: inline-flex; color: inherit; }
.fchip-search__input {
  width: 0; opacity: 0; padding: 0; border: none; background: transparent;
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .04em;
  color: var(--c-paper);
  outline: none;
  transition: width .25s var(--ease), opacity .2s var(--ease), padding .25s var(--ease);
}
.fchip--search-open .fchip-search__input { width: 150px; opacity: 1; padding-left: 8px; }

/* Tri — un ORDRE, pas un filtre : texte + flèches, hors des pilules */
.sort-btn {
  margin-left: auto;
  background: transparent; border: none;
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .1em;
  color: var(--c-grey);
  cursor: pointer; padding: 9px 2px 9px 10px;
}
.sort-btn--on { color: var(--c-brass); }
.sort-btn:active { opacity: .55; }

/* Point Spotter du chip MOUCHE */
.mouche__dot--chip {
  display: inline-block; width: 6px; height: 6px; border-radius: 50%;
  background: var(--c-spotter); margin-right: 6px; vertical-align: 1px;
}

/* Avatar interactif de MOI (retours UX) : badge appareil-photo en coin,
   le tap gère la photo — pattern universel des profils */
.avatar--edit { cursor: pointer; }
.avatar--edit:active { opacity: .7; }
.avatar--busy { opacity: .55; pointer-events: none; }
.avatar__badge {
  position: absolute; right: -3px; bottom: -3px;
  width: 22px; height: 22px; border-radius: 50%;
  background: var(--c-brass); color: var(--c-bg);
  border: 2px solid var(--c-bg);
  display: flex; align-items: center; justify-content: center;
}

/* Bio éditable au tap (in place) — le pointillé signale l'éditable */
.profil-bio--tap {
  cursor: pointer;
  text-decoration: underline dashed;
  text-decoration-color: var(--c-border-light);
  text-underline-offset: 4px;
}
.profil-bio--tap:active { opacity: .6; }

/* Sections collantes de la page BINÔMES (à la place d'une nav flottante :
   l'en-tête courant reste lisible pendant le scroll, zéro chrome ajouté) */
.msep--social {
  position: sticky; top: -1px; z-index: 5;
  background: var(--c-bg);
  padding: 10px 0;
  margin-bottom: 2px;
}

/* Retour au tap des rows/cartes navigables (audit 2026-07-20) */
.hub-row:active, .buddy-row:active, .input-card:active,
.qr-row:active, .acp-row:active { background: var(--c-navy); }
.rat-card:active, .sea-card:active, .pending-band:active { transform: scale(.985); }

/* Fermeture du bandeau « Logger cette séance ? » (pont post-créneau) */
.pending-band__x { padding: 4px 2px 4px 10px; color: var(--c-grey); }

/* Avatar photo (S-g2) — remplit le conteneur rond (avatar, mini-av, tab-av) */
.av-photo {
  width: 100%; height: 100%;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}
/* Bio — une ligne volontaire, sous l'identité (MOI, 2b, surcouches 1b) */
.profil-bio { font-size: 13px; line-height: 1.5; color: var(--c-text2); }
.file-hidden { display: none; }

/* Carte « future séance » du hub 2a */
.fut-card {
  background: var(--c-card);
  border: 1px solid var(--c-border); border-radius: var(--r);
  padding: 13px 14px;
  cursor: pointer;
  transition: border-color var(--t-micro) var(--ease);
}
.fut-card:active { transform: scale(.98); }
.fut-card--act { border-color: var(--c-brass-border); }
/* À RÉPONDRE : la seule carte pleine — navy + bordure or franche + point,
   elle ne se noie plus parmi les encadrés translucides */
.fut-card--pending { background: var(--c-navy); border-color: var(--c-brass); }
.fut-card--pending .fut-card__statut { display: flex; align-items: center; gap: 7px; }
.fut-card__date { font-family: var(--f-mono); font-size: 10px; color: var(--c-grey); }
.fut-card__stand { font-size: 13.5px; font-weight: 600; margin-top: 4px; }
.fut-card__statut {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em;
  color: var(--c-brass);
  margin-top: 6px;
}
.mini-av--20 { width: 20px; height: 20px; font-size: 7px; }
/* Boutons « + AJOUT » (inviter, stand…) : POINTILLÉS — le langage
   « à compléter » du DS (wish-card, bio) ; le laiton PLEIN reste aux CTA
   primaires et au disque QR (hiérarchie calmée, retour bêta) */
.btn-brass-out {
  height: 44px;
  border: 1px dashed var(--c-brass-border); border-radius: var(--r);
  display: flex; align-items: center; justify-content: center; gap: 9px;
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .2em;
  color: var(--c-brass);
  cursor: pointer;
}
.btn-brass-out:active { transform: scale(.98); }

/* 3a — carte « SÉANCE PROPOSÉE » + rows de sélection des binômes */
.inv-card {
  background: var(--c-card);
  border: 1px solid var(--c-border); border-radius: var(--r);
  padding: 16px;
}
.inv-card__kicker { font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em; color: var(--c-grey); }
.inv-card__edit { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-brass); cursor: pointer; padding: 4px 0 4px 10px; }
.inv-card__edit:hover { color: var(--c-brass-hover); }
.inv-card__edit:active { opacity: .55; }
.inv-card__date { font-family: var(--f-display); font-weight: 700; font-size: 22px; letter-spacing: .05em; margin-top: 8px; }
.inv-card__stand { font-size: 13px; color: var(--c-grey); margin-top: 4px; }
.inv-buddy {
  display: flex; align-items: center; gap: 12px;
  padding: 9px 10px;
  border: 1px solid transparent; border-radius: var(--r);
  cursor: pointer;
  transition: border-color var(--t-micro) var(--ease);
}
.inv-buddy:active { transform: scale(.98); }
.inv-buddy--on { border-color: var(--c-brass-border); }
.inv-buddy__pseudo { flex: 1; font-size: 13.5px; font-weight: 600; }
.inv-cart { display: inline-flex; width: 15px; justify-content: center; }
.inv-cart--in svg { animation: cartIn .18s cubic-bezier(.3, 0, .2, 1) both; }
.inv-send { position: relative; }

/* Mot du créateur — sur la carte 3a figée, la carte navy 3b et la gestion */
.inv-mot { font-size: 12.5px; line-height: 1.45; color: var(--c-text2); margin-top: 8px; }
/* 3a sans binôme : l'alerte prend la place du disclaimer cartouche */
.inv-vide { display: block; text-align: center; color: var(--c-alert); }
/* Demande envoyée en attente : présente à l'historique, non cliquable */
.buddy-row--pending { opacity: .85; cursor: default; }

/* 3b — carte navy bord or (date/heure or mono, stand Big Shoulders) */
.inv-from { font-size: 13px; color: var(--c-grey); }
.inv-from b { color: var(--c-paper); font-weight: 600; }
.inv-navy {
  background: var(--c-navy);
  border: 1px solid var(--c-brass); border-radius: var(--r);
  padding: 18px;
  text-align: left;
}
.inv-navy__date { font-family: var(--f-mono); font-size: 10px; letter-spacing: .2em; color: var(--c-brass); }
.inv-navy__stand { font-family: var(--f-display); font-weight: 800; font-size: 26px; letter-spacing: .05em; margin-top: 6px; }
.inv-navy__foot {
  display: flex; align-items: center; gap: 9px;
  border-top: 1px solid var(--c-border);
  margin-top: 14px; padding-top: 12px;
}
.inv-navy__conf { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-grey); }
/* Statuts RSVP côté créateur */
.inv-rsvp { display: flex; align-items: center; gap: 12px; padding: 7px 2px; }
.inv-rsvp__pseudo { flex: 1; font-size: 13.5px; font-weight: 600; text-align: left; }
.inv-rsvp__statut { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--c-grey); }

/* Célébration « PRÉSENT. » — rail, cartouches en claque sèche, flash
   DERRIÈRE (z-index inférieur, forwards + opacity:0 : correctif handoff) */
.presente {
  position: absolute; inset: 0;
  background: var(--c-bg);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  cursor: pointer;
  animation: dimIn .12s both;
}
.presente--out { animation: dimOut .25s var(--ease) both; }
.presente__stage {
  position: relative;
  display: flex; align-items: flex-end; gap: 16px;
  height: 80px;
}
.presente__cart { position: relative; z-index: 1; display: inline-flex; }
.presente__cart svg { animation: cartIn .18s cubic-bezier(.3, 0, .2, 1) both; }
.presente__cart--1 svg { animation-delay: .1s; }
.presente__cart--2 svg { animation-delay: .28s; }
.presente__cart--3 svg { animation-delay: .46s; }
.presente__flash {
  position: absolute; left: 50%; top: 50%;
  width: 80px; height: 80px; margin: -40px 0 0 -40px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(216, 188, 126, .7), rgba(194, 160, 94, 0) 70%);
  opacity: 0; z-index: 0;
  animation: flashOut .2s ease-out .7s forwards;
}
.presente__shock {
  position: absolute; left: 50%; top: 50%;
  width: 110px; height: 110px; margin: -55px 0 0 -55px;
  border: 1px solid var(--c-brass); border-radius: 50%;
  opacity: 0; z-index: 0;
  animation: shock2 .55s cubic-bezier(.1, .6, .3, 1) .7s forwards;
}
.presente__rail {
  width: 150px; height: 1px;
  background: var(--c-border-light);
  margin-top: 14px;
  animation: ringIn .28s var(--ease) both;
}
.presente__word {
  display: flex;
  font-family: var(--f-display); font-weight: 800; font-size: 46px;
  letter-spacing: .1em; line-height: 1;
  margin-top: 22px;
}
.presente__date {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .3em; text-indent: .3em;
  color: var(--c-brass);
  margin-top: 14px;
  animation: fadeUp .2s var(--ease) 1.25s both;
}
@keyframes cartIn {
  0% { transform: translateY(-26px); opacity: 0; }
  55% { transform: translateY(2px); opacity: 1; }
  100% { transform: translateY(0); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .presente__flash, .presente__shock { opacity: 0 !important; }
}


/* ============================================================
   POINÇONS — la vitrine des accomplissements (médailles d'armurier)
   ============================================================ */
.poincons-head {
  display: flex; align-items: baseline; justify-content: center; gap: 2px;
  margin-top: 16px;
  font-family: var(--f-display);
}
.poincons-head__n { font-size: 46px; font-weight: 800; color: var(--c-brass); line-height: 1; }
.poincons-head__sur { font-size: 20px; font-weight: 700; color: var(--c-grey); }
.poincons-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
  margin-top: 18px;
}
.poincon {
  background: var(--c-card);
  border: 1px solid var(--c-border); border-radius: var(--r);
  padding: 16px 12px 14px;
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  text-align: center;
}
.poincon--on { border-color: var(--c-brass-border); }
.poincon__disc {
  width: 62px; height: 62px; border-radius: 50%;
  border: 1px solid var(--c-border-light);
  display: flex; align-items: center; justify-content: center;
  position: relative;
}
.poincon__disc::before {
  content: '';
  position: absolute; inset: 5px;
  border: 1px dashed var(--c-border); border-radius: 50%;
}
.poincon--on .poincon__disc { border-color: var(--c-brass); }
.poincon--on .poincon__disc::before { border-color: var(--c-brass-border); }
.poincon__chiffre {
  font-family: var(--f-display); font-weight: 800; font-size: 22px;
  letter-spacing: .04em; color: var(--c-ghost);
}
.poincon--on .poincon__chiffre { color: var(--c-brass); }
.poincon__dot { width: 12px; height: 12px; border-radius: 50%; background: var(--c-ghost); }
.poincon__dot--on { background: var(--c-spotter); }
.poincon__nom { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .14em; color: var(--c-grey); }
.poincon--on .poincon__nom { color: var(--c-paper); }
.poincon__devise { font-size: 11.5px; line-height: 1.45; color: var(--c-grey); }
.poincon__etat { font-family: var(--f-mono); font-size: 10px; letter-spacing: .1em; color: var(--c-grey); }
.poincon--on .poincon__etat { color: var(--c-brass); }
/* La frappe (nouveaux à l'ouverture) — cascade portée par le délai inline */
.poincon--frappe .poincon__disc {
  animation: poinconHit .34s cubic-bezier(.3, 0, .2, 1) both;
  animation-delay: inherit;
}
@keyframes poinconHit {
  0% { transform: scale(2.1); opacity: 0; }
  55% { transform: scale(.9); opacity: 1; }
  75% { transform: scale(1.05); }
  100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .poincon--frappe .poincon__disc { animation: none; }
}


/* Bloc vitrine des poinçons sur MOI (retour Pauline : trop cool pour une
   simple row) — barre de progression + les 12 mini-médailles */
.poincons-teaser {
  background: var(--c-card);
  border: 1px solid var(--c-border); border-radius: var(--r);
  padding: 14px;
  margin-top: 26px;
  cursor: pointer;
  transition: border-color var(--t-micro) var(--ease);
}
.poincons-teaser:hover { border-color: var(--c-border-light); }
.poincons-teaser:active { transform: scale(.985); }
.poincons-teaser__lbl { font-family: var(--f-mono); font-size: 11px; letter-spacing: .22em; color: var(--c-grey); }
.poincons-teaser__bar {
  height: 4px; border-radius: 2px;
  background: var(--c-raised);
  margin-top: 12px;
  overflow: hidden;
}
.poincons-teaser__fill {
  display: block; height: 100%;
  background: var(--c-brass);
  border-radius: 2px;
  transition: width .4s var(--ease);
}
.poincons-teaser__minis { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.poincon-mini {
  width: 30px; height: 30px; border-radius: 50%;
  border: 1px solid var(--c-border-light);
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.poincon-mini svg { transform: scale(.72); }
.poincon-mini .poincon__chiffre { font-size: 12px; }
.poincon-mini .poincon__dot { width: 8px; height: 8px; }
.poincon-mini--on { border-color: var(--c-brass); }

/* Célébration « POINÇON FRAPPÉ. » — famille « Dans le mille » */
.poincon-fete {
  position: absolute; inset: 0;
  background: var(--c-bg);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  cursor: pointer;
  animation: dimIn .12s both;
}
.poincon-fete__disc {
  width: 120px; height: 120px; border-radius: 50%;
  border: 1px solid var(--c-brass);
  display: flex; align-items: center; justify-content: center;
  position: relative;
  animation: poinconHit .38s cubic-bezier(.3, 0, .2, 1) .12s both;
}
.poincon-fete__disc::before {
  content: '';
  position: absolute; inset: 9px;
  border: 1px dashed var(--c-brass-border); border-radius: 50%;
}
.poincon-fete__disc svg { transform: scale(1.9); }
.poincon-fete__disc .poincon__chiffre { font-size: 40px; color: var(--c-brass); }
.poincon-fete__disc .poincon__dot { width: 22px; height: 22px; background: var(--c-spotter); }
.poincon-fete__word { font-size: 40px; margin-top: 26px; }
@media (prefers-reduced-motion: reduce) {
  .poincon-fete__disc { animation: none; }
}


/* Chargement « esprit tir » : trois munitions qui se garnissent */
.loader { display: flex; flex-direction: column; align-items: center; padding: 18px 0; }
.loader__carts { display: flex; gap: 10px; }
.loader__cart { display: inline-flex; opacity: .22; animation: cartLoad 1.2s var(--ease) infinite; }
@keyframes cartLoad {
  0%, 100% { opacity: .22; transform: translateY(0); }
  45% { opacity: 1; transform: translateY(-2px); }
}
@media (prefers-reduced-motion: reduce) {
  .loader__cart { animation: none; opacity: .7; }
}

/* États vides de SECTION (binômes, futures séances) — plus compacts que
   l'état vide plein écran du carnet */
.empty--section { padding: 20px 8px 8px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 12px; }
.empty--section .empty__copy { font-size: 12.5px; line-height: 1.55; color: var(--c-grey); max-width: 260px; }
html.confort .empty--section .empty__copy { font-size: 14px; }
