Dashboard.css 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. .dashboard {
  2. padding: 20px 16px;
  3. max-width: 640px;
  4. margin: 0 auto;
  5. }
  6. .dash-header {
  7. display: flex;
  8. justify-content: space-between;
  9. align-items: center;
  10. margin-bottom: 24px;
  11. padding-bottom: 14px;
  12. border-bottom: 1px solid var(--bg-border);
  13. }
  14. .dash-logo {
  15. font-size: 18px;
  16. font-weight: bold;
  17. color: var(--neon-cyan);
  18. letter-spacing: 0.12em;
  19. }
  20. .dash-status {
  21. font-size: 13px;
  22. color: var(--neon-green);
  23. display: flex;
  24. align-items: center;
  25. gap: 6px;
  26. }
  27. .dot {
  28. width: 8px;
  29. height: 8px;
  30. border-radius: 50%;
  31. display: inline-block;
  32. }
  33. .dot--green {
  34. background: var(--neon-green);
  35. box-shadow: 0 0 6px var(--neon-green);
  36. animation: pulse 2s infinite;
  37. }
  38. @keyframes pulse {
  39. 0%, 100% { opacity: 1; }
  40. 50% { opacity: 0.4; }
  41. }
  42. .stat-grid {
  43. display: grid;
  44. grid-template-columns: 1fr 1fr;
  45. gap: 14px;
  46. margin-bottom: 24px;
  47. }
  48. .stat-card {
  49. background: var(--bg-card);
  50. border: 1px solid var(--bg-border);
  51. border-radius: 4px;
  52. padding: 18px 16px;
  53. }
  54. .stat-label {
  55. font-size: 12px;
  56. color: var(--text-muted);
  57. letter-spacing: 0.1em;
  58. margin-bottom: 10px;
  59. }
  60. .stat-value {
  61. font-size: 28px;
  62. font-weight: bold;
  63. color: var(--text-primary);
  64. }
  65. .neon-green { color: var(--neon-green); }
  66. .neon-cyan { color: var(--neon-cyan); }
  67. .blink {
  68. animation: blink 1.5s step-end infinite;
  69. }
  70. @keyframes blink {
  71. 0%, 100% { opacity: 1; }
  72. 50% { opacity: 0; }
  73. }
  74. .geo-section {
  75. background: var(--bg-card);
  76. border: 1px solid var(--bg-border);
  77. border-radius: 4px;
  78. padding: 18px 16px;
  79. }
  80. .section-title {
  81. font-size: 12px;
  82. color: var(--text-muted);
  83. letter-spacing: 0.1em;
  84. margin-bottom: 16px;
  85. display: flex;
  86. justify-content: space-between;
  87. }
  88. .geo-list {
  89. list-style: none;
  90. display: flex;
  91. flex-direction: column;
  92. gap: 12px;
  93. }
  94. .geo-item {
  95. display: grid;
  96. grid-template-columns: 140px 1fr 52px 52px;
  97. align-items: center;
  98. gap: 10px;
  99. font-size: 13px;
  100. }
  101. .geo-country {
  102. color: var(--text-primary);
  103. letter-spacing: 0.05em;
  104. }
  105. .geo-bar-wrap {
  106. background: var(--bg-border);
  107. height: 4px;
  108. border-radius: 2px;
  109. overflow: hidden;
  110. }
  111. .geo-bar {
  112. height: 100%;
  113. background: var(--neon-cyan);
  114. box-shadow: 0 0 6px var(--neon-cyan);
  115. border-radius: 2px;
  116. transition: width 0.5s ease;
  117. }
  118. .geo-pct {
  119. color: var(--neon-cyan);
  120. text-align: right;
  121. }
  122. .geo-pct--dim {
  123. color: var(--text-muted);
  124. text-align: right;
  125. }
  126. font-size: 12px;
  127. }
  128. .empty-msg {
  129. color: var(--text-muted);
  130. font-size: 13px;
  131. text-align: center;
  132. padding: 20px 0;
  133. }