lofi / src /app.css
veltrixcode's picture
Upload 84 files
3c56493 verified
Raw
History Blame Contribute Delete
12.7 kB
@import 'tailwindcss';
@plugin '@tailwindcss/forms';
@plugin '@tailwindcss/typography';
button,
[type='button'],
[type='submit'],
[type='reset'],
a,
[role='button'],
summary {
cursor: pointer;
}
button:disabled,
[type='button']:disabled,
[type='submit']:disabled,
[type='reset']:disabled,
[role='button'][aria-disabled='true'],
a[aria-disabled='true'] {
cursor: not-allowed;
}
/* ============================================
DESIGN SYSTEM TOKENS
============================================ */
/* Performance-optimized blur and effects */
:root[data-performance='medium'] {
--perf-blur-high: 22px;
--perf-blur-medium: 18px;
--perf-blur-low: 14px;
--perf-saturate: 125%;
}
:root[data-performance='low'] {
--perf-blur-high: 0px;
--perf-blur-medium: 0px;
--perf-blur-low: 0px;
--perf-saturate: 100%;
}
:root[data-performance='low'] * {
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
:root[data-performance='low'] .glass-panel,
:root[data-performance='low'] .glass-toolbar,
:root[data-performance='low'] .settings-menu,
:root[data-performance='low'] .toolbar-button,
:root[data-performance='low'] .glass-option,
:root[data-performance='low'] .glass-action,
:root[data-performance='low'] .glass-option__chip,
:root[data-performance='low'] .glass-panel__footer,
:root[data-performance='low'] .navigation-overlay,
:root[data-performance='low'] .navigation-overlay__progress {
background-color: rgba(15, 23, 42, 0.92) !important;
border-color: rgba(148, 163, 184, 0.2) !important;
box-shadow: none !important;
}
:root[data-performance='low'] .toolbar-button,
:root[data-performance='low'] .glass-option,
:root[data-performance='low'] .glass-action {
transition: none;
}
:root:not([data-performance='medium']):not([data-performance='low']) {
--perf-blur-high: 32px;
--perf-blur-medium: 28px;
--perf-blur-low: 24px;
--perf-saturate: 160%;
}
/* Enhanced Color Palette */
:root {
/* Primary Blues */
--color-primary-50: #eff6ff;
--color-primary-100: #dbeafe;
--color-primary-200: #bfdbfe;
--color-primary-300: #93c5fd;
--color-primary-400: #60a5fa;
--color-primary-500: #3b82f6;
--color-primary-600: #2563eb;
--color-primary-700: #1d4ed8;
--color-primary-800: #1e40af;
--color-primary-900: #1e3a8a;
/* Accent Purples */
--color-accent-400: #a78bfa;
--color-accent-500: #8b5cf6;
--color-accent-600: #7c3aed;
/* Neutrals (Slate) */
--color-neutral-50: #f8fafc;
--color-neutral-100: #f1f5f9;
--color-neutral-200: #e2e8f0;
--color-neutral-300: #cbd5e1;
--color-neutral-400: #94a3b8;
--color-neutral-500: #64748b;
--color-neutral-600: #475569;
--color-neutral-700: #334155;
--color-neutral-800: #1e293b;
--color-neutral-900: #0f172a;
--color-neutral-950: #020617;
/* Semantic Colors */
--color-success-500: #22c55e;
--color-warning-500: #f59e0b;
--color-error-500: #ef4444;
/* Spacing Scale */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-5: 1.25rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-10: 2.5rem;
--space-12: 3rem;
--space-16: 4rem;
/* Border Radius */
--radius-sm: 0.375rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
--radius-xl: 1rem;
--radius-2xl: 1.25rem;
--radius-full: 9999px;
/* Shadows */
--shadow-glow-sm: 0 0 10px rgba(59, 130, 246, 0.15);
--shadow-glow-md: 0 0 20px rgba(59, 130, 246, 0.2);
--shadow-glow-lg: 0 0 40px rgba(59, 130, 246, 0.25);
/* Transitions */
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
--transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
--transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
--transition-spring: 500ms cubic-bezier(0.34, 1.56, 0.64, 1);
}
/* Gradient Definitions */
.gradient-primary {
background: linear-gradient(135deg, var(--color-primary-500) 0%, var(--color-accent-500) 100%);
}
.gradient-text-primary {
background: linear-gradient(135deg, var(--color-primary-400) 0%, var(--color-accent-400) 100%);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.gradient-text-hero {
background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
background-size: 200% 200%;
-webkit-background-clip: text;
background-clip: text;
color: transparent;
animation: gradient-shift 8s ease infinite;
}
@keyframes gradient-shift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
/* Glass Effect Utilities */
.glass-subtle {
background: rgba(15, 23, 42, 0.4);
backdrop-filter: blur(var(--perf-blur-low, 24px)) saturate(var(--perf-saturate, 160%));
-webkit-backdrop-filter: blur(var(--perf-blur-low, 24px)) saturate(var(--perf-saturate, 160%));
border: 1px solid rgba(148, 163, 184, 0.12);
}
.glass-medium {
background: rgba(15, 23, 42, 0.55);
backdrop-filter: blur(var(--perf-blur-medium, 28px)) saturate(var(--perf-saturate, 160%));
-webkit-backdrop-filter: blur(var(--perf-blur-medium, 28px)) saturate(var(--perf-saturate, 160%));
border: 1px solid rgba(148, 163, 184, 0.15);
}
.glass-strong {
background: rgba(15, 23, 42, 0.7);
backdrop-filter: blur(var(--perf-blur-high, 32px)) saturate(var(--perf-saturate, 160%));
-webkit-backdrop-filter: blur(var(--perf-blur-high, 32px)) saturate(var(--perf-saturate, 160%));
border: 1px solid rgba(148, 163, 184, 0.18);
}
/* Hover Lift Effect */
.hover-lift {
transition: transform var(--transition-base), box-shadow var(--transition-base);
}
.hover-lift:hover {
transform: translateY(-2px);
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.15);
}
/* Glow on Focus/Hover */
.glow-on-hover {
transition: box-shadow var(--transition-base);
}
.glow-on-hover:hover {
box-shadow: var(--shadow-glow-md);
}
/* Card Styles */
.card-interactive {
transition:
transform var(--transition-base),
box-shadow var(--transition-base),
border-color var(--transition-slow);
}
.card-interactive:hover {
transform: translateY(-2px) scale(1.01);
box-shadow:
0 20px 50px rgba(2, 6, 23, 0.4),
var(--shadow-glow-sm);
border-color: rgba(148, 163, 184, 0.25);
}
/* ============================================
MOBILE PERFORMANCE OPTIMIZATIONS
============================================ */
/* Mobile-specific blur reduction (major GPU savings) */
@media (max-width: 768px) {
:root:not([data-performance='low']) {
--perf-blur-high: 16px;
--perf-blur-medium: 12px;
--perf-blur-low: 8px;
--perf-saturate: 130%;
}
:root[data-performance='medium'] {
--perf-blur-high: 12px;
--perf-blur-medium: 8px;
--perf-blur-low: 6px;
--perf-saturate: 120%;
}
}
/* Touch device optimizations */
@media (pointer: coarse) {
/* Disable hover effects that cause sticky states on touch */
.hover-lift:hover {
transform: none;
}
/* Active state for touch feedback */
.hover-lift:active {
transform: scale(0.98);
}
.card-interactive:hover {
transform: none;
box-shadow: none;
}
.card-interactive:active {
transform: scale(0.99);
background: rgba(148, 163, 184, 0.08);
}
}
/* GPU acceleration for animated elements */
.gpu-accelerated {
transform: translateZ(0);
will-change: transform;
backface-visibility: hidden;
}
/* CSS Containment for performance */
.contain-layout {
contain: layout;
}
.contain-paint {
contain: paint;
}
.contain-strict {
contain: strict;
}
.contain-content {
contain: content;
}
/* Off-screen content optimization */
.content-visibility-auto {
content-visibility: auto;
contain-intrinsic-size: auto 300px;
}
/* ============================================
TOUCH-FRIENDLY DEFAULTS
============================================ */
/* Minimum touch target size (44px as per Apple/Google guidelines) */
.touch-target {
min-height: 44px;
min-width: 44px;
}
.touch-target-lg {
min-height: 48px;
min-width: 48px;
}
/* Remove tap highlight on mobile */
* {
-webkit-tap-highlight-color: transparent;
}
/* Safe area padding for notched devices */
.safe-area-top {
padding-top: env(safe-area-inset-top, 0);
}
.safe-area-bottom {
padding-bottom: env(safe-area-inset-bottom, 0);
}
.safe-area-left {
padding-left: env(safe-area-inset-left, 0);
}
.safe-area-right {
padding-right: env(safe-area-inset-right, 0);
}
.safe-area-x {
padding-left: env(safe-area-inset-left, 0);
padding-right: env(safe-area-inset-right, 0);
}
.safe-area-y {
padding-top: env(safe-area-inset-top, 0);
padding-bottom: env(safe-area-inset-bottom, 0);
}
/* ============================================
REDUCED MOTION PREFERENCES
============================================ */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
.gradient-text-hero {
animation: none;
background-size: 100% 100%;
}
}
/* ============================================
EFFICIENT MOBILE ANIMATIONS
============================================ */
/* Simple fade for mobile (no transforms = cheaper) */
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fade-out {
from { opacity: 1; }
to { opacity: 0; }
}
/* Slide animations using transform (GPU-accelerated) */
@keyframes slide-up {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slide-down {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Pulse for loading states */
@keyframes pulse-subtle {
0%, 100% { opacity: 1; }
50% { opacity: 0.6; }
}
.animate-pulse-subtle {
animation: pulse-subtle 2s ease-in-out infinite;
}
/* ============================================
SCROLLBAR STYLING
============================================ */
/* Custom scrollbar for webkit browsers */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: rgba(15, 23, 42, 0.3);
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
background: rgba(148, 163, 184, 0.3);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(148, 163, 184, 0.5);
}
/* Firefox scrollbar */
* {
scrollbar-width: thin;
scrollbar-color: rgba(148, 163, 184, 0.3) rgba(15, 23, 42, 0.3);
}
/* figtree-regular - latin_latin-ext */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Figtree';
font-style: normal;
font-weight: 400;
src: url('/fonts/figtree-v9-latin_latin-ext-regular.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
url('/fonts/figtree-v9-latin_latin-ext-regular.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
}
/* figtree-italic - latin_latin-ext */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Figtree';
font-style: italic;
font-weight: 400;
src: url('/fonts/figtree-v9-latin_latin-ext-italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
url('/fonts/figtree-v9-latin_latin-ext-italic.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
}
/* figtree-700 - latin_latin-ext */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Figtree';
font-style: normal;
font-weight: 700;
src: url('/fonts/figtree-v9-latin_latin-ext-700.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
url('/fonts/figtree-v9-latin_latin-ext-700.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
}
/* figtree-700italic - latin_latin-ext */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Figtree';
font-style: italic;
font-weight: 700;
src: url('/fonts/figtree-v9-latin_latin-ext-700italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
url('/fonts/figtree-v9-latin_latin-ext-700italic.ttf') format('truetype'); /* Chrome 4+, Firefox 3.5+, IE 9+, Safari 3.1+, iOS 4.2+, Android Browser 2.2+ */
}