HTML
<div class="bga-09">
<div class="bga-09__scene">
<div class="bga-09__column"><span>ハ</span>ミヒーウシナモニサワキセネ01チツ</div>
<div class="bga-09__column"><span>ア</span>カタレニソネホオラ10リワセチクコ</div>
<div class="bga-09__column"><span>ネ</span>セチク01ワキナモニサレヒーウ</div>
<div class="bga-09__column"><span>ラ</span>10リワセチクタレニソネホオカ</div>
<div class="bga-09__column"><span>シ</span>ナモニサワキネチツ01ハミヒー</div>
<div class="bga-09__column"><span>タ</span>レニソネホオラ10リアカワセチ</div>
<div class="bga-09__column"><span>ミ</span>ヒーウシナ01ニサワキセネチツ</div>
<div class="bga-09__column"><span>ソ</span>ネホオラ10リワタレニセチクコ</div>
<div class="bga-09__column"><span>ワ</span>キセネチ01ツハミヒーウシナモ</div>
<div class="bga-09__column"><span>ホ</span>オラ10リワセタレニソネチクコ</div>
<div class="bga-09__column"><span>ニ</span>サワキセネチツ01ハミヒーウシ</div>
<div class="bga-09__column"><span>リ</span>ワセチクタ10レニソネホオラカ</div>
<div class="bga-09__column"><span>ナ</span>モニサワキ01セネチツハミヒー</div>
<div class="bga-09__column"><span>レ</span>ニソネホ10オラリワセチクタコ</div>
<div class="bga-09__column"><span>ヒ</span>ーウシナモ01ニサワキセネチツ</div>
<div class="bga-09__column"><span>オ</span>ラリワセチ10クタレニソネホカ</div>
</div>
</div> CSS
.bga-09, .bga-09 *, .bga-09 *::before, .bga-09 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.bga-09 {
min-height: 460px;
display: grid;
place-items: stretch;
}
.bga-09__scene {
width: 100%;
min-height: 460px;
position: relative;
overflow: hidden;
background: #000;
font-family: "Courier New", monospace;
}
.bga-09__column {
position: absolute;
top: 0;
width: 22px;
color: #00ff66;
font-size: 18px;
line-height: 22px;
text-align: center;
white-space: pre;
text-shadow: 0 0 6px #00ff66;
writing-mode: vertical-rl;
text-orientation: upright;
animation: bga-09-fall linear infinite;
/* gradient mask so the trail fades upward */
-webkit-mask-image: linear-gradient(to bottom, transparent, #000 25%, #000 75%, transparent);
mask-image: linear-gradient(to bottom, transparent, #000 25%, #000 75%, transparent);
}
/* Each column gets its own position, speed, and delay */
.bga-09__column:nth-child(1) { left: 2%; animation-duration: 6s; animation-delay: 0s; opacity: 0.9; }
.bga-09__column:nth-child(2) { left: 8%; animation-duration: 9s; animation-delay: 1.5s; opacity: 0.7; }
.bga-09__column:nth-child(3) { left: 14%; animation-duration: 5s; animation-delay: 0.5s; }
.bga-09__column:nth-child(4) { left: 20%; animation-duration: 11s; animation-delay: 2s; opacity: 0.8; }
.bga-09__column:nth-child(5) { left: 26%; animation-duration: 7s; animation-delay: 3s; }
.bga-09__column:nth-child(6) { left: 32%; animation-duration: 8s; animation-delay: 0.2s; opacity: 0.6; }
.bga-09__column:nth-child(7) { left: 38%; animation-duration: 6.5s;animation-delay: 1s; }
.bga-09__column:nth-child(8) { left: 44%; animation-duration: 10s; animation-delay: 2.5s; opacity: 0.85; }
.bga-09__column:nth-child(9) { left: 50%; animation-duration: 5.5s;animation-delay: 0.8s; }
.bga-09__column:nth-child(10) { left: 56%; animation-duration: 9.5s;animation-delay: 3.5s; opacity: 0.7; }
.bga-09__column:nth-child(11) { left: 62%; animation-duration: 7.5s;animation-delay: 1.2s; }
.bga-09__column:nth-child(12) { left: 68%; animation-duration: 6s; animation-delay: 2.8s; opacity: 0.9; }
.bga-09__column:nth-child(13) { left: 74%; animation-duration: 11s; animation-delay: 0.4s; }
.bga-09__column:nth-child(14) { left: 80%; animation-duration: 8.5s;animation-delay: 1.8s; opacity: 0.65; }
.bga-09__column:nth-child(15) { left: 86%; animation-duration: 5s; animation-delay: 3.2s; }
.bga-09__column:nth-child(16) { left: 92%; animation-duration: 9s; animation-delay: 0.6s; opacity: 0.8; }
/* brighten the leading glyph */
.bga-09__column span { color: #ccffcc; text-shadow: 0 0 12px #aaffaa; }
@keyframes bga-09-fall {
0% { transform: translateY(-100%); }
100% { transform: translateY(100vh); }
}
@media (prefers-reduced-motion: reduce) {
.bga-09__column {
animation: none !important;
}
}