Spaces:
Running
Running
| /* | |
| * 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) ; | |
| 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; } | |