/* ══════════════════════════════════════════════════════════ RoboGen — Dark SaaS UI Reference: Claude.ai / Perplexity aesthetic ══════════════════════════════════════════════════════════ */ /* ── Base token overrides ─────────────────────────────────── */ :root { --bg-base: #0a0a0f; --bg-surface: #111118; --bg-card: #16161f; --bg-input: #1d1d28; --border: #2a2a3d; --border-focus:#6366f1; --accent: #6366f1; --accent-dim: #4f46e5; --text-primary:#e2e8f0; --text-muted: #8892a4; --text-faint: #4a5568; --green: #22c55e; --green-dim: #166534; --amber: #f59e0b; --amber-dim: #78350f; --red: #ef4444; --red-dim: #7f1d1d; --radius-sm: 8px; --radius-md: 12px; --radius-lg: 18px; } /* ── Gradio shell reset ───────────────────────────────────── */ body, .gradio-container { background: var(--bg-base) !important; color: var(--text-primary) !important; font-family: "Inter", system-ui, -apple-system, sans-serif !important; } .gradio-container { max-width: 860px !important; margin: 0 auto !important; padding: 0 16px 80px !important; } footer { display: none !important; } /* ── Header ──────────────────────────────────────────────── */ .rg-header { text-align: center; padding: 52px 0 36px; } .rg-logo { font-size: 2.8rem; font-weight: 800; letter-spacing: -0.04em; background: linear-gradient(135deg, #a5b4fc 0%, #818cf8 50%, #6366f1 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; display: inline-block; margin-bottom: 6px; } .rg-tagline { color: var(--text-muted); font-size: 1rem; letter-spacing: 0.01em; } .rg-badge { display: inline-flex; align-items: center; gap: 6px; margin-top: 14px; padding: 5px 14px; background: rgba(99, 102, 241, 0.12); border: 1px solid rgba(99, 102, 241, 0.30); border-radius: 999px; font-size: 0.78rem; color: #a5b4fc; letter-spacing: 0.02em; } /* ── Step cards ──────────────────────────────────────────── */ .step-card { background: var(--bg-card) !important; border: 1px solid var(--border) !important; border-radius: var(--radius-lg) !important; padding: 28px !important; margin-bottom: 16px !important; transition: border-color 0.2s ease; } .step-card:focus-within { border-color: var(--border-focus) !important; } .step-header { display: flex; align-items: center; gap: 12px; margin-bottom: 22px; } .step-num { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: var(--accent); color: #fff; font-size: 0.8rem; font-weight: 700; flex-shrink: 0; } .step-title { font-size: 1rem; font-weight: 600; color: var(--text-primary); } /* ── Robot selection cards ───────────────────────────────── */ /* Style Gradio's radio buttons as large click cards */ .robot-radio .wrap { display: flex !important; gap: 12px !important; flex-wrap: nowrap !important; } .robot-radio .wrap label { flex: 1 !important; min-width: 0 !important; display: flex !important; flex-direction: column !important; align-items: center !important; gap: 10px !important; padding: 22px 12px !important; background: var(--bg-input) !important; border: 2px solid var(--border) !important; border-radius: var(--radius-md) !important; cursor: pointer !important; transition: border-color 0.18s, background 0.18s, transform 0.12s !important; color: var(--text-primary) !important; font-size: 0.95rem !important; font-weight: 600 !important; text-align: center !important; user-select: none !important; } .robot-radio .wrap label:hover { border-color: var(--accent) !important; transform: translateY(-2px) !important; } .robot-radio .wrap label:has(input:checked) { border-color: var(--accent) !important; background: rgba(99,102,241,0.12) !important; } .robot-radio .wrap input[type="radio"] { display: none !important; } .robot-radio > .label-wrap { display: none !important; } /* Robot icons (first span inside label) */ .robot-icon { font-size: 2.2rem; line-height: 1; } /* ── Dropdowns & Inputs ─────────────────────────────────── */ select, input[type="text"], input[type="email"], textarea, .gr-input { background: var(--bg-input) !important; border: 1px solid var(--border) !important; border-radius: var(--radius-sm) !important; color: var(--text-primary) !important; font-size: 0.9rem !important; } select:focus, input:focus { border-color: var(--border-focus) !important; outline: none !important; box-shadow: 0 0 0 3px rgba(99,102,241,0.15) !important; } /* Dropdown label */ label.svelte-1b6s6g, .gr-label, .block label > span { color: var(--text-muted) !important; font-size: 0.82rem !important; letter-spacing: 0.04em !important; text-transform: uppercase !important; font-weight: 600 !important; } /* ── Sliders ────────────────────────────────────────────── */ input[type="range"] { accent-color: var(--accent) !important; } /* ── Checkboxes ─────────────────────────────────────────── */ .checkbox-group .wrap { display: flex !important; gap: 10px !important; flex-wrap: wrap !important; } .checkbox-group label { display: flex !important; align-items: center !important; gap: 8px !important; padding: 8px 14px !important; background: var(--bg-input) !important; border: 1px solid var(--border) !important; border-radius: 999px !important; cursor: pointer !important; color: var(--text-primary) !important; font-size: 0.85rem !important; font-weight: 500 !important; transition: border-color 0.15s, background 0.15s !important; } .checkbox-group label:has(input:checked) { border-color: var(--accent) !important; background: rgba(99,102,241,0.12) !important; color: #a5b4fc !important; } input[type="checkbox"] { accent-color: var(--accent) !important; } /* ── Buttons ────────────────────────────────────────────── */ .gr-button, button.gr-button { border-radius: var(--radius-sm) !important; font-weight: 600 !important; font-size: 0.88rem !important; padding: 10px 20px !important; transition: all 0.15s ease !important; border: none !important; cursor: pointer !important; } .btn-primary { background: var(--accent) !important; color: #fff !important; } .btn-primary:hover { background: var(--accent-dim) !important; transform: translateY(-1px) !important; box-shadow: 0 4px 20px rgba(99,102,241,0.35) !important; } .btn-generate { width: 100% !important; padding: 16px !important; font-size: 1.05rem !important; letter-spacing: 0.02em !important; background: linear-gradient(135deg, #6366f1, #4f46e5) !important; color: #fff !important; border-radius: var(--radius-md) !important; box-shadow: 0 4px 24px rgba(99,102,241,0.3) !important; } .btn-generate:hover { box-shadow: 0 6px 30px rgba(99,102,241,0.45) !important; transform: translateY(-2px) !important; } .btn-ghost { background: transparent !important; border: 1px solid var(--border) !important; color: var(--text-muted) !important; } .btn-ghost:hover { border-color: var(--border-focus) !important; color: var(--text-primary) !important; } .btn-download { width: 100% !important; padding: 14px !important; background: rgba(34,197,94,0.15) !important; border: 1px solid rgba(34,197,94,0.4) !important; color: var(--green) !important; border-radius: var(--radius-md) !important; font-size: 0.96rem !important; } .btn-download:hover { background: rgba(34,197,94,0.25) !important; border-color: var(--green) !important; } /* ── Results dashboard ──────────────────────────────────── */ .rg-results { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 32px; font-family: "Inter", system-ui, sans-serif; } .rg-score-row { display: flex; align-items: center; gap: 24px; margin-bottom: 28px; } .rg-score-circle { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 120px; height: 120px; border-radius: 50%; flex-shrink: 0; position: relative; } .rg-score-circle.clean { background: radial-gradient(circle, rgba(34,197,94,0.15), rgba(34,197,94,0.05)); border: 3px solid var(--green); box-shadow: 0 0 30px rgba(34,197,94,0.2); } .rg-score-circle.review { background: radial-gradient(circle, rgba(245,158,11,0.15), rgba(245,158,11,0.05)); border: 3px solid var(--amber); box-shadow: 0 0 30px rgba(245,158,11,0.2); } .rg-score-circle.flagged { background: radial-gradient(circle, rgba(239,68,68,0.15), rgba(239,68,68,0.05)); border: 3px solid var(--red); box-shadow: 0 0 30px rgba(239,68,68,0.2); } .rg-score-value { font-size: 2.2rem; font-weight: 800; letter-spacing: -0.04em; color: var(--text-primary); line-height: 1; } .rg-score-denom { font-size: 0.85rem; color: var(--text-muted); margin-top: 2px; } .rg-score-info { flex: 1; } .rg-band-badge { display: inline-block; padding: 5px 14px; border-radius: 999px; font-size: 0.82rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 10px; } .rg-band-badge.clean { background: rgba(34,197,94,0.15); color: var(--green); border: 1px solid rgba(34,197,94,0.4); } .rg-band-badge.review { background: rgba(245,158,11,0.15); color: var(--amber); border: 1px solid rgba(245,158,11,0.4); } .rg-band-badge.flagged { background: rgba(239,68,68,0.15); color: var(--red); border: 1px solid rgba(239,68,68,0.4); } .rg-band-desc { font-size: 0.88rem; color: var(--text-muted); line-height: 1.5; } .rg-stat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 24px; } .rg-stat { background: var(--bg-input); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 16px; text-align: center; } .rg-stat-value { font-size: 1.6rem; font-weight: 700; color: var(--text-primary); line-height: 1; margin-bottom: 4px; } .rg-stat-label { font-size: 0.75rem; color: var(--text-muted); letter-spacing: 0.04em; text-transform: uppercase; } .rg-failure-section { margin-top: 20px; } .rg-failure-title { font-size: 0.82rem; font-weight: 600; color: var(--text-muted); letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 10px; } .rg-failure-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .rg-failure-label { font-size: 0.85rem; color: var(--text-muted); width: 160px; flex-shrink: 0; } .rg-bar-track { flex: 1; height: 6px; background: var(--border); border-radius: 999px; overflow: hidden; } .rg-bar-fill { height: 100%; border-radius: 999px; background: var(--accent); } .rg-bar-count { font-size: 0.82rem; color: var(--text-muted); width: 40px; text-align: right; flex-shrink: 0; } .rg-scorer-note { margin-top: 18px; font-size: 0.78rem; color: var(--text-faint); display: flex; align-items: center; gap: 6px; } /* ── Tooltip helper ─────────────────────────────────────── */ .tooltip-row { display: flex; align-items: flex-start; gap: 8px; margin-top: 4px; } .tooltip-label { font-size: 0.78rem; color: var(--text-faint); font-style: italic; line-height: 1.4; } /* ── Progress & status ──────────────────────────────────── */ .status-msg { font-size: 0.88rem; color: var(--text-muted); min-height: 1.2em; } /* ── Email gate ─────────────────────────────────────────── */ .email-gate-note { font-size: 0.84rem; color: var(--text-muted); margin-bottom: 14px; line-height: 1.5; } /* ── Mobile ──────────────────────────────────────────────── */ @media (max-width: 600px) { .robot-radio .wrap { flex-direction: column !important; } .rg-stat-grid { grid-template-columns: repeat(2, 1fr) !important; } .rg-score-row { flex-direction: column !important; align-items: flex-start !important; } .gradio-container { padding: 0 10px 60px !important; } } /* ── Gradio block chrome cleanup ────────────────────────── */ .block.padded { padding: 0 !important; } .block { border: none !important; background: transparent !important; box-shadow: none !important; } .panel { background: transparent !important; } div.form { border: none !important; background: transparent !important; } .gr-prose { color: var(--text-primary) !important; } /* ── Hide default Gradio decorations ──────────────────────── */ .hide-label > div > label { display: none !important; } .no-border { border: none !important; background: transparent !important; }