index.styl 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. // CSS переменные вместо rgba функций
  2. :root
  3. // Основные цвета
  4. --color-primary: #2c5aa0
  5. --color-secondary: #6c757d
  6. --color-success: #28a745
  7. --color-danger: #dc3545
  8. --color-warning: #ffc107
  9. --color-info: #17a2b8
  10. --color-light: #f8f9fa
  11. --color-dark: #343a40
  12. --color-white: #ffffff
  13. --color-black: #000000
  14. // Прозрачные варианты
  15. --color-primary-10: #2c5aa01a
  16. --color-primary-20: #2c5aa033
  17. --color-primary-50: #2c5aa080
  18. --color-dark-10: #343a401a
  19. --color-dark-20: #343a4033
  20. --color-dark-50: #343a4080
  21. --color-dark-80: #343a40cc
  22. --color-light-10: #f8f9fa1a
  23. --color-light-50: #f8f9fa80
  24. --color-light-80: #f8f9facc
  25. // Тени
  26. --shadow-sm: 0 1px 2px var(--color-dark-10)
  27. --shadow-md: 0 4px 6px var(--color-dark-10)
  28. --shadow-lg: 0 10px 15px var(--color-dark-10)
  29. --shadow-xl: 0 20px 25px var(--color-dark-10)
  30. // Границы
  31. --border-radius: 8px
  32. --border-radius-sm: 4px
  33. --border-radius-lg: 12px
  34. --border-width: 1px
  35. --border-color: var(--color-dark-10)
  36. // Типографика
  37. --font-family: 'Inter', 'Segoe UI', system-ui, sans-serif
  38. --font-size-xs: 0.75rem
  39. --font-size-sm: 0.875rem
  40. --font-size-base: 1rem
  41. --font-size-lg: 1.125rem
  42. --font-size-xl: 1.25rem
  43. --font-size-2xl: 1.5rem
  44. --font-size-3xl: 1.875rem
  45. --font-weight-light: 300
  46. --font-weight-normal: 400
  47. --font-weight-medium: 500
  48. --font-weight-semibold: 600
  49. --font-weight-bold: 700
  50. --line-height-tight: 1.25
  51. --line-height-normal: 1.5
  52. --line-height-relaxed: 1.75
  53. // Отступы
  54. --spacing-xs: 0.25rem
  55. --spacing-sm: 0.5rem
  56. --spacing-md: 1rem
  57. --spacing-lg: 1.5rem
  58. --spacing-xl: 2rem
  59. --spacing-2xl: 3rem
  60. // Транзишены
  61. --transition-fast: all 0.15s ease
  62. --transition-normal: all 0.3s ease
  63. --transition-slow: all 0.5s ease
  64. // Z-индексы
  65. --z-dropdown: 1000
  66. --z-sticky: 1020
  67. --z-fixed: 1030
  68. --z-modal-backdrop: 1040
  69. --z-modal: 1050
  70. --z-popover: 1060
  71. --z-tooltip: 1070
  72. --z-notification: 1080
  73. // Темная тема
  74. .dark
  75. --color-light: #343a40
  76. --color-dark: #f8f9fa
  77. --color-white: #1a1a1a
  78. --color-black: #ffffff
  79. --color-dark-10: #f8f9fa1a
  80. --color-dark-50: #f8f9fa80
  81. --color-light-10: #343a401a
  82. --color-light-50: #343a4080
  83. // Базовые сбросы
  84. *, *::before, *::after
  85. box-sizing: border-box
  86. margin: 0
  87. padding: 0
  88. html
  89. font-size: 16px
  90. line-height: var(--line-height-normal)
  91. -webkit-text-size-adjust: 100%
  92. -webkit-tap-highlight-color: transparent
  93. body
  94. font-family: var(--font-family)
  95. font-weight: var(--font-weight-normal)
  96. color: var(--color-dark)
  97. background-color: var(--color-light)
  98. transition: var(--transition-normal)
  99. min-height: 100vh
  100. // Базовые стили приложения
  101. .app
  102. min-height: 100vh
  103. display: flex
  104. flex-direction: column
  105. transition: var(--transition-normal)
  106. background: var(--color-light)
  107. color: var(--color-dark)
  108. &.theme-dark
  109. background: var(--color-dark)
  110. color: var(--color-light)
  111. // Хедер
  112. .header
  113. display: flex
  114. align-items: center
  115. justify-content: space-between
  116. padding: var(--spacing-md) var(--spacing-xl)
  117. background: var(--color-light)
  118. box-shadow: var(--shadow-sm)
  119. border-bottom: var(--border-width) solid var(--border-color)
  120. position: sticky
  121. top: 0
  122. z-index: var(--z-sticky)
  123. .theme-dark &
  124. background: var(--color-dark)
  125. box-shadow: var(--shadow-md)
  126. .header-nav
  127. display: flex
  128. align-items: center
  129. gap: var(--spacing-lg)
  130. .header-nav-block
  131. display: flex
  132. align-items: center
  133. gap: var(--spacing-md)
  134. .header-nav--name
  135. font-size: var(--font-size-xl)
  136. font-weight: var(--font-weight-bold)
  137. color: var(--color-primary)
  138. .header-nav--menu
  139. display: flex
  140. align-items: center
  141. gap: var(--spacing-sm)
  142. // Основной контент
  143. .main-content
  144. flex: 1
  145. padding: var(--spacing-xl)
  146. min-height: calc(100vh - 80px)
  147. // Анимации страниц
  148. .page-slide-enter-active,
  149. .page-slide-leave-active
  150. transition: var(--transition-normal)
  151. .page-slide-enter-from
  152. opacity: 0
  153. transform: translateX(30px)
  154. .page-slide-leave-to
  155. opacity: 0
  156. transform: translateX(-30px)
  157. // Утилитарные классы
  158. .text-center
  159. text-align: center
  160. .text-left
  161. text-align: left
  162. .text-right
  163. text-align: right
  164. .d-flex
  165. display: flex
  166. .flex-column
  167. flex-direction: column
  168. .align-items-center
  169. align-items: center
  170. .justify-content-center
  171. justify-content: center
  172. .justify-content-between
  173. justify-content: space-between
  174. .w-100
  175. width: 100%
  176. .h-100
  177. height: 100%
  178. .mt-1 { margin-top: var(--spacing-xs) }
  179. .mt-2 { margin-top: var(--spacing-sm) }
  180. .mt-3 { margin-top: var(--spacing-md) }
  181. .mt-4 { margin-top: var(--spacing-lg) }
  182. .mt-5 { margin-top: var(--spacing-xl) }
  183. .mb-1 { margin-bottom: var(--spacing-xs) }
  184. .mb-2 { margin-bottom: var(--spacing-sm) }
  185. .mb-3 { margin-bottom: var(--spacing-md) }
  186. .mb-4 { margin-bottom: var(--spacing-lg) }
  187. .mb-5 { margin-bottom: var(--spacing-xl) }
  188. .p-1 { padding: var(--spacing-xs) }
  189. .p-2 { padding: var(--spacing-sm) }
  190. .p-3 { padding: var(--spacing-md) }
  191. .p-4 { padding: var(--spacing-lg) }
  192. .p-5 { padding: var(--spacing-xl) }
  193. // Адаптивность
  194. @media (max-width: 768px)
  195. .header
  196. padding: var(--spacing-md)
  197. flex-direction: column
  198. gap: var(--spacing-md)
  199. .header-nav
  200. flex-direction: column
  201. gap: var(--spacing-md)
  202. .main-content
  203. padding: var(--spacing-md)
  204. @media (max-width: 480px)
  205. .header-nav-block
  206. flex-direction: column
  207. gap: var(--spacing-sm)
  208. .header-nav--menu
  209. flex-wrap: wrap
  210. justify-content: center