2412 lines
84 KiB
HTML
2412 lines
84 KiB
HTML
<!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 AI,2周部署见效,不换系统不迁移数据。">
|
||
<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 AI,2周部署见效。">
|
||
<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>
|