Spaces:
Sleeping
Sleeping
| @import url('https://fonts.googleapis.com/css2?family=Boogaloo&family=Nunito:wght@400;600;700;800&display=swap'); | |
| /* ── Variables ── */ | |
| :root { | |
| --bg: #08080f; | |
| --bg2: #0f0f1a; | |
| --bg3: #161628; | |
| --surface: #1a1a2e; | |
| --surface2: #232342; | |
| --border: #2a2a4a; | |
| --cyan: #00f5ff; | |
| --pink: #ff006e; | |
| --yellow: #ffe600; | |
| --green: #00ff88; | |
| --purple: #9d00ff; | |
| --orange: #ff6b00; | |
| --text: #e8e8f5; | |
| --text2: #9090b0; | |
| --radius: 12px; | |
| --shadow: 0 0 30px rgba(0,245,255,.08); | |
| } | |
| *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } | |
| body { | |
| font-family: 'Nunito', sans-serif; | |
| background: var(--bg); | |
| color: var(--text); | |
| min-height: 100vh; | |
| overflow-x: hidden; | |
| } | |
| /* ── Scrollbar ── */ | |
| ::-webkit-scrollbar { width: 6px; } | |
| ::-webkit-scrollbar-track { background: var(--bg2); } | |
| ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } | |
| ::-webkit-scrollbar-thumb:hover { background: var(--cyan); } | |
| /* ── Lobby ── */ | |
| #lobby-screen { | |
| min-height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 2rem 1rem; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| /* animated bg grid */ | |
| #lobby-screen::before { | |
| content: ''; | |
| position: fixed; inset: 0; | |
| background-image: | |
| linear-gradient(rgba(0,245,255,.04) 1px, transparent 1px), | |
| linear-gradient(90deg, rgba(0,245,255,.04) 1px, transparent 1px); | |
| background-size: 60px 60px; | |
| animation: gridScroll 20s linear infinite; | |
| pointer-events: none; | |
| } | |
| @keyframes gridScroll { | |
| from { background-position: 0 0; } | |
| to { background-position: 60px 60px; } | |
| } | |
| .lobby-card { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 20px; | |
| padding: 2.5rem 2rem; | |
| width: 100%; | |
| max-width: 480px; | |
| box-shadow: var(--shadow), 0 0 80px rgba(0,245,255,.04); | |
| position: relative; | |
| z-index: 1; | |
| } | |
| .logo { | |
| text-align: center; | |
| margin-bottom: 2rem; | |
| } | |
| .logo h1 { | |
| font-family: 'Boogaloo', cursive; | |
| font-size: 4rem; | |
| line-height: 1; | |
| background: linear-gradient(135deg, var(--cyan), var(--pink), var(--yellow)); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| background-clip: text; | |
| filter: drop-shadow(0 0 20px rgba(0,245,255,.4)); | |
| animation: logoGlow 3s ease-in-out infinite alternate; | |
| } | |
| @keyframes logoGlow { | |
| from { filter: drop-shadow(0 0 15px rgba(0,245,255,.3)); } | |
| to { filter: drop-shadow(0 0 35px rgba(255,0,110,.5)); } | |
| } | |
| .logo p { color: var(--text2); font-size: .9rem; margin-top: .5rem; } | |
| /* Avatar picker */ | |
| .avatar-section { | |
| display: flex; | |
| align-items: center; | |
| gap: 1rem; | |
| margin-bottom: 1.5rem; | |
| } | |
| .avatar-preview { | |
| width: 56px; height: 56px; | |
| border-radius: 50%; | |
| display: flex; align-items: center; justify-content: center; | |
| font-size: 1.8rem; | |
| border: 2px solid var(--border); | |
| cursor: pointer; | |
| flex-shrink: 0; | |
| transition: border-color .2s, transform .2s; | |
| } | |
| .avatar-preview:hover { border-color: var(--cyan); transform: scale(1.1); } | |
| .avatar-emoji-grid { | |
| display: grid; | |
| grid-template-columns: repeat(6, 1fr); | |
| gap: 6px; | |
| padding: 8px; | |
| background: var(--bg2); | |
| border-radius: 10px; | |
| border: 1px solid var(--border); | |
| } | |
| .avatar-emoji-grid span { | |
| cursor: pointer; font-size: 1.3rem; | |
| padding: 4px; border-radius: 6px; | |
| text-align: center; | |
| transition: background .15s, transform .15s; | |
| } | |
| .avatar-emoji-grid span:hover { background: var(--surface2); transform: scale(1.2); } | |
| .avatar-emoji-grid span.selected { background: rgba(0,245,255,.2); outline: 2px solid var(--cyan); } | |
| /* Form */ | |
| .form-group { margin-bottom: 1rem; } | |
| .form-group label { display: block; font-size: .8rem; font-weight: 700; color: var(--text2); text-transform: uppercase; letter-spacing: .08em; margin-bottom: .4rem; } | |
| .form-group input { | |
| width: 100%; padding: .75rem 1rem; | |
| background: var(--bg2); border: 1px solid var(--border); | |
| border-radius: var(--radius); color: var(--text); | |
| font-family: 'Nunito', sans-serif; font-size: 1rem; | |
| outline: none; transition: border-color .2s, box-shadow .2s; | |
| } | |
| .form-group input:focus { border-color: var(--cyan); box-shadow: 0 0 0 3px rgba(0,245,255,.1); } | |
| .form-group input::placeholder { color: var(--text2); } | |
| /* Buttons */ | |
| .btn { | |
| width: 100%; padding: .85rem 1.5rem; | |
| border: none; border-radius: var(--radius); | |
| font-family: 'Nunito', sans-serif; font-size: 1rem; font-weight: 800; | |
| cursor: pointer; transition: transform .15s, box-shadow .2s, opacity .2s; | |
| text-transform: uppercase; letter-spacing: .06em; | |
| } | |
| .btn:hover { transform: translateY(-2px); } | |
| .btn:active { transform: translateY(0); } | |
| .btn:disabled { opacity: .5; cursor: not-allowed; transform: none; } | |
| .btn-primary { | |
| background: linear-gradient(135deg, var(--cyan), #0080ff); | |
| color: #000; | |
| box-shadow: 0 4px 20px rgba(0,245,255,.3); | |
| } | |
| .btn-primary:hover { box-shadow: 0 6px 30px rgba(0,245,255,.5); } | |
| .btn-secondary { | |
| background: linear-gradient(135deg, var(--pink), var(--purple)); | |
| color: #fff; | |
| box-shadow: 0 4px 20px rgba(255,0,110,.3); | |
| } | |
| .btn-secondary:hover { box-shadow: 0 6px 30px rgba(255,0,110,.5); } | |
| .btn-outline { | |
| background: transparent; color: var(--text); | |
| border: 1px solid var(--border); | |
| } | |
| .btn-outline:hover { border-color: var(--cyan); color: var(--cyan); background: rgba(0,245,255,.05); } | |
| .btn-danger { background: linear-gradient(135deg, #ff3030, #ff006e); color: #fff; } | |
| .btn-success { background: linear-gradient(135deg, var(--green), #00cc66); color: #000; } | |
| .btn-sm { padding: .4rem .8rem; font-size: .8rem; width: auto; } | |
| .btn-group { display: flex; flex-direction: column; gap: .75rem; margin-top: 1.5rem; } | |
| .divider { display: flex; align-items: center; gap: .75rem; margin: 1.25rem 0; color: var(--text2); font-size: .85rem; } | |
| .divider::before, .divider::after { content: ''; flex: 1; height: 1px; background: var(--border); } | |
| /* Error/info messages */ | |
| .msg { | |
| padding: .6rem 1rem; border-radius: 8px; | |
| font-size: .85rem; font-weight: 600; | |
| display: none; margin-bottom: 1rem; | |
| } | |
| .msg.error { background: rgba(255,0,110,.15); border: 1px solid rgba(255,0,110,.3); color: #ff6699; display: block; } | |
| .msg.info { background: rgba(0,245,255,.1); border: 1px solid rgba(0,245,255,.2); color: var(--cyan); display: block; } | |
| /* Settings panel */ | |
| .settings-panel { | |
| background: var(--bg2); border: 1px solid var(--border); | |
| border-radius: var(--radius); padding: 1.25rem; | |
| margin-top: 1rem; display: none; | |
| } | |
| .settings-panel.open { display: block; } | |
| .settings-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; } | |
| .settings-item label { font-size: .75rem; color: var(--text2); font-weight: 700; text-transform: uppercase; display: block; margin-bottom: .35rem; } | |
| .settings-item select, .settings-item input[type=number] { | |
| width: 100%; padding: .5rem .75rem; | |
| background: var(--surface); border: 1px solid var(--border); | |
| border-radius: 8px; color: var(--text); | |
| font-family: 'Nunito', sans-serif; font-size: .9rem; outline: none; | |
| } | |
| .settings-item input[type=checkbox] { accent-color: var(--cyan); } | |
| .settings-item .toggle-row { display: flex; align-items: center; gap: .5rem; margin-top: .25rem; } | |
| .categories-grid { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: .5rem; } | |
| .cat-chip { | |
| padding: .25rem .6rem; border-radius: 20px; font-size: .75rem; font-weight: 700; | |
| border: 1px solid var(--border); cursor: pointer; transition: all .15s; | |
| background: var(--surface); color: var(--text2); | |
| } | |
| .cat-chip.active { background: rgba(0,245,255,.15); border-color: var(--cyan); color: var(--cyan); } | |
| /* Room code display */ | |
| .room-code-display { | |
| background: var(--bg2); border: 1px solid var(--border); | |
| border-radius: var(--radius); padding: 1rem 1.5rem; | |
| display: flex; align-items: center; justify-content: space-between; | |
| margin-bottom: 1.5rem; | |
| } | |
| .room-code-display .code { | |
| font-family: 'Boogaloo', cursive; font-size: 2.2rem; | |
| letter-spacing: .15em; color: var(--cyan); | |
| text-shadow: 0 0 20px rgba(0,245,255,.5); | |
| } | |
| .copy-btn { background: none; border: 1px solid var(--border); color: var(--text2); | |
| padding: .4rem .8rem; border-radius: 8px; cursor: pointer; font-size: .8rem; transition: all .2s; } | |
| .copy-btn:hover { border-color: var(--cyan); color: var(--cyan); } | |
| /* Player list in lobby */ | |
| .player-list { margin-bottom: 1.5rem; } | |
| .player-list h3 { font-size: .8rem; text-transform: uppercase; color: var(--text2); font-weight: 700; letter-spacing: .08em; margin-bottom: .75rem; } | |
| .player-chips { display: flex; flex-wrap: wrap; gap: .5rem; } | |
| .player-chip { | |
| display: flex; align-items: center; gap: .4rem; | |
| padding: .35rem .75rem; border-radius: 20px; | |
| background: var(--surface2); border: 1px solid var(--border); | |
| font-size: .85rem; font-weight: 600; | |
| } | |
| .player-chip .avatar-sm { font-size: 1rem; } | |
| .player-chip.host { border-color: var(--yellow); color: var(--yellow); } | |
| .player-chip.you { border-color: var(--cyan); } | |
| /* ── GAME SCREEN ── */ | |
| #game-screen { | |
| display: none; | |
| height: 100vh; | |
| overflow: hidden; | |
| flex-direction: column; | |
| } | |
| #game-screen.active { display: flex; } | |
| /* Top bar */ | |
| .game-topbar { | |
| height: 52px; flex-shrink: 0; | |
| background: var(--surface); | |
| border-bottom: 1px solid var(--border); | |
| display: flex; align-items: center; | |
| padding: 0 1rem; gap: 1rem; | |
| z-index: 10; | |
| } | |
| .topbar-room { font-family: 'Boogaloo', cursive; font-size: 1.1rem; color: var(--cyan); letter-spacing: .1em; } | |
| .topbar-logo { font-family: 'Boogaloo', cursive; font-size: 1.4rem; | |
| background: linear-gradient(135deg, var(--cyan), var(--pink)); | |
| -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } | |
| .topbar-round { color: var(--text2); font-size: .85rem; font-weight: 700; } | |
| .topbar-word { | |
| flex: 1; text-align: center; | |
| font-size: 1.3rem; font-weight: 800; | |
| letter-spacing: .2em; color: var(--text); | |
| } | |
| .topbar-word.drawing-word { color: var(--yellow); text-shadow: 0 0 15px rgba(255,230,0,.4); } | |
| /* Timer */ | |
| .timer-wrap { display: flex; align-items: center; gap: .5rem; } | |
| .timer-ring { | |
| width: 40px; height: 40px; position: relative; | |
| } | |
| .timer-ring svg { transform: rotate(-90deg); } | |
| .timer-ring circle { | |
| fill: none; stroke: var(--border); stroke-width: 3; | |
| cx: 20; cy: 20; r: 17; | |
| } | |
| .timer-ring .progress { | |
| stroke: var(--cyan); stroke-linecap: round; | |
| stroke-dasharray: 107; | |
| transition: stroke-dashoffset .9s linear, stroke .5s; | |
| } | |
| .timer-ring .progress.warn { stroke: var(--orange); } | |
| .timer-ring .progress.danger { stroke: var(--pink); animation: timerPulse .5s infinite alternate; } | |
| @keyframes timerPulse { to { opacity: .5; } } | |
| .timer-num { | |
| position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; | |
| font-size: .75rem; font-weight: 800; color: var(--text); | |
| } | |
| /* Game layout */ | |
| .game-body { | |
| flex: 1; display: grid; | |
| grid-template-columns: 200px 1fr 260px; | |
| overflow: hidden; | |
| } | |
| /* Players sidebar */ | |
| .players-panel { | |
| background: var(--bg2); | |
| border-right: 1px solid var(--border); | |
| overflow-y: auto; padding: .75rem .5rem; | |
| display: flex; flex-direction: column; gap: .4rem; | |
| } | |
| .player-row { | |
| display: flex; align-items: center; gap: .5rem; | |
| padding: .5rem .6rem; border-radius: 10px; | |
| transition: background .2s; cursor: default; | |
| border: 1px solid transparent; | |
| position: relative; | |
| } | |
| .player-row.drawing { border-color: var(--yellow); background: rgba(255,230,0,.05); } | |
| .player-row.guessed { border-color: var(--green); background: rgba(0,255,136,.05); } | |
| .player-row.you { border-color: rgba(0,245,255,.3); } | |
| .player-avatar { font-size: 1.4rem; flex-shrink: 0; } | |
| .player-info { flex: 1; min-width: 0; } | |
| .player-name { font-size: .8rem; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } | |
| .player-score { font-size: .7rem; color: var(--text2); } | |
| .player-score .gain { color: var(--green); font-weight: 700; } | |
| .player-badge { font-size: .75rem; } | |
| .player-team-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } | |
| .player-team-dot.red { background: #ff4040; } | |
| .player-team-dot.blue { background: #4088ff; } | |
| .host-kick-btn { | |
| position: absolute; right: 4px; top: 4px; | |
| background: none; border: none; color: var(--text2); | |
| cursor: pointer; font-size: .7rem; opacity: 0; | |
| transition: opacity .2s; | |
| } | |
| .player-row:hover .host-kick-btn { opacity: 1; } | |
| .host-kick-btn:hover { color: var(--pink); } | |
| /* Canvas area */ | |
| .canvas-area { | |
| display: flex; flex-direction: column; | |
| background: var(--bg); | |
| position: relative; overflow: hidden; | |
| } | |
| .canvas-wrap { | |
| flex: 1; display: flex; align-items: center; justify-content: center; | |
| padding: .75rem; | |
| } | |
| #game-canvas { | |
| background: #ffffff; | |
| border-radius: 8px; | |
| cursor: crosshair; | |
| touch-action: none; | |
| max-width: 100%; max-height: 100%; | |
| box-shadow: 0 0 0 2px var(--border), 0 0 40px rgba(0,0,0,.5); | |
| } | |
| #game-canvas.not-drawing { cursor: default; } | |
| /* Drawing toolbar */ | |
| .draw-toolbar { | |
| padding: .5rem .75rem; | |
| background: var(--surface); | |
| border-top: 1px solid var(--border); | |
| display: flex; align-items: center; | |
| gap: .5rem; flex-wrap: wrap; | |
| flex-shrink: 0; | |
| } | |
| .draw-toolbar.disabled { opacity: .3; pointer-events: none; } | |
| .tool-btn { | |
| background: var(--bg2); border: 1px solid var(--border); | |
| border-radius: 8px; padding: .4rem .5rem; | |
| cursor: pointer; font-size: 1rem; | |
| transition: all .15s; color: var(--text2); | |
| min-width: 36px; height: 36px; | |
| display: flex; align-items: center; justify-content: center; | |
| } | |
| .tool-btn:hover { border-color: var(--cyan); color: var(--cyan); } | |
| .tool-btn.active { background: rgba(0,245,255,.15); border-color: var(--cyan); color: var(--cyan); } | |
| .color-btn { | |
| width: 28px; height: 28px; border-radius: 50%; | |
| border: 2px solid transparent; cursor: pointer; | |
| transition: transform .15s, border-color .15s; | |
| flex-shrink: 0; | |
| } | |
| .color-btn:hover { transform: scale(1.2); } | |
| .color-btn.active { border-color: #fff; transform: scale(1.2); box-shadow: 0 0 8px rgba(255,255,255,.4); } | |
| .size-slider { | |
| -webkit-appearance: none; appearance: none; | |
| height: 4px; background: var(--border); | |
| border-radius: 2px; outline: none; cursor: pointer; | |
| width: 80px; | |
| } | |
| .size-slider::-webkit-slider-thumb { | |
| -webkit-appearance: none; width: 14px; height: 14px; | |
| border-radius: 50%; background: var(--cyan); cursor: pointer; | |
| } | |
| .toolbar-sep { width: 1px; height: 28px; background: var(--border); flex-shrink: 0; } | |
| .current-color-preview { | |
| width: 28px; height: 28px; border-radius: 50%; | |
| border: 2px solid var(--border); flex-shrink: 0; | |
| } | |
| /* Right panel - chat */ | |
| .chat-panel { | |
| display: flex; flex-direction: column; | |
| background: var(--bg2); | |
| border-left: 1px solid var(--border); | |
| } | |
| .chat-messages { | |
| flex: 1; overflow-y: auto; | |
| padding: .75rem; display: flex; | |
| flex-direction: column; gap: .35rem; | |
| } | |
| .chat-msg { | |
| padding: .4rem .65rem; border-radius: 8px; | |
| font-size: .82rem; line-height: 1.4; | |
| animation: msgIn .2s ease; | |
| } | |
| @keyframes msgIn { from { opacity: 0; transform: translateY(4px); } } | |
| .chat-msg .sender { font-weight: 700; color: var(--cyan); margin-right: .3em; } | |
| .chat-msg.system { background: rgba(0,245,255,.06); border-left: 3px solid var(--cyan); color: var(--text2); } | |
| .chat-msg.correct { background: rgba(0,255,136,.1); border-left: 3px solid var(--green); color: var(--green); font-weight: 700; } | |
| .chat-msg.close { background: rgba(255,106,0,.1); border-left: 3px solid var(--orange); color: var(--orange); } | |
| .chat-msg.powerup { background: rgba(157,0,255,.1); border-left: 3px solid var(--purple); color: #cc88ff; } | |
| .chat-msg.warn { background: rgba(255,0,110,.1); border-left: 3px solid var(--pink); color: var(--pink); } | |
| .chat-input-wrap { | |
| padding: .6rem; border-top: 1px solid var(--border); | |
| display: flex; gap: .4rem; | |
| } | |
| .chat-input { | |
| flex: 1; padding: .5rem .75rem; | |
| background: var(--surface); border: 1px solid var(--border); | |
| border-radius: 8px; color: var(--text); | |
| font-family: 'Nunito', sans-serif; font-size: .85rem; outline: none; | |
| } | |
| .chat-input:focus { border-color: var(--cyan); } | |
| .chat-send-btn { | |
| background: var(--cyan); border: none; color: #000; | |
| padding: .5rem .75rem; border-radius: 8px; | |
| cursor: pointer; font-weight: 700; font-size: .85rem; | |
| } | |
| .chat-send-btn:hover { filter: brightness(1.1); } | |
| /* Power-ups */ | |
| .powerup-bar { | |
| padding: .5rem .75rem; | |
| border-top: 1px solid var(--border); | |
| display: flex; gap: .5rem; align-items: center; | |
| } | |
| .powerup-bar label { font-size: .7rem; text-transform: uppercase; color: var(--text2); font-weight: 700; } | |
| .pu-btn { | |
| flex: 1; padding: .4rem; border-radius: 8px; | |
| background: var(--surface); border: 1px solid var(--border); | |
| cursor: pointer; font-size: .7rem; text-align: center; | |
| transition: all .2s; color: var(--text); | |
| display: flex; flex-direction: column; align-items: center; | |
| } | |
| .pu-btn:hover:not(:disabled) { border-color: var(--purple); background: rgba(157,0,255,.1); } | |
| .pu-btn:disabled { opacity: .35; cursor: not-allowed; } | |
| .pu-btn .pu-icon { font-size: 1.1rem; } | |
| .pu-btn .pu-count { font-size: .7rem; color: var(--text2); } | |
| /* Reactions bar */ | |
| .reactions-bar { | |
| padding: .35rem .75rem; | |
| border-top: 1px solid var(--border); | |
| display: flex; gap: .3rem; justify-content: center; | |
| flex-wrap: wrap; | |
| } | |
| .react-btn { | |
| background: none; border: 1px solid var(--border); | |
| border-radius: 8px; padding: .25rem .4rem; | |
| cursor: pointer; font-size: 1rem; | |
| transition: all .15s; | |
| } | |
| .react-btn:hover { background: var(--surface2); transform: scale(1.2); border-color: var(--text2); } | |
| /* Floating reactions */ | |
| .floating-reaction { | |
| position: fixed; | |
| font-size: 2rem; | |
| pointer-events: none; | |
| z-index: 1000; | |
| animation: floatUp 2.5s ease-out forwards; | |
| } | |
| @keyframes floatUp { | |
| 0% { opacity: 1; transform: translateY(0) scale(1); } | |
| 80% { opacity: 1; transform: translateY(-120px) scale(1.4); } | |
| 100% { opacity: 0; transform: translateY(-160px) scale(.8); } | |
| } | |
| /* Overlays */ | |
| .overlay { | |
| position: fixed; inset: 0; | |
| background: rgba(0,0,0,.8); backdrop-filter: blur(8px); | |
| display: flex; align-items: center; justify-content: center; | |
| z-index: 100; padding: 1rem; | |
| } | |
| .overlay-card { | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 20px; | |
| padding: 2rem; | |
| width: 100%; max-width: 500px; | |
| text-align: center; | |
| animation: popIn .3s cubic-bezier(.34,1.56,.64,1); | |
| } | |
| @keyframes popIn { | |
| from { opacity: 0; transform: scale(.85); } | |
| to { opacity: 1; transform: scale(1); } | |
| } | |
| .overlay-card h2 { | |
| font-family: 'Boogaloo', cursive; | |
| font-size: 2rem; margin-bottom: 1rem; | |
| background: linear-gradient(135deg, var(--cyan), var(--pink)); | |
| -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; | |
| } | |
| /* Word choice overlay */ | |
| .word-choices { display: flex; flex-direction: column; gap: .75rem; margin: 1.5rem 0; } | |
| .word-choice-btn { | |
| padding: .9rem 1.5rem; border: 2px solid var(--border); | |
| border-radius: var(--radius); background: var(--bg2); | |
| color: var(--text); font-family: 'Nunito', sans-serif; | |
| font-size: 1.1rem; font-weight: 700; cursor: pointer; | |
| transition: all .2s; text-transform: capitalize; | |
| } | |
| .word-choice-btn:hover { | |
| border-color: var(--cyan); background: rgba(0,245,255,.08); | |
| color: var(--cyan); transform: translateY(-2px); | |
| box-shadow: 0 6px 25px rgba(0,245,255,.2); | |
| } | |
| /* Round end overlay */ | |
| .round-end-word { | |
| font-size: 2.5rem; font-family: 'Boogaloo', cursive; | |
| color: var(--yellow); text-shadow: 0 0 30px rgba(255,230,0,.5); | |
| margin: .5rem 0 1.5rem; | |
| } | |
| .round-scores { display: flex; flex-direction: column; gap: .5rem; max-height: 240px; overflow-y: auto; } | |
| .round-score-row { | |
| display: flex; align-items: center; gap: .75rem; | |
| padding: .5rem .75rem; border-radius: 10px; | |
| background: var(--bg2); border: 1px solid var(--border); | |
| } | |
| .round-score-row.first-place { border-color: var(--yellow); background: rgba(255,230,0,.05); } | |
| .rsr-rank { font-size: 1.2rem; width: 28px; text-align: center; } | |
| .rsr-avatar { font-size: 1.3rem; } | |
| .rsr-name { flex: 1; font-weight: 700; font-size: .9rem; } | |
| .rsr-score { font-weight: 800; color: var(--cyan); } | |
| .rsr-gain { color: var(--green); font-size: .8rem; } | |
| /* Replay canvas */ | |
| #replay-canvas { | |
| border-radius: 8px; max-width: 100%; | |
| border: 1px solid var(--border); | |
| } | |
| /* Game end overlay */ | |
| .podium { | |
| display: flex; align-items: flex-end; | |
| justify-content: center; gap: .75rem; | |
| margin: 1.5rem 0; | |
| } | |
| .podium-place { | |
| display: flex; flex-direction: column; align-items: center; | |
| gap: .4rem; | |
| } | |
| .podium-avatar { font-size: 2rem; } | |
| .podium-name { font-size: .8rem; font-weight: 700; max-width: 70px; text-align: center; word-break: break-word; } | |
| .podium-score { font-size: .75rem; color: var(--cyan); font-weight: 800; } | |
| .podium-block { | |
| border-radius: 8px 8px 0 0; | |
| width: 70px; display: flex; align-items: center; justify-content: center; | |
| font-family: 'Boogaloo', cursive; font-size: 1.5rem; font-weight: 700; | |
| } | |
| .podium-place:nth-child(1) .podium-block { height: 80px; background: linear-gradient(to top, #c0a000, var(--yellow)); color: #000; } | |
| .podium-place:nth-child(2) .podium-block { height: 60px; background: linear-gradient(to top, #808080, #c0c0c0); color: #000; } | |
| .podium-place:nth-child(3) .podium-block { height: 44px; background: linear-gradient(to top, #804020, #cd7f32); color: #000; } | |
| .achievements-list { display: flex; flex-wrap: wrap; gap: .4rem; justify-content: center; margin-top: .75rem; } | |
| .ach-badge { | |
| padding: .25rem .6rem; border-radius: 20px; | |
| background: rgba(157,0,255,.15); border: 1px solid rgba(157,0,255,.3); | |
| font-size: .75rem; color: #cc88ff; | |
| } | |
| /* Achievement popup */ | |
| .ach-popup { | |
| position: fixed; top: 70px; right: 1rem; | |
| background: var(--surface); border: 1px solid var(--purple); | |
| border-radius: var(--radius); padding: .75rem 1rem; | |
| z-index: 200; box-shadow: 0 0 25px rgba(157,0,255,.3); | |
| animation: slideInRight .3s ease, fadeOut .4s ease 2.6s forwards; | |
| max-width: 260px; | |
| } | |
| @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } } | |
| @keyframes fadeOut { to { opacity: 0; transform: translateX(100%); } } | |
| .ach-popup-name { font-weight: 800; color: var(--purple); } | |
| .ach-popup-desc { font-size: .8rem; color: var(--text2); margin-top: .2rem; } | |
| /* Waiting state */ | |
| .waiting-overlay { | |
| position: absolute; inset: 0; | |
| display: flex; flex-direction: column; | |
| align-items: center; justify-content: center; | |
| background: rgba(8,8,15,.85); | |
| border-radius: 8px; gap: 1rem; z-index: 5; | |
| } | |
| .waiting-overlay h3 { font-family: 'Boogaloo', cursive; font-size: 1.8rem; color: var(--cyan); } | |
| .waiting-overlay p { color: var(--text2); font-size: .9rem; } | |
| /* Spectator badge */ | |
| .spectator-badge { | |
| padding: .25rem .6rem; background: rgba(255,106,0,.15); | |
| border: 1px solid rgba(255,106,0,.3); border-radius: 20px; | |
| color: var(--orange); font-size: .75rem; font-weight: 700; | |
| } | |
| /* Score graph (in round end) */ | |
| .score-graph-wrap { margin-top: 1rem; } | |
| .score-graph-wrap canvas { border-radius: 8px; max-width: 100%; } | |
| /* Hint word display */ | |
| .hint-display { | |
| font-family: 'Boogaloo', cursive; font-size: 1.6rem; | |
| letter-spacing: .25em; color: var(--text); | |
| text-align: center; padding: .25rem; | |
| } | |
| .hint-display .revealed { color: var(--cyan); text-shadow: 0 0 10px rgba(0,245,255,.4); } | |
| /* Spinner */ | |
| .spinner { | |
| width: 32px; height: 32px; border-radius: 50%; | |
| border: 3px solid var(--border); | |
| border-top-color: var(--cyan); | |
| animation: spin .7s linear infinite; | |
| } | |
| @keyframes spin { to { transform: rotate(360deg); } } | |
| /* Responsive */ | |
| @media (max-width: 768px) { | |
| .game-body { grid-template-columns: 140px 1fr; } | |
| .chat-panel { display: none; } | |
| .chat-panel.mobile-open { display: flex; position: fixed; inset: 0; z-index: 50; width: 100%; } | |
| } | |
| @media (max-width: 540px) { | |
| .game-body { grid-template-columns: 1fr; grid-template-rows: auto 1fr; } | |
| .players-panel { display: none; } | |
| } | |