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>
327 lines
7.7 KiB
CSS
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;
|
|
}
|