Files
languard-servers-manager/frontend/tailwind.config.js
Tran G. (Revernomad) Khoa 88424675b5 feat: implement frontend with TDD (Part 8)
- Scaffold Vite + React 19 + TypeScript strict project
- Neumorphic dark design system (Tailwind v3, amber/orange LED accents)
- Zustand stores for auth (persist) and UI state (notifications, sidebar)
- TanStack Query v5 hooks for server CRUD operations
- WebSocket hook with reconnection backoff and query invalidation
- Components: StatusLed, Sidebar, ServerCard, LoginPage, DashboardPage
- Protected routing with auth guard
- Axios client with JWT interceptor and 401 redirect
- 68 tests across 11 test files (89% statement coverage, 90% function coverage)
- TDD workflow: RED validated, GREEN achieved, coverage verified
2026-04-16 23:53:25 +07:00

63 lines
1.8 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{ts,tsx}"],
theme: {
extend: {
colors: {
surface: {
base: "#1a1a2e",
raised: "#1e1e35",
recessed: "#16162a",
overlay: "#22223a",
},
accent: {
DEFAULT: "#f59e0b",
bright: "#fbbf24",
dim: "#d97706",
glow: "#f59e0b40",
},
status: {
running: "#22c55e",
stopped: "#6b7280",
crashed: "#ef4444",
starting: "#f59e0b",
restarting: "#3b82f6",
},
text: {
primary: "#e2e8f0",
secondary: "#94a3b8",
muted: "#475569",
inverse: "#1a1a2e",
},
},
fontFamily: {
sans: ["Inter", "system-ui", "sans-serif"],
mono: ["JetBrains Mono", "Fira Code", "monospace"],
},
boxShadow: {
"neu-raised": "4px 4px 8px #0d0d1f, -4px -4px 8px #27273f",
"neu-raised-lg": "8px 8px 16px #0d0d1f, -8px -8px 16px #27273f",
"neu-recessed": "inset 4px 4px 8px #0d0d1f, inset -4px -4px 8px #27273f",
"glow-green": "0 0 8px #22c55e, 0 0 16px #22c55e40",
"glow-amber": "0 0 8px #f59e0b, 0 0 16px #f59e0b40",
"glow-red": "0 0 8px #ef4444, 0 0 16px #ef444440",
"glow-gray": "0 0 4px #6b7280",
"glow-blue": "0 0 8px #3b82f6, 0 0 16px #3b82f640",
},
borderRadius: {
neu: "12px",
},
animation: {
"pulse-slow": "pulse 3s ease-in-out infinite",
"glow-pulse": "glow-pulse 2s ease-in-out infinite",
},
keyframes: {
"glow-pulse": {
"0%, 100%": { opacity: "1" },
"50%": { opacity: "0.6" },
},
},
},
},
plugins: [],
};