agc-chatbot/frontend/index.html.bak

1823 lines
45 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AGC Document Finder</title>
<meta
name="description"
content="Attorney General's Chambers Document Search Interface with AI capabilities"
/>
<!-- Favicon -->
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<!-- Font Awesome -->
<link
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"
rel="stylesheet"
/>
<!-- CSS styles -->
<style>
/* Base styling */
:root {
--primary: #1e40af;
--primary-dark: #1e3a8a;
--primary-light: #3b82f6;
--secondary: #0ea5e9;
--accent: #f59e0b;
--success: #10b981;
--danger: #ef4444;
--warning: #f59e0b;
--light: #f3f4f6;
--dark: #1f2937;
--gray: #6b7280;
--gray-light: #d1d5db;
--white: #ffffff;
--radius: 0.5rem;
--shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.5;
color: var(--dark);
background-color: #f5f5f5;
margin: 0;
padding: 0;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 1rem;
}
/* Header styling */
header {
background-color: var(--white);
box-shadow: var(--shadow);
position: sticky;
top: 0;
z-index: 40;
}
.header-content {
display: flex;
align-items: center;
justify-content: space-between;
padding: 1rem 0;
}
.logo-container {
display: flex;
align-items: center;
}
.logo-container img {
height: 40px;
margin-right: 0.75rem;
}
.logo-container h1 {
font-size: 1.25rem;
color: var(--primary-dark);
margin: 0;
}
/* Main Navigation Tabs */
.main-nav {
background-color: var(--primary-dark);
padding: 0;
}
.main-tabs {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.main-tab {
position: relative;
}
.main-tab-link {
display: flex;
align-items: center;
gap: 0.5rem;
color: rgba(255, 255, 255, 0.85);
text-decoration: none;
padding: 1rem 1.5rem;
font-weight: 500;
transition: all 0.2s;
}
.main-tab-link:hover {
color: var(--white);
background-color: rgba(255, 255, 255, 0.1);
}
.main-tab-link.active {
color: var(--white);
background-color: var(--primary);
}
.main-tab-link.active::after {
content: "";
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 80%;
height: 3px;
background-color: var(--accent);
border-radius: 2px 2px 0 0;
}
/* Mobile Navigation */
.mobile-menu-toggle {
display: none;
background: none;
border: none;
color: var(--white);
font-size: 1.25rem;
cursor: pointer;
padding: 0.5rem;
}
.mobile-menu {
display: none;
background-color: var(--primary);
padding: 0;
}
.mobile-menu ul {
list-style: none;
margin: 0;
padding: 0;
}
.mobile-menu li {
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.mobile-menu a {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 1rem 1.5rem;
color: rgba(255, 255, 255, 0.9);
text-decoration: none;
font-weight: 500;
transition: all 0.2s;
}
.mobile-menu a:hover {
background-color: rgba(255, 255, 255, 0.1);
}
/* Tab content */
.tab-content {
display: none;
padding: 2rem 0;
}
.tab-content.active {
display: block;
animation: fadeIn 0.3s ease-in-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* User actions bar */
.user-actions {
display: flex;
align-items: center;
gap: 1rem;
}
.user-action-btn {
background: none;
border: none;
color: var(--gray);
font-size: 1.25rem;
cursor: pointer;
padding: 0.5rem;
border-radius: 50%;
transition: all 0.2s;
}
.user-action-btn:hover {
color: var(--primary);
background-color: var(--light);
}
/* Responsive styles */
@media (max-width: 768px) {
.main-tabs {
display: none;
}
.mobile-menu-toggle {
display: block;
}
.mobile-menu.active {
display: block;
}
}
/* Card component */
.card {
background-color: var(--white);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 1.5rem;
margin-bottom: 1.5rem;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.25rem;
}
.card-title {
font-size: 1.25rem;
color: var(--primary-dark);
margin: 0;
display: flex;
align-items: center;
gap: 0.5rem;
}
/* Filter section */
.filter-section {
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin-bottom: 1.5rem;
padding: 1.25rem;
background-color: var(--white);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
.filter-group {
flex: 1;
min-width: 200px;
}
.filter-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
color: var(--dark);
font-size: 0.875rem;
}
.filter-input {
width: 100%;
padding: 0.675rem 1rem;
border: 1px solid var(--gray-light);
border-radius: 0.375rem;
font-size: 0.875rem;
transition: all 0.2s;
}
.filter-input:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
}
.filter-actions {
display: flex;
align-items: flex-end;
gap: 0.75rem;
}
.filter-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.675rem 1.25rem;
background-color: var(--primary);
color: white;
border: none;
border-radius: 0.375rem;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.filter-btn:hover {
background-color: var(--primary-dark);
}
.filter-btn.secondary {
background-color: var(--light);
color: var(--dark);
}
.filter-btn.secondary:hover {
background-color: var(--gray-light);
}
/* Document cards */
.documents-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 1.25rem;
}
.document-card {
position: relative;
background-color: var(--white);
border-radius: var(--radius);
box-shadow: var(--shadow);
overflow: hidden;
transition: all 0.3s ease;
border: 1px solid var(--gray-light);
height: 100%;
display: flex;
flex-direction: column;
}
.document-card:hover {
transform: translateY(-4px);
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
}
.document-header {
padding: 1.25rem;
border-bottom: 1px solid var(--light);
background-color: var(--white);
}
.doc-type-badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
margin-bottom: 0.5rem;
}
.doc-type-badge.all-docs {
background-color: #dbeafe;
color: #1e40af;
}
.doc-type-badge.lkk {
background-color: #dcfce7;
color: #166534;
}
.doc-type-badge.legal {
background-color: #ffedd5;
color: #c2410c;
}
.doc-type-badge.criminal {
background-color: #fef3c7;
color: #92400e;
}
.document-title {
margin: 0;
font-size: 1rem;
font-weight: 600;
color: var(--dark);
line-height: 1.4;
}
.document-content {
padding: 1.25rem;
font-size: 0.875rem;
color: var(--gray);
line-height: 1.5;
flex: 1;
position: relative;
}
.document-content p {
margin-bottom: 0.75rem;
}
.document-footer {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.75rem 1.25rem;
background-color: #f9fafb;
border-top: 1px solid var(--light);
font-size: 0.75rem;
}
.document-meta {
color: var(--gray);
}
.document-date {
font-weight: 500;
}
.document-actions {
display: flex;
gap: 0.5rem;
}
.bookmark-button {
background: none;
border: none;
color: var(--gray);
cursor: pointer;
padding: 0.375rem;
border-radius: 0.25rem;
transition: all 0.2s;
}
.bookmark-button:hover {
color: var(--warning);
background-color: rgba(245, 158, 11, 0.1);
}
.bookmark-button.bookmarked {
color: var(--warning);
}
.view-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.25rem;
background-color: var(--primary);
color: white;
border: none;
border-radius: 0.25rem;
padding: 0.375rem 0.75rem;
font-size: 0.75rem;
cursor: pointer;
transition: all 0.2s;
}
.view-button:hover {
background-color: var(--primary-dark);
}
.load-more {
display: flex;
justify-content: center;
margin-top: 2rem;
margin-bottom: 1rem;
}
/* Pagination */
.pagination {
display: flex;
justify-content: center;
margin-top: 2rem;
gap: 0.25rem;
}
.pagination-item {
display: flex;
align-items: center;
justify-content: center;
width: 2.5rem;
height: 2.5rem;
border-radius: 0.25rem;
background-color: var(--white);
color: var(--dark);
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.pagination-item:hover {
background-color: var(--light);
}
.pagination-item.active {
background-color: var(--primary);
color: white;
}
.pagination-item.disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* Search section styles */
.search-hero {
background-color: var(--primary-dark);
color: white;
padding: 2.5rem 2rem;
border-radius: var(--radius);
margin-bottom: 2rem;
box-shadow: var(--shadow);
text-align: center;
}
.search-hero h2 {
font-size: 1.5rem;
margin-bottom: 1rem;
font-weight: 600;
}
.search-hero p {
opacity: 0.9;
margin-bottom: 1.5rem;
max-width: 700px;
margin-left: auto;
margin-right: auto;
}
.main-search-container {
position: relative;
max-width: 700px;
margin: 0 auto;
}
.main-search-input {
width: 100%;
padding: 1rem 1.5rem;
padding-right: 4.5rem;
border: none;
border-radius: 9999px;
font-size: 1rem;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: all 0.2s;
}
.main-search-input:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5),
0 4px 6px rgba(0, 0, 0, 0.1);
}
.main-search-button {
position: absolute;
right: 0.25rem;
top: 50%;
transform: translateY(-50%);
background-color: var(--primary);
color: white;
border: none;
width: 3rem;
height: 3rem;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
cursor: pointer;
transition: all 0.2s;
}
.main-search-button:hover {
background-color: var(--primary-dark);
}
.search-options {
display: flex;
justify-content: center;
gap: 1.5rem;
margin-top: 1.5rem;
}
.search-option {
display: flex;
align-items: center;
gap: 0.5rem;
color: rgba(255, 255, 255, 0.8);
cursor: pointer;
transition: all 0.2s;
}
.search-option:hover {
color: white;
}
.search-option input {
margin: 0;
}
/* Search results */
.result-stats {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 1.25rem;
padding-bottom: 0.75rem;
border-bottom: 1px solid var(--gray-light);
}
.stats-text {
font-size: 0.875rem;
color: var(--gray);
}
.sort-options {
display: flex;
align-items: center;
gap: 0.5rem;
}
.sort-options label {
font-size: 0.875rem;
color: var(--gray);
}
.sort-select {
padding: 0.375rem 0.75rem;
border: 1px solid var(--gray-light);
border-radius: 0.25rem;
font-size: 0.875rem;
color: var(--dark);
background-color: var(--white);
}
.result-card {
border: 1px solid var(--gray-light);
border-radius: var(--radius);
padding: 1.25rem;
margin-bottom: 1.25rem;
background-color: var(--white);
transition: all 0.2s;
}
.result-card:hover {
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transform: translateY(-2px);
}
.result-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 0.75rem;
}
.result-title {
font-size: 1.125rem;
font-weight: 600;
color: var(--primary-dark);
margin: 0;
}
.result-score {
background-color: var(--light);
color: var(--gray);
padding: 0.25rem 0.5rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
}
.result-meta {
display: flex;
gap: 1rem;
margin-bottom: 0.75rem;
}
.result-meta-item {
display: flex;
align-items: center;
gap: 0.375rem;
font-size: 0.75rem;
color: var(--gray);
}
.result-content {
font-size: 0.875rem;
line-height: 1.5;
color: var(--gray);
margin-bottom: 1rem;
}
.result-highlights {
background-color: #f8fafc;
border-radius: 0.375rem;
padding: 0.75rem;
font-size: 0.875rem;
margin-bottom: 1rem;
border-left: 3px solid var(--primary-light);
}
.highlight-text {
color: var(--dark);
line-height: 1.5;
}
.highlight-match {
background-color: rgba(245, 158, 11, 0.2);
padding: 0.125rem 0;
border-radius: 0.125rem;
font-weight: 500;
}
.result-footer {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 0.75rem;
border-top: 1px solid var(--light);
}
.result-actions {
display: flex;
gap: 0.5rem;
}
/* Enhanced query */
.enhanced-query {
background-color: #f8fafc;
border-radius: var(--radius);
padding: 1rem;
margin-bottom: 1.5rem;
font-size: 0.875rem;
border: 1px solid var(--gray-light);
}
.enhanced-query-title {
font-weight: 600;
color: var(--primary-dark);
margin-bottom: 0.5rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.original-query {
color: var(--gray);
font-size: 0.875rem;
margin-top: 0.5rem;
}
.enhanced-query-text {
font-style: italic;
color: var(--dark);
}
/* Chat styles */
.chat-container {
display: flex;
flex-direction: column;
height: 600px;
background-color: var(--white);
border-radius: var(--radius);
box-shadow: var(--shadow);
overflow: hidden;
}
.chat-header {
padding: 1rem 1.5rem;
background-color: var(--primary-dark);
color: white;
display: flex;
align-items: center;
justify-content: space-between;
}
.chat-title {
font-size: 1.125rem;
font-weight: 600;
margin: 0;
display: flex;
align-items: center;
gap: 0.5rem;
}
.chat-controls {
display: flex;
gap: 0.75rem;
}
.chat-control-btn {
background: none;
border: none;
color: rgba(255, 255, 255, 0.7);
font-size: 1.125rem;
cursor: pointer;
transition: all 0.2s;
padding: 0.25rem;
border-radius: 0.25rem;
}
.chat-control-btn:hover {
color: white;
background-color: rgba(255, 255, 255, 0.1);
}
.chat-messages {
flex: 1;
padding: 1.5rem;
overflow-y: auto;
background-color: #f9fafb;
}
.chat-input-area {
padding: 1rem 1.5rem;
border-top: 1px solid var(--gray-light);
background-color: var(--white);
}
.chat-input-container {
position: relative;
display: flex;
align-items: center;
}
.chat-input {
flex: 1;
padding: 0.75rem 1rem;
padding-right: 3rem;
border: 1px solid var(--gray-light);
border-radius: 1.5rem;
font-size: 0.9375rem;
resize: none;
height: 2.75rem;
line-height: 1.2;
transition: all 0.2s;
}
.chat-input:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
}
.chat-send-btn {
position: absolute;
right: 0.25rem;
top: 50%;
transform: translateY(-50%);
background-color: var(--primary);
color: white;
border: none;
width: 2.25rem;
height: 2.25rem;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1rem;
cursor: pointer;
transition: all 0.2s;
}
.chat-send-btn:hover {
background-color: var(--primary-dark);
}
.chat-options {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 0.75rem;
font-size: 0.75rem;
color: var(--gray);
}
.chat-option-text {
display: flex;
align-items: center;
gap: 0.375rem;
}
.message {
margin-bottom: 1.25rem;
max-width: 80%;
animation: fadeIn 0.3s ease;
}
.message-user {
margin-left: auto;
background-color: var(--primary);
color: white;
padding: 0.75rem 1rem;
border-radius: 1rem 1rem 0 1rem;
}
.message-assistant {
margin-right: auto;
background-color: white;
color: var(--dark);
padding: 0.75rem 1rem;
border-radius: 1rem 1rem 1rem 0;
border: 1px solid var(--gray-light);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.message-content {
font-size: 0.9375rem;
line-height: 1.5;
white-space: pre-wrap;
}
.message-time {
font-size: 0.6875rem;
opacity: 0.8;
margin-top: 0.375rem;
text-align: right;
}
.typing-indicator {
display: flex;
align-items: center;
padding: 0.75rem 1rem;
background-color: white;
border-radius: 1rem;
width: fit-content;
margin-bottom: 1.25rem;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.typing-dot {
width: 0.5rem;
height: 0.5rem;
background-color: var(--gray);
border-radius: 50%;
margin-right: 0.25rem;
animation: typingAnimation 1.5s infinite ease-in-out;
}
.typing-dot:nth-child(1) {
animation-delay: 0s;
}
.typing-dot:nth-child(2) {
animation-delay: 0.3s;
}
.typing-dot:nth-child(3) {
animation-delay: 0.6s;
margin-right: 0;
}
@keyframes typingAnimation {
0%,
100% {
transform: translateY(0);
opacity: 0.5;
}
50% {
transform: translateY(-0.25rem);
opacity: 1;
}
}
.system-message {
text-align: center;
margin: 1rem 0;
font-size: 0.75rem;
color: var(--gray);
}
.related-documents {
margin-top: 1rem;
padding-top: 0.75rem;
border-top: 1px solid rgba(203, 213, 225, 0.5);
}
.related-title {
font-size: 0.75rem;
font-weight: 600;
color: var(--primary-dark);
margin-bottom: 0.5rem;
}
.related-items {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.related-item {
font-size: 0.75rem;
background-color: rgba(59, 130, 246, 0.1);
color: var(--primary-dark);
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
cursor: pointer;
transition: all 0.2s;
}
.related-item:hover {
background-color: rgba(59, 130, 246, 0.2);
}
/* Chat features area */
.chat-features {
margin-bottom: 2rem;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
margin-top: 1.5rem;
}
.feature-card {
background-color: var(--white);
border-radius: var(--radius);
padding: 1.5rem;
box-shadow: var(--shadow);
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
transition: all 0.3s;
}
.feature-card:hover {
transform: translateY(-4px);
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
}
.feature-icon {
width: 3rem;
height: 3rem;
background-color: rgba(59, 130, 246, 0.1);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
color: var(--primary);
margin-bottom: 1rem;
}
.feature-title {
font-size: 1.125rem;
font-weight: 600;
color: var(--dark);
margin-bottom: 0.75rem;
}
.feature-desc {
font-size: 0.875rem;
color: var(--gray);
line-height: 1.5;
}
/* Footer styling */
footer {
background-color: var(--primary-dark);
color: #f3f4f6;
padding: 3rem 0 2rem;
margin-top: 3rem;
}
.footer-content {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 2rem;
}
.footer-section h3 {
font-size: 1.125rem;
margin-bottom: 1.25rem;
color: white;
}
.footer-links {
list-style: none;
padding: 0;
margin: 0;
}
.footer-links li {
margin-bottom: 0.75rem;
}
.footer-links a {
color: #d1d5db;
text-decoration: none;
transition: all 0.2s;
font-size: 0.9375rem;
}
.footer-links a:hover {
color: white;
text-decoration: underline;
}
.footer-contact {
font-size: 0.9375rem;
line-height: 1.6;
}
.footer-contact p {
margin-bottom: 0.75rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.footer-bottom {
border-top: 1px solid rgba(255, 255, 255, 0.1);
margin-top: 2rem;
padding-top: 1.5rem;
text-align: center;
font-size: 0.875rem;
color: #9ca3af;
}
/* JavaScript interaction hooks */
.js-tab-trigger {
cursor: pointer;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.chat-container {
height: 500px;
}
.message {
max-width: 90%;
}
.search-hero {
padding: 1.5rem 1rem;
}
.search-options {
flex-direction: column;
align-items: flex-start;
gap: 0.75rem;
}
.result-meta {
flex-wrap: wrap;
}
.footer-content {
grid-template-columns: 1fr;
}
}
.loading-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255, 255, 255, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.loading-overlay.hidden {
display: none;
}
.loading-spinner {
font-size: 3rem;
color: var(--primary);
}
/* Document Modal Styles */
.document-modal {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
}
.document-modal.hidden {
display: none;
}
.document-modal-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(2px);
}
.document-modal-container {
position: relative;
width: 90%;
max-width: 900px;
max-height: 90vh;
background-color: var(--white);
border-radius: var(--radius);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
display: flex;
flex-direction: column;
overflow: hidden;
animation: modalFadeIn 0.3s ease;
}
@keyframes modalFadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.document-modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1.25rem 1.5rem;
background-color: var(--primary-dark);
color: white;
}
.document-modal-title {
margin: 0;
font-size: 1.25rem;
font-weight: 600;
color: white;
}
.document-modal-close {
background: none;
border: none;
color: rgba(255, 255, 255, 0.8);
font-size: 1.25rem;
cursor: pointer;
transition: color 0.2s;
}
.document-modal-close:hover {
color: white;
}
.document-modal-body {
padding: 1.5rem;
overflow-y: auto;
max-height: calc(90vh - 130px);
}
.document-modal-footer {
padding: 1rem 1.5rem;
border-top: 1px solid var(--gray-light);
display: flex;
justify-content: flex-end;
}
.document-meta {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin-bottom: 1.5rem;
padding: 1rem;
background-color: #f8fafc;
border-radius: var(--radius);
border: 1px solid var(--gray-light);
}
.document-meta-item {
display: flex;
flex-direction: column;
}
.document-meta-label {
font-size: 0.75rem;
font-weight: 600;
color: var(--gray);
margin-bottom: 0.25rem;
}
.document-meta-value {
font-size: 0.9rem;
color: var(--dark);
}
.message {
margin-bottom: 1.25rem;
max-width: 80%;
animation: fadeIn 0.3s ease;
}
</style>
</head>
<body>
<!-- Header Section -->
<header>
<div class="container header-content">
<div class="logo-container">
<img src="assets/images/agc-logo.png" alt="AGC Logo" />
<h1>AGC Document Chatbot</h1>
</div>
<div class="user-actions">
<button class="user-action-btn" title="Bookmarks">
<i class="fas fa-bookmark"></i>
</button>
<button class="user-action-btn" title="Help">
<i class="fas fa-question-circle"></i>
</button>
<button class="user-action-btn" title="Settings">
<i class="fas fa-cog"></i>
</button>
</div>
</div>
<!-- Main Navigation -->
<nav class="main-nav">
<div class="container">
<ul class="main-tabs">
<li class="main-tab">
<a href="#browse" class="main-tab-link active" data-tab="browse">
<i class="fas fa-folder"></i> Browse Documents
</a>
</li>
<li class="main-tab">
<a href="#search" class="main-tab-link" data-tab="search">
<i class="fas fa-search"></i> Search
</a>
</li>
<li class="main-tab">
<a href="#chat" class="main-tab-link" data-tab="chat">
<i class="fas fa-comments"></i> AI Assistant
</a>
</li>
</ul>
<button class="mobile-menu-toggle" id="mobileMenuToggle">
<i class="fas fa-bars"></i>
</button>
</div>
</nav>
<!-- Mobile Menu -->
<div class="mobile-menu" id="mobileMenu">
<ul>
<li>
<a href="#browse" data-tab="browse">
<i class="fas fa-folder"></i> Browse Documents
</a>
</li>
<li>
<a href="#search" data-tab="search">
<i class="fas fa-search"></i> Search
</a>
</li>
<li>
<a href="#chat" data-tab="chat">
<i class="fas fa-comments"></i> AI Assistant
</a>
</li>
<li>
<a href="#bookmarks"> <i class="fas fa-bookmark"></i> Bookmarks </a>
</li>
<li>
<a href="#help"> <i class="fas fa-question-circle"></i> Help </a>
</li>
</ul>
</div>
</header>
<!-- Main Content -->
<main id="mainContent" class="container">
<!-- Browse Documents Tab -->
<div id="browse" class="tab-content active">
<!-- Filter Section -->
<section class="filter-section">
<div class="filter-group">
<label for="docTypeFilter">Document Type</label>
<select id="docTypeFilter" class="filter-input">
<option value="All Types">All Types</option>
<option value="Legal">Legal</option>
<option value="Criminal">Criminal</option>
<option value="LKK">LKK</option>
</select>
</div>
<div class="filter-group">
<label for="dateFilter">Date Range</label>
<select id="dateFilter" class="filter-input">
<option value="all">All Time</option>
<option value="today">Today</option>
<option value="week">This Week</option>
<option value="month">This Month</option>
<option value="year">This Year</option>
</select>
</div>
<div class="filter-group">
<label for="titleFilter">Title Contains</label>
<input
type="text"
id="titleFilter"
class="filter-input"
placeholder="Enter keywords..."
/>
</div>
<div class="filter-actions">
<button class="filter-btn">
<i class="fas fa-filter"></i> Apply Filters
</button>
<button class="filter-btn secondary">
<i class="fas fa-redo"></i> Reset
</button>
</div>
</section>
<!-- Document Grid Section -->
<section class="card">
<div class="card-header">
<h2 class="card-title">
<i class="fas fa-folder"></i> Recent Documents
</h2>
<div>
<button class="view-toggle-btn" title="Grid View">
<i class="fas fa-th"></i>
</button>
<button class="view-toggle-btn" title="List View">
<i class="fas fa-list"></i>
</button>
</div>
</div>
<!-- Documents Grid -->
<div id="recentDocumentsContainer" class="documents-container">
<!-- Documents will be loaded here dynamically -->
</div>
</section>
</div>
<!-- Search Tab -->
<div id="search" class="tab-content">
<!-- Search Hero Section -->
<section class="search-hero">
<h2>Intelligent Document Search</h2>
<p>
Search across all legal documents with our AI-powered search engine.
Get relevant results with intelligent context understanding.
</p>
<div class="main-search-container">
<input
type="text"
class="main-search-input"
id="mainSearchInput"
placeholder="Search for cases, legal documents, or specific concepts..."
/>
<button class="main-search-button" id="mainSearchButton">
<i class="fas fa-search"></i>
</button>
</div>
<div class="search-options">
<label class="search-option">
<input type="radio" name="searchMode" value="semantic" checked />
<span>Semantic Search</span>
</label>
<label class="search-option">
<input type="radio" name="searchMode" value="keyword" />
<span>Keyword Search</span>
</label>
<label class="search-option">
<input type="radio" name="searchMode" value="profile" />
<span>Profile Search</span>
</label>
</div>
</section>
<!-- Search Results -->
<section id="resultsSection" class="search-results-section">
<div class="card">
<div class="card-header">
<h2 class="card-title">
<i class="fas fa-search-plus"></i> Search Results
</h2>
</div>
<!-- Search Results Container -->
<div id="searchResultsContainer" class="search-results-container">
<!-- Search results will be loaded here dynamically -->
</div>
</div>
</section>
</div>
<!-- AI Assistant Tab -->
<div id="chat" class="tab-content">
<!-- Chat Features -->
<section class="chat-features">
<div class="card-header">
<h2 class="card-title">
<i class="fas fa-robot"></i> AI Legal Assistant
</h2>
</div>
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-search"></i>
</div>
<h3 class="feature-title">Intelligent Search</h3>
<p class="feature-desc">
Ask complex legal questions and get precise answers drawn from
our extensive document database.
</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-file-alt"></i>
</div>
<h3 class="feature-title">Document Analysis</h3>
<p class="feature-desc">
Get summaries, key points, and legal interpretations from
lengthy documents in seconds.
</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<i class="fas fa-balance-scale"></i>
</div>
<h3 class="feature-title">Legal Guidance</h3>
<p class="feature-desc">
Receive case-specific guidance and procedural information based
on historical precedents.
</p>
</div>
</div>
</section>
<!-- Chat Interface -->
<div class="chat-container">
<div class="chat-header">
<h3 class="chat-title">
<i class="fas fa-comments"></i> AI Legal Assistant
</h3>
<div class="chat-controls">
<button class="chat-control-btn" title="Clear Chat">
<i class="fas fa-trash"></i>
</button>
<button class="chat-control-btn" title="Settings">
<i class="fas fa-cog"></i>
</button>
</div>
</div>
<div class="chat-messages" id="chatMessages">
<!-- System welcome message -->
<div class="system-message">Today, 10:30 AM</div>
<!-- AI welcome message -->
<div class="message message-assistant">
<div class="message-content">
Hello! I'm your AGC legal research assistant. I can help you
find information, analyze legal documents, and answer questions
about cases and legislation. How can I assist you today?
</div>
<div class="message-time">10:30 AM</div>
</div>
<!-- Example conversation -->
<div class="message message-user">
<div class="message-content">
Can you explain the process for cross-border financial fraud
investigations?
</div>
<div class="message-time">10:32 AM</div>
</div>
<div class="message message-assistant">
<div class="message-content">
Cross-border financial fraud investigations typically follow
these key steps: 1. Initial complaint or detection through
financial monitoring systems 2. Preliminary assessment and
jurisdictional determination 3. Formation of investigation team,
potentially including international liaisons 4. Evidence
gathering through formal channels like MLATs (Mutual Legal
Assistance Treaties) 5. Coordination with foreign enforcement
agencies 6. Joint investigation procedures following established
protocols 7. Case building and prosecution preparation The
process requires careful attention to jurisdictional issues and
admissibility of evidence collected abroad. Would you like more
details on any specific aspect of this process?
</div>
<div class="message-time">10:33 AM</div>
<div class="related-documents">
<div class="related-title">Related Documents:</div>
<div class="related-items">
<span class="related-item"
>International Fraud Prevention Guidelines</span
>
<span class="related-item"
>Cross-Border Financial Crime Report</span
>
<span class="related-item">AMLA Compliance Protocol</span>
</div>
</div>
</div>
<!-- Typing indicator -->
<!-- <div class="typing-indicator">
<div class="typing-dot"></div>
<div class="typing-dot"></div>
<div class="typing-dot"></div>
</div> -->
</div>
<div class="chat-input-area">
<div class="chat-input-container">
<textarea
class="chat-input"
id="chatInput"
placeholder="Ask a question about legal cases, documents, or procedures..."
rows="1"
></textarea>
<button class="chat-send-btn" id="chatSendBtn">
<i class="fas fa-paper-plane"></i>
</button>
</div>
<div class="chat-options">
<div class="chat-option-text">
<i class="fas fa-info-circle"></i>
<span
>Responses are generated using AI and may require
verification</span
>
</div>
<div>
<a href="#" class="chat-option-text">
<i class="fas fa-question-circle"></i>
<span>Help</span>
</a>
</div>
</div>
</div>
</div>
</div>
</main>
<!-- Footer -->
<footer>
<div class="container">
<div class="footer-content">
<div class="footer-section">
<h3>About AGC</h3>
<ul class="footer-links">
<li><a href="#">About Us</a></li>
<li><a href="#">Leadership</a></li>
<li><a href="#">History</a></li>
<li><a href="#">Careers</a></li>
</ul>
</div>
<div class="footer-section">
<h3>Resources</h3>
<ul class="footer-links">
<li><a href="#">Legal Resources</a></li>
<li><a href="#">Publications</a></li>
<li><a href="#">FAQ</a></li>
<li><a href="#">Help Center</a></li>
</ul>
</div>
<div class="footer-section">
<h3>Legal</h3>
<ul class="footer-links">
<li><a href="#">Terms of Service</a></li>
<li><a href="#">Privacy Policy</a></li>
<li><a href="#">Disclaimer</a></li>
<li><a href="#">Copyright</a></li>
</ul>
</div>
<div class="footer-section">
<h3>Contact Us</h3>
<div class="footer-contact">
<p>
<i class="fas fa-map-marker-alt"></i> No. 45, Persiaran Perdana,
Presint 4, 62100 Putrajaya, Malaysia
</p>
<p><i class="fas fa-phone"></i> +603-8885 5000</p>
<p><i class="fas fa-envelope"></i> pro@agc.gov.my</p>
</div>
</div>
</div>
<div class="footer-bottom">
<p>
&copy; 2023 Attorney General's Chambers of Malaysia. All Rights
Reserved.
</p>
</div>
</div>
</footer>
<!-- Add notification styles -->
<style>
.notification {
position: fixed;
top: 20px;
right: 20px;
max-width: 300px;
padding: 12px 16px;
border-radius: var(--radius);
background-color: white;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
z-index: 1000;
transform: translateY(0);
opacity: 1;
transition: transform 0.3s ease, opacity 0.3s ease;
}
.notification.notification-hide {
transform: translateY(-10px);
opacity: 0;
}
.notification-content {
display: flex;
align-items: center;
gap: 8px;
}
.notification.success .notification-content i {
color: #10b981;
}
.notification.error .notification-content i {
color: #ef4444;
}
.notification.warning .notification-content i {
color: #f59e0b;
}
.notification.info .notification-content i {
color: #3b82f6;
}
.loading-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255, 255, 255, 0.8);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.loading-overlay.hidden {
display: none;
}
.loading-spinner {
font-size: 3rem;
color: var(--primary);
}
</style>
<!-- API Service Script -->
<script src="js/api.js"></script>
<!-- Main Application Script -->
<script src="js/main.js"></script>
</body>
</html>