aboutsummaryrefslogtreecommitdiff
path: root/theme
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-03-11 00:06:50 -0500
committerChristian Cleberg <[email protected]>2026-03-11 00:06:50 -0500
commitcd0f20fa2de296b4da6308b4049f858c872d1b83 (patch)
treedb1669eeba1909311a2b32504c588191ee49d93c /theme
parent25ba3dc9c7369e586a8890a105cdbcd1b4f74697 (diff)
downloadcleberg.net-cd0f20fa2de296b4da6308b4049f858c872d1b83.tar.gz
cleberg.net-cd0f20fa2de296b4da6308b4049f858c872d1b83.tar.bz2
cleberg.net-cd0f20fa2de296b4da6308b4049f858c872d1b83.zip
Remove info-strip CSS, add footer flex layout, blockquote p margin fix
Diffstat (limited to 'theme')
-rw-r--r--theme/static/styles.css635
-rw-r--r--theme/static/tokens.css77
2 files changed, 561 insertions, 151 deletions
diff --git a/theme/static/styles.css b/theme/static/styles.css
index b379c51..b8c0abc 100644
--- a/theme/static/styles.css
+++ b/theme/static/styles.css
@@ -1,106 +1,141 @@
-/* --- Variables & System Logic --- */
-/* All tokens defined in tokens.css — import that first. */
@import url('tokens.css');
-/* --- Layout Architecture --- */
-* { box-sizing: border-box; }
+/* ============================================================
+ HOMEPAGE INTRO
+ ============================================================ */
+.homepage-intro {
+ max-width: var(--prose-w);
+ margin: 3rem 0;
+ margin-top: 1rem;
+ font-family: var(--font-serif);
+ font-size: var(--text-body);
+ line-height: var(--lh-body);
+}
+.homepage-intro p { margin-bottom: 1.1rem; }
+.homepage-intro p:first-child {
+ font-size: 0.9rem;
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ font-family: var(--font-sans);
+ color: var(--meta);
+ margin-bottom: 0.5rem;
+}
+.homepage-intro p:nth-child(2) {
+ font-size: 1.3rem;
+ font-weight: 700;
+ letter-spacing: -0.01em;
+ color: var(--fg);
+ margin-bottom: 1.5rem;
+}
+
+/* ============================================================
+ RESET & BASE
+ ============================================================ */
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
background: var(--bg);
color: var(--fg);
- font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;
- line-height: 1.6;
- max-width: var(--max-width);
- margin: 0 auto;
- padding: 2rem 1rem;
+ font-family: var(--font-sans);
+ font-size: var(--text-body);
+ line-height: var(--lh-body);
+ -webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
-/* --- Navigation & Footer --- */
-nav ul { list-style: none; padding: 0; display: flex; gap: 1rem; padding-bottom: 0.5rem; }
-nav a { text-transform: uppercase; font-weight: 900; text-decoration: none; }
-nav a:hover { background: var(--fg); color: var(--bg); }
-footer { padding-top: 1rem; font-size: 0.8rem; text-transform: uppercase; }
-
-/* --- Typography (Brutalist) --- */
-h1, h2, h3 { line-height: 1.1; margin-top: 2rem; font-weight: 900; text-transform: uppercase; }
-h1 { font-size: 2.2rem; margin-bottom: 1rem; }
-h2 { border-left: 10px solid var(--accent); padding-left: 0.75rem; }
-
-a { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
-a:hover { background: var(--accent); color: var(--bg); text-decoration: none; }
-
-/* --- Weblorg / Template Specifics --- */
-section b { font-size: 0.85rem; text-transform: uppercase; color: var(--meta); margin-top: 0.5rem; }
-.post { display: flex; align-items: center; border-bottom: 1px dashed var(--border); padding: 0.5rem 0; }
-.post time { font-size: 0.8rem; color: var(--meta); margin-right: 0.5rem; white-space: nowrap; flex-shrink: 0; }
-.metadata b { display: block; font-size: 0.7rem; }
-
-/* --- Org-Mode Tables (Heavy Grid) --- */
-table { width: 100%; border-collapse: collapse; margin: 2rem 0; border: 3px solid var(--fg); }
-th, td { border: 1px solid var(--fg); padding: 0.75rem; text-align: left; }
-th { background: var(--fg); color: var(--bg); text-transform: uppercase; font-size: 0.8rem; }
-
-/* --- Code & Pre blocks --- */
-pre { padding: 1rem; border: 1px solid var(--border); background: var(--code-bg); overflow-x: auto; }
-code { background: var(--code-bg); padding: 0.2rem 0.4rem; }
-
-/* Blockquote styling */
-blockquote {
- background-color: var(--code-bg);
- font-style: italic;
- margin: 1.5em 0;
- padding: 0;
+/* Full-bleed header — border and nav span 100vw */
+header {
+ width: 100%;
}
-blockquote p { margin: 0; }
-blockquote::before {
- content: "#+begin_quote";
- display: block;
- color: var(--fg);
+
+/* Centered content column */
+main,
+footer,
+header {
+ max-width: var(--outer-w);
+ margin: 0 auto;
+ padding-left: var(--pad);
+ padding-right: var(--pad);
}
+main { padding-bottom: 6rem; }
+footer { padding-bottom: 3rem; }
-blockquote::after {
- content: "#+end_quote";
- display: block;
- color: var(--fg);
+/* Prose constraint — applied to article/page body text only */
+.prose {
+ max-width: var(--prose-w);
}
-/* --- Accessibility & Efficiency --- */
-img { max-width: 100%; height: auto; filter: grayscale(1); }
-img:hover { filter: grayscale(0); }
+/* ============================================================
+ MASTHEAD
+ ============================================================ */
+.masthead {
+ border-top: 2px solid var(--fg);
+ padding-top: 1.5rem;
+ padding-bottom: 0;
+ padding-left: var(--pad);
+ padding-right: var(--pad);
+}
-/* --- Accessibility: Skip Link --- */
-.skip-link {
- position: absolute;
- top: -100px; /* Hide off-screen */
- left: 50%;
- transform: translateX(-50%);
- background: var(--fg);
- color: var(--bg);
- padding: 1rem 2rem;
- z-index: 999;
- font-weight: 900;
- text-transform: uppercase;
- border: 3px solid var(--accent);
- text-decoration: none;
- transition: top 0.2s ease-in-out;
+.masthead-title {
+ display: block;
+ font-family: var(--font-serif);
+ font-size: var(--text-display);
+ font-weight: 700;
+ line-height: var(--lh-display);
+ letter-spacing: -0.03em;
+ text-decoration: none;
+ color: var(--fg);
+ margin-bottom: 1.25rem;
}
+.masthead-title:hover { color: var(--accent); background: none; }
-/* Show the link when a user tabs to it */
-.skip-link:focus {
- top: 0;
- outline: none; /* We use the border and color change as the indicator */
+.masthead-subtitle {
+ font-family: var(--font-sans);
+ font-size: var(--text-xs);
+ letter-spacing: 0.12em;
+ color: var(--meta);
+ text-transform: lowercase;
+ margin-bottom: 1rem;
}
-/* Ensure the main area doesn't show a blue ring when focused via skip-link */
-#main-content:focus {
- outline: none;
+/* ============================================================
+ NAV STRIP — full outer width, equal cells
+ ============================================================ */
+.masthead nav {
+ border-top: 1px solid var(--border-soft);
+ border-bottom: 1px solid var(--border-soft);
+}
+.masthead nav ul {
+ list-style: none;
+ display: flex;
+}.masthead nav li { flex: 1; }
+.masthead nav a {
+ display: block;
+ text-align: center;
+ padding: 0.55rem 0;
+ font-size: var(--text-xs);
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ text-decoration: none;
+ color: var(--meta);
+ border-right: 1px solid var(--border-soft);
+ transition: color 0.1s, background 0.1s;
}
+.masthead nav li:last-child a { border-right: none; }
+.masthead nav a:hover { color: var(--bg); background: var(--fg); }
-/* --- Horizontal Rule (Koi Divider) --- */
+/* ============================================================
+ MAIN CONTENT AREA
+ ============================================================ */
+main { padding-top: 2rem; }
+
+/* ============================================================
+ KOI HR
+ ============================================================ */
hr {
border: none;
- height: 2rem;
+ height: 2.5rem;
position: relative;
display: flex;
align-items: center;
@@ -109,52 +144,432 @@ hr {
background-repeat: no-repeat;
background-position: center;
background-size: auto 100%;
+ margin: 3rem 0;
}
-
-hr::before,
-hr::after {
+hr::before, hr::after {
content: '';
position: absolute;
top: 50%;
transform: translateY(-50%);
- width: calc(50% - 1.75rem);
+ width: calc(50% - 2rem);
height: 1px;
- background: var(--fg);
+ background: var(--border-soft);
}
-
hr::before { left: 0; }
hr::after { right: 0; }
-/* --- Footnote Alignment --- */
-.footdef {
- display: flex;
- align-items: flex-start; /* Keeps number at the top if text wraps */
- gap: 1rem; /* Space between number and text */
- margin-bottom: 0.5rem;
+/* ============================================================
+ FOOTER
+ ============================================================ */
+footer {
+ font-size: var(--text-xs);
+ text-transform: uppercase;
+ letter-spacing: 0.14em;
+ color: var(--meta);
+ display: flex;
+ flex-direction: column;
+ gap: 0.4rem;
+}
+footer a { color: var(--meta); text-decoration: none; transition: color 0.1s; }
+footer a:hover { color: var(--fg); background: none; }
+
+/* ============================================================
+ TYPOGRAPHY
+ ============================================================ */
+h1, h2, h3, h4 {
+ font-family: var(--font-serif);
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ line-height: 1.1;
+}
+
+/* Page-level h1 (blog list, garden, guides) */
+h1 {
+ font-size: var(--text-h1);
+ margin-bottom: 0.5rem;
+}
+
+/* Article display title — larger, tighter */
+.article-title {
+ font-family: var(--font-serif);
+ font-size: clamp(2.4rem, 5vw, 3.6rem);
+ font-weight: 700;
+ line-height: 1.05;
+ letter-spacing: -0.03em;
+ margin: 0.4rem 0 0;
+}
+
+h2 {
+ font-size: var(--text-h2);
+ border-left: 1px solid var(--accent);
+ padding-left: 0.75rem;
+ margin-top: 2.5rem;
+ margin-bottom: 0.4rem;
+}
+h3 { font-size: 1.05rem; margin-top: 2rem; margin-bottom: 0.3rem; }
+
+p { margin-bottom: 1.2rem; }
+
+/* Accent ONLY on links and h2 bar — nowhere else */
+a {
+ color: var(--accent);
+ text-decoration: underline;
+ text-underline-offset: 3px;
+ transition: background 0.1s, color 0.1s;
+}
+a:hover { background: var(--accent); color: var(--bg); text-decoration: none; }
+
+/* ============================================================
+ SECTION LABEL — uppercase eyebrow text
+ ============================================================ */
+.label {
+ display: block;
+ font-size: var(--text-xs);
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.16em;
+ color: var(--meta);
+ border-bottom: 1px solid var(--fg);
+ padding-bottom: 0.5rem;
+ margin-bottom: 0;
+}
+
+/* ============================================================
+ INFO STRIP — homepage identity block
+ ============================================================ */
+
+
+/* ============================================================
+ POST LIST — numbered, full outer width
+ ============================================================ */
+.post-list {
+ list-style: none;
+ counter-reset: posts;
+}
+.post-list-item {
+ counter-increment: posts;
+ display: grid;
+ grid-template-columns: 2.5rem 1fr 7rem;
+ align-items: baseline;
+ gap: 0 1rem;
+ padding: 0.75rem 0;
+ border-bottom: 1px solid var(--border-soft);
+}
+.post-list-item:first-child { border-top: 1px solid var(--border-soft); }
+.post-list-item::before {
+ content: counter(posts, decimal-leading-zero);
+ font-family: var(--font-mono);
+ font-size: var(--text-xs);
+ color: var(--meta);
+ letter-spacing: 0.04em;
+ grid-column: 1;
+}
+.post-list-item a {
+ font-size: var(--text-sm);
+ justify-self: start;
+}
+.post-list-item time {
+ font-size: var(--text-xs);
+ font-family: var(--font-mono);
+ color: var(--meta);
+ text-align: right;
+ white-space: nowrap;
+ letter-spacing: 0.04em;
+}
+
+/* Year separator — full-width label, resets counter display */
+.post-list-year {
+ display: block;
+ font-family: var(--font-sans);
+ font-size: var(--text-xs);
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.14em;
+ color: var(--meta);
+ padding: 1.5rem 0 0.4rem;
+ counter-increment: none;
+}
+
+.all-posts-link {
+ display: inline-block;
+ margin-top: 1.5rem;
+ font-size: var(--text-xs);
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.12em;
+}
+
+/* ============================================================
+ ARTICLE — post page
+ ============================================================ */
+.article-dateline {
+ font-family: var(--font-mono);
+ font-size: var(--text-xs);
+ text-transform: uppercase;
+ letter-spacing: 0.14em;
+ color: var(--meta);
+ margin-bottom: 0.35rem;
+}
+
+.article-standfirst {
+ font-family: var(--font-serif);
+ font-size: 1.15rem;
+ line-height: 1.55;
+ color: var(--fg-soft);
+ padding: 1.25rem 0;
+ border-top: 1px solid var(--border-soft);
+ border-bottom: 1px solid var(--fg);
+ margin-top: 1rem;
+ max-width: var(--prose-w);
+}
+
+.article-body {
+ font-family: var(--font-serif);
+ font-size: var(--text-body);
+ line-height: var(--lh-body);
+ max-width: var(--prose-w);
+ margin-top: 2.5rem;
+}
+.article-body p { margin-bottom: 1.3rem; }
+
+.reply-link {
+ max-width: var(--prose-w);
+ margin-top: 4rem;
+ padding-top: 1.5rem;
+ border-top: 1px solid var(--border-soft);
+ font-size: var(--text-xs);
+ font-family: var(--font-sans);
+ text-transform: uppercase;
+ letter-spacing: 0.12em;
+}
+
+/* ============================================================
+ GENERIC PAGE (about, uses, etc.)
+ ============================================================ */
+.page-body {
+ font-family: var(--font-serif);
+ font-size: var(--text-body);
+ line-height: var(--lh-body);
+ max-width: var(--prose-w);
+ margin-top: 2rem;
+}
+.page-body p { margin-bottom: 1.3rem; }
+
+/* ============================================================
+ BLOG ARCHIVE
+ ============================================================ */
+.blog-meta {
+ font-size: var(--text-sm);
+ color: var(--meta);
+ margin: 0.75rem 0 2rem;
+}
+.blog-meta code {
+ font-size: var(--text-xs);
+ background: var(--code-bg);
+ padding: 0.1rem 0.35rem;
+ font-family: var(--font-mono);
+}
+
+/* Year separators in post list */
+.post-list-year {
+ font-family: var(--font-serif);
+ font-size: var(--text-xs);
+ font-weight: 700;
+ text-transform: uppercase;
+ letter-spacing: 0.14em;
+ color: var(--meta);
+ padding: 1.25rem 0 0.5rem;
+ list-style: none;
+ grid-column: 1 / -1;
+}
+
+/* Restore list styling inside content areas */
+.article-body ul,
+.article-body ol,
+.page-body ul,
+.page-body ol {
+ padding-left: 1.5rem;
+ margin-bottom: 1.2rem;
+}
+.article-body li,
+.page-body li {
+ margin-bottom: 0.3rem;
+}
+.article-body ul ul,
+.article-body ol ol,
+.page-body ul ul,
+.page-body ol ol {
+ margin-bottom: 0;
+}
+
+/* ============================================================
+ GARDEN
+ ============================================================ */
+.garden-index { list-style: none; }
+.garden-index li {
+ display: flex;
+ flex-direction: column;
+ gap: 0.15rem;
+ padding: 0.8rem 0;
+ border-bottom: 1px solid var(--border-soft);
+}
+.garden-index li:first-child { border-top: 1px solid var(--border-soft); }
+.garden-index a { font-size: var(--text-sm); }
+.garden-desc { font-size: var(--text-xs); color: var(--meta); }
+
+/* ============================================================
+ APP CARDS
+ ============================================================ */
+.app-card {
+ display: flex;
+ gap: 1.25rem;
+ align-items: flex-start;
+ padding: 1.25rem 0;
+ border-bottom: 1px solid var(--border-soft);
+}
+.app-card:first-of-type { border-top: 1px solid var(--border-soft); }
+.app-icon { width: 52px; height: 52px; border-radius: 12px; flex-shrink: 0; filter: none !important; margin: 0; display: block; }
+.app-card a:has(.app-icon):hover { background: none; }
+.app-info { display: flex; flex-direction: column; gap: 0.2rem; }
+.app-title { font-family: var(--font-sans); font-weight: 700; font-size: var(--text-sm); }
+.app-subtitle { font-size: var(--text-xs); color: var(--meta); }
+.app-links { font-size: var(--text-xs); margin-top: 0.3rem; }
+
+/* ============================================================
+ CODE & PRE
+ ============================================================ */
+pre {
+ padding: 1.25rem;
+ border-left: 1px solid var(--border-soft);
+ background: var(--code-bg);
+ overflow-x: auto;
+ font-size: var(--text-sm);
+ margin: 1.75rem 0;
+ line-height: 1.6;
+}
+code {
+ font-family: var(--font-mono);
+ background: var(--code-bg);
+ padding: 0.15rem 0.4rem;
+ font-size: 0.875em;
+}
+pre code { background: none; padding: 0; font-size: inherit; }
+
+/* ============================================================
+ BLOCKQUOTE — intentional Org-mode delimiters
+ ============================================================ */
+blockquote {
+ font-style: italic;
+ margin: 1.75rem 0;
+ padding: 0.75rem 1rem;
+ border-left: 1px solid var(--border-soft);
+ background: var(--code-bg);
+}
+blockquote p:last-child { margin-bottom: 0; }
+blockquote p { margin: 0; }
+blockquote::before {
+ content: "#+begin_quote";
+ display: block;
+ color: var(--meta);
+ font-style: normal;
+ font-size: var(--text-xs);
+ font-family: var(--font-mono);
+ letter-spacing: 0.04em;
+ margin-bottom: 0.5rem;
+}
+blockquote::after {
+ content: "#+end_quote";
+ display: block;
+ color: var(--meta);
+ font-style: normal;
+ font-size: var(--text-xs);
+ font-family: var(--font-mono);
+ letter-spacing: 0.04em;
+ margin-top: 0.5rem;
}
-/* Ensure the paragraph doesn't add its own block margins */
-.footpara {
- margin: 0;
- flex: 1;
- display: flex;
- flex-direction: column;
- gap: 0.5rem;
+/* ============================================================
+ TABLES
+ ============================================================ */
+table { width: 100%; border-collapse: collapse; margin: 2rem 0; }
+th, td {
+ border-bottom: 1px solid var(--border-soft);
+ padding: 0.65rem 0.75rem;
+ text-align: left;
+ font-size: var(--text-sm);
+}
+th {
+ border-bottom: 1px solid var(--fg);
+ font-size: var(--text-xs);
+ text-transform: uppercase;
+ letter-spacing: 0.1em;
+ font-weight: 700;
}
+tr:last-child td { border-bottom: none; }
-/* -- Garden -- */
+/* ============================================================
+ IMAGES
+ ============================================================ */
+img {
+ max-width: 100%;
+ height: auto;
+ filter: grayscale(1);
+ transition: filter 0.25s;
+ display: block;
+ margin: 2rem 0;
+}
+img:hover { filter: grayscale(0); }
-/* Style the footnote number to be a fixed width for alignment */
+/* ============================================================
+ FOOTNOTES
+ ============================================================ */
+.footdef { display: flex; align-items: flex-start; gap: 1rem; margin-bottom: 0.5rem; }
+.footpara { margin: 0; flex: 1; font-size: var(--text-sm); }
.footnum {
- font-weight: bold;
- min-width: 1.5rem;
- text-align: right;
- text-decoration: none;
- font-size: 0.85rem;
- color: var(--accent);
+ font-weight: 700;
+ min-width: 1.5rem;
+ text-align: right;
+ text-decoration: none;
+ font-size: var(--text-xs);
+ color: var(--meta);
+ font-family: var(--font-mono);
+}
+
+/* ============================================================
+ SKIP LINK
+ ============================================================ */
+.skip-link {
+ position: absolute;
+ top: -100px;
+ left: 50%;
+ transform: translateX(-50%);
+ background: var(--fg);
+ color: var(--bg);
+ padding: 0.75rem 1.5rem;
+ z-index: 999;
+ font-weight: 700;
+ font-size: var(--text-xs);
+ text-transform: uppercase;
+ letter-spacing: 0.12em;
+ text-decoration: none;
+ transition: top 0.2s;
+}
+.skip-link:focus { top: 0; outline: none; }
+#main-content:focus { outline: none; }
+
+/* ============================================================
+ RESPONSIVE
+ ============================================================ */
+@media (max-width: 700px) {
+ .masthead-title { font-size: clamp(3rem, 14vw, 5rem); }
+ .masthead nav ul { flex-wrap: wrap; }
+ .masthead nav li { flex: none; width: 50%; }
+ .masthead nav a { border-bottom: 1px solid var(--border-soft); }
+ .post-list-item { grid-template-columns: 2.25rem 1fr; }
+ .post-list-item time { display: none; }
+ .article-title { font-size: clamp(2rem, 9vw, 2.8rem); }
}
-@media (max-width: 600px) {
- body { padding: 1rem; }
- .post { flex-direction: column; align-items: flex-start; }
+@media (max-width: 480px) {
+ .masthead nav li { width: 100%; }
}
diff --git a/theme/static/tokens.css b/theme/static/tokens.css
index 3e4523c..3f67b12 100644
--- a/theme/static/tokens.css
+++ b/theme/static/tokens.css
@@ -1,56 +1,51 @@
/* =============================================================================
BRAND TOKENS — cleberg.net
- Single source of truth for all design variables.
- Import this before any other stylesheet.
============================================================================= */
-
:root {
color-scheme: light dark;
- /* --- Color: Light Mode --- */
- --bg: #F6F4F0; /* Page background */
- --bg-soft: #EDEAE4; /* Subtle surface (inputs, cards) */
- --fg: #111111; /* Primary text, borders, table headers */
- --fg-soft: #555550; /* Secondary text, metadata */
- --accent: #c0392b; /* Interactive: links, h2 border. WCAG AA (4.6:1 on --bg). Text-safe. */
- --salmon: #ee6f5c; /* Decorative only. NOT for body text on light backgrounds. */
- --border: #111111; /* Hard borders (nav, tables) */
- --border-soft: #DDDAD4; /* Dashed/subtle dividers */
- --code-bg: #E8E4DE; /* Code blocks, blockquotes */
- --meta: #555550; /* Timestamps, labels, footnote numbers */
+ /* Light */
+ --bg: #ffffff;
+ --bg-soft: #f5f5f5;
+ --fg: #0a0a0a;
+ --fg-soft: #444444;
+ --accent: #c0392b;
+ --border: #0a0a0a;
+ --border-soft: #dedede;
+ --code-bg: #f3f3f3;
+ --meta: #999999;
- /* --- Typography --- */
- --font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;
- --font-size-base: 1rem;
- --font-size-sm: 0.85rem;
- --font-size-xs: 0.8rem;
- --font-weight-heavy: 900;
- --line-height: 1.6;
+ /* Fonts */
+ --font-serif: Georgia, 'Times New Roman', serif;
+ --font-sans: system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif;
+ --font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;
- /* --- Layout --- */
- --max-width: 800px;
- --space-xs: 0.5rem;
- --space-sm: 1rem;
- --space-md: 2rem;
- --space-lg: 4rem;
+ /* Type scale */
+ --text-display: clamp(4rem, 8vw, 6.5rem);
+ --text-h1: clamp(2.2rem, 4vw, 3rem);
+ --text-h2: 1.2rem;
+ --text-body: 1.0625rem;
+ --text-sm: 0.875rem;
+ --text-xs: 0.6875rem; /* 11px — label tier */
+ --lh-display: 0.95;
+ --lh-body: 1.75;
- /* --- Borders --- */
- --border-width-hard: 3px; /* Tables, skip-link */
- --border-width-nav: 4px; /* Nav underline */
- --border-width-h2: 10px; /* h2 left accent bar */
+ /* Layout */
+ --outer-w: 1000px;
+ --prose-w: 720px;
+ --pad: clamp(1.25rem, 4vw, 2.5rem);
}
@media (prefers-color-scheme: dark) {
:root {
- --bg: #161412;
- --bg-soft: #1F1C1A;
- --fg: #F0EDE8;
- --fg-soft: #888580;
- --accent: #ee6f5c; /* Salmon is WCAG AA on dark bg (~4.5:1 on #161412). Text-safe in dark mode. */
- --salmon: #ee6f5c;
- --border: #2C2825;
- --border-soft: #2C2825;
- --code-bg: #0F0D0C;
- --meta: #888580;
+ --bg: #080808;
+ --bg-soft: #111111;
+ --fg: #eeebe6;
+ --fg-soft: #aaa8a3;
+ --accent: #e05a48;
+ --border: #eeebe6;
+ --border-soft: #1e1e1e;
+ --code-bg: #0d0d0d;
+ --meta: #555555;
}
}