""" Styles and UI configuration for the Defensor application. """ def get_custom_css(): """Returns the custom CSS for the Defensor application.""" return """ body { background-color: #f8f9fa; color: #333; font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } /* App-wide typography improvements */ h1, h2, h3, h4, h5, h6 { font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; font-weight: 600; letter-spacing: -0.02em; } /* Dark mode theme - beautiful gradient background */ .gradio-container { background: linear-gradient(135deg, #172a46 0%, #0c1220 100%); max-width: 1000px; margin: 0 auto; border-radius: 16px; overflow: hidden; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.05); } /* Logo styling */ .logo-container { text-align: center; margin-bottom: 10px; } .logo { display: inline-flex; align-items: center; background: rgba(0, 0, 0, 0.2); padding: 10px 20px; border-radius: 50px; border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); } .logo-icon { font-size: 2rem; margin-right: 10px; display: inline-block; } .logo-text { font-size: 1.6rem; font-weight: 700; color: white; letter-spacing: 0.5px; background: linear-gradient(90deg, #a5b4fc 0%, #818cf8 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); } /* App header styling */ .app-header { text-align: center; padding: 30px 20px 20px; background: rgba(0, 0, 0, 0.2); border-bottom: 1px solid rgba(255, 255, 255, 0.1); margin-bottom: 15px; } .app-header h1 { font-size: 2.4rem; color: #fff; margin-bottom: 10px; font-weight: 700; text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); background: linear-gradient(90deg, #e0e7ff 0%, #c7d2fe 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; } .app-header p { color: rgba(255, 255, 255, 0.8); font-size: 1.1rem; max-width: 700px; margin: 0 auto; line-height: 1.5; } /* Main container styling */ .main-container { background-color: rgba(30, 41, 59, 0.7); backdrop-filter: blur(10px); border-radius: 12px; padding: 25px; margin: 15px; color: #fff; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); border: 1px solid rgba(255, 255, 255, 0.08); } /* Status container */ .status-container { margin-bottom: 20px; text-align: center; width: 100%; } /* Response styling */ .response-container, .response-wrapper { background: rgba(15, 23, 42, 0.6); backdrop-filter: blur(10px); border-radius: 12px; padding: 25px; margin-top: 20px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); max-height: 700px; overflow-y: auto; width: 100%; border: 1px solid rgba(255, 255, 255, 0.05); transition: all 0.3s ease; } .answer-container { background: rgba(30, 41, 59, 0.4); border-radius: 10px; padding: 20px; margin-bottom: 15px; border: 1px solid rgba(255, 255, 255, 0.05); } .answer-container h2 { color: #a5b4fc; margin-top: 25px; margin-bottom: 15px; font-size: 1.5em; border-bottom: 1px solid rgba(255, 255, 255, 0.1); padding-bottom: 10px; } .answer-container h3 { color: #93c5fd; margin-top: 20px; margin-bottom: 12px; font-size: 1.3em; } .answer-container h4 { color: #bae6fd; margin-top: 18px; margin-bottom: 10px; font-size: 1.15em; } .answer-container p { margin-bottom: 15px; line-height: 1.6; color: rgba(255, 255, 255, 0.9); font-size: 1.05em; } /* Status indicators */ .status-ready { background: linear-gradient(135deg, #134e5e 0%, #71b280 100%); color: white; padding: 12px 18px; border-radius: 30px; margin: 10px auto; font-weight: 600; box-shadow: 0 4px 12px rgba(19, 78, 94, 0.3); display: inline-block; min-width: 180px; } .status-processing { background: linear-gradient(135deg, #2980b9 0%, #2c3e50 100%); color: white; padding: 12px 18px; border-radius: 30px; margin: 10px auto; font-weight: 600; box-shadow: 0 4px 12px rgba(41, 128, 185, 0.3); animation: pulse 2s infinite; display: inline-block; min-width: 180px; } .status-error { background: linear-gradient(135deg, #cb2d3e 0%, #ef473a 100%); color: white; padding: 12px 18px; border-radius: 30px; margin: 15px auto; font-weight: 600; box-shadow: 0 4px 12px rgba(203, 45, 62, 0.3); display: inline-block; min-width: 180px; } .status-complete { background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%); color: white; padding: 12px 18px; border-radius: 30px; margin: 10px auto; font-weight: 600; box-shadow: 0 4px 12px rgba(17, 153, 142, 0.3); display: inline-block; min-width: 180px; } /* Input container */ .input-container { background: rgba(30, 41, 59, 0.7); backdrop-filter: blur(10px); border-radius: 12px; padding: 25px; margin-bottom: 20px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); border: 1px solid rgba(255, 255, 255, 0.08); transition: all 0.3s ease; } .input-container:focus-within { box-shadow: 0 8px 25px rgba(0, 0, 0, 0.25); transform: translateY(-2px); } .hint-text { color: rgba(255, 255, 255, 0.7); font-size: 0.95em; margin-top: 8px; font-style: italic; } /* Progress container */ .progress-container { background: rgba(30, 41, 59, 0.7); backdrop-filter: blur(10px); border-radius: 12px; padding: 20px; margin: 20px 0; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); width: 100%; min-height: 90px; display: block; border: 1px solid rgba(255, 255, 255, 0.08); } /* Button container */ .button-container { display: flex; gap: 15px; margin: 25px 0; width: 100%; justify-content: center; } .button-container button { min-height: 52px; font-size: 1.05em; font-weight: 600; padding: 0 35px; flex: 0 1 auto; min-width: 180px; max-width: 220px; letter-spacing: 0.3px; border-radius: 30px !important; } /* Progress label */ .progress-label { margin-bottom: 12px; color: rgba(255, 255, 255, 0.85); font-weight: 600; font-size: 1.05em; text-align: center; } /* Progress stages styling */ .progress-stages-container { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px; margin-top: 20px; width: 100%; } .progress-stage { padding: 12px 15px; border-radius: 30px; background: rgba(15, 23, 42, 0.7); color: rgba(255, 255, 255, 0.6); font-size: 0.95em; transition: all 0.3s ease; flex: 1; text-align: center; min-width: 120px; max-width: 200px; display: flex; align-items: center; justify-content: center; border: 1px solid rgba(255, 255, 255, 0.05); } .progress-stage.active { background: linear-gradient(135deg, #2980b9 0%, #2c3e50 100%); color: white; font-weight: 600; animation: pulse 2s infinite; border: none; box-shadow: 0 4px 12px rgba(41, 128, 185, 0.25); } .progress-stage.complete { background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%); color: white; font-weight: 600; border: none; box-shadow: 0 4px 12px rgba(17, 153, 142, 0.25); } .progress-stage.error { background: linear-gradient(135deg, #cb2d3e 0%, #ef473a 100%); color: white; font-weight: 600; border: none; box-shadow: 0 4px 12px rgba(203, 45, 62, 0.25); } /* Reasoning steps styling */ .reasoning-step { background: rgba(15, 23, 42, 0.5); border-radius: 10px; padding: 15px; margin-bottom: 15px; border-left: 3px solid rgba(255, 255, 255, 0.2); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .reasoning-stage { font-weight: 600; color: #93c5fd; margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } /* Sources section styling */ .sources-section { background: rgba(15, 23, 42, 0.5); border-radius: 10px; padding: 15px; margin-top: 25px; border-left: 3px solid rgba(255, 255, 255, 0.2); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } .sources-section h3 { color: #93c5fd; margin-top: 0; margin-bottom: 12px; } .source-item { margin-bottom: 8px; color: rgba(255, 255, 255, 0.85); } /* Enhanced visible styles for inputs */ input, textarea { background: rgba(15, 23, 42, 0.6) !important; color: white !important; border: 1px solid rgba(255, 255, 255, 0.1) !important; border-radius: 10px !important; padding: 15px !important; font-size: 1.05em !important; transition: all 0.3s ease !important; } input:focus, textarea:focus { border-color: rgba(147, 197, 253, 0.5) !important; outline: none !important; box-shadow: 0 0 0 3px rgba(147, 197, 253, 0.25) !important; background: rgba(15, 23, 42, 0.8) !important; } /* Make buttons more beautiful with gradients */ button { border-radius: 30px !important; transition: all 0.3s ease !important; outline: none !important; font-weight: 600 !important; letter-spacing: 0.3px !important; } button:hover { transform: translateY(-3px) !important; box-shadow: 0 6px 15px rgba(0, 0, 0, 0.25) !important; } button:active { transform: translateY(-1px) !important; } /* Primary button styling */ button[variant="primary"], .gr-button-primary { background: linear-gradient(135deg, #4f46e5 0%, #3b82f6 100%) !important; color: white !important; border: none !important; } button[variant="primary"]:hover, .gr-button-primary:hover { background: linear-gradient(135deg, #4338ca 0%, #2563eb 100%) !important; } /* Secondary button styling */ button[variant="secondary"], .gr-button-secondary { background: rgba(30, 41, 59, 0.8) !important; color: white !important; border: 1px solid rgba(255, 255, 255, 0.15) !important; } button[variant="secondary"]:hover, .gr-button-secondary:hover { background: rgba(30, 41, 59, 0.95) !important; } /* Animation for processing effects */ @keyframes pulse { 0% { opacity: 1; box-shadow: 0 4px 12px rgba(41, 128, 185, 0.3); } 50% { opacity: 0.85; box-shadow: 0 4px 20px rgba(41, 128, 185, 0.5); } 100% { opacity: 1; box-shadow: 0 4px 12px rgba(41, 128, 185, 0.3); } } /* Responsive improvements */ @media (min-width: 768px) { .gradio-container { min-width: 750px !important; max-width: 1200px !important; } .input-container, .output-container { padding: 30px !important; } .button-container { justify-content: center !important; gap: 25px !important; } } @media (max-width: 767px) { .progress-stage { min-width: 90px; padding: 10px; font-size: 0.9em; } .app-header h1 { font-size: 1.8rem; } .app-header p { font-size: 1rem; } .logo-icon { font-size: 1.5rem; } .logo-text { font-size: 1.2rem; } } /* Override any built-in Gradio container colors */ .gradio-container { color: white !important; } .gr-box, .gr-form, .gr-panel { background: rgba(30, 41, 59, 0.7) !important; backdrop-filter: blur(10px) !important; color: white !important; border-radius: 12px !important; border: 1px solid rgba(255, 255, 255, 0.08) !important; } .gr-input, .gr-textarea, .gr-checkbox, .gr-radio, .gr-slider, .gr-dropdown { background: rgba(15, 23, 42, 0.6) !important; color: white !important; border-color: rgba(255, 255, 255, 0.1) !important; } /* Override labels and markdown content */ .gr-label, .gr-markdown { color: rgba(255, 255, 255, 0.9) !important; } /* Make sure accordions are styled properly */ .gr-accordion { background: rgba(30, 41, 59, 0.7) !important; backdrop-filter: blur(10px) !important; color: white !important; border: 1px solid rgba(255, 255, 255, 0.08) !important; border-radius: 12px !important; margin: 15px 0 !important; } .gr-accordion-header { background: rgba(15, 23, 42, 0.5) !important; color: white !important; font-weight: 600 !important; padding: 15px !important; border-radius: 12px 12px 0 0 !important; } .gr-accordion-content { background: transparent !important; color: white !important; padding: 20px !important; } /* Ensure response text is visible */ .response-wrapper, .response-wrapper *, .answer-container, .answer-container * { color: rgba(255, 255, 255, 0.9) !important; background-color: transparent !important; } .response-wrapper { background: rgba(15, 23, 42, 0.6) !important; backdrop-filter: blur(10px) !important; border-radius: 12px !important; padding: 25px !important; margin-top: 20px !important; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15) !important; border: 1px solid rgba(255, 255, 255, 0.05) !important; } .answer-container { background: rgba(30, 41, 59, 0.4) !important; border-radius: 10px !important; padding: 20px !important; margin-bottom: 15px !important; border: 1px solid rgba(255, 255, 255, 0.05) !important; } /* Apply styles to specific elements within the answer container */ .answer-container h2 { color: #a5b4fc !important; margin-top: 25px !important; margin-bottom: 15px !important; font-size: 1.5em !important; border-bottom: 1px solid rgba(255, 255, 255, 0.1) !important; padding-bottom: 10px !important; } .answer-container h3 { color: #93c5fd !important; margin-top: 20px !important; margin-bottom: 12px !important; font-size: 1.3em !important; } .answer-container h4 { color: #bae6fd !important; margin-top: 18px !important; margin-bottom: 10px !important; font-size: 1.15em !important; } .answer-container p { margin-bottom: 15px !important; line-height: 1.6 !important; color: rgba(255, 255, 255, 0.9) !important; font-size: 1.05em !important; } .answer-container ul, .answer-container ol { margin-left: 20px !important; margin-bottom: 15px !important; color: rgba(255, 255, 255, 0.9) !important; } .answer-container li { margin-bottom: 8px !important; color: rgba(255, 255, 255, 0.9) !important; line-height: 1.5 !important; } /* Fix raw HTML rendering */ .prose { color: rgba(255, 255, 255, 0.9) !important; background-color: transparent !important; } .prose * { color: inherit !important; } /* Slider styling */ .gr-slider { background: rgba(15, 23, 42, 0.6) !important; } .gr-slider .thumb { background: #4f46e5 !important; border: 2px solid white !important; } .gr-slider .track { background: rgba(255, 255, 255, 0.2) !important; } .gr-slider .track-fill { background: linear-gradient(90deg, #4f46e5 0%, #3b82f6 100%) !important; } /* Checkbox styling */ .gr-checkbox { border: 2px solid rgba(255, 255, 255, 0.3) !important; background: rgba(15, 23, 42, 0.6) !important; } .gr-checkbox:checked { background: #4f46e5 !important; border-color: white !important; } /* Better scrollbars for the response area */ .response-wrapper::-webkit-scrollbar, .answer-container::-webkit-scrollbar { width: 8px; height: 8px; } .response-wrapper::-webkit-scrollbar-track, .answer-container::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.05); border-radius: 4px; } .response-wrapper::-webkit-scrollbar-thumb, .answer-container::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 4px; } .response-wrapper::-webkit-scrollbar-thumb:hover, .answer-container::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.3); } """