Follow the OS dark mode with a softer, readable palette

This commit is contained in:
tleininger committed 2026-09-23 21:05:52 +02:00
1 parent fa49f80d65
commit d7e708a717
5 files changed
+56 -6

No files matched your search

+1 -1
View File
@@ -25,7 +25,7 @@
<option name="upForceRecreate" value="true" /> <option name="upForceRecreate" value="true" />
</settings> </settings>
</deployment> </deployment>
<EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="true" isSslEnabled="false" /> <EXTENSION ID="com.jetbrains.rider.docker.debug" isFastModeEnabled="false" isSslEnabled="false" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
</component> </component>
@@ -26,8 +26,9 @@
through as it scrolls underneath. */ through as it scrolls underneath. */
.site-header { .site-header {
/* Brand-blue bar with a warm accent underline -- the strongest, most visible /* Brand-blue bar with a warm accent underline -- the strongest, most visible
cue that carries the friendly tone across every page. */ cue that carries the friendly tone across every page. Uses its own header
background: var(--color-brand); token so it stays deep blue in dark mode too (see app.css). */
background: var(--color-header);
border-bottom: 3px solid var(--color-accent); border-bottom: 3px solid var(--color-accent);
box-shadow: var(--shadow); box-shadow: var(--shadow);
position: sticky; position: sticky;
@@ -1,4 +1,6 @@
.intro { .intro {
font-size: 1.1rem; font-size: 1.1rem;
color: #444; /* Softer than body text, via the token -- so it adapts in dark mode instead of
staying a fixed dark grey that turns unreadable there. */
color: var(--color-text-soft);
} }
@@ -8,6 +8,6 @@
.post-meta time { .post-meta time {
display: block; display: block;
color: #777; color: var(--color-text-soft); /* token, so it adapts in dark mode */
font-size: 0.85rem; font-size: 0.85rem;
} }
+48 -1
View File
@@ -8,10 +8,18 @@
--color-brand-dark: #16293f; --color-brand-dark: #16293f;
--color-brand-tint: #eef2f7; --color-brand-tint: #eef2f7;
/* The header bar's background. Its own token (not --color-brand) so it stays a
deep blue in dark mode, where --color-brand is lightened for text/links. */
--color-header: #1f3a5f;
/* Warm accent for highlights (active nav, event dates, call-outs). */ /* Warm accent for highlights (active nav, event dates, call-outs). */
--color-accent: #e8a13a; --color-accent: #e8a13a;
--color-accent-dark: #c9821c; --color-accent-dark: #c9821c;
/* Headings. Its own token (not --color-brand) so headings and links can differ:
in dark mode headings become a soft white while links keep the brand blue. */
--color-heading: #1f3a5f;
/* Text and surfaces. */ /* Text and surfaces. */
--color-text: #222; --color-text: #222;
--color-text-soft: #555; --color-text-soft: #555;
@@ -41,11 +49,50 @@
--content-width: 60rem; --content-width: 60rem;
} }
/* Dark mode: follows the visitor's OS setting automatically (prefers-color-scheme).
No toggle and no JavaScript -- the browser applies this when the operating system
is set to dark. Only the colour tokens change; layout, spacing, radius and type
stay put, so the whole site adapts from this one block. Choices: a deep blue-grey
rather than pure black; cards a touch lighter than the page so they still lift off
it; the accent nudged brighter so it doesn't glare; shadows darkened since soft
light shadows are invisible on a dark background. The header keeps its deep blue. */
@media (prefers-color-scheme: dark) {
:root {
--color-brand: #7fb0e6; /* headings/links need to stay bright enough
to read on the dark page background, not
just on the lighter card surface */
--color-brand-dark: #a3c8f0; /* hover goes lighter, not darker, on dark */
--color-brand-tint: #232a35;
--color-header: #1a2a3f; /* a hair deeper, to sit calmly on dark */
--color-accent: #f0b45c;
--color-accent-dark: #f0b45c; /* no darkening needed on a dark surface */
--color-heading: #c9ced6; /* soft white, kept a step brighter than the
body text so headings still lead the page */
--color-text: #a2a8b2; /* eased right down to the soft tone -- full
near-white reads as glare on the dark page */
--color-text-soft: #a2a8b2;
--color-bg: #222834; /* cards / content surface */
--color-page: #171b22; /* page background, darker than the cards */
--color-surface: #1c212a;
--color-border: #333b47;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3);
--shadow-hover: 0 2px 6px rgba(0, 0, 0, 0.5), 0 8px 20px rgba(0, 0, 0, 0.4);
}
}
/* Base styles. Self-hosted system font stack — no external fonts, for privacy. */ /* Base styles. Self-hosted system font stack — no external fonts, for privacy. */
html { html {
font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.65; line-height: 1.65;
color: var(--color-text); color: var(--color-text);
/* Tell the browser we support both schemes, so form controls, scrollbars and
the native <details> marker follow the OS setting instead of staying light. */
color-scheme: light dark;
/* Smooth-scroll for in-page anchors, with room so headings clear the sticky /* Smooth-scroll for in-page anchors, with room so headings clear the sticky
header instead of hiding under it. */ header instead of hiding under it. */
scroll-padding-top: 5rem; scroll-padding-top: 5rem;
@@ -72,7 +119,7 @@ a:hover {
sections read as groups. */ sections read as groups. */
h1, h2, h3, h4 { h1, h2, h3, h4 {
line-height: 1.25; line-height: 1.25;
color: var(--color-brand); color: var(--color-heading);
margin: var(--space-5) 0 var(--space-3); margin: var(--space-5) 0 var(--space-3);
} }