@media (orientation: portrait) {
    /* 全局干掉横屏提示 */
    #rotateHint { display: none !important; }

    /* 战斗界面布局 */
    body:has(#battle:not(.hidden)) #stage {
        width: 100vw !important;
        height: 100vh !important;
        transform: none !important;
        left: 0 !important;
        top: 0 !important;
        position: relative;
        display: flex;
        flex-direction: column;
        overflow: hidden;
    }

    body:has(#battle:not(.hidden)) .main {
        display: grid;
        grid-template-columns: 1fr;
        grid-template-rows: auto 15vh auto 15vh auto 1fr;
        gap: 2px;
        padding: 0;
        flex: 1;
        min-height: 0;
        width: 100vw !important;
        box-sizing: border-box;
        overflow: hidden;
    }

    body:has(#battle:not(.hidden)) .battlecol, 
    body:has(#battle:not(.hidden)) .sidebar { display: contents; }

    body:has(#battle:not(.hidden)) #oppHand, 
    body:has(#battle:not(.hidden)) #logbox { display: none; }

    /* 基础信息栏 */
    body:has(#battle:not(.hidden)) #oppInfo { grid-row: 1; display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: center; padding: 2px 4px; gap: 4px; background: #121214; width: 100%; box-sizing: border-box; }
    body:has(#battle:not(.hidden)) #oppBoard { grid-row: 2; display: flex; justify-content: center; gap: 4px; height: 100%; width: 100%; box-sizing: border-box; overflow: hidden; }
    body:has(#battle:not(.hidden)) #centerZone { grid-row: 3; display: flex; justify-content: center; align-items: center; padding: 4px 0; width: 100%; box-sizing: border-box; }
    body:has(#battle:not(.hidden)) #myBoard { grid-row: 4; display: flex; justify-content: center; gap: 4px; height: 100%; width: 100%; box-sizing: border-box; overflow: hidden; }
    body:has(#battle:not(.hidden)) #myInfo { grid-row: 5; display: flex; flex-wrap: wrap; justify-content: flex-start; align-items: center; padding: 2px 4px; gap: 4px; background: #121214; width: 100%; box-sizing: border-box; }
    
    /* 手牌 */
    body:has(#battle:not(.hidden)) #myHand { grid-row: 6; display: flex; justify-content: flex-start; align-items: flex-start; overflow-x: auto; padding: 8px 2px 2px 2px; gap: 2px; width: 100%; box-sizing: border-box; }

    /* 修复名字留白、右侧超屏 */
    body:has(#battle:not(.hidden)) .inforow { font-size: 12px; gap: 4px !important; }
    body:has(#battle:not(.hidden)) .inforow .nm { min-width: 0 !important; margin-right: 2px !important; font-size: 13px; }
    body:has(#battle:not(.hidden)) .hpwrap { width: 70px !important; height: 12px !important; margin-right: 4px !important; }
    body:has(#battle:not(.hidden)) .inforow .stat { font-size: 11px !important; }
    body:has(#battle:not(.hidden)) .board { width: 100% !important; box-sizing: border-box; }
    body:has(#battle:not(.hidden)) .cell { flex: 1 !important; max-width: 30vw !important; box-sizing: border-box; }
    body:has(#battle:not(.hidden)) .monster { width: 100% !important; height: 100% !important; }
    body:has(#battle:not(.hidden)) .card { flex: 0 0 65px !important; width: 65px !important; height: 90px !important; margin-left: 0 !important; transform: none !important; }

    /* 🚨 牌库与弃牌堆（严格下半屏） */
    body:has(#battle:not(.hidden)) #viewer {
        position: absolute !important; 
        top: 50vh !important; 
        left: 0 !important; 
        width: 100vw !important; 
        height: 50vh !important; 
        z-index: 9998 !important; 
        background: #121214 !important; 
        pointer-events: auto !important;
        display: flex !important; 
        flex-direction: column !important; 
        padding: 8px !important; 
        overflow-y: auto !important; 
        box-sizing: border-box !important;
    }
    body:has(#battle:not(.hidden)) #viewer.hidden { display: none !important; }
    body:has(#battle:not(.hidden)) #viewer .vw-grid { display: flex !important; flex-wrap: wrap !important; gap: 4px !important; margin-top: 10px !important; }
    body:has(#battle:not(.hidden)) #viewer .vw-card { width: 30% !important; box-sizing: border-box !important; }

    /* ================= 预览层排版 ================= */
    body:has(#battle:not(.hidden)) #preview,
    body:has(#battle:not(.hidden)) #cardtip {
        position: fixed !important; 
        left: 0 !important; 
        width: 100vw !important; 
        height: 45vh !important; 
        z-index: 99999 !important;
        background: rgba(18, 18, 20, 0.98) !important; 
        box-sizing: border-box !important; 
        padding: 8px !important; 
        border: 1px solid var(--gold) !important;
        grid-template-columns: 40% 60% !important; 
        grid-template-rows: 1fr 1fr !important;
        grid-template-areas: "img info" "img desc" !important;
        pointer-events: none !important; /* 必须穿透 */
    }

    /* 显隐逻辑 */
    body:has(#battle:not(.hidden)) #preview { display: none !important; }
    body:has(#battle:not(.hidden)) #stage:has(.card:hover) #preview,
    body:has(#battle:not(.hidden)) #stage:has(.monster:hover) #preview,
    body:has(#battle:not(.hidden)) #stage:has(.relic:hover) #preview { display: grid !important; }
    
    body:has(#battle:not(.hidden)) #cardtip:not(.hidden) { display: grid !important; }
    body:has(#battle:not(.hidden)) #cardtip.hidden { display: none !important; }

    /* 🚨 默认上半场触发：预览显示在下半屏 */
    body:has(#battle:not(.hidden)) #preview,
    body:has(#battle:not(.hidden)) #cardtip {
        bottom: 0 !important; 
        top: auto !important;
    }

    /* 🚨 下半场（手牌 / 牌库）触发：预览强制在上半屏 */
    body:has(#battle:not(.hidden)) #stage:has(#myHand .card:hover) #preview,
    body:has(#battle:not(.hidden)) #stage:has(.vw-card:hover) #preview,
    body:has(#battle:not(.hidden)) #stage:has(#myHand .card:active) #cardtip:not(.hidden),
    body:has(#battle:not(.hidden)) #stage:has(.vw-card:active) #cardtip:not(.hidden) {
        top: 0 !important; 
        bottom: auto !important;
    }

    /* 内部排版细节 */
    body:has(#battle:not(.hidden)) #preview .pv-img, 
    body:has(#battle:not(.hidden)) #cardtip img { grid-area: img !important; width: 100% !important; height: 100% !important; object-fit: contain !important; margin: 0 !important; }
    body:has(#battle:not(.hidden)) #preview .pv-title, 
    body:has(#battle:not(.hidden)) #cardtip .ct-name { grid-area: info !important; align-self: start !important; font-size: 15px !important; margin: 0 !important; color: var(--gold) !important; }
    body:has(#battle:not(.hidden)) #preview .pv-owner { display: none !important; }
    body:has(#battle:not(.hidden)) #preview .pv-meta, 
    body:has(#battle:not(.hidden)) #cardtip .ct-meta { grid-area: info !important; align-self: end !important; font-size: 12px !important; color: var(--blue) !important; margin: 0 0 4px 0 !important; }
    body:has(#battle:not(.hidden)) #preview .pv-effect, 
    body:has(#battle:not(.hidden)) #cardtip .ct-eff { grid-area: desc !important; align-self: start !important; font-size: 12px !important; overflow-y: auto !important; margin: 0 !important; line-height: 1.4 !important; }
    body:has(#battle:not(.hidden)) #preview .pv-awaken { display: none !important; }
}