@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 . 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 ── */ /* 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
). 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; }