327 lines
10 KiB
CSS
327 lines
10 KiB
CSS
:root {
|
||
/* Цвета темы (совпадают с editor.html) */
|
||
color-scheme: dark;
|
||
--bg: #0b0d10;
|
||
--panel: #11151a;
|
||
--muted: #a7b0bf;
|
||
--border: #1f2937;
|
||
--accent: #6ee7b7; /* зелёный */
|
||
--accent-2: #60a5fa; /* синий */
|
||
--node: #0e1116;
|
||
--node-border: #334155;
|
||
--node-selected: #1f2937;
|
||
--connector: #7aa2f7;
|
||
--connector-muted: #3b82f6;
|
||
}
|
||
|
||
/* Узлы: аккуратные контейнеры + предотвращение вылезания текста */
|
||
.drawflow .drawflow-node {
|
||
background: transparent !important;
|
||
box-shadow: none !important;
|
||
}
|
||
|
||
.drawflow .drawflow-node .title-box {
|
||
background: var(--node);
|
||
border: 1px solid var(--node-border);
|
||
color: #e5e7eb;
|
||
border-radius: 12px 12px 0 0;
|
||
padding: 6px 10px;
|
||
}
|
||
|
||
.drawflow .drawflow-node .box {
|
||
background: var(--node);
|
||
border: 1px solid var(--node-border);
|
||
border-top: 0;
|
||
color: #e5e7eb;
|
||
border-radius: 0 0 12px 12px;
|
||
overflow: hidden; /* не даём контенту вылезать за края */
|
||
}
|
||
|
||
.drawflow .drawflow-node .box textarea,
|
||
.drawflow .drawflow-node .box pre,
|
||
.drawflow .drawflow-node .box input[type="text"] {
|
||
background: #0f141a;
|
||
border: 1px solid #2b3646;
|
||
border-radius: 8px;
|
||
color: #e5e7eb;
|
||
width: 100%;
|
||
max-width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.df-node .box textarea {
|
||
white-space: pre-wrap;
|
||
word-break: break-word;
|
||
overflow: auto;
|
||
max-height: 180px; /* предотвращаем бесконечную высоту */
|
||
}
|
||
|
||
/* Выделение выбранного узла — мягкое */
|
||
.drawflow .drawflow-node.selected .title-box,
|
||
.drawflow .drawflow-node.selected .box {
|
||
border-color: var(--accent);
|
||
box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent);
|
||
}
|
||
|
||
/* Порты: более аккуратные, без «оранжевого» */
|
||
.drawflow .drawflow-node .inputs .input,
|
||
.drawflow .drawflow-node .outputs .output {
|
||
background: var(--accent-2) !important;
|
||
border: 2px solid color-mix(in srgb, var(--accent-2) 70%, white 0%) !important;
|
||
width: 12px !important;
|
||
height: 12px !important;
|
||
box-shadow: 0 0 0 2px rgba(0,0,0,.25);
|
||
}
|
||
|
||
/* Линии соединений: плавные, аккуратные цвета */
|
||
.drawflow .connection .main-path {
|
||
stroke: var(--connector) !important;
|
||
stroke-width: 2.5px !important;
|
||
opacity: 0.95 !important;
|
||
}
|
||
|
||
.drawflow .connection .main-path.selected,
|
||
.drawflow .connection:hover .main-path {
|
||
stroke: var(--accent-2) !important;
|
||
stroke-width: 3px !important;
|
||
}
|
||
|
||
/* Точки изгибов/ручки */
|
||
.drawflow .connection .point {
|
||
stroke: var(--connector-muted) !important;
|
||
fill: var(--panel) !important;
|
||
}
|
||
|
||
/* Убираем «уродливый крестик» удаления соединений (оставляем удаление через контекст-меню/клавиши) */
|
||
.drawflow .connection .delete,
|
||
.drawflow .connection .remove,
|
||
.drawflow .connection .connection-remove,
|
||
.drawflow .connection [class*="remove"],
|
||
.drawflow .connection [class*="delete"] {
|
||
display: none !important;
|
||
}
|
||
|
||
/* Сайдбар: выравнивание и аккуратные подсказки */
|
||
.group-title {
|
||
font-size: 12px;
|
||
text-transform: uppercase;
|
||
color: var(--muted);
|
||
margin: 12px 0 6px;
|
||
letter-spacing: .08em;
|
||
}
|
||
|
||
.hint {
|
||
color: var(--muted);
|
||
font-size: 12px;
|
||
margin-top: 4px;
|
||
}
|
||
|
||
details.help { margin: 6px 0; }
|
||
details.help summary {
|
||
list-style: none;
|
||
cursor: pointer;
|
||
display: inline-grid;
|
||
place-items: center;
|
||
width: 20px;
|
||
height: 20px;
|
||
border-radius: 50%;
|
||
background: #334155;
|
||
color: #e5e7eb;
|
||
font-weight: 700;
|
||
border: 1px solid #2b3646;
|
||
}
|
||
details.help summary::-webkit-details-marker { display: none; }
|
||
details.help .panel {
|
||
margin-top: 8px;
|
||
background: #0f141a;
|
||
border: 1px solid #2b3646;
|
||
padding: 10px;
|
||
border-radius: 8px;
|
||
}
|
||
|
||
/* Инпуты/тексты внутри нод — одинаковые отступы и скругления */
|
||
textarea, input[type=text] {
|
||
width: 100%;
|
||
background: #0f141a;
|
||
color: #e5e7eb;
|
||
border: 1px solid #2b3646;
|
||
border-radius: 8px;
|
||
padding: 8px;
|
||
}
|
||
|
||
/* Кнопки */
|
||
button {
|
||
background: #1f2937;
|
||
border: 1px solid #334155;
|
||
color: #e5e7eb;
|
||
padding: 6px 10px;
|
||
border-radius: 8px;
|
||
cursor: pointer;
|
||
}
|
||
button:hover { background: #273246; }
|
||
|
||
/* Внутренние заголовки в блоке ноды */
|
||
#inspector label { font-size: 12px; color: var(--muted); display: block; margin: 8px 0 4px; }
|
||
|
||
/* Мелкие фиксы */
|
||
.drawflow .drawflow-node .input, .drawflow .drawflow-node .output { color: var(--muted); }
|
||
/* Connection delete control — show and restyle (kept functional) */
|
||
.drawflow .connection foreignObject,
|
||
.drawflow .connection [class*="remove"],
|
||
.drawflow .connection [class*="delete"],
|
||
.drawflow .connection .connection-remove {
|
||
display: inline-flex !important;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 999px;
|
||
background: #0f141a;
|
||
color: #e5e7eb;
|
||
border: 1px solid #334155;
|
||
box-shadow: 0 2px 6px rgba(0,0,0,.35);
|
||
cursor: pointer;
|
||
opacity: .85;
|
||
transition: transform .12s ease, opacity .12s ease, box-shadow .12s ease, border-color .12s ease, background-color .12s ease;
|
||
}
|
||
.drawflow .connection:hover foreignObject,
|
||
.drawflow .connection:hover [class*="remove"],
|
||
.drawflow .connection:hover [class*="delete"],
|
||
.drawflow .connection:hover .connection-remove {
|
||
opacity: 1;
|
||
transform: scale(1.05);
|
||
border-color: var(--accent-2);
|
||
box-shadow: 0 0 0 3px rgba(96,165,250,.20), 0 4px 10px rgba(0,0,0,.35);
|
||
}
|
||
/* If delete control is rendered inside foreignObject, normalize inner box */
|
||
.drawflow .connection foreignObject div,
|
||
.drawflow .connection foreignObject span {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
width: 18px;
|
||
height: 18px;
|
||
border-radius: 999px;
|
||
background: #0f141a;
|
||
color: #e5e7eb;
|
||
border: 1px solid #334155;
|
||
}
|
||
/* If delete control is rendered as SVG text "x" */
|
||
.drawflow .connection text {
|
||
font-family: Inter, system-ui, Arial, sans-serif;
|
||
font-size: 12px;
|
||
font-weight: 700;
|
||
fill: #e5e7eb;
|
||
}
|
||
|
||
/* Subtle canvas background (lightweight dot grid) */
|
||
#canvas {
|
||
background-color: var(--bg);
|
||
background-image: radial-gradient(circle at 1px 1px, rgba(255,255,255,0.06) 1px, transparent 0);
|
||
background-size: 24px 24px;
|
||
}
|
||
|
||
/* Port hover affordance (no heavy effects) */
|
||
.drawflow .drawflow-node .inputs .input,
|
||
.drawflow .drawflow-node .outputs .output {
|
||
transition: transform .08s ease;
|
||
will-change: transform;
|
||
}
|
||
.drawflow .drawflow-node .inputs .input:hover,
|
||
.drawflow .drawflow-node .outputs .output:hover {
|
||
transform: scale(1.25);
|
||
box-shadow: 0 0 0 3px rgba(96,165,250,.25);
|
||
}
|
||
/* Node delete "X" — minimal, clean, consistent with theme (kept functional) */
|
||
.drawflow .drawflow-node .close {
|
||
position: absolute !important; /* stays in node corner */
|
||
top: -8px !important;
|
||
right: -8px !important;
|
||
width: 18px !important;
|
||
height: 18px !important;
|
||
display: grid !important;
|
||
place-items: center !important;
|
||
border-radius: 999px !important;
|
||
font-size: 12px !important;
|
||
line-height: 1 !important;
|
||
font-weight: 700 !important;
|
||
background: #0f141a !important; /* dark chip */
|
||
color: #e5e7eb !important;
|
||
border: 1px solid #334155 !important; /* subtle border */
|
||
box-shadow: 0 2px 6px rgba(0,0,0,.35) !important;
|
||
cursor: pointer !important;
|
||
z-index: 10 !important;
|
||
transition: transform .12s ease, box-shadow .12s ease, background-color .12s ease, border-color .12s ease, color .12s ease !important;
|
||
}
|
||
.drawflow .drawflow-node .close:hover {
|
||
transform: scale(1.06) !important;
|
||
background: #1f2937 !important;
|
||
border-color: var(--accent-2) !important;
|
||
color: #f8fafc !important;
|
||
box-shadow: 0 0 0 3px rgba(96,165,250,.22), 0 4px 10px rgba(0,0,0,.35) !important;
|
||
}
|
||
.drawflow .drawflow-node .close:active {
|
||
transform: scale(0.98) !important;
|
||
box-shadow: 0 0 0 2px rgba(96,165,250,.20), 0 2px 6px rgba(0,0,0,.35) !important;
|
||
}
|
||
/* Drawflow floating delete handle (class: .drawflow-delete) — restyle but keep behavior */
|
||
#drawflow .drawflow-delete,
|
||
.drawflow-delete {
|
||
position: absolute !important;
|
||
transform: translate(-50%, -50%) !important;
|
||
width: 20px !important;
|
||
height: 20px !important;
|
||
display: grid !important;
|
||
place-items: center !important;
|
||
border-radius: 999px !important;
|
||
background: #0f141a !important;
|
||
border: 1px solid #334155 !important;
|
||
color: transparent !important; /* hide default "x" text to avoid double symbol */
|
||
box-shadow: 0 2px 6px rgba(0,0,0,.35) !important;
|
||
cursor: pointer !important;
|
||
z-index: 1000 !important;
|
||
transition: transform .12s ease, box-shadow .12s ease, background-color .12s ease, border-color .12s ease !important;
|
||
}
|
||
#drawflow .drawflow-delete::before,
|
||
.drawflow-delete::before {
|
||
content: "×";
|
||
font-family: Inter, system-ui, Arial, sans-serif;
|
||
font-size: 13px;
|
||
font-weight: 700;
|
||
line-height: 1;
|
||
color: #e5e7eb;
|
||
}
|
||
#drawflow .drawflow-delete:hover,
|
||
.drawflow-delete:hover {
|
||
transform: translate(-50%, -50%) scale(1.06) !important;
|
||
background: #1f2937 !important;
|
||
border-color: var(--accent-2) !important;
|
||
box-shadow: 0 0 0 3px rgba(96,165,250,.22), 0 4px 10px rgba(0,0,0,.35) !important;
|
||
}
|
||
#drawflow .drawflow-delete:active,
|
||
.drawflow-delete:active {
|
||
transform: translate(-50%, -50%) scale(0.97) !important;
|
||
}
|
||
/* Execution highlight states (SSE-driven) */
|
||
.drawflow .drawflow-node .title-box,
|
||
.drawflow .drawflow-node .box {
|
||
transition: border-color .12s ease, box-shadow .12s ease, background-color .12s ease;
|
||
}
|
||
|
||
.drawflow .drawflow-node.node-running .title-box,
|
||
.drawflow .drawflow-node.node-running .box {
|
||
border-color: #60a5fa !important; /* blue */
|
||
box-shadow: 0 0 0 2px rgba(96,165,250,.35) !important;
|
||
}
|
||
|
||
.drawflow .drawflow-node.node-ok .title-box,
|
||
.drawflow .drawflow-node.node-ok .box {
|
||
border-color: #34d399 !important; /* green */
|
||
box-shadow: 0 0 0 2px rgba(52,211,153,.35) !important;
|
||
}
|
||
|
||
.drawflow .drawflow-node.node-err .title-box,
|
||
.drawflow .drawflow-node.node-err .box {
|
||
border-color: #ef4444 !important; /* red */
|
||
box-shadow: 0 0 0 2px rgba(239,68,68,.35) !important;
|
||
} |