/* * File: app/globals.css * Description: Global CSS stylesheet for the PowerPoint generator application * This file contains all design tokens, custom CSS variables, and theme configurations * * Features: * - TailwindCSS integration with custom configuration * - Animation library import for enhanced UI effects * - Light and dark mode theme variables * - Custom design tokens for consistent styling * - Utility classes for text truncation and chat UI */ @import "tailwindcss"; /* Custom variant for dark mode targeting */ @custom-variant dark (&:is(.dark *)); :root { /* Base colors for light mode */ /* UI tokens - define common interface colors and styles */ --surface: #ffffff; /* cards/bars */ --surface-2: #f5f7fa; /* inputs */ --border: #ebebeb; --muted: #f7f7f7; --brand: #2563eb; /* blue-600 */ --radius: 0.625rem; --background: #ffffff; --foreground: #242424; --card: #ffffff; --card-foreground: #242424; --popover: #ffffff; --popover-foreground: #242424; --primary: #343434; --primary-foreground: #fafafa; --secondary: #f7f7f7; --secondary-foreground: #343434; --muted-foreground: #8e8e8e; --accent: #f7f7f7; --accent-foreground: #343434; --destructive: #dc2626; --input: #ebebeb; --ring: #b5b5b5; --chart-1: #f59e0b; --chart-2: #06b6d4; --chart-3: #3b82f6; --chart-4: #facc15; --chart-5: #f97316; --sidebar: #fafafa; --sidebar-foreground: #242424; --sidebar-primary: #343434; --sidebar-primary-foreground: #fafafa; --sidebar-accent: #f7f7f7; --sidebar-accent-foreground: #343434; --sidebar-border: #ebebeb; --sidebar-ring: #b5b5b5; } @theme inline { /* Neo-brutalism template colors */ --color-neo-lime: #D9FF00; --color-neo-cyan: #00FFFF; --color-neo-yellow: #FFD700; --color-neo-purple: #A000A0; /* Noisy template colors */ --color-noisy-blue: #547BEE; --color-noisy-coral: #F2725C; --color-noisy-orange: #FF7A59; --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) + 4px); } /* Dark mode overrides based on system preference */ @media (prefers-color-scheme: dark) { :root { --surface: #111113; --surface-2: #16181d; --border: #2a2b2f; --muted: #9ca3af; --brand: #60a5fa; /* blue-400 */ } } /* Global body styles - Clean flat background for minimalist UI */ body { background-color: var(--background); font-family: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji"; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } ::selection { background: #bfdbfe; color: #111827; } select, textarea, input, button { color: inherit; font-family: inherit; } textarea::placeholder, input::placeholder { color: var(--muted); opacity: 1; } /* Chat interface theming - Used in chat/input components */ .chat-surface { border: 1px solid var(--border); background: var(--surface); } .chat-input { background: var(--surface-2); border: 1px solid transparent; } .chat-select { border: 1px solid var(--border); background: var(--surface); } .chat-pill { border: 1px solid var(--border); background: var(--surface); color: var(--foreground); opacity: 0.85; } .chat-pill-active { border-color: #93c5fd; background: #eff6ff; color: #1d4ed8; } .chat-select:focus, .chat-input:focus, .chat-pill:focus { outline: none; box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.18); } /* Utility classes for text truncation - Used in slide content */ .line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* Dark mode theme variables - Applied when .dark class is present */ .dark { --background: #242424; --foreground: #fafafa; --card: #343434; --card-foreground: #fafafa; --popover: #343434; --popover-foreground: #fafafa; --primary: #ebebeb; --primary-foreground: #343434; --secondary: #444444; --secondary-foreground: #fafafa; --muted: #444444; --muted-foreground: #b5b5b5; --accent: #444444; --accent-foreground: #fafafa; --destructive: #ef4444; --border: rgba(255, 255, 255, 0.1); --input: rgba(255, 255, 255, 0.15); --ring: #8e8e8e; --chart-1: #8b5cf6; --chart-2: #10b981; --chart-3: #f97316; --chart-4: #c026d3; --chart-5: #f43f5e; --sidebar: #343434; --sidebar-foreground: #fafafa; --sidebar-primary: #8b5cf6; --sidebar-primary-foreground: #fafafa; --sidebar-accent: #444444; --sidebar-accent-foreground: #fafafa; --sidebar-border: rgba(255, 255, 255, 0.1); --sidebar-ring: #8e8e8e; } /* Tailwind base layer overrides for consistent styling */ @layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; } } /* Typing animation for textarea */ @keyframes blink { 0%, 50% { border-color: rgba(156, 163, 175, 0.7); } 51%, 100% { border-color: transparent; } } .typing-animation:focus { animation: blink 1s step-end infinite; border-right: 2px solid rgba(156, 163, 175, 0.7); } /* Hide scrollbar while maintaining scroll functionality */ .scrollbar-hide { -ms-overflow-style: none; /* IE and Edge */ scrollbar-width: none; /* Firefox */ } .scrollbar-hide::-webkit-scrollbar { display: none; /* Chrome, Safari and Opera */ } /* Canvas element dragging visual feedback */ .is-dragging { opacity: 0.9; box-shadow: 0 8px 25px rgba(59, 130, 246, 0.4) !important; transform: scale(1.02); transition: box-shadow 0.15s ease, transform 0.15s ease; } /* Smooth element transitions */ .group.absolute { transition: box-shadow 0.15s ease, ring 0.15s ease; } /* Resize handles hover effect */ .group.absolute:hover .resize-handle { opacity: 1; } /* Text editor improvements */ .text-editor { caret-color: #2563eb; } .text-editor:focus { outline: none; box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3); } /* Selection feedback */ .ring-2.ring-blue-500 { box-shadow: 0 4px 12px rgba(59, 130, 246, 0.25); } /* Alignment guide lines pulse animation */ @keyframes guide-pulse { 0%, 100% { opacity: 1; box-shadow: 0 0 6px rgba(59, 130, 246, 0.6); } 50% { opacity: 0.7; box-shadow: 0 0 10px rgba(59, 130, 246, 0.9); } } /* Alignment guide line styling */ .alignment-guide { animation: guide-pulse 0.8s ease-in-out infinite; } /* Neo-brutalism template utilities */ .neo-shadow { box-shadow: 8px 8px 0px 0px rgba(0,0,0,1); } .neo-shadow-lg { box-shadow: 10px 10px 0px 0px rgba(0,0,0,1); } .neo-shadow-purple { box-shadow: 8px 8px 0px 0px #A000A0; } .neo-border { border: 3px solid black; }