/* Small, purposeful feedback. The catalog itself never loops or drifts. */
.resource-card { transition: border-color 160ms ease, background-color 160ms ease, box-shadow 160ms ease, transform 160ms ease; }
@media (hover:hover) {
  .resource-card:hover { transform: translateY(-2px); }
  .resource-card:hover .resource-arrow { transform: translate(2px,-2px); }
  .hero-text-link:hover > span, .hero-actions .button:hover > span { transform: translate(2px,-2px); }
}
.resource-arrow,.hero-text-link > span,.hero-actions .button > span { display:inline-block; transition:transform 160ms ease; }
.palette-option,.motion-toggle,.quick-filters button,.button,.connect-header { transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease; }
.routing-svg .route-line { animation:none; stroke-dasharray:none; }
.packet { opacity:0; animation:route-packet 8s linear infinite; offset-rotate:0deg; }
.packet-search { offset-path:path('M124 76 L255 154'); animation-delay:0s; }
.packet-inference { offset-path:path('M255 154 L399 90'); animation-delay:-5.5s; }
.packet-data { offset-path:path('M113 216 L255 154 L389 239'); animation-delay:-3s; animation-duration:9s; }
@keyframes route-packet {
  0%,5% { offset-distance:0%;opacity:0; }
  12% { opacity:1; }
  58% { offset-distance:100%;opacity:1; }
  65%,100% { offset-distance:100%;opacity:0; }
}
dialog[open] { animation:dialog-arrival 180ms cubic-bezier(.2,.7,.2,1); }
@keyframes dialog-arrival { from { opacity:0;transform:translateY(6px); } to {opacity:1;transform:translateY(0);} }
[data-visibility="hidden"] .packet { animation-play-state:paused; }
[data-motion="off"] *,[data-motion="off"] *::before,[data-motion="off"] *::after { animation:none!important; transition:none!important; scroll-behavior:auto!important; }
[data-motion="off"] .resource-card:hover { transform:none; }
@media(prefers-reduced-motion:reduce) {
  *,*::before,*::after { animation:none!important;transition:none!important;scroll-behavior:auto!important; }
  .resource-card:hover,.resource-card:hover .resource-arrow,.hero-text-link:hover > span,.hero-actions .button:hover > span {transform:none;}
}
