/* Left behind in the plugin's zp-widgets.css during the port; without it the
   `animation:zipRail` below names nothing and the track never moves. Keyframes
   travel with the widget that animates (see home.css). Pairs with the
   duplicated half the partial renders: -50% is exactly one set. */
@keyframes zipRail { 0% { transform:translateX(0); } 100% { transform:translateX(-50%); } }

.zp-logo-marquee { overflow:hidden; width:100%; }
/* The 16px gap lives on the items, not the track: with a track `gap` the duplicated
   half is one gap short and `translateX(-50%)` visibly jumps every loop. */
.zp-logo-marquee__track { display:flex; align-items:stretch; width:max-content; padding-bottom:32px; animation:zipRail var(--zp-speed,34s) linear infinite; }
.zp-logo-marquee__item { margin-right:16px; }
.zp-logo-marquee.is-pause-hover:hover .zp-logo-marquee__track { animation-play-state:paused; }
.zp-logo-marquee--cards .zp-logo-marquee__item { flex-shrink:0; width:220px; background:#fff; border:1px solid var(--ink-200,#e3e5ea); border-radius:14px; overflow:hidden; display:flex; flex-direction:column; box-shadow:0 8px 24px rgba(13,31,78,.1); }
.zp-logo-marquee--cards img, .zp-logo-marquee__placeholder { width:100%; height:180px; object-fit:cover; display:block; background:var(--grad-zipify,linear-gradient(135deg,#000 0%,#0a3a79 100%)); }
.zp-logo-marquee__caption { padding:12px 16px; font-size:16px; font-weight:700; color:#202122; letter-spacing:.03em; text-align:center; background:#fff; }
.zp-logo-marquee--logos .zp-logo-marquee__track { align-items:center; padding:8px 0 24px; }
.zp-logo-marquee--logos .zp-logo-marquee__item { margin-right:48px; }
.zp-logo-marquee--logos img { height:64px; width:auto; display:block; filter:brightness(0) invert(1); opacity:.85; }
@media (prefers-reduced-motion: reduce) { .zp-logo-marquee__track { animation:none; flex-wrap:wrap; width:auto; justify-content:center; } .zp-logo-marquee__item { margin-bottom:16px; } .zp-logo-marquee__item[aria-hidden="true"] { display:none; } }
