/* ==========================================================================
   圆圈网 · 公共组件样式（依赖 tokens.css）
   --------------------------------------------------------------------------
   包含：重置 / 版心 / 按钮 / 徽章 / 导航 / 区块标题 / 课程卡 /
         面包屑 / 分页 / 订阅 CTA / 页脚
   页面私有样式写在各自 HTML 的 <style> 里。
   ========================================================================== */

/* ---------- 重置 ---------- */
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-font-smoothing:antialiased;scroll-behavior:smooth}
body{
  font-family:var(--font-sans);
  background:var(--paper);
  color:var(--text);
  font-size:var(--fs-base);
  line-height:var(--lh-body);
}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
button{font:inherit;color:inherit;background:none;border:none;cursor:pointer}
::selection{background:rgba(var(--rgb-blue),.28)}

/* ---------- 版心 / 工具类 ---------- */
.wrap{max-width:var(--wrap-max);margin:0 auto;padding:0 var(--wrap-pad)}
.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.mono{font-family:var(--font-mono)}
.spectrum{height:3px;background:var(--spectrum)}

/* ---------- 按钮 ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--gap-sm);
  padding:9px 18px;border-radius:var(--r-sm);border:1px solid transparent;
  font-size:var(--fs-base);font-weight:600;white-space:nowrap;
  transition:var(--t-fast);cursor:pointer;
}
/* 主按钮：品牌蓝实心 + 深墨字。
   蓝色亮度高，白字对比度只有 2.1:1，所以文字必须反着用深色（7.1:1）。 */
.btn-primary{
  background:linear-gradient(135deg,var(--brand-blue),var(--brand-blue-dp));
  color:var(--on-brand);font-weight:800;letter-spacing:.01em;
  box-shadow:0 6px 20px -8px rgba(var(--rgb-blue),.95), inset 0 1px 0 rgba(255,255,255,.36);
}
.btn-primary:hover{
  background:linear-gradient(135deg,var(--brand-blue-dp),var(--brand-blue-dp2));
  box-shadow:0 8px 26px -8px rgba(var(--rgb-blue),1), inset 0 1px 0 rgba(255,255,255,.44);
}
.btn-ghost{color:var(--on-ink-2);border-color:var(--line-ink);background:transparent}
.btn-ghost:hover{border-color:var(--brand-blue);color:var(--brand-blue)}
.btn-line{background:var(--surface);border-color:var(--line-2);color:var(--text)}
.btn-line:hover{border-color:rgba(var(--rgb-blue),.6);color:var(--link)}
.btn-dark{background:var(--ink);color:#fff;border-color:var(--ink)}
.btn-dark:hover{background:var(--ink-2)}
/* 危险按钮：红色唯一的按钮级出场机会（删除、清空、退出等） */
.btn-danger{background:var(--danger);color:#fff;font-weight:700;
  box-shadow:0 6px 18px -8px rgba(var(--rgb-red),.8)}
.btn-danger:hover{background:var(--danger-hover);box-shadow:0 8px 22px -8px rgba(var(--rgb-red),.9)}
.btn-lg{padding:12px 24px;border-radius:var(--r-md);font-size:var(--fs-md)}
.btn-sm{padding:6px 12px;border-radius:var(--r-xs);font-size:var(--fs-sm)}
.btn-block{width:100%}
.btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}

/* ---------- 徽章 / 标签 ---------- */
.badge{
  display:inline-flex;align-items:center;gap:5px;
  font-size:var(--fs-xs);font-weight:700;letter-spacing:.03em;
  padding:3.5px 9px;border-radius:var(--r-xs);
  background:rgba(10,19,32,.72);color:#D6E4F2;border:1px solid rgba(255,255,255,.14);
  backdrop-filter:blur(6px);
}
.badge.free{background:var(--brand-lime);color:var(--on-lime);border-color:transparent;
  box-shadow:0 2px 10px -2px rgba(var(--rgb-lime),.8)}
/* 热门 = 推荐，用主导色蓝；红不再用于任何营销标记 */
.badge.hot{background:var(--brand-blue);color:var(--on-brand);border-color:transparent;
  box-shadow:0 2px 10px -2px rgba(var(--rgb-blue),.8)}
.badge.new{background:rgba(10,19,32,.72);color:#D6E4F2;border-color:rgba(255,255,255,.2)}
/* Pro 会员门禁标识：与顶部导航右侧的会员标签同色（柠檬绿底 + 墨绿字） */
.badge.pro{background:var(--brand-lime);color:var(--on-lime);border-color:transparent;
  font-weight:700;letter-spacing:.02em;
  box-shadow:0 2px 12px -4px rgba(var(--rgb-lime),.55)}

.chip{
  display:inline-flex;align-items:center;
  font-size:var(--fs-xs);padding:2px 7px;border-radius:var(--r-xs);
  background:var(--surface-2);color:var(--text-2);border:1px solid var(--line);
}
.chip.b{background:var(--tint-blue);color:var(--link);border-color:var(--tint-blue-2)}
.chip.g{background:var(--tint-lime);color:var(--ok);border-color:var(--tint-lime-2)}
/* 品牌红：只作分类标识的浅底深字，不做按钮/营销 */
.chip.r{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-line)}
.chip.danger{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-line)}

/* 难度：低=绿、中=蓝、高=深墨。难度不是错误，不用红 */
.diff{padding:1px 6px;border-radius:4px;font-size:var(--fs-2xs)}
.diff.d0{background:var(--tint-lime);color:var(--ok)}
.diff.d1{background:var(--tint-blue);color:var(--link)}
.diff.d2{background:#E4E9F0;color:var(--text-2)}

/* ---------- 导航（用 .site-nav 避开 Bootstrap 的 .nav{display:flex}） ---------- */
.site-nav{
  position:sticky;top:0;z-index:80;
  background:rgba(10,19,32,.94);
  backdrop-filter:saturate(140%) blur(14px);
  -webkit-backdrop-filter:saturate(140%) blur(14px);
  transition:box-shadow var(--t-base);
}
.site-nav.scrolled{box-shadow:0 1px 0 rgba(255,255,255,.07), 0 8px 24px -12px rgba(0,0,0,.6)}
.site-nav .nav-inner{display:flex;align-items:center;height:var(--nav-h)}
.brand{display:flex;align-items:center;gap:11px;flex:0 0 auto}
.brand img{height:42px;width:auto;filter:drop-shadow(0 0 16px rgba(var(--rgb-blue),.26))}
.brand b{color:#fff;font-size:var(--fs-lg);font-weight:800;letter-spacing:.03em;line-height:1}
.nav-links{display:flex;gap:2px;margin-left:44px}
.nav-links a{
  color:var(--on-ink-3);font-size:var(--fs-md);padding:9px 14px;border-radius:var(--r-sm);
  transition:var(--t-fast);position:relative;
}
.nav-links a:hover{color:#fff;background:rgba(255,255,255,.06)}
.nav-links a.active{color:var(--brand-blue)}
.nav-links a.active::after{
  content:"";position:absolute;left:14px;right:14px;bottom:0;height:2px;border-radius:2px;
  background:var(--brand-blue);box-shadow:0 0 10px rgba(var(--rgb-blue),.9);
}
.nav-right{margin-left:auto;display:flex;align-items:center;gap:11px}

/* ---------- 导航内全站搜索 ---------- */
/* 桌面：胶囊输入框，聚焦时拉宽；移动端：换成图标按钮跳 /search/，不占导航宽度 */
.nav-search{position:relative;display:flex;align-items:center;margin-right:2px}
.nav-search input{
  width:150px;height:32px;padding:0 12px 0 31px;border-radius:99px;
  border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);
  color:#fff;font-size:var(--fs-sm);outline:none;
  transition:width var(--t-base),border-color var(--t-fast),background var(--t-fast);
}
.nav-search input::placeholder{color:rgba(255,255,255,.38)}
.nav-search input:focus{
  width:196px;border-color:rgba(var(--rgb-blue),.85);background:rgba(255,255,255,.09);
}
.nav-search button{
  position:absolute;left:5px;width:24px;height:24px;display:grid;place-items:center;
  margin:0;padding:0;border:0;background:none;color:var(--on-ink-3);cursor:pointer;
}
.nav-search button:hover{color:#fff}
.nav-search-link{
  display:none;width:34px;height:34px;place-items:center;border-radius:50%;
  color:var(--on-ink-3);transition:var(--t-fast);
}
.nav-search-link:hover{color:#fff;background:rgba(255,255,255,.08)}
/* 1100 及以下收成图标：这个宽度区间里五个导航项 + 登录/订阅已经占满，
   再塞 150px 输入框会把导航挤到换行。图标点进 /search/ 再输入。 */
@media (max-width:1100px){
  .nav-search{display:none}
  .nav-search-link{display:grid}
}

/* ---------- 区块标题 ---------- */
.sec{padding:var(--gap-4xl) 0}
.sec + .sec{border-top:1px solid var(--line)}
.sec-head{display:flex;align-items:flex-end;gap:var(--gap-xl);margin-bottom:var(--gap-2xl)}
.sec-title{display:flex;align-items:baseline;gap:var(--gap-md)}
.sec-idx{
  font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text-3);
  letter-spacing:.1em;padding-bottom:4px;
}
.sec-title h2{font-size:var(--fs-2xl);font-weight:800;letter-spacing:-.02em;line-height:var(--lh-tight)}
.sec-desc{color:var(--text-2);font-size:var(--fs-base);margin-top:var(--gap-xs);margin-left:36px}
.sec-head.no-idx .sec-desc{margin-left:0}
.sec-more{margin-left:auto;display:flex;align-items:center;gap:var(--gap-md);padding-bottom:3px;flex:0 0 auto}
.sec-more .cnt{color:var(--text-3);font-size:var(--fs-sm);font-family:var(--font-mono)}
.sec-more a{color:var(--link);font-size:var(--fs-base);font-weight:600;white-space:nowrap}
.sec-more a:hover{color:var(--link-hover)}

/* ---------- 课程卡（首页 / 列表页 / 相关推荐共用） ---------- */
.course{display:flex;flex-direction:column}
.course-cover{
  position:relative;border-radius:var(--r-md);overflow:hidden;aspect-ratio:4/3;
  background:linear-gradient(135deg,var(--cover-deep),var(--cover-2));
  box-shadow:var(--sh-2);transition:transform var(--t-base),box-shadow var(--t-base);
}
.course:hover .course-cover{transform:translateY(-4px);box-shadow:var(--sh-3)}
.course-cover img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.course:hover .course-cover img{transform:scale(1.045)}
.course-cover::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(10,19,32,0) 52%,rgba(10,19,32,.62) 100%);
}
.cover-tags{position:absolute;top:11px;left:11px;right:11px;z-index:2;display:flex;gap:var(--gap-xs);flex-wrap:wrap}
.cover-foot{
  position:absolute;left:14px;right:14px;bottom:12px;z-index:2;
  display:flex;align-items:center;justify-content:space-between;color:#fff;
}
.cover-foot .ch{font-family:var(--font-mono);font-size:var(--fs-xs);color:rgba(255,255,255,.86)}
/* 封面锁标：锁定是"未解锁"，不是错误，用中性玻璃 + 蓝边 */
.cover-foot .lock{
  font-size:var(--fs-xs);color:var(--on-cover-lock);background:rgba(10,19,32,.55);
  border:1px solid rgba(var(--rgb-blue),.5);padding:2px 8px;border-radius:var(--r-xs);
  backdrop-filter:blur(4px);
}
.course-body{padding:15px 2px 0;display:flex;flex-direction:column;flex:1}
.course-body h3{font-size:var(--fs-lg);font-weight:700;letter-spacing:-.01em;line-height:var(--lh-snug)}
.course-body h3 a:hover{color:var(--link)}
.course-body p{
  color:var(--text-2);font-size:var(--fs-base);margin-top:7px;line-height:var(--lh-body);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.course-meta{display:flex;align-items:center;gap:var(--gap-md);margin-top:11px;color:var(--text-3);font-size:var(--fs-sm)}
.course-meta .dot{width:3px;height:3px;border-radius:50%;background:var(--line-2)}
.course-meta .n{font-family:var(--font-mono)}

/* ---------- 网格 ---------- */
.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gap-2xl)}
.grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--gap-xl)}

/* ---------- 工作流卡（首页 / 详情页共用） ---------- */
.wf{display:flex;flex-direction:column;height:100%}
.wf-cover{
  position:relative;border-radius:var(--r-sm);overflow:hidden;aspect-ratio:16/10;
  background:var(--cover-deep);border:1px solid var(--line);
  box-shadow:var(--sh-1);transition:transform .22s ease,box-shadow .22s ease;
}
.wf:hover .wf-cover{transform:translateY(-3px);box-shadow:var(--sh-2)}
.wf-cover img{width:100%;height:100%;object-fit:contain;transition:transform .45s ease}
.wf:hover .wf-cover img{transform:scale(1.05)}
.wf-flag{
  position:absolute;top:9px;left:9px;z-index:2;font-size:var(--fs-2xs);font-weight:800;
  padding:3px 8px;border-radius:var(--r-xs);letter-spacing:.04em;
}
.wf-flag.hot{background:var(--brand-blue);color:var(--on-brand)}
.wf-flag.new{background:var(--brand-lime);color:var(--on-lime)}
.wf-body{padding:13px 1px 0;display:flex;flex-direction:column;flex:1}
.wf-body h3{
  font-size:var(--fs-md);font-weight:700;line-height:var(--lh-snug);min-height:2.84em;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.wf-body h3 a:hover{color:var(--link)}
.wf-tags{display:flex;gap:var(--gap-xs);margin-top:var(--gap-sm);flex-wrap:wrap}
.wf-foot{display:flex;align-items:center;gap:var(--gap-md);margin-top:auto;padding-top:var(--gap-md);
  color:var(--text-3);font-size:var(--fs-xs)}
.wf-foot .n{font-family:var(--font-mono)}

/* ---------- 面包屑 ---------- */
.crumbs{display:flex;align-items:center;gap:var(--gap-sm);font-size:var(--fs-xs);color:var(--on-ink-4);flex-wrap:wrap}
.crumbs a{transition:var(--t-fast)}
.crumbs a:hover{color:var(--brand-blue)}
.crumbs .sep{opacity:.45}
.crumbs.light{color:var(--text-3)}
.crumbs.light a:hover{color:var(--link)}

/* ---------- 分页 ---------- */
.pager{display:flex;align-items:center;justify-content:center;gap:var(--gap-xs);margin-top:var(--gap-3xl)}
.pager a,.pager span{
  min-width:38px;height:38px;padding:0 11px;display:inline-flex;align-items:center;justify-content:center;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);
  font-size:var(--fs-base);color:var(--text-2);font-family:var(--font-mono);transition:var(--t-fast);
}
.pager a:hover{border-color:rgba(var(--rgb-blue),.6);color:var(--link)}
.pager .on{background:var(--ink);border-color:var(--ink);color:#fff;font-weight:700}
.pager .dis{opacity:.4;pointer-events:none}

/* ---------- 订阅 CTA ---------- */
.cta{background:var(--ink);position:relative;overflow:hidden}
.cta::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(100deg,
      rgba(var(--rgb-blue),.20) 0%,
      rgba(var(--rgb-blue),.07) 38%,
      rgba(var(--rgb-lime),.06) 66%,
      rgba(var(--rgb-lime),.18) 100%),
    radial-gradient(72% 230% at -6% 0%, rgba(var(--rgb-blue),.40), transparent 64%),
    radial-gradient(72% 230% at 106% 0%, rgba(var(--rgb-lime),.30), transparent 64%);
}
.cta-inner{position:relative;z-index:1;display:flex;align-items:center;gap:var(--gap-4xl);padding:var(--gap-4xl) 0}
.cta h2{color:#fff;font-size:var(--fs-3xl);font-weight:800;letter-spacing:-.02em;line-height:var(--lh-tight)}
.cta p{color:var(--on-ink-2);font-size:var(--fs-md);margin-top:var(--gap-sm);max-width:540px}
.cta-list{display:flex;gap:var(--gap-xl);margin-top:var(--gap-lg);flex-wrap:wrap}
.cta-list span{color:var(--on-ink-2);font-size:var(--fs-sm);display:flex;align-items:center;gap:var(--gap-xs)}
.cta-list span::before{content:"✓";color:var(--brand-lime);font-weight:800;font-size:var(--fs-xs)}
.cta-actions{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:var(--gap-md);flex:0 0 auto}
.cta-price{color:#fff;font-family:var(--font-mono);line-height:1}
.cta-price b{font-size:38px;font-weight:700;letter-spacing:-.03em}
.cta-price span{color:var(--on-ink-4);font-size:var(--fs-base);margin-left:4px}
.cta-note{color:var(--on-ink-4);font-size:var(--fs-xs)}

/* ---------- 页脚 ---------- */
footer{background:var(--ink-foot);color:var(--foot-text);font-size:var(--fs-base);position:relative;padding:var(--gap-4xl) 0 var(--gap-2xl)}
footer::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--spectrum);opacity:.6}
.foot-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:var(--gap-3xl)}
.foot-brand .fb-row{display:flex;align-items:center;gap:var(--gap-md);margin-bottom:13px}
.foot-brand .fb-row img{height:31px;width:auto}
.foot-brand .fb-row b{color:var(--foot-brand);font-size:var(--fs-lg);font-weight:800;letter-spacing:.02em}
.foot-brand p{color:var(--foot-soft);font-size:var(--fs-sm);max-width:280px;line-height:var(--lh-body)}
.foot-col h4{color:var(--foot-head);font-size:var(--fs-sm);font-weight:700;letter-spacing:.1em;
  margin-bottom:13px;font-family:var(--font-mono)}
.foot-col a{display:block;color:var(--foot-text);font-size:var(--fs-base);padding:5px 0;transition:var(--t-fast)}
.foot-col a:hover{color:var(--brand-blue)}
.foot-bot{
  display:flex;justify-content:space-between;align-items:center;gap:var(--gap-xl);flex-wrap:wrap;
  margin-top:var(--gap-3xl);padding-top:var(--gap-xl);border-top:1px solid rgba(255,255,255,.07);
  color:var(--foot-dim);font-size:var(--fs-sm);
}
.foot-mark{display:inline-flex;gap:4px;margin-right:10px;vertical-align:middle}
.foot-mark i{width:6px;height:6px;border-radius:50%}
.foot-mark i:nth-child(1){background:var(--brand-blue)}
.foot-mark i:nth-child(2){background:var(--brand-lime)}
.foot-mark i:nth-child(3){background:var(--brand-red);opacity:.9}

/* ---------- 警示组件（红色唯一的使用场景） ---------- */
.alert{
  display:flex;align-items:flex-start;gap:var(--gap-md);
  padding:12px 14px;border-radius:var(--r-sm);font-size:var(--fs-base);line-height:var(--lh-body);
}
.alert-danger{background:var(--danger-bg);border:1px solid var(--danger-line);color:var(--danger)}
.alert-danger b{font-weight:700}
.alert-info{background:var(--tint-blue);border:1px solid var(--tint-blue-2);color:var(--link)}
.alert-ok{background:var(--tint-lime);border:1px solid var(--tint-lime-2);color:var(--ok)}

/* 表单错误态 */
.field-err{display:block;margin-top:6px;font-size:var(--fs-sm);color:var(--danger)}
.input.invalid{border-color:var(--danger-soft);background:var(--danger-bg)}
.input.invalid:focus{border-color:var(--danger);box-shadow:0 0 0 3px rgba(var(--rgb-red),.12)}

/* ---------- 响应式 ---------- */
@media (max-width:1100px){
  .grid-4{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:900px){
  .grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .foot-grid{grid-template-columns:1fr 1fr}
  .cta-inner{flex-direction:column;align-items:flex-start;gap:var(--gap-xl)}
  .cta-actions{margin-left:0;align-items:flex-start}
  /* 导航折叠阈值与 pages.css 的汉堡菜单保持一致，否则这段宽度会出现
     “导航项还在 + 汉堡也出来了”的双份菜单 */
  .nav-links{display:none}
}
@media (max-width:680px){
  .grid-3,.grid-4{grid-template-columns:1fr}
  .course-cover,.wf-cover{aspect-ratio:16/10}
  .site-nav .nav-inner{height:var(--nav-h)}
  .brand img{height:32px}
  .brand b{font-size:15px}
  .nav-right .btn-ghost{display:none}
  .sec{padding:38px 0}
  .sec-head{flex-wrap:wrap;gap:var(--gap-sm)}
  .sec-desc{margin-left:0;font-size:var(--fs-sm)}
  .sec-more{margin-left:0;padding-bottom:0;width:100%;justify-content:space-between}
  .foot-grid{grid-template-columns:1fr;gap:var(--gap-xl)}
  .cta h2{font-size:var(--fs-2xl)}
  .pager a,.pager span{min-width:34px;height:34px;font-size:var(--fs-sm)}
}
