463 lines
9.3 KiB
CSS
463 lines
9.3 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
/* Custom Font Import */
|
|
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap");
|
|
|
|
/* CSS Variables for Design System */
|
|
:root {
|
|
/* Colors */
|
|
--color-primary-50: #fef2f2;
|
|
--color-primary-100: #fee2e2;
|
|
--color-primary-200: #fecaca;
|
|
--color-primary-300: #fca5a5;
|
|
--color-primary-400: #f87171;
|
|
--color-primary-500: #ef4444;
|
|
--color-primary-600: #dc2626;
|
|
--color-primary-700: #b91c1c;
|
|
--color-primary-800: #991b1b;
|
|
--color-primary-900: #7f1d1d;
|
|
|
|
/* Neutral Colors */
|
|
--color-gray-50: #fafafa;
|
|
--color-gray-100: #f4f4f5;
|
|
--color-gray-200: #e4e4e7;
|
|
--color-gray-300: #d4d4d8;
|
|
--color-gray-400: #a1a1aa;
|
|
--color-gray-500: #71717a;
|
|
--color-gray-600: #52525b;
|
|
--color-gray-700: #3f3f46;
|
|
--color-gray-800: #27272a;
|
|
--color-gray-900: #18181b;
|
|
|
|
/* Shadows */
|
|
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
--shadow-md:
|
|
0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
--shadow-lg:
|
|
0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
--shadow-xl:
|
|
0 20px 25px -5px rgba(0, 0, 0, 0.1),
|
|
0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 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);
|
|
|
|
/* Border Radius */
|
|
--radius-sm: 0.375rem;
|
|
--radius-md: 0.5rem;
|
|
--radius-lg: 0.75rem;
|
|
--radius-xl: 1rem;
|
|
--radius-2xl: 1.5rem;
|
|
}
|
|
|
|
/* Base Styles */
|
|
html,
|
|
body {
|
|
height: 100%;
|
|
width: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
font-family:
|
|
"Inter",
|
|
system-ui,
|
|
-apple-system,
|
|
sans-serif;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
}
|
|
|
|
body {
|
|
@apply bg-gray-50 text-gray-900;
|
|
background-image:
|
|
radial-gradient(
|
|
at 40% 20%,
|
|
rgb(251, 113, 133, 0.05) 0px,
|
|
transparent 50%
|
|
),
|
|
radial-gradient(
|
|
at 80% 0%,
|
|
rgb(251, 207, 232, 0.05) 0px,
|
|
transparent 50%
|
|
),
|
|
radial-gradient(
|
|
at 0% 50%,
|
|
rgb(252, 165, 165, 0.05) 0px,
|
|
transparent 50%
|
|
);
|
|
background-attachment: fixed;
|
|
}
|
|
|
|
#root {
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
|
|
/* Typography Base */
|
|
h1,
|
|
h2,
|
|
h3,
|
|
h4,
|
|
h5,
|
|
h6 {
|
|
@apply font-semibold tracking-tight;
|
|
}
|
|
|
|
/* Custom Scrollbar */
|
|
::-webkit-scrollbar {
|
|
width: 10px;
|
|
height: 10px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
@apply bg-gray-100;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
@apply bg-gray-300 hover:bg-gray-400 rounded-full;
|
|
transition: background-color var(--transition-base);
|
|
}
|
|
|
|
/* Selection */
|
|
::selection {
|
|
@apply bg-red-100 text-red-900;
|
|
}
|
|
|
|
/* Focus Styles */
|
|
*:focus {
|
|
outline: none;
|
|
}
|
|
|
|
*:focus-visible {
|
|
@apply ring-2 ring-red-500 ring-offset-2 rounded-md;
|
|
}
|
|
|
|
/* Component Styles */
|
|
@layer components {
|
|
/* Card Styles */
|
|
.card {
|
|
@apply bg-white rounded-xl border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200;
|
|
}
|
|
|
|
.card-hover {
|
|
@apply hover:shadow-lg hover:border-gray-300 hover:-translate-y-0.5 transform transition-all duration-200;
|
|
}
|
|
|
|
/* Button Base */
|
|
.btn {
|
|
@apply inline-flex items-center justify-center px-4 py-2 rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed;
|
|
}
|
|
|
|
.btn-primary {
|
|
@apply btn bg-gradient-to-r from-red-700 to-red-800 text-white hover:from-red-800 hover:to-red-900 focus:ring-red-500 shadow-sm hover:shadow-md;
|
|
}
|
|
|
|
.btn-secondary {
|
|
@apply btn border border-gray-300 text-gray-700 bg-white hover:bg-gray-50 focus:ring-gray-500;
|
|
}
|
|
|
|
.btn-danger {
|
|
@apply btn border border-red-300 text-red-700 bg-white hover:bg-red-50 focus:ring-red-500;
|
|
}
|
|
|
|
/* Input Styles */
|
|
.input {
|
|
@apply w-full px-4 py-2.5 border border-gray-300 rounded-lg focus:ring-2 focus:ring-red-500 focus:border-transparent transition-all duration-200 placeholder-gray-400;
|
|
}
|
|
|
|
.input:hover:not(:focus) {
|
|
@apply border-gray-400;
|
|
}
|
|
|
|
/* Label Styles */
|
|
.label {
|
|
@apply block text-sm font-medium text-gray-700 mb-1.5;
|
|
}
|
|
|
|
/* Section Headers */
|
|
.section-header {
|
|
@apply flex items-center space-x-3 mb-6;
|
|
}
|
|
|
|
.section-icon {
|
|
@apply flex items-center justify-center h-12 w-12 rounded-xl bg-gradient-to-br;
|
|
}
|
|
|
|
/* Status Badges */
|
|
.badge {
|
|
@apply inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium;
|
|
}
|
|
|
|
.badge-success {
|
|
@apply badge bg-green-100 text-green-800;
|
|
}
|
|
|
|
.badge-warning {
|
|
@apply badge bg-yellow-100 text-yellow-800;
|
|
}
|
|
|
|
.badge-danger {
|
|
@apply badge bg-red-100 text-red-800;
|
|
}
|
|
|
|
.badge-info {
|
|
@apply badge bg-blue-100 text-blue-800;
|
|
}
|
|
|
|
/* Loading Spinner */
|
|
.spinner {
|
|
@apply animate-spin rounded-full border-b-2 border-current;
|
|
}
|
|
|
|
/* Skeleton Loading */
|
|
.skeleton {
|
|
@apply animate-pulse bg-gray-200 rounded;
|
|
}
|
|
|
|
/* Glass Effect */
|
|
.glass {
|
|
@apply bg-white/80 backdrop-blur-md border border-white/20 shadow-lg;
|
|
}
|
|
|
|
/* Gradient Text */
|
|
.gradient-text {
|
|
@apply bg-gradient-to-r from-red-700 to-red-900 bg-clip-text text-transparent;
|
|
}
|
|
}
|
|
|
|
/* Animations */
|
|
@keyframes fade-in {
|
|
from {
|
|
opacity: 0;
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
@keyframes fade-in-up {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(30px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes fade-in-down {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-10px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
}
|
|
|
|
@keyframes scale-in {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.95);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes slide-in-right {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateX(-10px);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
}
|
|
}
|
|
|
|
@keyframes pulse-soft {
|
|
0%,
|
|
100% {
|
|
opacity: 1;
|
|
}
|
|
50% {
|
|
opacity: 0.8;
|
|
}
|
|
}
|
|
|
|
@keyframes blob {
|
|
0% {
|
|
transform: translate(0px, 0px) scale(1);
|
|
}
|
|
33% {
|
|
transform: translate(30px, -50px) scale(1.1);
|
|
}
|
|
66% {
|
|
transform: translate(-20px, 20px) scale(0.9);
|
|
}
|
|
100% {
|
|
transform: translate(0px, 0px) scale(1);
|
|
}
|
|
}
|
|
|
|
@keyframes swipe {
|
|
0% {
|
|
transform: translateX(-100%);
|
|
}
|
|
100% {
|
|
transform: translateX(100%);
|
|
}
|
|
}
|
|
|
|
/* Animation Classes */
|
|
.animate-fade-in {
|
|
animation: fade-in var(--transition-slow) ease-out;
|
|
}
|
|
|
|
.animate-fade-in-up {
|
|
animation: fade-in-up 0.6s ease-out forwards;
|
|
}
|
|
|
|
.animate-fade-in-down {
|
|
animation: fade-in-down var(--transition-slow) ease-out;
|
|
}
|
|
|
|
.animate-scale-in {
|
|
animation: scale-in var(--transition-slow) ease-out;
|
|
}
|
|
|
|
.animate-slide-in-right {
|
|
animation: slide-in-right var(--transition-slow) ease-out;
|
|
}
|
|
|
|
.animate-pulse-soft {
|
|
animation: pulse-soft 2s ease-in-out infinite;
|
|
}
|
|
|
|
.animate-blob {
|
|
animation: blob 7s infinite;
|
|
}
|
|
|
|
.animation-delay-2000 {
|
|
animation-delay: 2s;
|
|
}
|
|
|
|
.animation-delay-4000 {
|
|
animation-delay: 4s;
|
|
}
|
|
|
|
/* Button swipe effect */
|
|
.button-swipe-effect::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
|
|
transform: translateX(-100%);
|
|
}
|
|
|
|
.button-swipe-effect:active:not(:disabled)::before {
|
|
animation: swipe 0.6s ease-out;
|
|
}
|
|
|
|
/* Hover Lift Effect */
|
|
.hover-lift {
|
|
@apply transition-transform duration-200 hover:-translate-y-1;
|
|
}
|
|
|
|
/* Gradient Backgrounds */
|
|
.bg-gradient-primary {
|
|
@apply bg-gradient-to-r from-red-700 to-red-800;
|
|
}
|
|
|
|
.bg-gradient-secondary {
|
|
@apply bg-gradient-to-r from-gray-700 to-gray-800;
|
|
}
|
|
|
|
.bg-gradient-subtle {
|
|
@apply bg-gradient-to-br from-gray-50 via-white to-red-50;
|
|
}
|
|
|
|
/* Responsive Utilities */
|
|
@media (max-width: 640px) {
|
|
.hide-mobile {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
/* Print Styles */
|
|
@media print {
|
|
body {
|
|
@apply bg-white;
|
|
}
|
|
|
|
.no-print {
|
|
display: none !important;
|
|
}
|
|
}
|
|
|
|
/* Loading States */
|
|
.loading-dots {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.loading-dots::after {
|
|
content: "";
|
|
animation: loading-dots 1.5s steps(4, end) infinite;
|
|
}
|
|
|
|
@keyframes loading-dots {
|
|
0% {
|
|
content: "";
|
|
}
|
|
25% {
|
|
content: ".";
|
|
}
|
|
50% {
|
|
content: "..";
|
|
}
|
|
75% {
|
|
content: "...";
|
|
}
|
|
100% {
|
|
content: "";
|
|
}
|
|
}
|
|
|
|
/* Transitions for Page Changes */
|
|
.page-transition-enter {
|
|
opacity: 0;
|
|
transform: translateY(10px);
|
|
}
|
|
|
|
.page-transition-enter-active {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
transition:
|
|
opacity 300ms ease-out,
|
|
transform 300ms ease-out;
|
|
}
|
|
|
|
.page-transition-exit {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.page-transition-exit-active {
|
|
opacity: 0;
|
|
transform: translateY(-10px);
|
|
transition:
|
|
opacity 200ms ease-in,
|
|
transform 200ms ease-in;
|
|
}
|