/* ============================================================
   バトル画面レイアウト (縦画面)
   ============================================================ */
#app.portrait-mode .battle-view {
    height: 560px;
    width: 100%;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    align-items: center;
    position: relative;
    isolation: isolate;
    background:
        radial-gradient(ellipse 110% 60% at 50% 115%, rgba(50, 100, 220, 0.20) 0%, transparent 60%),
        radial-gradient(circle at 25% 15%, rgba(80, 40, 180, 0.10) 0%, transparent 50%),
        radial-gradient(circle at 78% 30%, rgba(20, 80, 200, 0.08) 0%, transparent 45%),
        linear-gradient(180deg, #0b0f1e 0%, #07091a 100%);
}

/* battle-view 底部の分割ライン */
#app.portrait-mode .battle-view::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height: 3px;
    background: linear-gradient(90deg,
            transparent 0%,
            rgba(79, 172, 254, 0.6) 15%,
            rgba(160, 220, 255, 1) 50%,
            rgba(79, 172, 254, 0.6) 85%,
            transparent 100%);
    z-index: 5;
    pointer-events: none;
}

#app.portrait-mode .panel {
    height: 1040px;
    width: 100%;
    background:
        radial-gradient(ellipse 120% 28% at 50% 0%, rgba(40, 75, 165, 0.24) 0%, transparent 55%),
        linear-gradient(180deg, #0d1120 0%, #07091a 100%);
    padding: 10px 18px 18px 18px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    position: relative;
    overflow: hidden;
}

#app.portrait-mode .panel-section {
    border: 2px solid rgba(60, 88, 165, 0.45);
    border-radius: 14px;
    background: linear-gradient(180deg, rgba(22, 32, 62, 0.70) 0%, rgba(7, 10, 24, 0.92) 100%);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.06), inset 0 -1px 0 rgba(0, 0, 0, 0.3);
    padding: 14px 18px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

/* ── メッセージログウィンドウ ── */
#app.portrait-mode .panel-section--message {
    height: 140px;
    flex-shrink: 0;
    overflow: hidden;
    padding: 12px 16px;
    justify-content: flex-start;
    border-color: rgba(80, 120, 230, 0.55);
    background: linear-gradient(180deg, rgba(4, 8, 22, 0.98) 0%, rgba(3, 5, 16, 0.99) 100%);
    box-shadow:
        0 0 0 1px rgba(40, 80, 190, 0.12),
        0 4px 16px rgba(0, 0, 0, 0.65),
        inset 0 0 30px rgba(0, 20, 80, 0.30);
}

#app.portrait-mode .message-log {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

#app.portrait-mode .message-log-line {
    font-size: 45px;
    font-weight: bold;
    line-height: 1.3;
    animation: msg-slide-in 0.15s ease-out;
}

@keyframes msg-slide-in {
    from {
        transform: translateY(6px);
    }

    to {
        transform: translateY(0);
    }
}

/* ── 問題ウィンドウ ── */
#app.portrait-mode .panel-section--problem {
    height: 150px;
    gap: 14px;
    flex-shrink: 0;
    transition: border-color 0.2s, box-shadow 0.2s;
}

#app.portrait-mode .panel-section--problem.player-turn {
    border-color: rgba(79, 172, 254, 0.80);
    box-shadow: 0 0 30px rgba(79, 172, 254, 0.38), 0 4px 16px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(79, 172, 254, 0.12);
}

#app.portrait-mode .panel-section--problem.monster-turn {
    border-color: rgba(255, 70, 70, 0.80);
    box-shadow: 0 0 30px rgba(255, 70, 70, 0.38), 0 4px 16px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 70, 70, 0.12);
}

/* ── テンキーウィンドウ ── */
#app.portrait-mode .panel-section--numpad {
    height: 602px;
    padding: 0;
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    border-color: rgba(50, 70, 140, 0.35);
    background: linear-gradient(180deg, rgba(14, 20, 44, 0.80) 0%, rgba(5, 8, 18, 0.96) 100%);
    overflow: hidden;
}

/* ── バトル背景画像 ── */
#app.portrait-mode .battle-bg-img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    z-index: -1;
    pointer-events: none;
    display: block;
    opacity: 0.7;
}

/* ── モンスター領域 ── */
#app.portrait-mode .monster-container {
    width: 100%;
    padding: 0 32px;
}

#app.portrait-mode #monster-img {
    max-width: 100%;
    max-height: 462px;
    object-fit: contain;
}

/* stage-progress: battle-view 最上部に絶対配置 */
#app.portrait-mode .stage-progress {
    position: absolute;
    top: 10px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    gap: 10px;
    justify-content: center;
    z-index: 10;
    padding: 7px 22px;
    background: rgba(4, 6, 18, 0.75);
    border-radius: 24px;
    border: 1px solid rgba(79, 172, 254, 0.22);
    backdrop-filter: blur(6px);
    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.55);
}

/* monster-img-wrapper: stage-progress より背後 */
#app.portrait-mode .monster-img-wrapper {
    position: relative;
    z-index: 1;
    line-height: 0;
}

/* monster-stat: モンスター画像下端のオーバーレイ */
#app.portrait-mode .monster-stat {
    position: relative;
    z-index: 2;
    margin-top: -36px;
    width: 100%;
    text-align: center;
    padding: 10px 24px 14px;
    background: rgba(4, 6, 16, 0.60);
    border-radius: 12px;
}

#app.portrait-mode #monster-name {
    font-size: calc(38px * var(--monster-name-scale, 1));
    font-weight: bold;
    text-shadow: 0 0 12px rgba(255, 110, 110, 0.40), 0 2px 5px rgba(0, 0, 0, 0.95);
    white-space: nowrap;
    display: block;
    color: #ffb8b8;
    letter-spacing: 1px;
}

#app.portrait-mode .monster-stat .hp-bar-container {
    height: 18px;
    margin-top: 10px;
    border-color: rgba(90, 20, 20, 0.55);
    box-shadow: 0 0 8px rgba(255, 50, 50, 0.18), inset 0 2px 6px rgba(0, 0, 0, 0.7);
}

/* ステージドット */
#app.portrait-mode .stage-dot {
    width: 14px;
    height: 14px;
    border-radius: 50%;
    border: 2px solid rgba(255, 255, 255, 0.40);
    transition: transform 0.2s, box-shadow 0.2s;
}

#app.portrait-mode .stage-dot.current {
    background: var(--danger-color);
    border-color: #ffaaaa;
    transform: scale(1.5);
    box-shadow: 0 0 8px rgba(255, 80, 80, 0.9);
}

#app.portrait-mode .stage-dot.cleared {
    background: var(--success-color);
    border-color: var(--success-color);
    box-shadow: 0 0 5px rgba(0, 230, 100, 0.6);
}

#app.portrait-mode .stage-dot.cleared.rare {
    background: var(--accent-color);
    border-color: var(--accent-color);
    box-shadow: 0 0 5px rgba(255, 215, 0, 0.6);
}

#app.portrait-mode .stage-dot.cleared.heal {
    background: var(--primary-color);
    border-color: var(--primary-color);
    box-shadow: 0 0 5px rgba(79, 172, 254, 0.6);
}

/* ── パネル内部（ステータス）── */
#app.portrait-mode .panel-section--status {
    height: 90px;
    padding: 10px 16px;
    flex-shrink: 0;
    flex-direction: row;
    align-items: center;
    gap: 14px;
}

#app.portrait-mode .status-equip {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 6px;
    flex-shrink: 0;
}

#app.portrait-mode .sword-aura-wrapper {
    height: 64px;
}

#app.portrait-mode #sword-label {
    height: 64px;
    width: auto;
    vertical-align: middle;
}

#app.portrait-mode #shield-label {
    height: 64px;
    width: auto;
    vertical-align: middle;
}

#app.portrait-mode .status-hp-area {
    flex: 1;
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 8px;
    row-gap: 3px;
    align-items: center;
    min-width: 0;
}

#app.portrait-mode .status-bar-box {
    min-width: 0;
}

#app.portrait-mode .status-bar-box .hp-bar-container {
    width: 100%;
    height: 16px;
    flex-shrink: 0;
}

#app.portrait-mode .exp-bar-container {
    width: 100%;
    height: 10px;
    background: #111;
    border-radius: 5px;
    overflow: hidden;
    border: 1px solid rgba(120, 80, 200, 0.5);
    box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.7);
}

#app.portrait-mode .exp-bar-fill {
    height: 100%;
    background: linear-gradient(90deg, #7744cc 0%, #bb88ff 100%);
    transition: width 0.4s ease-out;
    box-shadow: 0 0 6px rgba(180, 100, 255, 0.6);
}

/* 必殺技ゲージ */
#app.portrait-mode .special-gauge-row {
    display: flex;
    flex-direction: row;
    gap: 4px;
    width: 100%;
    margin-top: 4px;
}

#app.portrait-mode .special-gauge {
    flex: 1;
    height: 8px;
    background-color: rgba(255, 255, 255, 0.15);
    border-radius: 4px;
    border: 1px solid rgba(255, 255, 255, 0.25);
    transition: background-color 0.15s, box-shadow 0.15s;
}

#app.portrait-mode .special-gauge.active {
    background-color: #ffd700;
    box-shadow: 0 0 6px rgba(255, 215, 0, 0.85);
}

/* 必殺技待機: 激しいオーラ放射 (Blazing Flare) */
@keyframes blazing-aura-pulse {

    0%,
    100% {
        box-shadow:
            0 0 25px 10px rgba(255, 80, 0, 0.7),
            inset 0 0 45px 20px rgba(255, 60, 0, 0.6);
        border-color: rgba(255, 120, 0, 0.8);
    }

    50% {
        box-shadow:
            0 0 60px 25px rgba(255, 40, 0, 1),
            inset 0 0 80px 40px rgba(255, 140, 0, 0.9);
        border-color: rgba(255, 200, 50, 1);
    }
}

.numpad-special-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 5;
    border: 3px solid rgba(255, 150, 0, 0.8);
    animation: blazing-aura-pulse 0.8s ease-in-out infinite;
    overflow: hidden;
    mix-blend-mode: screen;
}

#app.portrait-mode #player-hp-text {
    font-size: 26px;
    font-weight: bold;
    color: #b0e0ff;
}

#app.portrait-mode #player-level-text {
    font-size: 26px;
    font-weight: bold;
    color: #9999dd;
    font-family: var(--font-pixel);
}

/* ── 問題表示 ── */
#app.portrait-mode .problem-area {
    text-align: center;
}

#app.portrait-mode .problem-text {
    font-size: 78px;
    line-height: 1;
    font-weight: bold;
    font-family: var(--font-pixel);
    color: var(--accent-color);
    letter-spacing: 5px;
    display: flex;
    justify-content: center;
    align-items: baseline;
    text-shadow: 0 0 22px rgba(255, 215, 0, 0.38), 0 3px 6px rgba(0, 0, 0, 0.95);
}

#app.portrait-mode .problem-hint {
    font-size: 22px;
    font-family: var(--font-pixel);
    color: rgba(255, 215, 0, 0.75);
    letter-spacing: 2px;
    line-height: 1;
    text-align: center;
    margin-top: 4px;
}

#app.portrait-mode .answer-input {
    display: none;
}

#app.portrait-mode .timer-container {
    height: 14px;
    flex-shrink: 0;
}

/* ── テンキー ── */
#app.portrait-mode .numpad-image-wrapper {
    position: relative;
    flex: 1;
    width: 100%;
    overflow: hidden;
}

#app.portrait-mode .numpad-bg-img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    opacity: 0.9;
}

#app.portrait-mode .numpad {
    position: absolute;
    inset: 0;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(4, 1fr);
}

#app.portrait-mode .num-btn {
    background: transparent;
    border: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}

@keyframes numpad-flare-anim {
    0% {
        transform: translate(-50%, -50%) scale(0.2);
        opacity: 0.95;
    }

    100% {
        transform: translate(-50%, -50%) scale(2.4);
        opacity: 0;
    }
}

#app.portrait-mode .numpad-flare {
    position: absolute;
    pointer-events: none;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(200, 245, 255, 0.95) 0%, rgba(79, 172, 254, 0.55) 45%, transparent 70%);
    animation: numpad-flare-anim 0.45s ease-out forwards;
    z-index: 20;
}

/* Item Slot */
#app.portrait-mode .item-slot-container {
    width: 65px;
    height: 65px;
}

#app.portrait-mode #item-use-img {
    width: 280px;
    height: 280px;
}

/* ボス撃破時のゆっくりとしたフェードアウトアニメーション（上から下へ消えつつ暗くなる） */
#app.portrait-mode .boss-defeat-anim {
    animation: boss-defeat-wipe 3s ease-in-out forwards !important;
}

@keyframes boss-defeat-wipe {
    0% {
        opacity: 1;
        clip-path: inset(0 0 0 0);
        filter: brightness(1.2) saturate(1.2);
    }
    15% {
        opacity: 1;
        filter: brightness(1.5) saturate(0.8);
    }
    100% {
        opacity: 0;
        clip-path: inset(100% 0 0 0);
        filter: brightness(0.2) saturate(0);
    }
}

#app.portrait-mode .boss-defeat-anim-name {
    animation: boss-defeat-fade 3s ease-in-out forwards !important;
}

@keyframes boss-defeat-fade {
    0% { opacity: 1; }
    100% { opacity: 0; }
}
/* ボス復活時のフェードインアニメーション（下から上へ現れつつ明るくなる） */
#app.portrait-mode .boss-recover-anim {
    animation: boss-recover-wipe 3s ease-out forwards !important;
}

@keyframes boss-recover-wipe {
    0% {
        opacity: 0;
        clip-path: inset(100% 0 0 0);
        filter: brightness(0.2) saturate(0);
        transform: translateY(30px);
    }
    50% {
        opacity: 1;
        filter: brightness(1.5) saturate(1.2);
    }
    100% {
        opacity: 1;
        clip-path: inset(0 0 0 0);
        filter: brightness(1) saturate(1);
        transform: translateY(0);
    }
}

#app.portrait-mode .boss-recover-anim-name {
    animation: boss-recover-fade 3s ease-in-out forwards !important;
}

@keyframes boss-recover-fade {
    0% { opacity: 0; }
    50% { opacity: 0.2; }
    100% { opacity: 1; }
}
