/* IP 检测三个分类页（2026-10-14）：结构见 php/PublicPages.php::checkPage()，检测界面由 ip-check.js 生成。
   在教程页外壳里引入，排在 home.css、articles.css 前面，所以选择器都带 .check-page，避免被后面的全局样式盖掉。
   状态色：正常绿、注意琥珀、风险红、提示蓝灰；风险分环低绿、中琥珀、高红，与首页重置雷达的档位色一致。 */
.check-page .ck-wrap{max-width:1180px;margin:0 auto;padding:clamp(18px,2.4vw,22px) clamp(14px,3vw,24px) 0}
.check-page .breadcrumb{margin-bottom:0}
.check-page .ck-head{margin-top:clamp(14px,2vw,22px)}
.check-page .ck-kicker{font:700 12.5px/1.4 'JetBrains Mono',monospace;color:#07734a}
.check-page .ck-head h1{margin-top:4px;font-size:clamp(30px,4vw,42px);letter-spacing:-.03em;line-height:1.15}
.check-page .ck-lede{margin-top:8px;max-width:820px;font-size:15px;line-height:1.7;color:#64726a}

.check-page .ck-tabs{display:flex;gap:4px;margin-top:20px;padding:6px;background:#fff;border:1px solid #e0e7e1;border-radius:12px;overflow-x:auto;scrollbar-width:none}
.check-page .ck-tabs::-webkit-scrollbar{display:none}
.check-page .ck-tabs a{flex:none;display:inline-flex;align-items:center;min-height:40px;padding:0 18px;border-radius:8px;font-size:14px;font-weight:700;color:#3c4740;text-decoration:none;white-space:nowrap}
.check-page .ck-tabs a:hover{background:#f4f7f4;color:#141a16}
.check-page .ck-tabs a.is-active{background:#07734a;color:#fff}

.check-page .ck-app{margin-top:16px;min-height:320px}
.check-page .ck-boot{padding:48px 20px;text-align:center;background:#fff;border:1px dashed #c9d3cc;border-radius:16px;font-size:14.5px;color:#64726a}

/* 顶部操作条 */
.check-page .ck-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px 16px}
.check-page .ck-state{display:inline-flex;align-items:center;gap:8px;font:700 13px/1.4 'JetBrains Mono',monospace;color:#3c4740}
.check-page .ck-state i{width:8px;height:8px;border-radius:50%;background:#0fa968;box-shadow:0 0 0 3px rgba(15,169,104,.16)}
.check-page .ck-app.is-running .ck-state i{background:#f2b33d;box-shadow:0 0 0 3px rgba(242,179,61,.2);animation:ck-pulse 1s ease-in-out infinite}
@keyframes ck-pulse{50%{opacity:.35}}
.check-page .ck-actions{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.check-page .ck-btn{min-height:38px;padding:0 16px;border:1px solid #07734a;border-radius:9px;background:#07734a;color:#fff;font-size:13.5px;font-weight:700;cursor:pointer}
.check-page .ck-btn:hover{background:#0fa968;border-color:#0fa968}
.check-page .ck-btn.is-ghost{background:#fff;color:#07734a;border-color:#cfe3d7}
.check-page .ck-btn.is-ghost:hover{border-color:#07734a;background:#f1f8f4}
.check-page .ck-btn:disabled{opacity:.5;cursor:default;pointer-events:none}

/* 风险分面板 */
.check-page .ck-summary{margin-top:14px;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:clamp(18px,3vw,36px);padding:clamp(20px,3vw,32px);border-radius:18px;color:#f5faf6;background-color:#141a16;background-image:linear-gradient(rgba(255,255,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px);background-size:30px 30px}
.check-page .ck-score{position:relative;width:clamp(128px,15vw,156px);aspect-ratio:1;--tc:#c6d1c9}
.check-page .ck-score.is-low{--tc:#5fdda2}.check-page .ck-score.is-mid{--tc:#f2b33d}.check-page .ck-score.is-high,.check-page .ck-score.is-fail{--tc:#ff7a5c}
.check-page .ck-ring{display:block;width:100%;height:100%}
.check-page .ck-ring-bg{fill:none;stroke:rgba(255,255,255,.1);stroke-width:10}
.check-page .ck-ring-fg{fill:none;stroke:var(--tc);stroke-width:10;stroke-linecap:round;transition:stroke-dashoffset .9s cubic-bezier(.22,.61,.36,1)}
/* 检测中：转整个 svg（按它自己的盒子取中心），不转里面的 circle——circle 的旋转中心按 viewBox 单位算，缩放后会偏，弧线就跑出轨道。 */
.check-page .ck-score.is-wait .ck-ring{animation:ck-spin 1s linear infinite}
.check-page .ck-score.is-wait .ck-ring-fg{stroke-dasharray:72 255;stroke-dashoffset:0}
.check-page .ck-score.is-fail .ck-ring-fg{stroke:none}
@keyframes ck-spin{to{transform:rotate(360deg)}}
.check-page .ck-score-num{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.check-page .ck-score-num strong{font:700 clamp(34px,4.4vw,44px)/1 'JetBrains Mono',monospace;color:var(--tc)}
.check-page .ck-score-num span{margin-top:6px;font-size:12.5px;color:#a8b3ab}
.check-page .ck-level{display:inline-block;padding:3px 10px;border-radius:999px;font:700 12.5px/1.5 'JetBrains Mono',monospace;color:#a8b3ab;background:rgba(255,255,255,.08)}
.check-page .ck-level.is-low{color:#5fdda2;background:rgba(95,221,162,.14)}
.check-page .ck-level.is-mid{color:#f2b33d;background:rgba(242,179,61,.14)}
.check-page .ck-level.is-high{color:#ff7a5c;background:rgba(255,122,92,.14)}
.check-page .ck-verdict h2{margin-top:10px;font-size:clamp(20px,2.6vw,26px);color:#f5faf6}
.check-page .ck-verdict-text{margin-top:6px;font-size:14.5px;line-height:1.7;color:#c6d1c9}
.check-page .ck-issues{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:8px}
.check-page .ck-issues li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;padding:10px 14px;border-radius:10px;background:rgba(255,255,255,.06);font-size:14px;line-height:1.6;color:#dfe7e2}
.check-page .ck-issues b{white-space:nowrap;color:#f2b33d}
.check-page .ck-issues li.is-risk b{color:#ff7a5c}

/* IP 卡片 */
.check-page .ck-cards{margin-top:14px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.check-page .ck-cards.is-four{grid-template-columns:repeat(4,minmax(0,1fr))}
.check-page .ck-card{min-width:0;padding:16px 18px;background:#fff;border:1px solid #e0e7e1;border-radius:14px}
.check-page .ck-card.is-main{border-color:#9fd9bd;box-shadow:inset 0 3px 0 #0fa968}
.check-page .ck-card-label{font-size:12.5px;font-weight:700;color:#64726a}
.check-page .ck-card-ip{margin-top:6px;display:flex;align-items:center;gap:8px;min-height:30px;font:700 clamp(17px,1.8vw,20px)/1.3 'JetBrains Mono',monospace;color:#141a16;overflow-wrap:anywhere}
.check-page .ck-card-ip .ck-ip{min-width:0}
.check-page .ck-card-ip.is-v6{font-size:15px}
.check-page .ck-card-meta{margin-top:4px;font-size:13px;line-height:1.55;color:#64726a;overflow-wrap:anywhere}
.check-page .ck-tag{flex:none;font:700 11px/1.4 'JetBrains Mono',monospace;padding:1px 6px;border-radius:5px;background:#e9efea;color:#3c4740}

/* 检测结论（IP 检测页） */
.check-page .ck-findings{margin-top:14px;padding:clamp(18px,2.4vw,24px);background:#fff;border:1px solid #e0e7e1;border-radius:16px}
.check-page .ck-findings h2{font-size:19px}
.check-page .ck-findings ul{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:8px}
.check-page .ck-findings li{position:relative;padding-left:20px;font-size:14.5px;line-height:1.7;color:#2c3630;overflow-wrap:anywhere}
.check-page .ck-findings li::before{content:"";position:absolute;left:2px;top:.62em;width:9px;height:9px;border-radius:50%;background:#a8b3ab}

/* 分区 */
.check-page .ck-sec{margin-top:clamp(22px,3vw,30px)}
.check-page .ck-sec-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px}
.check-page .ck-sec-head h2{font-size:clamp(19px,2.2vw,22px)}
.check-page .ck-sec-head p{font-size:13.5px;color:#8d9892}
.check-page .ck-slot{margin-top:12px}

/* 检测项 */
.check-page .ck-rows{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.check-page .ck-row{min-width:0;padding:14px 16px;background:#fff;border:1px solid #e0e7e1;border-left:4px solid #c9d3cc;border-radius:12px}
.check-page .ck-row-head{display:flex;align-items:center;gap:8px}
.check-page .ck-row-head h3{flex:1;min-width:0;font-size:15px;letter-spacing:0}
.check-page .ck-pts{font:700 12.5px/1 'JetBrains Mono',monospace;color:#b4472f}
.check-page .ck-chip{flex:none;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:700;line-height:1.4;background:#eef2ef;color:#64726a}
.check-page .ck-row-value{margin-top:6px;font-size:14px;line-height:1.6;color:#141a16;overflow-wrap:anywhere}
.check-page .ck-row-value a{color:#07734a;font-weight:700}
.check-page .ck-row-note{margin-top:4px;font-size:13px;line-height:1.6;color:#64726a}
.check-page .ck-row.is-ok,.check-page .ck-findings li.is-ok{border-left-color:#0fa968}
.check-page .ck-row.is-ok .ck-chip{background:#e3f5ec;color:#07734a}
.check-page .ck-row.is-warn{border-left-color:#f2b33d}
.check-page .ck-row.is-warn .ck-chip{background:#fdf2dc;color:#9a6a06}
.check-page .ck-row.is-risk{border-left-color:#e5533d}
.check-page .ck-row.is-risk .ck-chip{background:#fde8e4;color:#b4361f}
.check-page .ck-row.is-info .ck-chip{background:#e7eef6;color:#3d5a7a}
.check-page .ck-row.is-info{border-left-color:#8fa9c4}
.check-page .ck-row.is-wait .ck-chip{background:#f4f7f4;color:#8d9892}
.check-page .ck-findings li.is-ok::before{background:#0fa968}
.check-page .ck-findings li.is-warn::before{background:#f2b33d}
.check-page .ck-findings li.is-risk::before{background:#e5533d}
.check-page .ck-findings li.is-info::before{background:#8fa9c4}

/* 表格 */
.check-page .ck-table-wrap{overflow-x:auto;background:#fff;border:1px solid #e0e7e1;border-radius:14px}
.check-page .ck-table{width:100%;border-collapse:collapse;font-size:14px;line-height:1.5}
.check-page .ck-table th{background:#141a16;color:#f5faf6;font-weight:700;text-align:left;padding:10px 14px;white-space:nowrap}
.check-page .ck-table td{padding:10px 14px;border-top:1px solid #e9efea;vertical-align:top;color:#2c3630}
.check-page .ck-table td strong{display:block;color:#141a16}
.check-page .ck-table td small{display:block;font-size:12px;color:#8d9892}
.check-page .ck-table tr.is-fail td{color:#8d9892}
.check-page .ck-group{display:inline-block;padding:1px 8px;border-radius:6px;background:#e9efea;font-size:12px;font-weight:700;color:#3c4740;white-space:nowrap}
.check-page .ck-mono,.check-page .ck-ip{font-family:'JetBrains Mono',monospace}
.check-page .ck-table .ck-ip{font-size:13px;overflow-wrap:anywhere}
.check-page .ck-fail{color:#b4361f;font-weight:700}
.check-page .ck-pending{color:#8d9892;font-size:13.5px;font-weight:400;animation:ck-pulse 1.4s ease-in-out infinite}
.check-page .ck-copy-area{position:fixed;left:-9999px;top:0;width:1px;height:1px;opacity:0}

/* 说明与常见问题 */
.check-page .ck-doc{margin-top:clamp(26px,3.4vw,36px);padding:clamp(22px,4vw,44px);background:#fff;border:1px solid #e0e7e1;border-radius:18px}
.check-page .ck-doc .article-body{max-width:860px}
.check-page .ck-doc .article-body>h2:first-child{margin-top:0}
.check-page .ck-faq{max-width:860px;margin-top:40px}
.check-page .ck-faq h2{font-size:23px;display:flex;align-items:center;gap:10px}
.check-page .ck-faq h2::before{content:"";flex:none;width:8px;height:22px;border-radius:3px;background:#07734a}
.check-page .ck-faq details{margin-top:10px;border:1px solid #e0e7e1;border-radius:12px;background:#f9fbf9}
.check-page .ck-faq summary{position:relative;padding:14px 44px 14px 16px;font-size:15.5px;font-weight:700;color:#141a16}
.check-page .ck-faq summary::after{content:"+";position:absolute;right:16px;top:50%;transform:translateY(-50%);font:700 20px/1 'JetBrains Mono',monospace;color:#07734a}
.check-page .ck-faq details[open] summary::after{content:"−"}
.check-page .ck-faq details p{padding:0 16px 14px;font-size:14.5px;line-height:1.8;color:#3b4740}
.check-page .article-cta{margin-top:clamp(18px,2.6vw,26px)}

@media (prefers-reduced-motion:reduce){
  .check-page .ck-score.is-wait .ck-ring,.check-page .ck-pending,.check-page .ck-app.is-running .ck-state i{animation:none}
  .check-page .ck-ring-fg{transition:none}
}
@media (max-width:1000px){
  .check-page .ck-cards.is-four{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:760px){
  .check-page .ck-cards,.check-page .ck-cards.is-four{grid-template-columns:minmax(0,1fr)}
  .check-page .ck-rows{grid-template-columns:minmax(0,1fr)}
  .check-page .ck-summary{grid-template-columns:minmax(0,1fr);justify-items:center;text-align:center}
  .check-page .ck-verdict{width:100%}
  .check-page .ck-issues{text-align:left}
  .check-page .ck-issues li{grid-template-columns:minmax(0,1fr)}
  .check-page .ck-bar{align-items:flex-start;flex-direction:column}
}
@media (max-width:480px){
  .check-page .ck-actions{width:100%}
  .check-page .ck-actions .ck-btn{flex:1}
  .check-page .ck-table{font-size:13px}
  .check-page .ck-table th,.check-page .ck-table td{padding:9px 10px}
}
