Skip to content

Commit db1ef01

Browse files
committed
Adopt Space Grotesk font and cyan-on-black theme from odek POC
- Replace Outfit (5 static TTFs) with Space Grotesk variable font (300-700) - tokens.css: cyan accent (#22d3ee), near-black bg (#050507), slate borders - base.css: cyan selection, dark scrollbar, effect utilities (glow, grid, panel, noise), POC keyframes/animations (marquee, scanline, pulse-dot...) - buttons/hero: route hardcoded old-palette colors through tokens - README: updated structure listing
1 parent 1944990 commit db1ef01

12 files changed

Lines changed: 94 additions & 49 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Central asset hub for all 21no.de web properties. Served from **assets.21no.de**
77
```
88
├── css/
99
│ ├── tokens.css # Design tokens (CSS variables)
10-
│ ├── base.css # Reset, typography, layout
10+
│ ├── base.css # Reset, typography, layout, effects, animations
1111
│ ├── nav.css # Sticky navigation
1212
│ ├── hero.css # Hero section + stats
1313
│ ├── buttons.css # .btn, .btn-primary, .btn-secondary
@@ -16,7 +16,7 @@ Central asset hub for all 21no.de web properties. Served from **assets.21no.de**
1616
│ └── blog-carousel.css # Blog carousel + skeleton
1717
├── fonts/
1818
│ ├── fonts.css # @font-face declarations
19-
│ ├── Outfit-*.ttf # Outfit (300–700)
19+
│ ├── SpaceGrotesk-Variable.ttf # Space Grotesk (variable, 300–700)
2020
│ └── JetBrainsMono-*.ttf # JetBrains Mono (400–600)
2121
└── README.md
2222
```

css/base.css

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@ body {
1010
-moz-osx-font-smoothing: grayscale;
1111
}
1212
a { color: var(--accent); text-decoration: none; transition: color 0.15s; }
13-
a:hover { color: #7dd3fc; }
13+
a:hover { color: var(--accent-hover); }
1414
code, pre { font-family: var(--font-mono); }
1515
img { max-width: 100%; display: block; }
1616

17+
/* === Selection & Scrollbar === */
18+
::selection { background: rgba(34, 211, 238, 0.25); color: #e6fbff; }
19+
::-webkit-scrollbar { width: 10px; }
20+
::-webkit-scrollbar-track { background: var(--bg-primary); }
21+
::-webkit-scrollbar-thumb { background: #1c2130; border-radius: 8px; }
22+
::-webkit-scrollbar-thumb:hover { background: #2a3247; }
23+
1724
/* === Layout === */
1825
.container { max-width: var(--max-width); margin: 0 auto; padding: 0 24px; }
1926

@@ -35,6 +42,40 @@ img { max-width: 100%; display: block; }
3542
max-width: 600px; line-height: 1.7; margin-bottom: 32px;
3643
}
3744

45+
/* === Effects === */
46+
.text-glow-cyan {
47+
text-shadow: 0 0 24px rgba(34, 211, 238, 0.55), 0 0 64px rgba(34, 211, 238, 0.25);
48+
}
49+
.text-glow-green {
50+
text-shadow: 0 0 20px rgba(74, 222, 128, 0.5);
51+
}
52+
.bg-grid {
53+
background-image:
54+
linear-gradient(rgba(148, 163, 184, 0.055) 1px, transparent 1px),
55+
linear-gradient(90deg, rgba(148, 163, 184, 0.055) 1px, transparent 1px);
56+
background-size: 44px 44px;
57+
}
58+
.bg-grid-fade {
59+
-webkit-mask-image: radial-gradient(ellipse 90% 70% at 50% 0%, black 30%, transparent 75%);
60+
mask-image: radial-gradient(ellipse 90% 70% at 50% 0%, black 30%, transparent 75%);
61+
}
62+
.panel {
63+
background: linear-gradient(180deg, rgba(17, 20, 28, 0.85), rgba(9, 11, 16, 0.9));
64+
border: 1px solid var(--border-subtle);
65+
}
66+
.panel-glow {
67+
box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.08), 0 20px 80px -20px rgba(34, 211, 238, 0.15),
68+
0 40px 120px -40px rgba(56, 189, 248, 0.2);
69+
}
70+
.noise-overlay::after {
71+
content: '';
72+
position: absolute;
73+
inset: 0;
74+
pointer-events: none;
75+
opacity: 0.035;
76+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
77+
}
78+
3879
/* === Animations === */
3980
.fade-in {
4081
opacity: 0; transform: translateY(16px);
@@ -49,13 +90,44 @@ img { max-width: 100%; display: block; }
4990
from { opacity: 0; transform: translateY(-10px); }
5091
to { opacity: 1; transform: translateY(0); }
5192
}
93+
.caret-blink { animation: caret 1s steps(1) infinite; }
94+
.animate-marquee { animation: marquee 36s linear infinite; }
95+
.animate-marquee-reverse { animation: marquee-reverse 42s linear infinite; }
96+
.animate-float-slow { animation: float-slow 9s ease-in-out infinite; }
97+
.animate-pulse-dot { animation: pulse-dot 2s ease-in-out infinite; }
98+
.animate-scanline { animation: scanline 7s linear infinite; }
99+
@keyframes caret {
100+
0%, 49% { opacity: 1; }
101+
50%, 100% { opacity: 0; }
102+
}
103+
@keyframes marquee {
104+
from { transform: translateX(0); }
105+
to { transform: translateX(-50%); }
106+
}
107+
@keyframes marquee-reverse {
108+
from { transform: translateX(-50%); }
109+
to { transform: translateX(0); }
110+
}
111+
@keyframes float-slow {
112+
0%, 100% { transform: translateY(0px); }
113+
50% { transform: translateY(-14px); }
114+
}
115+
@keyframes pulse-dot {
116+
0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.5); }
117+
50% { opacity: 0.7; box-shadow: 0 0 0 6px rgba(74, 222, 128, 0); }
118+
}
119+
@keyframes scanline {
120+
0% { transform: translateY(-100%); }
121+
100% { transform: translateY(400%); }
122+
}
52123

53124
/* === Responsive === */
54125
@media (max-width: 768px) {
55126
.hero { padding: 60px 0 48px; }
56127
.hero h1 { letter-spacing: -1.6px; }
57128
.hero p { font-size: 17px; }
58129
.section { padding: 48px 0; }
130+
.nav-links a:not(.nav-cta) { display: none; }
59131
}
60132
@media (max-width: 480px) {
61133
.hero h1 { letter-spacing: -1.2px; }

css/buttons.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
background: var(--accent); color: #000;
1010
box-shadow: 0 0 20px var(--accent-glow);
1111
}
12-
.btn-primary:hover { background: #7dd3fc; color: #000; }
12+
.btn-primary:hover { background: var(--accent-hover); color: #000; }
1313
.btn-secondary {
1414
background: transparent; color: var(--text-secondary);
1515
border: 1px solid var(--border-card);

css/hero.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
}
1111
.hero-badge {
1212
display: inline-flex; align-items: center; gap: 6px;
13-
background: var(--accent-subtle); border: 1px solid rgba(56,189,248,0.2);
13+
background: var(--accent-subtle); border: 1px solid rgba(34,211,238,0.2);
1414
color: var(--accent); padding: 4px 14px; border-radius: 999px;
1515
font-size: 13px; font-weight: 500; margin-bottom: 28px;
1616
}

css/tokens.css

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
/* === Design Tokens === */
22
:root {
3-
--bg-primary: #0a0a0b;
4-
--bg-secondary: #111113;
5-
--bg-card: #16161a;
3+
--bg-primary: #050507;
4+
--bg-secondary: #09090b;
5+
--bg-card: #11141c;
66
--bg-code: #0d0d10;
7-
--border-subtle: rgba(255,255,255,0.06);
8-
--border-card: rgba(255,255,255,0.08);
9-
--text-primary: #ededef;
10-
--text-secondary: #9b9ba3;
7+
--border-subtle: rgba(148, 163, 184, 0.12);
8+
--border-card: rgba(148, 163, 184, 0.18);
9+
--text-primary: #fafafa;
10+
--text-secondary: #9f9fa9;
1111
--text-tertiary: #6b6b75;
12-
--accent: #38bdf8;
13-
--accent-glow: rgba(56, 189, 248, 0.12);
14-
--accent-subtle: rgba(56, 189, 248, 0.08);
15-
--green: #3dd68c;
16-
--green-subtle: rgba(61, 214, 140, 0.1);
12+
--accent: #22d3ee;
13+
--accent-hover: #67e8f9;
14+
--accent-glow: rgba(34, 211, 238, 0.12);
15+
--accent-subtle: rgba(34, 211, 238, 0.08);
16+
--green: #4ade80;
17+
--green-subtle: rgba(74, 222, 128, 0.1);
1718
--yellow: #f5d90a;
1819
--purple: #8b5cf6;
1920
--purple-subtle: rgba(139, 92, 246, 0.1);
2021
--radius-sm: 6px;
2122
--radius-md: 8px;
2223
--radius-lg: 12px;
23-
--font-sans: 'Outfit', system-ui, -apple-system, sans-serif;
24+
--font-sans: 'Space Grotesk', system-ui, -apple-system, sans-serif;
2425
--font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
2526
--max-width: 1100px;
2627
}

fonts/Outfit-300.ttf

-46.7 KB
Binary file not shown.

fonts/Outfit-400.ttf

-46.7 KB
Binary file not shown.

fonts/Outfit-500.ttf

-46.7 KB
Binary file not shown.

fonts/Outfit-600.ttf

-47.3 KB
Binary file not shown.

fonts/Outfit-700.ttf

-47.2 KB
Binary file not shown.

0 commit comments

Comments
 (0)