webui/src/Sass/visualiser.scss

255 lines
5.0 KiB
SCSS

.visualiser-root {
display: flex;
justify-content: center;
align-items: flex-start;
height: 100%;
min-height: 0;
overflow-y: auto;
overflow-x: hidden;
padding: $spacePadding;
}
.visualiser-container {
position: relative;
width: min(100%, 760px);
}
.visualiser-flow {
width: 100%;
padding: 20px 16px;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.visualiser-level {
width: 100%;
display: flex;
justify-content: center;
align-items: flex-start;
}
.visualiser-level-row {
display: grid;
align-items: center;
justify-items: center;
}
.visualiser-node {
width: 220px;
padding: 12px 14px;
border-radius: 12px;
background: linear-gradient(
135deg,
lighten($mode--light-bg, 2%),
lighten($blue, 38%)
);
border: 1px solid rgba($blue, 0.28);
color: $leftMenu-background;
font-weight: 600;
text-align: center;
letter-spacing: 0.2px;
box-shadow: 0 6px 14px rgba($blue, 0.2);
transition:
opacity 0.16s ease,
transform 0.16s ease,
box-shadow 0.16s ease;
}
.visualiser-node.is-hovered {
transform: translateY(-1px);
box-shadow: 0 10px 22px rgba($blue, 0.33);
}
.visualiser-node.is-related {
box-shadow: 0 8px 18px rgba($blue, 0.27);
}
.visualiser-node.is-dim {
opacity: 0.45;
}
.visualiser-node-content {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
.visualiser-connector {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
margin: 2px 0;
}
.visualiser-connector-line {
width: 2px;
height: 18px;
background: linear-gradient(180deg, rgba($blue, 0.6), rgba($blue, 0.2));
}
.visualiser-connector-arrow {
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 8px solid rgba($blue, 0.6);
}
.visualiser-connector-tail {
width: 2px;
height: 10px;
background: rgba($blue, 0.2);
}
.visualiser-connector-branch {
width: 100%;
height: 34px;
}
.visualiser-connector-spacer {
width: 100%;
height: 34px;
}
.visualiser-connector-branch-line {
stroke: rgba($blue, 0.55);
stroke-width: 2px;
vector-effect: non-scaling-stroke;
}
.visualiser-connector-branch-arrow {
fill: rgba($blue, 0.55);
}
@include color-mode(dark) {
.visualiser-node {
background: linear-gradient(
135deg,
lighten($mode--dark-bg, 6%),
rgba($blue, 0.35)
);
border: 1px solid rgba($blue, 0.45);
color: $leftMenu-color;
box-shadow: 0 8px 18px rgba($blue, 0.28);
}
.visualiser-connector-line {
background: linear-gradient(180deg, rgba($blue, 0.8), rgba($blue, 0.3));
}
.visualiser-connector-arrow {
border-top-color: rgba($blue, 0.8);
}
.visualiser-connector-tail {
background: rgba($blue, 0.3);
}
.visualiser-connector-branch-line {
stroke: rgba($blue, 0.8);
}
.visualiser-connector-branch-arrow {
fill: rgba($blue, 0.8);
}
.visualiser-outcome-connector-line {
stroke: rgba($blue, 0.65);
}
.visualiser-outcome-connector-arrow {
fill: rgba($blue, 0.65);
}
}
.visualiser-outcome-connectors {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
overflow: visible;
}
.visualiser-outcome-connector-line {
fill: none;
stroke: rgba($blue, 0.45);
stroke-width: 2px;
stroke-dasharray: 4, 4;
vector-effect: non-scaling-stroke;
transition:
opacity 0.16s ease,
stroke-width 0.16s ease,
stroke 0.16s ease;
}
.visualiser-outcome-connector-arrow {
fill: rgba($blue, 0.45);
}
.visualiser-outcome-connector-label {
font-size: 2px;
font-weight: 600;
fill: $blue;
paint-order: stroke fill;
stroke: $mode--light-bg;
stroke-width: 1px;
stroke-linecap: round;
stroke-linejoin: round;
user-select: none;
transition:
opacity 0.16s ease,
fill 0.16s ease;
}
.visualiser-outcome-connector-line.is-active {
stroke-width: 2.6px;
stroke: rgba($blue, 0.75);
stroke-dasharray: 0;
}
.visualiser-outcome-connector-line.is-active-outgoing {
stroke-width: 2.8px;
stroke: rgba($blue, 0.82);
stroke-dasharray: 0;
filter: drop-shadow(0 0 3px rgba($blue, 0.6));
}
.visualiser-outcome-connector-line.is-active-incoming {
stroke-width: 2.2px;
stroke: rgba($blue, 0.58);
stroke-dasharray: 2, 2;
}
.visualiser-outcome-connector-line.is-dim {
opacity: 0.2;
}
.visualiser-outcome-connector-label.is-active {
fill: darken($blue, 8%);
}
.visualiser-outcome-connector-label.is-active-outgoing {
fill: darken($blue, 12%);
}
.visualiser-outcome-connector-label.is-active-incoming {
fill: darken($blue, 2%);
}
.visualiser-outcome-connector-label.is-dim {
opacity: 0.25;
}
@include color-mode(dark) {
.visualiser-outcome-connector-label {
fill: lighten($blue, 20%);
stroke: $mode--dark-bg;
}
}