FinalProjectAPP / style.css
teomello's picture
Upload 3 files
3a8b2e0 verified
/* =========================
GLOBAL BACKGROUND (NYC)
========================= */
gradio-app,
.gradio-app,
.main,
#app,
[data-testid="app"],
html,
body {
background: url("https://huggingface.co/spaces/teomello/FinalProjectAPP/resolve/main/Z2kAxe.jpg") no-repeat center center fixed !important;
background-size: cover !important;
min-height: 100vh !important;
margin: 0 !important;
padding: 0 !important;
}
/* Overlay for readability */
gradio-app::before,
.gradio-app::before,
.main::before,
#app::before,
[data-testid="app"]::before {
content: "" !important;
position: fixed !important;
inset: 0 !important;
background: rgba(0, 0, 0, 0.30) !important;
pointer-events: none !important;
z-index: 0 !important;
}
/* Remove any previous bottom banner */
body::after {
content: none !important;
}
/* =========================
MAIN CONTAINER
========================= */
.gradio-container {
position: relative !important;
z-index: 1 !important;
max-width: 1400px !important;
width: 94vw !important;
margin: 0 auto !important;
padding-top: 180px !important;
padding-bottom: 120px !important;
background: transparent !important;
}
/* =========================
TITLE / HERO
========================= */
/* Optional: add a dark panel behind title/subtitle for readability */
#escp_title {
background: rgba(0, 0, 0, 0.45) !important;
padding: 20px !important;
border-radius: 12px !important;
max-width: 1100px !important;
margin: 0 auto 18px auto !important;
}
#escp_title h1 {
color: rgb(242,198,55) !important;
font-size: 3rem !important;
font-weight: 800 !important;
text-align: center !important;
margin: 0 0 12px 0 !important;
}
/* Subtitle more visible */
#escp_title p,
#escp_title em {
color: rgba(255,255,255,0.98) !important;
font-size: 1.1rem !important;
font-weight: 500 !important;
text-align: center !important;
max-width: 900px !important;
margin: 0 auto 6px auto !important;
line-height: 1.5 !important;
}
/* =========================
TABS
========================= */
.tabs > .tab-nav,
.tab-nav,
div[role="tablist"],
.svelte-tabs > .tab-nav {
background: rgba(0, 0, 0, 0.45) !important;
border-radius: 10px 10px 0 0 !important;
padding: 4px !important;
}
/* ALL tab buttons */
.tabs > .tab-nav button,
.tab-nav button,
div[role="tablist"] button,
button[role="tab"],
.svelte-tabs button,
.tab-nav > button,
.tabs button {
color: #ffffff !important;
font-weight: 600 !important;
border: none !important;
background: transparent !important;
padding: 10px 20px !important;
border-radius: 8px 8px 0 0 !important;
opacity: 1 !important;
}
/* Selected tab */
.tabs > .tab-nav button.selected,
.tab-nav button.selected,
button[role="tab"][aria-selected="true"],
button[role="tab"].selected,
div[role="tablist"] button[aria-selected="true"],
.svelte-tabs button.selected {
color: rgb(242, 198, 55) !important;
background: rgba(255, 255, 255, 0.15) !important;
}
/* Unselected tabs visibility */
.tabs > .tab-nav button:not(.selected),
.tab-nav button:not(.selected),
button[role="tab"][aria-selected="false"],
button[role="tab"]:not(.selected),
div[role="tablist"] button:not([aria-selected="true"]) {
color: #ffffff !important;
opacity: 1 !important;
}
/* =========================
PANELS / CARDS
========================= */
.gradio-container .gr-block,
.gradio-container .gr-box,
.gradio-container .gr-panel,
.gradio-container .gr-group {
background: rgba(255, 255, 255, 0.96) !important;
border-radius: 12px !important;
}
/* Tab content */
.tabitem {
background: rgba(255, 255, 255, 0.95) !important;
border-radius: 0 0 12px 12px !important;
padding: 16px !important;
}
/* =========================
INPUTS
========================= */
.gradio-container input,
.gradio-container textarea,
.gradio-container select {
background: #ffffff !important;
border: 1px solid #d1d5db !important;
border-radius: 8px !important;
}
/* =========================
EXECUTION LOG (terminal style)
Force black background + white text
========================= */
/* Execution log: terminal dark style — scope to run_log only.
The Gradio Textbox with lines>=10 gets a [data-testid="textbox"] container.
We target it by excluding the AI chat input. */
.gradio-container [data-testid="textbox"]:not(#ai_chat_input) textarea,
.gradio-container .gr-textbox:not(#ai_chat_input) textarea {
background-color: #111111 !important;
color: #eaeaea !important;
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
font-size: 0.85rem !important;
border-radius: 10px !important;
padding: 12px !important;
border: 1px solid rgba(255,255,255,0.18) !important;
}
.gradio-container [data-testid="textbox"]:not(#ai_chat_input) textarea::placeholder {
color: rgba(255,255,255,0.55) !important;
}
/* AI chat input: clean white box */
#ai_chat_input textarea {
background-color: #ffffff !important;
color: #111111 !important;
font-family: inherit !important;
font-size: 0.95rem !important;
border-radius: 8px !important;
padding: 10px 12px !important;
border: 1px solid #d1d5db !important;
}
#ai_chat_input textarea::placeholder {
color: #9ca3af !important;
}
/* =========================
BUTTONS
========================= */
/* Only style "real" action buttons, not icon toolbar buttons or thumbnails */
.gradio-container button:not([role="tab"]):not(.icon-button):not(.thumbnail-item):not([class*="thumbnail"]) {
font-weight: 600 !important;
padding: 10px 16px !important;
border-radius: 10px !important;
}
button.primary {
background-color: rgb(40, 9, 109) !important;
color: #ffffff !important;
border: none !important;
}
button.primary:hover {
background-color: rgb(60, 20, 140) !important;
}
button.secondary {
background-color: #ffffff !important;
color: rgb(40, 9, 109) !important;
border: 2px solid rgb(40, 9, 109) !important;
}
button.secondary:hover {
background-color: rgb(240, 238, 250) !important;
}
/* =========================
DATAFRAMES / TABLES
========================= */
[data-testid="dataframe"] {
background-color: #ffffff !important;
border-radius: 10px !important;
}
table {
font-size: 0.85rem !important;
}
/* =========================
CHATBOT (AI Dashboard)
========================= */
.gr-chatbot {
min-height: 380px !important;
background-color: #ffffff !important;
border-radius: 12px !important;
}
.gr-chatbot .message.user {
background-color: rgb(232, 225, 250) !important;
border-radius: 12px !important;
}
.gr-chatbot .message.bot {
background-color: #f3f4f6 !important;
border-radius: 12px !important;
}
/* =========================
GALLERY
========================= */
.gallery {
background: #ffffff !important;
border-radius: 10px !important;
}
/* =========================
MARKDOWN HEADINGS
========================= */
.tabitem h3 {
color: rgb(40, 9, 109) !important;
font-weight: 700 !important;
}
.tabitem h4 {
color: #374151 !important;
}
/* =========================
EXAMPLES ROW (AI Dashboard)
========================= */
.examples-row button {
background: rgb(240, 238, 250) !important;
color: rgb(40, 9, 109) !important;
border: 1px solid rgb(40, 9, 109) !important;
border-radius: 8px !important;
font-size: 0.85rem !important;
}
.examples-row button:hover {
background: rgb(232, 225, 250) !important;
}
/* =========================
HEADER / FOOTER CLEANUP
========================= */
header,
footer,
header *,
footer * {
background: transparent !important;
box-shadow: none !important;
}
/* Hover state */
.gradio-container .gr-modal button:hover,
.gradio-container .gallery button:hover {
background: rgb(240, 238, 250) !important;
}
/* =========================
FIX: Image viewer icon-button toolbar (Download/Fullscreen/Share/Close)
These use SVG with fill/stroke="currentColor", so we must set a visible color.
Targets .icon-button class directly — works for gr.Image AND gallery lightbox.
========================= */
.gradio-container button.icon-button,
.gradio-container .icon-button,
button.icon-button,
.icon-button {
color: #374151 !important; /* dark gray — visible on white bg */
background: rgba(255,255,255,0.90) !important;
border-radius: 8px !important;
padding: 4px !important; /* keep compact — these are icon-only buttons */
}
.gradio-container button.icon-button:hover,
.gradio-container .icon-button:hover,
button.icon-button:hover,
.icon-button:hover {
background: rgba(232, 225, 250, 0.95) !important;
color: rgb(40, 9, 109) !important;
}
/* Ensure SVGs inside icon-buttons inherit the visible color */
.gradio-container button.icon-button svg,
.gradio-container .icon-button svg,
button.icon-button svg,
.icon-button svg {
color: inherit !important;
stroke: currentColor;
}
/* Also cover any toolbar buttons wrapped in [role=dialog] (older Gradio) */
.gradio-container [role="dialog"] button[aria-label]:not(.icon-button),
.gradio-container [role="dialog"] button[title]:not(.icon-button) {
background: rgba(255,255,255,0.95) !important;
border: 1px solid rgba(40, 9, 109, 0.40) !important;
border-radius: 10px !important;
color: rgb(40, 9, 109) !important;
}
.gradio-container [role="dialog"] button[aria-label]:not(.icon-button) svg,
.gradio-container [role="dialog"] button[title]:not(.icon-button) svg {
color: rgb(40, 9, 109) !important;
}
/* =========================
FIX: Gallery bottom strip — thumbnail-item buttons
========================= */
.gradio-container button.thumbnail-item,
.gradio-container [class*="thumbnail-item"] {
background: transparent !important;
border: 2px solid transparent !important;
border-radius: 6px !important;
padding: 2px !important; /* remove the 10px 16px from the general rule */
overflow: hidden !important;
min-width: 52px !important;
min-height: 52px !important;
}
.gradio-container button.thumbnail-item.selected,
.gradio-container [class*="thumbnail-item"].selected {
border-color: rgb(40, 9, 109) !important;
}
.gradio-container button.thumbnail-item img,
.gradio-container [class*="thumbnail-item"] img {
display: block !important;
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
opacity: 1 !important;
visibility: visible !important;
filter: none !important;
}
/* =========================
FIX: Gallery grid thumbnails
========================= */
.gradio-container .gallery,
.gradio-container [data-testid="gallery"] {
background: #ffffff !important;
}
.gradio-container .gallery button:not(.icon-button):not(.thumbnail-item),
.gradio-container [data-testid="gallery"] button:not(.icon-button):not(.thumbnail-item) {
background: transparent !important;
overflow: hidden !important;
min-width: 56px !important;
min-height: 56px !important;
padding: 0 !important;
}
.gradio-container .gallery img,
.gradio-container [data-testid="gallery"] img {
display: block !important;
opacity: 1 !important;
visibility: visible !important;
filter: none !important;
mix-blend-mode: normal !important;
width: 100% !important;
height: 100% !important;
object-fit: cover !important;
}
.gradio-container .gallery canvas,
.gradio-container [data-testid="gallery"] canvas {
display: block !important;
opacity: 1 !important;
visibility: visible !important;
filter: none !important;
width: 100% !important;
height: 100% !important;
}