236 lines
6.7 KiB
CSS
236 lines
6.7 KiB
CSS
/* 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 }
|
|
|
|
/* Self-hosted fonts — no external requests */
|
|
@font-face {
|
|
font-family: 'Fraunces';
|
|
font-style: normal;
|
|
font-weight: 300 900;
|
|
font-display: swap;
|
|
src: url(/fonts/fraunces.woff2) format('woff2');
|
|
}
|
|
@font-face {
|
|
font-family: 'Fraunces';
|
|
font-style: italic;
|
|
font-weight: 300 900;
|
|
font-display: swap;
|
|
src: url(/fonts/fraunces-italic.woff2) format('woff2');
|
|
}
|
|
@font-face {
|
|
font-family: 'Source Sans 3';
|
|
font-style: normal;
|
|
font-weight: 300 900;
|
|
font-display: swap;
|
|
src: url(/fonts/sourcesans3.woff2) format('woff2');
|
|
}
|
|
@font-face {
|
|
font-family: 'Source Sans 3';
|
|
font-style: italic;
|
|
font-weight: 300 900;
|
|
font-display: swap;
|
|
src: url(/fonts/sourcesans3-italic.woff2) format('woff2');
|
|
}
|
|
|
|
/* 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;
|
|
}
|