Spaces:
Sleeping
Sleeping
| /* -------------------------------------------------------------------------- | |
| CL Compiler — dark theme (Geist). | |
| Strategy: | |
| - Reset every Gradio `.block` wrapper to be transparent (no card). | |
| - Apply card-style background/border only on the inner components we | |
| actually want to look like cards: the code editor, dropdowns, tables. | |
| -------------------------------------------------------------------------- */ | |
| @import url('https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap'); | |
| /* === Page foundation === */ | |
| html, body, gradio-app, .gradio-container { | |
| background: #000 ; | |
| color: #ededed ; | |
| } | |
| .gradio-container { | |
| font-family: 'Geist', -apple-system, BlinkMacSystemFont, Arial, sans-serif ; | |
| font-feature-settings: 'liga' 1, 'calt' 1 ; | |
| max-width: 860px ; | |
| margin: 0 auto ; | |
| padding: 80px 24px 96px ; | |
| } | |
| .cm-editor, code, pre, | |
| .gradio-container .dataframe td, | |
| .gradio-container .dataframe th, | |
| .gradio-container table td, | |
| .gradio-container table th { | |
| font-family: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace ; | |
| font-feature-settings: 'liga' 1 ; | |
| } | |
| /* === Reset block wrappers (Gradio wraps every component in .block) === */ | |
| .gradio-container .block, | |
| .gradio-container .form, | |
| .gradio-container .gr-block, | |
| .gradio-container .gr-form { | |
| background: transparent ; | |
| border: none ; | |
| box-shadow: none ; | |
| padding: 0 ; | |
| overflow: visible ; | |
| } | |
| /* Markdown rendering wrappers must not introduce horizontal scroll | |
| (HF Spaces injects overflow-x: auto on .prose, which makes headings | |
| look like scrollable strips when the iframe is narrow). */ | |
| .gradio-container .prose, | |
| .gradio-container .markdown, | |
| .gradio-container .md { | |
| overflow: visible ; | |
| max-width: 100% ; | |
| } | |
| /* === Header === */ | |
| .app-header h1 { | |
| font-size: clamp(36px, 8vw, 56px) ; | |
| font-weight: 600 ; | |
| letter-spacing: -2.4px ; | |
| line-height: 1.05 ; | |
| text-align: center ; | |
| color: #ededed ; | |
| margin: 0 0 16px 0 ; | |
| overflow: visible ; | |
| overflow-wrap: anywhere ; | |
| white-space: normal ; | |
| max-width: 100% ; | |
| } | |
| .app-subtitle, .app-subtitle p { | |
| text-align: center ; | |
| color: #a3a3a3 ; | |
| font-size: 17px ; | |
| line-height: 1.6 ; | |
| margin: 0 auto 16px ; | |
| max-width: 560px ; | |
| } | |
| .app-authors, .app-authors p { | |
| text-align: center ; | |
| color: #666 ; | |
| font-size: 12px ; | |
| font-family: 'Geist Mono', monospace ; | |
| letter-spacing: 0.04em ; | |
| margin: 0 auto 56px ; | |
| } | |
| /* === Phase sections === */ | |
| .phase-section { margin-top: 64px ; } | |
| .phase-marker p { | |
| color: #666 ; | |
| font-size: 11px ; | |
| font-weight: 500 ; | |
| text-transform: uppercase ; | |
| letter-spacing: 0.14em ; | |
| font-family: 'Geist Mono', monospace ; | |
| margin: 0 0 8px 0 ; | |
| } | |
| .phase-title h2 { | |
| font-size: clamp(24px, 5vw, 32px) ; | |
| font-weight: 600 ; | |
| letter-spacing: -1.12px ; | |
| color: #ededed ; | |
| line-height: 1.15 ; | |
| margin: 0 0 12px 0 ; | |
| overflow: visible ; | |
| overflow-wrap: anywhere ; | |
| white-space: normal ; | |
| max-width: 100% ; | |
| } | |
| .phase-desc p { | |
| color: #a3a3a3 ; | |
| font-size: 15px ; | |
| line-height: 1.6 ; | |
| margin: 0 0 24px 0 ; | |
| max-width: 640px ; | |
| } | |
| /* === Status pill row === */ | |
| .status-row { | |
| text-align: center ; | |
| padding: 24px 0 8px 0 ; | |
| min-height: 32px ; | |
| } | |
| .status-row p { | |
| margin: 0 ; | |
| text-align: center ; | |
| line-height: 2 ; | |
| } | |
| /* === Footer === */ | |
| .footer-note p { | |
| text-align: center ; | |
| color: #666 ; | |
| font-size: 13px ; | |
| font-family: 'Geist Mono', monospace ; | |
| margin-top: 80px ; | |
| } | |
| /* === Labels (above inputs) === */ | |
| .gradio-container .block-label, | |
| .gradio-container span[data-testid="block-label"], | |
| .gradio-container .label-wrap > span:first-child, | |
| .gradio-container label > span:first-child { | |
| color: #a3a3a3 ; | |
| font-size: 11px ; | |
| font-weight: 500 ; | |
| text-transform: uppercase ; | |
| letter-spacing: 0.08em ; | |
| font-family: 'Geist Mono', monospace ; | |
| background: transparent ; | |
| margin-bottom: 8px ; | |
| } | |
| /* === Dropdown === */ | |
| .gradio-container .gr-dropdown, | |
| .gradio-container [data-testid="dropdown"], | |
| .gradio-container div[role="combobox"], | |
| .gradio-container .wrap.svelte-1ipelgc { | |
| background: #0a0a0a ; | |
| border: 1px solid rgba(255, 255, 255, 0.10) ; | |
| border-radius: 8px ; | |
| transition: border-color 0.15s ease ; | |
| } | |
| .gradio-container [data-testid="dropdown"]:hover { border-color: rgba(255, 255, 255, 0.18) ; } | |
| .gradio-container .wrap input, | |
| .gradio-container [data-testid="dropdown"] input { | |
| background: transparent ; | |
| color: #ededed ; | |
| font-family: 'Geist', sans-serif ; | |
| font-size: 14px ; | |
| padding: 10px 14px ; | |
| border: none ; | |
| } | |
| /* === Code editor (CodeMirror) === */ | |
| .cm-editor { | |
| background: #0a0a0a ; | |
| border: 1px solid rgba(255, 255, 255, 0.10) ; | |
| border-radius: 8px ; | |
| color: #ededed ; | |
| font-size: 14px ; | |
| overflow: hidden ; | |
| } | |
| .cm-editor .cm-content { padding: 16px ; caret-color: #3b9eff ; } | |
| .cm-editor .cm-line { color: #ededed ; } | |
| .cm-editor .cm-gutters { | |
| background: transparent ; | |
| color: #555 ; | |
| border-right: 1px solid rgba(255, 255, 255, 0.06) ; | |
| } | |
| .cm-editor.cm-focused { | |
| border-color: rgba(59, 158, 255, 0.5) ; | |
| box-shadow: 0 0 0 4px rgba(59, 158, 255, 0.12) ; | |
| outline: none ; | |
| } | |
| .cm-editor .cm-cursor { border-left-color: #3b9eff ; } | |
| .cm-editor .cm-selectionBackground { background: rgba(59, 158, 255, 0.20) ; } | |
| .cm-editor .cm-activeLine { background: rgba(255, 255, 255, 0.02) ; } | |
| /* Hide CodeMirror "no content" placeholder icon */ | |
| .cm-editor .cm-placeholder { color: #444 ; font-style: normal ; } | |
| /* === Compile button === */ | |
| .gradio-container button.primary, | |
| .gradio-container button.lg.primary { | |
| background: #ededed ; | |
| color: #000 ; | |
| border: none ; | |
| border-radius: 8px ; | |
| font-family: 'Geist', sans-serif ; | |
| font-weight: 500 ; | |
| font-size: 15px ; | |
| padding: 14px 24px ; | |
| width: 100% ; | |
| cursor: pointer ; | |
| transition: background 0.15s ease ; | |
| margin-top: 16px ; | |
| } | |
| .gradio-container button.primary:hover { background: #fff ; } | |
| .gradio-container button.primary:active { transform: translateY(1px); } | |
| /* === Tables === */ | |
| .gradio-container table, | |
| .gradio-container .dataframe table { | |
| border-collapse: separate ; | |
| border-spacing: 0 ; | |
| width: 100% ; | |
| background: #0a0a0a ; | |
| border: 1px solid rgba(255, 255, 255, 0.08) ; | |
| border-radius: 8px ; | |
| overflow: hidden ; | |
| } | |
| .gradio-container table th { | |
| background: #0f0f0f ; | |
| color: #a3a3a3 ; | |
| font-size: 11px ; | |
| font-weight: 500 ; | |
| text-transform: uppercase ; | |
| letter-spacing: 0.08em ; | |
| font-family: 'Geist Mono', monospace ; | |
| padding: 12px 16px ; | |
| text-align: left ; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.08) ; | |
| border-right: none ; | |
| } | |
| .gradio-container table td { | |
| color: #ededed ; | |
| background: transparent ; | |
| font-family: 'Geist Mono', monospace ; | |
| font-size: 13px ; | |
| padding: 11px 16px ; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.05) ; | |
| border-right: none ; | |
| } | |
| .gradio-container table tr:last-child td { border-bottom: none ; } | |
| .gradio-container table tr:hover td { background: rgba(255, 255, 255, 0.02) ; } | |
| /* Empty-state placeholder for dataframe */ | |
| .gradio-container .dataframe-wrap > div:empty { | |
| min-height: 60px ; | |
| } | |
| /* === Hide Gradio chrome we don't want === */ | |
| footer { display: none ; } | |
| .gradio-container .show-api, | |
| .gradio-container .built-with, | |
| .gradio-container .icon-buttons-vertical { display: none ; } | |
| /* === AST mermaid graph view === */ | |
| .ast-view { width: 100% ; } | |
| .ast-mermaid { | |
| background: #0a0a0a ; | |
| border: 1px solid rgba(255, 255, 255, 0.08) ; | |
| border-radius: 8px ; | |
| padding: 24px 16px ; | |
| overflow: auto ; | |
| max-height: 720px ; | |
| text-align: center; | |
| } | |
| /* The raw mermaid source is replaced with an SVG by mermaid.js. | |
| Hide the source while it's still pre-render so the user doesn't | |
| see the dot-syntax flash. */ | |
| .ast-mermaid pre.mermaid { | |
| background: transparent ; | |
| color: transparent ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| font-family: 'Geist Mono', monospace ; | |
| font-size: 12px ; | |
| text-align: center; | |
| min-height: 60px; | |
| } | |
| .ast-mermaid pre.mermaid[data-processed="true"] { | |
| color: inherit ; | |
| } | |
| .ast-mermaid svg { | |
| background: transparent ; | |
| max-width: 100% ; | |
| height: auto ; | |
| display: inline-block; | |
| } | |
| /* Edge labels (condition / then / else / init / limit / body) */ | |
| .ast-mermaid .edgeLabel { | |
| background: #0a0a0a ; | |
| color: #ff9659 ; | |
| font-family: 'Geist Mono', monospace ; | |
| font-size: 11px ; | |
| padding: 2px 6px ; | |
| } | |
| .ast-mermaid .edgeLabel rect { fill: #0a0a0a ; } | |
| /* Empty / placeholder state (no AST yet) */ | |
| .ast-mermaid-empty { | |
| background: #0a0a0a ; | |
| border: 1px dashed rgba(255, 255, 255, 0.12) ; | |
| border-radius: 8px ; | |
| padding: 60px 16px ; | |
| color: #555 ; | |
| font-family: 'Geist Mono', monospace ; | |
| font-size: 13px ; | |
| text-align: center ; | |
| } | |
| /* === Selection === */ | |
| ::selection { background: rgba(59, 158, 255, 0.30); color: #fff; } | |