Files
fiveq-website-2026/smartbuddy/index.html
T
2026-08-24 15:37:08 +08:00

701 lines
22 KiB
HTML

<!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="智花学伴(SmartBuddy):面向国际中文学习的学生端应用。完成教师布置的作业,用语音评测、AI 强化与生活场景对话,把练习变成能说出口的中文。" />
<meta name="theme-color" content="#0F766E" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@500;700;900&family=ZCOOL+XiaoWei&display=swap" rel="stylesheet" />
<style>
:root {
--ink: #16352f;
--ink-soft: #3d5c55;
--muted: #5f746e;
--paper: #f3f7f4;
--paper-deep: #e4efe9;
--brand: #0f766e;
--brand-bright: #1a8a7a;
--accent: #c45c26;
--line: rgba(15, 118, 110, 0.14);
--white: #ffffff;
--shadow: 0 28px 60px rgba(14, 55, 48, 0.18);
--max: 1120px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
margin: 0;
color: var(--ink);
background:
radial-gradient(1200px 600px at 10% -10%, rgba(26, 138, 122, 0.16), transparent 55%),
radial-gradient(900px 500px at 100% 0%, rgba(196, 92, 38, 0.08), transparent 50%),
linear-gradient(180deg, #f7faf8 0%, var(--paper) 40%, #eef5f1 100%);
font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
line-height: 1.65;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
.display {
font-family: "Noto Serif SC", "Songti SC", "STSong", serif;
font-weight: 900;
letter-spacing: 0.04em;
}
.soft-display {
font-family: "ZCOOL XiaoWei", "Noto Serif SC", serif;
}
.nav {
position: sticky;
top: 0;
z-index: 20;
backdrop-filter: blur(14px);
background: rgba(247, 250, 248, 0.82);
border-bottom: 1px solid transparent;
transition: border-color 0.25s ease, background 0.25s ease;
}
.nav.is-scrolled {
border-color: var(--line);
background: rgba(247, 250, 248, 0.94);
}
.nav-inner {
max-width: var(--max);
margin: 0 auto;
padding: 14px 20px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
.nav-brand {
display: flex;
align-items: baseline;
gap: 10px;
color: var(--brand);
}
.nav-brand strong {
font-family: "Noto Serif SC", serif;
font-size: 22px;
font-weight: 900;
}
.nav-brand span {
font-size: 13px;
color: var(--muted);
letter-spacing: 0.08em;
}
.nav-links {
display: flex;
align-items: center;
gap: 18px;
color: var(--ink-soft);
font-size: 14px;
}
.nav-links a:hover { color: var(--brand); }
.hero {
position: relative;
min-height: min(100vh, 920px);
overflow: hidden;
isolation: isolate;
}
.hero-bg {
position: absolute;
inset: 0;
z-index: -1;
background:
linear-gradient(115deg, rgba(15, 118, 110, 0.94) 0%, rgba(11, 95, 84, 0.8) 46%, rgba(18, 70, 62, 0.58) 100%),
url("./images/scenes.jpg") center / cover no-repeat;
transform: scale(1.04);
animation: heroDrift 18s ease-in-out infinite alternate;
}
.hero-bg::after {
content: "";
position: absolute;
inset: 0;
background:
radial-gradient(circle at 78% 55%, transparent 0 18%, rgba(8, 40, 35, 0.35) 55%, rgba(6, 28, 24, 0.55) 100%),
linear-gradient(180deg, rgba(8, 40, 35, 0.08), rgba(8, 40, 35, 0.35));
}
.hero-grid {
position: absolute;
inset: 0;
z-index: -1;
opacity: 0.14;
background-image:
linear-gradient(rgba(255,255,255,0.35) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.35) 1px, transparent 1px);
background-size: 48px 48px;
mask-image: linear-gradient(90deg, transparent, #000 20%, #000 70%, transparent);
pointer-events: none;
}
.hero-inner {
max-width: var(--max);
margin: 0 auto;
padding: clamp(48px, 10vh, 96px) 20px clamp(56px, 9vh, 88px);
display: grid;
grid-template-columns: 1.05fr 0.95fr;
gap: clamp(28px, 5vw, 64px);
align-items: center;
min-height: inherit;
}
.hero-copy { color: #f5fffb; max-width: 560px; }
.hero-brand {
margin: 0 0 18px;
font-size: clamp(48px, 8vw, 84px);
line-height: 1.05;
color: #fff;
text-shadow: 0 8px 30px rgba(0, 0, 0, 0.22);
animation: riseIn 0.9s ease both;
}
.hero-title {
margin: 0 0 14px;
font-size: clamp(24px, 3.4vw, 36px);
font-weight: 700;
line-height: 1.25;
animation: riseIn 0.9s ease 0.08s both;
}
.hero-lead {
margin: 0 0 22px;
font-size: clamp(15px, 1.7vw, 18px);
line-height: 1.7;
color: rgba(245, 255, 251, 0.88);
max-width: 30em;
animation: riseIn 0.9s ease 0.16s both;
}
.lang-pills {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 0 0 26px;
animation: riseIn 0.9s ease 0.2s both;
}
.lang-pills span {
padding: 5px 10px;
border-radius: 999px;
border: 1px solid rgba(255,255,255,0.28);
background: rgba(255,255,255,0.1);
color: rgba(245, 255, 251, 0.92);
font-size: 12px;
letter-spacing: 0.02em;
}
.hero-ctas {
display: flex;
flex-wrap: wrap;
gap: 12px;
animation: riseIn 0.9s ease 0.24s both;
}
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 48px;
padding: 0 22px;
border-radius: 999px;
font-size: 15px;
font-weight: 700;
border: 1px solid transparent;
transition: transform 0.2s ease, background 0.2s ease, border-color 0.2s ease;
}
.btn:hover { transform: translateY(-1px); }
.btn-primary {
background: #fff;
color: var(--brand);
}
.btn-ghost {
background: rgba(255,255,255,0.08);
color: #fff;
border-color: rgba(255,255,255,0.35);
}
.hero-device {
justify-self: end;
width: min(100%, 320px);
animation: floatY 5.5s ease-in-out infinite, riseIn 1s ease 0.2s both;
filter: drop-shadow(var(--shadow));
}
.phone-frame {
border-radius: 36px;
padding: 10px;
background: linear-gradient(160deg, rgba(255,255,255,0.55), rgba(255,255,255,0.12));
border: 1px solid rgba(255,255,255,0.35);
}
.phone-frame img {
width: 100%;
border-radius: 28px;
aspect-ratio: 1179 / 2556;
object-fit: cover;
object-position: top center;
background: #0b3d36;
}
section {
max-width: var(--max);
margin: 0 auto;
padding: clamp(64px, 10vw, 104px) 20px;
}
.section-kicker {
margin: 0 0 10px;
color: var(--brand-bright);
font-size: 13px;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
}
.section-title {
margin: 0 0 12px;
font-size: clamp(28px, 4vw, 40px);
line-height: 1.2;
color: var(--ink);
}
.section-lead {
margin: 0;
max-width: 34em;
color: var(--muted);
font-size: 17px;
}
.path {
padding-top: 0;
}
.path-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
}
.path-card {
background: rgba(255,255,255,0.78);
border: 1px solid var(--line);
border-radius: 20px;
padding: 20px 18px;
box-shadow: 0 12px 30px rgba(14, 55, 48, 0.06);
}
.path-card strong {
display: block;
margin-bottom: 6px;
font-size: 18px;
}
.path-card p {
margin: 0;
color: var(--muted);
font-size: 14px;
}
.path-index {
display: inline-block;
margin-bottom: 10px;
color: var(--brand-bright);
font-size: 12px;
font-weight: 700;
letter-spacing: 0.12em;
}
.feature {
display: grid;
grid-template-columns: 1fr 1fr;
gap: clamp(28px, 5vw, 64px);
align-items: center;
}
.feature.reverse .feature-media { order: -1; }
.feature-media {
position: relative;
border-radius: 28px;
overflow: hidden;
background: var(--paper-deep);
box-shadow: var(--shadow);
}
.feature-media img {
width: 100%;
aspect-ratio: 4 / 5;
object-fit: cover;
object-position: top center;
}
.feature-media::before {
content: "";
position: absolute;
inset: 0;
border: 1px solid rgba(255,255,255,0.4);
border-radius: inherit;
pointer-events: none;
mix-blend-mode: soft-light;
}
.feature-points {
margin: 22px 0 0;
padding: 0;
list-style: none;
display: grid;
gap: 12px;
}
.feature-points li {
position: relative;
padding-left: 22px;
color: var(--ink-soft);
}
.feature-points li::before {
content: "";
position: absolute;
left: 0;
top: 0.62em;
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--brand-bright);
}
.type-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
margin-top: 22px;
}
.type-chip {
background: rgba(255,255,255,0.8);
border: 1px solid var(--line);
border-radius: 14px;
padding: 12px 12px 10px;
}
.type-chip strong {
display: block;
font-size: 14px;
margin-bottom: 2px;
}
.type-chip span {
color: var(--muted);
font-size: 12px;
}
html.js .reveal {
opacity: 0;
transform: translateY(22px);
transition: opacity 0.7s ease, transform 0.7s ease;
}
html.js .reveal.is-in,
.reveal {
opacity: 1;
transform: none;
}
.cta-band {
margin: 0 20px clamp(48px, 8vw, 80px);
max-width: var(--max);
margin-left: auto;
margin-right: auto;
border-radius: 28px;
padding: clamp(36px, 6vw, 56px);
background:
linear-gradient(135deg, rgba(15, 118, 110, 0.96), rgba(18, 90, 78, 0.88)),
url("./images/dialogue.jpg") right center / cover no-repeat;
color: #f5fffb;
text-align: center;
box-shadow: var(--shadow);
}
.cta-band h2 {
margin: 0 0 10px;
font-size: clamp(28px, 4vw, 40px);
}
.cta-band p {
margin: 0 auto 24px;
max-width: 32em;
color: rgba(245, 255, 251, 0.88);
}
.cta-actions {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 12px;
}
.cta-band .btn-primary { min-width: 160px; }
footer {
border-top: 1px solid var(--line);
background: rgba(255,255,255,0.55);
}
.footer-inner {
max-width: var(--max);
margin: 0 auto;
padding: 36px 20px 48px;
display: grid;
gap: 20px;
}
.footer-brand {
font-family: "Noto Serif SC", serif;
font-size: 22px;
font-weight: 900;
color: var(--brand);
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 10px 18px;
font-size: 14px;
color: var(--muted);
}
.footer-links a:hover { color: var(--brand); }
.footer-meta {
font-size: 13px;
color: var(--muted);
}
.footer-meta a { color: inherit; }
.footer-meta a:hover { color: var(--brand); }
@keyframes riseIn {
from { opacity: 0; transform: translateY(18px); }
to { opacity: 1; transform: none; }
}
@keyframes floatY {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
@keyframes heroDrift {
from { transform: scale(1.04) translate3d(0, 0, 0); }
to { transform: scale(1.08) translate3d(-1.2%, 1%, 0); }
}
@media (max-width: 860px) {
.nav-links .hide-sm { display: none; }
.hero-inner {
grid-template-columns: 1fr;
padding-top: 36px;
min-height: auto;
}
.hero-copy { text-align: left; }
.hero-device {
justify-self: center;
width: min(72vw, 280px);
margin-top: 8px;
}
.feature,
.feature.reverse {
grid-template-columns: 1fr;
}
.feature.reverse .feature-media { order: 0; }
.feature-media img { aspect-ratio: 3 / 4; object-position: top center; }
.path-grid,
.type-grid {
grid-template-columns: 1fr 1fr;
}
}
@media (max-width: 520px) {
.path-grid {
grid-template-columns: 1fr;
}
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation: none !important;
transition: none !important;
}
.reveal { opacity: 1; transform: none; }
}
</style>
</head>
<body>
<header class="nav" id="topNav">
<div class="nav-inner">
<a class="nav-brand" href="#top" aria-label="智花学伴首页">
<strong>智花学伴</strong>
<span class="hide-sm">SmartBuddy</span>
</a>
<nav class="nav-links" aria-label="页面导航">
<a class="hide-sm" href="#learn">课程作业</a>
<a class="hide-sm" href="#practice">强化练习</a>
<a class="hide-sm" href="#scenes">场景口语</a>
<a href="#download">获取应用</a>
</nav>
</div>
</header>
<main id="top">
<section class="hero" aria-label="智花学伴首页介绍">
<div class="hero-bg" aria-hidden="true"></div>
<div class="hero-grid" aria-hidden="true"></div>
<div class="hero-inner">
<div class="hero-copy">
<h1 class="hero-brand display">智花学伴</h1>
<p class="hero-title soft-display">课内作业,开口也能练</p>
<p class="hero-lead">面向国际中文学习的学生端应用:完成教师布置的作业,再用语音评测、AI 强化和生活场景对话,把练习变成能说出口的中文。</p>
<div class="lang-pills" aria-label="界面语言">
<span>中文</span>
<span>English</span>
<span>日本語</span>
<span>Français</span>
<span>한국어</span>
<span>Tiếng Việt</span>
<span>ไทย</span>
</div>
<div class="hero-ctas">
<a class="btn btn-primary" href="#download">获取应用</a>
<a class="btn btn-ghost" href="#learn">了解功能</a>
</div>
</div>
<div class="hero-device" aria-hidden="true">
<div class="phone-frame">
<img src="./images/homework.jpg" alt="" width="320" height="693" />
</div>
</div>
</div>
</section>
<section class="path reveal" aria-label="四个学习入口">
<div class="path-grid">
<article class="path-card">
<span class="path-index">01 学习</span>
<strong>课程作业</strong>
<p>查看教师布置的任务,按时完成并提交。</p>
</article>
<article class="path-card">
<span class="path-index">02 强化</span>
<strong>对话练习</strong>
<p>针对已学内容连续对话,把薄弱点练熟。</p>
</article>
<article class="path-card">
<span class="path-index">03 拓展</span>
<strong>生活场景</strong>
<p>点餐、入住、打车……开口练真实情境。</p>
</article>
<article class="path-card">
<span class="path-index">04 我的</span>
<strong>账号与设置</strong>
<p>切换语言与主题,管理课程和学习资料。</p>
</article>
</div>
</section>
<section id="learn" class="feature reveal">
<div>
<p class="section-kicker">FOLLOW THE COURSE</p>
<h2 class="section-title display">跟着课程完成作业</h2>
<p class="section-lead">教师布置、学生作答。作业状态一目了然,家长和老师都知道进度走到哪一步。</p>
<ul class="feature-points">
<li>按班级、作业类型与作答状态筛选任务</li>
<li>查看未开始、作答中、已提交、已评阅</li>
<li>用邀请码加入课程,学习进度跟着账号走</li>
</ul>
</div>
<div class="feature-media">
<img src="./images/homework.jpg" alt="智花学伴课程作业列表界面" loading="lazy" />
</div>
</section>
<section id="types" class="feature reverse reveal">
<div>
<p class="section-kicker">MANY QUESTION TYPES</p>
<h2 class="section-title display">多种题型,一次作答</h2>
<p class="section-lead">选择、连线、填空,再到语音、图片与手写,同一份作业里完成不同类型练习。题目可同时呈现拼音与汉字。</p>
<div class="type-grid">
<div class="type-chip"><strong>选择题</strong><span>点选判断,提交前可改</span></div>
<div class="type-chip"><strong>连线题</strong><span>左右配对,一对一匹配</span></div>
<div class="type-chip"><strong>选择填空</strong><span>从候选里填入空白</span></div>
<div class="type-chip"><strong>语音题</strong><span>录音、回放与重录</span></div>
<div class="type-chip"><strong>图片题</strong><span>拍照或从相册上传</span></div>
<div class="type-chip"><strong>书写题</strong><span>手写面板完成作答</span></div>
</div>
</div>
<div class="feature-media">
<img src="./images/quiz.jpg" alt="智花学伴选择题作答界面,题目同时显示拼音与汉字" loading="lazy" />
</div>
</section>
<section id="practice" class="feature reveal">
<div>
<p class="section-kicker">AI COACH</p>
<h2 class="section-title display">对着学伴,把薄弱点练熟</h2>
<p class="section-lead">基于已学内容生成强化练习,用连续对话查漏补缺。学伴会针对作答给出讲解,再引出下一题。</p>
<ul class="feature-points">
<li>按学习内容范围新建练习会话</li>
<li>支持文字输入与按住说话</li>
<li>可清空会话或删除练习,随时重新开始</li>
</ul>
</div>
<div class="feature-media">
<img src="./images/practice.jpg" alt="智花学伴强化练习对话界面" loading="lazy" />
</div>
</section>
<section id="scenes" class="feature reverse reveal">
<div>
<p class="section-kicker">REAL-LIFE SCENES</p>
<h2 class="section-title display">把中文用进生活场景</h2>
<p class="section-lead">咖啡店点餐、酒店入住、打车出行、医院挂号……选一个场景,开口练对话。说不清楚时,学伴会引导你继续。</p>
<ul class="feature-points">
<li>热门场景与分类检索,按生活需要选练</li>
<li>语音或文字回复,系统即时接话</li>
<li>适合课前预热,也适合碎片时间开口</li>
</ul>
</div>
<div class="feature-media">
<img src="./images/scenes.jpg" alt="智花学伴生活场景口语练习入口" loading="lazy" />
</div>
</section>
<section id="download" class="cta-band reveal">
<h2 class="display">用学习账号开始练习</h2>
<p>智花学伴覆盖 iOS、Android 与 Web。账号由教师或机构分配,加入班级后即可完成作业、口语评测与场景对话。</p>
<div class="cta-actions">
<a class="btn btn-primary" href="mailto:liutingchao@fivequestions.cn">联系试用</a>
<a class="btn btn-ghost" href="./privacy-policy.html">了解隐私保护</a>
</div>
</section>
</main>
<footer>
<div class="footer-inner">
<div class="footer-brand">智花学伴</div>
<div class="footer-links">
<a href="./service-agreement.html">服务协议</a>
<a href="./privacy-policy.html">隐私协议</a>
<a href="./personal-information-collection-list.html">个人信息收集清单</a>
<a href="./third-party-sharing-list.html">第三方信息共享清单</a>
<a href="./account-deletion.html">账号删除申请</a>
</div>
<div class="footer-meta">
<div>产品名称:智花学伴(SmartBuddy)</div>
<div>运营主体:五道题(北京)科技有限公司</div>
<div>“五道题”®、“智花”®为五道题(北京)科技有限公司注册商标</div>
<div>联系邮箱:<a href="mailto:liutingchao@fivequestions.cn">liutingchao@fivequestions.cn</a></div>
<div><a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer">京ICP备2025143052号</a></div>
<div>© <span id="year"></span> 五道题(北京)科技有限公司</div>
</div>
</div>
</footer>
<script>
(function () {
document.documentElement.classList.add('js');
var nav = document.getElementById('topNav');
var year = document.getElementById('year');
if (year) year.textContent = String(new Date().getFullYear());
function onScroll() {
if (!nav) return;
nav.classList.toggle('is-scrolled', window.scrollY > 8);
}
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
var nodes = document.querySelectorAll('.reveal');
if (!('IntersectionObserver' in window)) {
nodes.forEach(function (n) { n.classList.add('is-in'); });
return;
}
var io = new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting) {
entry.target.classList.add('is-in');
io.unobserve(entry.target);
}
});
}, { threshold: 0.18, rootMargin: '0px 0px -8% 0px' });
nodes.forEach(function (n) { io.observe(n); });
})();
</script>
</body>
</html>