library: fine-press typography + muted-warm palette

Scoped warm accent tokens (--library-accent and friends) defined at
:root inside library.css — page-scoped since the file only loads on
/library.html and /search.html. Section headings become Spectral
small-caps chapter markers at 1.2rem in the accent color, so the
ornament span inherits it via currentColor. Divider and "more on
this shelf" link pick up the muted variant. The leading blockquote
gets an epigraph treatment: narrower measure, italic, warm intro
ink, with the attribution line dropping to the accent-muted tone.
Card-level refinements (oldstyle figures on dates, small-caps on
item-kind) scoped via .library-section so /new.html and tag pages
retain their lining-figure UI treatment.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Levi Neuwirth 2026-04-20 21:21:47 -04:00
parent 0221603766
commit daa0ea4c3c
1 changed files with 110 additions and 23 deletions

View File

@ -1,6 +1,35 @@
/* library.css Library + Bibliography page components, plus the /* library.css Library + Bibliography page components, plus the
epistemic-filter UI that now lives on /search.html. */ epistemic-filter UI that now lives on /search.html. */
/* ============================================================
LIBRARY PALETTE scoped warm "candlelight" accent
Only loaded on /library.html (via $if(library)$) and /search.html,
so defining at :root here is effectively page-scoped. Consumed by
section headings, the divider, the intro blockquote, and the
"more on this shelf" link to give the library page a fine-press
feel without touching global colors.
============================================================ */
:root {
--library-accent: #524638; /* muted warm-gray — reads as "warm" only if you look */
--library-accent-muted: #7c7164; /* dusty taupe */
--library-intro-ink: #3c3328;
}
[data-theme="dark"] {
--library-accent: #b5a890; /* soft oat */
--library-accent-muted: #897f6e;
--library-intro-ink: #c8beac;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
--library-accent: #b5a890;
--library-accent-muted: #897f6e;
--library-intro-ink: #c8beac;
}
}
/* ============================================================ /* ============================================================
FILTER UI FILTER UI
Originally the Library's sort+filter panel; the sort panel Originally the Library's sort+filter panel; the sort panel
@ -150,18 +179,22 @@
============================================================ */ ============================================================ */
.library-section { .library-section {
margin-bottom: 2.5rem; margin-bottom: 3rem;
} }
/* Section heading fine-press chapter marker. Spectral small-caps in
walnut ink, letterspaced for a traditional printer's-ornament look.
The ornament span inherits currentColor and picks up the same accent. */
.library-section h2 { .library-section h2 {
font-family: var(--font-sans); font-family: var(--font-serif);
font-size: 0.78rem; font-size: 1.2rem;
font-variant: small-caps; font-variant: all-small-caps;
letter-spacing: 0.08em; font-feature-settings: "smcp" 1;
color: var(--text-muted); letter-spacing: 0.09em;
text-transform: lowercase; color: var(--library-accent);
font-weight: 500; text-transform: none;
margin-bottom: 0.5rem; font-weight: 400;
margin: 0 0 0.9rem 0;
} }
/* Per-shelf ornament sitting before the heading text. SVGs in /* Per-shelf ornament sitting before the heading text. SVGs in
@ -225,7 +258,7 @@
max-width: 60%; max-width: 60%;
height: 24px; height: 24px;
margin: 2.5rem auto; margin: 2.5rem auto;
color: var(--text-faint); color: var(--library-accent-muted);
background-color: currentColor; background-color: currentColor;
mask-image: url('/images/dingbats/library-divider.svg'); mask-image: url('/images/dingbats/library-divider.svg');
-webkit-mask-image: url('/images/dingbats/library-divider.svg'); -webkit-mask-image: url('/images/dingbats/library-divider.svg');
@ -243,37 +276,91 @@
text-align: right; text-align: right;
font-family: var(--font-serif); font-family: var(--font-serif);
font-style: italic; font-style: italic;
font-size: 0.9rem; font-size: 0.95rem;
color: var(--text-muted); color: var(--library-accent-muted);
margin: 0.65rem 0 0; margin: 0.75rem 0 0;
} }
.library-more a { .library-more a {
color: inherit; color: inherit;
text-decoration: underline; text-decoration: none;
text-decoration-color: var(--border); border-bottom: 1px solid transparent;
text-decoration-thickness: 0.08em; transition: border-color var(--transition-fast), color var(--transition-fast);
text-underline-offset: 0.2em;
transition: color var(--transition-fast), text-decoration-color var(--transition-fast);
} }
.library-more a:hover { .library-more a:hover {
color: var(--text); color: var(--library-accent);
text-decoration-color: var(--border-muted); border-bottom-color: var(--library-accent-muted);
} }
/* Leading blockquote above the shelves, lifted from content/library.md. */ /* Leading blockquote above the shelves, lifted from content/library.md.
Set as an epigraph: narrower measure, italic serif, warm ink, no
left-bar decoration. */
.library-intro { .library-intro {
margin: 0.5rem 0 2rem; max-width: 32rem;
margin: 1.5rem 0 2.75rem;
font-family: var(--font-serif);
font-style: italic;
font-size: 0.95rem;
line-height: 1.55;
color: var(--library-intro-ink);
}
.library-intro blockquote {
border: none;
margin: 0;
padding: 0;
}
.library-intro blockquote p {
margin: 0 0 0.4rem 0;
}
.library-intro blockquote p:last-of-type {
margin: 0;
font-style: normal;
font-size: 0.9rem;
color: var(--library-accent-muted);
}
.library-intro a {
color: inherit;
text-decoration: underline;
text-decoration-color: var(--library-accent-muted);
text-decoration-thickness: 0.05em;
text-underline-offset: 0.2em;
}
.library-intro a:hover {
text-decoration-color: var(--library-accent);
}
/* Card-level typography refinements scoped to the library page.
Oldstyle figures on dates read as book-typesetting rather than
tabular UI; small-caps on the item-kind badge keeps it in the
same fine-press register as the section heading. Scoped via
`.library-section` so /new.html and tag pages keep their
current treatment (lining figures, uppercase badges). */
.library-section .item-card-date {
font-variant-numeric: oldstyle-nums proportional-nums;
font-feature-settings: "onum" 1, "pnum" 1;
}
.library-section .item-card-kind {
font-variant: all-small-caps;
font-feature-settings: "smcp" 1;
letter-spacing: 0.06em;
} }
.library-section h2 a { .library-section h2 a {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
border-bottom: 1px solid transparent;
transition: border-color var(--transition-fast);
} }
.library-section h2 a:hover { .library-section h2 a:hover {
color: var(--text); border-bottom-color: var(--library-accent-muted);
} }
/* ============================================================ /* ============================================================