/* ============================================================ assets/style.css — Personal Document Intel & Archiver Caregiver-friendly, calming blues/teals, clean & accessible ============================================================ */ /* ── Google Fonts ─────────────────────────────────────────── */ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); /* ── CSS Custom Properties ────────────────────────────────── */ :root { --primary: #1e7a8f; --primary-light: #2a9db5; --primary-dark: #145f70; --accent: #0ea5a0; --accent-light: #14b8b3; --bg: #f0f7fa; --bg-card: #ffffff; --bg-sidebar: #e8f4f8; --bg-hover: #d6edf4; --text-primary: #1a2f38; --text-secondary:#4a6b78; --text-muted: #7a9aaa; --text-on-accent:#ffffff; --border: #c8dfe8; --border-focus: #1e7a8f; --success: #1a9a6e; --warning: #d68c1a; --danger: #c0392b; --radius-sm: 6px; --radius: 10px; --radius-lg: 16px; --shadow-sm: 0 1px 4px rgba(30,122,143,0.10); --shadow: 0 4px 16px rgba(30,122,143,0.14); --shadow-lg: 0 8px 32px rgba(30,122,143,0.18); --transition: 0.18s ease; } /* ── Base Reset ───────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; } body, .gradio-container { font-family: 'Inter', system-ui, -apple-system, sans-serif !important; background-color: var(--bg) !important; color: var(--text-primary) !important; font-size: 15px; line-height: 1.6; } /* ── Status Banner ────────────────────────────────────────── */ .status-banner { background: linear-gradient(135deg, var(--primary-dark), var(--primary)); color: #fff; padding: 10px 20px; border-radius: var(--radius); font-size: 13px; font-weight: 500; letter-spacing: 0.02em; display: flex; align-items: center; gap: 8px; margin-bottom: 12px; box-shadow: var(--shadow-sm); } /* ── Tab Styling ──────────────────────────────────────────── */ .tab-nav { background: var(--bg-card) !important; border-radius: var(--radius-lg) var(--radius-lg) 0 0 !important; border-bottom: 2px solid var(--border) !important; padding: 4px 8px 0 !important; } .tab-nav button { font-family: 'Inter', sans-serif !important; font-size: 14px !important; font-weight: 500 !important; color: var(--text-secondary) !important; border-radius: var(--radius-sm) var(--radius-sm) 0 0 !important; padding: 10px 18px !important; transition: background var(--transition), color var(--transition) !important; border: none !important; } .tab-nav button:hover { background: var(--bg-hover) !important; color: var(--primary) !important; } .tab-nav button.selected { background: var(--bg) !important; color: var(--primary) !important; border-bottom: 3px solid var(--primary) !important; font-weight: 600 !important; } /* ── Inputs ───────────────────────────────────────────────── */ input[type="text"], input[type="date"], input[type="time"], textarea, select, .gradio-textbox textarea, .gradio-textbox input { font-family: 'Inter', sans-serif !important; border: 1.5px solid var(--border) !important; border-radius: var(--radius-sm) !important; background: #fff !important; color: var(--text-primary) !important; transition: border-color var(--transition), box-shadow var(--transition) !important; padding: 8px 12px !important; font-size: 14px !important; } input:focus, textarea:focus, select:focus, .gradio-textbox textarea:focus, .gradio-textbox input:focus { border-color: var(--border-focus) !important; box-shadow: 0 0 0 3px rgba(30,122,143,0.15) !important; outline: none !important; } /* ── Buttons ──────────────────────────────────────────────── */ button.primary, .gradio-button.primary { background: linear-gradient(135deg, var(--primary), var(--primary-light)) !important; color: #fff !important; border: none !important; border-radius: var(--radius-sm) !important; font-family: 'Inter', sans-serif !important; font-weight: 600 !important; font-size: 14px !important; padding: 9px 20px !important; cursor: pointer !important; transition: transform var(--transition), box-shadow var(--transition) !important; box-shadow: var(--shadow-sm) !important; } button.primary:hover, .gradio-button.primary:hover { transform: translateY(-1px) !important; box-shadow: var(--shadow) !important; } button.secondary, .gradio-button.secondary { background: var(--bg-card) !important; color: var(--primary) !important; border: 1.5px solid var(--border) !important; border-radius: var(--radius-sm) !important; font-family: 'Inter', sans-serif !important; font-weight: 500 !important; font-size: 14px !important; padding: 9px 20px !important; cursor: pointer !important; transition: background var(--transition), border-color var(--transition) !important; } button.secondary:hover, .gradio-button.secondary:hover { background: var(--bg-hover) !important; border-color: var(--primary) !important; } /* Danger button */ button.danger { background: var(--bg-card) !important; color: var(--danger) !important; border: 1.5px solid var(--danger) !important; border-radius: var(--radius-sm) !important; font-family: 'Inter', sans-serif !important; font-weight: 500 !important; font-size: 14px !important; padding: 9px 20px !important; cursor: pointer !important; transition: background var(--transition) !important; } button.danger:hover { background: #fdecea !important; } /* ── Cards / Panels ───────────────────────────────────────── */ .card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; box-shadow: var(--shadow-sm); transition: box-shadow var(--transition); } .card:hover { box-shadow: var(--shadow); } /* ── Labels ───────────────────────────────────────────────── */ label, .gradio-label { font-family: 'Inter', sans-serif !important; font-weight: 500 !important; font-size: 13px !important; color: var(--text-secondary) !important; margin-bottom: 4px !important; letter-spacing: 0.01em !important; } /* ── Dataframes / Tables ──────────────────────────────────── */ .gradio-dataframe table { border-collapse: collapse !important; width: 100% !important; font-size: 14px !important; } .gradio-dataframe th { background: var(--bg-sidebar) !important; color: var(--primary) !important; font-weight: 600 !important; padding: 10px 14px !important; border-bottom: 2px solid var(--border) !important; text-align: left !important; } .gradio-dataframe td { padding: 9px 14px !important; border-bottom: 1px solid var(--border) !important; color: var(--text-primary) !important; } .gradio-dataframe tr:hover td { background: var(--bg-hover) !important; } /* ── Food / Diet tables ──────────────────────────────────── */ table.allergy-table th { background: #fef3e7 !important; color: #b84a00 !important; border-bottom-color: #f5cba7 !important; } table.allergy-table { border: 1px solid #f5cba7 !important; border-radius: var(--radius-sm) !important; } table.preferred-table th { background: #e8f8ee !important; color: #1a7a4a !important; border-bottom-color: #a3d9b1 !important; } table.preferred-table { border: 1px solid #a3d9b1 !important; border-radius: var(--radius-sm) !important; } table.aversion-table th { background: #fef0e6 !important; color: #b45f2a !important; border-bottom-color: #f0c9a3 !important; } table.aversion-table { border: 1px solid #f0c9a3 !important; border-radius: var(--radius-sm) !important; } /* ── Chat Interface ───────────────────────────────────────── */ .gradio-chatbot { background: var(--bg-card) !important; border: 1px solid var(--border) !important; border-radius: var(--radius) !important; } .message.user { background: linear-gradient(135deg, var(--primary), var(--primary-light)) !important; color: #fff !important; border-radius: var(--radius) var(--radius-sm) var(--radius-sm) var(--radius) !important; } .message.bot { background: var(--bg-sidebar) !important; color: var(--text-primary) !important; border: 1px solid var(--border) !important; border-radius: var(--radius-sm) var(--radius) var(--radius) var(--radius-sm) !important; } /* ── Accordion ────────────────────────────────────────────── */ .gradio-accordion { border: 1px solid var(--border) !important; border-radius: var(--radius) !important; overflow: hidden !important; } .gradio-accordion > .label-wrap { background: var(--bg-sidebar) !important; padding: 12px 16px !important; font-weight: 600 !important; color: var(--primary) !important; } /* ── Status / Alert Boxes ─────────────────────────────────── */ .status-ok { color: var(--success); font-weight: 600; } .status-warn { color: var(--warning); font-weight: 600; } .status-error { color: var(--danger); font-weight: 600; } /* ── Footer ───────────────────────────────────────────────── */ .app-footer { text-align: center; padding: 16px; color: var(--text-muted); font-size: 12px; border-top: 1px solid var(--border); margin-top: 24px; } /* ── Upload Zone ──────────────────────────────────────────── */ .upload-zone { border: 2px dashed var(--border) !important; border-radius: var(--radius) !important; background: var(--bg-sidebar) !important; transition: border-color var(--transition), background var(--transition) !important; } .upload-zone:hover { border-color: var(--primary) !important; background: var(--bg-hover) !important; } /* ── Scrollbars (webkit) ──────────────────────────────────── */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: var(--bg); } ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--primary-light); } /* ── Responsive ───────────────────────────────────────────── */ @media (max-width: 768px) { body, .gradio-container { font-size: 14px !important; } .tab-nav button { padding: 8px 12px !important; font-size: 12px !important; } }