amine-yagoub's picture
feat: introduce gradio-based interface for courtroom trials
ca2b985
"""UI constants: CSS, severity colors, phase labels."""
from code_tribunal.pipeline import Phase
SEVERITY_COLORS = {"CRITICAL": "#dc2626", "HIGH": "#ea580c", "MEDIUM": "#ca8a04", "LOW": "#2563eb"}
CSS = """
.gradio-container{min-width:1280px!important;max-width:1310px!important;margin:0 auto!important}
body{background:#0a0a14!important}
.hero-logo{display:block!important;margin:0 auto 12px auto!important;border-radius:16px!important}
.hero-title{text-align:center!important;color:#fbbf24!important;font-family:Georgia,serif!important;font-size:2.4em!important}
.hero-subtitle{text-align:center!important;color:#94a3b8!important;font-size:1.1em!important}
.upload-area .file-preview{min-height:220px!important;border:2px dashed #fbbf2440!important;border-radius:16px!important;background:#1a1a2e!important}
.upload-area .file-preview:hover{border-color:#fbbf24!important}
.chatbot{border:none!important;box-shadow:none!important}
.contain{border:none!important;box-shadow:none!important;background:transparent!important}
[data-testid="status-tracker"]{border:none!important;box-shadow:none!important}
.bot.svelte-1nr59td.message{border:none!important;box-shadow:none!important;background:transparent!important}
.phase-active{font-family:sans-serif;font-size:1.5rem;font-weight:bold;background:linear-gradient(to left,#333 20%,#888 40%,#eee 50%,#888 60%,#333 80%);background-size:200% auto;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;color:transparent;animation:shine 3s linear infinite}
@keyframes shine{to{background-position:200% center}}
"""
PHASE_LABELS = {
Phase.EVIDENCE: "Phase 1/7: Forensic Evidence",
Phase.GRAPH: "Phase 2/7: Code Graph",
Phase.INVESTIGATION: "Phase 3/7: Investigation",
Phase.TRIAL: "Phase 4/7: The Trial",
Phase.VERDICT: "Phase 5/7: Verdict",
Phase.REPORT: "Phase 6/7: Final Report",
Phase.COMPLETE: "Trial Complete",
Phase.FAILED: "Error",
}