/* * Podcast Insights UI - Custom Styles * * Design: Modern, minimalistic interface with teal color palette * Typography: Poppins font family * Supports both light and dark themes automatically */ /* ============================================================ FONTS & BASE ============================================================ */ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap'); * { font-family: 'Poppins', -apple-system, BlinkMacSystemFont, sans-serif !important; } /* ============================================================ CSS VARIABLES - Light & Dark Theme Support ============================================================ */ :root { /* Primary teal colors */ --teal-primary: #0091ad; --teal-hover: #007a94; --teal-light: #e0f7fa; --teal-soft: #f0fdfa; /* Light theme colors */ --text-primary: #0f172a; --text-secondary: #64748b; --text-muted: #94a3b8; --bg-surface: #f8fafc; --bg-input: #f8fafc; --border-color: #e2e8f0; --border-light: #f1f5f9; /* User bubble */ --user-bubble-bg: #e0f7fa; --user-bubble-border: #b2ebf2; /* Blockquote */ --quote-bg: #f0fdfa; /* Example buttons */ --example-bg: #f8fafc; --example-text: #475569; /* Feedback */ --feedback-bg: #f8fafc; /* New button */ --new-btn-bg: #f0fdfa; --new-btn-text: #0d9488; --new-btn-border: #99f6e4; --new-btn-hover-bg: #ccfbf1; --new-btn-hover-border: #5eead4; } /* Dark theme overrides */ @media (prefers-color-scheme: dark) { :root { --teal-primary: #22d3ee; --teal-hover: #67e8f9; --teal-light: #164e63; --teal-soft: #0f3d4c; --text-primary: #f1f5f9; --text-secondary: #94a3b8; --text-muted: #64748b; --bg-surface: #1e293b; --bg-input: #1e293b; --border-color: #334155; --border-light: #1e293b; --user-bubble-bg: #164e63; --user-bubble-border: #0e7490; --quote-bg: #0f3d4c; --example-bg: #1e293b; --example-text: #cbd5e1; --feedback-bg: #1e293b; --new-btn-bg: #0f3d4c; --new-btn-text: #22d3ee; --new-btn-border: #0e7490; --new-btn-hover-bg: #164e63; --new-btn-hover-border: #22d3ee; } } /* Gradio dark mode class support */ .dark { --teal-primary: #22d3ee; --teal-hover: #67e8f9; --teal-light: #164e63; --teal-soft: #0f3d4c; --text-primary: #f1f5f9; --text-secondary: #94a3b8; --text-muted: #64748b; --bg-surface: #1e293b; --bg-input: #1e293b; --border-color: #334155; --border-light: #1e293b; --user-bubble-bg: #164e63; --user-bubble-border: #0e7490; --quote-bg: #0f3d4c; --example-bg: #1e293b; --example-text: #cbd5e1; --feedback-bg: #1e293b; --new-btn-bg: #0f3d4c; --new-btn-text: #22d3ee; --new-btn-border: #0e7490; --new-btn-hover-bg: #164e63; --new-btn-hover-border: #22d3ee; } /* ============================================================ LAYOUT & CONTAINER ============================================================ */ .gradio-container { max-width: 900px !important; margin: auto !important; padding: 8px !important; } .gradio-container .wrap { gap: 2px !important; } .column { gap: 4px !important; } .block { margin: 0 !important; } .block.padded { padding: 0 !important; } .gr-group, .gradio-group { padding: 0 !important; background: transparent !important; border: none !important; gap: 2px !important; } /* Hide Gradio default footer */ footer.svelte-zxu34v { display: none !important; } /* ============================================================ COLOR THEME - Override Gradio orange with teal ============================================================ */ .orange, [class*="orange"], [style*="orange"] { background: var(--teal-primary) !important; border-color: var(--teal-primary) !important; } [style*="rgb(249"] { border-color: var(--teal-primary) !important; } .progress-bar, .progress-level { background: var(--teal-primary) !important; } *:focus { outline-color: var(--teal-primary) !important; } /* ============================================================ HEADER ============================================================ */ .header-section { margin-bottom: 6px !important; text-align: center !important; } .header-content { text-align: center; } .header-section h1, .header-content h1 { font-weight: 700 !important; font-size: 1.6rem !important; margin-bottom: 2px !important; color: var(--teal-primary) !important; } .header-section p, .header-content p { color: var(--text-secondary) !important; font-size: 0.85rem !important; margin: 0 !important; } /* ============================================================ CHAT CONTAINER ============================================================ */ #chatbot { border-radius: 12px !important; border: 1px solid var(--border-color) !important; box-shadow: 0 2px 8px rgba(0,145,173,0.06) !important; min-height: 240px !important; } .placeholder-content { height: 190px !important; } /* Chat message text size - match input textarea */ #chatbot .message, #chatbot .message-content, #chatbot .bot, #chatbot .user, #chatbot .md, #chatbot p, #chatbot li, #chatbot blockquote, #chatbot blockquote p { font-size: 0.8rem !important; line-height: 1.5 !important; } /* User message bubbles */ #chatbot .user.message, .svelte-1nr59td.user { background: var(--user-bubble-bg) !important; color: var(--text-primary) !important; border: 1px solid var(--user-bubble-border) !important; } /* Links in chat */ #chatbot a { color: var(--teal-primary) !important; font-weight: 600 !important; text-decoration: underline !important; text-underline-offset: 2px !important; } #chatbot a:hover { color: var(--teal-hover) !important; } /* Blockquotes in chat */ #chatbot blockquote { border-left: 3px solid var(--teal-primary) !important; background: var(--quote-bg) !important; padding: 10px 14px !important; margin: 8px 0 !important; border-radius: 0 8px 8px 0 !important; font-style: normal !important; } /* ============================================================ INPUT AREA ============================================================ */ .input-row { margin-top: 4px !important; gap: 8px !important; align-items: center !important; } .input-row .block { border: none !important; box-shadow: none !important; } .input-row label.show_textbox_border { border: none !important; box-shadow: none !important; background: transparent !important; } .input-row input, .input-row textarea { border-radius: 10px !important; border: 1px solid var(--border-color) !important; padding: 12px 16px !important; font-size: 0.85rem !important; min-height: 44px !important; background: var(--bg-input) !important; max-width: 700px !important; color: var(--text-primary) !important; } .input-row input:focus, .input-row textarea:focus { border-color: var(--teal-primary) !important; box-shadow: none !important; } .input-row input::placeholder, .input-row textarea::placeholder { color: var(--text-muted) !important; } /* ============================================================ BUTTONS - Send & New ============================================================ */ .buttons-col { display: flex !important; flex-direction: column !important; gap: 4px !important; min-width: 110px !important; justify-content: center !important; align-self: center !important; } .buttons-col button { width: 100% !important; min-width: 110px !important; border-radius: 8px !important; font-weight: 600 !important; padding: 6px 16px !important; font-size: 0.75rem !important; height: 34px !important; } /* Primary button (Send) */ button.primary { background: linear-gradient(135deg, #0091ad 0%, #00a8c6 100%) !important; border: none !important; border-radius: 10px !important; font-weight: 600 !important; color: white !important; } button.primary:hover { background: linear-gradient(135deg, #007a94 0%, #0091ad 100%) !important; } /* Dark mode primary button - brighter */ @media (prefers-color-scheme: dark) { button.primary { background: linear-gradient(135deg, #0891b2 0%, #22d3ee 100%) !important; } button.primary:hover { background: linear-gradient(135deg, #0e7490 0%, #06b6d4 100%) !important; } } .dark button.primary { background: linear-gradient(135deg, #0891b2 0%, #22d3ee 100%) !important; } .dark button.primary:hover { background: linear-gradient(135deg, #0e7490 0%, #06b6d4 100%) !important; } /* New button */ .new-btn { gap: 0 !important; } .new-btn button { background: var(--new-btn-bg) !important; color: var(--new-btn-text) !important; border: 1px solid var(--new-btn-border) !important; height: 30px !important; font-size: 0.7rem !important; } .new-btn button:hover { background: var(--new-btn-hover-bg) !important; border-color: var(--new-btn-hover-border) !important; } /* ============================================================ MESSAGE COUNTER & STATUS ============================================================ */ .message-counter { text-align: center !important; margin: 4px 0 !important; padding: 0 !important; } .message-counter p { display: inline-block !important; background: transparent !important; color: var(--text-muted) !important; font-size: 0.7rem !important; font-weight: 500 !important; padding: 2px 0 !important; margin: 0 !important; } .limit-msg { text-align: center !important; margin: 4px 0 !important; } .limit-msg p { color: var(--text-secondary) !important; font-size: 0.75rem !important; font-weight: 500 !important; margin: 0 !important; } .frozen-message { text-align: center !important; padding: 6px !important; margin-top: 4px !important; } .frozen-message p { color: var(--teal-primary) !important; font-size: 0.8rem !important; font-weight: 500 !important; margin: 0 !important; } /* ============================================================ EXAMPLE BUTTONS ============================================================ */ .examples-section { margin-top: 8px !important; padding: 0 !important; gap: 8px !important; align-items: stretch !important; display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; } .examples-section > .block { flex: 0 0 auto !important; min-width: 0 !important; width: auto !important; } .examples-section > .block:first-child { flex: 0 0 auto !important; max-width: fit-content !important; align-self: center !important; } .examples-section p { font-size: 0.7rem !important; color: var(--text-muted) !important; font-weight: 500 !important; margin: 0 !important; white-space: nowrap !important; flex-shrink: 0 !important; } .example-btn { font-size: 0.68rem !important; font-weight: 500 !important; background: var(--example-bg) !important; border: 1px solid var(--border-color) !important; border-radius: 8px !important; padding: 8px 12px !important; color: var(--example-text) !important; transition: all 0.15s ease !important; white-space: normal !important; text-align: center !important; line-height: 1.3 !important; flex: 1 1 0 !important; min-width: 0 !important; height: auto !important; min-height: 50px !important; display: flex !important; align-items: center !important; justify-content: center !important; } .example-btn:hover { background: var(--teal-soft) !important; border-color: var(--teal-primary) !important; color: var(--teal-primary) !important; } /* ============================================================ FEEDBACK SECTION ============================================================ */ .feedback-section { margin-top: 8px !important; padding: 8px 12px !important; background: var(--feedback-bg) !important; border-radius: 8px !important; border: 1px solid var(--border-color) !important; display: flex !important; align-items: center !important; gap: 10px !important; } .feedback-section p { font-size: 0.75rem !important; font-weight: 500 !important; color: var(--text-secondary) !important; margin: 0 !important; white-space: nowrap !important; } .feedback-section button { font-size: 0.7rem !important; font-weight: 500 !important; padding: 4px 12px !important; border-radius: 5px !important; background: var(--bg-surface) !important; border: 1px solid var(--border-color) !important; color: var(--text-primary) !important; } .feedback-section button:hover { background: var(--teal-soft) !important; border-color: var(--teal-primary) !important; } .feedback-input { margin-top: 6px !important; } .feedback-input textarea { border-radius: 6px !important; font-size: 0.8rem !important; border: 1px solid var(--border-color) !important; background: var(--bg-input) !important; color: var(--text-primary) !important; } /* ============================================================ LOADING ANIMATION ============================================================ */ @keyframes shimmer { 0% { background-position: -200% center; } 100% { background-position: 200% center; } } @keyframes fadeInOut { 0%, 100% { opacity: 0.7; } 50% { opacity: 1; } } .loading-msg, .loading-msg * { border: none !important; box-shadow: none !important; outline: none !important; } .loading-msg { text-align: center !important; padding: 12px 20px !important; background: linear-gradient(90deg, var(--teal-soft) 0%, var(--teal-light) 25%, var(--teal-soft) 50%, var(--teal-light) 75%, var(--teal-soft) 100%) !important; background-size: 200% 100% !important; animation: shimmer 2s ease-in-out infinite, fadeInOut 2s ease-in-out infinite !important; border-radius: 10px !important; } .loading-msg p { color: var(--teal-primary) !important; font-size: 0.75rem !important; font-weight: 500 !important; margin: 0 !important; } .block.loading-msg { border-width: 0 !important; } /* ============================================================ FOOTER ============================================================ */ .footer { text-align: center !important; margin-top: 12px !important; padding: 8px !important; } .footer p { color: var(--text-muted) !important; font-size: 0.65rem !important; font-weight: 400 !important; margin: 0 !important; } /* ============================================================ MOBILE RESPONSIVE ============================================================ */ @media (max-width: 768px) { /* Container padding for mobile */ .gradio-container { padding: 12px !important; } /* Input textarea - smaller placeholder text, full width */ .input-row input, .input-row textarea { font-size: 0.8rem !important; padding: 10px 12px !important; max-width: 100% !important; } /* Feedback section - wrap on mobile */ .feedback-section { flex-wrap: wrap !important; justify-content: center !important; padding: 10px !important; gap: 8px !important; } .feedback-section p { flex: 0 0 100% !important; text-align: center !important; margin-bottom: 4px !important; } .feedback-section button { flex: 1 !important; min-width: 80px !important; } /* Example buttons - stack on mobile */ .examples-section { flex-wrap: wrap !important; justify-content: center !important; } .examples-section > .block:first-child { flex: 0 0 100% !important; text-align: center !important; } .example-btn { flex: 1 1 100% !important; min-width: 100% !important; max-width: 100% !important; } /* Header smaller on mobile */ .header-section h1, .header-content h1 { font-size: 1.3rem !important; } .header-section p, .header-content p { font-size: 0.75rem !important; } /* Buttons column - narrower on mobile */ .buttons-col { min-width: 90px !important; } .buttons-col button { min-width: 90px !important; font-size: 0.7rem !important; padding: 6px 10px !important; } }