index.styl 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Стили для кнопки
  2. .btn
  3. display: inline-flex
  4. align-items: center
  5. justify-content: center
  6. padding: var(--spacing-sm) var(--spacing-md)
  7. border: var(--border-width) solid transparent
  8. border-radius: var(--border-radius)
  9. font-family: var(--font-family)
  10. font-size: var(--font-size-base)
  11. font-weight: var(--font-weight-medium)
  12. line-height: var(--line-height-tight)
  13. text-decoration: none
  14. cursor: pointer
  15. transition: var(--transition-fast)
  16. background: var(--color-primary)
  17. color: var(--color-white)
  18. position: relative
  19. overflow: hidden
  20. &:hover:not(.btn--disabled):not(.btn--loading)
  21. background: var(--color-primary-50)
  22. transform: translateY(-1px)
  23. box-shadow: var(--shadow-md)
  24. &:active:not(.btn--disabled):not(.btn--loading)
  25. transform: translateY(0)
  26. box-shadow: var(--shadow-sm)
  27. &.btn--disabled
  28. opacity: 0.6
  29. cursor: not-allowed
  30. background: var(--color-secondary)
  31. &.btn--loading
  32. cursor: wait
  33. color: transparent
  34. // Размеры
  35. &.btn--small
  36. padding: var(--spacing-xs) var(--spacing-sm)
  37. font-size: var(--font-size-sm)
  38. &.btn--medium
  39. padding: var(--spacing-sm) var(--spacing-md)
  40. font-size: var(--font-size-base)
  41. &.btn--large
  42. padding: var(--spacing-md) var(--spacing-lg)
  43. font-size: var(--font-size-lg)
  44. font-weight: var(--font-weight-semibold)
  45. // Типы
  46. &.btn--primary
  47. background: var(--color-primary)
  48. border-color: var(--color-primary)
  49. &:hover:not(.btn--disabled):not(.btn--loading)
  50. background: var(--color-primary-50)
  51. border-color: var(--color-primary-50)
  52. &.btn--secondary
  53. background: var(--color-secondary)
  54. border-color: var(--color-secondary)
  55. &:hover:not(.btn--disabled):not(.btn--loading)
  56. background: var(--color-dark-50)
  57. border-color: var(--color-dark-50)
  58. &.btn--success
  59. background: var(--color-success)
  60. border-color: var(--color-success)
  61. &:hover:not(.btn--disabled):not(.btn--loading)
  62. background: #218838
  63. border-color: #1e7e34
  64. &.btn--danger
  65. background: var(--color-danger)
  66. border-color: var(--color-danger)
  67. &:hover:not(.btn--disabled):not(.btn--loading)
  68. background: #c82333
  69. border-color: #bd2130
  70. &.btn--outline
  71. background: transparent
  72. color: var(--color-primary)
  73. border-color: var(--color-primary)
  74. &:hover:not(.btn--disabled):not(.btn--loading)
  75. background: var(--color-primary-10)
  76. color: var(--color-primary)
  77. // Лоадер
  78. .btn__loader
  79. position: absolute
  80. top: 50%
  81. left: 50%
  82. transform: translate(-50%, -50%)
  83. width: 20px
  84. height: 20px
  85. border: 2px solid transparent
  86. border-top: 2px solid var(--color-white)
  87. border-radius: 50%
  88. animation: btn-spin 1s linear infinite
  89. .btn__text
  90. display: flex
  91. align-items: center
  92. gap: var(--spacing-xs)
  93. // Темная тема
  94. .theme-dark
  95. .btn--outline
  96. color: var(--color-light)
  97. border-color: var(--color-light)
  98. &:hover:not(.btn--disabled):not(.btn--loading)
  99. background: var(--color-light-10)
  100. color: var(--color-light)
  101. // Анимация лоадера
  102. @keyframes btn-spin
  103. 0%
  104. transform: translate(-50%, -50%) rotate(0deg)
  105. 100%
  106. transform: translate(-50%, -50%) rotate(360deg)
  107. // Адаптивность
  108. @media (max-width: 768px)
  109. .btn
  110. width: 100%
  111. justify-content: center
  112. &.btn--small,
  113. &.btn--medium,
  114. &.btn--large
  115. width: 100%