NL2Bash / styles.css
dilkush-sp18
feat: ui redesign
433b5c4
Raw
History Blame Contribute Delete
19.8 kB
@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&family=Inter:wght@400;500;600&display=swap");
/* ─── Palette ────────────────────────────────────────────────── */
:root {
--ground: #f4efe6;
--surface: #fffaf2;
--surface-2: #f6edde;
--surface-3: #ede0c8;
--border: rgba(79, 59, 28, 0.14);
--border-hi: rgba(184, 114, 21, 0.28);
--amber: #b87215;
--amber-bright:#d18a22;
--amber-dim: rgba(184, 114, 21, 0.12);
--amber-glow: rgba(184, 114, 21, 0.16);
--text: #1f2937;
--text-2: #475569;
--text-3: #7c8798;
--green: #15803d;
--green-dim: rgba(21, 128, 61, 0.10);
--red: #dc2626;
--red-dim: rgba(220, 38, 38, 0.10);
--mono: "JetBrains Mono", "Fira Code", monospace;
--sans: "Inter", system-ui, sans-serif;
--shadow: 0 18px 42px rgba(82, 59, 24, 0.12);
--radius-panel: 20px;
--radius-card: 16px;
--radius-sm: 10px;
}
/* ─── Base ───────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
body,
.gradio-container,
.gradio-container-6-19-0 {
background: var(--ground) !important;
color: var(--text) !important;
font-family: var(--sans) !important;
}
/* Subtle dot grid */
body::before {
content: "";
position: fixed;
inset: 0;
background-image: radial-gradient(rgba(184, 114, 21, 0.06) 1px, transparent 1px);
background-size: 24px 24px;
pointer-events: none;
z-index: 0;
}
.gradio-container {
max-width: 1720px !important;
margin: 0 auto !important;
padding: 28px 20px 48px !important;
position: relative;
z-index: 1;
}
footer { display: none !important; }
/* ─── Shell layout ───────────────────────────────────────────── */
.app-shell {
align-items: flex-start;
gap: 20px;
}
/* ─── Sidebar ────────────────────────────────────────────────── */
.sidebar-column {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius-panel);
padding: 24px !important;
position: sticky;
top: 20px;
box-shadow: var(--shadow);
}
.app-logo img {
border-radius: var(--radius-sm);
border: 1px solid var(--border);
}
/* Section headings in sidebar */
.sidebar-title p,
.sidebar-title h2 {
font-family: var(--mono) !important;
font-size: 0.68rem !important;
font-weight: 500 !important;
letter-spacing: 0.12em !important;
text-transform: uppercase !important;
color: var(--amber) !important;
margin-top: 20px !important;
margin-bottom: 6px !important;
padding-bottom: 6px;
border-bottom: 1px solid var(--border);
}
.sidebar-copy p {
font-family: var(--sans) !important;
font-size: 0.84rem !important;
color: var(--text-2) !important;
line-height: 1.65;
margin: 0 0 4px;
}
/* Model list in sidebar β€” monospace, minimal */
.sidebar-copy ul {
list-style: none;
padding: 0;
margin: 0;
}
.sidebar-copy li {
font-family: var(--mono);
font-size: 0.8rem;
color: var(--text-2);
padding: 4px 0;
border-bottom: 1px solid var(--border);
}
.sidebar-copy li::before {
content: "$ ";
color: var(--amber);
opacity: 0.6;
}
/* ─── Sidebar links ───────────────────────────────────────────── */
.sidebar-links {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 4px;
}
.sidebar-link {
display: inline-flex;
align-items: center;
padding: 6px 12px;
color: var(--text-2);
text-decoration: none;
border-radius: 6px;
border: 1px solid var(--border);
background: var(--surface-2);
font-family: var(--mono);
font-size: 0.75rem;
letter-spacing: 0.03em;
transition: color 0.15s, border-color 0.15s, background 0.15s;
}
.sidebar-link::before {
content: "β†— ";
color: var(--amber);
opacity: 0.7;
margin-right: 2px;
}
.sidebar-link:hover {
color: var(--text);
border-color: var(--border-hi);
background: var(--amber-dim);
}
.sidebar-empty {
font-size: 0.8rem;
color: var(--text-3);
font-family: var(--mono);
}
/* ─── Cache panel ────────────────────────────────────────────── */
.cache-wrapper {
margin-top: 8px;
}
.cache-panel {
margin-top: 4px;
padding: 14px;
border-radius: var(--radius-sm);
border: 1px solid var(--border);
background: rgba(255, 250, 242, 0.92);
}
.cache-panel__header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.cache-panel__header h3 {
margin: 0;
font-family: var(--mono);
font-size: 0.72rem;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-2);
}
.cache-panel__header span {
font-family: var(--mono);
font-size: 0.72rem;
color: var(--amber);
}
.cache-panel ul {
list-style: none;
margin: 0;
padding: 0;
display: grid;
gap: 6px;
}
.cache-item {
display: flex;
align-items: center;
gap: 8px;
font-family: var(--mono);
font-size: 0.75rem;
color: var(--text-3);
}
.cache-item--loaded {
color: var(--green);
}
/* ─── Main column ────────────────────────────────────────────── */
.main-column {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius-panel);
padding: 28px !important;
box-shadow: var(--shadow);
}
/* ─── Hero ───────────────────────────────────────────────────── */
.hero-row {
margin-bottom: 20px;
}
.hero-inner {
padding: 4px 0 12px;
}
.hero-eyebrow {
display: inline-block;
font-family: var(--mono);
font-size: 0.72rem;
font-weight: 400;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--amber);
margin-bottom: 12px;
padding: 4px 10px;
border: 1px solid var(--border-hi);
border-radius: 4px;
background: var(--amber-dim);
}
.hero-headline {
font-family: var(--mono) !important;
font-size: clamp(2.4rem, 5vw, 3.8rem);
font-weight: 700;
line-height: 1.05;
letter-spacing: -0.03em;
color: var(--text) !important;
margin: 0 0 14px;
}
/* Blinking cursor β€” the single animated element */
.hero-cursor {
color: var(--amber);
animation: blink 1.1s step-end infinite;
font-weight: 300;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
.hero-sub {
font-family: var(--sans);
font-size: 1rem;
font-weight: 500;
color: var(--text) !important;
margin: 0 0 6px;
opacity: 0.85;
}
.hero-desc {
font-family: var(--sans);
font-size: 0.88rem;
color: var(--text-2) !important;
line-height: 1.6;
margin: 0;
max-width: 56ch;
}
/* Kill Gradio's default hero markdown styling */
.hero-text p { margin: 0 !important; }
.hero-text h1, .hero-text h3 { color: var(--text) !important; }
/* ─── Input / Terminal window ────────────────────────────────── */
.input-card {
position: relative;
background: var(--surface);
--block-background-fill: transparent;
--block-border-color: var(--border);
--block-label-text-color: var(--text-2);
--input-background-fill: var(--surface-2);
--input-background-fill-focus: var(--surface-2);
--input-border-color: var(--border);
--input-border-color-focus: var(--border-hi);
--input-placeholder-color: var(--text-3);
--input-text-color: var(--text);
border: 1px solid var(--border);
border-radius: var(--radius-card);
padding: 0 !important;
margin: 0 0 20px;
overflow: hidden;
}
/* Terminal title bar */
.input-card::before {
content: "● ● ●\00a0\00a0\00a0\00a0\00a0$ nl2bash";
display: block;
background: var(--surface-3);
border-bottom: 1px solid var(--border);
padding: 10px 16px;
font-family: var(--mono);
font-size: 0.72rem;
letter-spacing: 0.06em;
color: var(--text-2);
}
/* Pad the inner content */
.input-card > div {
padding: 16px 16px 20px !important;
}
/* Override Gradio's textbox inside input-card */
.input-card .block,
.input-card .gradio-textbox,
.input-card [data-testid="textbox"],
.input-card [data-testid="textbox"] > label,
.input-card [data-testid="textbox"] > label > div,
.input-card [data-testid="textbox"] > label > div > textarea,
.input-card textarea,
.input-card input {
background: var(--surface-2) !important;
color: var(--text) !important;
border-color: var(--border) !important;
font-family: var(--mono) !important;
font-size: 0.9rem !important;
border-radius: var(--radius-sm) !important;
}
.input-card .block {
background: transparent !important;
}
.input-card [data-testid="textbox"],
.input-card [data-testid="textbox"] > label,
.input-card [data-testid="textbox"] > label > div {
box-shadow: none !important;
}
.input-card textarea::placeholder {
color: var(--text-3) !important;
opacity: 1 !important;
}
.input-card textarea:focus,
.input-card input:focus,
.input-card [data-testid="textbox"] > label > div:focus-within {
background: var(--surface-2) !important;
border-color: var(--border-hi) !important;
box-shadow: 0 0 0 2px var(--amber-dim) !important;
outline: none;
}
.input-card label span,
.input-card .label-wrap span {
font-family: var(--mono) !important;
font-size: 0.72rem !important;
font-weight: 500 !important;
letter-spacing: 0.08em !important;
text-transform: uppercase !important;
color: var(--text-2) !important;
}
/* Examples chips */
.input-card .examples-row button,
.input-card .examples button {
font-family: var(--mono) !important;
font-size: 0.75rem !important;
background: var(--surface-2) !important;
border: 1px solid var(--border) !important;
color: var(--text-2) !important;
border-radius: 6px !important;
padding: 4px 10px !important;
transition: border-color 0.15s, color 0.15s !important;
}
.input-card .examples-row button:hover,
.input-card .examples button:hover {
border-color: var(--border-hi) !important;
color: var(--amber) !important;
background: var(--amber-dim) !important;
}
/* ─── Generate button ────────────────────────────────────────── */
.generate-button button {
min-height: 48px;
border-radius: var(--radius-sm) !important;
font-family: var(--mono) !important;
font-size: 0.9rem !important;
font-weight: 500 !important;
letter-spacing: 0.04em;
background: var(--amber) !important;
color: #fffaf2 !important;
border: none !important;
box-shadow: 0 10px 24px rgba(184, 114, 21, 0.18);
transition: transform 0.12s, box-shadow 0.12s;
}
.generate-button button:hover:not(:disabled) {
transform: translateY(-2px);
box-shadow: 0 14px 28px rgba(184, 114, 21, 0.24);
background: var(--amber-bright) !important;
}
.generate-button button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* ─── Results grid ───────────────────────────────────────────── */
.results-grid {
display: grid !important;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 14px;
width: 100%;
}
/* ─── Model card ─────────────────────────────────────────────── */
.model-card {
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: var(--radius-card);
padding: 0 !important;
min-height: 100%;
overflow: hidden;
transition: border-color 0.18s, box-shadow 0.18s;
}
.model-card:hover {
border-color: var(--border-hi);
box-shadow: 0 0 24px var(--amber-glow);
}
/* Card top accent strip */
.model-card::before {
content: "";
display: block;
height: 2px;
background: linear-gradient(90deg, var(--amber) 0%, transparent 100%);
opacity: 0.5;
}
/* Card inner padding (Gradio adds a div inside) */
.model-card > div {
padding: 14px 14px 16px !important;
}
.card-title p,
.card-title h2 {
font-family: var(--mono) !important;
font-size: 0.85rem !important;
font-weight: 500 !important;
letter-spacing: 0.04em !important;
color: var(--text) !important;
margin: 0 0 10px !important;
padding-bottom: 10px !important;
border-bottom: 1px solid var(--border) !important;
}
/* ─── Status pill ────────────────────────────────────────────── */
.status-wrapper {
margin-bottom: 8px;
}
.status-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 10px 4px 8px;
border-radius: 6px;
font-family: var(--mono);
font-size: 0.72rem;
font-weight: 500;
letter-spacing: 0.05em;
border: 1px solid transparent;
}
.status-pill::before {
content: "";
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
flex-shrink: 0;
}
.status-pill--idle {
background: rgba(124, 135, 152, 0.12);
color: var(--text-2);
border-color: rgba(124, 135, 152, 0.2);
}
.status-pill--idle::before { background: var(--text-3); }
.status-pill--success {
background: var(--green-dim);
color: var(--green);
border-color: rgba(21, 128, 61, 0.2);
}
.status-pill--success::before { background: var(--green); }
.status-pill--loading {
background: var(--amber-dim);
color: var(--amber);
border-color: var(--border-hi);
}
.status-pill--loading::before {
background: var(--amber);
animation: dot-pulse 1.2s ease-in-out infinite;
}
.status-pill--error {
background: var(--red-dim);
color: var(--red);
border-color: rgba(220, 38, 38, 0.18);
}
.status-pill--error::before { background: var(--red); }
@keyframes dot-pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.3; transform: scale(0.7); }
}
/* ─── Command box ────────────────────────────────────────────── */
.command-box {
margin-top: 10px;
--block-background-fill: transparent;
--block-border-color: var(--border);
--block-label-text-color: var(--text-2);
--input-background-fill: #fffdf8;
--input-background-fill-focus: #fffdf8;
--input-border-color: var(--border);
--input-border-color-focus: var(--border-hi);
--input-text-color: var(--text);
}
.command-box .wrap,
.command-box > div,
.command-box [data-testid="code"],
.command-box [data-testid="code"] > div {
border-radius: var(--radius-sm) !important;
border-color: var(--border) !important;
background: #fffdf8 !important;
}
.command-box .cm-editor,
.command-box .cm-content,
.command-box .cm-line,
.command-box .cm-line span,
.command-box .cm-gutters,
.command-box .cm-gutterElement,
.command-box .cm-scroller,
.command-box textarea,
.command-box pre,
.command-box code {
font-family: var(--mono) !important;
font-size: 0.82rem !important;
color: var(--text) !important;
background: #fffdf8 !important;
}
.command-box .cm-editor {
border: 1px solid var(--border) !important;
}
.command-box .cm-gutters,
.command-box .cm-activeLineGutter {
color: var(--text-3) !important;
border-right: 1px solid var(--border) !important;
}
.command-box .cm-activeLine {
background: rgba(31, 41, 55, 0.03) !important;
}
.command-box .cm-selectionBackground,
.command-box ::selection {
background: rgba(232, 160, 32, 0.28) !important;
}
/* Copy button */
.command-box button {
font-family: var(--mono) !important;
font-size: 0.7rem !important;
border-radius: 6px !important;
background: var(--surface-3) !important;
border: 1px solid var(--border) !important;
color: var(--text-2) !important;
transition: color 0.12s, border-color 0.12s !important;
}
.command-box button:hover {
color: var(--amber) !important;
border-color: var(--border-hi) !important;
}
/* Code label */
.command-box label span,
.command-box .label-wrap span {
font-family: var(--mono) !important;
font-size: 0.68rem !important;
letter-spacing: 0.08em !important;
text-transform: uppercase !important;
color: var(--text-2) !important;
}
/* ─── Latency block ──────────────────────────────────────────── */
.latency-wrapper { margin-top: 4px; }
.latency-block {
display: flex;
align-items: baseline;
justify-content: space-between;
padding: 8px 10px;
border-radius: 6px;
background: var(--surface-2);
border: 1px solid var(--border);
margin-top: 8px;
}
.latency-label {
font-family: var(--mono);
font-size: 0.68rem;
text-transform: uppercase;
letter-spacing: 0.10em;
color: var(--text-3);
}
.latency-value {
font-family: var(--mono);
font-size: 0.82rem;
font-weight: 500;
color: var(--amber);
}
/* ─── Detail copy ────────────────────────────────────────────── */
.detail-copy {
margin-top: 10px;
}
.detail-copy p,
.detail-copy em {
font-family: var(--sans) !important;
font-size: 0.80rem !important;
color: var(--text-2) !important;
line-height: 1.55;
}
/* ─── Footer ─────────────────────────────────────────────────── */
.app-footer {
margin-top: 24px;
text-align: center;
padding-top: 18px;
border-top: 1px solid var(--border);
font-family: var(--mono);
font-size: 0.72rem;
letter-spacing: 0.06em;
color: var(--text-3) !important;
}
/* ─── Responsive ─────────────────────────────────────────────── */
@media (max-width: 1200px) {
.results-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.sidebar-column { position: static; }
}
@media (max-width: 820px) {
.gradio-container { padding: 14px 12px 32px !important; }
.results-grid { grid-template-columns: minmax(0, 1fr); }
.main-column,
.sidebar-column { border-radius: var(--radius-sm); padding: 16px !important; }
.hero-headline { font-size: 2rem; }
}
/* ─── Reduce motion ──────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
.hero-cursor,
.status-pill--loading::before { animation: none !important; opacity: 1 !important; }
}