change theme and cleanup added favicon

This commit is contained in:
will
2026-04-03 16:45:28 +01:00
parent 4020cb239c
commit 6ed27569d6
15 changed files with 538 additions and 564 deletions

View File

@@ -7,18 +7,23 @@
--font-geist-sans: 'Geist', system-ui, sans-serif;
--font-geist-mono: 'Geist Mono', monospace;
--bg: #070707;
--s1: #0f0f0f;
--s2: #161616;
--s3: #1e1e1e;
--s4: #262626;
/* Light base */
--bg: #f9fafb;
--border: rgba(255,255,255,0.07);
--border-h: rgba(255,255,255,0.14);
/* Light surface steps (for shadows / borders if needed) */
--s1: #ffffff;
--s2: #f3f4f6;
--s3: #e5e7eb;
--s4: #d1d5db;
--text: #f0f0f0;
--muted: #888;
--faint: #3d3d3d;
/* Borders tuned for light theme */
--border: rgba(15,23,42,0.08);
--border-h: rgba(15,23,42,0.16);
/* Dark text on light bg */
--text: #020617; /* almost black */
--muted: #6b7280; /* slate-500 */
--faint: #e5e7eb; /* light divider */
--tr: 180ms cubic-bezier(.16,1,.3,1);
--tr-slow: 320ms cubic-bezier(.16,1,.3,1);
@@ -44,10 +49,10 @@ body {
min-height: 100dvh;
}
::selection { background: rgba(255,255,255,0.12); color: #fff; }
::selection { background: rgba(15,23,42,0.12); color: #000; }
:focus-visible {
outline: 1.5px solid rgba(255,255,255,0.5);
outline: 1.5px solid rgba(15,23,42,0.4);
outline-offset: 3px;
border-radius: 4px;
}
@@ -56,27 +61,25 @@ body {
*, *::before, *::after { animation-duration:.01ms!important; transition-duration:.01ms!important; }
}
/* ── GLASS CARD ── */
/* ── GLASS CARD (light, for all elements using .glass) ── */
.glass {
background: rgba(255,255,255,0.025);
backdrop-filter: blur(20px) saturate(150%);
-webkit-backdrop-filter: blur(20px) saturate(150%);
background: rgba(255,255,255,0.78);
backdrop-filter: blur(20px) saturate(140%);
-webkit-backdrop-filter: blur(20px) saturate(140%);
border: 1px solid var(--border);
box-shadow:
0 0 0 1px rgba(0,0,0,0.6),
0 8px 32px rgba(0,0,0,0.5),
0 32px 80px rgba(0,0,0,0.3),
inset 0 1px 0 rgba(255,255,255,0.06);
0 0 0 1px rgba(15,23,42,0.02),
0 10px 30px rgba(15,23,42,0.08),
inset 0 1px 0 rgba(255,255,255,0.9);
border-radius: 16px;
}
.glass:hover {
border-color: var(--border-h);
box-shadow:
0 0 0 1px rgba(0,0,0,0.6),
0 12px 40px rgba(0,0,0,0.55),
0 40px 100px rgba(0,0,0,0.35),
inset 0 1px 0 rgba(255,255,255,0.08);
0 0 0 1px rgba(15,23,42,0.03),
0 14px 40px rgba(15,23,42,0.13),
inset 0 1px 0 rgba(255,255,255,1);
}
/* ── NOISE TEXTURE (hero) ── */
@@ -88,17 +91,17 @@ body {
content: '';
position: absolute;
inset: 0;
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='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");
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='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
background-repeat: repeat;
background-size: 256px 256px;
pointer-events: none;
z-index: 0;
opacity: .6;
opacity: .45;
}
/* ── DOT GRID BG ── */
.dot-grid {
background-image: radial-gradient(circle, rgba(255,255,255,0.08) 1px, transparent 1px);
background-image: radial-gradient(circle, rgba(15,23,42,0.06) 1px, transparent 1px);
background-size: 32px 32px;
}
@@ -111,7 +114,7 @@ body {
font-weight: 600;
letter-spacing: .1em;
text-transform: uppercase;
color: rgba(255,255,255,0.35);
color: rgba(15,23,42,0.55);
margin-bottom: 16px;
}
.label::before {
@@ -119,7 +122,7 @@ body {
display: block;
width: 18px;
height: 1px;
background: rgba(255,255,255,0.3);
background: rgba(15,23,42,0.35);
}
/* ── SKELETON ── */
@@ -153,20 +156,28 @@ body {
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn-primary {
background: rgba(255,255,255,0.95); color: #000;
border-color: rgba(255,255,255,0.2);
box-shadow: 0 4px 20px rgba(255,255,255,0.08);
background: #020617;
color: #f9fafb;
border-color: rgba(15,23,42,0.3);
box-shadow: 0 4px 20px rgba(15,23,42,0.15);
}
.btn-primary:hover {
background: #fff;
box-shadow: 0 6px 28px rgba(255,255,255,0.14);
background: #000;
box-shadow: 0 6px 26px rgba(15,23,42,0.22);
}
.btn-ghost {
background: rgba(255,255,255,0.04); color: var(--muted);
background: rgba(255,255,255,0.75);
color: var(--muted);
border-color: var(--border);
}
.btn-ghost:hover { background: rgba(255,255,255,0.07); color: var(--text); border-color: var(--border-h); }
.btn-ghost:hover {
background: #ffffff;
color: var(--text);
border-color: var(--border-h);
}
/* ── CALENDAR CELLS ── */
.cal-cell {
@@ -189,62 +200,3 @@ body {
background: var(--faint);
}
.commit-line:last-child::before { display: none; }
.prose {
--tw-prose-body: rgba(226, 232, 240, 0.88); /* text-slate-200 */
--tw-prose-headings: #e5e7eb; /* text-slate-200 */
--tw-prose-links: #e5e7eb;
--tw-prose-links-hover: #ffffff;
--tw-prose-quotes: #e5e7eb;
--tw-prose-bold: #e5e7eb;
--tw-prose-bullets: rgba(148, 163, 184, 0.7);
--tw-prose-hr: rgba(148, 163, 184, 0.25);
--tw-prose-th-borders: rgba(148, 163, 184, 0.4);
--tw-prose-td-borders: rgba(148, 163, 184, 0.2);
}
.prose.prose-invert {
color: var(--tw-prose-body);
}
.prose.prose-invert h1,
.prose.prose-invert h2,
.prose.prose-invert h3,
.prose.prose-invert h4 {
letter-spacing: -0.02em;
}
.prose.prose-invert a {
text-decoration: none;
border-bottom: 1px dotted rgba(148, 163, 184, 0.6);
}
.prose.prose-invert a:hover {
border-bottom-style: solid;
border-bottom-color: rgba(248, 250, 252, 0.9);
}
.prose.prose-invert code {
font-size: 0.8rem;
background: rgba(15, 23, 42, 0.9);
border-radius: 0.35rem;
padding: 0.1rem 0.3rem;
}
.prose.prose-invert pre {
background: radial-gradient(circle at top left, #020617, #020617);
border-radius: 0.75rem;
border: 1px solid rgba(148, 163, 184, 0.25);
padding: 0.9rem 1rem;
}
.prose.prose-invert pre code {
background: transparent;
padding: 0;
}
.prose.prose-invert ul,
.prose.prose-invert ol {
margin-top: 0.75rem;
margin-bottom: 0.75rem;
}

View File

@@ -2,10 +2,9 @@ import type { Metadata } from 'next';
import { GeistSans } from 'geist/font/sans';
import { GeistMono } from 'geist/font/mono';
import './globals.css';
import TechBackdrop from './TechBackdrop';
export const metadata: Metadata = {
title: 'William March — Software Engineer',
title: 'williammarch.xyz',
description: 'Software engineer building precise, purposeful open-source tools.',
metadataBase: new URL('https://williammarch.xyz'),
openGraph: {
@@ -24,9 +23,8 @@ export const metadata: Metadata = {
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en" className={`${GeistSans.variable} ${GeistMono.variable}`}>
<body className="bg-slate-950 text-slate-100 relative overflow-x-hidden">
<body className="white text-slate-100 relative overflow-x-hidden">
<div aria-hidden="true" className="fixed inset-0 -z-10">
<TechBackdrop />
</div>
<div className="relative">
{children}

View File

@@ -1,4 +1,3 @@
import Nav from '@/components/Nav';
import About from '@/components/About';
import Projects from '@/components/Projects';
import CommitSection from '@/components/CommitSection';
@@ -13,7 +12,6 @@ export default function Page() {
focus:text-sm focus:font-semibold">
Skip to main content
</a>
<Nav />
<main id="main">
<About />
<Projects />