CSS
.ccm-fan {
position: relative;
width: 220px;
height: 220px;
display: flex;
align-items: center;
justify-content: center;
font-family: "Lato", system-ui, sans-serif;
filter: drop-shadow(0 0 18px rgba(255, 255, 255, 0.08));
}
.ccm-fan-w {
position: absolute;
inset: 0;
background:
radial-gradient(circle at 50% 5%, rgba(255, 255, 255, 0.35), transparent 55%),
radial-gradient(circle at 50% 30%, var(--c) 0%, color-mix(in srgb, var(--c), #000 35%) 100%);
cursor: pointer;
clip-path: polygon(50% 50%, 25% 6.7%, 37.06% 1.92%, 50% 0%, 62.94% 1.92%, 75% 6.7%);
transform-origin: 50% 50%;
transform: rotate(0deg);
animation: ccm-fan-deal 0.9s cubic-bezier(0.49, 0.24, 0.32, 0.96) forwards;
animation-delay: calc(var(--i) * 0.08s);
transition:
filter 0.3s,
transform 0.3s;
}
.ccm-fan-w span {
position: absolute;
top: 24px;
left: 50%;
display: inline-block;
color: #fff;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
transform: translateX(-50%);
pointer-events: none;
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.6),
0 0 8px rgba(255, 255, 255, 0.25);
white-space: nowrap;
}
.ccm-fan-w:hover,
.ccm-fan-w:focus-visible {
filter: brightness(1.18) saturate(1.2)
drop-shadow(0 0 12px color-mix(in srgb, var(--c), white 20%));
z-index: 2;
}
.ccm-fan:has(#ccm-fan-0:checked) [for="ccm-fan-0"],
.ccm-fan:has(#ccm-fan-1:checked) [for="ccm-fan-1"],
.ccm-fan:has(#ccm-fan-2:checked) [for="ccm-fan-2"],
.ccm-fan:has(#ccm-fan-3:checked) [for="ccm-fan-3"],
.ccm-fan:has(#ccm-fan-4:checked) [for="ccm-fan-4"],
.ccm-fan:has(#ccm-fan-5:checked) [for="ccm-fan-5"] {
filter: brightness(1.45) saturate(1.5)
drop-shadow(0 0 22px color-mix(in srgb, var(--c), white 40%))
drop-shadow(0 0 6px color-mix(in srgb, var(--c), white 60%));
z-index: 3;
transform: rotate(calc(var(--i) * 60deg)) scale(1.06);
}
.ccm-fan:has(#ccm-fan-0:checked) [for="ccm-fan-0"] span,
.ccm-fan:has(#ccm-fan-1:checked) [for="ccm-fan-1"] span,
.ccm-fan:has(#ccm-fan-2:checked) [for="ccm-fan-2"] span,
.ccm-fan:has(#ccm-fan-3:checked) [for="ccm-fan-3"] span,
.ccm-fan:has(#ccm-fan-4:checked) [for="ccm-fan-4"] span,
.ccm-fan:has(#ccm-fan-5:checked) [for="ccm-fan-5"] span {
font-size: 13px;
letter-spacing: 0.1em;
text-shadow:
0 1px 2px rgba(0, 0, 0, 0.7),
0 0 12px rgba(255, 255, 255, 0.6);
}
.ccm-fan-hub {
position: absolute;
width: 60px;
height: 60px;
border-radius: 50%;
background:
radial-gradient(circle at 35% 30%, rgba(255, 255, 255, 0.18), transparent 55%),
radial-gradient(circle at center, #1f1f2e 0%, #0a0a14 100%);
border: 1px solid rgba(255, 255, 255, 0.08);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.12),
inset 0 -2px 6px rgba(0, 0, 0, 0.5),
0 0 24px rgba(124, 108, 255, 0.25),
0 4px 12px rgba(0, 0, 0, 0.5);
z-index: 4;
pointer-events: none;
}
@media (prefers-reduced-motion: reduce) {
.ccm-fan-w {
animation: none;
transform: rotate(calc(var(--i) * 60deg));
}
}
@keyframes ccm-fan-deal {
from { transform: rotate(0deg); }
to { transform: rotate(calc(var(--i) * 60deg)); }
}