MessageImage.module.css 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. .gallery {
  2. display: flex;
  3. flex-wrap: wrap;
  4. gap: 10px;
  5. max-width: 100%;
  6. }
  7. .gallery[data-align='end'] {
  8. justify-content: flex-end;
  9. align-self: flex-end;
  10. }
  11. .gallery[data-align='start'] {
  12. justify-content: flex-start;
  13. align-self: flex-start;
  14. }
  15. .frame {
  16. display: grid;
  17. flex: 0 0 auto;
  18. place-items: center;
  19. min-width: 44px;
  20. min-height: 44px;
  21. padding: 0;
  22. overflow: hidden;
  23. border: 0.5px solid var(--dsw-alias-border-l2-darkmode-thin);
  24. border-radius: 16px;
  25. background: var(--dsw-alias-interactive-bg-hover);
  26. cursor: zoom-in;
  27. }
  28. .frame[data-variant='tile'] {
  29. width: 64px;
  30. height: 64px;
  31. min-width: 64px;
  32. min-height: 64px;
  33. }
  34. .frame img {
  35. display: block;
  36. width: 100%;
  37. height: 100%;
  38. object-fit: cover;
  39. }
  40. .loading,
  41. .error {
  42. color: var(--dsw-alias-label-tertiary);
  43. font-size: 12px;
  44. line-height: 18px;
  45. }
  46. .error {
  47. max-width: 240px;
  48. padding: 10px 12px;
  49. border: 0.5px solid var(--dsw-alias-border-l2-darkmode-thin);
  50. border-radius: 10px;
  51. background: var(--dsw-alias-interactive-bg-hover-danger);
  52. cursor: pointer;
  53. }
  54. /* A failed tile keeps the 64px grid cell instead of growing to its copy. */
  55. .error[data-variant='tile'] {
  56. width: 64px;
  57. height: 64px;
  58. padding: 4px;
  59. overflow: hidden;
  60. border-radius: 16px;
  61. }
  62. .frame[data-variant='thumbnail'],
  63. .error[data-variant='thumbnail'] {
  64. box-sizing: border-box;
  65. display: grid;
  66. place-items: center;
  67. width: 48px;
  68. height: 48px;
  69. min-width: 48px;
  70. min-height: 48px;
  71. padding: 2px;
  72. overflow: hidden;
  73. border-radius: 8px;
  74. }
  75. .frame[data-variant='thumbnail'] img {
  76. object-fit: contain;
  77. }
  78. .spinner {
  79. animation: spinner-rotate 0.9s linear infinite;
  80. }
  81. @keyframes spinner-rotate {
  82. to { transform: rotate(360deg); }
  83. }
  84. @media (prefers-reduced-motion: reduce) {
  85. .spinner {
  86. animation: none;
  87. }
  88. }
  89. .frame:focus-visible,
  90. .error:focus-visible {
  91. outline: 2px solid var(--dsw-alias-state-business-primary);
  92. outline-offset: 2px;
  93. }