Files
opsxapi/homepage/dist/site/assets/site.css
T
logan d7a9503042 落地页内容修正 + 官网资产入库保全
- v1.0→v0.1 公测(对齐实际版本);「打开工作台」死链三处改指 /docs/quickstart;
  「OpenAPI 双向同步」虚标改「本机 Mock 服务」;定价「桌面端+Web 双形态」改「桌面端单机全功能」
- homepage/dist 此前被通用 dist/ 规则忽略,官网只存在于本机磁盘、清库即丢;强制入库保全
  (后续若落 homepage 源码构建体系,此目录可回归忽略并改跟踪源)
2026-10-16 03:14:50 +08:00

283 lines
15 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* OpsxAPI 官网 —— 营销单页样式 */
:root {
--blue: #2563eb;
--blue-dark: #1d4ed8;
--blue-soft: rgba(37, 99, 235, 0.08);
--bg: #ffffff;
--bg-alt: #f6f8fc;
--border: #e4e9f1;
--text: #111827;
--text-2: #5b6880;
--text-3: #98a2b3;
--green: #059669;
--amber: #d97706;
--radius: 14px;
--shadow: 0 1px 3px rgba(16,24,40,.06), 0 12px 32px rgba(16,24,40,.07);
--mono: "JetBrains Mono", SFMono-Regular, Menlo, monospace;
}
* { box-sizing: border-box; scroll-behavior: smooth; }
body {
margin: 0; font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
color: var(--text); background: var(--bg); font-size: 15px; line-height: 1.75;
}
a { color: var(--blue); text-decoration: none; }
h1,h2,h3 { letter-spacing: -0.015em; }
section[id] { scroll-margin-top: 76px; }
.wrap { max-width: 1120px; margin: 0 auto; padding: 0 24px; }
.wrap.narrow { max-width: 820px; }
/* ---------- SVG 图标(lucide sprite) ---------- */
.i { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; vertical-align: -2px; }
.i-lg { width: 28px; height: 28px; vertical-align: middle; }
code { font-family: var(--mono); font-size: 13px; background: var(--blue-soft); color: var(--blue-dark); border-radius: 5px; padding: 1px 6px; }
/* ---------- 按钮 ---------- */
.btn {
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
border-radius: 10px; padding: 9px 20px; font-size: 14.5px; font-weight: 600; cursor: pointer;
transition: all .18s; border: 1px solid transparent; white-space: nowrap;
}
.btn-lg { padding: 12px 26px; font-size: 15.5px; }
.btn-primary { background: var(--blue); color: #fff !important; box-shadow: 0 6px 18px rgba(37,99,235,.28); }
.btn-primary:hover { background: var(--blue-dark); transform: translateY(-1px); }
.btn-ghost { border-color: var(--border); color: var(--text) !important; background: #fff; }
.btn-ghost:hover { border-color: var(--blue); color: var(--blue) !important; }
.btn-inverse { background: #fff; color: var(--blue) !important; }
.btn-inverse:hover { transform: translateY(-1px); }
.btn-outline { border-color: rgba(255,255,255,.5); color: #fff !important; }
.btn-outline:hover { border-color: #fff; background: rgba(255,255,255,.1); }
/* ---------- 导航 ---------- */
.nav {
position: sticky; top: 0; z-index: 50; background: rgba(255,255,255,.9);
backdrop-filter: blur(10px); border-bottom: 1px solid var(--border);
}
.nav-inner { max-width: 1120px; margin: 0 auto; padding: 0 24px; height: 60px; display: flex; align-items: center; gap: 28px; }
.brand { display: flex; align-items: center; gap: 9px; }
.brand-logo { display: inline-flex; }
.brand-logo svg { display: block; border-radius: 8px; }
.brand-name { font-size: 17px; font-weight: 800; color: var(--text) !important; }
.nav-links { display: flex; gap: 22px; }
.nav-links a { font-size: 14px; font-weight: 500; color: var(--text-2) !important; }
.nav-links a:hover { color: var(--blue) !important; }
.nav-cta { margin-left: auto; }
/* ---------- Hero ---------- */
.hero {
position: relative; overflow: hidden;
background:
radial-gradient(1200px 500px at 85% -10%, rgba(37,99,235,.14), transparent 60%),
radial-gradient(800px 400px at -10% 10%, rgba(5,150,105,.08), transparent 55%),
linear-gradient(180deg, #f8faff 0%, #fff 100%);
border-bottom: 1px solid var(--border);
}
.hero-inner {
max-width: 1120px; margin: 0 auto; padding: 72px 24px 64px;
display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: 48px; align-items: center;
}
.hero-badge {
display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: var(--blue-dark);
background: #fff; border: 1px solid rgba(37,99,235,.25); border-radius: 999px; padding: 4px 14px;
box-shadow: 0 2px 8px rgba(37,99,235,.1); margin-bottom: 18px;
}
.hero h1 { font-size: 44px; line-height: 1.22; font-weight: 800; margin: 0 0 16px; }
.hero h1 em { font-style: normal; color: var(--blue); }
.hero-sub { color: var(--text-2); font-size: 16px; margin: 0 0 26px; }
.hero-actions { display: flex; gap: 14px; flex-wrap: wrap; }
.hero-actions.center { justify-content: center; }
.hero-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 22px; }
.hero-pills span {
font-size: 12px; color: var(--text-2); background: #fff; border: 1px solid var(--border);
padding: 3px 12px; border-radius: 999px;
}
/* ---------- Mock 界面 ---------- */
.mock {
border-radius: 14px; overflow: hidden; box-shadow: var(--shadow); border: 1px solid #1e2b45;
background: #0d1526; transform: perspective(1400px) rotateY(-4deg) rotateX(1.5deg);
}
.mock-titlebar {
display: flex; align-items: center; gap: 7px; height: 34px; padding: 0 12px;
background: #101a30; border-bottom: 1px solid #1e2b45;
}
.mock-titlebar i { width: 11px; height: 11px; border-radius: 50%; background: #3a4a6b; }
.mock-titlebar i:nth-child(1) { background: #f87171; } .mock-titlebar i:nth-child(2) { background: #fbbf24; } .mock-titlebar i:nth-child(3) { background: #34d399; }
.mock-titlebar span { margin-left: 8px; color: #8b99b0; font-size: 11px; }
.mock-body { display: grid; grid-template-columns: 158px minmax(0,1fr); min-height: 320px; }
.mock-side { border-right: 1px solid #1e2b45; padding: 10px 8px; background: #0c1322; }
.mock-search { height: 22px; border-radius: 6px; background: #16213a; margin-bottom: 10px; }
.mock-group { color: #8b99b0; font-size: 11px; padding: 6px 6px 3px; }
.mock-item { display: flex; align-items: center; gap: 6px; color: #aab8d0; font-size: 11.5px; padding: 4px 6px; border-radius: 6px; }
.mock-item.active { background: rgba(37,99,235,.18); color: #93c5fd; }
.mi { width: 11px; height: 11px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; opacity: .8; }
.m-get { color: #34d399; font-style: normal; font-size: 9.5px; min-width: 30px; }
.m-post { color: #fbbf24; font-style: normal; font-size: 9.5px; min-width: 30px; }
.mock-main { padding: 10px 12px; display: flex; flex-direction: column; gap: 9px; }
.mock-urlbar { display: flex; align-items: center; gap: 8px; }
.mock-url {
flex: 1; background: #0a1120; border: 1px solid #22304f; border-radius: 7px; color: #cbd5e1;
font-family: var(--mono); font-size: 11px; padding: 6px 10px;
}
.mock-send {
background: var(--blue); color: #fff; font-size: 11px; font-weight: 600;
border-radius: 7px; padding: 6px 14px;
}
.mock-req, .mock-resp { border: 1px solid #1e2b45; border-radius: 9px; padding: 8px 10px; background: #0c1322; }
.mock-req .tab, .mock-resp .tab { color: #5c6a83; font-size: 10.5px; margin-right: 12px; }
.mock-req .tab.on { color: #93c5fd; border-bottom: 2px solid var(--blue); padding-bottom: 2px; }
.mock-resp .tab.on { color: #6ee7b7; border-bottom: 2px solid var(--green); padding-bottom: 2px; }
.mock-status { float: right; color: #34d399; font-size: 10px; font-family: var(--mono); }
.mock pre {
margin: 8px 0 2px; font-family: var(--mono); font-size: 11px; line-height: 1.6; color: #cbd5e1;
white-space: pre-wrap;
}
.mock pre i { font-style: normal; color: #7dd3fc; }
.mock pre u { text-decoration: none; color: #86efac; }
/* ---------- 通用 Section ---------- */
.section { padding: 72px 0; }
.section.alt { background: var(--bg-alt); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.sec-title { font-size: 30px; font-weight: 800; text-align: center; margin: 0 0 8px; }
.sec-sub { text-align: center; color: var(--text-2); margin: 0 0 40px; }
.grid { display: grid; gap: 18px; }
.g3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.g4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
/* ---------- 卡片 ---------- */
.card {
background: #fff; border: 1px solid var(--border); border-radius: var(--radius);
padding: 22px; box-shadow: 0 1px 2px rgba(16,24,40,.04); transition: all .18s;
}
.card:hover { transform: translateY(-3px); box-shadow: var(--shadow); border-color: rgba(37,99,235,.35); }
.card h3 { font-size: 16px; margin: 0 0 6px; }
.card p { color: var(--text-2); font-size: 13.5px; margin: 0; }
.card-icon { color: var(--blue); margin-bottom: 10px; }
.card-icon .i-lg { width: 30px; height: 30px; }
.card.row { display: flex; gap: 14px; align-items: flex-start; }
.card.row .card-icon { margin: 2px 0 0; }
.card.mini h3 { font-size: 15px; display: flex; align-items: center; gap: 8px; }
.card.mini h3 .i-lg { width: 20px; height: 20px; color: var(--blue); }
.card.mini p { font-size: 13px; }
/* ---------- 协议 ---------- */
.proto {
background: #fff; border: 1px solid var(--border); border-left: 3px solid var(--blue);
border-radius: 12px; padding: 18px 20px;
}
.proto h3 { margin: 0 0 6px; font-size: 15.5px; display: flex; align-items: center; gap: 8px; }
.proto h3 .i { color: var(--blue); width: 17px; height: 17px; }
.proto p { margin: 0; color: var(--text-2); font-size: 13.5px; }
/* ---------- 导入导出 ---------- */
.badges { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-bottom: 18px; }
.badges span {
background: #fff; border: 1px solid var(--border); border-radius: 999px;
padding: 6px 16px; font-size: 13px; font-weight: 500; color: var(--text);
}
.badges span.more { border-style: dashed; color: var(--text-2); }
.footnote { text-align: center; color: var(--text-3); font-size: 12.5px; margin: 10px 0 0; }
.exchange-actions { display: flex; align-items: center; justify-content: center; gap: 12px; flex-wrap: wrap; margin-top: 26px; }
.chip {
display: inline-flex; align-items: center; gap: 6px;
background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 8px 16px;
font-size: 13px; font-weight: 600; color: var(--text-2);
}
.chip.big { background: var(--blue); border-color: var(--blue); color: #fff; padding: 10px 22px; }
.exchange-arrow { color: var(--text-3); font-size: 15px; }
/* ---------- 对比表 ---------- */
.table-wrap { overflow-x: auto; }
.cmp { border-collapse: collapse; width: 100%; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 0 0 1px var(--border); font-size: 14px; }
.cmp th, .cmp td { padding: 12px 16px; text-align: left; border-bottom: 1px solid var(--border); }
.cmp th { background: #f9fbfe; font-size: 13.5px; }
.cmp tr:last-child td { border-bottom: none; }
.cmp td.hl { background: rgba(37,99,235,.05); color: var(--blue-dark); }
.cmp th.hl { background: var(--blue); color: #fff; }
/* ---------- 定价 ---------- */
.pricing { display: grid; grid-template-columns: repeat(2, minmax(0, 380px)); gap: 22px; justify-content: center; }
.pricing.three { grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: 1080px; margin: 0 auto; }
.price-card {
position: relative; background: #fff; border: 1px solid var(--border); border-radius: 16px;
padding: 30px 28px 26px; box-shadow: 0 1px 2px rgba(16,24,40,.04); display: flex; flex-direction: column;
}
.price-card.featured { border: 2px solid var(--blue); box-shadow: 0 12px 36px rgba(37,99,235,.16); }
.price-card.enterprise {
background: linear-gradient(160deg, #101a30 0%, #0d1526 70%);
border: 1px solid #2a3b5e; box-shadow: 0 14px 40px rgba(13,21,38,.4);
}
.price-card.enterprise .plan { color: #8b99b0; }
.price-card.enterprise .price b { color: #fff; font-size: 36px; }
.price-card.enterprise .price span { color: #8b99b0; }
.price-card.enterprise .plan-sub { color: #8b99b0; }
.price-card.enterprise li { color: #aab8d0; border-bottom-color: #22304f; }
.price-card.enterprise .deal-note {
margin-top: 14px; font-size: 11.5px; line-height: 1.7; color: #8b99b0;
background: rgba(255,255,255,.05); border: 1px dashed #2a3b5e; border-radius: 9px; padding: 9px 12px;
}
.price-card.enterprise .deal-note b { color: #93c5fd; }
.btn-dark { background: #fff; color: #0d1526 !important; }
.btn-dark:hover { transform: translateY(-1px); background: #e8eefc; }
.plan-tag {
position: absolute; top: -13px; left: 50%; transform: translateX(-50%);
background: var(--blue); color: #fff; font-size: 12px; font-weight: 700;
padding: 3px 14px; border-radius: 999px; white-space: nowrap;
}
.plan-tag.dark { background: #0d1526; border: 1px solid #2a3b5e; }
.plan { font-size: 16px; font-weight: 700; color: var(--text-2); }
.price { margin: 8px 0 2px; }
.price b { font-size: 44px; font-weight: 800; letter-spacing: -.02em; color: var(--text); }
.price span { color: var(--text-3); font-size: 14px; margin-left: 4px; }
.plan-sub { color: var(--text-3); font-size: 13px; margin-bottom: 18px; }
.price-card ul { list-style: none; padding: 0; margin: 0 0 22px; flex: 1; }
.price-card li { font-size: 13.5px; color: var(--text-2); padding: 6px 0; border-bottom: 1px dashed var(--border); }
.price-card li:last-child { border-bottom: none; }
.price-card .btn { width: 100%; }
.growth-title { text-align: center; font-size: 20px; font-weight: 700; margin: 52px 0 22px; }
/* ---------- FAQ ---------- */
.faq details {
background: #fff; border: 1px solid var(--border); border-radius: 12px;
padding: 16px 20px; margin-bottom: 12px;
}
.faq summary { font-weight: 600; cursor: pointer; font-size: 15px; list-style: none; display: flex; justify-content: space-between; }
.faq summary::after { content: "+"; color: var(--text-3); font-weight: 400; }
.faq details[open] summary::after { content: "-"; }
.faq details p { margin: 10px 0 0; color: var(--text-2); font-size: 14px; }
/* ---------- CTA ---------- */
.cta {
background: linear-gradient(135deg, #1d4ed8 0%, #2563eb 55%, #3b82f6 100%);
color: #fff; text-align: center; padding: 72px 24px;
}
.cta h2 { font-size: 32px; font-weight: 800; margin: 0 0 10px; }
.cta p { color: rgba(255,255,255,.85); margin: 0 0 28px; }
/* ---------- Footer ---------- */
.footer { background: #0d1526; color: #8b99b0; padding: 52px 0 0; font-size: 13.5px; }
.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 32px; padding-bottom: 36px; }
.footer .brand-name { color: #fff !important; }
.footer .f-logo { display: block; border-radius: 8px; }
.footer .brand { display: flex; align-items: center; gap: 9px; }
.footer-desc { margin: 12px 0 0; font-size: 13px; line-height: 1.8; }
.footer h4 { color: #fff; font-size: 13.5px; margin: 4px 0 12px; }
.footer a { display: block; color: #8b99b0 !important; padding: 4px 0; font-size: 13px; }
.footer a:hover { color: #fff !important; }
.footer-bar { border-top: 1px solid #1e2b45; text-align: center; padding: 18px; font-size: 12px; color: #5c6a83; }
/* ---------- 响应式 ---------- */
@media (max-width: 1020px) {
.hero-inner { grid-template-columns: 1fr; padding-top: 52px; }
.mock { transform: none; }
.g4 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.g3 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.pricing, .pricing.three { grid-template-columns: minmax(0, 420px); }
.footer-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 680px) {
.nav-links { display: none; }
.hero h1 { font-size: 32px; }
.sec-title { font-size: 24px; }
.g3, .g4 { grid-template-columns: 1fr; }
.footer-grid { grid-template-columns: 1fr; }
}