/* All visible layers share a fixed aspect ratio and one idle animation. */
.character .rig-host{position:absolute;inset:0;display:block;pointer-events:none}
.rig-fallback{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}
.rig-host,.outfit-thumbnail{position:relative}
.puppet-rig{display:block;width:100%;height:100%;stroke:none;fill:none;overflow:visible;pointer-events:none;flex-shrink:0}
.app .character{width:auto;height:min(48%,calc(100vw * .87));aspect-ratio:2/3;max-height:none;display:block;line-height:0}
.app.close-view .character{height:50%;width:auto;aspect-ratio:2/3}
.dressing-avatar{height:96%;width:auto;aspect-ratio:2/3;max-width:85%}
.outfit-thumbnail{height:94px;aspect-ratio:2/3;margin:auto}
@media(max-height:700px){.outfit-thumbnail{height:75px}}
/* Keep the canvas in a stable raster box. Breathing and touch responses are skinned inside it. */
.app .character,.app .character.touched,.app.close-view .character,.app.close-view .character.touched{animation:none;transform:translateX(-50%);filter:none;transition:none}
.app.night .character,.app.rainy .character,.app.night.rainy .character{filter:none}

/* Transparent compositor surface; no phone tap highlight or inherited canvas frame. */
.character .puppet-rig,.character .rig-fallback{background:transparent;border:0;box-shadow:none;-webkit-tap-highlight-color:transparent}
