
/* 空壳节点必须藏掉。这里非加 !important 不可 —— 旧样式给
   .nex-home-hardware-edit 写了 display:inline-flex，会盖过 [hidden] 的默认 display:none。 */
.nex-home-hardware [hidden],
.nex-home-hardware-editor{display:none !important}

/* 板块对齐的是 RiPro 内容区的边，不是浏览器窗口的边。
   卡片自己判断不出内容区在哪，所以短代码外面包了一层 .nex-home-hardware-wrap：
   它按内容宽度居中，卡片占满整行。
   改内容宽度只需覆盖 --nex-content-w。

   0.9.0 之前这里卡片只占右半栏、左半栏留给玩家档案（justify-content:flex-end +
   width:calc(50% - 12px)）。玩家档案整个删掉后，左半栏会空着，所以改成占满。
   0.18.2 又把右半栏填上了 —— 这次放的是「玩家工具箱」，见下面那段。

   竖向外边距**保持原样 30/42**。
   曾经一刀切把所有插件模块的竖向外边距清零，结果连「分类盒子 → 我的游戏配置」
   这段没被要求改的间距也一起动了。这块还原。 */
.nex-home-hardware-wrap{
  --nex-content-w:1200px;
  box-sizing:border-box;
  width:100%;
  max-width:var(--nex-content-w);
  margin:30px auto 42px;
  display:flex;
}
.nex-home-hardware{width:100% !important;max-width:none !important;margin:0 !important}

/* =========================================================
 * 首页三卡布局：配置卡 ｜（工具箱 / 游戏极速优化 上下叠）（0.19.1）
 *
 * 这几块是**各自独立的小工具**，在 DOM 里是平级的兄弟节点，中间还夹着别的模块。
 * CSS 搬不动元素，所以走 grid 的自动落位。
 *
 * 版式：
 *
 *   第 1 列 471px        第 2 列 400px          第 3 列
 *   ┌────────────┐  ┌──────────────────┐
 *   │ 我的游戏配置 │  │ 玩家工具箱        │
 *   │            │  ├──────────────────┤
 *   │  （跨两行）  │  │ 游戏极速优化      │  ← 紧贴工具箱下面
 *   └────────────┘  └──────────────────┘
 *
 * ⚠️ **配置卡必须 `grid-row:span 2`**，这是 0.19.1 修的那个 bug 的核心。
 * 不跨行的话配置卡和工具箱同行 → 那一行的行高由配置卡（更高）决定 →
 * 工具箱下面空出一大截 → 「游戏极速优化」被推到那一行的最下面。
 * 用户把「间距」调到 0 也没用，因为**那截空白是行高，不是外边距**。
 *
 * 为什么敢把 main 变成 grid：这一层的小工具容器 margin 全是 0，
 * 纵向间距都来自模块内部。grid 项是 BFC，内部 margin 不再外溢，
 * 实测上下相邻模块的位置最多差 22px（配置卡自己那个 22px 的下边距从「合并」变成「相加」）。
 *
 * 只认 `:has()` 不认 ID —— 小工具的 id（nex_toolbox-2 / custom_html-5）会随增删变化，
 * 而「哪个容器里有配置卡 / 工具箱」永远是对的。
 *
 * ⚠️ **main 必须自己收窄到内容宽度（1200）**。
 * main 是**整窗宽**的（max-width:none），各模块靠自己的 max-width:1200 居中。
 * 不收窄的话网格两列就是「半个窗口」—— 配置卡在自己的列里照样铺满，
 * 宽度一点没变小，只是被推到了左边。这个坑我踩过一次：
 * 本地验证时手动把 main 设成了 1200 才量的，正好把问题盖住了。
 * ========================================================= */
@media (min-width:1000px){
  body.home main{
    display:grid;
    /* 三列：配置卡 471（**这个宽度已经定下来了，不要再动**）、
       工具箱 400（≈ 1/3，正好是一部手机的宽度，所以里面的文件夹可以照 iOS 的真实尺寸做）、
       第三列留给以后要加的板块 —— 现在空着，用户说最右边还要放东西。

       前两列写死 px 而不是 fr：容器本来就封顶 1200，写死才能保证「配置卡宽度不变」。
       以后加第三块：给它一条 `grid-column:span 1` 的规则，dense 会自动把它塞进那个空位。 */
    grid-template-columns:471px 400px 1fr;
    column-gap:22px;
    row-gap:0;
    grid-auto-flow:row dense;
    align-items:start;
    /* 和模块自己的 max-width 对齐，两列加起来才是 1200 */
    max-width:1200px;
    margin-left:auto;
    margin-right:auto;
  }
  body.home main > .home-widget{grid-column:1 / -1;min-width:0}

  /* ---------- 左：我的游戏配置，占第 1 列，**横跨两行** ----------

     `grid-row:span 2` 是这一段的全部关键，不能省。

     不跨的时候：配置卡和工具箱**同一行**，那一行的行高由两者里更高的那个决定，
     也就是由配置卡决定。工具箱只有配置卡一半高，于是它下面空出一大截；
     「游戏极速优化」落在第 2 行，而第 2 行的起点在第 1 行的**最下面** ——
     它的位置就是这么被推下去的。

     ⚠️ **这一截空白不是外边距，是行高。** 所以小工具里「与上面板块的间距」
     填 0 甚至填负数都没用：那个值改的是卡片自己的外边距，动不了行高。
     （踩过：用户把间距调到 0，卡片纹丝不动。）

     跨两行之后，第 1、2 行的行高改由**右边那两张卡自己**决定 ——
     工具箱一行、极速优化一行，两张卡就真正贴在一起了，间距那个值也终于说了算。

     列写死 `1`（而不是 `span 1`）：万一有人把小工具顺序调乱，
     配置卡也只会留在第 1 列，不会被 dense 甩到第三列去。 */
  body.home main > .home-widget:has(.nex-home-hardware-wrap){grid-column:1;grid-row:span 2}
  /* 两张卡顶边要对齐：配置卡上边距 30px、工具箱 16px，并排会差 14px。统一到 16px。 */
  body.home main > .home-widget:has(.nex-home-hardware-wrap) .nex-home-hardware-wrap{margin-top:16px}

  /* ---------- 右：玩家工具箱 + 游戏极速优化，同在第 2 列，上下两行 ----------

     两张都必须**写死 `grid-column:2`**。不写的话 `grid-auto-flow:dense`
     会把还没定位的单项塞进**第一个空位** —— 第三列是空的，
     它们会一个跑第三列、一个跟过去，看着就是「并排而且到处乱跳」。

     行号仍然不写（auto），交给自动落位：
       工具箱 → 第 2 列第一个空行
       极速优化 → 第 2 列再往下第一个空行（也就是工具箱下面那行）

     ⚠️ **顺序**：小工具里「我的游戏配置」必须排在「玩家工具箱」和
     「游戏极速优化」**前面**，工具箱又在极速优化前面。这不是随便说的 ——
     自动落位是**按顺序**扫下来的，顺序反了它们就不在同一列的两行上了。
     现在的顺序是对的（自定义HTML → 玩家工具箱 → 游戏极速优化），别去动。 */
  body.home main > .home-widget:has(.nex-toolbox){grid-column:2}
  body.home main > .home-widget:has(.nex-optimize){grid-column:2}

  /* ---------- 右列两张卡：加起来＝配置卡的高度，且**对半分**（0.19.3） ----------

     用户要的是「工具箱 + 极速优化 = 左边配置卡的高度」，不是「两张各自定一个高度」。
     0.19.2 我理解错成后者，把两张都定成 320 —— 右边加起来 656，比配置卡（约 425）高一截。

     靠两件事配合做到：

       1. **配置卡 `grid-row:span 2`**（0.19.1 就有了）——
          它跨的那两行的**总和**天然就等于配置卡的高度。多出来的高度浏览器会**平摊**给这两行。

       2. **两张卡的 min-height 必须一模一样。**
          行高是按内容贡献算的：贡献不一样，两行就不等高，平摊之后还是不等。
          给两张同一个 min-height，把各自的贡献拉到同一个基准上 ——
          基准一样 + 平摊一样 ⇒ 两行永远等高 ⇒ 对半分成立。

     ⚠️ **基准必须 ≥ 两张卡各自的内容高度**，否则它压根不起作用 ——
     两行的基准会退回各自的内容高，两个数不一样，等分从根上就不成立。
     0.19.3 我把基准写成 190，而两张卡的内容分别是 210.6 和 205，
     **两个都超过 190**，等于没写 —— 所以那版两张卡一直是差 5.6px 的。

     现在的 216 是从**本文件里的 CSS 数值算出来的**（字体、行高、内边距、文件夹尺寸），
     不是拍的。改了那些数值要跟着调 —— `optimizetest.mjs` 会替你算一遍并盯着。

     ⚠️ **用 min-height 不用 height。** 高度定死的话，搜出结果时卡片长不高，
     结果就被永久关在卡片里滚动。min-height 只约束「平时一样高」，
     出结果时卡片可以自己长开 —— 那是用户正在看的内容，不该塞进滚动条。
     （结果是**临时状态**：搜完卡片会长高，这时候两张不等高是应该的。） */
  body.home main > .home-widget:has(.nex-toolbox),
  body.home main > .home-widget:has(.nex-optimize){
    align-self:stretch;         /* 撑满自己那一行（main 上是 align-items:start，得单独放开） */
    display:flex;
    flex-direction:column;
    min-width:0;
  }
  body.home main > .home-widget:has(.nex-toolbox) .nex-toolbox,
  body.home main > .home-widget:has(.nex-optimize) .nex-optimize{
    /* flex-grow 让卡片跟着容器撑满自己那一行；
       flex-shrink 给 0 —— 卡片的高度是它的内容说了算，不许被压扁 */
    flex:1 0 auto;
    min-height:var(--nex-pair-h,196px);
  }

  /* ---------- 内部收紧：卡片要挤进配置卡高度的一半（0.19.5） ----------

     用户的实测：配置卡约 397，两张卡 215 + 10 + 215 = 440 —— **高出 43px**。
     两张卡已经等高了，但「等高」不等于「装得下」：卡片的内容本来就有那么高，
     塞不进配置卡那 397 里。所以只能把内容收紧一档。

     下面这几处**两张卡同步收**，所以「一样大小」没破：

       内边距 22 → 16   （省 12）
       文件夹缝隙 4 → 3 （省 2）     文件夹两行字行高 1.4 → 1.25（省 3）
       极速优化：结果区上距 14 → 10（省 4）、提示行高 1.75 → 1.6（省 4）

     收完：工具箱内容 193.5、极速优化 185.2 —— 基准值 196 就盖得住两者了。
     加起来 196+10+196 = 402，和配置卡 397 差 5px（约 1%，看不出来）。

     ⚠️ **标题块下距（14px）没有动。** 那是全站首页板块的统一规范
     （.nex-sec / .nex-topic / .nex-toolbox / .nex-optimize 四处必须一样），
     动它会让这一列和旁边几个板块的标题间距对不上 —— 而且不动它也装得下
     （刚才就差 6px，改内边距就够了）。回归测试盯死了这四个数值。

     ⚠️ **只收首页这一处**（配对上下文）。组件本身（短代码单独用时）一个字没动 ——
     后台小工具以外的页面不受影响。 */
  body.home main > .home-widget:has(.nex-toolbox) .nex-toolbox{padding:16px}
  body.home main > .home-widget:has(.nex-optimize) .nex-optimize{padding:16px}
  body.home main > .home-widget:has(.nex-toolbox) .nex-toolbox-folders{gap:12px 10px}
  body.home main > .home-widget:has(.nex-toolbox) .nex-tool-folder{gap:3px}
  body.home main > .home-widget:has(.nex-toolbox) .nex-tool-folder-name{line-height:1.25}
  body.home main > .home-widget:has(.nex-toolbox) .nex-tool-folder-count{line-height:1.25}
  body.home main > .home-widget:has(.nex-optimize) .nex-optimize-hint{line-height:1.6}
  /* 两张卡之间的间距只由「极速优化」那个「与上面板块的间距」说了算。
     工具箱自己的下边距在这里清零 —— 不然两个边距相加，
     用户把极速优化填 0 还是会看到 16px 的缝（0.19.2 就是这样）。 */
  body.home main > .home-widget:has(.nex-toolbox) .nex-toolbox{margin-bottom:0}

  /* ---------- 被拉高之后，内容别全堆在顶上（0.19.4） ----------

     卡片被拉到和配置卡一样高，可内容就那么多 —— 剩下来的空间要是全留在底部，
     看着像「还没加载完」。所以把富余的空间**分给内容**，而不是留在底下：

       工具箱：文件夹那一排吃掉剩余空间，整排在**中间**（align-content:center）
       极速优化：结果区吃掉剩余空间；还没查的时候（只有那句提示）提示居中，
                 出结果了就顶上去对齐 —— 结果是要顺着读的，居中没有意义 */

  body.home main > .home-widget:has(.nex-toolbox) .nex-toolbox{
    display:flex;
    flex-direction:column;
  }
  body.home main > .home-widget:has(.nex-toolbox) .nex-toolbox-folders{
    flex:1 1 auto;
    align-content:center;   /* 换行之后的整排在竖直方向居中 */
  }

  body.home main > .home-widget:has(.nex-optimize) .nex-optimize{
    display:flex;
    flex-direction:column;
  }
  body.home main > .home-widget:has(.nex-optimize) .nex-optimize-result{
    flex:1 1 auto;
    min-height:0;           /* flex 项默认 min-height:auto，会被内容顶开 */
    display:flex;
    flex-direction:column;
    margin-top:10px;        /* 原 14，收紧一档（见上） */
  }
  /* 只有那句提示的时候居中（提示是唯一子元素，用 :has 认） */
  body.home main > .home-widget:has(.nex-optimize) .nex-optimize-result:has(.nex-optimize-hint){
    justify-content:center;
  }
}

/* 工具箱也做成卡片（0.18.4）。
   原来它没有底板，直接浮在页面底色上 —— 和左边的配置卡并排之后，一眼就看出不是一套。

   取值直接抄「配置卡实际生效的那套」，而且**只认 --nx-* 令牌**：
   配置卡源码里写着 color-mix(...) 那一条，但它在层叠里输给了别处的规则，
   真正生效的是 --nx-border / --nx-bg。照源码抄颜色反而对不上 ——
   实测配置卡边框是 #dfe5ed，正好等于 --nx-border，而 color-mix 算出来是另一回事。
   用令牌还有个好处：切换明暗主题时两张卡一起走，不会一张变了一张没变。 */
.nex-toolbox{
  padding:22px;
  border:1px solid var(--nx-border,#e3e9f2);
  border-radius:18px;
  background:var(--nx-bg,#fff);
}

/* 「游戏极速优化」用**和工具箱一字不差**的一套外框（0.19.0）。
   两块卡上下叠在第 2 列，用户要的就是「一样大小」—— 所以内边距、圆角、
   边框、底色全部照抄，一个字都不改。改这里请连上面 .nex-toolbox 一起改。 */
.nex-optimize{
  padding:22px;
  border:1px solid var(--nx-border,#e3e9f2);
  border-radius:18px;
  background:var(--nx-bg,#fff);
}

/* 整体收紧。这只是首页的一个附属组件，不该占掉半屏的视觉重量，
   所以标题、说明、内边距、行高全部下调一档。 */
.nex-home-hardware{padding:20px 22px 16px !important}
.nex-home-hardware-head{margin-bottom:12px !important}
.nex-home-hardware-title{font-size:19px !important;line-height:1.3 !important}
.nex-home-hardware-desc{margin-top:5px !important;max-width:none !important;font-size:12.5px !important;line-height:1.65 !important}

/* 竖排，每张卡占满整行，下拉框拿满宽度。

   当初竖排是因为卡片只占内容区右半边（1200 的右半 ≈ 588px），里面再横排两张
   每张只剩 250px，扣掉图标和间距后下拉框不到 200px ——
   「NVIDIA GeForce RTX 5070 Ti」直接被截成「NVIDIA GeForce R」。

   0.9.0 玩家档案删掉后卡片已经是整行 1200px，横排其实放得下了，
   但这里**没动** —— 竖排本身没问题，只是不再有非竖排不可的理由。
   哪天觉得两行太占地方，可以改回横排。 */
.nex-home-hardware-summary{
  display:grid !important;
  grid-template-columns:minmax(0,1fr) !important;
  gap:9px !important;
  margin-top:0 !important;
}
/* 每张卡：左边图标一列，右边标签在上、下拉框在下。 */
.nex-home-hardware-summary-item{
  display:grid !important;
  grid-template-columns:32px minmax(0,1fr) !important;
  column-gap:11px !important;
  row-gap:3px !important;
  align-items:center !important;
  padding:10px 13px !important;
  border-radius:11px !important;
  border:1px solid var(--nx-border,#e3e9f2) !important;
  background:var(--nx-soft,#f6f9ff) !important;
}

/* 图标：从绝对定位改回普通网格项，纵向跨两行居中。
   只覆盖位置和底色，background-image（那两个 SVG）留给原规则，不动。 */
.nex-home-hardware-summary-item::before{
  position:static !important;
  grid-column:1 !important;
  grid-row:1 / span 2 !important;
  align-self:center !important;
  justify-self:center !important;
  margin:0 !important;
  width:32px !important;
  height:32px !important;
  border-radius:9px !important;
  border:1px solid rgba(79,124,255,.12) !important;
  background-color:var(--nx-tint,#edf4ff) !important;
  background-position:center !important;
  background-repeat:no-repeat !important;
  background-size:18px 18px !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35) !important;
}

.nex-home-hardware-summary-label{
  grid-column:2 !important;
  grid-row:1 !important;
  align-self:end !important;
  margin:0 !important;
  padding:0 !important;
  font-size:11.5px !important;
  font-weight:600 !important;
  letter-spacing:.03em !important;
  color:var(--nx-muted,#7a8699) !important;
}
.nex-home-hardware-summary-item select{
  grid-column:2 !important;
  grid-row:2 !important;
  width:100% !important;
  min-height:38px !important;
  padding:0 34px 0 12px !important;
  border-radius:8px !important;
  border:1px solid var(--nx-border,#dbe3ee) !important;
  background-color:var(--nx-bg,#fff) !important;
  color:var(--nx-text,#172033) !important;
  font-size:13.5px !important;
  font-weight:600 !important;
  line-height:1.4 !important;
  text-overflow:ellipsis !important;
  cursor:pointer !important;
  transition:border-color .15s,box-shadow .15s !important;
}
/* 自绘下拉箭头。主题的全局规则会写 background 简写（带 !important），
   把 background-image 一并清掉，所以这里用更高的选择器权重压回去，
   并且只写 background-image 这个长属性，不动颜色。 */
html body .nex-home-hardware .nex-home-hardware-summary-item select{
  -webkit-appearance:none !important;
  appearance:none !important;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 9 7 7 7-7'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:right 11px center !important;
  background-size:14px 14px !important;
}
.nex-home-hardware-summary-item select:hover{border-color:rgba(79,124,255,.5) !important}
.nex-home-hardware-summary-item select:focus{
  outline:none !important;
  border-color:#4f7cff !important;
  box-shadow:0 0 0 3px rgba(79,124,255,.16) !important;
}

/* 自定义分辨率的两个输入框，选到「自定义」才由 fillEditor() 显示 */
.nex-home-hardware-custom{
  display:none;
  align-items:center;
  gap:8px;
  margin-top:9px;
}
.nex-home-hardware-custom.is-visible{display:flex}
.nex-home-hardware-custom input{
  width:104px;
  min-height:36px;
  padding:0 10px;
  border-radius:8px;
  border:1px solid var(--nx-border,#dbe3ee);
  background:var(--nx-bg,#fff);
  color:var(--nx-text,#172033);
  font-size:13.5px;
}

/* 保存反馈 */
.nex-home-hardware-status{margin-top:9px;font-size:12.5px;line-height:1.6}
.nex-home-hardware-status:empty{display:none}
.nex-home-hardware-status.is-success{color:var(--nx-success,#16704b)}
.nex-home-hardware-status.is-error{color:var(--nx-danger,#b04438)}

/* 「登录后可同步到账户」那行占满整行 */
.nex-home-hardware-sync-status{
  grid-column:1/-1;
  margin-top:6px;
  font-size:11.5px;
  color:var(--nx-muted,#8b95a6);
}

/* =========================================================
   下半段：我的配置满足这款游戏的要求吗
   两段同属一张卡，靠「带标签的分隔条 + 独立玻璃内胆」分层，
   而不是把上半段压小、再硬塞一块新的进来。
   ========================================================= */

/* 分隔条：一条细线 + 居中标签，把上下两段视觉上切开 */
.nex-run-divider{
  display:flex;align-items:center;gap:12px;
  margin:20px 0 16px;
  color:var(--pc-muted);
  font-size:11.5px;letter-spacing:.06em;
}
.nex-run-divider::before,.nex-run-divider::after{
  content:"";flex:1 1 auto;height:1px;
  background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--pc-text) 16%,transparent),transparent);
}
.nex-run-divider span{
  flex:none;padding:3px 10px;border-radius:999px;
  border:1px solid color-mix(in srgb,var(--pc-text) 12%,transparent);
  background:color-mix(in srgb,var(--pc-text) 5%,transparent);
  white-space:nowrap;
}

/* 内胆：比卡片本体再深/浅一档，读起来是「卡里的一块区域」 */
.nex-run-check{
  box-sizing:border-box;min-width:0;
  padding:16px;
  border:1px solid color-mix(in srgb,var(--pc-text) 10%,transparent);
  border-radius:14px;
  background:color-mix(in srgb,var(--pc-bg2) 62%,transparent);
}
.nex-run-check-head{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}
.nex-run-check-title{
  margin:0;font-size:15px;line-height:1.4;font-weight:700;
  color:var(--pc-text);
}
.nex-run-check-desc{
  margin:0;font-size:12px;line-height:1.6;
  color:var(--pc-muted);
}

/* 输入行 */
.nex-run-check-form{display:flex;gap:8px;align-items:stretch}
.nex-run-check-input{
  flex:1 1 auto;min-width:0;
  box-sizing:border-box;height:42px;padding:0 13px;
  border:1px solid color-mix(in srgb,var(--pc-text) 14%,transparent);
  border-radius:10px;
  background:color-mix(in srgb,var(--pc-bg) 55%,transparent);
  color:var(--pc-text);
  font-size:13.5px;line-height:42px;
  appearance:none;-webkit-appearance:none;
  transition:border-color .16s ease,box-shadow .16s ease;
}
.nex-run-check-input::placeholder{color:color-mix(in srgb,var(--pc-muted) 80%,transparent)}
.nex-run-check-input:focus{
  outline:none;
  border-color:color-mix(in srgb,var(--pc-accent) 62%,transparent);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--pc-accent) 18%,transparent);
}
.nex-run-check-submit{
  flex:none;height:42px;padding:0 20px;
  border:1px solid color-mix(in srgb,var(--pc-accent) 72%,transparent);
  border-radius:10px;
  background:linear-gradient(180deg,color-mix(in srgb,var(--pc-accent) 92%,transparent),color-mix(in srgb,var(--pc-accent) 78%,transparent));
  color:#fff;font-size:13.5px;font-weight:600;line-height:40px;
  white-space:nowrap;cursor:pointer;
  transition:filter .16s ease,transform .16s ease;
}
.nex-run-check-submit:hover{filter:brightness(1.08)}
.nex-run-check-submit:active{transform:translateY(1px)}
.nex-run-check-submit[disabled]{opacity:.6;cursor:default;filter:none;transform:none}

/* 结果面板 */
.nex-run-check-result{margin-top:14px}
.nex-run-check-result[hidden]{display:none}

.nex-run-card{
  box-sizing:border-box;
  border:1px solid color-mix(in srgb,var(--pc-text) 10%,transparent);
  border-radius:12px;
  background:color-mix(in srgb,var(--pc-bg) 45%,transparent);
  overflow:hidden;
}
/* 左侧色条标明结论，比换整块底色更克制，暗色下也不刺眼 */
.nex-run-card{border-left-width:3px}
.nex-run-card.is-great{border-left-color:color-mix(in srgb,#22c55e 80%,var(--pc-text))}
.nex-run-card.is-good{border-left-color:color-mix(in srgb,#4ade80 78%,var(--pc-text))}
.nex-run-card.is-ok{border-left-color:color-mix(in srgb,#f5c455 82%,var(--pc-text))}
.nex-run-card.is-tight{border-left-color:color-mix(in srgb,#fb923c 82%,var(--pc-text))}
.nex-run-card.is-no{border-left-color:color-mix(in srgb,#ef4444 80%,var(--pc-text))}
.nex-run-card.is-unknown{border-left-color:color-mix(in srgb,var(--pc-muted) 70%,transparent)}

.nex-run-verdict{padding:13px 15px 12px;display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 10px}
.nex-run-badge{
  flex:none;display:inline-block;
  padding:3px 10px;border-radius:999px;
  font-size:12.5px;font-weight:700;line-height:1.7;
}
.nex-run-card.is-great .nex-run-badge,
.nex-run-card.is-good .nex-run-badge{background:color-mix(in srgb,#22c55e 20%,transparent);color:color-mix(in srgb,#16a34a 62%,var(--pc-text))}
.nex-run-card.is-ok .nex-run-badge{background:color-mix(in srgb,#f5c455 22%,transparent);color:color-mix(in srgb,#b8860b 62%,var(--pc-text))}
.nex-run-card.is-tight .nex-run-badge{background:color-mix(in srgb,#fb923c 22%,transparent);color:color-mix(in srgb,#c2410c 62%,var(--pc-text))}
.nex-run-card.is-no .nex-run-badge{background:color-mix(in srgb,#ef4444 20%,transparent);color:color-mix(in srgb,#b91c1c 60%,var(--pc-text))}
.nex-run-card.is-unknown .nex-run-badge{background:color-mix(in srgb,var(--pc-text) 9%,transparent);color:var(--pc-muted)}

.nex-run-game{
  font-size:14px;font-weight:700;line-height:1.5;
  color:var(--pc-text);text-decoration:none;
}
a.nex-run-game:hover{color:var(--pc-accent);text-decoration:underline}
.nex-run-meta{
  flex:1 1 100%;font-size:11.5px;line-height:1.6;color:var(--pc-muted);
}

.nex-run-block{
  padding:12px 15px 14px;
  border-top:1px solid color-mix(in srgb,var(--pc-text) 8%,transparent);
}
.nex-run-block-title{
  display:flex;align-items:baseline;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin:0 0 9px;font-size:12px;font-weight:600;letter-spacing:.02em;
  color:var(--pc-muted);
}
/* 「查看完整优化方案 →」跳到游戏详情页的优化板块（#nex-optimization） */
.nex-run-more{
  flex:none;font-size:11.5px;font-weight:600;
  color:var(--pc-accent);text-decoration:none;white-space:nowrap;
}
.nex-run-more:hover{text-decoration:underline}
.nex-run-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:7px}
.nex-run-list li{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 9px;
  font-size:12.5px;line-height:1.6;color:var(--pc-text);
}
.nex-run-name{font-weight:600;color:var(--pc-text)}
/* 实测的「哪一项、从哪档到哪档」单独占一行，不跟显卡/分辨率挤在一起，
   避免被读成「整体画质档位」。 */
.nex-run-sub{flex:1 1 100%;color:var(--pc-muted);font-size:12px;line-height:1.55}
.nex-run-tag{
  display:inline-block;padding:1px 7px;border-radius:6px;
  font-size:11px;line-height:1.7;
  background:color-mix(in srgb,var(--pc-text) 8%,transparent);
  color:var(--pc-muted);
}
.nex-run-tag.is-hot{background:color-mix(in srgb,#fb923c 20%,transparent);color:color-mix(in srgb,#c2410c 62%,var(--pc-text))}
.nex-run-fps{
  margin-left:auto;font-weight:700;
  color:color-mix(in srgb,#22c55e 66%,var(--pc-text));
}

/* 认不出型号时的并排对照 */
.nex-run-compare{display:flex;flex-direction:column;gap:8px;margin:0;padding:12px 15px 14px;
  border-top:1px solid color-mix(in srgb,var(--pc-text) 8%,transparent)}
.nex-run-compare div{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12.5px;line-height:1.6}
.nex-run-compare span{flex:none;min-width:76px;color:var(--pc-muted)}
.nex-run-compare strong{font-weight:600;color:var(--pc-text);word-break:break-word}

.nex-run-note{
  margin:0;padding:10px 15px 12px;
  border-top:1px solid color-mix(in srgb,var(--pc-text) 8%,transparent);
  font-size:11.5px;line-height:1.65;color:var(--pc-muted);
}
.nex-run-alt{margin:0;padding:10px 15px 12px;font-size:11.5px;line-height:1.7;
  border-top:1px solid color-mix(in srgb,var(--pc-text) 8%,transparent);color:var(--pc-muted)}
.nex-run-alt a{color:var(--pc-accent);text-decoration:none}
.nex-run-alt a:hover{text-decoration:underline}

/* 加载中：骨架 + 文案，避免只有一行字导致高度跳动 */
.nex-run-loading{
  padding:14px 15px;display:flex;align-items:center;gap:10px;
  font-size:12.5px;color:var(--pc-muted);
}
.nex-run-spinner{
  flex:none;width:14px;height:14px;border-radius:50%;
  border:2px solid color-mix(in srgb,var(--pc-text) 16%,transparent);
  border-top-color:var(--pc-accent);
  animation:nex-run-spin .7s linear infinite;
}
@keyframes nex-run-spin{to{transform:rotate(360deg)}}
.nex-run-error{
  padding:13px 15px;font-size:12.5px;line-height:1.6;
  color:color-mix(in srgb,#ef4444 60%,var(--pc-text));
}

@media (prefers-reduced-motion:reduce){
  .nex-run-spinner{animation:none}
  .nex-run-check-input,.nex-run-check-submit{transition:none}
}

/* 窄屏：按钮换行到输入框下面，不要挤成一条 */
@media (max-width:520px){
  .nex-run-check{padding:14px}
  .nex-run-check-form{flex-direction:column}
  .nex-run-check-submit{width:100%;padding:0}
  .nex-run-verdict{padding:12px 13px 11px}
  .nex-run-block,.nex-run-compare,.nex-run-note,.nex-run-alt{padding-left:13px;padding-right:13px}
}

/* 窄屏：卡片恢复整宽，只需再收一点内边距 */
@media (max-width:640px){
  .nex-home-hardware{padding:16px 15px 14px !important}
  .nex-home-hardware-summary-item{padding:10px 12px !important}
  .nex-home-hardware-summary-item select{min-height:40px !important}
}
/* 卡片外观：玻璃内胆 + 蓝金渐变描边（0.9.0 前是和玩家信息档案对的一套皮，
   玩家档案删了，这套皮留着 —— 这本来就是这张卡片自己的样式） */
.nex-home-hardware{
  --pc-bg:var(--nx-bg,#0e1524);--pc-bg2:var(--nx-soft,#14243c);--pc-line:var(--nx-border,#24406a);--pc-text:var(--nx-text,#e8f0fb);--pc-muted:var(--nx-muted,#8fa8c9);--pc-accent:#2f7bff;--pc-gold:#f5c455;
  box-sizing:border-box;position:relative;overflow:hidden;width:100%;min-width:0;
  padding:22px !important;
  border:1px solid color-mix(in srgb,var(--pc-text) 14%,transparent) !important;
  border-radius:18px !important;
  background:linear-gradient(150deg,var(--pc-bg) 0%,var(--pc-bg2) 100%) !important;
  background:linear-gradient(150deg,color-mix(in srgb,var(--pc-bg) 60%,transparent) 0%,color-mix(in srgb,var(--pc-bg2) 60%,transparent) 100%) !important;
  color:var(--pc-text) !important;
  box-shadow:0 10px 34px rgba(10,20,40,.28) !important;
  backdrop-filter:blur(24px) saturate(180%) !important;
  -webkit-backdrop-filter:blur(24px) saturate(180%) !important;
}
.nex-home-hardware::before{
  top:0 !important;left:0 !important;right:0 !important;bottom:0 !important;
  width:auto !important;height:auto !important;border-radius:0 !important;
  background:radial-gradient(120% 90% at 100% 0%,rgba(47,123,255,.22),transparent 55%),radial-gradient(120% 90% at 0% 100%,rgba(245,196,85,.12),transparent 50%) !important;
  pointer-events:none;
}
.nex-home-hardware::after{
  top:0 !important;left:0 !important;right:0 !important;bottom:auto !important;
  width:auto !important;height:2px !important;border-radius:0 !important;
  background:linear-gradient(90deg,var(--pc-accent),var(--pc-gold)) !important;
  opacity:.9;
}
.nex-home-hardware-head,.nex-home-hardware-summary{position:relative !important;z-index:1 !important}
.nex-home-hardware-title{font-size:20px !important;font-weight:800 !important;letter-spacing:-.02em !important;line-height:1.3 !important;color:var(--pc-text) !important}
.nex-home-hardware-desc{color:var(--pc-muted) !important;font-size:13px !important;line-height:1.7 !important}
.nex-home-hardware-sync-status{grid-column:auto !important;margin:5px 0 0 !important;font-size:11px !important;color:var(--pc-muted) !important}
.nex-home-hardware-summary-item{background:rgba(8,16,32,.35) !important;border:1px solid var(--pc-line) !important;border-radius:14px !important;padding:16px !important}
.nex-home-hardware-summary-label{color:var(--pc-muted) !important;font-size:11px !important;font-weight:700 !important;letter-spacing:.5px !important}
.nex-home-hardware-summary-item select{background:var(--pc-bg) !important;color:var(--pc-text) !important;border:1px solid var(--pc-line) !important;border-radius:8px !important;font-weight:600 !important}

/* =========================================================
   0.7.0 覆盖层：把配置选择器压扁，高度让给下面的查询
   必须放在这里 —— 上面那几层 .nex-home-hardware-summary-* 规则都带 !important，
   写在它们前面会被压掉。
   ========================================================= */

/* 每个选择器从「大图标 + 标签一行 + 下拉一行」压成「小图标 + 标签 + 下拉」同一行 */
.nex-home-hardware-summary{gap:7px !important}
.nex-home-hardware-summary-item{
  grid-template-columns:16px auto minmax(0,1fr) !important;
  column-gap:9px !important;
  row-gap:0 !important;
  padding:7px 11px !important;
  border-radius:10px !important;
}
/* 保留图标但缩到 16px 且去掉底板，纯粹当行首提示，不再占一列大格子 */
.nex-home-hardware-summary-item::before{
  grid-column:1 !important;
  grid-row:1 !important;
  width:16px !important;
  height:16px !important;
  border:0 !important;
  border-radius:0 !important;
  background-color:transparent !important;
  background-size:16px 16px !important;
  box-shadow:none !important;
  opacity:.7;
}
.nex-home-hardware-summary-label{
  grid-column:2 !important;
  grid-row:1 !important;
  align-self:center !important;
  white-space:nowrap !important;
  font-size:12px !important;
  font-weight:600 !important;
  letter-spacing:0 !important;
  color:var(--pc-muted) !important;
}
.nex-home-hardware-summary-item select{
  grid-column:3 !important;
  grid-row:1 !important;
  min-height:34px !important;
  height:34px !important;
  padding:0 30px 0 10px !important;
  font-size:13px !important;
}

/* 下半段收紧：标题已经说明用途，删掉重复的说明行，把省下的高度还给输入框 */
.nex-run-divider{margin:14px 0 11px !important;font-size:11px !important}
.nex-run-divider span{padding:2px 9px !important}
.nex-run-check{padding:12px !important;border-radius:12px !important}
.nex-run-check-head{margin-bottom:0 !important;gap:0 !important}
.nex-run-check-desc{display:none !important}
.nex-run-check-title{font-size:13.5px !important;margin-bottom:9px !important}

/* =========================================================
   结果浮层
   结果不占卡片高度 —— 它是 fixed 定位的浮层，挂在 body 上。
   挂在卡片里不行：卡片有 overflow:hidden 和 backdrop-filter，
   两者都会把 fixed 子元素裁掉。
   明暗不依赖站点 token（浮层在卡片外，拿不到 --pc-*），
   由脚本读 data-bs-theme 加 is-dark / is-light 类，自己带一套值。
   ========================================================= */
.nex-run-pop{
  position:fixed;
  z-index:99990;
  box-sizing:border-box;
  width:360px;
  max-width:calc(100vw - 20px);
  max-height:min(72vh,480px);
  overflow-y:auto;
  overscroll-behavior:contain;
  padding:10px;
  border-radius:14px;
  border:1px solid var(--prp-line);
  background:var(--prp-bg);
  box-shadow:0 18px 48px rgba(4,10,22,.42),0 2px 8px rgba(4,10,22,.24);
  animation:nex-run-pop-in .16s ease-out;
}
@keyframes nex-run-pop-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.nex-run-pop{animation:none}}

/* 浮层内部把 --pc-* 补齐，这样结果面板那一整套 .nex-run-* 规则原样复用 */
.nex-run-pop.is-dark{
  --prp-bg:#101a2c;--prp-line:#26436f;
  --pc-bg:#0e1524;--pc-bg2:#14243c;--pc-line:#24406a;
  --pc-text:#e8f0fb;--pc-muted:#8fa8c9;--pc-accent:#2f7bff;--pc-gold:#f5c455;
}
.nex-run-pop.is-light{
  --prp-bg:#ffffff;--prp-line:#dde5f0;
  --pc-bg:#ffffff;--pc-bg2:#f4f7fc;--pc-line:#dde5f0;
  --pc-text:#172033;--pc-muted:#667085;--pc-accent:#2f7bff;--pc-gold:#c99a12;
}

.nex-run-pop-close{
  position:absolute;top:8px;right:8px;
  width:24px;height:24px;padding:0;
  display:flex;align-items:center;justify-content:center;
  border:0;border-radius:7px;
  background:transparent;color:var(--pc-muted);
  font-size:15px;line-height:1;cursor:pointer;
}
.nex-run-pop-close:hover{background:color-mix(in srgb,var(--pc-text) 9%,transparent);color:var(--pc-text)}
.nex-run-pop .nex-run-card{border-radius:11px;background:color-mix(in srgb,var(--pc-bg2) 55%,var(--prp-bg))}
.nex-run-pop .nex-run-verdict{padding-right:28px}
