/* Quiet motion. No animation represents live collection or connection status. */
.resource-card{animation:row-in .32s ease-out both;animation-delay:var(--entry-delay,0ms);transition:background .18s,border-color .18s,box-shadow .18s}.resource-grid:not(.list-mode) .resource-card:hover{border-color:color-mix(in srgb,var(--accent) 35%,var(--line));box-shadow:var(--shadow)}
#search-form:after{content:'';position:absolute;bottom:0;left:15%;width:26%;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.32;animation:search-glint 12s ease-in-out infinite}
.brand-mark{transition:box-shadow .25s,transform .25s}.brand:hover .brand-mark{box-shadow:0 5px 20px #6957de30;transform:translateY(-1px)}.theme-toggle,.quick-search button,.details-button,.direct-link,.category-list button{transition:background .18s,border-color .18s,color .18s}.search-pulse{animation:search-feedback .5s ease-out}dialog[open]{animation:dialog-in .18s ease-out}.loading-detail{animation:loading-breathe 1.3s ease-in-out infinite alternate}
@keyframes row-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}@keyframes search-glint{0%,25%{left:10%;opacity:0}45%{opacity:.4}75%,100%{left:72%;opacity:0}}@keyframes search-feedback{40%{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent)}}@keyframes dialog-in{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}@keyframes loading-breathe{to{opacity:.5}}
:root[data-motion=off] *,:root[data-motion=off] *:before,:root[data-motion=off] *:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
