貨物リフト昇降Cargo Lift
.cg-ld-lift {
position: relative;
width: 66px;
height: 92px;
border-left: 3px solid #D6D1C4;
border-right: 3px solid #D6D1C4;
border-radius: 5px;
}
/* 吊りワイヤー。カゴの高さに合わせて伸び縮みする */
.cg-ld-lift .cable {
position: absolute;
top: 0;
left: 50%;
width: 2px;
height: 58px;
margin-left: -1px;
background: #9C958A;
transform-origin: 50% 0;
animation: cg-ld-lift-cable 2.4s cubic-bezier(.34, 1.56, .64, 1) infinite;
}
/* 荷カゴ。発進前に沈み、到着で潰れて跳ね返る */
.cg-ld-lift .car {
position: absolute;
left: 10px;
right: 10px;
top: 58px;
height: 26px;
border-radius: 4px;
background: linear-gradient(#EE6A1E, #C34A08);
box-shadow: 0 7px 12px rgba(27, 26, 23, .26);
transform-origin: 50% 100%;
animation: cg-ld-lift-car 2.4s cubic-bezier(.34, 1.56, .64, 1) infinite;
}
.cg-ld-lift .car::before {
content: "";
position: absolute;
inset: 6px 7px;
border: 2px solid rgba(255, 255, 255, .6);
border-radius: 2px;
}
/* 階数ランプ。カゴの通過に合わせて下から順に点く */
.cg-ld-lift .floors {
position: absolute;
top: 4px;
right: -15px;
display: grid;
gap: 26px;
}
.cg-ld-lift .floors b {
display: block;
width: 7px;
height: 7px;
border-radius: 50%;
background: #D6D1C4;
animation: cg-ld-lift-lamp 2.4s cubic-bezier(.34, 1.56, .64, 1) infinite;
}
.cg-ld-lift .floors b:nth-child(1) { animation-delay: 1.02s; }
.cg-ld-lift .floors b:nth-child(2) { animation-delay: .54s; }
.cg-ld-lift .floors b:nth-child(3) { animation-delay: 0s; }
@keyframes cg-ld-lift-car {
0% { transform: translateY(0) scale(1, 1); }
8% { transform: translateY(3px) scale(1.07, .9); }
44% { transform: translateY(-52px) scale(1, 1); }
50% { transform: translateY(-52px) scale(1.09, .87); }
57% { transform: translateY(-55px) scale(.96, 1.06); }
64% { transform: translateY(-52px) scale(1, 1); }
90% { transform: translateY(0) scale(1, 1); }
95% { transform: translateY(0) scale(1.06, .92); }
100% { transform: translateY(0) scale(1, 1); }
}
@keyframes cg-ld-lift-cable {
0% { transform: scaleY(1); }
8% { transform: scaleY(1.05); }
44%, 64% { transform: scaleY(.1); }
90%, 100% { transform: scaleY(1); }
}
@keyframes cg-ld-lift-lamp {
0%, 6% { background: #D6D1C4; box-shadow: 0 0 0 0 rgba(232, 89, 12, 0); transform: scale(1); }
12% { background: #E8590C; box-shadow: 0 0 0 4px rgba(232, 89, 12, .2); transform: scale(1.3); }
26% { background: #E8590C; box-shadow: 0 0 0 2px rgba(232, 89, 12, .12); transform: scale(1.05); }
40%, 100% { background: #D6D1C4; box-shadow: 0 0 0 0 rgba(232, 89, 12, 0); transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
.cg-ld-lift .cable, .cg-ld-lift .car, .cg-ld-lift .floors b { animation: none; }
.cg-ld-lift .cable { transform: scaleY(.1); }
.cg-ld-lift .car { transform: translateY(-52px); }
.cg-ld-lift .floors b:nth-child(1) { background: #E8590C; box-shadow: 0 0 0 3px rgba(232, 89, 12, .18); }
}
<div class="cg-ld-lift" role="status" aria-label="読み込み中"><i class="cable" aria-hidden="true"></i><i class="car" aria-hidden="true"></i><span class="floors" aria-hidden="true"><b></b><b></b><b></b></span></div>