index.styl 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. // Admin Products styles
  2. .admin-products
  3. display: flex
  4. flex-direction: column
  5. gap: 1.5rem
  6. .admin-products__header
  7. display: flex
  8. justify-content: space-between
  9. align-items: center
  10. border-bottom: 1px solid var(--color-gray-200)
  11. padding-bottom: 1.5rem
  12. .dark &
  13. border-bottom-color: var(--color-gray-700)
  14. .admin-products__title
  15. font-size: 1.875rem
  16. font-weight: bold
  17. color: var(--color-gray-900)
  18. .dark &
  19. color: var(--color-white)
  20. .admin-products__actions
  21. display: flex
  22. gap: 0.75rem
  23. // Button styles
  24. .admin-products__btn
  25. padding: 0.5rem 1rem
  26. border-radius: 0.5rem
  27. font-weight: 500
  28. font-size: 0.875rem
  29. transition: all 0.2s ease-in-out
  30. border: none
  31. cursor: pointer
  32. text-decoration: none
  33. display: inline-flex
  34. align-items: center
  35. justify-content: center
  36. &:focus
  37. outline: none
  38. box-shadow: 0 0 0 2px var(--color-primary-500-a20)
  39. .admin-products__btn--primary
  40. background-color: var(--color-primary-600)
  41. color: var(--color-white)
  42. &:hover
  43. background-color: var(--color-primary-700)
  44. .admin-products__btn--secondary
  45. background-color: var(--color-gray-200)
  46. color: var(--color-gray-700)
  47. &:hover
  48. background-color: var(--color-gray-300)
  49. .dark &
  50. background-color: var(--color-gray-700)
  51. color: var(--color-gray-300)
  52. &:hover
  53. background-color: var(--color-gray-600)
  54. .admin-products__btn--danger
  55. background-color: #dc2626
  56. color: var(--color-white)
  57. &:hover
  58. background-color: #b91c1c
  59. .admin-products__btn--edit
  60. background-color: #dbeafe
  61. color: #1e40af
  62. &:hover
  63. background-color: #bfdbfe
  64. .dark &
  65. background-color: #1e3a8a
  66. color: #93c5fd
  67. &:hover
  68. background-color: #1e40af
  69. // Content area
  70. .admin-products__content
  71. background-color: var(--color-white)
  72. border-radius: 0.5rem
  73. box-shadow: 0 1px 3px 0 var(--color-shadow-light)
  74. padding: 1.5rem
  75. .dark &
  76. background-color: var(--color-gray-800)
  77. // Filters
  78. .admin-products__filters
  79. display: grid
  80. grid-template-columns: 1fr
  81. gap: 1rem
  82. margin-bottom: 1.5rem
  83. @media (min-width: 768px)
  84. grid-template-columns: repeat(3, 1fr)
  85. .admin-products__filter-group
  86. display: flex
  87. flex-direction: column
  88. gap: 0.5rem
  89. .admin-products__label
  90. display: block
  91. font-size: 0.875rem
  92. font-weight: 500
  93. color: var(--color-gray-700)
  94. .dark &
  95. color: var(--color-gray-300)
  96. .admin-products__input
  97. width: 100%
  98. padding: 0.5rem 0.75rem
  99. border: 1px solid var(--color-gray-300)
  100. border-radius: 0.5rem
  101. background-color: var(--color-white)
  102. color: var(--color-gray-900)
  103. font-size: 0.875rem
  104. transition: all 0.2s ease-in-out
  105. &:focus
  106. outline: none
  107. border-color: var(--color-primary-500)
  108. box-shadow: 0 0 0 2px var(--color-primary-500-a20)
  109. .dark &
  110. background-color: var(--color-gray-700)
  111. color: var(--color-white)
  112. border-color: var(--color-gray-600)
  113. &:focus
  114. border-color: var(--color-primary-500)
  115. .admin-products__select
  116. @extend .admin-products__input
  117. .admin-products__textarea
  118. @extend .admin-products__input
  119. resize: vertical
  120. min-height: 5rem
  121. // Table styles
  122. .admin-products__table-container
  123. overflow-x: auto
  124. .admin-products__table
  125. width: 100%
  126. border-collapse: collapse
  127. background-color: var(--color-white)
  128. .dark &
  129. background-color: var(--color-gray-800)
  130. .admin-products__th
  131. background-color: var(--color-gray-50)
  132. padding: 0.75rem 1rem
  133. text-align: left
  134. font-size: 0.75rem
  135. font-weight: 500
  136. color: var(--color-gray-500)
  137. text-transform: uppercase
  138. letter-spacing: 0.05em
  139. border-bottom: 1px solid var(--color-gray-200)
  140. .dark &
  141. background-color: var(--color-gray-700)
  142. color: var(--color-gray-300)
  143. border-bottom-color: var(--color-gray-600)
  144. .admin-products__tr
  145. &:hover
  146. background-color: var(--color-background-hover)
  147. .dark &
  148. background-color: var(--color-dark-background-hover)
  149. .admin-products__td
  150. padding: 0.75rem 1rem
  151. border-bottom: 1px solid var(--color-gray-200)
  152. font-size: 0.875rem
  153. .dark &
  154. border-bottom-color: var(--color-gray-600)
  155. .admin-products__image
  156. width: 2.5rem
  157. height: 2.5rem
  158. object-fit: cover
  159. border-radius: 0.25rem
  160. .admin-products__no-image
  161. width: 2.5rem
  162. height: 2.5rem
  163. background-color: var(--color-gray-200)
  164. border-radius: 0.25rem
  165. display: flex
  166. align-items: center
  167. justify-content: center
  168. font-size: 0.75rem
  169. color: var(--color-gray-500)
  170. .dark &
  171. background-color: var(--color-gray-600)
  172. color: var(--color-gray-400)
  173. .admin-products__name
  174. font-weight: 500
  175. color: var(--color-gray-900)
  176. .dark &
  177. color: var(--color-white)
  178. .admin-products__price
  179. font-weight: 500
  180. color: #16a34a
  181. .dark &
  182. color: #4ade80
  183. .admin-products__old-price
  184. font-size: 0.75rem
  185. color: var(--color-gray-500)
  186. text-decoration: line-through
  187. .dark &
  188. color: var(--color-gray-400)
  189. .admin-products__status
  190. padding: 0.25rem 0.5rem
  191. border-radius: 0.25rem
  192. font-size: 0.75rem
  193. font-weight: 500
  194. .admin-products__status--active
  195. background-color: var(--color-primary-500-a10)
  196. color: #16a34a
  197. .dark &
  198. background-color: #14532d
  199. color: #4ade80
  200. .admin-products__status--inactive
  201. background-color: var(--color-primary-500-a10)
  202. color: #dc2626
  203. .dark &
  204. background-color: #7f1d1d
  205. color: #fca5a5
  206. .admin-products__action-buttons
  207. display: flex
  208. gap: 0.5rem
  209. .admin-products__action-btn
  210. padding: 0.25rem 0.5rem
  211. border-radius: 0.25rem
  212. font-size: 0.75rem
  213. font-weight: 500
  214. transition: all 0.2s ease-in-out
  215. border: none
  216. cursor: pointer
  217. .admin-products__action-btn--edit
  218. background-color: var(--color-accent-500-a20)
  219. color: #1e40af
  220. &:hover
  221. background-color: var(--color-accent-500-a30)
  222. .dark &
  223. background-color: #1e3a8a
  224. color: #93c5fd
  225. &:hover
  226. background-color: #1e40af
  227. .admin-products__action-btn--toggle
  228. background-color: var(--color-gray-100)
  229. color: var(--color-gray-700)
  230. &:hover
  231. background-color: var(--color-gray-200)
  232. .dark &
  233. background-color: var(--color-gray-600)
  234. color: var(--color-gray-300)
  235. &:hover
  236. background-color: var(--color-gray-500)
  237. .admin-products__action-btn--delete
  238. background-color: var(--color-primary-500-a10)
  239. color: #dc2626
  240. &:hover
  241. background-color: var(--color-primary-500-a20)
  242. .dark &
  243. background-color: #7f1d1d
  244. color: #fca5a5
  245. &:hover
  246. background-color: #991b1b
  247. // Modal styles
  248. .admin-products__modal
  249. position: fixed
  250. inset: 0
  251. background-color: var(--color-background-overlay)
  252. display: flex
  253. align-items: center
  254. justify-content: center
  255. z-index: 50
  256. .admin-products__modal-content
  257. background-color: var(--color-white)
  258. border-radius: 0.5rem
  259. padding: 1.5rem
  260. max-width: 48rem
  261. width: 100%
  262. margin: 0 1rem
  263. max-height: 90vh
  264. overflow-y: auto
  265. .dark &
  266. background-color: var(--color-gray-800)
  267. &.admin-products__modal-content--large
  268. max-width: 64rem
  269. .admin-products__modal-title
  270. font-size: 1.125rem
  271. font-weight: 500
  272. color: var(--color-gray-900)
  273. margin-bottom: 1rem
  274. .dark &
  275. color: var(--color-white)
  276. .admin-products__modal-form
  277. display: flex
  278. flex-direction: column
  279. gap: 1rem
  280. margin-bottom: 1.5rem
  281. .admin-products__form-group
  282. display: flex
  283. flex-direction: column
  284. gap: 0.5rem
  285. // Image upload styles
  286. .admin-products__image-upload
  287. display: flex
  288. flex-direction: column
  289. gap: 0.75rem
  290. .admin-products__image-preview
  291. position: relative
  292. width: 100%
  293. max-width: 200px
  294. border: 1px solid var(--color-gray-300)
  295. border-radius: 0.5rem
  296. overflow: hidden
  297. &.admin-products__image-preview--small
  298. max-width: 100px
  299. .dark &
  300. border-color: var(--color-gray-600)
  301. .admin-products__preview-image
  302. width: 100%
  303. height: auto
  304. display: block
  305. .admin-products__image-placeholder
  306. padding: 2rem
  307. background-color: var(--color-gray-100)
  308. border: 1px dashed var(--color-gray-300)
  309. border-radius: 0.5rem
  310. text-align: center
  311. color: var(--color-gray-500)
  312. font-size: 0.875rem
  313. .dark &
  314. background-color: var(--color-gray-700)
  315. border-color: var(--color-gray-600)
  316. color: var(--color-gray-400)
  317. .admin-products__file-input
  318. display: none
  319. // Checkbox and domain styles
  320. .admin-products__checkbox-label
  321. display: flex
  322. align-items: center
  323. gap: 0.5rem
  324. color: var(--color-gray-700)
  325. font-size: 0.875rem
  326. .dark &
  327. color: var(--color-gray-300)
  328. .admin-products__checkbox
  329. border-radius: 0.25rem
  330. border: 1px solid var(--color-gray-300)
  331. background-color: var(--color-white)
  332. color: var(--color-primary-600)
  333. &:focus
  334. border-color: var(--color-primary-500)
  335. box-shadow: 0 0 0 2px var(--color-primary-500-a20)
  336. .dark &
  337. background-color: var(--color-gray-700)
  338. border-color: var(--color-gray-600)
  339. .admin-products__domains-list
  340. display: grid
  341. grid-template-columns: repeat(2, 1fr)
  342. gap: 0.5rem
  343. .admin-products__domain-label
  344. display: flex
  345. align-items: center
  346. gap: 0.5rem
  347. font-size: 0.875rem
  348. color: var(--color-gray-700)
  349. .dark &
  350. color: var(--color-gray-300)
  351. .admin-products__domain-checkbox
  352. border-radius: 0.25rem
  353. border: 1px solid var(--color-gray-300)
  354. background-color: var(--color-white)
  355. color: var(--color-primary-600)
  356. &:focus
  357. border-color: var(--color-primary-500)
  358. box-shadow: 0 0 0 2px var(--color-primary-500-a20)
  359. .dark &
  360. background-color: var(--color-gray-700)
  361. border-color: var(--color-gray-600)
  362. .admin-products__modal-actions
  363. display: flex
  364. gap: 0.75rem
  365. justify-content: flex-end
  366. // Import form styles
  367. .admin-products__import-form
  368. display: flex
  369. flex-direction: column
  370. gap: 1rem
  371. margin-bottom: 1.5rem
  372. .admin-products__help-text
  373. font-size: 0.75rem
  374. color: var(--color-gray-500)
  375. margin-top: 0.25rem
  376. .dark &
  377. color: var(--color-gray-400)
  378. .admin-products__file-info
  379. padding: 1rem
  380. background-color: var(--color-gray-50)
  381. border-radius: 0.5rem
  382. .dark &
  383. background-color: var(--color-gray-700)
  384. .admin-products__import-results
  385. padding: 1rem
  386. border-radius: 0.5rem
  387. .admin-products__success
  388. color: #16a34a
  389. font-weight: 500
  390. margin-bottom: 0.5rem
  391. .dark &
  392. color: #4ade80
  393. .admin-products__error
  394. color: #dc2626
  395. font-weight: 500
  396. margin-bottom: 0.5rem
  397. .dark &
  398. color: #fca5a5
  399. // Categories management styles
  400. .admin-products__categories-tabs
  401. display: flex
  402. gap: 0
  403. border-bottom: 1px solid var(--color-gray-200)
  404. margin-bottom: 1.5rem
  405. .dark &
  406. border-bottom-color: var(--color-gray-700)
  407. .admin-products__categories-tab
  408. padding: 0.75rem 1.5rem
  409. background: none
  410. border: none
  411. border-bottom: 2px solid transparent
  412. color: var(--color-gray-600)
  413. font-weight: 500
  414. cursor: pointer
  415. transition: all 0.2s ease-in-out
  416. &:hover
  417. color: var(--color-gray-900)
  418. .dark &
  419. color: var(--color-gray-400)
  420. &:hover
  421. color: var(--color-white)
  422. &.admin-products__categories-tab--active
  423. color: var(--color-primary-600)
  424. border-bottom-color: var(--color-primary-600)
  425. .dark &
  426. color: var(--color-primary-400)
  427. border-bottom-color: var(--color-primary-400)
  428. .admin-products__categories-header
  429. display: flex
  430. justify-content: space-between
  431. align-items: center
  432. margin-bottom: 1.5rem
  433. .admin-products__categories-grid
  434. display: grid
  435. grid-template-columns: repeat(auto-fill, minmax(300px, 1fr))
  436. gap: 1rem
  437. .admin-products__category-item
  438. background-color: var(--color-gray-50)
  439. border: 1px solid var(--color-gray-200)
  440. border-radius: 0.5rem
  441. overflow: hidden
  442. .dark &
  443. background-color: var(--color-gray-700)
  444. border-color: var(--color-gray-600)
  445. .admin-products__category-preview
  446. padding: 1rem
  447. .admin-products__category-image
  448. width: 100%
  449. height: 120px
  450. object-fit: cover
  451. border-radius: 0.375rem
  452. margin-bottom: 0.75rem
  453. .admin-products__category-no-image
  454. width: 100%
  455. height: 120px
  456. background-color: var(--color-gray-200)
  457. border-radius: 0.375rem
  458. display: flex
  459. align-items: center
  460. justify-content: center
  461. color: var(--color-gray-500)
  462. font-size: 0.875rem
  463. margin-bottom: 0.75rem
  464. .dark &
  465. background-color: var(--color-gray-600)
  466. color: var(--color-gray-400)
  467. .admin-products__category-info
  468. text-align: center
  469. .admin-products__category-name
  470. font-weight: 600
  471. color: var(--color-gray-900)
  472. margin-bottom: 0.5rem
  473. .dark &
  474. color: var(--color-white)
  475. .admin-products__category-description
  476. color: var(--color-gray-600)
  477. font-size: 0.875rem
  478. margin-bottom: 0.75rem
  479. line-height: 1.4
  480. .dark &
  481. color: var(--color-gray-400)
  482. .admin-products__category-meta
  483. display: flex
  484. justify-content: space-between
  485. align-items: center
  486. font-size: 0.75rem
  487. .admin-products__category-products
  488. color: var(--color-gray-500)
  489. .dark &
  490. color: var(--color-gray-400)
  491. .admin-products__category-actions
  492. display: flex
  493. gap: 0.5rem
  494. padding: 0.75rem
  495. border-top: 1px solid var(--color-gray-200)
  496. background-color: var(--color-white)
  497. .dark &
  498. border-top-color: var(--color-gray-600)
  499. background-color: var(--color-gray-800)
  500. // Responsive adjustments
  501. @media (max-width: 768px)
  502. .admin-products__header
  503. flex-direction: column
  504. align-items: flex-start
  505. gap: 1rem
  506. .admin-products__actions
  507. width: 100%
  508. justify-content: flex-start
  509. flex-wrap: wrap
  510. .admin-products__filters
  511. grid-template-columns: 1fr
  512. .admin-products__action-buttons
  513. flex-direction: column
  514. .admin-products__action-btn
  515. text-align: center
  516. .admin-products__modal-content
  517. margin: 0 0.5rem
  518. padding: 1rem
  519. .admin-products__categories-grid
  520. grid-template-columns: 1fr
  521. .admin-products__domains-list
  522. grid-template-columns: 1fr
  523. .admin-products__categories-tabs
  524. flex-direction: column
  525. .admin-products__categories-tab
  526. text-align: center
  527. @media (max-width: 480px)
  528. .admin-products__category-meta
  529. flex-direction: column
  530. gap: 0.5rem
  531. align-items: flex-start