Ram2005's picture
feat: Premium CSS - micro-interactions, smooth animations, no lag
207d625 verified
@tailwind base;
@tailwind components;
@tailwind utilities;
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
background: #0F172A;
color: #F8FAFC;
/* GPU acceleration for smooth scrolling */
-webkit-overflow-scrolling: touch;
}
/* ─── Performance: GPU-accelerated transforms ───────────────────────────── */
.glass,
.card,
[class*="animate-"] {
will-change: transform, opacity;
transform: translateZ(0);
backface-visibility: hidden;
}
/* ─── MapLibre popup overrides β€” dark premium theme ──────────────────────── */
.maplibregl-popup-content {
padding: 0 !important;
border-radius: 16px !important;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(51, 65, 85, 0.4) !important;
overflow: hidden;
max-width: 360px !important;
background: #1E293B !important;
border: 1px solid #334155 !important;
}
.maplibregl-popup-close-button {
font-size: 18px;
padding: 4px 8px;
color: #94A3B8;
z-index: 10;
right: 4px !important;
top: 4px !important;
transition: all 0.15s ease;
}
.maplibregl-popup-close-button:hover {
color: #F8FAFC;
background: #334155;
border-radius: 6px;
}
.maplibregl-popup-tip { display: none; }
.maplibregl-ctrl-group {
background: #1E293B !important;
border: 1px solid #334155 !important;
border-radius: 12px !important;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important;
}
.maplibregl-ctrl-group button {
background: #1E293B !important;
border-color: #334155 !important;
transition: background 0.15s ease;
}
.maplibregl-ctrl-group button:hover {
background: #334155 !important;
}
.maplibregl-ctrl-group button .maplibregl-ctrl-icon {
filter: invert(1);
}
/* ─── Custom scrollbar β€” thin & subtle ───────────────────────────────────── */
::-webkit-scrollbar { width: 4px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #475569; border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: #64748B; }
.scrollbar-thin::-webkit-scrollbar { width: 3px; }
/* ─── Animations β€” 60fps GPU-accelerated ─────────────────────────────────── */
@keyframes slideInLeft {
from { transform: translate3d(-100%, 0, 0); opacity: 0; }
to { transform: translate3d(0, 0, 0); opacity: 1; }
}
@keyframes slideInRight {
from { transform: translate3d(100%, 0, 0); opacity: 0; }
to { transform: translate3d(0, 0, 0); opacity: 1; }
}
@keyframes fadeIn {
from { opacity: 0; transform: translate3d(0, 8px, 0); }
to { opacity: 1; transform: translate3d(0, 0, 0); }
}
@keyframes slideUp {
from { transform: translate3d(0, 100%, 0); opacity: 0; }
to { transform: translate3d(0, 0, 0); opacity: 1; }
}
@keyframes scaleIn {
from { transform: scale(0.95); opacity: 0; }
to { transform: scale(1); opacity: 1; }
}
@keyframes shimmer {
0% { background-position: -200% 0; }
100% { background-position: 200% 0; }
}
.animate-slide-in-left { animation: slideInLeft 0.25s cubic-bezier(0.16, 1, 0.3, 1); }
.animate-slide-in-right { animation: slideInRight 0.25s cubic-bezier(0.16, 1, 0.3, 1); }
.animate-fade-in { animation: fadeIn 0.2s ease-out; }
.animate-slide-up { animation: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1); }
.animate-scale-in { animation: scaleIn 0.2s cubic-bezier(0.16, 1, 0.3, 1); }
/* ─── Glass panel β€” premium flat dark ────────────────────────────────────── */
.glass {
background: rgba(30, 41, 59, 0.95);
border: 1px solid rgba(51, 65, 85, 0.6);
backdrop-filter: none; /* No blur = no lag */
}
/* ─── Interactive micro-effects ──────────────────────────────────────────── */
button {
transition: transform 0.1s ease, background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}
button:active:not(:disabled) {
transform: scale(0.97);
}
/* Hover lift for cards */
.card-hover {
transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s ease;
}
.card-hover:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px -5px rgba(0, 0, 0, 0.3);
}
/* ─── Brand colors ───────────────────────────────────────────────────────── */
.gradient-text {
color: #F97316;
}
.unicorn-badge {
color: #F97316;
font-weight: 700;
}
/* ─── Utility classes ────────────────────────────────────────────────────── */
.line-clamp-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.line-clamp-3 {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
/* ─── Skeleton loading ───────────────────────────────────────────────────── */
.skeleton {
background: linear-gradient(90deg, #1E293B 25%, #334155 50%, #1E293B 75%);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
border-radius: 8px;
}
/* ─── Focus ring for accessibility ───────────────────────────────────────── */
:focus-visible {
outline: 2px solid #F97316;
outline-offset: 2px;
border-radius: 4px;
}
/* ─── Reduce motion for accessibility ────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}