fischer-site/index.html

2412 lines
84 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>菲西尔智能 · 企业级AI落地专家 - 不换系统2周让AI上岗 | 物业AI/资管AI/CRM AI</title>
<meta name="description" content="菲西尔智能帮企业在现有业务系统上叠加AI能力。不换系统、不迁移数据、不重新培训员工。物业AI、资管AI、CRM AI三大场景2周部署见效。">
<meta name="keywords" content="AI叠加, 物业AI, 资管AI, CRM AI, 人工智能集成, 业务系统AI升级, 智能物业管理, 智能资产管理, 客户管理AI, 上海AI公司">
<meta name="author" content="上海菲西尔智能科技有限公司">
<meta name="robots" content="index, follow">
<meta name="googlebot" content="index, follow">
<meta name="theme-color" content="#0a0a0f">
<link rel="canonical" href="https://www.fischerai.cn/">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.fischerai.cn/">
<meta property="og:title" content="菲西尔智能 · 不换系统2周让AI上岗">
<meta property="og:description" content="帮企业在现有业务系统上叠加AI能力。物业AI、资管AI、CRM AI2周部署见效不换系统不迁移数据。">
<meta property="og:image" content="https://www.fischerai.cn/assets/og-image.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:locale" content="zh_CN">
<meta property="og:site_name" content="菲西尔智能">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://www.fischerai.cn/">
<meta name="twitter:title" content="菲西尔智能 · 不换系统2周让AI上岗">
<meta name="twitter:description" content="帮企业在现有业务系统上叠加AI能力。物业AI、资管AI、CRM AI2周部署见效。">
<meta name="twitter:image" content="https://www.fischerai.cn/assets/og-image.jpg">
<meta name="twitter:site" content="@fischer_ai">
<!-- 百度 SEO -->
<meta name="baidu-site-verification" content="">
<meta name="360-site-verification" content="">
<!-- 移动端优化 -->
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="format-detection" content="telephone=no">
<!-- Favicon -->
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/site.webmanifest">
<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=Inter:wght@300;400;500;600;700;800;900&family=Noto+Sans+SC:wght@300;400;500;700;900&display=swap" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
<!-- JSON-LD 结构化数据 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "菲西尔智能",
"alternateName": "上海菲西尔智能科技有限公司",
"url": "https://www.fischerai.cn",
"logo": "https://www.fischerai.cn/assets/logo.png",
"description": "帮企业在现有业务系统上叠加AI能力的服务商专注物业AI、资管AI、CRM AI三大场景",
"foundingDate": "2024",
"foundingLocation": "上海",
"areaServed": "中国",
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "contact@fischerai.cn",
"availableLanguage": ["Chinese", "English"]
},
"sameAs": [
"https://github.com/fischer-ai",
"https://www.linkedin.com/company/fischer-ai"
],
"knowsAbout": [
"AI系统集成",
"物业管理系统AI升级",
"资产管理系统AI升级",
"CRM系统AI升级",
"AI Agent开发",
"业务自动化"
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "菲西尔智能官网",
"url": "https://www.fischerai.cn",
"description": "企业级AI落地专家帮企业不换系统2周让AI上岗",
"potentialAction": {
"@type": "SearchAction",
"target": "https://www.fischerai.cn/?s={search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "菲西尔智能",
"image": "https://www.fischerai.cn/assets/logo.png",
"url": "https://www.fischerai.cn",
"description": "企业级AI落地专家专注物业、资管、CRM系统的AI升级改造",
"telephone": "+86-21-xxxx-xxxx",
"email": "contact@fischerai.cn",
"address": {
"@type": "PostalAddress",
"addressLocality": "上海",
"addressCountry": "CN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "31.2304",
"longitude": "121.4737"
},
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
},
"priceRange": "¥¥¥",
"serviceType": ["AI系统集成", "物业AI", "资管AI", "CRM AI升级"]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "什么是AI叠加和换系统有什么区别",
"acceptedAnswer": {
"@type": "Answer",
"text": "AI叠加是指在企业现有业务系统旁边加一个AI智能层通过API连接不改变原有系统的使用方式。不需要换系统、不需要迁移数据、不需要重新培训员工。与替换系统相比AI叠加成本更低、风险更小、实施更快通常2周就可以见效。"
}
},
{
"@type": "Question",
"name": "菲西尔支持哪些业务系统的AI叠加",
"acceptedAnswer": {
"@type": "Answer",
"text": "菲西尔支持物业管理系统、资产管理系统、CRM系统等主流业务系统的AI叠加。无论是国内还是国外的品牌只要有API接口或数据库访问权限都可以叠加AI能力。"
}
},
{
"@type": "Question",
"name": "物业AI可以解决什么问题",
"acceptedAnswer": {
"@type": "Answer",
"text": "物业AI可以帮助1智能派单自动判断工单该派给谁2设备预警提前发现设备故障3巡检规划AI自动规划巡检路线4数据查询用自然语言查询业务数据。员工说这系统终于能帮我干活了。"
}
},
{
"@type": "Question",
"name": "资管AI有什么具体应用",
"acceptedAnswer": {
"@type": "Answer",
"text": "资管AI可以1租约预警提前90天告诉你哪些租约要到期2空置预警预测哪些楼层可能空出来3定价建议参考历史数据给出租金建议4报表汇总用自然语言查询资产数据。老板说终于不用靠猜了。"
}
},
{
"@type": "Question",
"name": "CRM AI能帮销售做什么",
"acceptedAnswer": {
"@type": "Answer",
"text": "CRM AI可以1线索清洗过滤掉假的、重复的线索2跟进记录打完电话自动生成跟进记录3客户推荐推荐今天最该联系哪些客户4数据分析用自然语言查询客户数据。销售说终于不用录系统了。"
}
},
{
"@type": "Question",
"name": "实施AI叠加需要多长时间",
"acceptedAnswer": {
"@type": "Answer",
"text": "通常2周就可以完成部署并见效。我们先在一个场景试点效果好再扩大。不满意可以随时停不用一下子投入很多资金。"
}
},
{
"@type": "Question",
"name": "AI叠加需要迁移数据吗",
"acceptedAnswer": {
"@type": "Answer",
"text": "不需要。我们通过API连接你的现有系统数据不需要迁移员工不需要重新录入。员工继续用原来的界面只是多了AI帮你干活。"
}
},
{
"@type": "Question",
"name": "如何预约菲西尔的AI诊断服务",
"acceptedAnswer": {
"@type": "Answer",
"text": "你可以直接拨打我们的电话、发送邮件或填写网站上的预约表单。我们会安排专业顾问30分钟免费诊断你的系统看看AI能帮你解决什么问题。"
}
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "如何预约菲西尔的AI诊断服务",
"description": "预约菲西尔30分钟免费AI诊断了解AI能为你的业务系统做什么",
"totalTime": "PT30M",
"step": [
{
"@type": "HowToStep",
"name": "填写预约表单或电话联系",
"text": "你可以通过网站上的预约表单填写姓名、手机号、行业和咨询内容,也可以直接拨打我们的电话或发送邮件进行联系。"
},
{
"@type": "HowToStep",
"name": "等待专业顾问联系",
"text": "提交预约信息后我们的专业顾问会在24小时内与你联系确认预约时间并了解你的业务系统情况。"
},
{
"@type": "HowToStep",
"name": "进行30分钟免费诊断",
"text": "顾问会通过线上会议的方式对你的系统进行30分钟免费诊断分析现有系统的痛点告诉你AI能帮你解决什么问题、花多少钱。"
}
]
}
</script>
<!-- 客户案例 Review 结构化数据 -->
<!-- 注意:以下为占位符数据,实际部署时请替换为真实客户评价 -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "https://www.fischerai.cn/#webpage",
"name": "菲西尔智能官网"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "AggregateRating",
"itemReviewed": {
"@type": "Service",
"name": "菲西尔智能AI叠加服务",
"provider": {
"@type": "Organization",
"name": "菲西尔智能",
"url": "https://www.fischerai.cn"
}
},
"ratingValue": "4.9",
"bestRating": "5",
"ratingCount": "3",
"reviewCount": "3"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"itemReviewed": {
"@type": "Service",
"name": "物业AI帮手",
"provider": {
"@type": "Organization",
"name": "菲西尔智能",
"url": "https://www.fischerai.cn"
}
},
"author": {
"@type": "Organization",
"name": "某物业公司"
},
"reviewBody": "用了3个月员工最常说的一句话是这个功能怎么不早点上。",
"datePublished": "2026-01-15"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"itemReviewed": {
"@type": "Service",
"name": "资管AI帮手",
"provider": {
"@type": "Organization",
"name": "菲西尔智能",
"url": "https://www.fischerai.cn"
}
},
"author": {
"@type": "Organization",
"name": "某资管公司"
},
"reviewBody": "以前每月汇报数据要准备一周现在问AI就行。",
"datePublished": "2026-02-20"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"itemReviewed": {
"@type": "Service",
"name": "CRM AI帮手",
"provider": {
"@type": "Organization",
"name": "菲西尔智能",
"url": "https://www.fischerai.cn"
}
},
"author": {
"@type": "Organization",
"name": "某销售团队"
},
"reviewBody": "销售终于有时间去见客户了,而不是天天填表。",
"datePublished": "2026-03-10"
}
</script>
<style>
:root {
--bg-primary: #0a0a0f;
--bg-secondary: #0f0f15;
--bg-elevated: #141419;
--accent-blue: #3B82F6;
--accent-blue-light: #60A5FA;
--accent-blue-dark: #2563EB;
--accent-cyan: #22D3EE;
--text-primary: #ffffff;
--text-secondary: rgba(255, 255, 255, 0.7);
--text-tertiary: rgba(255, 255, 255, 0.4);
--border-subtle: rgba(255, 255, 255, 0.06);
--border-medium: rgba(255, 255, 255, 0.1);
--glow-blue: rgba(59, 130, 246, 0.3);
}
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: smooth;
-webkit-text-size-adjust: 100%;
}
body {
font-family: 'Inter', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, sans-serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.6;
overflow-x: hidden;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
scroll-behavior: smooth;
}
@media (prefers-reduced-motion: reduce) {
body { scroll-behavior: auto; }
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
.container {
width: 100%;
max-width: 1400px;
margin: 0 auto;
padding: 0 clamp(24px, 5vw, 120px);
}
.section {
padding: clamp(80px, 12vh, 160px) 0;
position: relative;
}
.section-label {
font-size: 11px;
font-weight: 600;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--accent-blue);
margin-bottom: 24px;
display: flex;
align-items: center;
gap: 12px;
}
.section-label::before {
content: '';
width: 24px;
height: 1px;
background: var(--accent-blue);
}
.section-title {
font-size: clamp(36px, 5vw, 64px);
font-weight: 800;
line-height: 1.1;
letter-spacing: -0.03em;
margin-bottom: 24px;
}
.section-subtitle {
font-size: clamp(16px, 1.5vw, 20px);
color: var(--text-secondary);
line-height: 1.7;
max-width: 600px;
}
nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
padding: 20px 0;
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
nav.scrolled {
padding: 12px 0;
background: rgba(10, 10, 15, 0.85);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(--border-subtle);
}
.nav-inner {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
font-size: 14px;
font-weight: 700;
letter-spacing: 0.15em;
color: var(--text-primary);
text-decoration: none;
}
.nav-links {
display: flex;
gap: 48px;
}
.nav-links a {
font-size: 13px;
font-weight: 500;
color: var(--text-secondary);
text-decoration: none;
transition: color 0.3s ease;
}
.nav-links a:hover {
color: var(--text-primary);
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 14px 28px;
font-size: 13px;
font-weight: 600;
letter-spacing: 0.02em;
text-decoration: none;
border-radius: 8px;
transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
cursor: pointer;
border: none;
}
.btn-primary {
background: linear-gradient(135deg, var(--accent-blue) 0%, var(--accent-blue-dark) 100%);
color: white;
box-shadow: 0 4px 20px var(--glow-blue), 0 0 40px rgba(59, 130, 246, 0.2);
position: relative;
overflow: hidden;
}
.btn-primary::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
transition: left 0.5s;
}
.btn-primary:hover::before {
left: 100%;
}
.btn-primary:hover {
background: linear-gradient(135deg, var(--accent-blue-light) 0%, var(--accent-blue) 100%);
transform: translateY(-2px);
box-shadow: 0 8px 30px var(--glow-blue), 0 0 60px rgba(59, 130, 246, 0.3);
}
.btn-ghost {
background: transparent;
color: var(--text-secondary);
border: 1px solid var(--border-medium);
}
.btn-ghost:hover {
background: rgba(255, 255, 255, 0.05);
color: var(--text-primary);
border-color: var(--border-medium);
}
.hero {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
background: linear-gradient(180deg, #0f0f1a 0%, #0a0a0f 50%, #080810 100%);
}
#hero-canvas {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
pointer-events: none;
}
.hero-bg-gradient {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 0;
overflow: hidden;
}
.hero-bg-gradient::before {
content: '';
position: absolute;
top: -50%;
left: 50%;
transform: translateX(-50%);
width: 120%;
height: 100%;
background: radial-gradient(ellipse 80% 60% at 50% 0%, rgba(59, 130, 246, 0.25) 0%, rgba(59, 130, 246, 0.1) 30%, transparent 70%);
animation: glowPulse 8s ease-in-out infinite;
}
.hero-bg-gradient::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 50%;
background: radial-gradient(ellipse 100% 80% at 50% 100%, rgba(59, 130, 246, 0.15) 0%, transparent 60%);
}
.hero-glow-1 {
position: absolute;
top: 20%;
left: 10%;
width: 300px;
height: 300px;
background: radial-gradient(circle, rgba(59, 130, 246, 0.2) 0%, transparent 70%);
border-radius: 50%;
filter: blur(60px);
animation: floatGlow 12s ease-in-out infinite;
z-index: 0;
}
.hero-glow-2 {
position: absolute;
bottom: 30%;
right: 15%;
width: 250px;
height: 250px;
background: radial-gradient(circle, rgba(34, 211, 238, 0.15) 0%, transparent 70%);
border-radius: 50%;
filter: blur(50px);
animation: floatGlow 10s ease-in-out infinite reverse;
z-index: 0;
}
.hero-glow-3 {
position: absolute;
top: 40%;
right: 25%;
width: 200px;
height: 200px;
background: radial-gradient(circle, rgba(99, 102, 241, 0.12) 0%, transparent 70%);
border-radius: 50%;
filter: blur(40px);
animation: floatGlow 14s ease-in-out infinite;
z-index: 0;
}
@keyframes glowPulse {
0%, 100% { opacity: 0.8; transform: translateX(-50%) scale(1); }
50% { opacity: 1; transform: translateX(-50%) scale(1.1); }
}
@keyframes floatGlow {
0%, 100% { transform: translate(0, 0); }
33% { transform: translate(30px, -20px); }
66% { transform: translate(-20px, 20px); }
}
.hero-content {
position: relative;
z-index: 10;
text-align: center;
max-width: 900px;
padding: 0 24px;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 20px;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(59, 130, 246, 0.05) 100%);
border: 1px solid rgba(59, 130, 246, 0.3);
border-radius: 100px;
font-size: 13px;
font-weight: 600;
color: var(--accent-blue-light);
margin-bottom: 32px;
backdrop-filter: blur(10px);
box-shadow: 0 0 30px rgba(59, 130, 246, 0.1);
}
.hero-badge::before {
content: '';
width: 8px;
height: 8px;
background: var(--accent-blue);
border-radius: 50%;
box-shadow: 0 0 10px var(--accent-blue);
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); box-shadow: 0 0 10px var(--accent-blue); }
50% { opacity: 0.6; transform: scale(1.3); box-shadow: 0 0 20px var(--accent-blue); }
}
.hero-title {
font-size: clamp(42px, 7vw, 88px);
font-weight: 900;
line-height: 1.05;
letter-spacing: -0.04em;
margin-bottom: 24px;
text-shadow: 0 0 60px rgba(59, 130, 246, 0.3);
}
.hero-title .char {
display: inline-block;
opacity: 0;
transform: translateY(40px);
background: linear-gradient(180deg, #ffffff 0%, rgba(255, 255, 255, 0.8) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-title .highlight {
background: linear-gradient(135deg, var(--accent-blue-light) 0%, var(--accent-cyan) 50%, var(--accent-blue-light) 100%);
background-size: 200% 200%;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: gradientShift 4s ease infinite;
}
@keyframes gradientShift {
0%, 100% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
}
.hero-subtitle {
font-size: clamp(16px, 1.8vw, 22px);
color: var(--text-secondary);
line-height: 1.7;
max-width: 600px;
margin: 0 auto 48px;
opacity: 0;
text-shadow: 0 2px 20px rgba(0, 0, 0, 0.5);
}
.hero-cta {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
opacity: 0;
}
.scroll-indicator {
position: absolute;
bottom: 48px;
left: 50%;
transform: translateX(-50%);
z-index: 10;
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
opacity: 0;
cursor: pointer;
}
.scroll-indicator span {
font-size: 10px;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--text-tertiary);
}
.scroll-line {
width: 2px;
height: 60px;
background: linear-gradient(to bottom, var(--accent-blue), transparent);
position: relative;
overflow: hidden;
}
.scroll-line::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 20px;
background: linear-gradient(to bottom, white, transparent);
animation: scrollDown 2s ease-in-out infinite;
}
@keyframes scrollDown {
0% { transform: translateY(-20px); opacity: 0; }
30% { opacity: 1; }
70% { opacity: 1; }
100% { transform: translateY(60px); opacity: 0; }
}
.scroll-indicator:hover .scroll-line {
background: linear-gradient(to bottom, var(--accent-blue-light), transparent);
}
.pain-section {
background: var(--bg-secondary);
}
.pain-header {
margin-bottom: 80px;
}
.pain-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 2px;
}
.pain-card {
background: var(--bg-elevated);
padding: 48px;
position: relative;
overflow: hidden;
transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.pain-card:hover {
background: rgba(59, 130, 246, 0.05);
}
.pain-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 1px;
background: linear-gradient(90deg, transparent, var(--accent-blue), transparent);
opacity: 0;
transition: opacity 0.4s ease;
}
.pain-card:hover::before {
opacity: 1;
}
.pain-number {
font-size: 72px;
font-weight: 900;
color: rgba(255, 255, 255, 0.03);
position: absolute;
top: 24px;
right: 32px;
line-height: 1;
letter-spacing: -0.04em;
}
.pain-icon {
width: 48px;
height: 48px;
margin-bottom: 24px;
color: var(--accent-blue);
opacity: 0.6;
}
.pain-card h3 {
font-size: 20px;
font-weight: 700;
line-height: 1.4;
margin-bottom: 16px;
color: var(--text-primary);
}
.pain-card p {
font-size: 15px;
color: var(--text-secondary);
line-height: 1.7;
}
.pain-insight {
grid-column: 1 / -1;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, rgba(34, 211, 238, 0.05) 100%);
border: 1px solid rgba(59, 130, 246, 0.2);
padding: 64px;
text-align: center;
}
.pain-insight h3 {
font-size: clamp(28px, 3vw, 40px);
font-weight: 800;
margin-bottom: 16px;
}
.pain-insight p {
font-size: 18px;
color: var(--text-secondary);
max-width: 600px;
margin: 0 auto;
}
.services-section {
background: var(--bg-primary);
}
.services-header {
text-align: center;
margin-bottom: 80px;
}
.services-header .section-label {
justify-content: center;
}
.services-header .section-label::before {
display: none;
}
.services-header .section-subtitle {
margin: 0 auto;
}
.service-card {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: center;
padding: clamp(60px, 8vh, 100px) 0;
border-bottom: 1px solid var(--border-subtle);
}
.service-card:last-child {
border-bottom: none;
}
.service-card.reverse {
direction: rtl;
}
.service-card.reverse > * {
direction: ltr;
}
.service-tag {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 6px 12px;
background: rgba(59, 130, 246, 0.1);
border-radius: 6px;
font-size: 12px;
font-weight: 600;
color: var(--accent-blue-light);
margin-bottom: 20px;
}
.service-metric {
font-size: clamp(48px, 6vw, 72px);
font-weight: 900;
letter-spacing: -0.04em;
background: linear-gradient(135deg, var(--text-primary) 0%, var(--text-secondary) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 16px;
}
.service-title {
font-size: clamp(28px, 3vw, 40px);
font-weight: 800;
line-height: 1.2;
margin-bottom: 20px;
}
.service-desc {
font-size: 16px;
color: var(--text-secondary);
line-height: 1.8;
margin-bottom: 24px;
}
.service-quote {
padding: 16px 20px;
background: var(--bg-elevated);
border-left: 2px solid var(--accent-blue);
font-size: 14px;
color: var(--text-secondary);
font-style: italic;
}
.service-visual {
aspect-ratio: 4/3;
background: var(--bg-elevated);
border-radius: 16px;
overflow: hidden;
position: relative;
}
.service-visual img {
width: 100%;
height: 100%;
object-fit: cover;
filter: grayscale(80%) brightness(0.7);
transition: all 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}
.service-visual:hover img {
filter: grayscale(40%) brightness(0.85);
transform: scale(1.03);
}
.service-visual::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(59, 130, 246, 0.1) 0%, transparent 50%);
pointer-events: none;
}
.advantages-section {
background: var(--bg-secondary);
}
.advantages-header {
text-align: center;
margin-bottom: 80px;
}
.advantages-header .section-label {
justify-content: center;
}
.advantages-header .section-label::before {
display: none;
}
.advantages-list {
max-width: 900px;
margin: 0 auto;
}
.advantage-item {
display: grid;
grid-template-columns: 80px 1fr;
gap: 32px;
padding: 40px 0;
border-bottom: 1px solid var(--border-subtle);
align-items: start;
}
.advantage-item:last-child {
border-bottom: none;
}
.advantage-num {
font-size: 14px;
font-weight: 600;
font-family: 'JetBrains Mono', monospace;
color: var(--accent-blue);
opacity: 0.6;
}
.advantage-content h3 {
font-size: 22px;
font-weight: 700;
margin-bottom: 12px;
color: var(--text-primary);
}
.advantage-content p {
font-size: 16px;
color: var(--text-secondary);
line-height: 1.7;
}
.proof-section {
background: var(--bg-primary);
}
.proof-header {
text-align: center;
margin-bottom: 64px;
}
.proof-header .section-label {
justify-content: center;
}
.proof-header .section-label::before {
display: none;
}
.proof-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
.proof-card {
background: var(--bg-elevated);
padding: 40px;
border-radius: 12px;
border: 1px solid var(--border-subtle);
}
.proof-type {
font-size: 11px;
font-weight: 600;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--accent-blue);
margin-bottom: 20px;
}
.proof-quote {
font-size: 16px;
color: var(--text-secondary);
line-height: 1.7;
margin-bottom: 24px;
}
.proof-quote::before {
content: '"';
font-size: 48px;
font-weight: 800;
color: var(--accent-blue);
opacity: 0.3;
line-height: 0;
display: block;
margin-bottom: 8px;
}
.proof-avatar {
display: flex;
align-items: center;
gap: 12px;
}
.proof-avatar-icon {
width: 40px;
height: 40px;
background: linear-gradient(135deg, var(--accent-blue) 0%, var(--accent-cyan) 100%);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 14px;
}
.proof-avatar-text {
font-size: 13px;
color: var(--text-tertiary);
}
.contact-section {
background: linear-gradient(180deg, var(--bg-secondary) 0%, var(--bg-primary) 100%);
}
.contact-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 80px;
align-items: start;
}
.contact-info .section-label {
margin-bottom: 16px;
}
.contact-title {
font-size: clamp(28px, 3vw, 40px);
font-weight: 800;
line-height: 1.2;
margin-bottom: 20px;
}
.contact-desc {
font-size: 16px;
color: var(--text-secondary);
line-height: 1.8;
margin-bottom: 48px;
}
.contact-company {
padding-top: 32px;
border-top: 1px solid var(--border-subtle);
}
.contact-company p {
font-size: 14px;
color: var(--text-tertiary);
margin-bottom: 4px;
}
.contact-form {
background: var(--bg-elevated);
padding: 48px;
border-radius: 16px;
border: 1px solid var(--border-subtle);
}
.form-group {
margin-bottom: 24px;
}
.form-group label {
display: block;
font-size: 12px;
font-weight: 600;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-tertiary);
margin-bottom: 8px;
}
.form-group input,
.form-group textarea {
width: 100%;
padding: 14px 16px;
background: var(--bg-primary);
border: 1px solid var(--border-subtle);
border-radius: 8px;
color: var(--text-primary);
font-size: 15px;
font-family: inherit;
transition: all 0.3s ease;
}
.form-group input:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--accent-blue);
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.form-group input::placeholder,
.form-group textarea::placeholder {
color: var(--text-tertiary);
}
.form-group textarea {
min-height: 100px;
resize: vertical;
}
.form-submit {
width: 100%;
}
.form-submit .btn {
width: 100%;
justify-content: center;
}
.form-status {
text-align: center;
font-size: 13px;
margin-top: 16px;
min-height: 20px;
}
.form-status.success {
color: #22c55e;
}
.form-status.error {
color: #ef4444;
}
.form-group.error input,
.form-group.error textarea {
border-color: #ef4444;
animation: shake 0.5s ease;
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-5px); }
75% { transform: translateX(5px); }
}
.form-error-msg {
font-size: 11px;
color: #ef4444;
margin-top: 6px;
display: none;
}
.form-group.error .form-error-msg {
display: block;
}
.form-group.required label::after {
content: ' *';
color: #ef4444;
}
.current-system-group {
margin-bottom: 24px;
}
.current-system-group fieldset {
border: none;
margin: 0;
padding: 0;
background: transparent;
}
.current-system-group legend {
font-size: 13px;
font-weight: 500;
color: var(--text-secondary);
margin-bottom: 8px;
padding: 0;
}
.checkbox-group {
display: flex;
flex-wrap: wrap;
gap: 12px;
}
.checkbox-item {
position: relative;
}
.checkbox-item input {
position: absolute;
opacity: 0;
cursor: pointer;
}
.checkbox-item label {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
background: var(--bg-primary);
border: 1px solid var(--border-subtle);
border-radius: 8px;
font-size: 14px;
font-weight: 500;
color: var(--text-secondary);
cursor: pointer;
transition: all 0.3s ease;
text-transform: none;
letter-spacing: normal;
}
.checkbox-item input:checked + label {
background: rgba(59, 130, 246, 0.1);
border-color: var(--accent-blue);
color: var(--accent-blue-light);
}
.checkbox-item label:hover {
border-color: var(--accent-blue);
}
.checkbox-item .checkmark {
width: 16px;
height: 16px;
border: 1px solid var(--border-medium);
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.3s ease;
}
.checkbox-item input:checked + label .checkmark {
background: var(--accent-blue);
border-color: var(--accent-blue);
}
.checkbox-item input:checked + label .checkmark::after {
content: '✓';
color: white;
font-size: 10px;
font-weight: bold;
}
.submit-loading {
position: relative;
}
.submit-loading .btn {
color: transparent;
}
.submit-loading .btn::after {
content: '';
position: absolute;
width: 20px;
height: 20px;
top: 50%;
left: 50%;
margin-top: -10px;
margin-left: -10px;
border: 2px solid transparent;
border-top-color: white;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.form-success-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(10, 10, 15, 0.95);
display: flex;
align-items: center;
justify-content: center;
z-index: 2000;
opacity: 0;
pointer-events: none;
transition: opacity 0.4s ease;
}
.form-success-overlay.show {
opacity: 1;
pointer-events: auto;
}
.success-content {
text-align: center;
max-width: 400px;
padding: 40px;
}
.success-icon {
width: 80px;
height: 80px;
margin: 0 auto 24px;
background: rgba(34, 197, 94, 0.1);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
animation: successPop 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
}
@keyframes successPop {
0% { transform: scale(0); opacity: 0; }
50% { transform: scale(1.2); }
100% { transform: scale(1); opacity: 1; }
}
.success-icon svg {
width: 40px;
height: 40px;
color: #22c55e;
}
.success-title {
font-size: 28px;
font-weight: 700;
margin-bottom: 12px;
}
.success-desc {
font-size: 16px;
color: var(--text-secondary);
margin-bottom: 32px;
}
.success-close {
color: var(--text-tertiary);
cursor: pointer;
}
.char-count {
font-size: 11px;
color: var(--text-tertiary);
text-align: right;
margin-top: 4px;
}
footer {
padding: 48px 0;
text-align: center;
background: var(--bg-primary);
border-top: 1px solid var(--border-subtle);
}
footer .company {
font-size: 14px;
font-weight: 600;
color: var(--text-secondary);
margin-bottom: 8px;
}
footer .copyright {
font-size: 12px;
color: var(--text-tertiary);
letter-spacing: 0.05em;
}
@media (max-width: 1024px) {
.pain-grid {
grid-template-columns: 1fr;
}
.service-card,
.service-card.reverse {
grid-template-columns: 1fr;
gap: 40px;
direction: ltr;
}
.service-visual {
order: -1;
}
.proof-grid {
grid-template-columns: 1fr;
}
.contact-grid {
grid-template-columns: 1fr;
gap: 48px;
}
}
@media (max-width: 768px) {
.nav-links {
display: none;
}
.hero-title {
font-size: clamp(36px, 10vw, 56px);
}
.hero-cta {
flex-direction: column;
align-items: center;
}
.hero-cta .btn {
width: 100%;
max-width: 280px;
justify-content: center;
}
.pain-card {
padding: 32px 24px;
}
.pain-insight {
padding: 40px 24px;
}
.advantage-item {
grid-template-columns: 1fr;
gap: 12px;
}
.contact-form {
padding: 32px 24px;
}
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
.mobile-nav-toggle {
display: none;
background: none;
border: none;
color: var(--text-primary);
cursor: pointer;
padding: 8px;
}
@media (max-width: 768px) {
.mobile-nav-toggle {
display: block;
}
}
</style>
</head>
<body>
<nav id="navbar">
<div class="container nav-inner">
<a href="#" class="logo">菲西尔智能</a>
<div class="nav-links">
<a href="#pain">场景洞察</a>
<a href="#services">核心服务</a>
<a href="#advantages">解决路径</a>
<a href="#proof">客户案例</a>
<a href="#contact">联系我们</a>
</div>
<button class="mobile-nav-toggle" aria-label="菜单">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</button>
</div>
</nav>
<section class="hero">
<canvas id="hero-canvas"></canvas>
<div class="hero-bg-gradient"></div>
<div class="hero-glow-1"></div>
<div class="hero-glow-2"></div>
<div class="hero-glow-3"></div>
<div class="hero-content">
<div class="hero-badge">AI 智能叠加专家</div>
<h1 class="hero-title" aria-label="不换系统也能用上AI">
<span class="char"></span><span class="char"></span><span class="char"></span><span class="char"></span><span class="char"></span><span class="char"></span><span class="char"></span><span class="char"></span><span class="char"></span><span class="char highlight">AI</span>
</h1>
<p class="hero-subtitle">不换现有系统2周让AI上岗。不用迁移数据不用重新培训员工。</p>
<div class="hero-cta">
<a href="#contact" class="btn btn-primary">预约免费诊断</a>
<a href="#services" class="btn btn-ghost">看看适不适合我 →</a>
</div>
</div>
<div class="scroll-indicator">
<span>向下滚动</span>
<div class="scroll-line"></div>
</div>
</section>
<main>
<section id="pain" class="section pain-section" aria-labelledby="pain-title">
<div class="container">
<div class="pain-header">
<div class="section-label" aria-hidden="true">THE REAL PROBLEM</div>
<h2 id="pain-title" class="section-title">你的系统,是不是越用越累?</h2>
<p class="section-subtitle">每天忙成这样,系统帮到你了吗?</p>
</div>
<div class="pain-grid" role="list">
<article class="pain-card" role="listitem">
<span class="pain-number">01</span>
<div class="pain-icon">
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5">
<rect x="6" y="6" width="14" height="14" rx="2"/>
<rect x="28" y="6" width="14" height="14" rx="2"/>
<rect x="6" y="28" width="14" height="14" rx="2"/>
<rect x="28" y="28" width="14" height="14" rx="2"/>
<line x1="20" y1="13" x2="28" y2="13"/>
<line x1="13" y1="20" x2="13" y2="28"/>
<line x1="35" y1="20" x2="35" y2="28"/>
<line x1="20" y1="35" x2="28" y2="35"/>
</svg>
</div>
<h3>数据填了一大堆,用的时候找不到</h3>
<p>物业、资管、CRM记了几年的数据真正想查一个客户情况的时候还是要翻半天Excel。数据有了但用不上。</p>
</article>
<article class="pain-card" role="listitem">
<span class="pain-number">02</span>
<div class="pain-icon">
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5">
<rect x="4" y="10" width="12" height="28" rx="2"/>
<rect x="18" y="10" width="12" height="28" rx="2"/>
<rect x="32" y="10" width="12" height="28" rx="2"/>
<line x1="10" y1="18" x2="10" y2="30"/>
<line x1="24" y1="18" x2="24" y2="30"/>
<line x1="38" y1="18" x2="38" y2="30"/>
</svg>
</div>
<h3>系统买了好几个,想看个汇总数据还要手工算</h3>
<p>报修一个系统,资产一个系统,客户又一个系统。想看看这个月整体情况?对不起,要好几天后才能算出来。</p>
</article>
<article class="pain-card" role="listitem">
<span class="pain-number">03</span>
<div class="pain-icon">
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5">
<circle cx="24" cy="12" r="6"/>
<path d="M12 44c0-8 5.4-14 12-14s12 6 12 14"/>
<circle cx="38" cy="16" r="4"/>
<path d="M32 44c0-5 2.7-9 6-9"/>
</svg>
</div>
<h3>招了人,每天却在做重复的事</h3>
<p>销售每天花2小时录入客户信息物业员工每天填几十张巡检表。人都招对了但时间没用在正事上。</p>
</article>
<article class="pain-card" role="listitem">
<span class="pain-number">04</span>
<div class="pain-icon">
<svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5">
<circle cx="24" cy="24" r="16"/>
<polyline points="24 14 24 24 30 28"/>
<line x1="8" y1="6" x2="16" y2="14"/>
<line x1="40" y1="6" x2="32" y2="14"/>
</svg>
</div>
<h3>老员工一走,业务就卡壳</h3>
<p>经验都在老员工身上,他一休假,所有人等他回来。交接只能靠嘴说,做事的方法没沉淀下来。</p>
</article>
<aside class="pain-insight" role="note">
<h3>不用换系统让AI帮你干活。</h3>
<p>重复的事AI干你做重要的决定。</p>
</aside>
</div>
</div>
</section>
<section id="services" class="section services-section" aria-labelledby="services-title">
<div class="container">
<div class="services-header">
<div class="section-label" aria-hidden="true">OUR SERVICES</div>
<h2 id="services-title" class="section-title">让AI替你干活你做决定</h2>
<p class="section-subtitle">不换系统只让AI帮你提升效率</p>
</div>
<article class="service-card">
<div class="service-content">
<span class="service-tag">🏢 AI+物业</span>
<div class="service-metric">客诉 2h → 30min</div>
<h3 class="service-title">物业AI帮手</h3>
<p class="service-desc">客户一报修系统自动判断该派给谁。设备快出问题了提前提醒你。巡检路线AI规划好不用人工排。</p>
<div class="service-quote">员工说:这系统,终于能帮我干活了。</div>
</div>
<div class="service-visual">
<img src="assets/prop.jpg" alt="物业AI帮手 - 智能派单、设备预警、巡检规划" width="600" height="450" loading="lazy">
</div>
</article>
<article class="service-card reverse">
<div class="service-content">
<span class="service-tag">🏗️ AI+资管</span>
<div class="service-metric">提前90天预警</div>
<h3 class="service-title">资管AI帮手</h3>
<p class="service-desc">租约快到期了系统提前告诉你。哪个楼层可能要空出来提前做准备。定租金的时候AI会参考历史数据给你建议。</p>
<div class="service-quote">老板说:终于不用靠猜了。</div>
</div>
<div class="service-visual">
<img src="assets/server.jpg" alt="资管AI帮手 - 租约预警、空置预警、租金定价建议" width="600" height="450" loading="lazy">
</div>
</article>
<article class="service-card">
<div class="service-content">
<span class="service-tag">📊 AI+CRM</span>
<div class="service-metric">每天多跟进3客户</div>
<h3 class="service-title">CRM AI帮手</h3>
<p class="service-desc">新线索进来了AI帮你过滤掉假的、重复的。打完电话AI自动帮你写好跟进记录。</p>
<div class="service-quote">销售说:终于不用录系统了。</div>
</div>
<div class="service-visual">
<img src="assets/crm.jpg" alt="CRM AI帮手 - 线索清洗、跟进记录、客户推荐" width="600" height="450" loading="lazy">
</div>
</article>
</div>
</section>
<section id="advantages" class="section advantages-section" aria-labelledby="advantages-title">
<div class="container">
<div class="advantages-header">
<div class="section-label" aria-hidden="true">WHY FISCHER</div>
<h2 id="advantages-title" class="section-title">我们和别的AI公司有什么不同</h2>
</div>
<dl class="advantages-list">
<div class="advantage-item">
<span class="advantage-num">01</span>
<div class="advantage-content">
<h3>不替换,只叠加</h3>
<dd>不动你的系统在旁边加个AI帮手。你还是用原来的界面只是多了AI帮你干那些重复的事。</dd>
</div>
</div>
<div class="advantage-item">
<span class="advantage-num">02</span>
<div class="advantage-content">
<h3>让数据开口说话</h3>
<dd>你系统里几年的数据AI帮你分析。哪个客户可能要流失哪个楼层可能要空AI提前告诉你。</dd>
</div>
</div>
<div class="advantage-item">
<span class="advantage-num">03</span>
<div class="advantage-content">
<h3>让AI替你干活</h3>
<dd>那些每天都要做、每次都一样的活AI帮你干了。比如回复客户常见问题、巡检报告自动生成。AI干完了你看一眼就行。</dd>
</div>
</div>
<div class="advantage-item">
<span class="advantage-num">04</span>
<div class="advantage-content">
<h3>跨系统一屏掌控</h3>
<dd>问AI上个月哪几个客户投诉最多AI直接给你答案。不用再从好几个系统里导数据、拼表格。</dd>
</div>
</div>
<div class="advantage-item">
<span class="advantage-num">05</span>
<div class="advantage-content">
<h3>小步试错,大步扩张</h3>
<dd>先在一个场景试,效果好再扩大。不满意可以停,不用一下子投很多钱。</dd>
</div>
</div>
</dl>
</div>
</section>
<section id="proof" class="section proof-section" aria-labelledby="proof-title">
<div class="container">
<div class="proof-header">
<div class="section-label" aria-hidden="true">CLIENT STORIES</div>
<h2 id="proof-title" class="section-title">他们都在用</h2>
</div>
<div class="proof-grid" role="list">
<blockquote class="proof-card" role="listitem">
<div class="proof-type">物业客户</div>
<p class="proof-quote">用了3个月员工最常说的一句话是这个功能怎么不早点上。</p>
<footer class="proof-avatar">
<div class="proof-avatar-icon"></div>
<cite class="proof-avatar-text">某物业公司</cite>
</footer>
</blockquote>
<blockquote class="proof-card" role="listitem">
<div class="proof-type">资管客户</div>
<p class="proof-quote">以前每月汇报数据要准备一周现在问AI就行。</p>
<footer class="proof-avatar">
<div class="proof-avatar-icon"></div>
<cite class="proof-avatar-text">某资管公司</cite>
</footer>
</blockquote>
<blockquote class="proof-card" role="listitem">
<div class="proof-type">CRM客户</div>
<p class="proof-quote">销售终于有时间去见客户了,而不是天天填表。</p>
<footer class="proof-avatar">
<div class="proof-avatar-icon"></div>
<cite class="proof-avatar-text">某销售团队</cite>
</footer>
</blockquote>
</div>
</div>
</section>
<section id="contact" class="section contact-section" aria-labelledby="contact-title">
<div class="container">
<div class="contact-grid">
<div class="contact-info">
<div class="section-label" aria-hidden="true">GET IN TOUCH</div>
<h2 id="contact-title" class="contact-title">30分钟我们看看你的系统能用AI干什么</h2>
<p class="contact-desc">不卖东西只帮你分析。先看看你的系统现在什么情况AI能帮你省多少事、花多少钱。</p>
<div class="contact-company">
<p>上海菲西尔智能科技有限公司</p>
<p>智能叠加——不推翻重来在现有系统上叠加AI能力</p>
</div>
</div>
<form class="contact-form" id="consultForm" novalidate aria-label="预约免费诊断表单">
<div class="form-group required">
<label for="name">您的名字 <span class="required-mark">*</span></label>
<input type="text" id="name" name="name" placeholder="怎么称呼您" required minlength="2" maxlength="50" aria-required="true">
<div class="form-error-msg" role="alert">请输入您的姓名2-50个字符</div>
</div>
<div class="form-group required">
<label for="phone">手机(方便联系您) <span class="required-mark">*</span></label>
<input type="tel" id="phone" name="phone" placeholder="138xxxx8888" required pattern="^1\d{10}$" aria-required="true">
<div class="form-error-msg" role="alert">请输入有效的手机号码</div>
</div>
<div class="form-group">
<label for="email">邮箱(选填)</label>
<input type="email" id="email" name="email" placeholder="选填">
<div class="form-error-msg" role="alert">请输入有效的邮箱地址</div>
</div>
<div class="form-group">
<label for="industry">您的行业</label>
<input type="text" id="industry" name="industry" placeholder="物业管理、资产管理、金融行业、零售行业...">
</div>
<div class="form-group current-system-group">
<fieldset>
<legend>您希望AI落地的领域可多选</legend>
<div class="checkbox-group">
<div class="checkbox-item">
<input type="checkbox" name="ai" id="ai-acquire" value="获客">
<label for="ai-acquire"><span class="checkmark"></span>获客</label>
</div>
<div class="checkbox-item">
<input type="checkbox" name="ai" id="ai-process" value="流程管理">
<label for="ai-process"><span class="checkmark"></span>流程管理</label>
</div>
<div class="checkbox-item">
<input type="checkbox" name="ai" id="ai-efficiency" value="效率提升">
<label for="ai-efficiency"><span class="checkmark"></span>效率提升</label>
</div>
<div class="checkbox-item">
<input type="checkbox" name="ai" id="ai-other" value="其他">
<label for="ai-other"><span class="checkmark"></span>其他</label>
</div>
</fieldset>
</div>
<div class="form-group" id="systemNameGroup" style="display: none;">
<label for="systemName">系统名称</label>
<input type="text" id="systemName" name="system_name" placeholder="请输入您使用的系统名称">
</div>
<div class="form-group">
<label for="message">咨询内容</label>
<textarea id="message" name="message" placeholder="简单说说您现在遇到的问题,或者想了解什么" maxlength="1000"></textarea>
<div class="char-count"><span id="messageLength">0</span>/1000</div>
</div>
<div class="form-submit" id="submitContainer">
<button type="submit" class="btn btn-primary" aria-label="提交预约表单">预约免费诊断</button>
</div>
<div class="form-status" id="formStatus" aria-live="polite"></div>
</form>
</div>
</div>
</section>
<div class="form-success-overlay" id="successOverlay">
<div class="success-content">
<div class="success-icon">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="20 6 9 17 4 12"></polyline>
</svg>
</div>
<h3 class="success-title">预约成功!</h3>
<p class="success-desc">我们会在24小时内联系您请保持手机畅通。</p>
<p class="success-close" id="closeSuccess">[关闭]</p>
</div>
</div>
</main>
<footer>
<div class="container">
<p class="company">上海菲西尔智能科技有限公司</p>
<p class="copyright">© 2026 菲西尔智能 | 企业级AI落地专家</p>
</div>
</footer>
<script>
gsap.registerPlugin(ScrollTrigger);
// Hero Animation
const heroTimeline = gsap.timeline({ defaults: { ease: 'power3.out' } });
heroTimeline
.to('.hero-badge', {
opacity: 1,
y: 0,
duration: 0.8,
delay: 0.3
})
.to('.hero-title .char', {
opacity: 1,
y: 0,
duration: 0.6,
stagger: 0.05,
}, '-=0.4')
.to('.hero-subtitle', {
opacity: 1,
y: 0,
duration: 0.8
}, '-=0.3')
.to('.hero-cta', {
opacity: 1,
y: 0,
duration: 0.8
}, '-=0.4')
.to('.scroll-indicator', {
opacity: 1,
duration: 0.6
}, '-=0.2');
// Hero Canvas Particle Animation (优化版)
(function() {
const canvas = document.getElementById('hero-canvas');
if (!canvas) return;
const ctx = canvas.getContext('2d');
let width, height, particles = [];
const isMobile = window.innerWidth < 768;
const particleCount = isMobile ? 30 : 50;
class Particle {
constructor() {
this.reset();
}
reset() {
this.x = Math.random() * width;
this.y = Math.random() * height;
this.vx = (Math.random() - 0.5) * 0.3;
this.vy = (Math.random() - 0.5) * 0.3;
this.radius = Math.random() * 1.5 + 0.5;
this.alpha = Math.random() * 0.4 + 0.1;
this.hue = Math.random() > 0.7 ? 190 : 220;
}
update() {
this.x += this.vx;
this.y += this.vy;
if (this.x < 0 || this.x > width) this.vx *= -1;
if (this.y < 0 || this.y > height) this.vy *= -1;
}
draw() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2);
ctx.fillStyle = `hsla(${this.hue}, 70%, 60%, ${this.alpha})`;
ctx.fill();
}
}
function resize() {
width = canvas.width = window.innerWidth;
height = canvas.height = window.innerHeight;
}
function init() {
resize();
particles = [];
for (let i = 0; i < particleCount; i++) {
particles.push(new Particle());
}
}
let frameCount = 0;
function animate() {
frameCount++;
if (frameCount % 3 !== 0) { // 每3帧更新一次减少CPU占用
requestAnimationFrame(animate);
return;
}
ctx.clearRect(0, 0, width, height);
for (let i = 0; i < particles.length; i++) {
particles[i].update();
particles[i].draw();
}
requestAnimationFrame(animate);
}
function resize() {
width = canvas.width = window.innerWidth;
height = canvas.height = window.innerHeight;
}
function init() {
resize();
particles = [];
for (let i = 0; i < particleCount; i++) {
particles.push(new Particle());
}
}
window.addEventListener('resize', () => {
resize();
particles = [];
init();
});
init();
animate();
})();
// Scroll Animations with GSAP ScrollTrigger
gsap.utils.toArray('.section-label, .section-title, .section-subtitle').forEach(elem => {
gsap.fromTo(elem,
{ opacity: 0, y: 40 },
{
opacity: 1,
y: 0,
duration: 0.8,
ease: 'power3.out',
scrollTrigger: {
trigger: elem,
start: 'top 85%',
toggleActions: 'play none none reverse'
}
}
);
});
gsap.utils.toArray('.pain-card').forEach((card, index) => {
gsap.fromTo(card,
{ opacity: 0, y: 50 },
{
opacity: 1,
y: 0,
duration: 0.8,
delay: index * 0.1,
ease: 'power3.out',
scrollTrigger: {
trigger: card,
start: 'top 85%',
toggleActions: 'play none none reverse'
}
}
);
});
gsap.fromTo('.pain-insight',
{ opacity: 0, scale: 0.95 },
{
opacity: 1,
scale: 1,
duration: 1,
ease: 'power3.out',
scrollTrigger: {
trigger: '.pain-insight',
start: 'top 85%',
toggleActions: 'play none none reverse'
}
}
);
gsap.utils.toArray('.service-card').forEach((card, index) => {
const isReverse = card.classList.contains('reverse');
gsap.fromTo(card,
{
opacity: 0,
x: isReverse ? 50 : -50
},
{
opacity: 1,
x: 0,
duration: 1,
ease: 'power3.out',
scrollTrigger: {
trigger: card,
start: 'top 80%',
toggleActions: 'play none none reverse'
}
}
);
});
gsap.utils.toArray('.advantage-item').forEach((item, index) => {
gsap.fromTo(item,
{ opacity: 0, x: -30 },
{
opacity: 1,
x: 0,
duration: 0.8,
delay: index * 0.1,
ease: 'power3.out',
scrollTrigger: {
trigger: item,
start: 'top 85%',
toggleActions: 'play none none reverse'
}
}
);
});
gsap.utils.toArray('.proof-card').forEach((card, index) => {
gsap.fromTo(card,
{ opacity: 0, y: 40, scale: 0.95 },
{
opacity: 1,
y: 0,
scale: 1,
duration: 0.8,
delay: index * 0.15,
ease: 'power3.out',
scrollTrigger: {
trigger: card,
start: 'top 85%',
toggleActions: 'play none none reverse'
}
}
);
});
gsap.fromTo('.contact-info',
{ opacity: 0, x: -40 },
{
opacity: 1,
x: 0,
duration: 1,
ease: 'power3.out',
scrollTrigger: {
trigger: '.contact-info',
start: 'top 80%',
toggleActions: 'play none none reverse'
}
}
);
gsap.fromTo('.contact-form',
{ opacity: 0, x: 40 },
{
opacity: 1,
x: 0,
duration: 1,
ease: 'power3.out',
scrollTrigger: {
trigger: '.contact-form',
start: 'top 80%',
toggleActions: 'play none none reverse'
}
}
);
// Navbar scroll effect
const navbar = document.getElementById('navbar');
window.addEventListener('scroll', () => {
if (window.scrollY > 60) {
navbar.classList.add('scrolled');
} else {
navbar.classList.remove('scrolled');
}
}, { passive: true });
// Form validation and submission
const consultForm = document.getElementById('consultForm');
const formStatus = document.getElementById('formStatus');
const submitContainer = document.getElementById('submitContainer');
const successOverlay = document.getElementById('successOverlay');
const closeSuccess = document.getElementById('closeSuccess');
const messageTextarea = consultForm.querySelector('textarea[name="message"]');
const messageLength = document.getElementById('messageLength');
const systemNameGroup = document.getElementById('systemNameGroup');
// 监听系统选择
const systemCheckboxes = consultForm.querySelectorAll('input[name="current_system"]');
systemCheckboxes.forEach(checkbox => {
checkbox.addEventListener('change', () => {
const otherChecked = document.getElementById('system-other').checked;
systemNameGroup.style.display = otherChecked ? 'block' : 'none';
});
});
// 监听留言字数
messageTextarea.addEventListener('input', () => {
messageLength.textContent = messageTextarea.value.length;
});
// 关闭成功弹窗
closeSuccess.addEventListener('click', () => {
successOverlay.classList.remove('show');
});
successOverlay.addEventListener('click', (e) => {
if (e.target === successOverlay) {
successOverlay.classList.remove('show');
}
});
// 清除字段错误状态
function clearFieldError(field) {
const group = field.closest('.form-group');
if (group) {
group.classList.remove('error');
}
}
// 显示字段错误状态
function showFieldError(field, message) {
const group = field.closest('.form-group');
if (group) {
group.classList.add('error');
const errorMsg = group.querySelector('.form-error-msg');
if (errorMsg && message) {
errorMsg.textContent = message;
}
}
}
// 验证表单字段
function validateField(field) {
const value = field.value.trim();
const name = field.name;
clearFieldError(field);
switch (name) {
case 'name':
if (!value || value.length < 2) {
showFieldError(field, '请输入您的姓名2-50个字符');
return false;
}
if (value.length > 50) {
showFieldError(field, '姓名不能超过50个字符');
return false;
}
break;
case 'phone':
if (!value) {
showFieldError(field, '请输入手机号码');
return false;
}
if (!/^1\d{10}$/.test(value)) {
showFieldError(field, '请输入有效的手机号码');
return false;
}
break;
case 'email':
if (value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
showFieldError(field, '请输入有效的邮箱地址');
return false;
}
break;
}
return true;
}
// 实时验证
['name', 'phone', 'email'].forEach(fieldName => {
const field = consultForm.querySelector(`[name="${fieldName}"]`);
if (field) {
field.addEventListener('blur', () => validateField(field));
field.addEventListener('input', () => {
if (field.closest('.form-group').classList.contains('error')) {
validateField(field);
}
});
}
});
// 收集表单数据
function collectFormData() {
const formData = {
name: consultForm.name.value.trim(),
phone: consultForm.phone.value.trim(),
email: consultForm.email.value.trim(),
current_system: [],
system_name: '',
message: consultForm.message.value.trim()
};
// 收集选中的系统
systemCheckboxes.forEach(checkbox => {
if (checkbox.checked) {
formData.current_system.push(checkbox.value);
}
});
// 如果选择了"其他",获取系统名称
if (document.getElementById('system-other').checked) {
formData.system_name = consultForm.system_name.value.trim();
}
return formData;
}
// 表单提交
consultForm.addEventListener('submit', async (e) => {
e.preventDefault();
// 验证必填字段
let isValid = true;
// 验证姓名
if (!validateField(consultForm.name)) {
isValid = false;
}
// 验证手机
if (!validateField(consultForm.phone)) {
isValid = false;
}
// 验证邮箱(如果填写了)
if (consultForm.email.value.trim()) {
if (!validateField(consultForm.email)) {
isValid = false;
}
}
if (!isValid) {
formStatus.textContent = '请检查表单中的错误';
formStatus.className = 'form-status error';
return;
}
// 显示加载状态
submitContainer.classList.add('submit-loading');
formStatus.textContent = '';
const formData = collectFormData();
try {
const response = await fetch('/ai/api/consult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(formData)
});
const data = await response.json();
if (data.success) {
// 显示成功弹窗
successOverlay.classList.add('show');
consultForm.reset();
messageLength.textContent = '0';
systemNameGroup.style.display = 'none';
} else {
formStatus.textContent = data.error || '提交失败,请稍后重试';
formStatus.className = 'form-status error';
}
} catch (error) {
console.error('提交错误:', error);
formStatus.textContent = '网络错误,请检查网络连接后重试';
formStatus.className = 'form-status error';
} finally {
submitContainer.classList.remove('submit-loading');
}
});
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
}
});
});
</script>
</body>
</html>