/* TACTE: affiche / trait / dossier. Motion is enhancement, never a reading gate. */
:root{--tacte-snap:cubic-bezier(.16,1,.3,1)}
.tacte-scene{position:relative}
.tacte-section-rule{position:absolute;pointer-events:none;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--red) 0 78%,var(--acid) 78% 85%,transparent 85%);transform:scaleX(var(--scene-progress,0));transform-origin:left;z-index:1}
.tacte-ink{background-image:linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:0 96%;background-size:0 .055em;box-decoration-break:clone;-webkit-box-decoration-break:clone}
.tacte-moving .tacte-entered .tacte-ink{animation:tacte-underline .65s .22s var(--tacte-snap) both}
@keyframes tacte-underline{from{background-size:0 .055em}to{background-size:100% .055em}}

/* Hero: the existing sculpture, paper slips and red signature share a rhythm. */
.tacte-moving .hero h1 em:after{transform-origin:left;animation:tacte-hero-ink .7s .52s var(--tacte-snap) both}
@keyframes tacte-hero-ink{from{transform:rotate(-3deg) scaleX(0)}to{transform:rotate(-3deg) scaleX(1)}}
.tacte-moving .hero-sculpture{animation:tacte-sculpture 18s ease-in-out infinite alternate;will-change:transform;animation-play-state:paused}
@keyframes tacte-sculpture{from{transform:scale(1.1) translate(-1%,var(--art-offset,0px)) rotate(-1deg)}to{transform:scale(1.17) translate(1%,calc(var(--art-offset,0px) - 8px)) rotate(1deg)}}
.tacte-moving .floating-note{animation:tacte-note 6.4s ease-in-out infinite;animation-play-state:paused;transform-origin:65% 70%}
@keyframes tacte-note{0%,100%{rotate:-2deg;translate:0 0}50%{rotate:2deg;translate:0 -7px}}
.tacte-moving .art-signature{animation:tacte-signature 5.6s var(--tacte-snap) infinite;animation-play-state:paused;transform-origin:left}
@keyframes tacte-signature{0%,12%,100%{transform:rotate(-12deg) scaleX(1)}42%,64%{transform:rotate(-9deg) scaleX(.74)}}
.tacte-moving .hero-art.in-view :is(.hero-sculpture,.floating-note,.art-signature){animation-play-state:running}
.tacte-moving .hero-art:focus-within :is(.hero-sculpture,.floating-note,.art-signature){animation-play-state:paused}
.tacte-moving .scroll-pill i{animation:tacte-scroll 1.9s ease-in-out infinite;animation-play-state:paused}
.tacte-moving .hero.in-view .scroll-pill i{animation-play-state:running}
@keyframes tacte-scroll{0%,100%{translate:0 -2px}55%{translate:0 5px}}
.tacte-moving .price-seal{animation:tacte-seal 7s ease-in-out infinite;animation-play-state:paused}
.tacte-moving .price-card.in-view .price-seal{animation-play-state:running}
@keyframes tacte-seal{0%,100%{rotate:-2deg}50%{rotate:3deg}}

/* No blank restart: the ribbon consists of two identical groups. */
.ribbon-track{gap:0;animation:none;will-change:auto}
.tacte-ticker-group{display:flex;align-items:center;gap:42px;padding-right:42px;flex-shrink:0}
.tacte-moving .ribbon-track{animation:tacte-ticker 32s linear infinite;animation-play-state:paused;will-change:transform}
.tacte-moving .word-ribbon.in-view .ribbon-track{animation-play-state:running}
.tacte-moving .word-ribbon:is(:hover,:focus-within) .ribbon-track{animation-play-state:paused}
@keyframes tacte-ticker{to{transform:translateX(-50%)}}
.tacte-moving .casting.tacte-entered .cast-slash{animation:tacte-slash .65s .3s var(--tacte-snap) both}
@keyframes tacte-slash{from{transform:rotate(-9deg) scaleX(0)}to{transform:rotate(-9deg) scaleX(1)}}
.tacte-moving .manifesto.tacte-entered .manifesto-bar{animation:tacte-manifesto-cut .8s .25s var(--tacte-snap) both;transform-origin:left}
@keyframes tacte-manifesto-cut{from{scale:0 1}to{scale:1 1}}
.tacte-moving .manifesto.tacte-entered .manifesto-statement p:nth-child(2){animation:tacte-answer .72s .2s var(--tacte-snap) both}
@keyframes tacte-answer{from{opacity:.25;translate:18px 14px}to{opacity:1;translate:0 0}}

/* Interaction: sharp ink, modest physical depth, stationary form controls. */
.desktop-nav a{position:relative}
.desktop-nav a:after{content:'';height:3px;position:absolute;inset:auto 0 -8px;background:var(--red);transform:scaleX(0);transform-origin:left;transition:transform .25s var(--tacte-snap)}
.desktop-nav a[aria-current=location]:after,.desktop-nav a:focus-visible:after{transform:scaleX(1)}
.mobile-nav a[aria-current=location]{text-decoration:underline;text-decoration-color:var(--red);text-decoration-thickness:3px;text-underline-offset:6px}
.parcours-list article{position:relative;isolation:isolate}
.parcours-list article:before{content:'';position:absolute;inset:10px 0;background:var(--acid);opacity:0;z-index:-1;transform:scaleX(.96);transform-origin:left;transition:opacity .3s,transform .5s var(--tacte-snap);border-radius:3px 36px 4px 3px}
.parcours-list article:focus-within:before{opacity:.13;transform:scaleX(1)}
.parcours-list aside{transition:transform .45s var(--tacte-snap),box-shadow .45s var(--tacte-snap)}
.result-paper.changing{animation:none}
.motion-control{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:10px 14px;border:1px solid currentColor;border-radius:24px;background:transparent;color:inherit;font:inherit;font-size:.875rem;cursor:pointer;text-align:left}
.motion-control[hidden]{display:none}
.motion-control:focus-visible{outline:3px solid var(--red);outline-offset:4px}
.motion-control:disabled{cursor:default;opacity:.65}
.motion-control--hero{position:absolute;top:35px;left:24px;z-index:5;width:44px;height:44px;padding:0;background:var(--paper);color:#151515;box-shadow:3px 3px 0 #151515;transition:box-shadow .2s,transform .2s}
.motion-control--hero:active{box-shadow:0 0 0 #151515;transform:translate(2px,2px)}
.motion-control--hero [data-motion-label]{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.motion-control-icon{display:block;position:relative;width:16px;height:16px;flex:0 0 16px}
.motion-control-icon:before,.motion-control-icon:after{content:'';position:absolute;top:1px;bottom:1px;width:4px;background:currentColor}
.motion-control-icon:before{left:2px}.motion-control-icon:after{right:2px}
[aria-pressed=true]>.motion-control-icon:before{left:3px;top:0;bottom:0;width:0;height:0;background:none;border-top:8px solid transparent;border-bottom:8px solid transparent;border-left:12px solid currentColor}
[aria-pressed=true]>.motion-control-icon:after{display:none}
.space-footer>.motion-control,.atelier-footer>.motion-control{margin-top:20px}
.tacte-moving .workflow-tabs button,.tacte-moving .space-tabs button{transition:background-color .22s,color .22s,box-shadow .22s}
.tacte-moving :is(.workflow-tabs,.space-tabs) button[aria-pressed=true]{box-shadow:inset 0 -4px var(--red)}
.atelier .editor-cover,.atelier .review-cover{border-bottom:3px solid var(--red)}

@media(hover:hover) and (pointer:fine){
 .tacte-moving .expertise-card{transform:perspective(1100px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg));transition:transform .35s var(--tacte-snap)}
 .tacte-moving .expertise-card:focus-within{transform:none}
 .tacte-moving .parcours-list article:hover:before{opacity:.13;transform:scaleX(1)}
 .tacte-moving .parcours-list article:hover aside{transform:translate(-4px,-5px) rotate(-1deg);box-shadow:5px 6px 0 #151515}
 .tacte-moving :is(.button,.act,.nav-cta){transition:transform .25s var(--tacte-snap),box-shadow .25s var(--tacte-snap),background-color .25s}
 .tacte-moving :is(.button,.act,.nav-cta):active{transform:translateY(2px);box-shadow:0 1px 0 #151515}
 .tacte-moving .parcours-link:hover{text-decoration:underline;text-underline-offset:5px}
}
@media(max-width:700px){
 .tacte-ticker-group{gap:26px;padding-right:26px}
 .tacte-moving .ribbon-track{animation-duration:29s}
 .tacte-moving .hero-sculpture{animation-duration:22s}
 .tacte-moving .floating-note{animation-name:tacte-note-mobile;animation-duration:7s}
 @keyframes tacte-note-mobile{0%,100%{rotate:-1deg;translate:0 0}50%{rotate:1deg;translate:0 -4px}}
 .motion-control--hero{left:23px;top:30px}
 .tacte-section-rule{height:2px}
}
.motion-away *, .motion-away *:before,.motion-away *:after{animation-play-state:paused!important}
.motion-quiet .tacte-section-rule{transform:scaleX(1)}
.motion-quiet .tacte-ink{background-size:100% .055em}
.motion-quiet :is(.parcours-list article:before,.parcours-list aside,.expertise-card){transform:none!important}
.motion-quiet .scroll-pill i{translate:none}
@media(prefers-reduced-motion:reduce){
 .tacte-section-rule{transform:scaleX(1)}
 .tacte-ink{background-size:100% .055em}
 .parcours-list article:before,.parcours-list aside{transform:none!important}
}
@media print{.motion-control,.tacte-section-rule{display:none!important}}
