/* * AGC AI Document Search Interface * Custom CSS Styles */ /* Custom Properties / Variables */ :root { /* Color Palette - Based on AGC/Government Standards */ --color-primary: #1e40af; /* Government Blue */ --color-primary-light: #3b82f6; --color-primary-dark: #1e3a8a; --color-secondary: #d97706; /* Gold/Amber */ --color-secondary-light: #f59e0b; --color-secondary-dark: #b45309; --color-success: #059669; --color-warning: #d97706; --color-error: #dc2626; --color-gray-50: #f9fafb; --color-gray-100: #f3f4f6; --color-gray-200: #e5e7eb; --color-gray-300: #d1d5db; --color-gray-400: #9ca3af; --color-gray-500: #6b7280; --color-gray-600: #4b5563; --color-gray-700: #374151; --color-gray-800: #1f2937; --color-gray-900: #111827; /* Enhanced Color Palette for Government Theme */ --color-navy-50: #f0f5fa; --color-navy-100: #dbe6f3; --color-navy-200: #b9cee6; --color-navy-300: #8eaed3; --color-navy-400: #6085bb; --color-navy-500: #4065a2; --color-navy-600: #355088; --color-navy-700: #2c4272; --color-navy-800: #24365c; --color-navy-900: #1e2d4c; --color-gold-50: #fefaeb; --color-gold-100: #fdf1c7; --color-gold-200: #fbe28a; --color-gold-300: #f8cb47; --color-gold-400: #f6b412; --color-gold-500: #e29807; --color-gold-600: #c07805; --color-gold-700: #965709; --color-gold-800: #7a4010; --color-gold-900: #653310; /* Typography */ --font-family-sans: "Inter", system-ui, -apple-system, sans-serif; --font-family-mono: "Fira Code", monospace; --font-size-xs: 0.75rem; /* 12px */ --font-size-sm: 0.875rem; /* 14px */ --font-size-base: 1rem; /* 16px */ --font-size-lg: 1.125rem; /* 18px */ --font-size-xl: 1.25rem; /* 20px */ --font-size-2xl: 1.5rem; /* 24px */ --font-size-3xl: 1.875rem; /* 30px */ --font-size-4xl: 2.25rem; /* 36px */ --line-height-tight: 1.25; --line-height-normal: 1.5; --line-height-relaxed: 1.75; /* Spacing */ --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; --spacing-3xl: 4rem; --spacing-4xl: 6rem; /* Border Radius */ --border-radius-sm: 0.125rem; --border-radius-md: 0.25rem; --border-radius-lg: 0.5rem; --border-radius-xl: 0.75rem; --border-radius-2xl: 1rem; --border-radius-full: 9999px; /* Transitions */ --transition-fast: 150ms ease; --transition-normal: 250ms ease; --transition-slow: 350ms ease; --transition-bounce: 300ms cubic-bezier(0.25, 0.46, 0.45, 0.94); --transition-in-out: 300ms cubic-bezier(0.4, 0, 0.2, 1); /* 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-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06); --shadow-outline: 0 0 0 3px rgba(59, 130, 246, 0.5); --shadow-soft: 0 4px 20px rgba(0, 0, 0, 0.08); } /* Base Styles */ html { scroll-behavior: smooth; font-size: 16px; /* Base font size */ } body { font-family: var(--font-family-sans); line-height: var(--line-height-normal); color: var(--color-gray-900); background-color: var(--color-gray-50); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Typography Enhancements */ h1, h2, h3, h4, h5, h6 { line-height: var(--line-height-tight); font-weight: 600; margin-bottom: 0.5em; color: var(--color-navy-800); } h1 { font-size: var(--font-size-3xl); font-weight: 700; } h2 { font-size: var(--font-size-2xl); } h3 { font-size: var(--font-size-xl); } h4 { font-size: var(--font-size-lg); } p { margin-bottom: 1rem; } a { color: var(--color-primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--color-primary-light); } /* Custom Focus States */ :focus { outline: 2px solid var(--color-primary-light); outline-offset: 2px; } /* Enhanced focus style for interactive elements */ button:focus, input:focus, select:focus, textarea:focus { outline: none; box-shadow: var(--shadow-outline); } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--color-gray-100); } ::-webkit-scrollbar-thumb { background: var(--color-gray-400); border-radius: 4px; transition: background var(--transition-fast); } ::-webkit-scrollbar-thumb:hover { background: var(--color-gray-500); } /* Utilities */ .line-clamp-1 { display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; } .line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* Enhanced Custom Animations */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } @keyframes fadeInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideUp { from { transform: translateY(20px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } /* Animation Classes */ .animate-fade-in { animation: fadeIn var(--transition-normal); } .animate-fade-in-up { animation: fadeInUp var(--transition-normal); } .animate-fade-in-down { animation: fadeInDown var(--transition-normal); } .animate-fade-in-left { animation: fadeInLeft var(--transition-normal); } .animate-fade-in-right { animation: fadeInRight var(--transition-normal); } .animate-slide-up { animation: slideUp var(--transition-normal); } .animate-pulse { animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; } .animate-spin { animation: spin 1s linear infinite; } .animate-bounce { animation: bounce 1s ease infinite; } .animate-delay-100 { animation-delay: 100ms; } .animate-delay-200 { animation-delay: 200ms; } .animate-delay-300 { animation-delay: 300ms; } .animate-delay-500 { animation-delay: 500ms; } /* Enhanced Button Styles */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.5rem 1rem; font-weight: 500; border-radius: var(--border-radius-md); transition: all var(--transition-normal); cursor: pointer; border: none; line-height: 1.5; } .btn-primary { background-color: var(--color-primary); color: white; } .btn-primary:hover { background-color: var(--color-primary-dark); transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn-secondary { background-color: var(--color-secondary); color: white; } .btn-secondary:hover { background-color: var(--color-secondary-dark); transform: translateY(-1px); box-shadow: var(--shadow-md); } .btn-outline { background-color: transparent; border: 1px solid var(--color-gray-300); color: var(--color-gray-700); } .btn-outline:hover { border-color: var(--color-primary); color: var(--color-primary); background-color: var(--color-gray-50); } .btn-ghost { background-color: transparent; color: var(--color-gray-700); } .btn-ghost:hover { background-color: var(--color-gray-100); color: var(--color-gray-900); } .btn-sm { padding: 0.25rem 0.5rem; font-size: var(--font-size-sm); } .btn-lg { padding: 0.75rem 1.5rem; font-size: var(--font-size-lg); } .btn-icon { padding: 0.5rem; border-radius: var(--border-radius-full); } .btn:focus, .btn:active { outline: none; box-shadow: var(--shadow-outline); transform: scale(0.98); } .btn-disabled, .btn[disabled] { opacity: 0.5; cursor: not-allowed; transform: none !important; box-shadow: none !important; } /* Enhanced Card Styles */ .card { background-color: white; border-radius: var(--border-radius-lg); overflow: hidden; transition: transform var(--transition-normal), box-shadow var(--transition-normal); box-shadow: var(--shadow-sm); } .card-hover:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .card-interactive { cursor: pointer; } .card-header { padding: 1rem; border-bottom: 1px solid var(--color-gray-200); } .card-body { padding: 1rem; } .card-footer { padding: 1rem; border-top: 1px solid var(--color-gray-200); } /* Enhanced Form Controls */ .form-control { display: block; width: 100%; padding: 0.5rem 0.75rem; font-size: var(--font-size-base); line-height: 1.5; color: var(--color-gray-900); background-color: white; background-clip: padding-box; border: 1px solid var(--color-gray-300); border-radius: var(--border-radius-md); transition: border-color var(--transition-fast), box-shadow var(--transition-fast); } .form-control:focus { border-color: var(--color-primary-light); box-shadow: var(--shadow-outline); } .form-control::placeholder { color: var(--color-gray-400); } .form-control-sm { padding: 0.25rem 0.5rem; font-size: var(--font-size-sm); } .form-control-lg { padding: 0.75rem 1rem; font-size: var(--font-size-lg); } .form-label { display: block; margin-bottom: 0.5rem; font-weight: 500; color: var(--color-gray-700); } .form-group { margin-bottom: 1rem; } /* Custom Media Queries */ @media (max-width: 640px) { .container { padding-left: var(--spacing-md); padding-right: var(--spacing-md); } h1 { font-size: var(--font-size-2xl); } h2 { font-size: var(--font-size-xl); } } /* Dark Mode Support - For future implementation */ @media (prefers-color-scheme: dark) { :root { /* Dark mode variables would go here */ } } /* Badge Component */ .badge { display: inline-flex; align-items: center; padding: 0.25rem 0.5rem; font-size: var(--font-size-xs); font-weight: 500; line-height: 1; border-radius: var(--border-radius-full); text-transform: uppercase; } .badge-primary { background-color: var(--color-primary-light); color: white; } .badge-secondary { background-color: var(--color-secondary-light); color: white; } .badge-success { background-color: var(--color-success); color: white; } .badge-warning { background-color: var(--color-warning); color: white; } .badge-error { background-color: var(--color-error); color: white; } .badge-outline { background-color: transparent; border: 1px solid currentColor; } /* Document Card Styles - Enhanced */ .document-card { border: 1px solid var(--color-gray-200); border-radius: var(--border-radius-lg); padding: var(--spacing-md); transition: box-shadow var(--transition-normal), transform var(--transition-normal); background-color: white; position: relative; overflow: hidden; } .document-card::before { content: ""; position: absolute; top: 0; left: 0; width: 0; height: 3px; background-color: var(--color-primary); transition: width var(--transition-normal); } .document-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); } .document-card:hover::before { width: 100%; } /* Document Tag Styles - Enhanced */ .document-tag { display: inline-block; padding: 0.25rem 0.5rem; border-radius: var(--border-radius-md); font-size: var(--font-size-xs); font-weight: 500; margin-bottom: 0.5rem; letter-spacing: 0.025em; } .document-tag-lkk { background-color: var(--color-navy-100); color: var(--color-navy-800); } .document-tag-legal { background-color: #dcfce7; color: #166534; } .document-tag-criminal { background-color: #fee2e2; color: #b91c1c; } /* Chat Message Styles - Enhanced */ .chat-message { max-width: 75%; margin-bottom: 1rem; position: relative; } .chat-message-user { margin-left: auto; background-color: var(--color-primary-light); color: white; border-radius: 1.25rem 1.25rem 0.25rem 1.25rem; padding: 0.75rem 1rem; box-shadow: var(--shadow-sm); } .chat-message-bot { margin-right: auto; background-color: var(--color-navy-100); color: var(--color-navy-800); border-radius: 0.25rem 1.25rem 1.25rem 1.25rem; padding: 0.75rem 1rem; box-shadow: var(--shadow-sm); } /* Skeleton Loading States - Enhanced */ .skeleton { background: linear-gradient( 90deg, var(--color-gray-200) 25%, var(--color-gray-300) 37%, var(--color-gray-200) 63% ); background-size: 400% 100%; animation: skeleton-loading 1.4s ease infinite; border-radius: var(--border-radius-md); } .skeleton-text { height: 1rem; margin-bottom: 0.5rem; width: 100%; } .skeleton-text:last-child { width: 80%; } .skeleton-circle { height: 2.5rem; width: 2.5rem; border-radius: 50%; } .skeleton-square { height: 2.5rem; width: 2.5rem; } .skeleton-button { height: 2.5rem; width: 8rem; border-radius: var(--border-radius-md); } .skeleton-card { height: 12rem; width: 100%; border-radius: var(--border-radius-lg); } @keyframes skeleton-loading { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } } /* Enhanced Toast Notifications */ .toast-container { position: fixed; bottom: 1rem; right: 1rem; z-index: 50; display: flex; flex-direction: column; gap: 0.5rem; } .toast { background-color: var(--color-gray-800); color: white; padding: 0.75rem 1rem; border-radius: var(--border-radius-md); box-shadow: var(--shadow-lg); display: flex; align-items: center; gap: 0.5rem; max-width: 24rem; animation: fadeInUp var(--transition-normal); } .toast-success { background-color: var(--color-success); } .toast-warning { background-color: var(--color-warning); } .toast-error { background-color: var(--color-error); } .toast-info { background-color: var(--color-primary); } /* Print Styles */ @media print { header, footer, .no-print { display: none; } body { background-color: white; } .container { width: 100%; max-width: none; padding: 0; } a { text-decoration: none; color: var(--color-gray-900); } .card, .document-card { box-shadow: none; border: 1px solid var(--color-gray-300); } } /* Accessibility */ .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .skip-to-content { position: absolute; top: -40px; left: 0; background: var(--color-primary); color: white; padding: 8px; z-index: 100; transition: top 0.2s; } .skip-to-content:focus { top: 0; } /* Custom Components - Data Visualization */ .stat-card { background-color: white; padding: 1.5rem; border-radius: var(--border-radius-lg); box-shadow: var(--shadow-sm); transition: transform var(--transition-normal), box-shadow var(--transition-normal); } .stat-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); } .stat-value { font-size: var(--font-size-3xl); font-weight: 700; color: var(--color-navy-800); line-height: 1; margin-bottom: 0.25rem; } .stat-label { color: var(--color-gray-500); font-size: var(--font-size-sm); } .stat-change { display: flex; align-items: center; font-size: var(--font-size-sm); margin-top: 0.5rem; } .stat-change-positive { color: var(--color-success); } .stat-change-negative { color: var(--color-error); } /* Tabs Component */ .tabs { display: flex; border-bottom: 1px solid var(--color-gray-200); margin-bottom: 1rem; } .tab { padding: 0.75rem 1rem; font-weight: 500; color: var(--color-gray-600); cursor: pointer; border-bottom: 2px solid transparent; transition: all var(--transition-normal); } .tab:hover { color: var(--color-primary); } .tab-active { color: var(--color-primary); border-bottom-color: var(--color-primary); } .tab-content { display: none; } .tab-content-active { display: block; animation: fadeIn var(--transition-normal); } /* Dropdown Component */ .dropdown { position: relative; display: inline-block; } .dropdown-toggle { cursor: pointer; } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 10; min-width: 10rem; padding: 0.5rem 0; margin-top: 0.5rem; background-color: white; border-radius: var(--border-radius-md); box-shadow: var(--shadow-lg); display: none; animation: fadeInDown var(--transition-normal); } .dropdown-menu-right { left: auto; right: 0; } .dropdown-item { display: block; padding: 0.5rem 1rem; color: var(--color-gray-700); transition: background-color var(--transition-fast); } .dropdown-item:hover { background-color: var(--color-gray-100); color: var(--color-gray-900); } .dropdown:hover .dropdown-menu, .dropdown.active .dropdown-menu { display: block; } /* Tooltip Component */ .tooltip { position: relative; display: inline-block; } .tooltip-text { visibility: hidden; position: absolute; z-index: 20; bottom: 125%; left: 50%; transform: translateX(-50%); background-color: var(--color-gray-800); color: white; text-align: center; padding: 0.5rem; border-radius: var(--border-radius-md); font-size: var(--font-size-xs); white-space: nowrap; opacity: 0; transition: opacity var(--transition-normal); } .tooltip-text::after { content: ""; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: var(--color-gray-800) transparent transparent transparent; } .tooltip:hover .tooltip-text { visibility: visible; opacity: 1; } /* API Error Display */ .api-error { max-width: 600px; margin: 2rem auto; padding: 2rem; background-color: #fff; border-radius: var(--radius); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); text-align: center; } .api-error h2 { color: var(--danger); margin-bottom: 1rem; } .error-details { background-color: #f8f9fa; padding: 1.5rem; border-radius: var(--radius); margin-top: 1rem; text-align: left; } .error-details ul { margin: 1rem 0; padding-left: 1.5rem; } .error-details li { margin-bottom: 0.5rem; } .error-details button { margin-top: 1rem; } /* Documents Container */ .documents-container { min-height: 200px; padding: 1rem 0; } /* Error message */ .error-message { background-color: #fef2f2; border: 1px solid #fee2e2; color: #b91c1c; padding: 1rem; border-radius: var(--radius); margin: 1rem 0; } .error-message p { margin: 0.5rem 0; } .error-details { font-family: monospace; font-size: 0.85rem; margin-top: 0.5rem; padding: 0.5rem; background-color: #fff; border-radius: 0.25rem; overflow-x: auto; } /* Search Results */ .search-results-section { margin-top: 2rem; display: none; } .search-results-container { min-height: 200px; padding: 1rem 0; } /* Tab content visibility */ .tab-content { display: none; } .tab-content.active { display: block; } /* Fix for search results section */ .search-results-section.active { display: block; }