) 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 使用指南与常见问题整理 首页

Sisc Link v2rayNG 怎么用?安卓订阅导入与连接排查

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

简答:如果你已经拿到 Sisc Link 订阅链接,最快做法是:在 Android 安装可信来源的 v2rayNG,打开“订阅分组设置”添加链接,保存后更新订阅,再选择节点并启动 VPN。本文不把 Sisc Link 的官网、价格或服务状态当作已核实事实;只讲如何在 v2rayNG 中完成导入、连接和故障定位。

定义:v2rayNG 是 Android 上使用 Xray 或 v2fly 核心的代理客户端,可导入订阅链接、单节点链接或二维码配置后建立本地 VPN 连接。

先看这张速查表:你现在该做哪一步

如果只是想先连起来,不要一开始修改路由、DNS 或证书选项。按下表从上到下操作,出现哪一类结果,就进入对应的处理方式。

Sisc Link 在 v2rayNG 中的操作速查
当前情况先做什么成功标志失败时检查
已有订阅链接进入“订阅分组设置”添加链接并保存订阅分组中出现配置数量链接是否完整、是否需要登录、是否已过期
只有单节点链接使用剪贴板导入或二维码扫描配置列表出现一个节点链接前缀是否被聊天软件截断
节点已出现但不能连接先更新订阅,再进行真连接测试测试结果不再全部失败订阅响应、节点有效期、手机时间和网络
显示已连接但网页打不开检查 VPN 权限、模式和分应用代理浏览器可以打开普通测试页面是否误开启了绕过规则或仅代理指定应用

v2rayNG 的官方项目说明显示,它是 Android 客户端,发布文件和签名信息集中在项目的 GitHub 页面;下载时应优先从v2rayNG 官方项目页进入发布页,不要仅凭搜索结果中的同名 APK 下载。

使用前准备:先确认这三样东西

  1. 一条可用的订阅或节点信息。你需要从 Sisc Link 自己登录的后台、购买记录或服务支持渠道获取订阅链接。本站无法核实 Sisc Link 当前后台的具体菜单名称,因此不要把本文中的“订阅”“套餐”“节点”等词理解为该品牌官方页面的固定字段。
  2. 一部 Android 手机。v2rayNG 是 Android 客户端,不能把 Android APK 直接安装到 iPhone 或电脑上。APK 架构应根据手机处理器选择;如果不确定,先查看手机系统信息,不要连续安装多个来源不明的 APK。
  3. 一条未公开的订阅链接。订阅链接通常包含账号识别信息或可直接拉取配置的凭据。不要将它发到群聊、评论区、在线转换网站或截图中;若已经公开,优先回到服务后台重置或重新生成,具体是否支持重置以服务方说明为准。

官方项目的发布说明还提供了 GPG 签名和文件校验信息。普通用户至少应核对下载页面、文件名和发布来源;如果你具备校验条件,再对照发布页给出的哈希或签名,而不是只看 APK 文件名。

步骤一:安装 v2rayNG 并完成首次授权

  1. 从v2rayNG 官方发布页选择适合 Android 架构的安装包。版本号会变化,本文不写死某一个版本;优先选择正式发布版本,除非你明确知道自己需要预发布版本。
  2. 安装完成后打开应用。如果系统提示允许通知、相机或本地网络等权限,根据你要使用的功能决定是否允许:二维码导入需要相机权限,后台任务和连接提示可能需要通知权限。
  3. 首次启动并连接时,Android 通常会弹出 VPN 连接授权。确认应用名称和操作意图后再允许;如果你没有主动点击连接,却突然出现 VPN 授权窗口,应先取消并检查是否安装了错误应用。
  4. 如果安装失败,先卸载来源不明的同名应用,再检查 Android 是否阻止了未知来源安装、设备存储是否足够,以及 APK 架构是否匹配。不要为了安装成功而关闭所有安全保护。

Android 的 VPN 机制由系统的 VpnService 管理,VPN 应用需要通过系统权限建立服务。v2rayNG 项目源码中也能看到“启动服务”“停止服务”和打开 Android VPN 设置等功能项,因此连接按钮变成已启用并不等于每个网页或 App 都一定可用,后面还要做实际访问验证。

步骤二:把 Sisc Link 订阅添加到“订阅分组设置”

以下流程适用于你拿到的是“订阅链接”,而不是单个节点链接。

  1. 复制完整的订阅地址。复制后先粘贴到手机备忘录,确认开头、结尾和中间没有换行、空格或被聊天软件改写。
  2. 打开 v2rayNG,进入侧边菜单或配置管理区域,找到“订阅分组设置”或类似的订阅管理入口。不同版本可能使用“Subscriptions”等近似名称,菜单变化时以当前界面为准。
  3. 点击新增订阅。备注可以写成“Sisc Link-主订阅”,URL 字段粘贴完整订阅地址;除非服务方明确要求,否则不要自行填写 User-Agent、请求头或允许不安全 HTTP。
  4. 保存后返回配置列表,执行更新订阅。等待任务完成,不要在更新过程中频繁点击或切换网络。
  5. 检查分组中是否出现节点数量或配置列表。如果显示为 0 个配置、更新失败或响应内容异常,不要继续测速,先检查下面的失败原因。

v2rayNG 官方源码中的界面字段包含订阅备注、订阅 URL、请求头、自动更新、更新结果以及配置数量等项目;这能确认相关功能存在,但不能证明 Sisc Link 当前一定使用某种订阅格式,也不能替代服务方对订阅地址的说明。

步骤三:没有订阅时,用单节点或二维码导入

如果 Sisc Link 只给你一个节点链接、分享链接或二维码,不能把它当成订阅地址重复添加。

  1. 剪贴板导入:复制完整节点链接后,在 v2rayNG 的配置列表页面使用导入或从剪贴板导入功能。成功后,列表中通常会新增一个配置。
  2. 二维码导入:进入扫码入口,允许相机权限,对准包含节点信息的二维码。扫描后先检查节点备注、地址和端口是否显示,再保存。
  3. 分享链接导入:如果其他设备传来的是 v2rayN 分享格式,先确认它确实是配置分享内容,而不是普通网页链接。v2rayNG 官方发布说明提到支持导入 v2rayN 内部分享格式,但具体分享格式仍以当前版本实际支持情况为准。

单节点导入成功只说明配置被读取,不代表节点可用。下一步应先运行测试或尝试启动,然后用浏览器访问一个你平时能稳定访问的普通网页进行验证。

步骤四:更新订阅、测试节点并选择配置

  1. 在订阅分组中执行更新。若当前版本提供“更新后自动测试”“测试后删除无效配置”或“测试后排序”等选项,先看清楚是否会删除本地配置;不确定时只执行手动更新和手动测试。
  2. 测试时优先观察真连接结果或实际连接结果,不要只看 TCP 延迟。TCP 延迟只能说明某个网络连接阶段的响应情况,不能单独证明网页、视频、登录或长连接业务正常。
  3. 选择节点时先看测试成功、备注清晰、网络环境下表现稳定的配置。不要只按地理名称、最低延迟或列表最上方选择,因为这些字段不能替代实际访问测试。
  4. 点击目标配置使其处于选中状态,再点击启动服务。Android 弹出 VPN 授权时确认授权,状态栏出现 VPN 图标后再进入验证。

v2rayNG 发布说明中包含 TCP ping、真连接测试以及更新后自动测试等功能变化;不同版本的按钮位置和组合选项可能不同,因此不要把某一版本的菜单截图当成所有版本的固定界面。

步骤五:确认“真的可用”,不要只看已连接

建议按以下顺序验证,避免把“客户端启动成功”误判为“所有网络都正常”。

  1. 看 v2rayNG 是否显示服务运行,Android 状态栏是否出现 VPN 标识。
  2. 打开一个平时可以访问的普通网页,确认页面能加载,而不是只看客户端状态。
  3. 关闭 VPN 后重复访问同一页面,再重新打开 VPN 对比结果。这个对照只能说明当前连接是否产生了可观察变化,不能证明所有网站或 App 都支持。
  4. 如果浏览器正常但某个 App 不通,检查是否启用了分应用代理、排除应用或绕行规则。v2rayNG 源码中包含分应用代理相关设置,实际可用范围会受到 Android 版本和应用自身网络策略影响。
  5. 如果只有部分站点异常,先记录网络类型、选用节点、测试时间和错误表现,再更换一个配置复测。不要一次修改多个高级设置,否则很难判断是哪一步造成变化。

常见失败:按现象执行对应动作

v2rayNG 常见故障与处理顺序
现象优先检查处理动作
订阅更新失败URL 完整性、登录状态、网络重新复制订阅;切换网络;确认返回的不是登录页或错误页
订阅成功但节点为零订阅是否过期、流量或账号状态在服务后台查看状态;无法核实的状态联系服务方,不要反复刷新
节点测试全部失败手机时间、网络、节点有效期自动校准时间;切换网络;更新订阅后再测试
VPN 授权后马上断开省电限制、后台限制、其他 VPN关闭对 v2rayNG 的后台限制;暂时停用其他 VPN 或网络过滤应用
显示已连接但网页打不开代理模式、分应用规则、DNS先恢复基础模式并关闭分应用限制,再重新连接验证
最近突然全部失效订阅是否被重置、服务侧状态不要公开旧链接;重新获取订阅,必要时准备迁移到其他可核验配置

如果多个网络、多个节点和多个时间段都失败,问题未必在 v2rayNG 本身,也可能是订阅内容、账号状态或服务端配置异常。本文无法核实 Sisc Link 的实时状态,不能把这类现象直接归因于某一方。

安全提醒与范围限制

接下来怎么做

如果你现在卡在“订阅链接怎么复制”,先不要反复更换节点,优先确认链接来源、完整性和返回内容;如果已经成功导入但无法连接,再按“更新订阅→测试→授权 VPN→实际访问”的顺序逐层排查。

常见问题

Sisc Link 订阅链接在 v2rayNG 哪个位置添加?

通常进入 v2rayNG 的侧边菜单或配置管理区域,找到“订阅分组设置”,新增订阅后把完整 URL 粘贴到地址字段并保存,再执行更新订阅。不同版本菜单名称可能略有变化,以当前界面为准。

为什么 Sisc Link 订阅导入后没有节点?

先确认复制的是订阅地址而不是登录页、订单页或单节点链接;再检查链接是否被换行、截断或已经失效。如果更新结果是 HTML、登录页面或错误提示,说明客户端没有拿到有效配置,应重新登录后台获取或联系服务方核实。

v2rayNG 显示已连接,但网页还是打不开怎么办?

先确认 Android 状态栏有 VPN 标识,再关闭分应用代理、排除应用和复杂路由规则,恢复基础模式后重新连接。随后用浏览器进行实际访问测试;如果仍失败,切换网络并更换一个已更新的节点。

Sisc Link 没有订阅链接,只有二维码怎么办?

在 v2rayNG 中打开二维码扫描入口,允许相机权限并扫描二维码。导入后检查配置是否出现,再运行测试或启动服务。二维码只能导入其中包含的配置,不能自动补齐缺失的账号权限或订阅内容。

要不要在 v2rayNG 中开启跳过证书验证?

不建议把它作为常规排障步骤。先检查订阅地址、手机时间、网络和服务端证书;官方发布说明显示相关不安全参数可能被移除,升级后依赖该选项的配置还可能失效。

相关阅读

参考资料

  1. v2rayNG 官方 GitHub 项目页
  2. v2rayNG 官方发布页与版本说明
  3. v2rayNG 官方源码中的订阅、连接与 VPN 设置字段
  4. Android Developers:VpnService API 参考