7.1 KiB
7.1 KiB
Design System & Theme
Tailwind Configuration
tailwind.config.js
File doesn't exist. The project uses Tailwind CSS v4 with @tailwindcss/vite plugin for compilation.
CSS Configuration
resources/css/app.css
@import 'leaflet/dist/leaflet.css';
@import 'tailwindcss';
@import '../../vendor/livewire/flux/dist/flux.css';
@source '../views';
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
@source '../../vendor/livewire/flux/stubs/**/*.blade.php';
@custom-variant dark (&:where(.dark, .dark *));
@theme {
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--color-zinc-50: #fafafa;
--color-zinc-100: #f5f5f5;
--color-zinc-200: #e5e5e5;
--color-zinc-300: #d4d4d4;
--color-zinc-400: #a3a3a3;
--color-zinc-500: #737373;
--color-zinc-600: #525252;
--color-zinc-700: #404040;
--color-zinc-800: #262626;
--color-zinc-900: #171717;
--color-zinc-950: #0a0a0a;
--color-accent: var(--color-neutral-800);
--color-accent-content: var(--color-neutral-800);
--color-accent-foreground: var(--color-white);
}
@layer theme {
.dark {
--color-accent: var(--color-white);
--color-accent-content: var(--color-white);
--color-accent-foreground: var(--color-neutral-800);
}
}
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-gray-200, currentColor);
}
}
[data-flux-field]:not(ui-radio, ui-checkbox) {
@apply grid gap-2;
}
[data-flux-label] {
@apply !mb-0 !leading-tight;
}
input:focus[data-flux-control],
textarea:focus[data-flux-control],
select:focus[data-flux-control] {
@apply outline-hidden ring-2 ring-accent ring-offset-2 ring-offset-accent-foreground;
}
Color Palette
Primary Colors
- Zinc Palette (grays): 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950
- Used for backgrounds, borders, text
Accent Colors
- Dark Mode: White/neutral-800 depending on context
- Light Mode: neutral-800
- Accent Foreground: White (light mode), neutral-800 (dark mode)
- Accent Content: neutral-800 (light), white (dark)
Status Colors
- Success: green-500, green-600
- Warning: amber-500, amber-400
- Error: red-500, red-400, red-600
- Info: slate-500
Semantic Colors (from Station Search)
- Current Price (fresh): green-500 (#22c55e)
- Recent (24-48h): slate-500 (#64748b)
- Stale (2-5 days): amber-500 (#f59e0b)
- Outdated (5+ days): red-500 (#ef4444)
Typography
Font Family
- Primary: 'Instrument Sans' (Weights: 400, 500, 600)
- Fallback: ui-sans-serif, system-ui, sans-serif
- Emoji: Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji
Font Sizes & Weights (via Flux)
- Heading (XL): Used for page titles
- Heading (LG): Used for section titles
- Subheading: Used for descriptions
- Text: Standard body text
- Label: Form labels
- Badge: Small text labels
Spacing System
Based on Tailwind default scale:
- Base Unit: 4px (1 = 4px)
- Common Spacing:
gap-2: 8px (0.5rem)gap-3: 12px (0.75rem)gap-4: 16px (1rem)gap-6: 24px (1.5rem)px-4: 16px horizontal paddingpy-3: 12px vertical paddingp-6: 24px all sides paddingp-10: 40px all sides padding
Border & Radius
Border Colors
- Light:
border-zinc-200 - Dark:
border-zinc-700(primary),border-stone-800(cards),border-neutral-800(split layout)
Border Radius
- Input/buttons: Default Flux radius
- Cards:
rounded-xl(larger radius) - Icons/small:
rounded-md
Dark Mode
Implementation
- Uses
class="dark"on<html>root - Custom variant:
@custom-variant dark (&:where(.dark, .dark *)) - Flux
@fluxAppearancedirective manages theme toggle
Dark Mode Colors
- Body BG:
dark:bg-zinc-800 - Header/Sidebar BG:
dark:bg-zinc-900 - Borders:
dark:border-zinc-700 - Text:
dark:text-zinc-100(headings),dark:text-zinc-400(secondary)
Accent in Dark Mode
--color-accent: var(--color-white)--color-accent-foreground: var(--color-neutral-800)
Responsive Design
Breakpoints (Tailwind defaults)
- sm: 640px
- md: 768px
- lg: 1024px
- xl: 1280px
- 2xl: 1536px
Usage Patterns
max-lg:hidden- Hide on mobile/tabletlg:hidden- Hide on desktopmax-md:flex-col- Stack on small screenssm:flex-row- Row layout on small+ screensmd:w-[220px]- Fixed width on medium+
Component-Specific Theming
Forms (Flux)
[data-flux-field]: grid gap-2 layout[data-flux-label]: No margin-bottom, tight line-height- Focus states: ring-2 ring-accent with ring-offset
Flux Appearance
- Automatically applied via
@fluxAppearancedirective - Manages light/dark mode toggle
- Integrates with browser's prefers-color-scheme
Leaflet Map
- Uses default OSM tiles
- Custom marker colors: green (current), slate (recent), amber (stale), red (outdated)
- Markers: 9px radius, white stroke, 2px weight, 85% fill opacity
Brand Identity
Logo
- Primary Icon: Custom SVG (geometric design)
- Color: Adapts to theme (black light mode, white dark mode)
- Name: "Laravel Starter Kit"
- Contexts:
- Header/nav:
flux:brand - Sidebar:
flux:sidebar.brand
- Header/nav:
Loading/Placeholder States
- Pattern SVG with diagonal lines
- Color:
stroke-gray-900/20(light) orstroke-neutral-100/20(dark)
Animations & Transitions
Alpine.js Transitions
- Message Dismiss:
x-show.transition.out.opacity.duration.1500ms - Fade effects: opacity transitions over 1500ms
Flux Components
- Built-in animations for:
- Dropdown menus
- Sidebar collapse/expand
- Modal opens/closes
CSS Custom Properties (Tokens)
--font-sans: 'Instrument Sans', ...
--color-zinc-50 through --color-zinc-950
--color-accent
--color-accent-content
--color-accent-foreground
Vite Build Configuration
File: vite.config.js
import {
defineConfig
} from 'vite';
import laravel from 'laravel-vite-plugin';
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
plugins: [
laravel({
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),
tailwindcss(),
],
server: {
cors: true,
watch: {
ignored: ['**/storage/framework/views/**'],
},
},
});
Features:
- Tailwind CSS v4 via @tailwindcss/vite plugin
- Automatic CSS/JS refresh
- CORS enabled for dev server
- Ignores Laravel view cache files
Flux UI Theme Configuration
Flux v2 is configured via:
- CSS import:
@import '../../vendor/livewire/flux/dist/flux.css' - Content sources point to Flux stubs for autocomplete
@fluxAppearancehandles dark mode toggling@fluxScriptsloads JavaScript enhancements
No custom Flux config file exists; uses defaults with CSS customizations.