CSS
/* ─── 01 Neon Buttons — six glow treatments on dark grid ───────── */
@import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@500;700&family=Orbitron:wght@400;700;900&display=swap');
.nn-btn {
position: relative;
width: 100%;
min-height: 560px;
background: #04040f;
font-family: 'Rajdhani', sans-serif;
display: flex;
align-items: center;
justify-content: center;
padding: 40px 16px;
overflow: hidden;
box-sizing: border-box;
}
.nn-btn *,
.nn-btn *::before,
.nn-btn *::after { box-sizing: border-box; margin: 0; padding: 0; }
/* Dark grid backdrop — was body::before; scoped to wrapper. */
.nn-btn::before {
content: '';
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(0,255,200,0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(0,255,200,0.03) 1px, transparent 1px);
background-size: 40px 40px;
pointer-events: none;
z-index: 0;
}
.nn-btn .stage {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: repeat(2, auto);
gap: 36px 48px;
align-items: center;
justify-items: center;
padding: 24px;
}
.nn-btn .btn {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 10px;
padding: 16px 44px;
font-family: 'Orbitron', monospace;
font-size: 13px;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
text-decoration: none;
cursor: pointer;
border: none;
outline: none;
overflow: hidden;
transition: all 0.35s cubic-bezier(0.23, 1, 0.32, 1);
}
.nn-btn .btn-icon {
width: 16px;
height: 16px;
fill: currentColor;
flex-shrink: 0;
}
/* 1 — BORDER TRACE CYAN */
.nn-btn .btn-trace { color: #00ffe5; background: transparent; }
.nn-btn .btn-trace::before {
content: '';
position: absolute;
inset: 0;
border: 1.5px solid rgba(0,255,229,0.25);
}
.nn-btn .btn-trace svg.tracer {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
overflow: visible;
pointer-events: none;
}
.nn-btn .btn-trace svg.tracer rect {
fill: none;
stroke: #00ffe5;
stroke-width: 2;
stroke-dasharray: 0 9999;
transition: stroke-dasharray 0s;
filter: drop-shadow(0 0 6px #00ffe5) drop-shadow(0 0 14px #00ffe5);
}
.nn-btn .btn-trace:hover svg.tracer rect {
stroke-dasharray: 9999 0;
transition: stroke-dasharray 0.65s ease;
}
.nn-btn .btn-trace:hover {
color: #fff;
text-shadow: 0 0 12px #00ffe5, 0 0 28px #00ffe5;
background: rgba(0,255,229,0.05);
box-shadow: inset 0 0 20px rgba(0,255,229,0.07);
}
/* 2 — PULSE GLOW PINK */
.nn-btn .btn-pulse {
color: #ff2d78;
background: rgba(255,45,120,0.08);
border: 1.5px solid #ff2d78;
text-shadow: 0 0 8px rgba(255,45,120,0.8);
box-shadow:
0 0 12px rgba(255,45,120,0.4),
inset 0 0 12px rgba(255,45,120,0.08);
animation: nn-btn-pulse 2.2s ease-in-out infinite;
}
@keyframes nn-btn-pulse {
0%, 100% { box-shadow: 0 0 10px rgba(255,45,120,0.35), 0 0 30px rgba(255,45,120,0.15), inset 0 0 12px rgba(255,45,120,0.07); }
50% { box-shadow: 0 0 22px rgba(255,45,120,0.7), 0 0 55px rgba(255,45,120,0.3), inset 0 0 20px rgba(255,45,120,0.12); }
}
.nn-btn .btn-pulse:hover {
background: rgba(255,45,120,0.18);
color: #fff;
text-shadow: 0 0 6px #fff, 0 0 18px #ff2d78;
box-shadow:
0 0 28px rgba(255,45,120,0.8),
0 0 70px rgba(255,45,120,0.4),
inset 0 0 28px rgba(255,45,120,0.15);
animation: none;
transform: scale(1.04);
}
/* 3 — SOLID FILLED VIOLET */
.nn-btn .btn-solid {
color: #0d0020;
background: linear-gradient(135deg, #bf5fff, #7b00ff);
box-shadow:
0 0 20px rgba(127,0,255,0.6),
0 0 50px rgba(127,0,255,0.25),
inset 0 1px 0 rgba(255,255,255,0.15);
clip-path: polygon(12px 0%, 100% 0%, calc(100% - 12px) 100%, 0% 100%);
}
.nn-btn .btn-solid::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, transparent 60%);
pointer-events: none;
}
.nn-btn .btn-solid:hover {
background: linear-gradient(135deg, #d47fff, #9b2fff);
box-shadow:
0 0 35px rgba(127,0,255,0.9),
0 0 90px rgba(127,0,255,0.45),
inset 0 1px 0 rgba(255,255,255,0.2);
transform: translateY(-2px);
}
/* 4 — GHOST + SCANLINE AMBER */
.nn-btn .btn-ghost {
color: #ffb700;
background: transparent;
border: 2px solid #ffb700;
text-shadow: 0 0 10px rgba(255,183,0,0.9);
box-shadow: 0 0 16px rgba(255,183,0,0.3), inset 0 0 16px rgba(255,183,0,0.05);
overflow: hidden;
}
.nn-btn .btn-ghost::before {
content: '';
position: absolute;
top: -100%;
left: 0;
width: 100%;
height: 40%;
background: linear-gradient(180deg, transparent, rgba(255,183,0,0.18), transparent);
transform: skewY(-4deg);
transition: top 0s;
}
.nn-btn .btn-ghost:hover::before {
top: 200%;
transition: top 0.5s ease;
}
.nn-btn .btn-ghost:hover {
background: rgba(255,183,0,0.1);
box-shadow:
0 0 28px rgba(255,183,0,0.65),
0 0 60px rgba(255,183,0,0.3),
inset 0 0 22px rgba(255,183,0,0.12);
color: #fff;
text-shadow: 0 0 6px #ffb700, 0 0 20px #ffb700;
}
/* 5 — DOUBLE BORDER TEAL */
.nn-btn .btn-double {
color: #00ffcc;
background: transparent;
padding: 14px 40px;
outline: 1px solid rgba(0,255,204,0.2);
outline-offset: 5px;
border: 1.5px solid #00ffcc;
text-shadow: 0 0 8px #00ffcc;
box-shadow: 0 0 14px rgba(0,255,204,0.3), inset 0 0 14px rgba(0,255,204,0.05);
transition: all 0.3s ease;
}
.nn-btn .btn-double:hover {
outline-offset: 2px;
outline-color: rgba(0,255,204,0.7);
box-shadow:
0 0 28px rgba(0,255,204,0.6),
0 0 70px rgba(0,255,204,0.25),
inset 0 0 24px rgba(0,255,204,0.1);
color: #fff;
text-shadow: 0 0 4px #fff, 0 0 16px #00ffcc;
background: rgba(0,255,204,0.07);
}
/* 6 — FILL SWEEP RED */
.nn-btn .btn-sweep {
color: #ff3c3c;
background: transparent;
border: 1.5px solid #ff3c3c;
text-shadow: 0 0 8px rgba(255,60,60,0.8);
overflow: hidden;
z-index: 0;
}
.nn-btn .btn-sweep::before {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(90deg, #ff3c3c, #ff0066);
transform: translateX(-105%);
transition: transform 0.4s cubic-bezier(0.23, 1, 0.32, 1);
z-index: -1;
}
.nn-btn .btn-sweep:hover::before { transform: translateX(0); }
.nn-btn .btn-sweep:hover {
color: #000;
text-shadow: none;
border-color: transparent;
box-shadow: 0 0 30px rgba(255,60,60,0.7), 0 0 70px rgba(255,60,60,0.3);
letter-spacing: 0.22em;
}
@media (max-width: 640px) {
.nn-btn .stage { grid-template-columns: 1fr; gap: 24px; }
}
@media (prefers-reduced-motion: reduce) {
.nn-btn .btn,
.nn-btn .btn-pulse,
.nn-btn .btn-ghost::before,
.nn-btn .btn-sweep::before,
.nn-btn .btn-trace svg.tracer rect { animation: none !important; transition: none !important; }
}