1638 lines
32 KiB
CSS
1638 lines
32 KiB
CSS
/**
|
||
* =============================================================================
|
||
* Texas Hold'em - Стили 2025/2026
|
||
* Современный минималистичный UI с glassmorphism и анимациями
|
||
* =============================================================================
|
||
*/
|
||
|
||
/* CSS Variables */
|
||
:root {
|
||
/* Цвета */
|
||
--bg-primary: #0a0a0f;
|
||
--bg-secondary: #12121a;
|
||
--bg-tertiary: #1a1a25;
|
||
|
||
--glass-bg: rgba(255, 255, 255, 0.05);
|
||
--glass-border: rgba(255, 255, 255, 0.1);
|
||
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
||
|
||
--text-primary: #ffffff;
|
||
--text-secondary: rgba(255, 255, 255, 0.7);
|
||
--text-muted: rgba(255, 255, 255, 0.4);
|
||
|
||
--accent-primary: #6366f1;
|
||
--accent-secondary: #8b5cf6;
|
||
--accent-gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
|
||
|
||
--success: #10b981;
|
||
--warning: #f59e0b;
|
||
--danger: #ef4444;
|
||
--info: #3b82f6;
|
||
|
||
/* Карточные масти */
|
||
--suit-hearts: #ef4444;
|
||
--suit-diamonds: #ef4444;
|
||
--suit-clubs: #1f2937;
|
||
--suit-spades: #1f2937;
|
||
|
||
/* Стол */
|
||
--table-felt: #1a5f3c;
|
||
--table-border: #0f3d26;
|
||
--table-shadow: 0 0 60px rgba(16, 185, 129, 0.2);
|
||
|
||
/* Размеры */
|
||
--border-radius: 16px;
|
||
--border-radius-sm: 8px;
|
||
--border-radius-lg: 24px;
|
||
|
||
/* Анимации */
|
||
--transition-fast: 0.15s ease;
|
||
--transition-normal: 0.3s ease;
|
||
--transition-slow: 0.5s ease;
|
||
}
|
||
|
||
/* Reset & Base */
|
||
*, *::before, *::after {
|
||
box-sizing: border-box;
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
html, body {
|
||
height: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
body {
|
||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||
background: var(--bg-primary);
|
||
color: var(--text-primary);
|
||
line-height: 1.5;
|
||
-webkit-font-smoothing: antialiased;
|
||
}
|
||
|
||
/* Animated Background */
|
||
body::before {
|
||
content: '';
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background:
|
||
radial-gradient(ellipse at 20% 20%, rgba(99, 102, 241, 0.15) 0%, transparent 50%),
|
||
radial-gradient(ellipse at 80% 80%, rgba(139, 92, 246, 0.1) 0%, transparent 50%),
|
||
radial-gradient(ellipse at 50% 50%, rgba(16, 185, 129, 0.05) 0%, transparent 70%);
|
||
pointer-events: none;
|
||
z-index: -1;
|
||
}
|
||
|
||
/* =============================================================================
|
||
SCREENS
|
||
============================================================================= */
|
||
|
||
.screen {
|
||
display: none;
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
justify-content: center;
|
||
align-items: center;
|
||
padding: 20px;
|
||
animation: fadeIn 0.3s ease;
|
||
}
|
||
|
||
.screen.active {
|
||
display: flex;
|
||
}
|
||
|
||
@keyframes fadeIn {
|
||
from { opacity: 0; }
|
||
to { opacity: 1; }
|
||
}
|
||
|
||
/* =============================================================================
|
||
GLASS MORPHISM COMPONENTS
|
||
============================================================================= */
|
||
|
||
.glass-container {
|
||
background: var(--glass-bg);
|
||
backdrop-filter: blur(20px);
|
||
-webkit-backdrop-filter: blur(20px);
|
||
border: 1px solid var(--glass-border);
|
||
border-radius: var(--border-radius-lg);
|
||
box-shadow: var(--glass-shadow);
|
||
padding: 32px;
|
||
}
|
||
|
||
.glass-card {
|
||
background: var(--glass-bg);
|
||
backdrop-filter: blur(10px);
|
||
-webkit-backdrop-filter: blur(10px);
|
||
border: 1px solid var(--glass-border);
|
||
border-radius: var(--border-radius);
|
||
padding: 16px;
|
||
}
|
||
|
||
/* =============================================================================
|
||
MENU STYLES
|
||
============================================================================= */
|
||
|
||
.menu-container {
|
||
width: 100%;
|
||
max-width: 480px;
|
||
max-height: 90vh;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.logo {
|
||
text-align: center;
|
||
margin-bottom: 40px;
|
||
}
|
||
|
||
.logo-icon {
|
||
font-size: 64px;
|
||
display: block;
|
||
margin-bottom: 16px;
|
||
animation: float 3s ease-in-out infinite;
|
||
}
|
||
|
||
@keyframes float {
|
||
0%, 100% { transform: translateY(0); }
|
||
50% { transform: translateY(-10px); }
|
||
}
|
||
|
||
.logo h1 {
|
||
font-size: 32px;
|
||
font-weight: 700;
|
||
background: var(--accent-gradient);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.subtitle {
|
||
color: var(--text-secondary);
|
||
font-size: 14px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
}
|
||
|
||
.menu-buttons {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 16px;
|
||
margin-bottom: 32px;
|
||
}
|
||
|
||
.settings-row {
|
||
display: flex;
|
||
justify-content: center;
|
||
gap: 16px;
|
||
}
|
||
|
||
/* =============================================================================
|
||
BUTTONS
|
||
============================================================================= */
|
||
|
||
.btn {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 8px;
|
||
padding: 12px 24px;
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
border: none;
|
||
border-radius: var(--border-radius-sm);
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
font-family: inherit;
|
||
text-decoration: none;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.btn:active {
|
||
transform: scale(0.98);
|
||
}
|
||
|
||
.btn-primary {
|
||
background: var(--accent-gradient);
|
||
color: white;
|
||
box-shadow: 0 4px 15px rgba(99, 102, 241, 0.4);
|
||
}
|
||
|
||
.btn-primary:hover {
|
||
box-shadow: 0 6px 20px rgba(99, 102, 241, 0.5);
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
.btn-secondary {
|
||
background: var(--bg-tertiary);
|
||
color: var(--text-primary);
|
||
border: 1px solid var(--glass-border);
|
||
}
|
||
|
||
.btn-secondary:hover {
|
||
background: rgba(255, 255, 255, 0.1);
|
||
}
|
||
|
||
.btn-outline {
|
||
background: transparent;
|
||
color: var(--text-primary);
|
||
border: 1px solid var(--glass-border);
|
||
}
|
||
|
||
.btn-outline:hover {
|
||
background: var(--glass-bg);
|
||
}
|
||
|
||
.btn-large {
|
||
padding: 16px 32px;
|
||
font-size: 16px;
|
||
border-radius: var(--border-radius);
|
||
}
|
||
|
||
.btn-small {
|
||
padding: 8px 16px;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.btn-icon-only {
|
||
width: 48px;
|
||
height: 48px;
|
||
padding: 0;
|
||
font-size: 20px;
|
||
background: var(--glass-bg);
|
||
border: 1px solid var(--glass-border);
|
||
border-radius: 50%;
|
||
}
|
||
|
||
.btn-icon {
|
||
font-size: 20px;
|
||
}
|
||
|
||
.btn-back {
|
||
position: absolute;
|
||
top: 16px;
|
||
left: 16px;
|
||
background: none;
|
||
border: none;
|
||
color: var(--text-secondary);
|
||
font-size: 14px;
|
||
cursor: pointer;
|
||
padding: 8px;
|
||
transition: color var(--transition-fast);
|
||
}
|
||
|
||
.btn-back:hover {
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
/* Action Buttons */
|
||
.btn-fold {
|
||
background: var(--danger);
|
||
color: white;
|
||
}
|
||
|
||
.btn-check {
|
||
background: var(--info);
|
||
color: white;
|
||
}
|
||
|
||
.btn-call {
|
||
background: var(--success);
|
||
color: white;
|
||
}
|
||
|
||
.btn-bet, .btn-raise {
|
||
background: var(--warning);
|
||
color: white;
|
||
}
|
||
|
||
.btn-allin {
|
||
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
|
||
color: white;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.btn:disabled {
|
||
opacity: 0.5;
|
||
cursor: not-allowed;
|
||
transform: none !important;
|
||
}
|
||
|
||
/* Option Buttons */
|
||
.btn-option {
|
||
background: var(--bg-tertiary);
|
||
color: var(--text-secondary);
|
||
border: 1px solid transparent;
|
||
flex: 1;
|
||
}
|
||
|
||
.btn-option:hover {
|
||
background: rgba(99, 102, 241, 0.1);
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
.btn-option.active {
|
||
background: var(--accent-gradient);
|
||
color: white;
|
||
border-color: transparent;
|
||
}
|
||
|
||
.btn-group {
|
||
display: flex;
|
||
gap: 8px;
|
||
}
|
||
|
||
.difficulty-group {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.difficulty-group .btn-option {
|
||
flex-direction: column;
|
||
padding: 16px;
|
||
gap: 8px;
|
||
}
|
||
|
||
.diff-icon {
|
||
font-size: 24px;
|
||
}
|
||
|
||
.diff-name {
|
||
font-size: 12px;
|
||
}
|
||
|
||
/* =============================================================================
|
||
FORMS
|
||
============================================================================= */
|
||
|
||
.form-group {
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.form-group label {
|
||
display: block;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
color: var(--text-secondary);
|
||
text-transform: uppercase;
|
||
letter-spacing: 1px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.input {
|
||
width: 100%;
|
||
padding: 14px 16px;
|
||
font-size: 14px;
|
||
font-family: inherit;
|
||
color: var(--text-primary);
|
||
background: var(--bg-tertiary);
|
||
border: 1px solid var(--glass-border);
|
||
border-radius: var(--border-radius-sm);
|
||
outline: none;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.input:focus {
|
||
border-color: var(--accent-primary);
|
||
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
|
||
}
|
||
|
||
.input::placeholder {
|
||
color: var(--text-muted);
|
||
}
|
||
|
||
/* =============================================================================
|
||
TABS
|
||
============================================================================= */
|
||
|
||
.tabs {
|
||
display: flex;
|
||
gap: 4px;
|
||
background: var(--bg-tertiary);
|
||
padding: 4px;
|
||
border-radius: var(--border-radius-sm);
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.tab {
|
||
flex: 1;
|
||
padding: 12px;
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
background: transparent;
|
||
border: none;
|
||
color: var(--text-secondary);
|
||
cursor: pointer;
|
||
border-radius: var(--border-radius-sm);
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.tab:hover {
|
||
color: var(--text-primary);
|
||
}
|
||
|
||
.tab.active {
|
||
background: var(--accent-gradient);
|
||
color: white;
|
||
}
|
||
|
||
.tab-content {
|
||
display: none;
|
||
}
|
||
|
||
.tab-content.active {
|
||
display: block;
|
||
}
|
||
|
||
/* =============================================================================
|
||
ROOM LIST
|
||
============================================================================= */
|
||
|
||
.room-list {
|
||
max-height: 300px;
|
||
overflow-y: auto;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.room-list-loading {
|
||
text-align: center;
|
||
color: var(--text-muted);
|
||
padding: 40px;
|
||
}
|
||
|
||
.room-item {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 16px;
|
||
background: var(--bg-tertiary);
|
||
border-radius: var(--border-radius-sm);
|
||
margin-bottom: 8px;
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.room-item:hover {
|
||
background: rgba(99, 102, 241, 0.1);
|
||
}
|
||
|
||
.room-info h4 {
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
margin-bottom: 4px;
|
||
}
|
||
|
||
.room-info span {
|
||
font-size: 12px;
|
||
color: var(--text-muted);
|
||
}
|
||
|
||
.room-players {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
color: var(--text-secondary);
|
||
font-size: 14px;
|
||
}
|
||
|
||
.room-status {
|
||
width: 8px;
|
||
height: 8px;
|
||
border-radius: 50%;
|
||
background: var(--success);
|
||
}
|
||
|
||
.room-status.playing {
|
||
background: var(--warning);
|
||
}
|
||
|
||
/* =============================================================================
|
||
LOBBY
|
||
============================================================================= */
|
||
|
||
.lobby-container {
|
||
width: 100%;
|
||
max-width: 600px;
|
||
position: relative;
|
||
}
|
||
|
||
.lobby-players {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
||
gap: 12px;
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.lobby-player {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
padding: 16px;
|
||
background: var(--bg-tertiary);
|
||
border-radius: var(--border-radius);
|
||
}
|
||
|
||
.lobby-player-avatar {
|
||
width: 48px;
|
||
height: 48px;
|
||
border-radius: 50%;
|
||
background: var(--accent-gradient);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 20px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.lobby-player-name {
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.lobby-player.host .lobby-player-avatar {
|
||
box-shadow: 0 0 0 3px var(--warning);
|
||
}
|
||
|
||
.lobby-info {
|
||
display: flex;
|
||
justify-content: center;
|
||
gap: 24px;
|
||
margin-bottom: 24px;
|
||
color: var(--text-secondary);
|
||
font-size: 14px;
|
||
}
|
||
|
||
.lobby-chat {
|
||
margin-top: 24px;
|
||
border-top: 1px solid var(--glass-border);
|
||
padding-top: 16px;
|
||
}
|
||
|
||
/* =============================================================================
|
||
CHAT
|
||
============================================================================= */
|
||
|
||
.chat-messages {
|
||
height: 150px;
|
||
overflow-y: auto;
|
||
margin-bottom: 12px;
|
||
padding: 8px;
|
||
background: var(--bg-secondary);
|
||
border-radius: var(--border-radius-sm);
|
||
}
|
||
|
||
.chat-message {
|
||
margin-bottom: 8px;
|
||
font-size: 13px;
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.chat-message .sender {
|
||
font-weight: 600;
|
||
color: var(--accent-primary);
|
||
}
|
||
|
||
.chat-message .time {
|
||
font-size: 10px;
|
||
color: var(--text-muted);
|
||
margin-left: 8px;
|
||
}
|
||
|
||
.chat-message.system {
|
||
color: var(--text-muted);
|
||
font-style: italic;
|
||
}
|
||
|
||
/* Индикатор "печатает..." */
|
||
.chat-message.typing-indicator {
|
||
opacity: 0.7;
|
||
}
|
||
|
||
.typing-dots span {
|
||
animation: typingBlink 1.4s infinite both;
|
||
}
|
||
|
||
.typing-dots span:nth-child(2) {
|
||
animation-delay: 0.2s;
|
||
}
|
||
|
||
.typing-dots span:nth-child(3) {
|
||
animation-delay: 0.4s;
|
||
}
|
||
|
||
@keyframes typingBlink {
|
||
0%, 80%, 100% { opacity: 0; }
|
||
40% { opacity: 1; }
|
||
}
|
||
|
||
.chat-input-row {
|
||
display: flex;
|
||
gap: 8px;
|
||
}
|
||
|
||
.chat-input-row .input {
|
||
flex: 1;
|
||
}
|
||
|
||
.chat-input-row .btn {
|
||
width: 48px;
|
||
}
|
||
|
||
/* Game Chat */
|
||
.game-chat {
|
||
position: fixed;
|
||
bottom: 20px;
|
||
left: 20px;
|
||
width: 300px;
|
||
z-index: 100;
|
||
}
|
||
|
||
.chat-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
cursor: pointer;
|
||
padding-bottom: 12px;
|
||
border-bottom: 1px solid var(--glass-border);
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.chat-body {
|
||
display: none;
|
||
}
|
||
|
||
.game-chat.expanded .chat-body {
|
||
display: block;
|
||
}
|
||
|
||
.game-chat.expanded .chat-toggle {
|
||
transform: rotate(180deg);
|
||
}
|
||
|
||
/* =============================================================================
|
||
POKER TABLE
|
||
============================================================================= */
|
||
|
||
.game-container {
|
||
width: 100%;
|
||
height: 100%;
|
||
position: relative;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: 20px;
|
||
}
|
||
|
||
.table-info {
|
||
position: absolute;
|
||
top: 20px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
display: flex;
|
||
gap: 16px;
|
||
z-index: 10;
|
||
}
|
||
|
||
.pot-display {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
padding: 12px 24px;
|
||
}
|
||
|
||
.pot-label {
|
||
font-size: 10px;
|
||
color: var(--text-muted);
|
||
text-transform: uppercase;
|
||
letter-spacing: 1px;
|
||
}
|
||
|
||
.pot-amount {
|
||
font-size: 24px;
|
||
font-weight: 700;
|
||
background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
}
|
||
|
||
.phase-display {
|
||
padding: 12px 24px;
|
||
font-size: 14px;
|
||
font-weight: 500;
|
||
text-transform: uppercase;
|
||
letter-spacing: 1px;
|
||
}
|
||
|
||
.poker-table {
|
||
width: 100%;
|
||
max-width: 900px;
|
||
aspect-ratio: 2 / 1;
|
||
position: relative;
|
||
}
|
||
|
||
.table-felt {
|
||
width: 100%;
|
||
height: 100%;
|
||
background: linear-gradient(145deg, #1e6f4a 0%, var(--table-felt) 50%, #145535 100%);
|
||
border-radius: 50%;
|
||
border: 12px solid var(--table-border);
|
||
box-shadow:
|
||
var(--table-shadow),
|
||
inset 0 0 50px rgba(0, 0, 0, 0.3),
|
||
0 10px 40px rgba(0, 0, 0, 0.5);
|
||
position: relative;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.table-felt::before {
|
||
content: '';
|
||
position: absolute;
|
||
inset: 30px;
|
||
border: 2px solid rgba(255, 255, 255, 0.1);
|
||
border-radius: 50%;
|
||
}
|
||
|
||
/* Community Cards */
|
||
.community-cards {
|
||
display: flex;
|
||
gap: 8px;
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
transform: translate(-50%, -50%);
|
||
}
|
||
|
||
/* Player Positions */
|
||
.player-positions {
|
||
position: absolute;
|
||
inset: 0;
|
||
}
|
||
|
||
.player-seat {
|
||
position: absolute;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
transform: translate(-50%, -50%);
|
||
}
|
||
|
||
/* Position 6-max layout */
|
||
.player-seat[data-position="0"] { top: 100%; left: 50%; }
|
||
.player-seat[data-position="1"] { top: 85%; left: 15%; }
|
||
.player-seat[data-position="2"] { top: 30%; left: 5%; }
|
||
.player-seat[data-position="3"] { top: -5%; left: 50%; }
|
||
.player-seat[data-position="4"] { top: 30%; left: 95%; }
|
||
.player-seat[data-position="5"] { top: 85%; left: 85%; }
|
||
|
||
.player-box {
|
||
background: var(--glass-bg);
|
||
backdrop-filter: blur(10px);
|
||
border: 2px solid var(--glass-border);
|
||
border-radius: var(--border-radius);
|
||
padding: 12px 16px;
|
||
min-width: 120px;
|
||
text-align: center;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.player-box.current-turn {
|
||
border-color: var(--accent-primary);
|
||
box-shadow: 0 0 20px rgba(99, 102, 241, 0.4);
|
||
animation: pulse 1.5s infinite;
|
||
}
|
||
|
||
@keyframes pulse {
|
||
0%, 100% { box-shadow: 0 0 20px rgba(99, 102, 241, 0.4); }
|
||
50% { box-shadow: 0 0 30px rgba(99, 102, 241, 0.6); }
|
||
}
|
||
|
||
.player-box.folded {
|
||
opacity: 0.4;
|
||
}
|
||
|
||
.player-box.winner {
|
||
border-color: var(--success);
|
||
box-shadow: 0 0 20px rgba(16, 185, 129, 0.5);
|
||
}
|
||
|
||
.player-name {
|
||
font-size: 12px;
|
||
font-weight: 600;
|
||
margin-bottom: 4px;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
max-width: 100px;
|
||
}
|
||
|
||
.player-chips {
|
||
font-size: 14px;
|
||
font-weight: 700;
|
||
color: var(--warning);
|
||
}
|
||
|
||
.player-action {
|
||
font-size: 10px;
|
||
color: var(--text-secondary);
|
||
margin-top: 4px;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.player-cards-mini {
|
||
display: flex;
|
||
gap: 4px;
|
||
margin-top: 8px;
|
||
justify-content: center;
|
||
}
|
||
|
||
.player-bet-display {
|
||
position: absolute;
|
||
background: rgba(0, 0, 0, 0.7);
|
||
padding: 4px 12px;
|
||
border-radius: 20px;
|
||
font-size: 14px;
|
||
font-weight: 600;
|
||
color: var(--warning);
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/* Dealer Button */
|
||
.dealer-button {
|
||
position: absolute;
|
||
width: 28px;
|
||
height: 28px;
|
||
background: white;
|
||
color: #1f2937;
|
||
border-radius: 50%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 10px;
|
||
font-weight: 700;
|
||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||
}
|
||
|
||
.blind-indicator {
|
||
position: absolute;
|
||
padding: 2px 8px;
|
||
border-radius: 10px;
|
||
font-size: 9px;
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.blind-indicator.sb {
|
||
background: var(--info);
|
||
color: white;
|
||
}
|
||
|
||
.blind-indicator.bb {
|
||
background: var(--warning);
|
||
color: white;
|
||
}
|
||
|
||
/* =============================================================================
|
||
CARDS
|
||
============================================================================= */
|
||
|
||
.card {
|
||
width: 60px;
|
||
height: 84px;
|
||
border-radius: 8px;
|
||
background: white;
|
||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-weight: 700;
|
||
position: relative;
|
||
transition: transform var(--transition-fast);
|
||
transform-style: preserve-3d;
|
||
}
|
||
|
||
.card:hover {
|
||
transform: translateY(-5px);
|
||
}
|
||
|
||
.card-back {
|
||
background: var(--card-back-bg, linear-gradient(135deg, #1e40af 0%, #3b82f6 50%, #1e40af 100%));
|
||
background-size: var(--card-back-size, cover);
|
||
background-position: center;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.card-back .card-back-pattern {
|
||
position: absolute;
|
||
inset: 0;
|
||
background: var(--card-back-pattern, repeating-linear-gradient(
|
||
45deg,
|
||
transparent,
|
||
transparent 5px,
|
||
rgba(255,255,255,0.05) 5px,
|
||
rgba(255,255,255,0.05) 10px
|
||
));
|
||
}
|
||
|
||
.card-back::after {
|
||
content: var(--card-back-icon, '🃏');
|
||
position: absolute;
|
||
font-size: 24px;
|
||
opacity: var(--card-back-icon-opacity, 1);
|
||
}
|
||
|
||
/* Стили рубашек */
|
||
.card-back.style-default {
|
||
--card-back-bg: linear-gradient(135deg, #1e40af 0%, #3b82f6 50%, #1e40af 100%);
|
||
--card-back-icon: '🃏';
|
||
}
|
||
|
||
.card-back.style-red {
|
||
--card-back-bg: linear-gradient(135deg, #991b1b 0%, #dc2626 50%, #991b1b 100%);
|
||
--card-back-icon: '♦️';
|
||
}
|
||
|
||
.card-back.style-blue {
|
||
--card-back-bg: linear-gradient(135deg, #0c4a6e 0%, #0284c7 50%, #0c4a6e 100%);
|
||
--card-back-icon: '♠️';
|
||
}
|
||
|
||
.card-back.style-custom {
|
||
--card-back-icon-opacity: 0;
|
||
}
|
||
|
||
/* Настройки рубашки карт */
|
||
.card-back-settings {
|
||
display: flex;
|
||
gap: 20px;
|
||
align-items: flex-start;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.card-back-preview {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
|
||
.card-back-preview .card {
|
||
width: 70px;
|
||
height: 100px;
|
||
font-size: 16px;
|
||
}
|
||
|
||
.card-back-preview .preview-label {
|
||
font-size: 12px;
|
||
color: var(--text-muted);
|
||
}
|
||
|
||
.card-back-options {
|
||
flex: 1;
|
||
}
|
||
|
||
.card-back-styles {
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.card-back-styles .btn-option {
|
||
font-size: 13px;
|
||
padding: 8px 12px;
|
||
}
|
||
|
||
.card-small {
|
||
width: 40px;
|
||
height: 56px;
|
||
font-size: 10px;
|
||
}
|
||
|
||
.card-small .card-rank {
|
||
font-size: 14px;
|
||
}
|
||
|
||
.card-rank {
|
||
font-size: 24px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.card-suit {
|
||
font-size: 20px;
|
||
line-height: 1;
|
||
}
|
||
|
||
.card.hearts, .card.diamonds {
|
||
color: var(--suit-hearts);
|
||
}
|
||
|
||
.card.clubs, .card.spades {
|
||
color: var(--suit-clubs);
|
||
}
|
||
|
||
/* Card Animation */
|
||
.card.dealing {
|
||
animation: dealCard 0.5s ease-out;
|
||
}
|
||
|
||
@keyframes dealCard {
|
||
from {
|
||
transform: translateY(-100px) rotateY(180deg) scale(0.5);
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
transform: translateY(0) rotateY(0) scale(1);
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
.card.flipping {
|
||
animation: flipCard 0.6s ease-in-out;
|
||
}
|
||
|
||
@keyframes flipCard {
|
||
0% { transform: rotateY(0); }
|
||
50% { transform: rotateY(90deg); }
|
||
100% { transform: rotateY(0); }
|
||
}
|
||
|
||
/* Player Hand Container */
|
||
.player-hand-container {
|
||
position: absolute;
|
||
bottom: 140px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 8px;
|
||
}
|
||
|
||
.player-cards {
|
||
display: flex;
|
||
gap: 8px;
|
||
}
|
||
|
||
.player-cards .card {
|
||
width: 70px;
|
||
height: 98px;
|
||
}
|
||
|
||
.player-cards .card:hover {
|
||
transform: translateY(-10px);
|
||
}
|
||
|
||
.hand-strength {
|
||
font-size: 12px;
|
||
color: var(--text-secondary);
|
||
text-transform: uppercase;
|
||
letter-spacing: 1px;
|
||
}
|
||
|
||
/* =============================================================================
|
||
ACTION PANEL
|
||
============================================================================= */
|
||
|
||
.action-panel {
|
||
position: absolute;
|
||
bottom: 20px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
padding: 16px 24px;
|
||
width: 100%;
|
||
max-width: 600px;
|
||
}
|
||
|
||
.action-buttons {
|
||
display: flex;
|
||
gap: 8px;
|
||
flex-wrap: wrap;
|
||
justify-content: center;
|
||
}
|
||
|
||
.action-buttons .btn {
|
||
flex: 1;
|
||
min-width: 80px;
|
||
max-width: 100px;
|
||
}
|
||
|
||
.bet-slider-container {
|
||
margin-top: 16px;
|
||
padding-top: 16px;
|
||
border-top: 1px solid var(--glass-border);
|
||
}
|
||
|
||
.bet-slider {
|
||
width: 100%;
|
||
height: 8px;
|
||
border-radius: 4px;
|
||
background: var(--bg-tertiary);
|
||
appearance: none;
|
||
outline: none;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.bet-slider::-webkit-slider-thumb {
|
||
appearance: none;
|
||
width: 24px;
|
||
height: 24px;
|
||
border-radius: 50%;
|
||
background: var(--accent-gradient);
|
||
cursor: pointer;
|
||
box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4);
|
||
}
|
||
|
||
.bet-slider::-moz-range-thumb {
|
||
width: 24px;
|
||
height: 24px;
|
||
border-radius: 50%;
|
||
background: var(--accent-gradient);
|
||
cursor: pointer;
|
||
border: none;
|
||
}
|
||
|
||
.bet-value-display {
|
||
display: flex;
|
||
justify-content: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.bet-input {
|
||
width: 120px;
|
||
text-align: center;
|
||
font-size: 24px;
|
||
font-weight: 700;
|
||
background: var(--bg-tertiary);
|
||
border: 2px solid var(--accent-primary);
|
||
border-radius: var(--border-radius-sm);
|
||
color: var(--text-primary);
|
||
padding: 8px;
|
||
}
|
||
|
||
.bet-presets {
|
||
display: flex;
|
||
gap: 8px;
|
||
justify-content: center;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.bet-confirm {
|
||
display: flex;
|
||
gap: 8px;
|
||
justify-content: center;
|
||
}
|
||
|
||
/* =============================================================================
|
||
GAME CONTROLS
|
||
============================================================================= */
|
||
|
||
.game-controls {
|
||
position: fixed;
|
||
top: 20px;
|
||
right: 20px;
|
||
display: flex;
|
||
gap: 8px;
|
||
z-index: 100;
|
||
}
|
||
|
||
.new-hand-btn {
|
||
position: absolute;
|
||
bottom: 200px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
animation: bounce 1s infinite;
|
||
}
|
||
|
||
@keyframes bounce {
|
||
0%, 100% { transform: translateX(-50%) translateY(0); }
|
||
50% { transform: translateX(-50%) translateY(-10px); }
|
||
}
|
||
|
||
/* =============================================================================
|
||
LEADERBOARD
|
||
============================================================================= */
|
||
|
||
.leaderboard-tabs {
|
||
display: flex;
|
||
gap: 4px;
|
||
background: var(--bg-tertiary);
|
||
padding: 4px;
|
||
border-radius: var(--border-radius-sm);
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.leaderboard-list {
|
||
max-height: 400px;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.leaderboard-item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 16px;
|
||
padding: 12px;
|
||
background: var(--bg-tertiary);
|
||
border-radius: var(--border-radius-sm);
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.leaderboard-rank {
|
||
width: 32px;
|
||
height: 32px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-weight: 700;
|
||
border-radius: 50%;
|
||
background: var(--bg-secondary);
|
||
}
|
||
|
||
.leaderboard-rank.gold {
|
||
background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);
|
||
color: #1f2937;
|
||
}
|
||
|
||
.leaderboard-rank.silver {
|
||
background: linear-gradient(135deg, #9ca3af 0%, #6b7280 100%);
|
||
color: white;
|
||
}
|
||
|
||
.leaderboard-rank.bronze {
|
||
background: linear-gradient(135deg, #d97706 0%, #b45309 100%);
|
||
color: white;
|
||
}
|
||
|
||
.leaderboard-info {
|
||
flex: 1;
|
||
}
|
||
|
||
.leaderboard-name {
|
||
font-weight: 600;
|
||
margin-bottom: 2px;
|
||
}
|
||
|
||
.leaderboard-stats {
|
||
font-size: 12px;
|
||
color: var(--text-muted);
|
||
}
|
||
|
||
.leaderboard-score {
|
||
font-size: 18px;
|
||
font-weight: 700;
|
||
color: var(--warning);
|
||
}
|
||
|
||
/* =============================================================================
|
||
SETTINGS
|
||
============================================================================= */
|
||
|
||
.settings-list {
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.setting-item {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 16px 0;
|
||
border-bottom: 1px solid var(--glass-border);
|
||
}
|
||
|
||
.switch {
|
||
position: relative;
|
||
width: 48px;
|
||
height: 24px;
|
||
}
|
||
|
||
.switch input {
|
||
opacity: 0;
|
||
width: 0;
|
||
height: 0;
|
||
}
|
||
|
||
.switch .slider {
|
||
position: absolute;
|
||
inset: 0;
|
||
background: var(--bg-tertiary);
|
||
border-radius: 24px;
|
||
cursor: pointer;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.switch .slider::before {
|
||
content: '';
|
||
position: absolute;
|
||
width: 20px;
|
||
height: 20px;
|
||
left: 2px;
|
||
top: 2px;
|
||
background: white;
|
||
border-radius: 50%;
|
||
transition: all var(--transition-fast);
|
||
}
|
||
|
||
.switch input:checked + .slider {
|
||
background: var(--accent-gradient);
|
||
}
|
||
|
||
.switch input:checked + .slider::before {
|
||
transform: translateX(24px);
|
||
}
|
||
|
||
/* =============================================================================
|
||
MODAL
|
||
============================================================================= */
|
||
|
||
.modal {
|
||
display: none;
|
||
position: fixed;
|
||
inset: 0;
|
||
background: rgba(0, 0, 0, 0.8);
|
||
z-index: 1000;
|
||
justify-content: center;
|
||
align-items: center;
|
||
padding: 20px;
|
||
}
|
||
|
||
.modal.active {
|
||
display: flex;
|
||
}
|
||
|
||
.modal-content {
|
||
max-width: 400px;
|
||
width: 100%;
|
||
text-align: center;
|
||
}
|
||
|
||
.modal-content h3 {
|
||
font-size: 24px;
|
||
margin-bottom: 16px;
|
||
background: var(--accent-gradient);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
}
|
||
|
||
.result-details {
|
||
margin-bottom: 24px;
|
||
}
|
||
|
||
.result-winner {
|
||
font-size: 18px;
|
||
font-weight: 600;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.result-hand {
|
||
color: var(--text-secondary);
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.result-amount {
|
||
font-size: 32px;
|
||
font-weight: 700;
|
||
color: var(--warning);
|
||
}
|
||
|
||
/* =============================================================================
|
||
NOTIFICATIONS
|
||
============================================================================= */
|
||
|
||
.notifications {
|
||
position: fixed;
|
||
top: 20px;
|
||
right: 20px;
|
||
z-index: 1000;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
max-width: 300px;
|
||
}
|
||
|
||
.notification {
|
||
padding: 12px 16px;
|
||
background: var(--glass-bg);
|
||
backdrop-filter: blur(10px);
|
||
border: 1px solid var(--glass-border);
|
||
border-radius: var(--border-radius-sm);
|
||
animation: slideIn 0.3s ease;
|
||
}
|
||
|
||
@keyframes slideIn {
|
||
from {
|
||
transform: translateX(100%);
|
||
opacity: 0;
|
||
}
|
||
to {
|
||
transform: translateX(0);
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
.notification.success {
|
||
border-color: var(--success);
|
||
}
|
||
|
||
.notification.error {
|
||
border-color: var(--danger);
|
||
}
|
||
|
||
.notification.info {
|
||
border-color: var(--info);
|
||
}
|
||
|
||
/* =============================================================================
|
||
RESPONSIVE
|
||
============================================================================= */
|
||
|
||
@media (max-width: 768px) {
|
||
.poker-table {
|
||
max-width: 100%;
|
||
}
|
||
|
||
.card {
|
||
width: 45px;
|
||
height: 63px;
|
||
}
|
||
|
||
.card-rank {
|
||
font-size: 16px;
|
||
}
|
||
|
||
.card-suit {
|
||
font-size: 14px;
|
||
}
|
||
|
||
.player-cards .card {
|
||
width: 55px;
|
||
height: 77px;
|
||
}
|
||
|
||
.player-box {
|
||
min-width: 80px;
|
||
padding: 8px 12px;
|
||
}
|
||
|
||
.player-name {
|
||
font-size: 10px;
|
||
max-width: 70px;
|
||
}
|
||
|
||
.player-chips {
|
||
font-size: 12px;
|
||
}
|
||
|
||
.action-panel {
|
||
padding: 12px 16px;
|
||
}
|
||
|
||
.action-buttons .btn {
|
||
padding: 10px 12px;
|
||
font-size: 12px;
|
||
min-width: 60px;
|
||
}
|
||
|
||
.game-chat {
|
||
width: 250px;
|
||
left: 10px;
|
||
bottom: 10px;
|
||
}
|
||
|
||
.table-info {
|
||
flex-direction: column;
|
||
gap: 8px;
|
||
}
|
||
|
||
.pot-amount {
|
||
font-size: 18px;
|
||
}
|
||
|
||
.player-hand-container {
|
||
bottom: 100px;
|
||
}
|
||
|
||
.glass-container {
|
||
padding: 20px;
|
||
}
|
||
|
||
.menu-container {
|
||
max-width: 100%;
|
||
}
|
||
|
||
.logo-icon {
|
||
font-size: 48px;
|
||
}
|
||
|
||
.logo h1 {
|
||
font-size: 24px;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 480px) {
|
||
.poker-table {
|
||
aspect-ratio: 1.5 / 1;
|
||
}
|
||
|
||
.card {
|
||
width: 35px;
|
||
height: 49px;
|
||
}
|
||
|
||
.card-rank {
|
||
font-size: 12px;
|
||
}
|
||
|
||
.card-suit {
|
||
font-size: 10px;
|
||
}
|
||
|
||
.player-cards .card {
|
||
width: 45px;
|
||
height: 63px;
|
||
}
|
||
|
||
.action-buttons {
|
||
gap: 4px;
|
||
}
|
||
|
||
.action-buttons .btn {
|
||
padding: 8px 10px;
|
||
font-size: 10px;
|
||
min-width: 50px;
|
||
}
|
||
|
||
.btn-allin span {
|
||
display: none;
|
||
}
|
||
|
||
.bet-slider-container {
|
||
padding: 12px;
|
||
}
|
||
|
||
.bet-input {
|
||
font-size: 18px;
|
||
}
|
||
}
|
||
|
||
/* =============================================================================
|
||
SCROLLBAR
|
||
============================================================================= */
|
||
|
||
::-webkit-scrollbar {
|
||
width: 6px;
|
||
height: 6px;
|
||
}
|
||
|
||
::-webkit-scrollbar-track {
|
||
background: var(--bg-tertiary);
|
||
border-radius: 3px;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb {
|
||
background: var(--glass-border);
|
||
border-radius: 3px;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb:hover {
|
||
background: var(--accent-primary);
|
||
}
|
||
|
||
/* =============================================================================
|
||
CHIP ANIMATION
|
||
============================================================================= */
|
||
|
||
.chip {
|
||
width: 20px;
|
||
height: 20px;
|
||
border-radius: 50%;
|
||
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
|
||
border: 2px dashed white;
|
||
display: inline-block;
|
||
margin: 0 2px;
|
||
animation: chipBounce 0.3s ease;
|
||
}
|
||
|
||
@keyframes chipBounce {
|
||
0% { transform: translateY(-20px); opacity: 0; }
|
||
100% { transform: translateY(0); opacity: 1; }
|
||
}
|
||
|
||
/* Win Animation */
|
||
.win-animation {
|
||
animation: winPulse 0.5s ease 3;
|
||
}
|
||
|
||
@keyframes winPulse {
|
||
0%, 100% { transform: scale(1); }
|
||
50% { transform: scale(1.05); }
|
||
}
|