/* ================================================================
   设计模式手册 · 页面样式（基于 style.css 的变量与基础组件）
   ================================================================ */

.dp-hero{background:linear-gradient(120deg,#312e81 0%,#6d28d9 55%,#a21caf 100%);
  box-shadow:0 16px 40px -18px rgba(109,40,217,.55)}

/* 侧栏分组 */
.nav-group-title{font-size:10.5px;letter-spacing:1.4px;color:#64748b;font-weight:800;
  padding:14px 12px 6px}
.nav-group-title:first-child{padding-top:0}
.nav-item.dp-nav-item .nav-ico{font-size:10.5px;font-weight:800;color:#94a3b8;width:24px;text-align:left}
.nav-item.dp-nav-item.active .nav-ico{color:#fff}
.nav-item.dp-nav-item.dim{opacity:.32}

/* 模式区块 */
.pattern-section{scroll-margin-top:84px;margin-bottom:34px}
.pattern-head{display:flex;align-items:flex-start;gap:13px;margin:4px 0 15px}
.pattern-no{flex:none;width:42px;height:42px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(135deg,#ede9fe,#fae8ff);color:#7c3aed;font-size:13px;font-weight:800;
  letter-spacing:-.5px}
.pattern-title{flex:1;min-width:0}
.pattern-title h3{font-size:20px;font-weight:800;line-height:1.35;display:flex;align-items:baseline;gap:9px;flex-wrap:wrap}
.pattern-en{font-size:12px;font-weight:700;color:#94a3b8;letter-spacing:.2px}
.pattern-title p{font-size:13.5px;color:var(--ink-3);margin-top:4px}
.pattern-group{flex:none;font-size:11.5px;font-weight:800;padding:3px 12px;border-radius:20px;margin-top:3px}
.pattern-group.g1{background:#ecfdf5;color:#059669}
.pattern-group.g2{background:#eff6ff;color:#2563eb}
.pattern-group.g3{background:#fff1f4;color:#e11d48}

/* 功能 / 使用方式卡片 */
.pattern-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.p-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:17px 19px;box-shadow:var(--shadow)}
.p-card h4{font-size:14.5px;color:var(--primary-dark);font-weight:800;margin-bottom:10px;
  display:flex;align-items:center;gap:7px}
.p-card h4::before{content:"";width:4px;height:15px;border-radius:2px;background:var(--primary);display:inline-block}
.p-problem{font-size:13.8px;color:var(--ink-2);line-height:1.75;margin-bottom:11px}
.p-chips{display:flex;flex-wrap:wrap;gap:6px}
.p-chips span{font-size:11.5px;font-weight:700;padding:2px 10px;border-radius:20px;
  background:#f1f5fb;color:var(--ink-3)}
.p-roles{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.p-roles span{font-size:12.8px;color:var(--ink-2);position:relative;padding-left:13px;line-height:1.6}
.p-roles span::before{content:"";position:absolute;left:0;top:.7em;width:5px;height:5px;border-radius:50%;background:#a78bfa}
.p-steps{margin:0 0 12px 18px;font-size:13px;color:var(--ink-2)}
.p-steps li{margin-bottom:3px;padding-left:2px}
.p-lists{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:10px}
.p-lists b{display:block;font-size:12px;font-weight:800;margin-bottom:3px}
.p-lists ul{margin:0 0 0 15px;font-size:12.2px;color:var(--ink-3);line-height:1.65}
.p-lists li{margin-bottom:2px}
.p-pros b{color:#059669}
.p-cons b{color:#d97706}
.p-tips{border-top:1px dashed var(--line);padding-top:9px;font-size:12.5px;color:var(--ink-3);line-height:1.7}
.p-tips span{display:block;position:relative;padding-left:13px}
.p-tips span::before{content:"•";position:absolute;left:0;color:#a78bfa;font-weight:800}

/* 代码卡片 */
.p-code-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:17px 19px;box-shadow:var(--shadow);margin-bottom:14px}
.p-code-card.real{border-color:#ddd6fe;background:linear-gradient(180deg,#fdfcff,#fff)}
.p-code-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px}
.p-code-head h4{font-size:14.5px;color:var(--primary-dark);font-weight:800;display:flex;align-items:center;gap:7px}
.p-code-head h4::before{content:"";width:4px;height:15px;border-radius:2px;background:#7c3aed;display:inline-block}
.p-code-tag{font-size:10.5px;font-weight:800;letter-spacing:.8px;color:#7c3aed;background:#f3e8ff;
  padding:2px 9px;border-radius:20px}
.p-code-card .code-block{margin:0}
.p-code-card .code-block pre{max-height:560px;overflow:auto}
.p-real-desc{font-size:13.2px;color:var(--ink-2);line-height:1.72;margin-bottom:10px}
.p-frameworks{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.p-frameworks span{font-size:11px;font-weight:700;padding:2px 9px;border-radius:20px;
  background:#f5f3ff;color:#6d28d9;border:1px solid #ede9fe}
.p-frameworks span::before{content:"◆ ";font-size:8px;color:#a78bfa}

/* 空态 */
.dp-no-result{display:none;text-align:center;padding:70px 20px;color:var(--ink-3)}
.dp-no-result svg{width:46px;height:46px;margin-bottom:12px;color:#cbd5e1}
.dp-no-result p{font-size:14px}

@media (max-width:1100px){
  .pattern-grid{grid-template-columns:1fr}
}
@media (max-width:960px){
  .pattern-title h3{font-size:17.5px}
  .pattern-group{margin-top:0}
  .pattern-grid{gap:12px}
  .p-card,.p-code-card{padding:15px 16px}
  .p-lists{grid-template-columns:1fr}
}
