Powerpoint_AI / app /globals.css
Reubencf's picture
committing since i am heading to bed
c1b5f7a
/*
* 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; }