/* Dataset viewer interactions, adapted to the Headz palette. */
#model-mount canvas{display:block;width:100%;height:100%;touch-action:none;outline-offset:-4px}
.viewer-shell{isolation:isolate;background:#eeedf3}
.viewer-shell.is-ready{background:#eeedf3}
.viewer-copy .model-options{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 24px}
.viewer-copy .model-options button{transition:background-color .2s,color .2s,border-color .2s;min-width:104px}
.viewer-copy .model-options button[aria-pressed=true]{background:#eee9fa;color:#5638b4;border-color:#d8cdee}
.viewer-view-tabs{display:inline-flex;gap:4px;padding:4px;background:#eeedf3;border-radius:12px;margin-bottom:18px}
.viewer-view-tabs button,.viewer-actions button{border:1px solid transparent;border-radius:9px;padding:10px 16px;min-height:44px;background:transparent;font-size:15px;font-weight:600;transition:background-color .2s,color .2s,border-color .2s}
.viewer-view-tabs button[aria-pressed=true]{background:#fff;color:#5638b4;box-shadow:0 2px 6px #30204a0b}
.viewer-actions{display:flex;flex-wrap:wrap;gap:8px;margin:18px 0 10px}
.viewer-actions button{background:#eee9fa;border-color:#ddd5f5;color:#5638b4;min-width:134px}
.viewer-view-tabs button:hover,.viewer-actions button:hover{border-color:#b8a4dd;background:#e7dff6;color:#4a2c97}
.viewer-copy button:disabled{opacity:.45;cursor:wait}
.viewer-copy .viewer-help{font-size:16px!important;margin:0;line-height:1.6}
.viewer-copy .viewer-instructions{font-size:14px!important;min-height:24px;margin:0 0 6px}
.viewer-gesture{position:absolute;z-index:2;bottom:20px;left:calc(50% - 15px);pointer-events:none;animation:headz-swipe 3.4s ease-in-out infinite}
.viewer-gesture[hidden],.viewer-shell:not(.is-ready) .viewer-gesture{display:none}
.viewer-multi-labels{display:none;position:absolute;inset:auto 0 16px;pointer-events:none;text-align:center;font-size:13px;color:#666176}
.viewer-shell.is-multi .viewer-multi-labels{display:grid;grid-template-columns:repeat(3,1fr)}
.viewer-shell.is-multi .viewer-gesture{display:none}
.viewer-shell[aria-busy=true] .viewer-placeholder::after{content:'';width:22px;height:22px;border:2px solid #d7cee9;border-top-color:#7250bf;border-radius:50%;animation:headz-load 1s linear infinite}
@keyframes headz-swipe{0%,20%,100%{transform:translateX(0) rotate(0);opacity:.5}45%{transform:translateX(-14px) rotate(-6deg);opacity:.9}75%{transform:translateX(14px) rotate(6deg);opacity:.9}}
@keyframes headz-load{to{transform:rotate(360deg)}}
@media(max-width:760px){.viewer-copy .model-options{margin:6px 0 20px}.viewer-copy .model-options button{min-width:0;flex:1;padding:10px 8px}.viewer-view-tabs{display:flex}.viewer-view-tabs button{flex:1}.viewer-actions button{flex:1}.viewer-copy .viewer-help{font-size:15px!important}}
.viewer-shell.is-multi.is-stacked .viewer-multi-labels{inset:0;grid-template-columns:1fr;grid-template-rows:repeat(3,1fr);align-items:end;padding-bottom:10px}
@media(prefers-reduced-motion:reduce){.viewer-gesture{display:none}.viewer-copy button{transition:none}.viewer-shell[aria-busy=true] .viewer-placeholder::after{animation:none}}

.viewer-feature-description{margin:20px 0 26px!important;max-width:480px!important}
.viewer-copy>h2{font-size:clamp(34px,3.3vw,48px);line-height:1.1}

/* Show either the loading poster or the rendered model, never both. */
.viewer-shell:not(.is-ready) #model-mount{visibility:hidden}
.viewer-shell:not(.is-ready) .viewer-multi-labels{display:none}
/* Continue the feature zigzag: copy left, larger preview right. */
#preview-3d .model-layout{grid-template-columns:1fr 1.3fr}
@media(max-width:760px){#preview-3d .model-layout{grid-template-columns:1fr}}

.viewer-copy .viewer-keyboard-help{display:inline-block;white-space:nowrap}

/* Adultz embeds the same viewer within its continuous feature sequence. */
.headz-pack #preview-3d .viewer-shell{aspect-ratio:1.15}
.headz-pack #preview-3d .viewer-copy{max-width:none}
.headz-pack #preview-3d .viewer-feature-description{margin:20px 0 30px!important}

/* Initial loading uses text only, without downloading a static model poster. */
#preview-3d .viewer-placeholder{gap:20px;flex-direction:column;padding:30px}
#preview-3d .viewer-loading-label{margin:0;font:500 15px/1.5 Arial,sans-serif;color:var(--td-color-preview-label);text-align:center}
#preview-3d .viewer-shell[aria-busy=true] .viewer-placeholder::after{content:"";width:24px;height:24px;border:2px solid var(--td-color-border);border-top-color:var(--td-color-link);border-radius:50%;animation:viewer-loading 1s linear infinite}
@keyframes viewer-loading{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){#preview-3d .viewer-shell[aria-busy=true] .viewer-placeholder::after{animation:none}}
