robogen / style.css
HaptalAI's picture
Initial RoboGen v1
f734d80 verified
Raw
History Blame Contribute Delete
14.2 kB
/* ══════════════════════════════════════════════════════════
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; }