热门角色不仅是灵感来源,更是你的效率助手。通过精挑细选的角色提示词,你可以快速生成高质量内容、提升创作灵感,并找到最契合你需求的解决方案。让创作更轻松,让价值更直接!
我们根据不同用户需求,持续更新角色库,让你总能找到合适的灵感入口。
本提示词模板专为简化网站创建流程而设计,能够根据用户提供的设计元素自动生成功能完整的网站。通过深度分析设计需求,采用分步推理的方式确保网站结构的合理性和功能的完整性。模板具备卓越的设计元素解析能力,能够智能适配不同业务场景,从企业官网到个人作品集均可高效生成。亮点在于将复杂的网站开发过程转化为简单的设计输入,无需编程知识即可获得专业级网站,同时支持多种设计风格的灵活配置,确保输出结果既美观又实用。该模板特别适合设计师、创业者、中小企业主等非技术背景用户快速搭建在线展示平台。
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>企业官网 | 产品与服务展示</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="稳重现代的企业官网与产品服务展示,统一品牌风格,配置联系我们与询价表单,收集销售线索。">
<meta property="og:title" content="企业官网 | 产品与服务展示">
<meta property="og:description" content="稳重现代的企业官网与产品服务展示,统一品牌风格,配置联系我们与询价表单,收集销售线索。">
<meta property="og:type" content="website">
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><rect width=%22100%22 height=%22100%22 rx=%2215%22 fill=%22%230A1F44%22/><text x=%2250%22 y=%2258%22 font-size=%2250%22 text-anchor=%22middle%22 fill=%22white%22>B</text></svg>">
<link rel="stylesheet" href="styles.css">
<script defer src="script.js"></script>
</head>
<body>
<a class="skip-link" href="#main">跳转至正文</a>
<header class="site-header" role="banner">
<div class="container header-inner">
<a href="#home" class="brand" aria-label="企业品牌首页">企业品牌</a>
<nav class="site-nav" aria-label="主导航">
<button class="nav-toggle" aria-label="打开菜单" aria-expanded="false" data-nav-toggle>
<span class="nav-toggle-bar"></span>
<span class="nav-toggle-bar"></span>
<span class="nav-toggle-bar"></span>
</button>
<ul class="nav-list" data-nav-list>
<li><a href="#about">关于我们</a></li>
<li><a href="#products">产品与服务</a></li>
<li><a href="#process">服务流程</a></li>
<li><a href="#testimonials">客户反馈</a></li>
<li><a href="#contact">联系我们</a></li>
</ul>
</nav>
<button class="btn btn-accent cta-header" data-open-modal="#quoteModal">获取报价</button>
</div>
</header>
<main id="main">
<!-- 首屏大横幅 -->
<section id="home" class="hero">
<div class="container hero-grid">
<div class="hero-content">
<h1>稳重现代的企业官网,助力品牌升级</h1>
<p class="hero-sub">以深蓝与白为基调,统一品牌形象;网格布局清晰呈现产品与服务,通过询价表单高效收集销售线索。</p>
<div class="hero-actions">
<button class="btn btn-accent btn-lg" data-open-modal="#quoteModal" aria-label="打开询价表单">获取报价</button>
<a class="btn btn-outline btn-lg" href="#contact">联系我们</a>
</div>
</div>
<div class="hero-visual" aria-hidden="true">
<svg viewBox="0 0 480 360" class="hero-svg">
<defs>
<linearGradient id="g1" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#0A1F44"/>
<stop offset="100%" stop-color="#123768"/>
</linearGradient>
</defs>
<rect x="0" y="0" width="480" height="360" rx="24" fill="url(#g1)"/>
<g fill="#2D9CDB" opacity="0.8">
<circle cx="80" cy="80" r="8"/>
<circle cx="120" cy="80" r="8"/>
<circle cx="160" cy="80" r="8"/>
</g>
<rect x="48" y="120" width="384" height="160" rx="16" fill="#ffffff" opacity="0.09"/>
<rect x="72" y="144" width="336" height="24" rx="6" fill="#2D9CDB" opacity="0.25"/>
<rect x="72" y="184" width="216" height="24" rx="6" fill="#2D9CDB" opacity="0.25"/>
</svg>
</div>
</div>
</section>
<!-- 关于我们 -->
<section id="about" class="section about">
<div class="container grid-2">
<div>
<h2>关于我们</h2>
<p>我们致力于为企业提供现代化的网页解决方案,通过优雅的设计与可靠的技术,提升线上形象与获客效率。</p>
</div>
<div class="about-cards">
<article class="card">
<h3>成立背景</h3>
<p>团队由资深设计与前端工程师组成,融合审美与技术,为不同行业打造高品质网站。</p>
</article>
<article class="card">
<h3>业务范围简述</h3>
<p>企业官网建设、产品展示页、询价表单与线索收集、基础SEO优化、主流浏览器兼容与响应式适配。</p>
</article>
</div>
</div>
</section>
<!-- 产品与服务 -->
<section id="products" class="section products">
<div class="container">
<h2>产品与服务</h2>
<div class="grid-3">
<article class="card card-product">
<div class="icon">
<svg viewBox="0 0 48 48" aria-hidden="true">
<rect x="6" y="10" width="36" height="28" rx="4" fill="#2D9CDB"/>
<rect x="10" y="14" width="28" height="6" rx="3" fill="#fff"/>
<rect x="10" y="24" width="18" height="6" rx="3" fill="#fff" opacity="0.9"/>
</svg>
</div>
<h3>智能官网引擎</h3>
<p class="sell">一体化搭建与管理,让官网快速上线,维护更轻松。</p>
</article>
<article class="card card-product">
<div class="icon">
<svg viewBox="0 0 48 48" aria-hidden="true">
<circle cx="24" cy="24" r="18" fill="#2D9CDB"/>
<rect x="16" y="22" width="16" height="4" rx="2" fill="#fff"/>
<rect x="22" y="16" width="4" height="16" rx="2" fill="#fff"/>
</svg>
</div>
<h3>轻量产品展示</h3>
<p class="sell">网格化卡片呈现要点,突出卖点,转化更直接。</p>
</article>
<article class="card card-product">
<div class="icon">
<svg viewBox="0 0 48 48" aria-hidden="true">
<rect x="10" y="10" width="28" height="28" rx="6" fill="#2D9CDB"/>
<polyline points="14,28 20,22 26,30 34,18" stroke="#fff" stroke-width="3" fill="none"/>
</svg>
</div>
<h3>数据洞察仪表</h3>
<p class="sell">基础数据追踪与可视化,支持后续接入CRM与分析。</p>
</article>
</div>
</div>
</section>
<!-- 服务流程 -->
<section id="process" class="section process">
<div class="container">
<h2>服务流程</h2>
<div class="grid-4 steps">
<article class="step">
<div class="num">01</div>
<h3>需求沟通</h3>
<p>明确网站目标、风格偏好与内容素材。</p>
</article>
<article class="step">
<div class="num">02</div>
<h3>方案与报价</h3>
<p>确认信息架构与设计方案,提供合理预算区间。</p>
</article>
<article class="step">
<div class="num">03</div>
<h3>开发交付</h3>
<p>输出高质量前端代码,完成测试与优化。</p>
</article>
<article class="step">
<div class="num">04</div>
<h3>上线与支持</h3>
<p>协助部署上线,提供后续维护与升级建议。</p>
</article>
</div>
</div>
</section>
<!-- 客户反馈 -->
<section id="testimonials" class="section testimonials">
<div class="container">
<h2>客户反馈</h2>
<div class="slider" data-slider>
<div class="slides">
<figure class="slide">
<blockquote>“官网很干净利落,CTA醒目,询价表单带来了实际线索。”</blockquote>
<figcaption>— 制造业客户</figcaption>
</figure>
<figure class="slide">
<blockquote>“设计稳重现代,品牌一致性很好,加载速度也很快。”</blockquote>
<figcaption>— 科技企业</figcaption>
</figure>
<figure class="slide">
<blockquote>“从沟通到上线体验顺畅,后续维护建议也很专业。”</blockquote>
<figcaption>— 服务业伙伴</figcaption>
</figure>
</div>
<div class="slider-controls">
<button class="btn btn-outline btn-sm" data-prev>上一条</button>
<button class="btn btn-outline btn-sm" data-next>下一条</button>
</div>
</div>
</div>
</section>
<!-- 联系我们 -->
<section id="contact" class="section contact">
<div class="container grid-2">
<div>
<h2>联系我们</h2>
<address class="contact-info">
<p><strong>邮箱:</strong><a href="mailto:contact@yourcompany.com">contact@yourcompany.com</a></p>
<p><strong>电话:</strong><a href="tel:+864001234567">400-123-4567</a></p>
<p><strong>所在城市:</strong>上海</p>
</address>
<p class="note">也可点击页面右上角或首屏按钮,打开询价表单。</p>
</div>
<!-- 询价表单(内嵌版) -->
<form class="form card" data-lead-form novalidate>
<h3>询价表单</h3>
<div class="form-row">
<label for="name">姓名</label>
<input id="name" name="name" type="text" required placeholder="请输入您的姓名" aria-required="true">
</div>
<div class="form-row">
<label for="phone">电话</label>
<input id="phone" name="phone" type="tel" required placeholder="手机号或座机" aria-required="true" pattern="^(\+?\d{1,4}[-\s]?)?(\d{7,13})$">
</div>
<div class="form-row">
<label for="budget">预算区间</label>
<select id="budget" name="budget" required aria-required="true">
<option value="">请选择</option>
<option>¥3-5万</option>
<option>¥5-10万</option>
<option>¥10-30万</option>
<option>¥30万以上</option>
</select>
</div>
<div class="form-row">
<label for="desc">需求描述</label>
<textarea id="desc" name="desc" rows="4" placeholder="简要描述您的网站目标与内容需求"></textarea>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-accent">提交询价</button>
<p class="form-status" aria-live="polite"></p>
</div>
</form>
</div>
</section>
</main>
<footer class="site-footer">
<div class="container footer-inner">
<p>© <span id="year"></span> 企业品牌. 保留所有权利。</p>
<nav aria-label="页脚导航">
<a href="#about">关于</a>
<a href="#products">产品</a>
<a href="#process">流程</a>
<a href="#contact">联系</a>
</nav>
</div>
</footer>
<!-- 询价表单弹窗 -->
<div class="modal" id="quoteModal" aria-hidden="true" aria-labelledby="quoteTitle" role="dialog">
<div class="modal-backdrop" data-close-modal></div>
<div class="modal-dialog" role="document" aria-modal="true">
<button class="modal-close" aria-label="关闭弹窗" data-close-modal>×</button>
<h3 id="quoteTitle">获取报价</h3>
<form class="form" data-lead-form novalidate>
<div class="form-row">
<label for="m-name">姓名</label>
<input id="m-name" name="name" type="text" required placeholder="请输入您的姓名" aria-required="true">
</div>
<div class="form-row">
<label for="m-phone">电话</label>
<input id="m-phone" name="phone" type="tel" required placeholder="手机号或座机" aria-required="true" pattern="^(\+?\d{1,4}[-\s]?)?(\d{7,13})$">
</div>
<div class="form-row">
<label for="m-budget">预算区间</label>
<select id="m-budget" name="budget" required aria-required="true">
<option value="">请选择</option>
<option>¥3-5万</option>
<option>¥5-10万</option>
<option>¥10-30万</option>
<option>¥30万以上</option>
</select>
</div>
<div class="form-row">
<label for="m-desc">需求描述</label>
<textarea id="m-desc" name="desc" rows="4" placeholder="简要描述您的网站目标与内容需求"></textarea>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-accent">提交询价</button>
<p class="form-status" aria-live="polite"></p>
</div>
</form>
</div>
</div>
</body>
</html>
/* styles.css */
/* 基础主题变量 */
:root {
--blue-900: #0A1F44;
--blue-800: #0F2B5C;
--blue-700: #123768;
--accent: #2D9CDB;
--text: #0D1B2A;
--muted: #6B7B8C;
--bg: #FFFFFF;
--bg-alt: #F3F7FB;
--radius-sm: 8px;
--radius-md: 14px;
--radius-lg: 20px;
--shadow-sm: 0 2px 8px rgba(10,31,68,0.08);
--shadow-md: 0 8px 24px rgba(10,31,68,0.12);
--max-w: 1120px;
}
/* CSS Reset 简化 */
* { box-sizing: border-box; }
html, body { height: 100%; }
body {
margin: 0;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans", "Helvetica Neue", Arial, "PingFang SC", "Microsoft Yahei", sans-serif;
color: var(--text);
background: var(--bg);
line-height: 1.6;
}
img, svg { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
button { font: inherit; }
input, select, textarea { font: inherit; color: inherit; }
/* 可访问性 */
.skip-link {
position: absolute; left: -999px; top: -999px;
}
.skip-link:focus {
left: 12px; top: 12px; background: var(--bg); color: var(--blue-900);
padding: 8px 12px; border-radius: var(--radius-sm); box-shadow: var(--shadow-sm);
}
/* 容器与栅格 */
.container {
width: 100%;
max-width: var(--max-w);
margin-inline: auto;
padding-inline: 20px;
}
.section { padding: 72px 0; }
.grid-2 {
display: grid; gap: 28px;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-3 {
display: grid; gap: 28px;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-4 {
display: grid; gap: 28px;
grid-template-columns: repeat(4, minmax(0, 1fr));
}
/* 头部导航 */
.site-header {
position: sticky; top: 0; z-index: 1000;
background: rgba(10,31,68,0.95);
backdrop-filter: saturate(150%) blur(8px);
color: #fff;
box-shadow: 0 1px 0 rgba(255,255,255,0.06);
}
.header-inner {
display: flex; align-items: center; justify-content: space-between;
height: 64px;
}
.brand {
color: #fff; font-weight: 700; letter-spacing: 0.3px; font-size: 18px;
}
.site-nav { display: flex; align-items: center; gap: 18px; }
.nav-toggle {
display: none; background: transparent; border: none; cursor: pointer;
}
.nav-toggle-bar {
display: block; width: 24px; height: 2px; background: #fff; margin: 5px 0;
}
.nav-list {
display: flex; list-style: none; gap: 18px; margin: 0; padding: 0;
}
.nav-list a {
color: #fff; opacity: 0.9; padding: 8px 10px; border-radius: 8px;
}
.nav-list a:hover, .nav-list a:focus { background: rgba(255,255,255,0.08); opacity: 1; }
.cta-header { display: inline-flex; }
/* 按钮 */
.btn {
display: inline-flex; align-items: center; justify-content: center;
padding: 10px 16px; border-radius: var(--radius-sm);
border: 1px solid transparent; cursor: pointer; transition: all .25s ease;
}
.btn-lg { padding: 12px 20px; font-weight: 600; }
.btn-sm { padding: 6px 12px; font-size: 14px; }
.btn-accent {
background: var(--accent); color: #fff; box-shadow: var(--shadow-sm);
}
.btn-accent:hover { filter: brightness(1.05); transform: translateY(-1px); }
.btn-outline {
background: transparent; color: var(--accent); border-color: var(--accent);
}
.btn-outline:hover { background: rgba(45,156,219,0.08); }
/* 首屏 */
.hero {
background: linear-gradient(180deg, var(--blue-900), var(--blue-800));
color: #fff;
padding: 96px 0 88px;
}
.hero-grid {
display: grid; gap: 36px;
grid-template-columns: repeat(2, minmax(0, 1fr));
align-items: center;
}
.hero-content h1 { font-size: 36px; line-height: 1.2; margin: 0 0 12px; }
.hero-sub { opacity: 0.9; }
.hero-actions { display: flex; gap: 12px; margin-top: 20px; }
.hero-visual { justify-self: end; max-width: 520px; }
.hero-svg { border-radius: var(--radius-lg); box-shadow: var(--shadow-md); }
/* 关于我们 */
.about .about-cards {
display: grid; gap: 20px;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.card {
background: #fff; border: 1px solid #E6ECF3; border-radius: var(--radius-md);
padding: 20px; box-shadow: var(--shadow-sm);
}
.about h2, .products h2, .process h2, .testimonials h2, .contact h2 {
color: var(--blue-900);
}
/* 产品与服务 */
.card-product .icon { width: 56px; height: 56px; border-radius: 14px; background: var(--bg-alt); display: grid; place-items: center; margin-bottom: 12px; }
.card-product h3 { margin: 8px 0; }
.sell { color: var(--muted); }
/* 服务流程 */
.steps .step {
background: #fff; border: 1px solid #E6ECF3; border-radius: var(--radius-md);
padding: 18px; box-shadow: var(--shadow-sm);
}
.step .num {
width: 40px; height: 40px; border-radius: 12px; background: var(--accent); color: #fff;
display: grid; place-items: center; font-weight: 700; margin-bottom: 8px;
}
/* 客户反馈 */
.testimonials { background: var(--bg-alt); }
.slider { position: relative; overflow: hidden; border-radius: var(--radius-md); background: #fff; padding: 12px; }
.slides {
display: flex; transition: transform .4s ease;
}
.slide {
min-width: 100%;
padding: 18px;
}
blockquote { font-size: 18px; color: var(--blue-900); margin: 0 0 8px; }
figcaption { color: var(--muted); }
.slider-controls {
display: flex; gap: 8px; justify-content: flex-end; padding: 8px 4px;
}
/* 联系我们与表单 */
.contact .contact-info a { color: var(--accent); }
.form {
display: grid; gap: 12px;
}
.form-row {
display: grid; gap: 6px;
}
label { font-weight: 600; color: var(--blue-900); }
input[type="text"], input[type="tel"], select, textarea {
border: 1px solid #D8E1EA; border-radius: 10px; padding: 10px 12px; background: #fff;
}
input:focus, select:focus, textarea:focus {
outline: 2px solid rgba(45,156,219,0.35); border-color: var(--accent);
}
.form-actions { display: flex; align-items: center; gap: 12px; }
.form-status { font-size: 14px; color: var(--muted); }
/* 页脚 */
.site-footer {
border-top: 1px solid #E6ECF3; background: #fff; color: var(--muted);
}
.footer-inner {
display: flex; align-items: center; justify-content: space-between; padding: 20px;
}
.site-footer a { color: var(--accent); }
/* 锚点滚动修正 */
:target { scroll-margin-top: 84px; }
/* 弹窗 */
.modal { position: fixed; inset: 0; display: none; }
.modal.open { display: block; }
.modal-backdrop {
position: absolute; inset: 0; background: rgba(13,27,42,0.55); backdrop-filter: blur(2px);
}
.modal-dialog {
position: relative;
width: min(560px, calc(100% - 32px));
margin: 8vh auto;
background: #fff; border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
padding: 20px;
}
.modal-close {
position: absolute; right: 10px; top: 8px;
background: transparent; border: none; font-size: 28px; color: var(--muted); cursor: pointer;
}
/* 响应式 */
@media (max-width: 1024px) {
.grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
.hero-grid, .grid-2 { grid-template-columns: 1fr; }
.nav-toggle { display: inline-block; }
.nav-list {
position: absolute; right: 20px; top: 64px;
background: var(--blue-800); border: 1px solid rgba(255,255,255,0.12);
border-radius: 12px; padding: 12px;
display: none; flex-direction: column; gap: 10px; min-width: 180px;
}
.nav-list.open { display: flex; }
.cta-header { display: none; }
.hero { padding: 72px 0; }
}
/* 降低动画对部分用户影响 */
@media (prefers-reduced-motion: reduce) {
.slides { transition: none; }
.btn, .nav-list a { transition: none; }
}
// script.js
// 年份更新
document.getElementById('year').textContent = new Date().getFullYear();
// 移动端导航开合
const navToggle = document.querySelector('[data-nav-toggle]');
const navList = document.querySelector('[data-nav-list]');
if (navToggle && navList) {
navToggle.addEventListener('click', () => {
const open = navList.classList.toggle('open');
navToggle.setAttribute('aria-expanded', String(open));
});
// 点击导航项后收起菜单
navList.addEventListener('click', (e) => {
if (e.target.tagName === 'A') {
navList.classList.remove('open');
navToggle.setAttribute('aria-expanded', 'false');
}
});
}
// 简易轮播
(function initSlider() {
const slider = document.querySelector('[data-slider]');
if (!slider) return;
const slidesEl = slider.querySelector('.slides');
const slides = slider.querySelectorAll('.slide');
const prev = slider.querySelector('[data-prev]');
const next = slider.querySelector('[data-next]');
let index = 0;
function update() {
slidesEl.style.transform = `translateX(-${index * 100}%)`;
}
prev.addEventListener('click', () => {
index = (index - 1 + slides.length) % slides.length;
update();
});
next.addEventListener('click', () => {
index = (index + 1) % slides.length;
update();
});
// 自动播放
let autoplay = setInterval(() => {
index = (index + 1) % slides.length;
update();
}, 5000);
slider.addEventListener('mouseenter', () => clearInterval(autoplay));
slider.addEventListener('mouseleave', () => {
autoplay = setInterval(() => {
index = (index + 1) % slides.length;
update();
}, 5000);
});
})();
// 弹窗逻辑
const modal = document.getElementById('quoteModal');
function openModal() {
modal.classList.add('open');
modal.setAttribute('aria-hidden', 'false');
const input = modal.querySelector('input, select, textarea, button');
input && input.focus();
}
function closeModal() {
modal.classList.remove('open');
modal.setAttribute('aria-hidden', 'true');
}
document.querySelectorAll('[data-open-modal]').forEach(btn => {
btn.addEventListener('click', (e) => {
const target = btn.getAttribute('data-open-modal');
if (target === '#quoteModal') openModal();
});
});
document.querySelectorAll('[data-close-modal]').forEach(el => {
el.addEventListener('click', closeModal);
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && modal.classList.contains('open')) closeModal();
});
// 表单处理(线索收集)
const leadForms = document.querySelectorAll('form[data-lead-form]');
leadForms.forEach(form => {
const statusEl = form.querySelector('.form-status');
form.addEventListener('submit', async (e) => {
e.preventDefault();
const data = {
name: form.name?.value?.trim(),
phone: form.phone?.value?.trim(),
budget: form.budget?.value,
desc: form.desc?.value?.trim() || ''
};
// 基础校验
let errors = [];
if (!data.name) errors.push('请输入姓名');
if (!data.phone) errors.push('请输入电话');
if (!data.budget) errors.push('请选择预算区间');
const phonePattern = /^(\+?\d{1,4}[-\s]?)?(\d{7,13})$/;
if (data.phone && !phonePattern.test(data.phone)) errors.push('电话格式不正确');
if (errors.length) {
statusEl.textContent = errors.join(';');
statusEl.style.color = '#C62828';
return;
}
// 本地存储(示例)
try {
const leads = JSON.parse(localStorage.getItem('leads') || '[]');
leads.push({ ...data, ts: Date.now() });
localStorage.setItem('leads', JSON.stringify(leads));
} catch (err) {
// 忽略本地存储错误
}
// 可选:发送到后端(若部署时设置 window.LEAD_ENDPOINT)
// 在部署中将 window.LEAD_ENDPOINT 指向后端/表单服务地址,如:
// window.LEAD_ENDPOINT = 'https://api.example.com/leads';
if (window.LEAD_ENDPOINT) {
try {
const resp = await fetch(window.LEAD_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
if (!resp.ok) throw new Error('提交失败');
} catch (err) {
statusEl.textContent = '网络提交失败,已本地记录。';
statusEl.style.color = '#C62828';
return;
}
}
statusEl.textContent = '提交成功!我们将尽快与您联系。';
statusEl.style.color = '#2D9CDB';
form.reset();
// 若在弹窗中提交,自动关闭
if (form.closest('.modal')) {
setTimeout(closeModal, 600);
}
});
});
<!doctype html>
<html lang="zh-CN" data-theme="auto">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>新产品预发布 | 报名与预约</title>
<meta name="description" content="用数据驱动的预发布页,快速验证核心卖点并沉淀早期用户。" />
<!-- 可选:配置表单上报端点:例如 https://example.com/api/lead -->
<meta name="form-endpoint" content="" />
<style>
:root {
--bg: #f7f9fc;
--surface: #ffffff;
--text: #111827;
--muted: #6b7280;
--primary: #5b7cfa;
--primary-600: #4c6af5;
--primary-700: #3f5ae6;
--ring: rgba(91,124,250,0.35);
--border: #e5e7eb;
--success: #10b981;
--warning: #f59e0b;
--danger: #ef4444;
--gradient: linear-gradient(135deg, #b3d2ff 0%, #e0c6ff 50%, #ffe3f3 100%);
--shadow-sm: 0 1px 2px rgba(0,0,0,0.06);
--shadow-md: 0 6px 24px rgba(0,0,0,0.08);
--radius: 14px;
--radius-sm: 10px;
color-scheme: light dark;
}
@media (prefers-color-scheme: dark) {
:root {
--bg: #0b1020;
--surface: #121937;
--text: #e5e7eb;
--muted: #a3a8b3;
--primary: #7ea1ff;
--primary-600: #7091ff;
--primary-700: #5f7af5;
--ring: rgba(126,161,255,0.35);
--border: #20274b;
--gradient: linear-gradient(135deg, #1a2448 0%, #2d1f49 50%, #3a1e34 100%);
--shadow-sm: 0 1px 2px rgba(0,0,0,0.35);
--shadow-md: 0 10px 30px rgba(0,0,0,0.35);
}
}
html[data-theme="light"] {
--bg: #f7f9fc;
--surface: #ffffff;
--text: #111827;
--muted: #6b7280;
--primary: #5b7cfa;
--primary-600: #4c6af5;
--primary-700: #3f5ae6;
--ring: rgba(91,124,250,0.35);
--border: #e5e7eb;
--gradient: linear-gradient(135deg, #b3d2ff 0%, #e0c6ff 50%, #ffe3f3 100%);
--shadow-sm: 0 1px 2px rgba(0,0,0,0.06);
--shadow-md: 0 6px 24px rgba(0,0,0,0.08);
}
html[data-theme="dark"] {
--bg: #0b1020;
--surface: #121937;
--text: #e5e7eb;
--muted: #a3a8b3;
--primary: #7ea1ff;
--primary-600: #7091ff;
--primary-700: #5f7af5;
--ring: rgba(126,161,255,0.35);
--border: #20274b;
--gradient: linear-gradient(135deg, #1a2448 0%, #2d1f49 50%, #3a1e34 100%);
--shadow-sm: 0 1px 2px rgba(0,0,0,0.35);
--shadow-md: 0 10px 30px rgba(0,0,0,0.35);
}
* { box-sizing: border-box; }
html, body { height: 100%; }
body {
margin: 0;
font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
color: var(--text);
background: var(--bg);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.gradient-bg {
position: absolute; inset: 0; z-index: -1;
background: var(--gradient);
opacity: 0.5;
filter: blur(60px) saturate(1.2);
}
.container {
width: 100%;
max-width: 1160px;
padding: 0 16px;
margin: 0 auto;
}
header.site-header {
position: sticky; top: 0; z-index: 50;
backdrop-filter: saturate(1.2) blur(10px);
background: color-mix(in oklab, var(--surface) 75%, transparent);
border-bottom: 1px solid var(--border);
}
.nav {
display: flex; align-items: center; justify-content: space-between;
height: 64px;
}
.brand { display: flex; align-items: center; gap: 10px; font-weight: 700; }
.brand .logo {
width: 28px; height: 28px; border-radius: 8px;
background: linear-gradient(135deg, var(--primary), #9a7bff);
box-shadow: var(--shadow-sm);
}
.nav-links {
display: none; gap: 20px; align-items: center;
}
.nav-links a {
color: var(--text); text-decoration: none; font-weight: 500;
}
.nav-actions { display: flex; align-items: center; gap: 10px; }
.btn, button.btn {
appearance: none; cursor: pointer; user-select: none;
border: 1px solid color-mix(in oklab, var(--primary) 30%, var(--border));
background: linear-gradient(180deg, var(--primary), var(--primary-600));
color: #fff; padding: 10px 14px; border-radius: 999px;
box-shadow: 0 8px 18px rgba(91,124,250,0.25);
font-weight: 600; transition: transform .05s ease, box-shadow .2s ease;
}
.btn:hover { box-shadow: 0 10px 22px rgba(91,124,250,0.32); }
.btn:active { transform: translateY(1px); }
.btn-outline {
background: transparent; color: var(--text);
border: 1px solid var(--border); box-shadow: var(--shadow-sm);
}
.btn-ghost {
background: transparent; border: 1px solid transparent; color: var(--text);
}
.icon-btn {
border: 1px solid var(--border);
background: color-mix(in oklab, var(--surface) 85%, transparent);
color: var(--text); width: 40px; height: 40px; border-radius: 999px;
display: inline-flex; align-items: center; justify-content: center;
box-shadow: var(--shadow-sm);
}
.hamburger { display: inline-flex; }
@media (min-width: 900px) {
.nav-links { display: flex; }
.hamburger { display: none; }
}
.mobile-menu {
display: none; border-top: 1px solid var(--border);
background: var(--surface);
}
.mobile-menu.open { display: block; }
.mobile-menu a { display: block; padding: 14px 0; color: var(--text); text-decoration: none; }
.hero {
position: relative; padding: 36px 0 24px;
}
.hero-card {
position: relative; overflow: hidden;
background: color-mix(in oklab, var(--surface) 85%, transparent);
border: 1px solid var(--border);
border-radius: var(--radius);
box-shadow: var(--shadow-md);
padding: 22px;
}
@media (min-width: 900px) {
.hero { padding: 64px 0 40px; }
.hero-card { padding: 42px; }
}
.kicker { color: var(--primary); font-weight: 700; letter-spacing: .08em; font-size: 12px; text-transform: uppercase; }
.hero-title { font-size: 26px; line-height: 1.2; margin: 8px 0 10px; font-weight: 800; }
.hero-sub { color: var(--muted); font-size: 16px; margin-bottom: 16px; }
@media (min-width: 900px) {
.hero-title { font-size: 42px; }
.hero-sub { font-size: 18px; }
}
.hero-ctas { display: flex; gap: 10px; flex-wrap: wrap; }
.legal { font-size: 12px; color: var(--muted); margin-top: 8px; }
.section { padding: 28px 0; }
@media (min-width: 900px) { .section { padding: 48px 0; } }
.section-title { font-size: 22px; font-weight: 800; margin-bottom: 14px; }
.section-sub { color: var(--muted); margin-bottom: 18px; }
.grid {
display: grid; gap: 12px;
grid-template-columns: 1fr;
}
@media (min-width: 700px) { .grid-2 { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .grid-3 { grid-template-columns: repeat(3, 1fr); } }
.card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
box-shadow: var(--shadow-sm);
padding: 16px;
}
.feature { display: flex; gap: 12px; }
.feature .ico {
width: 40px; height: 40px; border-radius: 10px;
display: inline-flex; align-items: center; justify-content: center;
background: color-mix(in oklab, var(--primary) 12%, transparent);
color: var(--primary);
}
.feature h3 { margin: 0 0 6px; font-size: 16px; }
.feature p { margin: 0; color: var(--muted); font-size: 14px; }
.timeline { position: relative; }
.timeline::before {
content: ""; position: absolute; left: 14px; top: 0; bottom: 0; width: 2px;
background: var(--border);
}
.t-item { position: relative; padding-left: 40px; margin-bottom: 16px; }
.t-item::before {
content: ""; position: absolute; left: 6px; top: 4px; width: 16px; height: 16px; border-radius: 999px;
background: var(--surface); border: 2px solid var(--primary);
box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 15%, transparent);
}
.t-item h4 { margin: 0 0 4px; }
.t-item p { margin: 0; color: var(--muted); }
details.faq { border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface); padding: 10px 12px; }
details.faq + details.faq { margin-top: 10px; }
details.faq[open] { box-shadow: var(--shadow-sm); }
summary { cursor: pointer; list-style: none; font-weight: 600; }
summary::-webkit-details-marker { display: none; }
.faq p { color: var(--muted); margin: 8px 0 0; }
.form {
display: grid; gap: 12px;
}
.input, select, textarea {
width: 100%; padding: 12px 12px;
border: 1px solid var(--border); border-radius: 10px;
background: color-mix(in oklab, var(--surface) 90%, transparent);
color: var(--text);
outline: none;
transition: border-color .2s ease, box-shadow .2s ease;
}
.input:focus, select:focus, textarea:focus {
border-color: var(--primary);
box-shadow: 0 0 0 4px var(--ring);
}
.assist { font-size: 12px; color: var(--muted); }
.error { color: var(--danger); font-size: 12px; }
.success {
border: 1px solid color-mix(in oklab, var(--success) 40%, var(--border));
background: color-mix(in oklab, var(--success) 8%, var(--surface));
color: var(--text);
padding: 12px; border-radius: var(--radius-sm);
}
.socials { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.socials a {
display: inline-flex; align-items: center; gap: 8px; text-decoration: none;
color: var(--text); padding: 8px 10px; border: 1px solid var(--border); border-radius: 999px;
background: color-mix(in oklab, var(--surface) 85%, transparent);
}
footer {
padding: 24px 0; border-top: 1px solid var(--border); margin-top: 24px;
background: color-mix(in oklab, var(--surface) 80%, transparent);
}
.sticky-cta {
position: sticky; bottom: 10px; z-index: 40; pointer-events: none;
}
.sticky-cta .wrap {
pointer-events: auto; display: flex; justify-content: center;
}
.sticky-cta .wrap .btn { box-shadow: 0 10px 24px rgba(91,124,250,0.35); }
.modal {
position: fixed; inset: 0; display: none; align-items: center; justify-content: center; z-index: 60;
background: rgba(0,0,0,0.35);
}
.modal.open { display: flex; }
.modal .dialog {
max-width: 680px; width: calc(100% - 32px);
background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
box-shadow: var(--shadow-md); padding: 18px;
}
.modal .dialog h3 { margin-top: 0; }
</style>
</head>
<body>
<div class="gradient-bg" aria-hidden="true"></div>
<header class="site-header" role="banner">
<div class="container nav">
<div class="brand">
<div class="logo" aria-hidden="true"></div>
<a href="#" aria-label="返回首页" style="text-decoration:none; color:inherit;">预发布实验室</a>
</div>
<nav class="nav-links" aria-label="主导航">
<a href="#features">功能亮点</a>
<a href="#roadmap">路线图</a>
<a href="#faq">FAQ</a>
<a href="#signup">报名预约</a>
</nav>
<div class="nav-actions">
<button class="icon-btn" id="themeToggle" aria-label="切换主题" title="切换主题 (T)">
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M21.64,13a9,9,0,1,1-10.63-10A1,1,0,0,1,12,4a7,7,0,1,0,8,8A1,1,0,0,1,21.64,13Z"/></svg>
</button>
<a href="#signup" class="btn" aria-label="立即报名">立即报名</a>
<button class="icon-btn hamburger" id="menuToggle" aria-label="展开菜单">
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M3 6h18v2H3zM3 11h18v2H3zM3 16h18v2H3z"/></svg>
</button>
</div>
</div>
<div class="mobile-menu" id="mobileMenu" aria-label="移动菜单">
<div class="container">
<a href="#features" onclick="closeMenu()">功能亮点</a>
<a href="#roadmap" onclick="closeMenu()">路线图</a>
<a href="#faq" onclick="closeMenu()">FAQ</a>
<a href="#signup" onclick="closeMenu()">报名预约</a>
</div>
</div>
</header>
<main id="main">
<section class="hero" id="hero">
<div class="container">
<div class="hero-card">
<div class="kicker">预发布 · 文案实验 · 早期用户</div>
<h1 class="hero-title" id="vpTitle">让团队在一周内验证产品卖点</h1>
<p class="hero-sub" id="vpSub">用数据驱动的预发布页,快速沉淀愿意尝鲜的真实用户线索。</p>
<div class="hero-ctas">
<a href="#signup" class="btn" id="ctaPrimary">立即报名,抢先体验</a>
<a href="#signup" class="btn btn-outline">预约演示</a>
</div>
<div class="legal">
提交即表示同意《<a href="#" id="openPolicy">隐私政策</a>》,我们仅用于与产品相关的联络,可随时退订。
</div>
</div>
</div>
</section>
<section class="section" id="features">
<div class="container">
<h2 class="section-title">功能亮点</h2>
<p class="section-sub">围绕“验证—学习—迭代”的最小闭环设计,助你以更小的代价找到真正的产品共鸣点。</p>
<div class="grid grid-3">
<div class="card feature">
<div class="ico" aria-hidden="true">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M4 5h16v2H4zM4 11h16v2H4zM4 17h10v2H4z"/></svg>
</div>
<div>
<h3>模块化预发布页</h3>
<p>亮色渐变 + 轻卡片模块,移动优先,几分钟搭建发布。</p>
</div>
</div>
<div class="card feature">
<div class="ico" aria-hidden="true">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 3v18M3 12h18"/></svg>
</div>
<div>
<h3>多版本文案实验</h3>
<p>URL 参数或自动分流,记录曝光与转化,一键导出 CSV。</p>
</div>
</div>
<div class="card feature">
<div class="ico" aria-hidden="true">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M4 4h16v10H4zM2 18h20v2H2z"/></svg>
</div>
<div>
<h3>报名与预约一体</h3>
<p>邮箱、公司规模、使用场景统一采集,提交后即时反馈。</p>
</div>
</div>
<div class="card feature">
<div class="ico" aria-hidden="true">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a10 10 0 100 20 10 10 0 000-20z"/></svg>
</div>
<div>
<h3>深浅双主题</h3>
<p>支持系统偏好与快速切换,视觉一致,减少视觉疲劳。</p>
</div>
</div>
<div class="card feature">
<div class="ico" aria-hidden="true">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M3 12l7 7 11-11"/></svg>
</div>
<div>
<h3>无侵入轻量分析</h3>
<p>本地持久化,不依赖外部脚本;可对接 Webhook 与自建端点。</p>
</div>
</div>
</div>
</div>
</section>
<section class="section" id="roadmap">
<div class="container">
<h2 class="section-title">简版路线图</h2>
<p class="section-sub">从内测到公开发布,持续围绕“验证效率”和“增长闭环”迭代。</p>
<div class="timeline">
<div class="t-item">
<h4>10 月 · 内测邀请</h4>
<p>首批种子用户加入,验证报名与预约流程、文案实验稳定性。</p>
</div>
<div class="t-item">
<h4>11 月 · 自定义域名 & Webhook</h4>
<p>支持表单 Webhook,对接飞书/Slack;自定义域名与 HTTPS。</p>
</div>
<div class="t-item">
<h4>12 月 · 组件市场 Beta</h4>
<p>可视化模块扩展:社会证明、倒计时、用例库、媒体引用。</p>
</div>
<div class="t-item">
<h4>1 月 · 多臂老虎机实验</h4>
<p>在小流量下提升收敛速度;自动暂停表现不佳的版本。</p>
</div>
<div class="t-item">
<h4>2 月 · 消息集成</h4>
<p>线索自动同步到 CRM,触发欢迎邮件与预约提醒。</p>
</div>
</div>
</div>
</section>
<section class="section" id="faq">
<div class="container">
<h2 class="section-title">FAQ</h2>
<div>
<details class="faq">
<summary>如何进行文案 A/B 实验?</summary>
<p>默认均匀分流;也可用 URL 参数 ?variant=a/b/c 或 ?v=b 指定版本。系统记录曝光与提交作为转化。</p>
</details>
<details class="faq">
<summary>我的数据存在哪里?</summary>
<p>默认保存在本地浏览器(localStorage),你可一键导出 CSV 或配置表单端点进行服务端接收。</p>
</details>
<details class="faq">
<summary>支持哪些表单字段?能否自定义?</summary>
<p>内置邮箱、公司规模、使用场景。后续版本支持自定义字段与验证规则。</p>
</details>
<details class="faq">
<summary>是否收费?</summary>
<p>内测期间免费。公测后提供免费版与专业版(包含多臂实验、Webhook、团队协作)。</p>
</details>
<details class="faq">
<summary>可以随时退订吗?</summary>
<p>可以。邮件页脚提供退订入口,我们严格遵守隐私与反骚扰规范。</p>
</details>
<details class="faq">
<summary>遇到问题如何联系支持?</summary>
<p>通过页脚社媒与我们联系,或在提交表单后回复确认邮件。</p>
</details>
</div>
</div>
</section>
<section class="section" id="signup">
<div class="container">
<div class="grid grid-2">
<div class="card">
<h2 class="section-title" style="margin-bottom:8px">报名与预约</h2>
<p class="section-sub">留下你的信息,我们将在开放名额时第一时间通知并提供预约演示。</p>
<form id="leadForm" class="form" novalidate>
<div>
<label for="email">邮箱</label>
<input id="email" name="email" type="email" class="input" placeholder="you@company.com" required />
<div class="assist">用于发送内测邀请与预约确认。</div>
<div class="error" data-error-for="email"></div>
</div>
<div>
<label for="size">公司规模</label>
<select id="size" name="company_size" required>
<option value="">请选择</option>
<option>1-10</option>
<option>11-50</option>
<option>51-200</option>
<option>200+</option>
</select>
<div class="error" data-error-for="size"></div>
</div>
<div>
<label for="usecase">使用场景</label>
<textarea id="usecase" name="use_case" rows="4" placeholder="例如:验证新功能卖点;收集等待名单;活动报名等" required></textarea>
<div class="error" data-error-for="usecase"></div>
</div>
<div>
<label style="display:flex; align-items:center; gap:8px;">
<input id="consent" type="checkbox" required />
我已阅读并同意隐私政策,仅用于与本产品相关的联络
</label>
<div class="assist">我们不会出售或出租你的信息,可随时退订。</div>
<div class="error" data-error-for="consent"></div>
</div>
<input type="hidden" name="variant" id="variantField" />
<input type="hidden" name="timestamp" id="tsField" />
<div style="display:flex; gap:10px; flex-wrap:wrap; align-items:center;">
<button type="submit" class="btn" id="submitBtn">提交报名</button>
<span class="assist">提交即同意《<a href="#" id="openPolicy2">隐私政策</a>》</span>
</div>
<div id="formMsg" style="display:none; margin-top:10px;" class="success" role="status" aria-live="polite">
感谢提交!我们已记录你的预约,稍后将通过邮箱与您联系。
</div>
</form>
</div>
<div class="card">
<h3 style="margin-top:0;">关注我们</h3>
<p class="section-sub">获取最新路线图进展与内测名额开放时间。</p>
<div class="socials">
<a href="https://x.com" target="_blank" rel="noopener">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20 3l-7.5 9.5L20 21h-2.5L12 14.5 7 21H4l7.5-9.5L4 3h2.5L12 9.5 16.5 3H20z"/></svg>
X
</a>
<a href="https://www.linkedin.com" target="_blank" rel="noopener">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M6 6h3v12H6zM7.5 3A1.5 1.5 0 1 1 6 4.5 1.5 1.5 0 0 1 7.5 3zM11 9h3v1.7h.1A3.3 3.3 0 0 1 17 8.9c2 0 3 1.3 3 3.9V18h-3v-4c0-1.2-.4-2-1.5-2s-1.5.9-1.5 2v4h-3z"/></svg>
LinkedIn
</a>
<a href="https://github.com" target="_blank" rel="noopener">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .5a12 12 0 0 0-3.8 23.4c.6.1.8-.2.8-.5v-1.8c-3.3.7-4-1.6-4-1.6-.6-1.6-1.5-2-1.5-2-1.2-.8.1-.8.1-.8 1.3.1 2 1.3 2 1.3 1.1 2 3 1.4 3.7 1 .1-.8.4-1.4.8-1.8-2.6-.3-5.3-1.3-5.3-6a4.7 4.7 0 0 1 1.2-3.3 4.4 4.4 0 0 1 .1-3.3s1-.3 3.4 1.2a11.7 11.7 0 0 1 6.2 0C17 5.7 18 6 18 6a4.4 4.4 0 0 1 .1 3.3 4.7 4.7 0 0 1 1.2 3.3c0 4.7-2.7 5.7-5.3 6 .5.4.9 1.2.9 2.4v3.5c0 .3.2.7.8.5A12 12 0 0 0 12 .5z"/></svg>
GitHub
</a>
<a href="#" aria-label="微信二维码">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 3a7 7 0 100 14l.5-.1L7 20l3-2a8 8 0 109-7c0-4.4-4-8-9-8H8z"/></svg>
微信
</a>
</div>
<div style="margin-top:16px;">
<button id="exportCsv" class="btn btn-outline">导出实验数据 CSV</button>
<div class="assist" style="margin-top:8px;">包含版本曝光与表单转化,便于小流量验证与复盘。</div>
</div>
</div>
</div>
</div>
</section>
<div class="sticky-cta" aria-hidden="true">
<div class="container wrap">
<a href="#signup" class="btn">立即报名</a>
</div>
</div>
</main>
<footer role="contentinfo">
<div class="container" style="display:flex; justify-content:space-between; gap:12px; flex-wrap:wrap;">
<div class="assist">© <span id="year"></span> 预发布实验室 · All rights reserved.</div>
<div class="assist">深浅主题 · 移动优先 · 模块化段落</div>
</div>
</footer>
<!-- 隐私政策弹窗 -->
<div class="modal" id="policyModal" role="dialog" aria-modal="true" aria-labelledby="policyTitle" aria-hidden="true">
<div class="dialog">
<div style="display:flex; justify-content:space-between; align-items:center;">
<h3 id="policyTitle" style="margin:0;">隐私政策(简版)</h3>
<button class="icon-btn" id="closePolicy" aria-label="关闭">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6l12 12M18 6L6 18"/></svg>
</button>
</div>
<p class="assist">我们仅收集用于联系与产品邀测的必要信息(邮箱、公司规模与使用场景)。我们不会出售或出租你的数据;如需删除,请通过提交的邮箱联系我们。提交表单即表示同意接收与本产品相关的邮件,可随时退订。</p>
</div>
</div>
<script>
// 实验与主题配置
const EXPERIMENT_ID = 'vp_v1';
const VARIANTS = {
a: {
title: '让团队在一周内验证产品卖点',
sub: '用数据驱动的预发布页,快速沉淀愿意尝鲜的真实用户线索。',
cta: '立即报名,抢先体验'
},
b: {
title: '用预发布页捕捉首批愿意付费的用户',
sub: '从曝光到转化的每一步都可度量,小流量也能科学决策。',
cta: '获取内测名额'
},
c: {
title: '把想法变成可验证的报名线索',
sub: '零开发上线,迭代文案与卖点,快速找到产品共鸣点。',
cta: '开始验证'
}
};
// 工具函数
const $ = (sel, ctx=document) => ctx.querySelector(sel);
const $$ = (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel));
const storage = {
get(k, def=null){ try { return JSON.parse(localStorage.getItem(k)) ?? def; } catch { return def; } },
set(k,v){ localStorage.setItem(k, JSON.stringify(v)); },
push(k,item){ const arr = storage.get(k, []); arr.push(item); storage.set(k, arr); }
};
// 主题切换:auto/light/dark
const themeToggleBtn = $('#themeToggle');
function applyTheme(mode) {
if (mode === 'auto') {
document.documentElement.setAttribute('data-theme', window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
} else {
document.documentElement.setAttribute('data-theme', mode);
}
}
function initTheme() {
const saved = storage.get('theme_mode', 'auto');
applyTheme(saved);
}
themeToggleBtn.addEventListener('click', () => {
const current = document.documentElement.getAttribute('data-theme');
const next = current === 'light' ? 'dark' : 'light';
storage.set('theme_mode', next);
applyTheme(next);
});
document.addEventListener('keydown', (e) => {
if (e.key.toLowerCase() === 't') themeToggleBtn.click();
});
// 菜单
const mobileMenu = $('#mobileMenu');
const menuToggle = $('#menuToggle');
window.closeMenu = () => mobileMenu.classList.remove('open');
menuToggle.addEventListener('click', () => mobileMenu.classList.toggle('open'));
// 隐私弹窗
const policyModal = $('#policyModal');
const openPolicy = $('#openPolicy');
const openPolicy2 = $('#openPolicy2');
const closePolicy = $('#closePolicy');
function openPolicyDialog(){ policyModal.classList.add('open'); policyModal.setAttribute('aria-hidden', 'false'); }
function closePolicyDialog(){ policyModal.classList.remove('open'); policyModal.setAttribute('aria-hidden', 'true'); }
[openPolicy, openPolicy2].forEach(el => el && el.addEventListener('click', (e)=>{ e.preventDefault(); openPolicyDialog(); }));
closePolicy.addEventListener('click', closePolicyDialog);
policyModal.addEventListener('click', (e)=>{ if (e.target === policyModal) closePolicyDialog(); });
// A/B 实验初始化
function pickVariant() {
const url = new URL(location.href);
const fromParam = url.searchParams.get('variant') || url.searchParams.get('v');
const saved = storage.get('exp_'+EXPERIMENT_ID);
if (fromParam && VARIANTS[fromParam]) return { key: fromParam, source: 'param' };
if (saved && VARIANTS[saved.key]) return saved;
const keys = Object.keys(VARIANTS);
const key = keys[Math.floor(Math.random() * keys.length)];
return { key, source: 'random' };
}
function applyVariant(key) {
const v = VARIANTS[key];
if (!v) return;
$('#vpTitle').textContent = v.title;
$('#vpSub').textContent = v.sub;
$('#ctaPrimary').textContent = v.cta;
$('#variantField').value = key;
// 曝光计数
const stats = storage.get('stats_'+EXPERIMENT_ID, { exposures:{}, conversions:{} });
stats.exposures[key] = (stats.exposures[key] || 0) + 1;
storage.set('stats_'+EXPERIMENT_ID, stats);
storage.set('exp_'+EXPERIMENT_ID, { key, at: Date.now() });
}
// 表单提交
const form = $('#leadForm');
const formMsg = $('#formMsg');
const submitBtn = $('#submitBtn');
const endpoint = $('meta[name="form-endpoint"]')?.content?.trim();
function validate() {
let ok = true;
const email = $('#email');
const size = $('#size');
const usecase = $('#usecase');
const consent = $('#consent');
const showErr = (id,msg)=>{ const el = document.querySelector('[data-error-for="'+id+'"]'); if (el) el.textContent = msg || ''; };
showErr('email'); showErr('size'); showErr('usecase'); showErr('consent');
if (!email.value || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.value)) {
ok = false; showErr('email','请输入有效的邮箱地址');
}
if (!size.value) { ok = false; showErr('size','请选择公司规模'); }
if (!usecase.value || usecase.value.trim().length < 5) { ok = false; showErr('usecase','请简单描述使用场景(不少于 5 个字)'); }
if (!consent.checked) { ok = false; showErr('consent','提交前请勾选隐私同意'); }
return ok;
}
async function submitLead(e) {
e.preventDefault();
if (!validate()) return;
submitBtn.disabled = true; submitBtn.textContent = '提交中...';
$('#tsField').value = new Date().toISOString();
const payload = {
email: $('#email').value.trim(),
company_size: $('#size').value,
use_case: $('#usecase').value.trim(),
variant: $('#variantField').value,
ts: $('#tsField').value,
url: location.href,
ua: navigator.userAgent
};
// 首先本地持久化
storage.push('leads', payload);
let ok = true;
if (endpoint) {
try {
const res = await fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
ok = res.ok;
} catch (err) { ok = false; }
}
// 统计转化
const key = payload.variant || 'unknown';
const stats = storage.get('stats_'+EXPERIMENT_ID, { exposures:{}, conversions:{} });
stats.conversions[key] = (stats.conversions[key] || 0) + 1;
storage.set('stats_'+EXPERIMENT_ID, stats);
formMsg.style.display = 'block';
if (!ok && endpoint) {
formMsg.textContent = '已记录本地,服务器暂时不可达,我们稍后重试或请刷新后再试。';
}
// 重置表单并防止重复提交
form.reset();
submitBtn.textContent = '已提交';
}
// 导出 CSV
function exportCSV() {
const stats = storage.get('stats_'+EXPERIMENT_ID, { exposures:{}, conversions:{} });
const leads = storage.get('leads', []);
const lines = [];
lines.push('type,key,value');
Object.entries(stats.exposures).forEach(([k,v]) => lines.push(`exposure,${k},${v}`));
Object.entries(stats.conversions).forEach(([k,v]) => lines.push(`conversion,${k},${v}`));
lines.push('');
lines.push('email,company_size,use_case,variant,ts,url,ua');
leads.forEach(l => lines.push([l.email,l.company_size,`"${(l.use_case||'').replace(/"/g,'""')}"`,l.variant,l.ts,l.url,`"${(l.ua||'').replace(/"/g,'""')}"`].join(',')));
const blob = new Blob([lines.join('\n')], { type: 'text/csv;charset=utf-8;' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = `experiment_${EXPERIMENT_ID}_${new Date().toISOString().slice(0,10)}.csv`;
a.click();
URL.revokeObjectURL(a.href);
}
// 平滑滚动(原生行为已支持,兜底)
$$('a[href^="#"]').forEach(a=>{
a.addEventListener('click', (e)=>{
const id = a.getAttribute('href').slice(1);
if (!id) return;
const el = document.getElementById(id);
if (el) { e.preventDefault(); el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }
});
});
// 初始化
(function init(){
initTheme();
const chosen = pickVariant();
applyVariant(chosen.key);
$('#year').textContent = new Date().getFullYear();
form.addEventListener('submit', submitLead);
$('#exportCsv').addEventListener('click', exportCSV);
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible' && storage.get('theme_mode','auto')==='auto') applyTheme('auto');
});
})();
</script>
</body>
</html>
/* 完整的CSS样式(与 HTML 内联样式一致,可拆分为 styles.css 使用)
如果外链,请删除 HTML 中的 <style> 并在 <head> 引入本文件 */
:root { /* 变量见内联 CSS,同步内容略 */ }
// 必要的JavaScript代码(与 HTML 内联脚本一致,可拆分为 app.js 使用)
// 见 HTML 中 <script>,包含:主题切换、移动菜单、隐私弹窗、A/B 实验、表单提交与 CSV 导出。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>极简作品集网站</title>
<meta name="description" content="黑白极简,大字号版式的个人作品集与案例展示网站。" />
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<header class="site-header reveal">
<div class="container header-inner">
<a href="#" class="logo" aria-label="主页">Design Studio</a>
<button class="nav-toggle" aria-label="打开菜单" aria-expanded="false">☰</button>
<nav class="site-nav" aria-label="主导航">
<ul>
<li><a href="#about">关于我</a></li>
<li><a href="#services">服务</a></li>
<li><a href="#portfolio">作品集</a></li>
<li><a href="#cases">案例</a></li>
<li><a href="#download">下载作品集</a></li>
<li><a href="#pricing">报价与FAQ</a></li>
<li><a href="#contact">联系</a></li>
</ul>
</nav>
</div>
<div class="divider"></div>
</header>
<main>
<!-- Hero -->
<section id="hero" class="section hero reveal">
<div class="container">
<h1 class="hero-title">黑白极简 · 品牌与网页设计</h1>
<p class="hero-sub">以理性视觉与高效交付,快速把设计稿与素材转为可上线网站。</p>
</div>
</section>
<!-- 关于我 -->
<section id="about" class="section reveal">
<div class="container">
<h2 class="section-title">关于我</h2>
<p class="intro">
独立设计师,专注品牌与网页视觉,以简洁理性为核心,追求高效交付与一致体验,善于将复杂信息化繁为简。
</p>
</div>
<div class="divider"></div>
</section>
<!-- 服务 -->
<section id="services" class="section reveal">
<div class="container">
<h2 class="section-title">服务项目</h2>
<div class="services">
<div class="service-card">
<h3>品牌视觉</h3>
<p>标志与识别系统、规范手册、应用物料,统一品牌形象。</p>
</div>
<div class="service-card">
<h3>网页设计</h3>
<p>响应式官网、落地页与组件库,提升转化与信息清晰度。</p>
</div>
<div class="service-card">
<h3>插画</h3>
<p>用于产品叙事与社媒传播的风格化插画与图形元素。</p>
</div>
</div>
</div>
<div class="divider"></div>
</section>
<!-- 作品集 -->
<section id="portfolio" class="section reveal">
<div class="container">
<h2 class="section-title">作品集</h2>
<div class="portfolio-grid">
<!-- 9个作品卡片,使用SVG占位图。替换为真实图片即可。 -->
<article class="portfolio-item">
<img alt="作品 01 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 01</text></svg>">
<div class="item-info">
<h3>作品 01</h3>
<p>极简网页视觉探索</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 02 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='1000'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 02</text></svg>">
<div class="item-info">
<h3>作品 02</h3>
<p>品牌系统与版式</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 03 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='700'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 03</text></svg>">
<div class="item-info">
<h3>作品 03</h3>
<p>信息架构与组件</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 04 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='650'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 04</text></svg>">
<div class="item-info">
<h3>作品 04</h3>
<p>登陆页视觉</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 05 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='900'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 05</text></svg>">
<div class="item-info">
<h3>作品 05</h3>
<p>电商模块化UI</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 06 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='600'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 06</text></svg>">
<div class="item-info">
<h3>作品 06</h3>
<p>移动端交互草图</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 07 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='720'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 07</text></svg>">
<div class="item-info">
<h3>作品 07</h3>
<p>插画风格探索</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 08 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='820'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 08</text></svg>">
<div class="item-info">
<h3>作品 08</h3>
<p>图形语言与图标</p>
</div>
</article>
<article class="portfolio-item">
<img alt="作品 09 占位图"
src="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='800' height='680'><rect width='100%25' height='100%25' fill='%23f5f5f5'/><text x='50%25' y='50%25' dominant-baseline='middle' text-anchor='middle' fill='%23222' font-size='42' font-family='system-ui'>WORK 09</text></svg>">
<div class="item-info">
<h3>作品 09</h3>
<p>动效与微交互</p>
</div>
</article>
</div>
</div>
<div class="divider"></div>
</section>
<!-- 案例 -->
<section id="cases" class="section reveal">
<div class="container">
<h2 class="section-title">案例</h2>
<div class="cases">
<article class="case-item" tabindex="0"
data-title="初创咖啡品牌识别升级"
data-detail="背景:门店扩张期品牌缺乏统一;结果:建立黑白主色与细线系统,线下转化提升20%。">
<div class="case-head">
<h3>初创咖啡品牌识别升级</h3>
</div>
<p class="case-summary">背景:门店扩张期品牌缺乏统一;结果:建立黑白主色与细线系统,线下转化提升20%。</p>
<button class="case-more" aria-label="查看详情">查看详情</button>
</article>
<article class="case-item" tabindex="0"
data-title="SaaS官网重设计"
data-detail="背景:旧站信息冗杂;结果:重构导航与层级,跳出率下降35%。">
<div class="case-head">
<h3>SaaS官网重设计</h3>
</div>
<p class="case-summary">背景:旧站信息冗杂;结果:重构导航与层级,跳出率下降35%。</p>
<button class="case-more" aria-label="查看详情">查看详情</button>
</article>
<article class="case-item" tabindex="0"
data-title="插画内容营销"
data-detail="背景:社媒曝光低;结果:系列插画引导分享,关注增长3倍。">
<div class="case-head">
<h3>插画内容营销</h3>
</div>
<p class="case-summary">背景:社媒曝光低;结果:系列插画引导分享,关注增长3倍。</p>
<button class="case-more" aria-label="查看详情">查看详情</button>
</article>
</div>
</div>
<div class="divider"></div>
</section>
<!-- 下载作品集 -->
<section id="download" class="section reveal">
<div class="container">
<h2 class="section-title">下载作品集</h2>
<p class="download-desc">点击即可生成打印版视图,导出为PDF便于快速沟通与提交。</p>
<div class="download-actions">
<button id="downloadBtn" class="btn-primary">下载 PDF</button>
<a class="btn-secondary" href="#portfolio">查看在线作品</a>
</div>
</div>
<div class="divider"></div>
</section>
<!-- 报价与FAQ -->
<section id="pricing" class="section reveal">
<div class="container">
<h2 class="section-title">报价说明与常见问题</h2>
<div class="pricing">
<h3>报价说明</h3>
<p>以项目范围与交付内容计费:明确页面数量、模块复杂度、素材准备情况与时间要求。典型区间:品牌视觉基础包 8k–20k,官网设计(含基础前端实现)15k–40k,插画按幅计费 1k–5k/幅。</p>
<p>支持里程碑分阶段交付与结算,价格包含一次完整风格确定与两轮常规修改(不含方向性大改)。</p>
</div>
<div class="faq">
<div class="faq-item">
<button class="faq-q" aria-expanded="false">交付流程</button>
<div class="faq-a">需求梳理 → 风格板与信息架构 → 高保真页面 → 前端实现与测试 → 上线与验收。</div>
</div>
<div class="faq-item">
<button class="faq-q" aria-expanded="false">设计周期</button>
<div class="faq-a">小型项目约1–2周,中型项目2–4周,视素材与反馈效率而定。</div>
</div>
<div class="faq-item">
<button class="faq-q" aria-expanded="false">版权与素材</button>
<div class="faq-a">交付的自有作品版权归客户使用,第三方素材需合法授权并由双方确认。</div>
</div>
<div class="faq-item">
<button class="faq-q" aria-expanded="false">付款与发票</button>
<div class="faq-a">签约后预付30%,中期支付40%,验收后付尾款30%;可开具正规发票。</div>
</div>
</div>
</div>
<div class="divider"></div>
</section>
<!-- 联系 -->
<section id="contact" class="section reveal">
<div class="container">
<h2 class="section-title">联系我</h2>
<ul class="contact-list">
<li>邮箱:<a href="mailto:hello@studio.example">hello@studio.example</a></li>
<li>社媒:<a href="https://www.instagram.com/" target="_blank" rel="noopener">Instagram</a> · <a href="https://www.behance.net/" target="_blank" rel="noopener">Behance</a> · <a href="https://x.com/" target="_blank" rel="noopener">X</a></li>
</ul>
</div>
<div class="divider"></div>
</section>
</main>
<footer class="site-footer reveal">
<div class="container footer-inner">
<small>© 2025 Design Studio · 保留所有权利</small>
<div class="footer-links">
<a href="#about">关于</a>
<span class="dot">·</span>
<a href="#portfolio">作品</a>
<span class="dot">·</span>
<a href="#contact">联系</a>
</div>
</div>
</footer>
<!-- 案例弹窗 -->
<div class="modal" id="caseModal" aria-hidden="true" role="dialog" aria-label="案例详情">
<div class="modal-backdrop" data-close="true"></div>
<div class="modal-content" role="document">
<button class="modal-close" aria-label="关闭" data-close="true">×</button>
<h3 id="modalTitle">案例标题</h3>
<p id="modalDetail">案例详情</p>
</div>
</div>
<script src="main.js" defer></script>
</body>
</html>
:root{
--bg:#fff;
--fg:#111;
--muted:#666;
--line:#e6e6e6;
--shadow:0 6px 20px rgba(0,0,0,0.06);
--radius:12px;
--container:1100px;
--sp-1:10px;
--sp-2:16px;
--sp-3:24px;
--sp-4:36px;
--sp-5:56px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
margin:0;background:var(--bg);color:var(--fg);
font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
line-height:1.6;
}
img{display:block;max-width:100%;height:auto;border-radius:8px}
a{color:var(--fg);text-decoration:none}
a:hover{text-decoration:underline}
.container{width:100%;max-width:var(--container);padding:0 var(--sp-3);margin:0 auto}
.site-header{
position:sticky;top:0;background:var(--bg);z-index:10;
}
.header-inner{
display:flex;align-items:center;justify-content:space-between;
padding:var(--sp-2) 0;
}
.logo{font-weight:700;font-size:20px;letter-spacing:.02em}
.nav-toggle{
display:none;border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px;cursor:pointer;
}
.site-nav ul{display:flex;gap:18px;list-style:none;margin:0;padding:0}
.site-nav a{padding:8px 0}
.divider{height:1px;background:var(--line)}
.section{padding:var(--sp-5) 0}
.section-title{
font-size:clamp(26px,4vw,40px);line-height:1.2;margin:0 0 var(--sp-3) 0;
letter-spacing:.01em;
}
.hero{padding:calc(var(--sp-5) + 10px) 0}
.hero-title{font-size:clamp(36px,6vw,72px);line-height:1.1;margin:0 0 var(--sp-2) 0}
.hero-sub{font-size:clamp(16px,2.4vw,22px);color:var(--muted);max-width:800px}
.intro{font-size:clamp(16px,2.2vw,18px);max-width:800px}
.services{
display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3)
}
.service-card{
border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-3);
box-shadow:var(--shadow);transition:.25s ease transform, .25s ease box-shadow;
}
.service-card:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(0,0,0,0.08)}
.service-card h3{margin:0 0 var(--sp-1) 0;font-size:20px}
.service-card p{margin:0;color:var(--muted)}
.portfolio-grid{
column-count:3;column-gap:var(--sp-3)
}
.portfolio-item{
break-inside:avoid;border:1px solid var(--line);border-radius:var(--radius);
margin:0 0 var(--sp-3) 0;box-shadow:var(--shadow);overflow:hidden;
transition:.25s ease transform, .25s ease box-shadow;
background:#fff;
}
.portfolio-item:hover{transform:translateY(-2px);box-shadow:0 12px 32px rgba(0,0,0,0.08)}
.item-info{padding:var(--sp-2) var(--sp-3)}
.item-info h3{margin:0 0 6px 0;font-size:18px}
.item-info p{margin:0;color:var(--muted);font-size:15px}
.cases{
display:grid;grid-template-columns:1fr;gap:var(--sp-3)
}
.case-item{
border:1px solid var(--line);border-radius:var(--radius);padding:var(--sp-3);
box-shadow:var(--shadow);background:#fff;
}
.case-head h3{margin:0 0 var(--sp-1) 0;font-size:20px}
.case-summary{margin:0 0 var(--sp-2) 0;color:var(--muted)}
.case-more{
border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:#fff;cursor:pointer;
transition:.2s ease transform, .2s ease box-shadow;
}
.case-more:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(0,0,0,0.07)}
.download-desc{color:var(--muted);max-width:720px}
.download-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-2)}
.btn-primary{
background:#111;color:#fff;border:1px solid #111;padding:12px 16px;border-radius:12px;cursor:pointer;
}
.btn-primary:hover{background:#000}
.btn-secondary{
border:1px solid var(--line);padding:12px 16px;border-radius:12px;display:inline-block;
}
.pricing h3{margin:0 0 var(--sp-2) 0}
.pricing p{margin:0 0 var(--sp-2) 0;color:var(--muted)}
.faq{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.faq-item + .faq-item{border-top:1px solid var(--line)}
.faq-q{
width:100%;text-align:left;padding:14px 16px;background:#fff;border:0;font-size:16px;cursor:pointer
}
.faq-a{padding:0 16px 16px 16px;color:var(--muted);display:none}
.faq-item.open .faq-a{display:block}
.faq-item.open .faq-q{font-weight:600}
.contact-list{list-style:none;padding:0;margin:0}
.contact-list li{margin-bottom:8px}
.site-footer{padding:var(--sp-4) 0}
.footer-inner{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.footer-links{display:flex;align-items:center;gap:10px}
.dot{color:#bbb}
.modal{position:fixed;inset:0;display:none}
.modal.show{display:block}
.modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,0.25)}
.modal-content{
position:relative;max-width:720px;margin:8vh auto;background:#fff;border:1px solid var(--line);
border-radius:16px;box-shadow:0 18px 40px rgba(0,0,0,0.14);padding:24px
}
.modal-close{
position:absolute;top:10px;right:10px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;cursor:pointer
}
.reveal{opacity:0;transform:translateY(12px);transition:opacity .5s ease, transform .5s ease}
.reveal.visible{opacity:1;transform:translateY(0)}
@media (max-width:1000px){
.services{grid-template-columns:repeat(2,1fr)}
.portfolio-grid{column-count:2}
}
@media (max-width:640px){
.site-nav{display:none;position:absolute;right:16px;top:58px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px;box-shadow:var(--shadow)}
.site-nav.open{display:block}
.site-nav ul{flex-direction:column;gap:8px}
.nav-toggle{display:block}
.services{grid-template-columns:1fr}
.portfolio-grid{column-count:1}
}
/* 打印样式:隐藏不必要元素,优化为PDF */
@media print{
.site-header,.site-footer,.divider,.nav-toggle,.btn-primary,.btn-secondary,.modal{display:none !important}
.section{padding:24px 0}
.portfolio-item{page-break-inside:avoid}
}
// 低调动效与交互
document.addEventListener('DOMContentLoaded', () => {
// 移动端导航
const toggle = document.querySelector('.nav-toggle');
const nav = document.querySelector('.site-nav');
if (toggle && nav) {
toggle.addEventListener('click', () => {
const open = nav.classList.toggle('open');
toggle.setAttribute('aria-expanded', String(open));
});
}
// 滚动淡入
const observer = new IntersectionObserver((entries)=>{
entries.forEach(e=>{
if(e.isIntersecting){ e.target.classList.add('visible'); }
});
},{threshold:0.12});
document.querySelectorAll('.reveal').forEach(el=>observer.observe(el));
// 案例弹窗
const modal = document.getElementById('caseModal');
const modalTitle = document.getElementById('modalTitle');
const modalDetail = document.getElementById('modalDetail');
const openCase = (title, detail) => {
modalTitle.textContent = title;
modalDetail.textContent = detail;
modal.classList.add('show');
modal.setAttribute('aria-hidden','false');
document.body.style.overflow = 'hidden';
};
const closeCase = () => {
modal.classList.remove('show');
modal.setAttribute('aria-hidden','true');
document.body.style.overflow = '';
};
document.querySelectorAll('.case-item').forEach(item=>{
const title = item.dataset.title;
const detail = item.dataset.detail;
const btn = item.querySelector('.case-more');
const open = ()=>openCase(title, detail);
btn.addEventListener('click', open);
item.addEventListener('keydown', (e)=>{ if(e.key==='Enter' || e.key===' ') { e.preventDefault(); open(); } });
});
modal.addEventListener('click', (e)=>{
if(e.target.dataset.close==='true'){ closeCase(); }
});
document.addEventListener('keydown',(e)=>{ if(e.key==='Escape' && modal.classList.contains('show')) closeCase(); });
// FAQ 折叠
document.querySelectorAll('.faq-item').forEach(item=>{
const q = item.querySelector('.faq-q');
q.addEventListener('click', ()=>{
const isOpen = item.classList.toggle('open');
q.setAttribute('aria-expanded', String(isOpen));
});
});
// 下载作品集(打印为PDF)
const dl = document.getElementById('downloadBtn');
if (dl) {
dl.addEventListener('click', ()=>{
window.print();
});
}
});
快速搭建企业官网与产品服务页,统一品牌风格,配置联系我们与表单,收集销售线索,助力线上获客与企业形象升级。
迅速上线产品介绍页与发布页,制作报名与预约入口,灵活切换主题做小流量试验,验证卖点并沉淀早期用户。
将设计稿与素材直接转为可上线网站,包含作品集、案例页与自我介绍,缩短交付周期,减少外包与沟通成本。
为企业主、设计师、创业团队等非技术用户,提供一条从“设计想法”到“可上线网站”的快速通道。通过一次性输入品牌色、风格偏好与核心文案,自动生成结构清晰、风格统一、可直接发布的完整网站方案与上线指南,覆盖企业官网、个人作品集、产品介绍页、活动落地页等高频场景,显著缩短上线周期、提升转化表现、统一品牌形象,并降低外包与沟通成本。
将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。
把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。
在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。
免费获取高级提示词-优惠即将到期