Files
DemonGatanjieu-Anomalous_Mo…/web/styles/23-combo-structure.css
T
DemonGatanjieuandClaude Opus 5.5 e05e4e24fa Combo models as cover cards, not rows as wide as the window
A combo saved from picked nodes shows each model as a card like the model
library's: the cover with its slot written on it, the name and node below,
a click on the card (or Change on the cover) picks another model. The
default combo's main models and LoRAs to pick from are cover cards side by
side instead of wide rows; its empty cover is a class, not inline styles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 03:21:44 +08:00

480 lines
11 KiB
CSS

/* Combos with a node structure: the save dialog, the slot editor, the model picker (ui_combo_structure.js). */
.anomalous-structure-overlay {
position: fixed;
inset: 0;
z-index: 1000001;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
box-sizing: border-box;
background: var(--amb-lt-scrim, rgba(0, 0, 0, 0.6));
backdrop-filter: blur(4px);
}
.anomalous-structure-dialog {
display: flex;
flex-direction: column;
gap: 10px;
width: min(620px, 100%);
max-height: 90vh;
padding: 22px 24px;
box-sizing: border-box;
overflow-y: auto;
border: 1px solid var(--amb-border-strong);
border-radius: 16px;
background: var(--amb-bg-panel, #24252b);
color: var(--amb-text-main);
box-shadow: 0 24px 70px rgba(0, 0, 0, 0.55);
}
.anomalous-structure-dialog.is-picker {
width: min(860px, 100%);
height: min(720px, 90vh);
}
.anomalous-structure-title {
margin: 0;
font-size: 1.1rem;
}
.anomalous-structure-note {
margin: 0;
color: var(--amb-text-soft, var(--amb-text-main));
font-size: 12.5px;
line-height: 1.5;
}
.anomalous-structure-note.is-muted { color: var(--amb-text-muted); }
.anomalous-structure-note.is-bad { color: var(--amb-danger-text); }
.anomalous-structure-name,
.anomalous-structure-search,
.anomalous-structure-slot-label,
.anomalous-structure-text {
padding: 7px 10px;
border: 1px solid var(--amb-border-strong);
border-radius: 8px;
background: var(--amb-bg-input, rgba(0, 0, 0, 0.25));
color: var(--amb-text-main);
font: inherit;
font-size: 13px;
box-sizing: border-box;
}
.anomalous-structure-slots {
display: flex;
flex-direction: column;
gap: 6px;
}
.anomalous-structure-slot {
display: grid;
grid-template-columns: auto minmax(120px, 180px) 1fr;
align-items: center;
gap: 8px;
font-size: 12.5px;
}
.anomalous-structure-slot-where {
min-width: 0;
overflow: hidden;
color: var(--amb-text-muted);
text-overflow: ellipsis;
white-space: nowrap;
}
.anomalous-structure-footer {
display: flex;
justify-content: flex-end;
gap: 10px;
margin-top: 6px;
}
.anomalous-structure-option {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 3px;
padding: 12px 14px;
border: 1px solid var(--amb-border);
border-radius: 10px;
background: var(--amb-bg-card);
color: var(--amb-text-main);
text-align: left;
cursor: pointer;
}
.anomalous-structure-option:hover:not(:disabled) { border-color: var(--amb-link); }
.anomalous-structure-option:disabled { opacity: 0.5; cursor: default; }
.anomalous-structure-bases {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.anomalous-structure-base {
padding: 3px 10px;
border: 1px solid var(--amb-border-strong);
border-radius: 999px;
background: transparent;
color: var(--amb-text-soft, var(--amb-text-main));
font-size: 12px;
cursor: pointer;
}
.anomalous-structure-base.is-active {
border-color: var(--amb-link);
color: var(--amb-link);
}
.anomalous-structure-models {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
gap: 10px;
min-height: 0;
overflow-y: auto;
}
.anomalous-structure-model {
display: flex;
flex-direction: column;
gap: 4px;
padding: 6px;
border: 1px solid var(--amb-border);
border-radius: 10px;
background: var(--amb-bg-card);
color: var(--amb-text-main);
text-align: left;
cursor: pointer;
}
.anomalous-structure-model:hover,
.anomalous-structure-model.is-current { border-color: var(--amb-link); }
.anomalous-structure-model img {
width: 100%;
aspect-ratio: 3 / 4;
object-fit: cover;
border-radius: 6px;
}
.anomalous-structure-model-name {
overflow: hidden;
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
}
.anomalous-structure-model-base {
color: var(--amb-text-muted);
font-size: 11px;
}
.anomalous-structure-card {
display: flex;
flex-direction: column;
gap: 18px;
}
.anomalous-structure-group {
display: flex;
flex-direction: column;
gap: 8px;
}
.anomalous-structure-heading {
display: flex;
align-items: center;
gap: 8px;
margin: 0;
color: var(--amb-text-muted);
font-size: 12px;
font-weight: 600;
letter-spacing: 0.04em;
}
.anomalous-structure-count {
padding: 0 7px;
border-radius: 999px;
background: var(--amb-bg-input, rgba(var(--amb-ink-rgb), 0.08));
font-size: 11px;
line-height: 18px;
}
.anomalous-structure-row.is-fixed {
display: flex;
align-items: center;
gap: 12px;
padding: 8px 10px 8px 8px;
border: 1px solid var(--amb-border);
border-radius: 10px;
background: var(--amb-bg-card);
}
/* Models: cover cards side by side, as in the model library. */
.anomalous-structure-models {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.anomalous-structure-row.is-model {
display: flex;
flex-direction: column;
width: 150px;
overflow: hidden;
border: 1px solid var(--amb-border);
border-radius: 10px;
background: var(--amb-bg-card);
}
.anomalous-structure-row.is-pickable { cursor: pointer; }
.anomalous-structure-row.is-pickable:hover { border-color: var(--amb-link); }
.anomalous-structure-cover { position: relative; }
.anomalous-structure-row.is-model .anomalous-structure-thumb {
width: 100%;
height: auto;
aspect-ratio: 3 / 4;
border-radius: 0;
}
/* Text on the cover: dark plates, readable on any picture and in either theme. */
.anomalous-structure-badge {
position: absolute;
top: 6px;
left: 6px;
max-width: calc(100% - 12px);
overflow: hidden;
padding: 1px 7px;
border-radius: 6px;
background: rgba(0, 0, 0, 0.62);
color: #fff;
font-size: 11px;
line-height: 18px;
text-overflow: ellipsis;
white-space: nowrap;
}
.anomalous-structure-change {
position: absolute;
bottom: 8px;
left: 50%;
padding: 3px 14px;
border: 0;
border-radius: 999px;
background: rgba(0, 0, 0, 0.7);
color: #fff;
font: inherit;
font-size: 12px;
opacity: 0;
transform: translateX(-50%);
transition: opacity 0.15s;
cursor: pointer;
}
.anomalous-structure-row.is-model:hover .anomalous-structure-change,
.anomalous-structure-change:focus-visible { opacity: 1; }
@media (hover: none) {
.anomalous-structure-change { opacity: 1; }
}
.anomalous-structure-row.is-model .anomalous-structure-copy { padding: 6px 8px 8px; }
.anomalous-structure-row.is-model .anomalous-structure-value { font-size: 13px; }
.anomalous-structure-row.is-model .anomalous-structure-node { font-size: 11px; }
.anomalous-structure-row.is-model .anomalous-structure-actions { margin-top: 4px; }
.anomalous-structure-row.is-text {
display: flex;
flex-direction: column;
gap: 6px;
}
.anomalous-structure-thumb {
position: relative;
flex-shrink: 0;
width: 48px;
height: 64px;
overflow: hidden;
border-radius: 6px;
background: var(--amb-bg-input, rgba(0, 0, 0, 0.25));
}
/* No cover: the kind of model, faintly. */
.anomalous-structure-thumb::before {
content: attr(data-kind);
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
color: var(--amb-text-muted);
font-size: 11px;
font-weight: 600;
opacity: 0.6;
}
.anomalous-structure-thumb img { position: relative; }
.anomalous-structure-thumb img {
width: 100%;
height: 100%;
object-fit: cover;
}
.anomalous-structure-copy {
display: flex;
flex: 1;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.anomalous-structure-label {
color: var(--amb-text-muted);
font-size: 12px;
}
.anomalous-structure-value {
display: -webkit-box;
overflow: hidden;
font-size: 14px;
line-height: 1.35;
word-break: break-word;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.anomalous-structure-fixed {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-top: 3px;
}
.anomalous-structure-chip {
padding: 1px 7px;
border: 1px solid var(--amb-border);
border-radius: 999px;
color: var(--amb-text-muted);
font-size: 11px;
line-height: 16px;
white-space: nowrap;
}
.anomalous-structure-actions {
display: flex;
flex-shrink: 0;
gap: 6px;
}
.anomalous-structure-chip.is-more {
background: transparent;
font: inherit;
font-size: 11px;
cursor: pointer;
}
.anomalous-structure-chip.is-more:hover { color: var(--amb-link); border-color: var(--amb-link); }
.anomalous-structure-node {
color: var(--amb-text-muted);
opacity: 0.75;
}
.anomalous-structure-text-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.anomalous-structure-translate {
flex-shrink: 0;
min-width: 28px;
height: 22px;
padding: 0 8px;
border: 1px solid var(--amb-border-strong);
border-radius: 6px;
background: transparent;
color: var(--amb-text-muted);
font-size: 12px;
cursor: pointer;
}
.anomalous-structure-translate:hover,
.anomalous-structure-translate.is-active {
border-color: var(--amb-link);
color: var(--amb-link);
}
.anomalous-structure-translation {
position: fixed;
z-index: 1000002;
display: flex;
flex-direction: column;
gap: 8px;
max-height: min(420px, 70vh);
padding: 10px 12px;
box-sizing: border-box;
border: 1px solid var(--amb-border-strong);
border-radius: 10px;
background: var(--amb-bg-panel, #24252b);
color: var(--amb-text-main);
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5);
}
.anomalous-structure-translation-head {
display: flex;
align-items: center;
gap: 8px;
font-size: 12.5px;
}
.anomalous-structure-translation-head strong { flex: 1; }
.anomalous-structure-translation-close {
border: none;
background: transparent;
color: var(--amb-text-muted);
font-size: 18px;
line-height: 1;
cursor: pointer;
}
.anomalous-structure-translation-text {
overflow-y: auto;
font-size: 13px;
line-height: 1.55;
white-space: pre-wrap;
word-break: break-word;
user-select: text;
}
.anomalous-structure-translation-text.is-bad { color: var(--amb-danger-text); }
.anomalous-structure-text {
width: 100%;
min-height: 64px;
line-height: 1.5;
resize: vertical;
}
.anomalous-structure-about {
display: flex;
flex-direction: column;
gap: 4px;
padding-top: 8px;
border-top: 1px solid var(--amb-border);
}
@media (max-width: 560px) {
.anomalous-structure-slot { grid-template-columns: auto 1fr; }
.anomalous-structure-slot-where { grid-column: 2; }
}