シュワ〜Fizz Up
/* 物語: 泡が絶えず立ちのぼる炭酸の中から文字が浮上 → 水面でふわっと膨らんで軽く戻る(ばね) →
遅れて光沢が抜ける → 沈んでループ */
.cg-tp-shuwa {
position: relative;
display: inline-block;
overflow: hidden;
margin: 0;
padding: 26px 32px 22px;
border-radius: 14px;
background: linear-gradient(170deg, #2C93C4, #12557B);
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .2);
}
/* ①②泡の層を2枚。粒径と速度を変えて奥行きを出す。上端でマスクして消える */
.cg-tp-shuwa-fizz {
position: absolute;
inset: 0;
pointer-events: none;
-webkit-mask-image: linear-gradient(to top, #000 8%, rgba(0, 0, 0, 0) 88%);
mask-image: linear-gradient(to top, #000 8%, rgba(0, 0, 0, 0) 88%);
}
.cg-tp-shuwa-fizz::before,
.cg-tp-shuwa-fizz::after {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 200%;
}
.cg-tp-shuwa-fizz::before {
background-image:
radial-gradient(circle, rgba(255, 255, 255, .95) 40%, rgba(255, 255, 255, 0) 45%),
radial-gradient(circle, rgba(214, 243, 255, .8) 40%, rgba(214, 243, 255, 0) 45%);
background-size: 24px 32px, 37px 45px;
background-position: 4px 0, 16px 11px;
animation: cg-tp-shuwa-rise 2.8s linear infinite;
}
.cg-tp-shuwa-fizz::after {
background-image:
radial-gradient(circle, rgba(255, 255, 255, .7) 38%, rgba(255, 255, 255, 0) 43%),
radial-gradient(circle, rgba(255, 255, 255, .45) 38%, rgba(255, 255, 255, 0) 43%);
background-size: 45px 57px, 63px 74px;
background-position: 21px 7px, 41px 29px;
animation: cg-tp-shuwa-rise 4.6s linear infinite;
}
/* ③文字。沈んだ位置から浮上し、水面で潰れと伸びを起こしてから静定する */
.cg-tp-shuwa-txt {
position: relative;
display: inline-block;
font-size: 36px;
font-weight: 900;
color: #fff;
-webkit-text-stroke: 6px #0B3550;
paint-order: stroke fill;
text-shadow: 3px 4px 0 rgba(11, 53, 80, .4);
transform: translateY(20px) scale(.84, 1.1);
opacity: 0;
animation: cg-tp-shuwa-in 3.6s cubic-bezier(.34, 1.56, .64, 1) infinite;
}
/* ④副次レイヤー: 静定した後に光沢が一度だけ抜ける */
.cg-tp-shuwa-txt::after {
content: "";
position: absolute;
left: -14%;
top: -8%;
width: 32%;
height: 116%;
background: linear-gradient(100deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, .85), rgba(255, 255, 255, 0));
filter: blur(3px);
opacity: 0;
animation: cg-tp-shuwa-sheen 3.6s ease-out infinite;
}
@keyframes cg-tp-shuwa-rise {
0% { transform: translateY(0); }
100% { transform: translateY(-50%); }
}
@keyframes cg-tp-shuwa-in {
0% { transform: translateY(20px) scale(.84, 1.1); opacity: 0; }
11% { transform: translateY(3px) scale(1.08, .93); opacity: 1; }
18% { transform: translateY(-5px) scale(.96, 1.06); }
25% { transform: translateY(0) scale(1.03, .98); }
33%, 78% { transform: translateY(0) scale(1, 1); opacity: 1; }
87% { transform: translateY(-3px) scale(1.02, .97); opacity: .75; }
96%, 100% { transform: translateY(16px) scale(.86, 1.08); opacity: 0; }
}
@keyframes cg-tp-shuwa-sheen {
0%, 34% { transform: translateX(0) skewX(-12deg); opacity: 0; }
42% { opacity: .85; }
58% { opacity: .5; }
70%, 100% { transform: translateX(360%) skewX(-12deg); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
/* 静止形: 泡が静止した炭酸の中に文字が立っている一枚絵。テロップとして読める */
.cg-tp-shuwa-fizz::before,
.cg-tp-shuwa-fizz::after,
.cg-tp-shuwa-txt,
.cg-tp-shuwa-txt::after { animation: none; }
.cg-tp-shuwa-fizz::before { transform: translateY(-18%); }
.cg-tp-shuwa-fizz::after { transform: translateY(-32%); }
.cg-tp-shuwa-txt { transform: none; opacity: 1; }
.cg-tp-shuwa-txt::after { opacity: 0; }
}
<p class="cg-tp-shuwa"><i class="cg-tp-shuwa-fizz" aria-hidden="true"></i><span class="cg-tp-shuwa-txt">シュワ〜</span></p>