bc/public/style_alt.css
2025-05-13 04:14:01 +00:00

685 lines
30 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* === style_alt.css === */
@import url('https://fonts.googleapis.com/css2?family=MedievalSharp&family=Roboto:wght@300;400;700&display=swap');
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css');
:root {
/* --- Переменные --- */
--font-main: 'Roboto', sans-serif;
--font-fancy: 'MedievalSharp', cursive;
--bg-gradient-dark: linear-gradient(160deg, #1f243a, #10121c);
--panel-bg: rgba(16, 18, 28, 0.8);
--panel-border: #4a5072;
--panel-glow-player: rgba(80, 150, 255, 0.3); /* Для Елены */
--panel-glow-opponent: rgba(255, 80, 80, 0.3); /* Для Баларда/Альмагест */
--text-light: #e8effc;
--text-muted: #9badce;
--text-heading: #ffffff;
--accent-player: #6c95ff; /* Елена */
--accent-opponent: #ff6c6c; /* Балард */
--accent-almagest: #c76cff; /* Альмагест (новый, фиолетовый) */
--hp-color: #de4b4b;
--mana-color: #58a8d0; /* Мана Елены */
--stamina-color: #ffb347; /* Ярость Баларда */
--dark-energy-color: #ab47bc; /* Темная Энергия Альмагест (новый, пурпурный) */
--bar-bg: #252a44;
--button-bg: linear-gradient(145deg, #556190, #3f4a70);
--button-hover-bg: linear-gradient(145deg, #6a79b0, #556190);
--button-text: var(--text-light);
--button-ability-bg: linear-gradient(145deg, #305a5e, #1f4043);
--button-ability-hover-bg: linear-gradient(145deg, #407a7e, #305a5e);
--button-ability-border: #4db0b5;
--button-disabled-bg: #333950;
--button-disabled-text: #6b7491;
--log-bg: rgba(10, 12, 20, 0.85);
--log-border: var(--panel-border);
--log-text: var(--text-muted);
--icon-color: var(--text-muted);
--damage-color: #ff8080;
--heal-color: #90ee90;
--block-color: #add8e6;
--effect-color: #d8bfd8;
--turn-color: #ffd700;
--system-color: #7fffd4;
--modal-bg: rgba(16, 18, 28, 0.97);
--modal-content-bg: #2a2f45;
--scrollbar-thumb: #4a5072;
--scrollbar-track: #10121c;
--shake-duration: 0.4s;
--cast-duration: 0.6s;
--dissolve-duration: 6.0s;
--log-panel-fixed-height: 280px;
}
/* --- Базовые Стили и Сброс --- */
* { box-sizing: border-box; margin: 0; padding: 0; }
html { height: 100%; }
body {
font-family: var(--font-main);
background: var(--bg-gradient-dark) fixed;
color: var(--text-light);
line-height: 1.5;
height: 100vh;
overflow: hidden;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 10px;
}
h1, h2, h3, h4 {
font-family: var(--font-fancy);
color: var(--text-heading);
margin-bottom: 0.75em;
font-weight: normal;
}
button { font-family: var(--font-main); }
i { margin-right: 6px; color: var(--icon-color); width: 1.2em; text-align: center; }
/* Стили скроллбара */
* { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); }
*::-webkit-scrollbar { width: 8px; }
*::-webkit-scrollbar-track { background: var(--scrollbar-track); border-radius: 4px; }
*::-webkit-scrollbar-thumb { background-color: var(--scrollbar-thumb); border-radius: 4px; border: 2px solid var(--scrollbar-track); }
/* === Стили для Экранов Аутентификации и Настройки Игры === */
.auth-game-setup-wrapper {
width: 100%;
max-width: 700px;
margin: 20px auto;
padding: 25px 30px;
background: var(--panel-bg);
border: 1px solid var(--panel-border);
border-radius: 10px;
box-shadow: 0 5px 20px rgba(0, 0, 0, 0.5);
color: var(--text-light);
text-align: center;
}
.auth-game-setup-wrapper h2,
.auth-game-setup-wrapper h3 {
font-family: var(--font-fancy);
color: var(--text-heading);
margin-bottom: 1em;
border-bottom: 1px solid rgba(255,255,255,0.1);
padding-bottom: 0.5em;
}
.auth-game-setup-wrapper h3 { font-size: 1.2em; margin-top: 1.5em; }
.auth-game-setup-wrapper button,
#auth-section form button {
font-family: var(--font-main);
background: var(--button-bg);
color: var(--button-text);
border: 1px solid rgba(0,0,0,0.3);
border-radius: 6px;
padding: 10px 18px;
margin: 8px 5px;
cursor: pointer;
transition: all 0.15s ease;
font-weight: bold;
text-transform: uppercase;
letter-spacing: 0.5px;
box-shadow: 0 2px 4px rgba(0,0,0,0.3);
}
.auth-game-setup-wrapper button:hover:enabled,
#auth-section form button:hover:enabled {
background: var(--button-hover-bg);
transform: translateY(-2px) scale(1.02);
box-shadow: 0 4px 8px rgba(0,0,0,0.4);
}
.auth-game-setup-wrapper button:active:enabled,
#auth-section form button:active:enabled {
transform: translateY(0px) scale(1);
box-shadow: 0 1px 2px rgba(0,0,0,0.3);
}
.auth-game-setup-wrapper button:disabled,
#auth-section form button:disabled {
background: var(--button-disabled-bg);
color: var(--button-disabled-text);
cursor: not-allowed;
opacity: 0.7;
}
.auth-game-setup-wrapper input[type="text"],
#auth-section input[type="text"],
#auth-section input[type="password"] {
padding: 10px;
border-radius: 5px;
border: 1px solid var(--panel-border);
background-color: var(--bar-bg);
color: var(--text-light);
margin: 5px 5px 10px 5px;
font-size: 0.9em;
width: calc(100% - 22px);
max-width: 300px;
box-sizing: border-box;
}
#available-games-list {
margin-top: 20px;
text-align: left;
max-height: 250px;
overflow-y: auto;
padding: 10px 15px;
background-color: rgba(0,0,0,0.25);
border: 1px solid var(--log-border);
border-radius: 6px;
}
#available-games-list ul { list-style: none; padding: 0; }
#available-games-list li {
padding: 10px;
border-bottom: 1px solid rgba(var(--log-border), 0.7);
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.9em;
}
#available-games-list li:last-child { border-bottom: none; }
#available-games-list li button { padding: 6px 10px; font-size: 0.8em; margin-left: 10px; }
#status-container { min-height: 2.5em; margin-bottom: 15px; }
#game-status-message, #auth-message {
color: var(--turn-color);
font-weight: bold;
font-size: 1.1em;
padding: 5px;
background-color: rgba(0,0,0,0.1);
border-radius: 4px;
display: block;
margin-bottom: 5px;
}
#auth-message.success { color: var(--heal-color); }
#auth-message.error { color: var(--damage-color); }
#auth-section form { margin-bottom: 20px; }
#user-info { padding: 10px; background-color: rgba(255,255,255,0.05); border-radius: 5px; margin-bottom: 20px; }
#user-info p { margin: 0 0 10px 0; font-size: 1.1em; }
#logout-button { background: linear-gradient(145deg, #8c3a3a, #6b2b2b) !important; }
#logout-button:hover { background: linear-gradient(145deg, #a04040, #8c3a3a) !important; }
/* Стили для выбора персонажа (перенесены из index.html) */
.character-selection {
margin-top: 15px;
margin-bottom: 15px;
padding: 15px;
background-color: rgba(0,0,0,0.2);
border-radius: 6px;
border: 1px solid rgba(var(--panel-border), 0.5);
}
.character-selection h4 {
font-size: 1.1em;
color: var(--text-muted);
margin-bottom: 10px;
border: none;
padding: 0;
}
.character-selection label {
display: inline-block;
margin: 0 15px;
cursor: pointer;
font-size: 1.05em;
padding: 5px 10px;
border-radius: 4px;
transition: background-color 0.2s ease, color 0.2s ease;
}
.character-selection input[type="radio"] { display: none; }
.character-selection input[type="radio"]:checked + label {
color: #fff;
font-weight: bold;
}
.character-selection input[type="radio"][value="elena"]:checked + label {
background-color: var(--accent-player);
box-shadow: 0 0 8px rgba(108, 149, 255, 0.5);
}
.character-selection input[type="radio"][value="almagest"]:checked + label {
background-color: var(--accent-almagest); /* Новый цвет для Альмагест */
box-shadow: 0 0 8px rgba(199, 108, 255, 0.5); /* Тень для Альмагест */
}
.character-selection label:hover { background-color: rgba(255, 255, 255, 0.1); }
.character-selection label i { margin-right: 8px; vertical-align: middle; }
label[for="char-elena"] i { color: var(--accent-player); }
label[for="char-almagest"] i { color: var(--accent-almagest); } /* Новый цвет для иконки Альмагест */
/* --- Основная Структура Игры (.game-wrapper) --- */
.game-wrapper {
width: 100%;
height: 100%;
max-width: 1400px;
margin: 0 auto;
padding: 10px;
display: flex;
flex-direction: column;
gap: 10px;
}
.game-header {
flex-shrink: 0;
text-align: center;
padding: 5px 0 10px 0;
border-bottom: 1px solid var(--panel-border);
}
.game-header h1 {
font-size: 2em;
margin: 0;
text-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
}
/* Стили для имен персонажей в заголовке */
.title-enchantress { color: var(--accent-player); } /* Елена */
.title-knight { color: var(--accent-opponent); } /* Балард */
.title-sorceress { color: var(--accent-almagest); } /* Альмагест */
.separator i { color: var(--text-light); font-size: 0.8em; margin: 0 15px; }
.battle-arena-container {
flex-grow: 1;
display: flex;
gap: 10px;
overflow: hidden;
}
.player-column, .opponent-column {
flex: 1;
display: flex;
flex-direction: column;
gap: 10px;
min-width: 0;
overflow: hidden;
}
/* --- Стили Панелей Персонажей, Управления, Лога --- */
.fighter-panel, .controls-panel-new, .battle-log-new {
background: var(--panel-bg);
border: 1px solid var(--panel-border);
border-radius: 8px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.4), inset 0 0 10px rgba(0, 0, 0, 0.3);
padding: 15px;
display: flex;
flex-direction: column;
overflow: hidden;
transition: box-shadow 0.3s ease, border-color 0.3s ease, opacity 0.3s ease-out, transform 0.3s ease-out;
}
/* --- Панели Персонажей --- */
.panel-header {
flex-shrink: 0;
display: flex;
align-items: center;
gap: 10px;
padding-bottom: 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
margin-bottom: 0;
}
.fighter-name { font-size: 1.6em; margin: 0; flex-grow: 1; text-align: left; }
.fighter-name .icon-player { color: var(--accent-player); } /* Елена */
.fighter-name .icon-opponent { color: var(--accent-opponent); } /* Балард */
.fighter-name .icon-almagest { color: var(--accent-almagest); } /* Альмагест */
.character-visual { flex-shrink: 0; margin-bottom: 0; }
.avatar-image {
display: block;
max-width: 50px;
height: auto;
border-radius: 50%;
border: 2px solid var(--panel-border); /* Цвет рамки будет изменен JS */
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
}
.panel-content {
flex-grow: 1;
overflow-y: auto;
padding-right: 5px;
display: flex;
flex-direction: column;
gap: 10px;
min-height: 0;
padding-top: 10px;
margin-top: 0;
}
.stat-bar-container { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.stat-bar-container .bar-icon { flex-shrink: 0; font-size: 1.4em; }
/* Цвета иконок ресурсов */
.stat-bar-container.health .bar-icon { color: var(--hp-color); }
.stat-bar-container.mana .bar-icon { color: var(--mana-color); } /* Мана Елены */
.stat-bar-container.stamina .bar-icon { color: var(--stamina-color); } /* Ярость Баларда */
.stat-bar-container.dark-energy .bar-icon { color: var(--dark-energy-color); } /* Темная Энергия Альмагест */
.bar-wrapper { flex-grow: 1; }
.bar {
border-radius: 4px; height: 20px; border: 1px solid rgba(0,0,0,0.5);
overflow: hidden; box-shadow: inset 0 1px 3px rgba(0,0,0,0.5);
position: relative; background-color: var(--bar-bg);
}
.bar-fill {
display: block; height: 100%; border-radius: 3px;
position: relative; z-index: 2; transition: width 0.4s ease-out;
}
.bar-text {
position: absolute; left: 0; top: 0; width: 100%; height: 100%;
z-index: 3; display: flex; justify-content: center; align-items: center;
font-size: 0.75em; font-weight: bold; color: #fff;
text-shadow: 1px 1px 1px rgba(0,0,0,0.9); padding: 0 5px;
white-space: nowrap; pointer-events: none;
}
/* Цвета Заливки Баров */
.health .bar-fill { background-color: var(--hp-color); }
.mana .bar-fill { background-color: var(--mana-color); }
.stamina .bar-fill { background-color: var(--stamina-color); }
.dark-energy .bar-fill { background-color: var(--dark-energy-color); }
/* Статус и Эффекты */
.status-area {
font-size: 0.9em; display: flex; align-items: baseline; gap: 5px;
flex-shrink: 0; min-height: 1.5em;
}
.status-area .icon-status { font-size: 1em; flex-shrink: 0; margin-top: 0.1em; }
.status-area strong { color: var(--text-muted); font-weight: normal; flex-shrink: 0; margin-right: 3px; }
.status-area span { font-weight: bold; }
.status-area span.blocking { color: var(--block-color); font-style: italic; }
.effects-area {
font-size: 0.9em; display: flex; flex-direction: column; gap: 8px;
flex-shrink: 0; min-height: 3em;
}
.effect-category { display: flex; align-items: baseline; gap: 5px; }
.effect-category strong {
color: var(--text-muted); font-weight: normal; font-family: var(--font-main);
font-size: 0.9em; flex-shrink: 0; margin-right: 3px;
}
.effect-category .icon-effects-buff, .effect-category .icon-effects-debuff {
font-size: 1em; flex-shrink: 0; margin-top: 0.1em;
width: 1.2em; text-align: center;
}
.effect-category .icon-effects-buff { color: var(--heal-color); }
.effect-category .icon-effects-debuff { color: var(--damage-color); }
.effect-list { display: inline; line-height: 1.4; min-width: 0; font-weight: bold; }
.effect {
display: inline-block; margin: 2px 3px 2px 0; padding: 1px 6px;
font-size: 0.8em; border-radius: 10px; border: 1px solid;
cursor: default; font-weight: 600; background-color: rgba(0,0,0, 0.2);
white-space: nowrap; vertical-align: baseline;
}
.effect-buff { border-color: var(--heal-color); color: var(--heal-color); }
.effect-debuff { border-color: var(--damage-color); color: var(--damage-color); }
.effect-stun { border-color: var(--turn-color); color: var(--turn-color); }
.effect-block { border-color: var(--block-color); color: var(--block-color); }
/* --- Панель Управления --- */
.controls-panel-new { flex-grow: 1; min-height: 0; display: flex; flex-direction: column; }
#turn-indicator {
flex-shrink: 0; text-align: center; font-size: 1.4em; margin-bottom: 10px;
padding-bottom: 8px; border-bottom: 1px solid rgba(255,255,255,0.1);
transition: color 0.3s ease;
}
.controls-layout { flex-grow: 1; display: flex; flex-direction: column; gap: 10px; overflow: hidden; min-height: 0; }
.control-group { flex-shrink: 0; }
.control-group h4 {
font-size: 0.9em; color: var(--text-muted); margin-bottom: 5px;
padding-bottom: 5px; border-bottom: 1px dashed var(--panel-border);
text-transform: uppercase; letter-spacing: 1px;
}
.basic-actions { display: flex; gap: 10px; }
.action-button.basic {
flex: 1; padding: 8px 5px; font-size: 0.85em; font-weight: bold;
background: var(--button-bg); color: var(--button-text);
border: 1px solid rgba(0,0,0,0.3); border-radius: 5px; cursor: pointer;
transition: all 0.15s ease; box-shadow: 0 2px 4px rgba(0,0,0,0.4);
}
.action-button.basic:hover:enabled {
background: var(--button-hover-bg); transform: translateY(-1px);
box-shadow: 0 3px 6px rgba(0,0,0,0.5);
}
.action-button.basic:active:enabled { transform: translateY(0px); box-shadow: 0 1px 2px rgba(0,0,0,0.4); }
#button-attack.attack-buffed:enabled {
border: 2px solid var(--heal-color) !important;
box-shadow: 0 0 10px 2px rgba(144, 238, 144, 0.6), 0 3px 6px rgba(0,0,0,0.5);
background: linear-gradient(145deg, #70c070, #5a9a5a);
transform: translateY(-1px);
}
.ability-list { flex-grow: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden; }
.ability-list h4 { flex-shrink: 0; }
.abilities-grid {
display: grid; grid-template-columns: repeat(auto-fit, minmax(75px, 1fr));
gap: 8px; padding: 8px; background-color: rgba(0,0,0,0.2);
border-radius: 4px; overflow-y: auto; border: 1px solid rgba(0,0,0,0.3);
flex-grow: 1; position: relative;
}
.abilities-grid::after { content: ''; display: block; height: 10px; width: 100%; }
.abilities-grid .placeholder-text {
grid-column: 1 / -1; text-align: center; color: var(--text-muted);
align-self: center; font-size: 0.9em; padding: 15px 0;
}
.ability-button {
aspect-ratio: 1 / 1; display: flex; flex-direction: column;
justify-content: center; align-items: center; padding: 5px;
border-radius: 6px; background: var(--button-ability-bg);
border: 1px solid var(--button-ability-border); color: #fff;
text-align: center; line-height: 1.15; cursor: pointer;
transition: all 0.2s ease-out; box-shadow: 0 2px 4px rgba(0,0,0,0.4);
text-shadow: 1px 1px 1px rgba(0,0,0,0.6); position: relative; overflow: hidden;
}
.ability-button .ability-name { font-size: 0.75em; font-weight: bold; margin-bottom: 2px; display: block; width: 95%; }
.ability-button .ability-desc {
font-size: 0.65em; font-weight: normal; color: #aaccce; opacity: 0.8;
text-shadow: none; max-height: 2em; overflow: hidden; width: 95%;
display: block; margin-top: auto;
}
.ability-button:hover:enabled {
transform: scale(1.03) translateY(-1px); background: var(--button-ability-hover-bg);
box-shadow: 0 4px 8px rgba(0,0,0,0.5), 0 0 8px rgba(77, 176, 181, 0.4);
border-color: #77d9dd;
}
.ability-button:active:enabled {
transform: scale(1) translateY(0);
box-shadow: inset 0 1px 2px rgba(0,0,0,0.3), 0 1px 2px rgba(0,0,0,0.3);
filter: brightness(0.9);
}
.ability-button:disabled, .action-button.basic:disabled {
background: var(--button-disabled-bg) !important; border-color: transparent !important;
color: var(--button-disabled-text) !important; cursor: not-allowed !important;
transform: none !important; box-shadow: inset 0 1px 3px rgba(0,0,0,0.4) !important;
opacity: 0.6; text-shadow: none !important; filter: grayscale(50%) !important;
}
.ability-button.not-enough-resource:not(:disabled) {
border: 2px dashed var(--damage-color) !important;
box-shadow: inset 0 0 8px rgba(255, 80, 80, 0.3), 0 3px 6px rgba(0,0,0,0.4) !important;
animation: pulse-red-border 1s infinite ease-in-out;
}
.ability-button.buff-is-active:disabled { filter: grayscale(80%) brightness(0.8) !important; opacity: 0.5 !important; }
@keyframes pulse-red-border {
0%, 100% { border-color: var(--damage-color); }
50% { border-color: #ffb3b3; }
}
.ability-button.is-on-cooldown, .ability-button.is-silenced { filter: grayscale(70%) brightness(0.8) !important; }
.ability-button.is-on-cooldown .ability-name, .ability-button.is-on-cooldown .ability-desc,
.ability-button.is-silenced .ability-name, .ability-button.is-silenced .ability-desc { opacity: 0.6; }
.ability-button.is-on-cooldown .ability-desc, .ability-button.is-silenced .ability-desc { display: none; }
.ability-cooldown-display { /* Также используется для отображения безмолвия */
position: absolute; bottom: 5px; left: 0; width: 100%; text-align: center;
font-size: 0.75em; font-weight: bold; color: var(--turn-color);
text-shadow: 1px 1px 1px rgba(0,0,0,0.7); pointer-events: none;
display: none; line-height: 1;
}
.ability-button.is-on-cooldown .ability-cooldown-display,
.ability-button.is-silenced .ability-cooldown-display { display: block !important; }
.ability-button.is-silenced { /* Дополнительные стили для безмолвия, если нужны */
/* background: repeating-linear-gradient( -45deg, var(--button-disabled-bg), var(--button-disabled-bg) 8px, #4d3f50 8px, #4d3f50 16px ) !important; */
/* border-color: #6a5f6b !important; */
}
.ability-button.is-silenced::after { /* Иконка замка (опционально) */
/* content: '\f023'; font-family: 'Font Awesome 6 Free'; font-weight: 900; */
/* ... (стили для иконки замка, если используется) ... */
}
/* --- Панель Лога --- */
.battle-log-new { height: var(--log-panel-fixed-height); flex-shrink: 0; display: flex; flex-direction: column; overflow: hidden; }
.battle-log-new h3 {
flex-shrink: 0; font-size: 1.4em; margin-bottom: 10px; text-align: center;
border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 8px;
}
#log-list {
list-style: none; flex-grow: 1; overflow-y: auto; background-color: var(--log-bg);
border: 1px solid var(--log-border); font-size: 0.85em; border-radius: 6px;
color: var(--log-text); padding: 10px; min-height: 0;
}
#log-list li {
padding: 4px 8px; border-bottom: 1px solid rgba(74, 80, 114, 0.5);
line-height: 1.35; word-break: break-word; transition: background-color 0.3s;
}
#log-list li:last-child { border-bottom: none; }
#log-list li:hover { background-color: rgba(255,255,255,0.03); }
.log-damage { color: var(--damage-color); font-weight: 500; }
.log-heal { color: var(--heal-color); font-weight: 500; }
.log-block { color: var(--block-color); font-style: italic; }
.log-info { color: #b0c4de; }
.log-turn {
font-weight: bold; color: var(--turn-color); margin-top: 6px;
border-top: 1px solid rgba(255, 215, 0, 0.3); padding-top: 6px;
font-size: 1.05em; display: block;
}
.log-system { font-weight: bold; color: var(--system-color); font-style: italic; opacity: 0.8; }
.log-effect { font-style: italic; color: var(--effect-color); }
/* --- Экран Конца Игры (Модальное Окно) --- */
.modal {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background: var(--modal-bg); display: flex; justify-content: center;
align-items: center; z-index: 1000; backdrop-filter: blur(4px) brightness(0.7);
opacity: 0; pointer-events: none; transition: opacity 0.4s ease-out;
}
.modal.hidden { display: none !important; }
.modal:not(.hidden) { opacity: 1; pointer-events: auto; }
.modal-content {
background: var(--modal-content-bg); padding: 40px 50px; border-radius: 10px;
text-align: center; border: 1px solid var(--panel-border);
box-shadow: 0 10px 30px rgba(0,0,0,0.6); color: var(--text-light);
transform: scale(0.8) translateY(30px);
transition: transform 0.4s cubic-bezier(0.2, 0.9, 0.3, 1.2), opacity 0.4s ease-out;
opacity: 0;
}
.modal:not(.hidden) .modal-content { transform: scale(1) translateY(0); opacity: 1; }
.modal-content h2#result-message { margin-bottom: 25px; font-family: var(--font-fancy); font-size: 2.5em; line-height: 1.2; }
#restart-game-button {
padding: 12px 30px; font-size: 1.1em; cursor: pointer; background: var(--button-bg);
color: var(--button-text); border: 1px solid rgba(0,0,0,0.3); border-radius: 6px;
margin-top: 20px; font-weight: bold; text-transform: uppercase;
letter-spacing: 1px; transition: all 0.2s ease; box-shadow: 0 4px 8px rgba(0,0,0,0.4);
outline: none;
}
#restart-game-button:hover:enabled {
background: var(--button-hover-bg); transform: scale(1.05) translateY(-1px);
box-shadow: 0 6px 12px rgba(0,0,0,0.5);
}
#restart-game-button:active:enabled { transform: scale(1) translateY(0); box-shadow: 0 3px 6px rgba(0,0,0,0.4); }
#restart-game-button:disabled { background: var(--button-disabled-bg); color: var(--button-disabled-text); cursor: not-allowed; opacity: 0.7; }
#restart-game-button i { margin-right: 8px; }
/* --- Анимации --- */
@keyframes flash-effect {
0%, 100% { box-shadow: var(--initial-box-shadow, inherit); border-color: var(--initial-border-color, inherit); transform: scale(1); }
50% {
box-shadow: 0 0 25px 10px var(--flash-color-outer, rgba(255, 255, 255, 0.7)),
inset 0 0 15px var(--flash-color-inner, rgba(255, 255, 255, 0.4)),
0 0 15px rgba(0, 0, 0, 0.4);
border-color: var(--flash-border-color, #ffffff);
transform: scale(1.005);
}
}
/* Применение анимации каста к панели игрока (добавляется через JS) */
#player-panel[class*="is-casting-"] { animation: flash-effect var(--cast-duration) ease-out; }
/* Цвета для разных кастов (переменные для keyframes) - могут быть адаптированы или расширены */
#player-panel.is-casting-heal { --flash-color-outer: rgba(144, 238, 144, 0.7); --flash-color-inner: rgba(144, 238, 144, 0.4); --flash-border-color: var(--heal-color); }
#player-panel.is-casting-fireball { --flash-color-outer: rgba(255, 100, 100, 0.7); --flash-color-inner: rgba(255, 100, 100, 0.4); --flash-border-color: var(--damage-color); }
/* ... Добавить для других способностей Елены и Альмагест, если нужна анимация каста ... */
/* Например, для Теневого Сгустка Альмагест (если она в слоте игрока) */
/* #player-panel.is-casting-shadowBolt { --flash-color-outer: rgba(138, 43, 226, 0.6); --flash-color-inner: rgba(138, 43, 226, 0.3); --flash-border-color: var(--dark-energy-color); } */
@keyframes shake-opponent {
0%, 100% { transform: translateX(0); }
10%, 30%, 50%, 70%, 90% { transform: translateX(-4px) rotate(-0.5deg); }
20%, 40%, 60%, 80% { transform: translateX(4px) rotate(0.5deg); }
}
#opponent-panel.is-shaking {
animation: shake-opponent var(--shake-duration) cubic-bezier(.36,.07,.19,.97) both;
transform: translate3d(0, 0, 0); backface-visibility: hidden; perspective: 1000px;
}
#opponent-panel.dissolving {
opacity: 0; transform: scale(0.9) translateY(20px);
transition: opacity var(--dissolve-duration) ease-in, transform var(--dissolve-duration) ease-in;
pointer-events: none;
}
@keyframes shake-short {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-3px); }
50% { transform: translateX(3px); }
75% { transform: translateX(-3px); }
}
.shake-short { animation: shake-short 0.3s ease-in-out; }
/* --- Отзывчивость (Медиа-запросы) --- */
@media (max-width: 900px) {
body { height: auto; overflow-y: auto; padding: 5px 0; font-size: 15px; justify-content: flex-start; }
.game-wrapper { padding: 5px; gap: 5px; height: auto; }
.game-header h1 { font-size: 1.5em; }
.battle-arena-container { flex-direction: column; height: auto; overflow: visible; }
.player-column, .opponent-column { width: 100%; height: auto; overflow: visible; }
.fighter-panel, .controls-panel-new, .battle-log-new { min-height: auto; height: auto; padding: 10px; flex-grow: 0; flex-shrink: 1; }
.controls-panel-new { min-height: 200px; }
.battle-log-new { height: auto; min-height: 150px; }
#log-list { max-height: 200px; }
.abilities-grid { max-height: none; overflow-y: visible; padding-bottom: 8px; }
.abilities-grid::after { display: none; }
.ability-list, .controls-layout { overflow: visible; }
.fighter-name { font-size: 1.3em; }
.panel-content { margin-top: 10px; }
.stat-bar-container .bar-icon { font-size: 1.2em; }
.bar { height: 18px; }
.effects-area, .effect { font-size: 0.85em; }
#turn-indicator { font-size: 1.2em; margin-bottom: 10px; }
.action-button.basic { font-size: 0.8em; padding: 8px 4px; }
.abilities-grid { grid-template-columns: repeat(auto-fit, minmax(80px, 1fr)); gap: 8px; padding: 8px; }
.ability-button { font-size: 0.75em; padding: 5px; }
.ability-button .ability-name { margin-bottom: 2px; }
.ability-button .ability-desc { font-size: 0.65em; }
.modal-content { padding: 25px 30px; width: 90%; max-width: 400px; }
.modal-content h2#result-message { font-size: 1.8em; }
#restart-game-button { font-size: 1em; padding: 10px 20px; }
#game-setup { max-width: 95%; padding: 15px; }
#game-setup h2 { font-size: 1.6em; } #game-setup h3 { font-size: 1.1em; }
#game-setup button { padding: 8px 12px; font-size: 0.9em; }
#game-setup input[type="text"] { width: calc(100% - 90px); max-width: 200px; padding: 8px;}
#available-games-list { max-height: 180px; }
.character-selection label { margin: 0 10px; font-size: 1em; } /* Чуть меньше отступы для выбора на планшетах */
}
@media (max-width: 480px) {
body { font-size: 14px; }
.game-header h1 { font-size: 1.3em; }
.fighter-name { font-size: 1.2em; }
.abilities-grid { grid-template-columns: repeat(auto-fit, minmax(65px, 1fr)); gap: 5px; padding: 5px; }
.ability-button { font-size: 0.7em; padding: 4px; }
.ability-button .ability-name { margin-bottom: 1px; }
.ability-button .ability-desc { display: none; }
#log-list { font-size: 0.8em; max-height: 150px; }
.modal-content { padding: 20px; }
.modal-content h2#result-message { font-size: 1.6em; }
#restart-game-button { font-size: 0.9em; padding: 8px 16px; }
.stat-bar-container .bar-icon { font-size: 1.1em; }
.bar { height: 16px; } .bar-text { font-size: 0.7em; }
.effects-area, .effect { font-size: 0.8em; }
#game-setup { padding: 10px; }
#game-setup h2 { font-size: 1.4em; }
#game-setup button { padding: 7px 10px; font-size: 0.85em; margin: 5px; }
#game-setup input[type="text"] { width: 100%; max-width: none; margin-bottom: 10px; }
#game-setup div > button, #game-setup div > input[type="text"] { display: block; width: 100%; margin-left:0; margin-right:0; }
#game-setup div > input[type="text"] + button { margin-top: 5px;}
#available-games-list { max-height: 120px; }
#available-games-list li button { font-size: 0.75em; padding: 5px 8px;}
.character-selection { padding: 10px; }
.character-selection label { margin: 0 5px; font-size: 0.9em; display: block; margin-bottom: 5px; } /* Лейблы в столбик */
.character-selection label i { margin-right: 5px;}
}