victor-ai/assets/css/styles.css
2025-06-08 23:10:23 +05:30

813 lines
19 KiB
CSS

/* Common Styles for AI Services Hub */
/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap');
/* Reset and base styles */
* {
box-sizing: border-box;
}
body {
font-family: 'Plus Jakarta Sans', sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
margin: 0;
padding: 0;
}
/* Layout utilities */
.container {
max-width: 7xl;
margin: 0 auto;
padding: 0 1rem;
}
@media (min-width: 640px) {
.container {
padding: 0 1.5rem;
}
}
@media (min-width: 1024px) {
.container {
padding: 0 2rem;
}
}
/* Component styles */
.glass-effect {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
}
.card-hover {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.card-hover:hover {
transform: translateY(-4px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
}
.service-card {
background: white;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border: 1px solid #e5e7eb;
}
.service-card:hover {
transform: translateY(-8px);
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
}
/* Custom scrollbar */
.custom-scrollbar::-webkit-scrollbar {
width: 4px;
}
.custom-scrollbar::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.1);
border-radius: 2px;
}
.custom-scrollbar::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.3);
border-radius: 2px;
}
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
background: rgba(255, 255, 255, 0.5);
}
/* Loading skeleton */
.loading-skeleton {
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
background-size: 200% 100%;
animation: loading 1.5s infinite;
}
@keyframes loading {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
/* Animations */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes slideUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeLine {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
}
@keyframes pulse-glow {
0%, 100% { box-shadow: 0 0 20px rgba(102, 126, 234, 0.4); }
50% { box-shadow: 0 0 30px rgba(102, 126, 234, 0.8); }
}
@keyframes pulse {
0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7); }
70% { transform: scale(1); box-shadow: 0 0 0 10px rgba(16, 185, 129, 0); }
100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}
.animate-pulse-soft {
animation: pulse-soft 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse-soft {
0%, 100% { opacity: 1; }
50% { opacity: 0.7; }
}
.fade-in {
animation: fadeIn 0.4s ease-out;
}
.animate-slide-up {
animation: slideUp 0.4s ease-out;
}
.animate-fade {
animation: fadeLine 0.6s ease-in;
}
.float-animation {
animation: float 3s ease-in-out infinite;
}
.pulse-glow {
animation: pulse-glow 2s ease-in-out infinite;
}
/* Status indicator */
.status-indicator {
position: relative;
}
.status-indicator::before {
content: '';
position: absolute;
top: -2px;
right: -2px;
width: 12px;
height: 12px;
background: #10b981;
border-radius: 50%;
border: 2px solid white;
animation: pulse 2s infinite;
}
/* CONSOLIDATED MOBILE STYLES - REPLACE ALL EXISTING MOBILE CSS */
/* Mobile responsive utilities */
@media (max-width: 768px) {
.mobile-stack {
flex-direction: column;
}
.mobile-full {
width: 100%;
}
.mobile-stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.5rem;
}
.service-grid {
grid-template-columns: 1fr;
gap: 1.5rem;
}
/* Header Section */
.text-center.mb-8 h1 {
font-size: 2rem !important;
line-height: 1.2;
margin-bottom: 1rem;
}
/* Enhanced Search Command Center */
.bg-white.rounded-2xl.p-6.mb-8 {
padding: 1rem !important;
margin-bottom: 1.5rem !important;
}
/* Trade AI Command Header */
.flex.items-center.gap-3.mb-4 h2 {
font-size: 1.125rem !important;
}
/* Search Input */
#query {
font-size: 16px !important;
padding: 0.875rem !important;
}
/* Search Button */
.bg-blue-600.hover\:bg-blue-700 {
padding: 0.875rem 1.5rem !important;
min-width: auto !important;
}
/* Search button inline with text input - only lens icon */
.flex.flex-col.sm\:flex-row.gap-3.mb-4 {
flex-direction: row !important;
gap: 0.75rem !important;
align-items: stretch !important;
}
.flex.flex-col.sm\:flex-row.gap-3.mb-4 .flex-1 {
flex: 1 !important;
}
.flex.flex-col.sm\:flex-row.gap-3.mb-4 button {
width: auto !important;
min-width: 50px !important;
padding: 0.875rem 1rem !important;
flex-shrink: 0 !important;
}
/* Hide search button text on mobile, show only icon */
.flex.flex-col.sm\:flex-row.gap-3.mb-4 button span {
display: none !important;
}
.flex.flex-col.sm\:flex-row.gap-3.mb-4 button i {
margin-right: 0 !important;
font-size: 1rem !important;
}
/* Quick searches in single row with horizontal scroll */
.flex.flex-wrap.gap-2 {
flex-direction: row !important;
flex-wrap: nowrap !important;
overflow-x: auto !important;
overflow-y: hidden !important;
align-items: center !important;
padding: 0.5rem 0 !important;
margin-bottom: 0.75rem !important;
-webkit-overflow-scrolling: touch !important;
scrollbar-width: none !important;
-ms-overflow-style: none !important;
gap: 0.5rem !important;
position: relative !important;
}
/* Hide scrollbar on mobile */
.flex.flex-wrap.gap-2::-webkit-scrollbar {
display: none !important;
}
/* Quick searches label */
.flex.flex-wrap.gap-2 span.text-sm.text-gray-500 {
flex-shrink: 0 !important;
white-space: nowrap !important;
margin-right: 0.5rem !important;
font-size: 0.875rem !important;
color: #6b7280 !important;
align-self: center !important;
}
/* Quick search buttons mobile */
.flex.flex-wrap.gap-2 button {
flex-shrink: 0 !important;
white-space: nowrap !important;
font-size: 0.75rem !important;
padding: 0.5rem 0.75rem !important;
min-width: fit-content !important;
width: auto !important;
}
/* Advanced Filters Section */
.border-t.border-gray-200.pt-4 {
padding-top: 1rem !important;
}
/* Advanced Filters Grid */
.grid.grid-cols-1.md\:grid-cols-3.gap-4 {
grid-template-columns: 1fr !important;
gap: 0.75rem !important;
}
/* Form Labels */
.block.text-sm.font-medium.text-gray-700.mb-2 {
margin-bottom: 0.5rem !important;
font-size: 0.875rem !important;
}
/* Form Inputs and Selects */
.w-full.px-3.py-2 {
padding: 0.75rem !important;
font-size: 16px !important;
}
/* Advanced Search Buttons - Mobile Override */
.flex.flex-wrap.gap-3 {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
gap: 0.75rem !important;
}
/* Hide Reset button on mobile */
.flex.flex-wrap.gap-3 button:nth-child(3) {
display: none !important;
}
/* Style remaining buttons */
.flex.flex-wrap.gap-3 button:nth-child(1),
.flex.flex-wrap.gap-3 button:nth-child(2) {
width: 100% !important;
justify-content: center !important;
padding: 0.75rem 0.5rem !important;
font-size: 0.875rem !important;
}
/* Main Content Grid - Stack on mobile */
.grid.grid-cols-1.lg\:grid-cols-3.gap-6 {
grid-template-columns: 1fr !important;
gap: 1rem !important;
}
/* Results Section */
.lg\:col-span-2 {
grid-column: span 1 !important;
}
/* Search Results Container */
#resultsSection .bg-white.rounded-2xl {
padding: 1rem !important;
margin-bottom: 1rem !important;
}
/* Search Results Header */
#resultsSection .flex.items-center.justify-between {
flex-direction: column !important;
align-items: flex-start !important;
gap: 1rem !important;
margin-bottom: 1rem !important;
}
#resultsSection .flex.items-center.justify-between h3 {
font-size: 1.25rem !important;
margin-bottom: 0 !important;
}
/* Results Count and Controls */
#resultsSection .flex.items-center.gap-2 {
width: 100% !important;
justify-content: space-between !important;
flex-wrap: wrap !important;
gap: 0.5rem !important;
}
#resultsCount {
font-size: 0.875rem !important;
color: #059669 !important;
background: #ecfdf5 !important;
padding: 0.25rem 0.5rem !important;
border-radius: 0.375rem !important;
border: 1px solid #a7f3d0 !important;
font-weight: 500 !important;
order: 1 !important;
width: 100% !important;
}
/* Sort Dropdown */
#sortBy {
font-size: 0.875rem !important;
padding: 0.5rem !important;
order: 2 !important;
flex: 1 !important;
min-width: 120px !important;
background: white !important;
border: 1px solid #d1d5db !important;
border-radius: 0.5rem !important;
font-weight: 500 !important;
}
#sortBy:focus {
border-color: #3b82f6 !important;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
/* Export Button */
.bg-gray-100.hover\:bg-gray-200 {
font-size: 0.875rem !important;
padding: 0.5rem 0.75rem !important;
order: 3 !important;
flex-shrink: 0 !important;
background: #f3f4f6 !important;
border: 1px solid #d1d5db !important;
border-radius: 0.5rem !important;
font-weight: 500 !important;
transition: all 0.15s ease !important;
}
/* ===== SEARCH RESULTS MOBILE STYLING ===== */
/* Main search results container */
#results {
grid-template-columns: 1fr !important;
gap: 1rem !important;
}
/* Individual result cards - SIMPLE DESKTOP-LIKE LAYOUT */
#results > div {
border: 1px solid #e5e7eb !important;
border-radius: 0.5rem !important;
padding: 1rem !important;
margin-bottom: 0.75rem !important;
background: #ffffff !important;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06) !important;
transition: all 0.2s ease !important;
}
/* Company header with flag and name - KEEP DESKTOP LAYOUT */
#results .flex.items-center.gap-3 {
gap: 0.75rem !important;
margin-bottom: 0.75rem !important;
flex-direction: row !important;
align-items: center !important;
}
/* Flag element */
#results .w-8.h-6 {
flex-shrink: 0 !important;
width: 2rem !important;
height: 1.5rem !important;
}
/* Company name */
#results .text-base.font-bold,
#results .text-lg.font-bold {
flex: 1 !important;
font-size: 1rem !important;
line-height: 1.3 !important;
word-break: break-word !important;
color: #1f2937 !important;
font-weight: 600 !important;
}
/* Contact information section - KEEP DESKTOP STRUCTURE */
#results .space-y-2 {
margin-top: 0.75rem !important;
display: flex !important;
flex-direction: column !important;
gap: 0.5rem !important;
}
/* Individual contact items - CLEAN ROWS LIKE DESKTOP */
#results .flex.items-center.gap-2,
#results .flex.items-start.gap-2 {
margin-bottom: 0 !important;
align-items: center !important;
padding: 0.25rem 0 !important;
background: transparent !important;
border: none !important;
border-radius: 0 !important;
box-shadow: none !important;
gap: 0.75rem !important;
}
/* Icons - ensure they display properly */
#results .fas,
#results .fa {
width: 1rem !important;
text-align: center !important;
flex-shrink: 0 !important;
margin-right: 0.5rem !important;
font-size: 0.875rem !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
}
/* Icon colors - same as desktop */
#results .fa-phone { color: #059669 !important; }
#results .fa-envelope { color: #2563eb !important; }
#results .fa-globe { color: #7c3aed !important; }
#results .fa-map-marker-alt { color: #dc2626 !important; }
/* Contact text */
#results .flex.items-center.gap-2 span,
#results .flex.items-center.gap-2 a,
#results .flex.items-start.gap-2 span {
word-break: break-word !important;
line-height: 1.3 !important;
font-size: 0.875rem !important;
flex: 1 !important;
margin: 0 !important;
}
/* Text colors - same as desktop */
#results .text-green-600 { color: #059669 !important; }
#results .text-blue-600 { color: #2563eb !important; }
#results .text-purple-600 { color: #7c3aed !important; }
#results .text-gray-600 { color: #4b5563 !important; }
#results .text-blue-700 { color: #1d4ed8 !important; }
/* Product tags - same as desktop structure */
#results .flex.flex-wrap.gap-1 {
margin-top: 0.75rem !important;
gap: 0.375rem !important;
padding-top: 0.75rem !important;
border-top: 1px solid #f3f4f6 !important;
}
/* Product tag styling - same as desktop */
#results .bg-blue-50,
#results .bg-blue-100 {
font-size: 0.75rem !important;
padding: 0.25rem 0.5rem !important;
background: linear-gradient(135deg, #dbeafe, #bfdbfe) !important;
color: #1e40af !important;
border: 1px solid #93c5fd !important;
border-radius: 9999px !important;
display: inline-block !important;
margin: 0.25rem 0.25rem 0.25rem 0 !important;
font-weight: 500 !important;
}
/* Hover effects - same as desktop */
#results > div:hover {
transform: translateY(-2px) !important;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
}
/* Remove hover effects on contact items */
#results .flex.items-center.gap-2:hover,
#results .flex.items-start.gap-2:hover {
background: transparent !important;
border: none !important;
transform: none !important;
}
/* Links - ensure they're touch-friendly */
#results a {
min-height: 32px !important;
display: inline-flex !important;
align-items: center !important;
text-decoration: none !important;
}
#results a:hover {
opacity: 0.8 !important;
}
/* CRUD Wrench Button */
.fixed.bottom-6.right-6 {
bottom: 1rem !important;
right: 1rem !important;
}
.w-14.h-14 {
width: 3rem !important;
height: 3rem !important;
}
/* CRUD Modal Mobile Adjustments */
.max-w-4xl {
max-width: calc(100vw - 2rem) !important;
margin: 1rem !important;
}
.max-h-\[90vh\] {
max-height: calc(100vh - 2rem) !important;
}
/* CRUD Modal Content */
.p-6 {
padding: 1rem !important;
}
/* CRUD Form Grids */
.grid.grid-cols-1.md\:grid-cols-2.gap-4 {
grid-template-columns: 1fr !important;
gap: 0.75rem !important;
}
/* Toast Notifications */
.fixed.top-4.right-4 {
top: 1rem !important;
right: 1rem !important;
left: 1rem !important;
}
.max-w-sm {
max-width: none !important;
}
}
/* Very small screens */
@media (max-width: 480px) {
#results > div {
padding: 0.875rem !important;
}
#results .text-base.font-bold,
#results .text-lg.font-bold {
font-size: 0.9375rem !important;
}
#results .flex.items-center.gap-2 span,
#results .flex.items-center.gap-2 a {
font-size: 0.8125rem !important;
}
}
/* Tablet and larger screens */
@media (min-width: 769px) and (max-width: 1024px) {
.service-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (min-width: 1025px) {
.service-grid {
grid-template-columns: repeat(2, 1fr);
}
}
/* IMMEDIATE MOBILE FIXES - Add to end of styles.css */
@media (max-width: 768px) {
/* Fix search button staying inline with input */
.flex.flex-col.sm\:flex-row.gap-3.mb-4 {
flex-direction: row !important;
align-items: stretch !important;
gap: 0.5rem !important;
}
.flex.flex-col.sm\:flex-row.gap-3.mb-4 .flex-1 {
flex: 1 !important;
}
.flex.flex-col.sm\:flex-row.gap-3.mb-4 button {
width: auto !important;
min-width: 50px !important;
flex-shrink: 0 !important;
padding: 0.875rem 1rem !important;
}
/* Hide button text on mobile, show only icon */
.flex.flex-col.sm\:flex-row.gap-3.mb-4 button span {
display: none !important;
}
/* Fix advanced search buttons */
.flex.flex-wrap.gap-3 {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
gap: 0.5rem !important;
}
/* Hide reset button on mobile for cleaner look */
.flex.flex-wrap.gap-3 button:nth-child(3) {
grid-column: span 2 !important;
font-size: 0.8rem !important;
}
/* Fix modal sizing */
.max-w-4xl, .max-w-2xl {
max-width: calc(100vw - 1rem) !important;
margin: 0.5rem !important;
}
/* Improve touch targets */
button, .cursor-pointer {
min-height: 44px !important;
}
}
/* Very small screens (phones in portrait) */
@media (max-width: 480px) {
.px-4 {
padding-left: 0.75rem !important;
padding-right: 0.75rem !important;
}
.text-3xl, .text-4xl {
font-size: 1.5rem !important;
line-height: 1.3 !important;
}
/* Stack stats in 2x2 grid instead of 4x1 */
.grid.grid-cols-2.lg\:grid-cols-4 {
grid-template-columns: repeat(2, 1fr) !important;
gap: 0.5rem !important;
}
}
/* Searchable Country Dropdown Styles - Add to end of styles.css */
/* Input with search icon */
.relative input[id$="_input"] {
padding-right: 2.5rem !important;
}
/* Search icon positioning */
.relative .absolute.right-3 {
pointer-events: none;
z-index: 5;
}
/* Dropdown menu */
.relative .absolute.z-20 {
border: 1px solid #d1d5db;
border-radius: 0.5rem;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
background: white;
max-height: 12rem;
overflow-y: auto;
margin-top: 0.25rem;
}
/* Dropdown options */
.relative .absolute.z-20 > div {
padding: 0.75rem;
cursor: pointer;
font-size: 0.875rem;
border-bottom: 1px solid #f3f4f6;
transition: all 0.15s ease;
}
.relative .absolute.z-20 > div:last-child {
border-bottom: none;
}
.relative .absolute.z-20 > div:hover {
background-color: #eff6ff;
color: #1d4ed8;
}
/* Highlighted option (keyboard navigation) */
.relative .absolute.z-20 > div.bg-blue-100 {
background-color: #dbeafe !important;
color: #1e40af !important;
}
/* Custom scrollbar for dropdown */
.relative .absolute.z-20::-webkit-scrollbar {
width: 6px;
}
.relative .absolute.z-20::-webkit-scrollbar-track {
background: #f1f5f9;
border-radius: 3px;
}
.relative .absolute.z-20::-webkit-scrollbar-thumb {
background: #cbd5e1;
border-radius: 3px;
}
.relative .absolute.z-20::-webkit-scrollbar-thumb:hover {
background: #94a3b8;
}
/* Mobile improvements */
@media (max-width: 768px) {
.relative input[id$="_input"] {
font-size: 16px !important; /* Prevents zoom on iOS */
padding: 0.875rem 2.5rem 0.875rem 0.75rem !important;
}
.relative .absolute.z-20 > div {
padding: 1rem 0.75rem;
min-height: 44px; /* Better touch targets */
display: flex;
align-items: center;
}
.relative .absolute.z-20 {
max-height: 10rem; /* Smaller on mobile */
}
}
/* Focus styles for accessibility */
.relative input[id$="_input"]:focus {
outline: none !important;
border-color: #3b82f6 !important;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1) !important;
}
/* Animation for icon change */
.relative .absolute.right-3 i {
transition: all 0.2s ease;
}