qhse_kb.scss 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. @font-face {
  2. font-family: YouSheBiaoTiHei;
  3. font-style: normal;
  4. font-weight: normal;
  5. src: url('@/assets/font/YouSheBiaoTiHei.ttf') format('truetype');
  6. font-display: swap;
  7. }
  8. .bg {
  9. --fvs-theme-color-1-2: #f5f9ff;
  10. background: url('@/assets/kb/bg.png') center center / 100% 100% no-repeat;
  11. background-color: #fff;
  12. }
  13. .header {
  14. height: calc(52px * var(--kb-scale, 1));
  15. font-family: YouSheBiaoTiHei, sans-serif;
  16. font-size: calc(32px * var(--kb-scale, 1));
  17. color: var(--fvs-theme-color-1-2);
  18. text-align: center;
  19. background: url('@/assets/kb/header.png') center center / 100% 100% no-repeat;
  20. }
  21. .panel {
  22. background: linear-gradient(180deg, rgb(235 243 255 / 76%) 0%, rgb(221 233 251 / 58%) 100%);
  23. border: 1px solid rgb(255 255 255 / 58%);
  24. border-radius: calc(20px * var(--kb-scale, 1));
  25. box-shadow:
  26. inset 0 1px 0 rgb(255 255 255 / 72%),
  27. 0 18px 36px rgb(46 90 164 / 12%);
  28. backdrop-filter: blur(12px);
  29. }
  30. .panel-title {
  31. position: relative;
  32. display: flex;
  33. height: calc(36px * var(--kb-scale, 1));
  34. padding: 0 calc(16px * var(--kb-scale, 1)) 0 calc(36px * var(--kb-scale, 1));
  35. font-family: YouSheBiaoTiHei, sans-serif;
  36. font-size: calc(24px * var(--kb-scale, 1));
  37. letter-spacing: 1px;
  38. color: #03409b;
  39. align-items: center;
  40. &::after {
  41. position: absolute;
  42. right: calc(10px * var(--kb-scale, 1));
  43. bottom: 0;
  44. left: calc(10px * var(--kb-scale, 1));
  45. height: calc(2px * var(--kb-scale, 1));
  46. background: linear-gradient(
  47. to right,
  48. rgb(3 64 155 / 15%) 0%,
  49. rgb(3 64 155 / 15%) calc(100% - 80px),
  50. #03409b calc(100% - 80px),
  51. #03409b 100%
  52. );
  53. content: '';
  54. }
  55. &::before {
  56. position: absolute;
  57. right: calc(10px * var(--kb-scale, 1));
  58. bottom: 0;
  59. z-index: 1;
  60. width: calc(80px * var(--kb-scale, 1));
  61. height: calc(4px * var(--kb-scale, 1));
  62. background: #03409b;
  63. border-radius: calc(2px * var(--kb-scale, 1)) calc(2px * var(--kb-scale, 1)) 0 0;
  64. content: '';
  65. }
  66. .icon-decorator {
  67. position: absolute;
  68. left: calc(14px * var(--kb-scale, 1));
  69. display: flex;
  70. align-items: center;
  71. gap: calc(3px * var(--kb-scale, 1));
  72. span {
  73. width: calc(4px * var(--kb-scale, 1));
  74. height: calc(18px * var(--kb-scale, 1));
  75. background: #03409b;
  76. border-radius: calc(2px * var(--kb-scale, 1));
  77. &:last-child {
  78. height: calc(12px * var(--kb-scale, 1));
  79. opacity: 0.5;
  80. }
  81. }
  82. }
  83. }
  84. .panel-title--lg {
  85. height: calc(48px * var(--kb-scale, 1));
  86. }
  87. .panel-title--md {
  88. height: calc(40px * var(--kb-scale, 1));
  89. }
  90. .kb-panel-title-text {
  91. font-family: YouSheBiaoTiHei, sans-serif;
  92. font-size: calc(24px * var(--kb-scale, 1));
  93. font-weight: normal;
  94. line-height: 1;
  95. letter-spacing: 1px;
  96. color: #03409b;
  97. }
  98. .summary-panel {
  99. height: calc(112px * var(--kb-scale, 1));
  100. }
  101. .summary-panel__title {
  102. height: calc(32px * var(--kb-scale, 1));
  103. }
  104. .summary-panel__grid {
  105. padding: calc(6px * var(--kb-scale, 1)) calc(10px * var(--kb-scale, 1));
  106. gap: calc(10px * var(--kb-scale, 1));
  107. }
  108. .summary-card {
  109. gap: calc(8px * var(--kb-scale, 1));
  110. padding: calc(8px * var(--kb-scale, 1));
  111. }
  112. .device-list-panel {
  113. height: calc(280px * var(--kb-scale, 1));
  114. margin-top: calc(12px * var(--kb-scale, 1));
  115. }
  116. .device-list-panel__body {
  117. padding: calc(8px * var(--kb-scale, 1)) calc(16px * var(--kb-scale, 1));
  118. }
  119. .device-list-panel__picker {
  120. display: flex;
  121. width: calc(260px * var(--kb-scale, 1));
  122. align-items: center;
  123. }
  124. .device-list-panel__picker-input {
  125. width: calc(260px * var(--kb-scale, 1)) !important;
  126. :deep(.el-input__wrapper) {
  127. min-height: calc(28px * var(--kb-scale, 1));
  128. padding: 0 calc(10px * var(--kb-scale, 1));
  129. }
  130. :deep(.el-range-input),
  131. :deep(.el-range-separator) {
  132. font-size: calc(14px * var(--kb-scale, 1));
  133. }
  134. :deep(.el-range__icon),
  135. :deep(.el-range__close-icon) {
  136. font-size: calc(14px * var(--kb-scale, 1));
  137. }
  138. }
  139. .kb-inline-picker {
  140. display: flex;
  141. width: var(--kb-picker-width);
  142. align-items: center;
  143. }
  144. .kb-inline-picker--260 {
  145. --kb-picker-width: calc(260px * var(--kb-scale, 1));
  146. }
  147. .kb-inline-picker__input {
  148. width: var(--kb-picker-width) !important;
  149. :deep(.el-input__wrapper) {
  150. min-height: calc(28px * var(--kb-scale, 1));
  151. padding: 0 calc(10px * var(--kb-scale, 1));
  152. }
  153. :deep(.el-range-input),
  154. :deep(.el-range-separator) {
  155. font-size: calc(14px * var(--kb-scale, 1));
  156. }
  157. :deep(.el-range__icon),
  158. :deep(.el-range__close-icon) {
  159. font-size: calc(14px * var(--kb-scale, 1));
  160. }
  161. }
  162. .summary-card {
  163. position: relative;
  164. cursor: default;
  165. background: linear-gradient(180deg, rgb(255 255 255 / 52%) 0%, rgb(213 227 249 / 38%) 100%);
  166. border: 1px solid rgb(255 255 255 / 74%);
  167. box-shadow:
  168. inset 0 1px 0 rgb(255 255 255 / 78%),
  169. 0 6px 14px rgb(63 103 171 / 7%);
  170. transition:
  171. transform 0.28s ease,
  172. box-shadow 0.28s ease,
  173. border-color 0.28s ease,
  174. background 0.28s ease;
  175. isolation: isolate;
  176. }
  177. .summary-card::before {
  178. position: absolute;
  179. z-index: 0;
  180. pointer-events: none;
  181. background: linear-gradient(
  182. 135deg,
  183. rgb(255 255 255 / 0%) 0%,
  184. rgb(255 255 255 / 0%) 58%,
  185. rgb(255 255 255 / 18%) 100%
  186. );
  187. content: '';
  188. inset: 0;
  189. }
  190. .summary-card::after {
  191. position: absolute;
  192. right: calc(-16px * var(--kb-scale, 1));
  193. bottom: calc(-28px * var(--kb-scale, 1));
  194. z-index: 0;
  195. width: calc(84px * var(--kb-scale, 1));
  196. height: calc(84px * var(--kb-scale, 1));
  197. pointer-events: none;
  198. background: radial-gradient(circle, var(--card-glow) 0%, rgb(255 255 255 / 0%) 70%);
  199. content: '';
  200. opacity: 0.86;
  201. transition:
  202. transform 0.28s ease,
  203. opacity 0.28s ease;
  204. }
  205. .summary-card:hover {
  206. background: linear-gradient(180deg, rgb(255 255 255 / 72%) 0%, rgb(219 233 255 / 46%) 100%);
  207. border-color: rgb(255 255 255 / 90%);
  208. transform: translateY(-3px);
  209. box-shadow:
  210. inset 0 1px 0 rgb(255 255 255 / 85%),
  211. 0 10px 18px rgb(41 89 164 / 13%);
  212. }
  213. .summary-card:hover::after {
  214. opacity: 1;
  215. transform: scale(1.08);
  216. }
  217. .summary-card__shine {
  218. position: absolute;
  219. top: 0;
  220. left: -130%;
  221. z-index: 1;
  222. width: 60%;
  223. height: 100%;
  224. pointer-events: none;
  225. background: linear-gradient(
  226. 90deg,
  227. rgb(255 255 255 / 0%) 0%,
  228. rgb(255 255 255 / 18%) 45%,
  229. rgb(255 255 255 / 45%) 50%,
  230. rgb(255 255 255 / 18%) 55%,
  231. rgb(255 255 255 / 0%) 100%
  232. );
  233. transform: skewX(-22deg);
  234. }
  235. .summary-card:hover .summary-card__shine {
  236. left: 150%;
  237. transition: left 0.8s ease;
  238. }
  239. .summary-card__icon {
  240. position: relative;
  241. z-index: 2;
  242. display: flex;
  243. width: calc(48px * var(--kb-scale, 1));
  244. height: calc(48px * var(--kb-scale, 1));
  245. background: linear-gradient(180deg, rgb(255 255 255 / 96%) 0%, rgb(242 247 255 / 92%) 100%);
  246. border: 1px solid rgb(255 255 255 / 88%);
  247. border-radius: calc(12px * var(--kb-scale, 1));
  248. box-shadow:
  249. inset 0 1px 0 rgb(255 255 255 / 95%),
  250. 0 6px 12px rgb(152 181 230 / 15%);
  251. flex-shrink: 0;
  252. align-items: center;
  253. justify-content: center;
  254. transition:
  255. transform 0.28s ease,
  256. box-shadow 0.28s ease;
  257. }
  258. .summary-card__icon::after {
  259. position: absolute;
  260. right: calc(-3px * var(--kb-scale, 1));
  261. bottom: calc(-3px * var(--kb-scale, 1));
  262. width: calc(15px * var(--kb-scale, 1));
  263. height: calc(15px * var(--kb-scale, 1));
  264. background: radial-gradient(
  265. circle at 30% 30%,
  266. rgb(255 255 255 / 96%) 0%,
  267. var(--card-glow) 58%,
  268. rgb(255 255 255 / 0%) 75%
  269. );
  270. border-radius: 999px;
  271. content: '';
  272. opacity: 0.95;
  273. }
  274. .summary-card:hover .summary-card__icon {
  275. transform: translateY(-2px) scale(1.03);
  276. box-shadow:
  277. inset 0 1px 0 rgb(255 255 255 / 95%),
  278. 0 8px 14px rgb(120 158 221 / 20%);
  279. }
  280. .summary-card__icon-glyph {
  281. position: relative;
  282. z-index: 1;
  283. font-size: calc(25px * var(--kb-scale, 1));
  284. color: var(--card-accent);
  285. transition:
  286. transform 0.28s ease,
  287. filter 0.28s ease;
  288. }
  289. .summary-card:hover .summary-card__icon-glyph {
  290. filter: drop-shadow(0 4px 8px rgb(0 0 0 / 8%));
  291. transform: scale(1.08);
  292. }
  293. .summary-card__body {
  294. position: relative;
  295. z-index: 2;
  296. display: flex;
  297. min-height: calc(48px * var(--kb-scale, 1));
  298. min-width: 0;
  299. flex-direction: column;
  300. justify-content: center;
  301. }
  302. .summary-card__label {
  303. overflow: hidden;
  304. font-size: calc(14px * var(--kb-scale, 1));
  305. font-weight: 600;
  306. color: #24364f;
  307. text-overflow: ellipsis;
  308. white-space: nowrap;
  309. transition:
  310. transform 0.28s ease,
  311. color 0.28s ease;
  312. }
  313. .summary-card__value {
  314. margin-top: calc(4px * var(--kb-scale, 1));
  315. font-family: YouSheBiaoTiHei, sans-serif;
  316. font-size: calc(19px * var(--kb-scale, 1));
  317. line-height: 1;
  318. letter-spacing: 1px;
  319. color: #1f5bb8;
  320. transition:
  321. transform 0.28s ease,
  322. text-shadow 0.28s ease;
  323. }
  324. .summary-card:hover .summary-card__label {
  325. color: #173b72;
  326. transform: translateX(1px);
  327. }
  328. .summary-card:hover .summary-card__value {
  329. text-shadow: 0 4px 10px rgb(31 91 184 / 16%);
  330. transform: translateX(1px);
  331. }
  332. .summary-card__corner {
  333. position: absolute;
  334. top: 0;
  335. right: 0;
  336. z-index: 1;
  337. width: calc(36px * var(--kb-scale, 1));
  338. height: calc(36px * var(--kb-scale, 1));
  339. pointer-events: none;
  340. background: linear-gradient(135deg, rgb(255 255 255 / 30%) 0%, rgb(255 255 255 / 0%) 70%);
  341. opacity: 0.85;
  342. clip-path: polygon(100% 0, 0 0, 100% 100%);
  343. }
  344. .summary-card {
  345. animation: card-in 0.5s ease both;
  346. }
  347. .summary-card:nth-child(1) {
  348. animation-delay: 0.05s;
  349. }
  350. .summary-card:nth-child(2) {
  351. animation-delay: 0.1s;
  352. }
  353. .summary-card:nth-child(3) {
  354. animation-delay: 0.15s;
  355. }
  356. .summary-card:nth-child(4) {
  357. animation-delay: 0.2s;
  358. }
  359. .summary-card:nth-child(5) {
  360. animation-delay: 0.25s;
  361. }
  362. .summary-card:nth-child(6) {
  363. animation-delay: 0.3s;
  364. }
  365. .summary-card:nth-child(7) {
  366. animation-delay: 0.35s;
  367. }
  368. .summary-card:nth-child(8) {
  369. animation-delay: 0.4s;
  370. }
  371. .summary-card:nth-child(9) {
  372. animation-delay: 0.4s;
  373. }
  374. .summary-card:nth-child(10) {
  375. animation-delay: 0.4s;
  376. }
  377. @keyframes card-in {
  378. from {
  379. opacity: 0;
  380. transform: translateY(12px);
  381. }
  382. to {
  383. opacity: 1;
  384. transform: translateY(0);
  385. }
  386. }
  387. .summary-card__placeholder {
  388. display: inline-block;
  389. font-family: YouSheBiaoTiHei, sans-serif;
  390. font-size: calc(19px * var(--kb-scale, 1));
  391. line-height: 1;
  392. letter-spacing: 1px;
  393. color: rgb(31 91 184 / 45%);
  394. }
  395. .device-list-table,
  396. .team-list-table {
  397. --el-table-border-color: rgb(31 91 184 / 12%);
  398. --el-table-border: 1px solid rgb(31 91 184 / 12%);
  399. --el-table-header-bg-color: rgb(255 255 255 / 82%);
  400. --el-table-tr-bg-color: transparent;
  401. --el-table-bg-color: transparent;
  402. --el-table-row-hover-bg-color: rgb(31 91 184 / 6%);
  403. --el-fill-color-lighter: rgb(255 255 255 / 55%);
  404. background: transparent;
  405. :deep(.el-table__inner-wrapper::before) {
  406. display: none;
  407. }
  408. :deep(.el-table__header-wrapper th.el-table__cell) {
  409. // font-family: YouSheBiaoTiHei, sans-serif;
  410. font-size: calc(20px * var(--kb-scale, 1));
  411. font-weight: 500;
  412. letter-spacing: 0.5px;
  413. color: #03409b;
  414. background: linear-gradient(180deg, rgb(255 255 255 / 92%) 0%, rgb(231 240 255 / 82%) 100%);
  415. border-bottom: 1px solid rgb(31 91 184 / 16%);
  416. }
  417. :deep(.el-table__body td.el-table__cell) {
  418. padding: calc(8px * var(--kb-scale, 1)) 0;
  419. // font-family: YouSheBiaoTiHei, sans-serif;
  420. font-size: calc(16px * var(--kb-scale, 1));
  421. color: #24364f;
  422. background: rgb(255 255 255 / 16%);
  423. border-bottom: 1px solid rgb(31 91 184 / 8%);
  424. }
  425. :deep(.el-table__body tr:nth-child(2n) td.el-table__cell) {
  426. background: rgb(255 255 255 / 28%);
  427. }
  428. :deep(.el-table__row:hover > td.el-table__cell) {
  429. background: rgb(31 91 184 / 8%) !important;
  430. }
  431. :deep(.el-scrollbar__bar.is-vertical) {
  432. width: calc(8px * var(--kb-scale, 1));
  433. }
  434. :deep(.el-scrollbar__bar.is-horizontal) {
  435. height: calc(8px * var(--kb-scale, 1));
  436. }
  437. :deep(.el-scrollbar__thumb) {
  438. background: rgb(31 91 184 / 26%);
  439. border-radius: 999px;
  440. }
  441. }
  442. .device-list-table {
  443. :deep(.el-table__row) {
  444. cursor: pointer;
  445. }
  446. }
  447. .kb-stage-card {
  448. --panel-delay: 0s;
  449. --panel-glow: rgb(31 91 184 / 12%);
  450. position: relative;
  451. opacity: 0;
  452. transform: translateY(22px) scale(0.985);
  453. animation: kb-panel-enter 0.8s cubic-bezier(0.22, 1, 0.36, 1) forwards;
  454. animation-delay: var(--panel-delay);
  455. isolation: isolate;
  456. will-change: transform, opacity;
  457. }
  458. .kb-stage-card::before {
  459. position: absolute;
  460. z-index: 0;
  461. pointer-events: none;
  462. background: linear-gradient(
  463. 112deg,
  464. rgb(255 255 255 / 0%) 0%,
  465. rgb(255 255 255 / 0%) 34%,
  466. rgb(255 255 255 / 26%) 48%,
  467. rgb(255 255 255 / 8%) 56%,
  468. rgb(255 255 255 / 0%) 68%,
  469. rgb(255 255 255 / 0%) 100%
  470. );
  471. border-radius: calc(20px * var(--kb-scale, 1));
  472. content: '';
  473. opacity: 0;
  474. transform: translateX(-140%) skewX(-22deg);
  475. animation: kb-panel-sheen 1.05s ease-out forwards;
  476. animation-delay: calc(var(--panel-delay) + 0.18s);
  477. inset: 0;
  478. }
  479. .kb-stage-card::after {
  480. position: absolute;
  481. right: calc(-24px * var(--kb-scale, 1));
  482. bottom: calc(-30px * var(--kb-scale, 1));
  483. z-index: 0;
  484. width: calc(120px * var(--kb-scale, 1));
  485. height: calc(120px * var(--kb-scale, 1));
  486. pointer-events: none;
  487. background: radial-gradient(circle, var(--panel-glow) 0%, rgb(255 255 255 / 0%) 72%);
  488. content: '';
  489. opacity: 0.88;
  490. transition:
  491. transform 0.32s ease,
  492. opacity 0.32s ease;
  493. }
  494. .kb-stage-card:hover {
  495. transform: translateY(-4px) scale(1.005);
  496. transition:
  497. transform 0.28s ease,
  498. box-shadow 0.28s ease;
  499. }
  500. .kb-stage-card:hover::after {
  501. opacity: 1;
  502. transform: scale(1.08);
  503. }
  504. .kb-stage-card--list {
  505. --panel-glow: rgb(45 124 248 / 14%);
  506. }
  507. .kb-stage-card--1 {
  508. --panel-delay: 0.02s;
  509. }
  510. .kb-stage-card--2 {
  511. --panel-delay: 0.08s;
  512. }
  513. .kb-stage-card--3 {
  514. --panel-delay: 0.14s;
  515. }
  516. .kb-stage-card--4 {
  517. --panel-delay: 0.2s;
  518. }
  519. .kb-stage-card--5 {
  520. --panel-delay: 0.26s;
  521. }
  522. .kb-stage-card--6 {
  523. --panel-delay: 0.32s;
  524. }
  525. .kb-stage-card--7 {
  526. --panel-delay: 0.38s;
  527. }
  528. .kb-stage-card--8 {
  529. --panel-delay: 0.46s;
  530. }
  531. @keyframes kb-panel-enter {
  532. 0% {
  533. opacity: 0;
  534. filter: blur(4px);
  535. transform: translateY(22px) scale(0.985);
  536. }
  537. 100% {
  538. opacity: 1;
  539. filter: blur(0);
  540. transform: translateY(0) scale(1);
  541. }
  542. }
  543. @keyframes kb-panel-sheen {
  544. 0% {
  545. opacity: 0;
  546. transform: translateX(-140%) skewX(-22deg);
  547. }
  548. 18% {
  549. opacity: 0.85;
  550. }
  551. 100% {
  552. opacity: 0;
  553. transform: translateX(165%) skewX(-22deg);
  554. }
  555. }
  556. @media (prefers-reduced-motion: reduce) {
  557. .kb-stage-card,
  558. .kb-stage-card::before,
  559. .kb-stage-card::after {
  560. animation: none;
  561. transition: none;
  562. }
  563. .kb-stage-card {
  564. opacity: 1;
  565. transform: none;
  566. }
  567. .kb-stage-card:hover {
  568. transform: none;
  569. }
  570. }