Your Name bc14696f57 Static blog with front page summary
Goal: have a personal blog, and try out another point in the 'modular
app design with elixir' space.

Designing OTP systems with elixir had some interesting ideas.
2026-03-17 11:17:21 +00:00

206 lines
6.0 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 }
/* 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;
}