Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| def create_theme(): | |
| return gr.themes.Base( | |
| primary_hue=gr.themes.colors.green, | |
| secondary_hue=gr.themes.colors.amber, | |
| neutral_hue=gr.themes.colors.zinc, | |
| font=[ | |
| gr.themes.GoogleFont("JetBrains Mono"), | |
| gr.themes.GoogleFont("Inter"), | |
| "ui-monospace", | |
| "monospace", | |
| ], | |
| font_mono=[ | |
| gr.themes.GoogleFont("JetBrains Mono"), | |
| "ui-monospace", | |
| "monospace", | |
| ], | |
| ) | |
| CUSTOM_CSS = """ | |
| /* ===== LIFELOG DEBUGGER THEME ===== */ | |
| .gradio-container { | |
| background: #0d1117 !important; | |
| max-width: 1200px !important; | |
| } | |
| /* --- App header --- */ | |
| .app-header { | |
| background: linear-gradient(135deg, #0d1117 0%, #161b22 100%); | |
| border: 1px solid #30363d; | |
| border-radius: 12px; | |
| padding: 28px 32px; | |
| margin-bottom: 20px; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .app-header::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; left: 0; right: 0; bottom: 0; | |
| background: repeating-linear-gradient( | |
| 0deg, | |
| transparent, | |
| transparent 2px, | |
| rgba(34, 197, 94, 0.03) 2px, | |
| rgba(34, 197, 94, 0.03) 4px | |
| ); | |
| pointer-events: none; | |
| animation: scanline 10s linear infinite; | |
| } | |
| @keyframes scanline { | |
| 0% { transform: translateY(0); } | |
| 100% { transform: translateY(120px); } | |
| } | |
| .app-title { | |
| font-family: 'JetBrains Mono', monospace; | |
| color: #22c55e; | |
| font-size: 32px; | |
| font-weight: 700; | |
| margin: 0; | |
| text-shadow: 0 0 24px rgba(34, 197, 94, 0.3); | |
| } | |
| .app-subtitle { | |
| color: #8b949e; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 14px; | |
| margin-top: 6px; | |
| } | |
| .app-meta { | |
| color: #484f58; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 11px; | |
| margin-top: 4px; | |
| } | |
| /* --- Dark overrides --- */ | |
| .block, .form, .wrap, .panel { | |
| background: #161b22 !important; | |
| border-color: #30363d !important; | |
| } | |
| .label-wrap, .block > label { | |
| color: #8b949e !important; | |
| } | |
| textarea, input[type="text"] { | |
| background: #0d1117 !important; | |
| border-color: #30363d !important; | |
| color: #e6edf3 !important; | |
| font-family: 'JetBrains Mono', monospace !important; | |
| } | |
| textarea:focus, input[type="text"]:focus { | |
| border-color: #22c55e !important; | |
| box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.15) !important; | |
| } | |
| textarea::placeholder, input::placeholder { | |
| color: #484f58 !important; | |
| } | |
| /* --- Tab styling --- */ | |
| .tab-nav { | |
| background: #161b22 !important; | |
| border-bottom: 1px solid #30363d !important; | |
| } | |
| .tab-nav button { | |
| font-family: 'JetBrains Mono', monospace !important; | |
| color: #8b949e !important; | |
| background: transparent !important; | |
| border: none !important; | |
| border-bottom: 2px solid transparent !important; | |
| padding: 12px 20px !important; | |
| font-size: 13px !important; | |
| transition: all 0.2s !important; | |
| } | |
| .tab-nav button:hover { | |
| color: #e6edf3 !important; | |
| background: rgba(34, 197, 94, 0.05) !important; | |
| } | |
| .tab-nav button.selected { | |
| color: #22c55e !important; | |
| border-bottom-color: #22c55e !important; | |
| background: rgba(34, 197, 94, 0.08) !important; | |
| } | |
| /* --- Section headers --- */ | |
| .section-header { | |
| font-family: 'JetBrains Mono', monospace; | |
| color: #22c55e; | |
| font-size: 15px; | |
| margin: 0 0 12px 0; | |
| padding: 8px 12px; | |
| background: rgba(34, 197, 94, 0.05); | |
| border-left: 3px solid #22c55e; | |
| border-radius: 0 6px 6px 0; | |
| } | |
| /* --- Chatbot --- */ | |
| .chatbot { | |
| background: #0d1117 !important; | |
| border: 1px solid #30363d !important; | |
| border-radius: 8px !important; | |
| } | |
| .message { | |
| font-family: 'JetBrains Mono', monospace !important; | |
| font-size: 13px !important; | |
| } | |
| /* --- Git Log Timeline --- */ | |
| .git-log-container { | |
| font-family: 'JetBrains Mono', monospace; | |
| color: #e6edf3; | |
| padding: 8px 0; | |
| } | |
| .commit-entry { | |
| position: relative; | |
| padding: 16px 16px 16px 44px; | |
| border-left: 2px solid #30363d; | |
| margin-left: 20px; | |
| margin-bottom: 0; | |
| transition: background 0.2s; | |
| } | |
| .commit-entry:hover { | |
| background: rgba(34, 197, 94, 0.03); | |
| } | |
| .commit-entry::before { | |
| content: ''; | |
| position: absolute; | |
| left: -7px; | |
| top: 22px; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 50%; | |
| background: #22c55e; | |
| border: 2px solid #0d1117; | |
| box-shadow: 0 0 8px rgba(34, 197, 94, 0.4); | |
| } | |
| .commit-entry.resolved::before { | |
| background: #8b949e; | |
| box-shadow: none; | |
| } | |
| .commit-header { | |
| display: flex; | |
| align-items: center; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| } | |
| .commit-hash { | |
| color: #f0883e; | |
| font-weight: 600; | |
| font-size: 13px; | |
| } | |
| .commit-branch { | |
| display: inline-block; | |
| padding: 2px 10px; | |
| border-radius: 12px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| .branch-career { background: rgba(56, 139, 253, 0.15); color: #58a6ff; } | |
| .branch-financial { background: rgba(240, 136, 62, 0.15); color: #f0883e; } | |
| .branch-health { background: rgba(63, 185, 80, 0.15); color: #3fb950; } | |
| .branch-relationship{ background: rgba(219, 97, 162, 0.15); color: #db61a2; } | |
| .branch-education { background: rgba(160, 110, 246, 0.15); color: #a06ef6; } | |
| .branch-housing { background: rgba(121, 192, 255, 0.15); color: #79c0ff; } | |
| .branch-lifestyle { background: rgba(210, 153, 34, 0.15); color: #d29922; } | |
| .branch-creative { background: rgba(255, 123, 114, 0.15); color: #ff7b72; } | |
| .branch-unknown { background: rgba(139, 148, 158, 0.15); color: #8b949e; } | |
| .commit-message { | |
| color: #e6edf3; | |
| font-size: 13px; | |
| flex: 1; | |
| } | |
| .commit-date { | |
| color: #484f58; | |
| font-size: 11px; | |
| margin-left: auto; | |
| } | |
| .commit-body { | |
| margin-top: 10px; | |
| padding-left: 4px; | |
| } | |
| .prediction-item { | |
| color: #8b949e; | |
| font-size: 12px; | |
| margin: 3px 0; | |
| padding-left: 12px; | |
| border-left: 1px solid #21262d; | |
| } | |
| .prediction-bug { color: #f85149; } | |
| .prediction-feature { color: #3fb950; } | |
| .prediction-neutral { color: #d29922; } | |
| .commit-card-thumb { | |
| width: 100px; | |
| height: 100px; | |
| border-radius: 8px; | |
| border: 1px solid #30363d; | |
| margin-top: 8px; | |
| object-fit: cover; | |
| } | |
| .outcome-badge { | |
| display: inline-block; | |
| padding: 3px 10px; | |
| border-radius: 4px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| margin-top: 8px; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| } | |
| .outcome-pending { background: rgba(210, 153, 34, 0.15); color: #d29922; } | |
| .outcome-positive { background: rgba(63, 185, 80, 0.15); color: #3fb950; } | |
| .outcome-negative { background: rgba(248, 81, 73, 0.15); color: #f85149; } | |
| .outcome-mixed { background: rgba(240, 136, 62, 0.15); color: #f0883e; } | |
| /* --- Results panel --- */ | |
| .results-panel { | |
| background: #161b22; | |
| border: 1px solid #30363d; | |
| border-radius: 10px; | |
| padding: 24px; | |
| } | |
| .results-panel h3 { | |
| color: #e6edf3; | |
| margin: 0 0 16px 0; | |
| font-size: 16px; | |
| } | |
| .category-badge { | |
| display: inline-block; | |
| padding: 4px 14px; | |
| border-radius: 16px; | |
| font-family: 'JetBrains Mono', monospace; | |
| font-size: 13px; | |
| font-weight: 600; | |
| } | |
| .severity-bar { | |
| height: 8px; | |
| border-radius: 4px; | |
| background: #21262d; | |
| overflow: hidden; | |
| margin: 8px 0; | |
| width: 100%; | |
| } | |
| .severity-fill { | |
| height: 100%; | |
| border-radius: 4px; | |
| transition: width 0.6s ease; | |
| } | |
| .severity-low { background: linear-gradient(90deg, #238636, #3fb950); } | |
| .severity-medium { background: linear-gradient(90deg, #9e6a03, #d29922); } | |
| .severity-high { background: linear-gradient(90deg, #da3633, #f85149); } | |
| /* --- Stats cards --- */ | |
| .stat-card { | |
| background: #161b22; | |
| border: 1px solid #30363d; | |
| border-radius: 10px; | |
| padding: 20px; | |
| text-align: center; | |
| } | |
| .stat-value { | |
| font-size: 36px; | |
| font-weight: 700; | |
| color: #22c55e; | |
| font-family: 'JetBrains Mono', monospace; | |
| line-height: 1; | |
| } | |
| .stat-label { | |
| font-size: 11px; | |
| color: #8b949e; | |
| text-transform: uppercase; | |
| letter-spacing: 1.5px; | |
| margin-top: 8px; | |
| } | |
| /* --- Empty state --- */ | |
| .empty-state { | |
| text-align: center; | |
| padding: 60px 20px; | |
| color: #484f58; | |
| font-family: 'JetBrains Mono', monospace; | |
| } | |
| .empty-state .icon { | |
| font-size: 48px; | |
| margin-bottom: 16px; | |
| opacity: 0.5; | |
| } | |
| .empty-state p { | |
| font-size: 14px; | |
| max-width: 400px; | |
| margin: 0 auto; | |
| line-height: 1.6; | |
| } | |
| /* --- Custom scrollbar --- */ | |
| ::-webkit-scrollbar { width: 6px; } | |
| ::-webkit-scrollbar-track { background: #0d1117; } | |
| ::-webkit-scrollbar-thumb { background: #30363d; border-radius: 3px; } | |
| ::-webkit-scrollbar-thumb:hover { background: #484f58; } | |
| /* --- Button glow --- */ | |
| button.primary { | |
| box-shadow: 0 0 16px rgba(34, 197, 94, 0.15) !important; | |
| transition: box-shadow 0.3s !important; | |
| } | |
| button.primary:hover { | |
| box-shadow: 0 0 24px rgba(34, 197, 94, 0.3) !important; | |
| } | |
| /* --- Markdown in dark theme --- */ | |
| .prose, .markdown-text { | |
| color: #e6edf3 !important; | |
| } | |
| .prose h2, .prose h3, .prose h4 { | |
| color: #22c55e !important; | |
| font-family: 'JetBrains Mono', monospace !important; | |
| } | |
| .prose strong { color: #e6edf3 !important; } | |
| .prose code { | |
| background: #21262d !important; | |
| color: #f0883e !important; | |
| padding: 2px 6px !important; | |
| border-radius: 4px !important; | |
| } | |
| /* --- Loading animation --- */ | |
| @keyframes pulse-green { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.5; } | |
| } | |
| .loading-pulse { | |
| animation: pulse-green 1.5s ease-in-out infinite; | |
| color: #22c55e; | |
| font-family: 'JetBrains Mono', monospace; | |
| } | |
| """ | |