ClientsPage.css 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. .clients-page .ant-pagination-options-size-changer,
  2. .clients-page .ant-pagination-options-size-changer .ant-select-selector {
  3. min-width: 100px;
  4. }
  5. .client-email-list {
  6. max-height: 280px;
  7. min-width: 160px;
  8. overflow-y: auto;
  9. padding-right: 4px;
  10. }
  11. .client-email-list > div {
  12. padding: 2px 0;
  13. font-size: 12px;
  14. white-space: nowrap;
  15. }
  16. .filter-bar {
  17. display: flex;
  18. flex-wrap: wrap;
  19. align-items: center;
  20. gap: 8px;
  21. margin-bottom: 12px;
  22. }
  23. .filter-bar.mobile {
  24. gap: 6px;
  25. margin-bottom: 8px;
  26. }
  27. .filter-bar.mobile > * {
  28. flex: 0 0 auto;
  29. }
  30. .filter-chips {
  31. display: flex;
  32. flex-wrap: wrap;
  33. gap: 6px;
  34. margin: 0 0 12px;
  35. padding: 6px 8px;
  36. background: var(--ant-color-fill-quaternary);
  37. border-radius: 8px;
  38. }
  39. .filter-chips .ant-tag {
  40. margin: 0;
  41. }
  42. .dot {
  43. display: inline-block;
  44. width: 8px;
  45. height: 8px;
  46. border-radius: 50%;
  47. margin-right: 4px;
  48. vertical-align: middle;
  49. }
  50. .dot-green { background: var(--ant-color-success); }
  51. .dot-blue { background: var(--ant-color-primary); }
  52. .dot-red { background: var(--ant-color-error); }
  53. .dot-orange { background: var(--ant-color-warning); }
  54. .dot-gray { background: var(--ant-color-text-quaternary); }
  55. .online-dot {
  56. display: inline-block;
  57. width: 7px;
  58. height: 7px;
  59. border-radius: 50%;
  60. margin-inline-end: 5px;
  61. vertical-align: middle;
  62. background: var(--ant-color-success);
  63. animation: online-blink 1.1s ease-in-out infinite;
  64. }
  65. @keyframes online-blink {
  66. 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(82, 196, 26, 0.55); }
  67. 50% { opacity: 0.35; box-shadow: 0 0 0 4px rgba(82, 196, 26, 0); }
  68. }
  69. @media (prefers-reduced-motion: reduce) {
  70. .online-dot { animation: none; }
  71. }
  72. .status-tag {
  73. margin: 0 0 0 4px;
  74. font-size: 11px;
  75. padding: 0 6px;
  76. line-height: 18px;
  77. }
  78. .card-toolbar {
  79. display: flex;
  80. align-items: center;
  81. gap: 8px;
  82. flex-wrap: wrap;
  83. padding: 6px 0;
  84. }
  85. @media (min-width: 769px) and (max-width: 920px) {
  86. .card-toolbar {
  87. gap: 6px;
  88. }
  89. .card-toolbar .ant-btn .ant-btn-icon + span,
  90. .card-toolbar .ant-btn > span:not(.ant-btn-icon):not(.ant-tag):not(.anticon) {
  91. display: none;
  92. }
  93. .card-toolbar .ant-btn {
  94. padding-inline: 8px;
  95. }
  96. }
  97. .email-cell {
  98. display: flex;
  99. flex-direction: column;
  100. }
  101. .email-cell .email {
  102. font-weight: 500;
  103. }
  104. .email-cell .sub {
  105. font-size: 11px;
  106. opacity: 0.55;
  107. font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
  108. white-space: nowrap;
  109. overflow: hidden;
  110. text-overflow: ellipsis;
  111. max-width: 220px;
  112. }
  113. .client-cards {
  114. display: flex;
  115. flex-direction: column;
  116. gap: 10px;
  117. margin-top: 4px;
  118. }
  119. .card-bulk-bar {
  120. display: flex;
  121. align-items: center;
  122. gap: 8px;
  123. padding: 4px 4px 8px;
  124. }
  125. .card-pagination {
  126. display: flex;
  127. justify-content: center;
  128. flex-wrap: wrap;
  129. padding: 4px 0 8px;
  130. }
  131. .card-pagination .ant-pagination-options-size-changer,
  132. .card-pagination .ant-pagination-options-size-changer .ant-select-selector {
  133. min-width: 88px;
  134. }
  135. .bulk-count {
  136. font-size: 12px;
  137. background: color-mix(in srgb, var(--ant-color-primary) 12%, transparent);
  138. color: var(--ant-color-primary);
  139. padding: 1px 8px;
  140. border-radius: 10px;
  141. }
  142. .client-card {
  143. border: 1px solid var(--ant-color-border-secondary);
  144. border-radius: 10px;
  145. padding: 10px 12px;
  146. background: var(--ant-color-fill-quaternary);
  147. }
  148. .client-card.is-selected {
  149. border-color: var(--ant-color-primary);
  150. background: color-mix(in srgb, var(--ant-color-primary) 6%, transparent);
  151. }
  152. .card-head {
  153. display: flex;
  154. align-items: center;
  155. gap: 8px;
  156. user-select: none;
  157. }
  158. .card-head .tag-name {
  159. font-weight: 600;
  160. flex: 1;
  161. min-width: 0;
  162. overflow: hidden;
  163. text-overflow: ellipsis;
  164. white-space: nowrap;
  165. }
  166. .card-actions {
  167. display: flex;
  168. align-items: center;
  169. gap: 10px;
  170. flex-shrink: 0;
  171. }
  172. .row-action-trigger {
  173. font-size: 18px;
  174. cursor: pointer;
  175. opacity: 0.75;
  176. transition: opacity 120ms ease;
  177. }
  178. .row-action-trigger:hover {
  179. opacity: 1;
  180. }
  181. .card-empty {
  182. text-align: center;
  183. padding: 40px 16px;
  184. color: var(--ant-color-text-secondary);
  185. display: flex;
  186. flex-direction: column;
  187. align-items: center;
  188. gap: 8px;
  189. }
  190. .clients-empty {
  191. padding: 32px 0;
  192. text-align: center;
  193. color: var(--ant-color-text-secondary);
  194. }