/* ============================================================
   theme.css —— 全站唯一调色板 + 排版基线
   建立于 2026-09-11

   ① 改颜色只改这个文件，11 个页面同时生效。
      最常改的 4 个：
        --accent  主色（链接、按钮、标题高亮）
        --bg      页面大背景
        --text    正文颜色
        --sub     灰色说明文字

   ② 页面里不要再写死颜色，一律写 var(--名字)。
      需要新颜色时，先在这里加一行，再去页面里引用。
      rgba 阴影统一写 rgba(var(--shadow-rgb), .08)，这样昼夜两套值自动切换。

   ③ 白天 / 黑夜模式：
      深色值写在文件末尾的 [data-theme="dark"] 里，只覆盖同名变量，
      页面一个字都不用改；切换按钮和记忆功能在 theme.js。
      阴影里的 rgba(15,23,42,…) 要写成 rgba(var(--shadow-rgb),…) 才会跟着变。

   ④ 排版基线（字号、行高、容器宽度、圆角）也在本文件，见最下方「统一排版」一节。
   ============================================================ */

:root{
  color-scheme: light;

  /* ── 背景与分隔线 ── */
  --bg:#F5F8FC;            /* 页面大底 */
  --card:#FFFFFF;          /* 白色卡片 */
  --card2:#F8FAFC;         /* 次级卡片、表格头 */
  --card3:#F1F5F9;         /* 再浅一档的块 */
  --line:#DCE4EE;          /* 分隔线、浅边框 */
  --line2:#C2CEDD;         /* 深一点的分隔线 */

  /* ── 文字 ── */
  --head:#0F172A;          /* 最深的标题字 */
  --text:#1E293B;          /* 正文 */
  --text2:#334155;         /* 正文与说明之间 */
  --sub:#616F84;           /* 次要说明文字（2026-09-11 微调：原 #64748B 落在 --bg 上只有 4.47:1，差一点点不达 WCAG AA 的 4.5:1） */
  --sub2:#475569;          /* 介于正文和次要之间 */

  /* ── 主色（蓝）── */
  --accent:#2563EB;        /* 主蓝：链接、按钮、强调 */
  --accent-d:#1D4ED8;      /* 主蓝的深色版（hover、数字） */
  --brand-soft:#EFF6FF;    /* 蓝色浅底 */
  --brand-soft2:#DBEAFE;   /* 蓝色浅底（深一档）*/
  --brand-line:#BFDBFE;    /* 蓝色浅边框 */
  --brand-light:#93C5FD;   /* 蓝色淡（装饰、深底上的次要字）*/

  /* ── 提示色 ── */
  --red:#DC2626;           /* 红：警告、不能用 */
  --red-soft:#FEF2F2;
  --red-line:#FECACA;
  --yellow:#B45309;        /* 黄褐：注意、提醒（文字用）*/
  --yellow-soft:#FFFBEB;
  --yellow-soft2:#FEF3C7;
  --yellow-line:#FCD34D;
  --yellow-light:#FDE68A;
  --amber:#F59E0B;         /* 橙黄（图标、圆点）*/
  --green:#16A34A;         /* 绿：可以、通过 */
  --green-d:#059669;       /* 绿的深色版 */
  --green-soft:#F0FDF4;
  --purple:#7C3AED;        /* 紫：装饰、渐变第二色 */
  --pink:#DB2777;          /* 粉：渐变第三色 */

  /* ── 第二主色（青蓝，行李清单在用）── */
  --accent2:#0E7490;
  --accent2-d:#0891B2;
  --accent2-soft:#EAF7FB;
  --accent2-line:rgba(14,116,144,.25);

  /* ── 其它辅助面 ── */
  --purple-soft:#F5F3FF;
  --purple-soft2:#E9D5FF;
  --gray-bg:#F3F4F6;
  --gray-line:#E5E7EB;
  --card-soft:#FAFCFF;     /* 列表项那种极浅的底 */

  /* ── 阴影 / 高亮白字 ── */
  --shadow-rgb:15,23,42;   /* 阴影基色，深色模式转纯黑 */
  --on-accent:#FFFFFF;     /* 彩色底上的白字，昼夜都不变 */

  /* ── 兼容老写法（timeline 页在用）── */
  --blue:#2563EB;
}

/* ============================================================
   黑夜模式：只覆盖变量，页面无需改动
   设计原则：背景不用纯黑（#0B1220），卡片比背景亮一档，
             文字不用纯白（#E6EDF7），彩色文字一律提亮一档以保证对比度。
   ============================================================ */
[data-theme="dark"]{
  color-scheme: dark;

  --bg:#0B1220;
  --card:#141E31;
  --card2:#1A2438;
  --card3:#202C42;
  --line:#26334A;
  --line2:#3A4861;

  --head:#F1F5F9;
  --text:#E6EDF7;
  --text2:#CBD5E1;
  --sub:#98A6BA;
  --sub2:#BFCBDB;

  --accent:#3B82F6;        /* ⚠️ 这个色同时用来做底（按钮/渐变卡，上面压白字），所以夜间不能调太亮 */
  --accent-d:#A9CBFF;
  --brand-soft:#15243D;
  --brand-soft2:#1B2E4D;
  --brand-line:#2E4670;
  --brand-light:#3F6299;

  --red:#FB7185;
  --red-soft:#2C1619;
  --red-line:#5C2A31;
  --yellow:#FBBF24;
  --yellow-soft:#241B0C;
  --yellow-soft2:#2E2310;
  --yellow-line:#6B5015;
  --yellow-light:#4A3810;
  --amber:#FBBF24;
  --green:#4ADE80;
  --green-d:#34D399;
  --green-soft:#10261B;
  --purple:#8B5CF6;        /* 同上：渐变第二色，做底压白字 */
  --pink:#F472B6;

  --accent2:#0891B2;       /* 同上：青，做底压白字（.cta-card 渐变第一色） */
  --accent2-d:#5AD8EC;
  --accent2-soft:#0F2530;
  --accent2-line:rgba(56,200,224,.28);

  --purple-soft:#1D1830;
  --purple-soft2:#2A2145;
  --gray-bg:#1B2436;
  --gray-line:#2B3852;
  --card-soft:#182234;

  --shadow-rgb:0,0,0;
  --blue:#7DB3FF;
}

/* 切换主题时给个 0.25 秒过渡（theme.js 临时加 .theme-anim，切完就摘掉） */
html.theme-anim, html.theme-anim *{
  transition: background-color .25s ease, color .25s ease, border-color .25s ease !important;
}

/* ============================================================
   统一排版（2026-09-11 定稿 · 全站唯一规则）
   页面里不许再写死字号 / 行高 / 间距 / 圆角 / 容器宽度，一律用下面的变量。
   ──────────────────────────────────────────────
   ① 字体：全站只有一种 var(--font)，body 已设，页面不用再写。
   ② 字号 10 档（px 用于页面级固定尺寸，em 用于卡片内相对字号，一一对应）：
        --fs-2xs 11px / .75em   角标、徽标、脚注
        --fs-xs  12px / .8em    辅助说明、表格小字
        --fs-sm  13px / .85em   卡片正文、列表行
        --fs-md  14px / .9em    正文（默认）
        --fs-lg  16px / 1em     强调正文、卡片标题
        --fs-xl  18px / 1.1em   小标题
        --fs-h2  20px / 1.3em   板块标题
        --fs-2xl 28px           大数字、装饰数字
        --fs-h1  clamp(22px,5vw,34px)  页面大标题（自适应）
   ③ 行高 3 档：--lh-tight 1.4（标题）/ --lh 1.7（正文）/ --lh-loose 1.85（小字长段）
   ④ 间距 11 档（gap / padding / margin 都从这里取）：
        2 4 6 8 10 12 16 20 24 32 40（--gap-2xs … --gap-5xl）
        例外：1px 描边线宽、≥48px 的布局留白（如固定底栏预留 100px）保留。
   ⑤ 容器 5 档：--w-narrow 640 / --w-page 720（阅读型）/ --w-wide 860（资料型）/
      --w-home 1080（首页）/ --w-grid 1100（网格型）
   ⑥ 圆角 4 档：--r-xs 4 / --r-sm 8 / --r-md 12 / --r-lg 16（正圆 50%、胶囊 --r-pill）
   卡片统一配方 = var(--card) 底 + 1px var(--line) 边 + var(--r-md) 圆角 + 12px 16px 内边距。
   ============================================================ */
:root{
  /* ① 字体 */
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;

  /* ② 字号 */
  --fs-2xs: 12px;  --fs-xs:12px;  --fs-sm:13px;  --fs-md:14px;
  --fs-lg:16px;   --fs-xl:18px;  --fs-h2:20px;  --fs-2xl:28px;
  --fs-h1:clamp(22px,5vw,34px);
  --fs-2xs-em:.75em; --fs-xs-em:.8em;  --fs-sm-em:.85em; --fs-md-em:.9em;
  --fs-lg-em:1em;    --fs-xl-em:1.1em; --fs-h2-em:1.3em;

  /* ③ 行高 */
  --lh:1.7; --lh-tight:1.4; --lh-loose:1.85;

  /* ④ 间距 */
  --gap-2xs:2px; --gap-xs:4px;  --gap-sm:6px;  --gap:8px;
  --gap-md:10px; --gap-lg:12px; --gap-xl:16px; --gap-2xl:20px;
  --gap-3xl:24px; --gap-4xl:32px; --gap-5xl:40px;

  /* ⑤ 容器 */
  --w-narrow:640px; --w-page:720px; --w-wide:860px; --w-home:1080px; --w-grid:1100px;

  /* ⑥ 圆角 */
  --r-xs:4px; --r-sm:8px; --r-md:12px; --r-lg:16px; --r-pill:999px;
}

body{font-family:var(--font);font-size:var(--fs-lg);line-height:var(--lh);color:var(--text);background:var(--bg)}

.pg{max-width:var(--w-page);margin:0 auto;padding:0 var(--gap-xl)}
.pg-wide{max-width:var(--w-wide);margin:0 auto;padding:0 var(--gap-xl)}

.pg-head{text-align:center;padding:var(--gap-4xl) var(--gap-2xl) var(--gap-2xl)}
.pg-title{font-size:var(--fs-h1);font-weight:800;line-height:var(--lh-tight);margin:0 0 var(--gap-sm);
  background:linear-gradient(135deg,var(--accent),var(--purple),var(--pink));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.pg-sub{color:var(--sub);font-size:var(--fs-md);margin:0}

.pg-sec-title{max-width:var(--w-page);margin:var(--gap-3xl) auto var(--gap-lg);padding:0 var(--gap-xl);
  font-size:var(--fs-lg);font-weight:700;text-align:center;color:var(--sub)}

.pg-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);padding:var(--gap-lg) var(--gap-xl)}

/* ============================================================
   过期归档区（全站通用）—— 建立了 2026-09-11
   过了时间窗的内容不删，整段剪进这里，默认折叠、沉在页面最底部：

     <section class="exp-zone" id="expired">
       <details>
         <summary>
           <span class="exp-badge">已过期</span>
           <span>标题：哪几条、为什么过期</span>
           <span class="exp-hint"></span>
         </summary>
         <div class="exp-body">
           <p class="exp-note">什么时候过期、明年什么时候回来</p>
           （原来那几段内容原样粘回来，一个字都不用改）
         </div>
       </details>
     </section>

   明年要重新上线：把 exp-body 里的内容剪回原位，这段壳删掉即可。
   配套 archive.js：从外部链接直接跳到 #prep 这类锚点时，自动展开归档区。
   ============================================================ */
.exp-zone{max-width:780px;margin:26px auto var(--gap-lg);padding:0 var(--gap-xl)}
.exp-zone details{background:var(--card2);border:1px dashed var(--line2);border-radius:var(--r-md);overflow:hidden}
.exp-zone summary{display:flex;align-items:center;gap:var(--gap);flex-wrap:wrap;cursor:pointer;user-select:none;list-style:none;padding:var(--gap-lg) var(--gap-xl);font-size:var(--fs-sm-em);font-weight:700;color:var(--sub2)}
.exp-zone summary::-webkit-details-marker{display:none}
.exp-zone summary:hover{color:var(--text)}
.exp-zone .exp-badge{font-size:var(--fs-2xs-em);font-weight:600;padding:var(--gap-2xs) var(--gap);border-radius:var(--r-lg);background:var(--card3);border:1px solid var(--line2);color:var(--sub);white-space:nowrap}
.exp-zone .exp-hint{margin-left:auto;font-size:var(--fs-2xs-em);font-weight:600;color:var(--accent);white-space:nowrap}
.exp-zone .exp-hint::after{content:'展开 ▾'}
.exp-zone details[open] .exp-hint::after{content:'收起 ▴'}
.exp-zone .exp-body{padding:0 var(--gap-xl) var(--gap-xl);padding-top:var(--gap-lg);border-top:1px dashed var(--line2)}
.exp-zone .exp-note{font-size:var(--fs-2xs-em);color:var(--sub);line-height:var(--lh-loose);margin:0 0 var(--gap-lg)}
.exp-zone .exp-note b{color:var(--sub2)}

/* 页面正文里的「有内容被归档了」提示条 */
.arch-note{font-size:var(--fs-2xs-em);color:var(--sub);background:var(--card2);border:1px dashed var(--line2);border-radius:var(--r-sm);padding:var(--gap) var(--gap-lg);margin-bottom:var(--gap);line-height:var(--lh)}
.arch-note a{color:var(--accent);font-weight:600;text-decoration:none}

/* ============================================================
   昼夜切换按钮（theme.js 自动插入，页面不用管）
   右下角悬浮，白天显示月亮、夜里显示太阳。
   ============================================================ */
.theme-btn{
  position:fixed;left:var(--gap-xl);bottom:18px;z-index:999;
  width:38px;height:38px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-lg);line-height:1;cursor:pointer;
  background:var(--card);color:var(--text);
  border:1px solid var(--line);
  box-shadow:0 var(--gap-2xs) var(--gap) rgba(var(--shadow-rgb),.14);
  -webkit-tap-highlight-color:transparent;
  transition:border-color .2s ease, box-shadow .2s ease;
}
.theme-btn:hover{border-color:var(--line2);box-shadow:0 3px var(--gap-md) rgba(var(--shadow-rgb),.18)}
.theme-btn:active{border-color:var(--line2)}
.theme-btn .tb-tip{
  position:absolute;left:46px;bottom:7px;white-space:nowrap;
  font-size:var(--fs-xs);font-weight:600;color:var(--sub2);
  background:var(--card);border:1px solid var(--line2);border-radius:var(--r-sm);
  padding:var(--gap-xs) var(--gap);opacity:0;pointer-events:none;transition:opacity .2s ease;
}
.theme-btn:hover .tb-tip{opacity:1}
@media(max-width:640px){.theme-btn{left:var(--gap-lg);bottom:14px;width:34px;height:34px;font-size:15px}}

/* ============================================================
   共享内容组件层（2026-09-18 全站统一工程 v2）
   12 页通用：改这里一处 = 全站生效。页面换装后删除各自的私有重复定义。
   ⛔ 只追加；类名 blk/tag/row/fold/tbl 前缀，不与页内既有类冲突。
   标准内容块写法：
     <div class="blk blk-must" id="锚点">
       <h3><span class="tag tag-must">必做</span> 标题</h3>
       <p class="lead">一句结论（新生视角，≤20 字）</p>
       <ul><li>要点…</li></ul>
     </div>
   ============================================================ */

/* —— 顶部提示条（「排版乱的话」同款）—— */
.top-tip{text-align:center;padding:var(--gap) var(--gap-lg);background:var(--brand-soft);
  border-bottom:1px solid var(--brand-line);font-size:var(--fs-lg);color:var(--accent)}

/* —— 内容块：card 底 + 1px 边 + 左色条变体 —— */
.blk{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:var(--r-md);padding:var(--gap-lg) var(--gap-xl);margin-bottom:var(--gap)}
.blk-must{border-left-color:var(--red)}
.blk-tip{border-left-color:var(--yellow);background:var(--card2)}
.blk-info{border-left-color:var(--green)}
.blk-more{border-left-color:var(--purple)}
.blk h3{font-size:var(--fs-sm-em);font-weight:700;color:var(--text);margin:0 0 var(--gap-xs);
  display:flex;align-items:center;gap:var(--gap-xs);flex-wrap:wrap}
.blk ul{list-style:none;padding:0;margin:0}
/* 09-23 修：.blk li::before 的 `›` 用 left:0 绝对定位，正文也从 0 开始 → 图标压字（城棋反馈）。
   左边留 14px 给图标。同一类病上一轮在 .timeline 上也犯过（圆点压左边框）。 */
.blk li{font-size:var(--fs-xs-em);color:var(--sub);padding:var(--gap-2xs) 0 var(--gap-2xs) 14px;position:relative}
.blk li::before{content:'›';position:absolute;left:0;color:var(--accent);font-weight:700}
.blk strong{color:var(--text)}

/* —— 徽章（五色，全站统一语义）—— */
.tag{font-size:var(--fs-2xs-em);padding:1px var(--gap-xs);border-radius:var(--r-xs);font-weight:600;white-space:nowrap}
.tag-must{background:var(--red-soft);color:var(--red)}
.tag-tip{background:var(--yellow-soft);color:var(--yellow)}
.tag-info{background:var(--green-soft);color:var(--green-d)}
.tag-note{background:var(--brand-soft);color:var(--accent)}
.tag-more{background:var(--purple-soft);color:var(--purple)}

/* —— 结论行（块头下的一句答案）—— */
.lead{margin:0 0 var(--gap-xs);font-size:var(--fs-xs-em);color:var(--sub);line-height:var(--lh)}
.lead b{color:var(--text)}

/* —— 行内强调（卡片里高亮关键词）—— */
.hl{color:var(--accent);font-weight:600}
.hl-y{color:var(--yellow);font-weight:600}
.hl-r{color:var(--red);font-weight:600}
.hl-g{color:var(--green-d);font-weight:600}

/* —— 速查行（标签列 4.2em + 正文，club 页已验证）—— */
.row{display:flex;gap:var(--gap-xs);font-size:var(--fs-2xs);line-height:1.45;
  padding:var(--gap-2xs) 0;border-top:1px solid var(--line)}
.row:first-child{border-top:none}
.row b{flex:0 0 4.2em;font-weight:600;color:var(--sub)}
.row span{flex:1;min-width:0;color:var(--text);overflow-wrap:anywhere}

/* —— 折叠块（details 统一款）—— */
.fold{margin:0 0 var(--gap);border:1px solid var(--line2);border-radius:var(--r-md);
  background:var(--card);overflow:hidden}
.fold>summary{list-style:none;cursor:pointer;padding:var(--gap-lg) var(--gap-xl);
  font-size:var(--fs-md);font-weight:600;color:var(--text);
  display:flex;align-items:center;gap:var(--gap-sm);line-height:var(--lh-tight)}
.fold>summary::-webkit-details-marker{display:none}
.fold>summary::after{content:'▾';margin-left:auto;color:var(--sub);font-size:var(--fs-sm);flex-shrink:0}
.fold[open]>summary::after{content:'▴'}
.fold-body{padding:0 var(--gap-xl) var(--gap-xl);color:var(--sub2);font-size:var(--fs-sm);line-height:var(--lh-loose)}
.fold-body h4{font-size:var(--fs-sm);color:var(--accent);font-weight:700;margin:var(--gap-lg) 0 var(--gap-sm)}

/* —— 小表格（统一表头与分隔线）—— */
.tbl{width:100%;border-collapse:collapse;font-size:var(--fs-2xs-em)}
.tbl th{background:var(--card2);padding:var(--gap-xs) var(--gap);text-align:left;font-weight:600;border-bottom:1px solid var(--line)}
.tbl td{padding:var(--gap-2xs) var(--gap);border-bottom:1px solid var(--line);color:var(--sub)}
.tbl td:first-child{color:var(--text);font-weight:500}

/* —— 页脚 —— */
.page-foot{text-align:center;padding:var(--gap-3xl) var(--gap-2xl);color:var(--sub);
  font-size:var(--fs-2xs-em);border-top:1px solid var(--line)}
.page-foot a{color:var(--accent);text-decoration:none}

/* —— 黄色提醒框（时效/口径警示，timeline 与 course 在用）—— */
.warn-box{max-width:var(--w-page);margin:var(--gap) auto 0;padding:var(--gap-md) var(--gap-xl);
  background:var(--yellow-soft);border:1px solid var(--yellow-line);border-radius:var(--r-sm);
  font-size:var(--fs-2xs-em);color:var(--yellow);text-align:center}

/* —— 搜索落地反馈（search.js 用：点搜索结果「?q=词#锚点」落地时）——
   ① 锚点定位不再死贴屏幕顶，留 12px 呼吸
   ② 目标块黄色描边闪 2.4 秒（.ss-hit）
   ③ 顶部浮条「你搜的：词 ⤺ 返回搜索 ✕」（.ss-landbar） —— 解决「内容突然顶到最上面」的突兀感 */
.blk,.pg-card,.fold,.pg-sec-title,.exp-zone,.stage,.sec,.chapter{scroll-margin-top:52px}
/* 09-20 改：闪两下后**保留**黄色描边（不再自动消失）；forwards 让动画结束后停在最后一帧。
   移除时机 = 点落地浮条的 ✕，见 search.js。 */
@keyframes ssHit{0%{box-shadow:0 0 0 0 rgba(var(--shadow-rgb),0)}25%,50%{box-shadow:0 0 0 3px var(--yellow-line)}100%{box-shadow:0 0 0 3px var(--yellow-line)}}
.ss-hit{animation:ssHit 1.6s ease forwards;border-radius:var(--r-sm)}
/* 结论条（2026-09-20 统一化）：每块内容的第一句结论 —— 浅蓝底 + 加粗，手机上一眼看到。
   用法：<span class="lead-box">一句话结论</span> 放在内容块最前面。
   颜色全走变量（白天浅蓝 / 夜间深蓝）；夜间蓝底内不出现蓝字，故统一 var(--text)。 */
.lead-box{display:block;background:var(--brand-soft);border-radius:var(--r-sm);
  padding:var(--gap-md) var(--gap-lg);font-size:var(--fs-sm);font-weight:600;color:var(--text);
  line-height:var(--lh-loose);margin-bottom:var(--gap-md)}
.lead-box b{color:var(--text)}
.ss-landbar{position:fixed;top:0;left:0;right:0;z-index:998;display:flex;align-items:center;
  gap:var(--gap-sm);max-width:var(--w-page);margin:0 auto;padding:var(--gap-sm) var(--gap-lg);
  background:var(--card);border:1px solid var(--line2);border-top:none;
  border-radius:0 0 var(--r-md) var(--r-md);
  box-shadow:0 var(--gap-xs) var(--gap-lg) rgba(var(--shadow-rgb),.12);font-size:var(--fs-xs);color:var(--sub2)}
.ss-land-q{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ss-land-back{flex-shrink:0;font-family:inherit;cursor:pointer;font-size:var(--fs-2xs);font-weight:600;
  color:var(--accent);background:var(--brand-soft);border:1px solid var(--brand-line);
  border-radius:var(--r-sm);padding:var(--gap-2xs) var(--gap-sm)}
.ss-land-x{flex-shrink:0;font-family:inherit;cursor:pointer;font-size:var(--fs-xs);
  color:var(--sub);background:transparent;border:none;padding:0 var(--gap-2xs)}
/* 搜索命中的词：页内标黄（类似浏览器 Ctrl+F） */
.ss-mark{background:var(--yellow-light);color:var(--head);border-radius:2px;padding:0 1px}

/* ============================================================
   通用内容块：大卡 + 行式条目（2026-09-20 加）
   城棋定的目标形态「大板块包小板块」，来源 = 首页 home-v3.css 已验证的那套，
   抽成全站通用，供其余页面逐个套用。新增只增不改，不动上面任何既有规则。
   ============================================================ */
.pg-block{background:var(--card);border:1px solid var(--line);border-radius:var(--r-md);
  padding:var(--gap-2xs) var(--gap-2xl) var(--gap);margin-top:var(--gap-xl)}
.pg-block-h{display:flex;align-items:center;gap:var(--gap-lg);padding:var(--gap-lg) 0 var(--gap-md)}
.pg-block-h .pg-ic{flex:0 0 auto;width:34px;height:34px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;
  background:var(--brand-soft);color:var(--accent)}
.pg-block-h h2{font-size:var(--fs-lg);font-weight:700;color:var(--head);line-height:var(--lh-tight)}
.pg-block-h p{font-size:var(--fs-xs);color:var(--sub);margin-top:1px}

.pg-rows{list-style:none;margin:0;padding:0}
.pg-rows li{position:relative}
.pg-rows li:not(:last-child)::after{content:'';position:absolute;left:var(--gap-2xs);right:var(--gap-2xs);
  bottom:0;height:1px;background:var(--line)}
.pg-rows a{display:flex;align-items:baseline;gap:var(--gap-lg);
  padding:var(--gap-md) var(--gap-2xs);text-decoration:none;color:var(--text);border-radius:var(--r-sm)}
.pg-rows .pg-row-t{font-size:var(--fs-md);font-weight:600;color:var(--head);
  flex:0 0 auto;line-height:var(--lh-tight)}
.pg-rows .pg-row-d{flex:1;min-width:0;font-size:var(--fs-xs);color:var(--sub);
  line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pg-rows .pg-row-go{flex:0 0 auto;color:var(--sub);font-size:var(--fs-md)}
.pg-rows a:hover,.pg-rows a:active{background:var(--brand-soft)}
.pg-rows a:focus-visible{outline:2px solid var(--accent);outline-offset:var(--gap-2xs)}

/* 双列：≥768 并排，手机单列 */
.pg-cols{display:grid;grid-template-columns:1fr;row-gap:var(--gap-xl);margin-top:var(--gap-xl)}
@media (min-width:768px){
  .pg-cols{grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:var(--gap-xl);row-gap:0}
  .pg-cols .pg-block+.pg-block{margin-top:var(--gap-xl)}
}
/* 手机主战场：触控目标加大 */
@media (max-width:767px){.pg-rows a{padding:var(--gap-lg) var(--gap-2xs)}}

/* 入场：合成器属性、幅度克制，reduced-motion 全降级 */
@keyframes pg-rise{from{opacity:0;transform:translateY(10px)}}
.pg-block{animation:pg-rise .4s ease backwards}
.pg-block:nth-child(2){animation-delay:.05s}
.pg-block:nth-child(3){animation-delay:.09s}
@media (prefers-reduced-motion:reduce){.pg-block{animation:none}}

/* 分级徽标（计划第八节机制：默认不输出，只有城棋勾过的块才加）
   later = 时机不到；vague = 说了方向但照着做不了 */
.pg-grade{display:inline-flex;align-items:center;gap:var(--gap-xs);
  font-size:var(--fs-2xs);font-weight:700;border-radius:var(--r-pill);
  padding:1px var(--gap);margin-left:var(--gap);vertical-align:middle;white-space:nowrap}
.pg-grade.later{background:var(--gray-bg);border:1px solid var(--line2);color:var(--sub)}
.pg-grade.vague{background:var(--yellow-soft);border:1px solid var(--yellow-line);color:var(--yellow)}

/* 分级折叠卡（与 .pg-block 同一形态；默认收起，点开原样展开）
   深链接跳进折叠区内的锚点时，archive.js 会自动把最近的 details 展开 */
.pg-fold{margin-top:var(--gap-xl);background:var(--card);border:1px solid var(--line);
  border-radius:var(--r-md);overflow:hidden}
.pg-fold>summary{display:flex;align-items:center;gap:var(--gap);flex-wrap:wrap;
  cursor:pointer;user-select:none;list-style:none;
  padding:var(--gap-lg) var(--gap-xl);font-size:var(--fs-md);font-weight:700;color:var(--sub2)}
.pg-fold>summary::-webkit-details-marker{display:none}
.pg-fold>summary:hover{color:var(--text)}
.pg-fold>summary::after{content:'展开 ▾';margin-left:auto;font-size:var(--fs-2xs);
  font-weight:600;color:var(--accent);white-space:nowrap}
.pg-fold[open]>summary::after{content:'收起 ▴'}
.pg-fold>summary .pg-grade{margin-left:var(--gap-sm)}
.pg-fold>.section,.pg-fold>section{margin:0;padding:var(--gap-lg) var(--gap-xl) var(--gap-xl);
  border-top:1px dashed var(--line2)}
.pg-fold[open]>summary{border-bottom:1px dashed var(--line2)}
/* 展开时标题条吸顶（2026-09-22 加，城棋选的 C 方案）：
   长卡展开后滚到多深，标题都停在屏幕顶部 —— 随手一点就收起，不用滚回卡片顶部找。
   老内核不支持 sticky 时会忽略这条，自动退回原来的行为（滚回去点标题），不会坏。 */
.pg-fold[open]>summary{position:sticky;top:0;z-index:5;background:var(--card)}

/* ── APP / 小程序速查（.app-section / .app-grid / .app-item）──
   ⚠️ 2026-09-22 补：这套样式原来只写在 timeline.html 的**页内** CSS 里。
   内容搬进首页「学期节点」卡时只搬了结构、没搬样式 → 首页那 15 条挤成一堆纯文字（实测）。
   现在收进全站样式表，首页与时间线页共用；timeline.html 里那份原样保留（同规则，不冲突）。
   底色用 --card2 + 细边框：首页宿主卡本身就是 --card 底，同色会看不出卡片边界。 */
.app-section{max-width:var(--w-page);margin:0 auto 20px;padding:0 var(--gap-xl)}
.app-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:var(--gap-sm)}
.app-item{background:var(--card2);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:var(--gap-md);text-align:center;transition:transform .25s,box-shadow .25s}
.app-item:hover{transform:translateY(-2px);box-shadow:0 4px 10px rgba(var(--shadow-rgb),.12)}
.app-item .an{font-weight:700;font-size:var(--fs-sm-em);color:var(--text)}
.app-item .au{color:var(--sub);font-size:var(--fs-2xs-em)}
.app-item .ad{color:var(--accent);font-size:var(--fs-2xs-em);margin-top:var(--gap-2xs)}
/* 「小程序 · 不用下载」小标（2026-09-22 加，用于顺水漫生活这类不用装 App 的） */
.app-item .app-tag{display:inline-block;margin-top:var(--gap-xs);padding:0 var(--gap-sm);
  font-size:var(--fs-2xs-em);color:var(--accent);background:var(--brand-soft);
  border:1px solid var(--brand-line);border-radius:999px;line-height:1.8}

/* ── 官方外链 + 「复制网址」小按钮（.ext-link / .link-copy）──
   2026-09-22 加：四级报名这类要「认准域名」的官网，给一个明确的一次点击复制，
   复制后自己粘到地址栏打开最稳（群里发的链接别点）。手机上长按链接本来也能复制，这是更省事的那条路。 */
.ext-link{color:var(--accent);text-decoration:underline;text-underline-offset:2px;word-break:break-all}
.ext-link:hover{color:var(--accent-d)}
.link-copy{display:inline-block;margin:0 var(--gap-xs);padding:0 var(--gap-sm);
  font-family:inherit;font-size:var(--fs-2xs);font-weight:600;line-height:1.9;
  color:var(--accent);background:var(--brand-soft);border:1px solid var(--brand-line);
  border-radius:999px;cursor:pointer;vertical-align:middle;-webkit-tap-highlight-color:transparent}
.link-copy:hover{background:var(--brand-line)}

/* 可点击的微信号（首页「关于这份资料」那句里的号码，2026-09-22 加）
   —— 做成"看得出能点"的样子：蓝色 + 虚线下划 + 按下有底色；旁边配 .wx-hint 小字提示。
   ⚠️ 类名 .wx 不能改：contact.js 找注入锚点时用的就是它（还专门跳过 .about 里的这个）。 */
.wx{cursor:pointer;color:var(--accent);font-weight:600;border-bottom:1px dashed var(--brand-line);
  padding:0 1px;-webkit-tap-highlight-color:transparent}
.wx:active{background:var(--brand-soft)}
.wx-hint{margin-left:var(--gap-xs);font-size:var(--fs-2xs);color:var(--sub)}

/* 群二维码图（「加群与公众号」折叠卡里，2026-09-22 加）
   白底 #fff 是扫码需要的静默区，与主题无关（和 contact.js 的 .ct-qr 同一做法） */
.pg-qr-img{display:block;width:min(200px,60vw);margin:var(--gap) auto;
  background:#fff;padding:var(--gap-md);border-radius:var(--r-md);
  box-shadow:0 4px 14px rgba(var(--shadow-rgb),.14)}

/* ── 卡片正文（与 .pg-block 配套）──
   .pg-body  = 卡内正文区（写在卡头之后）
   .pg-table = 卡内表格（苹果式：表头浅底、行分隔线）
   .pg-tip   = 卡内提示条（默认浅蓝底；warn=黄、danger=红）
   .pg-lead  = 卡片开头的结论条（一句话结论） */
.pg-body{padding:0 0 var(--gap-md)}
.pg-body>*+*{margin-top:var(--gap-md)}
.pg-body p,.pg-body .li,.pg-body li{font-size:var(--fs-md);line-height:var(--lh-loose)}
.pg-body h3{font-size:var(--fs-md);font-weight:700;color:var(--head);margin-top:var(--gap-xl)}
.pg-body h4{font-size:var(--fs-md);font-weight:700;color:var(--text);margin-top:var(--gap-lg)}
.pg-body b,.pg-body strong{color:var(--head)}
.pg-body code{background:var(--card3);padding:1px 5px;border-radius:var(--r-xs);font-size:var(--fs-sm)}
.pg-body a{color:var(--accent);font-weight:600;text-decoration:none}
.pg-body a:hover{text-decoration:underline;text-underline-offset:3px}

.pg-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm);margin-bottom:var(--gap-lg)}
.pg-table th{text-align:left;font-weight:700;color:var(--head);background:var(--card2);
  padding:var(--gap) var(--gap-md);border-bottom:1px solid var(--line);white-space:nowrap}
.pg-table td{padding:var(--gap-md);border-bottom:1px solid var(--line);
  vertical-align:top;color:var(--text2);line-height:var(--lh-loose)}
.pg-table tr:last-child td{border-bottom:none}
@media (max-width:767px){
  .pg-table{font-size:var(--fs-xs)}
  .pg-table th,.pg-table td{padding:var(--gap) var(--gap-sm)}
}

.pg-tip{background:var(--brand-soft);border-radius:var(--r-sm);
  padding:var(--gap-md) var(--gap-lg);font-size:var(--fs-sm);line-height:var(--lh-loose);color:var(--text)}
.pg-tip b,.pg-tip strong{color:var(--text)}
.pg-tip.warn{background:var(--yellow-soft);border:1px solid var(--yellow-line)}
.pg-tip.danger{background:var(--red-soft);border:1px solid var(--red-line)}
.pg-tip.plain{background:var(--card2);border:1px dashed var(--line2)}

.pg-lead{background:var(--brand-soft);border-radius:var(--r-sm);
  padding:var(--gap-md) var(--gap-lg);font-size:var(--fs-sm);font-weight:600;color:var(--text);line-height:var(--lh)}

/* 列表项（卡内一行行的小条目） */
.pg-li{position:relative;padding-left:var(--gap-xl);font-size:var(--fs-sm);line-height:var(--lh-loose);color:var(--text2)}
.pg-li::before{content:'';position:absolute;left:5px;top:.62em;width:5px;height:5px;border-radius:50%;background:var(--accent)}

/* ── 锚点跳转体验（2026-09-20 城棋定）──
   ① 顺滑滚动；② 目录卡浅蓝底（与内容卡区分）；③ 跳到的目标闪黄框、2 秒后渐隐 */
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* 目录卡：页面顶部"先看这几张"，浅蓝底一眼区分于白色内容卡 */
.pg-block.is-nav{background:var(--brand-soft2);border-color:var(--brand-line)}
.pg-block.is-nav .pg-rows li:not(:last-child)::after{background:var(--brand-line)}
.pg-block.is-nav .pg-rows a:hover,.pg-block.is-nav .pg-rows a:active{background:var(--card)}

/* 跳转到达的目标块：黄框 + 黄晕，JS 加 class，2 秒后渐隐（不写进 HTML） */
/* ── 跳转到达提示：黄框高亮（2026-09-21 重做，苹果那套的节奏）──
   要点：亮起要快而柔（150ms）、保持 2 秒、淡出要慢而顺（550ms），
   全程只动 box-shadow（合成层友好、不触发重排），缓动用 cubic-bezier(.4,0,.2,1)。
   ⚠️ 不要用 outline 做过渡 —— 部分浏览器 outline 不参与平滑插值，会"啪"地消失。 */
.pg-hit{
  border-radius:14px;
  box-shadow:0 0 0 3px rgba(250,204,21,.52), 0 0 var(--gap-3xl) var(--gap-2xs) rgba(250,204,21,.30);
  transition:box-shadow .15s cubic-bezier(.4,0,.2,1)}
.pg-hit.pg-hit-off{
  box-shadow:0 0 0 3px rgba(250,204,21,0), 0 0 var(--gap-3xl) var(--gap-2xs) rgba(250,204,21,0);
  transition:box-shadow .55s cubic-bezier(.4,0,.2,1)}
@media (prefers-reduced-motion:reduce){.pg-hit,.pg-hit.pg-hit-off{transition:none}}

/* ── 收起增强（2026-09-23）：卡底「收起这一卡」+ 悬浮球「收起全部」置灰态 ──
   .pg-collapse 由 archive.js 注入到每张折叠卡末尾；
   details 收起后内容不渲染 → 按钮天然只在展开时可见，无需显隐管理。 */
.pg-collapse{
  display:block;margin:var(--gap-lg) auto 2px;padding:6px 18px;
  font-size:var(--fs-xs);color:var(--sub);background:transparent;
  border:1px solid var(--line2);border-radius:999px;cursor:pointer;
  transition:color .15s,border-color .15s,background .15s}
.pg-collapse:hover{color:var(--accent);border-color:var(--accent);background:var(--brand-soft)}
@media print{.pg-collapse{display:none}}
/* 悬浮球「收起全部」：没有展开项时置灰（配合 theme.js 的 disabled 维护） */
.pg-fab-item[disabled]{opacity:.45;pointer-events:none}

/* ── 右下角悬浮球：点一下往左弹出「🔍 搜索 / 🏠 首页 / ↑ 最上方 / ↓ 最下方」（2026-09-20）──
   由 theme.js 注入。搜索按钮就是 search.js 自己的 #ss-fab（程序化点击），
   这里只把它的视觉藏起来 —— 否则两个球在右下角重叠。
   主球常显（它是入口），滚动时自动收起弹出的选项。 */
.pg-fab{position:fixed;right:var(--gap-xl);bottom:26px;z-index:9995;display:flex;align-items:center}
.pg-fab-items{display:flex;align-items:center;gap:var(--gap-md);margin-right:var(--gap-lg);
  opacity:0;pointer-events:none;transform:translateX(14px);
  transition:opacity .2s ease, transform .2s ease}
.pg-fab.open .pg-fab-items{opacity:1;pointer-events:auto;transform:translateX(0)}
.pg-fab-item{width:44px;height:44px;border-radius:50%;padding:0;
  display:flex;align-items:center;justify-content:center;
  font-size:17px;line-height:1;text-decoration:none;cursor:pointer;
  background:var(--card);color:var(--text);border:1px solid var(--line);
  box-shadow:0 3px var(--gap-md) rgba(var(--shadow-rgb),.16);
  -webkit-tap-highlight-color:transparent;
  transition:border-color .18s ease, box-shadow .18s ease, transform .12s ease}
.pg-fab-item:hover{border-color:var(--line2);box-shadow:0 var(--gap-xs) var(--gap-lg) rgba(var(--shadow-rgb),.2)}
.pg-fab-item:active{transform:scale(.94)}
.pg-fab-main{width:52px;height:52px;border-radius:50%;padding:0;
  display:flex;align-items:center;justify-content:center;
  font-size:22px;line-height:1;cursor:pointer;border:none;
  background:var(--accent);color:var(--on-accent);
  box-shadow:0 var(--gap-xs) 14px rgba(var(--shadow-rgb),.34);
  -webkit-tap-highlight-color:transparent;
  transition:transform .22s ease, box-shadow .18s ease}
/* 主球图标：默认三点「⋯」，展开后淡入「✕」—— 不再把加号硬转 45° */
.pg-fab-main .ic-more,.pg-fab-main .ic-close{position:absolute;transition:opacity .22s ease, transform .22s ease}
.pg-fab-main .ic-close{opacity:0;transform:rotate(-45deg) scale(.7)}
.pg-fab.open .pg-fab-main .ic-more{opacity:0;transform:rotate(45deg) scale(.7)}
.pg-fab.open .pg-fab-main .ic-close{opacity:1;transform:none}
.pg-fab-main{position:relative}
.pg-fab.open .pg-fab-main{transform:none}
.pg-fab-main:active{transform:scale(.94)}
.pg-fab-item:focus-visible,.pg-fab-main:focus-visible{outline:var(--gap-2xs) solid var(--accent);outline-offset:var(--gap-2xs)}
/* 藏掉 search.js 自带的搜索球（程序化 click 照样有效） */
.ss-fab{opacity:0 !important;pointer-events:none !important}
@media (prefers-reduced-motion:reduce){.pg-fab-items,.pg-fab-main{transition:none}}
@media (max-width:640px){.pg-fab{right:var(--gap-lg);bottom:var(--gap-xl);gap:var(--gap)}
  .pg-fab-item{width:var(--gap-5xl);height:var(--gap-5xl);font-size:var(--fs-lg)}
  .pg-fab-main{width:48px;height:48px;font-size:var(--fs-h2)}
  .pg-fab-items{gap:var(--gap);margin-right:var(--gap-md)}}

/* ── 吸顶分组跳转条（2026-09-21）──
   首页内容变长后，滑到哪儿都能一键跳到某一组。手机横向可滑动。 */
/* ── 导航胶囊 + 科幻浮层（2026-09-21 二次设计）──
   城棋否掉了吸顶胶囊（"太多、不像能点、不想要吸顶"），改成：
   内容区里一个居中的胶囊 → 点开：背景虚化 + 半透明玻璃面板从下方浮起（居中）。 */
.pg-nav-wrap{display:block;width:100%;text-align:center;margin:18px 0 var(--gap-2xs)}   /* width:100% 必须：.wrap 是 grid，子项默认只占内容宽度 */
.pg-nav-btn{display:inline-flex;align-items:center;gap:var(--gap);padding:9px 18px;
  font-size:var(--fs-sm);font-weight:700;letter-spacing:.3px;color:var(--accent);cursor:pointer;
  background:linear-gradient(135deg, var(--brand-soft2), var(--brand-soft));
  border:1px solid var(--brand-line);border-radius:var(--r-pill);
  box-shadow:0 3px 14px rgba(37,99,235,.14), 0 0 0 1px rgba(255,255,255,.4) inset;
  -webkit-tap-highlight-color:transparent;
  transition:transform .18s ease, box-shadow .22s ease, border-color .18s ease}
.pg-nav-btn:hover{transform:translateY(-1px);border-color:var(--accent);
  box-shadow:0 var(--gap-sm) var(--gap-2xl) rgba(37,99,235,.24), 0 0 0 1px rgba(255,255,255,.5) inset}
.pg-nav-btn:active{transform:translateY(0) scale(.985)}
.pg-nav-btn svg{flex:0 0 auto}

/* 浮层：全屏虚化 + 居中玻璃面板 */
.pg-layer{position:fixed;inset:0;z-index:9996;display:flex;align-items:center;justify-content:center;
  padding:22px;animation:pg-fade .22s ease both}
.pg-layer[hidden]{display:none}
.pg-layer::before{content:"";position:absolute;inset:0;
  background:radial-gradient(ellipse at 50% 42%, rgba(37,99,235,.30), rgba(6,11,25,.74) 72%);
  -webkit-backdrop-filter:blur(15px) saturate(1.25);backdrop-filter:blur(15px) saturate(1.25)}
@keyframes pg-fade{from{opacity:0}to{opacity:1}}
@keyframes pg-rise{from{opacity:0;transform:translateY(26px) scale(.965)}to{opacity:1;transform:none}}
.pg-panel{position:relative;width:100%;max-width:420px;max-height:82vh;overflow-y:auto;
  padding:var(--gap-2xl) 18px var(--gap-xl);border-radius:20px;color:#EAF2FF;
  background:linear-gradient(158deg, rgba(30,58,138,.62), rgba(12,20,40,.72));
  border:1px solid rgba(147,197,253,.42);
  box-shadow:0 var(--gap-3xl) 70px rgba(2,8,23,.55), 0 0 44px rgba(59,130,246,.22), 0 0 0 1px rgba(255,255,255,.07) inset;
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  animation:pg-rise .34s cubic-bezier(.22,1,.36,1) both}
.pg-panel::before{content:"";position:absolute;left:18px;right:18px;top:0;height:1px;
  background:linear-gradient(90deg, transparent, rgba(147,197,253,.85), transparent)}
.pg-panel-h{display:flex;align-items:center;justify-content:space-between;gap:var(--gap-lg);margin-bottom:14px}
.pg-panel-h b{font-size:var(--fs-lg);font-weight:800;letter-spacing:.5px;
  background:linear-gradient(135deg, #BFDBFE, #93C5FD, #C4B5FD);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.pg-panel-x{flex:0 0 auto;width:30px;height:30px;border-radius:50%;cursor:pointer;
  display:flex;align-items:center;justify-content:center;font-size:15px;line-height:1;
  color:rgba(226,238,255,.8);background:rgba(255,255,255,.08);
  border:1px solid rgba(147,197,253,.28);-webkit-tap-highlight-color:transparent}
.pg-panel-x:hover{background:rgba(255,255,255,.16);color:#fff}
.pg-panel-list{display:flex;flex-direction:column;gap:var(--gap)}
.pg-panel-item{position:relative;display:flex;align-items:center;gap:var(--gap-lg);padding:var(--gap-lg) 14px;
  text-decoration:none;border-radius:14px;overflow:hidden;
  background:rgba(255,255,255,.055);border:1px solid rgba(147,197,253,.20);
  -webkit-tap-highlight-color:transparent;
  transition:background .18s ease, border-color .18s ease, transform .16s ease}
.pg-panel-item::before{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--gap-2xs);
  background:linear-gradient(180deg, #60A5FA, #A78BFA);opacity:0;transition:opacity .18s ease}
.pg-panel-item:hover,.pg-panel-item:active{background:rgba(96,165,250,.16);
  border-color:rgba(147,197,253,.55);transform:translateX(2px)}
.pg-panel-item:hover::before,.pg-panel-item:active::before{opacity:1}
.pg-panel-item .pn{flex:0 0 auto;min-width:74px;font-size:var(--fs-md);font-weight:700;color:#EAF2FF}
.pg-panel-item .pd{flex:1;min-width:0;font-size:var(--fs-2xs);color:rgba(200,220,245,.72);
  line-height:1.45}
.pg-panel-item .pc{flex:0 0 auto;font-size:var(--fs-2xs);font-weight:700;font-variant-numeric:tabular-nums;
  color:#93C5FD;padding:var(--gap-2xs) var(--gap);border-radius:var(--r-pill);
  background:rgba(96,165,250,.14);border:1px solid rgba(147,197,253,.3)}
.pg-panel-foot{margin-top:14px;font-size:var(--fs-2xs);color:rgba(180,205,235,.6);line-height:1.5}
@media (prefers-reduced-motion:reduce){.pg-layer,.pg-panel{animation:none}.pg-panel-item{transition:none}}
/* 首页上的折叠卡：去掉 .pg-fold 的外边距，融进卡片流 */
.card.pg-fold-card{margin-top:14px}   /* ⚠️ 不要写 padding:0 —— 会抹掉 .card 的 2px 18px 8px，内容贴边 */
.card.pg-fold-card>.pg-fold{margin-top:0;border:none;background:transparent}
.card.pg-fold-card>.pg-fold>summary{padding:13px 0 9px;gap:11px}
.card.pg-fold-card>.pg-fold[open]>summary{border-bottom:none;padding-bottom:9px}
.card.pg-fold-card>.pg-fold>summary .ci{flex:0 0 auto;width:34px;height:34px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;
  background:var(--brand-soft);color:var(--accent)}
.pg-fold-t{font-size:17px;font-weight:700;color:var(--head);line-height:1.3}
.pg-fold-d{font-size:var(--fs-xs);color:var(--sub);margin-top:1px}
/* 09-21：首页四组卡与福利卡也是跳转目标，统一留白（放在后面覆盖上面的 52px） */
[id],.card{scroll-margin-top:88px}
@media (max-width:640px){[id],.card{scroll-margin-top:72px}}
/* .pg-body 里的列表与强调（搬 timeline 内容时用）*/
.pg-body ul{list-style:none;padding-left:0;margin-top:var(--gap-sm)}
.pg-body ul li{position:relative;padding-left:var(--gap-xl);margin-bottom:var(--gap-sm)}
.pg-body ul li::before{content:"";position:absolute;left:var(--gap-2xs);top:.62em;width:5px;height:5px;
  border-radius:50%;background:var(--brand-light)}
.pg-body .hl-r{color:var(--red);font-weight:700}
.pg-body .hl{color:var(--accent);font-weight:600}

/* ── 问答条目（2026-09-21 从 questions.html 搬进首页时新增）──
   每条一个问题，收起时一行；点开就地看答案。 */
.pg-qa{border-top:1px solid var(--line)}
.pg-qa:first-of-type{border-top:none}
.pg-qa>summary{display:flex;align-items:flex-start;gap:var(--gap-md);padding:var(--gap-lg) 0;cursor:pointer;
  font-size:var(--fs-md);font-weight:600;color:var(--text);line-height:1.5;list-style:none;
  -webkit-tap-highlight-color:transparent}
.pg-qa>summary::-webkit-details-marker{display:none}
.pg-qa>summary::after{content:"+";margin-left:auto;flex:0 0 auto;color:var(--sub);
  font-size:var(--fs-md);font-weight:400;line-height:1}
.pg-qa[open]>summary::after{content:"−"}
.pg-qa[open]>summary{color:var(--accent)}
.pg-qa>summary:hover{color:var(--accent)}
.pg-qa .qa-body{padding:var(--gap-2xs) 0 var(--gap-lg);font-size:var(--fs-sm);color:var(--text2);
  line-height:var(--lh-loose)}
.pg-qa .qa-body b{color:var(--head)}
.pg-qa .qa-body a{color:var(--accent);font-weight:600;text-decoration:none}
.pg-qa .qa-lead{display:block;background:var(--brand-soft);border-left:3px solid var(--accent);
  border-radius:var(--r-sm);padding:var(--gap) 11px;margin-bottom:var(--gap-md);font-size:var(--fs-xs);color:var(--text)}
.pg-qa .qa-buy{display:inline-block;margin:var(--gap) 0;padding:var(--gap-sm) 13px;border-radius:var(--r-pill);
  background:var(--brand-soft2);color:var(--accent);font-size:var(--fs-xs);font-weight:700;
  text-decoration:none;border:1px solid var(--brand-line)}
.pg-qa .qa-tip{display:inline-block;color:var(--sub);font-size:var(--fs-2xs);line-height:1.5}
.pg-qa .hl-r{color:var(--red);font-weight:700}
.pg-qa .hl{color:var(--accent);font-weight:600}

/* ── 社团总览（2026-09-21 从 club.html 搬进首页时新增）──
   ⛔ 列表坚持单列：原页明确记过「grid 会把同一行两项强制等高，一高一矮时
      矮的那列底下拖出一大片空白，看着就是排得很乱」（09-16 踩过）。
   ⚠️ .card-header 是通用名，这里全部限定在 .pg-body 里。 */
.pg-body .category-card{margin-top:var(--gap-sm)}
.pg-body .category-card + .category-card{margin-top:var(--gap-md)}
.pg-body .card-header{display:flex;align-items:center;justify-content:space-between;
  gap:var(--gap);padding:11px 0 7px;border-top:1px solid var(--line2);margin-top:var(--gap-sm)}
.pg-body .category-card:first-of-type .card-header{border-top:none;margin-top:0}
.pg-body .card-header .left{display:flex;align-items:center;gap:var(--gap-md);min-width:0}
.pg-body .card-header .icon{font-size:19px;line-height:1;flex:0 0 auto}
.pg-body .card-header .title{font-size:var(--fs-md);font-weight:700;color:var(--head);line-height:1.3}
.pg-body .card-header .desc{font-size:var(--fs-2xs);color:var(--sub);margin-top:var(--gap-2xs);line-height:1.4}
.pg-body .card-header .count{flex:0 0 auto;font-size:var(--fs-2xs);color:var(--accent);
  background:var(--brand-soft);padding:3px 9px;border-radius:var(--r-pill);white-space:nowrap}
.pg-club-list{display:block}   /* ⛔ 单列，别改多列 */
.pg-club-item{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--gap-sm);
  padding:7px 0;border-bottom:1px solid var(--line)}
.pg-club-item:last-child{border-bottom:none}
.pg-club-item .cname{font-size:var(--fs-sm);font-weight:600;color:var(--text)}
.pg-club-item .csep{color:var(--line2);font-size:var(--fs-sm)}
.pg-club-item .cinfo{font-size:var(--fs-xs);color:var(--sub);line-height:1.5}
.pg-club-more{border-top:1px dashed var(--line2);margin-top:var(--gap-sm)}
.pg-club-more>summary{list-style:none;cursor:pointer;padding:var(--gap-sm) 0;
  font-size:var(--fs-2xs);color:var(--sub2);-webkit-tap-highlight-color:transparent}
.pg-club-more>summary::-webkit-details-marker{display:none}
.pg-club-more>summary::after{content:" ▾"}
.pg-club-more[open]>summary::after{content:" ▴"}
.pg-club-more>summary:hover{color:var(--text)}

/* ── 从 course.html 搬来的样式（2026-09-21 选课内容搬进首页时随迁）──
   ⚠️ 原文件的 * / body / .container / .nav / .section 等全局选择器**没有**搬过来，
      其余规则统一加了 .pg-body 前缀，只作用于首页折叠卡内部。 */

.pg-body /* 骨架（顶条/标题区/页脚）已换共享层：pg-head / pg-title / pg-sub / top-tip / page-foot */
  /* ===== 本轮新增：年份标注徽标（2026级 / 往届经验）===== */
  .year-badge { display:inline-block;padding:var(--gap-2xs) var(--gap-sm);border-radius:var(--r-xs);background:var(--card2);border:1px solid var(--line2);font-size:var(--fs-2xs);font-weight:500;color:var(--sub2);white-space:nowrap;vertical-align:middle }
.pg-body .year-badge.past { background:var(--yellow-soft);border-color:var(--yellow-line);color:var(--yellow) }
.pg-body /* ⚠️ 这里的胶囊改名叫 .chip：.tag 已被共享层用作小徽章，不能撞名 */
  .hero .chip { background:var(--card2); border:1px solid var(--line2); padding:var(--gap-xs) var(--gap-lg); border-radius:var(--r-lg); font-size:var(--fs-xs); }
.pg-body .section-title { font-size:var(--fs-h2); font-weight:700; margin-bottom:var(--gap-lg); padding-left:var(--gap-lg); border-left:var(--gap-xs) solid var(--brand-light); line-height:var(--lh-tight); }
.pg-body /* 内容卡换共享 .blk；课程类型识别色为本页专属（theme.css 无对应，同 club 分类色先例） */
  :root { --tc-new:#e67e22;--tc-ai:#e74c3c;--tc-sel:#3498db;--tc-cross:#9b59b6; --tc-erya:#27ae60;--tc-jp:#f39c12;--tc-eng:#1abc9c;--tc-soft:#FFF7ED }
.pg-body /* Course type explain cards */
  .type-card { background:var(--card); border-radius:var(--r-md); padding:var(--gap-xl) var(--gap-2xl); margin-bottom:var(--gap-lg); border:1px solid var(--line); border-left:var(--gap-xs) solid var(--brand-light); }
.pg-body .type-card.t-new { border-left-color:var(--tc-new); }
.pg-body .type-card.t-ai { border-left-color:var(--tc-ai); }
.pg-body .type-card.t-sel { border-left-color:var(--tc-sel); }
.pg-body .type-card.t-cross { border-left-color:var(--tc-cross); }
.pg-body .type-card.t-erya { border-left-color:var(--tc-erya); }
.pg-body .type-card.t-jp { border-left-color:var(--tc-jp); }
.pg-body .type-card.t-eng { border-left-color:var(--tc-eng); }
.pg-body .type-card.t-pe { border-left-color:var(--tc-new); }
.pg-body .type-card h4 { font-size:var(--fs-lg); font-weight:700; margin-bottom:var(--gap-sm); }
.pg-body .type-card .what { font-size:var(--fs-md); color:var(--sub2); margin-bottom:var(--gap); }
.pg-body .type-card .when { font-size:var(--fs-sm); color:var(--tc-new); margin-bottom:var(--gap-sm); font-weight:500; }
.pg-body .type-card .courses { font-size:var(--fs-sm); color:var(--sub2); background:var(--card); border-radius:var(--r-sm); padding:var(--gap) var(--gap-lg); }
.pg-body .type-card .note { font-size:var(--fs-sm); color:var(--sub); margin-top:var(--gap-sm); font-style:italic; }
.pg-body /* Year timeline */
  .year-row { background:var(--card); border-radius:var(--r-md); padding:var(--gap-2xl) var(--gap-3xl); margin-bottom:var(--gap-lg); border:1px solid var(--line); }
.pg-body .year-row h3 { font-size:var(--fs-xl); font-weight:700; margin-bottom:var(--gap-lg); display:flex; align-items:center; gap:var(--gap); }
.pg-body .year-row h3 .yr { font-size:var(--fs-sm); padding:var(--gap-2xs) var(--gap-md); border-radius:var(--r-md); color:var(--text); }
.pg-body .sem { margin-bottom:var(--gap-lg); }
.pg-body .sem:last-child { margin-bottom:0; }
.pg-body .sem h5 { font-size:var(--fs-md); font-weight:600; color:var(--accent); margin-bottom:var(--gap); }
.pg-body .task { display:flex; align-items:flex-start; gap:var(--gap-md); margin-bottom:var(--gap); font-size:var(--fs-md); padding:var(--gap-sm) var(--gap-md); background:var(--card); border-radius:var(--r-sm); }
.pg-body .task .icon { font-size:var(--fs-md); flex-shrink:0; margin-top:var(--gap-2xs); }
.pg-body .task .label { font-weight:600; color:var(--text); }
.pg-body .task .detail { font-size:var(--fs-sm); color:var(--sub); }
.pg-body .info-box { background:var(--green-soft); border-radius:var(--r-sm); padding:var(--gap-lg) var(--gap-xl); margin-bottom:var(--gap-md); border-left:3px solid var(--brand-light); font-size:var(--fs-md); }
.pg-body .info-box.warn { background:var(--yellow-soft); border-left-color:var(--tc-new); }
.pg-body .info-box.danger { background:var(--red-soft); border-left-color:var(--tc-ai); }
.pg-body .info-box strong { color:var(--text); }
.pg-body /* FAQ */
  .faq-item { margin-bottom:var(--gap-md); }
.pg-body .faq-q { font-size:var(--fs-lg); font-weight:600; color:var(--text); margin-bottom:var(--gap-2xs); }
.pg-body .faq-a { font-size:var(--fs-md); color:var(--sub2); padding-left:var(--gap-xl); }
.pg-body .course-table { width:100%; border-collapse:collapse; font-size:var(--fs-sm); margin-top:var(--gap); }
.pg-body .course-table th { background:var(--accent); color:var(--on-accent); padding:var(--gap-sm) var(--gap-md); text-align:left; font-weight:500; }
.pg-body .course-table td { padding:var(--gap-sm) var(--gap-md); border-bottom:1px solid var(--line); }
.pg-body .course-table tr:hover td { background:var(--card); }
.pg-body code { background:var(--card2); padding:var(--gap-2xs) var(--gap-sm); border-radius:var(--r-xs); font-size:var(--fs-sm); }
.pg-body .t-dim-mt { font-size:var(--fs-sm);color:var(--sub);margin-top:var(--gap) }
.pg-body .mt-md { margin-top:var(--gap-md) }
.pg-body .mt-lg { margin-top:var(--gap-lg) }
.pg-body .mt-gap { margin-top:var(--gap) }
.pg-body .yl-sm { color:var(--yellow);font-size:var(--fs-sm-em) }
.pg-body .w-50 { width:50px }
.pg-body .tc-emoji { text-align:center;font-size:var(--fs-h2) }
.pg-body .ul-note { margin-top:var(--gap);padding-left:var(--gap-xl);font-size:var(--fs-md) }
.pg-body /* 操作步骤条（原本是没样式的裸 div，这里补上左线步骤样式） */
  .tl { padding-left:var(--gap-3xl) }
.pg-body .tl-item { padding:var(--gap-sm) 0 var(--gap-sm) var(--gap-lg);border-left:3px solid var(--brand-line);margin-bottom:var(--gap-xs) }
.pg-body .tl-item.red { border-left-color:var(--red) }
.pg-body .tl-item.warn { border-left-color:var(--yellow) }
.pg-body .tl-item .label { font-weight:600;color:var(--text) }
.pg-body .tl-item .desc { font-size:var(--fs-sm);color:var(--sub) }
.pg-body /* ⚠️ 原名 .hl 与共享层（accent 高亮字）撞名，改名 mark-y（黄底词标记） */
  .mark-y { background:var(--yellow-soft2); padding:1px var(--gap-xs); border-radius:var(--r-xs); font-weight:600; }
.pg-body /* Watermark */
/* ===== 结尾转化卡 ===== */
.cta-card { max-width:var(--w-narrow);margin:26px auto 34px;background:var(--card);border:1px solid var(--line2);border-radius:var(--r-lg);padding:var(--gap-2xl) var(--gap-2xl);text-align:center;box-shadow:0 var(--gap-md) 34px rgba(15,23,42,.08)}
.pg-body .cta-hook { margin:0 0 var(--gap-lg);color:var(--text);font-size:var(--fs-xl);font-weight:700;letter-spacing:.5px }
.pg-body .cta-wx { display:inline-flex;align-items:center;gap:var(--gap-md);background:var(--card2);border:1px solid var(--line2);border-radius:var(--r-md);padding:var(--gap) var(--gap-2xl) }
.pg-body .cta-wx-id { color:var(--text);font-size:var(--fs-xl);font-weight:700;letter-spacing:var(--gap-2xs);user-select:all;-webkit-user-select:all }
.pg-body .cta-wx-tip { color:var(--sub2);font-size:var(--fs-xs) }
.pg-body .cta-ask { margin:var(--gap-lg) 0 0;color:var(--text);font-size:var(--fs-sm);line-height:var(--lh) }
.pg-body .cta-ask b { color:var(--accent) }
.pg-body .cta-note { margin:var(--gap-md) 0 0;color:var(--sub);font-size:var(--fs-2xs);line-height:var(--lh) }
.pg-body .cta-home { display:inline-block;margin-top:var(--gap-lg);color:var(--sub2);font-size:var(--fs-xs);text-decoration:none;border-bottom:1px solid var(--line2);padding-bottom:1px }
.pg-body .cta-home:hover { color:var(--text) }
.pg-body .cta-hook { font-size:var(--fs-lg) }
.pg-body /* 09-20 加（城棋反馈：内容太多、不知道看哪些）：导航分组 + 阅读指引 + ⏳ 标记 */
.nav-g { display:inline-flex;align-items:center;color:var(--sub);font-size:var(--fs-2xs);font-weight:700; padding:0 var(--gap-sm);letter-spacing:.5px;white-space:nowrap }
.pg-body .read-guide { margin-top:var(--gap-lg);background:var(--brand-soft);border:1px solid var(--brand-line); border-radius:var(--r-md);padding:var(--gap-lg) var(--gap-xl);font-size:var(--fs-sm);line-height:var(--lh-loose);color:var(--text) }
.pg-body .read-guide b { color:var(--head) }
.pg-body .read-guide .rg-tip { color:var(--sub);font-size:var(--fs-xs) }
.pg-body .tag-later { display:inline-block;background:var(--gray-bg);border:1px solid var(--line2);color:var(--sub); font-size:var(--fs-2xs);font-weight:700;border-radius:var(--r-pill);padding:1px var(--gap);margin-right:var(--gap-xs);vertical-align:middle }
.pg-body /* 09-20 卡片化：.section 变卡片（原分隔线样式让位给卡片边框），目录卡与折叠卡在 theme.css */
.section.pg-block { border-top:none;margin:var(--gap-xl) 0 0;padding:0 var(--gap-xl) var(--gap-md) }
.pg-body .pg-fold .section { margin:0 }
.pg-body .pg-cols .pg-block { margin-top:var(--gap-xl) }
.pg-body .pg-lead-tip { max-width:var(--w-wide);margin:var(--gap-lg) auto 0;padding:var(--gap-md) var(--gap-xl) }

/* ── 从 transfer.html 搬来的样式（2026-09-21 转专业内容搬进首页时随迁）──
   ⚠️ 全局选择器（body/.nav/.container/.section/.section-title）没搬；
      其余统一加 .pg-body 前缀。切换用的 .sem-tab 系列不搬（首页改成全部显示）。 */
.pg-body * { margin:0; padding:0; box-sizing:border-box; }
.pg-body /* 骨架已换共享层：pg-head/pg-title/pg-sub/top-tip/warn-box/page-foot（09-18 统一工程） */
  .senior-note { max-width:var(--w-wide);margin:var(--gap-xl) auto 0;padding:var(--gap-lg) var(--gap-xl);background:var(--brand-soft);border:1px solid var(--brand-line);border-radius:var(--r-md);font-size:var(--fs-sm);color:var(--text);line-height:var(--lh-loose);text-align:left }
.pg-body .senior-note b { color:var(--accent) }
.pg-body /* 胶囊改名 .chip：.tag 已被共享层用作小徽章，不能撞名 */
  .hero .tag-row { display:flex; flex-wrap:wrap; justify-content:center; gap:var(--gap); margin-top:var(--gap-xl); }
.pg-body /* 内容卡换共享 .blk（09-18 统一工程）；标题里的 emoji 缩进保留 */
  .blk h3 .emoji { margin-right:var(--gap-sm); }
.pg-body .checklist { list-style:none; }
.pg-body .checklist li { padding:var(--gap) 0; border-bottom:1px solid var(--line); font-size:var(--fs-md); display:flex; align-items:flex-start; gap:var(--gap); }
.pg-body .checklist li:last-child { border-bottom:none; }
.pg-body .checklist li .icon { flex-shrink:0; font-size:var(--fs-lg); margin-top:1px; }
.pg-body .checklist li .label { font-weight:600; color:var(--text); }
.pg-body .checklist li .desc { color:var(--sub); font-size:var(--fs-sm); margin-left:var(--gap-xs); }
.pg-body .ban-list { list-style:none; }
  /* 09-23 修（城棋第二次反馈「图标依旧重叠」）：
     .checklist / .ban-list 的 li 是 **display:flex 的「图标 + 文字」行**，自带 <span class="icon">❌</span>，
     **不需要** .blk li::before 的小箭头 `›` —— 它用 left:0 绝对定位，正好压在图标上。
     ⚠️ 上一轮只给 .blk li 加了 padding-left，但这两类的 `padding: var(--gap) 0` 特异性更高
        （.pg-body .ban-list li > .blk li），把 padding 压回去了 → 所以必须**直接关掉伪元素**。 */
  .pg-body .checklist li::before, .pg-body .ban-list li::before { content: none; }
.pg-body .ban-list li { padding:var(--gap) 0; border-bottom:1px solid var(--line); font-size:var(--fs-md); display:flex; align-items:flex-start; gap:var(--gap); }
.pg-body .ban-list li:last-child { border-bottom:none; }
.pg-body .ban-list li .icon { flex-shrink:0; font-size:var(--fs-md); }
.pg-body /* Timeline */
  .timeline { position:relative; padding-left:var(--gap-3xl); }
.pg-body .timeline::before { content: ''; position:absolute; left:9px; top:var(--gap); bottom:var(--gap); width:var(--gap-2xs); background:var(--line); }
  /* 09-21 修（城棋反馈「左侧往右移、图标重叠」）：时间轴圆点 .step::before 用 left:-23px
     **伸到 step 外面**画，需要 .timeline 在左边留出这段空间；缺了它圆点就压到卡片左边框上。
     26px = 23（负偏移）+ 余量。只作用在首页（.pg-body 内），不动旧页。 */
  /* 09-23 修（城棋反馈「整体结构没有秩序感、右侧几个框不齐」）：
     上轮为了"圆点不压卡片左边框"给 .timeline 加了 padding-left:26px，
     副作用是**整个 step 框比上面的正文右移了 26px**（截图里一眼看得出"下面缩进一块"）。
     修法：**用负 margin 抵消** —— 框回到与正文同一条左边界，padding 区仍留给圆点。
     （纯 padding 会让内容缩进；纯 margin 会让圆点压边框；两者配合才对。） */
  .pg-body .timeline { padding-left: 26px; margin-left: -26px; }
  .pg-body .timeline .step { position:relative; margin-bottom:var(--gap-xl); padding:var(--gap-lg) var(--gap-xl); background:var(--card); border-radius:var(--r-sm); border:1px solid var(--line); }
.pg-body .timeline .step::before { content: ''; position:absolute; left:-23px; top:18px; width:var(--gap-md); height:var(--gap-md); border-radius:50%; background:var(--accent); border:var(--gap-2xs) solid var(--line2); box-shadow:0 0 0 var(--gap-2xs) var(--brand-light); }
.pg-body .timeline .step .step-title { font-weight:600; font-size:var(--fs-md); color:var(--text); }
.pg-body .timeline .step .step-time { display:inline-block; font-size:var(--fs-xs); color:var(--on-accent); background:var(--accent); padding:1px var(--gap-md); border-radius:var(--r-md); margin-left:var(--gap); }
.pg-body .timeline .step .step-desc { font-size:var(--fs-sm); color:var(--sub2); margin-top:var(--gap-xs); line-height:var(--lh); }
.pg-body /* Round tabs */
  .round-tabs { display:flex; gap:var(--gap); margin-bottom:var(--gap-xl); }
.pg-body .round-tab { padding:var(--gap) var(--gap-2xl); border-radius:var(--r-sm); font-size:var(--fs-sm); font-weight:500; cursor:pointer; transition:all 0.2s; border:1.5px solid var(--line2); background:var(--card); }
.pg-body .round-tab:hover { border-color:var(--brand-light); }
.pg-body .round-tab.active { background:var(--accent); color:var(--on-accent); border-color:var(--brand-light); }
.pg-body .round-content { display:none; }
.pg-body .round-content.active { display:block; }
/* 09-21 修（城棋反馈「春秋季按钮点不动、流程图不显示」）：
   搬进首页时我决定"去掉切换、改成两轮都显示"，但只做了一半 ——
   按钮组留着（是 <div>，没有 JS，纯假按钮），而 .round-content 还带着 display:none，
   HTML 里又没有 .active → **两轮内容全被隐藏**（就是"流程图不显示"）。
   现在：按钮组已从 HTML 删掉，两轮内容加 .show 类常显。
   ⚠️ 保留 .active 那条不动 —— 旧页 transfer.html 还在用它。 */
.pg-body .round-content.show { display:block; }
.pg-body .sem-content { display:none; }
.pg-body .sem-content.active { display:block; }
.pg-body /* System steps */
  .sys-step { display:flex; gap:var(--gap-lg); padding:var(--gap-lg) 0; border-bottom:1px solid var(--line); }
.pg-body .sys-step:last-child { border-bottom:none; }
.pg-body .sys-step .step-num { flex-shrink:0; width:var(--gap-4xl); height:var(--gap-4xl); border-radius:50%; background:var(--accent); color:var(--on-accent); font-size:var(--fs-md); font-weight:600; display:flex; align-items:center; justify-content:center; }
.pg-body .sys-step .step-body { flex:1; }
.pg-body .sys-step .step-body .step-label { font-weight:600; font-size:var(--fs-md); color:var(--text); }
.pg-body .sys-step .step-body .step-detail { font-size:var(--fs-sm); color:var(--sub2); margin-top:var(--gap-2xs); line-height:var(--lh); }
.pg-body /* Tip box */
  .tip { background:var(--yellow-soft); border-left:3px solid var(--amber); border-radius:var(--r-sm); padding:var(--gap-lg) var(--gap-xl); margin:var(--gap-lg) 0; font-size:var(--fs-sm); color:var(--sub2); }
.pg-body .tip strong { color:var(--yellow); }
.pg-body .warn { background:rgba(198,40,40,0.1); border-left:3px solid var(--red); border-radius:var(--r-sm); padding:var(--gap-lg) var(--gap-xl); margin:var(--gap-lg) 0; font-size:var(--fs-sm); color:var(--sub2); }
.pg-body .warn strong { color:var(--red); }
.pg-body /* Experience section */
  .exp-card { background:var(--brand-soft); border:1px dashed var(--brand-light); border-radius:var(--r-md); padding:var(--gap-xl) var(--gap-2xl); margin-bottom:var(--gap-md); }
.pg-body .exp-card .exp-author { font-weight:600; font-size:var(--fs-sm); color:var(--accent); }
.pg-body .exp-card .exp-from { font-size:var(--fs-xs); color:var(--sub); margin-left:var(--gap-sm); }
.pg-body .exp-card .exp-text { font-size:var(--fs-sm); color:var(--text); margin-top:var(--gap-sm); line-height:var(--lh); }
.pg-body .add-hint { background:var(--green-soft); border-left:3px solid var(--green); border-radius:var(--r-sm); padding:var(--gap-lg) var(--gap-xl); margin:var(--gap-lg) 0; font-size:var(--fs-sm); color:var(--sub2); }
.pg-body .add-hint strong { color:var(--green); }
.pg-body .code-block { background:var(--card); color:var(--accent2); border-radius:var(--r-sm); padding:var(--gap-lg) var(--gap-xl); font-size:var(--fs-xs); font-family: 'Consolas', monospace; margin:var(--gap) 0; overflow-x:auto; line-height:var(--lh); }
.pg-body .txs { font-size:var(--fs-xs);color:var(--sub) }
.pg-body .tc { text-align:center }
.pg-body .grn { color:var(--green);font-size:var(--fs-xs) }
.pg-body .yl2 { color:var(--yellow);font-size:var(--fs-xs) }
.pg-body .tsb { font-size:var(--fs-sm);color:var(--sub);margin-bottom:var(--gap-lg) }
.pg-body .box-line { background:var(--card);border:1px solid var(--line) }
.pg-body .txb { font-size:var(--fs-xs);color:var(--sub);margin-bottom:var(--gap) }
.pg-body .soft-box { background:var(--brand-soft);border:1px solid var(--brand-line) }
.pg-body .red-xs { color:var(--red);font-size:var(--fs-xs) }
.pg-body .yl { color:var(--yellow) }
.pg-body .t2b { font-size:var(--fs-md);color:var(--sub2);margin-bottom:var(--gap-lg) }
.pg-body .tmd { font-size:var(--fs-md) }
.pg-body .txs-w { font-size:var(--fs-xs);color:var(--sub);font-weight:400 }
.pg-body .mb-xl { margin-bottom:var(--gap-xl) }
.pg-body .tmd-lh { font-size:var(--fs-md);line-height:var(--lh) }
.pg-body .m0 { margin:0 }
.pg-body .acc { color:var(--accent) }
.pg-body /* 黄系叠加警示底（8% 透明黄，深浅底都可见，故保留 rgba 写法） */
  .tip-dash { background:rgba(251,191,36,0.08);border-color:rgba(251,191,36,0.4);border-style:dashed }
.pg-body /* Data tables */
  .data-table-wrap { overflow-x:auto; }
.pg-body .data-table { width:100%; border-collapse:collapse; font-size:var(--fs-sm); }
.pg-body .data-table th { background:var(--card); padding:var(--gap) var(--gap-md); text-align:left; font-weight:600; color:var(--sub2); border-bottom:var(--gap-2xs) solid var(--line); font-size:var(--fs-xs); }
.pg-body .data-table td { padding:var(--gap) var(--gap-md); border-bottom:1px solid var(--line); vertical-align:top; }
.pg-body .data-table tr:hover td { background:var(--card); }
.pg-body .data-table-sm td { padding:var(--gap-sm) var(--gap-md); }
.pg-body /* ===== 结尾转化卡 ===== */
.cta-card { max-width:var(--w-narrow);margin:26px auto 34px;background:var(--card);border:1px solid var(--line2);border-radius:var(--r-lg);padding:var(--gap-2xl) var(--gap-2xl);text-align:center;box-shadow:0 var(--gap-md) 34px rgba(var(--shadow-rgb),.08)}
.pg-body .cta-hook { margin:0 0 var(--gap-lg);color:var(--text);font-size:var(--fs-xl);font-weight:700;letter-spacing:.5px }
.pg-body .cta-wx { display:inline-flex;align-items:center;gap:var(--gap-md);background:var(--card2);border:1px solid var(--line2);border-radius:var(--r-md);padding:var(--gap) var(--gap-2xl) }
.pg-body .cta-wx-id { color:var(--text);font-size:var(--fs-xl);font-weight:700;letter-spacing:var(--gap-2xs);user-select:all;-webkit-user-select:all }
.pg-body .cta-wx-tip { color:var(--sub2);font-size:var(--fs-xs) }
.pg-body .cta-ask { margin:var(--gap-lg) 0 0;color:var(--text);font-size:var(--fs-sm);line-height:var(--lh) }
.pg-body .cta-ask b { color:var(--accent) }
.pg-body .cta-note { margin:var(--gap-md) 0 0;color:var(--sub);font-size:var(--fs-2xs);line-height:var(--lh) }
.pg-body .cta-home { display:inline-block;margin-top:var(--gap-lg);color:var(--sub2);font-size:var(--fs-xs);text-decoration:none;border-bottom:1px solid var(--line2);padding-bottom:1px }
.pg-body .cta-home:hover { color:var(--text) }
.pg-body .cta-hook { font-size:var(--fs-lg) }

/* ── 宽屏档：把搬进来的内容整体放大一档（2026-09-21 新增｜2026-09-23 断点统一）──
   ⚠️ 搬来的页面用 --fs-*-em（相对父级字号），手机上合适，电脑上偏小。

   📐 全站断点档位（2026-09-23 统一后的约定）：
        ≤767px  → 手机档（单栏 + 小字号）
        ≥768px  → 平板／桌面档（宽屏布局 + 放大字号）
      原来这里写的是 min-width:820px，与**布局档** min-width:768px 错开，
      于是 768–819px（iPad 竖屏）留下 52px 的空隙：**布局已经进两栏、字号还停在手机档**
      —— 窄栏配小字，挤。
      现在并入 768 档，空隙消除、语义不再重叠。

   ⚠️ 一处**试过又回滚**的改动（记下来，免得以后有人再试一遍）：
      curriculum / curriculum-v2 / major 三页里写的是 `max-width:768px`，
      看着和本档（`min-width:768px`）在**正好 768px** 那一点"重叠"，
      我一度当成缺陷、把它们改成 `max-width:767px`。
      **实测证明这样更差**：768px 下 major 页从"单栏舒展"变成"两栏拥挤"（标题折行、卡片高低不齐）。
      回看代码才明白：页面里改的是 `.container`，主题里改的是 `.pg-cols`，**是两个不同元素，
      在 768px 那一点上并不冲突** —— 我把"约定不一致"错当成了"规则打架"。
      ⇒ **已全部回滚。** 这三页保持"≤768 即单栏"，是有意的：它们在窄屏下需要整幅宽度放表格。
      ⇒ 剩下的只是**约定不一致**（同样 768px：这三页当手机、主题当桌面），不是 bug。
        真要统一，得先定"768 到底算手机还是平板"，再改设计——不是改个数字的事。

   ⚠️ 仍存在的**页面微调档**（club 700 / timeline 720 与 400 / campus 700 / transfer 600）：
      **故意保留，不强行收敛** —— 改它们会产生真实视觉变化，而我没有证据说明那是改进。
      谁要动，先在这几个宽度截图对比过再说。 */
@media (min-width:768px){
  .pg-body{font-size:15px}
  .pg-body .quota-table th,.pg-body .data-table th{font-size:var(--fs-sm)}
  .pg-body .quota-table td,.pg-body .data-table td{font-size:var(--fs-md)}
  .pg-body .info-box{font-size:var(--fs-md)}
  .pg-body .pg-li,.pg-body 	li{font-size:var(--fs-md)}
  .pg-body .t2xs,.pg-body .txs,.pg-body .txs-w{font-size:var(--fs-sm)}
  .pg-body .qs-item{font-size:var(--fs-md)}
  .pg-body .faq-q{font-size:15px}
  .pg-body .faq-a{font-size:var(--fs-md)}
}

/* ── 首页「专业查询」卡（2026-09-21）──
   索引在首页（pg-majors.js，3.7KB），点结果直达查询页对应专业。 */
.pg-mj-box{display:flex;align-items:center;gap:var(--gap);background:var(--card);
  border:1px solid var(--line2);border-radius:var(--r-md);padding:9px var(--gap-lg)}
.pg-mj-box:focus-within{border-color:var(--accent)}
.pg-mj-ico{font-size:15px;line-height:1;flex:0 0 auto;opacity:.75}
.pg-mj-input{flex:1;min-width:0;border:none;outline:none;background:transparent;
  font-size:var(--fs-md);color:var(--text);font-family:inherit}
.pg-mj-input::placeholder{color:var(--sub2)}
.pg-mj-clear{flex:0 0 auto;border:none;background:var(--brand-soft);color:var(--sub);
  width:22px;height:22px;border-radius:50%;cursor:pointer;font-size:var(--fs-md);line-height:1}
.pg-mj-hint{margin:var(--gap-md) 0 var(--gap-sm);font-size:var(--fs-xs);color:var(--sub)}
.pg-mj-hint a{color:var(--accent)}
.pg-mj-g{border-bottom:1px solid var(--line)}
.pg-mj-g>summary{list-style:none;cursor:pointer;padding:var(--gap-md) 0;display:flex;justify-content:space-between;
  align-items:center;font-size:var(--fs-sm);font-weight:600;color:var(--text)}
.pg-mj-g>summary::-webkit-details-marker{display:none}
.pg-mj-g>summary::after{content:"▾";color:var(--sub2);font-weight:400;margin-left:var(--gap)}
.pg-mj-g[open]>summary::after{content:"▴"}
.pg-mj-gn{font-size:var(--fs-2xs);color:var(--sub);font-weight:400;margin-left:auto;padding-right:var(--gap-sm)}
.pg-mj-gl{padding-bottom:var(--gap-sm)}
.pg-mj-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gap-sm);padding:var(--gap) 0;border-top:1px solid var(--line)}
.pg-mj-n{font-size:var(--fs-sm);color:var(--text);font-weight:600}
.pg-mj-c{font-size:var(--fs-2xs);color:var(--sub);margin-right:auto}
.pg-mj-b{font-size:var(--fs-2xs);text-decoration:none;padding:var(--gap-xs) var(--gap-md);border-radius:var(--r-pill);
  white-space:nowrap;border:1px solid transparent}
.pg-mj-b.is-m{background:var(--brand-soft);color:var(--accent)}
.pg-mj-b.is-c{background:var(--brand-soft);color:var(--accent)}
.pg-mj-b:hover{filter:brightness(.97)}
.pg-mj-tip{margin:var(--gap-md) 0 0;font-size:var(--fs-2xs);color:var(--sub2);line-height:1.6}
@media (min-width:768px){.pg-mj-input{font-size:15px}.pg-mj-n{font-size:var(--fs-md)}}

/* ── 补搬的三块（09-21）：学长有话说 / 学院联系人 ──
   .pg-tip.warn 已有样式，这里只补引用块和联系人。 */
.pg-quote{margin:var(--gap-md) 0;padding:var(--gap-lg) 14px;background:var(--brand-soft);
  border-left:3px solid var(--accent);border-radius:0 var(--r-sm) var(--r-sm) 0;
  font-size:var(--fs-sm);color:var(--text);line-height:1.75}
.pg-contact{margin:var(--gap-lg) 0 0;padding-top:var(--gap-md);border-top:1px solid var(--line);
  font-size:var(--fs-2xs);color:var(--sub);line-height:1.7}
@media (min-width:768px){.pg-quote{font-size:var(--fs-md)}.pg-contact{font-size:var(--fs-sm)}}

/* ── 福利卡内容样式（2026-09-21 从 welfare.html 随迁，限定 .pg-body 内）──
   源页的 .w-card 等一律加 pg- 前缀，避免与首页其他卡打架。 */
.pg-fl-sub{margin:0 0 var(--gap-md);font-size:var(--fs-2xs);color:var(--sub)}
.pg-wc{background:var(--card2,var(--card));border:1px solid var(--line);border-radius:var(--r-md);
  padding:var(--gap-lg) var(--gap-xl);margin:var(--gap-lg) 0}
.pg-wc-h{display:flex;align-items:center;gap:var(--gap-sm);flex-wrap:wrap;margin-bottom:var(--gap-sm)}
.pg-wc-ico{font-size:var(--fs-h2);line-height:1}
.pg-wc-h h2{font-size:var(--fs-lg);font-weight:800;color:var(--head);margin:0}
.pg-tt{font-size:var(--fs-2xs);font-weight:600;color:var(--yellow);background:var(--yellow-soft);
  border:1px solid var(--yellow-line);border-radius:var(--r-md);padding:var(--gap-2xs) 9px;white-space:nowrap}
.pg-tt.is-hot{color:var(--red);border-color:var(--red-line);background:var(--red-soft)}
.pg-wr{font-size:var(--fs-sm);color:var(--text);margin-top:var(--gap-sm);line-height:1.8}
.pg-wr b{color:var(--accent)}
.pg-wr ol,.pg-wr ul{padding-left:1.4em;margin:var(--gap-sm) 0 0}
.pg-wr li{margin-bottom:var(--gap-xs)}
.pg-ok{margin-top:var(--gap-sm);font-size:var(--fs-xs);color:var(--green);line-height:1.7}
.pg-warn{margin-top:var(--gap-sm);padding-left:1.2em;font-size:var(--fs-xs);color:var(--yellow);line-height:1.8}
.pg-warn li{margin-bottom:3px}
.pg-nl{text-align:center;font-size:var(--fs-xs);color:var(--sub);margin:var(--gap-lg) 0 var(--gap-sm);line-height:1.8}
.pg-ft{text-align:center;padding:var(--gap-lg) 0 0;margin-top:var(--gap-md);color:var(--sub2);
  font-size:var(--fs-2xs);border-top:1px solid var(--line)}
.pg-exp{margin:var(--gap-lg) 0}
.pg-exp-d{border:1px solid var(--line2);border-radius:var(--r-md);padding:0 var(--gap-lg);background:var(--bg)}
.pg-exp-d>summary{list-style:none;cursor:pointer;padding:var(--gap-md) 0;display:flex;align-items:center;
  gap:var(--gap-sm);flex-wrap:wrap;font-size:var(--fs-xs);color:var(--sub)}
.pg-exp-d>summary::-webkit-details-marker{display:none}
.pg-exp-d[open]>summary{border-bottom:1px solid var(--line)}
.pg-exp-b{font-size:var(--fs-2xs);font-weight:700;color:var(--sub2);background:var(--line);
  border-radius:var(--r-md);padding:var(--gap-2xs) var(--gap);white-space:nowrap}
.pg-exp-body{padding-bottom:var(--gap-md)}
.pg-exp-note{font-size:var(--fs-xs);color:var(--sub);line-height:1.8;margin:var(--gap-md) 0}
@media (min-width:768px){.pg-wr{font-size:var(--fs-md)}.pg-warn,.pg-ok,.pg-exp-note{font-size:var(--fs-sm)}}

/* ── 问答卡补全的样式（2026-09-21 从 questions.html 随迁）──
   .group-title → .pg-gt，.ai-* → .pg-ai-*，全部限定在 .pg-body 内。 */
.pg-gt{display:flex;align-items:baseline;gap:var(--gap-sm);flex-wrap:wrap;margin:var(--gap-xl) 0 var(--gap-sm);
  padding-bottom:var(--gap-sm);border-bottom:1px solid var(--line);font-size:var(--fs-md);font-weight:700;color:var(--head)}
.pg-gt span{font-size:var(--fs-2xs);color:var(--sub);font-weight:400}
.pg-ai-box{margin:var(--gap-md) 0 0;padding:var(--gap-lg) var(--gap-xl);background:var(--brand-soft);
  border-radius:var(--r-md);border:1px solid var(--line2)}
.pg-ai-desc{margin:0 0 var(--gap-md);font-size:var(--fs-xs);color:var(--text);line-height:1.8}
.pg-ai-desc b{color:var(--accent)}
.pg-ai-item{background:var(--card);border:1px solid var(--line);border-radius:var(--r-sm);
  margin-bottom:var(--gap-sm);padding:0 var(--gap-lg)}
.pg-ai-item>summary{list-style:none;cursor:pointer;padding:var(--gap-md) 0;font-size:var(--fs-sm);
  font-weight:700;color:var(--text);display:flex;align-items:center;justify-content:space-between}
.pg-ai-item>summary::-webkit-details-marker{display:none}
.pg-ai-item>summary::after{content:"展开 ▾";font-size:var(--fs-2xs);color:var(--sub);font-weight:400}
.pg-ai-item[open]>summary::after{content:"收起 ▴"}
.pg-ai-pre{white-space:pre-wrap;word-break:break-word;background:var(--bg);border:1px dashed var(--line2);
  border-radius:var(--r-sm);padding:var(--gap-md);margin:0 0 var(--gap-md);font-size:var(--fs-2xs);
  line-height:1.75;color:var(--sub);font-family:var(--font);max-height:340px;overflow-y:auto}
.pg-ai-copy{display:block;width:100%;margin:0 0 var(--gap-md);padding:var(--gap-md);border:1px solid var(--accent);
  background:transparent;color:var(--accent);border-radius:var(--r-sm);font-size:var(--fs-xs);
  font-weight:700;cursor:pointer;font-family:inherit}
.pg-ai-copy:hover{background:var(--brand-soft)}
.pg-ai-copy.done{border-color:var(--green);color:var(--green)}
@media (min-width:768px){.pg-ai-pre{font-size:var(--fs-sm)}.pg-ai-desc{font-size:var(--fs-sm)}}

/* ── 社团卡补全的样式（2026-09-21 从 club.html 随迁，限定 .pg-body 内）──
   原页的 .pick-bar 是「点一下筛选」，首页不做筛选 → 换成 .pg-club-goals 图文说明，
   不做假按钮（能点却没反应的按钮比没有更糟）。 */
.pg-club-hero{margin:0 0 var(--gap-md)}
.pg-club-hero h1{font-size:var(--fs-lg);font-weight:800;color:var(--head);margin:0 0 var(--gap-xs)}
.pg-club-hero p{margin:0;font-size:var(--fs-xs);color:var(--sub)}
.pg-club-strip{display:flex;gap:var(--gap-sm);flex-wrap:wrap;margin:0 0 var(--gap-md)}
.pg-club-st{flex:1 1 120px;background:var(--brand-soft);border-radius:var(--r-sm);padding:9px var(--gap-lg);text-align:center}
.pg-club-st b{display:block;font-size:var(--fs-md);color:var(--accent);font-weight:800}
.pg-club-st span{font-size:var(--fs-2xs);color:var(--sub)}
.pg-club-pick{margin:0 0 var(--gap-md)}
.pg-club-pick-t{font-size:var(--fs-sm);font-weight:700;color:var(--text);margin-bottom:var(--gap-sm)}
.pg-club-pick-t small{font-weight:400;color:var(--sub);font-size:var(--fs-2xs);margin-left:var(--gap-sm)}
.pg-club-goals{display:grid;grid-template-columns:1fr;gap:var(--gap-sm)}
.pg-club-goal{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--gap);padding:var(--gap) var(--gap-md);
  background:var(--bg);border-radius:var(--r-sm);font-size:var(--fs-xs)}
.pg-club-goal b{color:var(--text);font-weight:700;flex:0 0 auto}
.pg-club-goal span{color:var(--accent);font-size:var(--fs-2xs)}
.pg-club-hint{margin:var(--gap-sm) 0 0;font-size:var(--fs-2xs);color:var(--sub2);line-height:1.7}
.pg-club-fold{border:1px solid var(--line2);border-radius:var(--r-md);background:var(--card);
  margin:var(--gap-md) 0;overflow:hidden}
.pg-club-fold>summary{list-style:none;cursor:pointer;padding:var(--gap-md) var(--gap-lg);
  font-size:var(--fs-sm);font-weight:600;color:var(--text);display:flex;align-items:center;gap:var(--gap)}
.pg-club-fold>summary::-webkit-details-marker{display:none}
.pg-club-fold>summary::after{content:"▾";margin-left:auto;color:var(--sub);font-size:var(--fs-2xs)}
.pg-club-fold[open]>summary::after{content:"▴"}
.pg-club-fold .fold-body,.pg-club-fold>div{padding:0 var(--gap-lg) var(--gap-lg);font-size:var(--fs-xs);
  color:var(--sub);line-height:1.85}
.pg-club-fold h4{font-size:var(--fs-xs);color:var(--accent);font-weight:700;margin:var(--gap-md) 0 var(--gap-sm)}
.pg-club-fold h4:first-child{margin-top:0}
.pg-club-fold strong{color:var(--text)}
.pg-club-fold .warn{color:var(--red);font-weight:600}
.pg-club-fold .li{padding-left:var(--gap-md);border-left:var(--gap-2xs) solid var(--brand-line);margin-bottom:var(--gap-sm)}
.pg-club-notes{margin:var(--gap-lg) 0 0;padding-top:var(--gap-md);border-top:1px solid var(--line);
  font-size:var(--fs-2xs);color:var(--sub);line-height:1.85}
@media (min-width:768px){.pg-club-strip{gap:var(--gap-md)}.pg-club-goal{font-size:var(--fs-sm)}}

/* ── 社团：你最想知道的六个问题（09-21 随迁）── */
.pg-club-gather{margin:var(--gap-md) 0;padding:var(--gap-lg) var(--gap-xl);background:var(--brand-soft);
  border-radius:var(--r-md)}
.pg-club-gather h3{margin:0 0 var(--gap-sm);font-size:var(--fs-md);font-weight:800;color:var(--head)}
.pg-club-ci{display:flex;flex-wrap:wrap;gap:var(--gap-sm);padding:7px 0;border-bottom:1px solid var(--line2)}
.pg-club-ci:last-of-type{border-bottom:none}
.pg-club-ci b{flex:0 0 auto;font-size:var(--fs-xs);color:var(--accent);font-weight:700}
.pg-club-ci span{font-size:var(--fs-xs);color:var(--sub);line-height:1.75;flex:1 1 200px}
.pg-club-ci strong{color:var(--text)}
.pg-club-gfoot{margin:var(--gap-md) 0 0;padding-top:var(--gap-sm);border-top:1px dashed var(--line2);
  font-size:var(--fs-2xs);color:var(--sub2);line-height:1.8}
.pg-club-gfoot strong{color:var(--accent)}
.pg-club-join{margin:var(--gap-md) 0;padding:11px 14px;background:var(--card);border:1px dashed var(--brand-line);
  border-radius:var(--r-md);font-size:var(--fs-xs);color:var(--sub);text-align:center}
.pg-club-join b{color:var(--accent)}

/* ── 时间线：⚡速查条（09-21 随迁）── */
.pg-tl-quick{margin:var(--gap-md) 0;padding:var(--gap-lg) var(--gap-xl);background:var(--brand-soft);
  border-radius:var(--r-md);border:1px solid var(--brand-line)}
.pg-tl-quick-t{font-size:var(--fs-sm);font-weight:800;color:var(--head);margin-bottom:var(--gap-sm)}
.pg-tl-kv div{font-size:var(--fs-xs);color:var(--text);line-height:1.9;padding-left:var(--gap-2xs)}
.pg-tl-kv strong{color:var(--accent)}
.pg-tl-legend{margin-top:var(--gap-sm);padding-top:var(--gap-sm);border-top:1px dashed var(--line2);
  font-size:var(--fs-2xs);color:var(--sub2)}
@media (min-width:768px){.pg-tl-kv div{font-size:var(--fs-sm)}}

/* ── AI 块「怎么用」说明（09-21：去掉复制按钮后改成长按/截图）── */
.pg-ai-how{margin:0 0 var(--gap-md);font-size:var(--fs-2xs);color:var(--sub);line-height:1.75}
.pg-ai-how b{color:var(--text)}

/* ── 四级报名卡（09-21 从 cet4-sprint.html 随迁）── */
.pg-c4-count{text-align:center;padding:var(--gap-lg) var(--gap-xl);background:var(--brand-soft);
  border-radius:var(--r-md);margin:0 0 var(--gap-md)}
.pg-c4-num{font-size:26px;font-weight:800;color:var(--accent);line-height:1.2}
.pg-c4-num small{font-size:var(--fs-xs);font-weight:600;margin-left:var(--gap-2xs)}
.pg-c4-cap{margin-top:var(--gap-sm);font-size:var(--fs-xs);color:var(--sub)}
.pg-c4-count.is-over{background:var(--red-soft)}
.pg-c4-count.is-over .pg-c4-num{color:var(--red)}
.pg-c4-card{background:var(--card2,var(--card));border:1px solid var(--line);border-radius:var(--r-md);
  padding:var(--gap-lg) var(--gap-xl);margin:0 0 var(--gap-md)}
.pg-c4-card h2{margin:0 0 var(--gap-sm);font-size:var(--fs-md);font-weight:800;color:var(--head)}
.pg-c4-card ul{margin:0;padding-left:1.2em}
.pg-c4-card li{font-size:var(--fs-sm);color:var(--text);line-height:1.8;margin-bottom:var(--gap-xs)}
.pg-c4-card.is-over{border-color:var(--red-line)}
.pg-c4-hl{color:var(--accent);font-weight:600}
.pg-c4-sub{margin:var(--gap-sm) 0 0;font-size:var(--fs-2xs);color:var(--sub)}
.pg-c4-sub a{color:var(--accent)}
.pg-c4-cross{margin:var(--gap-lg) 0 0;text-align:center;font-size:var(--fs-xs);color:var(--sub)}
.pg-c4-cross a{color:var(--accent)}
.pg-body .pg-ft{margin-top:var(--gap-lg)}
@media (min-width:768px){.pg-c4-card li{font-size:var(--fs-md)}.pg-c4-num{font-size:30px}}

/* ── 「以后再看」卡（09-21 收薄）── */
.pg-later-note{margin:0 0 var(--gap-md);font-size:var(--fs-sm);color:var(--text);line-height:1.8}
.pg-later-list{margin:0 0 var(--gap-lg);padding-left:1.2em}
.pg-later-list li{font-size:var(--fs-xs);color:var(--sub);line-height:1.9;margin-bottom:var(--gap)}
.pg-later-list b{color:var(--text)}

/* ══════════════════════════════════════════════════════════
   手机排版修复（2026-09-21 城棋反馈：字太小 / 挤 / 点不准）

   诊断（实测，非推测）：手机上最小字号算到 **7.46px**：
     SECTION 13px → .page-foot ×.75em(9.75) → TD ×.9em(8.775) → .diff-* ×.85em(7.46)
   **根因是 .page-foot 用了 .75em** —— 它本该是"页脚"（该小），
   但从转专业页搬过来时它**包住了整块内容**，于是把里面所有文字一起缩小。
   可点区域也有 168 处 < 40px（热门词胶囊仅 25px 高）。

   办法：把"已知会缩的容器/元素"钉成固定值（不再用 em 连锁），
        触控目标抬到 40–44px。**只作用于 ≤767px，桌面端不受影响。**
   ══════════════════════════════════════════════════════════ */
@media (max-width:767px) {
  /* ── 字号钉死（覆盖 .75em/.9em/.85em 的连锁缩小）──
     选择器特异性 0,2,x 高于单独的 .diff-* / td，所以能覆盖住。 */
  .pg-body .page-foot, .pg-body .page-foot * { font-size: var(--fs-sm); line-height: 1.75; }
  .pg-body .page-foot h1, .pg-body .page-foot h2, .pg-body .page-foot h3,
  .pg-body .page-foot .blk > h3 { font-size: 15px; }
  .pg-body table, .pg-body th, .pg-body td { font-size: var(--fs-xs); }
  .pg-body th { font-size: var(--fs-xs); }
  .pg-body .diff-easy, .pg-body .diff-mid, .pg-body .diff-hard { font-size: var(--fs-xs); font-weight: 600; }
  .pg-body .blk h3, .pg-body .blk > h3 { font-size: var(--fs-md); }
  .pg-body .exp-note, .pg-body .exp-hint, .pg-body .exp-badge,
  .pg-body .arch-note, .pg-body .tag { font-size: var(--fs-xs); }
  .pg-body .qs-item, .pg-body .qs-item strong, .pg-body .quota-summary { font-size: var(--fs-xs); }
  .pg-body .quota-num { font-size: var(--fs-xs); font-weight: 700; }
  .pg-body .pg-warn, .pg-body .pg-ok, .pg-body .pg-nl, .pg-body .pg-ft,
  .pg-body .pg-exp-note, .pg-body .pg-c4-sub, .pg-body .pg-c4-cross { font-size: var(--fs-xs); }
  .pg-body .pg-c4-card li, .pg-body .pg-wr, .pg-body .pg-club-ci span,
  .pg-body .pg-club-ci b, .pg-body .pg-later-list li { font-size: var(--fs-sm); }
  /* 课表那种密排小字给个能看清的下限 */
  .pg-body .schedule, .pg-body .schedule *, .pg-body [class*="timetable"] * { font-size: var(--fs-xs); }

  /* ── 触控目标抬高（手指点不准）──
     行内链接（句子里的"→"）不按 44px 要求 —— 那是行文的一部分，拉大反而破坏排版；
     这里只管"独立可点的控件"。 */
  .ss-home-btn { min-width: 44px; min-height: 44px; }
  .ss-home-chip { min-height: 36px; padding: 0 14px; display: inline-flex; align-items: center; }
  .pg-nav-btn { min-height: 44px; padding-top: var(--gap-md); padding-bottom: var(--gap-md); }
  .pg-fab-main { min-width: 52px; min-height: 52px; }
  .pg-fab-item { min-width: 44px; min-height: 44px; }
  .pg-fold > summary { min-height: 52px; padding-top: var(--gap-lg); padding-bottom: var(--gap-lg); }
  .pg-qa > summary, .pg-club-fold > summary, .pg-ai-item > summary,
  .pg-exp-d > summary, .pg-mj-g > summary { min-height: 44px; }
  .pg-ai-copy, .pg-mj-item, .pg-club-item { min-height: 36px; }
  .quota-tab { min-height:var(--gap-5xl); padding: var(--gap) 14px; }
  .pg-mj-go, .pg-mj-item a { min-height:var(--gap-4xl); display: inline-flex; align-items: center; }

  /* ── 挤：给正文加点呼吸 ── */
  .pg-body p, .pg-body li { line-height: 1.8; }
  .pg-body ul, .pg-body ol { padding-left: 1.25em; }
  .pg-wc, .pg-c4-card { padding: 14px var(--gap-xl); }
}

/* ══════════════════════════════════════════════════════════
   手机排版修复 · 第二轮（2026-09-21，复测后补漏）
   ① .page-foot 这类"搬来的容器"**不在 .pg-body 里**，第一轮的选择器没匹配到 → 去掉限制
   ② .ss-home-btn 被 search.js 里特异性更高的规则盖住 → 用同级选择器压回去
   ③ .ni 提示条只有 20px、行内链接 17–19px → 用负 margin 的 padding 扩大点击区
      （**不改外观，只让手指更容易点到** —— 这是行内元素的标准做法）
   ══════════════════════════════════════════════════════════ */
@media (max-width:767px) {
  /* ① 搬来的容器：不限 .pg-body（它们可能落在卡里任何位置） */
  .page-foot, .page-foot * { font-size: var(--fs-sm); line-height: 1.75; }
  .page-foot h1, .page-foot h2, .page-foot h3 { font-size: 15px; }
  .page-foot .blk > h3 { font-size: 15px; }
  .page-foot table, .page-foot th, .page-foot td { font-size: var(--fs-xs); }
  .page-foot .diff-easy, .page-foot .diff-mid, .page-foot .diff-hard { font-size: var(--fs-xs); }
  .f-dim, .yl-sm, .badge, .foot-tip, .arch-note, .exp-note, .exp-hint, .tag,
  .qs-item, .qs-item strong, .quota-summary, .quota-num { font-size: var(--fs-xs); }
  .pg-body .blk h3, .blk h3 { font-size: var(--fs-md); }

  /* ② 首页搜索按钮 —— ⚠️ 必须 !important：
        search.js 是**后加载**的，它写的 `body:not([data-page]) .ss-home .ss-home-btn{...}`
        与下面这条同级，后加载者赢 → 不加 !important 会一直是 38px（实测踩过）。 */
  body:not([data-page]) .ss-home .ss-home-btn { min-width: 44px !important; min-height: 44px !important; }
  .ss-home-btn { min-width: 44px; min-height: 44px; }
  .ss-home-chip { min-height:var(--gap-5xl); }

  /* ③ 行内可点元素：用 padding + 负 margin 扩大命中区，外观不变 */
  .ni { padding:var(--gap-md) var(--gap-xs); margin: -10px -4px; }
  .pg-body a:not(.pg-nav-btn):not(.pg-mj-go), .pg-body summary a { padding: var(--gap-sm) var(--gap-2xs); margin: -6px -2px;
  }
  .pg-body .pg-fold-d + a, .pg-body a.em { padding: var(--gap) 3px; margin: -8px -3px; }
}

/* 09-23：输入框在手机上抬到 16px —— iOS 对 <16px 的输入框聚焦时会自动放大页面，
   在 0.75 缩放下这个跳变特别明显（影响"操作方便"）。桌面不受影响（只在 ≤767 生效）。 */
@media (max-width:767px){ .pg-mj-input{font-size:16px} }

/* ── 吸顶标题条（首页卡片形态的特例，2026-09-23 补）──
   上面的 .pg-fold[open]>summary 吸顶，在「独立折叠卡」上天然占满卡宽；
   首页的折叠卡套在 .card 里（自身 padding 2px 18px 8px），吸顶条若不扩展，
   左右会露出底下滚过的内容。这里用负 margin 抵消卡片内边距（数值与 .card 一致），
   并加一道浅阴影把吸顶条和滚过的内容分开。 */
.card.pg-fold-card>.pg-fold[open]>summary{
  margin-left:-18px;margin-right:-18px;padding-left:18px;padding-right:18px;
  box-shadow:0 6px 14px rgba(var(--shadow-rgb),.10)}
