Files

468 lines
18 KiB
CSS

@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
@custom-variant dark (&:is(.dark *));
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-sans);
--font-mono: var(--font-geist-mono);
/*
* Font roles:
* --font-sans — Geist, the base UI/body font.
* --font-serif — Lora, used for verse text always, and surfaced
* through --font-title when reading-serif is on.
* --font-display — Bricolage Grotesque, the default for site titles.
* --font-title — the actual var components reference for titles;
* swaps between Bricolage and Lora based on the
* `reading-serif` class on <html>. The toggle rule
* itself lives outside @theme inline, below.
*/
--font-serif: var(--font-serif);
--font-display: var(--font-display);
--font-title: var(--font-display);
--font-heading: var(--font-display);
--color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-accent: var(--sidebar-accent);
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
--color-sidebar-primary: var(--sidebar-primary);
--color-sidebar-foreground: var(--sidebar-foreground);
--color-sidebar: var(--sidebar);
--color-chart-5: var(--chart-5);
--color-chart-4: var(--chart-4);
--color-chart-3: var(--chart-3);
--color-chart-2: var(--chart-2);
--color-chart-1: var(--chart-1);
--color-ring: var(--ring);
--color-input: var(--input);
--color-border: var(--border);
--color-destructive: var(--destructive);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
--color-muted: var(--muted);
--color-secondary-foreground: var(--secondary-foreground);
--color-secondary: var(--secondary);
--color-primary-foreground: var(--primary-foreground);
--color-primary: var(--primary);
--color-popover-foreground: var(--popover-foreground);
--color-popover: var(--popover);
--color-card-foreground: var(--card-foreground);
--color-card: var(--card);
--radius-sm: calc(var(--radius) * 0.6);
--radius-md: calc(var(--radius) * 0.8);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) * 1.4);
--radius-2xl: calc(var(--radius) * 1.8);
--radius-3xl: calc(var(--radius) * 2.2);
--radius-4xl: calc(var(--radius) * 2.6);
}
/* When the user enables "Serif Font" in the reading settings, page titles
swap from Bricolage Grotesque to Lora. Verse text (font-serif Tailwind
utility) is already Lora regardless of this toggle. */
:root.reading-serif {
--font-title: var(--font-serif);
--font-heading: var(--font-serif);
}
/* ── Light mode — "Aged Parchment" ── */
:root {
--background: oklch(0.957 0.012 79.8);
--foreground: oklch(0.307 0.034 54.8);
--card: oklch(0.974 0.01 81.8);
--card-foreground: oklch(0.307 0.034 54.8);
--popover: oklch(0.974 0.01 81.8);
--popover-foreground: oklch(0.307 0.034 54.8);
--primary: oklch(0.652 0.132 81.6);
--primary-foreground: oklch(0.994 0.008 91.5);
--secondary: oklch(0.899 0.03 80.7);
--secondary-foreground: oklch(0.307 0.034 54.8);
--muted: oklch(0.922 0.023 82.1);
--muted-foreground: oklch(0.571 0.053 72.7);
--accent: oklch(0.922 0.023 82.1);
--accent-foreground: oklch(0.307 0.034 54.8);
--destructive: oklch(0.577 0.245 27.325);
--border: oklch(0.862 0.035 82.9);
--input: oklch(0.862 0.035 82.9);
--ring: oklch(0.729 0.089 81.2);
--chart-1: oklch(0.652 0.132 81.6);
--chart-2: oklch(0.571 0.053 72.7);
--chart-3: oklch(0.729 0.089 81.2);
--chart-4: oklch(0.44 0.04 60);
--chart-5: oklch(0.307 0.034 54.8);
--radius: 0.625rem;
--sidebar: oklch(0.974 0.01 81.8);
--sidebar-foreground: oklch(0.307 0.034 54.8);
--sidebar-primary: oklch(0.652 0.132 81.6);
--sidebar-primary-foreground: oklch(0.994 0.008 91.5);
--sidebar-accent: oklch(0.922 0.023 82.1);
--sidebar-accent-foreground: oklch(0.307 0.034 54.8);
--sidebar-border: oklch(0.862 0.035 82.9);
--sidebar-ring: oklch(0.729 0.089 81.2);
/* Reading settings defaults */
--reading-font-size: 1rem;
--reading-font-family: inherit;
--reading-text-align: start;
/* Post cards without an image use a solid background instead of a
gradient — crisp white on every light palette, palette-specific
darker contrast on dark palettes. */
--quote-card-bg: #ffffff;
/* Quote-card gradients — Aged Parchment (mahogany binding + temple gold).
Used by collection cards' fallback cover. Each palette below
overrides these so the gradient swaps with the active theme. */
--quote-gradient-1: linear-gradient(135deg, #3b2410 0%, #6b3e1f 45%, #c8902a 100%);
--quote-gradient-2: linear-gradient(135deg, #5c2918 0%, #a04a1c 50%, #d4a235 100%);
--quote-gradient-3: linear-gradient(135deg, #4a2e15 0%, #8a5a1f 60%, #d9bf80 100%);
--quote-gradient-4: linear-gradient(135deg, #4a1612 0%, #8b2c1a 50%, #c47525 100%);
}
/* ── Light palette — "Tulasī Garden" ──
Peacock-green serenity. The lesson from Aged Parchment: keep the
SURFACES nearly neutral (paper with only a whisper of celadon) and
let the hue live in the primary — a deep peacock teal-green — so
long reading sessions stay calm instead of drenched in color. */
:root:not(.dark)[data-light-palette="tulasi-garden"] {
--background: oklch(0.96 0.012 175);
--foreground: oklch(0.26 0.045 195);
--card: oklch(0.98 0.008 172);
--card-foreground: oklch(0.26 0.045 195);
--popover: oklch(0.98 0.008 172);
--popover-foreground: oklch(0.26 0.045 195);
--primary: oklch(0.46 0.085 190);
--primary-foreground: oklch(0.98 0.012 175);
--secondary: oklch(0.92 0.02 172);
--secondary-foreground: oklch(0.26 0.045 195);
--muted: oklch(0.925 0.018 172);
--muted-foreground: oklch(0.46 0.05 195);
--accent: oklch(0.92 0.02 172);
--accent-foreground: oklch(0.26 0.045 195);
--border: oklch(0.875 0.025 178);
--input: oklch(0.875 0.025 178);
--ring: oklch(0.55 0.08 190);
--chart-1: oklch(0.46 0.085 190);
--chart-2: oklch(0.58 0.09 165);
--chart-3: oklch(0.68 0.1 90);
--chart-4: oklch(0.4 0.07 220);
--chart-5: oklch(0.26 0.045 195);
--sidebar: oklch(0.945 0.012 172);
--sidebar-foreground: oklch(0.26 0.045 195);
--sidebar-primary: oklch(0.46 0.085 190);
--sidebar-primary-foreground: oklch(0.98 0.012 175);
--sidebar-accent: oklch(0.9 0.02 172);
--sidebar-accent-foreground: oklch(0.26 0.045 195);
--sidebar-border: oklch(0.865 0.025 178);
--sidebar-ring: oklch(0.55 0.08 190);
--quote-card-bg: #ffffff;
/* Quote-card gradients — Tulasī Garden (peacock depths + temple gold). */
--quote-gradient-1: linear-gradient(135deg, #062b26 0%, #0f5347 45%, #c9a227 100%);
--quote-gradient-2: linear-gradient(135deg, #07332c 0%, #156355 50%, #93b8a6 100%);
--quote-gradient-3: linear-gradient(135deg, #052420 0%, #11574a 60%, #d9c98a 100%);
--quote-gradient-4: linear-gradient(135deg, #04201d 0%, #0d4a40 50%, #b87f3c 100%);
}
/* ── Light palette — "Yamunā Mist" ──
Morning mist over the river — porcelain surfaces with the faintest
cool cast (no more wall-to-wall blue), anchored by a deep navy
indigo primary. Elegant, quiet, built for long reading. */
:root:not(.dark)[data-light-palette="yamuna-mist"] {
--background: oklch(0.96 0.008 245);
--foreground: oklch(0.26 0.045 262);
--card: oklch(0.982 0.005 245);
--card-foreground: oklch(0.26 0.045 262);
--popover: oklch(0.982 0.005 245);
--popover-foreground: oklch(0.26 0.045 262);
--primary: oklch(0.42 0.1 260);
--primary-foreground: oklch(0.97 0.008 245);
--secondary: oklch(0.925 0.014 245);
--secondary-foreground: oklch(0.26 0.045 262);
--muted: oklch(0.925 0.014 245);
--muted-foreground: oklch(0.47 0.04 257);
--accent: oklch(0.925 0.014 245);
--accent-foreground: oklch(0.26 0.045 262);
--border: oklch(0.875 0.02 247);
--input: oklch(0.875 0.02 247);
--ring: oklch(0.56 0.08 257);
--chart-1: oklch(0.42 0.1 260);
--chart-2: oklch(0.58 0.08 230);
--chart-3: oklch(0.68 0.09 75);
--chart-4: oklch(0.38 0.08 285);
--chart-5: oklch(0.26 0.045 262);
--sidebar: oklch(0.945 0.009 245);
--sidebar-foreground: oklch(0.26 0.045 262);
--sidebar-primary: oklch(0.42 0.1 260);
--sidebar-primary-foreground: oklch(0.97 0.008 245);
--sidebar-accent: oklch(0.905 0.014 245);
--sidebar-accent-foreground: oklch(0.26 0.045 262);
--sidebar-border: oklch(0.865 0.02 247);
--sidebar-ring: oklch(0.56 0.08 257);
--quote-card-bg: #ffffff;
/* Quote-card gradients — Yamunā Mist (river dusk navy + sandbank). */
--quote-gradient-1: linear-gradient(135deg, #0a1630 0%, #1d3a66 45%, #c9a05c 100%);
--quote-gradient-2: linear-gradient(135deg, #0c1a36 0%, #27486f 50%, #b9c4d6 100%);
--quote-gradient-3: linear-gradient(135deg, #081226 0%, #1a3258 60%, #d7c8a8 100%);
--quote-gradient-4: linear-gradient(135deg, #0a142c 0%, #223e62 50%, #5d82b0 100%);
}
/* ── Dark mode — "Ancient Manuscript" ──
Warm ink and candlelight. Surfaces are a near-black warm charcoal
(the old olive cast is gone — chroma stays under 0.012 so nothing
reads "muddy brown"), text is soft cream, and the single voice of
color is a burnished temple gold. */
.dark {
--background: oklch(0.185 0.009 70);
--foreground: oklch(0.9 0.018 85);
--card: oklch(0.225 0.011 76);
--card-foreground: oklch(0.9 0.018 85);
--popover: oklch(0.225 0.011 76);
--popover-foreground: oklch(0.9 0.018 85);
--primary: oklch(0.78 0.11 85);
--primary-foreground: oklch(0.22 0.04 75);
--secondary: oklch(0.27 0.012 76);
--secondary-foreground: oklch(0.9 0.018 85);
--muted: oklch(0.27 0.012 76);
--muted-foreground: oklch(0.66 0.03 80);
--accent: oklch(0.27 0.012 76);
--accent-foreground: oklch(0.9 0.018 85);
--destructive: oklch(0.704 0.191 22.216);
--border: oklch(0.85 0.04 85 / 14%);
--input: oklch(0.85 0.04 85 / 18%);
--ring: oklch(0.62 0.06 85);
--chart-1: oklch(0.78 0.11 85);
--chart-2: oklch(0.66 0.03 80);
--chart-3: oklch(0.62 0.06 85);
--chart-4: oklch(0.5 0.07 50);
--chart-5: oklch(0.32 0.015 76);
--sidebar: oklch(0.215 0.011 76);
--sidebar-foreground: oklch(0.9 0.018 85);
--sidebar-primary: oklch(0.78 0.11 85);
--sidebar-primary-foreground: oklch(0.22 0.04 75);
--sidebar-accent: oklch(0.27 0.012 76);
--sidebar-accent-foreground: oklch(0.9 0.018 85);
--sidebar-border: oklch(0.85 0.04 85 / 14%);
--sidebar-ring: oklch(0.62 0.06 85);
/* Post-card flat bg — darker than --card so it reads as a distinct
surface even on the homepage where cards stack onto background. */
--quote-card-bg: oklch(0.13 0.01 76);
/* Quote-card gradients — Ancient Manuscript (midnight leather + saffron). */
--quote-gradient-1: linear-gradient(135deg, #0a0805 0%, #4a2f0e 45%, #d4a235 100%);
--quote-gradient-2: linear-gradient(135deg, #0c0a05 0%, #3e2614 50%, #c89028 100%);
--quote-gradient-3: linear-gradient(135deg, #14100a 0%, #4a3018 60%, #b87c2a 100%);
--quote-gradient-4: linear-gradient(135deg, #100c08 0%, #3a2010 50%, #c4762b 100%);
}
/* ── Dark palette — "Nīlamaṇi" ──
"Blue jewel" — midnight navy ink with a peacock-feather teal
primary (the sheen of Kṛṣṇa's mukuṭa feather). Surfaces stay deep
and restrained; the teal carries all the character. */
.dark[data-dark-palette="nilamani"] {
--background: oklch(0.17 0.028 258);
--foreground: oklch(0.91 0.013 220);
--card: oklch(0.21 0.032 256);
--card-foreground: oklch(0.91 0.013 220);
--popover: oklch(0.21 0.032 256);
--popover-foreground: oklch(0.91 0.013 220);
--primary: oklch(0.75 0.105 195);
--primary-foreground: oklch(0.17 0.04 250);
--secondary: oklch(0.26 0.034 252);
--secondary-foreground: oklch(0.91 0.013 220);
--muted: oklch(0.26 0.034 252);
--muted-foreground: oklch(0.68 0.038 230);
--accent: oklch(0.26 0.034 252);
--accent-foreground: oklch(0.91 0.013 220);
--border: oklch(0.75 0.08 220 / 18%);
--input: oklch(0.75 0.08 220 / 22%);
--ring: oklch(0.65 0.1 200);
--chart-1: oklch(0.75 0.105 195);
--chart-2: oklch(0.68 0.038 230);
--chart-3: oklch(0.62 0.11 250);
--chart-4: oklch(0.72 0.09 85);
--chart-5: oklch(0.3 0.035 255);
--sidebar: oklch(0.2 0.032 256);
--sidebar-foreground: oklch(0.91 0.013 220);
--sidebar-primary: oklch(0.75 0.105 195);
--sidebar-primary-foreground: oklch(0.17 0.04 250);
--sidebar-accent: oklch(0.26 0.034 252);
--sidebar-accent-foreground: oklch(0.91 0.013 220);
--sidebar-border: oklch(0.75 0.08 220 / 18%);
--sidebar-ring: oklch(0.65 0.1 200);
--quote-card-bg: oklch(0.115 0.03 256);
/* Quote-card gradients — Nīlamaṇi (peacock night over still water). */
--quote-gradient-1: linear-gradient(135deg, #041220 0%, #0b2f42 45%, #2fa08c 100%);
--quote-gradient-2: linear-gradient(135deg, #06182b 0%, #10405a 50%, #9fc6c0 100%);
--quote-gradient-3: linear-gradient(135deg, #03101c 0%, #0d3a50 60%, #58b0a0 100%);
--quote-gradient-4: linear-gradient(135deg, #051426 0%, #123a55 50%, #c8d8d4 100%);
}
/* ── Dark palette — "Vraja Twilight" ──
The crimson dusk over Vraja — deep wine background with warm
rose-red accents. Distinctly RED/WARM, no overlap with the others. */
.dark[data-dark-palette="vraja-twilight"] {
--background: oklch(0.18 0.05 15);
--foreground: oklch(0.92 0.03 25);
--card: oklch(0.22 0.06 12);
--card-foreground: oklch(0.92 0.03 25);
--popover: oklch(0.22 0.06 12);
--popover-foreground: oklch(0.92 0.03 25);
--primary: oklch(0.72 0.18 25);
--primary-foreground: oklch(0.18 0.05 15);
--secondary: oklch(0.28 0.06 15);
--secondary-foreground: oklch(0.92 0.03 25);
--muted: oklch(0.28 0.06 15);
--muted-foreground: oklch(0.7 0.07 22);
--accent: oklch(0.28 0.06 15);
--accent-foreground: oklch(0.92 0.03 25);
--border: oklch(0.7 0.12 25 / 22%);
--input: oklch(0.7 0.12 25 / 26%);
--ring: oklch(0.66 0.14 25);
--chart-1: oklch(0.72 0.18 25);
--chart-2: oklch(0.7 0.07 22);
--chart-3: oklch(0.66 0.14 25);
--chart-4: oklch(0.46 0.1 20);
--chart-5: oklch(0.28 0.06 15);
--sidebar: oklch(0.22 0.06 12);
--sidebar-foreground: oklch(0.92 0.03 25);
--sidebar-primary: oklch(0.72 0.18 25);
--sidebar-primary-foreground: oklch(0.18 0.05 15);
--sidebar-accent: oklch(0.28 0.06 15);
--sidebar-accent-foreground: oklch(0.92 0.03 25);
--sidebar-border: oklch(0.7 0.12 25 / 22%);
--sidebar-ring: oklch(0.66 0.14 25);
--quote-card-bg: oklch(0.11 0.05 12);
/* Quote-card gradients — Vraja Twilight (deep wine + rose dusk). */
--quote-gradient-1: linear-gradient(135deg, #1c0a10 0%, #4a1a28 45%, #c4756a 100%);
--quote-gradient-2: linear-gradient(135deg, #1a0a14 0%, #3e1828 50%, #d4a08c 100%);
--quote-gradient-3: linear-gradient(135deg, #18080e 0%, #4a182a 60%, #e0a8a0 100%);
--quote-gradient-4: linear-gradient(135deg, #14080c 0%, #401628 50%, #c47868 100%);
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
html {
@apply font-sans;
}
}
/* ── Reading settings — classes applied to <html> ── */
/* Serif font — only main content + sidebar */
.reading-serif main,
.reading-serif aside {
font-family: Georgia, "Times New Roman", "Noto Serif", serif;
}
/*
* Font size scaling — uses zoom on main + aside.
* zoom is supported in all major browsers including iOS Safari (Apple invented it).
* -webkit-text-size-adjust prevents iOS from auto-scaling text in landscape.
*/
.reading-fs-xs main,
.reading-fs-xs aside {
zoom: 0.8;
-webkit-text-size-adjust: 80%;
}
.reading-fs-sm main,
.reading-fs-sm aside {
zoom: 0.9;
-webkit-text-size-adjust: 90%;
}
.reading-fs-base main,
.reading-fs-base aside {
zoom: 1;
-webkit-text-size-adjust: 100%;
}
.reading-fs-lg main,
.reading-fs-lg aside {
zoom: 1.12;
-webkit-text-size-adjust: 112%;
}
.reading-fs-xl main,
.reading-fs-xl aside {
zoom: 1.25;
-webkit-text-size-adjust: 125%;
}
.reading-fs-2xl main,
.reading-fs-2xl aside {
zoom: 1.4;
-webkit-text-size-adjust: 140%;
}
/* Fallback for browsers that don't support zoom (Firefox < 126) */
@supports not (zoom: 1.1) {
.reading-fs-xs main,
.reading-fs-xs aside {
transform: scale(0.8);
transform-origin: top left;
width: 125%;
}
.reading-fs-sm main,
.reading-fs-sm aside {
transform: scale(0.9);
transform-origin: top left;
width: 111.11%;
}
.reading-fs-base main,
.reading-fs-base aside {
transform: none;
width: auto;
}
.reading-fs-lg main,
.reading-fs-lg aside {
transform: scale(1.12);
transform-origin: top left;
width: 89.28%;
}
.reading-fs-xl main,
.reading-fs-xl aside {
transform: scale(1.25);
transform-origin: top left;
width: 80%;
}
.reading-fs-2xl main,
.reading-fs-2xl aside {
transform: scale(1.4);
transform-origin: top left;
width: 71.43%;
}
}
/* Justified text — only main content */
.reading-justified main {
text-align: justify;
}
/* Cited Sanskrit ślokas quoted inside a purport (wrapped by the extractor as
<blockquote class="shloka">). Set them apart from the running commentary —
centered, italic, in the primary (peacock) accent — so it reads at a glance
as a verse quoted from another reference rather than as prose. Placed last so
the centering wins over .reading-justified. */
blockquote.shloka {
margin: 0.75rem 0;
text-align: center;
font-style: italic;
color: var(--primary);
line-height: 1.7;
}