diff --git a/src/App.css b/src/App.css index 8f860de..8b661f3 100644 --- a/src/App.css +++ b/src/App.css @@ -8,53 +8,53 @@ @layer base { :root { /* Background colors */ - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; + --background: hsl(0 0% 100%); + --foreground: hsl(222.2 84% 4.9%); /* Card colors */ - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; + --card: hsl(0 0% 100%); + --card-foreground: hsl(222.2 84% 4.9%); /* Popover colors */ - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; + --popover: hsl(0 0% 100%); + --popover-foreground: hsl(222.2 84% 4.9%); /* Primary - Blue (existing brand color) */ - --primary: 221.2 83.2% 53.3%; /* blue-600 */ - --primary-foreground: 210 40% 98%; + --primary: hsl(221.2 83.2% 53.3%); /* blue-600 */ + --primary-foreground: hsl(210 40% 98%); /* Secondary - Orange (existing secondary color) */ - --secondary: 24.6 95% 53.1%; /* orange-500 */ - --secondary-foreground: 60 9.1% 97.8%; + --secondary: hsl(24.6 95% 53.1%); /* orange-500 */ + --secondary-foreground: hsl(60 9.1% 97.8%); /* Muted colors */ - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; + --muted: hsl(210 40% 96.1%); + --muted-foreground: hsl(215.4 16.3% 46.9%); /* Accent - Purple (existing accent color) */ - --accent: 262.1 83.3% 57.8%; /* purple-500 */ - --accent-foreground: 210 40% 98%; + --accent: hsl(262.1 83.3% 57.8%); /* purple-500 */ + --accent-foreground: hsl(210 40% 98%); /* Destructive - Red (existing danger color) */ - --destructive: 0 84.2% 60.2%; /* red-500 */ - --destructive-foreground: 210 40% 98%; + --destructive: hsl(0 84.2% 60.2%); /* red-500 */ + --destructive-foreground: hsl(210 40% 98%); /* Success - Green (existing success color) */ - --success: 142.1 76.2% 36.3%; /* green-600 */ - --success-foreground: 210 40% 98%; + --success: hsl(142.1 76.2% 36.3%); /* green-600 */ + --success-foreground: hsl(210 40% 98%); /* Warning - Amber (existing warning color) */ - --warning: 45.4 93.4% 47.5%; /* amber-500 */ - --warning-foreground: 60 9.1% 97.8%; + --warning: hsl(45.4 93.4% 47.5%); /* amber-500 */ + --warning-foreground: hsl(60 9.1% 97.8%); /* Info - Cyan (existing info color) */ - --info: 188.7 85.7% 53.3%; /* cyan-500 */ - --info-foreground: 210 40% 98%; + --info: hsl(188.7 85.7% 53.3%); /* cyan-500 */ + --info-foreground: hsl(210 40% 98%); /* Border and input */ - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 221.2 83.2% 53.3%; /* matches primary */ + --border: hsl(214.3 31.8% 91.4%); + --input: hsl(214.3 31.8% 91.4%); + --ring: hsl(221.2 83.2% 53.3%); /* matches primary */ /* Radius */ --radius: 0.5rem; @@ -62,42 +62,43 @@ @media (prefers-color-scheme: dark) { :root { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; + --background: hsl(222.2 84% 4.9%); - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; + --foreground: hsl(210 40% 98%); - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; + --card: oklch(27.8% 0.033 256.848); + --card-foreground: hsl(210 40% 98%); - --primary: 217.2 91.2% 59.8%; /* blue-500 lighter for dark */ - --primary-foreground: 210 40% 98%; + --popover: hsl(222.2 84% 4.9%); + --popover-foreground: hsl(210 40% 98%); - --secondary: 20.5 90.2% 48.2%; /* orange-600 for dark */ - --secondary-foreground: 210 40% 98%; + --primary: hsl(217.2 91.2% 59.8%); /* blue-500 lighter for dark */ + --primary-foreground: hsl(210 40% 98%); - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; + --secondary: hsl(20.5 90.2% 48.2%); /* orange-600 for dark */ + --secondary-foreground: hsl(210 40% 98%); - --accent: 263.4 70% 50.4%; /* purple-600 for dark */ - --accent-foreground: 210 40% 98%; + --muted: hsl(217.2 32.6% 17.5%); + --muted-foreground: hsl(215 20.2% 65.1%); - --destructive: 0 62.8% 30.6%; /* red-900 */ - --destructive-foreground: 210 40% 98%; + --accent: hsl(263.4 70% 50.4%); /* purple-600 for dark */ + --accent-foreground: hsl(210 40% 98%); - --success: 142.1 70.6% 45.3%; /* green-500 for dark */ - --success-foreground: 210 40% 98%; + --destructive: hsl(0 62.8% 30.6%); /* red-900 */ + --destructive-foreground: hsl(210 40% 98%); - --warning: 47.9 95.8% 53.1%; /* amber-400 for dark */ - --warning-foreground: 26 83.3% 14.1%; + --success: hsl(142.1 70.6% 45.3%); /* green-500 for dark */ + --success-foreground: hsl(210 40% 98%); - --info: 188.7 85.7% 53.3%; /* cyan-500 */ - --info-foreground: 210 40% 98%; + --warning: hsl(47.9 95.8% 53.1%); /* amber-400 for dark */ + --warning-foreground: hsl(26 83.3% 14.1%); - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 224.3 76.3% 48%; + --info: hsl(188.7 85.7% 53.3%); /* cyan-500 */ + --info-foreground: hsl(210 40% 98%); + + --border: hsl(217.2 32.6% 37.5%); + --input: hsl(217.2 32.6% 47.5%); + --ring: hsl(224.3 76.3% 48%); } } } @@ -109,25 +110,25 @@ @theme { /* SHADCN/UI COLORS - For bg-primary, bg-destructive, etc. */ - --color-primary: hsl(var(--primary)); - --color-primary-foreground: hsl(var(--primary-foreground)); - --color-secondary: hsl(var(--secondary)); - --color-secondary-foreground: hsl(var(--secondary-foreground)); - --color-destructive: hsl(var(--destructive)); - --color-destructive-foreground: hsl(var(--destructive-foreground)); - --color-muted: hsl(var(--muted)); - --color-muted-foreground: hsl(var(--muted-foreground)); - --color-accent: hsl(var(--accent)); - --color-accent-foreground: hsl(var(--accent-foreground)); - --color-background: hsl(var(--background)); - --color-foreground: hsl(var(--foreground)); - --color-card: hsl(var(--card)); - --color-card-foreground: hsl(var(--card-foreground)); - --color-popover: hsl(var(--popover)); - --color-popover-foreground: hsl(var(--popover-foreground)); - --color-border: hsl(var(--border)); - --color-input: hsl(var(--input)); - --color-ring: hsl(var(--ring)); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); /* PRIMARY - Main brand color (references Blue) - For bg-primary-600 style classes */ --color-primary-50: var(--color-blue-50); @@ -227,7 +228,7 @@ /* Canvas/Konva-specific colors for embroidery rendering */ --color-canvas-grid: #e0e0e0; --color-canvas-origin: #888888; - --color-canvas-hoop: #2196F3; + --color-canvas-hoop: #2196f3; --color-canvas-bounds: #ff0000; --color-canvas-position: #ff0000; } @@ -292,7 +293,8 @@ /* Pulse glow effect - uses primary-600 */ @keyframes pulseGlow { - 0%, 100% { + 0%, + 100% { box-shadow: 0 0 0 0 rgb(37 99 235 / 0.4); /* primary-600 with 40% opacity */ } 50% { diff --git a/src/App.tsx b/src/App.tsx index a42724f..f732876 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -66,7 +66,7 @@ function App() { }, [resumedPattern, resumeFileName, pesData, setPattern, setPatternOffset]); return ( -
+
diff --git a/src/components/PatternCanvasPlaceholder.tsx b/src/components/PatternCanvasPlaceholder.tsx index d2ebf1e..4e9d2ec 100644 --- a/src/components/PatternCanvasPlaceholder.tsx +++ b/src/components/PatternCanvasPlaceholder.tsx @@ -1,10 +1,29 @@ -import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; +import { + Card, + CardHeader, + CardTitle, + CardContent, + CardDescription, +} from "@/components/ui/card"; +import { PhotoIcon } from "@heroicons/react/24/solid"; export function PatternCanvasPlaceholder() { return ( - - - Pattern Preview + + +
+ +
+ Pattern Preview + + No pattern loaded + +
+