Files
DemonGatanjieu-Anomalous_Mo…/web/styles/23-combo-structure.css
T
DemonGatanjieuandClaude Opus 5.5 4ab08a36e4 Combos keep every picked node, not only model and text nodes
Save as combo now keeps all picked nodes but subgraphs, with the links
between them. Model drop-downs and text boxes stay the slots; nodes
without slots are listed in the editor under "Nodes put back as saved"
with their values and go back exactly as saved. Inputs fed by links from
unpicked nodes are stored in structure.open, and the save dialog, the
editor and the card say which ones to wire after putting it down. Cards
of combos without models name their nodes.

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

409 lines
8.8 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-model,
.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);
}
.anomalous-structure-row.is-pickable { cursor: pointer; }
.anomalous-structure-row.is-pickable:hover { border-color: var(--amb-link); }
.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; }
}