Files
Bookra/apps/frontend/tailwind.config.cjs
T
Tomas Dvorak da5ba13eab feat(ui): implement comprehensive dashboard and enhance frontend experience
This commit introduces a major overhaul of the user interface, transitioning from a basic structure to a feature-rich dashboard system. Key improvements include:

- **Dashboard Implementation**: Added a complete dashboard routing system with dedicated pages for Overview, Bookings, Customers, Zones, Billing, and Settings.
- **New UI Components**: Introduced a variety of high-quality components including `AnimatedList`, `FloatingDock`, `HoverFeatureCards`, `VideoPlayer` (with ambient glow effect), `PinnedList`, and `DashboardMockup`.
- **Enhanced Dashboard Features**:
    - Integrated real-time KPI cards and activity timelines.
    - Implemented a multi-view calendar system.
    - Added customer and booking management interfaces with filtering and search capabilities.
    - Added a zone/location management view with map integration.
- **Branding & Visuals**: Updated the application with new SVG logos (horizontal and vertical variants) and implemented dark/light mode optimized branding.
- **Internationalization**: Expanded i18n support with comprehensive Czech and English translations for the new dashboard and integration modules.
- **Integration Tools**: Added a new `IntegrationModal` allowing users to easily embed Bookra widgets via HTML, React, SolidJS, or PHP.
- **Backend Support**: Updated the booking service to provide comprehensive dashboard summary data, including historical booking records for charts.
2026-05-18 14:31:20 +02:00

120 lines
4.2 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: "class",
content: ["./index.html", "./src/**/*.{ts,tsx}"],
theme: {
extend: {
colors: {
// Semantic color tokens
canvas: {
DEFAULT: "hsl(var(--canvas))",
subtle: "hsl(var(--canvas-subtle))",
muted: "hsl(var(--canvas-muted))",
},
ink: {
DEFAULT: "hsl(var(--ink))",
muted: "hsl(var(--ink-muted))",
subtle: "hsl(var(--ink-subtle))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
hover: "hsl(var(--accent-hover))",
subtle: "hsl(var(--accent-subtle))",
},
border: {
DEFAULT: "hsl(var(--border))",
subtle: "hsl(var(--border-subtle))",
},
info: {
DEFAULT: "hsl(var(--info))",
subtle: "hsl(var(--info-subtle))",
},
error: {
DEFAULT: "hsl(var(--error))",
subtle: "hsl(var(--error-subtle))",
},
warning: {
DEFAULT: "hsl(var(--warning))",
subtle: "hsl(var(--warning-subtle))",
},
success: {
DEFAULT: "hsl(var(--success))",
subtle: "hsl(var(--success-subtle))",
},
// Legacy compatibility
mist: "hsl(var(--canvas-muted))",
ember: "hsl(var(--accent))",
pine: "hsl(var(--accent-hover))",
slate: "hsl(var(--ink-muted))",
},
boxShadow: {
card: "0 1px 3px 0 rgb(0 0 0 / 0.05), 0 10px 40px -10px rgb(0 0 0 / 0.1)",
"card-hover": "0 1px 3px 0 rgb(0 0 0 / 0.05), 0 20px 60px -15px rgb(0 0 0 / 0.15)",
subtle: "0 1px 2px 0 rgb(0 0 0 / 0.03)",
},
borderRadius: {
panel: "1.25rem",
card: "1rem",
button: "0.75rem",
},
fontFamily: {
sans: ["'Newsreader'", "Georgia", "ui-serif", "serif"],
display: ["'Space Grotesk'", "ui-sans-serif", "system-ui", "sans-serif"],
dashboard: ["'DM Sans'", "ui-sans-serif", "system-ui", "sans-serif"],
mono: ["'JetBrains Mono'", "ui-monospace", "monospace"],
},
fontSize: {
"display-xl": ["clamp(2.75rem, 6vw + 1rem, 5rem)", { lineHeight: "1.05", letterSpacing: "-0.04em", fontFamily: "'Space Grotesk', sans-serif" }],
"display-lg": ["clamp(2.25rem, 4.5vw + 0.5rem, 3.75rem)", { lineHeight: "1.1", letterSpacing: "-0.03em", fontFamily: "'Space Grotesk', sans-serif" }],
"display-md": ["clamp(1.75rem, 3.5vw + 0.5rem, 2.75rem)", { lineHeight: "1.15", letterSpacing: "-0.02em", fontFamily: "'Space Grotesk', sans-serif" }],
"display-sm": ["clamp(1.5rem, 2.5vw + 0.5rem, 2rem)", { lineHeight: "1.2", letterSpacing: "-0.01em", fontFamily: "'Space Grotesk', sans-serif" }],
},
spacing: {
"18": "4.5rem",
"22": "5.5rem",
"26": "6.5rem",
"30": "7.5rem",
"34": "8.5rem",
"38": "9.5rem",
"128": "32rem",
},
animation: {
"fade-in": "fade-in 0.5s cubic-bezier(0.4, 0, 0.2, 1)",
"slide-up": "slide-up 0.6s cubic-bezier(0.16, 1, 0.3, 1)",
"slide-down": "slide-down 0.4s cubic-bezier(0.16, 1, 0.3, 1)",
"scale-in": "scale-in 0.3s cubic-bezier(0.16, 1, 0.3, 1)",
"float": "float 6s ease-in-out infinite",
"pulse-soft": "pulse-soft 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
},
keyframes: {
"fade-in": {
"0%": { opacity: "0" },
"100%": { opacity: "1" },
},
"slide-up": {
"0%": { opacity: "0", transform: "translateY(24px)" },
"100%": { opacity: "1", transform: "translateY(0)" },
},
"slide-down": {
"0%": { opacity: "0", transform: "translateY(-12px)" },
"100%": { opacity: "1", transform: "translateY(0)" },
},
"scale-in": {
"0%": { opacity: "0", transform: "scale(0.95)" },
"100%": { opacity: "1", transform: "scale(1)" },
},
float: {
"0%, 100%": { transform: "translateY(0)" },
"50%": { transform: "translateY(-8px)" },
},
"pulse-soft": {
"0%, 100%": { opacity: "1" },
"50%": { opacity: "0.7" },
},
},
},
},
plugins: [],
};