@use "../abstracts/variables.scss" as *; @use "../abstracts/mixins.scss" as *; // Main Container .realTime-viz { background: #131313; box-shadow: $box-shadow-medium; width: calc(100% - (320px + 270px + 90px)); height: calc(100% - (250px)); position: absolute; top: 50%; left: calc(270px + 45px); transform: translate(0, -50%); border-radius: #{$border-radius-medium}; transition: all 0.2s; z-index: #{$z-index-default}; .realTime-viz-wrapper { width: 100%; height: 100%; position: relative; z-index: -1; } .floating { width: calc(var(--realTimeViz-container-width) * 0.2); height: calc(var(--realTimeViz-container-width) * 0.05); min-width: 250px; max-width: 300px; background: var(--background-color); backdrop-filter: blur(10px); border: 1px solid var(--border-color); box-shadow: 0px 4.91px 4.91px 0px #0000001c; border-radius: $border-radius-medium; padding: 18px; position: absolute; z-index: 1; } .scene-container { overflow: hidden; } .icon { display: flex; align-items: center; position: relative; } .icons-container { .icon { &:first-child { &::after { display: none; } } } } .zone-wrapper { display: flex; background: var(--background-color); backdrop-filter: blur(10px); position: absolute; bottom: 0px; left: 50%; gap: 6px; border-radius: 8px; overflow: auto; max-width: calc(100% - 500px); min-width: 150px; z-index: 3; transform: translate(-50%, -10%); transition: transform 0.5s linear; &::-webkit-scrollbar { display: none; } .arrow { background: var(--highlight-accent-color); color: var(--background-color); } .zones-wrapper { padding: 6px; display: flex; gap: 6px; border-radius: #{$border-radius-medium}; overflow-x: auto; &::-webkit-scrollbar { display: none; } } .no-zone { @include flex-center; gap: 4px; padding: 4px; color: var(--text-disabled); } .zone { width: auto; background: var(--background-color); border-radius: 6px; padding: 4px 8px; white-space: nowrap; font-size: $small; } .active { background: var(--background-color-accent); color: var(--text-button-color); border: none; outline: none; } } .zone-wrapper.bottom { bottom: var(--bottomWidth); } .content-container { display: flex; height: 100vh; transition: all 0.3s ease; } .main-container { position: relative; flex: 1; height: 600px; background: rgb(235, 235, 235); margin: 0 30px; transition: height 0.3s ease, margin 0.3s ease; .zone-wrapper { display: flex; background: rgba(224, 223, 255, 0.5); position: absolute; left: 50%; transform: translate(-50%, 0); gap: 6px; padding: 4px; border-radius: 8px; max-width: 80%; overflow: auto; transition: transform 0.3s ease; &::-webkit-scrollbar { display: none; } .zone { width: auto; background: $background-color; border-radius: 6px; padding: 4px 8px; white-space: nowrap; cursor: pointer; transition: background-color 0.3s ease; &.active { background: var(--primary-color); color: var(--accent-color); } } &.bottom { bottom: 210px; } } } .panel { position: absolute; transition: all 0.3s ease; border-radius: 6px; overflow: auto; z-index: $z-index-tools; &::-webkit-scrollbar { display: none; } .panel-content { position: relative; height: 100%; width: 100%; padding: 10px; display: flex; flex-direction: column; gap: 6px; background: var(--background-color); backdrop-filter: blur(10px); &::-webkit-scrollbar { display: none; } .chart-container { width: 100%; max-height: 100%; border: 1px dashed var(--background-color-gray); border-radius: 8px; box-shadow: var(--box-shadow-medium); background: var(--background-color); position: relative; padding: 0 10px; .kebab { width: 30px; height: 30px; position: absolute; top: 0px; right: 0px; z-index: 10; cursor: pointer; @include flex-center; } .kebab-options { position: absolute; top: 18px; right: 5px; transform: translate(0px, 0); background: var(--background-color); z-index: 10; display: flex; flex-direction: column; gap: 6px; border-radius: 4px; box-shadow: var(--box-shadow-medium); .btn { display: flex; gap: 6px; align-items: center; padding: 5px 10px; color: var(--text-color); &:hover { background: var(--highlight-accent-color); width: 100%; .label { color: var(--accent-color); } svg { &:first-child { fill: var(--accent-color); } &:last-child { fill: auto; stroke: var(--accent-color); } } } } .btn-blur { color: var(--text-disabled); cursor: not-allowed; pointer-events: none; } } } .close-btn { position: absolute; top: 5px; right: 5px; background: none; border: none; cursor: pointer; color: var(--primary-color); } } &.top-panel, &.bottom-panel { left: 0; right: 0; min-height: 150px; .panel-content { display: flex; flex-direction: row; height: 100%; width: 100%; min-height: 150px; .chart-container { min-width: 160px; } } } &.top-panel { top: 0; } &.bottom-panel { bottom: 0; } &.left-panel { left: 0; top: 0; bottom: 0; } &.right-panel { right: 0; top: 0; bottom: 0; } &.left-panel, &.right-panel { min-width: 150px; .panel-content { flex-direction: column; width: 100%; gap: 6px; .chart-container { width: 100%; min-height: 150px; max-height: 100%; border-radius: 8px; box-shadow: var(--box-shadow-medium); padding: 6px 0; background: var(--background-color); position: relative; } } } } .panel.hidePanel { pointer-events: none; opacity: 0; } } .playingFlase { .zone-wrapper.bottom { bottom: var(--bottomWidth); } } // Side Buttons .side-button-container { position: absolute; display: flex; background: var(--background-color); padding: 2px; border-radius: 2px; transition: transform 0.3s ease; box-shadow: #{$box-shadow-medium}; svg { stroke: var(--icon-default-color) !important; } .extra-Bs { display: flex; align-items: center; gap: 12px; .icon { display: flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 4px; } .active { background: var(--background-color-accent); } &:hover { cursor: pointer; } } .side-button { cursor: pointer; transition: background-color 0.3s ease; width: 18px; height: 18px; display: flex; justify-content: center; background: var(--background-color-accent); border: none; color: var(--background-color); border-radius: 4px; .add-icon { @include flex-center; transition: rotate 0.2s; } path { stroke: var(--text-button-color); stroke-width: 2; } } .active { background: #f657482f; .add-icon { rotate: 45deg; path { stroke: #f65648; strokeWidth: 1.3; } } } &.top { top: -30px; left: 50%; transform: translateX(-50%); flex-direction: row; gap: 6px; } &.right { right: -30px; top: 50%; transform: translateY(-50%); flex-direction: column; gap: 6px; } &.bottom { bottom: -30px; left: 50%; transform: translateX(-50%); flex-direction: row; gap: 6px; } &.left { left: -30px; top: 50%; transform: translateY(-50%); flex-direction: column; gap: 6px; } } .right.side-button-container { .extra-Bs { flex-direction: column; } } .left.side-button-container { .extra-Bs { flex-direction: column; } } // Theme Container .theme-container { width: 250px; padding: 12px; box-shadow: 1px -3px 4px 0px rgba(0, 0, 0, 0.11); border-radius: 8px; background: white; position: absolute; top: 20px; right: -100%; transform: translate(-0%, 0); h2 { font-size: var(--font-size-small); margin-bottom: 8px; color: #2b3344; } .theme-preset-wrapper { display: flex; gap: 5px; flex-wrap: wrap; .theme-preset { display: flex; gap: 2px; margin-bottom: 10px; border: 1px solid $border-color; padding: 5px 10px; border-radius: 4px; transition: border 0.3s ease; &.active { border: 1px solid var(--primary-color); &::after { content: ""; position: absolute; top: 1px; left: 1px; width: 10px; height: 10px; background: var(--primary-color); border-radius: 50%; } } } } .custom-color { display: flex; justify-content: space-between; .color-displayer { display: flex; gap: 5px; align-items: center; border: 1px solid var(--accent-color); border-radius: 4px; padding: 0 5px; input { border: none; outline: none; border-radius: 50%; } } } } .arrow { position: absolute; top: 50%; transform: translateY(-50%); border: none; cursor: pointer; z-index: 10; height: 100%; } .left-arrow { left: 0; } .right-arrow { right: 0; } .zone { padding: 10px; border: 1px solid var(--highlight-accent-color); border-radius: 5px; cursor: pointer; } .zone.active { background: #007bff; color: white; } .floating-wrapper { .kebab { width: 25px; height: 25px; position: absolute !important; top: 0px; right: 0px; z-index: 10; cursor: pointer; @include flex-center; background: transparent !important; } .kebab-options { position: absolute; top: 18px; right: 5px; transform: translate(0px, 0); background: var(--background-color); z-index: 10; display: flex; flex-direction: column; gap: 6px; border-radius: 4px; box-shadow: var(--box-shadow-medium); .icon { width: 25px !important; height: 25px !important; background: transparent; } .btn { display: flex; gap: 6px; align-items: center; padding: 5px 10px; color: var(--text-color); cursor: pointer; &:hover { .label { color: var(--accent-color); } background: var(--highlight-accent-color); width: 100%; svg { &:first-child { fill: var(--accent-color); } &:last-child { fill: auto; stroke: var(--accent-color); } } } } } } .distance-line { position: absolute; border-style: dashed; border-color: var(--background-color-accent); border-width: 1px; pointer-events: none; z-index: 10000; } /* Label styles for displaying distance values */ .distance-label { position: absolute; background: var(--background-color-accent); color: var(--text-button-color); font-size: 12px; padding: 2px 6px; border-radius: 3px; white-space: nowrap; transform: translate(-50%, -50%); /* Center the label */ } /* Specific styles for each type of line */ /* Top distance line */ .distance-line.top { border-bottom: none; /* Remove bottom border for a single line */ width: 2px; /* Thin vertical line */ } .distance-line.top .distance-label { top: -10px; /* Position label above the line */ left: 50%; /* Center horizontally */ } /* Bottom distance line */ .distance-line.bottom { border-top: none; /* Remove top border for a single line */ width: 2px; /* Thin vertical line */ } .distance-line.bottom .distance-label { bottom: -10px; /* Position label below the line */ left: 50%; /* Center horizontally */ } /* Left distance line */ .distance-line.left { border-right: none; /* Remove right border for a single line */ height: 2px; /* Thin horizontal line */ } .distance-line.left .distance-label { left: -10px; /* Position label to the left of the line */ top: 50%; /* Center vertically */ } /* Right distance line */ .distance-line.right { border-left: none; /* Remove left border for a single line */ height: 2px; /* Thin horizontal line */ } .distance-line.right .distance-label { right: -10px; /* Position label to the right of the line */ top: 50%; /* Center vertically */ } .activeChart { outline: 1px solid var(--highlight-secondary-color); z-index: 2 !important; } .chart-container.notLinked { outline: 1px solid red; } .connectionSuccess { outline-color: #43c06d; } .connectionFails { outline-color: #ffe3e0; } .editWidgetOptions { position: absolute; background: var(--background-color); backdrop-filter: blur(10px); z-index: 3; display: flex; flex-direction: column; border-radius: 6px; overflow: hidden; padding: 4px; min-width: 150px; .option { padding: 4px 10px; border-radius: #{$border-radius-small}; color: var(--text-color); text-wrap: nowrap; cursor: pointer; &:hover { background: var(--highlight-accent-color); color: var(--accent-color); } &:last-child { color: #f65648; &:hover { background: #f657484d; color: #f65648; } } } } .panel-content { background: var(--background-color); } /* RIGHT */ .panel-content.right-opening { animation: rightExpand 0.5s ease-in-out forwards; transform-origin: right; } @keyframes rightExpand { from { transform: scaleX(0); } to { transform: scaleX(1); } } .panel-content.right-closing { animation: rightCollapse 0.5s ease-in-out forwards; transform-origin: right; } @keyframes rightCollapse { from { transform: scaleX(1); } to { transform: scaleX(0); } } /* LEFT */ .panel-content.left-opening { animation: leftExpand 0.5s ease-in-out forwards; transform-origin: left; } @keyframes leftExpand { from { transform: scaleX(0); } to { transform: scaleX(1); } } .left-closing { animation: leftCollapse 0.5s ease-in-out forwards; transform-origin: left; } @keyframes leftCollapse { from { transform: scaleX(1); } to { transform: scaleX(0); } } /* TOP */ .panel-content.top-opening { animation: topExpand 0.5s ease-in-out forwards; transform-origin: top; } @keyframes topExpand { from { transform: scaleY(0); } to { transform: scaleY(1); } } .top-closing { animation: topCollapse 0.5s ease-in-out forwards; transform-origin: top; } @keyframes topCollapse { from { transform: scaleY(1); } to { transform: scaleY(0); } } /* BOTTOM */ .panel-content.bottom-opening { animation: bottomExpand 0.5s ease-in-out forwards; transform-origin: bottom; } @keyframes bottomExpand { from { transform: scaleY(0); } to { transform: scaleY(1); } } .bottom-closing { animation: bottomCollapse 0.5s ease-in-out forwards; transform-origin: bottom; } @keyframes bottomCollapse { from { transform: scaleY(1); } to { transform: scaleY(0); } } // Add button .extra-Bs-addopening { animation: slideDown 0.3s ease forwards; } .extra-Bs-addclosing { animation: slideUp 0.3s ease forwards; } @keyframes slideDown { from { opacity: 0; transform: scaleY(0); } to { opacity: 1; transform: scaleY(1); } } @keyframes slideUp { from { opacity: 1; transform: scaleY(1); } to { opacity: 0; transform: scaleY(0); } }