/* ===== RESPONSIVE UTILITIES ===== */ /* Responsive breakpoints */ :root { --breakpoint-xs: 0; --breakpoint-sm: 576px; --breakpoint-md: 768px; --breakpoint-lg: 992px; --breakpoint-xl: 1200px; --breakpoint-xxl: 1400px; } /* ===== MOBILE NAVIGATION RESPONSIVE FIXES ===== */ /* Mobile menu container */ #navbarMenu { position: absolute; top: 100%; left: 0; right: 0; background: white; border-top: 1px solid #e5e7eb; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); max-height: calc(100vh - 64px); /* 64px là chiều cao header */ overflow-y: auto; z-index: 1000; } /* Mobile menu items */ #navbarMenu a, #navbarMenu button { padding: 0.75rem 1rem; border-bottom: 1px solid #f3f4f6; width: 100%; text-align: left; display: block; } #navbarMenu a:hover, #navbarMenu button:hover { background-color: #f9fafb; } /* Mobile dropdown menus */ #navbarMenu .group { position: relative; } #navbarMenu .group ul { position: static; width: 100%; margin: 0; padding: 0; background: #f9fafb; border-radius: 0; box-shadow: none; opacity: 1; transform: none; pointer-events: auto; } #navbarMenu .group li { border-bottom: 1px solid #e5e7eb; } #navbarMenu .group li:last-child { border-bottom: none; } /* Mobile menu button */ #navbarToggle { padding: 0.5rem; border-radius: 0.375rem; transition: all 0.2s ease; } #navbarToggle:hover { background-color: #f3f4f6; } /* Ensure header stays on top */ header { position: relative; z-index: 1001; } /* ===== MOBILE LAYOUT FIXES ===== */ /* Prevent body scroll when mobile menu is open */ body.menu-open { overflow: hidden; } /* Mobile menu overlay */ .mobile-menu-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); z-index: 999; display: none; } /* Mobile menu container improvements */ @media (max-width: 767px) { #navbarMenu { position: absolute; top: 100%; left: 0; right: 0; background: white; border-top: 1px solid #e5e7eb; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); max-height: auto; overflow: visible; z-index: 1000; transform: translateY(-10px); opacity: 0; visibility: hidden; transition: all 0.3s ease; border-radius: 0 0 12px 12px; } #navbarMenu.show { transform: translateY(0); opacity: 1; visibility: visible; } /* Mobile menu items */ #navbarMenu a, #navbarMenu button { padding: 0.75rem 1rem; border-bottom: 1px solid #f3f4f6; width: 100%; text-align: left; display: block; font-size: 0.95rem; color: #374151; transition: all 0.2s ease; line-height: 1.4; } #navbarMenu a:hover, #navbarMenu button:hover { background-color: #f9fafb; color: #059669; } /* Mobile dropdown menus */ #navbarMenu .group { position: relative; } #navbarMenu .group ul { position: static; width: 100%; margin: 0; padding: 0; background: #f9fafb; border-radius: 0; box-shadow: none; opacity: 1; transform: none; pointer-events: auto; max-height: 0; overflow: hidden; transition: max-height 0.3s ease; } #navbarMenu .group.active ul { max-height: 300px; /* Reduced height for compact design */ } #navbarMenu .group li { border-bottom: 1px solid #e5e7eb; } #navbarMenu .group li:last-child { border-bottom: none; } #navbarMenu .group li a { padding: 0.5rem 1rem 0.5rem 2.5rem; font-size: 0.9rem; line-height: 1.3; } /* Mobile menu button */ #navbarToggle { padding: 0.5rem; border-radius: 0.375rem; transition: all 0.2s ease; background: transparent; border: none; cursor: pointer; width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; } #navbarToggle:hover { background-color: #f3f4f6; } #navbarToggle:focus { outline: 2px solid #059669; outline-offset: 2px; } /* Mobile menu button icon */ #navbarToggle i { font-size: 1.25rem; color: #059669; } /* Header improvements for mobile */ header { position: sticky; top: 0; z-index: 1001; background: white; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); } /* Container padding for mobile */ .max-w-7xl { padding-left: 1rem; padding-right: 1rem; } /* Ensure mobile menu positioning */ header { position: relative; } #navbarMenu { position: absolute; top: 100%; right: 0; left: auto; width: auto; min-width: 280px; max-width: 320px; background: white; border: 1px solid #e5e7eb; border-radius: 0 0 12px 12px; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); z-index: 1000; max-height: 70vh; overflow-y: auto; transform: translateY(-10px); opacity: 0; visibility: hidden; transition: all 0.3s ease; } #navbarMenu.show { transform: translateY(0); opacity: 1; visibility: visible; } /* Mobile menu scrollbar styling */ #navbarMenu::-webkit-scrollbar { width: 4px; } #navbarMenu::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 2px; } #navbarMenu::-webkit-scrollbar-thumb { background: #c1c1c1; border-radius: 2px; } #navbarMenu::-webkit-scrollbar-thumb:hover { background: #a8a8a8; } } /* ===== MOBILE MENU ANIMATIONS ===== */ @media (max-width: 767px) { #navbarMenu { transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); } #navbarMenu.show { transform: translateX(0); } /* Smooth dropdown animations */ #navbarMenu .group ul { transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* Mobile menu item hover effects */ #navbarMenu a:active, #navbarMenu button:active { background-color: #e5e7eb; transform: scale(0.98); } /* Mobile menu button animations */ #navbarToggle i { transition: transform 0.2s ease; } #navbarToggle:active i { transform: scale(0.9); } } /* ===== INDEX.PHP SPECIFIC RESPONSIVE STYLES ===== */ /* Hero Section Responsive */ @media (max-width: 768px) { .hero-section { min-height: 80vh; padding: 2rem 0; background: var(--gradient-primary) !important; /* Force background */ } .hero-content { padding: 0 1rem; } .hero-title { font-size: clamp(2.5rem, 6vw, 3.5rem); margin-bottom: 1.5rem; color: white !important; /* Force white color */ -webkit-text-fill-color: white !important; background: none !important; } .hero-subtitle { font-size: clamp(1rem, 2.5vw, 1.25rem); margin-bottom: 2rem; color: rgba(255, 255, 255, 0.9) !important; /* Force white color */ } .hero-buttons { flex-direction: column; gap: 1rem; align-items: center; } .btn { width: 100%; max-width: 280px; justify-content: center; padding: 0.875rem 1.5rem; font-size: 0.95rem; display: inline-flex !important; /* Force display */ align-items: center !important; gap: 0.5rem !important; border-radius: 50px !important; font-weight: 600 !important; text-decoration: none !important; transition: all 0.3s ease !important; border: none !important; cursor: pointer !important; } .btn-primary { background: rgba(255, 255, 255, 0.9) !important; color: var(--primary-dark) !important; box-shadow: var(--shadow-lg) !important; } .btn-secondary { background: transparent !important; color: white !important; border: 2px solid rgba(255, 255, 255, 0.3) !important; } .floating-shape { display: none; /* Hide floating elements on mobile for better performance */ } } @media (max-width: 480px) { .hero-section { min-height: 70vh; padding: 1.5rem 0; background: var(--gradient-primary) !important; /* Force background */ } .hero-title { font-size: clamp(2rem, 5vw, 2.5rem); color: white !important; /* Force white color */ -webkit-text-fill-color: white !important; background: none !important; } .hero-subtitle { font-size: clamp(0.875rem, 2vw, 1rem); margin-bottom: 1.5rem; color: rgba(255, 255, 255, 0.9) !important; /* Force white color */ } .btn { padding: 0.75rem 1.25rem; font-size: 0.9rem; display: inline-flex !important; /* Force display */ align-items: center !important; gap: 0.5rem !important; border-radius: 50px !important; font-weight: 600 !important; text-decoration: none !important; transition: all 0.3s ease !important; border: none !important; cursor: pointer !important; } .btn-primary { background: rgba(255, 255, 255, 0.9) !important; color: var(--primary-dark) !important; box-shadow: var(--shadow-lg) !important; } .btn-secondary { background: transparent !important; color: white !important; border: 2px solid rgba(255, 255, 255, 0.3) !important; } } /* About Section Responsive */ @media (max-width: 768px) { .about-section { padding: 3rem 0; } .about-card { margin: 0 1rem; padding: 2rem 1.5rem; } .about-description { font-size: 0.95rem; line-height: 1.6; margin-bottom: 2rem; } .about-features { gap: 1.5rem; } .feature-item { flex-direction: column; text-align: center; gap: 1rem; } .feature-icon { width: 50px; height: 50px; font-size: 1.25rem; margin: 0 auto; } .feature-title { font-size: 1rem; } .feature-description { font-size: 0.9rem; } } @media (max-width: 480px) { .about-section { padding: 2rem 0; } .about-card { margin: 0 0.5rem; padding: 1.5rem 1rem; } .about-description { font-size: 0.9rem; } .feature-item { gap: 0.75rem; } .feature-icon { width: 45px; height: 45px; font-size: 1.1rem; } } /* Stats Section Responsive */ @media (max-width: 768px) { .stats-section { padding: 3rem 0; } .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; margin: 0 1rem; } .stat-item { padding: 1.5rem 1rem; } .stat-number { font-size: 2.5rem; margin-bottom: 0.5rem; } .stat-label { font-size: 1rem; } } @media (max-width: 480px) { .stats-section { padding: 2rem 0; } .stats-grid { grid-template-columns: 1fr; gap: 1rem; margin: 0 0.5rem; } .stat-item { padding: 1.25rem 1rem; } .stat-number { font-size: 2rem; } .stat-label { font-size: 0.9rem; } } /* Contact Section Responsive */ @media (max-width: 768px) { .contact-section { padding: 3rem 0; } .contact-container { grid-template-columns: 1fr; gap: 2rem; margin: 0 1rem; padding: 2rem 1.5rem; } .contact-info { gap: 1rem; } .contact-item { padding: 0.875rem; gap: 0.75rem; } .contact-icon { width: 45px; height: 45px; font-size: 1.1rem; } .contact-details h4 { font-size: 0.95rem; } .contact-details p { font-size: 0.9rem; } .form-group { margin-bottom: 1rem; } .form-input, .form-select, .form-textarea { padding: 0.875rem 1.25rem; font-size: 0.95rem; } .submit-btn { width: 100%; padding: 0.875rem 1.5rem; font-size: 0.95rem; } } @media (max-width: 480px) { .contact-section { padding: 2rem 0; } .contact-container { margin: 0 0.5rem; padding: 1.5rem 1rem; } .contact-item { padding: 0.75rem; gap: 0.5rem; } .contact-icon { width: 40px; height: 40px; font-size: 1rem; } .contact-details h4 { font-size: 0.9rem; } .contact-details p { font-size: 0.85rem; } .form-input, .form-select, .form-textarea { padding: 0.75rem 1rem; font-size: 0.9rem; } .submit-btn { padding: 0.75rem 1.25rem; font-size: 0.9rem; } } /* Section Titles and Subtitles Responsive */ @media (max-width: 768px) { .section-title { font-size: clamp(1.75rem, 4vw, 2.25rem); margin-bottom: 1rem; } .section-subtitle { font-size: clamp(1rem, 2.5vw, 1.125rem); margin-bottom: 2rem; } } @media (max-width: 480px) { .section-title { font-size: clamp(1.5rem, 3.5vw, 2rem); } .section-subtitle { font-size: clamp(0.9rem, 2vw, 1rem); margin-bottom: 1.5rem; } } /* Container Responsive */ @media (max-width: 768px) { .container { padding: 0 1rem; } } @media (max-width: 480px) { .container { padding: 0 0.75rem; } } /* Responsive container */ .container-responsive { width: 100%; margin-right: auto; margin-left: auto; padding-right: 1rem; padding-left: 1rem; } @media (min-width: 576px) { .container-responsive { max-width: 540px; } } @media (min-width: 768px) { .container-responsive { max-width: 720px; } } @media (min-width: 992px) { .container-responsive { max-width: 960px; } } @media (min-width: 1200px) { .container-responsive { max-width: 1140px; } } @media (min-width: 1400px) { .container-responsive { max-width: 1320px; } } /* Responsive spacing utilities */ .responsive-padding { padding: 1rem; } @media (min-width: 768px) { .responsive-padding { padding: 2rem; } } @media (min-width: 992px) { .responsive-padding { padding: 3rem; } } .responsive-margin { margin: 1rem; } @media (min-width: 768px) { .responsive-margin { margin: 2rem; } } @media (min-width: 992px) { .responsive-margin { margin: 3rem; } } /* Responsive text sizing */ .text-responsive-xs { font-size: 0.875rem; } .text-responsive-sm { font-size: 1rem; } .text-responsive-md { font-size: 1.125rem; } .text-responsive-lg { font-size: 1.25rem; } .text-responsive-xl { font-size: 1.5rem; } @media (min-width: 768px) { .text-responsive-xs { font-size: 1rem; } .text-responsive-sm { font-size: 1.125rem; } .text-responsive-md { font-size: 1.25rem; } .text-responsive-lg { font-size: 1.5rem; } .text-responsive-xl { font-size: 1.75rem; } } @media (min-width: 992px) { .text-responsive-xs { font-size: 1.125rem; } .text-responsive-sm { font-size: 1.25rem; } .text-responsive-md { font-size: 1.375rem; } .text-responsive-lg { font-size: 1.625rem; } .text-responsive-xl { font-size: 2rem; } } /* Responsive grid system */ .grid-responsive { display: grid; gap: 1rem; grid-template-columns: 1fr; } @media (min-width: 576px) { .grid-responsive { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } } @media (min-width: 768px) { .grid-responsive { grid-template-columns: repeat(3, 1fr); gap: 2rem; } } @media (min-width: 992px) { .grid-responsive { grid-template-columns: repeat(4, 1fr); gap: 2.5rem; } } /* Responsive flexbox utilities */ .flex-responsive { display: flex; flex-direction: column; gap: 1rem; } @media (min-width: 768px) { .flex-responsive { flex-direction: row; gap: 2rem; } } .flex-responsive-reverse { display: flex; flex-direction: column-reverse; gap: 1rem; } @media (min-width: 768px) { .flex-responsive-reverse { flex-direction: row; gap: 2rem; } } /* Responsive visibility classes */ .hide-xs { display: none; } @media (min-width: 576px) { .hide-xs { display: block; } .hide-sm { display: none; } } @media (min-width: 768px) { .hide-sm { display: block; } .hide-md { display: none; } } @media (min-width: 992px) { .hide-md { display: block; } .hide-lg { display: none; } } @media (min-width: 1200px) { .hide-lg { display: block; } .hide-xl { display: none; } } /* Responsive image handling */ .img-responsive { max-width: 100%; height: auto; display: block; } .img-responsive-fluid { width: 100%; height: auto; } /* Responsive table handling */ .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } .table-responsive table { min-width: 600px; } /* Responsive navigation */ .nav-responsive { display: flex; flex-direction: column; gap: 0.5rem; } @media (min-width: 768px) { .nav-responsive { flex-direction: row; gap: 2rem; } } /* Responsive card layouts */ .card-responsive { display: flex; flex-direction: column; gap: 1rem; } @media (min-width: 768px) { .card-responsive { flex-direction: row; gap: 2rem; } } /* Responsive sidebar */ .sidebar-responsive { width: 100%; margin-bottom: 2rem; } @media (min-width: 992px) { .sidebar-responsive { width: 300px; margin-bottom: 0; } } /* Responsive modal */ .modal-responsive { margin: 1rem; max-width: calc(100vw - 2rem); } @media (min-width: 576px) { .modal-responsive { margin: 1.75rem auto; max-width: 500px; } } @media (min-width: 768px) { .modal-responsive { margin: 3.5rem auto; max-width: 600px; } } /* Responsive form layouts */ .form-responsive { display: grid; gap: 1rem; grid-template-columns: 1fr; } @media (min-width: 768px) { .form-responsive { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } } @media (min-width: 992px) { .form-responsive { grid-template-columns: repeat(3, 1fr); gap: 2rem; } } /* Responsive button groups */ .btn-group-responsive { display: flex; flex-direction: column; gap: 0.5rem; } @media (min-width: 576px) { .btn-group-responsive { flex-direction: row; gap: 1rem; } } /* Responsive list layouts */ .list-responsive { display: grid; gap: 1rem; grid-template-columns: 1fr; } @media (min-width: 576px) { .list-responsive { grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } } @media (min-width: 768px) { .list-responsive { grid-template-columns: repeat(3, 1fr); gap: 2rem; } } /* Responsive spacing scale */ .space-responsive-1 { margin: 0.25rem; } .space-responsive-2 { margin: 0.5rem; } .space-responsive-3 { margin: 1rem; } .space-responsive-4 { margin: 1.5rem; } .space-responsive-5 { margin: 3rem; } @media (min-width: 768px) { .space-responsive-1 { margin: 0.5rem; } .space-responsive-2 { margin: 1rem; } .space-responsive-3 { margin: 1.5rem; } .space-responsive-4 { margin: 2rem; } .space-responsive-5 { margin: 4rem; } } @media (min-width: 992px) { .space-responsive-1 { margin: 0.75rem; } .space-responsive-2 { margin: 1.5rem; } .space-responsive-3 { margin: 2rem; } .space-responsive-4 { margin: 3rem; } .space-responsive-5 { margin: 5rem; } } /* Responsive border radius */ .rounded-responsive { border-radius: 0.5rem; } @media (min-width: 768px) { .rounded-responsive { border-radius: 1rem; } } @media (min-width: 992px) { .rounded-responsive { border-radius: 1.5rem; } } /* Responsive shadows */ .shadow-responsive { box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); } @media (min-width: 768px) { .shadow-responsive { box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); } } @media (min-width: 992px) { .shadow-responsive { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); } } /* Responsive animations */ .animate-responsive { transition: all 0.3s ease; } @media (prefers-reduced-motion: reduce) { .animate-responsive { transition: none; } } /* Responsive focus states */ .focus-responsive:focus { outline: 2px solid #10b981; outline-offset: 2px; } @media (min-width: 768px) { .focus-responsive:focus { outline-offset: 4px; } } /* Responsive hover effects */ .hover-responsive:hover { transform: translateY(-2px); } @media (max-width: 767px) { .hover-responsive:hover { transform: none; } } /* Print styles */ @media print { .no-print { display: none !important; } .print-only { display: block !important; } .container-responsive { max-width: none !important; margin: 0 !important; padding: 0 !important; } } /* High contrast mode support */ @media (prefers-contrast: high) { .focus-responsive:focus { outline: 3px solid #000000; outline-offset: 2px; } .shadow-responsive { box-shadow: 0 0 0 2px #000000; } } /* Reduced motion support */ @media (prefers-reduced-motion: reduce) { .animate-responsive, .hover-responsive { transition: none !important; transform: none !important; } } /* ===== ADDITIONAL MOBILE OPTIMIZATIONS ===== */ /* Touch-friendly button sizes */ @media (max-width: 768px) { .btn, .submit-btn, .form-input, .form-select, .form-textarea { min-height: 44px; /* iOS recommended minimum touch target */ } .contact-item { min-height: 60px; /* Ensure touch-friendly contact items */ } } /* Landscape mobile optimization */ @media (max-width: 768px) and (orientation: landscape) { .hero-section { min-height: 60vh; padding: 1rem 0; } .hero-title { font-size: clamp(2rem, 4vw, 2.5rem); } .hero-subtitle { font-size: clamp(0.875rem, 2vw, 1rem); margin-bottom: 1rem; } } /* High DPI display optimization */ @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { .floating-shape { border: 0.5px solid rgba(255, 255, 255, 0.1); } } /* Dark mode support for mobile */ @media (prefers-color-scheme: dark) { .hero-section { background: linear-gradient(135deg, #059669 0%, #047857 100%); } .contact-container { background: #1f2937; color: #f9fafb; } .form-input, .form-select, .form-textarea { background: #374151; border-color: #4b5563; color: #f9fafb; } } /* ===== TOUCH DEVICE OPTIMIZATIONS ===== */ .touch-device .floating-shape { animation-duration: 8s; /* Slower animations for mobile */ } .touch-device .feature-item:hover, .touch-device .contact-item:hover { transform: none; /* Disable hover effects on touch devices */ } .touch-device .btn:hover, .touch-device .submit-btn:hover { transform: none; } /* ===== FORM ERROR STATES ===== */ .form-input.error, .form-select.error, .form-textarea.error { border-color: #ef4444; box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1); } .form-input.error:focus, .form-select.error:focus, .form-textarea.error:focus { border-color: #ef4444; box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2); } /* ===== MOBILE NAVIGATION OPTIMIZATIONS ===== */ @media (max-width: 768px) { /* Ensure proper spacing for mobile navigation */ .hero-section { padding-top: 80px; /* Account for fixed header */ } /* Optimize button spacing on mobile */ .btn + .btn { margin-top: 0.5rem; } /* Improve form layout on mobile */ .form-group + .form-group { margin-top: 1rem; } } /* ===== TABLET OPTIMIZATIONS ===== */ @media (min-width: 769px) and (max-width: 1024px) { .hero-section { min-height: 90vh; } .hero-title { font-size: clamp(3rem, 6vw, 4rem); } .hero-subtitle { font-size: clamp(1.125rem, 2.5vw, 1.375rem); } .contact-container { grid-template-columns: 1fr; gap: 2.5rem; } .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 2rem; } } /* ===== LARGE SCREEN OPTIMIZATIONS ===== */ @media (min-width: 1200px) { .hero-section { min-height: 100vh; } .hero-content { max-width: 1400px; } .container { max-width: 1400px; } .about-features { grid-template-columns: repeat(3, 1fr); gap: 3rem; } .stats-grid { grid-template-columns: repeat(4, 1fr); gap: 4rem; } } /* ===== ACCESSIBILITY IMPROVEMENTS ===== */ @media (prefers-reduced-motion: reduce) { .floating-shape, .feature-item, .contact-item, .btn, .submit-btn { animation: none !important; transition: none !important; } } /* ===== HIGH CONTRAST MODE ===== */ @media (prefers-contrast: high) { .hero-section { background: #000000; } .btn { border: 2px solid #ffffff; } .contact-container { border: 2px solid #000000; } .form-input, .form-select, .form-textarea { border: 2px solid #000000; } } /* ===== PRINT OPTIMIZATIONS ===== */ @media print { .hero-section { background: #ffffff !important; color: #000000 !important; min-height: auto; padding: 2rem 0; } .hero-title { color: #000000 !important; -webkit-text-fill-color: #000000 !important; } .hero-subtitle { color: #333333 !important; } .btn { display: none !important; } .floating-elements { display: none !important; } .section { break-inside: avoid; page-break-inside: avoid; } } /* ===== PERFORMANCE OPTIMIZATIONS ===== */ @media (max-width: 768px) { /* Reduce animations on mobile for better performance */ .floating-shape { animation-duration: 10s; } /* Optimize shadows for mobile */ .shadow-responsive { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } /* Reduce backdrop-filter usage on mobile */ .stat-item { backdrop-filter: none; background: rgba(255, 255, 255, 0.15); } } /* ===== LOADING STATES ===== */ .loading { opacity: 0.6; pointer-events: none; } .loading::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid #f3f3f3; border-top: 2px solid var(--primary-color); border-radius: 50%; animation: spin 1s linear infinite; } /* ===== RESPONSIVE TYPOGRAPHY SCALE ===== */ .text-scale-xs { font-size: 0.75rem; } .text-scale-sm { font-size: 0.875rem; } .text-scale-base { font-size: 1rem; } .text-scale-lg { font-size: 1.125rem; } .text-scale-xl { font-size: 1.25rem; } .text-scale-2xl { font-size: 1.5rem; } .text-scale-3xl { font-size: 1.875rem; } .text-scale-4xl { font-size: 2.25rem; } @media (min-width: 768px) { .text-scale-xs { font-size: 0.875rem; } .text-scale-sm { font-size: 1rem; } .text-scale-base { font-size: 1.125rem; } .text-scale-lg { font-size: 1.25rem; } .text-scale-xl { font-size: 1.375rem; } .text-scale-2xl { font-size: 1.625rem; } .text-scale-3xl { font-size: 2rem; } .text-scale-4xl { font-size: 2.5rem; } } @media (min-width: 1024px) { .text-scale-xs { font-size: 1rem; } .text-scale-sm { font-size: 1.125rem; } .text-scale-base { font-size: 1.25rem; } .text-scale-lg { font-size: 1.375rem; } .text-scale-xl { font-size: 1.5rem; } .text-scale-2xl { font-size: 1.75rem; } .text-scale-3xl { font-size: 2.25rem; } .text-scale-4xl { font-size: 3rem; } } /* ===== RESPONSIVE UTILITY CLASSES ===== */ .text-responsive-xs { font-size: clamp(0.75rem, 2vw, 0.875rem); } .text-responsive-sm { font-size: clamp(0.875rem, 2.5vw, 1rem); } .text-responsive-md { font-size: clamp(1rem, 3vw, 1.125rem); } .text-responsive-lg { font-size: clamp(1.125rem, 3.5vw, 1.25rem); } .text-responsive-xl { font-size: clamp(1.25rem, 4vw, 1.5rem); } .grid-responsive { display: grid; gap: 1.5rem; } @media (max-width: 768px) { .grid-responsive { grid-template-columns: 1fr; gap: 1rem; } } .card-responsive { background: var(--bg-white); border-radius: 16px; padding: 1.5rem; box-shadow: var(--shadow-md); transition: all 0.3s ease; } .rounded-responsive { border-radius: 16px; } .shadow-responsive { box-shadow: var(--shadow-md); } .hover-responsive:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } .focus-responsive:focus { outline: 2px solid var(--primary-color); outline-offset: 2px; } .form-responsive { display: flex; flex-direction: column; gap: 1.5rem; } .btn-group-responsive { display: flex; gap: 1rem; flex-wrap: wrap; justify-content: center; } @media (max-width: 768px) { .btn-group-responsive { flex-direction: column; align-items: center; gap: 1rem; } } /* ===== MOBILE SECTION OPTIMIZATIONS ===== */ @media (max-width: 768px) { .section { padding: 3rem 0; } .container { padding: 0 1rem; } .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 1rem; } .stat-item { padding: 1.5rem 1rem; text-align: center; } .stat-number { font-size: 2rem; font-weight: 700; color: var(--primary-color); margin-bottom: 0.5rem; } .stat-label { font-size: 0.875rem; color: var(--text-light); } .contact-container { flex-direction: column; gap: 2rem; } .contact-info { display: grid; grid-template-columns: 1fr; gap: 1rem; } .contact-item { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: var(--bg-white); border-radius: 12px; box-shadow: var(--shadow-sm); } .contact-icon { width: 40px; height: 40px; background: var(--primary-color); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 1.25rem; } .contact-details h4 { font-size: 0.875rem; font-weight: 600; color: var(--text-dark); margin-bottom: 0.25rem; } .contact-details p { font-size: 0.75rem; color: var(--text-light); } .form-group { margin-bottom: 1rem; } .form-input, .form-select, .form-textarea { width: 100%; padding: 0.75rem; border: 1px solid #e5e7eb; border-radius: 8px; font-size: 0.875rem; transition: border-color 0.3s ease; } .form-input:focus, .form-select:focus, .form-textarea:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); } .submit-btn { width: 100%; padding: 0.875rem; background: var(--primary-color); color: white; border: none; border-radius: 8px; font-weight: 600; font-size: 0.875rem; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; justify-content: center; gap: 0.5rem; } .submit-btn:hover { background: var(--primary-dark); transform: translateY(-1px); } }