/* Shared loading feedback. No timer delays cached or already available content. */
.ab-skeleton,img.ab-image-pending,.ab-content-pending::after{background:linear-gradient(105deg,var(--raised,#e8edf5) 20%,var(--surface,#fff) 45%,var(--raised,#e8edf5) 70%);background-size:240% 100%;animation:ab-skeleton-sweep 1.4s linear infinite}
img.ab-image-pending{color:transparent}
.ab-loading-view{width:100%;min-width:0;grid-column:1/-1;color:var(--muted,#64748b)}
.ab-loading-caption{display:block;font-size:13px;margin:8px 0 16px}
.ab-loading-shapes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.ab-loading-card{min-width:0;overflow:hidden;border:1px solid var(--line,#dce4ee);background:var(--surface,#fff);border-radius:16px;padding:14px}
.ab-skeleton{display:block;height:14px;border-radius:5px}
.ab-skeleton-picture{height:auto;aspect-ratio:4/3;margin-bottom:18px;border-radius:10px}
.ab-loading-lines{display:grid;align-content:center;gap:15px;padding:4px 0}
.ab-skeleton-title{width:75%;height:22px}.ab-skeleton-short{width:50%}
.ab-loading-detail .ab-loading-shapes{grid-template-columns:1fr}.ab-loading-detail .ab-loading-card{display:grid;grid-template-columns:1fr 1fr;gap:24px;border:0;padding:20px}.ab-loading-detail .ab-skeleton-picture{margin:0}
.ab-content-pending{position:relative;pointer-events:none}
.ab-content-pending::after{content:"";position:absolute;inset:0;z-index:5;opacity:.85;border-radius:inherit;pointer-events:none}
button[aria-busy=true]{background-image:linear-gradient(105deg,transparent 20%,#ffffff33 45%,transparent 70%);background-size:240% 100%;animation:ab-skeleton-sweep 1.4s linear infinite}
@keyframes ab-skeleton-sweep{from{background-position:120% 0}to{background-position:-120% 0}}
@media(max-width:760px){.ab-loading-shapes{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.ab-loading-detail .ab-loading-card{grid-template-columns:1fr;padding:16px}.ab-loading-detail .ab-skeleton-picture{max-height:220px;aspect-ratio:1}}
@media(prefers-reduced-motion:reduce){.ab-skeleton,img.ab-image-pending,.ab-content-pending::after{animation:none;background:var(--raised,#e8edf5)}button[aria-busy=true]{animation:none}}

:where(button,a,input,select,summary){touch-action:manipulation}
