/* Interface motion; rare tube marks are defined in pipe-signals.css. */
@media(min-width:851px){
  .plinth-animation i{animation-duration:8.5s}
  .plinth-animation i:nth-child(2){animation-delay:1.3s}
  .plinth-animation i:nth-child(3){animation-delay:2.6s}
  .plinth-animation i:nth-child(4){animation-delay:3.9s}
  .plinth-animation i:nth-child(5){animation-delay:5.2s}
}
/* A short preview plays once when the cards enter view. Text stays still. */
.widget-card.is-in-view .bars i{animation:chartArrive .85s cubic-bezier(.2,.7,.3,1) var(--preview-delay,0s) both}
.widget-card.is-in-view .mini-task i,.widget-card.is-in-view .mini-file i{animation:iconArrive .5s ease var(--preview-delay,0s) both}
.widget-card.is-in-view .map-route{stroke-dasharray:225;animation:routeArrive 1.6s ease-out both}
.chat .chat-message{animation:chatAppear .32s ease-out both}
.chat .chat-message:nth-child(2){animation-delay:.06s}
.chat .chat-message:nth-child(3){animation-delay:.12s}
.chat .chat-message:nth-child(4){animation-delay:.18s}
.chat-message.is-bot .chat-avatar{animation:aiBreath 4.8s ease-in-out infinite}
.chat-message.is-bot:nth-child(4) .chat-avatar{animation-delay:1.2s}
.ai-spark{display:inline-block;animation:aiBreath 4.8s ease-in-out infinite}
@media(hover:hover) and (pointer:fine){
  .widget-card:hover,.widget-card:focus-visible,.integration:hover,.hub-chip:hover{transform:translateY(-3px)}
  .widget-card:hover .mini-ui{transform:none}
  .widget-card:hover .bars i{animation:chartBreathe 1.8s ease-in-out infinite}
  .widget-card:hover .bars i:nth-child(even){animation-delay:-.7s}
  .widget-card:hover .map-route{stroke-dasharray:5 5;animation:mapTravel 1.2s linear infinite}
  .widget-card:hover .more b{transform:translateX(4px)}
  .button:hover{transform:translateY(-2px)}
}
.motion-paused .plinth-animation i,
.motion-paused .chat-avatar,.motion-paused .ai-spark{animation-play-state:paused}
.plinth-animation i[data-motion-watch]:not(.is-motion-visible),
.ai[data-motion-watch]:not(.is-motion-visible) .chat-avatar,
.ai[data-motion-watch]:not(.is-motion-visible) .ai-spark{animation-play-state:paused}
@keyframes chartArrive{from{transform:scaleY(.3)}to{transform:scaleY(1)}}
@keyframes iconArrive{from{opacity:.3;transform:scale(.8)}to{opacity:1;transform:scale(1)}}
@keyframes routeArrive{from{stroke-dashoffset:225}to{stroke-dashoffset:0}}
@keyframes chartBreathe{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.88)}}
@keyframes mapTravel{to{stroke-dashoffset:-20}}
@keyframes chatAppear{from{opacity:0}to{opacity:1}}
@keyframes aiBreath{0%,100%{box-shadow:0 0 0 0 #a47ae000}50%{box-shadow:0 0 0 4px #a47ae022}}
.motion-scrolling .chat-avatar,.motion-scrolling .ai-spark{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){
  *,*:before,*:after{animation:none!important;transition:none!important}
  .plinth-animation{display:none!important}
}
