) Fixes the trapped-modal bug: modals are no longer nested inside backdrop-filter cards, which used to become their containing block. ========================================================================== */ .reader-overlay { position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 28px; background: rgba(3, 5, 9, 0.68); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); } .reader-panel { display: flex; flex-direction: column; width: min(960px, 94vw); max-height: 88vh; background: var(--bg-modal); border: 1px solid var(--border-medium); border-radius: 22px; box-shadow: var(--shadow-elevation); overflow: hidden; animation: modalScaleIn 0.34s cubic-bezier(0.16, 1, 0.3, 1) both; } .reader-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 15px 20px; border-bottom: 1px solid var(--border-subtle); background: var(--badge-bg); } .reader-head-left { display: flex; align-items: center; gap: 9px; } .reader-kicker { font-size: 13px; font-weight: 700; letter-spacing: 0.04em; color: var(--text-main); } .reader-count { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; color: var(--accent-primary); background: rgba(var(--accent-rgb), 0.12); border: 1px solid rgba(var(--accent-rgb), 0.28); } .reader-close { width: 32px; height: 32px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center; color: var(--text-muted); background: var(--bg-surface); border: 1px solid var(--border-subtle); transition: all 0.22s cubic-bezier(0.16, 1, 0.3, 1); } .reader-close:hover { color: var(--text-main); border-color: var(--border-medium); transform: rotate(90deg); } .reader-tabs { display: flex; gap: 6px; padding: 10px 16px; overflow-x: auto; border-bottom: 1px solid var(--border-subtle); scrollbar-width: none; } .reader-tabs::-webkit-scrollbar { display: none; } .reader-tab { display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 10px; font-size: 12.5px; white-space: nowrap; color: var(--text-muted); border: 1px solid transparent; transition: all 0.2s ease; } .reader-tab:hover { color: var(--text-main); background: var(--badge-bg); } .reader-tab.is-active { color: var(--accent-primary); background: var(--seg-indicator-bg); border-color: var(--seg-indicator-border); font-weight: 650; } .reader-pin { font-size: 10px; font-weight: 600; padding: 1px 6px; border-radius: 5px; color: var(--accent-amber); background: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.28); } .reader-tab-text { max-width: 250px; overflow: hidden; text-overflow: ellipsis; } .reader-body { flex: 1; overflow-y: auto; padding: 34px 48px 44px; } .reader-article { max-width: 720px; margin: 0 auto; } .reader-meta { display: flex; align-items: center; justify-content: space-between; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px; color: var(--text-dim); margin-bottom: 12px; } .reader-title { font-size: 25px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.34; color: var(--text-main); margin: 0 0 22px; padding-bottom: 18px; border-bottom: 1px solid var(--border-subtle); } .reader-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 20px; border-top: 1px solid var(--border-subtle); background: var(--bg-surface); } .reader-hint { font-size: 11.5px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--text-dim); } .reader-pop-enter-active, .reader-pop-leave-active { transition: opacity 0.24s ease; } .reader-pop-enter-from, .reader-pop-leave-to { opacity: 0; } @media (max-width: 768px) { .reader-overlay { padding: 0; } .reader-panel { width: 100vw; height: 100vh; max-height: 100vh; border-radius: 0; border: none; } .reader-body { padding: 22px 20px 30px; } .reader-title { font-size: 20px; } .reader-tab-text { max-width: 150px; } .reader-hint { display: none; } } /* ========================================================================== 12. LANDING PAGE SECTIONS ========================================================================== */ .land-section { position: relative; z-index: 10; max-width: 1440px; margin: 0 auto; padding: 96px 24px; } .land-section--tight { padding: 68px 24px; } .land-eyebrow { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: var(--accent-primary); background: var(--badge-bg); border: 1px solid var(--border-subtle); } .land-h2 { font-size: clamp(26px, 3.2vw, 40px); font-weight: 800; letter-spacing: -0.03em; line-height: 1.2; color: var(--text-main); margin: 18px 0 12px; } .land-lede { font-size: 15px; line-height: 1.72; color: var(--text-muted); max-width: 62ch; } .land-head { margin-bottom: 44px; } /* ========================================================================== HERO: reserved, theme-configurable slots .hero-site-title <- 站点标题 (theme config: site_title) .hero-site-subtitle <- 站点副标题 (theme config: site_subtitle) ========================================================================== */ .hero-site-title { font-size: clamp(30px, 4.4vw, 58px); font-weight: 800; letter-spacing: -0.035em; line-height: 1.08; color: var(--text-main); margin: 22px 0 10px; } .hero-site-subtitle { font-size: clamp(13px, 1.5vw, 16px); font-weight: 600; letter-spacing: 0.02em; color: var(--accent-primary); margin-bottom: 18px; } .hero-tagline { max-width: 52ch; font-size: 15px; line-height: 1.72; color: var(--text-muted); } /* Deck brand slots also read from theme config */ .deck-brand-title { display: block; font-size: 15px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.15; color: var(--text-main); max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .deck-brand-sub { display: block; font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.14em; color: var(--text-dim); max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Metric strip */ .metric-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; overflow: hidden; border-radius: 18px; background: var(--bg-card); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border: 1px solid var(--border-subtle); box-shadow: var(--shadow-card); } .metric-cell { padding: 26px 24px; background: transparent; text-align: left; } .metric-cell + .metric-cell { box-shadow: inset 1px 0 0 var(--border-subtle); } .metric-value { font-family: var(--font-mono); font-size: 27px; font-weight: 700; letter-spacing: -0.03em; color: var(--text-main); } .metric-label { margin-top: 5px; font-size: 12.5px; color: var(--text-dim); } /* Bento grid — 5 content cells, asymmetric rhythm */ .bento { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 18px; } .bento-cell { padding: 28px; display: flex; flex-direction: column; } .bento-cell--wide { grid-column: span 4; } .bento-cell--tall { grid-column: span 2; grid-row: span 2; } .bento-cell--half { grid-column: span 3; } .bento-cell--third { grid-column: span 2; } .bento-cell--full { grid-column: span 6; } /* Client compatibility chips */ .client-chip { display: inline-flex; align-items: center; gap: 8px; padding: 9px 15px; border-radius: 11px; font-size: 12.5px; font-weight: 500; color: var(--text-muted); background: var(--badge-bg); border: 1px solid var(--border-subtle); transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), color 0.2s ease, border-color 0.2s ease; } .client-chip:hover { transform: translateY(-2px); color: var(--text-main); border-color: var(--border-medium); } /* Mini stat inside the tall bento cell */ .topo-row { display: flex; align-items: center; justify-content: space-between; padding: 11px 0; font-size: 12.5px; color: var(--text-muted); } .topo-row + .topo-row { box-shadow: inset 0 1px 0 var(--border-subtle); } .topo-row strong { color: var(--text-main); font-family: var(--font-mono); font-weight: 650; } .bento-icon { width: 42px; height: 42px; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center; color: var(--accent-primary); background: rgba(var(--accent-rgb), 0.1); border: 1px solid rgba(var(--accent-rgb), 0.22); margin-bottom: 16px; } .bento-title { font-size: 16.5px; font-weight: 700; letter-spacing: -0.02em; color: var(--text-main); margin-bottom: 8px; } .bento-copy { font-size: 13.5px; line-height: 1.72; color: var(--text-muted); } /* Mini terminal inside bento */ .bento-term { margin-top: 18px; padding: 14px 16px; border-radius: 16px; font-family: var(--font-mono); font-size: 11.5px; line-height: 1.9; color: var(--text-muted); background: rgba(6, 9, 16, 0.55); border: 1px solid var(--border-subtle); } html.light .bento-term { background: rgba(15, 23, 42, 0.05); } /* Node network */ .node-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 14px; } .node-chip { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 15px 18px; border-radius: 16px; background: var(--bg-card); border: 1px solid var(--border-subtle); transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.2s ease; } .node-chip:hover { transform: translateY(-2px); border-color: var(--border-medium); } .node-name { font-size: 13.5px; font-weight: 650; color: var(--text-main); } .node-sub { font-size: 11px; color: var(--text-dim); font-family: var(--font-mono); } .node-status { font-family: var(--font-mono); font-size: 12px; font-weight: 700; white-space: nowrap; color: var(--text-muted); } .node-status--online { color: var(--accent-emerald); } .node-status--offline { color: var(--accent-rose); } .node-status--unknown { color: var(--text-dim); } /* Pricing preview */ .price-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; } .price-cut { font-family: var(--font-mono); font-size: 30px; font-weight: 750; letter-spacing: -0.03em; color: var(--text-main); } .price-feat { display: flex; align-items: flex-start; gap: 9px; font-size: 13px; color: var(--text-muted); line-height: 1.6; } .price-feat svg { flex-shrink: 0; margin-top: 2px; color: var(--accent-emerald); } /* Steps */ .step-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; } .step-num { font-family: var(--font-mono); font-size: 12px; font-weight: 700; letter-spacing: 0.1em; color: var(--accent-primary); } /* FAQ */ .faq-item { border-radius: 16px; overflow: hidden; background: var(--bg-card); border: 1px solid var(--border-subtle); transition: border-color 0.2s ease; } .faq-item:hover { border-color: var(--border-medium); } .faq-q { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 17px 22px; font-size: 14px; font-weight: 600; color: var(--text-main); text-align: left; } .faq-caret { flex-shrink: 0; color: var(--text-dim); transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1); } .faq-item.is-open .faq-caret { transform: rotate(180deg); color: var(--accent-primary); } .faq-a { padding: 0 22px 19px; font-size: 13.5px; line-height: 1.78; color: var(--text-muted); animation: riseIn 0.3s cubic-bezier(0.16, 1, 0.3, 1) both; } /* Final CTA */ .cta-band { position: relative; overflow: hidden; border-radius: 22px; padding: 60px 44px; text-align: center; background: radial-gradient(120% 160% at 15% 0%, rgba(var(--accent-rgb), 0.16), transparent 58%), radial-gradient(120% 160% at 85% 100%, rgba(99, 102, 241, 0.14), transparent 58%), var(--bg-card); border: 1px solid var(--border-subtle); box-shadow: var(--shadow-card); } /* Landing footer */ .land-footer { position: relative; z-index: 10; border-top: 1px solid var(--border-subtle); background: var(--badge-bg); } .land-footer-inner { max-width: 1440px; margin: 0 auto; padding: 44px 24px 34px; display: grid; grid-template-columns: 1.6fr repeat(3, minmax(0, 1fr)); gap: 30px; } .land-footer h4 { font-size: 12px; font-weight: 700; letter-spacing: 0.06em; color: var(--text-dim); margin-bottom: 12px; } .land-footer a { display: block; font-size: 13px; color: var(--text-muted); padding: 4px 0; } .land-footer a:hover { color: var(--accent-primary); } @media (max-width: 1023px) { .land-section { padding: 68px 18px; } .metric-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } .bento { grid-template-columns: repeat(2, minmax(0, 1fr)); } /* Every base span must be reset here, including --full: leaving span 6 in a 2-column grid creates implicit tracks and stretches the grid. */ .bento-cell--wide, .bento-cell--tall, .bento-cell--half, .bento-cell--third, .bento-cell--full { grid-column: span 2; grid-row: auto; } .price-grid, .step-row { grid-template-columns: 1fr; } .land-footer-inner { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } } @media (max-width: 640px) { .metric-strip { grid-template-columns: 1fr; } .bento { grid-template-columns: 1fr; gap: 14px; } .bento-cell--wide, .bento-cell--tall, .bento-cell--half, .bento-cell--third, .bento-cell--full { grid-column: span 1; } .bento-cell { padding: 20px; } .bento-title { font-size: 15.5px; } .bento-copy { font-size: 13px; } .client-chip { padding: 7px 12px; font-size: 12px; } .land-footer-inner { grid-template-columns: 1fr; } .cta-band { padding: 40px 22px; } } /* --- 13. Responsive --- */ @media (max-width: 1023px) { .deck-inner { height: 60px; padding: 0 16px; gap: 12px; } .deck-inner > .segmented-nav { display: none; } .deck-inner > .deck-brand { min-width: 0; flex-shrink: 1; } .deck-brand > span:last-child { min-width: 0; } .deck-brand-title, .deck-brand-sub { max-width: 100%; } .deck-main { padding: 20px 16px 36px; } .deck-brand-sub { display: none; } } @media (max-width: 640px) { .segmented-item { padding: 7px 10px; font-size: 12.5px; } .segmented-item span.seg-label { display: none; } .deck-balance { display: none; } .landing-deck-inner { display: grid; grid-template-columns: minmax(0, 1fr); height: auto; min-height: 60px; gap: 10px; padding: 10px 16px; } .landing-deck-inner .deck-brand { min-width: 0; max-width: 100%; } .landing-deck-inner .deck-actions { width: 100%; min-width: 0; margin-left: 0; justify-content: flex-start; gap: 8px; } .landing-deck-inner .theme-toggle-btn, .landing-deck-inner .deck-actions > button, .landing-deck-inner .deck-actions > a { min-height: 44px; } .landing-deck-inner .theme-toggle-btn, .landing-deck-inner .deck-actions > button:not(.btn-geek-primary):not(.btn-geek-secondary) { min-width: 44px; } .landing-deck-inner .deck-actions > .btn-geek-primary, .landing-deck-inner .deck-actions > .btn-geek-secondary { padding: 9px 12px; white-space: nowrap; } .land-h2--capabilities { overflow-wrap: anywhere; } .capabilities-break { display: none; } } /* ========================================================================== Nexus Markdown Typography Styling (Light / Dark Adaptive) ========================================================================== */ .markdown-body { color: var(--text-main); font-family: inherit; font-size: 14.5px; line-height: 1.75; word-wrap: break-word; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: var(--text-main); font-weight: 700; margin-top: 24px; margin-bottom: 12px; line-height: 1.35; letter-spacing: -0.01em; } .markdown-body h1 { font-size: 22px; padding-bottom: 8px; border-bottom: 1px solid var(--border-subtle); } .markdown-body h2 { font-size: 18px; padding-bottom: 6px; border-bottom: 1px solid var(--border-subtle); } .markdown-body h3 { font-size: 16px; } .markdown-body p { margin-top: 0; margin-bottom: 14px; } .markdown-body a { color: var(--accent-primary) !important; text-decoration: none !important; font-weight: 500; border-bottom: 1px dashed var(--accent-primary); transition: all 0.2s ease; } .markdown-body a:hover { opacity: 0.85; border-bottom-style: solid; } .markdown-body strong { color: var(--text-main); font-weight: 600; } .markdown-body ul, .markdown-body ol { margin-top: 0; margin-bottom: 14px; padding-left: 22px; } .markdown-body li { margin-bottom: 6px; } .markdown-body blockquote { margin: 16px 0; padding: 12px 18px; background: var(--badge-bg); border-left: 3px solid var(--accent-primary); border-radius: 0 10px 10px 0; color: var(--text-muted); font-size: 14px; } .markdown-body blockquote p:last-child { margin-bottom: 0; } .markdown-body code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; background: var(--badge-bg); color: var(--accent-primary); padding: 2px 6px; border-radius: 5px; border: 1px solid var(--border-subtle); } .markdown-body pre { margin: 16px 0; background: #090c13 !important; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 12px; padding: 16px; overflow-x: auto; position: relative; box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.4); } .markdown-body pre code { background: transparent !important; border: 0 !important; padding: 0 !important; color: #e2e8f0 !important; font-size: 13px; line-height: 1.6; } .markdown-body table { width: 100%; margin: 16px 0; border-collapse: separate; border-spacing: 0; border: 1px solid var(--border-subtle); border-radius: 10px; overflow: hidden; } .markdown-body th { background: var(--badge-bg); color: var(--text-main); font-weight: 600; padding: 10px 14px; text-align: left; border-bottom: 1px solid var(--border-subtle); font-size: 13px; } .markdown-body td { padding: 10px 14px; border-bottom: 1px solid var(--border-subtle); color: var(--text-muted); font-size: 13px; } .markdown-body tr:last-child td { border-bottom: none; } 机场不能用了怎么办?订阅失效、客户端报错与连接失败排查指南) Fixes the trapped-modal bug: modals are no longer nested inside backdrop-filter cards, which used to become their containing block. ========================================================================== */ .reader-overlay { position: fixed; inset: 0; z-index: 2000; display: flex; align-items: center; justify-content: center; padding: 28px; background: rgba(3, 5, 9, 0.68); backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); } .reader-panel { display: flex; flex-direction: column; width: min(960px, 94vw); max-height: 88vh; background: var(--bg-modal); border: 1px solid var(--border-medium); border-radius: 22px; box-shadow: var(--shadow-elevation); overflow: hidden; animation: modalScaleIn 0.34s cubic-bezier(0.16, 1, 0.3, 1) both; } .reader-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 15px 20px; border-bottom: 1px solid var(--border-subtle); background: var(--badge-bg); } .reader-head-left { display: flex; align-items: center; gap: 9px; } .reader-kicker { font-size: 13px; font-weight: 700; letter-spacing: 0.04em; color: var(--text-main); } .reader-count { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; color: var(--accent-primary); background: rgba(var(--accent-rgb), 0.12); border: 1px solid rgba(var(--accent-rgb), 0.28); } .reader-close { width: 32px; height: 32px; border-radius: 10px; display: inline-flex; align-items: center; justify-content: center; color: var(--text-muted); background: var(--bg-surface); border: 1px solid var(--border-subtle); transition: all 0.22s cubic-bezier(0.16, 1, 0.3, 1); } .reader-close:hover { color: var(--text-main); border-color: var(--border-medium); transform: rotate(90deg); } .reader-tabs { display: flex; gap: 6px; padding: 10px 16px; overflow-x: auto; border-bottom: 1px solid var(--border-subtle); scrollbar-width: none; } .reader-tabs::-webkit-scrollbar { display: none; } .reader-tab { display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 10px; font-size: 12.5px; white-space: nowrap; color: var(--text-muted); border: 1px solid transparent; transition: all 0.2s ease; } .reader-tab:hover { color: var(--text-main); background: var(--badge-bg); } .reader-tab.is-active { color: var(--accent-primary); background: var(--seg-indicator-bg); border-color: var(--seg-indicator-border); font-weight: 650; } .reader-pin { font-size: 10px; font-weight: 600; padding: 1px 6px; border-radius: 5px; color: var(--accent-amber); background: rgba(245, 158, 11, 0.12); border: 1px solid rgba(245, 158, 11, 0.28); } .reader-tab-text { max-width: 250px; overflow: hidden; text-overflow: ellipsis; } .reader-body { flex: 1; overflow-y: auto; padding: 34px 48px 44px; } .reader-article { max-width: 720px; margin: 0 auto; } .reader-meta { display: flex; align-items: center; justify-content: space-between; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11.5px; color: var(--text-dim); margin-bottom: 12px; } .reader-title { font-size: 25px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.34; color: var(--text-main); margin: 0 0 22px; padding-bottom: 18px; border-bottom: 1px solid var(--border-subtle); } .reader-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 20px; border-top: 1px solid var(--border-subtle); background: var(--bg-surface); } .reader-hint { font-size: 11.5px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--text-dim); } .reader-pop-enter-active, .reader-pop-leave-active { transition: opacity 0.24s ease; } .reader-pop-enter-from, .reader-pop-leave-to { opacity: 0; } @media (max-width: 768px) { .reader-overlay { padding: 0; } .reader-panel { width: 100vw; height: 100vh; max-height: 100vh; border-radius: 0; border: none; } .reader-body { padding: 22px 20px 30px; } .reader-title { font-size: 20px; } .reader-tab-text { max-width: 150px; } .reader-hint { display: none; } } /* ========================================================================== 12. LANDING PAGE SECTIONS ========================================================================== */ .land-section { position: relative; z-index: 10; max-width: 1440px; margin: 0 auto; padding: 96px 24px; } .land-section--tight { padding: 68px 24px; } .land-eyebrow { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px; border-radius: 999px; font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: var(--accent-primary); background: var(--badge-bg); border: 1px solid var(--border-subtle); } .land-h2 { font-size: clamp(26px, 3.2vw, 40px); font-weight: 800; letter-spacing: -0.03em; line-height: 1.2; color: var(--text-main); margin: 18px 0 12px; } .land-lede { font-size: 15px; line-height: 1.72; color: var(--text-muted); max-width: 62ch; } .land-head { margin-bottom: 44px; } /* ========================================================================== HERO: reserved, theme-configurable slots .hero-site-title <- 站点标题 (theme config: site_title) .hero-site-subtitle <- 站点副标题 (theme config: site_subtitle) ========================================================================== */ .hero-site-title { font-size: clamp(30px, 4.4vw, 58px); font-weight: 800; letter-spacing: -0.035em; line-height: 1.08; color: var(--text-main); margin: 22px 0 10px; } .hero-site-subtitle { font-size: clamp(13px, 1.5vw, 16px); font-weight: 600; letter-spacing: 0.02em; color: var(--accent-primary); margin-bottom: 18px; } .hero-tagline { max-width: 52ch; font-size: 15px; line-height: 1.72; color: var(--text-muted); } /* Deck brand slots also read from theme config */ .deck-brand-title { display: block; font-size: 15px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.15; color: var(--text-main); max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .deck-brand-sub { display: block; font-size: 10px; font-family: var(--font-mono); letter-spacing: 0.14em; color: var(--text-dim); max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Metric strip */ .metric-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; overflow: hidden; border-radius: 18px; background: var(--bg-card); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border: 1px solid var(--border-subtle); box-shadow: var(--shadow-card); } .metric-cell { padding: 26px 24px; background: transparent; text-align: left; } .metric-cell + .metric-cell { box-shadow: inset 1px 0 0 var(--border-subtle); } .metric-value { font-family: var(--font-mono); font-size: 27px; font-weight: 700; letter-spacing: -0.03em; color: var(--text-main); } .metric-label { margin-top: 5px; font-size: 12.5px; color: var(--text-dim); } /* Bento grid — 5 content cells, asymmetric rhythm */ .bento { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 18px; } .bento-cell { padding: 28px; display: flex; flex-direction: column; } .bento-cell--wide { grid-column: span 4; } .bento-cell--tall { grid-column: span 2; grid-row: span 2; } .bento-cell--half { grid-column: span 3; } .bento-cell--third { grid-column: span 2; } .bento-cell--full { grid-column: span 6; } /* Client compatibility chips */ .client-chip { display: inline-flex; align-items: center; gap: 8px; padding: 9px 15px; border-radius: 11px; font-size: 12.5px; font-weight: 500; color: var(--text-muted); background: var(--badge-bg); border: 1px solid var(--border-subtle); transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), color 0.2s ease, border-color 0.2s ease; } .client-chip:hover { transform: translateY(-2px); color: var(--text-main); border-color: var(--border-medium); } /* Mini stat inside the tall bento cell */ .topo-row { display: flex; align-items: center; justify-content: space-between; padding: 11px 0; font-size: 12.5px; color: var(--text-muted); } .topo-row + .topo-row { box-shadow: inset 0 1px 0 var(--border-subtle); } .topo-row strong { color: var(--text-main); font-family: var(--font-mono); font-weight: 650; } .bento-icon { width: 42px; height: 42px; border-radius: 12px; display: inline-flex; align-items: center; justify-content: center; color: var(--accent-primary); background: rgba(var(--accent-rgb), 0.1); border: 1px solid rgba(var(--accent-rgb), 0.22); margin-bottom: 16px; } .bento-title { font-size: 16.5px; font-weight: 700; letter-spacing: -0.02em; color: var(--text-main); margin-bottom: 8px; } .bento-copy { font-size: 13.5px; line-height: 1.72; color: var(--text-muted); } /* Mini terminal inside bento */ .bento-term { margin-top: 18px; padding: 14px 16px; border-radius: 16px; font-family: var(--font-mono); font-size: 11.5px; line-height: 1.9; color: var(--text-muted); background: rgba(6, 9, 16, 0.55); border: 1px solid var(--border-subtle); } html.light .bento-term { background: rgba(15, 23, 42, 0.05); } /* Node network */ .node-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 14px; } .node-chip { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 15px 18px; border-radius: 16px; background: var(--bg-card); border: 1px solid var(--border-subtle); transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), border-color 0.2s ease; } .node-chip:hover { transform: translateY(-2px); border-color: var(--border-medium); } .node-name { font-size: 13.5px; font-weight: 650; color: var(--text-main); } .node-sub { font-size: 11px; color: var(--text-dim); font-family: var(--font-mono); } .node-status { font-family: var(--font-mono); font-size: 12px; font-weight: 700; white-space: nowrap; color: var(--text-muted); } .node-status--online { color: var(--accent-emerald); } .node-status--offline { color: var(--accent-rose); } .node-status--unknown { color: var(--text-dim); } /* Pricing preview */ .price-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; } .price-cut { font-family: var(--font-mono); font-size: 30px; font-weight: 750; letter-spacing: -0.03em; color: var(--text-main); } .price-feat { display: flex; align-items: flex-start; gap: 9px; font-size: 13px; color: var(--text-muted); line-height: 1.6; } .price-feat svg { flex-shrink: 0; margin-top: 2px; color: var(--accent-emerald); } /* Steps */ .step-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; } .step-num { font-family: var(--font-mono); font-size: 12px; font-weight: 700; letter-spacing: 0.1em; color: var(--accent-primary); } /* FAQ */ .faq-item { border-radius: 16px; overflow: hidden; background: var(--bg-card); border: 1px solid var(--border-subtle); transition: border-color 0.2s ease; } .faq-item:hover { border-color: var(--border-medium); } .faq-q { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 17px 22px; font-size: 14px; font-weight: 600; color: var(--text-main); text-align: left; } .faq-caret { flex-shrink: 0; color: var(--text-dim); transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1); } .faq-item.is-open .faq-caret { transform: rotate(180deg); color: var(--accent-primary); } .faq-a { padding: 0 22px 19px; font-size: 13.5px; line-height: 1.78; color: var(--text-muted); animation: riseIn 0.3s cubic-bezier(0.16, 1, 0.3, 1) both; } /* Final CTA */ .cta-band { position: relative; overflow: hidden; border-radius: 22px; padding: 60px 44px; text-align: center; background: radial-gradient(120% 160% at 15% 0%, rgba(var(--accent-rgb), 0.16), transparent 58%), radial-gradient(120% 160% at 85% 100%, rgba(99, 102, 241, 0.14), transparent 58%), var(--bg-card); border: 1px solid var(--border-subtle); box-shadow: var(--shadow-card); } /* Landing footer */ .land-footer { position: relative; z-index: 10; border-top: 1px solid var(--border-subtle); background: var(--badge-bg); } .land-footer-inner { max-width: 1440px; margin: 0 auto; padding: 44px 24px 34px; display: grid; grid-template-columns: 1.6fr repeat(3, minmax(0, 1fr)); gap: 30px; } .land-footer h4 { font-size: 12px; font-weight: 700; letter-spacing: 0.06em; color: var(--text-dim); margin-bottom: 12px; } .land-footer a { display: block; font-size: 13px; color: var(--text-muted); padding: 4px 0; } .land-footer a:hover { color: var(--accent-primary); } @media (max-width: 1023px) { .land-section { padding: 68px 18px; } .metric-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } .bento { grid-template-columns: repeat(2, minmax(0, 1fr)); } /* Every base span must be reset here, including --full: leaving span 6 in a 2-column grid creates implicit tracks and stretches the grid. */ .bento-cell--wide, .bento-cell--tall, .bento-cell--half, .bento-cell--third, .bento-cell--full { grid-column: span 2; grid-row: auto; } .price-grid, .step-row { grid-template-columns: 1fr; } .land-footer-inner { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } } @media (max-width: 640px) { .metric-strip { grid-template-columns: 1fr; } .bento { grid-template-columns: 1fr; gap: 14px; } .bento-cell--wide, .bento-cell--tall, .bento-cell--half, .bento-cell--third, .bento-cell--full { grid-column: span 1; } .bento-cell { padding: 20px; } .bento-title { font-size: 15.5px; } .bento-copy { font-size: 13px; } .client-chip { padding: 7px 12px; font-size: 12px; } .land-footer-inner { grid-template-columns: 1fr; } .cta-band { padding: 40px 22px; } } /* --- 13. Responsive --- */ @media (max-width: 1023px) { .deck-inner { height: 60px; padding: 0 16px; gap: 12px; } .deck-inner > .segmented-nav { display: none; } .deck-inner > .deck-brand { min-width: 0; flex-shrink: 1; } .deck-brand > span:last-child { min-width: 0; } .deck-brand-title, .deck-brand-sub { max-width: 100%; } .deck-main { padding: 20px 16px 36px; } .deck-brand-sub { display: none; } } @media (max-width: 640px) { .segmented-item { padding: 7px 10px; font-size: 12.5px; } .segmented-item span.seg-label { display: none; } .deck-balance { display: none; } .landing-deck-inner { display: grid; grid-template-columns: minmax(0, 1fr); height: auto; min-height: 60px; gap: 10px; padding: 10px 16px; } .landing-deck-inner .deck-brand { min-width: 0; max-width: 100%; } .landing-deck-inner .deck-actions { width: 100%; min-width: 0; margin-left: 0; justify-content: flex-start; gap: 8px; } .landing-deck-inner .theme-toggle-btn, .landing-deck-inner .deck-actions > button, .landing-deck-inner .deck-actions > a { min-height: 44px; } .landing-deck-inner .theme-toggle-btn, .landing-deck-inner .deck-actions > button:not(.btn-geek-primary):not(.btn-geek-secondary) { min-width: 44px; } .landing-deck-inner .deck-actions > .btn-geek-primary, .landing-deck-inner .deck-actions > .btn-geek-secondary { padding: 9px 12px; white-space: nowrap; } .land-h2--capabilities { overflow-wrap: anywhere; } .capabilities-break { display: none; } } /* ========================================================================== Nexus Markdown Typography Styling (Light / Dark Adaptive) ========================================================================== */ .markdown-body { color: var(--text-main); font-family: inherit; font-size: 14.5px; line-height: 1.75; word-wrap: break-word; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: var(--text-main); font-weight: 700; margin-top: 24px; margin-bottom: 12px; line-height: 1.35; letter-spacing: -0.01em; } .markdown-body h1 { font-size: 22px; padding-bottom: 8px; border-bottom: 1px solid var(--border-subtle); } .markdown-body h2 { font-size: 18px; padding-bottom: 6px; border-bottom: 1px solid var(--border-subtle); } .markdown-body h3 { font-size: 16px; } .markdown-body p { margin-top: 0; margin-bottom: 14px; } .markdown-body a { color: var(--accent-primary) !important; text-decoration: none !important; font-weight: 500; border-bottom: 1px dashed var(--accent-primary); transition: all 0.2s ease; } .markdown-body a:hover { opacity: 0.85; border-bottom-style: solid; } .markdown-body strong { color: var(--text-main); font-weight: 600; } .markdown-body ul, .markdown-body ol { margin-top: 0; margin-bottom: 14px; padding-left: 22px; } .markdown-body li { margin-bottom: 6px; } .markdown-body blockquote { margin: 16px 0; padding: 12px 18px; background: var(--badge-bg); border-left: 3px solid var(--accent-primary); border-radius: 0 10px 10px 0; color: var(--text-muted); font-size: 14px; } .markdown-body blockquote p:last-child { margin-bottom: 0; } .markdown-body code { font-family: 'JetBrains Mono', monospace; font-size: 12.5px; background: var(--badge-bg); color: var(--accent-primary); padding: 2px 6px; border-radius: 5px; border: 1px solid var(--border-subtle); } .markdown-body pre { margin: 16px 0; background: #090c13 !important; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 12px; padding: 16px; overflow-x: auto; position: relative; box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.4); } .markdown-body pre code { background: transparent !important; border: 0 !important; padding: 0 !important; color: #e2e8f0 !important; font-size: 13px; line-height: 1.6; } .markdown-body table { width: 100%; margin: 16px 0; border-collapse: separate; border-spacing: 0; border: 1px solid var(--border-subtle); border-radius: 10px; overflow: hidden; } .markdown-body th { background: var(--badge-bg); color: var(--text-main); font-weight: 600; padding: 10px 14px; text-align: left; border-bottom: 1px solid var(--border-subtle); font-size: 13px; } .markdown-body td { padding: 10px 14px; border-bottom: 1px solid var(--border-subtle); color: var(--text-muted); font-size: 13px; } .markdown-body tr:last-child td { border-bottom: none; } v2rayNG 2.3.11 安装后配置检查与常见问题排查
← 返回 Sisc Link 使用指南与常见问题整理 首页

Clash 推荐节点怎么选?兼容性、测速与订阅避坑指南

更新于 2026-10-30 · sisc.website

简答:一句话结论:没有一个对所有人都稳定的“最佳 Clash 节点”,更可靠的做法是先确认订阅能否被当前客户端解析,再按延迟、丢包、晚高峰稳定性和实际应用结果筛选。本文不提供未经核验的服务商排名,而是给出一套可以复查的选择流程。先做三步:备份配置,导入订阅并确认节点数量正常,然后分别测试延迟、网页访问和目标应用。

定义:Clash 节点是客户端用于建立代理连接的单个出口配置;机场或网络加速服务通常提供订阅链接,Clash 客户端再把订阅解析成多个节点和策略组。

先看这张表:你真正要比较的不是“节点数量”

很多人搜索“Clash 推荐节点”时,实际想解决的是“哪类订阅更适合我”。节点数量只是配置中的一个字段,不能单独证明稳定性、速度或隐私表现。更稳妥的比较方式,是把服务入口、订阅格式、协议、线路、套餐规则和实测结果分开记录。

Clash 节点选择速查表
比较项目要核验什么合格信号未通过时怎么做
客户端兼容当前客户端能否解析订阅、显示节点和策略组配置成功加载,节点名称和策略组正常出现确认订阅格式,更新客户端或改用项目文档支持的格式
节点可用性延迟测试、网页访问、目标应用实际连接延迟测试成功,网页和目标应用均能完成基本操作更换节点并记录失败时间,不要只看一次测试
晚高峰稳定性至少在不同时间重复测试延迟、丢包和访问结果没有明显恶化保留备用节点,避免仅凭白天结果长期付款
套餐风险流量倍率、设备数、限速、有效期、退款和续费规则规则在可核验页面中写清楚付款前保存页面,优先选择可控周期,避免一次性长期投入
入口安全域名、证书、账号登录、付款页面和隐私说明入口前后一致,信息可相互印证停止输入密码或付款信息,先核验来源

对新手而言,优先级通常是“能导入并稳定连接”高于“节点数量多”。如果某个页面只强调排名、速度或节点数量,却没有说明订阅格式、限制条件和测试方法,应把这些宣传内容视为未核实信息。

第一步:分清客户端、订阅、配置文件和节点

客户端是运行在电脑或手机上的控制界面,例如 Clash Verge Rev 这类桌面程序;其项目公开说明显示,该项目面向 Windows、macOS 和 Linux,并提供发布页供用户选择安装包。Clash Verge Rev 项目仓库和项目发布页应作为下载和版本核对入口。

订阅链接通常是服务方提供的一段网址,客户端通过它获取配置;配置文件是客户端实际读取的 YAML、URI 或其他格式内容;节点则是配置中的单个代理出口。一个订阅可以包含很多节点,但订阅本身不是节点。

当前选择客户端时,应优先核对项目是否仍在维护、支持什么系统和内核。不要把旧程序仍能打开,误认为它仍然获得更新或适合长期使用。版本、安装包架构和兼容性应以项目发布页与当前文档为准。

第二步:导入订阅,先确认“解析成功”再谈推荐

  1. 入口:打开你已核验过的服务账户页面,复制订阅链接;不要把订阅链接公开发到群聊、评论区或截图中。
  2. 输入:在客户端的配置、订阅或 Profiles 页面添加链接,保存后执行更新。
  3. 预期结果:配置状态显示成功,节点列表出现,策略组不为空,客户端日志没有持续的解析错误。
  4. 失败后的下一步:先检查复制是否完整,再确认链接是否过期、是否需要登录、返回内容是否为客户端支持的格式;如果仍失败,保留原配置并只更换一个变量,例如换另一种导入方式,不要同时修改内核、规则和 TUN。

Mihomo 文档将代理集合分为 HTTP、file 和 inline 等类型,并说明 HTTP 类型需要 URL;配置还可以设置更新间隔、健康检查、过滤条件和大小限制。Mihomo proxy-providers 文档可用于核对这些字段。文档还说明,订阅内容可能以 YAML、URI 或 base64 形式出现,具体能否导入取决于客户端和内核的解析能力。Mihomo 代理集合内容说明

第三步:用统一方法测试节点,不要只看延迟数字

延迟测试只能说明某个测试地址在当时是否完成响应,不能等同于下载速度、视频播放、游戏体验或特定应用可用。Mihomo API 文档提供了代理信息、存活状态、历史延迟和指定 URL 测试接口,说明测试结果应结合时间、测试地址和节点状态读取。Mihomo API 文档

  1. 先测连接:在客户端选择一个节点,执行延迟测试;记录测试时间、测试地址和结果。
  2. 再测网页:打开一个普通网页,确认 DNS、TLS 和页面加载均完成,不要只看客户端显示“绿色”。
  3. 再测目标场景:如果你主要使用视频、AI 工具、游戏或文件下载,应在对应应用中做最小可行测试。
  4. 做晚高峰复测:至少在不同时间重复同一节点测试,记录延迟变化、超时和丢包现象。
  5. 一次只改一个变量:先换节点,再考虑策略组、TUN、DNS 或系统代理;这样才能知道问题来自节点还是客户端配置。

如果某个节点延迟较低但实际应用打不开,不要直接判定测试工具失效。可能是目标应用、协议、规则匹配、DNS、UDP 支持或上游线路不同导致结果不一致。技术行为会受客户端版本、核心和配置影响,应以当前日志和复测结果为准。

按使用场景选择:看线路与协议,不按地区名称盲选

不同使用场景的选择重点
场景优先观察不应直接下结论的指标
日常网页连续连接、网页加载、DNS 是否正常单次最低延迟
视频或流媒体实际播放、清晰度切换、长时间稳定性节点名称中的“解锁”字样
AI 工具目标服务登录、对话请求、长连接稳定性仅凭地区名称判断可用
游戏实际延迟、抖动、丢包和 UDP 表现网页测速结果
下载持续传输速度、限速规则和流量消耗短时间峰值速度
多设备设备数限制、并发规则和不同客户端兼容节点总数

协议字段也不能脱离客户端内核判断。Mihomo 的代理配置文档列出了节点类型、UDP、IP 版本、TFO、MPTCP 等字段;这些字段是否生效,还要看当前内核和节点服务端是否支持。Mihomo 代理配置文档因此,看到某个协议名称时,应进一步确认客户端是否能解析、是否能建立连接,以及目标应用是否真的受益。

如何核验具体服务:真假入口、套餐页面与迁移条件

本文站点是独立使用指南,不是任何网络加速服务的官方页面。对具体品牌,包括 Sisc Link,价格、节点状态、活动和兼容性都应以其可核验的官方页面为准;当前没有足够公开资料时,应标注为“未核实”,不要把搜索结果中的榜单或用户评论当成官方事实。

  1. 核验入口:检查域名是否前后一致,付款页、登录页和订阅页是否来自同一可信入口。
  2. 核验套餐:确认流量、倍率、设备数、限速、有效期、退款和自动续费规则,并保存付款前页面。
  3. 核验订阅:确认页面明确说明支持的客户端或格式,导入后检查节点数量和策略组。
  4. 核验状态:分别检查页面能否访问、账号能否登录、订阅能否刷新、节点能否连接;不能用其中一项替代全部结论。
  5. 准备迁移:保留本地配置备份,记录仍在使用的规则和策略组;如果订阅失效,先停止重复付款,再寻找格式兼容的替代订阅。

假如你已经购买但无法连接,不要立刻删除全部配置。先导出或复制当前配置,保存订单和页面记录,再按“订阅—客户端—内核—系统代理/TUN—DNS—网络—上游”顺序排查。无法确认服务状态时,只写“当前未核实”,不要根据单个讨论下结论。

Clash 节点导入或连接失败:按层排查

  1. 订阅层:链接是否完整、是否过期、返回内容是否为空;成功标准是更新后出现节点。
  2. 客户端层:配置是否被选中、策略组是否指向有效节点;成功标准是当前活动配置与预期一致。
  3. 内核层:日志是否出现不支持字段、解析失败或节点类型错误;成功标准是内核正常启动。
  4. 代理/TUN 层:系统代理或 TUN 是否打开,权限是否允许;成功标准是目标应用产生连接日志。
  5. DNS 层:是否只有域名解析失败而不是节点整体失效;先恢复默认设置,再单独验证。
  6. 网络层:更换一个节点或网络环境,观察是否只有当前网络失败;不要一次修改多个参数。
  7. 上游层:如果多个客户端、多个网络和多个节点都失败,记录时间和日志,再向服务方核验;没有公开公告时不要自行认定服务停止。

Mihomo 支持通过代理端口、TUN 和 listeners 接收流量,TUN 还涉及系统路由、DNS 劫持和按应用路由。Mihomo 入站配置文档因此,开启 TUN 后出现问题,不应只更换节点,也要检查系统权限、路由和防火墙。排障完成后,撤销最后一次无效修改,确认普通网页和目标应用均恢复,再保留新配置。

常见问题 FAQ

Clash 推荐节点是不是节点越多越好?

不是。节点数量只能说明配置中包含多少条节点记录,不能证明可用率、稳定性、速度或隐私表现。应优先看能否导入、是否持续连接、晚高峰是否稳定,以及套餐规则是否清楚。

为什么延迟最低的节点反而打不开目标应用?

延迟测试和目标应用使用的请求类型可能不同。规则、DNS、UDP、协议能力、目标服务限制和上游线路都可能影响结果。先确认普通网页,再在目标应用中复测,并一次只更换一个变量。

Clash 订阅导入后节点为空怎么办?

先检查链接是否复制完整、是否过期、是否需要登录,以及返回格式是否被当前客户端支持。随后查看客户端日志,确认是网络请求失败、格式解析失败还是配置为空;不要在没有备份的情况下覆盖原配置。

套餐应该买短期还是长期?

在价格、退款和状态未充分核验前,短周期通常更便于控制风险。付款前应保存流量、倍率、设备数、限速、自动续费和迁移条件;这些信息缺失时,按“未核实”处理。

可以直接照搬网上的 Clash 节点排行榜吗?

不建议。排行榜的测试时间、地区、运营商、设备、测试地址和样本可能不同,价格与状态也会变化。更可靠的做法是使用本文的核验表,先确认订阅兼容,再进行自己的复测。

常见问题

Clash 推荐节点是不是节点越多越好?

不是。节点数量不能证明可用率、稳定性或速度,应优先确认订阅兼容、持续连接、晚高峰表现和套餐规则。

为什么延迟最低的节点打不开目标应用?

延迟测试与目标应用的请求类型可能不同,规则、DNS、UDP、协议和上游线路都可能影响结果。应在目标应用内复测,并一次只改一个变量。

Clash 订阅导入后节点为空怎么办?

检查链接完整性、有效期、登录要求和返回格式,再查看客户端日志判断是请求失败、格式解析失败还是配置为空。

套餐应该买短期还是长期?

在服务入口、状态和规则未充分核验前,短周期更便于控制风险。付款前保存流量、倍率、设备数、限速、退款和自动续费规则。

能不能直接照搬网上的 Clash 节点排行榜?

不建议。排行榜的测试时间、地区、运营商和样本可能不同,价格与状态也会变化,最好按本文流程自行核验。

相关阅读

参考资料

  1. Clash Verge Rev 项目仓库
  2. Clash Verge Rev 项目发布页
  3. Mihomo proxy-providers 配置文档
  4. Mihomo 代理集合内容说明
  5. Mihomo 代理配置文档
  6. Mihomo 入站配置文档
  7. Mihomo API 文档