/* ==========================================================================
   装备介绍页（templates/equip.tpl.html 专用皮肤）
   --------------------------------------------------------------------------
   加载顺序：... redesign.css → official.css → job.css → equip.css（本文件最后）
   作用域：body.equip-page

   ★ 本文件**只写装备网格这一块**。页头（.job-hero）、吸顶牌（.job-tabs / .job-tab）、
     区块小标题（.job-skill-title）、页脚金线全部复用 css/job.css 的 .job-page 规则
     —— 模板的 body 上同时挂了 job-page 与 equip-page 两个类，见 gen_equip_template.py 头注。
     把那份皮肤再抄一遍只会得到两份会各自跑偏的真值。

   兼容性硬约束（同全站）：不用 var() / :has() / :is() / :where() / inset / gap /
   clamp() / grid / aspect-ratio / mix-blend-mode；颜色一律字面值；
   动效只走 transform / opacity。（calc() 是允许的。）
   ========================================================================== */

.equip-page .equip-main {
    max-width: 1240px;
    margin: 0 auto;
    padding: 0 20px 70px;
}
.equip-page .equip-cat {
    padding: 54px 0 0;
    /* 与 .job-class 一致：吸顶牌高约 78px，锚点跳转时留余量，标题不被盖住 */
    scroll-margin-top: 86px;
}

/* 吸顶牌里的图标：官方图标实测 25~37px 不等，这里统一装进 32×32 的框，
   保证三块牌子等高（差值最大 ±2px，肉眼不可辨）。
   网格里的图标不吃这条 —— 那里是 1:1 原尺寸，见 .equip-slot。 */
.equip-page .job-tab img {
    width: 32px;
    height: 32px;
}

/* ==========================================================================
   1. 饰品下的二级小节标题（手镯 / 头盔 / 项链 / 戒指 / 腰带 / 靴子）
   ========================================================================== */
.equip-page .equip-sub {
    position: relative;
    margin: 28px 0 14px;
    padding-bottom: 9px;
    border-bottom: 1px solid rgba(201, 162, 77, .18);
    font-size: 0;
}
.equip-page .equip-sub h4 {
    display: inline-block;
    margin: 0;
    font-size: 17px;
    font-weight: normal;
    letter-spacing: 4px;
    color: #e3c98d;
}
/* 标题前的小金条：纯 CSS，避免再引一个图标文件 */
.equip-page .equip-sub h4::before {
    content: '';
    display: inline-block;
    width: 3px;
    height: 15px;
    margin-right: 10px;
    vertical-align: -2px;
    background-color: #c9a24d;
    box-shadow: 0 0 8px rgba(226, 185, 92, .5);
}
.equip-page .equip-sub-count {
    position: absolute;
    right: 0;
    bottom: 11px;
    font-size: 11px;
    letter-spacing: 2px;
    /* 对比度：#8a7648 在页面底 #0c0805 上只有 4.53（刚过线），改亮一档留余量 → 6.07 */
    color: #9c8c6e;
}

/* ==========================================================================
   2. 装备网格：一行三个（1100 收成两个，860 收成一个 —— 与职业页同步）
   ========================================================================== */
.equip-page .equip-grid {
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 0;
    text-align: left;
}
.equip-page .equip-item {
    display: inline-block;
    vertical-align: top;
    width: 32%;
    margin: 0 2% 14px 0;
    padding: 13px 15px 14px;
    text-align: left;
    background-color: rgba(27, 16, 8, .72);
    background-image: -webkit-linear-gradient(top, rgba(46, 27, 12, .6) 0%, rgba(20, 12, 8, .72) 100%);
    background-image: linear-gradient(180deg, rgba(46, 27, 12, .6) 0%, rgba(20, 12, 8, .72) 100%);
    border: 1px solid rgba(122, 92, 41, .5);
    border-radius: 4px;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    font-size: 0;
    -webkit-transition: border-color .2s ease, -webkit-transform .2s ease, box-shadow .2s ease;
    transition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;
}
.equip-page .equip-item:nth-child(3n) { margin-right: 0; }
.equip-page .equip-item:hover {
    -webkit-transform: translateY(-3px);
    transform: translateY(-3px);
    border-color: rgba(217, 174, 74, .85);
    box-shadow: 0 12px 24px rgba(0, 0, 0, .5), 0 0 20px rgba(226, 185, 92, .18);
}

/* 图标格 + 文字：一行两列。
   ★ 为什么这里换成 flex 而不是两个 inline-block + vertical-align：
     图标格固定 46px，而文字块高随简介行数在 25~65px 之间变。用 inline-block 的话
     两个块都按顶边对齐，简介两行时文字就比格子矮一截、悬在卡片上半部；
     用 vertical-align 居中又会踩到"inline-block 的基线是它的下外边距边"这个坑
     （格子把基线顶到 46px 处，文字反而被推到格子下方）。
     换成 flex + align-items:center 后，居中由盒子几何决定，与两边各多高无关。 */
.equip-page .equip-row {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
}

/* 图标格：仿游戏背包格。46×46 足够放下最大的 37px 图标，还剩约 4px 一圈呼吸位。 */
.equip-page .equip-slot {
    position: relative;
    -webkit-flex-shrink: 0;
    flex-shrink: 0;
    width: 46px;
    height: 46px;
    margin-right: 12px;
    background-color: rgba(8, 5, 3, .9);
    background-image: -webkit-linear-gradient(top, rgba(60, 37, 16, .5) 0%, rgba(14, 9, 5, .9) 100%);
    background-image: linear-gradient(180deg, rgba(60, 37, 16, .5) 0%, rgba(14, 9, 5, .9) 100%);
    border: 1px solid rgba(122, 92, 41, .55);
    border-radius: 4px;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    box-shadow: inset 0 1px 0 rgba(255, 226, 158, .07);
}
/* ★ 图标按 PNG 原始像素 1:1 显示，**不设 width/height**（模板里写的是真实尺寸）。
   ★ 为什么用"四边 0 + margin auto"居中，而不是 line-height/vertical-align：
     图标原始尺寸不统一（25~37px），行内基线的居中高度跟 x-height 挂钩，
     37px 和 25px 的图标会各自偏一点；四边定位 + margin:auto 是按盒子几何居中，
     与图标多大无关，一次就准。
   ★ max-width/max-height 只是兜底：万一以后换进来一张比格子还大的图，
     它会缩到格子里而不是撑破卡片。 */
.equip-page .equip-slot img {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    max-width: 100%;
    max-height: 100%;
}

.equip-page .equip-txt {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    /* min-width:0 是 flex 的必备项：不加的话长单词/长串会把子项撑破容器，
       这里虽然都是中文，但保持这条能免掉以后换文案时的溢出 */
    min-width: 0;
    text-align: left;
}
.equip-page .equip-txt h5 {
    margin: 0 0 5px;
    font-size: 15px;
    font-weight: normal;
    letter-spacing: 2px;
    color: #f0d695;
    line-height: 1.3;
}
.equip-page .equip-txt p {
    margin: 0;
    font-size: 12px;
    line-height: 1.75;
    color: #9a8870;
}

/* ==========================================================================
   3. 响应式（断点与 css/job.css 保持一致，滚动时两页观感才统一）
   ========================================================================== */
@media (max-width: 1100px) {
    /* 一行两个 */
    .equip-page .equip-item { width: 49%; margin-right: 2%; }
    .equip-page .equip-item:nth-child(3n) { margin-right: 2%; }
    .equip-page .equip-item:nth-child(2n) { margin-right: 0; }
}
@media (max-width: 860px) {
    .equip-page .equip-cat { padding-top: 34px; }
    .equip-page .equip-sub { margin-top: 22px; }
    /* 一行一个 */
    .equip-page .equip-item { width: 100%; margin-right: 0; }
    .equip-page .equip-item:nth-child(3n),
    .equip-page .equip-item:nth-child(2n) { margin-right: 0; }
}
@media (max-width: 640px) {
    .equip-page .equip-item { padding: 11px 12px 12px; }
    .equip-page .equip-slot { width: 42px; height: 42px; margin-right: 10px; }
    .equip-page .equip-txt h5 { font-size: 14px; }
}

/* ==========================================================================
   4. 可点开提示 + 详情弹窗（js/equip.js 负责行为，本段只管外观）
   --------------------------------------------------------------------------
   ★ 为什么弹窗放在 <body> 末尾而不是卡片内部：
     卡片自己带 transform（:hover 的 translateY）——只要祖先有 transform，
     position:fixed 的子元素就会以那个祖先为包含块，遮罩会缩在卡片里而不是铺满屏幕。
     所以 js/equip.js 把遮罩 append 到 body 上，这里按 .equip-page > .equip-modal-mask 写。
   ========================================================================== */

/* 可点开：手型 + 键盘焦点可见。:focus 与 :hover 用同一套高亮，键盘用户才看得出在哪。 */
.equip-page .equip-item { cursor: pointer; }
.equip-page .equip-item:focus {
    outline: none;
    border-color: rgba(217, 174, 74, .85);
    box-shadow: 0 12px 24px rgba(0, 0, 0, .5), 0 0 20px rgba(226, 185, 92, .28);
}
/* 右上角一个「详情」角标：不加这个，用户不知道卡片是可以点的 */
.equip-page .equip-item::after {
    content: '详情';
    position: absolute;
    right: 0;
    top: 0;
    padding: 2px 7px 3px;
    font-size: 10px;
    letter-spacing: 1px;
    line-height: 1.4;
    color: rgba(201, 162, 77, .0);
    background-color: rgba(201, 162, 77, .0);
    border-radius: 0 4px 0 6px;
    -webkit-transition: color .2s ease, background-color .2s ease;
    transition: color .2s ease, background-color .2s ease;
}
.equip-page .equip-item:hover::after,
.equip-page .equip-item:focus::after {
    color: #2a1c07;
    background-color: #c9a24d;
}
/* ★ ::after 要定位，父级必须是定位元素 —— .equip-item 原本没有 position，
   加上 relative 不会影响既有的 inline-block 布局。 */
.equip-page .equip-item { position: relative; }

/* ---------- 遮罩 ---------- */
.equip-page .equip-modal-mask {
    position: fixed;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    z-index: 9000;
    background-color: rgba(4, 2, 1, .84);
    /* 关着的时候要能穿透点击 */
    opacity: 0;
    visibility: hidden;
    -webkit-transition: opacity .18s ease, visibility .18s ease;
    transition: opacity .18s ease, visibility .18s ease;
    text-align: left;
}
.equip-page .equip-modal-mask.is-open {
    opacity: 1;
    visibility: visible;
    /* ★ 居中用 flex 而不是 absolute+transform：内容高度会随属性条数变，
       translate(-50%,-50%) 在内容超过视口时会把它顶出屏幕，flex 的
       align-items:center 配 max-height + 内部滚动才是稳的。 */
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
}

/* ---------- 弹窗盒 ---------- */
.equip-page .equip-modal {
    position: relative;
    width: 92%;
    max-width: 580px;
    padding: 22px 24px 18px;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    background-color: #16100a;
    background-image: -webkit-linear-gradient(top, rgba(48, 29, 13, .95) 0%, rgba(19, 12, 7, .98) 46%, rgba(11, 7, 4, .99) 100%);
    background-image: linear-gradient(180deg, rgba(48, 29, 13, .95) 0%, rgba(19, 12, 7, .98) 46%, rgba(11, 7, 4, .99) 100%);
    border: 1px solid rgba(186, 145, 66, .72);
    border-radius: 6px;
    box-shadow: 0 24px 60px rgba(0, 0, 0, .78), inset 0 1px 0 rgba(255, 226, 158, .1);
    -webkit-transform: translateY(10px);
    transform: translateY(10px);
    -webkit-transition: -webkit-transform .2s ease;
    transition: transform .2s ease;
}
.equip-page .equip-modal-mask.is-open .equip-modal {
    -webkit-transform: translateY(0);
    transform: translateY(0);
}
/* 弹窗内的文字允许选中复制（全站 anti-copy.js 给 body 关了选中，
   这里用更高特异性把弹窗这一段重新打开 —— 数值就是要给人抄的） */
.equip-page .equip-modal,
.equip-page .equip-modal * {
    -webkit-user-select: text;
    -moz-user-select: text;
    -ms-user-select: text;
    user-select: text;
}

/* ---------- 头部：图标 + 名称 ---------- */
.equip-page .eqm-head {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    padding-bottom: 14px;
    border-bottom: 1px solid rgba(201, 162, 77, .2);
}
.equip-page .eqm-slot {
    position: relative;
    -webkit-flex-shrink: 0;
    flex-shrink: 0;
    width: 64px;
    height: 64px;
    margin-right: 14px;
    background-color: rgba(8, 5, 3, .92);
    background-image: -webkit-linear-gradient(top, rgba(66, 41, 18, .6) 0%, rgba(14, 9, 5, .92) 100%);
    background-image: linear-gradient(180deg, rgba(66, 41, 18, .6) 0%, rgba(14, 9, 5, .92) 100%);
    border: 1px solid rgba(140, 105, 46, .7);
    border-radius: 5px;
    box-shadow: inset 0 1px 0 rgba(255, 226, 158, .08);
}
.equip-page .eqm-slot img {
    position: absolute;
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    max-width: 76%;
    max-height: 76%;
    /* 64px 的框里把图标放大 2 倍显示：官方源图才 25~37px，
       1:1 摆进去会显得又小又糊，这里统一按 2 倍做最近邻放大。
       （image-rendering 在部分旧内核不认，不认就退化成平滑放大，可接受。） */
    image-rendering: -webkit-optimize-contrast;
    image-rendering: pixelated;
}
.equip-page .eqm-title {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    min-width: 0;
}
.equip-page .eqm-name {
    margin: 0 0 6px;
    font-size: 21px;
    font-weight: normal;
    letter-spacing: 3px;
    color: #f5dd9d;
    text-shadow: 0 1px 0 rgba(0, 0, 0, .8), 0 0 14px rgba(226, 185, 92, .28);
}
.equip-page .eqm-tags {
    margin: 0;
    font-size: 12px;
    letter-spacing: 2px;
    color: #a98f5f;
}
.equip-page .eqm-close {
    position: absolute;
    right: 10px;
    top: 10px;
    width: 30px;
    height: 30px;
    padding: 0;
    font-size: 20px;
    line-height: 26px;
    text-align: center;
    color: #c9a24d;
    background-color: rgba(201, 162, 77, .08);
    border: 1px solid rgba(201, 162, 77, .32);
    border-radius: 4px;
    cursor: pointer;
    -webkit-transition: color .18s ease, background-color .18s ease, border-color .18s ease;
    transition: color .18s ease, background-color .18s ease, border-color .18s ease;
}
.equip-page .eqm-close:hover {
    color: #2a1c07;
    background-color: #c9a24d;
    border-color: #e8bf62;
}

/* ---------- 需要等级 / 需要职业 ---------- */
.equip-page .eqm-meta {
    font-size: 0;
    padding: 14px 0 2px;
}
.equip-page .eqm-meta-cell {
    display: inline-block;
    min-width: 46%;
    margin: 0 8px 8px 0;
    padding: 8px 12px;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    background-color: rgba(12, 8, 4, .72);
    border: 1px solid rgba(122, 92, 41, .42);
    border-radius: 4px;
}
.equip-page .eqm-meta-label {
    display: block;
    margin-bottom: 3px;
    font-size: 11px;
    font-style: normal;
    letter-spacing: 2px;
    color: #8d7b5c;
}
.equip-page .eqm-meta-value {
    font-size: 14px;
    font-weight: normal;
    letter-spacing: 1px;
    color: #e7cf95;
}

/* ---------- 通用小节 ---------- */
.equip-page .eqm-sec { padding-top: 16px; }
.equip-page .eqm-sec-title {
    margin: 0 0 10px;
    font-size: 13px;
    font-weight: normal;
    letter-spacing: 3px;
    color: #c9a24d;
}
.equip-page .eqm-sec-title::before {
    content: '';
    display: inline-block;
    width: 3px;
    height: 12px;
    margin-right: 8px;
    vertical-align: -1px;
    background-color: #c9a24d;
    box-shadow: 0 0 7px rgba(226, 185, 92, .55);
}

/* 属性：一条一行，行间用虚线分隔 */
.equip-page .eqm-attr {
    margin: 0;
    padding: 10px 12px;
    list-style: none;
    background-color: rgba(9, 6, 3, .6);
    border: 1px solid rgba(122, 92, 41, .3);
    border-radius: 4px;
}
.equip-page .eqm-attr-item {
    padding: 5px 0;
    font-size: 13px;
    letter-spacing: 1px;
    color: #ddd0b4;
}
.equip-page .eqm-attr-item + .eqm-attr-item {
    border-top: 1px dashed rgba(122, 92, 41, .28);
}

/* 官方介绍（原「传说故事」位，现放官方 EquipDesc 原文） */
.equip-page .eqm-lore {
    margin: 0;
    padding: 12px 14px;
    font-size: 13px;
    line-height: 1.95;
    letter-spacing: .5px;
    color: #bfae90;
    background-color: rgba(9, 6, 3, .55);
    border-left: 2px solid rgba(201, 162, 77, .45);
    border-radius: 0 4px 4px 0;
}

/* ---------- 底部：上一件 / 下一件 ---------- */
.equip-page .eqm-foot {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    padding-top: 18px;
}
.equip-page .eqm-nav {
    -webkit-box-flex: 1;
    -ms-flex: 1 1 0%;
    flex: 1 1 0%;
    padding: 9px 0 10px;
    font-size: 13px;
    letter-spacing: 2px;
    color: #e3c98d;
    background-color: rgba(201, 162, 77, .1);
    border: 1px solid rgba(201, 162, 77, .38);
    border-radius: 4px;
    cursor: pointer;
    -webkit-transition: color .18s ease, background-color .18s ease, border-color .18s ease;
    transition: color .18s ease, background-color .18s ease, border-color .18s ease;
}
.equip-page .eqm-nav + .eqm-nav { margin-left: 10px; }
.equip-page .eqm-nav:hover:enabled {
    color: #2a1c07;
    background-color: #e8bf62;
    border-color: #ffe08d;
}
/* 到头了：压暗 + 禁用指针，别让人以为是坏的 */
.equip-page .eqm-nav:disabled {
    color: #6d6047;
    background-color: rgba(40, 28, 14, .5);
    border-color: rgba(122, 92, 41, .26);
    cursor: default;
}

.equip-page .eqm-note {
    margin: 14px 0 0;
    font-size: 11px;
    line-height: 1.7;
    text-align: center;
    color: #7e6f56;
}

/* 数据缺字段时把整块藏掉，不留空标题 */
.equip-page .eqm-hide { display: none; }

/* ---------- 弹窗响应式 ---------- */
@media (max-width: 640px) {
    .equip-page .equip-modal { width: 94%; padding: 18px 15px 15px; }
    .equip-page .eqm-slot { width: 54px; height: 54px; margin-right: 11px; }
    .equip-page .eqm-name { font-size: 18px; letter-spacing: 2px; }
    .equip-page .eqm-meta-cell { min-width: 100%; margin-right: 0; }
    .equip-page .eqm-lore { font-size: 12px; padding: 10px 11px; }
    .equip-page .eqm-nav { letter-spacing: 1px; }
}
@media (max-width: 400px) {
    .equip-page .eqm-name { font-size: 17px; }
}
