fpl-solver / frontend /src /index.css
AnayShukla's picture
updates
24bb13e
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Z-Index System - Organized hierarchy */
:root {
--z-base: 0;
--z-dropdown: 100;
--z-sticky: 200;
--z-fixed: 300;
--z-modal-backdrop: 400;
--z-modal: 500;
--z-popover: 600;
--z-tooltip: 700;
--z-notification: 800;
--z-critical: 9999;
}
/* Z-Index utility classes */
.z-base { z-index: var(--z-base); }
.z-dropdown { z-index: var(--z-dropdown); }
.z-sticky { z-index: var(--z-sticky); }
.z-fixed { z-index: var(--z-fixed); }
.z-modal-backdrop { z-index: var(--z-modal-backdrop); }
.z-modal { z-index: var(--z-modal); }
.z-popover { z-index: var(--z-popover); }
.z-tooltip { z-index: var(--z-tooltip); }
.z-notification { z-index: var(--z-notification); }
.z-critical { z-index: var(--z-critical); }
@keyframes solve-indeterminate {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(400%);
}
}
@keyframes transfer-glow {
0%,
100% {
box-shadow:
0 0 16px rgba(34, 211, 238, 0.35),
0 0 36px rgba(16, 185, 129, 0.2),
inset 0 0 14px rgba(6, 182, 212, 0.12);
}
50% {
box-shadow:
0 0 28px rgba(34, 211, 238, 0.55),
0 0 52px rgba(139, 92, 246, 0.18),
inset 0 0 22px rgba(16, 185, 129, 0.18);
}
}
/* ─── Global Smoothness ─── */
html {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
* { -webkit-tap-highlight-color: transparent; }
/* Tabular nums: all digits same width → no layout shift on number changes */
.tabular-nums { font-variant-numeric: tabular-nums; }
/* Skeleton loading pulse */
@keyframes skeleton-pulse {
0%, 100% { opacity: 0.12; }
50% { opacity: 0.28; }
}
.skeleton-pulse {
animation: skeleton-pulse 1.8s ease-in-out infinite;
}
/* Slim themed scrollbar */
.custom-scrollbar::-webkit-scrollbar { width: 5px; }
.custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
.custom-scrollbar::-webkit-scrollbar-thumb { background: rgba(100,116,139,0.25); border-radius: 999px; }
.custom-scrollbar::-webkit-scrollbar-thumb:hover { background: rgba(100,116,139,0.45); }
/* Hide scrollbar utility */
.hide-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
.hide-scrollbar::-webkit-scrollbar {
display: none;
}
/* Accessibility improvements */
*:focus-visible {
outline: 2px solid #10b981;
outline-offset: 2px;
}
button:focus-visible, [role="button"]:focus-visible {
outline: 2px solid #10b981;
outline-offset: 2px;
border-radius: 4px;
}
input:focus-visible, select:focus-visible, textarea:focus-visible {
outline: 2px solid #10b981;
outline-offset: 2px;
}
/* Skip to content link for accessibility */
.skip-to-content {
position: absolute;
top: -40px;
left: 0;
background: #10b981;
color: white;
padding: 8px;
z-index: 100;
transition: top 0.3s;
}
.skip-to-content:focus {
top: 0;
}
/* Mobile-specific improvements */
@media (max-width: 768px) {
* {
-webkit-tap-highlight-color: transparent;
}
/* Better touch targets */
button, [role="button"], input, select, textarea {
min-height: 44px;
min-width: 44px;
}
/* Small buttons exception */
.small-touch-target {
min-height: 32px;
min-width: 32px;
}
/* Better active states for touch */
button:active, [role="button"]:active {
transform: scale(0.95);
opacity: 0.8;
}
/* Improve touch feedback */
.touch-feedback {
position: relative;
overflow: hidden;
}
.touch-feedback::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.3s, height 0.3s;
}
.touch-feedback:active::after {
width: 200px;
height: 200px;
}
/* Better scroll momentum */
* {
-webkit-overflow-scrolling: touch;
}
/* Prevent text selection on touch */
.no-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
}
.fullscreen-pitch:fullscreen {
background: #0a3a2a;
display: flex;
flex-direction: column;
justify-content: flex-start;
overflow-y: auto;
height: 100vh;
width: 100vw;
border-radius: 0 !important;
border: none !important;
}
.fullscreen-pitch:-webkit-full-screen {
background: #0a3a2a;
display: flex;
flex-direction: column;
justify-content: flex-start;
overflow-y: auto;
height: 100vh;
width: 100vw;
border-radius: 0 !important;
border: none !important;
}
.touch-none {
-webkit-user-drag: none;
user-drag: none;
-webkit-touch-callout: none;
}