bc/public/style_alt.css

545 lines
32 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 (user-info позиционируется абсолютно, auth-wrapper удален) === */
@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);
--panel-glow-almagest: rgba(199, 108, 255, 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;
--timer-text-color: var(--turn-color);
--timer-icon-color: #b0c4de;
--timer-low-time-color: var(--damage-color);
}
/* --- Базовые Стили и Сброс --- */
* {
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-y: auto; /* <<< Изменено: Позволяем body скроллиться, если контент не помещается */
display: flex;
flex-direction: column;
align-items: center;
/* justify-content: center; /* Убрали, т.к. контент может быть длиннее экрана */
padding: 10px;
position: relative; /* <<< Добавлено: для абсолютного позиционирования #user-info */
}
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 удалены или перенесены на #auth-section и #game-setup === */
/* Стили для секций аутентификации и настройки игры (теперь они сами по себе) */
#auth-section,
#game-setup {
width: 100%;
max-width: 600px; /* Примерная ширина, можно настроить */
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-section h2, #game-setup h2,
#auth-section h3, #game-setup 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-section h3, #game-setup h3 {
font-size: 1.2em;
margin-top: 1.5em;
}
/* Общие стили для кнопок в этих секциях */
#auth-section button, #game-setup 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);
outline: none;
}
#auth-section button:hover:enabled, #game-setup 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-section button:active:enabled, #game-setup button:active:enabled {
transform: translateY(0px) scale(1);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}
#auth-section button:disabled, #game-setup button:disabled {
background: var(--button-disabled-bg) !important;
color: var(--button-disabled-text) !important;
border-color: transparent !important;
cursor: not-allowed !important;
opacity: 0.7;
transform: none !important;
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.4) !important;
filter: grayscale(50%);
}
/* Стили для инпутов */
#auth-section input[type="text"], #auth-section input[type="password"],
#game-setup input[type="text"] {
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;
outline: none;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
#auth-section input[type="text"]:focus, #auth-section input[type="password"]:focus,
#game-setup input[type="text"]:focus {
border-color: var(--accent-player);
box-shadow: 0 0 8px rgba(108, 149, 255, 0.4);
}
#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 h3 { margin-top: 0; margin-bottom: 10px; padding-bottom: 5px; border-bottom: 1px dashed rgba(255, 255, 255, 0.1); }
#available-games-list ul { list-style: none; padding: 0; margin: 0; }
#available-games-list li { padding: 10px; border-bottom: 1px solid rgba(74, 80, 114, 0.5); 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; flex-shrink: 0; }
/* === ИЗМЕНЕНИЕ: Стили для #user-info, теперь позиционируется абсолютно === */
#user-info {
position: fixed; /* Позиционируем относительно viewport */
top: 10px;
right: 15px;
z-index: 1001; /* Выше чем .game-wrapper и модальные окна, если нужно */
display: flex;
align-items: center;
gap: 10px;
padding: 5px 8px; /* Небольшой внутренний отступ */
background-color: rgba(20, 22, 35, 0.85); /* Полупрозрачный фон */
border-radius: 5px;
box-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
#user-info p {
margin: 0;
font-size: 0.9em;
color: var(--text-muted);
white-space: nowrap;
}
#user-info p #logged-in-username {
font-weight: bold;
color: var(--text-light);
}
#logout-button {
background: linear-gradient(145deg, #6e3c3c, #502626) !important;
color: #f0d0d0 !important;
padding: 6px 12px !important;
font-size: 0.8em !important;
margin: 0 !important;
letter-spacing: 0.2px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) !important;
border: 1px solid #422020 !important;
flex-shrink: 0;
}
#logout-button:hover:enabled {
background: linear-gradient(145deg, #834545, #6e3c3c) !important;
transform: translateY(-1px) !important;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4) !important;
}
#logout-button i {
margin-right: 4px;
}
/* === КОНЕЦ ИЗМЕНЕНИЯ ДЛЯ #user-info === */
#status-container {
min-height: 2.5em;
margin-bottom: 15px;
/* Отступ сверху больше не нужен, так как #user-info позиционирован абсолютно */
/* padding-top: 35px; */
}
#auth-message, #game-status-message { 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; text-align: center; }
#auth-message.success { color: var(--heal-color); }
#auth-message.error { color: var(--damage-color); }
#game-status-message { color: var(--turn-color); }
#auth-section form { margin-bottom: 20px; }
.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(74, 80, 114, 0.5); }
.character-selection h4 { font-size: 1.1em; color: var(--text-muted); margin-bottom: 10px; border: none; padding: 0; text-align: center; }
.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; user-select: none; }
.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; /* Убрали, т.к. body уже центрирует */
padding: 10px;
display: flex; /* Оставляем flex для внутреннего layout */
flex-direction: column;
gap: 10px;
overflow: hidden;
}
.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;
}
.fighter-panel.panel-elena { border-color: var(--accent-player); }
.fighter-panel.panel-almagest { border-color: var(--accent-almagest); }
.fighter-panel.panel-balard { border-color: var(--accent-opponent); }
.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-elena { color: var(--accent-player); }
.fighter-name .icon-almagest { color: var(--accent-almagest); }
.fighter-name .icon-balard { color: var(--accent-opponent); }
.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); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); }
.avatar-image.avatar-elena { border-color: var(--accent-player); }
.avatar-image.avatar-almagest { border-color: var(--accent-almagest); }
.avatar-image.avatar-balard { border-color: var(--accent-opponent); }
.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); }
.effect-info { border-color: var(--text-muted); color: var(--text-muted); }
.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; }
.turn-timer-display { flex-shrink: 0; text-align: center; font-size: 0.9em; color: var(--timer-text-color); margin-top: -5px; margin-bottom: 10px; padding: 5px; background-color: rgba(0,0,0,0.15); border-radius: 4px; border-top: 1px solid rgba(255,255,255,0.05); }
.turn-timer-display i { color: var(--timer-icon-color); margin-right: 8px; }
#turn-timer { font-weight: bold; font-size: 1.1em; min-width: 35px; display: inline-block; text-align: left; }
#turn-timer.low-time { color: var(--timer-low-time-color); animation: pulse-timer-warning 1s infinite ease-in-out; }
.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); outline: none; }
.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); 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; padding-bottom: 12px; 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; outline: none; }
.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.7; text-shadow: none !important; filter: grayscale(50%); }
.ability-button.not-enough-resource { border: 2px dashed var(--damage-color); animation: pulse-red-border 1s infinite ease-in-out; }
.ability-button.not-enough-resource:disabled { border-color: var(--damage-color); box-shadow: inset 0 0 8px rgba(255, 80, 80, 0.2), 0 3px 6px rgba(0, 0, 0, 0.2), inset 0 1px 3px rgba(0, 0, 0, 0.4); }
.ability-button.buff-is-active { border: 2px solid var(--heal-color); box-shadow: 0 0 8px rgba(144, 238, 144, 0.5); }
.ability-button.buff-is-active:disabled { border-color: var(--heal-color); }
.ability-button.is-on-cooldown, .ability-button.is-silenced { filter: grayscale(70%) brightness(0.8); }
.ability-button.is-on-cooldown:disabled, .ability-button.is-silenced:disabled { filter: grayscale(70%) brightness(0.7); }
.ability-button.is-on-cooldown .ability-name, .ability-button.is-silenced .ability-name, .ability-button.is-on-cooldown .ability-desc, .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; }
.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; word-wrap: break-word; }
#log-list li { padding: 4px 8px; border-bottom: 1px solid rgba(74, 80, 114, 0.5); line-height: 1.35; 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); opacity: 0; transition: transform 0.4s cubic-bezier(0.2, 0.9, 0.3, 1.2), opacity 0.4s ease-out; }
.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; }
.modal-action-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; }
.modal-action-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); }
.modal-action-button:active:enabled { transform: scale(1) translateY(0); box-shadow: 0 3px 6px rgba(0, 0, 0, 0.4); }
.modal-action-button:disabled { background: var(--button-disabled-bg); color: var(--button-disabled-text); cursor: not-allowed; opacity: 0.7; }
.modal-action-button i { margin-right: 8px; }
@keyframes pulse-red-border { 0%, 100% { border-color: var(--damage-color); } 50% { border-color: #ffb3b3; } }
@keyframes pulse-timer-warning { 0%, 100% { color: var(--timer-low-time-color); transform: scale(1); } 50% { color: #ff6347; transform: scale(1.05); } }
@keyframes flash-effect { 0%, 100% { box-shadow: var(--initial-box-shadow, 0 0 15px rgba(0, 0, 0, 0.4), inset 0 0 10px rgba(0, 0, 0, 0.3)); border-color: var(--initial-border-color, var(--panel-border)); 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); } }
[class*="is-casting-"] { animation: flash-effect var(--cast-duration) ease-out; }
#player-panel.is-casting-heal, #opponent-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, #opponent-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, #opponent-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 { justify-content: flex-start; } /* Возвращаем, если контент всегда будет длиннее экрана */
/* #user-info для планшетов */
#user-info { top: 8px; right: 10px; gap: 8px; padding: 4px 7px; }
#user-info p { font-size: 0.85em; }
#logout-button { padding: 5px 10px !important; font-size: 0.75em !important; }
.game-wrapper { padding: 5px; gap: 5px; height: auto; }
.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: 8px; }
.turn-timer-display { font-size: 0.85em; margin-bottom: 8px; padding: 4px; }
#turn-timer { font-size: 1em; }
.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; }
.modal-action-button { font-size: 1em; padding: 10px 20px; }
/* Стили для #auth-section и #game-setup на планшетах */
#auth-section, #game-setup { max-width: 90%; padding: 20px; }
#auth-section h2, #game-setup h2 { font-size: 1.6em; }
#auth-section h3, #game-setup h3 { font-size: 1.1em; }
#auth-section button, #game-setup button { padding: 8px 12px; font-size: 0.9em; }
#auth-section input[type="text"], #auth-section input[type="password"], #game-setup input[type="text"] { max-width: 250px; }
#available-games-list { max-height: 180px; }
.character-selection label { margin: 0 10px; font-size: 1em; }
}
@media (max-width: 480px) {
#user-info { top: 5px; right: 5px; gap: 6px; padding: 3px 6px; }
#user-info p { font-size: 0.75em; }
#logout-button { padding: 4px 8px !important; font-size: 0.7em !important; }
#logout-button i { margin-right: 3px; }
.fighter-name { font-size: 1.2em; }
.abilities-grid { grid-template-columns: repeat(auto-fit, minmax(65px, 1fr)); gap: 5px; padding: 5px; padding-bottom: 10px; }
.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; }
.modal-action-button { font-size: 0.9em; padding: 8px 16px; }
#auth-section, #game-setup { padding: 15px; margin-top: 40px; /* Отступ от #user-info */ }
#auth-section h2, #game-setup h2 { font-size: 1.4em; }
#auth-section button, #game-setup button { padding: 7px 10px; font-size: 0.85em; margin: 5px; }
#auth-section input[type="text"], #auth-section input[type="password"],
#game-setup input[type="text"], #game-setup button { display: block; width: 100%; margin-left: 0; margin-right: 0; }
#auth-section input[type="text"], #auth-section input[type="password"], #game-setup input[type="text"] { max-width: none; margin-bottom: 10px; }
#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 5px 5px; font-size: 0.9em; display: block; }
.character-selection label i { margin-right: 5px; }
#turn-indicator { font-size: 1.1em; }
.turn-timer-display { font-size: 0.8em; margin-top: -3px; margin-bottom: 6px; }
#turn-timer { font-size: 0.95em; }
}