/* See the Tailwind configuration guide for advanced usage https://tailwindcss.com/docs/configuration */ @import "tailwindcss" source(none); @source "../css"; @source "../js"; @source "../../lib/firehose_web"; /* A Tailwind plugin that makes "hero-#{ICON}" classes available. The heroicons installation itself is managed by your mix.exs */ @plugin "../vendor/heroicons"; /* daisyUI Tailwind Plugin. You can update this file by fetching the latest version with: curl -sLO https://github.com/saadeghi/daisyui/releases/latest/download/daisyui.js Make sure to look at the daisyUI changelog: https://daisyui.com/docs/changelog/ */ @plugin "../vendor/daisyui" { themes: false; } /* Warm light theme — amber/terracotta + cream */ @plugin "../vendor/daisyui-theme" { name: "light"; default: true; prefersdark: false; color-scheme: "light"; --color-base-100: oklch(97% 0.008 75); --color-base-200: oklch(94% 0.012 75); --color-base-300: oklch(90% 0.016 75); --color-base-content: oklch(25% 0.015 50); --color-primary: oklch(58% 0.16 45); --color-primary-content: oklch(98% 0.01 75); --color-secondary: oklch(55% 0.12 30); --color-secondary-content: oklch(98% 0.008 30); --color-accent: oklch(62% 0.19 55); --color-accent-content: oklch(98% 0.01 55); --color-neutral: oklch(40% 0.02 50); --color-neutral-content: oklch(97% 0.005 75); --color-info: oklch(62% 0.17 245); --color-info-content: oklch(97% 0.01 245); --color-success: oklch(65% 0.15 155); --color-success-content: oklch(98% 0.01 155); --color-warning: oklch(72% 0.16 70); --color-warning-content: oklch(25% 0.02 70); --color-error: oklch(58% 0.22 25); --color-error-content: oklch(97% 0.01 25); --radius-selector: 0.375rem; --radius-field: 0.375rem; --radius-box: 0.75rem; --size-selector: 0.25rem; --size-field: 0.25rem; --border: 1px; --depth: 1; --noise: 0; } /* Warm dark theme */ @plugin "../vendor/daisyui-theme" { name: "dark"; default: false; prefersdark: true; color-scheme: "dark"; --color-base-100: oklch(24% 0.015 50); --color-base-200: oklch(20% 0.012 50); --color-base-300: oklch(16% 0.01 50); --color-base-content: oklch(92% 0.015 75); --color-primary: oklch(68% 0.16 45); --color-primary-content: oklch(18% 0.02 45); --color-secondary: oklch(62% 0.12 30); --color-secondary-content: oklch(18% 0.01 30); --color-accent: oklch(70% 0.17 55); --color-accent-content: oklch(18% 0.01 55); --color-neutral: oklch(32% 0.02 50); --color-neutral-content: oklch(92% 0.008 75); --color-info: oklch(62% 0.17 245); --color-info-content: oklch(97% 0.01 245); --color-success: oklch(65% 0.15 155); --color-success-content: oklch(98% 0.01 155); --color-warning: oklch(72% 0.16 70); --color-warning-content: oklch(25% 0.02 70); --color-error: oklch(58% 0.22 25); --color-error-content: oklch(97% 0.01 25); --radius-selector: 0.375rem; --radius-field: 0.375rem; --radius-box: 0.75rem; --size-selector: 0.25rem; --size-field: 0.25rem; --border: 1px; --depth: 1; --noise: 0; } /* Add variants based on LiveView classes */ @custom-variant phx-click-loading (.phx-click-loading&, .phx-click-loading &); @custom-variant phx-submit-loading (.phx-submit-loading&, .phx-submit-loading &); @custom-variant phx-change-loading (.phx-change-loading&, .phx-change-loading &); /* Use the data attribute for dark mode */ @custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *)); /* Make LiveView wrapper divs transparent for layout */ [data-phx-session], [data-phx-teleported-src] { display: contents } /* Typography */ .font-display { font-family: 'Fraunces', serif; } body { font-family: 'Source Sans 3', sans-serif; } /* Blogex component styling */ .blogex-post-index { display: flex; flex-direction: column; gap: 1.5rem; } .blogex-post-preview header h2 { font-family: 'Fraunces', serif; font-size: 1.25rem; font-weight: 600; } .blogex-post-preview header h2 a { color: oklch(var(--color-base-content)); text-decoration: none; } .blogex-post-preview header h2 a:hover { color: oklch(var(--color-primary)); } .blogex-post-description { margin-top: 0.25rem; opacity: 0.7; } .blogex-post-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; font-size: 0.875rem; opacity: 0.6; margin-top: 0.25rem; } .blogex-tag { display: inline-block; padding: 0.125rem 0.5rem; border-radius: 9999px; font-size: 0.75rem; background: oklch(var(--color-base-200)); } .blogex-post-header h1 { font-family: 'Fraunces', serif; font-size: 2rem; font-weight: 700; line-height: 1.2; } .blogex-post-body { margin-top: 2rem; line-height: 1.75; } .blogex-post-body h2 { font-size: 1.5rem; font-weight: 600; margin-top: 2rem; margin-bottom: 0.5rem; } .blogex-post-body h3 { font-size: 1.25rem; font-weight: 600; margin-top: 1.5rem; margin-bottom: 0.5rem; } .blogex-post-body p { margin-top: 1rem; } .blogex-post-body ul { list-style: disc; padding-left: 1.5rem; margin-top: 0.5rem; } .blogex-post-body ol { list-style: decimal; padding-left: 1.5rem; margin-top: 0.5rem; } .blogex-post-body pre { background: oklch(var(--color-base-200)); padding: 1rem; border-radius: 0.5rem; overflow-x: auto; margin-top: 1rem; } .blogex-post-body code { font-size: 0.875em; } .blogex-post-body a { color: oklch(var(--color-primary)); text-decoration: underline; } .blogex-tag-list { display: flex; flex-wrap: wrap; gap: 0.5rem; } .blogex-tag-link { display: inline-block; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.875rem; background: oklch(var(--color-base-200)); text-decoration: none; } .blogex-tag-link:hover, .blogex-tag-active { background: oklch(var(--color-primary)); color: oklch(var(--color-primary-content)); } .blogex-pagination { display: flex; align-items: center; justify-content: center; gap: 1rem; padding-top: 1rem; font-size: 0.875rem; } .blogex-pagination a { color: oklch(var(--color-primary)); text-decoration: none; } .blogex-pagination a:hover { text-decoration: underline; }