/* ════════════════════════════════════════════════ AccessoryIQ v2 — Design System Theme: Deep navy + electric cyan. Dark mode only. ════════════════════════════════════════════════ */ /* ── CSS Custom Properties ──────────────────── */ :root { --navy-950: #060b18; --navy-900: #0a1128; --navy-800: #0f1a3d; --navy-700: #162152; --cyan-500: #00d4ff; --cyan-400: #33deff; --cyan-glow: rgba(0, 212, 255, 0.12); --green-500: #00e676; --green-dim: rgba(0, 230, 118, 0.12); --amber-500: #ffab00; --amber-dim: rgba(255, 171, 0, 0.10); --red-500: #ff5252; --red-dim: rgba(255, 82, 82, 0.10); --border: rgba(255, 255, 255, 0.07); --border-active: rgba(0, 212, 255, 0.35); --text-1: #e8edf5; --text-2: #7a8aa8; --text-3: #3d4e68; --mono: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; --radius: 10px; --radius-sm: 6px; } /* ── Reset ──────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { background: var(--navy-950); color: var(--text-1); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; font-size: 15px; line-height: 1.6; min-height: 100vh; } a { color: inherit; text-decoration: none } a:hover { text-decoration: underline } button { cursor: pointer; font-family: inherit } /* ── Gradio root overrides — CRITICAL ───────── */ .gradio-container { background: var(--navy-950) !important; max-width: 100% !important; padding: 0 !important; margin: 0 !important; } .gradio-container > .main > .wrap { padding: 0 !important } .gradio-container .gap { gap: 0 !important } .gradio-container .form { gap: 0 !important } footer { display: none !important } footer.svelte-mpyp5e { display: none !important } /* ── Custom Scrollbar ───────────────────────── */ ::-webkit-scrollbar { width: 6px } ::-webkit-scrollbar-track { background: var(--navy-900) } ::-webkit-scrollbar-thumb { background: var(--navy-700); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: var(--cyan-500) } /* ── Top Navigation Bar ─────────────────────── */ .iq-topbar { position: sticky; top: 0; z-index: 200; height: 54px; background: var(--navy-900); border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; padding: 0 2rem; } .iq-topbar-left { display: flex; align-items: center; gap: 10px; } .iq-logo-mark { width: 30px; height: 30px; background: var(--cyan-500); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 12px; letter-spacing: -0.5px; color: var(--navy-950); flex-shrink: 0; } .iq-wordmark { font-size: 15px; font-weight: 600; letter-spacing: -0.02em; color: var(--text-1); } .iq-topbar-right { display: flex; align-items: center; gap: 12px; } .iq-version-badge { font-family: var(--mono); font-size: 11px; color: var(--text-2); background: var(--navy-800); border: 1px solid var(--border); border-radius: 99px; padding: 2px 10px; } .iq-status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--green-500); box-shadow: 0 0 0 0 rgba(0, 230, 118, 0.4); animation: pulse-status 2.5s ease-in-out infinite; } @keyframes pulse-status { 0%, 100% { box-shadow: 0 0 0 0 rgba(0, 230, 118, 0.4) } 50% { box-shadow: 0 0 0 5px rgba(0, 230, 118, 0) } } /* ── Main Container ─────────────────────────── */ .iq-main { max-width: 900px; margin: 0 auto; padding: 2.5rem 1.5rem 4rem; } /* ── Hero ───────────────────────────────────── */ .iq-hero { text-align: center; padding: 2.5rem 0 2rem; } .iq-hero h1 { font-size: clamp(1.75rem, 4vw, 2.25rem); font-weight: 700; letter-spacing: -0.03em; color: var(--text-1); line-height: 1.2; } .iq-hero h1 .accent { color: var(--cyan-500) } .iq-hero p { margin-top: 0.6rem; color: var(--text-2); font-size: 0.9375rem; } /* ── Search Panel ───────────────────────────── */ .iq-search-panel { background: var(--navy-900); border: 1px solid var(--border); border-radius: var(--radius); padding: 1.25rem; margin-bottom: 1.5rem; } .iq-input-row { display: flex; gap: 10px; align-items: stretch; } /* Override Gradio textbox styles */ .iq-input-wrap { flex: 1 } .iq-input-wrap textarea, .iq-input-wrap input[type="text"] { width: 100% !important; background: var(--navy-800) !important; border: 1px solid var(--border) !important; border-radius: var(--radius-sm) !important; color: var(--text-1) !important; font-size: 0.9375rem !important; padding: 0.8rem 1rem !important; outline: none !important; resize: none !important; transition: border-color 0.2s !important; font-family: inherit !important; min-height: 44px !important; line-height: 1.5 !important; } .iq-input-wrap textarea:focus, .iq-input-wrap input[type="text"]:focus { border-color: var(--border-active) !important; box-shadow: 0 0 0 3px var(--cyan-glow) !important; } .iq-input-wrap textarea::placeholder, .iq-input-wrap input[type="text"]::placeholder { color: var(--text-3) !important } /* Hide Gradio label on textbox */ .iq-input-wrap .label-wrap { display: none !important } .iq-input-wrap .block { padding: 0 !important; border: none !important; background: transparent !important; } /* ── Submit Button ──────────────────────────── */ .iq-btn, button.iq-btn { flex-shrink: 0; background: var(--cyan-500) !important; color: var(--navy-950) !important; font-weight: 700 !important; font-size: 0.875rem !important; letter-spacing: 0.02em !important; padding: 0 1.5rem !important; border: none !important; border-radius: var(--radius-sm) !important; white-space: nowrap !important; height: 44px !important; min-height: 44px !important; transition: background 0.15s, transform 0.1s !important; align-self: flex-start !important; } .iq-btn:hover, button.iq-btn:hover { background: var(--cyan-400) !important; transform: translateY(-1px) !important; } .iq-btn:active, button.iq-btn:active { transform: scale(0.98) !important } .iq-btn:disabled, button.iq-btn:disabled { opacity: 0.5 !important; transform: none !important } /* ── Example Chips ──────────────────────────── */ .iq-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 0.875rem; } .iq-chip { background: transparent; border: 1px solid var(--border); border-radius: 99px; padding: 4px 13px; font-size: 0.8rem; color: var(--text-2); cursor: pointer; transition: all 0.15s; white-space: nowrap; } .iq-chip:hover { border-color: var(--border-active); color: var(--cyan-400); background: var(--cyan-glow); } /* ── Result Panel Wrapper ───────────────────── */ .iq-result-panel { border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; background: var(--navy-900); } /* ── Result Header ──────────────────────────── */ .iq-result-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px; padding: 1.1rem 1.25rem; border-bottom: 1px solid var(--border); } .iq-header-left { display: flex; align-items: center; gap: 10px; } .iq-device-info { font-size: 0.8125rem; color: var(--text-2); } .iq-device-info strong { color: var(--text-1) } /* ── Verdict Badge ──────────────────────────── */ .iq-badge { display: inline-flex; align-items: center; gap: 7px; padding: 5px 12px; border-radius: var(--radius-sm); font-size: 0.75rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; white-space: nowrap; } .iq-badge::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex-shrink: 0; } .iq-badge-compatible { background: var(--green-dim); border: 1px solid rgba(0, 230, 118, 0.25); color: var(--green-500); } .iq-badge-incompatible { background: var(--red-dim); border: 1px solid rgba(255, 82, 82, 0.25); color: var(--red-500); } .iq-badge-insufficient, .iq-badge-refused { background: var(--amber-dim); border: 1px solid rgba(255, 171, 0, 0.25); color: var(--amber-500); } .iq-run-id { font-family: var(--mono); font-size: 0.6875rem; color: var(--text-3); } /* ── Source Path Banner ─────────────────────── */ .iq-source-banner { padding: 0.5rem 1.25rem; font-size: 0.8rem; font-weight: 600; letter-spacing: 0.04em; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; } .iq-source-banner.rag { background: rgba(0, 230, 118, 0.05); color: var(--green-500); } .iq-source-banner.serper { background: rgba(0, 212, 255, 0.05); color: var(--cyan-500); } .iq-source-banner.healing { background: rgba(255, 171, 0, 0.05); color: var(--amber-500); } /* ── Confidence Section ─────────────────────── */ .iq-confidence { padding: 1rem 1.25rem; border-bottom: 1px solid var(--border); } .iq-conf-row { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px; } .iq-conf-label { font-size: 0.75rem; color: var(--text-2) } .iq-conf-value { font-family: var(--mono); font-size: 1.375rem; font-weight: 700; letter-spacing: -0.02em; color: var(--text-1); } .iq-conf-band { font-size: 0.75rem; color: var(--text-2); margin-left: 6px; font-weight: 400; } .iq-bar-track { position: relative; height: 5px; background: var(--navy-800); border-radius: 99px; overflow: hidden; margin-bottom: 6px; } .iq-bar-fill { height: 100%; border-radius: 99px; transition: width 1s cubic-bezier(0.16, 1, 0.3, 1); } .iq-bar-fill.high { background: linear-gradient(90deg, #00e676, #00bcd4) } .iq-bar-fill.medium { background: var(--amber-500) } .iq-bar-fill.low { background: var(--red-500) } .iq-bar-zones { display: flex; justify-content: space-between; } .iq-bar-zone { font-size: 0.625rem; color: var(--text-3) } /* ── Section Containers ─────────────────────── */ .iq-section { padding: 1rem 1.25rem; border-bottom: 1px solid var(--border); } .iq-section:last-child { border-bottom: none } .iq-section-label { font-size: 0.6875rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-3); margin-bottom: 0.6rem; } .iq-explanation { font-size: 0.9375rem; color: var(--text-1); line-height: 1.75; white-space: pre-wrap; } /* ── Warning Box ────────────────────────────── */ .iq-warnings { padding: 0.875rem 1.25rem; background: rgba(255, 171, 0, 0.05); border-left: 3px solid var(--amber-500); border-bottom: 1px solid var(--border); } .iq-warning-item { font-size: 0.875rem; color: var(--amber-500); line-height: 1.65; } .iq-warning-item + .iq-warning-item { margin-top: 4px } /* ── Evidence Grid ──────────────────────────── */ .iq-evidence-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; margin-top: 0.75rem; } /* ── Evidence Card ──────────────────────────── */ .iq-ev-card { background: var(--navy-800); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 1.1rem 1.1rem 1rem; transition: border-color 0.2s, transform 0.15s; display: flex; flex-direction: column; gap: 8px; min-height: 130px; } .iq-ev-card:hover { border-color: var(--border-active); transform: translateY(-1px); } .iq-ev-header { display: flex; align-items: center; gap: 7px; } .iq-ev-favicon { width: 14px; height: 14px; border-radius: 2px; flex-shrink: 0; object-fit: contain; } /* RAG local favicon icon */ .iq-ev-favicon-icon { font-size: 13px; color: var(--cyan-500); width: 14px; height: 14px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .iq-ev-domain { font-size: 0.75rem; color: var(--text-2); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Trust badges */ .iq-trust { font-size: 0.625rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase; padding: 2px 7px; border-radius: 99px; flex-shrink: 0; } .iq-trust-1 { background: rgba(0, 230, 118, 0.12); color: var(--green-500); } .iq-trust-2 { background: rgba(0, 212, 255, 0.12); color: var(--cyan-400); } .iq-trust-3 { background: rgba(122, 138, 168, 0.12); color: var(--text-2); } .iq-trust-rag { background: rgba(0, 212, 255, 0.12); color: var(--cyan-400); } /* Evidence title wrapper */ .iq-ev-title { font-size: 0.8375rem; font-weight: 500; color: var(--text-1); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; margin-bottom: 4px; } /* Evidence title — external link */ .iq-ev-title-link { color: var(--text-1); text-decoration: none; transition: color 0.15s; } .iq-ev-title-link:hover { color: var(--cyan-400); text-decoration: underline; } /* Evidence title — local / non-link */ .iq-ev-title-text { color: var(--text-1); } /* Evidence snippet */ .iq-ev-snippet { font-size: 0.8rem; color: var(--text-2); line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical; overflow: hidden; } /* More sources note */ .iq-more-sources { font-size: 0.75rem; color: var(--text-3); text-align: center; padding: 0.5rem 0 0; } /* ── Reasoning Trace ────────────────────────── */ details.iq-trace { background: var(--navy-900); border-top: 1px solid var(--border); } details.iq-trace > summary { list-style: none; display: flex; align-items: center; gap: 8px; padding: 0.75rem 1.25rem; cursor: pointer; font-size: 0.8125rem; color: var(--text-2); user-select: none; transition: color 0.15s; } details.iq-trace > summary::-webkit-details-marker { display: none } details.iq-trace > summary::after { content: '›'; margin-left: auto; font-size: 1rem; transition: transform 0.2s; } details.iq-trace[open] > summary { color: var(--cyan-400) } details.iq-trace[open] > summary::after { transform: rotate(90deg) } .iq-trace-body { padding: 0.75rem 1.25rem 1rem; background: var(--navy-950); border-top: 1px solid var(--border); } .iq-trace-step { font-family: var(--mono); font-size: 0.75rem; color: var(--text-3); line-height: 1.8; } .iq-trace-step::before { content: '› '; color: var(--cyan-500); } /* ── Refusal Card ───────────────────────────── */ .iq-refusal { padding: 2.5rem 1.5rem; text-align: center; border: 1px solid rgba(255, 171, 0, 0.2); border-radius: var(--radius); background: var(--navy-900); } .iq-refusal-icon { font-size: 2rem; margin-bottom: 0.75rem; display: block; } .iq-refusal-title { font-size: 1.0625rem; font-weight: 600; color: var(--amber-500); margin-bottom: 0.5rem; } .iq-refusal-reason { font-size: 0.875rem; color: var(--text-2); line-height: 1.65; margin-bottom: 1rem; } .iq-refusal-reason small { color: var(--text-3); font-size: 0.8rem } .iq-refusal-suggestions { text-align: left; background: var(--navy-800); border-radius: var(--radius-sm); padding: 0.875rem 1rem; margin: 0 auto; max-width: 480px; } /* Refusal suggestion items */ .iq-suggestion-item { font-size: 0.8125rem; color: var(--text-2); line-height: 1.75; padding: 2px 0; } .iq-suggestion-item::before { content: '→ '; color: var(--cyan-500); } /* ── Loading State ──────────────────────────── */ .iq-loading { padding: 3rem 1rem; display: flex; flex-direction: column; align-items: center; gap: 1.25rem; } .iq-spinner { width: 40px; height: 40px; border: 2px solid var(--border); border-top-color: var(--cyan-500); border-radius: 50%; animation: spin 0.75s linear infinite; } @keyframes spin { to { transform: rotate(360deg) } } .iq-loading-steps { display: flex; flex-direction: column; align-items: center; gap: 5px; } .iq-loading-step { font-size: 0.8125rem; color: var(--text-3); transition: color 0.3s; } .iq-loading-step.active { color: var(--cyan-400) } .iq-loading-step.done { color: var(--green-500) } .iq-loading-step.done::before { content: '✓ ' } /* ── Error Card ─────────────────────────────── */ .iq-error { padding: 1.5rem; background: var(--red-dim); border: 1px solid rgba(255, 82, 82, 0.25); border-radius: var(--radius); font-size: 0.875rem; color: var(--red-500); line-height: 1.65; } .iq-error strong { display: block; margin-bottom: 4px; font-size: 0.9375rem; } .iq-error code { background: rgba(255, 82, 82, 0.1); padding: 2px 6px; border-radius: 4px; font-family: var(--mono); font-size: 0.8125rem; } /* ── Responsive ─────────────────────────────── */ @media (max-width: 640px) { .iq-main { padding: 1.5rem 1rem 3rem } .iq-hero { padding: 1.5rem 0 1.25rem } .iq-input-row { flex-direction: column } .iq-btn, button.iq-btn { width: 100% !important; height: 42px !important } .iq-evidence-grid { grid-template-columns: 1fr } .iq-ev-card { min-height: unset } .iq-topbar { padding: 0 1rem } .iq-result-header { flex-direction: column; align-items: flex-start } } /* ── Evidence section spacing ───────────────── */ .iq-section.evidence-section { padding: 1.25rem 1.25rem 1.5rem; border-bottom: 1px solid var(--border); } .iq-ev-count { font-size: 0.6875rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-3); margin-bottom: 0.75rem; } /* ── Loading state overrides ────────────────── */ .iq-loading { padding: 3rem 1rem; display: flex; flex-direction: column; align-items: center; gap: 1rem; background: var(--navy-900); border: 1px solid var(--border); border-radius: var(--radius); min-height: 200px; justify-content: center; } .iq-loading-label { font-size: 0.9375rem; font-weight: 500; color: var(--cyan-400); letter-spacing: 0.01em; } .iq-loading-steps { display: flex; flex-direction: column; align-items: center; gap: 4px; margin-top: 0.25rem; } .iq-loading-step { font-size: 0.8rem; color: var(--text-3); line-height: 1.6; } .iq-spinner { width: 36px; height: 36px; border: 2.5px solid rgba(0, 212, 255, 0.15); border-top-color: var(--cyan-500); border-radius: 50%; animation: iq-spin 0.7s linear infinite; } @keyframes iq-spin { to { transform: rotate(360deg) } } /* ── Prevent Gradio intercepting evidence links */ .iq-ev-card a { pointer-events: auto !important; cursor: pointer !important; position: relative; z-index: 10; } .iq-ev-card { cursor: default; pointer-events: auto; }