mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:31:13 -05:00
412 lines
9.8 KiB
CSS
412 lines
9.8 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
/* Definition of the design system. All colors, gradients, fonts, etc should be defined here.
|
|
All colors MUST be HSL.
|
|
*/
|
|
|
|
@layer base {
|
|
:root {
|
|
/* ThrillWiki light theme - bright and vibrant */
|
|
--background: 0 0% 100%;
|
|
--foreground: 240 10% 3.9%;
|
|
|
|
--card: 0 0% 100%;
|
|
--card-foreground: 240 10% 3.9%;
|
|
|
|
--popover: 0 0% 100%;
|
|
--popover-foreground: 240 10% 3.9%;
|
|
|
|
/* Blue and purple thrill-inspired colors */
|
|
--primary: 258 90% 66%; /* Deep vibrant purple */
|
|
--primary-foreground: 0 0% 98%;
|
|
--primary-glow: 258 100% 80%;
|
|
|
|
--secondary: 216 87% 55%; /* Rich royal blue */
|
|
--secondary-foreground: 0 0% 98%;
|
|
|
|
--muted: 240 4.8% 95.9%;
|
|
--muted-foreground: 240 3.8% 46.1%;
|
|
|
|
--accent: 216 87% 55%; /* Bright blue for action */
|
|
--accent-foreground: 0 0% 98%;
|
|
|
|
--destructive: 0 84% 60%;
|
|
--destructive-foreground: 0 0% 98%;
|
|
|
|
--border: 240 5.9% 90%;
|
|
--input: 240 5.9% 90%;
|
|
--ring: 258 90% 66%;
|
|
|
|
/* Theme park gradients */
|
|
--gradient-primary: linear-gradient(135deg, hsl(var(--primary)), hsl(var(--primary-glow)));
|
|
--gradient-secondary: linear-gradient(135deg, hsl(var(--secondary)), hsl(var(--accent)));
|
|
--gradient-hero: linear-gradient(135deg, hsl(258 90% 66%), hsl(216 87% 55%), hsl(210 100% 65%));
|
|
--gradient-card: linear-gradient(145deg, hsl(0 0% 98%), hsl(240 4.8% 95.9%));
|
|
|
|
/* Thrill shadows and effects */
|
|
--shadow-glow: 0 0 40px hsl(var(--primary) / 0.4);
|
|
--shadow-card: 0 10px 30px -10px hsl(var(--primary) / 0.3);
|
|
--shadow-intense: 0 25px 50px -12px hsl(var(--primary) / 0.5);
|
|
|
|
/* Animation variables */
|
|
--transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
--transition-bounce: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
|
|
--radius: 0.5rem;
|
|
|
|
--sidebar-background: 0 0% 98%;
|
|
--sidebar-foreground: 240 5.3% 26.1%;
|
|
--sidebar-primary: 240 5.9% 10%;
|
|
--sidebar-primary-foreground: 0 0% 98%;
|
|
--sidebar-accent: 240 4.8% 95.9%;
|
|
--sidebar-accent-foreground: 240 5.9% 10%;
|
|
--sidebar-border: 220 13% 91%;
|
|
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
}
|
|
|
|
.dark {
|
|
/* Dark mode uses vibrant colors on dark backgrounds */
|
|
--background: 240 10% 3.9%;
|
|
--foreground: 0 0% 98%;
|
|
|
|
--card: 240 8% 7%;
|
|
--card-foreground: 0 0% 98%;
|
|
|
|
--popover: 240 8% 7%;
|
|
--popover-foreground: 0 0% 98%;
|
|
|
|
--primary: 258 90% 66%; /* Deep vibrant purple */
|
|
--primary-foreground: 0 0% 98%;
|
|
--primary-glow: 258 100% 80%;
|
|
|
|
--secondary: 216 87% 55%; /* Rich royal blue */
|
|
--secondary-foreground: 0 0% 98%;
|
|
|
|
--muted: 240 5% 20%;
|
|
--muted-foreground: 240 5% 64%;
|
|
|
|
--accent: 216 87% 55%; /* Bright blue for action */
|
|
--accent-foreground: 0 0% 98%;
|
|
|
|
--destructive: 0 84% 60%;
|
|
--destructive-foreground: 0 0% 98%;
|
|
|
|
--border: 240 6% 15%;
|
|
--input: 240 6% 15%;
|
|
--ring: 258 90% 66%;
|
|
|
|
--gradient-card: linear-gradient(145deg, hsl(240 10% 5%), hsl(240 8% 7%));
|
|
|
|
--sidebar-background: 240 5.9% 10%;
|
|
--sidebar-foreground: 240 4.8% 95.9%;
|
|
--sidebar-primary: 224.3 76.3% 48%;
|
|
--sidebar-primary-foreground: 0 0% 100%;
|
|
--sidebar-accent: 240 3.7% 15.9%;
|
|
--sidebar-accent-foreground: 240 4.8% 95.9%;
|
|
--sidebar-border: 240 3.7% 15.9%;
|
|
--sidebar-ring: 217.2 91.2% 59.8%;
|
|
}
|
|
}
|
|
|
|
@layer base {
|
|
* {
|
|
@apply border-border;
|
|
}
|
|
|
|
body {
|
|
@apply bg-background text-foreground;
|
|
}
|
|
}
|
|
|
|
/* Suppress ALL animations during initial queue render */
|
|
[data-initial-load="true"] * {
|
|
animation-duration: 0s !important;
|
|
animation-delay: 0s !important;
|
|
transition-duration: 0s !important;
|
|
transition-delay: 0s !important;
|
|
}
|
|
|
|
/* Custom Uppy Photo Upload Styling */
|
|
@layer components {
|
|
/* Uppy Dashboard customization to match theme */
|
|
.uppy-Dashboard {
|
|
@apply bg-card text-card-foreground border border-border rounded-lg;
|
|
box-shadow: var(--shadow-card);
|
|
}
|
|
|
|
.uppy-Dashboard-inner {
|
|
@apply bg-transparent;
|
|
}
|
|
|
|
.uppy-Dashboard-dropFilesHereHint {
|
|
@apply text-muted-foreground;
|
|
}
|
|
|
|
.uppy-Dashboard-browse {
|
|
@apply text-primary hover:text-primary-glow transition-colors duration-300;
|
|
}
|
|
|
|
.uppy-Dashboard-AddFiles {
|
|
@apply bg-gradient-to-r from-primary to-secondary text-primary-foreground;
|
|
background: var(--gradient-primary);
|
|
border: none;
|
|
border-radius: var(--radius);
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
.uppy-Dashboard-AddFiles:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: var(--shadow-glow);
|
|
}
|
|
|
|
.uppy-Dashboard-AddFiles-info {
|
|
@apply text-primary-foreground;
|
|
}
|
|
|
|
.uppy-Dashboard-Item {
|
|
@apply bg-card border border-border rounded-lg;
|
|
}
|
|
|
|
.uppy-Dashboard-Item-preview {
|
|
@apply rounded-lg overflow-hidden;
|
|
}
|
|
|
|
.uppy-Dashboard-Item-progress {
|
|
@apply bg-muted;
|
|
}
|
|
|
|
.uppy-Dashboard-Item-progressIndicator {
|
|
@apply bg-primary;
|
|
}
|
|
|
|
.uppy-Dashboard-Item-action--remove {
|
|
@apply text-destructive hover:text-destructive-foreground hover:bg-destructive;
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
.uppy-Dashboard-Item-action--edit {
|
|
@apply text-accent hover:text-accent-foreground hover:bg-accent;
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
/* Modal overlay styling */
|
|
.uppy-Dashboard--modal {
|
|
z-index: 9999 !important;
|
|
position: fixed !important;
|
|
top: 0 !important;
|
|
left: 0 !important;
|
|
width: 100vw !important;
|
|
height: 100vh !important;
|
|
}
|
|
|
|
.uppy-Dashboard--modal .uppy-Dashboard-overlay {
|
|
@apply bg-background/80 backdrop-blur-sm;
|
|
z-index: 9998 !important;
|
|
position: fixed !important;
|
|
top: 0 !important;
|
|
left: 0 !important;
|
|
width: 100% !important;
|
|
height: 100% !important;
|
|
}
|
|
|
|
.uppy-Dashboard--modal .uppy-Dashboard-inner {
|
|
@apply bg-card border border-border rounded-xl;
|
|
box-shadow: var(--shadow-intense);
|
|
max-width: 90vw;
|
|
max-height: 90vh;
|
|
position: fixed !important;
|
|
top: 50% !important;
|
|
left: 50% !important;
|
|
transform: translate(-50%, -50%) !important;
|
|
z-index: 10000 !important;
|
|
}
|
|
|
|
/* Ensure all uppy content stays contained */
|
|
.uppy-Dashboard--modal * {
|
|
position: relative !important;
|
|
}
|
|
|
|
.uppy-Dashboard--modal .uppy-Dashboard-AddFiles,
|
|
.uppy-Dashboard--modal .uppy-Dashboard-dropFilesHereHint {
|
|
position: static !important;
|
|
}
|
|
|
|
/* Status bar customization */
|
|
.uppy-StatusBar {
|
|
@apply bg-muted border-t border-border;
|
|
}
|
|
|
|
.uppy-StatusBar-progress {
|
|
@apply bg-primary;
|
|
}
|
|
|
|
.uppy-StatusBar-actions {
|
|
@apply gap-2;
|
|
}
|
|
|
|
.uppy-StatusBar-actionBtn {
|
|
@apply bg-primary text-primary-foreground hover:bg-primary/90;
|
|
border: none;
|
|
border-radius: var(--radius);
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
.uppy-StatusBar-actionBtn:hover {
|
|
transform: translateY(-1px);
|
|
}
|
|
|
|
/* Image editor customization */
|
|
.uppy-ImageEditor {
|
|
@apply bg-card text-card-foreground;
|
|
}
|
|
|
|
.uppy-ImageEditor-controls {
|
|
@apply bg-muted border-t border-border;
|
|
}
|
|
|
|
.uppy-ImageEditor-controls button {
|
|
@apply text-foreground hover:text-primary;
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
/* Custom upload trigger styling */
|
|
.photo-upload-trigger {
|
|
@apply relative overflow-hidden;
|
|
background: var(--gradient-primary);
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
.photo-upload-trigger:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: var(--shadow-glow);
|
|
}
|
|
|
|
.photo-upload-trigger::before {
|
|
content: '';
|
|
@apply absolute inset-0 bg-gradient-to-r from-transparent via-white/20 to-transparent;
|
|
transform: translateX(-100%);
|
|
transition: transform 0.6s ease;
|
|
}
|
|
|
|
.photo-upload-trigger:hover::before {
|
|
transform: translateX(100%);
|
|
}
|
|
|
|
/* Upload preview grid */
|
|
.upload-preview-grid {
|
|
@apply grid gap-4;
|
|
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
}
|
|
|
|
.upload-preview-item {
|
|
@apply relative aspect-square rounded-lg overflow-hidden border border-border;
|
|
background: var(--gradient-card);
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
.upload-preview-item:hover {
|
|
transform: scale(1.05);
|
|
box-shadow: var(--shadow-card);
|
|
}
|
|
|
|
.upload-preview-item img {
|
|
@apply w-full h-full object-cover;
|
|
}
|
|
|
|
.upload-preview-overlay {
|
|
@apply absolute inset-0 bg-black/40 opacity-0 hover:opacity-100 flex items-center justify-center;
|
|
transition: var(--transition-smooth);
|
|
}
|
|
|
|
/* Loading states */
|
|
.upload-loading {
|
|
@apply relative;
|
|
}
|
|
|
|
.upload-loading::after {
|
|
content: '';
|
|
@apply absolute inset-0 bg-primary/10 rounded-lg;
|
|
animation: pulse 2s infinite;
|
|
}
|
|
|
|
/* Mobile optimizations */
|
|
@media (max-width: 640px) {
|
|
.uppy-Dashboard--modal .uppy-Dashboard-inner {
|
|
@apply m-4 max-h-[80vh];
|
|
}
|
|
|
|
.upload-preview-grid {
|
|
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
|
|
@apply gap-2;
|
|
}
|
|
}
|
|
|
|
/* Dark mode specific adjustments */
|
|
.dark .uppy-Dashboard {
|
|
border-color: hsl(var(--border));
|
|
}
|
|
|
|
.dark .uppy-Dashboard-Item {
|
|
background-color: hsl(var(--card));
|
|
border-color: hsl(var(--border));
|
|
}
|
|
}
|
|
|
|
/* Smooth queue transitions */
|
|
.queue-fade-enter {
|
|
animation: queueFadeIn 300ms ease-in-out;
|
|
}
|
|
|
|
.queue-fade-exit {
|
|
animation: queueFadeOut 200ms ease-in-out;
|
|
}
|
|
|
|
@keyframes queueFadeIn {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(8px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes queueFadeOut {
|
|
from {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
to {
|
|
opacity: 0;
|
|
transform: translateY(-8px);
|
|
}
|
|
}
|
|
|
|
/* Performance optimizations for queue items */
|
|
.queue-item-container {
|
|
contain: layout style paint;
|
|
will-change: transform, opacity;
|
|
content-visibility: auto;
|
|
contain-intrinsic-size: 0 200px;
|
|
}
|
|
|
|
/* Enhanced list view animations */
|
|
@keyframes fadeInUp {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
.animate-fade-in-up {
|
|
animation: fadeInUp 0.6s ease-out forwards;
|
|
opacity: 0;
|
|
}
|