溶接ビード区切り線Weld Bead Divider
/* 3幕構成: トーチが左から走る → 赤熱したビードが残る(火花が散る) →
端で potn と潰れて弾み、ビードが冷えて鋼色の継ぎ目になる */
.cg-dv-weld {
position: relative;
width: 300px;
height: 48px;
}
/* 未溶接の合わせ目(下地。常時見える) */
.cg-dv-weld::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 50%;
height: 4px;
margin-top: -2px;
border-radius: 2px;
background: repeating-linear-gradient(90deg, #B7B0A2 0 9px, #8B857A 9px 12px);
}
/* 溶接し終えたビード本体。左から姿を現す */
.cg-dv-weld-bead {
position: absolute;
left: 0;
right: 0;
top: 50%;
height: 9px;
margin-top: -5px;
border-radius: 5px;
background:
repeating-linear-gradient(112deg, rgba(255, 255, 255, .38) 0 3px, rgba(27, 26, 23, .12) 3px 7px),
linear-gradient(#A29A8C, #5E594F);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .35), 0 1px 3px -1px rgba(27, 26, 23, .5);
clip-path: inset(0 100% 0 0 round 5px);
animation: cg-dv-weld-grow 5s linear infinite;
}
/* 高温レイヤー: 溶接直後の右側ほど熱く、最後に冷めて消える */
.cg-dv-weld-bead::after {
content: "";
position: absolute;
inset: -1px;
border-radius: 6px;
background: linear-gradient(90deg, rgba(232, 89, 12, 0) 0%, rgba(232, 89, 12, .8) 62%, #F2B707 100%);
box-shadow: 0 0 12px rgba(232, 89, 12, .55);
animation: cg-dv-weld-cool 5s ease-in-out infinite;
}
/* トーチ */
.cg-dv-weld-torch {
position: absolute;
left: 0;
top: 50%;
width: 15px;
height: 26px;
margin-top: -25px;
border-radius: 4px 4px 2px 2px;
background: linear-gradient(#5A554D, #26231F);
box-shadow: 0 4px 8px -4px rgba(27, 26, 23, .6);
animation: cg-dv-weld-move 5s linear infinite;
}
/* ノズル先端のアーク光。細かい明滅 + 溶接中だけ点灯 */
.cg-dv-weld-torch::after {
content: "";
position: absolute;
left: 50%;
top: 20px;
width: 24px;
height: 24px;
margin-left: -12px;
border-radius: 50%;
background: radial-gradient(circle, #FFF7D6 0%, #F2B707 32%, rgba(232, 89, 12, .5) 58%, transparent 72%);
animation: cg-dv-weld-arc .24s steps(2, end) infinite, cg-dv-weld-arclife 5s linear infinite;
}
/* 火花の発生点。トーチと同じ軌道を進む */
.cg-dv-weld-spark {
position: absolute;
left: 5px;
top: 50%;
width: 4px;
height: 4px;
margin-top: -2px;
animation: cg-dv-weld-move 5s linear infinite, cg-dv-weld-sparklife 5s linear infinite;
}
.cg-dv-weld-spark::before,
.cg-dv-weld-spark::after {
content: "";
position: absolute;
inset: 0;
border-radius: 50%;
background: #F2B707;
box-shadow: 0 0 6px rgba(242, 183, 7, .9);
animation: cg-dv-weld-fly-a .52s ease-out infinite;
}
.cg-dv-weld-spark::after {
animation: cg-dv-weld-fly-b .74s ease-out .18s infinite;
}
@keyframes cg-dv-weld-move {
0%, 6% { transform: translateX(0) scaleY(1); animation-timing-function: cubic-bezier(.42, 0, .58, 1); }
58% { transform: translateX(262px) scaleY(1); animation-timing-function: cubic-bezier(.34, 1.56, .64, 1); }
65% { transform: translateX(276px) scaleY(.84); }
72% { transform: translateX(268px) scaleY(1.09); }
79%, 86% { transform: translateX(272px) scaleY(1); }
94%, 100% { transform: translateX(0) scaleY(1); }
}
@keyframes cg-dv-weld-grow {
0%, 6% { clip-path: inset(0 100% 0 0 round 5px); }
58% { clip-path: inset(0 7% 0 0 round 5px); }
72%, 86% { clip-path: inset(0 0 0 0 round 5px); }
94%, 100% { clip-path: inset(0 100% 0 0 round 5px); }
}
@keyframes cg-dv-weld-cool {
0%, 6% { opacity: 0; }
18% { opacity: .95; }
58% { opacity: 1; }
74% { opacity: .62; }
88%, 100% { opacity: 0; }
}
@keyframes cg-dv-weld-arc {
0% { transform: scale(1); }
50% { transform: scale(.7); }
100% { transform: scale(1.08); }
}
@keyframes cg-dv-weld-arclife {
0%, 5% { opacity: 0; }
9%, 58% { opacity: 1; }
66% { opacity: .3; }
72%, 100% { opacity: 0; }
}
@keyframes cg-dv-weld-sparklife {
0%, 6% { opacity: 0; }
11%, 56% { opacity: 1; }
66% { opacity: .55; }
73%, 100% { opacity: 0; }
}
@keyframes cg-dv-weld-fly-a {
0% { transform: translate(0, 0) scale(1); opacity: 1; }
58% { transform: translate(13px, -13px) scale(.72); opacity: .8; }
100% { transform: translate(23px, 5px) scale(.18); opacity: 0; }
}
@keyframes cg-dv-weld-fly-b {
0% { transform: translate(0, 0) scale(.9); opacity: 1; }
55% { transform: translate(-10px, -15px) scale(.6); opacity: .7; }
100% { transform: translate(-18px, 4px) scale(.14); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
/* 静止形は「溶接し終えて冷えた継ぎ目」。区切り線としてそのまま意味が通る */
.cg-dv-weld-bead,
.cg-dv-weld-bead::after,
.cg-dv-weld-torch,
.cg-dv-weld-torch::after,
.cg-dv-weld-spark,
.cg-dv-weld-spark::before,
.cg-dv-weld-spark::after { animation: none; }
.cg-dv-weld-bead { clip-path: inset(0 0 0 0 round 5px); }
.cg-dv-weld-bead::after { opacity: 0; }
.cg-dv-weld-torch,
.cg-dv-weld-spark { display: none; }
}
<div class="cg-dv-weld" role="separator" aria-label="区切り線">
<span class="cg-dv-weld-bead"></span>
<span class="cg-dv-weld-spark"></span>
<span class="cg-dv-weld-torch"></span>
</div>