agent-zero/webui/css/settings.css
linkliti ee970b5f0d refactor(webui): replace hardcoded accent blues with the highlight token
Positive accent controls hardcoded six blue literals across the WebUI and bundled plugins, so custom accent-color switchers had to patch each surface separately. Route them through var(--color-highlight) — mapped in the light block for the first time — and keep each surface mix percentages, deriving hover and active steps with the established black color-mix pattern; the redundant light-mode unread override collapses into the single var-based rule. Login keeps its literals because the login page loads no theme tokens, and status colors like queue orange, stop red, and success or error toasts stay hardcoded as semantic tones.

Validation: pytest welcome/whats-new/agent-editor/model-config/speech/sidebar/self-update suites (82 passed; 2 stop-agent failures pre-exist at HEAD, proven by stash run); rg confirms no accent literals outside login.css.
2026-10-13 18:06:47 +03:00

781 lines
16 KiB
CSS

/* Settings Modal Styles */
/* Field Styles */
.field {
display: grid;
grid-template-columns: 55% 1fr;
align-items: center;
margin-block: 1rem;
padding: var(--spacing-xs) 0;
}
.field.field-full {
grid-template-columns: 1fr;
}
/* Field Labels */
.field-label {
display: flex;
flex-direction: column;
padding-right: 0.5em;
}
.field-title {
font-weight: bold;
color: var(--color-primary);
}
.field-description {
color: var(--color-text);
font-size: 0.875rem;
opacity: 0.8;
margin: 0.25rem 0 0.5rem 0;
}
/* Field Controls */
.field-control {
width: 100%;
display: flex;
align-items: center;
}
/* Input Styles */
input[type="text"],
input[type="password"],
input[type="number"],
textarea,
select {
width: 100%;
padding: 0.5rem;
border: 1px solid var(--color-border);
border-radius: 0.25rem;
background-color: var(--color-background);
color: var(--color-text);
font-family: "Rubik", Arial, Helvetica, sans-serif;
outline: none;
transition: all 0.3s ease;
}
textarea {
min-height: 100px;
font-family: 'Roboto Mono', monospace;
scroll-behavior: smooth;
resize: none;
background-clip: border-box;
}
input[type="text"]:focus,
input[type="number"]:focus,
input[type="password"]:focus,
textarea:focus {
background-color: var(--color-background);
filter: brightness(1.2);
}
.masked-text-input {
-webkit-text-security: disc;
}
.masked-text-input::placeholder {
-webkit-text-security: none;
}
.light-mode input[type="text"]:focus,
.light-mode input[type="number"]:focus,
.light-mode input[type="password"]:focus,
.light-mode textarea:focus {
filter: brightness(1.1);
}
/* Button Disabled State */
.btn-disabled,
.btn-ok.btn-disabled {
opacity: 0.5;
cursor: not-allowed;
pointer-events: none;
}
/* Toggle Switch Styles */
.toggle {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.toggle input {
opacity: 0;
width: 0;
height: 0;
}
.toggler {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
border-radius: 34px;
cursor: pointer;
transition: 0.4s;
}
.toggler:before {
content: "";
position: absolute;
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
border-radius: 50%;
transition: 0.4s;
}
input:checked + .toggler {
background-color: var(--color-highlight);
}
input:checked + .toggler:before {
transform: translateX(26px);
}
/* Select Styles */
select {
cursor: pointer;
color-scheme: dark;
}
.light-mode select {
color-scheme: light;
}
select:disabled {
background-color: var(--color-background);
cursor: not-allowed;
}
/* Settings modal shell */
.modal-inner.settings-modal {
right: auto;
bottom: auto;
z-index: 2;
display: flex;
align-items: stretch;
justify-content: flex-start;
width: min(92vw, 1180px);
height: min(88vh, 900px);
padding: 0;
overflow: hidden;
background: color-mix(in srgb, var(--color-background) 94%, #000 6%);
}
.modal-inner.settings-modal .modal-scroll,
.modal-inner.settings-modal .modal-bd,
.modal-inner.settings-modal .modal-bd > div[x-data],
.modal-inner.settings-modal .modal-bd > div[x-data] > div {
display: flex;
flex: 1 1 auto;
width: 100%;
min-width: 0;
min-height: 0;
overflow: hidden;
}
.modal-inner.settings-modal .modal-scroll {
padding: 0;
}
.modal-inner.settings-modal .modal-header {
min-height: 48px;
}
.settings-content {
display: grid;
grid-template-columns: 224px minmax(0, 1fr);
flex: 1 1 auto;
width: 100%;
min-width: 0;
min-height: 0;
overflow: hidden;
}
.settings-mobile-nav {
display: none;
}
.settings-tabs-container {
position: sticky;
top: 0;
display: flex;
flex-direction: column;
gap: 10px;
align-self: stretch;
z-index: 2;
min-width: 0;
min-height: 0;
height: 100%;
padding: 10px 8px;
overflow: hidden;
border-right: 1px solid color-mix(in srgb, var(--color-border) 58%, transparent);
background: color-mix(in srgb, var(--color-panel) 44%, transparent);
}
.settings-search {
display: grid;
grid-template-columns: 20px minmax(0, 1fr) 24px;
align-items: center;
gap: 5px;
flex: 0 0 auto;
width: 100%;
min-width: 0;
height: 34px;
padding: 0 7px;
border: 1px solid color-mix(in srgb, var(--color-border) 42%, transparent);
border-radius: 7px;
background: color-mix(in srgb, var(--color-text) 10%, transparent);
color: var(--color-text-muted);
}
.settings-search:focus-within {
border-color: color-mix(in srgb, var(--color-primary) 46%, var(--color-border));
background: color-mix(in srgb, var(--color-text) 13%, transparent);
}
.settings-search .material-symbols-outlined {
font-size: 19px;
}
.settings-search input[type="search"] {
width: 100%;
min-width: 0;
height: 100%;
padding: 0;
border: 0;
outline: 0;
appearance: none;
background: transparent;
color: var(--color-text);
font: inherit;
font-size: 0.86rem;
}
.settings-search input[type="search"]::-webkit-search-decoration,
.settings-search input[type="search"]::-webkit-search-cancel-button,
.settings-search input[type="search"]::-webkit-search-results-button,
.settings-search input[type="search"]::-webkit-search-results-decoration {
display: none;
}
.settings-search input[type="search"]::placeholder {
color: var(--color-text-muted);
opacity: 0.9;
}
.settings-search-clear {
display: inline-grid;
place-items: center;
width: 24px;
height: 24px;
min-width: 24px;
padding: 0;
border: 0;
border-radius: 5px;
background: transparent;
color: var(--color-text-muted);
cursor: pointer;
}
.settings-search-clear:hover {
background: color-mix(in srgb, var(--color-text) 10%, transparent);
color: var(--color-text);
}
.settings-tabs {
display: flex;
flex-direction: column;
gap: 4px;
flex: 1 1 auto;
width: 100%;
min-width: 0;
min-height: 0;
max-height: 100%;
overflow-y: auto;
}
.settings-nav-group {
display: flex;
flex-direction: column;
gap: 3px;
min-width: 0;
}
.settings-tab {
display: grid;
grid-template-columns: 22px minmax(0, 1fr) auto;
align-items: center;
gap: 8px;
width: 100%;
min-height: 38px;
padding: 0 10px;
border: 0;
border-radius: 0;
appearance: none;
background: transparent;
color: var(--color-text);
cursor: pointer;
font: inherit;
font-size: 0.83rem;
font-weight: 560;
line-height: 1.1;
opacity: 0.68;
text-align: left;
text-decoration: none;
transition: color 0.16s ease, opacity 0.16s ease;
}
.settings-tab-meta {
display: inline-flex;
align-items: center;
justify-content: flex-end;
gap: 6px;
min-width: 18px;
}
.settings-tab-chevron {
transform: rotate(-90deg);
transition: transform 0.16s ease;
}
.settings-nav-group-open .settings-tab-chevron {
transform: rotate(0deg);
}
.settings-tab-label {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.settings-tab .material-symbols-outlined,
.settings-section-link .material-symbols-outlined {
color: var(--color-text-muted);
font-size: 18px;
}
.settings-tab:hover,
.settings-tab.active,
.settings-section-link:hover,
.settings-section-link.active {
opacity: 1;
}
.settings-tab.active,
.settings-section-link.active {
color: var(--color-text);
font-weight: 750;
}
.settings-tab.active .material-symbols-outlined,
.settings-section-link.active .material-symbols-outlined {
color: var(--color-primary);
}
.settings-tab-attention {
opacity: 1;
}
.settings-tab-attention .material-symbols-outlined {
color: #f2bf4b;
}
.settings-attention-dot {
width: 7px;
height: 7px;
flex: 0 0 auto;
border-radius: 999px;
background: #f2bf4b;
box-shadow: 0 0 0 3px color-mix(in srgb, #f2bf4b 18%, transparent);
}
.settings-section-list {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
margin: 0 0 6px 30px;
padding-left: 10px;
border-left: 1px solid color-mix(in srgb, var(--color-border) 54%, transparent);
}
.settings-section-link {
display: grid;
grid-template-columns: 20px minmax(0, 1fr) auto;
align-items: center;
gap: 7px;
min-height: 32px;
padding: 0 9px;
border: 0;
border-radius: 0;
background: transparent;
color: var(--color-text);
font-size: 0.78rem;
font-weight: 560;
line-height: 1.12;
opacity: 0.72;
text-align: left;
text-decoration: none;
transition: color 0.16s ease, opacity 0.16s ease;
}
.settings-section-link .material-symbols-outlined {
font-size: 17px;
}
.settings-section-link:hover,
.settings-section-link.active {
opacity: 1;
}
.settings-search-empty {
padding: 10px 9px;
color: var(--color-text-muted);
font-size: 0.8rem;
line-height: 1.25;
}
.settings-pane {
min-width: 0;
min-height: 0;
overflow: auto;
padding: 18px 22px 28px;
scroll-behavior: smooth;
}
.settings-tab-panel,
.settings-tab-panel > x-component,
.settings-tab-panel > x-component > div[x-data] {
min-width: 0;
}
.settings-pane nav {
display: none;
}
.settings-pane .section {
display: block;
width: 100%;
min-width: 0;
margin: 0 0 10px;
padding: 26px 0 30px;
scroll-margin-top: 12px;
overflow: visible;
border: 0;
border-top: 1px solid color-mix(in srgb, var(--color-border) 64%, transparent);
border-radius: 0;
box-sizing: border-box;
}
.settings-tab-panel > x-component > div[x-data] > div > .section:first-of-type,
.settings-tab-panel > x-component > div[x-data] > div > nav + .section {
padding-top: 0;
border-top: 0;
}
.settings-pane .section-title {
margin: 0 0 6px;
padding: 0;
border: 0;
color: color-mix(in srgb, var(--color-text) 88%, var(--color-primary));
font-size: 1.05rem;
font-weight: 800;
}
.settings-pane .section-title.settings-update-title-attention {
color: #f2bf4b;
}
.settings-pane .section-description {
max-width: 72ch;
margin: 0 0 18px;
color: var(--color-text);
font-size: 0.92rem;
opacity: 0.78;
line-height: 1.42;
}
.modal-inner.settings-modal .field {
grid-template-columns: minmax(220px, 0.9fr) minmax(260px, 1fr);
gap: 20px;
margin-block: 0;
padding: 12px 0;
}
.modal-inner.settings-modal .field + .field {
border-top: 1px solid color-mix(in srgb, var(--color-border) 24%, transparent);
}
.modal-inner.settings-modal .field-title {
color: color-mix(in srgb, var(--color-text) 78%, var(--color-primary));
font-weight: 800;
}
.modal-inner.settings-modal .field-description {
margin-bottom: 0;
color: var(--color-text);
opacity: 0.78;
line-height: 1.28;
}
.modal-inner.settings-modal .field-control {
gap: 8px;
}
.modal-inner.settings-modal input[type="text"],
.modal-inner.settings-modal input[type="password"],
.modal-inner.settings-modal input[type="number"],
.modal-inner.settings-modal textarea,
.modal-inner.settings-modal select {
border-color: color-mix(in srgb, var(--color-border) 70%, transparent);
border-radius: 7px;
background: color-mix(in srgb, var(--color-background) 72%, transparent);
}
.settings-advanced-section {
margin-top: 8px;
}
.settings-advanced-toggle {
display: inline-flex;
align-items: center;
gap: 5px;
min-height: 30px;
padding: 3px 0;
border: 0;
background: transparent;
color: var(--color-text);
opacity: 0.68;
cursor: pointer;
font: inherit;
font-size: 0.79rem;
font-weight: 650;
text-align: left;
}
.settings-advanced-toggle:hover {
opacity: 1;
}
.settings-advanced-toggle-icon {
font-size: 17px;
transition: transform 0.15s ease;
}
.settings-advanced-body {
margin-top: 6px;
padding-top: 6px;
}
.settings-inline-button {
flex: 0 0 auto;
}
.settings-subsection-title {
margin: 18px 0 4px;
color: var(--color-primary);
font-size: 0.94rem;
font-weight: 750;
}
.settings-subsection-description {
margin: 0 0 8px;
color: var(--color-text);
font-size: 0.85rem;
line-height: 1.35;
opacity: 0.72;
}
.settings-update-card {
display: grid;
grid-template-columns: auto minmax(0, 1fr) auto;
align-items: center;
gap: 14px;
margin: 4px 0 16px;
padding: 14px;
border: 1px solid color-mix(in srgb, var(--color-border) 72%, transparent);
border-radius: 7px;
background: color-mix(in srgb, var(--color-panel) 60%, transparent);
}
.settings-update-card-attention {
border-color: color-mix(in srgb, #f2bf4b 44%, var(--color-border));
background:
linear-gradient(
120deg,
color-mix(in srgb, #f2bf4b 16%, transparent),
transparent 58%
),
color-mix(in srgb, var(--color-panel) 72%, transparent);
}
.settings-update-card-icon {
display: grid;
place-items: center;
width: 38px;
height: 38px;
border-radius: 7px;
background: color-mix(in srgb, var(--color-primary) 15%, transparent);
color: color-mix(in srgb, var(--color-text) 82%, var(--color-primary));
}
.settings-update-card-attention .settings-update-card-icon {
background: color-mix(in srgb, #f2bf4b 18%, transparent);
color: #f2bf4b;
}
.settings-update-card-copy {
min-width: 0;
}
.settings-update-card-title {
margin-bottom: 4px;
color: color-mix(in srgb, var(--color-text) 88%, var(--color-primary));
font-size: 0.96rem;
font-weight: 800;
}
.settings-update-card-attention .settings-update-card-title {
color: #f2bf4b;
}
.settings-update-card-message {
color: var(--color-text);
font-size: 0.86rem;
line-height: 1.35;
opacity: 0.78;
}
.settings-update-card-meta {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px;
margin-top: 10px;
}
.settings-update-card-actions {
display: flex;
align-items: center;
gap: 8px;
}
.settings-update-card-badge {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 9px;
border-radius: 999px;
border: 1px solid color-mix(in srgb, var(--color-border) 70%, transparent);
color: var(--color-text);
background: color-mix(in srgb, var(--color-background) 70%, transparent);
font-size: 0.7rem;
font-weight: 800;
line-height: 1;
text-transform: uppercase;
white-space: nowrap;
}
.settings-update-card-attention .settings-update-card-badge {
border-color: color-mix(in srgb, #f2bf4b 48%, var(--color-border));
color: color-mix(in srgb, #f2bf4b 84%, var(--color-text));
background: color-mix(in srgb, #f2bf4b 12%, transparent);
}
.settings-pane::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.settings-pane::-webkit-scrollbar-track {
background: transparent;
margin: 8px 0;
}
.settings-pane::-webkit-scrollbar-thumb {
border-radius: 6px;
background-color: rgba(155, 155, 155, 0.5);
}
.settings-pane::-webkit-scrollbar-thumb:hover {
background-color: rgba(155, 155, 155, 0.7);
}
/* Responsive Design */
@media (max-width: 768px) {
.modal-inner.settings-modal .field-control {
width: 100%;
}
.modal-inner.settings-modal .field-description {
padding-bottom: var(--spacing-sm);
}
.modal-inner.settings-modal .field {
display: block;
align-items: center;
padding: 12px 0;
}
}
@media (max-width: 720px) {
.modal-inner.settings-modal {
width: calc(100vw - 16px);
height: calc(100vh - 16px);
max-height: calc(100vh - 16px);
height: calc(100dvh - 16px);
max-height: calc(100dvh - 16px);
}
.settings-content {
grid-template-columns: 1fr;
grid-template-rows: auto minmax(0, 1fr);
}
.settings-tabs-container {
height: auto;
padding: 7px 8px;
border-right: 0;
border-bottom: 1px solid color-mix(in srgb, var(--color-border) 58%, transparent);
}
.settings-search,
.settings-tabs {
display: none;
}
.settings-mobile-nav {
display: block;
min-width: 0;
min-height: 44px;
font-size: 16px;
}
.modal-inner.settings-modal .modal-footer .btn {
min-height: 44px;
}
.settings-pane {
padding: 14px 16px 24px;
}
.settings-update-card {
grid-template-columns: auto minmax(0, 1fr);
}
.settings-update-card-actions {
grid-column: 1 / -1;
justify-content: flex-start;
}
}