Lin / frontend /src /index.css
Zelyanoth's picture
fff
25f22bf
raw
history blame
21.1 kB
/* Import Google Fonts */
@import url('https://fonts.googleapis.com/css2?family=Pacifico&family=Roboto:ital,wght@0,300;0,400;0,500;0,700;1,300;1,400;1,500;1,700&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
/* CSS Custom Properties for Theming */
:root {
/* Color System */
--color-primary-50: #FFF5F5;
--color-primary-100: #FFE4E4;
--color-primary-200: #FFCCCC;
--color-primary-300: #FFB3B3;
--color-primary-400: #FF9999;
--color-primary-500: #FF8080;
--color-primary-600: #FF6666;
--color-primary-700: #E65555;
--color-primary-800: #CC4444;
--color-primary-900: #910029;
--color-primary-950: #6B0021;
--color-secondary-50: #F8F9FA;
--color-secondary-100: #E9ECEF;
--color-secondary-200: #DEE2E6;
--color-secondary-300: #CED4DA;
--color-secondary-400: #ADB5BD;
--color-secondary-500: #6C757D;
--color-secondary-600: #495057;
--color-secondary-700: #343A40;
--color-secondary-800: #212529;
--color-secondary-900: #39404B;
--color-secondary-950: #1A1E22;
--color-accent-50: #F8FAFC;
--color-accent-100: #F1F5F9;
--color-accent-200: #E2E8F0;
--color-accent-300: #CBD5E1;
--color-accent-400: #94A3B8;
--color-accent-500: #64748B;
--color-accent-600: #475569;
--color-accent-700: #334155;
--color-accent-800: #1E293B;
--color-accent-900: #0F172A;
--color-accent-950: #020617;
--color-success-500: #22C55E;
--color-warning-500: #F59E0B;
--color-error-500: #EF4444;
--color-info-500: #0EA5E9;
/* Typography */
--font-family-sans: 'Roboto', system-ui, sans-serif;
--font-family-display: 'Pacifico', cursive;
--text-xs: 0.75rem;
--text-sm: 0.875rem;
--text-base: 1rem;
--text-lg: 1.125rem;
--text-xl: 1.25rem;
--text-2xl: 1.5rem;
--text-3xl: 1.875rem;
--text-4xl: 2.25rem;
--text-5xl: 3rem;
--text-6xl: 3.75rem;
--text-7xl: 4.5rem;
--text-8xl: 6rem;
--text-9xl: 8rem;
--leading-tight: 1.25;
--leading-normal: 1.5;
--leading-relaxed: 1.75;
--leading-loose: 2;
--tracking-tighter: -0.05em;
--tracking-tight: -0.025em;
--tracking-normal: 0em;
--tracking-wide: 0.025em;
--tracking-wider: 0.05em;
--tracking-widest: 0.1em;
/* Spacing */
--spacing-px: 1px;
--spacing-05: 0.125rem;
--spacing-1: 0.25rem;
--spacing-15: 0.375rem;
--spacing-2: 0.5rem;
--spacing-25: 0.625rem;
--spacing-3: 0.75rem;
--spacing-35: 0.875rem;
--spacing-4: 1rem;
--spacing-5: 1.25rem;
--spacing-6: 1.5rem;
--spacing-7: 1.75rem;
--spacing-8: 2rem;
--spacing-9: 2.25rem;
--spacing-10: 2.5rem;
--spacing-11: 2.75rem;
--spacing-12: 3rem;
--spacing-14: 3.5rem;
--spacing-16: 4rem;
--spacing-18: 4.5rem;
--spacing-20: 5rem;
--spacing-24: 6rem;
--spacing-28: 7rem;
--spacing-32: 8rem;
--spacing-36: 9rem;
--spacing-40: 10rem;
--spacing-44: 11rem;
--spacing-48: 12rem;
--spacing-52: 13rem;
--spacing-56: 14rem;
--spacing-60: 15rem;
--spacing-64: 16rem;
--spacing-72: 18rem;
--spacing-80: 20rem;
--spacing-96: 24rem;
/* Border Radius */
--radius-none: 0px;
--radius-sm: 0.125rem;
--radius: 0.375rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
--radius-xl: 1rem;
--radius-2xl: 1.5rem;
--radius-3xl: 2rem;
--radius-full: 9999px;
/* Shadows */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
--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);
--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
--shadow-none: 0 0 0 0 rgba(0, 0, 0, 0);
/* Z-Index */
--z-0: 0;
--z-10: 10;
--z-20: 20;
--z-30: 30;
--z-40: 40;
--z-50: 50;
--z-auto: auto;
/* Transitions */
--transition-fast: 75ms;
--transition-normal: 100ms;
--transition-slow: 200ms;
--transition-slower: 300ms;
--transition-slowest: 500ms;
/* Opacity */
--opacity-0: 0;
--opacity-25: 0.25;
--opacity-50: 0.5;
--opacity-75: 0.75;
--opacity-80: 0.8;
--opacity-100: 1;
}
/* Dark mode variables */
@media (prefers-color-scheme: dark) {
:root {
--color-primary-50: #6B0021;
--color-primary-100: #910029;
--color-primary-200: #CC4444;
--color-primary-300: #E65555;
--color-primary-400: #FF6666;
--color-primary-500: #FF8080;
--color-primary-600: #FF9999;
--color-primary-700: #FFB3B3;
--color-primary-800: #FFCCCC;
--color-primary-900: #FFE4E4;
--color-primary-950: #FFF5F5;
--color-secondary-50: #1A1E22;
--color-secondary-100: #39404B;
--color-secondary-200: #212529;
--color-secondary-300: #343A40;
--color-secondary-400: #495057;
--color-secondary-500: #6C757D;
--color-secondary-600: #ADB5BD;
--color-secondary-700: #CED4DA;
--color-secondary-800: #DEE2E6;
--color-secondary-900: #E9ECEF;
--color-secondary-950: #F8F9FA;
--color-accent-50: #020617;
--color-accent-100: #0F172A;
--color-accent-200: #1E293B;
--color-accent-300: #334155;
--color-accent-400: #475569;
--color-accent-500: #64748B;
--color-accent-600: #94A3B8;
--color-accent-700: #CBD5E1;
--color-accent-800: #E2E8F0;
--color-accent-900: #F1F5F9;
--color-accent-950: #F8FAFC;
}
}
/* Base Styles */
* {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--font-family-sans);
font-size: var(--text-base);
line-height: var(--leading-normal);
color: var(--color-secondary-900);
background-color: var(--color-accent-50);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Enhanced Typography Classes */
.text-display {
font-family: var(--font-family-display);
font-weight: 400;
line-height: var(--leading-tight);
}
.text-xs {
font-size: var(--text-xs);
line-height: var(--leading-normal);
}
.text-sm {
font-size: var(--text-sm);
line-height: var(--leading-normal);
}
.text-base {
font-size: var(--text-base);
line-height: var(--leading-normal);
}
.text-lg {
font-size: var(--text-lg);
line-height: var(--leading-relaxed);
}
.text-xl {
font-size: var(--text-xl);
line-height: var(--leading-relaxed);
}
.text-2xl {
font-size: var(--text-2xl);
line-height: var(--leading-relaxed);
}
.text-3xl {
font-size: var(--text-3xl);
line-height: var(--leading-loose);
}
.text-4xl {
font-size: var(--text-4xl);
line-height: var(--leading-loose);
}
.text-5xl {
font-size: var(--text-5xl);
line-height: var(--leading-tight);
}
.text-6xl {
font-size: var(--text-6xl);
line-height: var(--leading-tight);
}
.text-7xl {
font-size: var(--text-7xl);
line-height: var(--leading-tight);
}
.text-8xl {
font-size: var(--text-8xl);
line-height: var(--leading-tight);
}
.text-9xl {
font-size: var(--text-9xl);
line-height: var(--leading-tight);
}
/* Enhanced Custom Animations */
@keyframes fadeIn {
from {
opacity: var(--opacity-0);
}
to {
opacity: var(--opacity-100);
}
}
@keyframes slideUp {
from {
opacity: var(--opacity-0);
transform: translateY(20px);
}
to {
opacity: var(--opacity-100);
transform: translateY(0);
}
}
@keyframes slideDown {
from {
opacity: var(--opacity-0);
transform: translateY(-20px);
}
to {
opacity: var(--opacity-100);
transform: translateY(0);
}
}
@keyframes slideInLeft {
from {
opacity: var(--opacity-0);
transform: translateX(-100%);
}
to {
opacity: var(--opacity-100);
transform: translateX(0);
}
}
@keyframes slideInRight {
from {
opacity: var(--opacity-0);
transform: translateX(100%);
}
to {
opacity: var(--opacity-100);
transform: translateX(0);
}
}
@keyframes scaleIn {
from {
opacity: var(--opacity-0);
transform: scale(0.95);
}
to {
opacity: var(--opacity-100);
transform: scale(1);
}
}
@keyframes bounceSubtle {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-10px);
}
}
@keyframes pulseSlow {
0%, 100% {
opacity: var(--opacity-100);
}
50% {
opacity: var(--opacity-80);
}
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes ping {
75%, 100% {
transform: scale(2);
opacity: var(--opacity-0);
}
}
@keyframes pulse {
0%, 100% {
opacity: var(--opacity-100);
}
50% {
opacity: var(--opacity-50);
}
}
/* Animation Utility Classes */
.animate-fade-in {
animation: fadeIn 0.5s ease-in-out;
}
.animate-slide-up {
animation: slideUp 0.5s ease-out;
}
.animate-slide-down {
animation: slideDown 0.5s ease-out;
}
.animate-slide-in-left {
animation: slideInLeft 0.3s ease-out;
}
.animate-slide-in-right {
animation: slideInRight 0.3s ease-out;
}
.animate-scale-in {
animation: scaleIn 0.2s ease-out;
}
.animate-bounce-subtle {
animation: bounceSubtle 0.6s ease-in-out;
}
.animate-pulse-slow {
animation: pulseSlow 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
.animate-spin {
animation: spin 1s linear infinite;
}
.animate-ping {
animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
}
.animate-pulse {
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
/* Enhanced Custom Scrollbar Styling */
.custom-scrollbar::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.custom-scrollbar::-webkit-scrollbar-track {
background: var(--color-accent-100);
border-radius: var(--radius);
}
.custom-scrollbar::-webkit-scrollbar-thumb {
background: var(--color-secondary-400);
border-radius: var(--radius);
transition: background-color var(--transition-normal);
}
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
background: var(--color-secondary-500);
}
/* Enhanced Focus Styles for Accessibility */
.focus-ring:focus {
outline: 2px solid var(--color-primary-500);
outline-offset: 2px;
}
.focus-ring-inset:focus {
outline: 2px solid var(--color-primary-500);
outline-offset: calc(2px * -1);
}
.focus-ring-none:focus {
outline: none;
}
/* Focus Visible for Better Keyboard Navigation */
.focus-visible:focus {
outline: 2px solid var(--color-primary-500);
outline-offset: 2px;
}
/* Focus Within for Container Elements */
.focus-within:focus-within {
outline: 2px solid var(--color-primary-500);
outline-offset: 2px;
}
/* Skip to Content Link for Accessibility */
.skip-link {
position: absolute;
top: -40px;
left: 0;
background: var(--color-primary-600);
color: white;
padding: 8px;
text-decoration: none;
border-radius: var(--radius);
z-index: var(--z-50);
}
.skip-link:focus {
top: 0;
}
/* High Contrast Mode Support */
@media (prefers-contrast: high) {
.focus-ring:focus,
.focus-visible:focus,
.focus-within:focus-within {
outline: 3px solid currentColor;
outline-offset: 2px;
}
}
/* Reduced Motion Support */
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
/* Print Styles Optimization */
@media print {
/* Hide non-essential elements */
.no-print,
.sidebar,
.header,
.footer,
.navigation,
.modal,
.tooltip,
.popover,
.notification {
display: none !important;
}
/* Ensure proper text contrast */
body {
color: black;
background: white;
}
/* Remove background images and colors */
* {
background: none !important;
box-shadow: none !important;
}
/* Optimize font sizes for print */
h1 {
font-size: 24pt;
}
h2 {
font-size: 18pt;
}
h3 {
font-size: 14pt;
}
/* Ensure links are visible */
a {
color: #000 !important;
text-decoration: underline;
}
/* Break content properly across pages */
* {
page-break-inside: avoid;
}
tr, img {
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
tfoot {
display: table-footer-group;
}
/* Add print-specific spacing */
@page {
margin: 1in;
}
/* Ensure proper line breaks */
.page-break {
page-break-before: always;
}
.page-break-after {
page-break-after: always;
}
.no-break {
page-break-inside: avoid;
}
}
/* Utility Classes for Design System */
/* Color Utilities */
.bg-primary-50 { background-color: var(--color-primary-50); }
.bg-primary-100 { background-color: var(--color-primary-100); }
.bg-primary-200 { background-color: var(--color-primary-200); }
.bg-primary-300 { background-color: var(--color-primary-300); }
.bg-primary-400 { background-color: var(--color-primary-400); }
.bg-primary-500 { background-color: var(--color-primary-500); }
.bg-primary-600 { background-color: var(--color-primary-600); }
.bg-primary-700 { background-color: var(--color-primary-700); }
.bg-primary-800 { background-color: var(--color-primary-800); }
.bg-primary-900 { background-color: var(--color-primary-900); }
.bg-primary-950 { background-color: var(--color-primary-950); }
.text-primary-50 { color: var(--color-primary-50); }
.text-primary-100 { color: var(--color-primary-100); }
.text-primary-200 { color: var(--color-primary-200); }
.text-primary-300 { color: var(--color-primary-300); }
.text-primary-400 { color: var(--color-primary-400); }
.text-primary-500 { color: var(--color-primary-500); }
.text-primary-600 { color: var(--color-primary-600); }
.text-primary-700 { color: var(--color-primary-700); }
.text-primary-800 { color: var(--color-primary-800); }
.text-primary-900 { color: var(--color-primary-900); }
.text-primary-950 { color: var(--color-primary-950); }
.border-primary-50 { border-color: var(--color-primary-50); }
.border-primary-100 { border-color: var(--color-primary-100); }
.border-primary-200 { border-color: var(--color-primary-200); }
.border-primary-300 { border-color: var(--color-primary-300); }
.border-primary-400 { border-color: var(--color-primary-400); }
.border-primary-500 { border-color: var(--color-primary-500); }
.border-primary-600 { border-color: var(--color-primary-600); }
.border-primary-700 { border-color: var(--color-primary-700); }
.border-primary-800 { border-color: var(--color-primary-800); }
.border-primary-900 { border-color: var(--color-primary-900); }
.border-primary-950 { border-color: var(--color-primary-950); }
/* Spacing Utilities */
.p-0 { padding: 0; }
.p-05 { padding: var(--spacing-05); }
.p-1 { padding: var(--spacing-1); }
.p-15 { padding: var(--spacing-15); }
.p-2 { padding: var(--spacing-2); }
.p-25 { padding: var(--spacing-25); }
.p-3 { padding: var(--spacing-3); }
.p-35 { padding: var(--spacing-35); }
.p-4 { padding: var(--spacing-4); }
.p-5 { padding: var(--spacing-5); }
.p-6 { padding: var(--spacing-6); }
.p-8 { padding: var(--spacing-8); }
.p-10 { padding: var(--spacing-10); }
.p-12 { padding: var(--spacing-12); }
.p-16 { padding: var(--spacing-16); }
.p-20 { padding: var(--spacing-20); }
.p-24 { padding: var(--spacing-24); }
.p-32 { padding: var(--spacing-32); }
.m-0 { margin: 0; }
.m-05 { margin: var(--spacing-05); }
.m-1 { margin: var(--spacing-1); }
.m-15 { margin: var(--spacing-15); }
.m-2 { margin: var(--spacing-2); }
.m-25 { margin: var(--spacing-25); }
.m-3 { margin: var(--spacing-3); }
.m-35 { margin: var(--spacing-35); }
.m-4 { margin: var(--spacing-4); }
.m-5 { margin: var(--spacing-5); }
.m-6 { margin: var(--spacing-6); }
.m-8 { margin: var(--spacing-8); }
.m-10 { margin: var(--spacing-10); }
.m-12 { margin: var(--spacing-12); }
.m-16 { margin: var(--spacing-16); }
.m-20 { margin: var(--spacing-20); }
.m-24 { margin: var(--spacing-24); }
.m-32 { margin: var(--spacing-32); }
/* Border Radius Utilities */
.rounded-none { border-radius: var(--radius-none); }
.rounded-sm { border-radius: var(--radius-sm); }
.rounded { border-radius: var(--radius); }
.rounded-md { border-radius: var(--radius-md); }
.rounded-lg { border-radius: var(--radius-lg); }
.rounded-xl { border-radius: var(--radius-xl); }
.rounded-2xl { border-radius: var(--radius-2xl); }
.rounded-3xl { border-radius: var(--radius-3xl); }
.rounded-full { border-radius: var(--radius-full); }
/* Shadow Utilities */
.shadow-none { box-shadow: var(--shadow-none); }
.shadow-sm { box-shadow: var(--shadow-sm); }
.shadow { box-shadow: var(--shadow); }
.shadow-md { box-shadow: var(--shadow-md); }
.shadow-lg { box-shadow: var(--shadow-lg); }
.shadow-xl { box-shadow: var(--shadow-xl); }
.shadow-2xl { box-shadow: var(--shadow-2xl); }
.shadow-inner { box-shadow: var(--shadow-inner); }
/* Z-Index Utilities */
.z-0 { z-index: var(--z-0); }
.z-10 { z-index: var(--z-10); }
.z-20 { z-index: var(--z-20); }
.z-30 { z-index: var(--z-30); }
.z-40 { z-index: var(--z-40); }
.z-50 { z-index: var(--z-50); }
.z-auto { z-index: var(--z-auto); }
/* Transition Utilities */
.transition-none { transition: none; }
.transition-fast { transition: all var(--transition-fast); }
.transition-normal { transition: all var(--transition-normal); }
.transition-slow { transition: all var(--transition-slow); }
.transition-slower { transition: all var(--transition-slower); }
.transition-slowest { transition: all var(--transition-slowest); }
/* Opacity Utilities */
.opacity-0 { opacity: var(--opacity-0); }
.opacity-25 { opacity: var(--opacity-25); }
.opacity-50 { opacity: var(--opacity-50); }
.opacity-75 { opacity: var(--opacity-75); }
.opacity-100 { opacity: var(--opacity-100); }
/* Component Base Styles */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--spacing-2) var(--spacing-4);
border-radius: var(--radius);
font-weight: 500;
text-decoration: none;
transition: all var(--transition-normal);
border: none;
cursor: pointer;
font-family: inherit;
font-size: var(--text-base);
line-height: var(--leading-normal);
}
.btn:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(145, 0, 41, 0.1);
}
.btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.btn-primary {
background-color: var(--color-primary-600);
color: white;
}
.btn-primary:hover:not(:disabled) {
background-color: var(--color-primary-700);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
.btn-secondary {
background-color: var(--color-secondary-200);
color: var(--color-secondary-800);
}
.btn-secondary:hover:not(:disabled) {
background-color: var(--color-secondary-300);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
.btn-accent {
background-color: var(--color-accent-500);
color: white;
}
.btn-accent:hover:not(:disabled) {
background-color: var(--color-accent-600);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
.btn-success {
background-color: var(--color-success-500);
color: white;
}
.btn-success:hover:not(:disabled) {
background-color: var(--color-success-600);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
.btn-warning {
background-color: var(--color-warning-500);
color: white;
}
.btn-warning:hover:not(:disabled) {
background-color: var(--color-warning-600);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
.btn-error {
background-color: var(--color-error-500);
color: white;
}
.btn-error:hover:not(:disabled) {
background-color: var(--color-error-600);
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
.card {
background: white;
border-radius: var(--radius-lg);
box-shadow: var(--shadow);
padding: var(--spacing-6);
transition: all var(--transition-normal);
}
.card:hover {
box-shadow: var(--shadow-md);
transform: translateY(-2px);
}
.input {
width: 100%;
padding: var(--spacing-3);
border: 1px solid var(--color-secondary-300);
border-radius: var(--radius);
font-size: var(--text-base);
line-height: var(--leading-normal);
transition: all var(--transition-normal);
background-color: white;
color: black;
}
.input:focus {
outline: none;
border-color: var(--color-primary-500);
box-shadow: 0 0 0 3px rgba(145, 0, 41, 0.1);
}
.input::placeholder {
color: var(--color-secondary-500);
}
.input:disabled {
background-color: var(--color-accent-100);
cursor: not-allowed;
}
/* Responsive Typography */
@media (max-width: 640px) {
.text-4xl { font-size: var(--text-3xl); }
.text-5xl { font-size: var(--text-4xl); }
.text-6xl { font-size: var(--text-5xl); }
.text-7xl { font-size: var(--text-6xl); }
.text-8xl { font-size: var(--text-7xl); }
.text-9xl { font-size: var(--text-8xl); }
}
/* Responsive Header Adjustments */
@media (max-width: 1023px) {
/* Ensure proper spacing for mobile header */
.header-content {
padding-left: 1rem;
padding-right: 1rem;
}
}
/* High DPI Display Support */
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
}