447 lines
17 KiB
CSS
447 lines
17 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" ──
|
|
A fresh, distinctly GREEN palette — noticeably green background
|
|
(not just a green-tinted white), with deep forest text and primary. */
|
|
:root:not(.dark)[data-light-palette="tulasi-garden"] {
|
|
--background: oklch(0.92 0.07 152);
|
|
--foreground: oklch(0.22 0.09 155);
|
|
--card: oklch(0.95 0.055 150);
|
|
--card-foreground: oklch(0.22 0.09 155);
|
|
--popover: oklch(0.95 0.055 150);
|
|
--popover-foreground: oklch(0.22 0.09 155);
|
|
--primary: oklch(0.45 0.19 150);
|
|
--primary-foreground: oklch(0.97 0.04 150);
|
|
--secondary: oklch(0.85 0.1 152);
|
|
--secondary-foreground: oklch(0.22 0.09 155);
|
|
--muted: oklch(0.87 0.09 152);
|
|
--muted-foreground: oklch(0.42 0.11 150);
|
|
--accent: oklch(0.87 0.09 152);
|
|
--accent-foreground: oklch(0.22 0.09 155);
|
|
--border: oklch(0.76 0.12 150);
|
|
--input: oklch(0.76 0.12 150);
|
|
--ring: oklch(0.56 0.17 150);
|
|
--chart-1: oklch(0.45 0.19 150);
|
|
--chart-2: oklch(0.42 0.11 150);
|
|
--chart-3: oklch(0.56 0.17 150);
|
|
--chart-4: oklch(0.34 0.12 145);
|
|
--chart-5: oklch(0.22 0.09 155);
|
|
--sidebar: oklch(0.95 0.055 150);
|
|
--sidebar-foreground: oklch(0.22 0.09 155);
|
|
--sidebar-primary: oklch(0.45 0.19 150);
|
|
--sidebar-primary-foreground: oklch(0.97 0.04 150);
|
|
--sidebar-accent: oklch(0.87 0.09 152);
|
|
--sidebar-accent-foreground: oklch(0.22 0.09 155);
|
|
--sidebar-border: oklch(0.76 0.12 150);
|
|
--sidebar-ring: oklch(0.56 0.17 150);
|
|
|
|
--quote-card-bg: #ffffff;
|
|
|
|
/* Quote-card gradients — Tulasī Garden (forest depths + amber edge). */
|
|
--quote-gradient-1: linear-gradient(135deg, #102818 0%, #1f4d2f 45%, #b88a3c 100%);
|
|
--quote-gradient-2: linear-gradient(135deg, #1a2e1f 0%, #2d5a3a 50%, #9a8a4c 100%);
|
|
--quote-gradient-3: linear-gradient(135deg, #0c2e22 0%, #1d5f3e 60%, #d9c08a 100%);
|
|
--quote-gradient-4: linear-gradient(135deg, #0a1f15 0%, #1f3d2a 50%, #c8a880 100%);
|
|
}
|
|
|
|
/* ── Light palette — "Yamunā Mist" ──
|
|
A distinctly BLUE palette inspired by the sacred Yamunā river —
|
|
noticeably blue background (not just a blue-tinted white). */
|
|
:root:not(.dark)[data-light-palette="yamuna-mist"] {
|
|
--background: oklch(0.92 0.05 230);
|
|
--foreground: oklch(0.24 0.09 240);
|
|
--card: oklch(0.95 0.04 230);
|
|
--card-foreground: oklch(0.24 0.09 240);
|
|
--popover: oklch(0.95 0.04 230);
|
|
--popover-foreground: oklch(0.24 0.09 240);
|
|
--primary: oklch(0.52 0.2 240);
|
|
--primary-foreground: oklch(0.97 0.03 230);
|
|
--secondary: oklch(0.85 0.08 232);
|
|
--secondary-foreground: oklch(0.24 0.09 240);
|
|
--muted: oklch(0.87 0.07 232);
|
|
--muted-foreground: oklch(0.44 0.11 235);
|
|
--accent: oklch(0.87 0.07 232);
|
|
--accent-foreground: oklch(0.24 0.09 240);
|
|
--border: oklch(0.76 0.1 232);
|
|
--input: oklch(0.76 0.1 232);
|
|
--ring: oklch(0.62 0.15 235);
|
|
--chart-1: oklch(0.52 0.2 240);
|
|
--chart-2: oklch(0.44 0.11 235);
|
|
--chart-3: oklch(0.62 0.15 235);
|
|
--chart-4: oklch(0.38 0.13 240);
|
|
--chart-5: oklch(0.24 0.09 240);
|
|
--sidebar: oklch(0.95 0.04 230);
|
|
--sidebar-foreground: oklch(0.24 0.09 240);
|
|
--sidebar-primary: oklch(0.52 0.2 240);
|
|
--sidebar-primary-foreground: oklch(0.97 0.03 230);
|
|
--sidebar-accent: oklch(0.87 0.07 232);
|
|
--sidebar-accent-foreground: oklch(0.24 0.09 240);
|
|
--sidebar-border: oklch(0.76 0.1 232);
|
|
--sidebar-ring: oklch(0.62 0.15 235);
|
|
|
|
--quote-card-bg: #ffffff;
|
|
|
|
/* Quote-card gradients — Yamunā Mist (river depths + dusk ochre). */
|
|
--quote-gradient-1: linear-gradient(135deg, #0a1e3c 0%, #1a3d6e 45%, #c89058 100%);
|
|
--quote-gradient-2: linear-gradient(135deg, #14213d 0%, #2a4d7a 50%, #c8bcb0 100%);
|
|
--quote-gradient-3: linear-gradient(135deg, #1a2a40 0%, #3a5878 50%, #c4805a 100%);
|
|
--quote-gradient-4: linear-gradient(135deg, #0e1f3c 0%, #28447a 60%, #d4c4b0 100%);
|
|
}
|
|
|
|
/* ── Dark mode — "Ancient Manuscript" ── */
|
|
.dark {
|
|
--background: oklch(0.197 0.013 55.5);
|
|
--foreground: oklch(0.899 0.03 80.7);
|
|
--card: oklch(0.246 0.021 86.3);
|
|
--card-foreground: oklch(0.899 0.03 80.7);
|
|
--popover: oklch(0.246 0.021 86.3);
|
|
--popover-foreground: oklch(0.899 0.03 80.7);
|
|
--primary: oklch(0.753 0.127 84.9);
|
|
--primary-foreground: oklch(0.251 0.032 69.4);
|
|
--secondary: oklch(0.288 0.021 82.6);
|
|
--secondary-foreground: oklch(0.899 0.03 80.7);
|
|
--muted: oklch(0.288 0.021 82.6);
|
|
--muted-foreground: oklch(0.646 0.047 78.2);
|
|
--accent: oklch(0.288 0.021 82.6);
|
|
--accent-foreground: oklch(0.899 0.03 80.7);
|
|
--destructive: oklch(0.704 0.191 22.216);
|
|
--border: oklch(0.777 0.059 84.4 / 15%);
|
|
--input: oklch(0.777 0.059 84.4 / 18%);
|
|
--ring: oklch(0.636 0.08 86.9);
|
|
--chart-1: oklch(0.753 0.127 84.9);
|
|
--chart-2: oklch(0.646 0.047 78.2);
|
|
--chart-3: oklch(0.636 0.08 86.9);
|
|
--chart-4: oklch(0.45 0.04 75);
|
|
--chart-5: oklch(0.288 0.021 82.6);
|
|
--sidebar: oklch(0.246 0.021 86.3);
|
|
--sidebar-foreground: oklch(0.899 0.03 80.7);
|
|
--sidebar-primary: oklch(0.753 0.127 84.9);
|
|
--sidebar-primary-foreground: oklch(0.899 0.03 80.7);
|
|
--sidebar-accent: oklch(0.288 0.021 82.6);
|
|
--sidebar-accent-foreground: oklch(0.899 0.03 80.7);
|
|
--sidebar-border: oklch(0.777 0.059 84.4 / 15%);
|
|
--sidebar-ring: oklch(0.636 0.08 86.9);
|
|
|
|
/* 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.018 86);
|
|
|
|
/* 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" — Kṛṣṇa's sapphire complexion. Deep navy with
|
|
bright sky-blue accents — cool and distinctly BLUE. */
|
|
.dark[data-dark-palette="nilamani"] {
|
|
--background: oklch(0.16 0.05 255);
|
|
--foreground: oklch(0.92 0.04 220);
|
|
--card: oklch(0.21 0.06 252);
|
|
--card-foreground: oklch(0.92 0.04 220);
|
|
--popover: oklch(0.21 0.06 252);
|
|
--popover-foreground: oklch(0.92 0.04 220);
|
|
--primary: oklch(0.72 0.18 235);
|
|
--primary-foreground: oklch(0.16 0.05 255);
|
|
--secondary: oklch(0.28 0.06 248);
|
|
--secondary-foreground: oklch(0.92 0.04 220);
|
|
--muted: oklch(0.28 0.06 248);
|
|
--muted-foreground: oklch(0.7 0.07 230);
|
|
--accent: oklch(0.28 0.06 248);
|
|
--accent-foreground: oklch(0.92 0.04 220);
|
|
--border: oklch(0.7 0.12 235 / 22%);
|
|
--input: oklch(0.7 0.12 235 / 26%);
|
|
--ring: oklch(0.66 0.14 235);
|
|
--chart-1: oklch(0.72 0.18 235);
|
|
--chart-2: oklch(0.7 0.07 230);
|
|
--chart-3: oklch(0.66 0.14 235);
|
|
--chart-4: oklch(0.46 0.1 240);
|
|
--chart-5: oklch(0.28 0.06 248);
|
|
--sidebar: oklch(0.21 0.06 252);
|
|
--sidebar-foreground: oklch(0.92 0.04 220);
|
|
--sidebar-primary: oklch(0.72 0.18 235);
|
|
--sidebar-primary-foreground: oklch(0.16 0.05 255);
|
|
--sidebar-accent: oklch(0.28 0.06 248);
|
|
--sidebar-accent-foreground: oklch(0.92 0.04 220);
|
|
--sidebar-border: oklch(0.7 0.12 235 / 22%);
|
|
--sidebar-ring: oklch(0.66 0.14 235);
|
|
|
|
--quote-card-bg: oklch(0.1 0.05 252);
|
|
|
|
/* Quote-card gradients — Nīlamaṇi (Kṛṣṇa's sapphire hour). */
|
|
--quote-gradient-1: linear-gradient(135deg, #050a1c 0%, #14254a 45%, #5a8acc 100%);
|
|
--quote-gradient-2: linear-gradient(135deg, #0a1228 0%, #1e3458 50%, #b8c8dc 100%);
|
|
--quote-gradient-3: linear-gradient(135deg, #060c1e 0%, #1a2c4e 60%, #a8b8cc 100%);
|
|
--quote-gradient-4: linear-gradient(135deg, #080e22 0%, #1c3458 50%, #c8d4e8 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;
|
|
}
|