Files
SystemSimulationApp/frontend/src/styles.css
T

3134 lines
58 KiB
CSS

: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;
}
}