:root { color: #1f2933; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #eef2f6; } * { box-sizing: border-box; } html, body, #root { width: 100%; height: 100%; margin: 0; } button, input, select, textarea { font: inherit; } .app-shell { display: grid; grid-template-rows: 62px 42px minmax(0, 1fr); width: 100%; height: 100%; min-width: 980px; } .topbar { display: grid; grid-template-columns: minmax(220px, 1fr) auto minmax(220px, 1fr); align-items: center; gap: 18px; min-height: 0; padding: 8px 14px; border-bottom: 1px solid #cfd8e3; background: #ffffff; } .product-name { font-size: 15px; font-weight: 700; } .product-meta { margin-top: 2px; color: #64748b; font-size: 12px; } .workspace-view-tabs { display: flex; align-items: stretch; height: 34px; border-bottom: 1px solid #bfcbd8; } .workspace-view-tabs button { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 7px; min-width: 76px; height: 34px; padding: 0 13px; border: 0; border-bottom: 2px solid transparent; color: #526172; background: transparent; cursor: pointer; } .workspace-view-tabs button:hover { color: #1f2933; background: #f1f5f8; } .workspace-view-tabs button.active { border-bottom-color: #1d6fb8; color: #155a94; background: #eaf3fa; font-weight: 700; } .workspace-view-tabs button:focus-visible { outline: 2px solid #1d6fb8; outline-offset: 1px; } .result-available-dot { width: 6px; height: 6px; border-radius: 50%; background: #2f7d55; box-shadow: 0 0 0 2px rgba(47, 125, 85, 0.14); } .topbar-actions { display: flex; justify-content: flex-end; align-items: center; justify-self: end; gap: 8px; } .save-indicator { min-width: 112px; color: #64748b; font-size: 11px; text-align: center; } .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .primary-button, .secondary-button { height: 32px; padding: 0 12px; border-radius: 6px; cursor: pointer; } .primary-button:disabled, .secondary-button:disabled { cursor: not-allowed; opacity: 0.58; } .primary-button { border: 1px solid #1d6fb8; color: #ffffff; background: #1d6fb8; } .secondary-button { border: 1px solid #c2ccda; color: #263442; background: #ffffff; } .project-name-field { display: flex; align-items: center; gap: 6px; color: #475569; font-size: 12px; font-weight: 650; } .project-name-field input { width: 150px; height: 32px; padding: 0 9px; border: 1px solid #c2ccda; border-radius: 6px; color: #1f2933; } .editor-toolbar { position: relative; z-index: 20; display: flex; align-items: center; gap: 7px; min-width: 0; padding: 5px 12px; overflow: visible; border-bottom: 1px solid #cfd8e3; background: #f5f7f9; } .toolbar-group { display: flex; align-items: center; gap: 3px; } .toolbar-separator { width: 1px; height: 22px; background: #cbd3dd; } .toolbar-item { position: relative; display: inline-flex; } .toolbar-item::after { position: absolute; top: calc(100% + 7px); left: 50%; z-index: 50; padding: 5px 7px; border: 1px solid #aeb8c5; border-radius: 4px; color: #ffffff; background: #263442; box-shadow: 0 2px 6px rgba(15, 23, 42, 0.18); content: attr(data-tooltip); font-size: 11px; font-weight: 500; letter-spacing: 0; line-height: 1; opacity: 0; pointer-events: none; transform: translate(-50%, -2px); transition: opacity 120ms ease, transform 120ms ease; white-space: nowrap; } .toolbar-item:hover::after { opacity: 1; transform: translate(-50%, 0); } .editor-tool-button { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 1px solid transparent; border-radius: 4px; color: #344252; background: transparent; cursor: pointer; } .editor-tool-button:hover:not(:disabled) { border-color: #bcc7d4; color: #17212b; background: #ffffff; } .editor-tool-button:focus-visible { outline: 2px solid #1d6fb8; outline-offset: 1px; } .editor-tool-button:disabled { color: #9ba6b2; cursor: not-allowed; opacity: 0.62; } .editor-tool-button.active { border-color: #1d6fb8; color: #155a94; background: #dceefa; box-shadow: inset 0 0 0 1px rgba(29, 111, 184, 0.08); } .editor-tool-button.active:hover:not(:disabled) { border-color: #155a94; color: #0f4f82; background: #cfe7f8; } .editor-tool-button.accent:not(.active) { color: #26724a; } .editor-tool-button.primary { border-color: #1d6fb8; color: #ffffff; background: #1d6fb8; } .editor-tool-button.primary:hover:not(:disabled) { border-color: #155a94; color: #ffffff; background: #155a94; } .workbench { --palette-width: 230px; --properties-width: 330px; --component-parameters-height: 340px; display: grid; grid-template-columns: var(--palette-width) 7px minmax(0, 1fr) 7px var(--properties-width); min-height: 0; } .workbench.resizing-palette-width, .workbench.resizing-properties-width { cursor: col-resize; user-select: none; } .workbench.resizing-component-parameters-height { cursor: row-resize; user-select: none; } .modeling-pane-splitter { position: relative; z-index: 8; display: grid; width: 7px; min-width: 7px; height: 100%; padding: 0; border: 0; place-items: center; background: #eef2f6; cursor: col-resize; touch-action: none; } .modeling-pane-splitter::before { position: absolute; inset: 0 auto 0 3px; width: 1px; background: #c7d1dc; content: ""; } .modeling-pane-splitter span { position: relative; width: 3px; height: 42px; border-radius: 2px; background: #9eacbb; opacity: 0; transition: opacity 120ms ease, background 120ms ease; } .modeling-pane-splitter:hover span, .modeling-pane-splitter:focus-visible span, .workbench.resizing-palette-width .modeling-pane-splitter:first-of-type span, .workbench.resizing-properties-width .modeling-pane-splitter:last-of-type span { background: #1d6fb8; opacity: 1; } .modeling-pane-splitter:focus-visible { outline: 2px solid #1d6fb8; outline-offset: -2px; } .palette, .properties { min-width: 0; min-height: 0; overflow: auto; border-color: #cfd8e3; background: #ffffff; } .palette { border-right: 0; } .properties { border-left: 0; display: grid; grid-template-rows: minmax(0, var(--component-parameters-height)) 7px minmax(120px, 1fr); overflow: hidden; } .properties-subpane { display: grid; grid-template-rows: auto minmax(0, 1fr); min-width: 0; min-height: 0; overflow: hidden; background: #ffffff; } .properties-subpane-content { min-width: 0; min-height: 0; overflow: auto; } .properties-pane-splitter { position: relative; z-index: 9; display: grid; width: 100%; height: 7px; min-height: 7px; padding: 0; border: 0; place-items: center; background: #eef2f6; cursor: row-resize; touch-action: none; } .properties-pane-splitter::before { position: absolute; inset: 3px 0 auto; height: 1px; background: #c7d1dc; content: ""; } .properties-pane-splitter span { position: relative; width: 42px; height: 3px; border-radius: 2px; background: #9eacbb; opacity: 0; transition: opacity 120ms ease, background 120ms ease; } .properties-pane-splitter:hover span, .properties-pane-splitter:focus-visible span, .workbench.resizing-component-parameters-height .properties-pane-splitter span { background: #1d6fb8; opacity: 1; } .properties-pane-splitter:focus-visible { outline: 2px solid #1d6fb8; outline-offset: -2px; } .panel-title { padding: 14px; border-bottom: 1px solid #e3e8ef; font-size: 13px; font-weight: 700; } .properties .panel-title { display: flex; align-items: center; min-height: 32px; padding: 0 10px; border-bottom-color: #c7cdd4; color: #293642; background: #f2f4f6; font-size: 12px; } .palette-list { display: block; padding: 12px; } .parameter-form { display: grid; gap: 10px; padding: 12px; } .parameter-table-wrap { width: 100%; min-width: 0; padding: 0; overflow-x: clip; } .parameter-table-wrap.parameter-form { display: block; padding: 0; } .parameter-table { --parameter-name-width: 116px; --parameter-unit-width: 72px; width: 100%; min-width: 0; border: 0; border-spacing: 0; border-radius: 0; color: #263442; background: #ffffff; table-layout: fixed; font-size: 12px; } .parameter-table-head .parameter-table-cell { position: sticky; z-index: 1; top: 0; height: 28px; padding: 0 8px; overflow: visible; border-right-color: #c4cad1; border-bottom-color: #b9c1c9; color: #35414c; background: #e3e6e9; box-shadow: 0 1px 0 rgba(51, 65, 85, 0.06); font-size: 11px; font-weight: 700; line-height: 27px; } .parameter-table-head .parameter-table-name-cell { z-index: 3; } .parameter-table-head .parameter-table-value-cell { z-index: 2; } .parameter-table-row { height: 32px; } .parameter-table-head-row { height: 28px; } .parameter-table-cell { min-width: 0; height: 32px; box-sizing: border-box; padding: 1px 7px; overflow: hidden; border-right: 1px solid #d5d9de; border-bottom: 1px solid #e1e4e7; vertical-align: middle; } .parameter-table-cell:last-child { border-right: 0; } .parameter-table > tbody > .parameter-table-row:nth-child(even) > .parameter-table-cell { background: #f3f4f5; } .parameter-table > tbody > .parameter-table-row:hover > .parameter-table-cell { background: #eaf3f8; } .parameter-table > tbody > .parameter-table-row:focus-within > .parameter-table-cell { background: #deedf5; } .parameter-table-row:focus-visible { outline: 2px solid rgba(29, 111, 184, 0.5); outline-offset: -2px; } .parameter-name-cell, .parameter-table-name-cell { overflow: hidden; color: #344256; text-align: left; text-overflow: ellipsis; white-space: nowrap; } .parameter-table > tbody .parameter-table-name-cell { font-weight: 400; } .parameter-value-cell, .parameter-table-value-cell, .parameter-unit-cell, .parameter-table-unit-cell { min-width: 0; padding: 1px 3px; } .parameter-unit-cell, .parameter-table-unit-cell { color: #526172; text-align: center; } .parameter-table-cell input, .parameter-table-cell select { display: block; width: 100%; min-width: 0; max-width: 100%; height: 28px; box-sizing: border-box; margin: 0; padding: 0 6px; border: 1px solid transparent; border-radius: 1px; outline: 0; color: #1f2933; background: transparent; font-size: 12px; font-variant-numeric: tabular-nums; } .parameter-table-cell select { padding-right: 4px; } .parameter-table > tbody .parameter-table-value-cell, .parameter-table > tbody .parameter-table-value-cell input, .parameter-table > tbody .parameter-table-value-cell select { text-align: right; } .parameter-table > tbody .parameter-table-value-cell select { text-align-last: right; } .parameter-table-cell input:hover:not(:disabled), .parameter-table-cell select:hover:not(:disabled) { border-color: #aebbc7; background: rgba(255, 255, 255, 0.72); } .parameter-table-cell input:focus, .parameter-table-cell select:focus { border-color: #1d6fb8; outline: 0; background: #ffffff; box-shadow: inset 0 0 0 1px #1d6fb8; } .parameter-table-cell input:focus-visible, .parameter-table-cell select:focus-visible { outline: 2px solid rgba(29, 111, 184, 0.28); outline-offset: -2px; } .parameter-table-row.read-only .parameter-value-cell, .parameter-table-row.read-only .parameter-table-value-cell, .parameter-table-cell input:read-only { background: transparent; } .parameter-read-only-value, .parameter-table-read-only-value { display: flex; align-items: center; justify-content: flex-end; width: 100%; min-width: 0; height: 28px; box-sizing: border-box; padding: 0 6px; overflow: hidden; border: 0; border-radius: 0; color: #526172; text-align: right; text-overflow: ellipsis; white-space: nowrap; background: transparent; font-variant-numeric: tabular-nums; } .parameter-table-row.unitless .parameter-unit-cell, .parameter-table-row.unitless .parameter-table-unit-cell { color: #8a96a4; } .parameter-table-row.unitless .parameter-unit-cell:empty::before, .parameter-table-row.unitless .parameter-table-unit-cell:empty::before { content: "—"; } .parameter-table > tbody > .parameter-table-row.invalid > .parameter-table-cell { background: #fff8f7; } .parameter-table-row.invalid input, .parameter-table-row.invalid select, .parameter-table-cell input[aria-invalid="true"], .parameter-table-cell select[aria-invalid="true"] { border-color: #c63b32; box-shadow: inset 0 0 0 1px rgba(198, 59, 50, 0.18); } .parameter-table-message-row { height: auto; } .parameter-table-message-row > .parameter-table-cell { height: auto; min-height: 24px; padding: 4px 7px 5px; overflow: visible; white-space: normal; } .parameter-table-message-row .field-error, .parameter-table-message-row .field-hint { display: block; margin: 0; overflow-wrap: anywhere; line-height: 1.35; } .parameter-table-row.invalid + .parameter-table-message-row > .parameter-table-cell { color: #b42318; background: #fff8f7; } .parameter-table > tbody > tr:last-child > .parameter-table-cell { border-bottom: 0; } .parameter-column-resizer, .parameter-table-column-resizer { position: absolute; z-index: 4; top: 0; right: -5px; bottom: 0; width: 9px; padding: 0; border: 0; outline: 0; background: transparent; cursor: col-resize; touch-action: none; user-select: none; } .parameter-column-resizer::after, .parameter-table-column-resizer::after { position: absolute; top: 3px; bottom: 3px; left: 4px; width: 1px; background: #aebac7; content: ""; } .parameter-column-resizer:hover::after, .parameter-column-resizer:focus-visible::after, .parameter-column-resizer:active::after, .parameter-table-column-resizer:hover::after, .parameter-table-column-resizer:focus-visible::after, .parameter-table-column-resizer:active::after { width: 2px; background: #1d6fb8; } .parameter-column-resizer:focus-visible, .parameter-table-column-resizer:focus-visible { outline: 2px solid rgba(29, 111, 184, 0.42); outline-offset: -2px; } .parameter-table-wrap[data-resizing-column], .parameter-table-wrap[data-resizing-column] * { cursor: col-resize; user-select: none; } .parameter-table-wrap[data-resizing-column="name"] .parameter-column-resizer[data-column="name"]::after, .parameter-table-wrap[data-resizing-column="unit"] .parameter-column-resizer[data-column="unit"]::after, .parameter-table-wrap.resizing-name .parameter-column-resizer[data-column="name"]::after, .parameter-table-wrap.resizing-unit .parameter-column-resizer[data-column="unit"]::after, .parameter-table-wrap[data-resizing-column="name"] .parameter-table-column-resizer[data-column="name"]::after, .parameter-table-wrap[data-resizing-column="unit"] .parameter-table-column-resizer[data-column="unit"]::after, .parameter-table-wrap.resizing-name .parameter-table-column-resizer[data-column="name"]::after, .parameter-table-wrap.resizing-unit .parameter-table-column-resizer[data-column="unit"]::after { width: 2px; background: #1d6fb8; } .parameter-table .field, .parameter-table .parameter-control { display: contents; } .parameter-help-preview { position: fixed; z-index: 10020; width: max-content; max-width: min(300px, calc(100vw - 16px)); box-sizing: border-box; padding: 10px 12px; border: 1px solid #c7d1dc; border-radius: 5px; color: #263442; background: #ffffff; box-shadow: 0 8px 22px rgba(15, 23, 42, 0.2); pointer-events: none; } .parameter-help-preview .title, .parameter-help-preview-title { display: block; overflow-wrap: anywhere; color: #17212b; font-size: 12px; font-weight: 700; line-height: 1.35; } .parameter-help-preview .description, .parameter-help-preview-description { display: block; margin-top: 6px; overflow-wrap: anywhere; color: #475569; font-size: 11px; line-height: 1.45; } .parameter-help-preview .meta, .parameter-help-preview-meta { display: grid; gap: 2px; margin-top: 7px; padding-top: 6px; overflow-wrap: anywhere; border-top: 1px solid #e2e8f0; color: #64748b; font-size: 10px; line-height: 1.4; } .palette-panel-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; } .palette-display-mode { display: inline-flex; flex: 0 0 auto; gap: 1px; padding: 1px; border: 1px solid #cad5e1; border-radius: 5px; background: #f4f7fa; } .palette-display-mode-button { display: grid; width: 23px; height: 22px; padding: 0; border: 0; border-radius: 3px; place-items: center; color: #64748b; background: transparent; cursor: pointer; } .palette-display-mode-button:hover { color: #155a94; background: #e6f0f8; } .palette-display-mode-button:focus-visible { outline: 2px solid #1d6fb8; outline-offset: 1px; } .palette-display-mode-button[aria-pressed="true"] { color: #155a94; background: #ffffff; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.16); } .catalog-source { display: inline-flex; align-items: center; gap: 5px; color: #64748b; font-size: 10px; font-weight: 500; white-space: nowrap; } .catalog-source > span { width: 7px; height: 7px; border-radius: 50%; background: #d49b16; } .catalog-source.ready > span { background: #198754; } .catalog-source.fallback > span { background: #b45309; } .palette-library + .palette-library { margin-top: 18px; padding-top: 14px; border-top: 1px solid #e3e8ef; } .palette-library-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 12px; } .palette-library-heading strong { color: #17212b; font-size: 12px; } .palette-library-heading small { color: #64748b; font-size: 10px; white-space: nowrap; } .palette-category + .palette-category { margin-top: 14px; } .palette-category-title { margin-bottom: 6px; color: #526172; font-size: 10px; font-weight: 700; } .palette-collapse-toggle { display: flex; align-items: center; gap: 4px; width: 100%; min-width: 0; padding: 2px 0; border: 0; border-radius: 3px; color: inherit; text-align: left; background: transparent; font: inherit; cursor: pointer; } .palette-collapse-toggle:hover { color: #155a94; } .palette-collapse-toggle:focus-visible { outline: 2px solid #1d6fb8; outline-offset: 2px; } .palette-collapse-chevron { flex: 0 0 auto; transform: rotate(0deg); transition: transform 120ms ease; } .palette-collapse-toggle[aria-expanded="false"] .palette-collapse-chevron { transform: rotate(-90deg); } .palette-library-toggle { flex: 1 1 auto; width: auto; } .palette-category-items { display: grid; gap: 8px; } .palette[data-view-mode="icons"] .palette-category-items { grid-template-columns: repeat(auto-fill, 76px); gap: 6px; justify-content: start; } .compact-form { grid-template-columns: repeat(2, minmax(0, 1fr)); } .compact-form .field:last-child { grid-column: 1 / -1; } .palette-item { display: grid; grid-template-columns: 36px minmax(0, 1fr); align-items: center; gap: 10px; min-height: 52px; padding: 8px; border: 1px solid #d6dee9; border-radius: 6px; color: #22303f; text-align: left; background: #ffffff; cursor: grab; transition: border-color 120ms ease, box-shadow 120ms ease, background 120ms ease, transform 80ms ease; } .palette-item:hover { border-color: #85add0; background: #f5faff; box-shadow: 0 2px 6px rgba(21, 90, 148, 0.1); } .palette-item:focus-visible { border-color: #1d6fb8; outline: 2px solid rgba(29, 111, 184, 0.32); outline-offset: 1px; } .palette-item:active { cursor: grabbing; transform: translateY(1px); } .palette-item-copy { min-width: 0; overflow: hidden; } .palette-item-copy strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .palette-item small { display: block; margin-top: 2px; overflow: hidden; color: #64748b; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .palette-icon { display: grid; width: 36px; height: 36px; place-items: center; } .component-symbol { display: grid; width: 100%; height: 100%; place-items: center; pointer-events: none; } .component-symbol-svg { display: block; width: 100%; height: 100%; overflow: visible; shape-rendering: geometricPrecision; } .component-symbol-svg[data-symbol-domain="neutral"] { --component-symbol-stroke: #334155; --component-symbol-fill: #f8fafc; --component-symbol-accent: #2563eb; --component-symbol-muted: #94a3b8; } .component-symbol-svg[data-symbol-domain="pneumatic"] { --component-symbol-stroke: #a12b70; --component-symbol-fill: #fff8fc; --component-symbol-accent: #bd2779; --component-symbol-muted: #d69aba; } .component-symbol-svg[data-symbol-domain="mechanical"] { --component-symbol-stroke: #1f9d42; --component-symbol-fill: #f4fff6; --component-symbol-accent: #15803d; --component-symbol-muted: #86c994; } .component-symbol-svg[data-symbol-domain="signal"] { --component-symbol-stroke: #ef4444; --component-symbol-fill: #fff8f8; --component-symbol-accent: #dc2626; --component-symbol-muted: #f5a3a3; } .component-symbol-svg[data-symbol-domain="medium"] { --component-symbol-stroke: #c026d3; --component-symbol-fill: #ffffff; --component-symbol-accent: #a21caf; --component-symbol-muted: #e879f9; } .component-symbol-medium-label { font-family: "Segoe UI", "Microsoft YaHei", sans-serif; font-weight: 600; } .palette[data-view-mode="icons"] .palette-list { padding: 10px; } .palette[data-view-mode="icons"] .palette-item { grid-template-columns: minmax(0, 1fr); grid-template-rows: 48px 16px; gap: 4px; width: 76px; height: 82px; min-height: 82px; box-sizing: border-box; padding: 6px 5px; place-items: center; text-align: center; } .palette[data-view-mode="icons"] .palette-item-copy { display: block; width: 100%; min-width: 0; overflow: hidden; line-height: 16px; text-align: center; } .palette[data-view-mode="icons"] .palette-item-copy strong { width: 100%; overflow: hidden; font-size: 10px; line-height: 16px; text-overflow: ellipsis; white-space: nowrap; } .palette[data-view-mode="icons"] .palette-item-copy small { display: none; } .palette[data-view-mode="icons"] .palette-icon { flex: 0 0 48px; width: 48px; height: 48px; } .palette-icon-preview { position: fixed; z-index: 10000; display: grid; grid-template-rows: 56px auto; min-width: 104px; max-width: 220px; box-sizing: border-box; padding: 9px 11px 10px; border: 1px solid #cbd5e1; border-radius: 6px; place-items: center; color: #1f2937; background: #ffffff; box-shadow: 0 7px 18px rgba(15, 23, 42, 0.2); pointer-events: none; } .palette-icon-preview-symbol { display: grid; flex: 0 0 56px; width: 56px; height: 56px; place-items: center; } .palette-icon-preview-symbol > .component-symbol { width: 100%; height: 100%; } .palette-icon-preview-label { max-width: 198px; margin-top: 5px; overflow-wrap: anywhere; font-size: 12px; font-weight: 700; line-height: 1.35; text-align: center; } .component-drag-preview { position: fixed; top: -1000px; left: -1000px; z-index: -1; display: grid; grid-template-rows: 30px 12px; place-items: center; width: 72px; height: 58px; padding: 5px 6px 4px; border: 1px solid #7c8998; border-radius: 5px; color: #1f2933; background: #ffffff; box-shadow: 0 2px 5px rgba(15, 23, 42, 0.16); pointer-events: none; } .component-drag-preview .palette-icon { width: 30px; height: 30px; } .component-drag-preview-label { max-width: 60px; overflow: hidden; font-size: 9px; font-weight: 650; line-height: 12px; text-overflow: ellipsis; white-space: nowrap; } .flow-canvas { position: relative; min-width: 0; min-height: 0; background: #f8fafc; } .recovery-banner button { min-width: 48px; height: 28px; padding: 0 8px; border: 1px solid #c2ccda; border-radius: 4px; color: #263442; background: #ffffff; cursor: pointer; } .recovery-banner { display: flex; align-items: center; gap: 8px; padding: 7px 9px; border: 1px solid #d5a52e; border-radius: 6px; color: #713f12; background: #fffbeb; box-shadow: 0 2px 8px rgba(120, 53, 15, 0.12); font-size: 12px; font-weight: 650; } .recovery-banner button { min-width: 42px; border-color: #d5a52e; color: #713f12; background: #ffffff; } .flow-canvas .react-flow__pane, .flow-canvas .react-flow__pane.selection, .flow-canvas .react-flow__node.selectable, .flow-canvas .react-flow__node.draggable { cursor: default; } .flow-canvas .react-flow__pane.dragging { cursor: grabbing; } .flow-canvas .react-flow__node.draggable.dragging { cursor: move; } .flow-canvas .react-flow__nodesselection-rect { border: 0; background: transparent; pointer-events: none; } .sim-node { position: relative; width: 132px; height: 84px; } .sim-node.orientation-vertical { width: 84px; height: 132px; } .sim-node-frame { position: absolute; top: 50%; left: 50%; display: grid; place-items: center; width: 132px; height: 84px; box-sizing: border-box; border: 2px solid #4b5563; border-radius: 6px; background: #ffffff; box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08); transform-origin: center; } .sim-node.selected { outline: 1px dashed #111827; outline-offset: 4px; } .flow-canvas .react-flow__node.component-icon-node { pointer-events: none !important; } .flow-canvas .react-flow__node.component-icon-node .sim-node { pointer-events: none; } .flow-canvas .react-flow__node.component-icon-node .node-symbol-envelope, .flow-canvas .react-flow__node.component-icon-node .port-handle.port-connection-idle, .flow-canvas .react-flow__node.component-icon-node .port-handle.port-connection-origin, .flow-canvas .react-flow__node.component-icon-node .port-handle.port-connection-compatible { pointer-events: auto; } .react-flow__node.validation-error .sim-node-frame { border-color: #c63b32; box-shadow: 0 0 0 3px rgba(198, 59, 50, 0.14); } .react-flow__node.validation-warning .sim-node-frame { border-color: #c08a16; box-shadow: 0 0 0 3px rgba(192, 138, 22, 0.14); } .node-symbol-anchor { position: absolute; z-index: 1; top: 50%; left: 50%; width: 112px; height: 84px; transform: translate(-50%, -50%); } .node-symbol { position: relative; display: grid; width: 112px; height: 84px; place-items: center; transform-origin: center; } .node-symbol > .component-symbol { position: relative; z-index: 1; width: 100%; height: 100%; } .node-symbol-envelope { position: absolute; z-index: 2; box-sizing: border-box; } .sim-node.component-icon-only.selected { outline: none; } .sim-node.component-icon-only.selected .node-symbol-envelope { outline: 1px dashed #111827; outline-offset: 3px; } .sim-node.symbol-presentation-bare .sim-node-frame, .sim-node.symbol-presentation-bare.selected .sim-node-frame, .sim-node.component-icon-only .sim-node-frame, .sim-node.component-icon-only.selected .sim-node-frame { border-width: 0; border-color: transparent; background: transparent; box-shadow: none; } .sim-node.symbol-presentation-bare .node-label, .sim-node.component-icon-only .node-label { display: none; background: transparent; } .react-flow__node.validation-error .sim-node.component-icon-only .component-symbol-svg { filter: drop-shadow(0 0 3px rgba(198, 59, 50, 0.68)); } .react-flow__node.validation-warning .sim-node.component-icon-only .component-symbol-svg { filter: drop-shadow(0 0 3px rgba(192, 138, 22, 0.68)); } .node-label { position: absolute; z-index: 2; bottom: 4px; left: 50%; max-width: calc(100% - 14px); padding: 0 2px; overflow: hidden; font-size: 12px; font-weight: 700; line-height: 16px; pointer-events: none; text-overflow: ellipsis; transform: translateX(-50%); white-space: nowrap; background: rgba(255, 255, 255, 0.88); } .sim-node.generic-component .node-label { top: 50%; bottom: auto; display: -webkit-box; max-width: calc(100% - 28px); overflow: hidden; line-height: 16px; text-align: center; text-overflow: ellipsis; transform: translate(-50%, -50%); white-space: normal; background: transparent; -webkit-box-orient: vertical; -webkit-line-clamp: 2; } .port-handle { z-index: 3; width: 9px; height: 9px; box-sizing: border-box; border: 1.5px solid var(--port-handle-color, #475569); border-radius: 50%; background: #ffffff; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.82); opacity: 1; transition: opacity 100ms ease, border-color 100ms ease, background 100ms ease, box-shadow 100ms ease; } .port-handle-physical { --port-handle-color: #a12b70; } .port-handle-signal { --port-handle-color: #dc2626; border-radius: 2px; } .port-handle.port-connection-connected { pointer-events: none; opacity: 0; } .port-handle.port-connection-origin { border-color: #d97706; background: #fff7d6; box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.24), 0 0 8px rgba(217, 119, 6, 0.42); } .port-handle.port-connection-compatible { border-color: #15803d; background: #dcfce7; box-shadow: 0 0 0 4px rgba(34, 197, 94, 0.24), 0 0 9px rgba(21, 128, 61, 0.48); } .port-handle.port-connection-incompatible { pointer-events: none; opacity: 0.18; } .flow-canvas .react-flow__edge-path, .flow-canvas .react-flow__connection-path { stroke: #64748b; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; transition: stroke 120ms ease-out, stroke-width 120ms ease-out, filter 120ms ease-out; vector-effect: non-scaling-stroke; } .flow-canvas .react-flow__edge-interaction { cursor: pointer; } .flow-canvas .react-flow__edge:hover .react-flow__edge-path { stroke: #3977a8; stroke-width: 2.25; } .flow-canvas .react-flow__edge.selected .react-flow__edge-path, .flow-canvas .react-flow__edge.editor-edge-selected .react-flow__edge-path { stroke: #1d6fb8; stroke-width: 3.25; filter: drop-shadow(0 0 2px rgba(29, 111, 184, 0.42)); } .contact-edge-hit { cursor: pointer; fill: transparent; pointer-events: all; stroke: transparent; } .contact-edge-marker { fill: #ffffff; opacity: 0; pointer-events: none; stroke: #64748b; stroke-width: 1.5; transition: opacity 120ms ease-out, fill 120ms ease-out, stroke 120ms ease-out; vector-effect: non-scaling-stroke; } .react-flow__edge.editor-edge-contact:hover .contact-edge-marker, .react-flow__edge.editor-edge-contact.selected .contact-edge-marker, .react-flow__edge.editor-edge-contact.editor-edge-selected .contact-edge-marker, .contact-edge-hit:focus-visible + .contact-edge-marker { opacity: 1; } .react-flow__edge.editor-edge-contact.selected .contact-edge-marker, .react-flow__edge.editor-edge-contact.editor-edge-selected .contact-edge-marker, .contact-edge-hit:focus-visible + .contact-edge-marker { fill: #dbeafe; stroke: #1d6fb8; stroke-width: 2; } .field { display: grid; gap: 6px; color: #334155; font-size: 12px; font-weight: 650; } .field em { margin-left: 6px; color: #64748b; font-style: normal; font-weight: 400; } .field input, .field select { width: 100%; height: 34px; padding: 0 9px; border: 1px solid #c2ccda; border-radius: 6px; color: #1f2933; background: #ffffff; } .field select { padding: 0 7px; } .parameter-control { display: grid; grid-template-columns: minmax(0, 1fr) 76px; gap: 6px; } .parameter-control.unitless { grid-template-columns: minmax(0, 1fr); } .field.invalid input, .field.invalid select { border-color: #c63b32; } .field-error { color: #b42318; font-size: 11px; font-weight: 500; } .field-hint { color: #64748b; font-size: 11px; font-weight: 400; line-height: 1.4; } .node-id { padding-bottom: 8px; border-bottom: 1px solid #e3e8ef; color: #64748b; font-size: 12px; } .empty-state { padding: 16px; color: #64748b; font-size: 13px; } .results-shell { display: grid; grid-template-rows: 62px minmax(0, 1fr); width: 100%; height: 100%; min-width: 980px; background: #eef2f6; } .results-topbar { display: grid; grid-template-columns: minmax(220px, 1fr) auto minmax(220px, 1fr); align-items: center; gap: 18px; padding: 8px 14px; border-bottom: 1px solid #cfd8e3; background: #ffffff; } .results-run-meta { display: grid; justify-items: end; gap: 2px; min-width: 0; text-align: right; } .results-run-meta strong, .results-run-meta span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .results-run-meta strong { color: #253342; font-size: 12px; } .results-run-meta span { color: #64748b; font-size: 11px; } .results-run-meta .results-run-status { padding: 2px 5px; border: 1px solid #d9a441; border-radius: 4px; color: #80591b; background: #fff8e8; font-weight: 700; } .results-run-meta .results-run-status.stalled, .results-run-meta .results-run-status.failed { border-color: #d99b96; color: #9f2f28; background: #fff1f0; } .results-run-meta.empty { color: #7b8795; } .results-run-actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px; min-width: 0; } .results-file-toolbar { display: flex; align-items: center; gap: 3px; padding: 2px; border: 1px solid #c4cfdb; border-radius: 6px; background: #f6f8fa; } .results-file-toolbar button { display: grid; flex: 0 0 30px; width: 30px; height: 28px; padding: 0; border: 1px solid #b9c7d6; border-radius: 4px; place-items: center; color: #214f78; background: #ffffff; cursor: pointer; } .results-file-toolbar button:hover:not(:disabled) { border-color: #7da8ce; background: #eef6fc; } .results-file-toolbar button:disabled { color: #8492a2; background: #f3f5f7; cursor: wait; } .results-file-input { display: none; } .results-workbench { display: grid; min-width: 0; min-height: 0; overflow: hidden; background: #dfe5ec; } .results-workbench.resizing-inspector-width, .results-workbench.resizing-system-height { user-select: none; } .results-inspector-pane { display: grid; min-width: 0; min-height: 0; overflow: hidden; } .results-system-panel, .results-chart-panel, .results-variable-panel { display: grid; grid-template-rows: 43px minmax(0, 1fr); min-width: 0; min-height: 0; background: #ffffff; } .results-system-panel { overflow: hidden; } .results-chart-panel { min-width: 0; overflow: hidden; } .results-variable-panel { overflow: hidden; } .results-variable-content { min-width: 0; min-height: 0; overflow: auto; background: #fbfcfd; } .results-pane-splitter { position: relative; z-index: 30; display: grid; place-items: center; padding: 0; border: 0; outline: none; background: #e4e9ef; touch-action: none; } .results-pane-splitter::before { position: absolute; inset: 0; background: transparent; content: ""; } .results-pane-splitter span { position: relative; display: block; border-radius: 1px; background: #91a0b0; } .results-pane-splitter.vertical { cursor: col-resize; } .results-pane-splitter.vertical span { width: 2px; height: 34px; } .results-pane-splitter.horizontal { cursor: row-resize; } .results-pane-splitter.horizontal span { width: 34px; height: 2px; } .results-pane-splitter:hover, .results-pane-splitter:focus-visible, .results-workbench.resizing-inspector-width > .results-pane-splitter.vertical, .results-workbench.resizing-system-height .results-pane-splitter.horizontal { background: #d7e9f7; } .results-pane-splitter:hover span, .results-pane-splitter:focus-visible span, .results-workbench.resizing-inspector-width > .results-pane-splitter.vertical span, .results-workbench.resizing-system-height .results-pane-splitter.horizontal span { background: #1d6fb8; } .results-section-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 43px; padding: 0 13px; border-bottom: 1px solid #dfe5ec; color: #233142; background: #f7f9fb; } .results-section-heading strong { font-size: 13px; } .results-section-heading span { color: #64748b; font-size: 11px; } .results-chart-heading { position: relative; z-index: 25; overflow: visible; } .results-chart-heading-tools { display: flex; align-items: center; gap: 8px; } .results-multi-create { position: relative; } .results-multi-create > button { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 1px solid transparent; border-radius: 4px; color: #526172; background: transparent; cursor: pointer; } .results-multi-create > button:hover:not(:disabled), .results-multi-create > button.active { border-color: #74a9d7; color: #0f5f9f; background: #e8f3fc; } .results-multi-create > button:disabled { cursor: default; opacity: 0.38; } .results-multi-create-menu { position: absolute; top: 32px; right: 0; z-index: 40; width: 210px; max-height: 240px; overflow: auto; border: 1px solid #8fa1b4; border-radius: 5px; color: #26384b; background: #ffffff; box-shadow: 0 8px 22px rgba(30, 41, 59, 0.2); } .results-multi-create-title { height: 31px; padding: 8px 10px; border-bottom: 1px solid #dbe2ea; color: #5e6e80; background: #f3f6f9; font-size: 10px; font-weight: 650; } .results-multi-create-menu > button { display: flex; align-items: center; justify-content: space-between; gap: 12px; width: 100%; min-height: 34px; padding: 6px 10px; border: 0; border-bottom: 1px solid #edf0f4; color: #28394c; background: #ffffff; cursor: pointer; } .results-multi-create-menu > button:last-child { border-bottom: 0; } .results-multi-create-menu > button:hover, .results-multi-create-menu > button:focus-visible { outline: none; background: #edf4fa; } .results-multi-create-menu > button strong { min-width: 0; overflow: hidden; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .results-multi-create-menu > button span { flex: 0 0 auto; font-size: 10px; } .results-multi-create-menu.variables { width: 320px; } .results-system-canvas { position: relative; min-width: 0; min-height: 0; background: #f8fafc; } .results-system-canvas .react-flow__pane { cursor: grab; } .results-system-canvas .react-flow__pane.dragging { cursor: grabbing; } .results-system-canvas .react-flow__node { cursor: pointer; } .results-system-canvas .react-flow__handle { cursor: default; pointer-events: none; } .results-system-canvas .react-flow__edge-path { stroke: #5f6f82; stroke-width: 1.5; } .results-system-canvas .contact-edge-hit { cursor: default; pointer-events: none; } .results-system-canvas .contact-edge-marker { opacity: 0; } .results-chart-workspace { position: relative; z-index: 0; min-width: 0; min-height: 0; overflow: hidden; background-color: #f5f7fa; background-image: radial-gradient(#cbd5e1 0.7px, transparent 0.7px); background-position: 0 0; background-size: 18px 18px; isolation: isolate; } .results-chart-workspace.empty { background-color: #f8fafc; } .results-workspace-empty { position: absolute; top: 50%; left: 50%; color: #8a97a6; font-size: 12px; transform: translate(-50%, -50%); } .result-chart-window { position: absolute; display: grid; grid-template-rows: 44px minmax(0, 1fr); overflow: hidden; border: 1px solid #99a8b8; border-radius: 6px; background: #ffffff; box-shadow: 0 7px 20px rgba(30, 41, 59, 0.18); } .result-chart-window.drop-target { border-color: #1d6fb8; box-shadow: 0 0 0 3px rgba(29, 111, 184, 0.2), 0 7px 20px rgba(30, 41, 59, 0.18); } .result-chart-pending { display: grid; align-content: center; justify-items: center; gap: 7px; margin: 16px; padding: 24px; border: 1px dashed #9aaaba; border-radius: 5px; color: #718096; text-align: center; background: #f8fafc; pointer-events: none; } .result-chart-pending strong { color: #43556a; font-size: 13px; } .result-chart-pending span { max-width: 300px; font-size: 11px; line-height: 1.5; } .result-chart-window.pending.drop-target .result-chart-pending { border-color: #1d6fb8; color: #1d6fb8; background: #edf6fd; } .result-chart-window-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-width: 0; padding: 5px 7px 5px 11px; border-bottom: 1px solid #dbe2ea; background: #f6f8fa; cursor: move; touch-action: none; user-select: none; } .result-chart-window-title { flex: 1 1 auto; min-width: 0; } .result-chart-window-actions { display: flex; align-items: center; flex: 0 0 auto; gap: 2px; } .result-chart-window-actions select { width: 74px; height: 28px; padding: 0 20px 0 7px; border: 1px solid #c5cfda; border-radius: 4px; color: #34465a; background: #ffffff; font: inherit; font-size: 10px; cursor: pointer; } .result-chart-window-actions select:focus-visible { border-color: #1d6fb8; outline: 2px solid rgba(29, 111, 184, 0.18); outline-offset: 1px; } .result-chart-window-title strong, .result-chart-window-title span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .result-chart-window-title strong { color: #1f2933; font-size: 12px; } .result-chart-window-title span { margin-top: 1px; color: #64748b; font-size: 10px; } .result-chart-window-header button { display: grid; flex: 0 0 28px; place-items: center; width: 28px; height: 28px; padding: 0; border: 1px solid transparent; border-radius: 4px; color: #526172; background: transparent; cursor: pointer; } .result-chart-window-header button:hover { border-color: #c5cfda; color: #1d6fb8; background: #ffffff; } .result-chart-window-header button.cursor.active { border-color: #74a9d7; color: #0f5f9f; background: #e8f3fc; } .result-chart-window-header button.active { border-color: #74a9d7; color: #0f5f9f; background: #e8f3fc; } .result-chart-multi-picker { position: relative; flex: 0 0 auto; } .result-chart-multi-menu { position: absolute; top: 31px; right: 0; z-index: 20; width: 340px; max-width: min(340px, calc(100vw - 32px)); overflow: hidden; border: 1px solid #8fa1b4; border-radius: 5px; color: #26384b; background: #ffffff; box-shadow: 0 8px 22px rgba(30, 41, 59, 0.2); cursor: default; } .result-chart-multi-menu-title { display: flex; align-items: center; justify-content: space-between; gap: 12px; height: 32px; padding: 0 9px; border-bottom: 1px solid #dbe2ea; background: #f3f6f9; font-size: 10px; } .result-chart-multi-menu-title span { color: #5e6e80; } .result-chart-multi-menu-title strong { font-size: 10px; } .result-chart-multi-menu-list { max-height: 156px; overflow: auto; padding: 4px; } .result-chart-multi-menu-row { display: grid; grid-template-columns: 16px 5px minmax(0, 1fr) 78px 26px; gap: 7px; align-items: center; min-height: 36px; padding: 4px 6px; border-radius: 3px; } .result-chart-multi-menu-row:hover { background: #edf4fa; } .result-chart-multi-menu-row > input { width: 14px; height: 14px; margin: 0; accent-color: #1d6fb8; cursor: pointer; } .result-chart-multi-menu-list .result-variable-swatch { width: 4px; height: 25px; border-radius: 2px; } .result-chart-multi-menu-label { min-width: 0; } .result-chart-multi-menu-label b, .result-chart-multi-menu-label small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .result-chart-multi-menu-label b { color: #27384b; font-size: 10px; } .result-chart-multi-menu-label small { margin-top: 1px; color: #718093; font-size: 9px; } .result-chart-window-actions .result-chart-multi-menu-row > select { grid-column: 4; width: 78px; height: 26px; padding: 0 18px 0 5px; border: 1px solid #c5cfda; border-radius: 4px; color: #34465a; background: #ffffff; font: inherit; font-size: 9px; } .result-chart-multi-menu-row > .remove { grid-column: 5; width: 26px; height: 26px; color: #8b4650; } .result-chart-multi-menu-row > .remove:hover:not(:disabled) { border-color: #d5a1a6; color: #a52f3a; background: #fff1f2; } .result-chart-multi-menu-row > .remove:disabled { cursor: default; opacity: 0.3; } .result-chart-window-header button.close:hover { color: #b42318; } .result-chart-body { position: relative; min-width: 0; min-height: 0; overflow: hidden; padding: 5px 8px 7px 4px; -webkit-user-select: none; user-select: none; } .result-chart-body > svg { display: block; width: 100%; height: 100%; touch-action: none; } .result-chart-body > svg text { pointer-events: none; -webkit-user-select: none; user-select: none; } .result-chart-body > svg.cursor-enabled { cursor: crosshair; } .result-chart-grid-line { stroke: #dce4ec; stroke-width: 1; vector-effect: non-scaling-stroke; } .result-chart-axis { stroke: #64758a; stroke-width: 1; vector-effect: non-scaling-stroke; } .result-chart-tick { stroke: #64758a; stroke-width: 1; vector-effect: non-scaling-stroke; } .result-chart-label, .result-chart-unit, .result-chart-title, .result-chart-axis-title { fill: #5b6878; font-family: inherit; font-size: 9px; } .result-chart-cursor line { stroke: #0f766e; stroke-width: 1; stroke-dasharray: 4 3; vector-effect: non-scaling-stroke; } .result-chart-cursor circle { stroke: #ffffff; stroke-width: 1.5; vector-effect: non-scaling-stroke; } .result-chart-cursor-hit { stroke: transparent; stroke-width: 14; pointer-events: stroke; touch-action: none; vector-effect: non-scaling-stroke; } .result-chart-cursor-hit.x { cursor: ew-resize; } .result-chart-cursor-hit.y { cursor: ns-resize; } .result-chart-cursor-panel { position: absolute; z-index: 3; width: 154px; max-width: calc(100% - 12px); overflow: hidden; border: 1px solid #7f91a5; border-radius: 4px; color: #25364a; background: rgba(255, 255, 255, 0.96); box-shadow: 0 3px 10px rgba(30, 41, 59, 0.16); user-select: none; } .result-chart-cursor-panel-header { display: flex; align-items: center; gap: 5px; width: 100%; height: 25px; padding: 0 7px; border: 0; border-bottom: 1px solid #d4dde6; border-radius: 0; color: #34465a; background: #edf2f6; font: inherit; font-size: 10px; font-weight: 650; cursor: move; touch-action: none; } .result-chart-cursor-panel dl { display: grid; gap: 3px; margin: 0; padding: 6px 8px 7px; font-size: 10px; } .result-chart-cursor-panel dl > div { display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 5px; align-items: baseline; } .result-chart-cursor-panel dt { color: #64748b; font-weight: 700; } .result-chart-cursor-panel dd { min-width: 0; margin: 0; overflow: hidden; color: #18293c; font-variant-numeric: tabular-nums; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; } .result-chart-cursor-panel.multi { width: 208px; } .result-chart-cursor-panel.multi dl { max-height: 150px; overflow: auto; } .result-chart-cursor-panel.multi dl > div { grid-template-columns: 24px minmax(0, 1fr); } .result-chart-cursor-panel.multi dd { display: flex; align-items: center; gap: 5px; } .result-chart-cursor-value-swatch { flex: 0 0 auto; width: 10px; height: 3px; border-radius: 1px; } .result-chart-resize-handle { position: absolute; right: 0; bottom: 0; z-index: 5; display: grid; width: 20px; height: 20px; padding: 0; border: 0; border-top: 1px solid #d5dee7; border-left: 1px solid #d5dee7; border-radius: 4px 0 0; place-items: center; color: #56697c; background: rgba(246, 248, 250, 0.94); cursor: nwse-resize; touch-action: none; } .result-chart-resize-handle:hover { color: #0f5f9f; background: #e8f3fc; } .result-chart-title { fill: #263648; font-size: 10px; font-weight: 650; } .result-chart-legend text { fill: #34465a; font-family: inherit; font-size: 8px; } .result-chart-stack-divider { stroke: #aebbc8; stroke-width: 1; vector-effect: non-scaling-stroke; } .result-chart-unit { font-weight: 650; } .result-chart-axis-title { fill: #46576a; font-weight: 600; } .result-chart-empty { display: grid; height: 100%; place-items: center; color: #8a97a6; font-size: 12px; } .results-selected-component { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 46px; padding: 8px 12px; border-bottom: 1px solid #e3e8ef; background: #ffffff; } .results-selected-component strong { overflow: hidden; color: #1f2933; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; } .results-selected-component span { flex: 0 0 auto; color: #64748b; font-size: 11px; } .results-variable-group { padding: 12px; border-bottom: 1px solid #e3e8ef; } .results-variable-group-title { margin-bottom: 8px; color: #526172; font-size: 11px; font-weight: 700; } .results-variable-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 6px; } .results-variable-list button { display: grid; grid-template-columns: 4px minmax(0, 1fr); align-items: stretch; gap: 9px; min-height: 43px; padding: 6px 8px 6px 0; overflow: hidden; border: 1px solid #d4dde7; border-radius: 5px; color: #263442; text-align: left; background: #ffffff; cursor: grab; } .results-variable-list button:hover { border-color: #8ca0b5; background: #f8fafc; } .results-variable-list button.visible { border-color: #6b9ac4; background: #edf6fc; } .results-variable-list button:active { cursor: grabbing; } .result-variable-swatch { display: block; width: 4px; height: 100%; } .results-variable-list button > span:last-child { align-self: center; min-width: 0; } .results-variable-list strong, .results-variable-list small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .results-variable-list strong { font-size: 12px; } .results-variable-list small { margin-top: 2px; color: #64748b; font-size: 10px; } .results-variable-empty { padding: 18px 13px; color: #7b8795; font-size: 12px; } .results-empty-view { display: grid; align-content: center; justify-items: center; gap: 14px; min-height: 0; color: #687586; background: #f8fafc; } .results-empty-view strong { color: #344252; font-size: 14px; } .results-empty-view button { height: 32px; padding: 0 12px; border: 1px solid #99aabc; border-radius: 5px; color: #263442; background: #ffffff; cursor: pointer; } .results-empty-view button:hover { border-color: #66798d; background: #f2f6f9; } .simulation-console { position: fixed; z-index: 200; overflow: hidden; border: 1px solid #718297; border-radius: 6px; background: #ffffff; box-shadow: 0 10px 28px rgba(15, 23, 42, 0.22); } .simulation-console.dragging { user-select: none; } .simulation-console.normal { bottom: 14px; left: 50%; display: grid; grid-template-rows: 38px 50px minmax(0, 1fr); width: min(760px, calc(100vw - 28px)); height: 270px; transform: translateX(-50%); } .simulation-console.maximized { inset: 12px; display: grid; grid-template-rows: 38px 50px minmax(0, 1fr); } .simulation-console.minimized { right: 14px; bottom: 14px; width: min(480px, calc(100vw - 28px)); height: 40px; } .simulation-console-collapsed { display: grid; grid-template-columns: 34px 34px minmax(0, 1fr); align-items: center; width: 100%; height: 100%; background: #f7f9fb; } .simulation-console-collapsed-move, .simulation-console-collapsed-stop, .simulation-console-collapsed-open { height: 100%; padding: 0; border: 0; color: #253447; background: transparent; font: inherit; } .simulation-console-collapsed-move { display: grid; place-items: center; border-right: 1px solid #d4dde7; color: #526172; cursor: grab; touch-action: none; } .simulation-console-collapsed-stop { display: grid; place-items: center; border-right: 1px solid #d4dde7; color: #9aa5b1; cursor: default; } .simulation-console-collapsed-stop.active { color: #b42318; background: #fff1f0; cursor: pointer; } .simulation-console-collapsed-open { display: grid; grid-template-columns: 18px auto minmax(0, 1fr) 18px; align-items: center; gap: 8px; min-width: 0; padding: 0 10px; cursor: pointer; } .simulation-console-collapsed-move:hover, .simulation-console-collapsed-open:hover { background: #edf3f8; } .simulation-console-collapsed-stop.active:hover { color: #941f17; background: #ffe6e3; } .simulation-console-collapsed-open > svg:last-child { grid-column: 5; } .simulation-console-collapsed strong { font-size: 12px; white-space: nowrap; } .simulation-console-collapsed-status { min-width: 0; overflow: hidden; color: #657487; font-size: 11px; text-align: left; text-overflow: ellipsis; white-space: nowrap; } .simulation-console-collapsed-status { color: #1767a8; font-variant-numeric: tabular-nums; font-weight: 700; } .simulation-console-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-width: 0; padding: 0 6px 0 11px; border-bottom: 1px solid #d4dde7; background: #f4f7f9; } .simulation-console-title, .simulation-console-actions { display: flex; align-items: center; } .simulation-console-title { min-width: 0; gap: 7px; } .simulation-console-title strong { font-size: 12px; } .simulation-console-title span { color: #1767a8; font-size: 10px; font-weight: 700; } .simulation-console-actions { flex: 0 0 auto; gap: 2px; } .simulation-console-actions button { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 1px solid transparent; border-radius: 4px; color: #526172; background: transparent; cursor: pointer; } .simulation-console-actions button:hover:not(:disabled) { border-color: #bdc9d5; color: #155a94; background: #ffffff; } .simulation-console-actions button:disabled { cursor: default; opacity: 0.38; } .simulation-console-actions .simulation-console-move-button { cursor: grab; touch-action: none; } .simulation-console-actions .simulation-console-stop-button.active { border-color: #e2aaa5; color: #b42318; background: #fff1f0; } .simulation-console-actions .simulation-console-stop-button.active:hover:not(:disabled) { border-color: #d47c74; color: #941f17; background: #ffe6e3; } .simulation-console.dragging .simulation-console-move-button, .simulation-console.dragging .simulation-console-collapsed-move { color: #155a94; background: #eaf3fa; cursor: grabbing; } .simulation-console-progress { padding: 8px 11px 9px; border-bottom: 1px solid #dbe2ea; background: #ffffff; } .simulation-console-progress-label { display: flex; justify-content: space-between; gap: 12px; margin-bottom: 6px; color: #526172; font-size: 11px; } .simulation-console-progress-label span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .simulation-console-progress-label strong { flex: 0 0 auto; color: #334155; font-variant-numeric: tabular-nums; } .simulation-console-progress-metrics { display: flex; align-items: center; flex: 0 0 auto; gap: 10px; font-variant-numeric: tabular-nums; } .simulation-console-progress-label .simulation-console-progress-metrics span { overflow: visible; color: #1767a8; font-weight: 650; text-overflow: clip; } .simulation-console-progress-track { height: 6px; overflow: hidden; border-radius: 3px; background: #e2e8f0; } .simulation-console-progress-track span { display: block; height: 100%; background: #2478b8; transition: width 160ms ease-out; } .simulation-console-progress.success .simulation-console-progress-track span { background: #2f7d55; } .simulation-console-progress.warning .simulation-console-progress-track span { background: #b7791f; } .simulation-console-progress.error .simulation-console-progress-track span { background: #c13d35; } .simulation-console-log { min-width: 0; min-height: 0; padding: 5px 0 8px; overflow: auto; color: #273548; background: #fbfcfd; font-family: Consolas, "Cascadia Mono", monospace; font-size: 11px; } .simulation-console-empty { padding: 18px 12px; color: #8793a2; text-align: center; } .simulation-console-entry { display: grid; grid-template-columns: 68px 38px minmax(0, 1fr); gap: 8px; align-items: start; min-height: 25px; padding: 5px 12px 5px 9px; border-left: 3px solid #5c8fbd; line-height: 1.35; } .simulation-console-entry:nth-child(even) { background: #f5f7fa; } .simulation-console-entry time { color: #7a8796; font-variant-numeric: tabular-nums; } .simulation-console-entry-level { color: #526172; font-weight: 700; } .simulation-console-entry.success { border-left-color: #2f7d55; } .simulation-console-entry.success .simulation-console-entry-level { color: #267047; } .simulation-console-entry.warning { border-left-color: #b7791f; } .simulation-console-entry.warning .simulation-console-entry-level { color: #94631b; } .simulation-console-entry.error { border-left-color: #c13d35; } .simulation-console-entry.error .simulation-console-entry-level { color: #a9322d; } .simulation-console-entry-message { min-width: 0; overflow-wrap: anywhere; } .simulation-console-entry.xml { align-items: start; } .simulation-console-entry-xml { min-width: 0; max-height: 145px; margin: 0; padding: 8px 9px; overflow: auto; border: 1px solid #cad5e1; border-radius: 4px; color: #172231; background: #f8fafc; font-family: Consolas, "Courier New", monospace; font-size: 11px; line-height: 1.5; white-space: pre; } .simulation-console.maximized .simulation-console-entry-xml { max-height: calc(100vh - 170px); } @media (prefers-reduced-motion: reduce) { .simulation-console-progress-track span { transition: none; } } @media (max-width: 1100px) { .project-name-field input { width: 120px; } } @media (max-width: 640px) { .simulation-console.normal { bottom: 8px; width: calc(100vw - 16px); height: min(300px, calc(100vh - 16px)); } .simulation-console.maximized { inset: 8px; } .simulation-console.minimized { right: 8px; bottom: 8px; width: calc(100vw - 16px); } .simulation-console-entry { grid-template-columns: 62px 34px minmax(0, 1fr); gap: 5px; padding-right: 8px; } }