/* Shared silhouette for picking and edge light. No rectangular picking surfaces. */
svg.hotspots{width:100%;height:100%;overflow:visible;pointer-events:none}
svg.hotspots .hotspot,svg.hotspots .object-control{position:static;transform:none;width:auto;height:auto;min-width:0;min-height:0;pointer-events:none;outline:none;cursor:pointer;touch-action:manipulation}
svg.hotspots .hotspot[data-interactive]{touch-action:none}
.object-hit{fill:transparent;stroke:none;pointer-events:fill}
.object-halo,.object-name{pointer-events:none}
.object-halo path{fill:none;stroke:#fff0c5;stroke-linejoin:round;stroke-linecap:round;transition:opacity .22s,stroke-width .22s,filter .22s}
.edge-bloom{stroke-width:5;filter:blur(2.8px);opacity:.78}
.edge-light{stroke-width:1.5;filter:blur(.35px);opacity:.86}
.hotspot:hover .edge-bloom,.hotspot:focus-visible .edge-bloom,.object-control:hover .edge-bloom,.object-control:focus-visible .edge-bloom{stroke-width:10;filter:blur(4.2px);opacity:1}
.hotspot:hover .edge-light,.hotspot:focus-visible .edge-light,.object-control:hover .edge-light,.object-control:focus-visible .edge-light{stroke-width:2.1;opacity:1}
.object-name{display:none;fill:#494052;stroke:#fff5e8;stroke-width:7;paint-order:stroke;stroke-linejoin:round;font:12px 'PingFang SC',sans-serif}
.show-guides .object-name{display:block}
.show-guides .edge-bloom{opacity:1}
#teapot-pivot,#cup-back,#cylinder-shake{filter:drop-shadow(0 0 1.5px #fff3dbdd) drop-shadow(0 0 4px #ffe5a6b3);transition:filter .22s}
.stage[data-hover-object="capybara-tea-spa"] #teapot-pivot,.stage[data-hover-object="capybara-tea-spa"] #cup-back,.stage[data-hover-object="dream-red-mansions-flower-tokens"] #cylinder-shake{filter:drop-shadow(0 0 2px #fff8e9) drop-shadow(0 0 9px #ffe7abe6) brightness(1.08)}
.stage[data-hover-object="dream-red-mansions-flower-tokens"] #flying-sign{filter:drop-shadow(0 0 3px #ffe7abb3)}
@media(max-width:700px){.object-name{font-size:15px;stroke-width:8}.edge-bloom{stroke-width:6;opacity:.85}.edge-light{stroke-width:1.9;opacity:.95}}
@media(prefers-reduced-motion:reduce){.object-halo path,#teapot-pivot,#cup-back,#cylinder-shake{transition:none}}

svg.hotspots .hotspot[data-interactive]{cursor:grab}svg.hotspots .hotspot[data-interactive="camera"]{cursor:pointer}.handling-object svg.hotspots .hotspot[data-interactive]{cursor:grabbing}

/* A slow invitation at rest, a single spring response on hover. */
.object-halo{transform-box:fill-box;transform-origin:center;animation:edge-breathe 3.4s ease-in-out infinite}
.hotspot:nth-of-type(2n) .object-halo{animation-delay:-1.2s}
.hotspot:nth-of-type(3n) .object-halo{animation-delay:-2.3s}
@keyframes edge-breathe{0%,100%{opacity:.64}50%{opacity:1}}
.hotspot:hover .object-halo,.hotspot:focus-visible .object-halo,.object-control:hover .object-halo,.object-control:focus-visible .object-halo{animation:edge-spring .6s ease-out both}
@keyframes edge-spring{0%{transform:scale(1);opacity:.8}35%{transform:scale(1.035);opacity:1}65%{transform:scale(1.008);opacity:1}100%{transform:scale(1);opacity:1}}
#teapot-pivot,#cup-back,#cylinder-shake{animation:porcelain-breathe 3.4s ease-in-out infinite}
#cylinder-shake{animation-delay:-1.5s}
@keyframes porcelain-breathe{0%,100%{filter:drop-shadow(0 0 1.3px #fff3dbbb) drop-shadow(0 0 3px #ffe5a699)}50%{filter:drop-shadow(0 0 2px #fff7e4ee) drop-shadow(0 0 5.5px #ffe5a6cc)}}
.prop-bounce[data-bounce="teapot"]{transform-origin:632.4px 397.7px}
.prop-bounce[data-bounce="cup"]{transform-origin:692.5px 410px}
.prop-bounce[data-bounce="cylinder"]{transform-origin:498px 450px}
.stage[data-hover-object="capybara-tea-spa"] .prop-bounce[data-bounce="teapot"],.stage[data-hover-object="capybara-tea-spa"] .prop-bounce[data-bounce="cup"],.stage[data-hover-object="dream-red-mansions-flower-tokens"] .prop-bounce[data-bounce="cylinder"]{animation:prop-spring .62s ease-out both}
.stage[data-hover-object="capybara-tea-spa"] #teapot-pivot,.stage[data-hover-object="capybara-tea-spa"] #cup-back,.stage[data-hover-object="dream-red-mansions-flower-tokens"] #cylinder-shake{animation:none}
@keyframes prop-spring{0%,100%{scale:1}32%{scale:1.045}62%{scale:1.012}80%{scale:1.02}}
.stage.handling-object .prop-bounce[data-bounce]{animation:none;scale:1}
@media(prefers-reduced-motion:reduce){.object-halo,#teapot-pivot,#cup-back,#cylinder-shake,.prop-bounce{animation:none!important;scale:1!important}}
