Polish homepage design and mobile layout

This commit is contained in:
Zebratic
2026-07-06 05:23:19 +00:00
parent a7e9a90664
commit ec05bfb757
9 changed files with 447 additions and 224 deletions
+354 -102
View File
@@ -1,8 +1,9 @@
/* bonzi homepage portfolio, monochrome, terminal accent */
/* bonzi homepage - portfolio, monochrome, terminal accent */
:root {
--bg: #000;
--bg-raised: #0a0a0a;
--bg: #020202;
--bg-raised: #0b0b0a;
--bg-soft: #10100e;
--fg: #e6e6e6;
--fg-2: #a0a0a0;
--dim: #6b6b6b;
@@ -10,6 +11,7 @@
--line: #1c1c1c;
--line-2: #2a2a2a;
--accent: #ffffff;
--glow: rgba(108, 255, 108, 0.08);
--green: #6cff6c;
--green-soft: #3a8a3a;
--warn: #ffcb6c;
@@ -44,6 +46,19 @@ html, body {
overflow-x: hidden;
}
body::before {
content: '';
position: fixed;
inset: 0;
pointer-events: none;
z-index: 0;
background:
radial-gradient(circle at 78% 12%, var(--glow), transparent 26rem),
linear-gradient(115deg, transparent 0 42%, rgba(255,255,255,0.018) 42% 42.2%, transparent 42.2% 100%);
}
body > *:not(.scanlines):not(.grain) { position: relative; z-index: 1; }
::selection { background: var(--fg); color: var(--bg); }
code, kbd, .mono {
@@ -163,29 +178,23 @@ main { padding: 0; }
}
.section-head {
display: grid;
grid-template-columns: auto 1fr;
grid-template-columns: 1fr;
align-items: baseline;
column-gap: 18px;
row-gap: 4px;
row-gap: 8px;
margin-bottom: 48px;
padding-bottom: 18px;
border-bottom: 1px solid var(--line);
}
.section-head h2 {
font-family: 'Inter', sans-serif;
font-weight: 600;
font-size: clamp(20px, 2.4vw, 26px);
letter-spacing: -0.02em;
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-weight: 700;
font-size: clamp(25px, 3.6vw, 42px);
line-height: 1.02;
letter-spacing: -0.045em;
color: var(--fg);
}
.section-num {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--green);
letter-spacing: 0.05em;
}
.section-sub {
grid-column: 2;
grid-column: 1;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--dim);
@@ -234,7 +243,7 @@ main { padding: 0; }
}
.name {
font-family: 'Inter', sans-serif;
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-weight: 700;
font-size: clamp(2.6rem, 7vw, 5.2rem);
line-height: 0.95;
@@ -329,49 +338,81 @@ main { padding: 0; }
/* ── Portrait ──────────────────────────────────────────── */
.portrait {
position: relative;
display: block;
display: grid;
text-decoration: none;
}
.portrait img {
width: 100%;
max-width: 420px;
width: min(100%, 420px);
aspect-ratio: 1 / 1;
object-fit: cover;
filter: grayscale(100%) contrast(1.05);
border: 1px solid var(--line);
background: var(--bg-raised);
overflow: visible;
}
.portrait img {
position: relative;
z-index: 1;
width: 100%;
height: 100%;
object-fit: cover;
object-position: 50% 50%;
filter: grayscale(100%) contrast(1.05);
display: block;
border: 1px solid var(--line);
background: var(--bg-raised);
transition: filter 0.25s ease, border-color 0.25s ease;
}
.portrait:hover img {
filter: grayscale(80%) contrast(1.05);
}
.portrait:hover {
border-color: var(--green-soft);
}
.portrait-grid {
position: absolute;
inset: 0;
z-index: 2;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: repeat(2, 1fr);
pointer-events: none;
opacity: 0.82;
}
.portrait-grid span {
border-color: color-mix(in oklab, var(--fg) 16%, transparent);
border-style: solid;
border-width: 0;
}
.portrait-grid span:nth-child(1) { border-right-width: 1px; border-bottom-width: 1px; }
.portrait-grid span:nth-child(2) { border-bottom-width: 1px; }
.portrait-grid span:nth-child(3) { border-right-width: 1px; }
.portrait::before,
.portrait::after {
content: '';
position: absolute;
width: 14px;
height: 14px;
width: 58px;
height: 58px;
border-color: var(--green);
border-style: solid;
border-width: 0;
opacity: 0.7;
transition: opacity 0.2s ease;
opacity: 0.9;
z-index: 4;
pointer-events: none;
transition: opacity 0.2s ease, transform 0.2s ease;
}
.portrait::before {
top: -6px; left: -6px;
border-top-width: 1px;
border-left-width: 1px;
top: -12px; left: -12px;
border-top-width: 2px;
border-left-width: 2px;
}
.portrait::after {
bottom: -6px; right: -6px;
border-bottom-width: 1px;
border-right-width: 1px;
bottom: -12px; right: -12px;
border-bottom-width: 2px;
border-right-width: 2px;
}
.portrait:hover::before,
.portrait:hover::after { opacity: 1; }
.portrait:hover::after { opacity: 1; transform: scale(1.04); }
.portrait-corner {
display: none;
}
.portrait-tag {
position: absolute;
@@ -394,6 +435,24 @@ main { padding: 0; }
transform: translateY(0);
}
.section-image {
max-width: var(--max);
margin: -24px auto 0;
padding: 0 var(--gutter) clamp(56px, 8vw, 92px);
display: flex;
justify-content: center;
border-top: 1px solid var(--line);
}
.section-image img {
width: min(58vw, 340px);
height: auto;
aspect-ratio: 1 / 1;
object-fit: contain;
filter: grayscale(100%) contrast(1.08) drop-shadow(0 20px 38px rgba(0,0,0,0.62));
border: none;
background: transparent;
}
/* ── Prose ─────────────────────────────────────────────── */
.prose p {
font-size: clamp(15px, 1.3vw, 17px);
@@ -407,34 +466,36 @@ main { padding: 0; }
/* ── Capabilities / Work ───────────────────────────────── */
.caps {
list-style: none;
counter-reset: capability;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1px;
background: var(--line);
gap: 12px;
background: transparent;
border: 1px solid var(--line);
padding: 12px;
}
.cap {
display: grid;
grid-template-columns: 44px 1fr;
gap: 8px;
align-items: start;
counter-increment: capability;
display: block;
padding: 24px 22px;
background: var(--bg);
transition: background 0.2s ease;
background: linear-gradient(180deg, color-mix(in oklab, var(--bg-soft) 86%, transparent), var(--bg));
border: 1px solid var(--line);
transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}
.cap:hover { background: var(--bg-raised); }
.cap-num {
.cap:hover { background: var(--bg-raised); border-color: var(--line-2); transform: translateY(-1px); }
.cap::before {
content: counter(capability, decimal-leading-zero);
display: block;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 500;
font-size: 11px;
color: var(--green);
margin-top: 3px;
letter-spacing: 0.05em;
letter-spacing: 0.08em;
margin-bottom: 12px;
}
.cap h3 {
font-family: 'Inter', sans-serif;
font-weight: 600;
font-size: 15px;
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-weight: 700;
font-size: 17px;
color: var(--fg);
margin-bottom: 6px;
letter-spacing: -0.01em;
@@ -449,16 +510,18 @@ main { padding: 0; }
.stack-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1px;
background: var(--line);
gap: 12px;
background: transparent;
border: 1px solid var(--line);
padding: 12px;
}
.stack-col {
background: var(--bg);
background: linear-gradient(180deg, var(--bg-raised), var(--bg));
border: 1px solid var(--line);
padding: 22px 22px 26px;
transition: background 0.2s ease;
transition: background 0.2s ease, border-color 0.2s ease;
}
.stack-col:hover { background: var(--bg-raised); }
.stack-col:hover { background: var(--bg-soft); border-color: var(--line-2); }
.stack-cat {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
@@ -500,9 +563,10 @@ main { padding: 0; }
list-style: none;
display: flex;
flex-direction: column;
gap: 1px;
background: var(--line);
gap: 10px;
background: transparent;
border: 1px solid var(--line);
padding: 10px;
}
.now-list li {
display: grid;
@@ -510,14 +574,15 @@ main { padding: 0; }
gap: 18px;
align-items: start;
padding: 20px 22px;
background: var(--bg);
transition: background 0.2s ease;
background: linear-gradient(180deg, var(--bg-raised), var(--bg));
border: 1px solid var(--line);
transition: background 0.2s ease, border-color 0.2s ease;
}
.now-list li:hover { background: var(--bg-raised); }
.now-list li:hover { background: var(--bg-soft); border-color: var(--line-2); }
.now-list h3 {
font-family: 'Inter', sans-serif;
font-weight: 600;
font-size: 15px;
font-family: 'Space Grotesk', 'Inter', sans-serif;
font-weight: 700;
font-size: 17px;
color: var(--fg);
margin-bottom: 4px;
letter-spacing: -0.01em;
@@ -551,12 +616,11 @@ main { padding: 0; }
}
.principles li {
counter-increment: principle;
display: grid;
grid-template-columns: 56px 1fr;
display: block;
align-items: baseline;
gap: 8px;
padding: 18px 0;
padding: 18px 0 18px 24px;
border-bottom: 1px solid var(--line);
border-left: 1px solid var(--line-2);
font-size: clamp(15px, 1.3vw, 17px);
line-height: 1.6;
color: var(--fg-2);
@@ -565,11 +629,12 @@ main { padding: 0; }
.principles li:last-child { border-bottom: none; padding-bottom: 0; }
.principles li::before {
content: counter(principle, decimal-leading-zero);
display: block;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-size: 11px;
color: var(--green);
font-weight: 500;
letter-spacing: 0.05em;
letter-spacing: 0.08em;
margin-bottom: 6px;
}
/* ── Links ─────────────────────────────────────────────── */
@@ -577,9 +642,10 @@ main { padding: 0; }
list-style: none;
display: flex;
flex-direction: column;
gap: 1px;
background: var(--line);
gap: 10px;
background: transparent;
border: 1px solid var(--line);
padding: 10px;
}
.links li {
display: grid;
@@ -587,10 +653,11 @@ main { padding: 0; }
gap: 12px;
align-items: baseline;
padding: 18px 22px;
background: var(--bg);
transition: background 0.2s ease;
background: var(--bg-raised);
border: 1px solid var(--line);
transition: background 0.2s ease, border-color 0.2s ease;
}
.links li:hover { background: var(--bg-raised); }
.links li:hover { background: var(--bg-soft); border-color: var(--line-2); }
.links .arrow {
color: var(--dim);
font-family: 'JetBrains Mono', monospace;
@@ -616,18 +683,31 @@ main { padding: 0; }
.footer {
max-width: var(--max);
margin: 0 auto;
padding: 48px var(--gutter) 64px;
padding: 28px var(--gutter) 40px;
border-top: 1px solid var(--line);
background: linear-gradient(180deg, transparent, rgba(255,255,255,0.015));
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--dim);
display: grid;
grid-template-columns: 1fr 1fr;
align-items: start;
gap: 16px 24px;
}
.footer p { display: flex; align-items: center; gap: 8px; margin: 0; line-height: 1.55; }
.footer .dim { color: var(--dim-2); }
.footer .mark { color: var(--green); }
.footer-brand,
.footer-meta {
display: flex;
flex-direction: column;
gap: 8px;
}
.footer p { display: flex; align-items: center; gap: 8px; }
.footer .dim { color: var(--dim-2); }
.footer .mark { color: var(--green); }
.footer-brand { color: var(--fg-2); }
.footer-meta { align-items: flex-end; text-align: right; }
.footer-signal { color: var(--dim); }
.footer a { color: var(--fg-2); text-decoration: none; border-bottom: 1px dashed var(--dim); }
.footer a:hover { color: var(--green); border-bottom-color: var(--green); }
/* ── Reveal on scroll ──────────────────────────────────── */
[data-reveal] {
@@ -655,34 +735,206 @@ a:focus-visible,
[data-reveal] { opacity: 1; transform: none; transition: none; }
}
/* ── Responsive ────────────────────────────────────────── */
@media (max-width: 820px) {
.hero {
grid-template-columns: 1fr;
gap: 48px;
text-align: left;
}
.portrait { order: -1; max-width: 280px; }
/* Responsive */
.email,
.stats a,
.links a {
overflow-wrap: anywhere;
word-break: break-word;
}
.email {
font-family: 'JetBrains Mono', monospace;
color: var(--fg);
}
@media (max-width: 820px) {
:root { --gutter: clamp(16px, 5vw, 24px); }
.topbar {
position: sticky;
align-items: flex-start;
gap: 14px;
padding: 14px var(--gutter) 12px;
}
.brand {
flex-shrink: 0;
padding-top: 2px;
}
.nav { display: none; }
.topbar { padding: 14px var(--gutter); }
.brand .wordmark { font-size: 14px; }
.brand .role-tag { font-size: 9px; padding: 2px 5px; }
.stats { grid-template-columns: 1fr; }
.stats > div { border-right: none; border-bottom: 1px solid var(--line); padding: 12px 0; }
.stats > div:last-child { border-bottom: none; }
.nav {
display: flex;
flex: 1;
gap: 14px;
overflow-x: auto;
overflow-y: hidden;
padding: 2px 0 8px;
scrollbar-width: none;
-webkit-overflow-scrolling: touch;
}
.nav::-webkit-scrollbar { display: none; }
.nav a {
flex: 0 0 auto;
min-height: 32px;
display: inline-flex;
align-items: center;
font-size: 11.5px;
}
.hero {
grid-template-columns: 1fr;
gap: 30px;
text-align: left;
min-height: auto;
padding-top: clamp(34px, 9vw, 56px);
padding-bottom: 48px;
}
.portrait {
order: -1;
width: min(62vw, 272px);
max-width: 272px;
justify-self: center;
margin: 8px auto 0;
}
.name {
font-size: clamp(2.5rem, 17vw, 4.4rem);
margin-bottom: 20px;
}
.name .last {
font-size: clamp(0.62rem, 2.6vw, 0.78rem);
line-height: 1.45;
letter-spacing: 0.05em;
}
.lede {
font-size: 15.5px;
margin-bottom: 24px;
}
.cta-row { margin-bottom: 26px; }
.stats {
grid-template-columns: 1fr;
border: 1px solid var(--line);
}
.stats > div {
border-right: none;
border-bottom: 1px solid var(--line);
padding: 14px 16px;
}
.stats > div:last-child { border-bottom: none; padding-right: 16px; }
.section {
padding-top: clamp(50px, 13vw, 72px);
padding-bottom: clamp(50px, 13vw, 72px);
}
}
@media (max-width: 540px) {
html, body { font-size: 15px; }
.caps { grid-template-columns: 1fr; }
.topbar {
flex-direction: column;
align-items: stretch;
}
.nav {
margin-inline: calc(var(--gutter) * -1);
padding-inline: var(--gutter);
border-top: 1px solid var(--line);
}
.eyebrow { margin-bottom: 18px; }
.hero { padding-top: 28px; }
.portrait {
width: min(78vw, 260px);
max-width: 260px;
}
.cta-row {
display: grid;
grid-template-columns: 1fr;
}
.btn {
justify-content: center;
min-height: 46px;
padding: 12px 16px;
}
.caps,
.stack-grid { grid-template-columns: 1fr; }
.now-list li { grid-template-columns: 1fr; gap: 10px; }
.cap {
grid-template-columns: 36px 1fr;
padding: 20px 18px;
}
.cap p,
.now-list p { font-size: 13.25px; }
.now-list li {
grid-template-columns: 1fr;
gap: 10px;
padding: 18px;
}
.now-mark { justify-self: start; }
.links li { grid-template-columns: 20px 1fr; }
.links .link-desc { grid-column: 1 / -1; margin-left: 32px; }
.principles li { grid-template-columns: 40px 1fr; }
.section-head { grid-template-columns: 1fr; gap: 6px; }
.links li {
grid-template-columns: 20px 1fr;
gap: 10px;
padding: 17px 16px;
}
.links .link-desc {
grid-column: 2;
margin-left: 0;
line-height: 1.45;
}
.principles li {
padding-left: 16px;
}
.section-head {
grid-template-columns: 1fr;
gap: 6px;
margin-bottom: 30px;
}
.section-sub { grid-column: 1; }
.footer p {
align-items: flex-start;
flex-wrap: wrap;
}
.footer {
grid-template-columns: 1fr;
gap: 18px;
padding-bottom: 32px;
}
.footer-brand,
.footer-meta {
align-items: flex-start;
text-align: left;
}
.footer-meta p {
max-width: 100%;
}
.section-image {
margin-top: -18px;
padding-bottom: 56px;
}
.section-image img {
width: min(82vw, 300px);
}
}
@media (max-width: 380px) {
.role-tag { display: none; }
.cap { grid-template-columns: 1fr; }
.links li { grid-template-columns: 1fr; }
.links .arrow { display: none; }
.links .link-desc { grid-column: 1; }
}