.catalog-controls{display:flex;flex-wrap:wrap;gap:16px 28px;align-items:center;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:18px 0;margin:27px 0}.style-filters{display:flex;flex-wrap:wrap;gap:8px}.catalog-controls button,.catalog-controls select{font:inherit;font-size:.9375rem;min-height:44px;color:var(--ink);background:var(--white);border:1px solid var(--line-strong);border-radius:7px;padding:9px 13px;cursor:pointer}.style-filters button[aria-pressed=true]{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.style-filters button span{font-size:.8rem;margin-left:7px;opacity:.8}.catalog-controls button:hover{border-color:var(--accent)}.catalog-controls :focus-visible{outline:3px solid var(--accent);outline-offset:3px}.mood-control{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.mood-control label{font-size:.875rem;color:var(--muted)}.catalog-heading{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 18px;margin-bottom:20px}.catalog-heading h2{font-size:1.5rem;margin:0}.catalog-heading p{font-size:.9375rem;color:var(--muted)}#catalog-count{font-size:.8125rem;color:var(--muted);margin-left:auto;white-space:nowrap}.catalog-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:26px 18px}.catalog-stage{height:222px;background:var(--white);border:1px solid var(--line);border-radius:10px;display:grid;place-items:center;overflow:hidden}.catalog-stage .bot-character{width:170px;height:184px;max-width:86%}.catalog-grid[data-style=miniatures] .catalog-stage .bot-character{width:192px;height:208px;max-width:94%}.catalog-grid figcaption{padding-top:11px;line-height:1.5}.catalog-grid figcaption strong{font-size:1rem;display:block;font-weight:600}.catalog-grid figcaption span{display:block;font-size:.8125rem;color:var(--muted);margin-top:3px}@media(max-width:1000px){.catalog-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.catalog-stage{height:210px}.catalog-stage .bot-character{width:155px;height:168px}.catalog-grid[data-style=miniatures] .catalog-stage .bot-character{width:180px;height:195px}}@media(max-width:760px){.catalog-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.catalog-stage{height:198px}#catalog-count{margin-left:0;width:100%}}@media(max-width:540px){.catalog-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 12px}.catalog-controls{margin-top:20px;gap:14px}.style-filters{gap:6px}.catalog-controls button{padding:8px 10px;font-size:.875rem}.style-filters button span{margin-left:4px}.catalog-stage{height:196px}.catalog-stage .bot-character{width:142px;height:154px}.catalog-grid[data-style=miniatures] .catalog-stage .bot-character{width:165px;height:178px}.catalog-grid figcaption strong{font-size:.9375rem}.catalog-heading p{font-size:.875rem}}

/* Gallery blinks are independent of body movement, with per-character timing. */
.catalog-stage .bot-character:is([data-mood=idle],[data-mood=busy],[data-mood=waiting],[data-mood=error]) :is(.crew-blink,.character-eye){animation:gallery-blink var(--gallery-blink-cycle,5.5s) linear var(--gallery-blink-phase,0s) infinite;transform-box:fill-box;transform-origin:center}
@keyframes gallery-blink{0%,94%,99%,100%{transform:scaleY(1)}95.5%,97%{transform:scaleY(.07)}}
body.motion-paused .catalog-stage .bot-character *,body.motion-hidden .catalog-stage .bot-character *,.catalog-stage .bot-character.motion-outside *{animation-play-state:paused!important}
.motion-status{flex-basis:100%;font-size:.875rem;color:var(--muted);margin:0}

/* Registered idle eye patches use the same stagger as the other character families. */
.catalog-stage .miniature-character[data-mood=idle] .mini-frame-idle .mini-blink{animation:gallery-mini-blink var(--gallery-blink-cycle,5.5s) steps(1,end) var(--gallery-blink-phase,0s) infinite}
@keyframes gallery-mini-blink{0%,94.99%,98%,100%{opacity:0}95%,97.99%{opacity:1}}
