diff --git a/src/style/element/index.scss b/src/style/element/index.scss index 0c2de8d..d2bde07 100644 --- a/src/style/element/index.scss +++ b/src/style/element/index.scss @@ -3,22 +3,22 @@ 'white': #ffffff, 'black': #000000, 'primary': ( - 'base': #4d70ff + 'base': #22d3ee ), 'success': ( - 'base': #67c23a + 'base': #10b981 ), 'warning': ( - 'base': #e6a23c + 'base': #facc15 ), 'danger': ( - 'base': #f56c6c + 'base': #ef4444 ), 'error': ( - 'base': #f56c6c + 'base': #ef4444 ), 'info': ( - 'base': #909399 + 'base': #64748b ) ) ); diff --git a/src/style/main.scss b/src/style/main.scss index 5698789..b9d0119 100644 --- a/src/style/main.scss +++ b/src/style/main.scss @@ -29,7 +29,8 @@ } #nprogress .bar { - background: #29d !important; + background: linear-gradient(90deg, #00e5ff, #facc15) !important; + box-shadow: 0 0 16px rgba(0, 229, 255, 0.65); } .gva-customer-icon { @apply w-4 h-4; @@ -58,3 +59,1010 @@ outline: none; } } + +:root { + --sp-bg-deep: #050812; + --sp-bg-panel: rgba(9, 18, 35, 0.88); + --sp-bg-panel-soft: rgba(15, 27, 48, 0.78); + --sp-border: rgba(74, 222, 255, 0.18); + --sp-border-strong: rgba(74, 222, 255, 0.42); + --sp-cyan: #22d3ee; + --sp-blue: #2563eb; + --sp-amber: #facc15; + --sp-danger: #ef4444; + --sp-text: #d8e7f8; + --sp-text-muted: #8ba4bd; + --sp-shadow: 0 12px 36px rgba(0, 0, 0, 0.32); +} + +html, +body, +#app { + background: + radial-gradient(circle at 14% 10%, rgba(37, 99, 235, 0.2), transparent 30%), + radial-gradient(circle at 86% 82%, rgba(34, 211, 238, 0.14), transparent 28%), + linear-gradient(135deg, #050812 0%, #0b1322 48%, #05070d 100%) !important; + color: var(--sp-text); +} + +body { + color-scheme: dark; +} + +#app { + position: relative; + isolation: isolate; + background-color: var(--sp-bg-deep) !important; + + &::before { + content: ''; + position: fixed; + inset: 0; + z-index: -1; + pointer-events: none; + background-image: + linear-gradient(rgba(34, 211, 238, 0.045) 1px, transparent 1px), + linear-gradient(90deg, rgba(34, 211, 238, 0.045) 1px, transparent 1px), + linear-gradient(135deg, transparent 0 46%, rgba(250, 204, 21, 0.035) 47%, transparent 49% 100%); + background-size: 42px 42px, 42px 42px, 220px 220px; + mask-image: radial-gradient(ellipse at center, #000 22%, rgba(0, 0, 0, 0.78) 62%, transparent 100%); + animation: spGridDrift 26s linear infinite; + } + + &::after { + content: ''; + position: fixed; + inset: 0; + z-index: -1; + pointer-events: none; + background: + repeating-linear-gradient(90deg, transparent 0 18px, rgba(255, 255, 255, 0.018) 18px 19px), + radial-gradient(ellipse at center, transparent 45%, rgba(0, 0, 0, 0.46) 100%); + } +} + +#app .bg-gray-50, +#app .dark\:bg-slate-800, +#app .dark\:bg-slate-900, +#app .bg-white { + background-color: transparent !important; +} + +#app .text-slate-700, +#app .text-gray-800, +#app .dark\:text-slate-300, +#app .dark\:text-gray-400 { + color: var(--sp-text) !important; +} + +#gva-base-load-dom { + position: relative; + min-height: 100%; + padding: 2px 0 12px; + background: + linear-gradient(180deg, rgba(7, 14, 26, 0.72), rgba(5, 8, 18, 0.58)), + radial-gradient(circle at 50% 0, rgba(34, 211, 238, 0.08), transparent 42%) !important; +} + +.gva-industrial-layout { + position: relative; + color: var(--sp-text) !important; + background: + radial-gradient(circle at 20% 12%, rgba(34, 211, 238, 0.1), transparent 24%), + linear-gradient(135deg, #050812, #0b1322 54%, #05070d) !important; +} + +.gva-industrial-header { + color: var(--sp-text) !important; + background: + linear-gradient(90deg, rgba(34, 211, 238, 0.08), transparent 22% 78%, rgba(250, 204, 21, 0.06)), + linear-gradient(180deg, rgba(13, 25, 47, 0.96), rgba(6, 12, 24, 0.94)) !important; + border-bottom: 1px solid rgba(34, 211, 238, 0.22); + box-shadow: 0 10px 32px rgba(0, 0, 0, 0.34), inset 0 -1px 0 rgba(34, 211, 238, 0.1) !important; + backdrop-filter: blur(14px) saturate(1.2); + + &::before { + content: ''; + position: absolute; + left: 18px; + right: 18px; + bottom: 0; + height: 1px; + background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0.72), rgba(250, 204, 21, 0.46), transparent); + } + + .font-bold { + color: #ecfeff; + letter-spacing: 0.04em; + text-shadow: 0 0 18px rgba(34, 211, 238, 0.3); + } + + .el-breadcrumb__inner, + .el-breadcrumb__separator { + color: var(--sp-text-muted) !important; + } + + .rounded-full { + color: #dffaff; + background: linear-gradient(145deg, rgba(34, 211, 238, 0.12), rgba(7, 14, 26, 0.7)) !important; + border-color: rgba(34, 211, 238, 0.24) !important; + box-shadow: inset 0 0 12px rgba(34, 211, 238, 0.08), 0 0 14px rgba(0, 0, 0, 0.18) !important; + + &:hover { + border-color: rgba(34, 211, 238, 0.62) !important; + box-shadow: 0 0 18px rgba(34, 211, 238, 0.2), inset 0 0 12px rgba(34, 211, 238, 0.1) !important; + } + } +} + +.gva-industrial-main { + background: + linear-gradient(180deg, rgba(5, 8, 18, 0.2), rgba(5, 8, 18, 0.58)), + repeating-linear-gradient(135deg, transparent 0 18px, rgba(255, 255, 255, 0.012) 18px 19px); +} + +.gva-industrial-aside { + overflow: hidden; + color: var(--sp-text) !important; + background: + linear-gradient(180deg, rgba(13, 25, 47, 0.95), rgba(6, 12, 24, 0.9)), + radial-gradient(circle at 50% 0, rgba(34, 211, 238, 0.12), transparent 48%) !important; + border-right: 1px solid rgba(34, 211, 238, 0.2) !important; + box-shadow: 10px 0 32px rgba(0, 0, 0, 0.25), inset -1px 0 0 rgba(34, 211, 238, 0.06) !important; + + &::before { + content: ''; + position: absolute; + inset: 0; + pointer-events: none; + background: + linear-gradient(180deg, transparent, rgba(34, 211, 238, 0.04), transparent), + repeating-linear-gradient(0deg, transparent 0 34px, rgba(34, 211, 238, 0.035) 34px 35px); + } + + .el-scrollbar, + .el-menu { + position: relative; + z-index: 1; + } +} + +.gva-industrial-collapse { + z-index: 2; + color: #67e8f9 !important; + background: rgba(5, 12, 24, 0.86) !important; + border: 1px solid rgba(34, 211, 238, 0.32); + box-shadow: 0 0 16px rgba(34, 211, 238, 0.12), inset 0 0 10px rgba(34, 211, 238, 0.08); +} + +.gva-industrial-card { + position: relative; + overflow: hidden; + color: var(--sp-text) !important; + background: + radial-gradient(circle at 0 0, rgba(34, 211, 238, 0.1), transparent 34%), + linear-gradient(145deg, rgba(15, 27, 48, 0.92), rgba(7, 13, 26, 0.86)) !important; + border: 1px solid rgba(34, 211, 238, 0.18); + border-radius: 12px !important; + box-shadow: var(--sp-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.05); + animation: spPanelGlow 6s ease-in-out infinite; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + z-index: 3; + pointer-events: none; + background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0) 14%, #67e8f9 50%, rgba(34, 211, 238, 0) 86%, transparent); + background-size: 200% 100%; + animation: spLineFlow 3.4s linear infinite; + } + + &::after { + content: ''; + position: absolute; + inset: 7px; + z-index: 3; + pointer-events: none; + background-image: linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9); + background-repeat: no-repeat; + background-size: 18px 2px, 2px 18px, 18px 2px, 2px 18px, 18px 2px, 2px 18px, 18px 2px, 2px 18px; + background-position: left top, left top, right top, right top, left bottom, left bottom, right bottom, + right bottom; + animation: spCornerPulse 2.6s ease-in-out infinite; + } + + .text-base { + color: #eaf8ff; + letter-spacing: 0.03em; + text-shadow: 0 0 14px rgba(34, 211, 238, 0.22); + } +} + +.gva-container, +.gva-container2 { + background: transparent !important; +} + +.gva-table-box, +.gva-search-box, +.gva-form-box { + position: relative; + overflow: hidden; + color: var(--sp-text) !important; + background: + linear-gradient(145deg, rgba(34, 211, 238, 0.07), transparent 30%), + linear-gradient(135deg, rgba(15, 27, 48, 0.92), rgba(7, 13, 26, 0.86)) !important; + border: 1px solid var(--sp-border); + border-radius: 10px !important; + box-shadow: var(--sp-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.05); + animation: spPanelGlow 6s ease-in-out infinite; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + z-index: 3; + pointer-events: none; + background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0) 14%, #67e8f9 50%, rgba(34, 211, 238, 0) 86%, transparent); + background-size: 200% 100%; + animation: spLineFlow 3.4s linear infinite; + } + + &::after { + content: ''; + position: absolute; + inset: 7px; + z-index: 3; + pointer-events: none; + background-image: linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9); + background-repeat: no-repeat; + background-size: 18px 2px, 2px 18px, 18px 2px, 2px 18px, 18px 2px, 2px 18px, 18px 2px, 2px 18px; + background-position: left top, left top, right top, right top, left bottom, left bottom, right bottom, + right bottom; + animation: spCornerPulse 2.6s ease-in-out infinite; + } +} + +.gva-btn-list { + position: relative; + z-index: 1; +} + +.el-card, +.el-dialog, +.el-popover, +.el-dropdown__popper .el-dropdown-menu, +.el-message-box, +.el-drawer { + color: var(--sp-text) !important; + background: + linear-gradient(145deg, rgba(18, 32, 55, 0.96), rgba(8, 13, 25, 0.95)) !important; + border: 1px solid var(--sp-border) !important; + box-shadow: 0 18px 46px rgba(0, 0, 0, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.05) !important; +} + +.el-card { + border-radius: 10px !important; +} + +.el-card__header, +.el-dialog__header, +.el-drawer__header { + color: #eaf8ff !important; + border-bottom: 1px solid rgba(34, 211, 238, 0.18) !important; + background: linear-gradient(90deg, rgba(34, 211, 238, 0.12), transparent) !important; +} + +.el-input__wrapper, +.el-textarea__inner, +.el-select__wrapper, +.el-date-editor.el-input__wrapper, +.el-cascader .el-input__wrapper { + color: var(--sp-text) !important; + background: rgba(5, 12, 24, 0.72) !important; + border: 1px solid rgba(34, 211, 238, 0.18) !important; + box-shadow: inset 0 0 0 1px rgba(34, 211, 238, 0.04), inset 0 0 18px rgba(34, 211, 238, 0.035) !important; + + &:hover { + border-color: rgba(34, 211, 238, 0.4) !important; + } + + &.is-focus, + &.is-focused { + border-color: rgba(34, 211, 238, 0.7) !important; + box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.34), 0 0 18px rgba(34, 211, 238, 0.14) !important; + } +} + +.el-input__inner, +.el-textarea__inner, +.el-select__placeholder, +.el-select__selected-item { + color: var(--sp-text) !important; +} + +.el-input__inner::placeholder, +.el-textarea__inner::placeholder { + color: rgba(139, 164, 189, 0.72) !important; +} + +.el-button { + border-radius: 6px !important; + letter-spacing: 0.02em; + color: #dffaff; + background: + linear-gradient(180deg, rgba(34, 211, 238, 0.16), rgba(37, 99, 235, 0.18)), + rgba(6, 12, 24, 0.78) !important; + border-color: rgba(34, 211, 238, 0.3) !important; + box-shadow: inset 0 0 14px rgba(34, 211, 238, 0.08); + + &:hover, + &:focus { + color: #ffffff !important; + border-color: rgba(34, 211, 238, 0.66) !important; + box-shadow: 0 0 18px rgba(34, 211, 238, 0.18), inset 0 0 14px rgba(34, 211, 238, 0.12); + } + + &.el-button--primary { + color: #031018 !important; + background: linear-gradient(135deg, #67e8f9, #22d3ee 48%, #60a5fa) !important; + border-color: rgba(103, 232, 249, 0.78) !important; + box-shadow: 0 0 22px rgba(34, 211, 238, 0.28); + } + + &.el-button--warning { + color: #140f02 !important; + background: linear-gradient(135deg, #fde68a, #facc15) !important; + border-color: rgba(250, 204, 21, 0.76) !important; + } + + &.el-button--danger { + color: #fff !important; + background: linear-gradient(135deg, #fb7185, #ef4444) !important; + border-color: rgba(248, 113, 113, 0.7) !important; + } +} + +.el-table { + --el-table-header-bg-color: rgba(12, 25, 45, 0.96); + --el-table-tr-bg-color: rgba(8, 15, 30, 0.72); + --el-table-row-hover-bg-color: rgba(34, 211, 238, 0.09); + --el-table-border-color: rgba(34, 211, 238, 0.12); + color: var(--sp-text) !important; + background: rgba(5, 10, 20, 0.48) !important; + border-radius: 8px; + overflow: hidden; + + th.el-table__cell { + color: #a5f3fc !important; + background: + linear-gradient(90deg, rgba(34, 211, 238, 0.14), rgba(250, 204, 21, 0.04)), + rgba(12, 25, 45, 0.96) !important; + border-bottom: 1px solid rgba(34, 211, 238, 0.2) !important; + text-shadow: 0 0 12px rgba(34, 211, 238, 0.24); + } + + tr, + td.el-table__cell { + background: transparent !important; + border-color: rgba(34, 211, 238, 0.08) !important; + } + + .el-table__row:nth-child(even) { + background: rgba(34, 211, 238, 0.025) !important; + } + + .el-table__row:hover > td.el-table__cell { + color: #f8fcff !important; + background: linear-gradient(90deg, rgba(34, 211, 238, 0.13), rgba(37, 99, 235, 0.08)) !important; + } +} + +.el-pagination { + color: var(--sp-text-muted) !important; + + button, + .el-pager li { + color: var(--sp-text-muted) !important; + background: rgba(7, 14, 26, 0.82) !important; + border-color: rgba(34, 211, 238, 0.18) !important; + } + + .el-pager li.is-active { + color: #031018 !important; + background: linear-gradient(135deg, #67e8f9, #22d3ee) !important; + box-shadow: 0 0 14px rgba(34, 211, 238, 0.26); + } +} + +.el-menu { + background: transparent !important; + border: none !important; + + .el-menu-item, + .el-sub-menu__title { + margin: 4px 0; + color: var(--sp-text-muted) !important; + border-radius: 8px; + border: 1px solid transparent; + transition: all 0.2s ease; + + &:hover { + color: #eaf8ff !important; + background: rgba(34, 211, 238, 0.08) !important; + border-color: rgba(34, 211, 238, 0.18); + } + } + + .el-menu-item.is-active, + .el-sub-menu.is-active > .el-sub-menu__title { + color: #ffffff !important; + background: + linear-gradient(90deg, rgba(34, 211, 238, 0.2), rgba(37, 99, 235, 0.14)) !important; + border-color: rgba(34, 211, 238, 0.35); + box-shadow: inset 3px 0 0 var(--sp-cyan), 0 0 18px rgba(34, 211, 238, 0.1); + } +} + +.el-tabs { + --el-tabs-header-height: 36px; +} + +.el-tabs__nav-wrap::after { + background-color: rgba(34, 211, 238, 0.12) !important; +} + +.el-tabs__item { + color: var(--sp-text-muted) !important; + + &.is-active { + color: #67e8f9 !important; + } +} + +.el-tag { + color: #a5f3fc !important; + background: rgba(34, 211, 238, 0.1) !important; + border-color: rgba(34, 211, 238, 0.3) !important; +} + +.el-popper, +.el-picker-panel, +.el-select-dropdown, +.el-cascader__dropdown { + color: var(--sp-text) !important; + background: rgba(7, 14, 26, 0.98) !important; + border: 1px solid rgba(34, 211, 238, 0.22) !important; + box-shadow: 0 18px 46px rgba(0, 0, 0, 0.46) !important; +} + +/* stronger hud/industrial layer */ +.gva-industrial-layout { + overflow: hidden; + + &::before { + content: ''; + position: fixed; + inset: 0; + pointer-events: none; + z-index: 0; + background: + radial-gradient(circle at 10% 14%, rgba(34, 211, 238, 0.12), transparent 30%), + radial-gradient(circle at 90% 84%, rgba(37, 99, 235, 0.15), transparent 28%); + } +} + +#gva-base-load-dom::before { + content: ''; + position: absolute; + inset: 0; + pointer-events: none; + background: + linear-gradient( + 180deg, + transparent 0%, + rgba(34, 211, 238, 0.055) 42%, + rgba(34, 211, 238, 0.02) 55%, + transparent 100% + ); + mix-blend-mode: screen; + animation: spScanSweep 8s ease-in-out infinite; +} + +.gva-industrial-card, +.gva-table-box, +.gva-search-box, +.gva-form-box { + position: relative; + + .el-table, + .el-form { + position: relative; + z-index: 1; + } +} + +/* masterStation unified sci-tech/industrial skin */ +.master-station-theme { + color: var(--sp-text); + + .project-overview, + .device-detail-page, + .detail-content, + .line-content, + .config-content, + .trend-content { + color: var(--sp-text) !important; + } + + .project-overview { + background: + linear-gradient(180deg, rgba(7, 14, 26, 0.64), rgba(5, 8, 18, 0.52)), + repeating-linear-gradient(135deg, transparent 0 18px, rgba(255, 255, 255, 0.01) 18px 19px) !important; + } + + .overview-card, + .alarm-list, + .alarm-trend, + .alarm-card, + .tabs-box, + .detail-card, + .info-box, + .alarms-box, + .trend-content > .left, + .trend-content > .right .top, + .trend-content > .right .bottom, + .config-content > .left, + .config-content > .right, + .chart-card { + background: + linear-gradient(145deg, rgba(34, 211, 238, 0.08), transparent 26%), + linear-gradient(140deg, rgba(15, 27, 48, 0.94), rgba(7, 13, 26, 0.9)) !important; + border: 1px solid rgba(34, 211, 238, 0.2) !important; + box-shadow: 0 14px 36px rgba(0, 0, 0, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.06) !important; + border-radius: 10px !important; + color: var(--sp-text) !important; + } + + .alarm-title, + .list-title, + .title, + .project-name, + .project-option-name, + .chart-title { + color: #e8f8ff !important; + text-shadow: 0 0 12px rgba(34, 211, 238, 0.22); + } + + .project-address, + .project-option-address, + .alarm-stat-label, + .alarm-labels, + .chart-unit, + .fullscreen-icon, + .device-location, + .device-channels { + color: var(--sp-text-muted) !important; + } + + .tab { + color: #8ba4bd !important; + + &:hover { + color: #9eeeff !important; + } + + &.active { + color: #67e8f9 !important; + + &::after { + background: linear-gradient(90deg, #67e8f9, #60a5fa) !important; + box-shadow: 0 0 12px rgba(34, 211, 238, 0.4); + } + } + } + + .dot { + background: linear-gradient(180deg, #67e8f9, #2563eb) !important; + box-shadow: 0 0 10px rgba(34, 211, 238, 0.46); + } + + .map-container { + border-color: rgba(34, 211, 238, 0.25) !important; + background: radial-gradient(circle at 50% 45%, rgba(34, 211, 238, 0.12), rgba(3, 9, 18, 0.86)) !important; + } + + .project-radio-item { + border-color: rgba(34, 211, 238, 0.24) !important; + background: rgba(8, 15, 28, 0.74) !important; + + &.is-checked { + border-color: rgba(34, 211, 238, 0.62) !important; + background: linear-gradient(90deg, rgba(34, 211, 238, 0.14), rgba(37, 99, 235, 0.1)) !important; + } + } + + .alarm-stat-value, + .alarm-values .value-item { + color: #eaf8ff !important; + } + + .alarm-stat-value.danger, + .alarm-values .value-item.danger, + .alarm-values .value-item.offline { + color: #fb7185 !important; + text-shadow: 0 0 14px rgba(239, 68, 68, 0.26); + } + + .alarm-values .value-item.online { + color: #34d399 !important; + text-shadow: 0 0 14px rgba(52, 211, 153, 0.24); + } + + .project-icon, + .alarm-icon.device-icon { + background: linear-gradient(135deg, #67e8f9, #2563eb) !important; + box-shadow: 0 0 16px rgba(34, 211, 238, 0.3); + } + + .alarm-icon.line-icon { + background: linear-gradient(135deg, #6ee7b7, #10b981) !important; + } + + .alarm-icon.warn-icon { + background: linear-gradient(135deg, #fb7185, #ef4444) !important; + } + + .device-grid { + background: transparent !important; + } + + .device-card { + background: + linear-gradient(145deg, rgba(34, 211, 238, 0.07), transparent 24%), + linear-gradient(140deg, rgba(15, 27, 48, 0.92), rgba(7, 13, 26, 0.9)) !important; + border: 1px solid rgba(34, 211, 238, 0.2) !important; + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.05) !important; + + &:hover { + border-color: rgba(34, 211, 238, 0.56) !important; + box-shadow: 0 16px 38px rgba(0, 0, 0, 0.34), 0 0 18px rgba(34, 211, 238, 0.12) !important; + transform: translateY(-2px); + } + } + + .device-name, + .device-id { + color: #e6f9ff !important; + } + + .card-menu, + .menu-icon { + color: #9ed0eb !important; + } + + .device-alarm span { + color: #fb7185 !important; + } + + .ouliy { + border-radius: 8px !important; + border: 1px solid transparent; + + &.active { + border-color: rgba(34, 211, 238, 0.34) !important; + background: linear-gradient(90deg, rgba(34, 211, 238, 0.14), rgba(37, 99, 235, 0.08)) !important; + } + + &:hover { + border-color: rgba(34, 211, 238, 0.2) !important; + background: rgba(34, 211, 238, 0.09) !important; + } + } + + .line-item > span:nth-child(1), + .line-item > span:nth-child(2), + .item > div > span:nth-child(1), + .item > div > span:nth-child(2), + .info-box .details > div > p > span:nth-child(1), + .info-box .details > div > p > span:nth-child(2) { + color: var(--sp-text) !important; + } + + .line-item > span:nth-child(1), + .item > div > span:nth-child(1), + .info-box .details > div > p > span:nth-child(1) { + color: var(--sp-text-muted) !important; + } + + .right { + scrollbar-color: rgba(34, 211, 238, 0.4) rgba(7, 14, 26, 0.65); + } + + .alarm-table .value-blue { + color: #67e8f9 !important; + } + + .alarm-table .value-red { + color: #fb7185 !important; + } + + .alarm-table .el-table__row:hover > td.el-table__cell { + background: linear-gradient(90deg, rgba(34, 211, 238, 0.16), rgba(59, 130, 246, 0.1)) !important; + } + + .el-radio-button__inner { + color: var(--sp-text-muted) !important; + background: rgba(7, 14, 26, 0.78) !important; + border-color: rgba(34, 211, 238, 0.2) !important; + } + + .el-radio-button__original-radio:checked + .el-radio-button__inner { + color: #04121a !important; + background: linear-gradient(135deg, #67e8f9, #22d3ee 55%, #60a5fa) !important; + border-color: rgba(103, 232, 249, 0.86) !important; + box-shadow: 0 0 14px rgba(34, 211, 238, 0.24) !important; + } +} + +body .map-cluster-pulse { + background: rgba(34, 211, 238, 0.22) !important; + border-color: #22d3ee !important; + box-shadow: 0 0 18px rgba(34, 211, 238, 0.26); +} + +body .map-cluster-core { + background: linear-gradient(135deg, #67e8f9, #22d3ee 45%, #2563eb) !important; + color: #04121a !important; + box-shadow: 0 0 14px rgba(34, 211, 238, 0.42) !important; +} + +body .map-device-marker { + background: rgba(6, 12, 24, 0.9) !important; + border-color: rgba(34, 211, 238, 0.5) !important; + box-shadow: 0 10px 26px rgba(0, 0, 0, 0.36), 0 0 16px rgba(34, 211, 238, 0.18) !important; +} + +body .map-device-name { + color: #e6f9ff !important; +} + +body .map-device-sub { + color: #8ba4bd !important; +} + +@keyframes spScanSweep { + 0%, + 100% { + transform: translateY(-12%); + opacity: 0.2; + } + 50% { + transform: translateY(12%); + opacity: 0.6; + } +} + +/* ============================================================ + FLASHY HUD LAYER — 流光 / 角标 / 辉光 / 数据流 + ============================================================ */ + +@keyframes spGridDrift { + 0% { + background-position: 0 0, 0 0, 0 0; + } + 100% { + background-position: 42px 84px, 84px 42px, 220px 0; + } +} + +@keyframes spLineFlow { + 0% { + background-position: 200% 0; + } + 100% { + background-position: -200% 0; + } +} + +@keyframes spCornerPulse { + 0%, + 100% { + opacity: 0.45; + filter: drop-shadow(0 0 2px rgba(34, 211, 238, 0.5)); + } + 50% { + opacity: 1; + filter: drop-shadow(0 0 7px rgba(34, 211, 238, 0.95)); + } +} + +@keyframes spPanelGlow { + 0%, + 100% { + box-shadow: var(--sp-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 0 0 rgba(34, 211, 238, 0); + } + 50% { + box-shadow: var(--sp-shadow), inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 0 26px rgba(34, 211, 238, 0.14); + } +} + +@keyframes spBtnFlow { + 0% { + background-position: 0% 50%; + } + 100% { + background-position: 200% 50%; + } +} + +@keyframes spTitleFlicker { + 0%, + 100% { + text-shadow: 0 0 10px rgba(34, 211, 238, 0.32); + } + 45% { + text-shadow: 0 0 18px rgba(34, 211, 238, 0.7), 0 0 30px rgba(34, 211, 238, 0.28); + } + 50% { + text-shadow: 0 0 6px rgba(34, 211, 238, 0.5); + } + 55% { + text-shadow: 0 0 18px rgba(34, 211, 238, 0.7), 0 0 30px rgba(34, 211, 238, 0.28); + } +} + +@keyframes spFocusPulse { + 0%, + 100% { + box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.34), 0 0 14px rgba(34, 211, 238, 0.16); + } + 50% { + box-shadow: 0 0 0 1px rgba(34, 211, 238, 0.6), 0 0 22px rgba(34, 211, 238, 0.3); + } +} + +/* flowing accent on the header bottom line */ +.gva-industrial-header::before { + background-size: 200% 100% !important; + animation: spLineFlow 4s linear infinite; +} + +/* primary buttons get a flowing energy gradient */ +.el-button--primary { + background: linear-gradient(110deg, #67e8f9, #22d3ee 35%, #60a5fa 65%, #67e8f9) !important; + background-size: 220% 100% !important; + animation: spBtnFlow 4.5s linear infinite; +} + +/* inputs pulse while focused (intelligent feedback) */ +.el-input__wrapper.is-focus, +.el-textarea__inner:focus, +.el-select__wrapper.is-focused { + animation: spFocusPulse 1.8s ease-in-out infinite; +} + +/* glowing section titles */ +.gva-industrial-card .text-base, +.gva-industrial-header .font-bold, +.master-station-theme .alarm-title, +.master-station-theme .list-title, +.master-station-theme .tabs-box > .title, +.master-station-theme .chart-title { + animation: spTitleFlicker 5s ease-in-out infinite; +} + +/* ---- masterStation panels: flowing line + pulsing HUD corners ---- */ +.master-station-theme .overview-card, +.master-station-theme .alarm-list, +.master-station-theme .alarm-trend, +.master-station-theme .alarm-card, +.master-station-theme .tabs-box, +.master-station-theme .detail-card, +.master-station-theme .info-box, +.master-station-theme .alarms-box, +.master-station-theme .chart-card, +.master-station-theme .config-content > .left, +.master-station-theme .config-content > .right, +.master-station-theme .trend-content > .left, +.master-station-theme .trend-content > .right .top, +.master-station-theme .trend-content > .right .bottom, +.master-station-theme .device-card { + position: relative !important; +} + +.master-station-theme .overview-card::before, +.master-station-theme .alarm-list::before, +.master-station-theme .alarm-trend::before, +.master-station-theme .alarm-card::before, +.master-station-theme .tabs-box::before, +.master-station-theme .detail-card::before, +.master-station-theme .info-box::before, +.master-station-theme .alarms-box::before, +.master-station-theme .chart-card::before, +.master-station-theme .config-content > .left::before, +.master-station-theme .config-content > .right::before, +.master-station-theme .trend-content > .left::before, +.master-station-theme .trend-content > .right .top::before, +.master-station-theme .trend-content > .right .bottom::before, +.master-station-theme .device-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + z-index: 4; + pointer-events: none; + background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0) 14%, #67e8f9 50%, rgba(34, 211, 238, 0) 86%, transparent); + background-size: 200% 100%; + animation: spLineFlow 3.6s linear infinite; +} + +.master-station-theme .overview-card::after, +.master-station-theme .alarm-list::after, +.master-station-theme .alarm-trend::after, +.master-station-theme .alarm-card::after, +.master-station-theme .tabs-box::after, +.master-station-theme .detail-card::after, +.master-station-theme .info-box::after, +.master-station-theme .alarms-box::after, +.master-station-theme .chart-card::after, +.master-station-theme .config-content > .left::after, +.master-station-theme .config-content > .right::after, +.master-station-theme .trend-content > .left::after, +.master-station-theme .trend-content > .right .top::after, +.master-station-theme .trend-content > .right .bottom::after, +.master-station-theme .device-card::after { + content: ''; + position: absolute; + inset: 7px; + z-index: 4; + pointer-events: none; + background-image: linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9), + linear-gradient(#67e8f9, #67e8f9), linear-gradient(#67e8f9, #67e8f9); + background-repeat: no-repeat; + background-size: 16px 2px, 2px 16px, 16px 2px, 2px 16px, 16px 2px, 2px 16px, 16px 2px, 2px 16px; + background-position: left top, left top, right top, right top, left bottom, left bottom, right bottom, + right bottom; + animation: spCornerPulse 2.8s ease-in-out infinite; +} + +@media (prefers-reduced-motion: reduce) { + #app::before, + #gva-base-load-dom::before, + .gva-industrial-header::before, + .el-button--primary, + .el-input__wrapper.is-focus, + .gva-table-box, + .gva-search-box, + .gva-form-box, + .gva-industrial-card, + .gva-table-box::before, + .gva-search-box::before, + .gva-form-box::before, + .gva-industrial-card::before, + .gva-table-box::after, + .gva-search-box::after, + .gva-form-box::after, + .gva-industrial-card::after, + [class*='master-station-theme'] *::before, + [class*='master-station-theme'] *::after { + animation: none !important; + } +} diff --git a/src/view/dashboard/components/card.vue b/src/view/dashboard/components/card.vue index 2a50b28..89c919d 100644 --- a/src/view/dashboard/components/card.vue +++ b/src/view/dashboard/components/card.vue @@ -5,7 +5,7 @@