/* ============ 通知中心：右下角弹窗 + 顶部待办角标 ============ */
/* ⚠️ bottom 走 --nt-safe-b（由 notify.js 按「赛博精灵」的实际位置算出来）：
   精灵 #cyber-sprite-root 的 z-index 是 99990，远高于本栈的 1150，且手机端
   .cs-fab 会从 bottom:92px 挪到 bottom:14px —— 正好压在栈底那张卡上，
   实测「不再提示」按钮中心被精灵 svg 命中（桌面则是第 3 张卡的 × 被 .cs-fab 命中）。
   层级不动（精灵本该在最上层），改由本栈让位：栈底抬到精灵顶之上，两矩形就不再相交。 */
.notify-stack{position:fixed;right:18px;bottom:var(--nt-safe-b,18px);z-index:1150;display:flex;flex-direction:column;gap:12px;
  width:min(340px,calc(100vw - 36px));pointer-events:none}
.ntoast{pointer-events:auto;background:var(--card);border:1px solid var(--border);border-left:4px solid var(--primary);
  border-radius:14px;box-shadow:0 16px 40px rgba(15,30,45,.16);padding:13px 14px;animation:ntIn .3s ease;overflow:hidden}
.ntoast.nt-hide{opacity:0;transform:translateX(14px);transition:.28s}
@keyframes ntIn{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}
.ntoast.t-system{border-left-color:var(--blue)}
.ntoast.t-points{border-left-color:var(--yellow)}
.ntoast.t-activity{border-left-color:#ec6fb0}
.nt-head{display:flex;align-items:center;gap:8px;font-size:14.5px}
.nt-ico{flex:0 0 auto}
.nt-title{flex:1;min-width:0;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nt-x{border:0;background:var(--border);color:var(--muted);width:22px;height:22px;border-radius:50%;
  cursor:pointer;font-size:15px;line-height:1;flex:0 0 auto}
.nt-x:hover{background:#f5c2c2;color:#b42318}
.nt-body{margin-top:7px;font-size:13px;line-height:1.7;color:var(--text);cursor:pointer}
.nt-go{display:inline-block;margin-top:6px;color:var(--primary);font-weight:600}
.nt-foot{margin-top:9px;text-align:right}
.nt-never{border:0;background:none;color:var(--muted);font-size:12px;cursor:pointer;font-family:inherit}
.nt-never:hover{color:var(--primary-deep);text-decoration:underline}
/* 「不再提示」提交失败（CSRF 过期等）时不可静默假成功，把按钮变成显式的重试入口 */
.nt-never.nt-fail{color:#b42318;font-weight:600;text-decoration:underline}
.nt-never:disabled{opacity:.6;cursor:wait}

/* 顶部铃铛角标 + 下拉 */
.head-bell{position:relative}
.hb-badge{position:absolute;top:-7px;right:-9px;min-width:18px;height:18px;padding:0 5px;border-radius:10px;
  background:#ef4444;color:#fff;font-size:11px;font-weight:700;line-height:18px;font-style:normal;text-align:center;
  box-shadow:0 2px 7px rgba(239,68,68,.42)}
.bell-menu{position:absolute;top:46px;right:0;z-index:60;width:280px;background:var(--card);border:1px solid var(--border);
  border-radius:14px;box-shadow:0 20px 48px rgba(15,30,45,.18);padding:10px;display:none}
.bell-menu.open{display:block;animation:ntIn .22s ease}
.bm-hd{font-size:14px;font-weight:600;padding:4px 8px 10px;display:flex;align-items:center;justify-content:space-between;
  border-bottom:1px solid var(--border)}
.bm-scope{font-size:11.5px;font-weight:400;color:var(--muted)}
.bm-list{display:flex;flex-direction:column;gap:2px;margin-top:6px}
.bm-item{display:flex;align-items:center;justify-content:space-between;padding:10px 9px;border-radius:10px;
  color:var(--text);font-size:13.5px;text-decoration:none}
.bm-item:hover{background:var(--primary-light)}
.bm-item em{font-style:normal;font-weight:700;color:#ef4444;background:#fdecec;border-radius:20px;padding:1px 10px;font-size:12.5px}
.bm-ft{margin-top:8px;padding-top:8px;border-top:1px solid var(--border);text-align:center}
.bm-ft a{font-size:13px;color:var(--primary)}

/* 折叠提示：条数超出当前视口的展示上限时，栈底给一行「还有 N 条」，点了展开全部 */
.nt-more{pointer-events:auto;background:none;border:0;padding:2px 4px;color:var(--muted);font-size:12px;
  font-family:inherit;cursor:pointer;text-align:center;text-decoration:underline dotted}
.nt-more:hover{color:var(--primary-deep)}
/* 展开到底后剩下的条数：静态说明（不是按钮，避免「点了没反应」） */
.nt-more-static{pointer-events:none;text-decoration:none;cursor:default;opacity:.85}

/* ⚠️ 手机端宽度**必须保留上限**：原来这里写的是 width:calc(100vw - 20px)，
   把桌面那条 min(340px,…) 的上限丢掉了 → 390 屏算出 370px，比桌面(340)还宽（占屏 95%），
   这就是「手机版弹窗太大」的直接成因。断点里只准收紧，不准放宽。 */
@media (max-width:680px){
  .notify-stack{right:12px;gap:8px;width:min(320px,calc(100vw - 36px))}
  .ntoast{padding:10px 12px;border-radius:12px;border-left-width:3px}
  .nt-head{font-size:13.5px;gap:6px}
  .nt-title{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .nt-x{width:20px;height:20px;font-size:14px}
  .nt-body{margin-top:5px;font-size:12.5px;line-height:1.6}
  .nt-go{margin-top:4px}
  .nt-foot{margin-top:6px}
  .nt-never{font-size:11.5px}
  .nt-more{font-size:11.5px}
  .bell-menu{right:-6px;width:248px}
}
