初始提交:菲西尔智能官网 Landing Page - 黑白电影级风格
- Hero 首屏:视频背景 + 主标题 - 场景洞察:6大痛点 + 破局之道(桌面六宫格/移动端全屏沉浸) - 解决路径:智能叠加五步落地 - 核心服务:AI+物业、AI+资管、AI+CRM - GEO 生成式引擎优化 - 合作咨询表单 - 移动端响应式布局:竖排/横排切换、滚动动画、背景网格
|
|
@ -0,0 +1,40 @@
|
|||
# Landing Page 工作状态
|
||||
|
||||
## 项目信息
|
||||
- 文件路径:/opt/ai-landing/index.html
|
||||
- 访问地址:http://8.153.107.96/ai/
|
||||
- Nginx 配置:/etc/nginx/sites-available/gitea (location /ai/ alias /opt/ai-landing/)
|
||||
|
||||
## 当前进度 (2026-04-20 更新)
|
||||
|
||||
### 已完成
|
||||
- Hero 首屏:视频背景 + 主标题"为现有系统装上大脑"
|
||||
- 场景洞察板块(原"痛点"):6 个痛点卡片 + 破局之道
|
||||
- 数据沉睡、孤岛效应、人力瓶颈、决策滞后、改造成本高、经验依赖
|
||||
- 桌面端:六宫格 + hover 光线效果
|
||||
- 移动端:全屏逐屏浮现 + 居中图标 + 大字标题 + 背景网格
|
||||
- 解决路径板块(原"思路"):五步落地
|
||||
- 无缝接入、数据唤醒、流程自动化、统一智能中枢、渐进式落地
|
||||
- 核心服务板块:AI+物业、AI+资管、AI+CRM(带图片)
|
||||
- GEO 板块:生成式引擎优化
|
||||
- 合作咨询板块:表单提交 → /ai/api/consult
|
||||
- 导航栏文字:场景洞察 | 解决路径 | 核心服务 | GEO | 合作咨询
|
||||
|
||||
### 待处理
|
||||
1. 移动端 icon 和背景显示问题(用户反馈:移动端缺少 icon 和背景)
|
||||
2. 同步到 Gitea 仓库(尚未创建对应 repo)
|
||||
3. 用户强调:每次新会话必须先读此文件,了解当前工作状态
|
||||
|
||||
### 用户偏好(重要)
|
||||
- 回复格式:纯文本,字号统一且小,禁止使用标题(#)、加粗(**)、代码块(```)
|
||||
- 用户希望被称为"老板"
|
||||
- Landing Page 素材:禁止外国人面孔,优先抽象矢量图/SVG
|
||||
- 设计风格:黑白单色、高对比、电影级动效(缓慢平滑有呼吸感)
|
||||
- 用户会发手机截图反馈问题,需根据截图调整
|
||||
|
||||
## Gitea 信息
|
||||
- 地址:http://localhost:3000 / http://8.153.107.96:3000
|
||||
- SSH 端口:2222
|
||||
- 管理员:root, omega_admin, ether
|
||||
- 已有仓库:ether/ether-admin, ether/ether-docs, ether/ether-pms
|
||||
- Landing Page 仓库:尚未创建(计划创建 ether/ether-landing 或 ether/fischer-site)
|
||||
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
|
@ -0,0 +1,114 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" preserveAspectRatio="xMidYMid slice">
|
||||
<defs>
|
||||
<radialGradient id="glow" cx="50%" cy="45%" r="55%">
|
||||
<stop offset="0%" stop-color="#1a1a1a"/>
|
||||
<stop offset="100%" stop-color="#050505"/>
|
||||
</radialGradient>
|
||||
<filter id="glowBright" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="6" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<filter id="glowSoft" x="-50%" y="-50%" width="200%" height="200%">
|
||||
<feGaussianBlur stdDeviation="3" result="blur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="blur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
<rect width="1920" height="1080" fill="url(#glow)"/>
|
||||
|
||||
<!-- 大脑轮廓 - 最亮层级 -->
|
||||
<g stroke="#ffffff" stroke-width="2.5" fill="none" opacity="0.95" filter="url(#glowBright)">
|
||||
<path d="M720,300 Q680,280 640,300 Q600,330 590,380 Q570,440 590,500 Q610,560 650,600 Q690,640 740,660 Q790,680 840,670 Q890,660 930,630 Q970,600 990,560 Q1010,520 1000,470 Q990,420 970,370 Q950,320 910,290 Q870,260 820,260 Q770,260 720,300Z"/>
|
||||
<path d="M810,280 Q800,400 810,520 Q820,600 800,660"/>
|
||||
</g>
|
||||
|
||||
<!-- 大脑褶皱 - 次亮层级 -->
|
||||
<g stroke="#cccccc" stroke-width="1.5" fill="none" opacity="0.7">
|
||||
<path d="M640,350 Q700,340 760,360"/>
|
||||
<path d="M620,400 Q680,380 740,400 Q800,420 850,400"/>
|
||||
<path d="M600,450 Q660,430 720,450 Q780,470 840,440"/>
|
||||
<path d="M610,500 Q670,480 730,500 Q790,520 850,490"/>
|
||||
<path d="M630,550 Q690,530 750,550 Q810,570 870,540"/>
|
||||
<path d="M660,600 Q720,580 780,600 Q840,620 890,590"/>
|
||||
<path d="M800,310 Q860,300 920,320"/>
|
||||
<path d="M820,360 Q880,340 940,360"/>
|
||||
<path d="M840,410 Q900,390 960,410"/>
|
||||
<path d="M830,460 Q890,440 950,460"/>
|
||||
<path d="M810,510 Q870,490 930,510"/>
|
||||
<path d="M790,560 Q850,540 910,560"/>
|
||||
</g>
|
||||
|
||||
<!-- 神经网络连线 - 中等亮度 -->
|
||||
<g stroke="#888888" stroke-width="1" opacity="0.6">
|
||||
<line x1="700" y1="380" x2="780" y2="340"/>
|
||||
<line x1="780" y1="340" x2="860" y2="370"/>
|
||||
<line x1="860" y1="370" x2="920" y2="330"/>
|
||||
<line x1="920" y1="330" x2="940" y2="420"/>
|
||||
<line x1="700" y1="380" x2="660" y2="450"/>
|
||||
<line x1="660" y1="450" x2="720" y2="480"/>
|
||||
<line x1="720" y1="480" x2="800" y2="460"/>
|
||||
<line x1="800" y1="460" x2="860" y2="370"/>
|
||||
<line x1="800" y1="460" x2="920" y2="330"/>
|
||||
<line x1="720" y1="480" x2="680" y2="540"/>
|
||||
<line x1="680" y1="540" x2="760" y2="580"/>
|
||||
<line x1="760" y1="580" x2="840" y2="550"/>
|
||||
<line x1="840" y1="550" x2="900" y2="480"/>
|
||||
<line x1="800" y1="460" x2="900" y2="480"/>
|
||||
<line x1="780" y1="340" x2="860" y2="420"/>
|
||||
<line x1="860" y1="420" x2="940" y2="420"/>
|
||||
<line x1="860" y1="420" x2="840" y2="550"/>
|
||||
<line x1="900" y1="480" x2="940" y2="420"/>
|
||||
<line x1="660" y1="450" x2="680" y2="540"/>
|
||||
<line x1="760" y1="580" x2="780" y2="630"/>
|
||||
<line x1="840" y1="550" x2="820" y2="630"/>
|
||||
<!-- 外部发散虚线 - 最暗 -->
|
||||
<line x1="620" y1="350" x2="700" y2="380" stroke-dasharray="8,5" stroke="#555"/>
|
||||
<line x1="580" y1="480" x2="660" y2="450" stroke-dasharray="8,5" stroke="#555"/>
|
||||
<line x1="620" y1="600" x2="680" y2="540" stroke-dasharray="8,5" stroke="#555"/>
|
||||
<line x1="700" y1="680" x2="760" y2="580" stroke-dasharray="8,5" stroke="#555"/>
|
||||
<line x1="960" y1="350" x2="920" y2="330" stroke-dasharray="8,5" stroke="#555"/>
|
||||
<line x1="1000" y1="450" x2="940" y2="420" stroke-dasharray="8,5" stroke="#555"/>
|
||||
<line x1="980" y1="560" x2="900" y2="480" stroke-dasharray="8,5" stroke="#555"/>
|
||||
</g>
|
||||
|
||||
<!-- 节点 - 分层 -->
|
||||
<g fill="#ffffff" opacity="0.9" filter="url(#glowSoft)">
|
||||
<circle cx="860" cy="370" r="7"/>
|
||||
<circle cx="720" cy="480" r="8"/>
|
||||
<circle cx="760" cy="580" r="6"/>
|
||||
</g>
|
||||
<g fill="#cccccc" opacity="0.8">
|
||||
<circle cx="700" cy="380" r="5"/>
|
||||
<circle cx="780" cy="340" r="4"/>
|
||||
<circle cx="920" cy="330" r="4"/>
|
||||
<circle cx="940" cy="420" r="5"/>
|
||||
<circle cx="660" cy="450" r="5"/>
|
||||
<circle cx="800" cy="460" r="5"/>
|
||||
<circle cx="680" cy="540" r="4"/>
|
||||
<circle cx="840" cy="550" r="5"/>
|
||||
<circle cx="900" cy="480" r="4"/>
|
||||
<circle cx="860" cy="420" r="4"/>
|
||||
<circle cx="780" cy="630" r="4"/>
|
||||
<circle cx="820" cy="630" r="4"/>
|
||||
</g>
|
||||
<!-- 外部小节点 -->
|
||||
<g fill="#666666" opacity="0.6">
|
||||
<circle cx="620" cy="350" r="3"/>
|
||||
<circle cx="580" cy="480" r="3"/>
|
||||
<circle cx="620" cy="600" r="3"/>
|
||||
<circle cx="700" cy="680" r="3"/>
|
||||
<circle cx="960" cy="350" r="3"/>
|
||||
<circle cx="1000" cy="450" r="3"/>
|
||||
<circle cx="980" cy="560" r="3"/>
|
||||
</g>
|
||||
|
||||
<!-- 光晕圆环 -->
|
||||
<circle cx="720" cy="480" r="200" fill="none" stroke="#ffffff" stroke-width="0.8" opacity="0.15"/>
|
||||
<circle cx="720" cy="480" r="280" fill="none" stroke="#ffffff" stroke-width="0.5" opacity="0.08"/>
|
||||
<circle cx="860" cy="370" r="160" fill="none" stroke="#cccccc" stroke-width="0.8" opacity="0.12"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 212 KiB |
|
After Width: | Height: | Size: 504 KiB |
|
After Width: | Height: | Size: 242 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Error><Code>AccessDenied</Code><Message>Access Denied</Message></Error>
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
#!/usr/bin/env python3
|
||||
"""轻量表单接收服务 - 收到咨询后推送飞书通知"""
|
||||
import json, os, re
|
||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||
from datetime import datetime
|
||||
|
||||
# 飞书机器人 Webhook URL(请老板替换为实际地址)
|
||||
FEISHU_WEBHOOK = os.getenv("FEISHU_WEBHOOK_URL", "")
|
||||
|
||||
# 本地存储路径
|
||||
DATA_DIR = "/opt/ai-landing/data"
|
||||
os.makedirs(DATA_DIR, exist_ok=True)
|
||||
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
def do_POST(self):
|
||||
if self.path != "/api/consult":
|
||||
self._send(404, {"error": "not found"})
|
||||
return
|
||||
|
||||
length = int(self.headers.get("Content-Length", 0))
|
||||
if length > 50000:
|
||||
self._send(400, {"error": "payload too large"})
|
||||
return
|
||||
|
||||
body = self.rfile.read(length)
|
||||
try:
|
||||
data = json.loads(body)
|
||||
except Exception:
|
||||
self._send(400, {"error": "invalid json"})
|
||||
return
|
||||
|
||||
# 验证必填字段
|
||||
name = data.get("name", "").strip()
|
||||
phone = data.get("phone", "").strip()
|
||||
email = data.get("email", "").strip()
|
||||
message = data.get("message", "").strip()
|
||||
|
||||
if not name or not phone:
|
||||
self._send(400, {"error": "姓名和电话为必填项"})
|
||||
return
|
||||
|
||||
# 手机号简单校验
|
||||
if not re.match(r"^1\d{10}$", phone):
|
||||
self._send(400, {"error": "手机号格式不正确"})
|
||||
return
|
||||
|
||||
# 保存到本地
|
||||
record = {
|
||||
"time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||
"name": name, "phone": phone, "email": email, "message": message
|
||||
}
|
||||
self._save(record)
|
||||
|
||||
# 推送飞书
|
||||
if FEISHU_WEBHOOK:
|
||||
self._push_feishu(record)
|
||||
|
||||
self._send(200, {"success": True})
|
||||
|
||||
def do_GET(self):
|
||||
if self.path == "/api/consult/health":
|
||||
self._send(200, {"ok": True})
|
||||
return
|
||||
self._send(405, {"error": "method not allowed"})
|
||||
|
||||
def _save(self, record):
|
||||
path = os.path.join(DATA_DIR, f"{datetime.now().strftime('%Y-%m')}.json")
|
||||
records = []
|
||||
if os.path.exists(path):
|
||||
with open(path) as f:
|
||||
try: records = json.load(f)
|
||||
except: records = []
|
||||
records.append(record)
|
||||
with open(path, "w") as f:
|
||||
json.dump(records, f, ensure_ascii=False, indent=2)
|
||||
|
||||
def _push_feishu(self, record):
|
||||
try:
|
||||
import urllib.request
|
||||
msg = f"**新咨询收到**\n"
|
||||
msg += f"姓名:{record['name']}\n"
|
||||
msg += f"电话:{record['phone']}\n"
|
||||
if record['email']: msg += f"邮箱:{record['email']}\n"
|
||||
if record['message']: msg += f"留言:{record['message']}\n"
|
||||
msg += f"时间:{record['time']}"
|
||||
payload = json.dumps({"msg_type": "interactive", "card": {
|
||||
"header": {"title": {"tag": "plain_text", "content": "🔔 官网新咨询"}, "template": "turquoise"},
|
||||
"elements": [{"tag": "markdown", "content": msg}]
|
||||
}}).encode()
|
||||
req = urllib.request.Request(FEISHU_WEBHOOK, data=payload,
|
||||
headers={"Content-Type": "application/json"})
|
||||
urllib.request.urlopen(req, timeout=5)
|
||||
except Exception as e:
|
||||
print(f"飞书推送失败: {e}")
|
||||
|
||||
def _send(self, code, data):
|
||||
self.send_response(code)
|
||||
self.send_header("Content-Type", "application/json")
|
||||
self.send_header("Access-Control-Allow-Origin", "*")
|
||||
self.send_header("Access-Control-Allow-Methods", "POST, OPTIONS")
|
||||
self.send_header("Access-Control-Allow-Headers", "Content-Type")
|
||||
self.end_headers()
|
||||
self.wfile.write(json.dumps(data).encode())
|
||||
|
||||
def log_message(self, fmt, *args):
|
||||
pass # 静默日志
|
||||
|
||||
if __name__ == "__main__":
|
||||
server = HTTPServer(("127.0.0.1", 4001), Handler)
|
||||
print("咨询接收服务启动在 :4001")
|
||||
server.serve_forever()
|
||||
|
|
@ -0,0 +1,974 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>菲西尔智能 · AI+物业|AI+资管|AI+CRM 企业级智能叠加</title>
|
||||
<meta name="description" content="上海菲西尔智能科技有限公司——专注为现有业务系统叠加AI能力。智慧物业智能中枢、房产资管风控大脑、CRM效率跃升、GEO生成式引擎优化。不推倒重来,只做智能叠加。">
|
||||
<meta name="keywords" content="AI+物业,智慧物业,AI+资管,房产资产管理,AI+CRM,智能叠加,企业级AI,GEO优化,生成式引擎优化,上海菲西尔">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="canonical" href="http://8.153.107.96/ai/">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="菲西尔智能 · 企业级 AI 叠加">
|
||||
<meta property="og:description" content="在已经运转良好的业务系统之上叠加 AI 能力。不推倒重来,只做智能叠加。">
|
||||
<meta property="og:url" content="http://8.153.107.96/ai/">
|
||||
<meta property="og:site_name" content="菲西尔智能 Fischer Intelligence">
|
||||
<meta property="og:locale" content="zh_CN">
|
||||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="菲西尔智能 · 企业级 AI 叠加">
|
||||
<meta name="twitter:description" content="在已经运转良好的业务系统之上叠加 AI 能力。">
|
||||
|
||||
<!-- 结构化数据 -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "上海菲西尔智能科技有限公司",
|
||||
"alternateName": "Fischer Intelligence",
|
||||
"url": "http://8.153.107.96/ai/",
|
||||
"description": "专注为现有业务系统叠加AI能力,涵盖智慧物业、房产资管、CRM领域",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"addressLocality": "上海",
|
||||
"addressCountry": "CN"
|
||||
},
|
||||
"knowsAbout": ["AI+物业", "智慧物业", "AI+资管", "房产资产管理", "AI+CRM", "GEO优化"]
|
||||
}
|
||||
</script>
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;800&family=Noto+Sans+SC:wght@400;600;800;900&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #050505;
|
||||
--text-main: #ffffff;
|
||||
--text-sub: #999999;
|
||||
}
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
html { scroll-behavior: smooth; }
|
||||
body {
|
||||
font-family: 'Inter', 'Noto Sans SC', sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text-main);
|
||||
line-height: 1.5;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* 导航 */
|
||||
nav {
|
||||
position: fixed; top: 0; width: 100%; z-index: 100;
|
||||
padding: 24px 0; background: rgba(5,5,5,0.85); backdrop-filter: blur(12px);
|
||||
border-bottom: 1px solid rgba(255,255,255,0.06);
|
||||
}
|
||||
.nav-inner { max-width: 1400px; margin: 0 auto; padding: 0 4vw; display: flex; justify-content: space-between; align-items: center; }
|
||||
.logo { font-size: 15px; font-weight: 700; letter-spacing: 2px; color: #fff; text-transform: uppercase; }
|
||||
.nav-links a { color: #777; text-decoration: none; font-size: 12px; margin-left: 36px; font-weight: 600; transition: 0.3s; text-transform: uppercase; letter-spacing: 1px; }
|
||||
.nav-links a:hover { color: #fff; }
|
||||
|
||||
/* HERO - 营销视频背景 */
|
||||
.hero {
|
||||
position: relative; height: 100vh; width: 100%; overflow: hidden; display: flex; align-items: center; justify-content: center;
|
||||
}
|
||||
.hero-video {
|
||||
position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0;
|
||||
filter: brightness(0.85) saturate(1.1);
|
||||
transform: scale(1.05); /* 留余量给呼吸感缩放 */
|
||||
animation: heroZoom 20s ease-in-out infinite alternate;
|
||||
}
|
||||
@keyframes heroZoom {
|
||||
from { transform: scale(1.05); }
|
||||
to { transform: scale(1.12); }
|
||||
}
|
||||
/* 视频未加载/移动端降级:静态 poster */
|
||||
.hero-poster {
|
||||
position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -1;
|
||||
}
|
||||
|
||||
/* 极轻的底层渐变,仅保留底部过渡 */
|
||||
.hero-overlay {
|
||||
position: absolute; inset: 0;
|
||||
background: linear-gradient(to bottom, rgba(0,0,0,0.1) 30%, rgba(0,0,0,0.55) 100%);
|
||||
z-index: 1; pointer-events: none;
|
||||
}
|
||||
|
||||
.hero-content {
|
||||
position: relative; z-index: 10; text-align: center; max-width: 1000px; padding: 0 20px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: clamp(48px, 9vw, 110px);
|
||||
font-weight: 900; line-height: 1.05; letter-spacing: -3px; margin-bottom: 24px;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 4px 20px rgba(0,0,0,0.6);
|
||||
opacity: 0; animation: textReveal 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards 0.2s;
|
||||
}
|
||||
|
||||
.hero-sub {
|
||||
font-size: clamp(16px, 1.8vw, 22px); font-weight: 400; color: rgba(255,255,255,0.9);
|
||||
max-width: 700px; margin: 0 auto 48px; line-height: 1.6;
|
||||
/* 磨砂玻璃效果 */
|
||||
background: rgba(255,255,255,0.05);
|
||||
backdrop-filter: blur(20px) saturate(150%);
|
||||
-webkit-backdrop-filter: blur(20px) saturate(150%);
|
||||
border: 1px solid rgba(255,255,255,0.08);
|
||||
border-left: 3px solid rgba(255,255,255,0.4);
|
||||
border-radius: 8px;
|
||||
padding: 24px 32px;
|
||||
opacity: 0; animation: textReveal 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards 0.5s;
|
||||
text-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-block; padding: 18px 48px;
|
||||
background: #fff; color: #000; text-decoration: none; font-size: 14px; font-weight: 700;
|
||||
border-radius: 0; letter-spacing: 1px; text-transform: uppercase; transition: all 0.3s ease;
|
||||
opacity: 0; animation: textReveal 1.2s cubic-bezier(0.16, 1, 0.3, 1) forwards 0.8s;
|
||||
}
|
||||
.btn:hover { transform: translateY(-2px); background: #eee; }
|
||||
|
||||
.scroll-indicator {
|
||||
position: absolute; bottom: 40px; left: 50%; transform: translateX(-50%); z-index: 10;
|
||||
width: 2px; height: 60px; background: linear-gradient(to bottom, #fff, transparent);
|
||||
animation: scrollLine 2s infinite;
|
||||
}
|
||||
@keyframes scrollLine { 0% { height: 0; opacity: 0; } 50% { height: 60px; opacity: 1; } 100% { height: 60px; opacity: 0; transform: translateY(20px); } }
|
||||
@keyframes textReveal { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
|
||||
|
||||
/* 通用板块 */
|
||||
.container { max-width: 1400px; margin: 0 auto; padding: 0 4vw; position: relative; z-index: 2; }
|
||||
section { padding: 160px 0; background: #050505; border-top: 1px solid rgba(255,255,255,0.06); }
|
||||
.section-label { font-size: 11px; font-weight: 700; color: #666; letter-spacing: 3px; margin-bottom: 80px; display: block; }
|
||||
h2 { font-size: clamp(32px, 4vw, 52px); font-weight: 800; line-height: 1.1; margin-bottom: 24px; letter-spacing: -1px; color: #fff; }
|
||||
|
||||
/* 痛点板块 */
|
||||
#pain-points { position: relative; overflow: hidden; }
|
||||
/* 动态网格背景 */
|
||||
.pain-grid-bg {
|
||||
position: absolute; inset: 0; z-index: 0;
|
||||
background-image:
|
||||
linear-gradient(rgba(255,255,255,0.03) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(255,255,255,0.03) 1px, transparent 1px);
|
||||
background-size: 80px 80px;
|
||||
animation: gridMove 30s linear infinite;
|
||||
}
|
||||
@keyframes gridMove {
|
||||
0% { transform: translate(0, 0); }
|
||||
100% { transform: translate(80px, 80px); }
|
||||
}
|
||||
/* 径向光晕 */
|
||||
.pain-glow {
|
||||
position: absolute; top: 50%; left: 50%; width: 800px; height: 800px;
|
||||
transform: translate(-50%, -50%);
|
||||
background: radial-gradient(circle, rgba(255,255,255,0.03) 0%, transparent 70%);
|
||||
animation: glowPulse 6s ease-in-out infinite alternate;
|
||||
z-index: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
@keyframes glowPulse {
|
||||
0% { opacity: 0.4; transform: translate(-50%, -50%) scale(0.9); }
|
||||
100% { opacity: 1; transform: translate(-50%, -50%) scale(1.1); }
|
||||
}
|
||||
#pain-points .container { position: relative; z-index: 1; }
|
||||
|
||||
.pain-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2px; }
|
||||
.pain-item {
|
||||
background: rgba(255,255,255,0.015);
|
||||
padding: 48px 40px;
|
||||
border: 1px solid rgba(255,255,255,0.04);
|
||||
transition: all 0.6s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
min-height: 320px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.pain-item::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0;
|
||||
height: 1px;
|
||||
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
|
||||
transform: translateX(-100%);
|
||||
transition: transform 0.8s ease;
|
||||
}
|
||||
.pain-item:hover::before { transform: translateX(0); }
|
||||
.pain-item:hover {
|
||||
background: rgba(255,255,255,0.03);
|
||||
border-color: rgba(255,255,255,0.08);
|
||||
}
|
||||
/* 顶部 SVG 图标 */
|
||||
.pain-icon {
|
||||
position: absolute; top: 32px; left: 40px;
|
||||
width: 48px; height: 48px;
|
||||
opacity: 0.15;
|
||||
transition: opacity 0.5s ease;
|
||||
}
|
||||
.pain-item:hover .pain-icon { opacity: 0.35; }
|
||||
.pain-icon svg { width: 100%; height: 100%; }
|
||||
.pain-icon svg line, .pain-icon svg path, .pain-icon svg circle, .pain-icon svg rect {
|
||||
stroke: #fff;
|
||||
stroke-width: 1.5;
|
||||
fill: none;
|
||||
}
|
||||
/* 编号 */
|
||||
.pain-num {
|
||||
font-size: 72px; font-weight: 900; color: rgba(255,255,255,0.04);
|
||||
line-height: 1; letter-spacing: -3px;
|
||||
position: absolute; bottom: 32px; right: 40px;
|
||||
transition: all 0.6s ease;
|
||||
}
|
||||
.pain-item:hover .pain-num {
|
||||
color: rgba(255,255,255,0.08);
|
||||
transform: translateY(-4px);
|
||||
}
|
||||
.pain-item h3 {
|
||||
font-size: 20px; font-weight: 800; color: #fff; margin-bottom: 12px;
|
||||
letter-spacing: -0.5px;
|
||||
}
|
||||
.pain-item p {
|
||||
font-size: 14px; color: #666; line-height: 1.7;
|
||||
}
|
||||
/* 破局之道 - 全宽特殊卡片 */
|
||||
.pain-item.highlight {
|
||||
grid-column: 1 / -1;
|
||||
min-height: auto;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 60px;
|
||||
padding: 64px 80px;
|
||||
background: rgba(255,255,255,0.03);
|
||||
border-color: rgba(255,255,255,0.08);
|
||||
}
|
||||
.pain-item.highlight h3 {
|
||||
font-size: 28px; margin-bottom: 8px; margin-left: 0;
|
||||
}
|
||||
.pain-item.highlight p {
|
||||
font-size: 16px; color: #888; margin-left: 0; max-width: 600px;
|
||||
}
|
||||
.pain-item.highlight .pain-num {
|
||||
position: static; font-size: 96px;
|
||||
}
|
||||
.pain-item.highlight .highlight-body {
|
||||
flex: 1; max-width: 600px;
|
||||
}
|
||||
|
||||
/* 思路板块 */
|
||||
.approach-list { max-width: 900px; margin: 0 auto; }
|
||||
.approach-item {
|
||||
display: flex; gap: 40px; padding: 48px 0;
|
||||
border-bottom: 1px solid rgba(255,255,255,0.06);
|
||||
align-items: flex-start;
|
||||
}
|
||||
.approach-item:last-child { border-bottom: none; }
|
||||
.approach-step {
|
||||
font-size: 13px; font-weight: 800; color: #555;
|
||||
letter-spacing: 2px; text-transform: uppercase;
|
||||
min-width: 60px; padding-top: 4px;
|
||||
}
|
||||
.approach-body h3 {
|
||||
font-size: 24px; font-weight: 800; color: #fff; margin-bottom: 12px;
|
||||
letter-spacing: -0.5px;
|
||||
}
|
||||
.approach-body p {
|
||||
font-size: 16px; color: #888; line-height: 1.7; max-width: 600px;
|
||||
}
|
||||
|
||||
/* 业务板块 - 使用本地图片 (修复了路径问题,移除暗黑滤镜) */
|
||||
.project-row { display: flex; align-items: center; gap: 80px; margin-bottom: 200px; }
|
||||
.project-row.reverse { flex-direction: row-reverse; }
|
||||
.project-text { flex: 1; }
|
||||
.project-text p { font-size: 18px; color: #999; line-height: 1.8; max-width: 550px; margin-top: 20px; }
|
||||
|
||||
.project-img {
|
||||
flex: 1.2; height: 500px; border-radius: 4px; overflow: hidden; position: relative;
|
||||
background: #111;
|
||||
}
|
||||
.project-img img {
|
||||
width: 100%; height: 100%; object-fit: cover;
|
||||
/* 移除滤镜,保持清晰明亮 */
|
||||
filter: brightness(1.0); transition: all 0.6s ease;
|
||||
}
|
||||
.project-img:hover img { transform: scale(1.03); }
|
||||
|
||||
/* 联系板块 */
|
||||
.contact-form {
|
||||
max-width: 600px; margin: 0 auto;
|
||||
display: grid; grid-template-columns: 1fr 1fr; gap: 20px;
|
||||
}
|
||||
.contact-form .full-width { grid-column: 1 / -1; }
|
||||
.contact-form label {
|
||||
display: block; font-size: 11px; color: #666; font-weight: 700;
|
||||
letter-spacing: 2px; text-transform: uppercase; margin-bottom: 8px;
|
||||
}
|
||||
.contact-form input, .contact-form textarea {
|
||||
width: 100%; padding: 16px 20px; background: rgba(255,255,255,0.04);
|
||||
border: 1px solid rgba(255,255,255,0.1); border-radius: 4px;
|
||||
color: #fff; font-size: 15px; font-family: inherit;
|
||||
transition: border-color 0.3s;
|
||||
}
|
||||
.contact-form input:focus, .contact-form textarea:focus {
|
||||
outline: none; border-color: rgba(255,255,255,0.4);
|
||||
}
|
||||
.contact-form textarea { min-height: 140px; resize: vertical; }
|
||||
.contact-form input::placeholder, .contact-form textarea::placeholder {
|
||||
color: #444;
|
||||
}
|
||||
.contact-submit {
|
||||
grid-column: 1 / -1; text-align: center; margin-top: 12px;
|
||||
}
|
||||
.contact-submit button {
|
||||
padding: 18px 60px; background: #fff; color: #000;
|
||||
border: none; font-size: 14px; font-weight: 700; letter-spacing: 1px;
|
||||
text-transform: uppercase; cursor: pointer; transition: all 0.3s;
|
||||
}
|
||||
.contact-submit button:hover { background: #eee; transform: translateY(-2px); }
|
||||
.contact-submit button:disabled { opacity: 0.5; cursor: default; transform: none; }
|
||||
.form-status {
|
||||
grid-column: 1 / -1; text-align: center; font-size: 13px;
|
||||
margin-top: 8px; min-height: 20px;
|
||||
}
|
||||
.form-status.ok { color: #4ade80; }
|
||||
.form-status.err { color: #f87171; }
|
||||
|
||||
/* 底部 */
|
||||
footer { padding: 100px 0; text-align: center; background: #020202; border-top: 1px solid rgba(255,255,255,0.06); }
|
||||
.tech-by { font-size: 10px; color: #444; letter-spacing: 2px; margin-bottom: 12px; }
|
||||
.company { font-size: 15px; color: #888; font-weight: 600; }
|
||||
|
||||
/* 动效 */
|
||||
.fade-up { opacity: 0; transform: translateY(40px); transition: all 1s cubic-bezier(0.16, 1, 0.3, 1); }
|
||||
.fade-up.visible { opacity: 1; transform: translateY(0); }
|
||||
/* 桌面端:痛点和思路板块用 CSS 原生动画直接可见 */
|
||||
@media (min-width: 901px) {
|
||||
#pain-points .fade-up, #approach .fade-up {
|
||||
opacity: 1; transform: translateY(0);
|
||||
animation: sectionFadeIn 1.2s cubic-bezier(0.16, 1, 0.3, 1) both;
|
||||
}
|
||||
#pain-points .pain-grid > .fade-up:nth-child(1) { animation-delay: 0.15s; }
|
||||
#pain-points .pain-grid > .fade-up:nth-child(2) { animation-delay: 0.25s; }
|
||||
#pain-points .pain-grid > .fade-up:nth-child(3) { animation-delay: 0.35s; }
|
||||
#pain-points .pain-grid > .fade-up:nth-child(4) { animation-delay: 0.45s; }
|
||||
#pain-points .pain-grid > .fade-up:nth-child(5) { animation-delay: 0.55s; }
|
||||
#pain-points .pain-grid > .fade-up:nth-child(6) { animation-delay: 0.65s; }
|
||||
}
|
||||
@keyframes sectionFadeIn { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
|
||||
|
||||
/* 移动端:痛点和思路板块用 CSS 滚动触发动画 */
|
||||
@media (max-width: 900px) {
|
||||
/* 卡片默认微弱可见 */
|
||||
#pain-points .pain-item {
|
||||
opacity: 0.08;
|
||||
}
|
||||
/* 子元素默认隐藏 */
|
||||
#pain-points .pain-item .pain-icon,
|
||||
#pain-points .pain-item h3,
|
||||
#pain-points .pain-item p,
|
||||
#pain-points .pain-item .pain-num {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
/* 进入视口后 */
|
||||
#pain-points .pain-item.in-view {
|
||||
opacity: 1;
|
||||
}
|
||||
#pain-points .pain-item.in-view .pain-icon {
|
||||
animation: iconPop 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.1s both;
|
||||
}
|
||||
#pain-points .pain-item.in-view h3 {
|
||||
animation: titleSlide 0.9s cubic-bezier(0.16, 1, 0.3, 1) 0.15s both;
|
||||
}
|
||||
#pain-points .pain-item.in-view p {
|
||||
animation: textSlide 0.9s cubic-bezier(0.16, 1, 0.3, 1) 0.3s both;
|
||||
}
|
||||
#pain-points .pain-item.in-view .pain-num {
|
||||
animation: numReveal 1.2s ease 0.5s both;
|
||||
}
|
||||
|
||||
/* 思路板块同样 */
|
||||
#approach .approach-item {
|
||||
opacity: 0.08;
|
||||
}
|
||||
#approach .approach-item .approach-step,
|
||||
#approach .approach-item .approach-body h3,
|
||||
#approach .approach-item .approach-body p {
|
||||
opacity: 0;
|
||||
}
|
||||
#approach .approach-item.in-view {
|
||||
opacity: 1;
|
||||
}
|
||||
#approach .approach-item.in-view .approach-step {
|
||||
animation: textSlide 0.6s ease 0.1s both;
|
||||
}
|
||||
#approach .approach-item.in-view .approach-body h3 {
|
||||
animation: titleSlide 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.15s both;
|
||||
}
|
||||
#approach .approach-item.in-view .approach-body p {
|
||||
animation: textSlide 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.25s both;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes titleSlide {
|
||||
from { opacity: 0; transform: translateY(40px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
@keyframes textSlide {
|
||||
from { opacity: 0; transform: translateY(25px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
@keyframes iconPop {
|
||||
from { opacity: 0; transform: scale(0.6) translateY(20px); }
|
||||
to { opacity: 0.5; transform: scale(1) translateY(0); }
|
||||
}
|
||||
@keyframes numReveal {
|
||||
from { opacity: 0; transform: translateY(15px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
/* 移动端痛点沉浸式布局 */
|
||||
@media (max-width: 900px) {
|
||||
/* 痛点半块单列全屏 */
|
||||
#pain-points {
|
||||
overflow: visible;
|
||||
text-align: center;
|
||||
}
|
||||
#pain-points .section-label {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
#pain-points h2 {
|
||||
font-size: 28px;
|
||||
margin-bottom: 0;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 90%;
|
||||
}
|
||||
.pain-grid-bg {
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
z-index: 0;
|
||||
animation: none;
|
||||
background-image:
|
||||
linear-gradient(rgba(255,255,255,0.04) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(255,255,255,0.04) 1px, transparent 1px);
|
||||
background-size: 60px 60px;
|
||||
}
|
||||
.pain-glow {
|
||||
position: absolute;
|
||||
top: 50%; left: 50%;
|
||||
width: 400px; height: 400px;
|
||||
transform: translate(-50%, -50%);
|
||||
background: radial-gradient(circle, rgba(255,255,255,0.06) 0%, transparent 70%);
|
||||
animation: glowPulse 6s ease-in-out infinite alternate;
|
||||
z-index: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.pain-grid {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.pain-item {
|
||||
min-height: 100vh;
|
||||
min-height: 100dvh;
|
||||
padding: 80px 28px 60px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
background: transparent;
|
||||
border: none;
|
||||
border-top: 1px solid rgba(255,255,255,0.06);
|
||||
overflow: visible;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.pain-item::before { display: none; }
|
||||
.pain-item:hover { background: transparent; }
|
||||
|
||||
/* SVG 图标 - 居中放大 */
|
||||
.pain-icon {
|
||||
position: relative;
|
||||
top: auto; right: auto; left: auto;
|
||||
width: 64px; height: 64px;
|
||||
opacity: 0.35;
|
||||
margin-bottom: 40px;
|
||||
transition: opacity 0.5s ease;
|
||||
}
|
||||
.pain-icon svg { width: 100%; height: 100%; }
|
||||
.pain-icon svg line, .pain-icon svg path, .pain-icon svg circle, .pain-icon svg rect, .pain-icon svg polyline {
|
||||
stroke: #fff;
|
||||
stroke-width: 1.5;
|
||||
fill: none;
|
||||
}
|
||||
.pain-item.in-view .pain-icon {
|
||||
animation: iconPop 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.1s both;
|
||||
}
|
||||
|
||||
/* 横排大字标题 */
|
||||
.pain-item h3 {
|
||||
font-size: 36px;
|
||||
font-weight: 900;
|
||||
line-height: 1.3;
|
||||
letter-spacing: 2px;
|
||||
margin-bottom: 0;
|
||||
margin-top: 0;
|
||||
color: #fff;
|
||||
}
|
||||
/* 破局之道 */
|
||||
.pain-item.highlight h3 {
|
||||
font-size: 40px;
|
||||
letter-spacing: 4px;
|
||||
}
|
||||
|
||||
/* 描述文字 */
|
||||
.pain-item p {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
line-height: 1.9;
|
||||
margin-top: 24px;
|
||||
max-width: 100%;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
/* 编号 - 超大背景装饰 */
|
||||
.pain-num {
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
right: 24px;
|
||||
font-size: 100px;
|
||||
font-weight: 900;
|
||||
color: rgba(255,255,255,0.04);
|
||||
letter-spacing: -5px;
|
||||
line-height: 1;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
/* 破局之道 - 高潮区域 */
|
||||
.pain-item.highlight {
|
||||
min-height: 100vh;
|
||||
min-height: 100dvh;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0;
|
||||
padding: 80px 28px 60px;
|
||||
background: transparent;
|
||||
border-top: 1px solid rgba(255,255,255,0.08);
|
||||
border-bottom: 1px solid rgba(255,255,255,0.06);
|
||||
}
|
||||
.pain-item.highlight .pain-num {
|
||||
font-size: 140px;
|
||||
color: rgba(255,255,255,0.04);
|
||||
}
|
||||
.pain-item.highlight h3 {
|
||||
font-size: 40px;
|
||||
letter-spacing: 4px;
|
||||
}
|
||||
.pain-item.highlight p {
|
||||
font-size: 16px;
|
||||
color: #999;
|
||||
margin-top: 24px;
|
||||
padding-right: 0;
|
||||
max-width: 90%;
|
||||
}
|
||||
.pain-item.highlight .highlight-body {
|
||||
max-width: 100%;
|
||||
}
|
||||
.pain-item.highlight .pain-icon {
|
||||
width: 80px; height: 80px;
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
|
||||
/* 思路板块移动端 */
|
||||
.approach-item {
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
padding: 40px 0;
|
||||
border-top: 1px solid rgba(255,255,255,0.06);
|
||||
}
|
||||
.approach-item:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
.approach-step {
|
||||
font-size: 11px;
|
||||
letter-spacing: 3px;
|
||||
}
|
||||
.approach-body h3 {
|
||||
font-size: 20px;
|
||||
}
|
||||
.approach-body p {
|
||||
font-size: 14px;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/* 业务板块 */
|
||||
.project-row, .project-row.reverse { flex-direction: column; gap: 40px; margin-bottom: 120px; }
|
||||
.project-img { width: 100%; height: 300px; }
|
||||
h1 { font-size: 42px; letter-spacing: -1px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<div class="logo">AI X</div>
|
||||
<div class="nav-links">
|
||||
<a href="#pain-points">场景洞察</a>
|
||||
<a href="#approach">解决路径</a>
|
||||
<a href="#solutions">核心服务</a>
|
||||
<a href="#geo">GEO</a>
|
||||
<a href="#contact">合作咨询</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="hero">
|
||||
<!-- 视频背景 + poster 静态降级 -->
|
||||
<video class="hero-video" autoplay muted loop playsinline preload="auto" poster="assets/hero-poster.jpg?v=2">
|
||||
<source src="assets/video/hero-bg-compressed.mp4?v=2" type="video/mp4">
|
||||
</video>
|
||||
<div class="hero-overlay"></div>
|
||||
<div class="hero-content">
|
||||
<h1>为现有系统<br>装上"大脑"</h1>
|
||||
<div class="hero-sub">
|
||||
我们专注于在已经运转良好的业务系统之上叠加 AI 能力。以非侵入式的方式,让原有系统瞬间拥有感知与决策能力。不推倒重来,只做智能叠加。
|
||||
</div>
|
||||
<a href="#solutions" class="btn">探索解决方案</a>
|
||||
</div>
|
||||
<div class="scroll-indicator"></div>
|
||||
</div>
|
||||
|
||||
<section id="pain-points">
|
||||
<div class="pain-grid-bg"></div>
|
||||
<div class="pain-glow"></div>
|
||||
<div class="container">
|
||||
<span class="section-label fade-up">WHY IT MATTERS</span>
|
||||
<h2 class="fade-up" style="max-width: 700px; margin-bottom: 60px;">为什么现有系统<br>需要智能叠加</h2>
|
||||
<div class="pain-grid">
|
||||
<div class="pain-item fade-up">
|
||||
<div class="pain-icon">
|
||||
<svg viewBox="0 0 48 48">
|
||||
<rect x="8" y="8" width="14" height="14" rx="2"/>
|
||||
<rect x="26" y="8" width="14" height="14" rx="2"/>
|
||||
<rect x="8" y="26" width="14" height="14" rx="2"/>
|
||||
<rect x="26" y="26" width="14" height="14" rx="2"/>
|
||||
<line x1="22" y1="15" x2="26" y2="15"/>
|
||||
<line x1="15" y1="22" x2="15" y2="26"/>
|
||||
<line x1="33" y1="22" x2="33" y2="26"/>
|
||||
<line x1="22" y1="33" x2="26" y2="33"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>数据沉睡</h3>
|
||||
<p>物业、资管、CRM 系统积累了大量业务数据,但缺乏智能分析能力。数据停留在记录层面,无法转化为决策依据。</p>
|
||||
<div class="pain-num">01</div>
|
||||
</div>
|
||||
<div class="pain-item fade-up" style="transition-delay: 0.1s;">
|
||||
<div class="pain-icon">
|
||||
<svg viewBox="0 0 48 48">
|
||||
<rect x="4" y="12" width="12" height="24" rx="2"/>
|
||||
<rect x="18" y="12" width="12" height="24" rx="2"/>
|
||||
<rect x="32" y="12" width="12" height="24" rx="2"/>
|
||||
<line x1="10" y1="20" x2="10" y2="30"/>
|
||||
<line x1="24" y1="20" x2="24" y2="30"/>
|
||||
<line x1="38" y1="20" x2="38" y2="30"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>孤岛效应</h3>
|
||||
<p>各业务系统独立运行,信息不互通。物业报修、资产台账、客户跟进分属不同平台,管理者需要反复切换系统拼凑全局视图。</p>
|
||||
<div class="pain-num">02</div>
|
||||
</div>
|
||||
<div class="pain-item fade-up" style="transition-delay: 0.2s;">
|
||||
<div class="pain-icon">
|
||||
<svg viewBox="0 0 48 48">
|
||||
<circle cx="24" cy="10" r="6"/>
|
||||
<path d="M14 42c0-8 4-14 10-14s10 6 10 14"/>
|
||||
<circle cx="36" cy="16" r="4"/>
|
||||
<path d="M32 42c0-5 2-9 4-9s4 4 4 9"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>人力瓶颈</h3>
|
||||
<p>客服、招商、维保等高频重复工作消耗大量人力。员工陷入事务性操作,无法聚焦高价值任务。</p>
|
||||
<div class="pain-num">03</div>
|
||||
</div>
|
||||
<div class="pain-item fade-up" style="transition-delay: 0.1s;">
|
||||
<div class="pain-icon">
|
||||
<svg viewBox="0 0 48 48">
|
||||
<circle cx="24" cy="24" r="16"/>
|
||||
<polyline points="24,12 24,24 32,28"/>
|
||||
<line x1="8" y1="6" x2="8" y2="14"/>
|
||||
<line x1="40" y1="6" x2="40" y2="14"/>
|
||||
<line x1="4" y1="10" x2="4" y2="10"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>决策滞后</h3>
|
||||
<p>空置率分析、租金定价、客户流失预警等依赖人工统计和月度报表,发现问题时往往已经错失最佳干预窗口。</p>
|
||||
<div class="pain-num">04</div>
|
||||
</div>
|
||||
<div class="pain-item fade-up" style="transition-delay: 0.2s;">
|
||||
<div class="pain-icon">
|
||||
<svg viewBox="0 0 48 48">
|
||||
<path d="M24 4L4 14v12c0 11 8 20 20 22 12-2 20-11 20-22V14L24 4z"/>
|
||||
<line x1="24" y1="18" x2="24" y2="30"/>
|
||||
<line x1="18" y1="24" x2="30" y2="24"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>改造成本高</h3>
|
||||
<p>传统 AI 方案要求推翻现有系统重建,实施周期长、迁移风险大、员工学习成本极高,导致多数企业望而却步。</p>
|
||||
<div class="pain-num">05</div>
|
||||
</div>
|
||||
<div class="pain-item fade-up" style="transition-delay: 0.25s;">
|
||||
<div class="pain-icon">
|
||||
<svg viewBox="0 0 48 48">
|
||||
<path d="M16 8c0-4 4-6 8-6s8 2 8 6c0 10-8 16-8 16s-8-6-8-16z"/>
|
||||
<line x1="24" y1="30" x2="24" y2="40"/>
|
||||
<line x1="18" y1="34" x2="30" y2="34"/>
|
||||
<circle cx="14" cy="18" r="2"/>
|
||||
<circle cx="34" cy="18" r="2"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h3>经验依赖</h3>
|
||||
<p>核心业务决策高度依赖个人经验与直觉,缺乏可复制的标准化模型。人才流动导致能力断层,企业难以规模化扩张。</p>
|
||||
<div class="pain-num">06</div>
|
||||
</div>
|
||||
<div class="pain-item highlight fade-up" style="transition-delay: 0.3s;">
|
||||
<div class="pain-num">∞</div>
|
||||
<div class="highlight-body">
|
||||
<h3>破局之道</h3>
|
||||
<p>不推倒重来,不替换系统。在已经运转良好的基础设施之上,叠加一层 AI 能力——让旧系统拥有新大脑。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="approach">
|
||||
<div class="container">
|
||||
<span class="section-label fade-up">OUR APPROACH</span>
|
||||
<h2 class="fade-up" style="max-width: 700px; margin-bottom: 60px;">智能叠加<br>五步落地</h2>
|
||||
<div class="approach-list">
|
||||
<div class="approach-item fade-up">
|
||||
<div class="approach-step">Step 1</div>
|
||||
<div class="approach-body">
|
||||
<h3>无缝接入</h3>
|
||||
<p>通过 API 对接现有物业系统、资管平台、CRM,无需替换原有软件。AI 层作为智能中间件,读取数据、输出建议、执行自动化任务,对现有业务零干扰。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="approach-item fade-up" style="transition-delay: 0.1s;">
|
||||
<div class="approach-step">Step 2</div>
|
||||
<div class="approach-body">
|
||||
<h3>数据唤醒</h3>
|
||||
<p>将沉睡的业务数据转化为实时洞察。自动识别空置周期异常的物业单元,预测客户续约概率,生成招商定价建议——把事后统计变为事前预警。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="approach-item fade-up" style="transition-delay: 0.2s;">
|
||||
<div class="approach-step">Step 3</div>
|
||||
<div class="approach-body">
|
||||
<h3>流程自动化</h3>
|
||||
<p>将高频重复工作交给 AI Agent。智能客服自动响应业主报修,AI 招商助手自动匹配租户需求,维保系统自动规划巡检路线,释放人力聚焦关键决策。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="approach-item fade-up" style="transition-delay: 0.15s;">
|
||||
<div class="approach-step">Step 4</div>
|
||||
<div class="approach-body">
|
||||
<h3>统一智能中枢</h3>
|
||||
<p>跨系统数据在 AI 层融合,形成全局业务视图。管理者通过自然语言即可查询"本月哪些楼宇空置率超标",无需手动汇总多份报表。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="approach-item fade-up" style="transition-delay: 0.25s;">
|
||||
<div class="approach-step">Step 5</div>
|
||||
<div class="approach-body">
|
||||
<h3>渐进式落地</h3>
|
||||
<p>按业务优先级分阶段叠加 AI 能力。从单一场景试点验证效果,逐步扩展到全流程智能化。每一步都可衡量 ROI,降低试错成本,确保投入产出可控。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="solutions">
|
||||
<div class="container">
|
||||
<span class="section-label fade-up">CORE BUSINESS</span>
|
||||
|
||||
<!-- 物业 - 本地图 (建筑/无人员) -->
|
||||
<div class="project-row">
|
||||
<div class="project-text fade-up">
|
||||
<h2>智慧物业<br>智能中枢</h2>
|
||||
<p>在现有物业 ERP 之上叠加 AI 调度中枢。通过 API 外挂智能决策层,实现工单自动分发、客诉情感分析。在不改变原有操作流程的前提下,降低 30% 运营成本。</p>
|
||||
</div>
|
||||
<div class="project-img fade-up" style="transition-delay: 0.2s;">
|
||||
<img src="assets/prop.jpg?v=6" alt="Smart Building">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 资管 - 本地图 (服务器/无人员) -->
|
||||
<div class="project-row reverse">
|
||||
<div class="project-text fade-up">
|
||||
<h2>智能资管<br>风控大脑</h2>
|
||||
<p>无缝接入现有资管平台,外挂智能投研与风控大脑。让历史数据自动转化为预测模型,实现资产自动预警与动态配置。辅助现有流程做出更精准的决策,提升投资回报率。</p>
|
||||
</div>
|
||||
<div class="project-img fade-up" style="transition-delay: 0.2s;">
|
||||
<img src="assets/server.jpg?v=6" alt="Server Data">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CRM - 本地图 (电脑屏幕/无人员) -->
|
||||
<div class="project-row">
|
||||
<div class="project-text fade-up">
|
||||
<h2>CRM 助理<br>效率跃升</h2>
|
||||
<p>为企业现有 CRM 配备 AI 私人助理。自动捕捉线索、生成对话摘要、推荐跟进策略。销售团队无需学习新软件,在熟悉的界面中即可享受智能化的效率跃升。</p>
|
||||
</div>
|
||||
<div class="project-img fade-up" style="transition-delay: 0.2s;">
|
||||
<img src="assets/crm.jpg?v=6" alt="Team">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="geo">
|
||||
<div class="container">
|
||||
<span class="section-label fade-up">GENERATIVE ENGINE OPTIMIZATION</span>
|
||||
<div style="display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 80px; align-items: center;">
|
||||
<div class="fade-up">
|
||||
<h2 style="margin-bottom: 24px;">GEO<br>生成式引擎优化</h2>
|
||||
<p style="font-size: 19px; color: #ccc; line-height: 1.6; margin-bottom: 20px;">AI 时代的新型营销与流量基础设施。</p>
|
||||
<p style="color: #888; line-height: 1.8; font-size: 16px;">通过优化企业在主流大模型和 AI 搜索引擎中的内容结构与权重,确保品牌在用户提问时精准、优先呈现。从传统的“搜索排名”进化为 AI 时代的“答案占位”。</p>
|
||||
</div>
|
||||
<!-- GEO - 本地图 (数字地球/无人员) -->
|
||||
<div class="project-img fade-up" style="transition-delay: 0.2s; height: 450px;">
|
||||
<img src="assets/geo.jpg?v=6" alt="Network">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="contact">
|
||||
<div class="container">
|
||||
<span class="section-label fade-up">CONTACT</span>
|
||||
<div class="fade-up" style="text-align:center; margin-bottom:60px;">
|
||||
<h2>开启智能叠加</h2>
|
||||
<p style="color:#777; font-size:17px; max-width:500px; margin:16px auto 0; line-height:1.7;">
|
||||
留下联系方式,我们的产品顾问将在24小时内与您取得联系,为您定制专属的 AI 叠加方案。
|
||||
</p>
|
||||
</div>
|
||||
<form class="contact-form fade-up" id="consultForm" onsubmit="return false;">
|
||||
<div>
|
||||
<label>姓名</label>
|
||||
<input type="text" name="name" placeholder="您的称呼" required>
|
||||
</div>
|
||||
<div>
|
||||
<label>电话</label>
|
||||
<input type="tel" name="phone" placeholder="手机号码" required>
|
||||
</div>
|
||||
<div class="full-width">
|
||||
<label>邮箱</label>
|
||||
<input type="email" name="email" placeholder="选填">
|
||||
</div>
|
||||
<div class="full-width">
|
||||
<label>留言</label>
|
||||
<textarea name="message" placeholder="简要描述您的需求(选填)"></textarea>
|
||||
</div>
|
||||
<div class="contact-submit">
|
||||
<button type="submit" id="submitBtn">提交咨询</button>
|
||||
</div>
|
||||
<div class="form-status" id="formStatus"></div>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<div class="tech-by">TECHNICAL SUPPORT PROVIDED BY</div>
|
||||
<div class="company">上海菲西尔智能科技有限公司</div>
|
||||
<div style="margin-top: 12px; font-size: 10px; color: #444; letter-spacing: 1px;">© 2026 SHANGHAI FISCHER INTELLIGENT TECHNOLOGY CO., LTD.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// 强制视频播放并捕获错误
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const vid = document.querySelector('.hero-video');
|
||||
if (vid) {
|
||||
vid.play().catch(e => {
|
||||
console.warn('Autoplay blocked:', e);
|
||||
});
|
||||
}
|
||||
|
||||
// 表单提交
|
||||
const form = document.getElementById('consultForm');
|
||||
const btn = document.getElementById('submitBtn');
|
||||
const status = document.getElementById('formStatus');
|
||||
if (form) {
|
||||
btn.addEventListener('click', () => {
|
||||
const name = form.name.value.trim();
|
||||
const phone = form.phone.value.trim();
|
||||
const email = form.email.value.trim();
|
||||
const message = form.message.value.trim();
|
||||
if (!name || !phone) { status.textContent = '请填写姓名和电话'; status.className = 'form-status err'; return; }
|
||||
btn.disabled = true; btn.textContent = '提交中...';
|
||||
fetch('/ai/api/consult', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ name, phone, email, message })
|
||||
}).then(r => r.json()).then(d => {
|
||||
if (d.success) { status.textContent = '已收到,我们会尽快联系您'; status.className = 'form-status ok'; form.reset(); }
|
||||
else { status.textContent = d.error || '提交失败,请重试'; status.className = 'form-status err'; }
|
||||
}).catch(() => { status.textContent = '网络错误,请重试'; status.className = 'form-status err'; })
|
||||
.finally(() => { btn.disabled = false; btn.textContent = '提交咨询'; });
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 滚动渐显动画
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) entry.target.classList.add('visible');
|
||||
});
|
||||
}, { threshold: 0.15, rootMargin: "0px 0px -50px 0px" });
|
||||
document.querySelectorAll('.fade-up').forEach(el => observer.observe(el));
|
||||
|
||||
// 移动端:滚动触发动画(低 threshold 确保全高元素也能触发)
|
||||
if (window.innerWidth <= 900) {
|
||||
const mobileItems = document.querySelectorAll('#pain-points .pain-item, #approach .approach-item');
|
||||
const mobileObserver = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.classList.add('in-view');
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.1, rootMargin: "0px 0px -10% 0px" });
|
||||
|
||||
mobileItems.forEach(item => mobileObserver.observe(item));
|
||||
|
||||
// 背景网格视差
|
||||
const gridBg = document.querySelector('.pain-grid-bg');
|
||||
const painSection = document.getElementById('pain-points');
|
||||
if (gridBg && painSection) {
|
||||
let ticking = false;
|
||||
window.addEventListener('scroll', () => {
|
||||
if (!ticking) {
|
||||
requestAnimationFrame(() => {
|
||||
const rect = painSection.getBoundingClientRect();
|
||||
const progress = Math.max(0, Math.min(1, -rect.top / rect.height));
|
||||
gridBg.style.transform = `translateY(${progress * -60}px)`;
|
||||
ticking = false;
|
||||
});
|
||||
ticking = true;
|
||||
}
|
||||
}, { passive: true });
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||