.vehicle-composition{pointer-events:auto;cursor:pointer}
.vehicle-composition.is-squishing .vehicle-render{animation:vehicle-soft-squish .46s cubic-bezier(.2,.9,.28,1)}
.vehicle-composition.is-squishing .vehicle-floor-reflection{animation:vehicle-reflection-squish .46s cubic-bezier(.2,.9,.28,1)}
.vehicle-composition.is-squishing .vehicle-contact-shadow{animation:vehicle-shadow-squish .46s cubic-bezier(.2,.9,.28,1)}
@keyframes vehicle-soft-squish{0%,100%{scale:1 1;translate:0 0}32%{scale:1.018 .972;translate:0 1.2%}62%{scale:.995 1.008;translate:0 -.25%}}
@keyframes vehicle-reflection-squish{0%,100%{scale:1 1}32%{scale:1.018 .965;opacity:.5}62%{scale:.997 1.006;opacity:.44}}
@keyframes vehicle-shadow-squish{0%,100%{scale:1 1;opacity:.98}32%{scale:1.035 .88;opacity:1}62%{scale:.99 1.02;opacity:.96}}
@media(prefers-reduced-motion:reduce){.vehicle-composition.is-squishing .vehicle-render,.vehicle-composition.is-squishing .vehicle-floor-reflection,.vehicle-composition.is-squishing .vehicle-contact-shadow{animation:none}}

/* Colour changes stay in place and blend both the body and its reflection. */
.vehicle-paint-reveal{position:absolute;inset:0;z-index:2;display:grid;place-items:center;pointer-events:none}
.vehicle-paint-reveal .vehicle-render,.vehicle-paint-reveal .vehicle-floor-reflection{animation:vehicle-paint-in var(--paint-duration,1200ms) ease-in-out both}
.vehicle-paint-outgoing .vehicle-render,.vehicle-paint-outgoing .vehicle-floor-reflection{animation:vehicle-paint-out var(--paint-duration,1200ms) ease-in-out both}
.vehicle-paint-reveal .vehicle-contact-shadow{visibility:hidden}
@keyframes vehicle-paint-in{from{opacity:0}to{opacity:1}}
@keyframes vehicle-paint-out{from{opacity:1}to{opacity:0}}

/* One continuous volume; fixed layers contain drifting seamless vapour. */
.vehicle-atmosphere{position:absolute;inset:var(--floor-fog-top,64%) 0 0;overflow:hidden;pointer-events:none;mask-image:linear-gradient(transparent,#000 var(--floor-fog-feather,24px));-webkit-mask-image:linear-gradient(transparent,#000 var(--floor-fog-feather,24px))}
.vehicle-atmosphere--back{z-index:0}
.vehicle-atmosphere--front{z-index:3}
.vehicle-fog-field{position:absolute;inset:0;opacity:.46;mix-blend-mode:screen;pointer-events:none}
.vehicle-fog-field::before{content:"";position:absolute;inset:-60vh -60vw;background:url('lounge-fog-v192.png') 0 0/var(--fog-tile-width,84vw) var(--fog-tile-height,38vh) repeat;transform:translate3d(var(--fog-x,0vw),var(--fog-y,0vh),0);will-change:transform}
.vehicle-fog-field--middle{opacity:.22;mask-image:radial-gradient(ellipse 64% 70% at var(--fog-bank-x,40%) 36%,#000 10%,#0006 62%,transparent 100%);-webkit-mask-image:radial-gradient(ellipse 64% 70% at var(--fog-bank-x,40%) 36%,#000 10%,#0006 62%,transparent 100%)}
.vehicle-fog-field--near{opacity:.38;mask-image:radial-gradient(ellipse 36% 64% at var(--fog-bank-x,50%) var(--fog-bank-y,60%),#000 8%,#0009 44%,transparent 100%);-webkit-mask-image:radial-gradient(ellipse 36% 64% at var(--fog-bank-x,50%) var(--fog-bank-y,60%),#000 8%,#0009 44%,transparent 100%)}
.vehicle-fog-field--passing{opacity:.27;mask-image:radial-gradient(ellipse 28% 60% at var(--fog-bank-x,85%) var(--fog-bank-y,35%),#000 8%,#0008 46%,transparent 100%);-webkit-mask-image:radial-gradient(ellipse 28% 60% at var(--fog-bank-x,85%) var(--fog-bank-y,35%),#000 8%,#0008 46%,transparent 100%)}
.vehicle-composition--single .vehicle-contact-shadow--fitted{inset:0;height:100%;border-radius:0;background-color:transparent;background-size:100% 100%;background-repeat:no-repeat;filter:none;transform:none;opacity:1}
.vehicle-contact-shadow--fitted::before,.vehicle-contact-shadow--fitted::after{display:none}
@media(prefers-reduced-motion:reduce){.vehicle-fog-field::before{will-change:auto}.vehicle-paint-reveal .vehicle-render,.vehicle-paint-reveal .vehicle-floor-reflection,.vehicle-paint-outgoing .vehicle-render,.vehicle-paint-outgoing .vehicle-floor-reflection{animation:none}}
