ConnectionIndicator.module.css 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. .indicator {
  2. flex: none;
  3. display: inline-grid;
  4. grid-template-columns: 14px max-content;
  5. align-items: center;
  6. column-gap: 4px;
  7. height: 28px;
  8. padding: 0 8px;
  9. box-sizing: border-box;
  10. border: 1px solid transparent;
  11. border-radius: 13px;
  12. font-family: inherit;
  13. font-size: 12px;
  14. font-weight: 500;
  15. line-height: 18px;
  16. white-space: nowrap;
  17. transition:
  18. background-color 160ms ease-out,
  19. color 160ms ease-out,
  20. border-color 160ms ease-out,
  21. opacity 150ms ease-out;
  22. animation: indicator-enter 150ms ease-out;
  23. }
  24. .leaving {
  25. opacity: 0;
  26. }
  27. @keyframes indicator-enter {
  28. from {
  29. opacity: 0;
  30. }
  31. }
  32. .warning {
  33. background: var(--dsw-alias-state-warn-tertiary);
  34. color: var(--dsw-alias-state-warn-label);
  35. border-color: color-mix(in srgb, var(--dsw-alias-state-warn-label) 20%, transparent);
  36. cursor: pointer;
  37. }
  38. .warning:hover {
  39. background: color-mix(
  40. in srgb,
  41. var(--dsw-alias-state-warn-tertiary),
  42. var(--dsw-alias-state-warn-primary) 6%
  43. );
  44. }
  45. .warning:active {
  46. background: color-mix(
  47. in srgb,
  48. var(--dsw-alias-state-warn-tertiary),
  49. var(--dsw-alias-state-warn-primary) 10%
  50. );
  51. }
  52. .warning:focus-visible {
  53. outline: 2px solid var(--dsw-alias-state-warn-label);
  54. outline-offset: 2px;
  55. }
  56. .success {
  57. background: var(--dsw-alias-state-success-tertiary);
  58. color: var(--dsw-alias-state-success-primary);
  59. border-color: color-mix(in srgb, var(--dsw-alias-state-success-primary) 20%, transparent);
  60. }
  61. .icon {
  62. display: grid;
  63. place-items: center;
  64. width: 14px;
  65. height: 14px;
  66. }
  67. .label {
  68. text-align: left;
  69. }
  70. .spinner {
  71. animation: spinner-rotate 0.9s linear infinite;
  72. }
  73. @keyframes spinner-rotate {
  74. to { transform: rotate(360deg); }
  75. }
  76. .dots {
  77. display: inline-block;
  78. width: 1em;
  79. text-align: left;
  80. }
  81. .secondDot {
  82. animation: reveal-second-dot 1.5s step-end infinite;
  83. }
  84. .thirdDot {
  85. animation: reveal-third-dot 1.5s step-end infinite;
  86. }
  87. @keyframes reveal-second-dot {
  88. 0%, 33.32% { opacity: 0; }
  89. 33.33%, 100% { opacity: 1; }
  90. }
  91. @keyframes reveal-third-dot {
  92. 0%, 66.65% { opacity: 0; }
  93. 66.66%, 100% { opacity: 1; }
  94. }
  95. @media (prefers-reduced-motion: reduce) {
  96. .indicator,
  97. .secondDot,
  98. .thirdDot,
  99. .spinner {
  100. animation: none;
  101. }
  102. .indicator {
  103. transition: none;
  104. }
  105. }