Files
gooseek/backend/webui/tailwind.config.ts
home 08bd41e75c feat: travel service with 2GIS routing, POI, hotels + finance providers + UI overhaul
- Add travel-svc microservice (Amadeus, TravelPayouts, 2GIS, OpenRouteService)
- Add travel orchestrator with parallel collectors (events, POI, hotels, flights)
- Add 2GIS road routing with transport cost calculation (car/bus/taxi)
- Add TravelMap (2GIS MapGL) and TravelWidgets components
- Add useTravelChat hook for streaming travel agent responses
- Add finance heatmap providers refactor
- Add SearXNG settings, API proxy routes, Docker compose updates
- Update Dockerfiles, config, types, and all UI pages for consistency

Made-with: Cursor
2026-03-01 21:58:32 +03:00

160 lines
5.3 KiB
TypeScript

import type { Config } from 'tailwindcss';
const config: Config = {
content: [
'./src/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {
colors: {
base: 'hsl(var(--bg-base))',
elevated: 'hsl(var(--bg-elevated))',
surface: 'hsl(var(--bg-surface))',
overlay: 'hsl(var(--bg-overlay))',
primary: 'hsl(var(--text-primary))',
secondary: 'hsl(var(--text-secondary))',
muted: 'hsl(var(--text-muted))',
faint: 'hsl(var(--text-faint))',
accent: {
DEFAULT: 'hsl(var(--accent))',
hover: 'hsl(var(--accent-hover))',
muted: 'hsl(var(--accent-muted))',
subtle: 'hsl(var(--accent-subtle))',
foreground: 'hsl(0 0% 100%)',
},
'accent-secondary': {
DEFAULT: 'hsl(var(--accent-secondary))',
muted: 'hsl(var(--accent-secondary-muted))',
},
success: {
DEFAULT: 'hsl(var(--success))',
muted: 'hsl(var(--success-muted))',
},
warning: {
DEFAULT: 'hsl(var(--warning))',
muted: 'hsl(var(--warning-muted))',
},
error: {
DEFAULT: 'hsl(var(--error))',
muted: 'hsl(var(--error-muted))',
},
border: {
DEFAULT: 'hsl(var(--border))',
hover: 'hsl(var(--border-hover))',
focus: 'hsl(var(--border-focus))',
},
background: 'hsl(var(--background))',
foreground: 'hsl(var(--foreground))',
card: {
DEFAULT: 'hsl(var(--card))',
foreground: 'hsl(var(--card-foreground))',
},
popover: {
DEFAULT: 'hsl(var(--popover))',
foreground: 'hsl(var(--popover-foreground))',
},
destructive: {
DEFAULT: 'hsl(var(--destructive))',
foreground: 'hsl(var(--destructive-foreground))',
},
input: 'hsl(var(--input))',
ring: 'hsl(var(--ring))',
},
borderRadius: {
'2xl': '1rem',
'3xl': '1.5rem',
lg: 'var(--radius)',
md: 'calc(var(--radius) - 2px)',
sm: 'calc(var(--radius) - 4px)',
},
fontFamily: {
sans: ['Inter', 'system-ui', '-apple-system', 'sans-serif'],
mono: ['JetBrains Mono', 'Fira Code', 'SF Mono', 'Consolas', 'monospace'],
},
fontSize: {
'2xs': ['0.625rem', { lineHeight: '0.875rem' }],
'xs': ['0.75rem', { lineHeight: '1rem' }],
'sm': ['0.875rem', { lineHeight: '1.25rem' }],
'base': ['0.9375rem', { lineHeight: '1.5rem' }],
'lg': ['1.0625rem', { lineHeight: '1.625rem' }],
},
spacing: {
'18': '4.5rem',
'22': '5.5rem',
'26': '6.5rem',
'30': '7.5rem',
},
backdropBlur: {
xs: '2px',
},
boxShadow: {
'glow-sm': '0 1px 6px hsl(224 64% 48% / 0.06)',
'glow-md': '0 2px 12px hsl(224 64% 48% / 0.1)',
'glow-lg': '0 4px 24px hsl(224 64% 48% / 0.14)',
'inner-glow': 'inset 0 1px 4px hsl(220 14% 50% / 0.06)',
'elevated': '0 1px 3px hsl(220 14% 50% / 0.06), 0 4px 16px hsl(220 14% 50% / 0.04)',
'card': '0 1px 3px hsl(220 14% 50% / 0.05), 0 1px 2px hsl(220 14% 50% / 0.03)',
'dropdown': '0 4px 24px hsl(220 14% 50% / 0.12), 0 1px 4px hsl(220 14% 50% / 0.06)',
},
keyframes: {
'fade-in': {
'0%': { opacity: '0', transform: 'translateY(4px)' },
'100%': { opacity: '1', transform: 'translateY(0)' },
},
'fade-in-up': {
'0%': { opacity: '0', transform: 'translateY(12px)' },
'100%': { opacity: '1', transform: 'translateY(0)' },
},
'slide-in-right': {
'0%': { opacity: '0', transform: 'translateX(-12px)' },
'100%': { opacity: '1', transform: 'translateX(0)' },
},
'slide-in-left': {
'0%': { opacity: '0', transform: 'translateX(12px)' },
'100%': { opacity: '1', transform: 'translateX(0)' },
},
'scale-in': {
'0%': { opacity: '0', transform: 'scale(0.95)' },
'100%': { opacity: '1', transform: 'scale(1)' },
},
'pulse-soft': {
'0%, 100%': { opacity: '1' },
'50%': { opacity: '0.7' },
},
shimmer: {
'0%': { backgroundPosition: '-200% 0' },
'100%': { backgroundPosition: '200% 0' },
},
'glow-pulse': {
'0%, 100%': { boxShadow: '0 2px 12px hsl(224 64% 48% / 0.08)' },
'50%': { boxShadow: '0 4px 20px hsl(224 64% 48% / 0.14)' },
},
'border-pulse': {
'0%, 100%': { borderColor: 'hsl(224 64% 48% / 0.2)' },
'50%': { borderColor: 'hsl(224 64% 48% / 0.35)' },
},
},
animation: {
'fade-in': 'fade-in 0.2s ease-out forwards',
'fade-in-up': 'fade-in-up 0.3s ease-out forwards',
'slide-in-right': 'slide-in-right 0.25s ease-out forwards',
'slide-in-left': 'slide-in-left 0.25s ease-out forwards',
'scale-in': 'scale-in 0.2s ease-out forwards',
'pulse-soft': 'pulse-soft 2s ease-in-out infinite',
shimmer: 'shimmer 1.5s linear infinite',
'glow-pulse': 'glow-pulse 2s ease-in-out infinite',
'border-pulse': 'border-pulse 2s ease-in-out infinite',
},
},
},
plugins: [],
};
export default config;