OmniVoice-Studio / frontend /src /pages /Settings.css
LΓͺ Phi Nam
Deploy to HF Space
94004a2
Raw
History Blame Contribute Delete
15.4 kB
/* Settings page β€” page-specific styles layered over the design system.
Chrome tokens only: every surface here should rhyme with the status bar. */
/* Tighter page chrome β€” reclaim whitespace around title and section padding. */
.settings-page { padding: 10px 24px 24px; }
.settings-page h1 { font-size: 1.15rem; margin: 0 0 2px; }
.settings-page .settings-subtitle{ font-size: 0.72rem; margin-bottom: 14px; }
.settings-tabs-ui { margin-bottom: var(--space-3); }
.settings-section--compact { padding: 8px 10px; margin-bottom: 8px; }
.settings-row__mono { font-family: var(--chrome-font-mono); color: var(--chrome-fg-muted); }
.settings-muted { color: var(--chrome-fg-dim); font-size: var(--text-md); font-family: var(--font-sans); }
.settings-prose {
margin: 0 0 var(--space-5);
color: var(--chrome-fg-muted);
line-height: 1.6;
font-size: 0.82rem;
font-family: var(--font-sans);
}
.settings-prose strong { color: var(--chrome-fg); font-weight: 600; }
.settings-section__head-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); }
.settings-section__head-left { display: flex; align-items: center; gap: var(--space-4); }
.settings-section__head-actions { display: flex; gap: var(--space-3); }
.settings-log-meta {
display: flex;
align-items: center;
gap: var(--space-4);
font-size: var(--text-base);
color: var(--chrome-fg-dim);
margin: var(--space-4) 0;
font-family: var(--chrome-font-mono);
}
.settings-log__empty {
color: var(--chrome-fg-dim);
font-family: var(--font-sans);
}
.settings-link-row {
margin-top: var(--space-5);
display: flex;
gap: var(--space-4);
flex-wrap: wrap;
}
/* We're migrating to the ui/ Tabs primitive β€” keep a thin class so the old
.settings-tabs gradient-above space stays; the Tabs primitive itself
carries visual styling. */
.settings-tabs-ui { margin-bottom: var(--space-5); }
/* ── Engines tab ─────────────────────────────────────────────── */
.engines-family { margin-bottom: var(--space-5); }
.engines-family__active {
margin-left: var(--space-4);
font-weight: 400;
color: var(--chrome-fg-dim);
font-size: var(--text-xs);
font-family: var(--chrome-font-mono);
}
.engines-family__active code { color: var(--chrome-fg); }
.engines-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: var(--space-2);
}
.engines-list li {
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-2) var(--space-3);
background: transparent;
border: 1px solid var(--chrome-border);
border-left: 2px solid var(--chrome-border-strong);
border-radius: var(--chrome-radius-pill);
font-family: var(--font-sans);
font-size: 0.78rem;
color: var(--chrome-fg-muted);
flex-wrap: wrap;
}
.engines-list li.is-ok {
border-left-color: var(--chrome-severity-ok);
background: color-mix(in srgb, var(--chrome-severity-ok) 5%, transparent);
}
.engines-list li.is-off {
border-left-color: var(--chrome-severity-warn);
opacity: 0.85;
}
.engines-list__name { flex: 1; min-width: 240px; color: var(--chrome-fg); }
.engines-list__name code { color: var(--chrome-fg); font-family: var(--chrome-font-mono); font-size: var(--text-sm); }
.engines-list__reason { flex-basis: 100%; font-size: var(--text-xs); color: var(--chrome-fg-dim); font-family: var(--font-sans); padding-left: var(--space-4); }
/* ── Models tab ──────────────────────────────────────────────── */
.reco-banner {
display: flex;
align-items: center;
gap: var(--space-3);
padding: 6px var(--space-4);
margin-bottom: var(--space-3);
border: 1px solid color-mix(in srgb, #8ec07c 30%, transparent);
border-left: 2px solid #8ec07c;
border-radius: var(--chrome-radius-pill);
background: color-mix(in srgb, #8ec07c 5%, transparent);
font-family: var(--font-sans);
font-size: var(--text-sm);
color: var(--chrome-fg-muted);
}
.reco-banner__text { flex: 1; }
.reco-banner__text strong { color: var(--chrome-fg); font-weight: 600; }
.reco-banner__size { color: var(--chrome-fg-dim); font-size: var(--text-xs); }
.models-row__tag {
margin-left: var(--space-2);
padding: 1px 6px;
font-family: var(--chrome-font-mono);
font-size: var(--chrome-label-size);
letter-spacing: var(--chrome-label-track);
text-transform: uppercase;
color: #d3869b;
border: 1px solid color-mix(in srgb, #d3869b 40%, transparent);
border-radius: var(--chrome-radius-pill);
background: color-mix(in srgb, #d3869b 8%, transparent);
}
/* ── Models tab: toolbar + role tabs + table ─────────────────── */
.models-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
padding: 2px 2px 6px;
font-family: var(--chrome-font-mono);
font-size: var(--text-xs);
color: var(--chrome-fg-muted);
flex-wrap: wrap;
}
.models-toolbar__stats {
display: inline-flex;
align-items: center;
gap: var(--space-2);
flex-wrap: wrap;
}
.models-toolbar__stats strong { color: var(--chrome-fg); font-weight: 600; }
.models-toolbar__sep { color: var(--chrome-fg-dim); }
.models-toolbar__cache code { color: var(--chrome-fg); font-family: var(--chrome-font-mono); font-size: var(--text-xs); }
.models-roletabs { margin: 4px 0 6px; }
/* ── Compact recommendation banner ───────────────────────────────── */
.reco-banner {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 6px;
padding: 5px 10px;
border-radius: 8px;
font-size: var(--text-xs);
color: var(--chrome-fg-muted);
border: 1px solid;
border-left-width: 2px;
}
.reco-banner--ok {
border-color: color-mix(in srgb, #8ec07c 30%, transparent);
border-left-color: #8ec07c;
background: color-mix(in srgb, #8ec07c 4%, transparent);
}
.reco-banner--pending {
flex-direction: column;
align-items: stretch;
gap: 4px;
padding: 8px 12px 10px;
border-color: color-mix(in srgb, #f3a5b6 25%, transparent);
border-left-color: #f3a5b6;
background: linear-gradient(135deg, color-mix(in srgb, #f3a5b6 4%, transparent), color-mix(in srgb, #d3869b 2%, transparent));
box-shadow: 0 0 12px color-mix(in srgb, #f3a5b6 6%, transparent);
}
.reco-banner__gb {
font-size: var(--text-2xs);
color: var(--chrome-fg-dim);
}
.reco-banner__top {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.reco-banner__title {
font-weight: 600;
font-size: 0.76rem;
color: var(--chrome-fg);
}
.reco-banner__btns {
display: flex;
gap: 4px;
flex-shrink: 0;
}
.reco-banner__grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 0 16px;
font-size: 0.68rem;
line-height: 1.6;
}
.reco-banner__model {
display: inline-flex;
align-items: center;
gap: 4px;
color: var(--chrome-fg-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.reco-banner__model--ok { color: var(--chrome-fg); }
.reco-banner__model-size {
font-family: var(--chrome-font-mono);
font-size: 0.6rem;
color: var(--chrome-fg-dim);
}
.reco-banner__req {
font-size: 0.54rem;
text-transform: uppercase;
letter-spacing: 0.04em;
color: #d3869b;
padding: 0 3px;
border: 1px solid color-mix(in srgb, #d3869b 30%, transparent);
border-radius: 999px;
line-height: 1.5;
}
/* Table β€” dense rows, fixed-width action column. */
.models-table { border-radius: 8px; }
.models-table .ui-table-header { padding: 5px var(--space-3); }
.models-table__body { max-height: 560px; overflow-y: auto; position: relative; }
.models-table__header { align-items: center; }
.models-table__sort {
border: 0;
background: transparent;
color: inherit;
font: inherit;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 4px;
min-width: 0;
}
.models-table__sort:hover { color: var(--chrome-fg); }
.models-table__sort:focus-visible {
outline: none;
box-shadow: var(--focus-ring);
border-radius: var(--chrome-radius-pill);
}
.models-table__sort--off {
border: 0;
background: transparent;
color: inherit;
font: inherit;
cursor: default;
display: inline-flex;
align-items: center;
}
.models-table__sortmark {
color: var(--chrome-accent);
font-family: var(--chrome-font-mono);
font-size: var(--text-2xs);
}
.models-table__virtual {
position: relative;
width: 100%;
}
.models-table__empty {
padding: 18px var(--space-4);
color: var(--chrome-fg-dim);
font-size: var(--text-sm);
font-family: var(--font-sans);
}
/* Inside the wizard embed the table stretches to fill β€” no fixed cap. */
.setup-wizard__embed .settings-section--compact {
display: flex; flex-direction: column; height: 100%; min-height: 0;
}
.setup-wizard__embed .models-table {
flex: 1 1 0; display: flex; flex-direction: column; min-height: 0;
}
.setup-wizard__embed .models-table__body { max-height: none; flex: 1 1 0; min-height: 0; }
.models-row {
display: flex;
align-items: center;
gap: var(--space-2);
position: absolute;
left: 0;
right: 0;
top: 0;
width: 100%;
padding: 10px var(--space-3);
border-bottom: 1px solid var(--chrome-border);
font-family: var(--font-sans);
font-size: var(--text-sm);
color: var(--chrome-fg);
border-left: 2px solid transparent;
}
.models-row:last-child { border-bottom: none; }
.models-row.is-ok { border-left-color: var(--chrome-severity-ok); }
.models-row.is-off { border-left-color: var(--chrome-border-strong); opacity: 0.92; }
.models-row.is-unsupported { opacity: 0.4; pointer-events: none; }
.models-row.is-unsupported .models-row__actions { pointer-events: auto; }
.models-row:hover { background: var(--chrome-hover-bg); }
.models-row__cell { min-width: 0; }
.models-row__name { display: flex; flex-direction: column; gap: 3px; overflow: hidden; }
.models-row__title { display: inline-flex; align-items: center; gap: var(--space-2); color: var(--chrome-fg); font-weight: 500; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.models-row__avatar {
flex-shrink: 0;
width: 22px;
height: 22px;
border-radius: 5px;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 0.54rem;
font-weight: 700;
color: rgba(255, 255, 255, 0.75);
letter-spacing: 0.02em;
}
.models-row__repo { color: var(--chrome-fg-muted); font-size: var(--text-xs); font-family: var(--chrome-font-mono); line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.models-row__repo code{ color: var(--chrome-fg-muted); }
.models-row__note { color: var(--chrome-fg-dim); }
.models-row__hint { display: flex; align-items: center; gap: 4px; color: var(--chrome-fg-dim); font-size: var(--text-2xs, 0.62rem); font-family: var(--chrome-font-mono); line-height: 1.4; margin-top: 1px; cursor: help; opacity: 0.7; transition: opacity 150ms ease; }
.models-row:hover .models-row__hint { opacity: 1; }
.models-row__role { color: var(--chrome-fg-muted); font-size: var(--text-xs); font-family: var(--chrome-font-mono); text-transform: uppercase; letter-spacing: 0.03em; }
.models-row__progress { color: var(--chrome-accent); font-size: var(--text-xs); font-family: var(--chrome-font-mono); margin-top: 2px; }
.models-row__progressline {
display: flex; flex-direction: column; gap: 3px; margin-top: 6px;
}
.models-row__progresstext {
color: var(--chrome-fg-muted); font-size: var(--text-xs);
font-family: var(--chrome-font-mono); font-variant-numeric: tabular-nums;
line-height: 1.4;
}
.models-row__size-live {
font-family: var(--chrome-font-mono);
font-variant-numeric: tabular-nums;
font-size: var(--text-2xs);
color: var(--chrome-accent, #fe8019);
}
.models-row__size-sep {
color: var(--chrome-fg-dim);
margin: 0 1px;
}
.models-row__error {
color: var(--chrome-danger, #fb4934); font-size: var(--text-xs);
margin-top: 4px;
}
.models-controls {
display: flex; align-items: center; gap: var(--space-2);
margin: var(--space-2) 0;
}
.models-search {
flex: 1; min-width: 120px;
background: var(--chrome-bg-2, #1d1d1d);
border: 1px solid var(--chrome-border, #2a2a2a);
border-radius: var(--radius-sm, 6px);
color: var(--chrome-fg);
padding: 6px 10px;
font-size: var(--text-xs);
}
.models-search:focus {
outline: none;
border-color: var(--chrome-accent, #fabd2f);
}
.models-row__size { font-family: var(--chrome-font-mono); font-size: var(--text-xs); color: var(--chrome-fg-muted); font-variant-numeric: tabular-nums; }
.models-row__actions {
justify-content: flex-end;
display: inline-flex;
gap: 4px;
opacity: 0.55;
transition: opacity var(--dur-fast, 120ms) ease;
}
.models-row:hover .models-row__actions { opacity: 1; }
/* ── Responsive: narrow windows stack row cells ─────────────── */
@media (max-width: 580px) {
.models-row { flex-wrap: wrap; gap: var(--space-3); }
.models-row__name { flex: 1 1 100%; }
.models-row__size { width: auto !important; text-align: left !important; }
.models-row__actions { margin-left: auto; }
.models-toolbar { flex-direction: column; align-items: flex-start; }
.models-controls { flex-direction: column; align-items: stretch; }
}
/* ── Engines tab: rows are NOT virtualised, so override the absolute
positioning that .models-row inherits from the Models tab. ───── */
.settings-section--compact > .models-table > .models-table__body > .models-row {
position: relative;
top: auto;
}
/* ── Credentials tab ────────────────────────────────────────── */
.settings-credential {
margin-bottom: var(--space-5);
padding-bottom: var(--space-5);
border-bottom: 1px solid var(--chrome-border);
}
.settings-credential:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.settings-credential__header {
display: flex;
align-items: center;
gap: var(--space-3);
margin-bottom: var(--space-2);
}
.settings-credential__label {
font-size: var(--text-sm);
font-weight: 600;
color: var(--chrome-fg);
font-family: var(--font-sans);
}
.settings-credential__row {
display: flex;
gap: var(--space-2);
align-items: center;
}
.settings-credential__input {
flex: 1;
max-width: 380px;
background: var(--chrome-bg-2, #1d1d1d);
border: 1px solid var(--chrome-border);
border-radius: var(--radius-sm, 6px);
color: var(--chrome-fg);
font-size: var(--text-sm);
font-family: var(--chrome-font-mono);
padding: 6px 10px;
}
.settings-credential__input:focus {
outline: none;
border-color: var(--chrome-accent, #fabd2f);
}
.settings-credential__help {
margin: var(--space-2) 0 0;
font-size: var(--text-xs);
color: var(--chrome-fg-dim);
font-family: var(--font-sans);
line-height: 1.6;
}
.settings-credential__help a {
color: var(--chrome-accent, #d3869b);
text-decoration: none;
}
.settings-credential__help a:hover { text-decoration: underline; }