Files
DemonGatanjieuandClaude Opus 5.5 7b363bdac8 Light theme: follow ComfyUI, dark, light or Abyssal Scarlet
Settings -> Appearance -> Theme (and the ComfyUI setting
Anomalous.ModelBrowser.Theme, which replaces the Abyssal Scarlet switch)
picks Follow ComfyUI (default), Dark, Light or Abyssal Scarlet. Following
ComfyUI watches the dark-theme class ComfyUI sets on <html> for a dark
palette and repaints at once; an older Abyssal switch reads as Abyssal.

The light theme is html.amb-theme-light with its own --amb-* values. Hard
coded colors were turned into tokens whose dark values are the colors they
replace (checked: every stylesheet resolves to the same dark values):
rgba(var(--amb-ink-rgb), a) for tints, status shades, tooltip, float,
dialog, sunken, scrim and note tokens. Older rules and inline styles that
wrote a dark color now write var(--amb-lt-<role>, <that color>); the
--amb-lt-* tokens exist only in the light theme. Inside the plugin's
windows ComfyUI's palette variables (--bg-color, --fg-color ...) follow the
plugin's theme when the two differ. Surfaces over images stay dark, and the
image viewer gets the dark tokens back. The ready banner on a recipe reads
green instead of pink. Stylesheet cache versions are bumped.

Checked on a test ComfyUI in light and dark: home, models, gallery and its
viewer, workflows and a recipe's tabs, combos and a combo, prompts and the
docked drawer, voices, audio library, settings, scan, Model Check, current
node and its model picker, a model's detail with notes, share, save
recipe, update guide, versions, GPT-SoVITS settings and the prompt dialog;
light with a dark ComfyUI, and Abyssal Scarlet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 17:27:02 +08:00

327 lines
7.7 KiB
CSS

/* =============================================================================
Version line (update guide) and the "Version & updates" panel
============================================================================= */
/* Row under the update guide header ("!" button). */
.anomalous-version-line {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 20px;
border-bottom: 1px solid var(--amb-border);
font-size: 12px;
color: var(--amb-text-muted);
}
.anomalous-version-line-value {
color: var(--amb-text-main);
font: 600 12px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.anomalous-version-line-open {
margin-left: auto;
padding: 4px 10px;
background: rgba(var(--amb-ink-rgb), 0.05);
border: 1px solid var(--amb-border-strong);
border-radius: 6px;
color: var(--amb-text-main);
font-size: 12px;
cursor: pointer;
white-space: nowrap;
}
.anomalous-version-line-open:hover {
background: rgba(var(--amb-ink-rgb), 0.1);
}
.anomalous-version-overlay {
position: fixed;
inset: 0;
z-index: 1000000;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
box-sizing: border-box;
background: var(--amb-lt-scrim, rgba(0, 0, 0, 0.55));
backdrop-filter: blur(3px);
}
.anomalous-version-panel {
display: flex;
flex-direction: column;
gap: 12px;
width: min(620px, 100%);
max-height: min(760px, 100%);
padding: 18px 20px;
box-sizing: border-box;
overflow: hidden;
background: var(--amb-bg-panel, var(--amb-bg-panel));
color: var(--amb-text-main, var(--amb-text-main));
border: 1px solid var(--amb-border-hover, var(--amb-border-strong));
border-radius: var(--amb-radius-panel, 10px);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
font-size: 13px;
}
.anomalous-version-panel.is-busy {
cursor: progress;
}
.anomalous-version-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.anomalous-version-title {
font-size: 16px;
font-weight: 700;
}
.anomalous-version-close {
width: 28px;
height: 28px;
padding: 0;
background: transparent;
color: var(--amb-text-muted, var(--amb-text-muted));
border: 1px solid transparent;
border-radius: var(--amb-radius-control, 6px);
font-size: 18px;
cursor: pointer;
}
.anomalous-version-close:hover {
color: var(--amb-text-main, var(--amb-text-main));
border-color: var(--amb-border-hover, var(--amb-border-strong));
}
.anomalous-version-current {
display: flex;
flex-direction: column;
gap: 6px;
padding: 12px 14px;
background: var(--amb-bg-card, var(--amb-bg-card));
border: 1px solid var(--amb-border, var(--amb-border));
border-radius: var(--amb-radius-card, 8px);
}
.anomalous-version-current-line {
display: flex;
align-items: baseline;
gap: 10px;
}
.anomalous-version-current-line strong {
font-size: 15px;
}
.anomalous-version-current-label,
.anomalous-version-meta,
.anomalous-version-date,
.anomalous-version-release-name,
.anomalous-version-empty {
color: var(--amb-text-muted, var(--amb-text-muted));
}
.anomalous-version-meta {
font: 12px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.anomalous-version-warning {
padding: 8px 10px;
color: var(--amb-warn-text);
background: rgba(245, 158, 11, 0.1);
border: 1px solid rgba(245, 158, 11, 0.35);
border-radius: var(--amb-radius-control, 6px);
line-height: 1.45;
}
.anomalous-version-actions,
.anomalous-version-release-footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.anomalous-version-action {
height: 30px;
padding: 0 12px;
background: rgba(var(--amb-ink-rgb), 0.04);
color: var(--amb-text-main, var(--amb-text-main));
border: 1px solid var(--amb-border-hover, var(--amb-border-strong));
border-radius: var(--amb-radius-control, 6px);
font-size: 12px;
cursor: pointer;
white-space: nowrap;
}
.anomalous-version-action:hover:not(:disabled) {
background: rgba(var(--amb-ink-rgb), 0.1);
}
.anomalous-version-action.primary {
background: var(--amb-btn-primary-bg, var(--amb-btn-primary-bg));
color: var(--amb-btn-primary-text, var(--amb-btn-primary-text));
border-color: transparent;
font-weight: 600;
}
.anomalous-version-action.primary:hover:not(:disabled) {
background: var(--amb-btn-primary-hover, #ffffff);
}
.anomalous-version-action:disabled {
opacity: 0.45;
cursor: not-allowed;
}
.anomalous-version-status {
min-height: 18px;
color: var(--amb-text-muted, var(--amb-text-muted));
line-height: 1.45;
white-space: pre-wrap;
}
.anomalous-version-status:empty {
display: none;
}
.anomalous-version-status.is-error {
color: var(--amb-danger-text);
}
.anomalous-version-prerelease {
display: flex;
align-items: center;
gap: 6px;
color: var(--amb-text-muted, var(--amb-text-muted));
cursor: pointer;
}
.anomalous-version-prerelease[hidden] {
display: none;
}
.anomalous-version-list {
display: flex;
flex-direction: column;
gap: 8px;
min-height: 0;
overflow-y: auto;
padding-right: 2px;
}
.anomalous-version-empty {
padding: 22px 10px;
text-align: center;
line-height: 1.5;
}
.anomalous-version-release {
display: flex;
flex-direction: column;
gap: 8px;
padding: 10px 12px;
background: var(--amb-bg-card, var(--amb-bg-card));
border: 1px solid var(--amb-border, var(--amb-border));
border-radius: var(--amb-radius-card, 8px);
}
.anomalous-version-release.is-current {
border-color: var(--amb-accent-line, rgba(229, 231, 235, 0.35));
}
.anomalous-version-release-top {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.anomalous-version-release-title {
display: flex;
align-items: baseline;
gap: 8px;
min-width: 0;
}
.anomalous-version-release-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.anomalous-version-badges {
display: flex;
align-items: center;
gap: 6px;
font-size: 11px;
}
.anomalous-version-badge {
padding: 2px 7px;
border-radius: 999px;
border: 1px solid var(--amb-border-hover, var(--amb-border-strong));
}
.anomalous-version-badge.is-current {
color: var(--amb-btn-primary-text, var(--amb-btn-primary-text));
background: var(--amb-btn-primary-bg, var(--amb-btn-primary-bg));
border-color: transparent;
}
.anomalous-version-badge.is-latest {
color: var(--amb-ok-text);
border-color: rgba(34, 197, 94, 0.45);
}
.anomalous-version-badge.is-pre {
color: var(--amb-warn-text);
border-color: rgba(245, 158, 11, 0.45);
}
.anomalous-version-link {
padding: 0;
background: none;
border: none;
color: var(--amb-text-muted, var(--amb-text-muted));
font-size: 12px;
text-decoration: underline;
text-underline-offset: 2px;
cursor: pointer;
}
.anomalous-version-link:hover {
color: var(--amb-text-main, var(--amb-text-main));
}
.anomalous-version-release-footer .anomalous-version-action {
margin-left: auto;
}
.anomalous-version-notes {
max-height: 220px;
margin: 0;
padding: 8px 10px;
overflow: auto;
background: var(--amb-bg-input, var(--amb-bg-page));
border-radius: var(--amb-radius-control, 6px);
font: 12px/1.5 system-ui, sans-serif;
white-space: pre-wrap;
word-break: break-word;
}
.anomalous-version-notes[hidden] {
display: none;
}
.anomalous-version-panel button:focus-visible,
.anomalous-version-panel a:focus-visible,
.anomalous-version-line-open:focus-visible {
outline: 2px solid var(--amb-accent, #f59e0b);
outline-offset: 2px;
}