736 lines
18 KiB
Sass
736 lines
18 KiB
Sass
@import "@/common/styles/colors"
|
|
|
|
.waiting-room-page
|
|
height: 100vh
|
|
width: 100vw
|
|
display: flex
|
|
flex-direction: column
|
|
align-items: center
|
|
position: relative
|
|
padding: 20px
|
|
animation: page-fade-in 0.8s ease-in-out
|
|
|
|
.waiting-room-header
|
|
display: flex
|
|
flex-direction: column
|
|
align-items: center
|
|
justify-content: center
|
|
width: 100%
|
|
margin-bottom: 30px
|
|
position: relative
|
|
z-index: 2
|
|
animation: float-up 0.8s ease-out
|
|
|
|
.back-button
|
|
position: absolute
|
|
left: 20px
|
|
top: 0
|
|
background: none
|
|
border: none
|
|
color: $white
|
|
font-size: 1rem
|
|
display: flex
|
|
align-items: center
|
|
gap: 10px
|
|
cursor: pointer
|
|
transition: all 0.2s ease
|
|
padding: 8px 16px
|
|
border-radius: 5px
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.1)
|
|
|
|
h1
|
|
font-size: 42pt
|
|
color: $white
|
|
margin-bottom: 15px
|
|
text-shadow: 0 0 15px rgba(255, 255, 255, 0.7)
|
|
background: linear-gradient(135deg, $pink, $blue 45%, $mint-green 65%, $yellow 85%, $pink)
|
|
background-size: 300% 100%
|
|
animation: title-shimmer 10s infinite alternate ease-in-out
|
|
-webkit-background-clip: text
|
|
background-clip: text
|
|
-webkit-text-fill-color: transparent
|
|
|
|
.room-code-container
|
|
display: flex
|
|
flex-direction: column
|
|
align-items: center
|
|
|
|
.room-code
|
|
font-size: 1.2rem
|
|
color: $white
|
|
background: rgba(255, 255, 255, 0.1)
|
|
padding: 10px 25px
|
|
border-radius: 10px
|
|
cursor: pointer
|
|
transition: all 0.3s ease
|
|
border: 1px solid rgba(255, 255, 255, 0.2)
|
|
backdrop-filter: blur(5px)
|
|
display: flex
|
|
align-items: center
|
|
gap: 10px
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.2)
|
|
border: 1px solid rgba(255, 255, 255, 0.4)
|
|
|
|
.code
|
|
font-weight: bold
|
|
font-size: 1.3rem
|
|
color: $yellow
|
|
letter-spacing: 2px
|
|
margin-left: 5px
|
|
margin-right: 5px
|
|
|
|
svg
|
|
font-size: 1rem
|
|
transition: all 0.3s ease
|
|
|
|
&.copied
|
|
color: $mint-green
|
|
animation: pop 0.3s ease
|
|
|
|
.copy-hint
|
|
margin-top: 5px
|
|
font-size: 0.8rem
|
|
color: $border
|
|
opacity: 0.7
|
|
|
|
.waiting-room-content
|
|
display: flex
|
|
width: 100%
|
|
max-width: 1200px
|
|
gap: 30px
|
|
height: calc(100vh - 140px)
|
|
z-index: 2
|
|
position: relative
|
|
animation: float-up 1.2s ease-out
|
|
overflow: hidden
|
|
|
|
.users-panel,
|
|
.chat-panel
|
|
background: rgba(255, 255, 255, 0.08)
|
|
backdrop-filter: blur(10px)
|
|
border-radius: 20px
|
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.2), 0 0 20px rgba(255, 255, 255, 0.1)
|
|
border: 1px solid rgba(255, 255, 255, 0.2)
|
|
display: flex
|
|
flex-direction: column
|
|
animation: card-pulse 6s infinite alternate ease-in-out
|
|
transition: all 0.3s ease
|
|
|
|
&:hover
|
|
border: 1px solid rgba(255, 255, 255, 0.3)
|
|
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.3), 0 0 30px rgba(255, 255, 255, 0.15)
|
|
|
|
.users-panel
|
|
width: 30%
|
|
|
|
.users-list
|
|
flex-grow: 1
|
|
overflow-y: auto
|
|
padding: 15px
|
|
min-height: 0
|
|
|
|
&::-webkit-scrollbar
|
|
width: 6px
|
|
background: rgba(0, 0, 0, 0.2)
|
|
border-radius: 3px
|
|
|
|
&::-webkit-scrollbar-thumb
|
|
background: rgba(255, 255, 255, 0.2)
|
|
border-radius: 3px
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.3)
|
|
|
|
.no-users
|
|
color: $border
|
|
text-align: center
|
|
padding: 20px 0
|
|
font-style: italic
|
|
|
|
.user-item
|
|
margin-bottom: 10px
|
|
padding: 12px 15px
|
|
background: rgba(255, 255, 255, 0.05)
|
|
border-radius: 10px
|
|
color: $white
|
|
display: flex
|
|
align-items: center
|
|
justify-content: space-between
|
|
transition: all 0.2s ease
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.1)
|
|
transform: translateY(-2px)
|
|
|
|
&.host
|
|
border: 1px solid $yellow
|
|
box-shadow: 0 0 10px rgba($yellow, 0.3)
|
|
|
|
.host-badge
|
|
background: $yellow
|
|
color: #000
|
|
font-size: 0.75rem
|
|
padding: 3px 8px
|
|
border-radius: 10px
|
|
font-weight: bold
|
|
text-transform: uppercase
|
|
|
|
.game-controls
|
|
margin: 15px
|
|
display: flex
|
|
flex-direction: column
|
|
gap: 10px
|
|
|
|
.start-game-button
|
|
padding: 15px
|
|
background: linear-gradient(135deg, $purple, $blue)
|
|
border: none
|
|
border-radius: 12px
|
|
color: $white
|
|
font-size: 1.1rem
|
|
display: flex
|
|
align-items: center
|
|
justify-content: center
|
|
gap: 10px
|
|
cursor: pointer
|
|
transition: all 0.3s ease
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3)
|
|
|
|
svg
|
|
font-size: 1.2rem
|
|
|
|
&:hover:not(.disabled)
|
|
transform: translateY(-3px)
|
|
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4), 0 0 15px rgba($purple, 0.6)
|
|
background: linear-gradient(135deg, lighten($purple, 5%), lighten($blue, 5%))
|
|
|
|
&.disabled
|
|
background: linear-gradient(135deg, desaturate($purple, 40%), desaturate($blue, 40%))
|
|
opacity: 0.7
|
|
cursor: not-allowed
|
|
|
|
.start-hint
|
|
color: $border
|
|
text-align: center
|
|
font-size: 0.8rem
|
|
font-style: italic
|
|
|
|
.chat-panel
|
|
width: 70%
|
|
display: flex
|
|
flex-direction: column
|
|
height: 100%
|
|
|
|
.chat-messages
|
|
flex-grow: 1
|
|
overflow-y: auto
|
|
padding: 15px
|
|
display: flex
|
|
flex-direction: column
|
|
min-height: 0
|
|
|
|
&::-webkit-scrollbar
|
|
width: 8px
|
|
background: rgba(0, 0, 0, 0.2)
|
|
border-radius: 4px
|
|
|
|
&::-webkit-scrollbar-thumb
|
|
background: rgba(255, 255, 255, 0.2)
|
|
border-radius: 4px
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.3)
|
|
|
|
.message
|
|
margin-bottom: 10px
|
|
padding: 10px 15px
|
|
border-radius: 12px
|
|
background: rgba(255, 255, 255, 0.05)
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
color: $white
|
|
animation: message-fade-in 0.3s ease-out
|
|
width: fit-content
|
|
max-width: 80%
|
|
align-self: flex-start
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.1)
|
|
|
|
.message-sender
|
|
font-weight: bold
|
|
color: $yellow
|
|
margin-right: 5px
|
|
|
|
.message-text
|
|
color: $white
|
|
|
|
&.system-message
|
|
background: rgba(0, 0, 0, 0.2)
|
|
border: 1px solid rgba(255, 255, 255, 0.05)
|
|
color: $border
|
|
padding: 8px 12px
|
|
font-style: italic
|
|
align-self: center
|
|
|
|
.message-text.system
|
|
color: $border
|
|
font-style: italic
|
|
|
|
.chat-input
|
|
display: flex
|
|
padding: 15px
|
|
gap: 10px
|
|
background: rgba(30, 30, 30, 0.5)
|
|
border-top: 1px solid rgba(255, 255, 255, 0.1)
|
|
border-radius: 0 0 20px 20px
|
|
|
|
input
|
|
flex: 1
|
|
padding: 12px 15px
|
|
background: rgba(0, 0, 0, 0.3)
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
border-radius: 8px
|
|
color: $white
|
|
outline: none
|
|
transition: all 0.2s ease
|
|
|
|
&:focus
|
|
border: 1px solid rgba(255, 255, 255, 0.3)
|
|
box-shadow: 0 0 15px rgba(255, 255, 255, 0.1)
|
|
|
|
button
|
|
padding: 12px 20px
|
|
background: linear-gradient(135deg, $purple, $blue)
|
|
border: none
|
|
border-radius: 8px
|
|
color: $white
|
|
cursor: pointer
|
|
transition: all 0.3s ease
|
|
|
|
&:hover
|
|
transform: translateY(-2px)
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4), 0 0 10px rgba($purple, 0.5)
|
|
|
|
.panel-header
|
|
display: flex
|
|
align-items: center
|
|
gap: 10px
|
|
padding: 15px
|
|
background: rgba(30, 30, 30, 0.5)
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.1)
|
|
border-radius: 20px 20px 0 0
|
|
|
|
svg
|
|
color: $white
|
|
font-size: 1.4rem
|
|
|
|
h2
|
|
color: $white
|
|
font-size: 1.4rem
|
|
margin: 0
|
|
|
|
.playlist-section
|
|
background: rgba(20, 20, 30, 0.6)
|
|
backdrop-filter: blur(10px)
|
|
border-radius: 15px
|
|
padding: 25px
|
|
animation: float-up 0.8s ease-out
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
transition: all 0.3s ease
|
|
|
|
&:hover
|
|
border-color: rgba(255, 255, 255, 0.2)
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3)
|
|
|
|
.section-header
|
|
background: rgba(30, 30, 40, 0.95)
|
|
padding: 20px
|
|
border-radius: 12px
|
|
margin: -25px -25px 25px -25px
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.1)
|
|
text-align: center
|
|
|
|
h2
|
|
margin: 0
|
|
font-size: 24px
|
|
color: $white
|
|
display: flex
|
|
align-items: center
|
|
justify-content: center
|
|
gap: 10px
|
|
|
|
&:before, &:after
|
|
content: ""
|
|
height: 1px
|
|
width: 50px
|
|
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent)
|
|
|
|
.vote-info
|
|
color: rgba(255, 255, 255, 0.6)
|
|
font-size: 14px
|
|
margin-top: 5px
|
|
|
|
.playlists-grid
|
|
display: grid
|
|
grid-template-columns: repeat(3, 1fr)
|
|
gap: 20px
|
|
padding: 5px
|
|
|
|
@media (max-width: 1200px)
|
|
grid-template-columns: repeat(2, 1fr)
|
|
|
|
@media (max-width: 768px)
|
|
grid-template-columns: 1fr
|
|
|
|
.playlist-card
|
|
background: rgba(255, 255, 255, 0.05)
|
|
border-radius: 12px
|
|
overflow: hidden
|
|
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
|
|
cursor: pointer
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
|
|
&:hover
|
|
transform: translateY(-5px)
|
|
background: rgba(255, 255, 255, 0.08)
|
|
border-color: rgba(255, 255, 255, 0.2)
|
|
|
|
.playlist-overlay
|
|
opacity: 1
|
|
|
|
&.selected
|
|
background: rgba($yellow, 0.1)
|
|
border-color: rgba($yellow, 0.3)
|
|
box-shadow: 0 0 30px rgba($yellow, 0.15)
|
|
|
|
.playlist-overlay
|
|
opacity: 1
|
|
background: rgba(0, 0, 0, 0.4)
|
|
|
|
.your-vote
|
|
transform: translateY(0)
|
|
opacity: 1
|
|
|
|
.playlist-info h3
|
|
color: $yellow
|
|
|
|
.playlist-thumbnail
|
|
position: relative
|
|
width: 100%
|
|
padding-top: 56.25%
|
|
|
|
img
|
|
position: absolute
|
|
top: 0
|
|
left: 0
|
|
width: 100%
|
|
height: 100%
|
|
object-fit: cover
|
|
|
|
.playlist-overlay
|
|
position: absolute
|
|
inset: 0
|
|
background: rgba(0, 0, 0, 0.3)
|
|
opacity: 0
|
|
transition: all 0.3s ease
|
|
display: flex
|
|
flex-direction: column
|
|
justify-content: center
|
|
align-items: center
|
|
|
|
.vote-count
|
|
background: rgba(20, 20, 30, 0.85)
|
|
padding: 12px 20px
|
|
border-radius: 15px
|
|
text-align: center
|
|
border: 1px solid rgba(255, 255, 255, 0.2)
|
|
backdrop-filter: blur(5px)
|
|
|
|
.count
|
|
font-size: 28px
|
|
font-weight: bold
|
|
color: $yellow
|
|
display: block
|
|
text-shadow: 0 0 10px rgba($yellow, 0.5)
|
|
|
|
.vote-label
|
|
font-size: 12px
|
|
color: rgba(255, 255, 255, 0.7)
|
|
|
|
.your-vote
|
|
position: absolute
|
|
bottom: 15px
|
|
background: $yellow
|
|
color: rgba(0, 0, 0, 0.8)
|
|
padding: 8px 16px
|
|
border-radius: 20px
|
|
font-weight: bold
|
|
font-size: 12px
|
|
transform: translateY(20px)
|
|
opacity: 0
|
|
transition: all 0.3s ease
|
|
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3)
|
|
|
|
.playlist-info
|
|
padding: 15px
|
|
background: rgba(20, 20, 30, 0.4)
|
|
border-top: 1px solid rgba(255, 255, 255, 0.05)
|
|
|
|
h3
|
|
color: $white
|
|
margin-bottom: 8px
|
|
font-size: 18px
|
|
transition: color 0.3s ease
|
|
|
|
.playlist-details
|
|
display: flex
|
|
flex-direction: column
|
|
gap: 8px
|
|
|
|
span
|
|
color: rgba(255, 255, 255, 0.6)
|
|
font-size: 13px
|
|
|
|
.vote-percentage-bar
|
|
height: 4px
|
|
background: rgba(255, 255, 255, 0.1)
|
|
border-radius: 2px
|
|
overflow: hidden
|
|
|
|
.fill
|
|
height: 100%
|
|
background: linear-gradient(90deg, $yellow, rgba($yellow, 0.5))
|
|
box-shadow: 0 0 10px rgba($yellow, 0.3)
|
|
transition: width 0.3s ease
|
|
|
|
.bottom-section
|
|
display: flex
|
|
gap: 30px
|
|
width: 100%
|
|
min-height: 0
|
|
height: 300px
|
|
margin-top: 20px
|
|
|
|
.users-panel
|
|
height: 100%
|
|
display: flex
|
|
flex-direction: column
|
|
background: rgba(20, 20, 30, 0.6)
|
|
border-radius: 15px
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
overflow: hidden
|
|
transition: all 0.3s ease
|
|
|
|
&:hover
|
|
border-color: rgba(255, 255, 255, 0.2)
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3)
|
|
|
|
.panel-header
|
|
background: rgba(30, 30, 40, 0.95)
|
|
padding: 20px
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.1)
|
|
|
|
h2
|
|
font-size: 20px
|
|
display: flex
|
|
align-items: center
|
|
gap: 10px
|
|
|
|
svg
|
|
color: $yellow
|
|
filter: drop-shadow(0 0 8px rgba($yellow, 0.4))
|
|
|
|
.users-list
|
|
padding: 15px
|
|
flex: 1
|
|
overflow-y: auto
|
|
min-height: 0
|
|
|
|
.user-item
|
|
background: rgba(255, 255, 255, 0.05)
|
|
margin-bottom: 10px
|
|
padding: 12px 15px
|
|
border-radius: 10px
|
|
transition: all 0.3s ease
|
|
border: 1px solid rgba(255, 255, 255, 0.05)
|
|
|
|
&:hover
|
|
transform: translateY(-2px)
|
|
background: rgba(255, 255, 255, 0.08)
|
|
border-color: rgba(255, 255, 255, 0.1)
|
|
|
|
&.host
|
|
background: rgba($yellow, 0.1)
|
|
border-color: rgba($yellow, 0.3)
|
|
|
|
.host-badge
|
|
background: $yellow
|
|
color: #000
|
|
font-size: 12px
|
|
padding: 4px 8px
|
|
border-radius: 20px
|
|
font-weight: bold
|
|
|
|
.game-controls
|
|
padding: 15px
|
|
background: rgba(20, 20, 30, 0.4)
|
|
border-top: 1px solid rgba(255, 255, 255, 0.05)
|
|
|
|
.start-game-button
|
|
width: 100%
|
|
padding: 12px
|
|
background: linear-gradient(135deg, $purple, $blue)
|
|
border-radius: 10px
|
|
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
|
|
|
|
&:not(.disabled):hover
|
|
transform: translateY(-2px)
|
|
filter: brightness(1.1)
|
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4)
|
|
|
|
.chat-panel
|
|
flex: 1
|
|
height: 100%
|
|
background: rgba(20, 20, 30, 0.6)
|
|
border-radius: 15px
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
display: flex
|
|
flex-direction: column
|
|
overflow: hidden
|
|
transition: all 0.3s ease
|
|
|
|
&:hover
|
|
border-color: rgba(255, 255, 255, 0.2)
|
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3)
|
|
|
|
.panel-header
|
|
background: rgba(30, 30, 40, 0.95)
|
|
padding: 20px
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.1)
|
|
|
|
h2
|
|
font-size: 20px
|
|
display: flex
|
|
align-items: center
|
|
gap: 10px
|
|
|
|
svg
|
|
color: $blue
|
|
filter: drop-shadow(0 0 8px rgba($blue, 0.4))
|
|
|
|
.chat-messages
|
|
flex: 1
|
|
padding: 20px
|
|
overflow-y: auto
|
|
display: flex
|
|
flex-direction: column
|
|
gap: 10px
|
|
min-height: 0
|
|
|
|
.message
|
|
max-width: 85%
|
|
padding: 10px 15px
|
|
border-radius: 12px
|
|
background: rgba(255, 255, 255, 0.05)
|
|
border: 1px solid rgba(255, 255, 255, 0.05)
|
|
transition: all 0.3s ease
|
|
|
|
&:hover
|
|
background: rgba(255, 255, 255, 0.08)
|
|
border-color: rgba(255, 255, 255, 0.1)
|
|
transform: translateY(-1px)
|
|
|
|
.message-sender
|
|
color: $yellow
|
|
font-weight: 600
|
|
margin-right: 8px
|
|
|
|
&.system-message
|
|
align-self: center
|
|
background: rgba(0, 0, 0, 0.2)
|
|
font-style: italic
|
|
color: rgba(255, 255, 255, 0.6)
|
|
padding: 8px 16px
|
|
border-radius: 20px
|
|
|
|
.chat-input
|
|
padding: 15px
|
|
background: rgba(20, 20, 30, 0.4)
|
|
border-top: 1px solid rgba(255, 255, 255, 0.05)
|
|
display: flex
|
|
gap: 10px
|
|
|
|
input
|
|
flex: 1
|
|
background: rgba(0, 0, 0, 0.2)
|
|
border: 1px solid rgba(255, 255, 255, 0.1)
|
|
border-radius: 8px
|
|
padding: 12px 15px
|
|
color: $white
|
|
transition: all 0.3s ease
|
|
|
|
&:focus
|
|
border-color: rgba($blue, 0.5)
|
|
box-shadow: 0 0 15px rgba($blue, 0.1)
|
|
background: rgba(0, 0, 0, 0.3)
|
|
|
|
button
|
|
padding: 12px 20px
|
|
background: linear-gradient(135deg, $purple, $blue)
|
|
border-radius: 8px
|
|
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275)
|
|
|
|
&:hover
|
|
transform: translateY(-2px)
|
|
filter: brightness(1.1)
|
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3)
|
|
|
|
@keyframes pop
|
|
0%
|
|
transform: scale(1)
|
|
50%
|
|
transform: scale(1.3)
|
|
100%
|
|
transform: scale(1)
|
|
|
|
@keyframes title-shimmer
|
|
0%
|
|
background-position: 0% 50%
|
|
50%
|
|
background-position: 100% 50%
|
|
100%
|
|
background-position: 0% 50%
|
|
|
|
@keyframes message-fade-in
|
|
0%
|
|
opacity: 0
|
|
transform: translateY(5px)
|
|
100%
|
|
opacity: 1
|
|
transform: translateY(0)
|
|
|
|
@keyframes card-pulse
|
|
0%, 100%
|
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.2), 0 0 20px rgba(255, 255, 255, 0.1)
|
|
50%
|
|
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.3), 0 0 30px rgba(255, 255, 255, 0.2)
|
|
|
|
@keyframes float-up
|
|
0%
|
|
opacity: 0
|
|
transform: translateY(20px)
|
|
100%
|
|
opacity: 1
|
|
transform: translateY(0)
|
|
|
|
@keyframes page-fade-in
|
|
0%
|
|
opacity: 0
|
|
100%
|
|
opacity: 1
|