/*
  隅数 YUSHU 官网
  版式：白底 + 一个品牌蓝；纯色块分区，配图全部是真实项目截图和现场照片。
  字体：中文思源黑体（Noto Sans SC，按页面用字子集化），西文与数字 Geist，编号与代码 Geist Mono。
  字体子集由 tools/subset-fonts.py 生成，改了页面文字后重新运行。
*/

@font-face{font-family:"Noto Sans SC";font-weight:400;font-display:swap;src:url("assets/fonts/noto-sans-sc-400.woff2") format("woff2")}
@font-face{font-family:"Noto Sans SC";font-weight:500;font-display:swap;src:url("assets/fonts/noto-sans-sc-500.woff2") format("woff2")}
@font-face{font-family:"Noto Sans SC";font-weight:700;font-display:swap;src:url("assets/fonts/noto-sans-sc-700.woff2") format("woff2")}
@font-face{font-family:"Noto Sans SC";font-weight:900;font-display:swap;src:url("assets/fonts/noto-sans-sc-900.woff2") format("woff2")}
@font-face{font-family:"Geist";font-weight:100 900;font-display:swap;src:url("assets/fonts/geist-latin-wght.woff2") format("woff2-variations"),url("assets/fonts/geist-latin-wght.woff2") format("woff2")}
@font-face{font-family:"Geist Mono";font-weight:100 900;font-display:swap;src:url("assets/fonts/geist-mono-latin-wght.woff2") format("woff2-variations"),url("assets/fonts/geist-mono-latin-wght.woff2") format("woff2")}

:root{
  --blue:#1F5FD6; --blue-d:#164AB0; --blue-1:#EEF3FE; --blue-2:#D9E5FC; --navy:#0D2B6B; --navy-d:#081633;
  --ink:#0E1729; --ink-2:#47536A; --ink-3:#7D879A; --line:#E3E7EF; --soft:#F5F7FB;
  --ok:#1A7F4B; --ok-1:#E6F5EC; --warn:#B25E09; --warn-1:#FFF2E2;
  --cn:"Noto Sans SC","PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;
  --sans:"Geist","Noto Sans SC","PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;
  --mono:"Geist Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
  /* 字号阶梯：展示 / 段落标题 / 小标题 / 导语 / 正文 / 说明 */
  --fs-display:clamp(40px,6.4vw,80px); --fs-h2:clamp(28px,3.6vw,46px); --fs-h3:clamp(19px,1.7vw,22px);
  --fs-lead:clamp(16px,1.5vw,19px); --fs-body:16px; --fs-small:14px;
  --g:max(16px,min(4.5vw,64px));
  --ease:cubic-bezier(.2,.8,.2,1);
  color-scheme:light;
}

/* ---------- 基础 ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:80px}
body{margin:0;background:#fff;color:var(--ink);font-family:var(--sans);font-size:var(--fs-body);line-height:1.75;text-autospace:normal;text-spacing-trim:normal;-webkit-font-smoothing:antialiased;overflow-x:clip}
h1,h2,h3,h4{margin:0;text-wrap:balance;font-feature-settings:"palt"}
p{margin:0;text-wrap:pretty}
a{color:inherit}
button{font:inherit;color:inherit}
img{display:block;max-width:100%}
[hidden]{display:none!important}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}
.num{font-variant-numeric:tabular-nums}
.skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--ink);color:#fff;padding:10px 14px;border-radius:8px;text-decoration:none}
.skip:focus{top:12px}

section,.hd>.in,.megawrap,.mnav,footer{padding-inline:max(var(--g),env(safe-area-inset-left,0px)) max(var(--g),env(safe-area-inset-right,0px))}
section{position:relative}
.in{max-width:1160px;margin:0 auto;position:relative}
.in>*,.sticky>*,.steps>*,.bento>*,.shead>*,.faqw>*,.ab>*{min-width:0}
.sec{padding-block:clamp(64px,9vw,112px)}
.sec.g{background:var(--soft)}

.eyebrow{display:inline-flex;align-items:center;gap:10px;font:600 var(--fs-small)/1 var(--sans);color:var(--blue)}
.eyebrow::before{content:"";width:18px;height:2px;background:currentColor}
.h2{font:800 var(--fs-h2)/1.18 var(--sans);letter-spacing:-.025em}
.lead{font-size:var(--fs-lead);line-height:1.75;color:var(--ink-2);max-width:34em}
.shead{display:grid;grid-template-columns:1fr 1fr;gap:20px 48px;align-items:end;margin-bottom:44px}
.shead .l{display:grid;gap:16px}
.shead-r{display:flex;justify-content:space-between;align-items:end;gap:16px;flex-wrap:wrap}
.shead-r .lead{max-width:22em}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:46px;padding:0 22px;border-radius:8px;font:600 15px/1 var(--sans);text-decoration:none;border:1px solid transparent;cursor:pointer;transition:background .2s,box-shadow .2s,border-color .2s;white-space:nowrap}
.btn.p{background:var(--blue);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.25) inset,0 8px 20px -10px rgba(31,95,214,.8)}
.btn.p:hover{background:var(--blue-d)}
.btn.o{background:#fff;border-color:#CDD5E3;color:var(--ink)}
.btn.o:hover{border-color:var(--ink-3)}
.btn.sm{height:36px;padding:0 14px;font-size:14px}
.btn .arr{transition:transform .2s}
.btn:hover .arr{transform:translateX(3px)}

/* ---------- 导航 ---------- */
.hd{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.88);backdrop-filter:saturate(1.6) blur(12px);-webkit-backdrop-filter:saturate(1.6) blur(12px);border-bottom:1px solid var(--line);padding-top:env(safe-area-inset-top,0px)}
.hd>.in{display:flex;align-items:center;height:64px;gap:28px}
.logo{display:inline-flex;align-items:center;gap:9px;font:800 19px/1 var(--sans);letter-spacing:-.02em;text-decoration:none}
.logo img{width:32px;height:26px}
.wm{display:grid;gap:3px;line-height:1}
.wm b{font:900 19px/1 var(--cn);letter-spacing:.06em}
.wm small{font:500 9px/1 var(--sans);letter-spacing:.46em;color:var(--ink-3)}
footer .wm small{color:#93A2C0}
.hd nav{display:flex;align-items:center;gap:2px;flex:1;font-size:15px}
.hd nav a,.hd nav button{all:unset;cursor:pointer;padding:8px 12px;border-radius:6px;color:var(--ink-2);transition:background .15s,color .15s}
.hd nav a:hover,.hd nav button:hover,.hd nav button[aria-expanded="true"]{background:var(--soft);color:var(--ink)}
.hd nav a:focus-visible,.hd nav button:focus-visible{outline:2px solid var(--blue)}
.hd nav button::after{content:"";display:inline-block;width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translate(-2px,-2px);margin-left:8px;transition:transform .2s}
.hd nav button[aria-expanded="true"]::after{transform:rotate(225deg) translate(-1px,-1px)}
.hd .right{display:flex;align-items:center;gap:16px;font:500 14px var(--sans);color:var(--ink-2)}
.menu{display:none;width:40px;height:40px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer;position:relative}
.menu i{position:absolute;left:11px;right:11px;height:1.6px;background:var(--ink);transition:transform .25s}
.menu i:first-child{top:15px}.menu i:last-child{bottom:15px}
.menu[aria-expanded="true"] i:first-child{transform:translateY(3.7px) rotate(45deg)}
.menu[aria-expanded="true"] i:last-child{transform:translateY(-3.7px) rotate(-45deg)}

.megawrap{position:absolute;left:0;right:0;top:100%;background:#fff;border-bottom:1px solid var(--line);box-shadow:0 30px 40px -30px rgba(14,23,41,.35);animation:drop .22s ease-out}
@keyframes drop{from{opacity:0;transform:translateY(-6px)}}
.mega{display:grid;grid-template-columns:1.3fr 1fr 1.1fr;gap:28px;padding-block:22px 26px}
.mega h4{font:500 13px var(--sans);color:var(--ink-3);margin:0 0 8px 12px}
.mega a{display:grid;grid-template-columns:34px 1fr;gap:0 12px;padding:10px 12px;border-radius:8px;text-decoration:none}
.mega a:hover{background:var(--soft)}
.mega a i{grid-row:span 2;width:34px;height:34px;border-radius:8px;background:var(--blue-1);display:grid;place-items:center}
.mega a i svg{width:18px;height:18px;stroke:var(--blue);fill:none;stroke-width:1.8}
.mega a b{font:600 15px/1.5 var(--sans)}
.mega a span{font-size:13px;color:var(--ink-3);line-height:1.5}
.mega .side{background:var(--soft);border-radius:10px;padding:18px;display:grid;gap:10px;align-content:start}
.mega .side p{font-size:14px;color:var(--ink-2)}
.mega .side .btn{justify-self:start;display:inline-flex;grid-template-columns:none}

.mnav{position:absolute;left:0;right:0;top:100%;background:#fff;border-bottom:1px solid var(--line);box-shadow:0 30px 40px -30px rgba(14,23,41,.35);display:grid;gap:2px;padding-block:10px 18px;animation:drop .22s ease-out}
.mnav a{padding:12px 4px;font-size:16px;text-decoration:none;border-bottom:1px solid var(--line)}
.mnav .btn{margin-top:12px;border-bottom:0}

/* ---------- 首屏 ---------- */
.hero{padding-block:clamp(56px,8vw,96px) 0;background:linear-gradient(#fff 0 58%,var(--blue-1) 58% 100%);overflow:clip}
.hero .txt{text-align:center;max-width:900px;margin:0 auto;display:grid;justify-items:center}
.hero .badge{display:inline-flex;align-items:center;gap:8px;font:500 13px/1.3 var(--sans);color:var(--ink-2);background:#fff;border:1px solid var(--line);border-radius:999px;padding:6px 12px 6px 6px;margin-bottom:22px;text-decoration:none;transition:border-color .2s}
.hero .badge:hover{border-color:#C6D2E8}
.hero .badge b{background:var(--blue);color:#fff;border-radius:999px;padding:4px 8px;font-weight:600;font-size:12px;line-height:1}
.display{font:900 var(--fs-display)/1.08 var(--cn);letter-spacing:-.035em}
/* 轮换词：JS 给每个词放一份隐形占位（.ghost），槽位固定为最宽的词，换词时前面的字不再左右跳；窄屏下单独占一行居中 */
.display .rot{display:inline-grid;color:var(--blue);vertical-align:bottom;overflow:clip;height:1.12em;text-align:left}
.display .rot span{grid-area:1/1;transition:transform .55s var(--ease),opacity .4s;white-space:nowrap}
.display .rot span.out{transform:translateY(-100%);opacity:0}
.display .rot span.wait{transform:translateY(100%);opacity:0}
.display .rot .ghost{visibility:hidden}
/* “用心开发”的心：一枚品牌蓝印章，进场时盖下去 */
.display .seal{display:inline-grid;place-items:center;width:1.3em;height:1.3em;margin:0 .12em;padding-bottom:.11em;border-radius:.2em;background:var(--blue);box-shadow:inset 0 0 0 .08em var(--blue),inset 0 0 0 .11em rgba(255,255,255,.55);color:#fff;font-size:.82em;letter-spacing:0;transform:rotate(-6deg);animation:stamp .7s var(--ease) .35s both}
@keyframes stamp{from{opacity:0;transform:rotate(-6deg) scale(1.8)}60%{opacity:1;transform:rotate(-6deg) scale(.94)}}
.hero .lead{margin:24px auto 32px;text-align:center}
.hero .acts{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.hero .facts{display:flex;gap:6px 22px;justify-content:center;flex-wrap:wrap;margin-top:22px;font-size:14px;color:var(--ink-3)}
.hero .facts span{display:inline-flex;align-items:center;gap:6px}
.hero .facts svg{width:15px;height:15px;stroke:var(--blue);fill:none;stroke-width:2.4}

/* 演示窗：真实合并请求回放 */
.demo{margin-top:56px;border:1px solid #D7DEEA;border-bottom:0;border-radius:14px 14px 0 0;background:#fff;box-shadow:0 -24px 60px -40px rgba(31,95,214,.55),0 0 0 6px rgba(255,255,255,.6);overflow:clip;text-align:left}
.demo .wbar{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--line);font-size:14px;flex-wrap:wrap}
.demo .wbar b{font-weight:600}
.demo .wbar .ex{font:500 12px var(--sans);color:var(--ok);background:var(--ok-1);border-radius:4px;padding:2px 8px}
.demo .wbar .sp{flex:1}
.demo .wbar .meta{font-size:12px;color:var(--ink-3)}
.demo .wbar .avs{display:flex}
.demo .wbar .avs i{width:24px;height:24px;border-radius:50%;border:2px solid #fff;margin-left:-6px;display:grid;place-items:center;font:600 10px var(--sans);color:#fff;font-style:normal}
.demo .body{display:grid;grid-template-columns:1fr 1.25fr .95fr;min-height:340px}
.demo .col{padding:20px;border-right:1px solid var(--line);min-width:0}
.demo .col:last-child{border-right:0;background:var(--soft)}
.demo h5{margin:0 0 12px;font:600 12px var(--sans);color:var(--ink-3);display:flex;justify-content:space-between}
.req{font-size:15px;line-height:1.8;color:var(--ink);background:var(--soft);border:1px solid var(--line);border-radius:10px;padding:14px 16px}
.accept{margin-top:14px;display:grid;gap:8px;font-size:13px;color:var(--ink-2)}
.accept div{display:flex;gap:8px;align-items:center}
.accept i{width:14px;height:14px;border-radius:4px;flex:none;background:var(--ok) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8l3 3 5-6' fill='none' stroke='%23fff' stroke-width='2'/%3E%3C/svg%3E") center/10px no-repeat}
.tasks{display:grid;gap:8px}
.task{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:10px;font-size:14px;background:#fff;transition:border-color .3s,background .3s}
.task code{font:500 12px var(--mono);color:var(--ink-3)}
.task span:nth-child(2){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.task.active{border-color:var(--blue-2);background:#FBFCFF}
.st{font:500 12px/1 var(--sans);border-radius:999px;padding:5px 9px;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.st::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.st.todo{color:var(--ink-3);background:var(--soft)}
.st.run{color:var(--blue);background:var(--blue-1)}
.st.run::before{animation:pulse 1s infinite}
.st.ok{color:var(--ok);background:var(--ok-1)}
.st.rev{color:var(--warn);background:var(--warn-1)}
@keyframes pulse{50%{opacity:.25}}
.prog{margin-top:14px;display:grid;gap:6px;font-size:13px;color:var(--ink-2)}
.prog>div:first-child{display:flex;justify-content:space-between;gap:8px}
.prog .t{height:6px;border-radius:999px;background:var(--line);overflow:hidden}
.prog .t i{display:block;height:100%;background:var(--blue);border-radius:inherit;transition:width .5s}
.feed{display:grid;gap:8px}
.feed .it{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:grid;grid-template-columns:28px 1fr;gap:2px 10px;font-size:13px;animation:slidein .45s var(--ease)}
.feed .it i{grid-row:span 2;width:28px;height:28px;border-radius:8px;display:grid;place-items:center;font:700 11px var(--sans);font-style:normal;color:#fff}
.feed .it b{font-weight:600;font-size:13px}
.feed .it span{color:var(--ink-3);font-size:12px}
@keyframes slidein{from{opacity:0;transform:translateY(-12px) scale(.97)}}

/* ---------- 技术条 ---------- */
.logos{padding-block:28px;background:var(--blue-1);border-bottom:1px solid var(--blue-2)}
.logos .in{display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:center}
.logos p{font-size:14px;color:var(--ink-2);white-space:nowrap}
.mq{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.mq .tr{display:flex;gap:40px;width:max-content;animation:mq 38s linear infinite}
.mq:hover .tr{animation-play-state:paused}
.mq span{font:600 16px/1 var(--sans);color:#4A5A78;display:inline-flex;align-items:center;gap:10px;white-space:nowrap}
.mq span::before{content:"";width:6px;height:6px;border-radius:2px;background:#9DB4E4}
@keyframes mq{to{transform:translateX(calc(-50% - 20px))}}

/* ---------- 数字 ---------- */
.stats{padding-block:56px;border-bottom:1px solid var(--line)}
.stats .in{display:grid;grid-template-columns:repeat(4,1fr)}
.stats .in>div{display:grid;gap:4px;padding:0 24px;border-left:1px solid var(--line);align-content:start}
.stats .in>div:first-child{border-left:0;padding-left:0}
.stats b{font:700 clamp(34px,4vw,52px)/1 var(--sans);letter-spacing:-.03em}
.stats b small{font-size:.42em;color:var(--blue);margin-left:4px;letter-spacing:0;font-family:var(--cn)}
.stats .in>div>span{font-size:14px;color:var(--ink-2)}

/* ---------- 解决方案：拼块网格 ---------- */
.bento{display:grid;grid-template-columns:repeat(6,1fr);gap:16px}
.cell{position:relative;background:#fff;border:1px solid var(--line);border-radius:18px;overflow:clip;display:flex;flex-direction:column;transition:box-shadow .3s,border-color .3s}
.cell:hover{border-color:#CCD6E8;box-shadow:0 24px 48px -32px rgba(14,23,41,.35)}
.cell .cap{padding:24px 26px 26px;display:grid;gap:8px;margin-top:auto}
.cell .cap small{font:600 13px var(--sans);color:var(--blue)}
.cell .cap h3{font:700 var(--fs-h3)/1.4 var(--sans);letter-spacing:-.01em}
.cell .cap p{font-size:var(--fs-small);color:var(--ink-2);line-height:1.7}
.cell .cap a{font:600 14px var(--sans);color:var(--blue);text-decoration:none;justify-self:start;margin-top:4px}
.cell .cap a::after{content:" →";transition:margin .2s}
.cell:hover .cap a::after{margin-left:4px}
.c-agent{grid-column:span 4}
.c-vision{grid-column:span 2;grid-row:span 2}
.c-app,.c-tool{grid-column:span 2}
.viz{position:relative;background:linear-gradient(var(--soft),#fff);border-bottom:1px solid var(--line)}
.viz img{width:100%;height:100%;object-fit:cover}

/* 企业智能体：城院小狮的极光背景 + 一次真实回答的流程卡 */
.flowc{display:grid;grid-template-columns:1fr 36px 1.1fr 36px 1.15fr;align-items:center;padding:40px 28px 32px;min-height:300px;overflow:clip;border-bottom:0;
  background:radial-gradient(60% 70% at 0% 0%,rgba(76,141,255,.30),transparent 70%),radial-gradient(55% 65% at 100% 0%,rgba(255,92,154,.24),transparent 70%),radial-gradient(70% 60% at 50% 0%,rgba(255,194,77,.26),transparent 70%),radial-gradient(60% 70% at 15% 100%,rgba(154,107,255,.20),transparent 70%),radial-gradient(60% 70% at 90% 100%,rgba(255,122,61,.20),transparent 70%),#FBF8F5}
.flowc::before{content:"";position:absolute;top:0;left:8%;right:8%;height:2px;background:linear-gradient(90deg,transparent,#4C8DFF,#9A6BFF,#FF5C9A,#FF7A3D,#FFC24D,transparent);opacity:.8}
.fc{background:rgba(255,255,255,.88);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.9);border-radius:14px;padding:14px;display:grid;gap:8px;align-content:start;min-width:0;box-shadow:0 18px 36px -22px rgba(60,40,90,.45)}
.fl{font:500 12px var(--sans);color:var(--ink-3);display:flex;align-items:center;gap:6px}
.fl.who{color:var(--ink);font-weight:600;font-size:13px;gap:8px}
.fl.who small{font-weight:400;color:var(--ink-3);font-size:12px}
.av{position:relative;width:30px;height:30px;flex:none}
.av::before{content:"";position:absolute;inset:-3px;border-radius:50%;background:conic-gradient(#4C8DFF,#9A6BFF,#FF5C9A,#FF7A3D,#FFC24D,#4C8DFF);animation:spin2 6s linear infinite}
.av img{position:relative;width:100%;height:100%;border-radius:50%;border:2px solid #fff;object-fit:cover}
.bub{font-size:14px;line-height:1.65;background:linear-gradient(135deg,#4C8DFF,#7A6BFF);color:#fff;border-radius:12px 12px 4px 12px;padding:10px 12px}
.run{list-style:none;margin:0;padding:0;display:grid;gap:7px}
.run li{display:grid;grid-template-columns:16px 1fr auto;gap:8px;align-items:center;font-size:13px;color:var(--ink-3);transition:color .3s}
.run li::before{content:"";width:14px;height:14px;border-radius:50%;border:1.5px solid #C8D0DD;transition:.3s}
.run li.done{color:var(--ink)}
.run li.done::before{border-color:var(--ok);background:var(--ok) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8l3 3 5-6' fill='none' stroke='%23fff' stroke-width='2.2'/%3E%3C/svg%3E") center/10px no-repeat}
.run li.cur{color:var(--blue)}
.run li.cur::before{border-color:var(--blue);border-right-color:transparent;animation:spin2 .8s linear infinite}
@keyframes spin2{to{transform:rotate(360deg)}}
.run em{font:500 12px var(--sans);font-style:normal;color:var(--ink-3)}
.ot{font:700 15px/1.4 var(--sans)}
.os{font-size:12px;color:var(--ink-3)}
.chk{list-style:none;margin:0;padding:0;display:grid;gap:5px}
.chk li{display:grid;grid-template-columns:14px 1fr;gap:8px;align-items:center;font-size:13px;padding:5px 0;border-top:1px solid var(--line)}
.chk li::before{content:"";width:13px;height:13px;border-radius:3px;border:1.5px solid #C8D0DD;transition:.25s}
.chk li.on{color:var(--ink-3);text-decoration:line-through;text-decoration-color:#B8C2D3}
.chk li.on::before{border-color:var(--blue);background:var(--blue) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8l3 3 5-6' fill='none' stroke='%23fff' stroke-width='2.2'/%3E%3C/svg%3E") center/10px no-repeat}
.src{font-size:11px;color:var(--ink-3)}
.wire{height:2px;background:repeating-linear-gradient(90deg,#C9D4E8 0 4px,transparent 4px 8px);position:relative}
.wire i{position:absolute;top:50%;left:0;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:#9A6BFF;box-shadow:0 0 0 3px rgba(154,107,255,.18);animation:wire 1.8s ease-in-out infinite}
.wire+.fc+.wire i{animation-delay:.9s}
@keyframes wire{0%{left:0;opacity:0}15%{opacity:1}85%{opacity:1}100%{left:100%;opacity:0}}

/* AI 视觉：扫描线 */
.scan{flex:1;min-height:320px;overflow:clip;background:#1a2230}
.scan img{position:absolute;inset:0;object-position:center 40%}
.scan .ln{position:absolute;left:0;right:0;height:2px;background:#7FB0FF;box-shadow:0 0 12px 2px rgba(127,176,255,.8);top:10%;animation:scan 3.6s ease-in-out infinite alternate}
@keyframes scan{to{top:88%}}
.scan .tagx{position:absolute;left:14px;bottom:14px;right:14px;display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap}
.scan .tagx span{font:500 12px/1 var(--sans);color:#fff;background:rgba(14,23,41,.72);backdrop-filter:blur(6px);border-radius:6px;padding:7px 10px}

/* 应用开发：悬停展开的手机组 */
.fan{height:250px;display:flex;justify-content:center;align-items:flex-end;padding-top:24px;overflow:clip}
.fan .ph{width:104px;aspect-ratio:9/19.5;border-radius:16px;border:4px solid #1B2233;overflow:hidden;background:#fff;box-shadow:0 18px 30px -16px rgba(14,23,41,.6);margin:0 -14px;transition:transform .45s var(--ease);transform-origin:bottom center}
.fan .ph img{object-position:top}
.fan .ph:nth-child(1){transform:rotate(-9deg) translateY(16px)}
.fan .ph:nth-child(2){transform:translateY(-4px);z-index:2;width:116px}
.fan .ph:nth-child(3){transform:rotate(9deg) translateY(16px)}
.c-app:hover .ph:nth-child(1){transform:rotate(-14deg) translate(-18px,10px)}
.c-app:hover .ph:nth-child(2){transform:translateY(-14px)}
.c-app:hover .ph:nth-child(3){transform:rotate(14deg) translate(18px,10px)}

/* 内部工具：截图悬停放大 */
.zoom{height:250px;overflow:clip;padding:22px 0 0 22px}
.zoom img{border-radius:10px 0 0 0;border:1px solid var(--line);border-right:0;border-bottom:0;object-position:left top;transition:transform .6s var(--ease);box-shadow:0 10px 24px -16px rgba(14,23,41,.5)}
.c-tool:hover .zoom img{transform:scale(1.06) translate(-6px,-4px)}

/* ---------- 应用开发：页签 + 设备样机 ---------- */
.apps{background:linear-gradient(180deg,#fff,var(--blue-1))}
.atabs{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;background:#fff;border:1px solid var(--line);border-radius:16px;padding:6px;margin-bottom:20px}
.atabs button{all:unset;cursor:pointer;position:relative;overflow:hidden;border-radius:11px;padding:14px 16px 16px;display:grid;gap:2px;transition:background .25s}
.atabs button b{font:700 16px/1.4 var(--sans);color:var(--ink-2);transition:color .25s}
.atabs button span{font-size:13px;color:var(--ink-3)}
.atabs button i{position:absolute;left:16px;right:16px;bottom:8px;height:2px;border-radius:2px;background:var(--line);overflow:hidden;opacity:0}
.atabs button i::after{content:"";position:absolute;inset:0;background:var(--blue);transform:scaleX(0);transform-origin:left}
.atabs button[aria-selected="true"]{background:var(--blue-1)}
.atabs button[aria-selected="true"] b{color:var(--blue)}
.atabs button[aria-selected="true"] i{opacity:1}
.atabs.auto button[aria-selected="true"] i::after{animation:fill 6s linear forwards}
@keyframes fill{to{transform:scaleX(1)}}
.atabs button:hover b{color:var(--ink)}
.atabs button:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
.apane{display:grid;grid-template-columns:.85fr 1.15fr;gap:20px;align-items:stretch}
.apane>*{min-width:0;animation:fade .45s ease-out}
.atx{background:#fff;border:1px solid var(--line);border-radius:20px;padding:32px;display:grid;gap:16px;align-content:start}
.atx h3{font:800 clamp(22px,2.4vw,28px)/1.3 var(--sans);letter-spacing:-.02em}
.atx>p{color:var(--ink-2)}
.atx ul,.plan ul{margin:0;padding:16px 0 0;border-top:1px solid var(--line);display:grid;gap:12px}
.atx li,.plan li{list-style:none;display:grid;grid-template-columns:20px 1fr;gap:10px;font-size:15px}
.atx li::before,.plan li::before{content:"";width:18px;height:18px;margin-top:4px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 12l5 5 9-10' fill='none' stroke='%231F5FD6' stroke-width='2.4'/%3E%3C/svg%3E") center/contain no-repeat}
.atx .made{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:13px;color:var(--ink-3)}
.atx .made span{font:500 13px var(--sans);color:var(--ink);background:var(--soft);border:1px solid var(--line);border-radius:999px;padding:4px 10px}
.atx .btn{justify-self:start}
.astage{position:relative;border-radius:20px;overflow:clip;background:radial-gradient(120% 90% at 70% 10%,#2C6BE8 0%,#1747B2 45%,var(--navy) 100%);min-height:440px;display:grid;place-items:center;padding:36px}
.astage::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px) 0 0/48px 48px,linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px) 0 0/48px 48px;-webkit-mask-image:radial-gradient(80% 70% at 50% 40%,#000,transparent);mask-image:radial-gradient(80% 70% at 50% 40%,#000,transparent)}
.dv{position:relative;z-index:1;display:flex;gap:22px;align-items:flex-end;justify-content:center;width:100%}
.dv img{width:100%;height:100%;object-fit:cover}
.iph{width:min(200px,40%);aspect-ratio:9/19.5;border-radius:34px;background:#0B0F17;padding:8px;box-shadow:0 40px 60px -30px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.12) inset;position:relative}
.iph::before{content:"";position:absolute;top:14px;left:50%;width:30%;height:16px;border-radius:999px;background:#0B0F17;transform:translateX(-50%);z-index:2}
.iph img{border-radius:27px;object-position:top}
.iph.tilt-l{transform:rotate(-3deg)}
.iph.tilt-r{transform:translateY(28px) rotate(4deg)}
.brw{width:100%;max-width:640px;border-radius:12px;overflow:hidden;background:#fff;box-shadow:0 40px 70px -30px rgba(0,0,0,.7)}
.brw .tb{display:flex;align-items:center;gap:6px;padding:9px 12px;background:#EEF1F6;border-bottom:1px solid #DDE2EA}
.brw .tb i{width:9px;height:9px;border-radius:50%;background:#CBD2DE}
.brw .tb span{margin-left:10px;flex:1;max-width:260px;background:#fff;border-radius:6px;font:11px/1 var(--sans);color:var(--ink-3);padding:6px 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brw .tb b{font:600 12px var(--sans);color:#E6EAF2}
.brw .sc{aspect-ratio:16/10}
.brw .sc img{object-position:top left}
.brw.win .tb{background:#1F2533;border-bottom:0}
.brw.win .tb .sp{flex:1;margin:0;background:none;padding:0}
.brw.win .tb em{font-style:normal;color:#9AA4B8;font-size:12px;letter-spacing:6px}
.dv.mix .brw{max-width:520px}
.dv.mix .iph{position:absolute;right:2%;bottom:-24px;width:min(150px,28%)}

/* ---------- 开发流程：滚动切换 ---------- */
.sticky{display:grid;grid-template-columns:1fr 1.1fr;gap:64px;align-items:start}
.steps{display:grid}
.step{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;align-content:start;padding:28px 0 28px 28px;border-left:2px solid var(--line);position:relative;min-height:220px;transition:opacity .3s}
.step::before{content:"";position:absolute;left:-2px;top:0;width:2px;height:0;background:var(--blue);transition:height .5s}
.step.on::before{height:100%}
.step:not(.on){opacity:.45}
.step .who{font:600 12px/1 var(--sans);padding:5px 9px;border-radius:999px;justify-self:start}
.step .who.a{color:var(--blue);background:var(--blue-1)}
.step .who.h{color:var(--warn);background:var(--warn-1)}
.step h3{font:800 clamp(22px,2.4vw,28px)/1.3 var(--sans);letter-spacing:-.02em}
.step h3 .n{font:500 14px var(--mono);color:var(--ink-3);margin-right:12px;vertical-align:4px}
.step p{color:var(--ink-2);max-width:28em}
.step .vis{display:none}
.stage{position:sticky;top:96px;background:#fff;border:1px solid var(--line);border-radius:18px;padding:22px;min-height:380px;box-shadow:0 30px 60px -44px rgba(14,23,41,.5)}
.stage .pane{animation:fade .4s ease-out}
@keyframes fade{from{opacity:0;transform:translateY(8px)}}
.vh{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;font:600 14px var(--sans)}
.vh span{font:500 12px var(--sans);color:var(--ink-3)}
.docv{display:grid;gap:10px;font-size:14px;margin:0}
.docv div{display:grid;grid-template-columns:84px 1fr;gap:12px;padding:10px 0;border-bottom:1px dashed var(--line)}
.docv dt{color:var(--ink-3);font-weight:500}
.docv dd{margin:0}
.docv code{font:12px var(--mono);background:var(--soft);padding:1px 5px;border-radius:4px}
.files{display:grid;gap:6px}
.files div{display:grid;grid-template-columns:minmax(0,1.4fr) 1fr auto;gap:12px;align-items:center;padding:9px 10px;border-radius:8px;background:var(--soft);font-size:13px}
.files code{font:12px var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.files .bars{display:flex;gap:2px;height:6px}
.files .bars i{display:block;height:100%;border-radius:2px}
.files .bars .a{background:#3BA66B}
.files .bars .d{background:#D9534F}
.files small{color:var(--ink-3);font-size:12px;white-space:nowrap}
.tests{display:grid;gap:6px;font:13px/1.5 var(--mono);margin:0;padding:0}
.tests li{list-style:none;display:grid;grid-template-columns:18px minmax(0,1fr) auto;gap:10px;align-items:center;padding:8px 10px;border-radius:8px;background:var(--soft)}
.tests li::before{content:"+";color:var(--ok);font-weight:700}
.tests li span{overflow-wrap:anywhere}
.tests small{color:var(--ink-3)}
.diff{font:13px/1.7 var(--mono);border:1px solid var(--line);border-radius:10px;overflow-x:auto}
.diff div{padding:0 12px;white-space:pre;width:max-content;min-width:100%}
.diff .h{background:var(--soft);color:var(--ink-3);padding:6px 12px}
.diff .a{background:#E9F7EE;color:#14603A}
.diff .d{background:#FDECEC;color:#9B2C2C}
.approve{display:flex;gap:10px;align-items:center;justify-content:space-between;margin-top:14px;flex-wrap:wrap}
.approve span:first-child{font-size:13px;color:var(--ink-2)}

/* ---------- 客户案例：横滑卡片 + 详情弹窗 ---------- */
.car{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(260px,340px);gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-inline:var(--g);padding:4px var(--g) 24px;margin-inline:calc(var(--g) * -1);scrollbar-width:none;overscroll-behavior-x:contain}
.car::-webkit-scrollbar{display:none}
.cc{scroll-snap-align:start;position:relative;border-radius:20px;overflow:clip;aspect-ratio:3/4;cursor:pointer;border:0;padding:0;text-align:left;background:#111;transition:transform .35s var(--ease)}
.cc:hover{transform:translateY(-4px)}
.cc img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:top;transition:transform .6s var(--ease)}
.cc:hover img{transform:scale(1.04)}
.cc .ov{position:absolute;inset:auto 0 0;padding:64px 22px 22px;background:linear-gradient(transparent,rgba(9,14,26,.88) 55%);color:#fff;display:grid;gap:6px}
.cc .ov small{font:500 13px var(--sans);opacity:.8}
.cc .ov b{font:800 21px/1.35 var(--sans);letter-spacing:-.01em}
.cc .pill{position:absolute;top:16px;left:16px;font:600 12px/1 var(--sans);background:rgba(255,255,255,.92);color:var(--ink);border-radius:999px;padding:7px 11px}
.cc .plus{position:absolute;top:14px;right:14px;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.92);display:grid;place-items:center;font:400 20px/1 var(--sans);color:var(--ink);transition:transform .3s}
.cc:hover .plus{transform:rotate(90deg)}
.carnav{display:flex;gap:10px}
.carnav button{width:44px;height:44px;border-radius:50%;border:1px solid #CDD5E3;background:#fff;cursor:pointer;font-size:18px;display:grid;place-items:center;transition:background .2s}
.carnav button:hover{background:var(--soft)}
.case-dialog{border:0;padding:0;border-radius:20px;max-width:min(880px,calc(100vw - 32px));width:100%;max-height:calc(100dvh - 48px);box-shadow:0 40px 80px -30px rgba(9,14,26,.6);color:var(--ink);overflow:auto}
.case-dialog::backdrop{background:rgba(9,14,26,.55);backdrop-filter:blur(4px)}
.case-dialog[open]{animation:pop .3s var(--ease)}
@keyframes pop{from{opacity:0;transform:translateY(16px) scale(.98)}}
.dl{display:grid;grid-template-columns:1fr 1fr;min-height:420px}
.dl .im{background:var(--soft);display:grid;place-items:center;padding:16px;min-height:240px}
.dl .im img{width:100%;max-height:70dvh;object-fit:contain;border-radius:10px}
.dl .tx{padding:32px;display:grid;gap:14px;align-content:start}
.dl .tx h3{font:800 26px/1.3 var(--sans);letter-spacing:-.02em;padding-right:36px}
.dl .tx dl{margin:0;display:grid;gap:12px}
.dl .tx dt{font:500 13px var(--sans);color:var(--ink-3)}
.dl .tx dd{margin:2px 0 0;font-size:15px;line-height:1.7}
.case-dialog .x{position:absolute;top:12px;right:12px;width:36px;height:36px;border-radius:50%;border:0;background:#fff;box-shadow:0 4px 12px -4px rgba(0,0,0,.3);cursor:pointer;font-size:20px;line-height:1}

/* ---------- 合作方案 ---------- */
.plans{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;align-items:stretch}
.plan{position:relative;border:1px solid var(--line);border-radius:18px;padding:30px;background:#fff;display:grid;gap:16px;align-content:start}
.plan .t{font:600 13px var(--sans);color:var(--blue);display:flex;align-items:center;gap:8px}
.plan .t em{font-style:normal;font-size:12px;color:#fff;background:var(--blue);border-radius:999px;padding:2px 8px}
.plan h3{font:800 24px/1.3 var(--sans);letter-spacing:-.02em}
.plan>p{font-size:15px;color:var(--ink-2);min-height:3.4em}
.plan ul{padding-top:18px}
.plan .btn{margin-top:6px}
@property --ang{syntax:"<angle>";initial-value:0deg;inherits:false}
.plan.hot{border:1.5px solid transparent;background:linear-gradient(#fff,#fff) padding-box,conic-gradient(from var(--ang),var(--blue-2) 0 70%,var(--blue) 82%,#8DB3FF 88%,var(--blue-2) 100%) border-box;animation:beam 5s linear infinite;box-shadow:0 30px 60px -40px rgba(31,95,214,.7)}
@keyframes beam{to{--ang:360deg}}

/* ---------- 常见问题 ---------- */
.faqw{display:grid;grid-template-columns:.8fr 1.2fr;gap:48px}
.faq-h{display:grid;gap:16px;align-content:start}
.faq{border-top:1px solid var(--line)}
.faq details{border-bottom:1px solid var(--line);interpolate-size:allow-keywords}
.faq details::details-content{height:0;overflow:clip;transition:height .35s ease,content-visibility .35s allow-discrete}
.faq details[open]::details-content{height:auto}
.faq summary{cursor:pointer;list-style:none;padding:22px 2px;font:600 17px/1.5 var(--sans);display:flex;justify-content:space-between;gap:20px}
.faq summary::-webkit-details-marker{display:none}
.faq summary i{flex:none;width:26px;height:26px;border-radius:50%;border:1px solid var(--line);position:relative;transition:background .3s}
.faq summary i::before,.faq summary i::after{content:"";position:absolute;left:50%;top:50%;width:10px;height:1.5px;background:var(--ink);transform:translate(-50%,-50%)}
.faq summary i::after{transform:translate(-50%,-50%) rotate(90deg);transition:transform .3s}
.faq details[open] summary i{background:var(--blue);border-color:var(--blue)}
.faq details[open] summary i::before,.faq details[open] summary i::after{background:#fff}
.faq details[open] summary i::after{transform:translate(-50%,-50%) rotate(0)}
.faq details p{padding:0 2px 24px;color:var(--ink-2);max-width:40em}

/* ---------- 关于我们 ---------- */
.ab{display:grid;grid-template-columns:1fr 1.15fr;gap:64px;align-items:center}
.ab-t{display:grid;gap:18px;align-content:start}
.ab-f{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:10px 0 0;border-top:1px solid var(--line);padding-top:20px}
.ab-f dt{font:700 16px var(--sans)}
.ab-f dd{margin:4px 0 0;font-size:14px;color:var(--ink-2)}
.ab-p{position:relative;padding-bottom:64px}
.ab-p figure{margin:0;position:relative;overflow:clip;border-radius:18px}
.ab-p img{width:100%;height:100%;object-fit:cover}
.ab-p figcaption{position:absolute;left:12px;bottom:12px;font:500 12px/1.4 var(--sans);color:#fff;background:rgba(9,14,26,.66);backdrop-filter:blur(6px);border-radius:6px;padding:7px 10px;max-width:calc(100% - 24px)}
.ab-main{aspect-ratio:4/3;box-shadow:0 30px 60px -40px rgba(14,23,41,.6)}
.ab-inset{position:absolute!important;right:-12px;bottom:0;width:38%;aspect-ratio:3/4;border:6px solid #fff;box-shadow:0 24px 40px -20px rgba(14,23,41,.55);will-change:transform}
.ab-inset img{object-position:center 30%}

/* ---------- 联系 ---------- */
.cta{background:var(--navy);color:#fff;overflow:clip;padding-block:clamp(64px,9vw,104px)}
.cta::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.06) 1px,transparent 1px) 0 0/64px 64px,linear-gradient(rgba(255,255,255,.06) 1px,transparent 1px) 0 0/64px 64px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 60%);mask-image:linear-gradient(90deg,transparent,#000 60%)}
.cta .in{display:grid;grid-template-columns:1.3fr 1fr;gap:40px;align-items:end}
.cta h2{font:900 clamp(32px,5vw,60px)/1.12 var(--cn);letter-spacing:-.035em}
.cta p{color:#B9C8E8;margin-top:18px;max-width:30em;font-size:var(--fs-lead)}
.tels{display:grid;gap:10px}
.tel{display:flex;align-items:center;justify-content:space-between;gap:12px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);border-radius:12px;padding:14px 16px}
.tel a{font:600 22px/1 var(--sans);letter-spacing:.01em;text-decoration:none}
.tel button{border:0;border-radius:8px;background:#fff;color:var(--navy);font:600 13px var(--sans);padding:8px 12px;cursor:pointer}
.qr{display:flex;align-items:center;gap:14px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);border-radius:12px;padding:12px 16px;font-size:14px;color:#D5DEEF}
.qr img{width:88px;height:88px;background:#fff;border-radius:8px;padding:6px;flex:none}
.cta .btn.p{background:#fff;color:var(--navy);box-shadow:none}
.cta .btn.p:hover{background:#E8EEFB}
.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom,0px));transform:translate(-50%,20px);opacity:0;background:var(--ink);color:#fff;font:500 14px var(--sans);padding:10px 16px;border-radius:10px;transition:.3s;z-index:50;pointer-events:none;max-width:calc(100vw - 32px)}
.toast.on{opacity:1;transform:translate(-50%,0)}

footer{background:var(--navy-d);color:#93A2C0;font-size:14px;padding-block:48px calc(28px + env(safe-area-inset-bottom,0px))}
footer .in{display:grid;grid-template-columns:1.6fr repeat(3,1fr);gap:28px}
footer b{display:block;color:#fff;font-weight:600;margin-bottom:4px}
footer .col{display:grid;gap:8px;align-content:start}
footer a{text-decoration:none}
footer a:hover{color:#fff}
footer .logo{color:#fff;margin-bottom:6px}
footer .copy{grid-column:1/-1;border-top:1px solid #1C2B4D;padding-top:20px;font-size:13px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}

/* ---------- 响应式 ---------- */
@media (max-width:1000px){
  .demo .body{grid-template-columns:1fr 1.3fr}
  .demo .col:last-child{display:none}
  .demo .col:nth-child(2){border-right:0}
  .c-agent{grid-column:span 6}
  .c-vision{grid-column:span 3;grid-row:auto}
  .c-app,.c-tool{grid-column:span 3}
  .scan{min-height:250px}
}
@media (max-width:860px){
  .hd nav,.hd .tel-n{display:none}
  .hd>.in{justify-content:space-between}
  .menu{display:block}
  .hd .right .btn{display:none}
  .demo .body{grid-template-columns:1fr}
  .demo .col{border-right:0;border-bottom:1px solid var(--line)}
  .logos .in{grid-template-columns:1fr;gap:12px}
  .stats .in{grid-template-columns:1fr 1fr;gap:28px 0}
  .stats .in>div:nth-child(3){border-left:0;padding-left:0}
  .shead,.sticky,.faqw,.cta .in,.ab,.apane{grid-template-columns:minmax(0,1fr)}
  .bento{grid-template-columns:minmax(0,1fr)}
  .c-agent,.c-vision,.c-app,.c-tool{grid-column:auto}
  .flowc{grid-template-columns:minmax(0,1fr);padding:18px}
  .wire{width:2px;height:22px;justify-self:center;background:repeating-linear-gradient(180deg,#C9C2DA 0 4px,transparent 4px 8px)}
  .wire i{display:none}
  .atabs{grid-template-columns:1fr 1fr}
  .atabs button span{display:none}
  .astage{min-height:340px;padding:24px 16px 40px}
  .atx{padding:22px}
  .stage{display:none}
  .step{min-height:0;opacity:1!important}
  .step::before{height:100%}
  .step .vis{display:block;margin-top:12px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px}
  .plans{grid-template-columns:minmax(0,1fr)}
  .dl{grid-template-columns:minmax(0,1fr)}
  .ab{gap:32px}
  .ab-inset{right:0;width:40%}
  .ab-inset figcaption{display:none}
  .ab-main figcaption{max-width:52%}
  .ab-f{grid-template-columns:1fr}
  footer .in{grid-template-columns:1fr 1fr}
}
@media (max-width:520px){
  .display .rot{display:grid;text-align:center}
  .tel a{font-size:18px}
  .files div{grid-template-columns:minmax(0,1fr) auto}
  .files .bars{display:none}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .mq .tr{flex-wrap:wrap;width:auto}
}
