| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680 |
- // Переменные цветов
- $primary-50 = #fef2f2
- $primary-100 = #fee2e2
- $primary-200 = #fecaca
- $primary-300 = #fca5a5
- $primary-400 = #f87171
- $primary-500 = #ef4444
- $primary-600 = #dc2626
- $primary-700 = #b91c1c
- $primary-800 = #991b1b
- $primary-900 = #7f1d1d
- $accent-50 = #f0f9ff
- $accent-100 = #e0f2fe
- $accent-200 = #bae6fd
- $accent-300 = #7dd3fc
- $accent-400 = #38bdf8
- $accent-500 = #0ea5e9
- $accent-600 = #0284c7
- $accent-700 = #0369a1
- $accent-800 = #075985
- $accent-900 = #0c4a6e
- $gray-50 = #f9fafb
- $gray-100 = #f3f4f6
- $gray-200 = #e5e7eb
- $gray-300 = #d1d5db
- $gray-400 = #9ca3af
- $gray-500 = #6b7280
- $gray-600 = #4b5563
- $gray-700 = #374151
- $gray-800 = #1f2937
- $gray-900 = #111827
- $white = #ffffff
- $black = #000000
- // Типографика
- $font-family-sans = 'Inter', 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif
- $font-family-serif = 'Georgia', 'Times New Roman', serif
- $font-family-mono = 'SF Mono', 'Fira Code', 'Consolas', 'Liberation Mono', monospace
- $font-size-xs = 0.75rem // 12px
- $font-size-sm = 0.875rem // 14px
- $font-size-base = 1rem // 16px
- $font-size-lg = 1.125rem // 18px
- $font-size-xl = 1.25rem // 20px
- $font-size-2xl = 1.5rem // 24px
- $font-size-3xl = 1.875rem // 30px
- $font-size-4xl = 2.25rem // 36px
- $font-size-5xl = 3rem // 48px
- $font-weight-light = 300
- $font-weight-normal = 400
- $font-weight-medium = 500
- $font-weight-semibold = 600
- $font-weight-bold = 700
- $font-weight-extrabold = 800
- $line-height-tight = 1.25
- $line-height-normal = 1.5
- $line-height-relaxed = 1.75
- $letter-spacing-tight = -0.025em
- $letter-spacing-normal = 0
- $letter-spacing-wide = 0.025em
- // Макеты и отступы
- $spacing-1 = 0.25rem // 4px
- $spacing-2 = 0.5rem // 8px
- $spacing-3 = 0.75rem // 12px
- $spacing-4 = 1rem // 16px
- $spacing-5 = 1.25rem // 20px
- $spacing-6 = 1.5rem // 24px
- $spacing-8 = 2rem // 32px
- $spacing-10 = 2.5rem // 40px
- $spacing-12 = 3rem // 48px
- $spacing-16 = 4rem // 64px
- $spacing-20 = 5rem // 80px
- // Брейкпоинты
- $breakpoint-sm = 640px
- $breakpoint-md = 768px
- $breakpoint-lg = 1024px
- $breakpoint-xl = 1280px
- $breakpoint-2xl = 1536px
- // Тени
- $shadow-sm = 0 1px 2px 0 rgba(0, 0, 0, 0.05)
- $shadow-base = 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)
- $shadow-md = 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)
- $shadow-lg = 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)
- $shadow-xl = 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)
- // Скругления
- $radius-sm = 0.125rem
- $radius-base = 0.25rem
- $radius-md = 0.375rem
- $radius-lg = 0.5rem
- $radius-xl = 0.75rem
- $radius-2xl = 1rem
- $radius-full = 9999px
- // Миксины
- flex-center()
- display: flex
- align-items: center
- justify-content: center
- flex-between()
- display: flex
- align-items: center
- justify-content: space-between
- flex-col()
- display: flex
- flex-direction: column
- container()
- max-width: 1200px
- margin: 0 auto
- padding: 0 $spacing-4
- transition-all($duration = 0.3s)
- transition: all $duration ease-in-out
- text-ellipsis()
- overflow: hidden
- text-overflow: ellipsis
- white-space: nowrap
- // Базовые сбросы
- *
- margin: 0
- padding: 0
- box-sizing: border-box
- html
- font-size: 16px
- line-height: $line-height-normal
- -webkit-text-size-adjust: 100%
- scroll-behavior: smooth
- body
- font-family: $font-family-sans
- font-size: $font-size-base
- font-weight: $font-weight-normal
- line-height: $line-height-normal
- color: $gray-900
- background-color: $white
- -webkit-font-smoothing: antialiased
- -moz-osx-font-smoothing: grayscale
- .dark &
- color: $white
- background-color: $gray-900
- // Типографические классы
- .text-xs
- font-size: $font-size-xs
- line-height: $line-height-tight
- .text-sm
- font-size: $font-size-sm
- line-height: $line-height-tight
- .text-base
- font-size: $font-size-base
- line-height: $line-height-normal
- .text-lg
- font-size: $font-size-lg
- line-height: $line-height-normal
- .text-xl
- font-size: $font-size-xl
- line-height: $line-height-normal
- .text-2xl
- font-size: $font-size-2xl
- line-height: $line-height-tight
- .text-3xl
- font-size: $font-size-3xl
- line-height: $line-height-tight
- .text-4xl
- font-size: $font-size-4xl
- line-height: $line-height-tight
- .text-5xl
- font-size: $font-size-5xl
- line-height: 1
- .font-light
- font-weight: $font-weight-light
- .font-normal
- font-weight: $font-weight-normal
- .font-medium
- font-weight: $font-weight-medium
- .font-semibold
- font-weight: $font-weight-semibold
- .font-bold
- font-weight: $font-weight-bold
- .font-extrabold
- font-weight: $font-weight-extrabold
- .leading-tight
- line-height: $line-height-tight
- .leading-normal
- line-height: $line-height-normal
- .leading-relaxed
- line-height: $line-height-relaxed
- .tracking-tight
- letter-spacing: $letter-spacing-tight
- .tracking-normal
- letter-spacing: $letter-spacing-normal
- .tracking-wide
- letter-spacing: $letter-spacing-wide
- .text-center
- text-align: center
- .text-left
- text-align: left
- .text-right
- text-align: right
- // Базовые стили приложения
- #app
- min-height: 100vh
- background-color: $white
- display: flex
- flex-direction: column
- .dark &
- background-color: $gray-900
- // Header
- .header
- background-color: $white
- box-shadow: $shadow-sm
- position: sticky
- top: 0
- z-index: 100
- border-bottom: 1px solid $gray-200
- .dark &
- background-color: $gray-800
- border-bottom-color: $gray-700
- .header__nav
- container()
- padding-top: $spacing-3
- padding-bottom: $spacing-3
- .header__nav-block
- flex-between()
- gap: $spacing-4
- .header__nav-name
- font-size: $font-size-2xl
- font-weight: $font-weight-bold
- background: linear-gradient(135deg, $primary-500, $accent-500)
- -webkit-background-clip: text
- -webkit-text-fill-color: transparent
- background-clip: text
- letter-spacing: $letter-spacing-tight
- .header__nav-menu
- display: flex
- align-items: center
- gap: $spacing-4
- .header__menu-item
- display: flex
- align-items: center
- .header__menu-link
- font-size: $font-size-sm
- font-weight: $font-weight-medium
- color: $gray-600
- text-decoration: none
- padding: $spacing-2 $spacing-3
- border-radius: $radius-md
- transition: all 0.2s ease-in-out
- position: relative
- &:hover
- color: $primary-600
- background-color: $primary-50
- .dark &
- color: $gray-300
- &:hover
- color: $primary-400
- background-color: $primary-900
- .header__theme-toggle
- padding: $spacing-2
- border-radius: $radius-md
- background-color: $gray-100
- color: $gray-600
- transition: all 0.2s ease-in-out
- border: none
- cursor: pointer
- flex-center()
- width: 2.5rem
- height: 2.5rem
- &:hover
- background-color: $gray-200
- transform: scale(1.05)
- .dark &
- background-color: $gray-700
- color: $gray-300
- &:hover
- background-color: $gray-600
- // Main content
- .main
- flex: 1
- display: flex
- flex-direction: column
- // Page transitions
- .page-slide
- &-enter-active,
- &-leave-active
- transition: all 0.3s ease-in-out
- &-enter-from
- opacity: 0
- transform: translateX($spacing-4)
- &-leave-to
- opacity: 0
- transform: translateX(-$spacing-4)
- // Footer
- .footer
- background: linear-gradient(135deg, $gray-800, $gray-900)
- color: $white
- padding: $spacing-12 0 $spacing-8
- margin-top: auto
- .dark &
- background: linear-gradient(135deg, $gray-900, $black)
- .footer__content
- container()
- .footer__sections
- display: grid
- grid-template-columns: 1fr
- gap: $spacing-8
- margin-bottom: $spacing-8
- @media (min-width: $breakpoint-md)
- grid-template-columns: repeat(3, 1fr)
- .footer__section
- flex-col()
- gap: $spacing-4
- .footer__section-title
- font-size: $font-size-lg
- font-weight: $font-weight-semibold
- color: $white
- margin-bottom: $spacing-2
- .footer__section-text
- font-size: $font-size-sm
- color: $gray-400
- line-height: $line-height-relaxed
- .footer__links
- flex-col()
- gap: $spacing-2
- .footer__link
- font-size: $font-size-sm
- color: $gray-400
- text-decoration: none
- transition: color 0.2s ease-in-out
- padding: $spacing-1 0
- &:hover
- color: $white
- transform: translateX($spacing-1)
- .footer__bottom
- border-top: 1px solid $gray-700
- padding-top: $spacing-6
- text-align: center
- .footer__copyright
- font-size: $font-size-sm
- color: $gray-500
- // Утилитарные классы
- .btn
- display: inline-flex
- align-items: center
- justify-content: center
- padding: $spacing-2 $spacing-4
- border-radius: $radius-lg
- font-size: $font-size-sm
- font-weight: $font-weight-medium
- text-decoration: none
- border: none
- cursor: pointer
- transition: all 0.2s ease-in-out
- gap: $spacing-2
- position: relative
- overflow: hidden
- &:focus
- outline: none
- box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2)
- &::before
- content: ''
- position: absolute
- top: 0
- left: -100%
- width: 100%
- height: 100%
- background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent)
- transition: left 0.5s
- &:hover::before
- left: 100%
- .btn-primary
- background: linear-gradient(135deg, $primary-500, $primary-600)
- color: $white
- box-shadow: $shadow-md
- &:hover
- transform: translateY(-1px)
- box-shadow: $shadow-lg
- .btn-secondary
- background-color: $gray-100
- color: $gray-700
- border: 1px solid $gray-300
- &:hover
- background-color: $gray-200
- transform: translateY(-1px)
- .dark &
- background-color: $gray-700
- color: $gray-300
- border-color: $gray-600
- &:hover
- background-color: $gray-600
- .btn-outline
- background-color: transparent
- color: $primary-600
- border: 2px solid $primary-500
- &:hover
- background-color: $primary-500
- color: $white
- transform: translateY(-1px)
- .card
- background-color: $white
- border-radius: $radius-xl
- box-shadow: $shadow-base
- border: 1px solid $gray-200
- overflow: hidden
- transition: all 0.3s ease-in-out
- .dark &
- background-color: $gray-800
- border-color: $gray-700
- &:hover
- transform: translateY(-2px)
- box-shadow: $shadow-lg
- .card__header
- padding: $spacing-6
- border-bottom: 1px solid $gray-200
- .dark &
- border-bottom-color: $gray-700
- .card__title
- font-size: $font-size-xl
- font-weight: $font-weight-semibold
- color: $gray-900
- margin-bottom: $spacing-2
- .dark &
- color: $white
- .card__content
- padding: $spacing-6
- .card__footer
- padding: $spacing-6
- border-top: 1px solid $gray-200
- background-color: $gray-50
- .dark &
- border-top-color: $gray-700
- background-color: $gray-700
- .form-group
- flex-col()
- gap: $spacing-2
- margin-bottom: $spacing-4
- .form-label
- font-size: $font-size-sm
- font-weight: $font-weight-medium
- color: $gray-700
- display: block
- .dark &
- color: $gray-300
- .form-input
- width: 100%
- padding: $spacing-3
- border: 2px solid $gray-300
- border-radius: $radius-lg
- background-color: $white
- color: $gray-900
- font-size: $font-size-base
- font-family: $font-family-sans
- transition: all 0.2s ease-in-out
- &:focus
- outline: none
- border-color: $primary-500
- box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1)
- transform: translateY(-1px)
- .dark &
- background-color: $gray-700
- color: $white
- border-color: $gray-600
- &:focus
- border-color: $primary-500
- .form-textarea
- @extend .form-input
- resize: vertical
- min-height: 6rem
- line-height: $line-height-relaxed
- .form-select
- @extend .form-input
- // Сетка
- .grid
- display: grid
- gap: $spacing-6
- .grid-cols-1
- grid-template-columns: 1fr
- .grid-cols-2
- grid-template-columns: repeat(2, 1fr)
- .grid-cols-3
- grid-template-columns: repeat(3, 1fr)
- .grid-cols-4
- grid-template-columns: repeat(4, 1fr)
- @media (min-width: $breakpoint-sm)
- .sm\:grid-cols-2
- grid-template-columns: repeat(2, 1fr)
- @media (min-width: $breakpoint-md)
- .md\:grid-cols-2
- grid-template-columns: repeat(2, 1fr)
- .md\:grid-cols-3
- grid-template-columns: repeat(3, 1fr)
- @media (min-width: $breakpoint-lg)
- .lg\:grid-cols-3
- grid-template-columns: repeat(3, 1fr)
- .lg\:grid-cols-4
- grid-template-columns: repeat(4, 1fr)
- // Отступы
- .p-0 { padding: 0 }
- .p-1 { padding: $spacing-1 }
- .p-2 { padding: $spacing-2 }
- .p-3 { padding: $spacing-3 }
- .p-4 { padding: $spacing-4 }
- .p-6 { padding: $spacing-6 }
- .p-8 { padding: $spacing-8 }
- .py-2 { padding-top: $spacing-2; padding-bottom: $spacing-2 }
- .py-3 { padding-top: $spacing-3; padding-bottom: $spacing-3 }
- .py-4 { padding-top: $spacing-4; padding-bottom: $spacing-4 }
- .py-6 { padding-top: $spacing-6; padding-bottom: $spacing-6 }
- .py-8 { padding-top: $spacing-8; padding-bottom: $spacing-8 }
- .px-3 { padding-left: $spacing-3; padding-right: $spacing-3 }
- .px-4 { padding-left: $spacing-4; padding-right: $spacing-4 }
- .px-6 { padding-left: $spacing-6; padding-right: $spacing-6 }
- // Маржины
- .m-0 { margin: 0 }
- .m-4 { margin: $spacing-4 }
- .m-6 { margin: $spacing-6 }
- .mt-2 { margin-top: $spacing-2 }
- .mt-4 { margin-top: $spacing-4 }
- .mt-6 { margin-top: $spacing-6 }
- .mt-8 { margin-top: $spacing-8 }
- .mb-2 { margin-bottom: $spacing-2 }
- .mb-4 { margin-bottom: $spacing-4 }
- .mb-6 { margin-bottom: $spacing-6 }
- .mb-8 { margin-bottom: $spacing-8 }
- // Темная тема
- @media (prefers-color-scheme: dark)
- :root
- color-scheme: dark
- // Адаптивность
- @media (max-width: $breakpoint-md)
- .header__nav-block
- flex-direction: column
- gap: $spacing-3
- .header__nav-menu
- width: 100%
- justify-content: center
- flex-wrap: wrap
- .footer__sections
- grid-template-columns: 1fr
- gap: $spacing-6
- @media (max-width: $breakpoint-sm)
- .header__nav-name
- font-size: $font-size-xl
- text-align: center
- .header__menu-link
- padding: $spacing-1 $spacing-2
- font-size: $font-size-xs
- .btn
- padding: $spacing-2 $spacing-3
- font-size: $font-size-xs
- .card__header,
- .card__content,
- .card__footer
- padding: $spacing-4
|