Files
olivv-cs-ComfyUI-FunPack/easy_gen/frontend/easy.css
T
digital-garbageandClaude Opus 5 65976d0c26 feat(theme): light, dark and auto colour schemes
styles.css and easy.css no longer name a colour, only a role: ~250 hard-coded
literals became semantic tokens, with the dark values kept byte-identical. Light
is a white/grey/daylight-blue palette; auto follows the OS and is resolved in
theme.js, so CSS only ever sees dark|light and there is no first-paint flash.
Media letterboxes, badges over frames and the log body stay dark in both.

--amber* is now --accent*, since the accent is amber only in the dark theme.
Picker in Settings ▸ Appearance for both frontends; the hub follows the same key.

Also fixes the rating picker's rgba(var(--accent), x) rules, which were invalid
and being dropped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 13:55:40 +03:00

141 lines
7.8 KiB
CSS

/* Easy Gen layout on top of the Editor's shared styles.css (design tokens,
.btn/.modal/.sw-*/.welcome-* rules) — big preview, prompt bar, nothing else. */
html, body.easy-body {
margin: 0; height: 100%; background: var(--ink-0); color: var(--text);
font-family: var(--font-ui);
}
.easy-app {
height: 100vh; display: flex; flex-direction: column;
}
.easy-top {
height: var(--menubar-h); flex: none; display: flex; align-items: center; gap: 14px;
padding: 0 16px; border-bottom: 1px solid var(--line); background: var(--ink-1);
}
.easy-project-name { color: var(--muted); font-size: 13px; }
.easy-top .easy-health-chip { margin-left: auto; }
a.brand { text-decoration: none; color: inherit; }
a.brand:hover .brand-sub { color: var(--accent-hi); }
.easy-preview {
flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center;
background: var(--ink-0); position: relative; padding: 24px;
}
.easy-preview-inner {
width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
}
.easy-preview-inner img, .easy-preview-inner video {
max-width: 100%; max-height: 100%; border-radius: var(--radius); box-shadow: var(--shadow);
background: var(--black);
}
.easy-preview-empty {
color: var(--faint); font-size: 14px; font-family: var(--font-display);
}
.easy-preview-error { color: var(--danger); max-width: 60ch; text-align: center; white-space: pre-wrap; }
.easy-preview-close {
position: absolute; top: 34px; right: 34px; width: 28px; height: 28px; padding: 0;
border-radius: 50%; background: color-mix(in srgb, var(--ink-0) 72%, transparent); border: 1px solid var(--line);
color: var(--text); font-size: 13px; cursor: pointer; display: flex; align-items: center; justify-content: center;
backdrop-filter: blur(2px); transition: border-color .12s, color .12s;
}
.easy-preview-close[hidden] { display: none; } /* class display:flex above would otherwise beat [hidden] */
.easy-preview-close:hover { border-color: var(--danger); color: var(--danger); }
.easy-preview-badge {
position: absolute; top: 34px; left: 34px; padding: 4px 10px; border-radius: 999px;
background: color-mix(in srgb, var(--ink-0) 72%, transparent); border: 1px solid var(--line); color: var(--muted);
font-size: 11.5px; letter-spacing: .3px; backdrop-filter: blur(2px);
}
.easy-progress {
position: absolute; left: 24px; right: 24px; bottom: 24px;
background: var(--ink-1); border: 1px solid var(--line); border-radius: var(--radius);
padding: 10px 14px; box-shadow: var(--shadow);
}
.easy-progress-bar {
height: 6px; border-radius: 4px; background: linear-gradient(90deg, var(--accent), var(--accent-hi));
width: 0%; transition: width .2s ease; margin-bottom: 6px;
}
.easy-progress-row { display: flex; align-items: center; gap: 10px; }
.easy-progress-label { flex: 1; min-width: 0; font-size: 12px; color: var(--muted); font-family: var(--font-mono);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.easy-progress-stop:disabled { opacity: .6; cursor: default; }
/* Full-width notice between the preview and the Generate row: a setting that is on
but cannot do anything should be readable without opening any panel. */
.easy-warn-strip {
flex: none; padding: 9px 16px; font-size: 12.5px; line-height: 1.45;
color: var(--accent); border-top: 1px solid color-mix(in srgb, var(--accent) 45%, var(--line));
background: color-mix(in srgb, var(--accent) 9%, transparent);
}
.easy-warn-strip[hidden] { display: none; }
.easy-bar {
flex: none; display: flex; align-items: flex-end; gap: 12px;
padding: 14px 16px; border-top: 1px solid var(--line); background: var(--ink-1);
}
.easy-upload-btn, .easy-gallery-btn, .easy-vars-btn { flex: none; align-self: stretch; padding: 0 16px; }
.easy-prompt {
flex: 1; resize: none; background: var(--ink-2); border: 1px solid var(--line);
border-radius: var(--radius); color: var(--text); font: 14px/1.4 var(--font-ui);
padding: 10px 12px;
}
.easy-prompt:focus { outline: none; border-color: var(--accent); }
.easy-actions { flex: none; display: flex; flex-direction: column; align-items: stretch; gap: 6px; }
.easy-generate-btn { padding: 10px 26px; font-size: 14px; }
.easy-advanced-btn { align-self: center; }
/* Prompt $name variables — own modal window, opened from the header button. */
.easy-vars-hint { color: var(--muted); font-size: 12px; line-height: 1.5; margin-bottom: 8px; }
.easy-vars-hint.easy-var-warn { color: var(--accent); }
.easy-vars-empty { color: var(--faint); font-size: 12px; }
.easy-var-list { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.easy-var-row { display: flex; gap: 6px; align-items: flex-start; width: 100%; }
.easy-var-row > .easy-var-dollar, .easy-var-row > .easy-var-eq, .easy-var-row > .btn { margin-top: 6px; }
.easy-var-dollar { color: var(--accent); font-family: var(--font-mono); opacity: .8; }
.easy-var-eq { color: var(--muted); }
.easy-var-in {
background: var(--ink-2); border: 1px solid var(--line); border-radius: var(--radius);
color: var(--text); font: 13px/1.4 var(--font-ui); padding: 6px 9px; min-width: 0;
}
.easy-var-in:focus { outline: none; border-color: var(--accent); }
.easy-var-name { flex: 0 0 22%; font-family: var(--font-mono); }
/* Value is an auto-growing textarea (JS sets the height) — no manual resize handle, no scrollbar. */
.easy-var-val { flex: 1; resize: none; overflow: hidden; }
.easy-var-row .btn { flex: 0 0 auto; }
#easy-vars-btn.easy-vars-warn { color: var(--accent); border-color: var(--accent); }
.es-io-controls { display: flex; align-items: center; gap: 8px; }
.es-io-mode { background: var(--ink-2); border: 1px solid var(--line); color: var(--text);
border-radius: 6px; font-size: 12px; padding: 4px 6px; }
.gal-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 12px; }
.gal-cell { cursor: pointer; border: 1px solid var(--line); border-radius: 10px; overflow: hidden;
background: var(--ink-2); transition: border-color .15s; }
.gal-cell:hover { border-color: var(--accent); }
.gal-thumb { position: relative; aspect-ratio: 1 / 1; background: var(--ink-0); display: flex; align-items: center; justify-content: center; }
.gal-thumb img, .gal-thumb video { width: 100%; height: 100%; object-fit: cover; }
.gal-name { padding: 6px 8px; font-size: 11.5px; color: var(--muted); white-space: nowrap;
overflow: hidden; text-overflow: ellipsis; }
.gal-pin-btn { position: absolute; top: 4px; right: 4px; z-index: 2; width: 22px; height: 22px;
border-radius: 6px; background: color-mix(in srgb, var(--ink-0) 72%, transparent); border: 1px solid var(--line);
filter: grayscale(1); font-size: 12px; cursor: pointer; display: flex; align-items: center;
justify-content: center; padding: 0; }
.gal-pin-btn:hover { filter: none; }
.gal-pin-btn.active { filter: none; background: var(--accent-soft); border-color: var(--accent); }
.gal-pin-badge { position: absolute; top: 4px; left: 4px; z-index: 2; font-size: 10.5px;
background: color-mix(in srgb, var(--ink-0) 72%, transparent); border-radius: 4px; padding: 1px 4px; line-height: 1.4; }
/* Reference mark — sits under the pin so both are reachable on the same tile. */
.gal-ref-btn { position: absolute; top: 30px; right: 4px; z-index: 2; width: 22px; height: 22px;
border-radius: 6px; background: color-mix(in srgb, var(--ink-0) 72%, transparent); border: 1px solid var(--line);
color: var(--muted); font-size: 11px; font-weight: 700; cursor: pointer; display: flex;
align-items: center; justify-content: center; padding: 0; }
.gal-ref-btn:hover { color: var(--accent); border-color: var(--accent); }
.gal-ref-btn.active { background: var(--accent); border-color: var(--accent); color: var(--ink-0); }
.gal-ref-badge { position: absolute; bottom: 4px; left: 4px; z-index: 2; font-size: 10px;
font-weight: 700; color: var(--ink-0); background: var(--accent); border-radius: 4px;
padding: 1px 5px; line-height: 1.4; }