@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=VT323&display=swap');

/* ═══════════════════════════════════════════════════════════════════════
   Battle RPG — Ragnarok-style theme  ·  css/style.css
   Shared by main.html · battle.html · stats.html · spectate.html
   Retro MMORPG look: brown beveled windows, red HP, pixel fonts,
   grass field backdrop. JS contract unchanged — selectors preserved.
═══════════════════════════════════════════════════════════════════════ */

:root {
    /* Parchment window skin */
    --ro-win-1:#ddc7a1;
    --ro-win-2:#c3a578;
    --ro-win-border:#4a3119;
    --ro-win-bevel:#f3e7c9;
    --ro-title:#7a4f2a;
    --ro-title-ink:#ffeec2;
    /* Ink (text on parchment) */
    --ro-ink:#3f2a15;
    --ro-ink-soft:#6e4a28;
    --ro-ink-faint:#8a6a44;
    /* HP / SP / accents */
    --ro-hp-1:#e0584a;
    --ro-hp-2:#bd2a1f;
    --ro-track:#2a1410;
    --ro-track-edge:#160a06;
    --ro-gold:#f6c453;
    --ro-gold-deep:#8a5a12;
    --ro-red:#bd2a1f;
    --ro-green:#2e9b54;
    --ro-ice:#67e8f9;
    /* Chat / log window */
    --ro-chat-bg:rgba(10,20,13,.82);
    --ro-chat-border:#33402f;
    /* Damage number palette */
    --ro-dmg:#ffe14d;
    --ro-heal:#86f06a;
    --ro-reflect:#ff2e2e;
    /* Fonts */
    --ro-font-pixel:'Press Start 2P', system-ui, sans-serif;
    --ro-font-ui:'VT323','Courier New', monospace;
    --ro-radius:4px;
}

/* ── Global ───────────────────────────────────────────────────────────── */
body {
    background:
        linear-gradient(180deg,#cfe9f5 0%, #a9d7ec 20%, #8abb5d 44%, #6f9e48 100%) fixed;
    color: var(--ro-ink);
    font-family: var(--ro-font-ui);
    font-size: 19px;
    letter-spacing:.3px;
    min-height: 100vh;
}

/* ── Navbar (wooden RO bar) ───────────────────────────────────────────── */
.navbar {
    background: linear-gradient(#8a5a2e,#6e4420) !important;
    border-bottom: 3px solid #4a3119;
    box-shadow: 0 2px 0 #a9773f inset, 0 3px 10px rgba(0,0,0,.35);
}
.navbar-brand {
    color: var(--ro-title-ink) !important;
    font-family: var(--ro-font-pixel);
    font-size: .85rem;
    text-shadow: 1px 1px 0 #3a2410;
}
.nav-link {
    color:#f0d9b0 !important;
    font-family: var(--ro-font-pixel);
    font-size:.6rem;
    transition: color .15s;
}
.nav-link:hover,
.nav-link.active { color: var(--ro-gold) !important; text-shadow:0 0 6px rgba(246,196,83,.5); }
.navbar-toggler { border-color:#a9773f; }

/* ── RO window mixin surfaces (site header / battle header) ────────────── */
.site-header,
.battle-header {
    background: linear-gradient(#8a5a2e,#6e4420);
    border-bottom: 3px solid #4a3119;
    box-shadow: 0 2px 0 #a9773f inset, 0 4px 14px rgba(0,0,0,.35);
    padding-bottom:.75rem;
}
.header-inner {
    display:flex; align-items:center; justify-content:space-between;
    padding:.75rem 0; gap:1rem;
}
.header-title-group { display:flex; flex-direction:column; gap:.35rem; }
.header-inner .logo {
    color: var(--ro-title-ink);
    font-family: var(--ro-font-pixel);
    font-size:1rem;
    text-shadow: 2px 2px 0 #3a2410;
    margin:0;
}
.lobby-online-indicator { margin:0; color:#f0d9b0; font-size:1.05rem; }
.lobby-online-indicator span { color:#bff08a; font-weight:700; }
.user-panel { display:flex; align-items:center; gap:.85rem; color:#f0d9b0; }
.user-panel #playerName { color: var(--ro-gold); font-weight:700; }
@media(max-width:700px){
    .header-inner { flex-direction:column; align-items:flex-start; }
}

/* ── Parchment panels ─────────────────────────────────────────────────── */
.panel {
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border: 2px solid var(--ro-win-border);
    border-radius: var(--ro-radius);
    padding: 1.5rem;
    margin-bottom: 1.5rem;
    box-shadow: 0 0 0 2px var(--ro-win-bevel) inset, 0 6px 16px rgba(0,0,0,.3);
}
.panel h2 {
    color: var(--ro-ink);
    font-family: var(--ro-font-pixel);
    font-size:.8rem;
    line-height:1.5;
    text-transform: uppercase;
    letter-spacing:.5px;
    margin-bottom:1rem;
    padding:.55rem .75rem;
    background: var(--ro-title);
    color: var(--ro-title-ink);
    border:1px solid #4a3119;
    border-radius:3px;
    box-shadow:0 1px 0 #a9773f inset;
}

/* ── Matchmaking (main.html) ──────────────────────────────────────────── */
.matchmaking { display:flex; align-items:center; gap:1.25rem; flex-wrap:wrap; }
.queue-status { color: var(--ro-ink-soft); margin:0; font-size:1.1rem; }
.queue-status span { color: var(--ro-green); font-weight:700; }
.queue-status span.searching { color:#c07a1e; animation:pulse 1.4s infinite; }
.queue-status span.matched { color: var(--ro-red); }
@keyframes pulse { 0%,100%{opacity:1} 50%{opacity:.45} }

/* ── Active Battle Info (main.html) ───────────────────────────────────── */
.battle-info { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:.85rem; }
.battle-info p { color: var(--ro-ink-soft); margin:0; }
.battle-info span { color: var(--ro-gold-deep); font-weight:700; }
.battle-actions { display:flex; gap:.65rem; }
.battle-list-head { display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; margin-bottom:1rem; }
.battle-list-head h2 { margin-bottom:.25rem; }
.battle-list-subtitle,
.battle-list-empty { color: var(--ro-ink-soft); margin:0; }
.live-battles-list { display:grid; gap:.9rem; }
.live-battle-card {
    display:flex; align-items:center; justify-content:space-between; gap:1rem;
    padding:1rem 1.1rem;
    border:2px solid #7a5a34;
    border-radius:4px;
    background: linear-gradient(#e8d4ac,#d3b989);
    box-shadow:0 0 0 1px #f3e7c9 inset;
}
.live-battle-copy { min-width:0; }
.live-battle-title { color: var(--ro-ink); font-weight:700; margin:0 0 .35rem; }
.live-battle-meta { color: var(--ro-ink-soft); margin:0; word-break:break-word; }
.live-battle-meta span { color: var(--ro-gold-deep); font-weight:700; }
.live-battle-badge {
    display:inline-block; margin-left:.45rem; padding:.1rem .5rem;
    border-radius:3px; background: var(--ro-red); color:#ffe6d8;
    font-size:.85rem; font-weight:700; vertical-align:middle;
    border:1px solid #5a1410;
}
@media(max-width:700px){
    .battle-list-head, .live-battle-card { flex-direction:column; align-items:flex-start; }
}

/* ── Battle Header grid (battle.html) ─────────────────────────────────── */
.battle-header-grid { display:grid; grid-template-columns:1fr auto 1fr; gap:1rem; align-items:center; padding:.75rem 0; }
@media(max-width:700px){
    .battle-header-grid { grid-template-columns:1fr; }
    .player-right h2,.player-right .hp-text,.player-right .potion-count { text-align:left; }
}

/* ── Player Info window (battle.html) ─────────────────────────────────── */
.player-info {
    padding:.85rem 1rem;
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:2px solid var(--ro-win-border);
    border-radius:4px;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset;
}
.player-info h2 {
    font-family: var(--ro-font-pixel);
    font-size:.72rem;
    color: var(--ro-ink);
    margin-bottom:.6rem;
    text-transform:uppercase;
    letter-spacing:.5px;
}
.player-right h2 { text-align:right; }
.player-right .hp-text,
.player-right .potion-count { text-align:right; }

/* ── HP Bars (RO red, sunken) ─────────────────────────────────────────── */
.hp-bar {
    height:16px;
    background: var(--ro-track);
    border-radius:2px;
    overflow:hidden;
    margin-bottom:.35rem;
    border:1px solid var(--ro-track-edge);
    box-shadow:0 1px 2px rgba(0,0,0,.5) inset;
}
.hp-fill {
    height:100%; width:100%;
    background: linear-gradient(#e0584a,#bd2a1f);
    box-shadow:0 1px 0 rgba(255,255,255,.35) inset;
    transition: width .5s ease, background .3s;
}
.hp-fill.enemy { background: linear-gradient(#e0584a,#a01f16); float:right; }
.hp-fill.low { background: linear-gradient(#ff7a4a,#e0322a); animation:hpLow .9s infinite alternate; }
.hp-fill.enemy.low { background: linear-gradient(#ff7a4a,#e0322a); }
@keyframes hpLow { from{filter:brightness(1)} to{filter:brightness(1.4)} }
.hp-text { font-size:1.05rem; color: var(--ro-ink-soft); margin-bottom:.2rem; }
.potion-count { font-size:1rem; color: var(--ro-ink-soft); margin:0; }
.potion-count span { color: var(--ro-red); font-weight:700; }

/* ── Battle Center / turn ─────────────────────────────────────────────── */
.battle-center { text-align:center; display:flex; flex-direction:column; gap:.45rem; align-items:center; }
.battle-state {
    background: var(--ro-win-1);
    border:2px solid var(--ro-win-border);
    border-radius:3px;
    padding:.2rem .9rem;
    font-size:1rem;
    color: var(--ro-ink-soft);
}
.battle-state span { color: var(--ro-green); font-weight:700; text-transform:uppercase; }
.turn-indicator {
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:2px solid var(--ro-win-border);
    border-radius:3px;
    padding:.45rem .9rem;
    font-family: var(--ro-font-pixel);
    font-size:.7rem;
    color: var(--ro-ink);
    text-transform:uppercase;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset;
}
.turn-indicator span { color: var(--ro-gold-deep); }
.spectator-count { font-size:.95rem; color: var(--ro-ink-faint); }
.spectator-count span { color: var(--ro-ink-soft); }

/* ── Battle Layout ────────────────────────────────────────────────────── */
.battle-layout {
    display:grid;
    grid-template-areas: "arena arena" "actions log";
    grid-template-columns:1fr 1fr;
    gap:1.25rem;
    padding:1.25rem 0;
}
@media(max-width:768px){
    .battle-layout { grid-template-areas:"arena" "actions" "log"; grid-template-columns:1fr; }
}

/* ── Arena (grass field) ──────────────────────────────────────────────── */
.battle-arena {
    grid-area:arena;
    display:flex;
    justify-content:space-between;
    align-items:flex-end;
    background:
        linear-gradient(180deg,#bfe3f2 0%, #9fd0e6 28%, #86bb5d 46%, #5f8e3e 100%);
    border:3px solid #4a3119;
    border-radius:4px;
    box-shadow:0 0 0 2px #f3e7c9 inset, 0 6px 16px rgba(0,0,0,.3);
    padding:1.75rem;
    min-height:200px;
    position:relative;
    overflow:hidden;
}
.character { display:flex; flex-direction:column; align-items:center; }
.character img {
    width:96px; height:96px;
    object-fit:contain;
    image-rendering:pixelated;
    filter: drop-shadow(0 6px 4px rgba(0,0,0,.35));
}
.character.enemy img { filter: drop-shadow(0 6px 4px rgba(0,0,0,.35)); }

/* ── Command window (battle actions) ──────────────────────────────────── */
.battle-actions {
    grid-area:actions;
    display:flex;
    flex-direction:column;
    gap:.65rem;
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:2px solid var(--ro-win-border);
    border-radius:4px;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset;
    padding:1.25rem;
}
.battle-actions .btn {
    padding:.8rem 1rem;
    font-family: var(--ro-font-pixel);
    font-size:.72rem;
    border-radius:3px;
    border:2px solid var(--ro-win-border);
    transition: transform .08s, filter .15s;
    text-transform:uppercase;
    box-shadow:0 0 0 2px #f3e7c9 inset, 0 3px 0 #7a5230;
}
.battle-actions .btn:active:not(:disabled){ transform:translateY(2px); box-shadow:0 0 0 2px #f3e7c9 inset; }
.battle-actions .btn:disabled { opacity:.45; cursor:not-allowed; filter:grayscale(.5); box-shadow:none; }

/* attack / potion command buttons */
.btn-attack, .btn-atk {
    background: linear-gradient(#d16a4a,#b23a2a);
    color:#fff2ea; text-shadow:1px 1px 0 #5a1410;
}
.btn-attack:hover:not(:disabled), .btn-atk:hover:not(:disabled) { filter:brightness(1.1); color:#fff; }
.btn-pots {
    background: linear-gradient(#5aa35f,#2e7a3e);
    color:#eafbe9; text-shadow:1px 1px 0 #143f1c;
}
.btn-pots:hover:not(:disabled) { filter:brightness(1.1); color:#fff; }

/* ── Battle Log (RO chat window) ──────────────────────────────────────── */
.battle-log {
    grid-area:log;
    background: var(--ro-chat-bg);
    border:2px solid var(--ro-chat-border);
    border-radius:4px;
    padding:1rem 1.1rem;
    box-shadow:0 0 0 1px rgba(255,255,255,.05) inset;
}
.battle-log h3 {
    color:#cfe8c8;
    font-family: var(--ro-font-pixel);
    font-size:.66rem;
    text-transform:uppercase;
    margin-bottom:.85rem;
    padding-bottom:.45rem;
    border-bottom:1px solid #2a3a2a;
}
.log-messages {
    height:240px;
    overflow-y:auto;
    display:flex;
    flex-direction:column;
    gap:.15rem;
    padding-right:.35rem;
}
.log-messages::-webkit-scrollbar { width:6px; }
.log-messages::-webkit-scrollbar-track { background:#101c12; }
.log-messages::-webkit-scrollbar-thumb { background:#3f5a3f; border-radius:2px; }
.log-messages p {
    margin:0;
    padding:.1rem .35rem;
    font-size:1.1rem;
    line-height:1.35;
    text-shadow:1px 1px 0 rgba(0,0,0,.6);
}
.log-attack  { color:#ffffff; }
.log-crit    { color:#ffe14d; }
.log-potion  { color:#86f06a; }
.log-system  { color:#9bb39b; }
.log-win     { color:#ffe14d; font-weight:700; }
.log-reflect { color:#ff6a6a; }

/* ── Stats Page (character window) ────────────────────────────────────── */
.stats-panel { max-width:640px; margin:2rem auto; }
.stats-panel > .sp-header { display:flex; justify-content:space-between; align-items:baseline; margin-bottom:1.5rem; }
.stats-panel > .sp-header p { color: var(--ro-ink-soft); margin:0; font-size:1.1rem; }
.stats-panel > .sp-header span { color: var(--ro-gold-deep); font-size:1.6rem; font-weight:700; }
.stat-row {
    display:flex; align-items:center;
    background: linear-gradient(#e8d4ac,#d8bd92);
    border:2px solid #7a5a34;
    border-radius:4px;
    padding:.65rem 1rem;
    margin-bottom:.6rem;
    box-shadow:0 0 0 1px #f3e7c9 inset;
}
.stat-row label {
    width:60px;
    font-family: var(--ro-font-pixel);
    font-size:.62rem;
    color: var(--ro-red);
    text-transform:uppercase;
    flex-shrink:0;
}
.stat-row > .stat-val { width:46px; text-align:center; font-size:1.5rem; font-weight:700; color: var(--ro-gold-deep); }
.stat-bar-wrap {
    flex:1; height:10px;
    background: var(--ro-track);
    border-radius:2px; overflow:hidden;
    margin:0 .85rem;
    border:1px solid var(--ro-track-edge);
}
.stat-bar-fill { height:100%; background: linear-gradient(#f6c453,#c78a1e); transition:width .3s; }
.stat-controls { display:flex; gap:.4rem; margin-left:auto; }
.stat-controls button {
    width:36px; height:36px;
    border:2px solid var(--ro-win-border);
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    color: var(--ro-ink);
    border-radius:3px;
    font-size:1.2rem; font-weight:700;
    cursor:pointer;
    box-shadow:0 0 0 1px #f3e7c9 inset, 0 2px 0 #7a5230;
    display:flex; align-items:center; justify-content:center;
    transition:transform .08s, filter .15s;
}
.stat-controls button:hover:not(:disabled) { filter:brightness(1.08); }
.stat-controls button:active:not(:disabled){ transform:translateY(2px); box-shadow:0 0 0 1px #f3e7c9 inset; }
.stat-controls button:disabled { opacity:.4; cursor:not-allowed; box-shadow:none; }
.derived-stats {
    background: rgba(58,36,18,.06);
    border:2px solid #8a6a44;
    border-radius:4px;
    padding:1.1rem 1.25rem;
    margin:1.25rem 0;
}
.derived-stats h4 {
    color: var(--ro-ink);
    font-family: var(--ro-font-pixel);
    font-size:.66rem;
    text-transform:uppercase;
    margin-bottom:.85rem;
    padding-bottom:.45rem;
    border-bottom:1px solid #8a6a44;
}
.derived-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:.6rem; }
.derived-item {
    background: linear-gradient(#e8d4ac,#d8bd92);
    border:1px solid #7a5a34;
    border-radius:3px;
    padding:.5rem .75rem;
}
.derived-item .d-label { font-size:.95rem; color: var(--ro-ink-faint); text-transform:uppercase; }
.derived-item .d-value { font-size:1.35rem; font-weight:700; color: var(--ro-ink); }
.stats-actions { display:flex; gap:.85rem; margin-top:1.25rem; flex-wrap:wrap; }
.reset-info { font-size:.95rem; color: var(--ro-ink-faint); margin-top:.4rem; }

/* ── Spectate Page ────────────────────────────────────────────────────── */
.spectate-hp { display:grid; grid-template-columns:1fr 1fr; gap:2rem; margin-bottom:1.25rem; }
@media(max-width:576px){ .spectate-hp { grid-template-columns:1fr; gap:1rem; } }
.hp-block h3 { color: var(--ro-ink); font-family:var(--ro-font-pixel); font-size:.72rem; margin-bottom:.6rem; }
.hp-block .hp-text { font-size:1.05rem; color: var(--ro-ink-soft); margin-top:.25rem; }

/* ── Toast (parchment) ────────────────────────────────────────────────── */
#toast-container {
    position:fixed; bottom:1.25rem; right:1.25rem;
    z-index:9999; display:flex; flex-direction:column; gap:.45rem; pointer-events:none;
}
.toast-msg {
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:2px solid var(--ro-win-border);
    border-radius:4px;
    padding:.7rem 1.05rem;
    font-size:1.05rem;
    min-width:230px;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset, 0 4px 12px rgba(0,0,0,.35);
    animation:toastIn .3s ease;
    color: var(--ro-ink);
    pointer-events:auto;
}
.toast-msg.success { border-left:5px solid var(--ro-green); }
.toast-msg.error { border-left:5px solid var(--ro-red); }
.toast-msg.info { border-left:5px solid #3f7fb8; }
@keyframes toastIn { from{transform:translateX(110%);opacity:0} to{transform:translateX(0);opacity:1} }

/* ── Auth Loading overlay ─────────────────────────────────────────────── */
#authLoading {
    position:fixed; inset:0;
    background: linear-gradient(180deg,#a9d7ec,#6f9e48);
    display:flex; align-items:center; justify-content:center;
    z-index:9999; flex-direction:column; gap:.85rem;
}
#authLoading .spinner {
    width:38px; height:38px;
    border:4px solid #4a3119;
    border-top-color: var(--ro-gold);
    border-radius:50%;
    animation:spin .75s linear infinite;
}
#authLoading p { color:#2f2412; font-family:var(--ro-font-pixel); font-size:.7rem; }
@keyframes spin { to{transform:rotate(360deg)} }

/* ── Game Over window ─────────────────────────────────────────────────── */
#gameOverOverlay {
    display:none; position:fixed; inset:0;
    background: rgba(20,12,4,.78);
    z-index:9000; align-items:center; justify-content:center;
}
#gameOverOverlay.show { display:flex; }
.game-over-card {
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:3px solid var(--ro-win-border);
    border-radius:6px;
    padding:2.75rem 3rem;
    text-align:center;
    max-width:420px;
    box-shadow:0 0 0 3px var(--ro-win-bevel) inset, 0 10px 40px rgba(0,0,0,.5);
}
.game-over-card h2 {
    font-family: var(--ro-font-pixel);
    font-size:1.5rem;
    line-height:1.4;
    text-transform:uppercase;
    margin-bottom:1rem;
    color: var(--ro-ink);
}
.game-over-card.victory h2 { color: var(--ro-gold-deep); text-shadow:1px 1px 0 #fff3d0; }
.game-over-card.defeat h2 { color: var(--ro-red); }
.game-over-card p { color: var(--ro-ink-soft); margin-bottom:1.75rem; font-size:1.2rem; }

/* ── Buttons (parchment beveled) ──────────────────────────────────────── */
.btn-primary,
.btn-secondary,
.btn-danger,
.btn-outline-light {
    font-family: var(--ro-font-pixel) !important;
    font-size:.66rem !important;
    border-radius:3px !important;
    border:2px solid var(--ro-win-border) !important;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset, 0 3px 0 #7a5230;
    transition: transform .08s, filter .15s;
    text-transform:uppercase;
}
.btn-primary { background: linear-gradient(#d8a24a,#b57a22) !important; color:#3f2a12 !important; }
.btn-primary:hover { background: linear-gradient(#e6b45c,#c78a2c) !important; filter:brightness(1.05); }
.btn-secondary { background: linear-gradient(var(--ro-win-1),var(--ro-win-2)) !important; color: var(--ro-ink) !important; }
.btn-secondary:hover { filter:brightness(1.06); color: var(--ro-ink) !important; }
.btn-danger { background: linear-gradient(#d16a4a,#b2281c) !important; color:#fff2ea !important; }
.btn-outline-light { background: linear-gradient(var(--ro-win-1),var(--ro-win-2)) !important; color: var(--ro-ink) !important; }
.btn-primary:active,
.btn-secondary:active,
.btn-danger:active,
.btn-outline-light:active { transform:translateY(2px); box-shadow:0 0 0 2px var(--ro-win-bevel) inset; }

/* ── Guest notice / alerts ────────────────────────────────────────────── */
.alert-info {
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:2px solid var(--ro-win-border);
    color: var(--ro-ink);
    border-radius:4px;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset;
}
.alert-info .alert-link { color: var(--ro-red); }

/* ── Username modal (RO window) ───────────────────────────────────────── */
.modal-content {
    background: linear-gradient(var(--ro-win-1),var(--ro-win-2));
    border:3px solid var(--ro-win-border);
    border-radius:6px;
    color: var(--ro-ink);
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset;
}
.modal-header, .modal-footer { border-color:#8a6a44; }
.modal-title { font-family:var(--ro-font-pixel); font-size:.85rem; color: var(--ro-ink); }
.modal-content .form-control {
    background:#f3ead3; border:2px solid #7a5a34; color: var(--ro-ink);
    border-radius:3px; font-family: var(--ro-font-ui); font-size:1.1rem;
}
.modal-content .form-control:focus { border-color: var(--ro-red); box-shadow:0 0 0 .2rem rgba(189,42,31,.25); }
.form-label { color: var(--ro-ink-soft); }

/* ── Footer ───────────────────────────────────────────────────────────── */
footer.bg-light {
    background: linear-gradient(#6e4420,#4a3119) !important;
    border-top:3px solid #2f1e0e;
    color:#e6cfa6 !important;
}
footer a { color: var(--ro-gold) !important; }
footer a:hover { color:#fff3d0 !important; }

/* ── Phase 2: Arena sprites + combat FX (battle.html) ─────────────────── */
.battle-arena { overflow:visible; }
.character { position:relative; }
.knight-svg {
    height:150px; width:auto; display:block;
    image-rendering:pixelated;
    filter: drop-shadow(0 6px 4px rgba(0,0,0,.35));
}
.character.enemy .knight-svg { transform: scaleX(-1); }

@keyframes ro-shake {
    0%,100%{transform:translateX(0)}
    15%{transform:translateX(-5px)} 30%{transform:translateX(5px)}
    45%{transform:translateX(-4px)} 60%{transform:translateX(4px)} 78%{transform:translateX(-2px)}
}
.character.shake { animation: ro-shake .36s ease-in-out; }

.fx-num {
    position:absolute; left:50%; top:-6px;
    transform:translate(-50%,0);
    font-family:'Arial Black','Segoe UI',sans-serif; font-weight:900;
    font-size:30px; line-height:1; white-space:nowrap; pointer-events:none;
    paint-order:stroke fill; -webkit-text-stroke:4px #2a1606;
    color:#ffe14d; z-index:6;
    animation: ro-float 1.15s ease-out forwards;
}
.fx-num.fx-crit { font-size:44px; -webkit-text-stroke-width:5px; }
.fx-num.fx-heal { color:#86f06a; -webkit-text-stroke-color:#15431a; }
.fx-num.fx-reflect { color:#ff2e2e; -webkit-text-stroke-color:#4a0c0c; font-size:24px; }
@keyframes ro-float {
    0%{opacity:0; transform:translate(-50%,12px) scale(.6)}
    18%{opacity:1; transform:translate(-50%,-6px) scale(1.14)}
    32%{opacity:1; transform:translate(-50%,-14px) scale(1)}
    100%{opacity:0; transform:translate(-50%,-58px) scale(1)}
}
.fx-status {
    position:absolute; left:50%; top:0; transform:translate(-50%,0);
    font-family:var(--ro-font-pixel); font-size:.7rem; white-space:nowrap;
    pointer-events:none; z-index:6; color:#eaf7ff;
    text-shadow:1px 1px 0 #123, 0 0 6px #67e8f9;
    animation: ro-float 1.25s ease-out forwards;
}
.fx-status.frozen { color:#c9f2ff; text-shadow:1px 1px 0 #0c3a44, 0 0 6px #67e8f9; }
.fx-star {
    position:absolute; left:50%; top:-54px; transform:translate(-50%,0);
    width:170px; height:170px; pointer-events:none; z-index:5;
    animation: ro-starpop 1.55s ease-out forwards;
}
.fx-star svg { width:100%; height:100%; display:block; }
@keyframes ro-starpop {
    0%{opacity:0; transform:translate(-50%,0) scale(.3) rotate(-14deg)}
    18%{opacity:.98; transform:translate(-50%,0) scale(1.08) rotate(0)}
    48%{opacity:.9; transform:translate(-50%,0) scale(1.02) rotate(2deg)}
    100%{opacity:0; transform:translate(-50%,0) scale(1.18) rotate(6deg)}
}
.fx-freeze {
    position:absolute; left:50%; bottom:-8px; transform:translateX(-50%);
    width:118px; height:150px; pointer-events:none; z-index:4;
}
.fx-freeze svg { width:100%; height:100%; display:block; }
@media (prefers-reduced-motion:reduce){
    .character.shake { animation:none; }
    .fx-num,.fx-status { animation:none; opacity:1; transform:translate(-50%,-18px); }
    .fx-star { animation:none; opacity:.85; transform:translate(-50%,0) scale(1); }
}

/* ── Phase 3: Lobby polish + character sheet ──────────────────────────── */
/* Live-battle "VS" badge + pulsing LIVE dot (main.html) */
.live-battle-title .vs {
    display:inline-block; margin:0 .3rem; padding:.05rem .45rem;
    background: var(--ro-red); color:#ffe6d8;
    border:1px solid #5a1410; border-radius:3px;
    font-family: var(--ro-font-pixel); font-size:.55rem; vertical-align:middle;
}
.live-battle-card { position:relative; }
.live-battle-card::before {
    content:""; position:absolute; top:10px; right:12px;
    width:9px; height:9px; border-radius:50%;
    background:#e0322a; box-shadow:0 0 0 2px #5a1410, 0 0 8px #ff6a4a;
    animation: ro-live 1.3s ease-in-out infinite;
}
@keyframes ro-live { 0%,100%{opacity:1} 50%{opacity:.3} }
@media (prefers-reduced-motion:reduce){ .live-battle-card::before { animation:none; } }

/* Character crest + points counter (stats.html) */
.stats-panel > .sp-header { align-items:center; }
.char-crest {
    width:58px; height:70px; flex-shrink:0;
    display:flex; align-items:flex-end; justify-content:center;
    background: linear-gradient(#bfe3f2,#86bb5d);
    border:2px solid var(--ro-win-border); border-radius:5px;
    box-shadow:0 0 0 2px var(--ro-win-bevel) inset;
    overflow:hidden;
}
.char-crest svg { height:64px; width:auto; image-rendering:pixelated; }
.points-box { display:flex; flex-direction:column; text-align:right; }
.points-label { font-size:.95rem; color: var(--ro-ink-soft); text-transform:uppercase; letter-spacing:.5px; }
.points-value { font-family: var(--ro-font-pixel); font-size:1.35rem; color: var(--ro-gold-deep); }

/* Per-stat RO accents (STR red · DEX green · VIT orange · LUK purple) */
.stat-row.str label { color:#c53a2e; }
.stat-row.dex label { color:#2f8f4a; }
.stat-row.vit label { color:#c07a1e; }
.stat-row.luk label { color:#8f4fc0; }
.stat-row.str .stat-bar-fill { background:linear-gradient(#e0584a,#b52a1e); }
.stat-row.dex .stat-bar-fill { background:linear-gradient(#57b56a,#2f8f4a); }
.stat-row.vit .stat-bar-fill { background:linear-gradient(#f0b054,#c07a1e); }
.stat-row.luk .stat-bar-fill { background:linear-gradient(#b57fd8,#8f4fc0); }

/* ── Phase 4: inputs · focus rings · spectate · reduced-motion ─────────── */
.form-control {
    background:#f3ead3;
    border:2px solid #7a5a34;
    color: var(--ro-ink);
    border-radius:3px;
    font-family: var(--ro-font-ui);
    font-size:1.1rem;
}
.form-control::placeholder { color:#9a7b52; }
.form-control:focus {
    background:#fbf4e2;
    border-color: var(--ro-red);
    color: var(--ro-ink);
    box-shadow:0 0 0 .2rem rgba(189,42,31,.22);
}

/* Keyboard focus rings (RO gold) */
.btn:focus-visible,
.stat-controls button:focus-visible,
.nav-link:focus-visible,
.navbar-brand:focus-visible,
.form-control:focus-visible,
.live-battle-card a:focus-visible,
.btn-close:focus-visible {
    outline:3px solid var(--ro-gold);
    outline-offset:2px;
}

/* Spectate turn/status inline alignment */
#battleView .turn-indicator,
#battleView .battle-state { vertical-align:middle; }
#spectateBattleId { color:#f0d9b0; }

/* Respect reduced motion on looping decorative animations */
@media (prefers-reduced-motion:reduce){
    .queue-status span.searching,
    .hp-fill.low { animation:none !important; }
}
