/* Every stroke belongs to a model, so artwork never intercepts the game controls. */
.construction-art,.construction-board-art,.construction-world{display:block;width:100%;height:auto;overflow:visible;pointer-events:none}
.construction-art{aspect-ratio:1}
.construction-board-art{position:absolute;inset:0;width:100%;height:100%;z-index:0;overflow:hidden}
.construction-world{overflow:hidden;isolation:isolate}
.model-assembled{filter:drop-shadow(0 3px 4px #03132655)}
.construction-art.is-complete .model-beacon-halo,.construction-board-art.is-complete .model-beacon-halo,.construction-world.is-complete .construct-world-beacon{animation:construct-beacon 3.2s ease-in-out infinite}
.construction-art.is-blueprint,.construction-world .is-blueprint{filter:none}
.construction-world.is-compact .construct-project-name{font-size:10px}
.construction-world .construct-project.is-assembled .model-body{filter:drop-shadow(0 2px 3px #04122344)}
.construction-art.is-compact .model-beacon-halo{animation:none}
.construction-board-art .model-exhaust{opacity:.84}
@keyframes construct-beacon{0%,100%{opacity:.45}50%{opacity:1}}
@media(prefers-reduced-motion:reduce){.construction-art *,.construction-board-art *,.construction-world *{animation:none!important;transition:none!important}}
@media(prefers-contrast:more){.model-blueprint{opacity:.66!important}.construct-project-name{fill:#f1fbff!important}.model-assembled{filter:none}.construction-world .construct-project-number circle{stroke:#f1fbff;stroke-width:1.5}}
.high-contrast .model-blueprint{opacity:.66!important}
.high-contrast .construct-project-name{fill:#f1fbff!important}
/* The model and workbench share one physical component drawing. */
.missing-piece-model{display:block;width:100%;height:auto;aspect-ratio:1;overflow:visible;pointer-events:none}
.missing-piece-board{isolation:isolate}
.missing-piece-board .piece-blueprint{filter:saturate(.4)}
.missing-piece-board .piece-assembled{filter:drop-shadow(0 2px 2px #05182744)}
.model-missing-slot{filter:drop-shadow(0 0 6px #f8ba7360)}
.model-slot-outline{animation:piece-slot-pulse 3.2s ease-in-out infinite}
.missing-piece-model.is-complete .model-missing-slot{display:none}
.missing-piece-model.animate-fit .model-fitting-piece{transform-box:fill-box;transform-origin:center;animation:piece-fit .8s cubic-bezier(.2,.7,.3,1) both}
@keyframes piece-slot-pulse{0%,100%{opacity:.65}50%{opacity:1}}
@keyframes piece-fit{0%{opacity:.3;filter:drop-shadow(0 0 12px #b1f4ed);translate:0 -18px}70%{opacity:1;translate:0 2px}100%{translate:0 0;filter:none}}
@media(prefers-reduced-motion:reduce){.missing-piece-model *,.missing-piece-board *{animation:none!important;transition:none!important}}
@media(prefers-contrast:more){.missing-piece-board .piece-blueprint{opacity:.5!important}.model-slot-outline{opacity:1!important;animation:none!important}}
.high-contrast .missing-piece-board .piece-blueprint{opacity:.5!important}
.high-contrast .model-slot-outline{opacity:1!important;animation:none!important}
