index.styl 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. .media-page
  2. max-width: 1200px
  3. margin: 0 auto
  4. .media-toolbar
  5. display: flex
  6. gap: var(--spacing-xl)
  7. margin-bottom: var(--spacing-2xl)
  8. align-items: flex-start
  9. .media-upload-area
  10. flex: 1
  11. .media-filters
  12. display: flex
  13. gap: var(--spacing-md)
  14. align-items: center
  15. .filter-select,
  16. .search-input
  17. padding: var(--spacing-sm) var(--spacing-md)
  18. border: 1px solid var(--border-color)
  19. border-radius: var(--border-radius)
  20. .theme-dark &
  21. background: var(--color-dark-50)
  22. color: var(--color-light)
  23. border-color: var(--color-light-10)
  24. .search-input
  25. min-width: 200px
  26. .upload-progress
  27. background: var(--color-light-10)
  28. padding: var(--spacing-lg)
  29. border-radius: var(--border-radius)
  30. margin-bottom: var(--spacing-xl)
  31. text-align: center
  32. .theme-dark &
  33. background: var(--color-dark-50)
  34. .progress-bar
  35. height: 8px
  36. background: var(--color-light-50)
  37. border-radius: 4px
  38. overflow: hidden
  39. margin-bottom: var(--spacing-sm)
  40. .theme-dark &
  41. background: var(--color-dark-20)
  42. .progress-fill
  43. height: 100%
  44. background: var(--color-primary)
  45. transition: width 0.3s ease
  46. border-radius: 4px
  47. .media-grid
  48. display: grid
  49. grid-template-columns: repeat(auto-fill, minmax(200px, 1fr))
  50. gap: var(--spacing-lg)
  51. margin-bottom: var(--spacing-2xl)
  52. .media-item
  53. border: 2px solid transparent
  54. border-radius: var(--border-radius)
  55. padding: var(--spacing-md)
  56. background: var(--color-white)
  57. cursor: pointer
  58. transition: var(--transition-fast)
  59. &:hover
  60. border-color: var(--color-primary-20)
  61. transform: translateY(-2px)
  62. box-shadow: var(--shadow-md)
  63. .theme-dark &
  64. background: var(--color-dark)
  65. .media-item--selected &
  66. border-color: var(--color-primary)
  67. .media-item__preview
  68. height: 120px
  69. display: flex
  70. align-items: center
  71. justify-content: center
  72. background: var(--color-light-10)
  73. border-radius: var(--border-radius-sm)
  74. margin-bottom: var(--spacing-md)
  75. overflow: hidden
  76. .theme-dark &
  77. background: var(--color-dark-50)
  78. .media-item__image
  79. max-width: 100%
  80. max-height: 100%
  81. object-fit: cover
  82. .media-item__icon
  83. font-size: 2rem
  84. opacity: 0.7
  85. .media-item__info
  86. text-align: center
  87. .media-item__name
  88. font-weight: var(--font-weight-medium)
  89. margin-bottom: var(--spacing-xs)
  90. word-break: break-word
  91. .media-item__meta
  92. display: flex
  93. justify-content: space-between
  94. font-size: var(--font-size-sm)
  95. color: var(--color-secondary)
  96. .media-item__actions
  97. position: absolute
  98. top: var(--spacing-sm)
  99. right: var(--spacing-sm)
  100. opacity: 0
  101. transition: var(--transition-fast)
  102. .media-item:hover &
  103. opacity: 1
  104. .media-item__delete
  105. width: 24px
  106. height: 24px
  107. border: none
  108. background: var(--color-danger)
  109. color: var(--color-white)
  110. border-radius: 50%
  111. cursor: pointer
  112. display: flex
  113. align-items: center
  114. justify-content: center
  115. font-size: var(--font-size-lg)
  116. .media-selection
  117. position: fixed
  118. bottom: var(--spacing-xl)
  119. left: 50%
  120. transform: translateX(-50%)
  121. background: var(--color-white)
  122. padding: var(--spacing-lg)
  123. border-radius: var(--border-radius)
  124. box-shadow: var(--shadow-lg)
  125. display: flex
  126. align-items: center
  127. gap: var(--spacing-lg)
  128. z-index: var(--z-sticky)
  129. .theme-dark &
  130. background: var(--color-dark)
  131. color: var(--color-light)
  132. @media (max-width: 768px)
  133. .media-toolbar
  134. flex-direction: column
  135. gap: var(--spacing-md)
  136. .media-filters
  137. width: 100%
  138. justify-content: space-between
  139. .search-input
  140. flex: 1
  141. .media-grid
  142. grid-template-columns: repeat(auto-fill, minmax(150px, 1fr))
  143. gap: var(--spacing-md)