| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375 |
- // Переменные цветов
- $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
- // Миксины
- flex-center()
- display: flex
- align-items: center
- justify-content: center
- flex-between()
- display: flex
- align-items: center
- justify-content: space-between
- transition-all($duration = 0.3s)
- transition: all $duration ease-in-out
- // Базовые стили
- #app
- min-height: 100vh
- background-color: $white
- &.dark
- background-color: $gray-900
- transition: background-color 0.3s ease-in-out
- // Header
- .header
- background-color: $white
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)
- position: sticky
- top: 0
- z-index: 50
- .dark &
- background-color: $gray-800
- .header__nav
- max-width: 1200px
- margin: 0 auto
- padding: 0.75rem 1rem
- .header__nav-block
- flex-between()
- .header__brand
- display: flex
- align-items: center
- gap: 0.75rem
- .header__logo
- width: auto
- height: 5rem
- object-fit: contain
- .header__nav-name
- font-size: 1.5rem
- font-weight: bold
- color: $gray-900
- .dark &
- color: $white
- .header__nav-menu
- display: flex
- align-items: center
- gap: 1rem
- .header__menu-item
- display: flex
- align-items: center
- .header__menu-link
- color: $gray-600
- transition: color 0.2s ease-in-out
- text-decoration: none
- &:hover
- color: $primary-500
- .dark &
- color: $gray-300
- &:hover
- color: $primary-500
- .header__theme-toggle
- padding: 0.5rem
- border-radius: 0.5rem
- background-color: $gray-100
- color: $gray-600
- transition: all 0.2s ease-in-out
- border: none
- cursor: pointer
- &:hover
- background-color: $gray-200
- .dark &
- background-color: $gray-700
- color: $gray-300
- &:hover
- background-color: $gray-600
- // Main content
- .main
- flex: 1
- // Page transitions
- .page-slide
- &-enter-active,
- &-leave-active
- transition: all 0.3s ease-in-out
- &-enter-from
- opacity: 0
- transform: translateX(1rem)
- &-leave-to
- opacity: 0
- transform: translateX(-1rem)
- // Footer
- .footer
- background-color: $gray-800
- color: $white
- padding: 2rem 0
- .dark &
- background-color: $gray-900
- .footer__content
- max-width: 1200px
- margin: 0 auto
- padding: 0 1rem
- .footer__sections
- display: grid
- grid-template-columns: 1fr
- gap: 2rem
- @media (min-width: 768px)
- grid-template-columns: repeat(3, 1fr)
- .footer__section
- display: flex
- flex-direction: column
- .footer__section-title
- font-size: 1.125rem
- font-weight: bold
- margin-bottom: 1rem
- .footer__section-text
- color: $gray-400
- margin-bottom: 0.5rem
- .footer__links
- display: flex
- flex-direction: column
- gap: 0.5rem
- .footer__link
- color: $gray-400
- text-decoration: none
- transition: color 0.2s ease-in-out
- &:hover
- color: $white
- // Утилитарные классы
- .btn-primary
- background-color: $primary-500
- color: $white
- padding: 0.5rem 1rem
- border-radius: 0.5rem
- font-weight: 500
- transition: background-color 0.2s ease-in-out
- border: none
- cursor: pointer
- text-decoration: none
- display: inline-block
- text-align: center
- &:hover
- background-color: $primary-600
- .btn-secondary
- background-color: $gray-200
- color: $gray-700
- padding: 0.5rem 1rem
- border-radius: 0.5rem
- font-weight: 500
- transition: background-color 0.2s ease-in-out
- border: none
- cursor: pointer
- text-decoration: none
- display: inline-block
- text-align: center
- &:hover
- background-color: $gray-300
- .dark &
- background-color: $gray-700
- color: $gray-300
- &:hover
- background-color: $gray-600
- .card
- background-color: $white
- border-radius: 0.5rem
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)
- padding: 1.5rem
- .dark &
- background-color: $gray-800
- .form-input
- width: 100%
- padding: 0.5rem 0.75rem
- border: 1px solid $gray-300
- border-radius: 0.5rem
- background-color: $white
- color: $gray-900
- outline: none
- transition: all 0.2s ease-in-out
- &:focus
- outline: none
- border-color: $primary-500
- box-shadow: 0 0 0 2px rgba($primary-500, 0.2)
- .dark &
- background-color: $gray-700
- color: $white
- border-color: $gray-600
- &:focus
- border-color: $primary-500
- .form-label
- display: block
- font-size: 0.875rem
- font-weight: 500
- color: $gray-700
- margin-bottom: 0.5rem
- .dark &
- color: $gray-300
- // Admin panel overrides
- .admin
- .header
- position: static
- box-shadow: none
- border-bottom: 1px solid $gray-200
- .dark &
- border-bottom-color: $gray-700
- // Responsive design
- @media (max-width: 768px)
- .header__nav
- padding: 0.5rem
- .header__nav-block
- flex-direction: column
- gap: 1rem
- .header__nav-menu
- width: 100%
- justify-content: center
- .header__brand
- justify-content: center
- .footer__sections
- grid-template-columns: 1fr
- gap: 1.5rem
- .footer__content
- padding: 0 0.5rem
- @media (max-width: 480px)
- .header__nav-menu
- flex-wrap: wrap
- gap: 0.5rem
- .header__menu-link
- font-size: 0.875rem
- .header__logo
- width: 1.5rem
- height: 1.5rem
- .header__nav-name
- font-size: 1.25rem
- // Print styles
- @media print
- .header,
- .footer
- display: none
- #app
- background-color: $white
- // High contrast mode support
- @media (prefers-contrast: high)
- .header__menu-link
- color: $black
- .dark &
- color: $white
- .btn-primary
- background-color: $black
- color: $white
- .dark &
- background-color: $white
- color: $black
- // Reduced motion support
- @media (prefers-reduced-motion: reduce)
- .page-slide
- &-enter-active,
- &-leave-active
- transition: none
- .header__menu-link,
- .btn-primary,
- .btn-secondary
- transition: none
- // Темная тема
- @media (prefers-color-scheme: dark)
- :root
- color-scheme: dark
|