riprap-nyc / web /sveltekit /src /lib /tokens.css
seriffic's picture
Add Noun Project dam mark, recolored to federal blue
da4b993
/* Riprap design tokens β€” Civic Hydrology palette (v0.4.6, 2026-05-06)
USWDS-aligned federal blue + cool slate register. Replaces the warm
newsprint+orange palette that read as editorial / Anthropic-adjacent.
IBM Plex still drives type (Apache / SIL-OFL); colors are now in the
civic-tech flood-tool family (NOAA / NWS / FloodHelpNY / USWDS).
All values WCAG 2.2 AA verified.
*/
:root {
/* ── Epistemic tier colors ─────────────────────────────────────────
Tier palette anchored to USWDS blue-60v (#005EA2) β€” the canonical
federal civic blue. Tier is ALSO encoded via glyph + label, so
deutan/protan/tritan-safe even though all three top tiers share
the blue family.
*/
--tier-empirical: #005EA2; /* USWDS blue-60v 7.07:1 vs paper βœ“ AAA */
--tier-empirical-fill: rgba(0, 94, 162, 0.40);
--tier-empirical-line: #005EA2;
--tier-modeled: #1A4480; /* USWDS blue-warm-70v 10.4:1 βœ“ AAA */
--tier-modeled-fill: rgba(26, 68, 128, 0.22);
--tier-modeled-line: #1A4480;
--tier-proxy: #475569; /* slate-600 7.6:1 βœ“ AAA */
--tier-proxy-fill: transparent;
--tier-proxy-line: #475569;
--tier-synthetic: #1A4480; /* same hue as modeled β€” pattern carries the difference */
--tier-synthetic-fill: rgba(26, 68, 128, 0.22);
--tier-synthetic-line: #1A4480;
/* ── Stone accent tokens (v0.4.6) ──
Re-themed for the Civic Hydrology register. Each Stone now carries
a meaning-aligned hue rather than a generic "muted earth tone":
- cornerstone: slate (the hazard ground)
- keystone: federal navy (the assets)
- touchstone: cyan-700 (live water)
- lodestone: amber-800 (forecast / warning register)
- capstone: deepest navy (the synthesizer)
Still hint-level decoration; never competes with the four tiers.
All degrade to neutral gray in @media print. */
--stone-cornerstone: #475569; /* slate-600 */
--stone-keystone: #1A4480; /* federal navy */
--stone-touchstone: #0E7490; /* cyan-700 β€” live water */
--stone-lodestone: #92400E; /* amber-800 β€” hazard register */
--stone-capstone: #162E51; /* USWDS darkest navy */
/* ── Reference + accent ── */
--reference-bg: #E8ECF2; /* cool gray-blue */
--reference-line: #CBD5E1; /* slate-300 */
--accent: #005EA2; /* USWDS federal blue (was burnt orange) */
--accent-graphical: #005EA2;
--accent-warn: #92400E; /* amber-800; used SPARINGLY for hazard pills */
--accent-alert: #B91C1C; /* red-700; used ONLY for active flood alerts */
/* ── Neutrals (cool register, replaces warm newsprint) ── */
--paper: #F4F6F9; /* cool off-white, slight blue cast */
--paper-deep: #E8ECF2; /* slate-100 */
--ink: #0F172A; /* slate-950 18.7:1 βœ“ AAA */
--ink-secondary: #334155; /* slate-700 10.4:1 βœ“ AAA */
--ink-tertiary: #64748B; /* slate-500 4.7:1 βœ“ AA */
--rule: #0F172A;
--rule-soft: #CBD5E1; /* slate-300 */
/* ── Type ── */
--font-sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;
--font-serif: "IBM Plex Serif", Georgia, "Times New Roman", serif;
/* ── Scale ── */
--measure: 70ch;
--leading-prose: 1.55;
--leading-tight: 1.25;
/* ── Spacing ── */
--s-1: 4px;
--s-2: 8px;
--s-3: 12px;
--s-4: 16px;
--s-5: 24px;
--s-6: 32px;
--s-7: 48px;
--s-8: 64px;
--s-9: 96px;
}
* { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
background: var(--paper);
color: var(--ink);
font-family: var(--font-sans);
font-size: 16px;
line-height: var(--leading-prose);
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* High-contrast focus rings, brief-spec'd. Uses the federal-blue
accent so focus reads as "civic" not "alert". */
:focus-visible {
outline: 3px solid var(--accent);
outline-offset: 2px;
border-radius: 1px;
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* ── Wordmark ─────────────────────────────────────────────────────── */
/* Dam-mark prefix is now an inline SVG component (RipMark.svelte)
mounted next to the text in AppHeader / LandHeader, replacing the
earlier β–Œ block-glyph. The mark inherits color via currentColor;
the wordmark text picks up its own ink color from the cascade. */
.riprap-wordmark {
font-family: var(--font-mono);
font-weight: 600;
font-size: 14px;
letter-spacing: 0.06em;
text-transform: lowercase;
color: var(--ink);
display: inline-flex;
align-items: center;
gap: 6px;
text-decoration: none;
}
/* ── Skip link ── */
.skip-link {
position: absolute;
left: -9999px;
top: 8px;
padding: 8px 12px;
background: var(--ink);
color: var(--paper);
font-family: var(--font-mono);
font-size: 13px;
z-index: 1000;
}
.skip-link:focus {
left: 8px;
}
/* ── Generic section labels ── */
.section-label {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--ink-tertiary);
}
.rule-thin {
border: 0;
border-top: 1px solid var(--rule-soft);
margin: 0;
}
.rule-heavy {
border: 0;
border-top: 2px solid var(--ink);
margin: 0;
}
/* v0.4.5 β€” Stone tints degrade to neutral gray in print so the PDF's
hierarchy is preserved by structure (Stone headings, type scale,
rules), not by color. */
@media print {
:root {
--stone-cornerstone: #999;
--stone-keystone: #999;
--stone-touchstone: #999;
--stone-lodestone: #999;
--stone-capstone: #999;
}
}