316 lines
12 KiB
HTML
316 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Walusimbi Silver</title>
|
|
<meta name="description" content="Silver Walusimbi — Full Stack Developer. Links, projects, and ways to connect.">
|
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='64' height='64' viewBox='0 0 64 64'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%230a0a0a'/%3E%3Cstop offset='1' stop-color='%231a1a1a'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='64' height='64' rx='14' fill='url(%23g)'/%3E%3Crect x='2.5' y='2.5' width='59' height='59' rx='12' fill='none' stroke='%232b2b2b'/%3E%3Ctext x='50%25' y='53%25' text-anchor='middle' dominant-baseline='middle' font-family='Instrument%20Serif,%20Georgia,%20serif' font-size='38' font-weight='600' fill='%23d3c3ad' stroke='%236b5b49' stroke-width='1' paint-order='stroke'%3ES%3C/text%3E%3C/svg%3E">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Instrument+Serif&family=DM+Sans:wght@400;500&display=swap" rel="stylesheet">
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
|
|
:root {
|
|
--bg: #0a0a0a;
|
|
--surface: #141414;
|
|
--surface-hover: #1a1a1a;
|
|
--border: #222;
|
|
--border-hover: #333;
|
|
--text: #e8e8e8;
|
|
--text-muted: #666;
|
|
--accent: #c8b8a2;
|
|
}
|
|
|
|
body {
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
font-family: 'DM Sans', sans-serif;
|
|
min-height: 100vh;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 2rem 1.5rem;
|
|
position: relative;
|
|
overflow-x: hidden;
|
|
}
|
|
|
|
/* subtle grain texture */
|
|
body::before {
|
|
content: '';
|
|
position: fixed;
|
|
inset: 0;
|
|
opacity: 0.03;
|
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
|
|
pointer-events: none;
|
|
z-index: 0;
|
|
}
|
|
|
|
.container {
|
|
width: 100%;
|
|
max-width: 420px;
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
/* ── Header ── */
|
|
.header {
|
|
text-align: center;
|
|
margin-bottom: 3rem;
|
|
animation: fadeUp 0.8s ease both;
|
|
}
|
|
|
|
.avatar {
|
|
width: 88px;
|
|
height: 88px;
|
|
border-radius: 50%;
|
|
border: 1px solid var(--border);
|
|
margin: 0 auto 1.5rem;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.avatar img {
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: cover;
|
|
object-position: center 20%;
|
|
transform: scale(1.4);
|
|
transform-origin: center 20%;
|
|
}
|
|
|
|
.name {
|
|
font-family: 'Instrument Serif', serif;
|
|
font-size: 2rem;
|
|
font-weight: 400;
|
|
letter-spacing: -0.03em;
|
|
margin-bottom: 0.5rem;
|
|
color: var(--text);
|
|
}
|
|
|
|
.tagline {
|
|
font-size: 0.875rem;
|
|
color: var(--text-muted);
|
|
font-weight: 400;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
|
|
.divider {
|
|
width: 32px;
|
|
height: 1px;
|
|
background: var(--border);
|
|
margin: 1.25rem auto 0;
|
|
}
|
|
|
|
/* ── Links ── */
|
|
.links {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.625rem;
|
|
}
|
|
|
|
.link {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 1rem;
|
|
padding: 1rem 1.25rem;
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: 12px;
|
|
text-decoration: none;
|
|
color: var(--text);
|
|
transition: all 0.3s cubic-bezier(0.22, 1, 0.36, 1);
|
|
animation: fadeUp 0.8s ease both;
|
|
}
|
|
|
|
.link:nth-child(1) { animation-delay: 0.1s; }
|
|
.link:nth-child(2) { animation-delay: 0.15s; }
|
|
.link:nth-child(3) { animation-delay: 0.2s; }
|
|
.link:nth-child(4) { animation-delay: 0.25s; }
|
|
.link:nth-child(5) { animation-delay: 0.3s; }
|
|
.link:nth-child(6) { animation-delay: 0.35s; }
|
|
|
|
.link:hover {
|
|
background: var(--surface-hover);
|
|
border-color: var(--border-hover);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.link:active {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.link-icon {
|
|
width: 20px;
|
|
height: 20px;
|
|
flex-shrink: 0;
|
|
opacity: 0.5;
|
|
transition: opacity 0.3s ease;
|
|
}
|
|
|
|
.link:hover .link-icon {
|
|
opacity: 0.85;
|
|
}
|
|
|
|
.link-content {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
|
|
.link-title {
|
|
font-size: 0.9375rem;
|
|
font-weight: 500;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.link-desc {
|
|
font-size: 0.75rem;
|
|
color: var(--text-muted);
|
|
margin-top: 0.125rem;
|
|
}
|
|
|
|
.link-arrow {
|
|
opacity: 0;
|
|
transform: translateX(-4px);
|
|
transition: all 0.3s ease;
|
|
color: var(--text-muted);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.link:hover .link-arrow {
|
|
opacity: 0.5;
|
|
transform: translateX(0);
|
|
}
|
|
|
|
/* ── Footer ── */
|
|
.footer {
|
|
text-align: center;
|
|
margin-top: 3rem;
|
|
animation: fadeUp 0.8s ease 0.45s both;
|
|
}
|
|
|
|
.footer-text {
|
|
font-size: 0.6875rem;
|
|
color: var(--text-muted);
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.location {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.375rem;
|
|
}
|
|
|
|
.location-dot {
|
|
width: 4px;
|
|
height: 4px;
|
|
border-radius: 50%;
|
|
background: #4a7;
|
|
animation: pulse 3s ease-in-out infinite;
|
|
}
|
|
|
|
/* ── Animations ── */
|
|
@keyframes fadeUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(16px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse {
|
|
0%, 100% { opacity: 0.4; }
|
|
50% { opacity: 1; }
|
|
}
|
|
|
|
/* ── Mobile refinements ── */
|
|
@media (max-width: 480px) {
|
|
body { padding: 1.5rem 1rem; }
|
|
.name { font-size: 1.75rem; }
|
|
.link { padding: 0.875rem 1rem; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<header class="header">
|
|
<div class="avatar"><img src="pic.jpeg" alt="Silver Walusimbi"></div>
|
|
<h1 class="name">Walusimbi Silver</h1>
|
|
<p class="tagline">Full Stack Developer</p>
|
|
<div class="divider"></div>
|
|
</header>
|
|
|
|
<nav class="links">
|
|
<a href="https://github.com/swalusimbi" target="_blank" rel="noopener" class="link">
|
|
<svg class="link-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
<path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0112 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"/>
|
|
</svg>
|
|
<div class="link-content">
|
|
<div class="link-title">GitHub</div>
|
|
<div class="link-desc">Open source & projects</div>
|
|
</div>
|
|
<span class="link-arrow">→</span>
|
|
</a>
|
|
|
|
<a href="https://linkedin.com/in/walusimbi-silver" target="_blank" rel="noopener" class="link">
|
|
<svg class="link-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
|
|
</svg>
|
|
<div class="link-content">
|
|
<div class="link-title">LinkedIn</div>
|
|
<div class="link-desc">Professional profile</div>
|
|
</div>
|
|
<span class="link-arrow">→</span>
|
|
</a>
|
|
|
|
<a href="https://silverwal.com" class="link" id="portfolio-link">
|
|
<svg class="link-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
<path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6zm-1 2l5 5h-5V4zM6 20V4h5v7h7v9H6z"/>
|
|
</svg>
|
|
<div class="link-content">
|
|
<div class="link-title">Portfolio</div>
|
|
<div class="link-desc">Experience & work</div>
|
|
</div>
|
|
<span class="link-arrow">→</span>
|
|
</a>
|
|
|
|
<a href="https://x.com/silva_walusimbi" target="_blank" rel="noopener" class="link">
|
|
<svg class="link-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>
|
|
</svg>
|
|
<div class="link-content">
|
|
<div class="link-title">X / Twitter</div>
|
|
<div class="link-desc">Thoughts & updates</div>
|
|
</div>
|
|
<span class="link-arrow">→</span>
|
|
</a>
|
|
|
|
<a href="mailto:walusilver@gmail.com" class="link">
|
|
<svg class="link-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
<path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/>
|
|
</svg>
|
|
<div class="link-content">
|
|
<div class="link-title">Email</div>
|
|
<div class="link-desc">Get in touch</div>
|
|
</div>
|
|
<span class="link-arrow">→</span>
|
|
</a>
|
|
</nav>
|
|
|
|
<footer class="footer">
|
|
<p class="footer-text">
|
|
<span class="location">
|
|
<span class="location-dot"></span>
|
|
Kampala, Uganda
|
|
</span>
|
|
</p>
|
|
</footer>
|
|
</div>
|
|
</body>
|
|
</html>
|