优化支持页和等待名单页样式

- 支持页:常见问题改为静态卡片展示,修复下拉选择框样式和箭头位置,修复 schedule 卡片图标对齐
- 等待名单页:重写页面,修复 CSS 变量未定义导致的样式丢失
- Header:移除所有链接的默认下划线

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
WangDL 2026-05-14 20:40:19 +08:00
parent 7590daebc0
commit 29f7da8351
3 changed files with 388 additions and 105 deletions

View File

@ -17,11 +17,11 @@ const isActive = (href: string) => {
<header style="position: fixed; top: 0; left: 0; right: 0; z-index: 50; background-color: rgba(255, 255, 255, 0.7); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); border-bottom: 1px solid rgba(0, 0, 0, 0.05); box-shadow: 0 8px 32px 0 rgba(18, 26, 43, 0.03);">
<nav style="display: flex; justify-content: space-between; align-items: center; height: 64px; padding-left: 24px; padding-right: 24px; max-width: 1280px; margin: 0 auto;">
<a href="/" style="display: flex; align-items: center; gap: 8px;">
<a href="/" style="display: flex; align-items: center; gap: 8px; text-decoration: none;">
<img src="/logo.png" alt="知习 AI" style="height: 32px; width: auto;" />
<span style="color: #4F7CFF; font-size: 20px; font-weight: 800; letter-spacing: -0.02em;" class="desktop-text">知习 AI</span>
</a>
<div class="desktop-nav">
{navItems.map(item => (
<a
@ -30,7 +30,8 @@ const isActive = (href: string) => {
color: isActive(item.href) ? '#4F7CFF' : '#64748b',
'border-bottom': isActive(item.href) ? '2px solid #4F7CFF' : 'none',
'padding-bottom': '4px',
transition: 'all 0.3s'
transition: 'all 0.3s',
'text-decoration': 'none'
}}
>
{item.label}
@ -38,17 +39,21 @@ const isActive = (href: string) => {
))}
</div>
<a href="/waitlist" style="color: #ffffff; font-weight: 500; padding: 8px 24px; border-radius: 9999px; background: linear-gradient(135deg, #4F7CFF 0%, #7861FF 100%); transition: all 0.3s; font-size: 14px;">
<a href="/waitlist" style="color: #ffffff; font-weight: 500; padding: 8px 24px; border-radius: 9999px; background: linear-gradient(135deg, #4F7CFF 0%, #7861FF 100%); transition: all 0.3s; font-size: 14px; text-decoration: none;">
立即加入
</a>
</nav>
</header>
<style>
header a {
text-decoration: none;
}
.desktop-text {
display: none;
}
.desktop-nav {
display: none;
gap: 32px;
@ -56,21 +61,21 @@ const isActive = (href: string) => {
letter-spacing: -0.01em;
font-size: 14px;
}
.desktop-nav a {
color: #64748b;
transition: all 0.3s;
}
.desktop-nav a:hover {
color: #4F7CFF;
}
@media (min-width: 768px) {
.desktop-text {
display: inline;
}
.desktop-nav {
display: flex;
}

View File

@ -15,13 +15,13 @@ import Footer from '../components/Footer.astro';
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap" rel="stylesheet"/>
</head>
<body style="background-color: #faf9ff; color: #131b2c; min-height: 100vh; display: flex; flex-direction: column; font-family: 'Manrope', -apple-system, BlinkMacSystemFont, 'SF Pro Text', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; position: relative;">
<Header />
<div style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-image: radial-gradient(circle at center, #d2daf1 1px, transparent 1px); background-size: 24px 24px; opacity: 0.25; pointer-events: none; z-index: -1;"></div>
<main class="animate-page-enter" style="flex: 1; padding-top: 140px; padding-bottom: 0; padding-left: 24px; padding-right: 24px;">
<!-- Hero Section -->
<section style="max-width: 1200px; margin: 0 auto 80px; text-align: center;">
<h1 style="font-family: 'Manrope', sans-serif; font-size: 56px; line-height: 1.15; letter-spacing: -0.02em; font-weight: 800; color: #131b2c; margin-bottom: 20px;">反馈与支持</h1>
@ -32,10 +32,10 @@ import Footer from '../components/Footer.astro';
<!-- Form & Contact Sidebar -->
<section style="max-width: 1000px; margin: 0 auto 120px; display: grid; grid-template-columns: 1fr; gap: 40px; align-items: start;" class="contact-grid">
<!-- Feedback Form -->
<div style="background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.9); border-radius: 1.5rem; padding: 40px; box-shadow: 0 20px 40px rgba(18, 26, 43, 0.04);" class="glass-card">
<!-- Section: Basic Info -->
<div style="margin-bottom: 36px;">
<div style="display: flex; align-items: center; gap: 10px; margin-bottom: 20px;">
@ -64,17 +64,20 @@ import Footer from '../components/Footer.astro';
</div>
<span style="font-family: 'Manrope', sans-serif; font-size: 17px; font-weight: 700; color: #131b2c;">反馈内容</span>
</div>
<div style="margin-bottom: 20px;">
<label class="form-label" for="type">反馈类型 <span style="color: #ba1a1a;">*</span></label>
<select class="form-input" id="type" required>
<option disabled selected value="">请选择反馈类型</option>
<option value="功能建议">功能建议</option>
<option value="问题反馈">问题反馈</option>
<option value="使用体验">使用体验</option>
<option value="隐私与账号">隐私与账号</option>
<option value="其他">其他</option>
</select>
<div class="select-wrapper">
<select class="form-select" id="type" required>
<option disabled selected value="">请选择反馈类型</option>
<option value="功能建议">功能建议</option>
<option value="问题反馈">问题反馈</option>
<option value="使用体验">使用体验</option>
<option value="隐私与账号">隐私与账号</option>
<option value="其他">其他</option>
</select>
<span class="select-arrow material-symbols-outlined">keyboard_arrow_down</span>
</div>
</div>
<div>
@ -159,8 +162,8 @@ import Footer from '../components/Footer.astro';
<!-- Quick Note -->
<div style="background: linear-gradient(135deg, #f1f3ff, #e9edff); border-radius: 1rem; padding: 20px 24px;">
<div style="display: flex; gap: 10px; align-items: flex-start;">
<span class="material-symbols-outlined" style="color: #1550d3; font-size: 20px; margin-top: 2px;">schedule</span>
<div style="display: flex; gap: 10px; align-items: center;">
<span class="material-symbols-outlined" style="color: #1550d3; font-size: 20px; flex-shrink: 0;">schedule</span>
<p style="font-family: 'Manrope', sans-serif; font-size: 13px; line-height: 1.6; color: #434654;">
我们通常会在 <strong style="color: #131b2c;">24 小时内</strong>回复你的反馈。请确保邮箱填写正确。
</p>
@ -175,39 +178,39 @@ import Footer from '../components/Footer.astro';
<h2 style="font-family: 'Manrope', sans-serif; font-size: 36px; line-height: 1.2; letter-spacing: -0.01em; font-weight: 700; color: #131b2c; margin-bottom: 12px;">常见问题</h2>
<p style="font-family: 'Manrope', sans-serif; font-size: 16px; color: #737686;">也许你想要的答案就在这里</p>
</div>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px;" class="faq-grid">
<details class="faq-item">
<summary>
知习 AI 现在可以使用了吗?
<span class="material-symbols-outlined faq-arrow">expand_more</span>
</summary>
<div class="faq-answer">产品还在早期版本开发中,官网会持续更新进展。</div>
</details>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px;" class="faq-grid">
<details class="faq-item">
<summary>
知习 AI 支持哪些平台?
<span class="material-symbols-outlined faq-arrow">expand_more</span>
</summary>
<div class="faq-answer">第一阶段优先支持 iPhone后续再考虑 iPad、Mac 和其他平台。</div>
</details>
<div class="faq-card">
<div class="faq-icon">
<span class="material-symbols-outlined">help</span>
</div>
<h3>知习 AI 现在可以使用了吗?</h3>
<p>产品还在早期版本开发中,官网会持续更新进展。</p>
</div>
<details class="faq-item">
<summary>
知习 AI 会保存我的学习内容吗?
<span class="material-symbols-outlined faq-arrow">expand_more</span>
</summary>
<div class="faq-answer">为了提供学习记录和 AI 分析,产品可能会保存必要的学习数据,具体请查看隐私政策。</div>
</details>
<div class="faq-card">
<div class="faq-icon">
<span class="material-symbols-outlined">devices</span>
</div>
<h3>知习 AI 支持哪些平台?</h3>
<p>第一阶段优先支持 iPhone后续再考虑 iPad、Mac 和其他平台。</p>
</div>
<details class="faq-item">
<summary>
如何删除我的数据?
<span class="material-symbols-outlined faq-arrow">expand_more</span>
</summary>
<div class="faq-answer">你可以通过本页面联系我们,我们会根据请求处理相关数据。</div>
</details>
<div class="faq-card">
<div class="faq-icon">
<span class="material-symbols-outlined">security</span>
</div>
<h3>知习 AI 会保存我的学习内容吗?</h3>
<p>为了提供学习记录和 AI 分析,产品可能会保存必要的学习数据,具体请查看隐私政策。</p>
</div>
<div class="faq-card">
<div class="faq-icon">
<span class="material-symbols-outlined">delete</span>
</div>
<h3>如何删除我的数据?</h3>
<p>你可以通过本页面联系我们,我们会根据请求处理相关数据。</p>
</div>
</div>
</section>
@ -255,6 +258,65 @@ import Footer from '../components/Footer.astro';
box-shadow: 0 0 0 3px rgba(21, 80, 211, 0.1);
}
.select-wrapper {
position: relative;
width: 100%;
}
.form-select {
width: 100%;
background-color: #ffffff;
border: 1.5px solid #e2e8f0;
border-radius: 10px;
padding: 13px 44px 13px 16px;
font-family: 'Manrope', sans-serif;
font-size: 15px;
line-height: 1.6;
color: #131b2c;
transition: all 0.2s;
outline: none;
box-sizing: border-box;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
.form-select:invalid {
color: #b0b8c4;
}
.form-select option {
color: #131b2c;
background-color: #ffffff;
font-family: 'Manrope', sans-serif;
font-size: 15px;
padding: 12px;
}
.form-select:hover {
border-color: #c3c5d7;
}
.form-select:focus {
border-color: #1550d3;
box-shadow: 0 0 0 3px rgba(21, 80, 211, 0.1);
}
.select-arrow {
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
color: #737686;
font-size: 22px;
pointer-events: none;
transition: color 0.2s;
}
.form-select:focus + .select-arrow {
color: #1550d3;
}
.sr-only {
position: absolute;
width: 1px;
@ -323,61 +385,50 @@ import Footer from '../components/Footer.astro';
background: #f8f9ff;
}
.faq-item {
.faq-card {
background-color: #ffffff;
border-radius: 14px;
border: 1px solid rgba(195, 197, 215, 0.5);
overflow: hidden;
cursor: pointer;
padding: 28px 28px 24px;
transition: box-shadow 0.2s, border-color 0.2s;
}
.faq-item:hover {
.faq-card:hover {
box-shadow: 0 6px 20px rgba(18, 26, 43, 0.06);
border-color: #b5c4ff;
}
.faq-item summary {
.faq-icon {
width: 40px;
height: 40px;
border-radius: 10px;
background: #f1f3ff;
color: #1550d3;
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 24px;
justify-content: center;
margin-bottom: 16px;
}
.faq-icon .material-symbols-outlined {
font-size: 20px;
}
.faq-card h3 {
font-family: 'Manrope', sans-serif;
font-size: 16px;
font-weight: 600;
font-weight: 700;
color: #131b2c;
list-style: none;
margin: 0 0 10px;
line-height: 1.4;
}
.faq-item summary::-webkit-details-marker {
display: none;
}
.faq-arrow {
color: #737686;
font-size: 20px;
transition: transform 0.3s;
}
.faq-item[open] .faq-arrow {
transform: rotate(180deg);
}
.faq-item[open] {
border-color: #b5c4ff;
box-shadow: 0 6px 20px rgba(18, 26, 43, 0.06);
}
.faq-item[open] summary {
color: #1550d3;
}
.faq-answer {
padding: 0 24px 20px;
.faq-card p {
font-family: 'Manrope', sans-serif;
font-size: 15px;
font-size: 14px;
line-height: 1.7;
color: #434654;
margin: 0;
}
@media (min-width: 1024px) {

View File

@ -2,30 +2,257 @@
import BaseLayout from '../layouts/BaseLayout.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
import Hero from '../components/Hero.astro';
import WaitlistForm from '../components/WaitlistForm.astro';
---
<BaseLayout
title="等待名单 - 龙德AI学习"
description="加入龙德AI学习等待名单抢先体验,获取最新产品资讯和内测资格。"
title="等待名单 - 知习 AI"
description="加入知习 AI 等待名单抢先体验,获取最新产品资讯和内测资格。"
>
<Header />
<main class="animate-page-enter">
<Hero
title="加入等待名单"
subtitle="留下你的信息,我们会第一时间通知你"
/>
<main class="animate-page-enter" style="flex: 1; padding-top: 100px; padding-bottom: 80px; padding-left: 24px; padding-right: 24px;">
<section class="waitlist-section">
<WaitlistForm />
<!-- Hero -->
<section style="max-width: 720px; margin: 0 auto 48px; text-align: center;">
<h1 style="font-family: 'Manrope', sans-serif; font-size: clamp(2rem, 5vw, 3rem); line-height: 1.15; letter-spacing: -0.02em; font-weight: 800; color: #131b2c; margin-bottom: 12px;">加入等待名单</h1>
<p style="font-family: 'Manrope', sans-serif; font-size: 16px; color: #737686; line-height: 1.6;">留下你的信息,我们会第一时间通知你</p>
</section>
<!-- Waitlist Form -->
<div class="waitlist-form-container" style="max-width: 480px; margin: 0 auto;">
<div style="background: rgba(255, 255, 255, 0.7); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.9); border-radius: 1.5rem; padding: 40px; box-shadow: 0 20px 40px rgba(18, 26, 43, 0.04);">
<form id="waitlist-form">
<div style="display: flex; flex-direction: column; gap: 20px;">
<div>
<label class="wl-label" for="nickname">昵称 <span style="color: #737686; font-weight: 400;">(可选)</span></label>
<input class="wl-input" type="text" id="nickname" name="nickname" placeholder="你的昵称" />
</div>
<div>
<label class="wl-label" for="email">电子邮箱 <span style="color: #ba1a1a;">*</span></label>
<input class="wl-input" type="email" id="email" name="email" placeholder="your@email.com" required />
</div>
<div>
<label class="wl-label" for="device">使用设备</label>
<div class="select-wrapper">
<select class="wl-select" id="device" name="device">
<option value="">请选择</option>
<option value="iphone">iPhone</option>
<option value="android">Android</option>
<option value="ipad">iPad</option>
<option value="mac">Mac</option>
</select>
<span class="select-arrow material-symbols-outlined">keyboard_arrow_down</span>
</div>
</div>
<div>
<label class="wl-label" for="interest">感兴趣的方向</label>
<div class="select-wrapper">
<select class="wl-select" id="interest" name="interest">
<option value="">请选择</option>
<option value="gongkai">公考申论 AI 学习教练</option>
<option value="ai-tools">AI 工具学习知识库</option>
<option value="frontend-interview">程序员前端面试学习助手</option>
<option value="other">其他</option>
</select>
<span class="select-arrow material-symbols-outlined">keyboard_arrow_down</span>
</div>
</div>
<div>
<label class="wl-label" for="pain-point">当前最大痛点</label>
<textarea class="wl-input wl-textarea" id="pain-point" name="pain-point" rows="3" placeholder="描述你当前学习中遇到的最大困难..."></textarea>
</div>
<div style="display: flex; flex-direction: column; gap: 12px;">
<label class="wl-checkbox">
<input type="checkbox" name="beta" value="yes" />
<span>愿意参加内测</span>
</label>
<label class="wl-checkbox">
<input type="checkbox" name="notify" value="yes" checked />
<span>接受后续邮件通知</span>
</label>
</div>
<button type="submit" class="wl-submit-btn">
<span>提交</span>
<span class="material-symbols-outlined" style="font-size: 18px;">send</span>
</button>
</div>
</form>
<div id="success-message" style="text-align: center; padding: 20px 0;" hidden>
<div style="width: 48px; height: 48px; margin: 0 auto 16px; display: flex; align-items: center; justify-content: center; font-size: 24px; color: #ffffff; background: #34c759; border-radius: 50%;">✓</div>
<h3 style="font-family: 'Manrope', sans-serif; font-size: 20px; font-weight: 700; color: #131b2c; margin-bottom: 8px;">提交成功!</h3>
<p style="font-family: 'Manrope', sans-serif; font-size: 15px; color: #434654; line-height: 1.6;">感谢你的关注,我们会在产品上线后第一时间通知你。</p>
</div>
</div>
</div>
</main>
<Footer />
</BaseLayout>
<style>
.waitlist-section {
padding: 0 var(--page-padding) 4rem;
<style is:global>
.wl-label {
display: block;
font-family: 'Inter', sans-serif;
font-size: 13px;
letter-spacing: 0.05em;
font-weight: 600;
color: #434654;
margin-bottom: 8px;
}
</style>
.wl-input {
width: 100%;
background-color: #ffffff;
border: 1.5px solid #e2e8f0;
border-radius: 10px;
padding: 13px 16px;
font-family: 'Manrope', sans-serif;
font-size: 15px;
line-height: 1.6;
color: #131b2c;
transition: all 0.2s;
outline: none;
box-sizing: border-box;
}
.wl-input::placeholder {
color: #b0b8c4;
}
.wl-input:hover {
border-color: #c3c5d7;
}
.wl-input:focus {
border-color: #1550d3;
box-shadow: 0 0 0 3px rgba(21, 80, 211, 0.1);
}
.wl-textarea {
resize: vertical;
min-height: 80px;
}
.select-wrapper {
position: relative;
width: 100%;
}
.wl-select {
width: 100%;
background-color: #ffffff;
border: 1.5px solid #e2e8f0;
border-radius: 10px;
padding: 13px 44px 13px 16px;
font-family: 'Manrope', sans-serif;
font-size: 15px;
line-height: 1.6;
color: #131b2c;
transition: all 0.2s;
outline: none;
box-sizing: border-box;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
cursor: pointer;
}
.wl-select:invalid {
color: #b0b8c4;
}
.wl-select option {
color: #131b2c;
background-color: #ffffff;
font-family: 'Manrope', sans-serif;
font-size: 15px;
padding: 12px;
}
.wl-select:hover {
border-color: #c3c5d7;
}
.wl-select:focus {
border-color: #1550d3;
box-shadow: 0 0 0 3px rgba(21, 80, 211, 0.1);
}
.select-arrow {
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
color: #737686;
font-size: 22px;
pointer-events: none;
transition: color 0.2s;
}
.wl-select:focus + .select-arrow {
color: #1550d3;
}
.wl-checkbox {
display: flex;
align-items: center;
gap: 10px;
font-family: 'Manrope', sans-serif;
font-size: 14px;
color: #434654;
cursor: pointer;
}
.wl-checkbox input[type="checkbox"] {
width: 18px;
height: 18px;
cursor: pointer;
accent-color: #1550d3;
}
.wl-submit-btn {
width: 100%;
background: linear-gradient(135deg, #1550d3, #583dde);
color: #ffffff;
font-family: 'Inter', sans-serif;
font-size: 14px;
letter-spacing: 0.03em;
font-weight: 600;
padding: 16px;
border-radius: 12px;
border: none;
cursor: pointer;
transition: all 0.3s;
box-shadow: 0 8px 24px rgba(21, 80, 211, 0.2);
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
.wl-submit-btn:hover {
transform: translateY(-1px);
box-shadow: 0 12px 32px rgba(21, 80, 211, 0.3);
}
</style>
<script>
const form = document.getElementById('waitlist-form') as HTMLFormElement;
const successMessage = document.getElementById('success-message');
form?.addEventListener('submit', (e) => {
e.preventDefault();
form.hidden = true;
if (successMessage) {
successMessage.hidden = false;
}
});
</script>