"""CSS styles and theme definitions for the Markit UI.""" # Main CSS styles for the application CSS_STYLES = """ /* Global styles */ .gradio-container { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } /* Document converter styles */ .output-container { max-height: 420px; overflow-y: auto; border: 1px solid #ddd; padding: 10px; } .gradio-container .prose { overflow: visible; } .processing-controls { display: flex; justify-content: center; gap: 10px; margin-top: 10px; } .provider-options-row { margin-top: 15px; margin-bottom: 15px; } /* Chat Tab Styles - Complete redesign */ .chat-tab-container { max-width: 1200px; margin: 0 auto; padding: 20px; } .chat-header { text-align: center; margin-bottom: 30px; padding: 20px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 15px; color: white; box-shadow: 0 4px 15px rgba(0,0,0,0.1); } .chat-header h2 { margin: 0; font-size: 1.8em; font-weight: 600; } .chat-header p { margin: 10px 0 0 0; opacity: 0.9; font-size: 1.1em; } /* Status Card Styling */ .status-card { background: #ffffff; border: 1px solid #e1e5e9; border-radius: 12px; padding: 20px; margin-bottom: 25px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); transition: all 0.3s ease; } .status-card:hover { box-shadow: 0 4px 20px rgba(0,0,0,0.1); } .status-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 2px solid #f0f2f5; } .status-header h3 { margin: 0; color: #2c3e50; font-size: 1.3em; font-weight: 600; } .status-indicator { padding: 8px 16px; border-radius: 25px; font-weight: 600; font-size: 0.9em; letter-spacing: 0.5px; } .status-ready { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; } .status-not-ready { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; } .status-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 15px; margin-bottom: 20px; } .status-item { background: #f8f9fa; padding: 15px; border-radius: 8px; text-align: center; border: 1px solid #e9ecef; } .status-label { font-size: 0.85em; color: #6c757d; margin-bottom: 5px; font-weight: 500; } .status-value { font-size: 1.4em; font-weight: 700; color: #495057; } .status-services { display: flex; gap: 15px; flex-wrap: wrap; } .service-status { display: flex; align-items: center; gap: 8px; padding: 10px 15px; border-radius: 8px; font-weight: 500; flex: 1; min-width: 200px; color: #2c3e50 !important; } .service-status span { color: #2c3e50 !important; } .service-ready { background: #d4edda; color: #2c3e50 !important; border: 1px solid #c3e6cb; } .service-ready span { color: #2c3e50 !important; } .service-error { background: #f8d7da; color: #2c3e50 !important; border: 1px solid #f5c6cb; } .service-error span { color: #2c3e50 !important; } .service-icon { font-size: 1.2em; } .service-indicator { margin-left: auto; } .status-error { border-color: #dc3545; background: #f8d7da; } .error-message { color: #721c24; margin: 0; font-weight: 500; } /* Control buttons styling */ .control-buttons { display: flex; gap: 12px; justify-content: flex-end; margin-bottom: 25px; } .control-btn { padding: 10px 20px; border-radius: 8px; font-weight: 500; transition: all 0.3s ease; border: none; cursor: pointer; } .btn-refresh { background: #17a2b8; color: white; } .btn-refresh:hover { background: #138496; transform: translateY(-1px); } .btn-new-session { background: #28a745; color: white; } .btn-new-session:hover { background: #218838; transform: translateY(-1px); } .btn-clear-data { background: #dc3545; color: white; } .btn-clear-data:hover { background: #c82333; transform: translateY(-1px); } .btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; } .btn-primary:hover { transform: translateY(-1px); box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); } /* Chat interface styling */ .chat-main-container { background: #ffffff; border-radius: 15px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); overflow: hidden; margin-bottom: 25px; } .chat-container { background: #ffffff; border-radius: 12px; border: 1px solid #e1e5e9; overflow: hidden; } /* Custom chatbot styling */ .gradio-chatbot { border: none !important; background: #ffffff; } .gradio-chatbot .message { padding: 15px 20px; margin: 10px; border-radius: 12px; } .gradio-chatbot .message.user { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; margin-left: 50px; } .gradio-chatbot .message.assistant { background: #f8f9fa; border: 1px solid #e9ecef; margin-right: 50px; } /* Input area styling */ .chat-input-container { background: #ffffff; padding: 20px; border-top: 1px solid #e1e5e9; border-radius: 0 0 15px 15px; } .input-row { display: flex; gap: 12px; align-items: center; } .message-input { flex: 1; border: 2px solid #e1e5e9; border-radius: 25px; padding: 12px 20px; font-size: 1em; transition: all 0.3s ease; resize: none; max-height: 120px; min-height: 48px; } .message-input:focus { border-color: #667eea; box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1); outline: none; } .send-button { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; border-radius: 12px; padding: 12px 24px; min-width: 80px; height: 48px; margin-right: 10px; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; justify-content: center; font-size: 1em; font-weight: 600; letter-spacing: 0.5px; } .send-button:hover { transform: scale(1.05); box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); } /* Session info styling */ .session-info { background: #e7f3ff; border: 1px solid #b3d9ff; border-radius: 8px; padding: 15px; color: #0056b3; font-weight: 500; text-align: center; } /* Responsive design */ @media (max-width: 768px) { .chat-tab-container { padding: 10px; } .status-grid { grid-template-columns: repeat(2, 1fr); } .service-status { min-width: 100%; } .control-buttons { flex-direction: column; gap: 8px; } .gradio-chatbot .message.user { margin-left: 20px; } .gradio-chatbot .message.assistant { margin-right: 20px; } } /* Query Ranker Styles */ .ranker-container { max-width: 1200px; margin: 0 auto; padding: 20px; } .ranker-placeholder { text-align: center; padding: 40px; background: #f8f9fa; border-radius: 12px; border: 1px solid #e9ecef; color: #6c757d; } .ranker-placeholder h3 { color: #495057; margin-bottom: 10px; } .ranker-error { text-align: center; padding: 30px; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 12px; color: #721c24; } .ranker-error h3 { margin-bottom: 15px; } .error-hint { font-style: italic; margin-top: 10px; opacity: 0.8; } .ranker-no-results { text-align: center; padding: 40px; background: #ffffff; border: 1px solid #e1e5e9; border-radius: 12px; color: #6c757d; } .ranker-no-results h3 { color: #495057; margin-bottom: 15px; } .no-results-hint { font-style: italic; margin-top: 10px; opacity: 0.8; } .ranker-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 20px; border-radius: 15px; margin-bottom: 25px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); } .ranker-title h3 { margin: 0 0 10px 0; font-size: 1.4em; font-weight: 600; } .query-display { font-size: 1.1em; opacity: 0.9; font-style: italic; margin-bottom: 15px; } .ranker-meta { display: flex; gap: 15px; align-items: center; flex-wrap: wrap; } .method-badge { background: rgba(255, 255, 255, 0.2); padding: 6px 12px; border-radius: 20px; font-weight: 500; font-size: 0.9em; } .result-count { background: rgba(255, 255, 255, 0.15); padding: 6px 12px; border-radius: 20px; font-weight: 500; font-size: 0.9em; } .result-card { background: #ffffff; border: 1px solid #e1e5e9; border-radius: 12px; margin-bottom: 20px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); transition: all 0.3s ease; overflow: hidden; } .result-card:hover { box-shadow: 0 4px 20px rgba(0,0,0,0.1); transform: translateY(-2px); } .result-header { display: flex; justify-content: space-between; align-items: center; padding: 15px 20px; background: #f8f9fa; border-bottom: 1px solid #e9ecef; } .rank-info { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } .rank-badge { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 4px 10px; border-radius: 15px; font-weight: 600; font-size: 0.85em; } .source-info { background: #e9ecef; color: #495057; padding: 4px 8px; border-radius: 10px; font-size: 0.85em; font-weight: 500; } .page-info { background: #d1ecf1; color: #0c5460; padding: 4px 8px; border-radius: 10px; font-size: 0.85em; } .length-info { background: #f8f9fa; color: #6c757d; padding: 4px 8px; border-radius: 10px; font-size: 0.85em; } .score-info { display: flex; gap: 10px; align-items: center; } .confidence-badge { padding: 4px 8px; border-radius: 10px; font-weight: 600; font-size: 0.85em; } .score-value { background: #2c3e50; color: white; padding: 6px 12px; border-radius: 15px; font-weight: 600; font-size: 0.9em; } .result-content { padding: 20px; } .content-text { line-height: 1.6; color: #2c3e50; border-left: 3px solid #667eea; padding-left: 15px; background: #f8f9fa; padding: 15px; border-radius: 0 8px 8px 0; max-height: 300px; overflow-y: auto; } .result-actions { display: flex; gap: 10px; padding: 15px 20px; background: #f8f9fa; border-top: 1px solid #e9ecef; } .action-btn { padding: 8px 16px; border: none; border-radius: 8px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; font-size: 0.9em; display: flex; align-items: center; gap: 5px; } .copy-btn { background: #17a2b8; color: white; } .copy-btn:hover { background: #138496; transform: translateY(-1px); } .info-btn { background: #6c757d; color: white; } .info-btn:hover { background: #5a6268; transform: translateY(-1px); } .ranker-methods { margin-top: 20px; padding-top: 15px; border-top: 1px solid #e9ecef; } .methods-label { font-weight: 600; color: #495057; margin-bottom: 10px; font-size: 0.9em; } .methods-list { display: flex; gap: 8px; flex-wrap: wrap; } .method-tag { background: #e9ecef; color: #495057; padding: 4px 10px; border-radius: 12px; font-size: 0.8em; font-weight: 500; } /* Ranker controls styling */ .ranker-controls { background: #ffffff; border: 1px solid #e1e5e9; border-radius: 12px; padding: 20px; margin-bottom: 25px; box-shadow: 0 2px 10px rgba(0,0,0,0.05); } .ranker-input-row { display: flex; gap: 15px; align-items: end; margin-bottom: 15px; } .ranker-query-input { flex: 1; border: 2px solid #e1e5e9; border-radius: 25px; padding: 12px 20px; font-size: 1em; transition: all 0.3s ease; } .ranker-query-input:focus { border-color: #667eea; box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1); outline: none; } .ranker-search-btn { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; border-radius: 12px; padding: 12px 24px; min-width: 100px; cursor: pointer; transition: all 0.3s ease; font-weight: 600; font-size: 1em; } .ranker-search-btn:hover { transform: scale(1.05); box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3); } .ranker-options-row { display: flex; gap: 15px; align-items: center; } /* Responsive design for ranker */ @media (max-width: 768px) { .ranker-container { padding: 10px; } .ranker-input-row { flex-direction: column; gap: 10px; } .ranker-options-row { flex-direction: column; gap: 10px; align-items: stretch; } .ranker-meta { justify-content: center; } .rank-info { flex-direction: column; gap: 5px; align-items: flex-start; } .result-header { flex-direction: column; gap: 10px; align-items: flex-start; } .score-info { align-self: flex-end; } .result-actions { flex-direction: column; gap: 8px; } } """