<div class="wd-blob"></div>
<style>
.wd-blob{
width:120px; height:120px;
background:linear-gradient(135deg,#FF5CA0,#7B5CFF);
animation:wd-blob-go 7s ease-in-out infinite;
}
/* border-radiusの8値morph */
@keyframes wd-blob-go{
0%,100%{ border-radius:60% 40% 55% 45% / 55% 60% 40% 45%; }
25%{ border-radius:45% 55% 40% 60% / 60% 45% 55% 40%; }
50%{ border-radius:55% 45% 60% 40% / 40% 55% 45% 60%; }
75%{ border-radius:40% 60% 45% 55% / 55% 40% 60% 45%; }
}
</style>
<!-- border-radiusはスラッシュ区切りで縦横別指定できる -->
<div class="wd-blob-face"><i></i><i></i></div>
<style>
.wd-blob-face{
position:relative; width:120px; height:120px;
display:flex; gap:16px; align-items:center; justify-content:center;
background:linear-gradient(135deg,#20B486,#A3E635);
animation:wd-bf-morph 6s ease-in-out infinite,
wd-bf-bob 3s ease-in-out infinite;
}
.wd-blob-face i{
width:14px; height:14px; border-radius:50%;
background:#191F2E;
animation:wd-bf-blink 3.4s infinite;
}
@keyframes wd-bf-morph{
0%,100%{ border-radius:58% 42% 50% 50% / 50% 58% 42% 50%; }
50%{ border-radius:45% 55% 58% 42% / 55% 45% 50% 50%; }
}
@keyframes wd-bf-bob{
0%,100%{ translate:0 0; } 50%{ translate:0 -8px; }
}
@keyframes wd-bf-blink{
0%,90%,100%{ transform:scaleY(1); }
95%{ transform:scaleY(.08); }
}
</style>
<!-- まばたきはscaleYを一瞬潰すだけ -->
<div class="wd-lava"><i></i><i></i><i></i></div>
<style>
.wd-lava{
position:relative; width:110px; height:200px;
border-radius:55px; overflow:hidden;
background:linear-gradient(#2a1030,#0b1030);
border:3px solid #191F2E;
/* ★ blur+contrastで玉同士がくっつく(グーイー効果) */
filter:contrast(1.6);
}
.wd-lava i{
position:absolute; left:50%; border-radius:50%;
background:#FF5CA0;
filter:blur(6px);
}
.wd-lava i:nth-child(1){
width:44px; height:44px; margin-left:-22px;
animation:wd-lava-a 6s ease-in-out infinite;
}
.wd-lava i:nth-child(2){
width:30px; height:30px; margin-left:-28px;
background:#FF7AB5;
animation:wd-lava-b 7.5s ease-in-out infinite 1s;
}
.wd-lava i:nth-child(3){
width:22px; height:22px; margin-left:2px;
background:#FFA0CB;
animation:wd-lava-c 5.4s ease-in-out infinite .4s;
}
@keyframes wd-lava-a{
0%,100%{ top:75%; } 50%{ top:8%; }
}
@keyframes wd-lava-b{
0%,100%{ top:70%; } 50%{ top:20%; }
}
@keyframes wd-lava-c{
0%,100%{ top:65%; } 50%{ top:12%; }
}
</style>
<!-- blurした玉をcontrastで締めると液体のように融合する -->
<div class="wd-gooey"><b></b><i></i><i></i></div>
<style>
.wd-gooey{
position:relative;
display:grid; place-items:center;
width:180px; height:110px;
background:#F7F5EF;
filter:contrast(14) blur(0px);
}
.wd-gooey b,
.wd-gooey i{
position:absolute; width:34px; height:34px;
border-radius:50%; background:#191F2E;
filter:blur(7px);
}
.wd-gooey i:nth-of-type(1){ animation:wd-goo-a 2.4s ease-in-out infinite; }
.wd-gooey i:nth-of-type(2){ animation:wd-goo-b 2.4s ease-in-out infinite; }
@keyframes wd-goo-a{
0%,100%{ translate:0 0; } 50%{ translate:-52px 0; }
}
@keyframes wd-goo-b{
0%,100%{ translate:0 0; } 50%{ translate:52px 0; }
}
</style>
<!-- 親のcontrastを強くかけるのが肝。背景色は単色必須 -->
<div class="wd-wave"><i></i><i></i><b>SEA</b></div>
<style>
.wd-wave{
position:relative; width:210px; height:130px;
border-radius:14px; overflow:hidden;
background:linear-gradient(#5EE7FF,#3A46E8);
}
.wd-wave i{
position:absolute; left:-50%; width:200%; height:200%;
top:52%;
border-radius:42%;
background:rgba(11,16,48,.5);
animation:wd-wave-spin 7s linear infinite;
}
.wd-wave i:nth-child(2){
border-radius:46%;
background:rgba(11,16,48,.35);
animation-duration:9.5s;
}
.wd-wave b{
position:absolute; inset:0;
display:grid; place-items:center;
color:#fff; font-family:"Space Grotesk",sans-serif;
letter-spacing:.25em;
}
/* 角丸の巨大な円を回すと縁が波に見える */
@keyframes wd-wave-spin{ to{ transform:rotate(360deg); } }
</style>
<!-- 「回る角丸長方形の縁=波」という有名トリック -->
<div class="wd-border-spin">BORDER</div>
<style>
.wd-border-spin{
position:relative; z-index:0; /* ★ 親にz-index:0が必須 */
display:grid; place-items:center;
width:170px; height:100px;
border-radius:14px;
background:#191F2E; color:#fff;
font-family:"Space Grotesk",sans-serif; font-weight:700;
overflow:hidden;
}
.wd-border-spin::before{
content:""; position:absolute; z-index:-2;
inset:-60%;
background:conic-gradient(#3A46E8, #FF5CA0, #FFCF3F, #3A46E8);
animation:wd-bs-spin 3.5s linear infinite;
}
.wd-border-spin::after{
content:""; position:absolute; z-index:-1;
inset:3px; border-radius:11px;
background:#191F2E;
}
@keyframes wd-bs-spin{ to{ transform:rotate(360deg); } }
</style>
<!-- ::beforeを回し::afterで内側を塗り潰す3層構造 -->
<div class="wd-border-dash">DASHED</div>
<style>
.wd-border-dash{
display:grid; place-items:center;
width:170px; height:100px;
font-family:"Space Grotesk",sans-serif; font-weight:700;
border-radius:14px;
background:
linear-gradient(#F7F5EF,#F7F5EF) padding-box,
repeating-conic-gradient(#191F2E 0 12deg, transparent 12deg 24deg) border-box;
border:3px dashed transparent;
animation:wd-bd-turn 14s linear infinite;
}
@keyframes wd-bd-turn{
to{ background-position:0 0, 100% 100%; }
}
/* シンプル版:conicを回す */
.wd-border-dash{
position:relative; z-index:0; overflow:hidden; border:none;
}
.wd-border-dash::before{
content:""; position:absolute; z-index:-2; inset:-60%;
background:repeating-conic-gradient(#191F2E 0 9deg, transparent 9deg 18deg);
animation:wd-bd-spin 20s linear infinite;
}
.wd-border-dash::after{
content:""; position:absolute; z-index:-1;
inset:3.5px; border-radius:11px; background:#F7F5EF;
}
@keyframes wd-bd-spin{ to{ transform:rotate(360deg); } }
</style>
<!-- repeating-conicの回転=破線が周回して見える -->
<div class="wd-glow-pulse">GLOW</div>
<style>
.wd-glow-pulse{
display:grid; place-items:center;
width:160px; height:100px;
border-radius:14px;
background:#12162a;
border:1.5px solid rgba(94,231,255,.5);
color:#5EE7FF; letter-spacing:.2em;
font-family:"Space Grotesk",sans-serif;
animation:wd-glow-go 2.6s ease-in-out infinite;
}
@keyframes wd-glow-go{
0%,100%{
box-shadow:0 0 8px rgba(94,231,255,.25),
inset 0 0 8px rgba(94,231,255,.1);
}
50%{
box-shadow:0 0 28px rgba(94,231,255,.7),
inset 0 0 16px rgba(94,231,255,.25);
}
}
</style>
<div class="wd-holo"><b>HOLO</b><span>★ RARE ★</span></div>
<style>
.wd-holo{
position:relative; overflow:hidden;
display:grid; place-content:center; gap:4px;
width:150px; height:110px; text-align:center;
border-radius:14px; border:2px solid rgba(255,255,255,.5);
background:linear-gradient(135deg,#1a1f3d,#3d1a3d);
color:#fff; font-family:"Space Grotesk",sans-serif;
transition:transform .3s;
}
.wd-holo b{ font-size:21px; }
.wd-holo span{ font-size:9px; letter-spacing:.3em; opacity:.8; }
.wd-holo::before{
content:""; position:absolute; inset:-40%;
background:linear-gradient(115deg,
transparent 25%, rgba(255,0,128,.35) 40%,
rgba(0,255,255,.35) 50%, rgba(255,255,0,.35) 60%,
transparent 75%);
animation:wd-holo-go 3.2s ease-in-out infinite;
}
.wd-holo:hover{ transform:rotate(-2deg) scale(1.05); }
@keyframes wd-holo-go{
0%{ transform:translateX(-45%) rotate(10deg); }
50%{ transform:translateX(45%) rotate(10deg); }
100%{ transform:translateX(-45%) rotate(10deg); }
}
</style>
<!-- トレカ風。虹色の帯を斜めに往復させる -->
<div class="wd-neon-sign">CAF<i>E</i></div>
<style>
.wd-neon-sign{
padding:16px 30px;
border:3px solid #FF5CA0; border-radius:14px;
font-family:"Space Grotesk",sans-serif;
font-size:33px; font-weight:700; letter-spacing:.1em;
color:#FFE9F4;
text-shadow:0 0 7px #fff, 0 0 18px #FF5CA0, 0 0 42px #FF5CA0;
box-shadow:0 0 18px rgba(255,92,160,.5),
inset 0 0 14px rgba(255,92,160,.35);
}
/* 1文字だけ接触不良 */
.wd-neon-sign i{
font-style:normal;
animation:wd-neon-bad 4s infinite;
}
@keyframes wd-neon-bad{
0%,18%,22%,61%,65%,100%{ opacity:1; }
19%,63%{ opacity:.25; text-shadow:none; }
20%,64%{ opacity:.9; }
21%{ opacity:.3; }
}
</style>
<!-- 全部光らせず1文字壊すのがリアル -->
<div class="wd-aurora"><b>AURORA</b></div>
<style>
.wd-aurora{
position:relative; overflow:hidden;
display:grid; place-items:center;
width:230px; height:130px; border-radius:14px;
background:#0b1030;
}
.wd-aurora::before,
.wd-aurora::after{
content:""; position:absolute; inset:-50%;
background:
radial-gradient(ellipse 40% 55% at 30% 40%, rgba(32,180,134,.55), transparent 65%),
radial-gradient(ellipse 45% 60% at 70% 60%, rgba(123,92,255,.5), transparent 65%);
filter:blur(14px);
animation:wd-aur-a 9s ease-in-out infinite alternate;
}
.wd-aurora::after{
background:
radial-gradient(ellipse 38% 50% at 60% 30%, rgba(94,231,255,.4), transparent 65%);
animation:wd-aur-b 7s ease-in-out infinite alternate;
}
.wd-aurora b{
position:relative; color:#fff;
font-family:"Space Grotesk",sans-serif; letter-spacing:.3em;
}
@keyframes wd-aur-a{
to{ transform:rotate(30deg) scale(1.25) translateX(8%); }
}
@keyframes wd-aur-b{
from{ transform:rotate(10deg); }
to{ transform:rotate(-25deg) scale(1.3) translateY(-8%); }
}
</style>
<!-- ぼかした楕円グラデを複数ゆっくり回すだけ -->
<div class="wd-mesh"><b>MESH</b></div>
<style>
.wd-mesh{
display:grid; place-items:center;
width:230px; height:130px; border-radius:14px;
color:#fff; font-family:"Space Grotesk",sans-serif; letter-spacing:.25em;
background:
radial-gradient(at 20% 30%, #FF5CA0 0, transparent 55%),
radial-gradient(at 80% 20%, #FFCF3F 0, transparent 55%),
radial-gradient(at 70% 85%, #5EE7FF 0, transparent 55%),
radial-gradient(at 15% 80%, #7B5CFF 0, transparent 55%),
#3A46E8;
background-size:170% 170%;
animation:wd-mesh-go 9s ease-in-out infinite alternate;
}
@keyframes wd-mesh-go{
from{ background-position:0% 0%; }
to{ background-position:100% 100%; }
}
</style>
<!-- radial-gradientを重ねてpositionを揺らす簡易メッシュ -->
<div class="wd-stripes"><b>SALE</b></div>
<style>
.wd-stripes{
display:grid; place-items:center;
width:220px; height:110px; border-radius:14px;
border:2.5px solid #191F2E; overflow:hidden;
background:linear-gradient(45deg,
#FFCF3F 25%, #FFD968 25% 50%,
#FFCF3F 50% 75%, #FFD968 75%);
background-size:44px 44px;
animation:wd-stripes-go 1s linear infinite;
}
.wd-stripes b{
font-family:"Space Grotesk",sans-serif;
font-size:29px; color:#191F2E;
text-shadow:2px 2px 0 #fff;
}
@keyframes wd-stripes-go{
to{ background-position:44px 0; }
}
</style>
<!-- 45度縞は正方タイル(44px)+タイル1枚分の移動で完全ループ -->
<div class="wd-checker"><b>いち松</b></div>
<style>
.wd-checker{
display:grid; place-items:center;
width:220px; height:110px; border-radius:14px;
border:2.5px solid #191F2E;
background:
repeating-conic-gradient(#191F2E 0 25%, #F7F5EF 0 50%);
background-size:36px 36px;
animation:wd-checker-go 2.4s linear infinite;
}
.wd-checker b{
padding:6px 16px; background:#FF5CA0; color:#fff;
border-radius:8px; font-weight:700;
border:2px solid #191F2E;
}
@keyframes wd-checker-go{
to{ background-position:36px 36px; }
}
</style>
<!-- 市松はrepeating-conic 1行で描ける -->
<div class="wd-grid-retro"><i class="sun"></i><i class="floor"></i></div>
<style>
.wd-grid-retro{
position:relative; overflow:hidden;
width:230px; height:140px; border-radius:14px;
background:linear-gradient(#1a0533 55%, #3d0a5c 55%);
}
.wd-grid-retro .sun{
position:absolute; left:50%; top:14%;
width:56px; height:56px; margin-left:-28px;
border-radius:50%;
background:linear-gradient(#FFCF3F, #FF5CA0);
box-shadow:0 0 24px rgba(255,92,160,.8);
}
.wd-grid-retro .floor{
position:absolute; left:-50%; right:-50%; top:55%; bottom:-40%;
background:
repeating-linear-gradient(90deg, rgba(94,231,255,.7) 0 1.5px, transparent 1.5px 26px),
repeating-linear-gradient(0deg, rgba(94,231,255,.7) 0 1.5px, transparent 1.5px 22px);
transform:perspective(90px) rotateX(50deg);
animation:wd-retro-go 1.4s linear infinite;
}
@keyframes wd-retro-go{
to{ background-position:0 22px, 0 22px; }
}
</style>
<!-- 80年代シンセウェーブ。perspective+rotateXで床を倒す -->
<div class="wd-snow"><i></i><i></i><b>❄ SNOW</b></div>
<style>
.wd-snow{
position:relative; overflow:hidden;
display:grid; place-items:center;
width:220px; height:140px; border-radius:14px;
background:linear-gradient(#1c2340,#39406b);
}
.wd-snow b{ color:#fff; letter-spacing:.2em; font-family:"Space Grotesk",sans-serif; }
/* 1つのドット+box-shadowの複製で雪片をばら撒く */
.wd-snow i{
position:absolute; top:0; left:0;
width:3px; height:3px; border-radius:50%;
box-shadow:165px -112px 0 0px rgba(255,255,255,.5),
72px -78px 0 0px rgba(255,255,255,.95),
190px -114px 0 1px rgba(255,255,255,.5),
141px -118px 0 1px rgba(255,255,255,.7),
10px -133px 0 0px rgba(255,255,255,.95),
61px -11px 0 1px rgba(255,255,255,.95),
145px -90px 0 1px rgba(255,255,255,.5),
181px -1px 0 0px rgba(255,255,255,.95),
116px -69px 0 0px rgba(255,255,255,.95),
180px -32px 0 0px rgba(255,255,255,.7),
41px -85px 0 0px rgba(255,255,255,.95),
25px -43px 0 0px rgba(255,255,255,.7),
218px -52px 0 1px rgba(255,255,255,.7),
208px -129px 0 1px rgba(255,255,255,.7);
animation:wd-snow-fall 5s linear infinite;
}
.wd-snow i:nth-child(2){
box-shadow:139px -109px 0 0px rgba(255,255,255,.95),
143px -65px 0 1px rgba(255,255,255,.5),
94px -91px 0 1px rgba(255,255,255,.95),
13px -82px 0 0px rgba(255,255,255,.95),
61px -115px 0 0px rgba(255,255,255,.7),
118px -47px 0 0px rgba(255,255,255,.7),
92px -87px 0 1px rgba(255,255,255,.7),
181px -122px 0 1px rgba(255,255,255,.5),
45px -4px 0 1px rgba(255,255,255,.95),
43px -22px 0 0px rgba(255,255,255,.7),
165px -84px 0 1px rgba(255,255,255,.7),
217px -126px 0 0px rgba(255,255,255,.95),
208px -60px 0 0px rgba(255,255,255,.7),
18px -86px 0 1px rgba(255,255,255,.5);
animation-duration:7.5s;
animation-delay:-3s;
}
@keyframes wd-snow-fall{
to{ transform:translateY(285px); }
}
</style>
<!-- box-shadowに座標を並べて粒子を量産する伝統芸 -->
<div class="wd-stars"><i></i><i></i><b>🌙</b></div>
<style>
.wd-stars{
position:relative; overflow:hidden;
width:220px; height:140px; border-radius:14px;
background:linear-gradient(#0b1030,#1c2340);
}
.wd-stars b{ position:absolute; right:16px; top:12px; font-size:26px; }
.wd-stars i{
position:absolute; top:0; left:0;
width:2px; height:2px; border-radius:50%;
box-shadow:82px 56px 0 rgba(255,255,255,.35),
129px 103px 0 rgba(255,255,255,.35),
119px 38px 0 rgba(255,255,255,.6),
37px 65px 0 rgba(255,255,255,.35),
145px 69px 0 rgba(255,255,255,.35),
151px 111px 0 rgba(255,255,255,.35),
104px 94px 0 rgba(255,255,255,.95),
37px 132px 0 rgba(255,255,255,.6),
25px 14px 0 rgba(255,255,255,.95),
41px 42px 0 rgba(255,255,255,.35),
110px 18px 0 rgba(255,255,255,.6),
99px 121px 0 rgba(255,255,255,.35),
66px 4px 0 rgba(255,255,255,.35),
186px 31px 0 rgba(255,255,255,.35),
139px 70px 0 rgba(255,255,255,.35),
89px 30px 0 rgba(255,255,255,.6),
113px 42px 0 rgba(255,255,255,.6);
animation:wd-star-tw 2.6s ease-in-out infinite alternate;
}
.wd-stars i:nth-child(2){
box-shadow:2px 69px 0 rgba(255,255,255,.35),
197px 47px 0 rgba(255,255,255,.35),
29px 78px 0 rgba(255,255,255,.35),
131px 52px 0 rgba(255,255,255,.95),
97px 43px 0 rgba(255,255,255,.35),
201px 2px 0 rgba(255,255,255,.35),
84px 127px 0 rgba(255,255,255,.95),
30px 94px 0 rgba(255,255,255,.6),
63px 16px 0 rgba(255,255,255,.95),
147px 22px 0 rgba(255,255,255,.95),
189px 126px 0 rgba(255,255,255,.95),
196px 34px 0 rgba(255,255,255,.95),
170px 123px 0 rgba(255,255,255,.35),
44px 69px 0 rgba(255,255,255,.35),
157px 110px 0 rgba(255,255,255,.95),
140px 53px 0 rgba(255,255,255,.35),
81px 104px 0 rgba(255,255,255,.35);
animation-delay:-1.3s;
}
@keyframes wd-star-tw{
from{ opacity:1; } to{ opacity:.25; }
}
</style>
<!-- 2グループを逆位相で明滅させると自然に見える -->
<div class="wd-rain"><b>☔ RAINY</b></div>
<style>
.wd-rain{
position:relative; overflow:hidden;
display:grid; place-items:center;
width:220px; height:140px; border-radius:14px;
background:linear-gradient(#39406b,#1c2340);
color:#c9d4ff; letter-spacing:.15em;
}
.wd-rain::before,
.wd-rain::after{
content:""; position:absolute; inset:-40% -20% 0;
/* 雨粒=細長い光の筋。横周期を広げて「線」に見せる */
background-image:linear-gradient(
transparent 0 55%, rgba(210,225,255,.75) 55% 63%, transparent 63%);
background-size:17px 110px;
transform:rotate(11deg);
animation:wd-rain-go .5s linear infinite;
}
.wd-rain::after{
background-size:11px 55px;
opacity:.45;
animation-duration:.33s;
}
@keyframes wd-rain-go{
to{ background-position:0 110px; }
}
</style>
<!-- 細長い線分のrepeat背景を落とすだけ -->
<div class="wd-crt"><b>SYSTEM OK_</b></div>
<style>
.wd-crt{
position:relative; overflow:hidden;
display:grid; place-items:center;
width:220px; height:140px; border-radius:14px;
background:radial-gradient(ellipse at center, #0d2818, #050f09);
}
.wd-crt b{
font-family:"JetBrains Mono",monospace;
color:#4ade80; font-size:17px;
text-shadow:0 0 8px rgba(74,222,128,.8);
animation:wd-crt-flicker 3s infinite;
}
/* 走査線 */
.wd-crt::before{
content:""; position:absolute; inset:0;
background:repeating-linear-gradient(
rgba(0,0,0,.35) 0 1.5px, transparent 1.5px 4px);
pointer-events:none;
}
/* 上下する明るい帯 */
.wd-crt::after{
content:""; position:absolute; left:0; right:0; top:-30%;
height:28%;
background:linear-gradient(transparent,
rgba(74,222,128,.09), transparent);
animation:wd-crt-band 3.4s linear infinite;
}
@keyframes wd-crt-band{ to{ top:110%; } }
@keyframes wd-crt-flicker{
0%,93%,100%{ opacity:1; } 95%{ opacity:.55; } 97%{ opacity:.85; }
}
</style>
アイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7クアイウ0エオ1カキ7ク
<div class="wd-matrix"><i style="left:6px;animation-duration:2.57s;animation-delay:-1.69s">アイウ0エオ1カキ7ク</i><i style="left:30px;animation-duration:2.33s;animation-delay:-2.64s">アイウ0エオ1カキ7ク</i><i style="left:54px;animation-duration:1.8s;animation-delay:-1.99s">アイウ0エオ1カキ7ク</i><i style="left:78px;animation-duration:2.46s;animation-delay:-2.31s">アイウ0エオ1カキ7ク</i><i style="left:102px;animation-duration:1.8s;animation-delay:-2.79s">アイウ0エオ1カキ7ク</i><i style="left:126px;animation-duration:2.54s;animation-delay:-2.31s">アイウ0エオ1カキ7ク</i><i style="left:150px;animation-duration:3.03s;animation-delay:-0.42s">アイウ0エオ1カキ7ク</i><i style="left:174px;animation-duration:1.53s;animation-delay:-2.29s">アイウ0エオ1カキ7ク</i><i style="left:198px;animation-duration:2.6s;animation-delay:-2.36s">アイウ0エオ1カキ7ク</i></div>
<style>
.wd-matrix{
position:relative; overflow:hidden;
width:220px; height:150px; border-radius:14px;
background:#02120a;
}
.wd-matrix i{
position:absolute; top:-160px;
width:16px;
font-family:"JetBrains Mono",monospace;
font-size:12px; font-style:normal; line-height:1.25;
word-break:break-all;
color:#4ade80;
text-shadow:0 0 6px rgba(74,222,128,.9);
/* 先頭だけ白く */
background:linear-gradient(#0a3, #4ade80 85%, #eaffea);
-webkit-background-clip:text; background-clip:text;
color:transparent;
animation:wd-mtx-fall linear infinite;
}
@keyframes wd-mtx-fall{
to{ transform:translateY(330px); }
}
</style>
<!-- 列ごとにdurationとdelayを乱数で散らすのがリアルさの正体 -->
ピクセルアート(box-shadow製)
HTML+CSS
<div class="wd-pixel"><i></i></div>
<style>
.wd-pixel{
position:relative;
width:80px; height:80px;
animation:wd-px-hop 1s steps(1) infinite;
}
/* 10px角のドット=box-shadow1個 */
.wd-pixel i{
position:absolute;
width:10px; height:10px; margin:-10px 0 0 -10px;
box-shadow:20px 0px 0 #4ade80,
50px 0px 0 #4ade80,
30px 10px 0 #4ade80,
40px 10px 0 #4ade80,
10px 20px 0 #4ade80,
20px 20px 0 #4ade80,
30px 20px 0 #4ade80,
40px 20px 0 #4ade80,
50px 20px 0 #4ade80,
60px 20px 0 #4ade80,
0px 30px 0 #4ade80,
10px 30px 0 #4ade80,
30px 30px 0 #4ade80,
40px 30px 0 #4ade80,
60px 30px 0 #4ade80,
70px 30px 0 #4ade80,
0px 40px 0 #4ade80,
10px 40px 0 #4ade80,
20px 40px 0 #4ade80,
30px 40px 0 #4ade80,
40px 40px 0 #4ade80,
50px 40px 0 #4ade80,
60px 40px 0 #4ade80,
70px 40px 0 #4ade80,
0px 50px 0 #4ade80,
20px 50px 0 #4ade80,
30px 50px 0 #4ade80,
40px 50px 0 #4ade80,
50px 50px 0 #4ade80,
70px 50px 0 #4ade80,
0px 60px 0 #4ade80,
20px 60px 0 #4ade80,
50px 60px 0 #4ade80,
70px 60px 0 #4ade80,
30px 70px 0 #4ade80,
40px 70px 0 #4ade80;
}
@keyframes wd-px-hop{
0%{ transform:translate(10px,10px); }
50%{ transform:translate(10px,14px); }
}
</style>
<!-- 1要素+box-shadowでドット絵が描ける。Pythonで生成すると楽 -->
<div class="wd-flipclock">
<div class="card">
<b class="up"><s>13</s></b>
<b class="dn"><s>12</s></b>
<i class="fl-top"><s>12</s></i>
<i class="fl-btm"><s>13</s></i>
</div>
</div>
<style>
.wd-flipclock .card{
position:relative; width:90px; height:100px;
perspective:400px;
font-family:"Space Grotesk",sans-serif;
font-size:47px; font-weight:700; color:#fff;
}
.wd-flipclock b, .wd-flipclock i{
position:absolute; left:0; right:0;
height:50%; overflow:hidden;
background:#22283f; font-style:normal;
}
/* sに数字全体(高さ100px)を入れ、下半分は-50pxずらして表示 */
.wd-flipclock s{
display:block; height:100px; line-height:100px;
text-align:center; text-decoration:none;
}
.wd-flipclock .up{
top:0; border-radius:9px 9px 0 0;
border-bottom:2px solid #0b0e1c;
}
.wd-flipclock .dn{
bottom:0; border-radius:0 0 9px 9px;
}
.wd-flipclock .dn s{ margin-top:-50px; }
/* 2枚フラップ方式(3D両面を使わないので描画が安定):
1) 上フラップ(古い12)が中央軸で手前に倒れて消える
2) 下フラップ(新しい13の下半分)が起き上がって着地する */
.wd-flipclock .fl-top{
top:0; z-index:2;
border-radius:9px 9px 0 0;
border-bottom:2px solid #0b0e1c;
transform-origin:bottom;
backface-visibility:hidden;
animation:wd-flip-top 3s cubic-bezier(.55,0,.45,1) infinite;
}
.wd-flipclock .fl-btm{
bottom:0; z-index:2;
border-radius:0 0 9px 9px;
transform-origin:top;
transform:rotateX(90deg);
backface-visibility:hidden;
animation:wd-flip-btm 3s cubic-bezier(.55,0,.45,1) infinite;
}
/* 下フラップは数字の下半分を見せる */
.wd-flipclock .fl-btm s{ margin-top:-50px; }
@keyframes wd-flip-top{
0%,40%{ transform:rotateX(0); }
58%,100%{ transform:rotateX(-90deg); }
}
@keyframes wd-flip-btm{
0%,58%{ transform:rotateX(90deg); }
76%,96%{ transform:rotateX(0); }
100%{ transform:rotateX(90deg); }
}
}
}
</style>
<!-- 上半分だけ倒すとフリップ時計に見える(完全版はJSで数字入替) -->
<div class="wd-vhs"><b data-t="PLAY ▶">PLAY ▶</b><span>SP 0:12:34</span></div>
<style>
.wd-vhs{
position:relative; overflow:hidden;
display:grid; place-content:center; gap:6px;
width:220px; height:140px; border-radius:14px;
background:#101018;
}
.wd-vhs b{
position:relative;
font-family:"JetBrains Mono",monospace;
font-size:25px; color:#fff;
animation:wd-vhs-shift 2.2s steps(1) infinite;
}
.wd-vhs b::before,
.wd-vhs b::after{
content:attr(data-t);
position:absolute; inset:0; mix-blend-mode:screen;
}
.wd-vhs b::before{ color:#f0f; translate:2px 0; }
.wd-vhs b::after{ color:#0ff; translate:-2px 0; }
.wd-vhs span{
font-family:"JetBrains Mono",monospace;
font-size:11px; color:#ccc;
}
.wd-vhs::after{
content:""; position:absolute; left:0; right:0;
height:9px; top:20%;
background:rgba(255,255,255,.14);
animation:wd-vhs-track 2.2s steps(6) infinite;
}
@keyframes wd-vhs-shift{
0%,88%,100%{ transform:none; } 90%{ transform:translateX(3px) skewX(-4deg); }
94%{ transform:translateX(-2px); }
}
@keyframes wd-vhs-track{
to{ top:95%; }
}
</style>
<div class="wd-dvd"><b>DVD</b></div>
<style>
.wd-dvd{
position:relative; overflow:hidden;
width:230px; height:140px; border-radius:14px;
background:#0b0e1c; border:2px solid #191F2E;
}
.wd-dvd b{
position:absolute; top:0; left:0;
padding:5px 13px; border-radius:7px;
background:#3A46E8; color:#fff;
font-family:"Space Grotesk",sans-serif; font-size:14px;
/* X方向とY方向を別周期のalternateにすると壁反射になる */
animation:
wd-dvd-x 3.1s linear infinite alternate,
wd-dvd-y 2.3s linear infinite alternate,
wd-dvd-hue 6s linear infinite;
}
@keyframes wd-dvd-x{ to{ left:calc(100% - 58px); } }
@keyframes wd-dvd-y{ to{ top:calc(100% - 32px); } }
@keyframes wd-dvd-hue{ to{ filter:hue-rotate(360deg); } }
</style>
<!-- XとYの周期を互いに素っぽくすると「角に当たる奇跡」が稀に起きる -->
<div class="wd-cradle">
<i class="l"></i><i></i><i></i><i></i><i class="r"></i>
</div>
<style>
.wd-cradle{
display:flex;
padding-top:64px;
border-top:4px solid #191F2E;
}
.wd-cradle i{
position:relative;
width:26px; height:26px; border-radius:50%;
background:radial-gradient(circle at 35% 30%, #7c88f5, #3A46E8);
border:2px solid #191F2E;
margin:0 -1px;
}
/* 糸 */
.wd-cradle i::before{
content:""; position:absolute;
left:50%; bottom:100%;
width:1.5px; height:64px;
background:#191F2E;
}
.wd-cradle .l,
.wd-cradle .r{
transform-origin:50% -64px; /* 支点=糸の上端 */
}
.wd-cradle .l{ animation:wd-cr-l 1.4s cubic-bezier(.5,0,.5,1) infinite; }
.wd-cradle .r{ animation:wd-cr-r 1.4s cubic-bezier(.5,0,.5,1) infinite; }
@keyframes wd-cr-l{
0%,50%{ rotate:0deg; }
75%{ rotate:38deg; }
100%{ rotate:0deg; }
}
@keyframes wd-cr-r{
0%{ rotate:0deg; }
25%{ rotate:-38deg; }
50%,100%{ rotate:0deg; }
}
</style>
<!-- transform-originを糸の上端に置くのがポイント -->
<div class="wd-pendwave"><i></i><i></i><i></i><i></i><i></i><i></i><i></i></div>
<style>
.wd-pendwave{
display:flex; gap:14px;
padding-top:70px;
border-top:4px solid #191F2E;
}
.wd-pendwave i{
position:relative;
width:18px; height:18px; border-radius:50%;
background:#FF5CA0; border:2px solid #191F2E;
transform-origin:50% -70px;
animation:wd-pw-swing ease-in-out infinite alternate;
}
.wd-pendwave i::before{
content:""; position:absolute; left:50%; bottom:100%;
width:1.5px; height:70px; background:#191F2E;
}
.wd-pendwave i:nth-child(1){ animation-duration:1.10s; }
.wd-pendwave i:nth-child(2){ animation-duration:1.19s; }
.wd-pendwave i:nth-child(3){ animation-duration:1.28s; }
.wd-pendwave i:nth-child(4){ animation-duration:1.37s; }
.wd-pendwave i:nth-child(5){ animation-duration:1.46s; }
.wd-pendwave i:nth-child(6){ animation-duration:1.55s; }
.wd-pendwave i:nth-child(7){ animation-duration:1.64s; }
@keyframes wd-pw-swing{
from{ rotate:32deg; } to{ rotate:-32deg; }
}
</style>
<!-- 周期を少しずつ変えると波紋→カオス→再同期を繰り返す -->
<div class="wd-solar">
<b class="sun">☀️</b>
<i class="o o1"><span>🌍</span></i>
<i class="o o2"><span>🪐</span></i>
</div>
<style>
.wd-solar{
position:relative; width:190px; height:190px;
display:grid; place-items:center;
}
.wd-solar .sun{ font-size:34px; }
.wd-solar .o{
position:absolute; border-radius:50%;
border:1.5px dashed rgba(255,255,255,.25);
animation:wd-solar-orbit linear infinite;
}
.wd-solar .o span{
position:absolute; top:-11px; left:50%; margin-left:-11px;
font-size:20px;
animation:wd-solar-counter linear infinite;
animation-duration:inherit;
}
.wd-solar .o1{ inset:34px; animation-duration:6s; }
.wd-solar .o2{ inset:4px; animation-duration:13s; }
@keyframes wd-solar-orbit{ to{ rotate:360deg; } }
/* 惑星は逆回転させて向きを固定 */
@keyframes wd-solar-counter{ to{ rotate:-360deg; } }
</style>
<div class="wd-seesaw">
<div class="plank"><i>🐘</i><i>🐭</i></div>
<b class="pivot"></b>
</div>
<style>
.wd-seesaw{
display:flex; flex-direction:column; align-items:center;
}
.wd-seesaw .plank{
display:flex; justify-content:space-between;
width:190px; padding:0 8px 4px;
border-bottom:7px solid #191F2E; border-radius:4px;
transform-origin:center bottom;
animation:wd-see-tilt 2.6s ease-in-out infinite;
}
.wd-seesaw i{ font-size:26px; font-style:normal; }
.wd-seesaw i:first-child{ animation:wd-see-l 2.6s ease-in-out infinite; }
.wd-seesaw i:last-child{ animation:wd-see-r 2.6s ease-in-out infinite; }
.wd-seesaw .pivot{
width:0; height:0;
border-left:16px solid transparent;
border-right:16px solid transparent;
border-bottom:26px solid #FF5CA0;
}
@keyframes wd-see-tilt{
0%,100%{ rotate:7deg; } 50%{ rotate:-7deg; }
}
/* 乗ってる方は逆回転で水平を保つ */
@keyframes wd-see-l{
0%,100%{ rotate:-7deg; } 50%{ rotate:7deg; }
}
@keyframes wd-see-r{
0%,100%{ rotate:-7deg; translate:0 0; }
50%{ rotate:7deg; translate:0 -4px; }
}
</style>
<div class="wd-balls"><i></i><i></i><i></i></div>
<style>
.wd-balls{
display:flex; gap:20px; align-items:flex-end;
height:90px;
border-bottom:3px solid #191F2E; padding:0 10px;
}
.wd-balls i{
width:26px; height:26px; border-radius:50%;
animation:wd-balls-go 1.1s cubic-bezier(.35,0,.65,1) infinite;
}
.wd-balls i:nth-child(1){ background:#3A46E8; }
.wd-balls i:nth-child(2){ background:#FF5CA0; animation-delay:.18s; }
.wd-balls i:nth-child(3){ background:#FFCF3F; animation-delay:.36s; }
@keyframes wd-balls-go{
0%,100%{ translate:0 0; scale:1 1; }
10%{ scale:1.15 .8; }
45%{ translate:0 -58px; scale:.95 1.06; }
55%{ translate:0 -58px; }
}
</style>
<!-- 接地の瞬間に潰す(squash)と生きて見える -->
<div class="wd-cube3d"><div class="c">
<i class="f1">1</i><i class="f2">2</i><i class="f3">3</i>
<i class="f4">4</i><i class="f5">5</i><i class="f6">6</i>
</div></div>
<style>
.wd-cube3d{
width:90px; height:90px; margin:34px;
perspective:520px;
}
.wd-cube3d .c{
position:relative; width:100%; height:100%;
transform-style:preserve-3d;
animation:wd-cube-spin 8s linear infinite;
}
.wd-cube3d i{
position:absolute; inset:0;
display:grid; place-items:center;
font-family:"Space Grotesk",sans-serif;
font-size:28px; font-weight:700; font-style:normal; color:#fff;
border:2px solid rgba(255,255,255,.65);
background:rgba(58,70,232,.5);
backdrop-filter:blur(1px);
}
.wd-cube3d .f1{ transform:translateZ(45px); }
.wd-cube3d .f2{ transform:rotateY(180deg) translateZ(45px); }
.wd-cube3d .f3{ transform:rotateY(90deg) translateZ(45px); }
.wd-cube3d .f4{ transform:rotateY(-90deg) translateZ(45px); }
.wd-cube3d .f5{ transform:rotateX(90deg) translateZ(45px); }
.wd-cube3d .f6{ transform:rotateX(-90deg) translateZ(45px); }
@keyframes wd-cube-spin{
to{ transform:rotateX(360deg) rotateY(360deg); }
}
</style>
<!-- 6面をtranslateZ(一辺の半分)で配置する基本形 -->
<div class="wd-tunnel"><i></i><i></i><i></i><i></i></div>
<style>
.wd-tunnel{
position:relative; width:180px; height:140px;
display:grid; place-items:center;
overflow:hidden; border-radius:14px;
background:#0b0e1c;
}
.wd-tunnel i{
position:absolute;
width:20px; height:16px;
border:2.5px solid #5EE7FF; border-radius:8px;
opacity:0;
animation:wd-tun-go 2.8s linear infinite;
}
.wd-tunnel i:nth-child(2){ animation-delay:.7s; }
.wd-tunnel i:nth-child(3){ animation-delay:1.4s; }
.wd-tunnel i:nth-child(4){ animation-delay:2.1s; }
@keyframes wd-tun-go{
0%{ transform:scale(.1); opacity:0; }
25%{ opacity:1; }
100%{ transform:scale(11); opacity:0; }
}
</style>
<!-- 同じ枠をscaleで飛ばして時間差再生するだけ -->
<div class="wd-text3d"><b>360°</b></div>
<style>
.wd-text3d{
perspective:500px;
}
.wd-text3d b{
display:inline-block;
font-family:"Space Grotesk",sans-serif;
font-size:47px; font-weight:700; color:#FFCF3F;
-webkit-text-stroke:2px #191F2E;
text-shadow:
1px 1px 0 #191F2E, 2px 2px 0 #191F2E,
3px 3px 0 #191F2E, 4px 4px 0 #191F2E,
5px 5px 0 #191F2E;
animation:wd-t3d-go 4s ease-in-out infinite;
}
@keyframes wd-t3d-go{
0%,100%{ transform:rotateY(-24deg) rotateX(6deg); }
50%{ transform:rotateY(24deg) rotateX(-6deg); }
}
</style>
<div class="wd-plane"><i>✈️</i></div>
<style>
.wd-plane{
position:relative; width:230px; height:140px;
border:2px dashed #C9CBD4; border-radius:14px;
}
.wd-plane i{
position:absolute; font-size:25px; font-style:normal;
/* ★ SVGパスに沿って移動+自動で向きも変わる */
offset-path:path("M12,110 C60,10 150,10 214,70 C180,120 80,130 12,110");
animation:wd-plane-go 5s ease-in-out infinite;
}
@keyframes wd-plane-go{
to{ offset-distance:100%; }
}
</style>
<!-- offset-pathは曲線移動の決定版。rotateも進行方向に自動追従 -->
<div class="wd-dna"><i style="animation-delay:-0.00s"></i><i style="animation-delay:-0.22s"></i><i style="animation-delay:-0.44s"></i><i style="animation-delay:-0.66s"></i><i style="animation-delay:-0.88s"></i><i style="animation-delay:-1.10s"></i><i style="animation-delay:-1.32s"></i><i style="animation-delay:-1.54s"></i><i style="animation-delay:-1.76s"></i><i style="animation-delay:-1.98s"></i></div>
<style>
.wd-dna{
display:flex; gap:8px; align-items:center;
height:110px;
}
.wd-dna i{
position:relative; width:9px; height:100%;
}
.wd-dna i::before,
.wd-dna i::after{
content:""; position:absolute; left:0;
width:9px; height:9px; border-radius:50%;
animation:wd-dna-go 2.2s ease-in-out infinite;
animation-delay:inherit;
}
.wd-dna i::before{ background:#5EE7FF; }
.wd-dna i::after{
background:#FF5CA0;
animation-name:wd-dna-go2;
}
/* 2本の鎖=同じ動きの逆位相 */
@keyframes wd-dna-go{
0%,100%{ top:12%; scale:1.15; z-index:1; }
50%{ top:78%; scale:.7; }
}
@keyframes wd-dna-go2{
0%,100%{ top:78%; scale:.7; }
50%{ top:12%; scale:1.15; }
}
</style>
<!-- 上下の入替時にscaleも変えると奥行きが出る -->
カウントアップ(@property)
HTML+CSSモダンCSS
<div class="wd-prop-count"><b></b><span>DOWNLOADS</span></div>
<style>
@property --wd-cnt{
syntax:"<integer>"; initial-value:0; inherits:false;
}
.wd-prop-count{ text-align:center; }
.wd-prop-count b{
font-family:"Space Grotesk",sans-serif;
font-size:47px; font-weight:700; color:#3A46E8;
counter-reset:wdc var(--wd-cnt);
animation:wd-cnt-go 3s cubic-bezier(.2,.6,.3,1) infinite;
}
.wd-prop-count b::before{ content:counter(wdc); }
.wd-prop-count b::after{ content:"+"; color:#FF5CA0; }
.wd-prop-count span{
display:block; font-size:10px; letter-spacing:.3em; color:#5A6072;
}
@keyframes wd-cnt-go{
0%{ --wd-cnt:0; }
70%,100%{ --wd-cnt:12847; }
}
</style>
<!-- @propertyで型登録した変数は普通にアニメできる(Chrome/Edge/Safari) -->
角度が回るグラデボタン
HTML+CSSモダンCSS
<button class="wd-prop-angle">GRADIENT SPIN</button>
<style>
@property --wd-ang{
syntax:"<angle>"; initial-value:0deg; inherits:false;
}
.wd-prop-angle{
padding:15px 32px; border:none; border-radius:12px;
font-family:"Space Grotesk",sans-serif;
font-size:15px; font-weight:700; color:#fff; cursor:pointer;
background:linear-gradient(var(--wd-ang), #3A46E8, #FF5CA0, #F59E0B);
animation:wd-ang-go 3s linear infinite;
}
@keyframes wd-ang-go{
to{ --wd-ang:360deg; }
}
</style>
<!-- グラデの「角度」は本来アニメ不可→@propertyで可能になる -->
TOKYO
<b class="wd-clip-text-bg">TOKYO</b>
<style>
.wd-clip-text-bg{
font-family:"Space Grotesk",sans-serif;
font-size:53px; font-weight:700; letter-spacing:-.02em;
background:
linear-gradient(rgba(0,0,0,.15), rgba(0,0,0,.15)),
repeating-linear-gradient(115deg,
#3A46E8 0 24px, #5EE7FF 24px 42px,
#FF5CA0 42px 66px, #FFCF3F 66px 84px);
background-size:auto, 300% 100%;
-webkit-background-clip:text; background-clip:text;
color:transparent;
animation:wd-ctb-go 6s linear infinite;
}
@keyframes wd-ctb-go{
to{ background-position:0 0, -260px 0; }
}
</style>
<!-- 実案件では背景を写真にすると「文字窓ムービー」に -->
<div class="wd-hypno"></div>
<style>
.wd-hypno{
width:130px; height:130px; border-radius:50%;
border:3px solid #191F2E;
background:repeating-conic-gradient(
#191F2E 0 20deg, #F7F5EF 20deg 40deg);
animation:wd-hypno-go 3s linear infinite;
}
@keyframes wd-hypno-go{
to{ rotate:360deg; }
}
</style>
<!-- repeating-conicの縞を回すだけ。見過ぎ注意 -->
<div class="wd-traffic"><i class="r"></i><i class="y"></i><i class="g"></i></div>
<style>
.wd-traffic{
display:flex; gap:12px;
padding:14px 18px; border-radius:16px;
background:#22283f; border:2.5px solid #191F2E;
}
.wd-traffic i{
width:34px; height:34px; border-radius:50%;
background:#3a3f55;
}
.wd-traffic .r{ animation:wd-tf-r 6s steps(1) infinite; }
.wd-traffic .y{ animation:wd-tf-y 6s steps(1) infinite; }
.wd-traffic .g{ animation:wd-tf-g 6s steps(1) infinite; }
@keyframes wd-tf-g{
0%{ background:#22c55e; box-shadow:0 0 16px #22c55e; }
50%,100%{ background:#3a3f55; box-shadow:none; }
}
@keyframes wd-tf-y{
0%,50%{ background:#3a3f55; box-shadow:none; }
50.1%{ background:#FFCF3F; box-shadow:0 0 16px #FFCF3F; }
66%,100%{ background:#3a3f55; }
}
@keyframes wd-tf-y2{ 0%{} }
@keyframes wd-tf-r{
0%,66%{ background:#3a3f55; box-shadow:none; }
66.1%{ background:#FF3B5C; box-shadow:0 0 16px #FF3B5C; }
100%{ background:#3a3f55; }
}
</style>
<!-- steps(1)で「切り替わる」動きに。青→黄→赤の日本式サイクル -->
<div class="wd-firework"><i class="rocket"></i><i class="burst"></i></div>
<style>
.wd-firework{
position:relative; width:150px; height:190px;
overflow:hidden; border-radius:14px;
background:linear-gradient(#0b1030,#1c2340);
}
.wd-firework .rocket{
position:absolute; left:50%; bottom:0;
width:4px; height:12px; margin-left:-2px;
border-radius:3px; background:#FFCF3F;
animation:wd-fw-up 2.6s ease-out infinite;
}
.wd-firework .burst{
position:absolute; left:50%; top:34%;
width:5px; height:5px; margin-left:-2.5px;
border-radius:50%;
animation:wd-fw-boom 2.6s ease-out infinite;
}
@keyframes wd-fw-up{
0%{ translate:0 0; opacity:1; }
38%{ translate:0 -118px; opacity:1; }
40%,100%{ translate:0 -118px; opacity:0; }
}
@keyframes wd-fw-boom{
0%,39%{ box-shadow:0 0 0 transparent; opacity:0; scale:.3; }
42%{ opacity:1; scale:.5;
box-shadow:8px 0px 0 #FFCF3F, 37px 15px 0 #FF5CA0, 37px 37px 0 #5EE7FF, 15px 37px 0 #A3E635, 0px 8px 0 #FFCF3F, -15px 37px 0 #FF5CA0, -37px 37px 0 #5EE7FF, -37px 15px 0 #A3E635, -8px 0px 0 #FFCF3F, -37px -15px 0 #FF5CA0, -37px -37px 0 #5EE7FF, -15px -37px 0 #A3E635, 0px -8px 0 #FFCF3F, 15px -37px 0 #FF5CA0, 37px -37px 0 #5EE7FF, 37px -15px 0 #A3E635; }
70%{ opacity:1; scale:1;
box-shadow:52px 0px 0 #FFCF3F, 37px 15px 0 #FF5CA0, 37px 37px 0 #5EE7FF, 15px 37px 0 #A3E635, 0px 52px 0 #FFCF3F, -15px 37px 0 #FF5CA0, -37px 37px 0 #5EE7FF, -37px 15px 0 #A3E635, -52px 0px 0 #FFCF3F, -37px -15px 0 #FF5CA0, -37px -37px 0 #5EE7FF, -15px -37px 0 #A3E635, 0px -52px 0 #FFCF3F, 15px -37px 0 #FF5CA0, 37px -37px 0 #5EE7FF, 37px -15px 0 #A3E635; }
100%{ opacity:0; scale:1.15;
box-shadow:52px 0px 0 #FFCF3F, 37px 15px 0 #FF5CA0, 37px 37px 0 #5EE7FF, 15px 37px 0 #A3E635, 0px 52px 0 #FFCF3F, -15px 37px 0 #FF5CA0, -37px 37px 0 #5EE7FF, -37px 15px 0 #A3E635, -52px 0px 0 #FFCF3F, -37px -15px 0 #FF5CA0, -37px -37px 0 #5EE7FF, -15px -37px 0 #A3E635, 0px -52px 0 #FFCF3F, 15px -37px 0 #FF5CA0, 37px -37px 0 #5EE7FF, 37px -15px 0 #A3E635; }
}
</style>
<!-- box-shadowの座標を三角関数で円形配置(Python生成) -->
<div class="wd-eq-circle"><i style="rotate:0deg;animation-delay:-0.00s"></i><i style="rotate:30deg;animation-delay:-0.22s"></i><i style="rotate:60deg;animation-delay:-0.44s"></i><i style="rotate:90deg;animation-delay:-0.66s"></i><i style="rotate:120deg;animation-delay:-0.00s"></i><i style="rotate:150deg;animation-delay:-0.22s"></i><i style="rotate:180deg;animation-delay:-0.44s"></i><i style="rotate:210deg;animation-delay:-0.66s"></i><i style="rotate:240deg;animation-delay:-0.00s"></i><i style="rotate:270deg;animation-delay:-0.22s"></i><i style="rotate:300deg;animation-delay:-0.44s"></i><i style="rotate:330deg;animation-delay:-0.66s"></i><b>♪</b></div>
<style>
.wd-eq-circle{
position:relative; width:130px; height:130px;
display:grid; place-items:center;
}
.wd-eq-circle b{ font-size:28px; color:#5EE7FF; }
.wd-eq-circle i{
position:absolute;
width:5px; height:100%;
}
.wd-eq-circle i::before{
content:""; position:absolute; top:0; left:0;
width:5px; height:20px; border-radius:3px;
background:linear-gradient(#5EE7FF,#3A46E8);
transform-origin:top;
animation:wd-eqc-go .9s ease-in-out infinite alternate;
animation-delay:inherit;
}
@keyframes wd-eqc-go{
from{ scale:1 .3; } to{ scale:1 1.15; }
}
</style>
<!-- バーを放射状にrotate配置してscaleYを揺らす -->
<div class="wd-catwalk"><i></i></div>
<style>
.wd-catwalk{
position:relative; width:230px; height:70px;
overflow:hidden;
border-bottom:3px solid #191F2E;
}
.wd-catwalk i{
position:absolute; bottom:2px; left:-40px;
font-size:34px; font-style:normal;
animation:
wd-cat-walk 6s linear infinite,
wd-cat-frame .5s steps(1) infinite,
wd-cat-bob .25s ease-in-out infinite alternate;
}
.wd-catwalk i::before{ content:"🐈"; }
@keyframes wd-cat-walk{
to{ translate:280px 0; }
}
@keyframes wd-cat-frame{
0%{ content:"🐈"; } 50%{ content:"🐈⬛"; }
}
.wd-catwalk i::before{
animation:wd-cat-frame .5s steps(1) infinite;
}
@keyframes wd-cat-bob{
from{ margin-bottom:0; } to{ margin-bottom:3px; }
}
</style>
<!-- 移動+コマ切替+上下ゆれの3アニメ合成 -->
ぷるん
<b class="wd-jelly-text">ぷるん</b>
<style>
.wd-jelly-text{
display:inline-block;
font-size:43px; font-weight:900; color:#FF5CA0;
-webkit-text-stroke:2px #191F2E;
animation:wd-jelly-go 1.6s cubic-bezier(.4,0,.2,1.4) infinite;
transform-origin:center bottom;
}
@keyframes wd-jelly-go{
0%,55%,100%{ transform:scale(1,1); }
10%{ transform:scale(1.2,.75); }
20%{ transform:scale(.85,1.2); }
30%{ transform:scale(1.1,.9); }
40%{ transform:scale(.96,1.05); }
}
</style>
<!-- X/Yを交互に潰す減衰スクワッシュ -->
<div class="wd-orbit-loading">
<b></b><i class="o1"></i><i class="o2"></i><i class="o3"></i>
</div>
<style>
.wd-orbit-loading{
position:relative; width:120px; height:120px;
}
.wd-orbit-loading b{
position:absolute; inset:0; margin:auto;
width:18px; height:18px; border-radius:50%;
background:radial-gradient(circle at 35% 30%, #ffd968, #F59E0B);
box-shadow:0 0 14px rgba(245,158,11,.8);
}
.wd-orbit-loading i{
position:absolute; inset:0;
border:1.5px solid rgba(94,231,255,.4);
border-radius:50%;
animation:wd-orb-spin linear infinite;
}
.wd-orbit-loading i::before{
content:""; position:absolute; top:-4px; left:50%;
width:8px; height:8px; margin-left:-4px;
border-radius:50%; background:#5EE7FF;
}
.wd-orbit-loading .o1{ animation-duration:1.2s; transform:rotateX(66deg); }
.wd-orbit-loading .o2{ animation-duration:1.9s; transform:rotateX(66deg) rotateY(60deg); }
.wd-orbit-loading .o3{ animation-duration:2.6s; transform:rotateX(66deg) rotateY(-60deg); }
@keyframes wd-orb-spin{
to{ transform:rotateX(66deg) rotate(360deg); }
}
.wd-orbit-loading .o2{ animation-name:wd-orb-spin2; }
.wd-orbit-loading .o3{ animation-name:wd-orb-spin3; }
@keyframes wd-orb-spin2{
from{ transform:rotateX(66deg) rotateY(60deg) rotate(0); }
to{ transform:rotateX(66deg) rotateY(60deg) rotate(360deg); }
}
@keyframes wd-orb-spin3{
from{ transform:rotateX(66deg) rotateY(-60deg) rotate(0); }
to{ transform:rotateX(66deg) rotateY(-60deg) rotate(360deg); }
}
</style>
<!-- 傾けた円軌道を3枚重ねると原子模型に -->
<button class="wd-magic-btn">✨ MAGIC <i>✦</i><i>✦</i><i>✦</i></button>
<style>
.wd-magic-btn{
position:relative;
padding:15px 34px; border:none; border-radius:14px;
background:linear-gradient(135deg,#7B5CFF,#FF5CA0);
color:#fff; font-size:15px; font-weight:700; cursor:pointer;
transition:transform .2s;
}
.wd-magic-btn:hover{ transform:scale(1.05); }
.wd-magic-btn i{
position:absolute; font-style:normal;
color:#FFCF3F; font-size:13px;
animation:wd-magic-fly 2.2s ease-in-out infinite;
}
.wd-magic-btn i:nth-of-type(1){ top:-6px; left:14%; }
.wd-magic-btn i:nth-of-type(2){ top:-11px; left:56%; animation-delay:.7s; }
.wd-magic-btn i:nth-of-type(3){ bottom:-9px; left:78%; animation-delay:1.4s; }
@keyframes wd-magic-fly{
0%,100%{ opacity:0; scale:.3; rotate:0deg; }
50%{ opacity:1; scale:1.15; rotate:180deg; translate:0 -7px; }
}
</style>
<div class="wd-confetti"><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><b>🎉</b></div>
<style>
.wd-confetti{
position:relative; overflow:hidden;
display:grid; place-items:center;
width:220px; height:150px; border-radius:14px;
background:#fff; border:2px solid #191F2E;
}
.wd-confetti b{ font-size:37px; }
.wd-confetti i{
position:absolute; top:-14px;
width:8px; height:12px;
animation:wd-conf-fall linear infinite;
}
.wd-confetti i:nth-child(1){ left:37px; background:#3A46E8; border-radius:50%; animation-duration:4.36s; animation-delay:-1.11s; }
.wd-confetti i:nth-child(2){ left:151px; background:#FF5CA0; animation-duration:4.17s; animation-delay:-2.11s; }
.wd-confetti i:nth-child(3){ left:210px; background:#FFCF3F; animation-duration:2.79s; animation-delay:-2.37s; }
.wd-confetti i:nth-child(4){ left:172px; background:#20B486; border-radius:50%; animation-duration:3.45s; animation-delay:-2.28s; }
.wd-confetti i:nth-child(5){ left:123px; background:#7B5CFF; animation-duration:2.71s; animation-delay:-0.54s; }
.wd-confetti i:nth-child(6){ left:171px; background:#3A46E8; animation-duration:2.8s; animation-delay:-0.06s; }
.wd-confetti i:nth-child(7){ left:107px; background:#FF5CA0; border-radius:50%; animation-duration:4.2s; animation-delay:-1.09s; }
.wd-confetti i:nth-child(8){ left:31px; background:#FFCF3F; animation-duration:2.98s; animation-delay:-3.01s; }
.wd-confetti i:nth-child(9){ left:118px; background:#20B486; animation-duration:2.97s; animation-delay:-3.44s; }
.wd-confetti i:nth-child(10){ left:122px; background:#7B5CFF; border-radius:50%; animation-duration:4.45s; animation-delay:-3.0s; }
.wd-confetti i:nth-child(11){ left:117px; background:#3A46E8; animation-duration:4.31s; animation-delay:-0.77s; }
.wd-confetti i:nth-child(12){ left:29px; background:#FF5CA0; animation-duration:4.6s; animation-delay:-3.8s; }
.wd-confetti i:nth-child(13){ left:7px; background:#FFCF3F; border-radius:50%; animation-duration:4.45s; animation-delay:-0.12s; }
.wd-confetti i:nth-child(14){ left:64px; background:#20B486; animation-duration:3.57s; animation-delay:-3.33s; }
.wd-confetti i:nth-child(15){ left:58px; background:#7B5CFF; animation-duration:4.4s; animation-delay:-0.54s; }
.wd-confetti i:nth-child(16){ left:46px; background:#3A46E8; border-radius:50%; animation-duration:4.57s; animation-delay:-2.48s; }
.wd-confetti i:nth-child(17){ left:71px; background:#FF5CA0; animation-duration:4.17s; animation-delay:-0.29s; }
.wd-confetti i:nth-child(18){ left:77px; background:#FFCF3F; animation-duration:4.51s; animation-delay:-2.31s; }
@keyframes wd-conf-fall{
0%{ translate:0 0; rotate:0deg; }
25%{ translate:9px 45px; }
50%{ translate:-7px 90px; rotate:180deg; }
75%{ translate:8px 130px; }
100%{ translate:-5px 175px; rotate:360deg; }
}
</style>
<!-- 左右に振りながら落とすと紙らしくなる(座標はPython生成) -->
<div class="wd-kaleido"></div>
<style>
.wd-kaleido{
width:140px; height:140px; border-radius:50%;
border:3px solid #191F2E;
background:
repeating-conic-gradient(from 0deg,
#FF5CA0 0 15deg, #FFCF3F 15deg 30deg,
#5EE7FF 30deg 45deg, #3A46E8 45deg 60deg);
animation:wd-kal-spin 8s linear infinite,
wd-kal-hue 5s linear infinite;
}
@keyframes wd-kal-spin{ to{ rotate:360deg; } }
@keyframes wd-kal-hue{ to{ filter:hue-rotate(360deg); } }
</style>
<!-- repeating-conic+hue-rotateの二重アニメ -->
<div class="wd-eye">
<div class="e"><i></i></div><div class="e"><i></i></div>
</div>
<style>
.wd-eye{ display:flex; gap:10px; }
.wd-eye .e{
display:grid; place-items:center;
width:56px; height:64px;
border-radius:50%;
background:#fff; border:3px solid #191F2E;
animation:wd-eye-blink 4.5s infinite;
}
.wd-eye i{
width:20px; height:20px; border-radius:50%;
background:radial-gradient(circle at 35% 32%, #4a5378, #191F2E 60%);
animation:wd-eye-look 4.5s ease-in-out infinite;
}
@keyframes wd-eye-look{
0%,18%{ translate:0 0; }
25%,40%{ translate:-11px 3px; }
48%,63%{ translate:11px -3px; }
70%,85%{ translate:2px 8px; }
92%,100%{ translate:0 0; }
}
@keyframes wd-eye-blink{
0%,55%,59%,100%{ transform:scaleY(1); }
57%{ transform:scaleY(.06); }
}
</style>
<!-- JSでマウス追従させる前段の「勝手にキョロキョロ」版 -->
.hero { display: grid; place-items: center;}
<div class="wd-typing-code">
<div class="bar"><i></i><i></i><i></i></div>
<pre><b class="l1">.hero {</b><b class="l2"> display: grid;</b><b class="l3"> place-items: center;</b><b class="l4">}</b></pre>
</div>
<style>
.wd-typing-code{
width:220px; border-radius:12px; overflow:hidden;
background:#161b2e; border:2px solid #191F2E;
}
.wd-typing-code .bar{
display:flex; gap:6px; padding:9px 11px;
background:#0d1122;
}
.wd-typing-code .bar i{
width:10px; height:10px; border-radius:50%;
}
.wd-typing-code .bar i:nth-child(1){ background:#FF3B5C; }
.wd-typing-code .bar i:nth-child(2){ background:#FFCF3F; }
.wd-typing-code .bar i:nth-child(3){ background:#22c55e; }
.wd-typing-code pre{ margin:0; padding:12px 14px; }
.wd-typing-code b{
display:block; overflow:hidden; white-space:nowrap;
font-family:"JetBrains Mono",monospace;
font-size:12.5px; font-weight:500; color:#8be9fd;
width:0;
animation:wd-code-type 6s steps(22) infinite;
}
.wd-typing-code .l1{ color:#ff79c6; animation-delay:0s; }
.wd-typing-code .l2{ animation-delay:.9s; }
.wd-typing-code .l3{ animation-delay:1.8s; }
.wd-typing-code .l4{ color:#ff79c6; animation-delay:2.7s; }
@keyframes wd-code-type{
0%{ width:0; }
16%,88%{ width:100%; }
95%,100%{ width:0; }
}
</style>
<!-- 行ごとにdelayをずらしたタイピング。ポートフォリオの装飾に -->
<div class="wd-portal"><i></i><i></i><b>✦</b></div>
<style>
.wd-portal{
position:relative; width:130px; height:130px;
display:grid; place-items:center;
}
.wd-portal i{
position:absolute; inset:0;
border-radius:50%;
background:conic-gradient(from 0deg,
transparent 60%, #7B5CFF 82%, #5EE7FF 96%, transparent);
animation:wd-portal-spin 1.6s linear infinite;
filter:blur(1px);
}
.wd-portal i:nth-child(2){
inset:18px;
animation-duration:1.1s;
animation-direction:reverse;
background:conic-gradient(from 180deg,
transparent 55%, #FF5CA0 80%, #FFCF3F 96%, transparent);
}
.wd-portal b{
color:#fff; font-size:22px;
animation:wd-portal-pulse 1.4s ease-in-out infinite alternate;
}
@keyframes wd-portal-spin{ to{ rotate:360deg; } }
@keyframes wd-portal-pulse{
from{ scale:.8; opacity:.6; } to{ scale:1.25; opacity:1; }
}
</style>
<!-- 彗星の尾はconic-gradientの透明→色で作る -->