device-monitor.css 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. /* device-monitor.component.css */
  2. :host {
  3. display: block;
  4. width: 100%;
  5. padding: 15px;
  6. }
  7. .monitor-container {
  8. max-width: 1400px;
  9. margin: 0 auto;
  10. padding: 20px;
  11. background: white;
  12. border-radius: 8px;
  13. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
  14. }
  15. .monitor-header {
  16. display: flex;
  17. justify-content: space-between;
  18. align-items: flex-start;
  19. margin-bottom: 24px;
  20. padding-bottom: 16px;
  21. border-bottom: 1px solid #eee;
  22. }
  23. .monitor-header h2 {
  24. display: flex;
  25. align-items: center;
  26. gap: 10px;
  27. font-size: 24px;
  28. color: #2c3e50;
  29. }
  30. .device-info {
  31. display: grid;
  32. grid-template-columns: repeat(2, 1fr);
  33. gap: 10px 20px;
  34. font-size: 14px;
  35. background: #f8fafc;
  36. padding: 15px;
  37. border-radius: 6px;
  38. }
  39. .monitor-row {
  40. display: flex;
  41. gap: 20px;
  42. margin-bottom: 20px;
  43. }
  44. .waveform-card {
  45. flex: 2;
  46. background: white;
  47. border-radius: 8px;
  48. padding: 20px;
  49. box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  50. }
  51. .status-panel {
  52. flex: 1;
  53. background: white;
  54. border-radius: 8px;
  55. padding: 20px;
  56. box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  57. }
  58. .waveform-container {
  59. height: 250px;
  60. background: #f1f8ff;
  61. border-radius: 6px;
  62. margin: 20px 0;
  63. position: relative;
  64. overflow: hidden;
  65. }
  66. .waveform-grid {
  67. position: absolute;
  68. top: 0;
  69. left: 0;
  70. right: 0;
  71. bottom: 0;
  72. }
  73. .grid-line {
  74. position: absolute;
  75. height: 1px;
  76. background: rgba(0, 0, 0, 0.05);
  77. left: 0;
  78. right: 0;
  79. }
  80. .grid-line:nth-child(1) { top: 25%; }
  81. .grid-line:nth-child(2) { top: 50%; }
  82. .grid-line:nth-child(3) { top: 75%; }
  83. .waveform-line {
  84. position: absolute;
  85. top: 50%;
  86. left: 0;
  87. right: 0;
  88. height: 3px;
  89. background: #3498db;
  90. animation: waveform 8s infinite linear;
  91. }
  92. @keyframes waveform {
  93. 0% { transform: translateX(0); }
  94. 100% { transform: translateX(-100%); }
  95. }
  96. .threshold {
  97. position: absolute;
  98. left: 0;
  99. right: 0;
  100. height: 2px;
  101. background: #e74c3c;
  102. }
  103. .threshold.upper { top: 25%; }
  104. .threshold.lower { top: 75%; }
  105. .waveform-controls {
  106. display: flex;
  107. gap: 20px;
  108. }
  109. .threshold-control {
  110. flex: 1;
  111. }
  112. .threshold-control label {
  113. display: block;
  114. margin-bottom: 8px;
  115. font-size: 14px;
  116. }
  117. .threshold-control input {
  118. width: 100%;
  119. }
  120. .status-grid {
  121. display: grid;
  122. grid-template-columns: repeat(2, 1fr);
  123. gap: 15px;
  124. margin: 20px 0;
  125. }
  126. .status-card {
  127. display: flex;
  128. align-items: center;
  129. gap: 15px;
  130. padding: 15px;
  131. background: #f8fafc;
  132. border-radius: 6px;
  133. border-left: 3px solid #3498db;
  134. }
  135. .status-icon {
  136. width: 45px;
  137. height: 45px;
  138. border-radius: 50%;
  139. display: flex;
  140. align-items: center;
  141. justify-content: center;
  142. font-size: 18px;
  143. color: white;
  144. }
  145. .status-icon.blue { background: #3498db; }
  146. .status-icon.green { background: #27ae60; }
  147. .status-icon.orange { background: #f39c12; }
  148. .status-icon.purple { background: #9b59b6; }
  149. .status-data {
  150. flex: 1;
  151. }
  152. .status-label {
  153. font-size: 14px;
  154. color: #95a5a6;
  155. margin-bottom: 3px;
  156. }
  157. .status-value {
  158. font-size: 20px;
  159. font-weight: 700;
  160. color: #2c3e50;
  161. }
  162. .progress-steps {
  163. display: flex;
  164. justify-content: space-between;
  165. margin-top: 15px;
  166. }
  167. .step {
  168. width: 36px;
  169. height: 36px;
  170. border-radius: 50%;
  171. background: #ecf0f1;
  172. display: flex;
  173. align-items: center;
  174. justify-content: center;
  175. font-weight: 700;
  176. color: #95a5a6;
  177. }
  178. .step.active {
  179. background: #3498db;
  180. color: white;
  181. }
  182. .step.current {
  183. background: #27ae60;
  184. color: white;
  185. transform: scale(1.2);
  186. }
  187. .history-panel {
  188. background: white;
  189. border-radius: 8px;
  190. padding: 20px;
  191. box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  192. }
  193. .history-header {
  194. display: flex;
  195. justify-content: space-between;
  196. align-items: center;
  197. margin-bottom: 15px;
  198. }
  199. .alert-history {
  200. border: 1px solid #eee;
  201. border-radius: 6px;
  202. overflow: hidden;
  203. }
  204. .history-item {
  205. display: flex;
  206. align-items: center;
  207. padding: 12px 15px;
  208. border-bottom: 1px solid #eee;
  209. }
  210. .history-item:last-child {
  211. border-bottom: none;
  212. }
  213. .alert-time {
  214. width: 90px;
  215. font-weight: 500;
  216. color: #2c3e50;
  217. }
  218. .alert-desc {
  219. flex: 1;
  220. }
  221. .alert-level {
  222. padding: 4px 10px;
  223. border-radius: 4px;
  224. font-size: 13px;
  225. font-weight: 500;
  226. }
  227. .alert-level.warning {
  228. background: #fef5e7;
  229. color: #f39c12;
  230. border: 1px solid #f39c12;
  231. }
  232. .alert-level.critical {
  233. background: #fdecea;
  234. color: #e74c3c;
  235. border: 1px solid #e74c3c;
  236. }
  237. .alert-level.info {
  238. background: #ebf5fb;
  239. color: #3498db;
  240. border: 1px solid #3498db;
  241. }