FinSightAI / backend /gradio_ui /custom.css
Aniket2003333333's picture
start
7248d39
Raw
History Blame Contribute Delete
40.8 kB
/* custom.css — FinSight AI · Light reference theme */
:root {
--fs-gold: #c9a227;
--fs-gold-hover: #d4af37;
--fs-bg: #f8f7f2;
--fs-surface: #ffffff;
--fs-surface2: #f1ede4;
--fs-border: rgba(0,0,0,0.08);
--fs-border-hover: rgba(0,0,0,0.14);
--fs-text: #1a1a1a;
--fs-muted: rgba(0,0,0,0.45);
--fs-green: #16a34a;
--fs-red: #dc2626;
--fs-pill-bg: #ffffff;
--fs-pill-active: rgba(201,162,39,0.15);
--fs-user-bubble: #f1ede4;
--fs-nav-height: 72px;
--fs-dock-height: 92px;
}
/* ── Reset Gradio to light ── */
html, body,
.gradio-container, .main, .app {
background: var(--fs-bg) !important;
color: var(--fs-text) !important;
font-family: "Inter", system-ui, sans-serif !important;
box-sizing: border-box;
margin: 0 !important;
padding: 0 !important;
}
.gradio-container {
max-width: 100% !important;
width: 100vw !important;
min-height: 100vh !important;
margin: 0 !important;
padding: 0 !important;
overflow-x: hidden !important;
}
.gradio-container > .main {
max-width: 100% !important;
width: 100% !important;
padding: 0 !important;
margin: 0 !important;
gap: 0 !important;
}
.gradio-container > .main > .wrap {
max-width: 100% !important;
padding: 0 !important;
gap: 0 !important;
}
footer.svelte-1ax1toq,
.gradio-container > .wrap > .footer,
.svelte-1ax1toq { display: none !important; }
footer { display: none !important; }
.gradio-container footer { display: none !important; }
/* ── Shell blocks transparent (scoped — do not override Gradio visibility) ── */
.fs-shell .block,
.fs-navbar .block,
.fs-body .block,
.fs-input-dock .block,
.fs-footer.block {
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
/* ── Top navbar ── */
.fs-navbar {
display: flex !important;
align-items: center !important;
justify-content: space-between !important;
padding: 0.45rem 1.25rem !important;
min-height: var(--fs-nav-height) !important;
height: var(--fs-nav-height) !important;
background: var(--fs-surface) !important;
border-bottom: 1px solid var(--fs-border) !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
z-index: 100 !important;
gap: 0.75rem !important;
flex-wrap: nowrap !important;
overflow: hidden !important;
box-sizing: border-box !important;
}
.fs-navbar > .wrap {
display: flex !important;
align-items: center !important;
justify-content: space-between !important;
width: 100% !important;
min-width: 0 !important;
gap: 0.75rem !important;
flex-wrap: nowrap !important;
}
.fs-navbar .block {
min-width: 0 !important;
flex-shrink: 1 !important;
margin: 0 !important;
padding: 0 !important;
}
.fs-navbar .fs-nav-actions,
.fs-navbar .fs-nav-actions > .wrap {
flex-shrink: 0 !important;
min-width: 0 !important;
width: auto !important;
}
.fs-brand {
display: flex;
align-items: center;
gap: 0.6rem;
min-width: 0;
flex-shrink: 1;
}
.fs-brand-text {
min-width: 0;
}
.fs-brand-text h1 {
margin: 0;
font-size: 0.9rem;
font-weight: 600;
color: var(--fs-text);
line-height: 1.2;
white-space: nowrap;
}
.fs-brand-text p {
margin: 0;
font-size: 0.62rem;
color: var(--fs-muted);
line-height: 1.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 220px;
}
.fs-brand-icon {
width: 32px;
height: 32px;
border-radius: 8px;
background: var(--fs-gold);
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
flex-shrink: 0;
box-shadow: 0 2px 8px rgba(201, 162, 39, 0.25);
}
.fs-nav-center {
flex: 1 1 auto;
text-align: center;
font-size: 0.88rem;
font-weight: 500;
color: rgba(0,0,0,0.55);
letter-spacing: 0.01em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
min-width: 0;
padding: 0 0.5rem;
}
.fs-nav-meta {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 0.1rem;
min-width: 0;
max-width: 148px;
}
.fs-ai-badge {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.18rem 0.5rem;
border-radius: 999px;
background: rgba(201,162,39,0.12);
color: var(--fs-gold);
font-size: 0.65rem;
font-weight: 600;
white-space: nowrap;
line-height: 1.2;
}
.fs-nav-hint {
font-size: 0.62rem;
color: var(--fs-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
line-height: 1.2;
text-align: right;
}
.fs-nav-actions {
display: flex !important;
align-items: center !important;
gap: 0.45rem !important;
flex-shrink: 0 !important;
flex-wrap: nowrap !important;
}
/* ── Navbar pill buttons (match reference: white + light-gold active) ── */
.gradio-container .fs-navbar .fs-pill-btn button,
.gradio-container .fs-navbar .fs-pill-btn > button,
.gradio-container .fs-navbar .fs-pill-btn .wrap > button,
.gradio-container .fs-navbar .fs-pill-btn button.secondary {
display: inline-flex !important;
align-items: center !important;
gap: 0.3rem !important;
padding: 0.35rem 0.75rem !important;
border-radius: 999px !important;
font-size: 0.72rem !important;
font-weight: 500 !important;
cursor: pointer !important;
transition: all 0.15s !important;
border: 1px solid var(--fs-border) !important;
box-shadow: none !important;
min-width: auto !important;
height: 32px !important;
background: #ffffff !important;
color: rgba(0, 0, 0, 0.68) !important;
}
.gradio-container .fs-navbar .fs-pill-btn button:hover {
background: #f5f3ee !important;
border-color: var(--fs-border-hover) !important;
color: var(--fs-text) !important;
}
.gradio-container .fs-navbar .fs-pill-btn-active button,
.gradio-container .fs-navbar .fs-pill-btn-active > button,
.gradio-container .fs-navbar .fs-pill-btn-active .wrap > button,
.gradio-container .fs-navbar .fs-pill-btn-active button.secondary {
background: rgba(201, 162, 39, 0.12) !important;
color: var(--fs-gold) !important;
border-color: rgba(201, 162, 39, 0.35) !important;
font-weight: 600 !important;
}
.gradio-container .fs-navbar .fs-pill-btn-active button:hover {
background: rgba(201, 162, 39, 0.18) !important;
color: var(--fs-gold) !important;
border-color: rgba(201, 162, 39, 0.45) !important;
}
.fs-menu-btn button {
width: 32px !important;
min-width: 32px !important;
height: 32px !important;
padding: 0 !important;
border-radius: 8px !important;
background: transparent !important;
border: 1px solid transparent !important;
color: rgba(255,255,255,0.55) !important;
font-size: 1.1rem !important;
box-shadow: none !important;
}
.fs-menu-btn button:hover {
background: var(--fs-pill-bg) !important;
color: var(--fs-text) !important;
}
/* ── Body layout: sidebar + main ── */
.fs-body {
display: flex !important;
flex-wrap: nowrap !important;
align-items: stretch !important;
gap: 0 !important;
flex: 0 0 0 !important;
min-height: 0 !important;
height: 0 !important;
overflow: visible !important;
padding: 0 !important;
margin: 0 !important;
}
.fs-shell {
display: flex !important;
flex-direction: column !important;
height: 100vh !important;
max-height: 100vh !important;
overflow: hidden !important;
padding-top: var(--fs-nav-height) !important;
padding-bottom: var(--fs-dock-height) !important;
position: relative !important;
box-sizing: border-box !important;
}
/* ── Left sidebar (interactive tabs) ── */
.fs-sidebar-col {
width: 48px !important;
min-width: 48px !important;
max-width: 48px !important;
background: var(--fs-surface) !important;
border-right: 1px solid var(--fs-border) !important;
padding: 1rem 0 !important;
gap: 0.5rem !important;
align-items: center !important;
}
.fs-sidebar-col .block {
width: 100% !important;
padding: 0 !important;
margin: 0 !important;
}
.fs-sidebar-tab button {
width: 100% !important;
min-height: 72px !important;
padding: 0.5rem 0.2rem !important;
border: none !important;
border-left: 3px solid transparent !important;
border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
writing-mode: vertical-rl !important;
text-orientation: mixed !important;
transform: rotate(180deg) !important;
font-size: 0.62rem !important;
font-weight: 600 !important;
letter-spacing: 0.08em !important;
text-transform: uppercase !important;
color: var(--fs-muted) !important;
}
.fs-sidebar-tab button:hover {
color: rgba(255,255,255,0.75) !important;
background: rgba(255,255,255,0.03) !important;
}
.fs-sidebar-active button {
color: var(--fs-gold) !important;
border-left-color: var(--fs-gold) !important;
background: rgba(232, 197, 71, 0.08) !important;
}
.fs-panel-area {
flex: 1 1 auto !important;
min-width: 0 !important;
min-height: 0 !important;
overflow: hidden !important;
display: flex !important;
flex-direction: column !important;
position: relative !important;
}
/* ── Fixed feature overlays (+ menu opens these; avoids Gradio Tabs reset bugs) ── */
.fs-feature-overlay {
position: fixed !important;
top: var(--fs-nav-height) !important;
left: 0 !important;
right: 0 !important;
bottom: var(--fs-dock-height) !important;
z-index: 250 !important;
overflow-x: hidden !important;
overflow-y: auto !important;
background: rgba(248, 247, 242, 0.97) !important;
backdrop-filter: blur(8px) !important;
-webkit-backdrop-filter: blur(8px) !important;
padding: 1.25rem 1rem 2rem !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
box-sizing: border-box !important;
}
.fs-feature-overlay.hide,
.fs-feature-overlay.hidden {
display: none !important;
}
.fs-feature-overlay-wide {
align-items: stretch !important;
padding-left: 1.25rem !important;
padding-right: 1.25rem !important;
}
.fs-feature-overlay-wide .fs-ocr-panel {
width: 100% !important;
max-width: 1100px !important;
margin: 0 auto !important;
}
.fs-feature-overlay .block {
width: 100% !important;
max-width: 720px !important;
}
.fs-feature-overlay-wide .block {
max-width: 1100px !important;
}
/* ── Feature tabs (legacy – unused) ── */
.fs-feature-panel {
flex: 1 1 auto !important;
min-height: calc(100vh - 56px - 90px) !important;
overflow-y: auto !important;
overflow-x: hidden !important;
padding: 0.5rem 0.75rem 6rem !important;
}
.fs-feature-panel .prose h3 {
color: var(--fs-text) !important;
font-size: 1rem !important;
margin: 0.25rem 0 0.75rem !important;
}
.fs-feature-panel .prose p {
color: var(--fs-muted) !important;
font-size: 0.82rem !important;
margin: 0 0 1rem !important;
}
/* ── Feature panel content ── */
/* ── Left sidebar label strip (legacy HTML fallback) ── */
.fs-sidebar {
width: 48px !important;
min-width: 48px !important;
background: var(--fs-surface) !important;
border-right: 1px solid var(--fs-border) !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
padding: 1rem 0 !important;
gap: 0.75rem !important;
}
.fs-sidebar-tab {
writing-mode: vertical-rl;
text-orientation: mixed;
transform: rotate(180deg);
font-size: 0.65rem;
font-weight: 600;
letter-spacing: 0.06em;
color: var(--fs-muted);
padding: 0.5rem 0.35rem;
border-radius: 6px;
cursor: default;
text-transform: uppercase;
}
.fs-sidebar-tab.active {
color: var(--fs-gold);
background: rgba(212, 168, 67, 0.1);
}
/* ── Main content area ── */
.fs-panel-area .block {
background: transparent !important;
}
/* ── HTML chat transcript (replaces gr.Chatbot) ── */
/* Fixed panel: flex chain in Gradio columns often collapses to 0 height */
.fs-qa-panel {
position: fixed !important;
top: var(--fs-nav-height) !important;
left: 0 !important;
right: 0 !important;
bottom: var(--fs-dock-height) !important;
z-index: 50 !important;
max-width: 920px !important;
width: 100% !important;
margin: 0 auto !important;
padding: 1rem 1rem 1.5rem !important;
overflow-x: hidden !important;
overflow-y: auto !important;
overscroll-behavior: contain !important;
scroll-padding-top: 1rem !important;
scroll-padding-bottom: 1.5rem !important;
box-sizing: border-box !important;
background: var(--fs-bg) !important;
}
.fs-qa-panel > .block,
.fs-qa-panel.block {
height: auto !important;
min-height: unset !important;
overflow: visible !important;
border: none !important;
box-shadow: none !important;
background: transparent !important;
}
#fs-chat-transcript,
.fs-chat-transcript,
.fs-chat-transcript.prose {
display: block !important;
visibility: visible !important;
width: 100% !important;
max-width: none !important;
height: auto !important;
min-height: 120px !important;
max-height: none !important;
overflow: visible !important;
padding: 0 !important;
margin: 0 !important;
box-sizing: border-box !important;
color: var(--fs-text) !important;
opacity: 1 !important;
}
.fs-qa-panel .block.hide-container,
.fs-qa-panel .hide-container {
overflow: visible !important;
}
.fs-chat-log {
display: flex;
flex-direction: column;
gap: 1.25rem;
max-width: 820px;
margin: 0 auto;
width: 100%;
padding-top: 0.25rem;
padding-bottom: 2rem;
}
.fs-chat-row {
display: flex;
width: 100%;
}
.fs-chat-row-user {
justify-content: flex-end;
}
.fs-chat-row-bot {
justify-content: flex-start;
}
.fs-chat-bubble {
max-width: 85%;
border-radius: 16px;
padding: 0.75rem 1rem;
font-size: 0.86rem;
line-height: 1.55;
color: var(--fs-text);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}
.fs-chat-bubble p {
margin: 0 0 0.5rem;
}
.fs-chat-bubble p:last-child {
margin-bottom: 0;
}
.fs-chat-bubble-user {
background: rgba(201, 162, 39, 0.1);
border: 1px solid rgba(201, 162, 39, 0.25);
border-radius: 20px;
}
.fs-chat-bubble-bot {
background: var(--fs-surface);
border: 1px solid var(--fs-border);
}
.fs-chat-bot-header {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.5rem;
}
.fs-chat-bot-label {
font-size: 0.72rem;
font-weight: 700;
color: var(--fs-gold);
letter-spacing: 0.02em;
}
.fs-chat-bot-body {
color: var(--fs-text);
}
.fs-chat-thinking em {
animation: pulse-thinking 1.5s ease-in-out infinite;
color: var(--fs-gold);
font-style: normal;
}
.conf-badge {
display: inline-flex;
align-items: center;
padding: 0.12rem 0.45rem;
border-radius: 999px;
font-size: 0.68rem;
font-weight: 700;
border: 1px solid transparent;
}
.conf-badge-high {
background: rgba(22, 163, 74, 0.1);
color: #16a34a;
border-color: rgba(22, 163, 74, 0.25);
}
.conf-badge-mid {
background: rgba(201, 162, 39, 0.12);
color: var(--fs-gold);
border-color: rgba(201, 162, 39, 0.25);
}
.conf-badge-low {
background: rgba(220, 38, 38, 0.1);
color: #dc2626;
border-color: rgba(220, 38, 38, 0.25);
}
.fs-chat-bubble-bot .sources-cited {
margin-top: 0.75rem;
}
@keyframes pulse-thinking {
0%, 100% { opacity: 0.4; }
50% { opacity: 1; }
}
/* ── Main content panel ── */
.fs-panel {
padding: 0 0.5rem;
}
/* ── Bottom input dock (pill bar) ── */
.fs-input-dock {
position: fixed !important;
bottom: 0 !important;
left: 0 !important;
right: 0 !important;
margin: 0 !important;
padding: 0.5rem 1.25rem 0.35rem !important;
background: var(--fs-bg) !important;
border-top: 1px solid var(--fs-border) !important;
z-index: 300 !important;
gap: 0.3rem !important;
}
/* ── Input composer: pill centered, + pinned bottom-left ── */
.fs-input-composer {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 0 !important;
width: 100% !important;
max-width: none !important;
margin: 0 !important;
position: relative !important;
min-height: 48px !important;
}
.fs-input-composer > .fs-input-pill {
flex: 0 1 980px !important;
min-width: 0 !important;
margin: 0 !important;
max-width: min(980px, calc(100vw - 5.5rem)) !important;
width: 100% !important;
}
/* + button + popup anchor — bottom-left corner of input dock */
.gradio-container .fs-input-dock .fs-plus-anchor,
.fs-input-dock .fs-plus-anchor {
position: absolute !important;
left: 0 !important;
top: 50% !important;
transform: translateY(-50%) !important;
z-index: 302 !important;
width: 44px !important;
min-width: 44px !important;
margin: 0 !important;
padding: 0 !important;
flex: none !important;
overflow: visible !important;
}
.fs-input-dock,
.fs-input-composer {
overflow: visible !important;
}
.gradio-container .fs-input-dock .fs-plus-anchor .block,
.fs-input-dock .fs-plus-anchor .block {
background: transparent !important;
border: none !important;
box-shadow: none !important;
margin: 0 !important;
padding: 0 !important;
}
.fs-input-pill {
display: flex !important;
align-items: center !important;
gap: 0.5rem !important;
background: var(--fs-surface) !important;
border: 1px solid rgba(201,162,39,0.35) !important;
border-radius: 999px !important;
padding: 0.35rem 0.5rem !important;
box-shadow: 0 2px 12px rgba(0,0,0,0.04) !important;
max-width: none !important;
width: auto !important;
margin: 0 !important;
}
.fs-input-pill:focus-within {
border-color: var(--fs-border-hover) !important;
}
.fs-input-pill textarea {
background: var(--fs-surface2) !important;
border: 1px solid var(--fs-border) !important;
border-radius: 999px !important;
padding: 0.6rem 1rem !important;
}
.fs-input-dock .block {
background: transparent !important;
border: none !important;
margin: 0 !important;
padding: 0 !important;
}
.fs-input-dock .label-wrap { display: none !important; }
.fs-input-dock textarea,
.fs-input-dock input {
background: transparent !important;
border: none !important;
box-shadow: none !important;
color: var(--fs-text) !important;
font-size: 0.875rem !important;
}
.fs-input-dock textarea::placeholder,
.fs-input-dock input::placeholder {
color: var(--fs-muted) !important;
}
/* legacy alias */
.fs-input-bar {
margin: 0 !important;
padding: 0.75rem 1.25rem !important;
background: var(--fs-surface) !important;
border-top: 1px solid var(--fs-border) !important;
display: flex !important;
align-items: center !important;
gap: 0.6rem !important;
position: sticky !important;
bottom: 0 !important;
z-index: 200 !important;
width: 100% !important;
}
.fs-input-bar .block {
background: transparent !important;
border: none !important;
margin: 0 !important;
padding: 0 !important;
}
.fs-input-bar .label-wrap { display: none !important; }
.fs-input-inner {
flex: 1;
display: flex;
align-items: center;
background: var(--fs-surface2);
border: 1px solid var(--fs-border);
border-radius: 999px;
padding: 0 0.75rem;
gap: 0.5rem;
transition: border-color 0.15s;
}
.fs-input-inner:focus-within {
border-color: var(--fs-border-hover);
}
.fs-input-bar textarea,
.fs-input-bar input {
background: transparent !important;
border: none !important;
box-shadow: none !important;
color: var(--fs-text) !important;
font-size: 0.875rem !important;
}
.fs-input-bar textarea::placeholder,
.fs-input-bar input::placeholder {
color: var(--fs-muted) !important;
}
/* ── Plus button (sibling left of pill, same row) ── */
.gradio-container .fs-input-dock .fs-plus-btn.block,
.gradio-container .fs-input-dock .fs-plus-btn.wrap,
.gradio-container .fs-input-dock .fs-plus-btn:not(button) {
width: auto !important;
min-width: 0 !important;
margin: 0 !important;
padding: 0 !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
.gradio-container .fs-input-dock #fs-plus-btn,
.gradio-container .fs-input-dock #fs-plus-btn button,
.gradio-container .fs-input-dock #fs-plus-btn > button,
.gradio-container .fs-input-dock #fs-plus-btn .wrap > button,
.gradio-container .fs-input-dock button#fs-plus-btn,
.gradio-container .fs-input-dock .fs-plus-btn button,
.gradio-container .fs-input-dock .fs-plus-btn > button,
.gradio-container .fs-input-dock .fs-plus-btn .wrap > button,
.gradio-container .fs-input-dock .fs-plus-btn button.secondary {
width: 44px !important;
min-width: 44px !important;
height: 44px !important;
min-height: 44px !important;
padding: 0 !important;
border-radius: 50% !important;
border: 1px solid rgba(201, 162, 39, 0.45) !important;
background: #ffffff !important;
background-color: #ffffff !important;
color: rgba(0, 0, 0, 0.65) !important;
font-size: 1.35rem !important;
font-weight: 500 !important;
line-height: 1 !important;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06) !important;
}
.gradio-container .fs-input-dock #fs-plus-btn:hover,
.gradio-container .fs-input-dock #fs-plus-btn button:hover,
.gradio-container .fs-input-dock button#fs-plus-btn:hover,
.gradio-container .fs-input-dock .fs-plus-btn button:hover {
background: rgba(201, 162, 39, 0.1) !important;
background-color: rgba(201, 162, 39, 0.1) !important;
color: var(--fs-gold) !important;
border-color: var(--fs-gold) !important;
transform: none !important;
}
/* ── Send button ── */
.gradio-container .fs-input-dock .fs-send-btn button,
.gradio-container .fs-input-dock .fs-send-btn .wrap > button,
.gradio-container .fs-input-dock .fs-send-btn button.secondary {
width: 38px !important;
min-width: 38px !important;
height: 38px !important;
border-radius: 50% !important;
background: var(--fs-gold) !important;
color: #ffffff !important;
border: none !important;
font-size: 1rem !important;
box-shadow: 0 2px 10px rgba(201, 162, 39, 0.35) !important;
}
.gradio-container .fs-input-dock .fs-send-btn button:hover {
background: var(--fs-gold-hover) !important;
box-shadow: 0 4px 16px rgba(201, 162, 39, 0.4) !important;
transform: scale(1.04);
}
/* ── Feature popup menu (opens upward from + at bottom-left) ── */
.gradio-container .fs-input-dock .fs-plus-anchor .fs-feature-popup-wrap,
.gradio-container .fs-plus-anchor .fs-feature-popup-wrap,
.fs-feature-popup-wrap {
position: absolute !important;
bottom: calc(100% + 0.5rem) !important;
left: 0 !important;
top: auto !important;
right: auto !important;
transform: none !important;
margin: 0 !important;
width: 280px !important;
max-width: calc(100vw - 2.5rem) !important;
max-height: min(70vh, 520px) !important;
overflow-y: auto !important;
background: rgba(18, 18, 18, 0.96) !important;
border: 1px solid rgba(255,255,255,0.08) !important;
border-radius: 16px !important;
padding: 0.5rem !important;
box-shadow: 0 24px 64px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04) !important;
z-index: 10000 !important;
gap: 0.15rem !important;
backdrop-filter: blur(20px) !important;
-webkit-backdrop-filter: blur(20px) !important;
}
.fs-feature-popup-wrap .block,
.fs-feature-popup-wrap .form {
background: transparent !important;
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
}
.fs-popup-menu-btn button {
width: 100% !important;
display: flex !important;
justify-content: flex-start !important;
text-align: left !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
color: rgba(255,255,255,0.82) !important;
font-size: 0.84rem !important;
font-weight: 500 !important;
padding: 0.6rem 0.85rem !important;
border-radius: 10px !important;
min-height: 0 !important;
transition: all 0.15s ease !important;
}
.fs-popup-menu-btn button:hover {
background: rgba(255,255,255,0.06) !important;
color: #fff !important;
}
.fs-popup-menu-btn-active button {
background: rgba(232, 197, 71, 0.12) !important;
color: var(--fs-gold) !important;
}
.fs-popup-menu-btn-active button:hover {
background: rgba(232, 197, 71, 0.18) !important;
color: var(--fs-gold) !important;
}
.fs-popup-divider {
height: 1px;
background: rgba(255,255,255,0.06);
margin: 0.35rem 0.6rem;
}
.fs-popup-section-label {
font-size: 0.62rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: rgba(255,255,255,0.28);
padding: 0.4rem 0.85rem 0.15rem;
}
/* ── Footer hint ── */
.fs-footer {
padding: 0.2rem 1.25rem 0.4rem !important;
font-size: 0.67rem !important;
color: var(--fs-muted) !important;
background: var(--fs-bg) !important;
border: none !important;
flex-shrink: 0 !important;
text-align: center !important;
max-width: 920px !important;
margin: 0 auto !important;
}
.fs-footer .prose, .fs-footer p {
color: var(--fs-muted) !important;
margin: 0 !important;
}
/* ── Secondary panels (summary, ocr, entities, docs) ── */
.fs-panel-inner {
background: var(--fs-surface) !important;
border: 1px solid var(--fs-border) !important;
border-radius: 14px !important;
padding: 1rem !important;
margin: 0.75rem 0 !important;
flex: 1 !important;
overflow-y: auto !important;
}
.fs-panel-inner .block {
background: transparent !important;
border: none !important;
}
.fs-panel-inner label span,
.fs-panel-inner .label-wrap span {
color: rgba(255,255,255,0.5) !important;
font-size: 0.75rem !important;
font-weight: 500 !important;
}
.fs-panel-inner button.primary,
.fs-panel-inner button[variant="primary"],
.gradio-container button.primary,
.gradio-container .primary {
background: var(--fs-gold) !important;
color: #0a0a0a !important;
border: none !important;
border-radius: 10px !important;
font-weight: 600 !important;
}
.gradio-container button.primary:hover,
.gradio-container .primary:hover {
background: var(--fs-gold-hover) !important;
}
/* ── Gradio inputs in dark ── */
input, textarea, select,
.gradio-container input,
.gradio-container textarea {
background: var(--fs-surface2) !important;
color: var(--fs-text) !important;
border-color: var(--fs-border) !important;
}
/* ── Dropdowns / checkboxes ── */
.gradio-container .wrap.svelte-select,
.gradio-container .multiselect,
.gradio-container .dropdown {
background: var(--fs-surface2) !important;
border-color: var(--fs-border) !important;
color: var(--fs-text) !important;
}
/* ── Dataframe ── */
.gradio-container table,
.gradio-container .table-wrap {
background: var(--fs-surface) !important;
color: var(--fs-text) !important;
}
.gradio-container thead tr {
background: var(--fs-surface2) !important;
}
.gradio-container td, .gradio-container th {
border-color: var(--fs-border) !important;
color: var(--fs-text) !important;
}
/* ── Sources / confidence ── */
.sources-card {
background: transparent;
border: none;
border-radius: 0;
padding: 0.3rem 0;
max-width: 100%;
}
.sources-header {
font-size: 0.6rem;
font-weight: 500;
color: rgba(255,255,255,0.3);
margin-bottom: 0.25rem;
letter-spacing: 0.02em;
}
.sources-chips {
display: flex;
flex-wrap: wrap;
gap: 0.25rem;
}
.src-chip {
display: inline-flex;
align-items: center;
gap: 0.2rem;
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.06);
border-radius: 6px;
padding: 0.15rem 0.4rem;
font-size: 0.62rem;
color: rgba(255,255,255,0.55);
transition: background 0.15s;
}
.src-chip:hover {
background: rgba(255,255,255,0.08);
}
.src-icon {
font-size: 0.7rem;
flex-shrink: 0;
}
.src-name {
color: rgba(255,255,255,0.65);
font-weight: 500;
max-width: 160px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.6rem;
}
.src-page {
color: var(--fs-gold);
font-size: 0.55rem;
font-weight: 600;
background: rgba(232, 197, 71, 0.08);
padding: 0.05rem 0.25rem;
border-radius: 3px;
flex-shrink: 0;
}
/* Confidence badge */
.conf-badge {
display: inline-flex;
align-items: center;
gap: 0.2rem;
padding: 0.2rem 0.5rem;
border-radius: 999px;
font-size: 0.62rem;
font-weight: 500;
}
.conf-badge strong {
font-weight: 700;
}
.conf-high {
background: rgba(46, 160, 67, 0.1);
color: #3fb950;
border: 1px solid rgba(46, 160, 67, 0.25);
}
.conf-mid {
background: rgba(232, 197, 71, 0.1);
color: var(--fs-gold);
border: 1px solid rgba(232, 197, 71, 0.25);
}
.conf-low {
background: rgba(248, 81, 73, 0.1);
color: #f85149;
border: 1px solid rgba(248, 81, 73, 0.25);
}
/* ── Meta row (legacy — hidden; sources live in chat transcript) ── */
.fs-meta-row {
display: none !important;
}
/* Legacy compat */
.confidence-high { display: none; }
.confidence-low { display: none; }
.sources-box { display: none; }
.ocr-structured header p {
color: var(--fs-text) !important;
}
.ocr-structured header p span {
color: var(--fs-muted) !important;
}
/* ── OCR ── */
.ocr-section {
border: 1px solid var(--fs-border);
border-radius: 12px;
overflow: hidden;
margin-bottom: 1rem;
background: var(--fs-surface2);
}
.ocr-section-title {
padding: 0.6rem 1rem;
font-size: 0.68rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
color: rgba(255,255,255,0.4);
background: rgba(255,255,255,0.04);
border-bottom: 1px solid var(--fs-border);
}
.ocr-kv-row {
display: grid;
grid-template-columns: minmax(140px, 38%) 1fr;
gap: 0.5rem 1rem;
padding: 0.65rem 1rem;
border-bottom: 1px solid rgba(255,255,255,0.04);
}
.ocr-kv-row dt {
font-size: 0.73rem;
font-weight: 500;
color: rgba(255,255,255,0.45);
margin: 0;
}
.ocr-kv-row dd {
font-size: 0.85rem;
font-weight: 500;
color: var(--fs-text);
margin: 0;
word-break: break-word;
}
.ocr-table-wrap { overflow-x: auto; }
.ocr-table {
width: 100%;
border-collapse: collapse;
font-size: 0.85rem;
}
.ocr-table th {
text-align: left;
padding: 0.55rem 1rem;
font-size: 0.72rem;
font-weight: 600;
color: rgba(255,255,255,0.5);
background: rgba(255,255,255,0.04);
border-bottom: 1px solid var(--fs-border);
}
.ocr-table td {
padding: 0.55rem 1rem;
color: var(--fs-text);
border-bottom: 1px solid rgba(255,255,255,0.04);
}
/* ── Hidden controls ── */
.hidden-control { display: none !important; }
/* ── Scrollbars ── */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.12); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.2); }
/* ── Radio / checkbox dark fix ── */
.gradio-container .wrap input[type="radio"],
.gradio-container .wrap input[type="checkbox"] {
accent-color: var(--fs-gold) !important;
}
.gradio-container .wrap label span {
color: var(--fs-text) !important;
}
/* ── File upload ── */
.gradio-container .upload-container,
.gradio-container .file-preview {
background: var(--fs-surface2) !important;
border-color: var(--fs-border) !important;
border-radius: 10px !important;
color: var(--fs-text) !important;
}
/* ── Markdown output ── */
.gradio-container .prose {
color: var(--fs-text) !important;
}
.gradio-container .prose code {
background: var(--fs-surface2) !important;
color: var(--fs-gold) !important;
border-radius: 4px !important;
padding: 0.1rem 0.3rem !important;
}
/* ── Code blocks ── */
.gradio-container pre {
background: var(--fs-surface2) !important;
border: 1px solid var(--fs-border) !important;
border-radius: 8px !important;
padding: 1rem !important;
color: var(--fs-text) !important;
font-family: "JetBrains Mono", monospace !important;
}
/* ── Image preview (OCR) ── */
.gradio-container img {
border-radius: 8px !important;
border: 1px solid var(--fs-border) !important;
}
/* ── Hide Gradio processing bar ── */
.progress-bar,
.meta-text-center,
.meta-text {
display: none !important;
}
/* ── Gradio footer hide ── */
footer[class*="svelte"],
.gradio-container > footer,
div[class*="footer"] {
display: none !important;
}
.fs-empty-state {
text-align: center;
padding: 2rem;
min-height: 40vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.fs-empty-logo {
font-size: 2rem;
font-weight: 700;
color: var(--fs-gold);
letter-spacing: -0.02em;
margin-bottom: 0.75rem;
}
.fs-empty-sub {
color: var(--fs-muted);
font-size: 0.92rem;
max-width: 420px;
margin: 0 auto;
line-height: 1.5;
}
.conf-score-badge {
display: inline-flex;
align-items: center;
padding: 0.15rem 0.45rem;
border-radius: 6px;
background: rgba(201,162,39,0.12);
color: var(--fs-gold);
font-size: 0.72rem;
font-weight: 700;
}
.sources-cited {
margin-top: 0.5rem;
border: 1px solid var(--fs-border);
border-radius: 10px;
background: #faf9f6;
overflow: hidden;
}
.sources-cited summary {
cursor: pointer;
padding: 0.55rem 0.75rem;
font-size: 0.78rem;
color: var(--fs-muted);
list-style: none;
}
.sources-cited summary::-webkit-details-marker { display: none; }
.sources-chips {
display: flex;
flex-wrap: wrap;
gap: 0.35rem;
padding: 0 0.75rem 0.65rem;
}
.src-chip {
display: inline-flex;
align-items: center;
gap: 0.25rem;
padding: 0.2rem 0.5rem;
border-radius: 999px;
background: var(--fs-surface);
border: 1px solid var(--fs-border);
font-size: 0.72rem;
}
.fs-modal-overlay {
display: flex !important;
align-items: flex-start !important;
justify-content: center !important;
padding: 1.5rem !important;
min-height: calc(100vh - 140px) !important;
}
.fs-modal-card {
background: var(--fs-surface) !important;
border: 1px solid var(--fs-border) !important;
border-radius: 16px !important;
box-shadow: 0 20px 50px rgba(0,0,0,0.08) !important;
padding: 1.25rem 1.5rem !important;
width: min(640px, 100%) !important;
max-width: 640px !important;
margin: 1.5rem auto !important;
}
.fs-docs-card {
width: min(640px, 100%) !important;
max-width: 640px !important;
}
.fs-modal-header h2 {
margin: 0;
font-size: 1.15rem;
font-weight: 700;
color: var(--fs-text);
}
.fs-modal-header p {
margin: 0.25rem 0 0;
font-size: 0.82rem;
color: var(--fs-muted);
}
.fs-modal-header-row {
align-items: flex-start !important;
justify-content: space-between !important;
gap: 0.75rem !important;
width: 100% !important;
}
.fs-modal-close button {
width: 36px !important;
min-width: 36px !important;
height: 36px !important;
border-radius: 999px !important;
border: 1px solid var(--fs-border) !important;
background: var(--fs-surface) !important;
color: var(--fs-muted) !important;
font-size: 1rem !important;
box-shadow: none !important;
padding: 0 !important;
}
.fs-modal-close button:hover {
color: var(--fs-text) !important;
border-color: var(--fs-border-hover) !important;
background: #f5f3ee !important;
}
.fs-done-btn { margin-top: 0.5rem !important; }
.fs-done-btn button { width: 100% !important; }
.fs-doc-select .wrap {
display: flex !important;
flex-direction: column !important;
gap: 0.35rem !important;
max-height: 320px !important;
overflow-y: auto !important;
padding: 0.25rem 0 !important;
}
.fs-doc-select label {
display: flex !important;
align-items: center !important;
gap: 0.65rem !important;
width: 100% !important;
margin: 0 !important;
padding: 0.65rem 0.75rem !important;
border: 1px solid var(--fs-border) !important;
border-radius: 10px !important;
background: var(--fs-surface) !important;
cursor: pointer !important;
transition: background 0.15s, border-color 0.15s !important;
}
.fs-doc-select label:hover {
background: #faf9f6 !important;
border-color: rgba(201, 162, 39, 0.35) !important;
}
.fs-doc-select label:has(input:checked) {
background: rgba(59, 130, 246, 0.08) !important;
border-color: rgba(59, 130, 246, 0.35) !important;
}
.fs-doc-select input[type="checkbox"] {
accent-color: var(--fs-gold) !important;
width: 16px !important;
height: 16px !important;
flex-shrink: 0 !important;
}
.fs-doc-select span {
font-size: 0.82rem !important;
color: var(--fs-text) !important;
line-height: 1.35 !important;
}
.fs-upload-zone,
.fs-upload-zone > .wrap,
.fs-upload-zone .wrap {
border: 2px dashed rgba(201, 162, 39, 0.45) !important;
border-radius: 12px !important;
background: #faf9f6 !important;
min-height: 140px !important;
}
.fs-upload-zone button,
.fs-upload-zone label {
color: var(--fs-text) !important;
}
.fs-ocr-upload .wrap {
border: 2px dashed var(--fs-border) !important;
border-radius: 12px !important;
background: #faf9f6 !important;
min-height: 80px !important;
}
.doc-list { list-style: none; margin: 0.75rem 0 0; padding: 0; }
.doc-row {
display: flex;
align-items: center;
gap: 0.65rem;
padding: 0.65rem 0.5rem;
border-radius: 10px;
border-bottom: 1px solid var(--fs-border);
}
.doc-row-selected { background: rgba(59,130,246,0.08); }
.doc-status {
width: 20px;
height: 20px;
border-radius: 50%;
background: rgba(201,162,39,0.15);
color: var(--fs-gold);
font-size: 0.65rem;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
}
.doc-name { font-size: 0.82rem; font-weight: 500; color: var(--fs-text); }
.doc-chunks { font-size: 0.72rem; color: var(--fs-muted); }
.doc-list-empty { color: var(--fs-muted); font-size: 0.82rem; }
.fs-gold-btn button {
background: var(--fs-gold) !important;
color: #fff !important;
border: none !important;
border-radius: 10px !important;
font-weight: 600 !important;
padding: 0.55rem 1.1rem !important;
}
.fs-full-btn { width: 100% !important; }
.fs-full-btn button { width: 100% !important; }
.fs-pill-radio .wrap {
display: flex !important;
gap: 0.5rem !important;
flex-wrap: wrap !important;
}
.fs-pill-radio label {
border: 1px solid var(--fs-border) !important;
border-radius: 999px !important;
padding: 0.35rem 0.9rem !important;
background: var(--fs-surface) !important;
}
.fs-pill-radio label.selected {
background: var(--fs-gold) !important;
color: #fff !important;
border-color: var(--fs-gold) !important;
}
.fs-summary-output {
max-height: 360px;
overflow-y: auto;
border: 1px solid var(--fs-border);
border-radius: 12px;
padding: 1rem !important;
background: #faf9f6;
}
.fs-action-row { align-items: center !important; gap: 0.75rem !important; }
.entity-section-title {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.08em;
color: var(--fs-gold);
margin: 1rem 0 0.5rem;
}
.entity-pills { display: flex; flex-wrap: wrap; gap: 0.45rem; }
.entity-pill {
padding: 0.35rem 0.85rem;
border-radius: 999px;
background: var(--fs-surface);
border: 1px solid var(--fs-border);
font-size: 0.82rem;
}
.entity-cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
gap: 0.65rem;
}
.entity-card {
background: var(--fs-surface);
border: 1px solid var(--fs-border);
border-radius: 12px;
padding: 0.65rem 0.75rem;
}
.entity-card-label {
font-size: 0.62rem;
font-weight: 600;
letter-spacing: 0.06em;
color: var(--fs-muted);
margin-bottom: 0.25rem;
}
.entity-card-value { font-size: 0.95rem; font-weight: 700; color: var(--fs-text); }
.panel-hint { color: var(--fs-muted); font-size: 0.85rem; }
.fs-ocr-panel { max-width: 1100px; margin: 0 auto; padding: 0.5rem 1rem; }
.fs-ocr-split { gap: 1rem !important; }
.fs-ocr-pane {
background: var(--fs-surface);
border: 1px solid var(--fs-border);
border-radius: 12px;
padding: 0.75rem;
min-height: 420px;
}
.fs-pane-title {
font-size: 0.68rem;
font-weight: 700;
letter-spacing: 0.08em;
color: var(--fs-muted);
margin-bottom: 0.5rem;
}
.fs-pane-title-gold { color: var(--fs-gold); }
.fs-pane-sub { font-size: 0.78rem; color: var(--fs-muted); margin: -0.25rem 0 0.75rem; }
.ocr-section-title {
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.06em;
color: var(--fs-gold);
margin-bottom: 0.5rem;
}
.ocr-kv-row {
background: var(--fs-surface);
border: 1px solid var(--fs-border);
border-radius: 10px;
padding: 0.55rem 0.75rem;
margin-bottom: 0.45rem;
}
.ocr-kv-row dt { font-size: 0.68rem; color: var(--fs-muted); text-transform: uppercase; }
.ocr-kv-row dd { margin: 0.15rem 0 0; font-weight: 600; color: var(--fs-text); }
::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.12); }
::-webkit-scrollbar-thumb:hover { background: rgba(0,0,0,0.2); }
.ocr-table th {
color: var(--fs-muted) !important;
background: #f5f3ee !important;
}
.ocr-table td { border-bottom: 1px solid var(--fs-border) !important; }