/* base.css -- lectio-web layout and typography, ALL of it. * * This file owns every non-colour rule: font stack, sizing, spacing, * line-height, borders' width/style (not colour), and layout. It must * never set a colour (background, foreground, border-color, etc.) -- that * is entirely the theme file's job (see docs/THEMES.md). Themes set colour * only and must never touch layout/type, so any lectio-web theme can be * swapped onto this same structure without reflow surprises. */ :root { /* Reading typeface. A theme may override just this by setting --theme-font * (the ONE sanctioned type override; base.css still owns sizing/spacing). */ --font-reading: var(--theme-font, Georgia, "Iowan Old Style", "Palatino Linotype", "Book Antiqua", serif); --font-ui: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --font-mono: ui-monospace, "Cascadia Code", "SF Mono", "Roboto Mono", Menlo, Consolas, monospace; /* Named font-family palette: a theme selects a reading face by setting * --theme-font to one of these (see docs/THEMES.md). System-font stacks * only -- no webfonts (CSP). */ --font-serif: Georgia, "Times New Roman", serif; --font-serif-old: "Palatino Linotype", Palatino, "Book Antiqua", serif; --font-serif-classic: "Times New Roman", "Liberation Serif", serif; --font-serif-iowan: "Iowan Old Style", "Palatino Linotype", Georgia, serif; --font-sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; --font-sans-humanist: "Trebuchet MS", "Segoe UI", Verdana, sans-serif; --measure: 42rem; --space-1: 0.5rem; --space-2: 1rem; --space-3: 1.5rem; --space-4: 2.5rem; } *, *::before, *::after { box-sizing: border-box; } html { font-size: 100%; } body { margin: 0; font-family: var(--font-reading); font-size: 1.125rem; line-height: 1.7; background: var(--bg); color: var(--fg); } /* Global monospace reading toggle (config web_mono / the "mono" top-bar * checkbox): forces the reading face to mono over whatever the theme uses, * for any theme. UI chrome (--font-ui) is untouched. */ body.mono { --font-reading: var(--font-mono); } .page { max-width: 64rem; margin: 0 auto; padding: var(--space-3) var(--space-2) var(--space-4); } /* Controls bar (date/version/theme) -- layout only; themes set the colours. */ .controls { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); font-family: var(--font-ui); font-size: 0.9375rem; padding-bottom: var(--space-2); margin-bottom: var(--space-3); border-bottom-width: 1px; border-bottom-style: solid; } .controls label { display: inline-flex; align-items: center; gap: 0.35rem; } .controls input, .controls select, .controls button { font: inherit; padding: 0.3rem 0.5rem; border-width: 1px; border-style: solid; border-radius: 0; /* no rounded chrome */ background: var(--bg); color: var(--fg); } /* Reading pane */ .reading-section { margin: 0 0 var(--space-4); } .reading-section + .reading-section { padding-top: var(--space-3); border-top-width: 1px; border-top-style: solid; } .heading { display: block; font-family: var(--font-reading); font-size: 1.5rem; font-weight: 700; line-height: 1.3; margin: 0 0 var(--space-1); } .citation { display: block; font-family: var(--font-ui); font-size: 0.9375rem; font-style: italic; margin: 0 0 var(--space-2); } .columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--measure)), 1fr)); gap: var(--space-3) var(--space-4); align-items: start; } .column { min-width: 0; } .version-label { font-family: var(--font-ui); font-size: 0.8125rem; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; margin: 0 0 var(--space-2); padding-bottom: 0.35rem; border-bottom-width: 1px; border-bottom-style: solid; } .block { margin: 0 0 var(--space-1); max-width: var(--measure); } .block.refrain { font-style: italic; } /* Verse block: a fixed number column + a text column, so every verse's text starts at the same left edge (a straight margin) and continuation lines hang-indent under it -- matching the CLI/TUI reader. */ .block.verse { display: grid; grid-template-columns: 3rem 1fr; column-gap: 0.4rem; align-items: baseline; } .block.verse .vnum { min-width: 0; margin-right: 0; text-align: right; } .block.verse .vtext { min-width: 0; } .vnum { display: inline-block; min-width: 2.5em; font-family: var(--font-ui); font-size: 0.75rem; font-variant-numeric: tabular-nums; vertical-align: super; margin-right: 0.35em; } /* Vertical display: versions side by side in columns, like the CLI * `compare` view. A fixed --vcols track count (not auto-fit) means the * grid's total width is always the page container's, so it wraps extra * versions onto further rows instead of ever forcing horizontal scroll. */ .display-vertical { display: grid; grid-template-columns: repeat(var(--vcols, 2), 1fr); gap: var(--space-3) var(--space-4); align-items: start; } .vcol { min-width: 0; } /* Interlinear display: one .ilverse block per chapter:verse key, one * .illine per version that carries it. */ .display-interlinear { display: flex; flex-direction: column; } .ilverse { margin: 0 0 var(--space-3); padding-top: var(--space-1); border-top-width: 1px; border-top-style: solid; } .ilverse:first-child { border-top-width: 0; padding-top: 0; } .illine { margin: 0.2rem 0 0.2rem var(--space-2); } .illine .version-label { display: inline; margin: 0 0.5em 0 0; padding-bottom: 0; border-bottom-width: 0; } a { text-decoration: underline; text-underline-offset: 0.15em; } .error { font-family: var(--font-ui); } @media (max-width: 40rem) { .page { padding: var(--space-2) var(--space-1) var(--space-3); } .heading { font-size: 1.25rem; } .display-vertical { grid-template-columns: 1fr; } }