feat: re-design resume-biography-3 block & support full color palettes

Modern re-design of the main Resume block.

Awards block icons are no longer tied to the 'brands' pack - any pack can be used and specified in the form `icon: <pack>/<icon>

Refactor Tailwind CSS theming to support full primary/secondary palettes

Refactors the theme system to correctly apply primary and secondary color palettes from theme packs.

Previously, Tailwind's build-time resolution of CSS variables in the `@theme` block caused theme pack colors to be overridden by the default blue theme.

This commit resolves the issue by adopting a best-practice, two-layer token system:
1.  All theme packs now define `--hb-primary-*-rgb` and `--hb-secondary-*-rgb` variables with raw RGB values.
2.  The core `theme.css` now defines `--color-primary-*` and `--color-secondary-*` inside the `@theme` block using a `rgb(var(...))` function. This makes Tailwind aware of the themeable color names so it can generate all necessary utilities (`bg-`, `text-`, `ring-`, etc.) while ensuring the final color value is resolved in the browser at runtime.

This change fixes the build error related to unknown utility classes (e.g., `ring-primary-500`) and ensures that the selected theme pack is correctly applied across all components.
This commit is contained in:
George Cushen committed 2025-09-06 21:59:27 +01:00
1 parent 3b314fe4b2
commit 04f3b2e8ae
35 files changed
+1427 -840

No files matched your search

+86 -57
View File
@@ -1,70 +1,99 @@
# Hugo Blox Tailwind CSS v4 Structure
# Hugo Blox Tailwind CSS v4 Color System
## Overview
## Architecture Overview
The CSS architecture is modularized for maintainability and organization. The entry point is `main.css` which orchestrates all imports.
This system leverages Tailwind CSS v4's automatic utility generation to provide a comprehensive color system with minimal code.
## Directory Structure
### How It Works
```
css/
├── main.css # Main entry point
├── color-utilities.css # HB Theme Engine
├── config/ # Tailwind configuration
│ ├── tailwind.css # Tailwind v4 directives (@source, @custom-variant)
│ ├── theme.css # HB Theme variables (@theme block)
│ └── safelist.css # Dynamic classes safelist
├── framework/ # Hugo Blox framework styles
│ ├── base.css # Base styles and typography
│ └── components.css # Framework components
├── components/ # Hugo Blox module components
│ └── all.css # Imports all component files
├── blox/ # Block-specific styles
│ └── all.css # Imports all block styles
└── views/ # Listing view styles
└── all.css # Imports all listing view styles
1. **Theme Configuration** (`config/theme.css`)
- Colors defined in `@theme` block automatically generate ALL utilities
- Includes standard Tailwind colors: gray, slate, zinc, neutral, stone
- Includes themeable colors: primary, secondary
2. **Theme Files** (`themes/*.css`)
- Small files that override `--color-primary-*` and `--color-secondary-*` variables
- Users switch themes by loading different theme CSS files
- No utilities redefined - just color values changed
3. **Custom Utilities** (`color-utilities.css`)
- Only 42 lines vs previous 1,228 lines!
- Contains only custom colors not auto-generated (like `hb-dark`)
### Available Colors
**Standard Colors (always available):**
- `gray-*` - Neutral grays
- `slate-*` - Cool grays
- `zinc-*` - True grays
- `neutral-*` - Pure grays
- `stone-*` - Warm grays
**Themeable Colors (vary by theme):**
- `primary-*` - Main theme color
- `secondary-*` - Accent theme color
**Custom Colors:**
- `hb-dark` - Hugo Blox brand dark color
### Auto-Generated Utilities
For every color defined in `@theme`, Tailwind automatically creates:
- Background: `bg-{color}-{shade}`
- Text: `text-{color}-{shade}`
- Border: `border-{color}-{shade}`
- Hover: `hover:bg-{color}-{shade}`, `hover:text-{color}-{shade}`
- Dark mode: `dark:bg-{color}-{shade}`, `dark:text-{color}-{shade}`
- Gradients: `from-{color}-{shade}`, `to-{color}-{shade}`
- Focus rings: `focus:ring-{color}-{shade}`
- All other Tailwind color variants
### Shades Available
All colors include 11 shades: `50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950`
### Usage Examples
```html
<!-- Standard colors (always available) -->
<div class="bg-gray-100 dark:bg-gray-800">...</div>
<div class="text-slate-700 hover:text-slate-900">...</div>
<!-- Themeable colors (change with theme) -->
<div class="bg-primary-500 hover:bg-primary-600">...</div>
<div class="bg-gradient-to-r from-primary-600 to-secondary-600">...</div>
<!-- Custom colors -->
<div class="bg-hb-dark text-white">...</div>
```
## Key Files
### Benefits
### main.css
The orchestrator that imports everything in the correct order:
1. Tailwind base
2. Configuration
3. Base styles
4. Hugo Blox theme engine
5. Components
6. Safelist
1. **Dramatically Reduced File Size**: 1,228 lines → 42 lines (97% reduction!)
2. **Automatic Generation**: No manual utility definitions needed
3. **Maintainable**: Add new colors just by defining them in `@theme`
4. **Consistent**: All Tailwind variants automatically available
5. **Themeable**: Easy theme switching via CSS variable overrides
### config/tailwind.css
Contains Tailwind v4-specific directives:
- `@source` - Where to scan for classes
- `@custom-variant` - Custom variants (dark, hover)
- `@plugin` - Plugin imports
### Adding New Colors
### config/theme.css
Defines the theme using `@theme` block:
- Color palettes (primary, secondary, neutral)
- Font families and sizes
- Custom properties
To add a new color scale:
### color-utilities.css
Hugo Blox theme engine with color utility classes:
- All color shades (50-950)
- All variants (hover, dark, focus)
- Gradient utilities
1. Define in `config/theme.css`:
## Tailwind v4 Notes
```css
--color-brand-500: 59 130 246;
--color-brand-600: 37 99 235;
/* etc. */
```
- `@source`, `@theme`, `@plugin` are new v4 directives
- Linters may show warnings for these - they can be ignored
- Hugo's `css.TailwindCSS` function processes this automatically
- No PostCSS configuration needed anymore
2. Tailwind automatically generates all utilities:
- `bg-brand-500`, `text-brand-600`, `hover:bg-brand-500`, etc.
## Maintenance
When adding new styles:
1. Framework classes → `framework/components.css`
2. Theme variables → `config/theme.css`
3. Component styles → `components/[file].css`
4. Dynamic classes → Add to `config/safelist.css`
No manual utility definitions required!
@@ -6,7 +6,6 @@
}
/* Custom avatar size on homepage - size controlled by template params */
.avatar {
width: auto;
height: auto;
@@ -15,7 +14,8 @@
.network-icon {
display: inline-flex;
flex-flow: row wrap;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
list-style: none;
padding: 0;
@@ -50,48 +50,89 @@
font-size: 0.9rem;
}
/* .ul-edu { */
/* list-style: none; */
/* } */
/* .ul-edu li { */
/* position: relative; */
/* padding: 0 15px 4px 3px; */
/* } */
/* .ul-edu li .description p { */
/* margin: 0; */
/* } */
.ul-edu li .description p.course {
font-size: 0.9rem;
}
.ul-edu li .description p.institution {
font-size: 0.75rem;
/* color: rgba(0, 0, 0, 0.6); */
}
.network-icon .big-icon {
font-size: 1.5rem;
}
/* .dark .portrait-title h3 { */
/* color: rgb(255 255 255 / 90%); */
/* font-weight: bold; */
/* } */
/* .dark .portrait-title h2 { */
/* color: #fff; */
/* font-weight: bold; */
/* } */
.bio-text {
max-width: 680px;
}
}
/* Modern Biography Block Enhancements */
.resume-biography-modern {
/* Ensure proper stacking context for gradients and effects */
position: relative;
z-index: 1;
}
/* Ruby pronunciation styling for modern look */
.ruby-modern {
ruby-position: over;
}
.ruby-modern rt {
font-size: 0.7em;
opacity: 0.8;
letter-spacing: 0.05em;
}
/* Enhanced backdrop blur support */
@supports (backdrop-filter: blur(10px)) {
.resume-biography-modern [class*='backdrop-blur'] {
backdrop-filter: blur(10px);
}
}
/* Smooth animations for all interactive elements */
.resume-biography-modern * {
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
/* Enhanced focus states for accessibility */
.resume-biography-modern a:focus-visible {
outline: 2px solid rgb(var(--color-primary-500));
outline-offset: 2px;
border-radius: 0.5rem;
}
/* Improved text selection styling */
.resume-biography-modern ::selection {
background-color: rgb(var(--color-primary-200) / 0.3);
color: rgb(var(--color-primary-900));
}
.dark .resume-biography-modern ::selection {
background-color: rgb(var(--color-primary-800) / 0.3);
color: rgb(var(--color-primary-100));
}
/* Enhanced gradient text support */
.resume-biography-modern .bg-clip-text {
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
/* Ensure text remains readable on fallback */
@supports not (background-clip: text) {
.resume-biography-modern .bg-clip-text {
color: rgb(var(--color-neutral-900));
}
.dark .resume-biography-modern .bg-clip-text {
color: rgb(var(--color-neutral-100));
}
}
.avatar-wrapper {
position: relative;
/* width and height controlled by template params */
@@ -118,3 +159,39 @@
background-color: #000;
box-shadow: 0 10px 20px rgb(0 0 0 / 4%), 0 2px 6px rgb(0 0 0 / 4%), 0 0 1px rgb(255 255 255 / 96%);
}
/* Biography Block */
.hbx-bg-gradient {
position: relative;
isolation: isolate;
}
.hbx-bg-gradient::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background-attachment: fixed;
transition: opacity 0.5s ease-in-out;
opacity: 1;
}
/* Light Mode Gradient */
.hbx-bg-gradient::before {
background-image: radial-gradient(at 20% 25%, hsla(212, 80%, 95%, 1) 0px, transparent 50%),
radial-gradient(at 75% 30%, hsla(160, 80%, 95%, 1) 0px, transparent 50%),
radial-gradient(at 25% 80%, hsla(280, 80%, 95%, 1) 0px, transparent 50%),
radial-gradient(at 75% 85%, hsla(30, 80%, 95%, 1) 0px, transparent 50%);
}
/* Dark Mode Gradient */
.dark .hbx-bg-gradient::before {
background-image: radial-gradient(at 20% 25%, hsla(212, 35%, 15%, 1) 0px, transparent 50%),
radial-gradient(at 75% 30%, hsla(160, 35%, 15%, 1) 0px, transparent 50%),
radial-gradient(at 25% 80%, hsla(280, 35%, 15%, 1) 0px, transparent 50%),
radial-gradient(at 75% 85%, hsla(30, 35%, 15%, 1) 0px, transparent 50%);
}
@@ -1,285 +1,47 @@
/* Comprehensive Color Utilities for Hugo Blox with Tailwind v4 */
/* This file defines all color utilities using CSS variables from theme files */
/* Hugo Blox Custom Color Utilities for Tailwind v4 */
/*
* Standard color utilities (bg-*, text-*, border-*, hover:*, dark:*, from-*, to-*, etc.)
* are automatically generated by Tailwind v4 from colors defined in @theme block.
*
* This file only contains custom utilities not auto-generated by Tailwind.
*/
@layer utilities {
/* Primary Colors - Full Range (50-950) */
.bg-primary-50 { background-color: rgb(var(--color-primary-50)); }
.bg-primary-100 { background-color: rgb(var(--color-primary-100)); }
.bg-primary-200 { background-color: rgb(var(--color-primary-200)); }
.bg-primary-300 { background-color: rgb(var(--color-primary-300)); }
.bg-primary-400 { background-color: rgb(var(--color-primary-400)); }
.bg-primary-500 { background-color: rgb(var(--color-primary-500)); }
.bg-primary-600 { background-color: rgb(var(--color-primary-600)); }
.bg-primary-700 { background-color: rgb(var(--color-primary-700)); }
.bg-primary-800 { background-color: rgb(var(--color-primary-800)); }
.bg-primary-900 { background-color: rgb(var(--color-primary-900)); }
.bg-primary-950 { background-color: rgb(var(--color-primary-950)); }
.text-primary-50 { color: rgb(var(--color-primary-50)); }
.text-primary-100 { color: rgb(var(--color-primary-100)); }
.text-primary-200 { color: rgb(var(--color-primary-200)); }
.text-primary-300 { color: rgb(var(--color-primary-300)); }
.text-primary-400 { color: rgb(var(--color-primary-400)); }
.text-primary-500 { color: rgb(var(--color-primary-500)); }
.text-primary-600 { color: rgb(var(--color-primary-600)); }
.text-primary-700 { color: rgb(var(--color-primary-700)); }
.text-primary-800 { color: rgb(var(--color-primary-800)); }
.text-primary-900 { color: rgb(var(--color-primary-900)); }
.text-primary-950 { color: rgb(var(--color-primary-950)); }
.border-primary-50 { border-color: rgb(var(--color-primary-50)); }
.border-primary-100 { border-color: rgb(var(--color-primary-100)); }
.border-primary-200 { border-color: rgb(var(--color-primary-200)); }
.border-primary-300 { border-color: rgb(var(--color-primary-300)); }
.border-primary-400 { border-color: rgb(var(--color-primary-400)); }
.border-primary-500 { border-color: rgb(var(--color-primary-500)); }
.border-primary-600 { border-color: rgb(var(--color-primary-600)); }
.border-primary-700 { border-color: rgb(var(--color-primary-700)); }
.border-primary-800 { border-color: rgb(var(--color-primary-800)); }
.border-primary-900 { border-color: rgb(var(--color-primary-900)); }
.border-primary-950 { border-color: rgb(var(--color-primary-950)); }
/* Secondary Colors - Full Range */
.bg-secondary-50 { background-color: rgb(var(--color-secondary-50)); }
.bg-secondary-100 { background-color: rgb(var(--color-secondary-100)); }
.bg-secondary-200 { background-color: rgb(var(--color-secondary-200)); }
.bg-secondary-300 { background-color: rgb(var(--color-secondary-300)); }
.bg-secondary-400 { background-color: rgb(var(--color-secondary-400)); }
.bg-secondary-500 { background-color: rgb(var(--color-secondary-500)); }
.bg-secondary-600 { background-color: rgb(var(--color-secondary-600)); }
.bg-secondary-700 { background-color: rgb(var(--color-secondary-700)); }
.bg-secondary-800 { background-color: rgb(var(--color-secondary-800)); }
.bg-secondary-900 { background-color: rgb(var(--color-secondary-900)); }
.bg-secondary-950 { background-color: rgb(var(--color-secondary-950)); }
.text-secondary-50 { color: rgb(var(--color-secondary-50)); }
.text-secondary-100 { color: rgb(var(--color-secondary-100)); }
.text-secondary-200 { color: rgb(var(--color-secondary-200)); }
.text-secondary-300 { color: rgb(var(--color-secondary-300)); }
.text-secondary-400 { color: rgb(var(--color-secondary-400)); }
.text-secondary-500 { color: rgb(var(--color-secondary-500)); }
.text-secondary-600 { color: rgb(var(--color-secondary-600)); }
.text-secondary-700 { color: rgb(var(--color-secondary-700)); }
.text-secondary-800 { color: rgb(var(--color-secondary-800)); }
.text-secondary-900 { color: rgb(var(--color-secondary-900)); }
.text-secondary-950 { color: rgb(var(--color-secondary-950)); }
.border-secondary-50 { border-color: rgb(var(--color-secondary-50)); }
.border-secondary-100 { border-color: rgb(var(--color-secondary-100)); }
.border-secondary-200 { border-color: rgb(var(--color-secondary-200)); }
.border-secondary-300 { border-color: rgb(var(--color-secondary-300)); }
.border-secondary-400 { border-color: rgb(var(--color-secondary-400)); }
.border-secondary-500 { border-color: rgb(var(--color-secondary-500)); }
.border-secondary-600 { border-color: rgb(var(--color-secondary-600)); }
.border-secondary-700 { border-color: rgb(var(--color-secondary-700)); }
.border-secondary-800 { border-color: rgb(var(--color-secondary-800)); }
.border-secondary-900 { border-color: rgb(var(--color-secondary-900)); }
.border-secondary-950 { border-color: rgb(var(--color-secondary-950)); }
/* Neutral Colors - Full Range with defaults */
.bg-neutral-50 { background-color: rgb(var(--color-neutral-50, 250 250 250)); }
.bg-neutral-100 { background-color: rgb(var(--color-neutral-100, 245 245 245)); }
.bg-neutral-200 { background-color: rgb(var(--color-neutral-200, 229 229 229)); }
.bg-neutral-300 { background-color: rgb(var(--color-neutral-300, 212 212 212)); }
.bg-neutral-400 { background-color: rgb(var(--color-neutral-400, 163 163 163)); }
.bg-neutral-500 { background-color: rgb(var(--color-neutral-500, 115 115 115)); }
.bg-neutral-600 { background-color: rgb(var(--color-neutral-600, 82 82 82)); }
.bg-neutral-700 { background-color: rgb(var(--color-neutral-700, 64 64 64)); }
.bg-neutral-800 { background-color: rgb(var(--color-neutral-800, 38 38 38)); }
.bg-neutral-900 { background-color: rgb(var(--color-neutral-900, 23 23 23)); }
.bg-neutral-950 { background-color: rgb(var(--color-neutral-950, 10 10 10)); }
.text-neutral-50 { color: rgb(var(--color-neutral-50, 250 250 250)); }
.text-neutral-100 { color: rgb(var(--color-neutral-100, 245 245 245)); }
.text-neutral-200 { color: rgb(var(--color-neutral-200, 229 229 229)); }
.text-neutral-300 { color: rgb(var(--color-neutral-300, 212 212 212)); }
.text-neutral-400 { color: rgb(var(--color-neutral-400, 163 163 163)); }
.text-neutral-500 { color: rgb(var(--color-neutral-500, 115 115 115)); }
.text-neutral-600 { color: rgb(var(--color-neutral-600, 82 82 82)); }
.text-neutral-700 { color: rgb(var(--color-neutral-700, 64 64 64)); }
.text-neutral-800 { color: rgb(var(--color-neutral-800, 38 38 38)); }
.text-neutral-900 { color: rgb(var(--color-neutral-900, 23 23 23)); }
.text-neutral-950 { color: rgb(var(--color-neutral-950, 10 10 10)); }
.border-neutral-50 { border-color: rgb(var(--color-neutral-50, 250 250 250)); }
.border-neutral-100 { border-color: rgb(var(--color-neutral-100, 245 245 245)); }
.border-neutral-200 { border-color: rgb(var(--color-neutral-200, 229 229 229)); }
.border-neutral-300 { border-color: rgb(var(--color-neutral-300, 212 212 212)); }
.border-neutral-400 { border-color: rgb(var(--color-neutral-400, 163 163 163)); }
.border-neutral-500 { border-color: rgb(var(--color-neutral-500, 115 115 115)); }
.border-neutral-600 { border-color: rgb(var(--color-neutral-600, 82 82 82)); }
.border-neutral-700 { border-color: rgb(var(--color-neutral-700, 64 64 64)); }
.border-neutral-800 { border-color: rgb(var(--color-neutral-800, 38 38 38)); }
.border-neutral-900 { border-color: rgb(var(--color-neutral-900, 23 23 23)); }
.border-neutral-950 { border-color: rgb(var(--color-neutral-950, 10 10 10)); }
/* Hover Variants - Primary */
.hover\:bg-primary-50:hover { background-color: rgb(var(--color-primary-50)); }
.hover\:bg-primary-100:hover { background-color: rgb(var(--color-primary-100)); }
.hover\:bg-primary-200:hover { background-color: rgb(var(--color-primary-200)); }
.hover\:bg-primary-300:hover { background-color: rgb(var(--color-primary-300)); }
.hover\:bg-primary-400:hover { background-color: rgb(var(--color-primary-400)); }
.hover\:bg-primary-500:hover { background-color: rgb(var(--color-primary-500)); }
.hover\:bg-primary-600:hover { background-color: rgb(var(--color-primary-600)); }
.hover\:bg-primary-700:hover { background-color: rgb(var(--color-primary-700)); }
.hover\:bg-primary-800:hover { background-color: rgb(var(--color-primary-800)); }
.hover\:bg-primary-900:hover { background-color: rgb(var(--color-primary-900)); }
.hover\:bg-primary-950:hover { background-color: rgb(var(--color-primary-950)); }
.hover\:text-primary-50:hover { color: rgb(var(--color-primary-50)); }
.hover\:text-primary-100:hover { color: rgb(var(--color-primary-100)); }
.hover\:text-primary-200:hover { color: rgb(var(--color-primary-200)); }
.hover\:text-primary-300:hover { color: rgb(var(--color-primary-300)); }
.hover\:text-primary-400:hover { color: rgb(var(--color-primary-400)); }
.hover\:text-primary-500:hover { color: rgb(var(--color-primary-500)); }
.hover\:text-primary-600:hover { color: rgb(var(--color-primary-600)); }
.hover\:text-primary-700:hover { color: rgb(var(--color-primary-700)); }
.hover\:text-primary-800:hover { color: rgb(var(--color-primary-800)); }
.hover\:text-primary-900:hover { color: rgb(var(--color-primary-900)); }
.hover\:text-primary-950:hover { color: rgb(var(--color-primary-950)); }
/* Hover Variants - Neutral */
.hover\:bg-neutral-50:hover { background-color: rgb(var(--color-neutral-50)); }
.hover\:bg-neutral-100:hover { background-color: rgb(var(--color-neutral-100)); }
.hover\:bg-neutral-200:hover { background-color: rgb(var(--color-neutral-200)); }
.hover\:bg-neutral-300:hover { background-color: rgb(var(--color-neutral-300)); }
.hover\:bg-neutral-400:hover { background-color: rgb(var(--color-neutral-400)); }
.hover\:bg-neutral-500:hover { background-color: rgb(var(--color-neutral-500)); }
.hover\:bg-neutral-600:hover { background-color: rgb(var(--color-neutral-600)); }
.hover\:bg-neutral-700:hover { background-color: rgb(var(--color-neutral-700)); }
.hover\:bg-neutral-800:hover { background-color: rgb(var(--color-neutral-800)); }
.hover\:bg-neutral-900:hover { background-color: rgb(var(--color-neutral-900)); }
.hover\:text-neutral-50:hover { color: rgb(var(--color-neutral-50)); }
.hover\:text-neutral-100:hover { color: rgb(var(--color-neutral-100)); }
.hover\:text-neutral-200:hover { color: rgb(var(--color-neutral-200)); }
.hover\:text-neutral-300:hover { color: rgb(var(--color-neutral-300)); }
.hover\:text-neutral-400:hover { color: rgb(var(--color-neutral-400)); }
.hover\:text-neutral-500:hover { color: rgb(var(--color-neutral-500)); }
.hover\:text-neutral-600:hover { color: rgb(var(--color-neutral-600)); }
.hover\:text-neutral-700:hover { color: rgb(var(--color-neutral-700)); }
.hover\:text-neutral-800:hover { color: rgb(var(--color-neutral-800)); }
.hover\:text-neutral-900:hover { color: rgb(var(--color-neutral-900)); }
/* Dark Mode Variants - Primary */
.dark\:bg-primary-50:where(.dark, .dark *) { background-color: rgb(var(--color-primary-50)); }
.dark\:bg-primary-100:where(.dark, .dark *) { background-color: rgb(var(--color-primary-100)); }
.dark\:bg-primary-200:where(.dark, .dark *) { background-color: rgb(var(--color-primary-200)); }
.dark\:bg-primary-300:where(.dark, .dark *) { background-color: rgb(var(--color-primary-300)); }
.dark\:bg-primary-400:where(.dark, .dark *) { background-color: rgb(var(--color-primary-400)); }
.dark\:bg-primary-500:where(.dark, .dark *) { background-color: rgb(var(--color-primary-500)); }
.dark\:bg-primary-600:where(.dark, .dark *) { background-color: rgb(var(--color-primary-600)); }
.dark\:bg-primary-700:where(.dark, .dark *) { background-color: rgb(var(--color-primary-700)); }
.dark\:bg-primary-800:where(.dark, .dark *) { background-color: rgb(var(--color-primary-800)); }
.dark\:bg-primary-900:where(.dark, .dark *) { background-color: rgb(var(--color-primary-900)); }
.dark\:bg-primary-950:where(.dark, .dark *) { background-color: rgb(var(--color-primary-950)); }
.dark\:text-primary-50:where(.dark, .dark *) { color: rgb(var(--color-primary-50)); }
.dark\:text-primary-100:where(.dark, .dark *) { color: rgb(var(--color-primary-100)); }
.dark\:text-primary-200:where(.dark, .dark *) { color: rgb(var(--color-primary-200)); }
.dark\:text-primary-300:where(.dark, .dark *) { color: rgb(var(--color-primary-300)); }
.dark\:text-primary-400:where(.dark, .dark *) { color: rgb(var(--color-primary-400)); }
.dark\:text-primary-500:where(.dark, .dark *) { color: rgb(var(--color-primary-500)); }
.dark\:text-primary-600:where(.dark, .dark *) { color: rgb(var(--color-primary-600)); }
.dark\:text-primary-700:where(.dark, .dark *) { color: rgb(var(--color-primary-700)); }
.dark\:text-primary-800:where(.dark, .dark *) { color: rgb(var(--color-primary-800)); }
.dark\:text-primary-900:where(.dark, .dark *) { color: rgb(var(--color-primary-900)); }
/* Dark Mode Variants - Neutral */
.dark\:bg-neutral-50:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-50)); }
.dark\:bg-neutral-100:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-100)); }
.dark\:bg-neutral-200:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-200)); }
.dark\:bg-neutral-300:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-300)); }
.dark\:bg-neutral-400:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-400)); }
.dark\:bg-neutral-500:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-500)); }
.dark\:bg-neutral-600:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-600)); }
.dark\:bg-neutral-700:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-700)); }
.dark\:bg-neutral-800:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-800)); }
.dark\:bg-neutral-900:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-900)); }
.dark\:bg-neutral-950:where(.dark, .dark *) { background-color: rgb(var(--color-neutral-950)); }
.dark\:text-neutral-50:where(.dark, .dark *) { color: rgb(var(--color-neutral-50)); }
.dark\:text-neutral-100:where(.dark, .dark *) { color: rgb(var(--color-neutral-100)); }
.dark\:text-neutral-200:where(.dark, .dark *) { color: rgb(var(--color-neutral-200)); }
.dark\:text-neutral-300:where(.dark, .dark *) { color: rgb(var(--color-neutral-300)); }
.dark\:text-neutral-400:where(.dark, .dark *) { color: rgb(var(--color-neutral-400)); }
.dark\:text-neutral-500:where(.dark, .dark *) { color: rgb(var(--color-neutral-500)); }
.dark\:text-neutral-600:where(.dark, .dark *) { color: rgb(var(--color-neutral-600)); }
.dark\:text-neutral-700:where(.dark, .dark *) { color: rgb(var(--color-neutral-700)); }
.dark\:text-neutral-800:where(.dark, .dark *) { color: rgb(var(--color-neutral-800)); }
.dark\:text-neutral-900:where(.dark, .dark *) { color: rgb(var(--color-neutral-900)); }
/* Dark Hover Variants - Primary */
.dark\:hover\:bg-primary-50:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-50)); }
.dark\:hover\:bg-primary-100:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-100)); }
.dark\:hover\:bg-primary-200:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-200)); }
.dark\:hover\:bg-primary-300:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-300)); }
.dark\:hover\:bg-primary-400:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-400)); }
.dark\:hover\:bg-primary-500:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-500)); }
.dark\:hover\:bg-primary-600:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-600)); }
.dark\:hover\:bg-primary-700:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-700)); }
.dark\:hover\:bg-primary-800:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-800)); }
.dark\:hover\:bg-primary-900:where(.dark, .dark *):hover { background-color: rgb(var(--color-primary-900)); }
.dark\:hover\:text-primary-100:where(.dark, .dark *):hover { color: rgb(var(--color-primary-100)); }
.dark\:hover\:text-primary-200:where(.dark, .dark *):hover { color: rgb(var(--color-primary-200)); }
.dark\:hover\:text-primary-300:where(.dark, .dark *):hover { color: rgb(var(--color-primary-300)); }
.dark\:hover\:text-primary-400:where(.dark, .dark *):hover { color: rgb(var(--color-primary-400)); }
.dark\:hover\:text-primary-500:where(.dark, .dark *):hover { color: rgb(var(--color-primary-500)); }
/* Dark Hover Variants - Neutral */
.dark\:hover\:text-neutral-100:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-100)); }
.dark\:hover\:text-neutral-200:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-200)); }
.dark\:hover\:text-neutral-300:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-300)); }
.dark\:hover\:text-neutral-400:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-400)); }
.dark\:hover\:text-neutral-500:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-500)); }
.dark\:hover\:text-neutral-600:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-600)); }
.dark\:hover\:text-neutral-700:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-700)); }
.dark\:hover\:text-neutral-800:where(.dark, .dark *):hover { color: rgb(var(--color-neutral-800)); }
/* Focus Ring Colors */
.focus\:ring-primary-50:focus { --tw-ring-color: rgb(var(--color-primary-50)); }
.focus\:ring-primary-100:focus { --tw-ring-color: rgb(var(--color-primary-100)); }
.focus\:ring-primary-200:focus { --tw-ring-color: rgb(var(--color-primary-200)); }
.focus\:ring-primary-300:focus { --tw-ring-color: rgb(var(--color-primary-300)); }
.focus\:ring-primary-400:focus { --tw-ring-color: rgb(var(--color-primary-400)); }
.focus\:ring-primary-500:focus { --tw-ring-color: rgb(var(--color-primary-500)); }
.focus\:ring-primary-600:focus { --tw-ring-color: rgb(var(--color-primary-600)); }
.focus\:ring-primary-700:focus { --tw-ring-color: rgb(var(--color-primary-700)); }
.focus\:ring-primary-800:focus { --tw-ring-color: rgb(var(--color-primary-800)); }
.focus\:ring-primary-900:focus { --tw-ring-color: rgb(var(--color-primary-900)); }
.dark\:focus\:ring-primary-300:where(.dark, .dark *):focus { --tw-ring-color: rgb(var(--color-primary-300)); }
.dark\:focus\:ring-primary-400:where(.dark, .dark *):focus { --tw-ring-color: rgb(var(--color-primary-400)); }
.dark\:focus\:ring-primary-500:where(.dark, .dark *):focus { --tw-ring-color: rgb(var(--color-primary-500)); }
.dark\:focus\:ring-primary-600:where(.dark, .dark *):focus { --tw-ring-color: rgb(var(--color-primary-600)); }
.dark\:focus\:ring-primary-700:where(.dark, .dark *):focus { --tw-ring-color: rgb(var(--color-primary-700)); }
.dark\:focus\:ring-primary-800:where(.dark, .dark *):focus { --tw-ring-color: rgb(var(--color-primary-800)); }
/* Gradient utilities */
.from-primary-50 { --tw-gradient-from: rgb(var(--color-primary-50)) var(--tw-gradient-from-position); }
.from-primary-100 { --tw-gradient-from: rgb(var(--color-primary-100)) var(--tw-gradient-from-position); }
.from-primary-200 { --tw-gradient-from: rgb(var(--color-primary-200)) var(--tw-gradient-from-position); }
.from-primary-300 { --tw-gradient-from: rgb(var(--color-primary-300)) var(--tw-gradient-from-position); }
.from-primary-400 { --tw-gradient-from: rgb(var(--color-primary-400)) var(--tw-gradient-from-position); }
.from-primary-500 { --tw-gradient-from: rgb(var(--color-primary-500)) var(--tw-gradient-from-position); }
.from-primary-600 { --tw-gradient-from: rgb(var(--color-primary-600)) var(--tw-gradient-from-position); }
.from-primary-700 { --tw-gradient-from: rgb(var(--color-primary-700)) var(--tw-gradient-from-position); }
.from-primary-800 { --tw-gradient-from: rgb(var(--color-primary-800)) var(--tw-gradient-from-position); }
.from-primary-900 { --tw-gradient-from: rgb(var(--color-primary-900)) var(--tw-gradient-from-position); }
.to-primary-50 { --tw-gradient-to: rgb(var(--color-primary-50)) var(--tw-gradient-to-position); }
.to-primary-100 { --tw-gradient-to: rgb(var(--color-primary-100)) var(--tw-gradient-to-position); }
.to-primary-200 { --tw-gradient-to: rgb(var(--color-primary-200)) var(--tw-gradient-to-position); }
.to-primary-300 { --tw-gradient-to: rgb(var(--color-primary-300)) var(--tw-gradient-to-position); }
.to-primary-400 { --tw-gradient-to: rgb(var(--color-primary-400)) var(--tw-gradient-to-position); }
.to-primary-500 { --tw-gradient-to: rgb(var(--color-primary-500)) var(--tw-gradient-to-position); }
.to-primary-600 { --tw-gradient-to: rgb(var(--color-primary-600)) var(--tw-gradient-to-position); }
.to-primary-700 { --tw-gradient-to: rgb(var(--color-primary-700)) var(--tw-gradient-to-position); }
.to-primary-800 { --tw-gradient-to: rgb(var(--color-primary-800)) var(--tw-gradient-to-position); }
.to-primary-900 { --tw-gradient-to: rgb(var(--color-primary-900)) var(--tw-gradient-to-position); }
/* Special HB dark color */
.bg-hb-dark { background-color: rgb(var(--color-hb-dark, 23 24 28)); }
.text-hb-dark { color: rgb(var(--color-hb-dark, 23 24 28)); }
/* Custom Hugo Blox Dark Color */
.bg-hb-dark {
background-color: rgb(var(--color-hb-dark, 23 24 28));
}
.text-hb-dark {
color: rgb(var(--color-hb-dark, 23 24 28));
}
.border-hb-dark {
border-color: rgb(var(--color-hb-dark, 23 24 28));
}
/* Dark mode variants */
.dark\:bg-hb-dark:where(.dark, .dark *) {
background-color: rgb(var(--color-hb-dark, 23 24 28));
}
.dark\:text-hb-dark:where(.dark, .dark *) {
color: rgb(var(--color-hb-dark, 23 24 28));
}
}
/*
* Available Auto-Generated Utilities (from @theme colors):
*
* Standard Colors: gray, slate, zinc, neutral, stone
* Theme Colors: primary, secondary (overridden by theme files)
*
* Auto-generated utilities include:
* - Background: .bg-{color}-{shade}
* - Text: .text-{color}-{shade}
* - Border: .border-{color}-{shade}
* - Hover: .hover:bg-{color}-{shade}, .hover:text-{color}-{shade}
* - Dark: .dark:bg-{color}-{shade}, .dark:text-{color}-{shade}
* - Gradients: .from-{color}-{shade}, .to-{color}-{shade}
* - Focus: .focus:ring-{color}-{shade}
* - And all other Tailwind color variants
*
* Shades: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950
*/
@@ -2,4 +2,4 @@
/* Note: In v4, we use @source inline to ensure these are included */
/* This ensures Tailwind generates these classes even if not found in templates */
@source inline("<div class='block hidden dark:block dark:hidden'></div><div class='task-list'></div><div class='pl-4 pl-8 pl-12'></div><div class='min-h-screen'></div><div class='md:grid-cols-1 md:grid-cols-2 md:grid-cols-3 md:grid-cols-4 md:grid-cols-5 md:grid-cols-6'></div><div class='bg-white bg-gray-50 bg-gray-100 bg-gray-200 bg-gray-300 bg-gray-400 bg-gray-500 bg-gray-600 bg-gray-700 bg-gray-800 bg-gray-900'></div><div class='bg-neutral-50 bg-neutral-100 bg-neutral-200 bg-neutral-300 bg-neutral-400 bg-neutral-500 bg-neutral-600 bg-neutral-700 bg-neutral-800 bg-neutral-900'></div><div class='dark:bg-neutral-700 dark:bg-neutral-800 dark:bg-neutral-900'></div><div class='bg-primary-50 bg-primary-100 bg-primary-200 bg-primary-300 bg-primary-400 bg-primary-500 bg-primary-600 bg-primary-700 bg-primary-800 bg-primary-900'></div><div class='text-primary-50 text-primary-100 text-primary-200 text-primary-300 text-primary-400 text-primary-500 text-primary-600 text-primary-700 text-primary-800 text-primary-900'></div><div class='text-neutral-50 text-neutral-100 text-neutral-200 text-neutral-300 text-neutral-400 text-neutral-500 text-neutral-600 text-neutral-700 text-neutral-800 text-neutral-900'></div><div class='text-white text-black dark:text-white'></div><div class='dark:text-neutral-300 dark:text-neutral-400'></div><div class='border-primary-50 border-primary-100 border-primary-200 border-primary-300 border-primary-400 border-primary-500 border-primary-600 border-primary-700 border-primary-800 border-primary-900'></div><div class='border-neutral-50 border-neutral-100 border-neutral-200 border-neutral-300 border-neutral-400 border-neutral-500 border-neutral-600 border-neutral-700 border-neutral-800 border-neutral-900'></div><div class='bg-gradient-to-t bg-gradient-to-tr bg-gradient-to-r bg-gradient-to-br bg-gradient-to-b bg-gradient-to-bl bg-gradient-to-l bg-gradient-to-tl'></div><div class='from-primary-50 from-primary-100 from-primary-200 from-primary-300 from-primary-400 from-primary-500 from-primary-600 from-primary-700 from-primary-800 from-primary-900'></div><div class='to-primary-50 to-primary-100 to-primary-200 to-primary-300 to-primary-400 to-primary-500 to-primary-600 to-primary-700 to-primary-800 to-primary-900'></div><div class='hover:bg-primary-50 hover:bg-primary-100 hover:bg-primary-200 hover:bg-primary-300 hover:bg-primary-400 hover:bg-primary-500 hover:bg-primary-600 hover:bg-primary-700 hover:bg-primary-800 hover:bg-primary-900'></div><div class='hover:bg-neutral-50 hover:bg-neutral-100 hover:bg-neutral-200 hover:bg-neutral-300 hover:bg-neutral-400 hover:bg-neutral-500 hover:bg-neutral-600 hover:bg-neutral-700 hover:bg-neutral-800 hover:bg-neutral-900'></div><div class='hover:text-primary hover:text-primary-50 hover:text-primary-100 hover:text-primary-200 hover:text-primary-300 hover:text-primary-400 hover:text-primary-500 hover:text-primary-600 hover:text-primary-700 hover:text-primary-800 hover:text-primary-900'></div><div class='hover:text-neutral-50 hover:text-neutral-100 hover:text-neutral-200 hover:text-neutral-300 hover:text-neutral-400 hover:text-neutral-500 hover:text-neutral-600 hover:text-neutral-700 hover:text-neutral-800 hover:text-neutral-900'></div><div class='dark:hover:bg-primary-50 dark:hover:bg-primary-100 dark:hover:bg-primary-200 dark:hover:bg-primary-300 dark:hover:bg-primary-400 dark:hover:bg-primary-500 dark:hover:bg-primary-600 dark:hover:bg-primary-700 dark:hover:bg-primary-800 dark:hover:bg-primary-900'></div><div class='dark:hover:text-neutral-50 dark:hover:text-neutral-100 dark:hover:text-neutral-200 dark:hover:text-neutral-300 dark:hover:text-neutral-400 dark:hover:text-neutral-500 dark:hover:text-neutral-600 dark:hover:text-neutral-700 dark:hover:text-neutral-800 dark:hover:text-neutral-900'></div>");
@source inline("<div class='block hidden dark:block dark:hidden'></div><div class='task-list'></div><div class='pl-4 pl-8 pl-12'></div><div class='min-h-screen'></div><div class='md:grid-cols-1 md:grid-cols-2 md:grid-cols-3 md:grid-cols-4 md:grid-cols-5 md:grid-cols-6'></div><div class='bg-white bg-gray-50 bg-gray-100 bg-gray-200 bg-gray-300 bg-gray-400 bg-gray-500 bg-gray-600 bg-gray-700 bg-gray-800 bg-gray-900'></div><div class='bg-neutral-50 bg-neutral-100 bg-neutral-200 bg-neutral-300 bg-neutral-400 bg-neutral-500 bg-neutral-600 bg-neutral-700 bg-neutral-800 bg-neutral-900'></div><div class='dark:bg-neutral-700 dark:bg-neutral-800 dark:bg-neutral-900'></div><div class='bg-primary-50 bg-primary-100 bg-primary-200 bg-primary-300 bg-primary-400 bg-primary-500 bg-primary-600 bg-primary-700 bg-primary-800 bg-primary-900'></div><div class='bg-secondary-50 bg-secondary-100 bg-secondary-200 bg-secondary-300 bg-secondary-400 bg-secondary-500 bg-secondary-600 bg-secondary-700 bg-secondary-800 bg-secondary-900'></div><div class='text-primary-50 text-primary-100 text-primary-200 text-primary-300 text-primary-400 text-primary-500 text-primary-600 text-primary-700 text-primary-800 text-primary-900'></div><div class='text-secondary-50 text-secondary-100 text-secondary-200 text-secondary-300 text-secondary-400 text-secondary-500 text-secondary-600 text-secondary-700 text-secondary-800 text-secondary-900'></div><div class='text-neutral-50 text-neutral-100 text-neutral-200 text-neutral-300 text-neutral-400 text-neutral-500 text-neutral-600 text-neutral-700 text-neutral-800 text-neutral-900'></div><div class='text-white text-black dark:text-white'></div><div class='dark:text-neutral-300 dark:text-neutral-400'></div><div class='border-primary-50 border-primary-100 border-primary-200 border-primary-300 border-primary-400 border-primary-500 border-primary-600 border-primary-700 border-primary-800 border-primary-900'></div><div class='border-secondary-50 border-secondary-100 border-secondary-200 border-secondary-300 border-secondary-400 border-secondary-500 border-secondary-600 border-secondary-700 border-secondary-800 border-secondary-900'></div><div class='border-neutral-50 border-neutral-100 border-neutral-200 border-neutral-300 border-neutral-400 border-neutral-500 border-neutral-600 border-neutral-700 border-neutral-800 border-neutral-900'></div><div class='bg-gradient-to-t bg-gradient-to-tr bg-gradient-to-r bg-gradient-to-br bg-gradient-to-b bg-gradient-to-bl bg-gradient-to-l bg-gradient-to-tl'></div><div class='from-primary-50 from-primary-100 from-primary-200 from-primary-300 from-primary-400 from-primary-500 from-primary-600 from-primary-700 from-primary-800 from-primary-900'></div><div class='from-secondary-50 from-secondary-100 from-secondary-200 from-secondary-300 from-secondary-400 from-secondary-500 from-secondary-600 from-secondary-700 from-secondary-800 from-secondary-900'></div><div class='to-primary-50 to-primary-100 to-primary-200 to-primary-300 to-primary-400 to-primary-500 to-primary-600 to-primary-700 to-primary-800 to-primary-900'></div><div class='to-secondary-50 to-secondary-100 to-secondary-200 to-secondary-300 to-secondary-400 to-secondary-500 to-secondary-600 to-secondary-700 to-secondary-800 to-secondary-900'></div><div class='hover:from-primary-500 hover:from-secondary-500 hover:to-primary-500 hover:to-secondary-500'></div><div class='hover:bg-primary-50 hover:bg-primary-100 hover:bg-primary-200 hover:bg-primary-300 hover:bg-primary-400 hover:bg-primary-500 hover:bg-primary-600 hover:bg-primary-700 hover:bg-primary-800 hover:bg-primary-900'></div><div class='hover:bg-neutral-50 hover:bg-neutral-100 hover:bg-neutral-200 hover:bg-neutral-300 hover:bg-neutral-400 hover:bg-neutral-500 hover:bg-neutral-600 hover:bg-neutral-700 hover:bg-neutral-800 hover:bg-neutral-900'></div><div class='hover:text-primary hover:text-primary-50 hover:text-primary-100 hover:text-primary-200 hover:text-primary-300 hover:text-primary-400 hover:text-primary-500 hover:text-primary-600 hover:text-primary-700 hover:text-primary-800 hover:text-primary-900'></div><div class='hover:text-neutral-50 hover:text-neutral-100 hover:text-neutral-200 hover:text-neutral-300 hover:text-neutral-400 hover:text-neutral-500 hover:text-neutral-600 hover:text-neutral-700 hover:text-neutral-800 hover:text-neutral-900'></div><div class='dark:hover:bg-primary-50 dark:hover:bg-primary-100 dark:hover:bg-primary-200 dark:hover:bg-primary-300 dark:hover:bg-primary-400 dark:hover:bg-primary-500 dark:hover:bg-primary-600 dark:hover:bg-primary-700 dark:hover:bg-primary-800 dark:hover:bg-primary-900'></div><div class='dark:hover:text-neutral-50 dark:hover:text-neutral-100 dark:hover:text-neutral-200 dark:hover:text-neutral-300 dark:hover:text-neutral-400 dark:hover:text-neutral-500 dark:hover:text-neutral-600 dark:hover:text-neutral-700 dark:hover:text-neutral-800 dark:hover:text-neutral-900'></div>");
+318 -42
View File
@@ -4,49 +4,325 @@
@theme {
/* Custom Colors */
--color-hb-dark: 23 24 28;
/* Neutral Colors - Space-separated RGB values (for use with rgb() function) */
--color-neutral-50: 250 250 250;
--color-neutral-100: 245 245 245;
--color-neutral-200: 229 229 229;
--color-neutral-300: 212 212 212;
--color-neutral-400: 163 163 163;
--color-neutral-500: 115 115 115;
--color-neutral-600: 82 82 82;
--color-neutral-700: 64 64 64;
--color-neutral-800: 38 38 38;
--color-neutral-900: 23 23 23;
--color-neutral-950: 10 10 10;
/* Primary Colors - Space-separated RGB values (Blue defaults) */
--color-primary-50: 239 246 255;
--color-primary-100: 219 234 254;
--color-primary-200: 191 219 254;
--color-primary-300: 147 197 253;
--color-primary-400: 96 165 250;
--color-primary-500: 59 130 246;
--color-primary-600: 37 99 235;
--color-primary-700: 29 78 216;
--color-primary-800: 30 64 175;
--color-primary-900: 30 58 138;
--color-primary-950: 23 37 84;
/* Secondary Colors - Space-separated RGB values (Cyan defaults) */
--color-secondary-50: 236 254 255;
--color-secondary-100: 207 250 254;
--color-secondary-200: 165 243 252;
--color-secondary-300: 103 232 249;
--color-secondary-400: 34 211 238;
--color-secondary-500: 6 182 212;
--color-secondary-600: 8 145 178;
--color-secondary-700: 14 116 144;
--color-secondary-800: 21 94 117;
--color-secondary-900: 22 78 99;
--color-secondary-950: 8 51 68;
/* Standard Tailwind Color Scales - Provide variables as valid CSS colors */
/* Gray */
--color-gray-50: rgb(249 250 251);
--color-gray-100: rgb(243 244 246);
--color-gray-200: rgb(229 231 235);
--color-gray-300: rgb(209 213 219);
--color-gray-400: rgb(156 163 175);
--color-gray-500: rgb(107 114 128);
--color-gray-600: rgb(75 85 99);
--color-gray-700: rgb(55 65 81);
--color-gray-800: rgb(31 41 55);
--color-gray-900: rgb(17 24 39);
--color-gray-950: rgb(3 7 18);
/* Slate */
--color-slate-50: rgb(248 250 252);
--color-slate-100: rgb(241 245 249);
--color-slate-200: rgb(226 232 240);
--color-slate-300: rgb(203 213 225);
--color-slate-400: rgb(148 163 184);
--color-slate-500: rgb(100 116 139);
--color-slate-600: rgb(71 85 105);
--color-slate-700: rgb(51 65 85);
--color-slate-800: rgb(30 41 59);
--color-slate-900: rgb(15 23 42);
--color-slate-950: rgb(2 6 23);
/* Zinc */
--color-zinc-50: rgb(250 250 250);
--color-zinc-100: rgb(244 244 245);
--color-zinc-200: rgb(228 228 231);
--color-zinc-300: rgb(212 212 216);
--color-zinc-400: rgb(161 161 170);
--color-zinc-500: rgb(113 113 122);
--color-zinc-600: rgb(82 82 91);
--color-zinc-700: rgb(63 63 70);
--color-zinc-800: rgb(39 39 42);
--color-zinc-900: rgb(24 24 27);
--color-zinc-950: rgb(9 9 11);
/* Neutral */
--color-neutral-50: rgb(250 250 250);
--color-neutral-100: rgb(245 245 245);
--color-neutral-200: rgb(229 229 229);
--color-neutral-300: rgb(212 212 212);
--color-neutral-400: rgb(163 163 163);
--color-neutral-500: rgb(115 115 115);
--color-neutral-600: rgb(82 82 82);
--color-neutral-700: rgb(64 64 64);
--color-neutral-800: rgb(38 38 38);
--color-neutral-900: rgb(23 23 23);
--color-neutral-950: rgb(10 10 10);
/* Stone */
--color-stone-50: rgb(250 250 249);
--color-stone-100: rgb(245 245 244);
--color-stone-200: rgb(231 229 228);
--color-stone-300: rgb(214 211 209);
--color-stone-400: rgb(168 162 158);
--color-stone-500: rgb(120 113 108);
--color-stone-600: rgb(87 83 78);
--color-stone-700: rgb(68 64 60);
--color-stone-800: rgb(41 37 36);
--color-stone-900: rgb(28 25 23);
--color-stone-950: rgb(12 10 9);
/* Red */
--color-red-50: rgb(254 242 242);
--color-red-100: rgb(254 226 226);
--color-red-200: rgb(254 202 202);
--color-red-300: rgb(252 165 165);
--color-red-400: rgb(248 113 113);
--color-red-500: rgb(239 68 68);
--color-red-600: rgb(220 38 38);
--color-red-700: rgb(185 28 28);
--color-red-800: rgb(153 27 27);
--color-red-900: rgb(127 29 29);
--color-red-950: rgb(69 10 10);
/* Orange */
--color-orange-50: rgb(255 247 237);
--color-orange-100: rgb(255 237 213);
--color-orange-200: rgb(254 215 170);
--color-orange-300: rgb(253 186 116);
--color-orange-400: rgb(251 146 60);
--color-orange-500: rgb(249 115 22);
--color-orange-600: rgb(234 88 12);
--color-orange-700: rgb(194 65 12);
--color-orange-800: rgb(154 52 18);
--color-orange-900: rgb(124 45 18);
--color-orange-950: rgb(67 20 7);
/* Amber */
--color-amber-50: rgb(255 251 235);
--color-amber-100: rgb(254 243 199);
--color-amber-200: rgb(253 230 138);
--color-amber-300: rgb(252 211 77);
--color-amber-400: rgb(251 191 36);
--color-amber-500: rgb(245 158 11);
--color-amber-600: rgb(217 119 6);
--color-amber-700: rgb(180 83 9);
--color-amber-800: rgb(146 64 14);
--color-amber-900: rgb(120 53 15);
--color-amber-950: rgb(69 26 3);
/* Yellow */
--color-yellow-50: rgb(254 252 232);
--color-yellow-100: rgb(254 249 195);
--color-yellow-200: rgb(254 240 138);
--color-yellow-300: rgb(253 224 71);
--color-yellow-400: rgb(250 204 21);
--color-yellow-500: rgb(234 179 8);
--color-yellow-600: rgb(202 138 4);
--color-yellow-700: rgb(161 98 7);
--color-yellow-800: rgb(133 77 14);
--color-yellow-900: rgb(113 63 18);
--color-yellow-950: rgb(66 32 6);
/* Lime */
--color-lime-50: rgb(247 254 231);
--color-lime-100: rgb(236 252 203);
--color-lime-200: rgb(217 249 157);
--color-lime-300: rgb(190 242 100);
--color-lime-400: rgb(163 230 53);
--color-lime-500: rgb(132 204 22);
--color-lime-600: rgb(101 163 13);
--color-lime-700: rgb(77 124 15);
--color-lime-800: rgb(63 98 18);
--color-lime-900: rgb(54 83 20);
--color-lime-950: rgb(26 46 5);
/* Green */
--color-green-50: rgb(240 253 244);
--color-green-100: rgb(220 252 231);
--color-green-200: rgb(187 247 208);
--color-green-300: rgb(134 239 172);
--color-green-400: rgb(74 222 128);
--color-green-500: rgb(34 197 94);
--color-green-600: rgb(22 163 74);
--color-green-700: rgb(21 128 61);
--color-green-800: rgb(22 101 52);
--color-green-900: rgb(20 83 45);
--color-green-950: rgb(5 46 22);
/* Emerald */
--color-emerald-50: rgb(236 253 245);
--color-emerald-100: rgb(209 250 229);
--color-emerald-200: rgb(167 243 208);
--color-emerald-300: rgb(110 231 183);
--color-emerald-400: rgb(52 211 153);
--color-emerald-500: rgb(16 185 129);
--color-emerald-600: rgb(5 150 105);
--color-emerald-700: rgb(4 120 87);
--color-emerald-800: rgb(6 95 70);
--color-emerald-900: rgb(6 78 59);
--color-emerald-950: rgb(2 44 34);
/* Teal */
--color-teal-50: rgb(240 253 250);
--color-teal-100: rgb(204 251 241);
--color-teal-200: rgb(153 246 228);
--color-teal-300: rgb(94 234 212);
--color-teal-400: rgb(45 212 191);
--color-teal-500: rgb(20 184 166);
--color-teal-600: rgb(13 148 136);
--color-teal-700: rgb(15 118 110);
--color-teal-800: rgb(17 94 89);
--color-teal-900: rgb(19 78 74);
--color-teal-950: rgb(4 47 46);
/* Cyan */
--color-cyan-50: rgb(236 254 255);
--color-cyan-100: rgb(207 250 254);
--color-cyan-200: rgb(165 243 252);
--color-cyan-300: rgb(103 232 249);
--color-cyan-400: rgb(34 211 238);
--color-cyan-500: rgb(6 182 212);
--color-cyan-600: rgb(8 145 178);
--color-cyan-700: rgb(14 116 144);
--color-cyan-800: rgb(21 94 117);
--color-cyan-900: rgb(22 78 99);
--color-cyan-950: rgb(8 51 68);
/* Sky */
--color-sky-50: rgb(240 249 255);
--color-sky-100: rgb(224 242 254);
--color-sky-200: rgb(186 230 253);
--color-sky-300: rgb(125 211 252);
--color-sky-400: rgb(56 189 248);
--color-sky-500: rgb(14 165 233);
--color-sky-600: rgb(2 132 199);
--color-sky-700: rgb(3 105 161);
--color-sky-800: rgb(7 89 133);
--color-sky-900: rgb(12 74 110);
--color-sky-950: rgb(8 47 73);
/* Blue */
--color-blue-50: rgb(239 246 255);
--color-blue-100: rgb(219 234 254);
--color-blue-200: rgb(191 219 254);
--color-blue-300: rgb(147 197 253);
--color-blue-400: rgb(96 165 250);
--color-blue-500: rgb(59 130 246);
--color-blue-600: rgb(37 99 235);
--color-blue-700: rgb(29 78 216);
--color-blue-800: rgb(30 64 175);
--color-blue-900: rgb(30 58 138);
--color-blue-950: rgb(23 37 84);
/* Indigo */
--color-indigo-50: rgb(238 242 255);
--color-indigo-100: rgb(224 231 255);
--color-indigo-200: rgb(199 210 254);
--color-indigo-300: rgb(165 180 252);
--color-indigo-400: rgb(129 140 248);
--color-indigo-500: rgb(99 102 241);
--color-indigo-600: rgb(79 70 229);
--color-indigo-700: rgb(67 56 202);
--color-indigo-800: rgb(55 48 163);
--color-indigo-900: rgb(49 46 129);
--color-indigo-950: rgb(30 27 75);
/* Violet */
--color-violet-50: rgb(245 243 255);
--color-violet-100: rgb(237 233 254);
--color-violet-200: rgb(221 214 254);
--color-violet-300: rgb(196 181 253);
--color-violet-400: rgb(167 139 250);
--color-violet-500: rgb(139 92 246);
--color-violet-600: rgb(124 58 237);
--color-violet-700: rgb(109 40 217);
--color-violet-800: rgb(91 33 182);
--color-violet-900: rgb(76 29 149);
--color-violet-950: rgb(46 16 101);
/* Purple */
--color-purple-50: rgb(250 245 255);
--color-purple-100: rgb(243 232 255);
--color-purple-200: rgb(233 213 255);
--color-purple-300: rgb(216 180 254);
--color-purple-400: rgb(192 132 252);
--color-purple-500: rgb(168 85 247);
--color-purple-600: rgb(147 51 234);
--color-purple-700: rgb(126 34 206);
--color-purple-800: rgb(107 33 168);
--color-purple-900: rgb(88 28 135);
--color-purple-950: rgb(59 7 100);
/* Fuchsia */
--color-fuchsia-50: rgb(253 244 255);
--color-fuchsia-100: rgb(250 232 255);
--color-fuchsia-200: rgb(245 208 254);
--color-fuchsia-300: rgb(240 171 252);
--color-fuchsia-400: rgb(232 121 249);
--color-fuchsia-500: rgb(217 70 239);
--color-fuchsia-600: rgb(192 38 211);
--color-fuchsia-700: rgb(162 28 175);
--color-fuchsia-800: rgb(134 25 143);
--color-fuchsia-900: rgb(112 26 117);
--color-fuchsia-950: rgb(74 4 78);
/* Pink */
--color-pink-50: rgb(253 242 248);
--color-pink-100: rgb(252 231 243);
--color-pink-200: rgb(251 207 232);
--color-pink-300: rgb(249 168 212);
--color-pink-400: rgb(244 114 182);
--color-pink-500: rgb(236 72 153);
--color-pink-600: rgb(219 39 119);
--color-pink-700: rgb(190 24 93);
--color-pink-800: rgb(157 23 77);
--color-pink-900: rgb(131 24 67);
--color-pink-950: rgb(80 7 36);
/* Rose */
--color-rose-50: rgb(255 241 242);
--color-rose-100: rgb(255 228 230);
--color-rose-200: rgb(254 205 211);
--color-rose-300: rgb(253 164 175);
--color-rose-400: rgb(251 113 133);
--color-rose-500: rgb(244 63 94);
--color-rose-600: rgb(225 29 72);
--color-rose-700: rgb(190 18 60);
--color-rose-800: rgb(159 18 57);
--color-rose-900: rgb(136 19 55);
--color-rose-950: rgb(76 5 25);
/* Themeable Colors */
--color-primary-50: rgb(var(--hb-primary-50-rgb, 239 246 255));
--color-primary-100: rgb(var(--hb-primary-100-rgb, 219 234 254));
--color-primary-200: rgb(var(--hb-primary-200-rgb, 191 219 254));
--color-primary-300: rgb(var(--hb-primary-300-rgb, 147 197 253));
--color-primary-400: rgb(var(--hb-primary-400-rgb, 96 165 250));
--color-primary-500: rgb(var(--hb-primary-500-rgb, 59 130 246));
--color-primary-600: rgb(var(--hb-primary-600-rgb, 37 99 235));
--color-primary-700: rgb(var(--hb-primary-700-rgb, 29 78 216));
--color-primary-800: rgb(var(--hb-primary-800-rgb, 30 64 175));
--color-primary-900: rgb(var(--hb-primary-900-rgb, 30 58 138));
--color-primary-950: rgb(var(--hb-primary-950-rgb, 23 37 84));
--color-secondary-50: rgb(var(--hb-secondary-50-rgb, 236 254 255));
--color-secondary-100: rgb(var(--hb-secondary-100-rgb, 207 250 254));
--color-secondary-200: rgb(var(--hb-secondary-200-rgb, 165 243 252));
--color-secondary-300: rgb(var(--hb-secondary-300-rgb, 103 232 249));
--color-secondary-400: rgb(var(--hb-secondary-400-rgb, 34 211 238));
--color-secondary-500: rgb(var(--hb-secondary-500-rgb, 6 182 212));
--color-secondary-600: rgb(var(--hb-secondary-600-rgb, 8 145 178));
--color-secondary-700: rgb(var(--hb-secondary-700-rgb, 14 116 144));
--color-secondary-800: rgb(var(--hb-secondary-800-rgb, 21 94 117));
--color-secondary-900: rgb(var(--hb-secondary-900-rgb, 22 78 99));
--color-secondary-950: rgb(var(--hb-secondary-950-rgb, 8 51 68));
/* Note: Providing these palettes in @theme ensures theme-pack mappings like var(--color-rose-600) always resolve */
/* Font family */
--font-family-sans: inter var, ui-sans-serif, system-ui, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
--font-family-sans: inter var, ui-sans-serif, system-ui, sans-serif, apple color emoji, segoe ui emoji,
segoe ui symbol, noto color emoji;
/* Font sizes */
--font-size-xs: 0.75rem;
--font-size-sm: 0.875rem;
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: AMBER */
:root {
/* Amber Primary Palette */
--hb-primary-50-rgb: 255 251 235;
--hb-primary-100-rgb: 254 243 199;
--hb-primary-200-rgb: 253 230 138;
--hb-primary-300-rgb: 252 211 77;
--hb-primary-400-rgb: 251 191 36;
--hb-primary-500-rgb: 245 158 11;
--hb-primary-600-rgb: 217 119 6;
--hb-primary-700-rgb: 180 83 9;
--hb-primary-800-rgb: 146 64 14;
--hb-primary-900-rgb: 120 53 15;
--hb-primary-950-rgb: 69 26 3;
/* Yellow Secondary Palette */
--hb-secondary-50-rgb: 254 252 232;
--hb-secondary-100-rgb: 254 249 195;
--hb-secondary-200-rgb: 254 240 138;
--hb-secondary-300-rgb: 253 224 71;
--hb-secondary-400-rgb: 250 204 21;
--hb-secondary-500-rgb: 234 179 8;
--hb-secondary-600-rgb: 202 138 4;
--hb-secondary-700-rgb: 161 98 7;
--hb-secondary-800-rgb: 133 77 14;
--hb-secondary-900-rgb: 113 63 18;
--hb-secondary-950-rgb: 66 32 6;
}
@@ -1,27 +1,27 @@
/* Hugo Blox color theme: BLUE */
:root {
/* TW Blue Palette */
--color-primary-50: 239 246 255;
--color-primary-100: 219 234 254;
--color-primary-200: 191 219 254;
--color-primary-300: 147 197 253;
--color-primary-400: 96 165 250;
--color-primary-500: 59 130 246;
--color-primary-600: 37 99 235;
--color-primary-700: 29 78 216;
--color-primary-800: 30 64 175;
--color-primary-900: 30 58 138;
--color-primary-950: 23 37 84;
--hb-primary-50-rgb: 239 246 255;
--hb-primary-100-rgb: 219 234 254;
--hb-primary-200-rgb: 191 219 254;
--hb-primary-300-rgb: 147 197 253;
--hb-primary-400-rgb: 96 165 250;
--hb-primary-500-rgb: 59 130 246;
--hb-primary-600-rgb: 37 99 235;
--hb-primary-700-rgb: 29 78 216;
--hb-primary-800-rgb: 30 64 175;
--hb-primary-900-rgb: 30 58 138;
--hb-primary-950-rgb: 23 37 84;
/* TW Cyan Palette */
--color-secondary-50: 236 254 255;
--color-secondary-100: 207 250 254;
--color-secondary-200: 165 243 252;
--color-secondary-300: 103 232 249;
--color-secondary-400: 34 211 238;
--color-secondary-500: 6 182 212;
--color-secondary-600: 8 145 178;
--color-secondary-700: 14 116 144;
--color-secondary-800: 21 94 117;
--color-secondary-900: 22 78 99;
--color-secondary-950: 8 51 68;
--hb-secondary-50-rgb: 236 254 255;
--hb-secondary-100-rgb: 207 250 254;
--hb-secondary-200-rgb: 165 243 252;
--hb-secondary-300-rgb: 103 232 249;
--hb-secondary-400-rgb: 34 211 238;
--hb-secondary-500-rgb: 6 182 212;
--hb-secondary-600-rgb: 8 145 178;
--hb-secondary-700-rgb: 14 116 144;
--hb-secondary-800-rgb: 21 94 117;
--hb-secondary-900-rgb: 22 78 99;
--hb-secondary-950-rgb: 8 51 68;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: CYAN */
:root {
--color-primary-50: 236 254 255;
--color-primary-100: 207 250 254;
--color-primary-200: 165 243 252;
--color-primary-300: 103 232 249;
--color-primary-400: 34 211 238;
--color-primary-500: 6 182 212;
--color-primary-600: 8 145 178;
--color-primary-700: 14 116 144;
--color-primary-800: 21 94 117;
--color-primary-900: 22 78 99;
--color-primary-950: 8 51 68;
/* Cyan Primary Palette */
--hb-primary-50-rgb: 236 254 255;
--hb-primary-100-rgb: 207 250 254;
--hb-primary-200-rgb: 165 243 252;
--hb-primary-300-rgb: 103 232 249;
--hb-primary-400-rgb: 34 211 238;
--hb-primary-500-rgb: 6 182 212;
--hb-primary-600-rgb: 8 145 178;
--hb-primary-700-rgb: 14 116 144;
--hb-primary-800-rgb: 21 94 117;
--hb-primary-900-rgb: 22 78 99;
--hb-primary-950-rgb: 8 51 68;
/* Sky Secondary Palette */
--hb-secondary-50-rgb: 240 249 255;
--hb-secondary-100-rgb: 224 242 254;
--hb-secondary-200-rgb: 186 230 253;
--hb-secondary-300-rgb: 125 211 252;
--hb-secondary-400-rgb: 56 189 248;
--hb-secondary-500-rgb: 14 165 233;
--hb-secondary-600-rgb: 2 132 199;
--hb-secondary-700-rgb: 3 105 161;
--hb-secondary-800-rgb: 7 89 133;
--hb-secondary-900-rgb: 12 74 110;
--hb-secondary-950-rgb: 8 47 73;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: EMERALD */
:root {
--color-primary-50: 236 253 245;
--color-primary-100: 209 250 229;
--color-primary-200: 167 243 208;
--color-primary-300: 110 231 183;
--color-primary-400: 52 211 153;
--color-primary-500: 16 185 129;
--color-primary-600: 5 150 105;
--color-primary-700: 4 120 87;
--color-primary-800: 6 95 70;
--color-primary-900: 6 78 59;
--color-primary-950: 2 44 34;
/* Emerald Primary Palette */
--hb-primary-50-rgb: 236 253 245;
--hb-primary-100-rgb: 209 250 229;
--hb-primary-200-rgb: 167 243 208;
--hb-primary-300-rgb: 110 231 183;
--hb-primary-400-rgb: 52 211 153;
--hb-primary-500-rgb: 16 185 129;
--hb-primary-600-rgb: 5 150 105;
--hb-primary-700-rgb: 4 120 87;
--hb-primary-800-rgb: 6 95 70;
--hb-primary-900-rgb: 6 78 59;
--hb-primary-950-rgb: 2 44 34;
/* Green Secondary Palette */
--hb-secondary-50-rgb: 240 253 244;
--hb-secondary-100-rgb: 220 252 231;
--hb-secondary-200-rgb: 187 247 208;
--hb-secondary-300-rgb: 134 239 172;
--hb-secondary-400-rgb: 74 222 128;
--hb-secondary-500-rgb: 34 197 94;
--hb-secondary-600-rgb: 22 163 74;
--hb-secondary-700-rgb: 21 128 61;
--hb-secondary-800-rgb: 22 101 52;
--hb-secondary-900-rgb: 20 83 45;
--hb-secondary-950-rgb: 5 46 22;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: FUCHSIA */
:root {
/* Fuchsia Primary Palette */
--hb-primary-50-rgb: 253 244 255;
--hb-primary-100-rgb: 250 232 255;
--hb-primary-200-rgb: 245 208 254;
--hb-primary-300-rgb: 240 171 252;
--hb-primary-400-rgb: 232 121 249;
--hb-primary-500-rgb: 217 70 239;
--hb-primary-600-rgb: 192 38 211;
--hb-primary-700-rgb: 162 28 175;
--hb-primary-800-rgb: 134 25 143;
--hb-primary-900-rgb: 112 26 117;
--hb-primary-950-rgb: 74 4 78;
/* Violet Secondary Palette */
--hb-secondary-50-rgb: 245 243 255;
--hb-secondary-100-rgb: 237 233 254;
--hb-secondary-200-rgb: 221 214 254;
--hb-secondary-300-rgb: 196 181 253;
--hb-secondary-400-rgb: 167 139 250;
--hb-secondary-500-rgb: 139 92 246;
--hb-secondary-600-rgb: 124 58 237;
--hb-secondary-700-rgb: 109 40 217;
--hb-secondary-800-rgb: 91 33 182;
--hb-secondary-900-rgb: 76 29 149;
--hb-secondary-950-rgb: 46 16 101;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: GREEN */
:root {
--color-primary-50: 240 253 244;
--color-primary-100: 220 252 231;
--color-primary-200: 187 247 208;
--color-primary-300: 134 239 172;
--color-primary-400: 74 222 128;
--color-primary-500: 34 197 94;
--color-primary-600: 22 163 74;
--color-primary-700: 21 128 61;
--color-primary-800: 22 101 52;
--color-primary-900: 20 83 45;
--color-primary-950: 5 46 22;
/* Green Primary Palette */
--hb-primary-50-rgb: 240 253 244;
--hb-primary-100-rgb: 220 252 231;
--hb-primary-200-rgb: 187 247 208;
--hb-primary-300-rgb: 134 239 172;
--hb-primary-400-rgb: 74 222 128;
--hb-primary-500-rgb: 34 197 94;
--hb-primary-600-rgb: 22 163 74;
--hb-primary-700-rgb: 21 128 61;
--hb-primary-800-rgb: 22 101 52;
--hb-primary-900-rgb: 20 83 45;
--hb-primary-950-rgb: 5 46 22;
/* Teal Secondary Palette */
--hb-secondary-50-rgb: 240 253 250;
--hb-secondary-100-rgb: 204 251 241;
--hb-secondary-200-rgb: 153 246 228;
--hb-secondary-300-rgb: 94 234 212;
--hb-secondary-400-rgb: 45 212 191;
--hb-secondary-500-rgb: 20 184 166;
--hb-secondary-600-rgb: 13 148 136;
--hb-secondary-700-rgb: 15 118 110;
--hb-secondary-800-rgb: 17 94 89;
--hb-secondary-900-rgb: 19 78 74;
--hb-secondary-950-rgb: 4 47 46;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: INDIGO */
:root {
--color-primary-50: 238 242 255;
--color-primary-100: 224 231 255;
--color-primary-200: 199 210 254;
--color-primary-300: 165 180 252;
--color-primary-400: 129 140 248;
--color-primary-500: 99 102 241;
--color-primary-600: 79 70 229;
--color-primary-700: 67 56 202;
--color-primary-800: 55 48 163;
--color-primary-900: 49 46 129;
--color-primary-950: 30 27 75;
/* Indigo Primary Palette */
--hb-primary-50-rgb: 238 242 255;
--hb-primary-100-rgb: 224 231 255;
--hb-primary-200-rgb: 199 210 254;
--hb-primary-300-rgb: 165 180 252;
--hb-primary-400-rgb: 129 140 248;
--hb-primary-500-rgb: 99 102 241;
--hb-primary-600-rgb: 79 70 229;
--hb-primary-700-rgb: 67 56 202;
--hb-primary-800-rgb: 55 48 163;
--hb-primary-900-rgb: 49 46 129;
--hb-primary-950-rgb: 30 27 75;
/* Blue Secondary Palette */
--hb-secondary-50-rgb: 239 246 255;
--hb-secondary-100-rgb: 219 234 254;
--hb-secondary-200-rgb: 191 219 254;
--hb-secondary-300-rgb: 147 197 253;
--hb-secondary-400-rgb: 96 165 250;
--hb-secondary-500-rgb: 59 130 246;
--hb-secondary-600-rgb: 37 99 235;
--hb-secondary-700-rgb: 29 78 216;
--hb-secondary-800-rgb: 30 64 175;
--hb-secondary-900-rgb: 30 58 138;
--hb-secondary-950-rgb: 23 37 84;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: LIME */
:root {
/* Lime Primary Palette */
--hb-primary-50-rgb: 247 254 231;
--hb-primary-100-rgb: 236 252 203;
--hb-primary-200-rgb: 217 249 157;
--hb-primary-300-rgb: 190 242 100;
--hb-primary-400-rgb: 163 230 53;
--hb-primary-500-rgb: 132 204 22;
--hb-primary-600-rgb: 101 163 13;
--hb-primary-700-rgb: 77 124 15;
--hb-primary-800-rgb: 63 98 18;
--hb-primary-900-rgb: 54 83 20;
--hb-primary-950-rgb: 26 46 5;
/* Yellow Secondary Palette */
--hb-secondary-50-rgb: 254 252 232;
--hb-secondary-100-rgb: 254 249 195;
--hb-secondary-200-rgb: 254 240 138;
--hb-secondary-300-rgb: 253 224 71;
--hb-secondary-400-rgb: 250 204 21;
--hb-secondary-500-rgb: 234 179 8;
--hb-secondary-600-rgb: 202 138 4;
--hb-secondary-700-rgb: 161 98 7;
--hb-secondary-800-rgb: 133 77 14;
--hb-secondary-900-rgb: 113 63 18;
--hb-secondary-950-rgb: 66 32 6;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: ORANGE */
:root {
/* Orange Primary Palette */
--hb-primary-50-rgb: 255 247 237;
--hb-primary-100-rgb: 255 237 213;
--hb-primary-200-rgb: 254 215 170;
--hb-primary-300-rgb: 253 186 116;
--hb-primary-400-rgb: 251 146 60;
--hb-primary-500-rgb: 249 115 22;
--hb-primary-600-rgb: 234 88 12;
--hb-primary-700-rgb: 194 65 12;
--hb-primary-800-rgb: 154 52 18;
--hb-primary-900-rgb: 124 45 18;
--hb-primary-950-rgb: 67 20 7;
/* Red Secondary Palette */
--hb-secondary-50-rgb: 254 242 242;
--hb-secondary-100-rgb: 254 226 226;
--hb-secondary-200-rgb: 254 202 202;
--hb-secondary-300-rgb: 252 165 165;
--hb-secondary-400-rgb: 248 113 113;
--hb-secondary-500-rgb: 239 68 68;
--hb-secondary-600-rgb: 220 38 38;
--hb-secondary-700-rgb: 185 28 28;
--hb-secondary-800-rgb: 153 27 27;
--hb-secondary-900-rgb: 127 29 29;
--hb-secondary-950-rgb: 69 10 10;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: PINK */
:root {
/* Pink Primary Palette */
--hb-primary-50-rgb: 253 242 248;
--hb-primary-100-rgb: 252 231 243;
--hb-primary-200-rgb: 251 207 232;
--hb-primary-300-rgb: 249 168 212;
--hb-primary-400-rgb: 244 114 182;
--hb-primary-500-rgb: 236 72 153;
--hb-primary-600-rgb: 219 39 119;
--hb-primary-700-rgb: 190 24 93;
--hb-primary-800-rgb: 157 23 77;
--hb-primary-900-rgb: 131 24 67;
--hb-primary-950-rgb: 80 7 36;
/* Rose Secondary Palette */
--hb-secondary-50-rgb: 255 241 242;
--hb-secondary-100-rgb: 255 228 230;
--hb-secondary-200-rgb: 254 205 211;
--hb-secondary-300-rgb: 253 164 175;
--hb-secondary-400-rgb: 251 113 133;
--hb-secondary-500-rgb: 244 63 94;
--hb-secondary-600-rgb: 225 29 72;
--hb-secondary-700-rgb: 190 18 60;
--hb-secondary-800-rgb: 159 18 57;
--hb-secondary-900-rgb: 136 19 55;
--hb-secondary-950-rgb: 76 5 25;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: PURPLE */
:root {
--color-primary-50: 250 245 255;
--color-primary-100: 243 232 255;
--color-primary-200: 233 213 255;
--color-primary-300: 216 180 254;
--color-primary-400: 192 132 252;
--color-primary-500: 168 85 247;
--color-primary-600: 147 51 234;
--color-primary-700: 126 34 206;
--color-primary-800: 107 33 168;
--color-primary-900: 88 28 135;
--color-primary-950: 59 7 100;
/* Purple Primary Palette */
--hb-primary-50-rgb: 250 245 255;
--hb-primary-100-rgb: 243 232 255;
--hb-primary-200-rgb: 233 213 255;
--hb-primary-300-rgb: 216 180 254;
--hb-primary-400-rgb: 192 132 252;
--hb-primary-500-rgb: 168 85 247;
--hb-primary-600-rgb: 147 51 234;
--hb-primary-700-rgb: 126 34 206;
--hb-primary-800-rgb: 107 33 168;
--hb-primary-900-rgb: 88 28 135;
--hb-primary-950-rgb: 59 7 100;
/* Violet Secondary Palette */
--hb-secondary-50-rgb: 245 243 255;
--hb-secondary-100-rgb: 237 233 254;
--hb-secondary-200-rgb: 221 214 254;
--hb-secondary-300-rgb: 196 181 253;
--hb-secondary-400-rgb: 167 139 250;
--hb-secondary-500-rgb: 139 92 246;
--hb-secondary-600-rgb: 124 58 237;
--hb-secondary-700-rgb: 109 40 217;
--hb-secondary-800-rgb: 91 33 182;
--hb-secondary-900-rgb: 76 29 149;
--hb-secondary-950-rgb: 46 16 101;
}
+24 -11
View File
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: RED */
:root {
--color-primary-50: 254 242 242;
--color-primary-100: 254 226 226;
--color-primary-200: 254 202 202;
--color-primary-300: 252 165 165;
--color-primary-400: 248 113 113;
--color-primary-500: 239 68 68;
--color-primary-600: 220 38 38;
--color-primary-700: 185 28 28;
--color-primary-800: 153 27 27;
--color-primary-900: 127 29 29;
--color-primary-950: 69 10 10;
/* Red Primary Palette */
--hb-primary-50-rgb: 254 242 242;
--hb-primary-100-rgb: 254 226 226;
--hb-primary-200-rgb: 254 202 202;
--hb-primary-300-rgb: 252 165 165;
--hb-primary-400-rgb: 248 113 113;
--hb-primary-500-rgb: 239 68 68;
--hb-primary-600-rgb: 220 38 38;
--hb-primary-700-rgb: 185 28 28;
--hb-primary-800-rgb: 153 27 27;
--hb-primary-900-rgb: 127 29 29;
--hb-primary-950-rgb: 69 10 10;
/* Orange Secondary Palette */
--hb-secondary-50-rgb: 255 247 237;
--hb-secondary-100-rgb: 255 237 213;
--hb-secondary-200-rgb: 254 215 170;
--hb-secondary-300-rgb: 253 186 116;
--hb-secondary-400-rgb: 251 146 60;
--hb-secondary-500-rgb: 249 115 22;
--hb-secondary-600-rgb: 234 88 12;
--hb-secondary-700-rgb: 194 65 12;
--hb-secondary-800-rgb: 154 52 18;
--hb-secondary-900-rgb: 124 45 18;
--hb-secondary-950-rgb: 67 20 7;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: ROSE */
:root {
--color-primary-50: 255 241 242;
--color-primary-100: 255 228 230;
--color-primary-200: 254 205 211;
--color-primary-300: 253 164 175;
--color-primary-400: 251 113 133;
--color-primary-500: 244 63 94;
--color-primary-600: 225 29 72;
--color-primary-700: 190 18 60;
--color-primary-800: 159 18 57;
--color-primary-900: 136 19 55;
--color-primary-950: 76 5 25;
/* Rose Primary Palette */
--hb-primary-50-rgb: 255 241 242;
--hb-primary-100-rgb: 255 228 230;
--hb-primary-200-rgb: 254 205 211;
--hb-primary-300-rgb: 253 164 175;
--hb-primary-400-rgb: 251 113 133;
--hb-primary-500-rgb: 244 63 94;
--hb-primary-600-rgb: 225 29 72;
--hb-primary-700-rgb: 190 18 60;
--hb-primary-800-rgb: 159 18 57;
--hb-primary-900-rgb: 136 19 55;
--hb-primary-950-rgb: 76 5 25;
/* Pink Secondary Palette */
--hb-secondary-50-rgb: 253 242 248;
--hb-secondary-100-rgb: 252 231 243;
--hb-secondary-200-rgb: 251 207 232;
--hb-secondary-300-rgb: 249 168 212;
--hb-secondary-400-rgb: 244 114 182;
--hb-secondary-500-rgb: 236 72 153;
--hb-secondary-600-rgb: 219 39 119;
--hb-secondary-700-rgb: 190 24 93;
--hb-secondary-800-rgb: 157 23 77;
--hb-secondary-900-rgb: 131 24 67;
--hb-secondary-950-rgb: 80 7 36;
}
+24 -11
View File
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: SKY */
:root {
--color-primary-50: 240 249 255;
--color-primary-100: 224 242 254;
--color-primary-200: 186 230 253;
--color-primary-300: 125 211 252;
--color-primary-400: 56 189 248;
--color-primary-500: 14 165 233;
--color-primary-600: 2 132 199;
--color-primary-700: 3 105 161;
--color-primary-800: 7 89 133;
--color-primary-900: 12 74 110;
--color-primary-950: 8 47 73;
/* Sky Primary Palette */
--hb-primary-50-rgb: 240 249 255;
--hb-primary-100-rgb: 224 242 254;
--hb-primary-200-rgb: 186 230 253;
--hb-primary-300-rgb: 125 211 252;
--hb-primary-400-rgb: 56 189 248;
--hb-primary-500-rgb: 14 165 233;
--hb-primary-600-rgb: 2 132 199;
--hb-primary-700-rgb: 3 105 161;
--hb-primary-800-rgb: 7 89 133;
--hb-primary-900-rgb: 12 74 110;
--hb-primary-950-rgb: 8 47 73;
/* Cyan Secondary Palette */
--hb-secondary-50-rgb: 236 254 255;
--hb-secondary-100-rgb: 207 250 254;
--hb-secondary-200-rgb: 165 243 252;
--hb-secondary-300-rgb: 103 232 249;
--hb-secondary-400-rgb: 34 211 238;
--hb-secondary-500-rgb: 6 182 212;
--hb-secondary-600-rgb: 8 145 178;
--hb-secondary-700-rgb: 14 116 144;
--hb-secondary-800-rgb: 21 94 117;
--hb-secondary-900-rgb: 22 78 99;
--hb-secondary-950-rgb: 8 51 68;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: SLATE */
:root {
/* Slate Primary Palette */
--hb-primary-50-rgb: 248 250 252;
--hb-primary-100-rgb: 241 245 249;
--hb-primary-200-rgb: 226 232 240;
--hb-primary-300-rgb: 203 213 225;
--hb-primary-400-rgb: 148 163 184;
--hb-primary-500-rgb: 100 116 139;
--hb-primary-600-rgb: 71 85 105;
--hb-primary-700-rgb: 51 65 85;
--hb-primary-800-rgb: 30 41 59;
--hb-primary-900-rgb: 15 23 42;
--hb-primary-950-rgb: 2 6 23;
/* Stone Secondary Palette */
--hb-secondary-50-rgb: 250 250 249;
--hb-secondary-100-rgb: 245 245 244;
--hb-secondary-200-rgb: 231 229 228;
--hb-secondary-300-rgb: 214 211 209;
--hb-secondary-400-rgb: 168 162 158;
--hb-secondary-500-rgb: 120 113 108;
--hb-secondary-600-rgb: 87 83 78;
--hb-secondary-700-rgb: 68 64 60;
--hb-secondary-800-rgb: 41 37 36;
--hb-secondary-900-rgb: 28 25 23;
--hb-secondary-950-rgb: 12 10 9;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: STONE */
:root {
/* Stone Primary Palette */
--hb-primary-50-rgb: 250 250 249;
--hb-primary-100-rgb: 245 245 244;
--hb-primary-200-rgb: 231 229 228;
--hb-primary-300-rgb: 214 211 209;
--hb-primary-400-rgb: 168 162 158;
--hb-primary-500-rgb: 120 113 108;
--hb-primary-600-rgb: 87 83 78;
--hb-primary-700-rgb: 68 64 60;
--hb-primary-800-rgb: 41 37 36;
--hb-primary-900-rgb: 28 25 23;
--hb-primary-950-rgb: 12 10 9;
/* Slate Secondary Palette */
--hb-secondary-50-rgb: 248 250 252;
--hb-secondary-100-rgb: 241 245 249;
--hb-secondary-200-rgb: 226 232 240;
--hb-secondary-300-rgb: 203 213 225;
--hb-secondary-400-rgb: 148 163 184;
--hb-secondary-500-rgb: 100 116 139;
--hb-secondary-600-rgb: 71 85 105;
--hb-secondary-700-rgb: 51 65 85;
--hb-secondary-800-rgb: 30 41 59;
--hb-secondary-900-rgb: 15 23 42;
--hb-secondary-950-rgb: 2 6 23;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: TEAL */
:root {
--color-primary-50: 240 253 250;
--color-primary-100: 204 251 241;
--color-primary-200: 153 246 228;
--color-primary-300: 94 234 212;
--color-primary-400: 45 212 191;
--color-primary-500: 20 184 166;
--color-primary-600: 13 148 136;
--color-primary-700: 15 118 110;
--color-primary-800: 17 94 89;
--color-primary-900: 19 78 74;
--color-primary-950: 4 47 46;
/* Teal Primary Palette */
--hb-primary-50-rgb: 240 253 250;
--hb-primary-100-rgb: 204 251 241;
--hb-primary-200-rgb: 153 246 228;
--hb-primary-300-rgb: 94 234 212;
--hb-primary-400-rgb: 45 212 191;
--hb-primary-500-rgb: 20 184 166;
--hb-primary-600-rgb: 13 148 136;
--hb-primary-700-rgb: 15 118 110;
--hb-primary-800-rgb: 17 94 89;
--hb-primary-900-rgb: 19 78 74;
--hb-primary-950-rgb: 4 47 46;
/* Emerald Secondary Palette */
--hb-secondary-50-rgb: 236 253 245;
--hb-secondary-100-rgb: 209 250 229;
--hb-secondary-200-rgb: 167 243 208;
--hb-secondary-300-rgb: 110 231 183;
--hb-secondary-400-rgb: 52 211 153;
--hb-secondary-500-rgb: 16 185 129;
--hb-secondary-600-rgb: 5 150 105;
--hb-secondary-700-rgb: 4 120 87;
--hb-secondary-800-rgb: 6 95 70;
--hb-secondary-900-rgb: 6 78 59;
--hb-secondary-950-rgb: 2 44 34;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: VIOLET */
:root {
/* Violet Primary Palette */
--hb-primary-50-rgb: 245 243 255;
--hb-primary-100-rgb: 237 233 254;
--hb-primary-200-rgb: 221 214 254;
--hb-primary-300-rgb: 196 181 253;
--hb-primary-400-rgb: 167 139 250;
--hb-primary-500-rgb: 139 92 246;
--hb-primary-600-rgb: 124 58 237;
--hb-primary-700-rgb: 109 40 217;
--hb-primary-800-rgb: 91 33 182;
--hb-primary-900-rgb: 76 29 149;
--hb-primary-950-rgb: 46 16 101;
/* Fuchsia Secondary Palette */
--hb-secondary-50-rgb: 253 244 255;
--hb-secondary-100-rgb: 250 232 255;
--hb-secondary-200-rgb: 245 208 254;
--hb-secondary-300-rgb: 240 171 252;
--hb-secondary-400-rgb: 232 121 249;
--hb-secondary-500-rgb: 217 70 239;
--hb-secondary-600-rgb: 192 38 211;
--hb-secondary-700-rgb: 162 28 175;
--hb-secondary-800-rgb: 134 25 143;
--hb-secondary-900-rgb: 112 26 117;
--hb-secondary-950-rgb: 74 4 78;
}
@@ -0,0 +1,27 @@
/* Hugo Blox color theme: YELLOW */
:root {
/* Yellow Primary Palette */
--hb-primary-50-rgb: 254 252 232;
--hb-primary-100-rgb: 254 249 195;
--hb-primary-200-rgb: 254 240 138;
--hb-primary-300-rgb: 253 224 71;
--hb-primary-400-rgb: 250 204 21;
--hb-primary-500-rgb: 234 179 8;
--hb-primary-600-rgb: 202 138 4;
--hb-primary-700-rgb: 161 98 7;
--hb-primary-800-rgb: 133 77 14;
--hb-primary-900-rgb: 113 63 18;
--hb-primary-950-rgb: 66 32 6;
/* Amber Secondary Palette */
--hb-secondary-50-rgb: 255 251 235;
--hb-secondary-100-rgb: 254 243 199;
--hb-secondary-200-rgb: 253 230 138;
--hb-secondary-300-rgb: 252 211 77;
--hb-secondary-400-rgb: 251 191 36;
--hb-secondary-500-rgb: 245 158 11;
--hb-secondary-600-rgb: 217 119 6;
--hb-secondary-700-rgb: 180 83 9;
--hb-secondary-800-rgb: 146 64 14;
--hb-secondary-900-rgb: 120 53 15;
--hb-secondary-950-rgb: 69 26 3;
}
@@ -1,14 +1,27 @@
/* Hugo Blox color theme: ZINC */
:root {
--color-primary-50: 250 250 250;
--color-primary-100: 244 244 245;
--color-primary-200: 228 228 231;
--color-primary-300: 212 212 216;
--color-primary-400: 161 161 170;
--color-primary-500: 113 113 122;
--color-primary-600: 82 82 91;
--color-primary-700: 63 63 70;
--color-primary-800: 39 39 42;
--color-primary-900: 24 24 27;
--color-primary-950: 9 9 11;
/* Zinc Primary Palette */
--hb-primary-50-rgb: 250 250 250;
--hb-primary-100-rgb: 244 244 245;
--hb-primary-200-rgb: 228 228 231;
--hb-primary-300-rgb: 212 212 216;
--hb-primary-400-rgb: 161 161 170;
--hb-primary-500-rgb: 113 113 122;
--hb-primary-600-rgb: 82 82 91;
--hb-primary-700-rgb: 63 63 70;
--hb-primary-800-rgb: 39 39 42;
--hb-primary-900-rgb: 24 24 27;
--hb-primary-950-rgb: 9 9 11;
/* Slate Secondary Palette */
--hb-secondary-50-rgb: 248 250 252;
--hb-secondary-100-rgb: 241 245 249;
--hb-secondary-200-rgb: 226 232 240;
--hb-secondary-300-rgb: 203 213 225;
--hb-secondary-400-rgb: 148 163 184;
--hb-secondary-500-rgb: 100 116 139;
--hb-secondary-600-rgb: 71 85 105;
--hb-secondary-700-rgb: 51 65 85;
--hb-secondary-800-rgb: 30 41 59;
--hb-secondary-900-rgb: 15 23 42;
--hb-secondary-950-rgb: 2 6 23;
}
@@ -29,7 +29,7 @@
{{- $icon := .icon }}
{{ with $icon }}
<div class="w-7 h-7 text-gray-500 dark:text-gray-400 mb-3">
{{ partial "functions/get_icon" (dict "name" $icon "pack" "brands" "attributes" "style=\"height: 100%;\"") }}
{{ partial "functions/get_icon" (dict "name" $icon "attributes" "style=\"height: 100%;\"") }}
</div>
{{ end}}
{{with .url}}<a href={{.}} target="_blank" rel="noopener">{{end}}
@@ -4,6 +4,24 @@
Present a complete professional picture with the Resume Biography 3 block - an expanded biography layout that combines personal information, social presence, education history, and interests in one cohesive, horizontally-oriented section.
## 🛠️ Customization
- **Section heading overrides**: Customize any of the three main section headings using `content.headings`:
- `about`: Biography section heading (default: "Professional Summary" from i18n `about_me`)
- `education`: Education section heading (default: from i18n `education`)
- `interests`: Interests section heading (default: from i18n `interests`)
Example front matter:
```yaml
block: resume-biography-3
content:
headings:
about: Research Profile
education: Academic Background
interests: Research Areas
```
## ✨ Key Features
- **Horizontal Layout**: Desktop-optimized side-by-side arrangement for better space utilization
@@ -57,4 +75,3 @@ Present a complete professional picture with the Resume Biography 3 block - an e
Perfect for academics, researchers, consultants, and professionals who want to present a complete picture of their background, education, and interests in one comprehensive, beautifully designed section.
Create a professional profile that tells your complete story and opens doors to new opportunities.
@@ -17,12 +17,12 @@
{{ $avatar := ($person_page.Resources.ByType "image").GetMatch "*avatar*" }}
{{/* Avatar customization parameters */}}
{{ $avatar_size := $block.design.avatar.size | default "medium" }}
{{ $avatar_size := $block.design.avatar.size | default "large" }}
{{ $avatar_shape := $block.design.avatar.shape | default "circle" }}
{{/* Size mappings optimized for 2025 standards: display_size -> [display_px, generation_px] */}}
{{ $size_map := dict "small" (slice "150" "300") "medium" (slice "200" "400") "large" (slice "320" "640") "xl" (slice "400" "800") "xxl" (slice "500" "1000") }}
{{ $size_config := index $size_map $avatar_size | default (index $size_map "medium") }}
{{ $size_config := index $size_map $avatar_size | default (index $size_map "large") }}
{{ $display_size := index $size_config 0 }}
{{ $generation_size := index $size_config 1 }}
@@ -30,169 +30,202 @@
{{ $shape_classes := dict "circle" "rounded-full" "square" "rounded-none" "rounded" "rounded-lg" }}
{{ $shape_class := index $shape_classes $avatar_shape | default "rounded-full" }}
<div class="resume-biography px-3 flex flex-col md:flex-row justify-center gap-12">
<div class="flex-none m-w-[130px] mx-auto md:mx-0">
{{ $img := "" }}
{{with $block.design.banner.filename}}
{{- $img = resources.Get (path.Join "media" .) -}}
{{ if $img }}
{{ if ne $img.MediaType.SubType "gif" }}
{{ $responsive := partial "functions/process_responsive_image.html" (dict
"image" $img
"mode" "fill"
"aspect_ratio" "16:9"
"sizes" (slice 768 1024 1366 1920 2560)
) }}
<div class="w-full bg-gray-200 dark:bg-gray-900 flex flex-wrap items-center justify-center">
<div class="w-full bg-white rounded dark:bg-gray-800">
<div class="h-2/4 sm:h-64 overflow-hidden w-full">
<img class="w-full object-cover"
srcset="{{ $responsive.srcset }}"
sizes="100vw"
src="{{ $responsive.fallback.RelPermalink }}"
width="{{ $responsive.fallback.Width }}"
height="{{ $responsive.fallback.Height }}"
alt="" />
</div>
</div>
</div>
{{ else }}
{{/* Handle GIF without processing */}}
{{- $img = $img.Process "webp" -}}
<div class="w-full bg-gray-200 dark:bg-gray-900 flex flex-wrap items-center justify-center">
<div class="w-full bg-white rounded dark:bg-gray-800">
<div class="h-2/4 sm:h-64 overflow-hidden w-full">
<img class="w-full object-cover"
src="{{$img.RelPermalink}}"
width="{{$img.Width}}" height="{{$img.Height}}"
alt="" />
</div>
</div>
</div>
{{ end }}
{{ end }}
{{ end }}
<div id="profile" class="flex justify-center items-center flex-col">
{{ if $avatar }}
<div class="avatar-wrapper {{ if $img }}-mt-[105px]{{else}}mt-10{{end}}" style="width: {{$display_size}}px; height: {{$display_size}}px;">
{{ $avatar_image := $avatar.Fill (printf "%sx%s Center" $generation_size $generation_size) }}
<img class="avatar {{$shape_class}} bg-white dark:bg-gray-800 p-1" src="{{ $avatar_image.RelPermalink }}" alt="{{$person_page.Title}}"
width="{{$display_size}}" height="{{$display_size}}"
style="width: {{$display_size}}px; height: {{$display_size}}px; object-fit: cover;">
{{with $person.status.icon}}<span class="avatar-emoji">{{.|emojify}}</span>{{end}}
</div>
{{ end }}
<div class="portrait-title dark:text-white">
<div class="text-3xl font-bold mb-2 mt-6">
{{- if $person.name_pronunciation -}}
<ruby>
<rb>{{ $person_page.Title }}</rb>
<rt>{{ $person.name_pronunciation }}</rt>
</ruby>
{{- else -}}
{{- $person_page.Title -}}
{{- end -}}
</div>
{{- with $person.pronouns -}}
<div class="text-lg font-normal text-gray-600 dark:text-gray-400 -mt-1 mb-2">({{ . }})</div>
{{- end -}}
{{ with $person.role }}<h3 class="font-semibold mb-1">{{ . | markdownify | emojify }}</h3>{{ end }}
{{ range $person.organizations }}
<div class="mb-2">
{{ with .url }}<a href="{{ . }}" target="_blank" rel="noopener">{{ end }}
<div>{{ .name }}</div>
{{ if .url }}</a>{{ end }}
</div>
{{ end }}
</div>
<ul class="network-icon dark:text-zinc-100">
{{ range $person.profiles }}
{{ $pack := or .icon_pack "fas" }}
{{ $pack_prefix := $pack }}
{{ if in (slice "fab" "fas" "far" "fal") $pack }}
{{ $pack_prefix = "fa" }}
{{ end }}
{{ $link := .url | default .link }}
{{ $scheme := (urls.Parse $link).Scheme }}
{{ $target := "" }}
{{ if not $scheme }}
{{ $link = (.url | default .link) | relLangURL }}
{{ if eq (path.Ext $link) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }}
{{ else if in (slice "http" "https") $scheme }}
{{ $target = "target=\"_blank\" rel=\"noopener\"" }}
{{ end }}
<li>
<a href="{{ $link | safeURL }}" {{ $target | safeHTMLAttr }} aria-label="{{ .icon }}"
{{ with .label }} data-toggle="tooltip" data-placement="top" title="{{.}}"{{ end }}>
{{ partial "functions/get_icon" (dict "name" .icon "attributes" "style=\"height: 1.5rem;\"") }}
</a>
</li>
{{ end }}
</ul>
</div>
</div>
<div class="flex-auto max-w-prose md:mt-12">
{{ with ($block.content.text | emojify | $page.RenderString) | default $person_page.Content }}
<div class="pt-2 justify-content-center prose prose-slate dark:prose-invert">
<div class="bio-text" {{ with $block.design.biography.style }}{{ (printf "style=\"%s\"" .) | safe.HTMLAttr }}{{end}}>
{{ . }}
</div>
</div>
{{ end }}
{{ with $block.content.button }}
<a href="{{.url}}" target="_blank" class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-900 bg-white border border-gray-200 rounded-lg hover:bg-gray-100 hover:text-primary-700 focus:z-10 focus:ring-4 focus:outline-none focus:ring-gray-200 focus:text-primary-700 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700 dark:focus:ring-gray-700"><svg class="w-3.5 h-3.5 me-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20">
<path d="M14.707 7.793a1 1 0 0 0-1.414 0L11 10.086V1.5a1 1 0 0 0-2 0v8.586L6.707 7.793a1 1 0 1 0-1.414 1.414l4 4a1 1 0 0 0 1.416 0l4-4a1 1 0 0 0-.002-1.414Z"/>
<path d="M18 12h-2.55l-2.975 2.975a3.5 3.5 0 0 1-4.95 0L4.55 12H2a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2Zm-3 5a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"/>
</svg> {{.text}}</a>
{{ end }}
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 justify-between mt-6 dark:text-gray-300">
{{ with $person.interests }}
<div class="">
<div class="section-subheading mb-3">{{ i18n "interests" | markdownify }}</div>
<ul class="list-disc list-inside space-y-1 pl-5">
{{ range . }}
<li>
{{ . | markdownify | emojify }}
</li>
{{ end }}
</ul>
</div>
{{ end }}
{{ with $person.education }}
<div class="">
<div class="section-subheading mb-3">{{ i18n "education" | markdownify }}</div>
<ul class="">
{{ range . }}
<li class="flex items-start gap-3">
{{ partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "style=\"\" class='flex-shrink-0 w-5 h-5 me-2 mt-1'") }}
<div class="description">
<p class="course">{{ .area }}{{ with .year }}, {{ . }}{{ end }}</p>
<p class="text-sm">{{ .institution }}</p>
<div class="resume-biography py-8 px-4 sm:py-12 md:py-16 lg:py-24 xl:py-32 relative overflow-hidden">
{{/* Add subtle top gradient for navbar transition */}}
<div class="max-w-7xl mx-auto">
<div class="grid grid-cols-1 md:grid-cols-12 gap-6 md:gap-8 items-start">
{{/* Left Column: Flexible span */}}
<div class="md:col-span-4 flex flex-col items-center text-center space-y-6 md:space-y-8">
{{/* Banner Image */}}
{{ $img := "" }}
{{with $block.design.banner.filename}}
{{- $img = resources.Get (path.Join "media" .) -}}
{{ if $img }}
<div class="relative w-full h-64 rounded-2xl overflow-hidden shadow-xl mb-8">
{{ if ne $img.MediaType.SubType "gif" }}
{{ $responsive := partial "functions/process_responsive_image.html" (dict
"image" $img
"mode" "fill"
"aspect_ratio" "16:9"
"sizes" (slice 768 1024 1366 1920 2560)
) }}
<img class="absolute inset-0 w-full h-full object-cover"
srcset="{{ $responsive.srcset }}"
sizes="100vw"
src="{{ $responsive.fallback.RelPermalink }}"
alt="" />
{{ else }}
{{- $img = $img.Process "webp" -}}
<img class="absolute inset-0 w-full h-full object-cover"
src="{{$img.RelPermalink}}"
alt="" />
{{ end }}
</div>
</li>
{{ end }}
</ul>
{{ end }}
{{/* Avatar */}}
{{ if $avatar }}
<div class="avatar-wrapper {{ if $img }}-mt-24{{else}}mb-4{{end}}" style="width: {{$display_size}}px; height: {{$display_size}}px;">
{{ $avatar_image := $avatar.Fill (printf "%sx%s Center" $generation_size $generation_size) }}
<img class="avatar {{$shape_class}} border-4 border-white shadow-2xl"
src="{{ $avatar_image.RelPermalink }}"
alt="{{$person_page.Title}}"
width="{{$display_size}}"
height="{{$display_size}}"
style="width: {{$display_size}}px; height: {{$display_size}}px; object-fit: cover;">
{{with $person.status.icon}}<span class="avatar-emoji">{{.|emojify}}</span>{{end}}
</div>
{{ end }}
{{/* Name and Role - Centered */}}
<div class="space-y-3">
<h1 class="text-5xl lg:text-6xl font-black text-gray-900 dark:text-white leading-tight">
{{- if $person.name_pronunciation -}}
<ruby>
<rb>{{ $person_page.Title }}</rb>
<rt class="text-sm text-gray-500 dark:text-gray-400">{{ $person.name_pronunciation }}</rt>
</ruby>
{{- else -}}
{{- $person_page.Title -}}
{{- end -}}
</h1>
{{- with $person.pronouns -}}
<p class="text-lg text-gray-600 dark:text-gray-400">({{ . }})</p>
{{- end -}}
{{ with $person.role }}
<p class="text-2xl font-semibold text-primary-600 dark:text-primary-400">{{ . | markdownify | emojify }}</p>
{{ end }}
{{ range $person.organizations }}
<p class="text-lg text-gray-700 dark:text-gray-300">
{{ with .url }}<a href="{{ . }}" target="_blank" rel="noopener" class="hover:text-primary-600 dark:hover:text-primary-400 transition-colors">{{ end }}
{{ .name }}
{{ if .url }}</a>{{ end }}
</p>
{{ end }}
</div>
{{/* Social Icons */}}
<div class="flex flex-wrap justify-center gap-4">
{{ range $person.profiles }}
{{ $pack := or .icon_pack "fas" }}
{{ $pack_prefix := $pack }}
{{ if in (slice "fab" "fas" "far" "fal") $pack }}
{{ $pack_prefix = "fa" }}
{{ end }}
{{ $link := .url | default .link }}
{{ $scheme := (urls.Parse $link).Scheme }}
{{ $target := "" }}
{{ if not $scheme }}
{{ $link = (.url | default .link) | relLangURL }}
{{ if eq (path.Ext $link) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }}
{{ else if in (slice "http" "https") $scheme }}
{{ $target = "target=\"_blank\" rel=\"noopener\"" }}
{{ end }}
<a href="{{ $link | safeURL }}" {{ $target | safeHTMLAttr }}
aria-label="{{ .icon }}"
{{ with .label }} title="{{.}}"{{ end }}
class="w-12 h-12 flex items-center justify-center rounded-full bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-400
shadow-md hover:shadow-xl hover:scale-110 hover:-translate-y-1
transition-all duration-300 border border-gray-200 dark:border-gray-700">
{{ partial "functions/get_icon" (dict "name" .icon "attributes" "class=\"w-6 h-6\"") }}
</a>
{{ end }}
</div>
</div>
{{/* Right Column: Flexible span */}}
<div class="md:col-span-8">
{{/* Bio Section */}}
{{ with ($block.content.text | emojify | $page.RenderString) | default $person_page.Content }}
<div class="mb-12">
<div class="flex items-center gap-4 mb-8">
<div class="flex-shrink-0 w-12 h-12 bg-primary-100 dark:bg-primary-900/50 rounded-full flex items-center justify-center">
{{ partial "functions/get_icon" (dict "name" "identification" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }}
</div>
{{ $i18n_about := i18n "about_me" }}
{{ $about_default := cond (eq $i18n_about "about_me") "Professional Summary" $i18n_about }}
{{ $about_heading := $block.content.headings.about | default $about_default }}
<h2 class="text-xl sm:text-2xl lg:text-3xl font-bold text-gray-900 dark:text-white tracking-tight">{{ $about_heading }}</h2>
</div>
<div class="prose prose-lg dark:prose-invert text-gray-800 dark:text-gray-200 text-base sm:text-lg leading-relaxed">
<div class="bio-text" {{ with $block.design.biography.style }}{{ (printf "style=\"%s\"" .) | safe.HTMLAttr }}{{end}}>
{{ . }}
</div>
</div>
</div>
{{ end }}
{{/* CV Download Button */}}
{{ with $block.content.button }}
<div class="mb-16">
<a href="{{.url}}" target="_blank"
class="inline-flex items-center px-8 py-4 bg-gradient-to-r from-primary-600 to-secondary-600 hover:from-primary-700 hover:to-secondary-700 text-white font-bold text-lg rounded-xl shadow-lg hover:shadow-xl hover:scale-105 transition-all duration-300">
{{ partial "functions/get_icon" (dict "name" "document-arrow-down" "attributes" "class='w-5 h-5 mr-3'") }}
{{.text}}
</a>
</div>
{{ end }}
{{/* Education Section */}}
{{ with $person.education }}
<div class="mb-16">
<div class="flex items-center gap-4 mb-8">
<div class="flex-shrink-0 w-12 h-12 bg-primary-100 dark:bg-primary-900/50 rounded-full flex items-center justify-center">
{{ partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }}
</div>
{{ $education_heading := $block.content.headings.education | default (i18n "education") }}
<h3 class="text-xl sm:text-2xl lg:text-3xl font-bold text-gray-900 dark:text-white tracking-tight">{{ $education_heading | markdownify }}</h3>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-6">
{{ range . }}
<div class="group h-full flex flex-col bg-gradient-to-br from-white/90 to-primary-50/30 dark:from-gray-800/90 dark:to-primary-900/20 rounded-xl p-6 shadow-md hover:shadow-xl transition-all duration-300 border border-transparent hover:border-primary-200 dark:hover:border-primary-800 backdrop-blur-md">
<div class="flex gap-4">
<div class="flex-shrink-0 w-12 h-12 bg-primary-600 rounded-full flex items-center justify-center shadow-md">
{{ partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "class='w-6 h-6 text-white'") }}
</div>
<div class="flex-1 flex-grow">
<p class="text-xl font-bold text-gray-900 dark:text-white group-hover:text-primary-600 dark:group-hover:text-primary-400 transition-colors">
{{ .area }}{{ with .year }}, {{ . }}{{ end }}
</p>
<p class="text-gray-600 dark:text-gray-400 font-medium mt-1">{{ .institution }}</p>
</div>
</div>
</div>
{{ end }}
</div>
</div>
{{ end }}
{{/* Interests Section */}}
{{ with $person.interests }}
<div>
<div class="flex items-center gap-4 mb-8">
<div class="flex-shrink-0 w-12 h-12 bg-primary-100 dark:bg-primary-900/50 rounded-full flex items-center justify-center">
{{ partial "functions/get_icon" (dict "name" "sparkles" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }}
</div>
{{ $interests_heading := $block.content.headings.interests | default (i18n "interests") }}
<h3 class="text-xl font-bold text-gray-900 dark:text-white tracking-tight">{{ $interests_heading | markdownify }}</h3>
</div>
<div class="flex flex-wrap gap-3">
{{ range . }}
<span class="inline-block bg-primary-50 dark:bg-gray-800 text-primary-800 dark:text-primary-200 text-base font-medium px-4 py-2 rounded-full border border-primary-200/50 dark:border-primary-800/50
hover:bg-primary-100
dark:hover:bg-primary-500 dark:hover:text-gray-900 dark:hover:border-primary-500
transition-all duration-200 cursor-default">
{{ . | markdownify | emojify }}
</span>
{{ end }}
</div>
</div>
{{ end }}
</div>
</div>
{{ end }}
</div>
</div>
</div>
</div>
@@ -26,6 +26,24 @@
"type": "string",
"description": "Biography text override (supports Markdown). If not provided, uses author page content."
},
"headings": {
"type": "object",
"description": "Optional custom headings for sections",
"properties": {
"about": {
"type": "string",
"description": "Heading for biography section (default: Professional Summary)"
},
"education": {
"type": "string",
"description": "Heading for education section (default: from i18n 'education')"
},
"interests": {
"type": "string",
"description": "Heading for interests section (default: from i18n 'interests')"
}
}
},
"button": {
"type": "object",
"description": "Optional call-to-action button",
@@ -97,4 +115,3 @@
}
]
}
+3
View File
@@ -147,6 +147,9 @@
- id: education
translation: Education
- id: about_me
translation: Professional Summary
- id: user_profile_latest
translation: Latest