Download app.css from yadayana/Knowledge-Graph-Visualization: direct link, hf CLI and curl.
- Browser
- Download file 12.5 kB
-
https://huggingface.co/spaces/yadayana/Knowledge-Graph-Visualization/resolve/main/app.css
- Command line
-
hf download hf://spaces/yadayana/Knowledge-Graph-Visualization/app.css
-
curl -L -o app.css https://huggingface.co/spaces/yadayana/Knowledge-Graph-Visualization/resolve/main/app.css
12.5 kB
| :root { | |
| --brand-blue: #17428f; | |
| --brand-orange: #f39719; | |
| --text-dark: #111827; /* very dark grey (near black) */ | |
| --text-gray: #4B5563; /* medium grey for messages */ | |
| color-scheme: only light; | |
| } | |
| /* Base */ | |
| body, .gradio-container { | |
| /* Default Gradio font will be used */ | |
| background: linear-gradient(135deg, var(--brand-blue) 0%, var(--brand-orange) 100%); | |
| min-height: 100vh; | |
| color: var(--text-dark); | |
| } | |
| /* Logo size */ | |
| /* Logo size */ | |
| /*#company-logo img { | |
| width: 40px !important; | |
| min-width: 40px !important; | |
| height: auto !important; | |
| object-fit: contain !important; | |
| display: block !important; | |
| }*/ | |
| /* Top bar transparent */ | |
| #topbar { background: transparent ; } | |
| /* Header text over gradient */ | |
| #header h1, #header h2, #header h3, #header h4, #header h5, #header h6, | |
| #header p { | |
| color: #ffffff; | |
| text-align: center; | |
| } | |
| #header2 h1, #header2 h2, #header2 h3, #header2 h4, #header2 h5, #header2 h6, | |
| #header2 p { | |
| color: #ffffff; | |
| text-align: center; | |
| } | |
| /* Chatbox container */ | |
| #chatbot { | |
| height: 100%; | |
| border-radius: 14px; | |
| border: 2px solid var(--brand-blue); | |
| background-color: #ffffff; | |
| padding: 8px; | |
| overflow-y: auto; | |
| /* Icon tint tokens for local use (chat area) */ | |
| --icon-light: #9CA3AF; | |
| --icon-hover: #6B7280; | |
| } | |
| /* ----------------------------- */ | |
| /* TEXT COLORING (SAFE FOR CODE) */ | |
| /* ----------------------------- */ | |
| /* Apply the gray text color only at the message container level. | |
| Do NOT set color on descendants or code tokens. */ | |
| #chatbot .message { | |
| color: var(--text-gray); /* no !important */ | |
| } | |
| /* Bubble styling */ | |
| #chatbot .message.user { | |
| background: #fff4e1; | |
| border-radius: 10px; | |
| padding: 6px 12px; | |
| text-align: right; | |
| } | |
| #chatbot .message.bot { | |
| background: #f0f0f0; | |
| border-radius: 10px; | |
| padding: 6px 12px; | |
| text-align: left; | |
| } | |
| /* Markdown horizontal rules inside chatbot */ | |
| #chatbot hr { | |
| margin: 6px 0; /* reduce extra space */ | |
| border: none; /* remove default bevel */ | |
| border-top: 1px solid #d1d5db; /* subtle gray line */ | |
| } | |
| /* Fallback selectors for other Gradio versions */ | |
| #chatbot [data-testid*="message"] { | |
| border-radius: 10px; | |
| padding: 6px 12px; | |
| } | |
| #chatbot [data-testid="user-message"] { | |
| background: #fff4e1; | |
| text-align: right; | |
| } | |
| #chatbot [data-testid="assistant-message"] { | |
| background: #f0f0f0; | |
| text-align: left; | |
| } | |
| /* ----------------------------- */ | |
| /* CODE BLOCKS (DO NOT SET COLOR)*/ | |
| /* ----------------------------- */ | |
| /* Give code blocks a readable container without touching colors. | |
| This preserves syntax highlighting from highlight.js or Prism. */ | |
| #chatbot pre, | |
| #chatbot pre code, | |
| #chatbot code[class*="language-"], | |
| #chatbot pre[class*="language-"], | |
| #chatbot code.hljs { | |
| background: #f8fafc; /* light neutral background */ | |
| border-radius: 8px; | |
| padding: 10px 12px; | |
| display: block; | |
| overflow-x: auto; | |
| /* IMPORTANT: no 'color' declaration here */ | |
| } | |
| /* Inline code (single backticks) */ | |
| #chatbot :not(pre) > code { | |
| background: #f1f5f9; | |
| padding: 0.15rem 0.35rem; | |
| border-radius: 6px; | |
| /* no 'color' here */ | |
| } | |
| /* ---------------------------------- */ | |
| /* Inputs */ | |
| /* ---------------------------------- */ | |
| input[type="text"], textarea, .gr-text-input input, .gr-textbox textarea { | |
| border-radius: 10px; | |
| padding: 10px; | |
| font-size: 16px; | |
| border: 2px solid var(--brand-orange); | |
| } | |
| input:focus, textarea:focus, .gr-text-input input:focus, .gr-textbox textarea:focus { | |
| border-color: var(--brand-blue); | |
| outline: none; | |
| box-shadow: 0 0 6px rgba(23, 66, 143, 0.5); | |
| } | |
| /* ---------------------------------- */ | |
| /* Buttons (global gradient) */ | |
| /* ---------------------------------- */ | |
| .gr-button, button { | |
| border-radius: 10px; | |
| font-weight: 600; | |
| background: linear-gradient(90deg, var(--brand-blue), var(--brand-orange)); | |
| color: white; | |
| border: none; | |
| } | |
| .gr-button:hover, button:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 4px 8px rgba(0,0,0,0.2); | |
| } | |
| /* ---------------------------------- */ | |
| /* Chat area: icon-only buttons */ | |
| /* ---------------------------------- */ | |
| /* Tint SVG icons */ | |
| #chatbot button svg, | |
| #chatbot [role="button"] svg, | |
| #chatbot .icon svg, | |
| #chatbot [class*="icon"] svg, | |
| #chatbot [data-testid*="icon"] svg, | |
| #chatbot [data-testid*="message"] .tools svg, | |
| #chatbot .message-tools svg { | |
| color: var(--icon-light) ; | |
| fill: var(--icon-light) ; | |
| stroke: var(--icon-light) ; | |
| opacity: 0.95; | |
| } | |
| /* Remove gradient background only on small icon-only buttons */ | |
| #chatbot :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient) { | |
| background: transparent ; | |
| background-image: none ; | |
| border: none ; | |
| box-shadow: none ; | |
| padding: 6px ; | |
| border-radius: 8px ; | |
| color: var(--icon-light) ; | |
| } | |
| /* Hover/focus/active states */ | |
| #chatbot :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient):hover { | |
| background-color: rgba(0,0,0,0.05) ; | |
| } | |
| #chatbot :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient):focus-visible { | |
| outline: none ; | |
| box-shadow: 0 0 0 2px rgba(23, 66, 143, 0.35) ; | |
| background-color: rgba(0,0,0,0.06) ; | |
| } | |
| #chatbot :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient):active { | |
| background-color: rgba(0,0,0,0.08) ; | |
| } | |
| /* Optional 'danger' icons */ | |
| #chatbot .danger svg { | |
| color: var(--icon-light) ; | |
| fill: var(--icon-light) ; | |
| stroke: var(--icon-light) ; | |
| } | |
| #chatbot .danger:hover svg { | |
| color: #ef4444 ; | |
| fill: #ef4444 ; | |
| stroke: #ef4444 ; | |
| } | |
| /* ---------------------------------- */ | |
| /* TOP BAR (logo block): icon-only */ | |
| /* ---------------------------------- */ | |
| #topbar { background: transparent ; } | |
| #topbar { --icon-light: #9CA3AF; --icon-hover: #6B7280; } | |
| #topbar .gr-button.keep-gradient, | |
| #topbar .gr-button:not(:has(svg)) { | |
| background: linear-gradient(90deg, var(--brand-blue), var(--brand-orange)) ; | |
| color: #fff ; | |
| } | |
| /* Icon-only buttons in topbar: transparent */ | |
| #topbar :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient) { | |
| background: transparent ; | |
| border: none ; | |
| box-shadow: none ; | |
| padding: 6px ; | |
| border-radius: 8px ; | |
| color: var(--icon-light) ; | |
| } | |
| /* Tint SVGs in topbar */ | |
| #topbar :is(button,[role="button"]):has(> svg) > svg { | |
| color: var(--icon-light) ; | |
| fill: var(--icon-light) ; | |
| stroke: var(--icon-light) ; | |
| opacity: 0.95; | |
| } | |
| /* Hover/focus/active for topbar icons */ | |
| #topbar :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient):hover { | |
| background-color: rgba(0,0,0,0.05) ; | |
| } | |
| #topbar :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient):focus-visible { | |
| outline: none ; | |
| box-shadow: 0 0 0 2px rgba(23, 66, 143, 0.35) ; | |
| background-color: rgba(0,0,0,0.06) ; | |
| } | |
| #topbar :is(button,[role="button"]):is([aria-label],[title], :has(> svg)):not(.keep-gradient):active { | |
| background-color: rgba(0,0,0,0.08) ; | |
| } | |
| /* Ensure the textbox wrapper is relative */ | |
| #message-box { | |
| width: 100%; | |
| border-radius: 9999px; | |
| border: 2px solid var(--brand-orange); | |
| font-size: 16px; | |
| outline: none; | |
| position: relative; /* needed for absolute button */ | |
| } | |
| #message-box:focus { | |
| border-color: var(--brand-blue); | |
| box-shadow: 0 0 6px rgba(23, 66, 143, 0.3); | |
| } | |
| /* Send button positioned inside textbox */ | |
| #send-button { | |
| position: absolute; | |
| right: 34px; /* move left by increasing this value */ | |
| top: 48px; /* move down by increasing this value */ | |
| transform: translateY(-16%); | |
| width: 36px; | |
| height: 36px; | |
| min-width: 0 ; | |
| padding: 0 ; | |
| border-radius: 50%; | |
| background: linear-gradient(90deg, var(--brand-blue), var(--brand-orange)); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border: none; | |
| color: white; | |
| font-size: 18px; | |
| cursor: pointer; | |
| z-index: 2; | |
| } | |
| #send-button:hover { | |
| transform: translateY(-16%) scale(1.05); | |
| box-shadow: 0 4px 12px rgba(0,0,0,0.2); | |
| } | |
| #send-button:active { | |
| transform: translateY(-16%) scale(0.95); | |
| } | |
| /* Compact upload area - lighter and transparent */ | |
| #file-upload .upload-box, | |
| #file-upload .file-wrap, | |
| #file-upload .wrap { | |
| min-height: 80px; | |
| padding: 8px 12px; | |
| color: #666 ; /* Softer text color */ | |
| background: transparent ; /* No white block, shows gradient */ | |
| border: none ; /* Remove any border */ | |
| } | |
| /* Inner placeholder (remove gray square) */ | |
| #file-upload .upload-box div, | |
| #file-upload .upload-box span { | |
| background: transparent ; /* Remove gray background */ | |
| } | |
| /* Text and icons slightly lighter */ | |
| #file-upload .upload-box, | |
| #file-upload .file-wrap, | |
| #file-upload .wrap { | |
| color: #666 ; | |
| fill: #666 ; | |
| stroke: #666 ; | |
| } | |
| /* Buttons remain clean */ | |
| #file-upload button, | |
| #file-upload [role="button"] { | |
| background: transparent ; | |
| border: none ; | |
| box-shadow: none ; | |
| border-radius: 0 ; | |
| padding: 4px ; | |
| color: #666 ; | |
| } | |
| /* SVG icons */ | |
| #file-upload button svg, | |
| #file-upload [role="button"] svg { | |
| color: #666 ; | |
| fill: #666 ; | |
| stroke: #666 ; | |
| background: none ; | |
| } | |
| /* Hover effect */ | |
| #file-upload button:hover svg, | |
| #file-upload [role="button"]:hover svg { | |
| color: #2a5db0 ; | |
| fill: #2a5db0 ; | |
| stroke: #2a5db0 ; | |
| } | |
| /* Hide Gradio's default control buttons in the header/topbar */ | |
| #topbar .gr-button, | |
| #topbar [role="button"], | |
| #header-container .gr-button, | |
| #header-container [role="button"] { | |
| display: none ; | |
| } | |
| #upload-note, #upload-note * { | |
| color: #ffffff ; | |
| } | |
| .gradio-container [id="left-column"] { | |
| min-width: 40px ; /* Increased from 10px */ | |
| max-width: 320px ; /* You can go up to 400px if you want even wider */ | |
| width: 180px ; /* Increased from 100px */ | |
| flex: 0 0 220px ; /* Increased from 180px */ | |
| padding-right: 12px ; /* Slightly more padding for visual separation */ | |
| } | |
| .gradio-container [id="right-column"] { | |
| flex: 1 1 0 ; | |
| width: auto ; | |
| min-width: 0 ; | |
| padding-left: 0 ; | |
| } | |
| /* Branding layout */ | |
| #branding { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; /* space between text and logo */ | |
| justify-content: center; | |
| } | |
| /* Text style */ | |
| #brand-text { | |
| font-size: 1.6rem; | |
| font-weight: 700; | |
| color: white; | |
| line-height: 1; | |
| } | |
| /* Logo sizing */ | |
| #company-logo { | |
| width: 40px; /* set exact width */ | |
| height: auto; /* preserve proportions */ | |
| display: block; | |
| object-fit: contain; | |
| } | |
| /* ---- Viewport-safe base (handles mobile address bar) ---- */ | |
| html, body, .gradio-container { | |
| height: 100dvh; /* dynamic viewport height */ | |
| min-height: 100dvh; | |
| } | |
| /* ---- Make sure all flex ancestors allow their children to shrink ---- */ | |
| .gradio-container .gr-row, | |
| .gradio-container .gr-row > .gr-column, | |
| .gradio-container > .gr-row, | |
| .gradio-container .gr-column, | |
| #right-column, | |
| #chat-area { | |
| min-height: 0 ; /* critical so inner scroll can happen */ | |
| } | |
| /* ---- Chatbot outer box: cap height and scroll inside ---- */ | |
| #chatbot { | |
| box-sizing: border-box; | |
| flex: 1 1 auto; | |
| min-height: 0 ; | |
| height: auto ; | |
| max-height: calc(100dvh - var(--topbar-offset, 0px) - 120px) ; | |
| overflow-y: auto ; | |
| } | |
| /* ---- Gradio’s inner wrappers sometimes need explicit constraints ---- */ | |
| /* Gradio v4: Chatbot renders inside .gr-chatbot -> .wrap / .message-wrap depending on version */ | |
| #chatbot .wrap, | |
| #chatbot .message-wrap, | |
| #chatbot [data-testid="chatbot"] { | |
| max-height: 100%; | |
| overflow-y: auto; | |
| min-height: 0; | |
| } | |
| /* Optional: if you see the input row pushing the chat up/down on small screens, | |
| let the input take only its content height. */ | |
| #input-row { | |
| flex: 0 0 auto; | |
| } | |
| /* If your header/progress box is above the chat, ensure it doesn't consume flex growth */ | |
| #chat-area > *:not(#chatbot) { | |
| flex: 0 0 auto; | |
| } |