/* A common gesture: separate planes find their place, then settle. */
.method-art { height: 238px; border-radius: 14px; background: radial-gradient(ellipse at 100% 0,#d98b733b,transparent 64%),linear-gradient(145deg,#ebe5f3,#e1d7ed); }
.method-lines { opacity: .5; }
.method-number { font-family: Figtree,Arial,sans-serif; font-weight: 400; font-size: 66px; letter-spacing: -.055em; color: #7059cb59; }
.method-caption { color: var(--depth); font-size: 12px; }
.method-shapes { position: absolute; right: 29px; top: 36px; width: 135px; height: 135px; perspective: 640px; }
.conviction-grid { perspective: 1200px; }
.conviction-grid article { transform-origin: 50% 100%; }
.contact-section { overflow: clip; }
.contact-texture { inset: calc(-48px - 4vw) -8%; }
/* Le passage de flèche (interactions.js) sort de la pastille sans en déborder. */
.button-arrow { overflow: hidden; }
/* Liens texte : un trait se déploie sur la bordure, Iris sur fond clair, Lumière sur fond sombre. */
.text-link { position: relative; }
.text-link::after { content: ''; position: absolute; left: 0; right: 0; bottom: -1px; height: 1px; background: var(--iris); scale: 0 1; transform-origin: left center; pointer-events: none; }
.text-link.light::after { background: var(--light); }
.text-link:focus-visible::after { scale: 1 1; }
/* Titre atteint par une ancre lointaine (interactions.js) : repère clavier sur fond clair comme sombre. */
main h2[tabindex="-1"]:focus-visible { outline: 2px solid currentColor; outline-offset: 8px; border-radius: 2px; }
@media (hover: hover) and (pointer: fine) {
  .text-link:hover::after { scale: 1 1; }
}
@media (prefers-reduced-motion: no-preference) {
  /* Seule déclaration de transition des boutons : couleurs en retour rapide, pression en 120 ms. */
  .button { transition: background-color var(--duration-feedback) var(--ease-standard), border-color var(--duration-feedback) var(--ease-standard), color var(--duration-feedback) var(--ease-standard), box-shadow var(--duration-ui) var(--ease-standard), scale var(--duration-press) var(--ease-standard); }
  .button-arrow { transition: background-color var(--duration-feedback) var(--ease-standard); }
  /* La pression se lit à l’échelle seule : la luminosité de refinements.css ne s’y ajoute pas.
     Spécificité égale à :is(.button, .scenario-controls button, …):active, l’ordre tranche. */
  .button:is(button, a):active { scale: .98; filter: none; }
  .text-link::after { transition: scale var(--duration-ui) var(--ease-standard); }
  .text-link > span { transition: translate var(--duration-feedback) var(--ease-standard); }
  .text-link:focus-visible > span { translate: 3px -3px; }
}
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  .text-link:hover > span { translate: 3px -3px; }
}
@media (prefers-reduced-motion: reduce), print {
  .conviction-grid article,.contact-texture { translate: none !important; rotate: none !important; scale: none !important; }
  .product,.contact-section,.process-chain { clip-path: none !important; }
  .method-stage i, .method-stage i::before, .method-stage i::after, .principle-lots i { transition: none !important; }
}
