e8839b15a0
- Theme is now class-based (.dark on <html>) with a System/Light/Dark toggle in the sidebar, persisted to localStorage and applied pre-paint by an inline script (no flash). Replaces the prefers-color-scheme-only behavior, so a phone on a light OS theme can still choose dark and vice versa. - New brand-derived --line token (Ink at 55%): a dark line on the light paper, light on dark. The family-chart tree connectors had the library's default white stroke and were invisible in light mode — now they use --line, as do the pedigree brackets and the fan-chart sectors. - Light/dark tokens use the exact brand palette (Ink/Muted flip; Bronze/Paper constant). Frontend only — no migration. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
114 lines
2.6 KiB
CSS
114 lines
2.6 KiB
CSS
@import "tailwindcss";
|
|
|
|
/* Brand palette + type (docs/brand): warm ink + bronze + paper, serif display. */
|
|
@theme {
|
|
--color-bronze: #a06a42;
|
|
--color-bronze-deep: #8a5836;
|
|
--color-paper: #f7f3ec;
|
|
--color-ink: #1a1a17;
|
|
|
|
--font-sans: var(--font-inter), ui-sans-serif, system-ui, -apple-system, sans-serif;
|
|
--font-serif: var(--font-fraunces), Georgia, "Times New Roman", ui-serif, serif;
|
|
}
|
|
|
|
/* Adaptive tokens — ink/paper flip for light/dark; bronze + paper are constant.
|
|
Theme is class-based (.dark on <html>) so it can be toggled manually; an inline
|
|
script in the root layout sets it pre-paint from the saved choice or the OS. */
|
|
:root {
|
|
--background: #f7f3ec;
|
|
--foreground: #1a1a17;
|
|
--muted: #6b6862;
|
|
--surface: #fffdf9;
|
|
--border: #e6ddcc;
|
|
/* Connector "lines between people" (pedigree + tree chart). Derived from Ink
|
|
(the brand mark color): a dark line on light, light on dark. */
|
|
--line: color-mix(in srgb, var(--foreground) 55%, transparent);
|
|
color-scheme: light;
|
|
}
|
|
|
|
.dark {
|
|
--background: #161410;
|
|
--foreground: #f2eee6;
|
|
--muted: #9a968e;
|
|
--surface: #211d17;
|
|
--border: #353029;
|
|
color-scheme: dark;
|
|
}
|
|
|
|
body {
|
|
/* A faint bronze warmth pooled at the top gives the flat paper some depth. */
|
|
background:
|
|
radial-gradient(
|
|
1100px 520px at 50% -8%,
|
|
color-mix(in srgb, var(--color-bronze) 9%, var(--background)),
|
|
var(--background) 60%
|
|
);
|
|
background-attachment: fixed;
|
|
color: var(--foreground);
|
|
font-family: var(--font-sans);
|
|
}
|
|
|
|
h1,
|
|
h2,
|
|
h3,
|
|
.font-serif {
|
|
font-family: var(--font-serif);
|
|
letter-spacing: -0.015em;
|
|
}
|
|
|
|
::selection {
|
|
background: color-mix(in srgb, var(--color-bronze) 22%, transparent);
|
|
}
|
|
|
|
/* Pedigree bracket connectors (ancestors grow rightward). Each leaf draws its
|
|
own half of the vertical spine + a horizontal stub, so lines stay correct
|
|
regardless of box heights: focus → 2 parents, each parent → 2 grandparents. */
|
|
.ped-person {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.ped-self {
|
|
flex-shrink: 0;
|
|
}
|
|
.ped-branch {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.75rem;
|
|
margin-left: 2.5rem;
|
|
}
|
|
.ped-branch::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: -2.5rem;
|
|
top: 50%;
|
|
width: 2.5rem;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
.ped-leaf {
|
|
position: relative;
|
|
padding-left: 1.5rem;
|
|
}
|
|
.ped-leaf::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: 0;
|
|
top: 50%;
|
|
width: 1.5rem;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
.ped-leaf::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
border-left: 1px solid var(--line);
|
|
}
|
|
.ped-leaf:first-child::after {
|
|
top: 50%;
|
|
}
|
|
.ped-leaf:last-child::after {
|
|
bottom: 50%;
|
|
}
|