/* ============================================================
   有据科技 · ANCORA — 官网样式 v3
   参考 Apple 的产品页语法：满幅影像、深色瓷砖、大字、极少的框线。
   两层：官网（浅 / 官方） +  信任与合规（深 / 档案）
   视角：佩戴者 ⇄ 组织，只换口径词，不动版式。
   ============================================================ */

:root{
  --bg:#ffffff;
  --alt:#f5f5f7;
  --ink:#1d1d1f;
  --sub:#6e6e73;
  --hair:rgba(0,0,0,.09);
  --hair-2:rgba(0,0,0,.16);

  --dark:#0a0a0b;
  --dark-2:#161618;
  --dark-ink:#f5f5f7;
  --dark-sub:#a1a1a6;
  --dark-hair:rgba(255,255,255,.12);

  --sans:"Inter","PingFang SC","Microsoft YaHei UI","Segoe UI",system-ui,sans-serif;
  --mono:ui-monospace,"Cascadia Mono","SFMono-Regular",Consolas,"Courier New",monospace;

  --maxw:1080px;
  --pad:clamp(20px,5vw,56px);
  --sec:clamp(84px,12vh,156px);
  --r:22px;
}
html[data-view="org"]{ --alt:#eceef0; }

*{ box-sizing:border-box; margin:0; }
html{ scroll-behavior:smooth; }
body{ font-family:var(--sans); color:var(--ink); background:var(--bg);
  -webkit-font-smoothing:antialiased; line-height:1.5; }
img{ display:block; max-width:100%; }
a{ color:inherit; text-decoration:none; }
button{ font:inherit; color:inherit; background:none; border:0; cursor:pointer; }
.mono{ font-family:var(--mono); }

/* 口径词 */
html[data-view="wearer"] .term > .c{ display:none; }
html[data-view="org"]    .term > .w{ display:none; }
.term > .c{ font-family:var(--mono); }

/* ============================ 顶栏 ============================ */
header{ position:fixed; top:0; left:0; right:0; z-index:60; height:50px;
  background:color-mix(in oklab, var(--bg) 72%, transparent);
  backdrop-filter:blur(20px) saturate(180%); border-bottom:1px solid var(--hair);
  transition:background .35s ease, border-color .35s ease, color .35s ease, opacity .5s ease; }
.hwrap{ max-width:var(--maxw); margin:0 auto; padding:0 var(--pad); height:50px;
  display:flex; align-items:center; gap:30px; }
.brand{ display:flex; align-items:baseline; gap:9px; font-weight:600; font-size:15px; letter-spacing:.01em; }
.brand small{ font-family:var(--mono); font-weight:500; font-size:8.5px; letter-spacing:.28em; color:var(--sub); }
/* 徽标：环 + 点，描边取 currentColor —— 纸面上是黑的，落到开屏那片暗场里自动转白，
   不用为两种底色各备一份资产 */
.brand .mark{ display:block; flex:none; width:21px; height:21px; align-self:center; margin-right:-2px; }
nav.main{ display:flex; gap:clamp(14px,2vw,28px); font-size:12.5px; }
nav.main a{ color:var(--ink); opacity:.82; white-space:nowrap; }
nav.main a:hover{ opacity:1; }
.hspace{ flex:1; }

.viewsw{ display:flex; align-items:center; gap:2px; font-size:11.5px; }
.viewsw button{ padding:5px 11px; border-radius:980px; color:var(--sub); }
.viewsw button:hover{ color:var(--ink); }
html[data-view="wearer"] .viewsw [data-set="wearer"],
html[data-view="org"]    .viewsw [data-set="org"]{ background:var(--ink); color:#fff; }

.hbuy{ font-size:12.5px; font-weight:600; }
.hburger{ display:none; width:16px; height:12px; position:relative; }
.hburger::before,.hburger::after{ content:""; position:absolute; left:0; right:0; height:1.5px; background:var(--ink); }
.hburger::before{ top:0; } .hburger::after{ bottom:0; }

/* 顶栏压在开屏影像上。仅在 JS 可用时透明；否则保持实底，避免白字压白底。 */
html.js header{ background:transparent; backdrop-filter:none; border-bottom-color:transparent; color:#fff; }
html.js header .brand small{ color:rgba(255,255,255,.62); }
html.js header nav.main a{ color:#fff; }
html.js header .viewsw button{ color:rgba(255,255,255,.72); }
html.js header .viewsw button:hover{ color:#fff; }
html.js header .hbuy{ color:#fff; }
html.js header .hburger::before,html.js header .hburger::after{ background:#fff; }
html.js[data-view="wearer"] header .viewsw [data-set="wearer"],
html.js[data-view="org"]    header .viewsw [data-set="org"]{ background:#fff; color:#000; }
html.js header.solid{ background:color-mix(in oklab, var(--bg) 72%, transparent);
  backdrop-filter:blur(20px) saturate(180%); border-bottom-color:var(--hair); color:var(--ink); }
html.js header.solid .brand small{ color:var(--sub); }
html.js header.solid nav.main a,html.js header.solid .hbuy{ color:var(--ink); }
html.js header.solid .viewsw button{ color:var(--sub); }
html.js header.solid .viewsw button:hover{ color:var(--ink); }
html.js header.solid .hburger::before,html.js header.solid .hburger::after{ background:var(--ink); }
html.js[data-view="wearer"] header.solid .viewsw [data-set="wearer"],
html.js[data-view="org"]    header.solid .viewsw [data-set="org"]{ background:var(--ink); color:#fff; }

/* 3D 接管开屏之后（html.stage3d，由 app.js 加）：上面那套白字只属于视频那一层。
   舞台换成浅色，顶栏转深字，但保持透明 —— 不压出一条实底。滚过开屏 .solid 照旧。 */
html.js.stage3d header:not(.solid){ background:transparent; backdrop-filter:none;
  border-bottom-color:transparent; color:var(--ink); }
html.js.stage3d header:not(.solid) .brand small{ color:var(--sub); }
html.js.stage3d header:not(.solid) nav.main a,
html.js.stage3d header:not(.solid) .hbuy{ color:var(--ink); }
html.js.stage3d header:not(.solid) .viewsw button{ color:var(--sub); }
html.js.stage3d header:not(.solid) .viewsw button:hover{ color:var(--ink); }
html.js.stage3d header .hburger::before,
html.js.stage3d header .hburger::after{ background:var(--ink); }
html.js.stage3d[data-view="wearer"] header:not(.solid) .viewsw [data-set="wearer"],
html.js.stage3d[data-view="org"]    header:not(.solid) .viewsw [data-set="org"]{ background:var(--ink); color:#fff; }

section[id]{ scroll-margin-top:64px; }

/* ============================ 按钮 ============================ */
.btn{ display:inline-flex; align-items:center; justify-content:center; gap:6px;
  font-size:14px; font-weight:500; padding:12px 24px; border-radius:980px;
  border:1px solid transparent; white-space:nowrap; transition:background .2s ease, opacity .2s ease; }
.btn--dark{ background:var(--ink); color:#fff; } .btn--dark:hover{ opacity:.86; }
.btn--light{ background:#fff; color:#000; } .btn--light:hover{ opacity:.9; }
.btn--line{ border-color:var(--hair-2); } .btn--line:hover{ border-color:var(--ink); }
.btn--darkline{ border-color:var(--dark-hair); color:var(--dark-ink); } .btn--darkline:hover{ border-color:#fff; }

/* ============================ 分区 ============================ */
.band{ padding:var(--sec) 0; }
.band--alt{ background:var(--alt); }
.band--dark{ background:var(--dark); color:var(--dark-ink); }
.band--tight{ padding:clamp(56px,8vh,104px) 0; }
.inner{ max-width:var(--maxw); margin:0 auto; padding:0 var(--pad); }

h1{ font-size:clamp(40px,6.6vw,84px); line-height:1.02; letter-spacing:-.02em; font-weight:700; }
h2{ font-size:clamp(30px,4.6vw,58px); line-height:1.08; letter-spacing:-.02em; font-weight:700; }
h3{ font-size:clamp(19px,2vw,26px); font-weight:600; letter-spacing:-.01em; }
.lede{ font-size:clamp(16px,1.5vw,19px); line-height:1.7; color:var(--sub); max-width:58ch; }
.band--dark .lede{ color:var(--dark-sub); }
.kicker{ font-size:12px; letter-spacing:.06em; color:var(--sub); }
.band--dark .kicker{ color:var(--dark-sub); }
.statement{ max-width:940px; }
.statement h2{ max-width:24ch; }
.statement .lede{ margin:24px 0 0; }

/* ============================ 开屏 ============================
   开屏是一段独立的片子，不是首页的首屏内容（html.splash 期间整站都让位）：
     ① 视频满幅，画面上什么都没有；鼠标点一下跳过
     ② 视频播完淡出 → 3D 接管（3d/index.html?embed=1，透明画布），走一遍五秒呈现
     ③ 落到多色平铺之后，顶栏与文字一起进场 —— 这时才算进了首页
   文字一律按浅色舞台配色（深字），落在画面中下部，五块表在中上部。 */
.hero{ position:relative; height:100vh; height:100svh; min-height:620px;
  overflow:hidden; background:var(--bg); color:var(--ink); }
.hero video{ position:absolute; inset:0; z-index:2; width:100%; height:100%;
  object-fit:cover; object-position:center; background:#000; transition:opacity .9s ease; }
/* 这里原来压着一层黑纱（.5 → .25 → .72），是给「视频上压白字」那版留的。
   现在开屏片自己不带站内文字，那一层只是在已经偏暗的片子上再蒙一层，
   整屏发闷 —— 去掉。文字进场要托底靠的是下面那层白纱（.hero-veil）。 */
html.js .hero.taken video{ opacity:0; }

/* 3D 那一层：满幅。视频播完淡入，五块表直接铺在这个官网页面上（顶栏一起露出来）。
   iframe 是替换元素：宽高必须写死，只给 top/bottom 会退回 300×150 的默认尺寸。 */
.hero-3d{ position:absolute; top:0; left:0; width:100%; height:100%; z-index:1; border:0;
  opacity:0; pointer-events:none; transition:opacity 1.1s ease; }
html.js .hero.taken .hero-3d{ opacity:1; }

/* 白纱：极淡的一层，不是一块白。顶上只给顶栏一点托底，中间几乎全开让五块表露出来，
   最底下到文字那一段才轻轻提一点白 —— 够深字压得住就行。 */
.hero-veil{ position:absolute; inset:0; z-index:4; opacity:0; pointer-events:none;
  transition:opacity 1s ease;
  background:linear-gradient(180deg, rgba(255,255,255,.34) 0%, rgba(255,255,255,0) 12%,
    rgba(255,255,255,0) 60%, rgba(255,255,255,.3) 80%, rgba(255,255,255,.48) 100%); }

/* 文字：居中一栏，靠下（justify-content:flex-end 让它的下沿固定，
   文字变多只会往上长，不会把版心顶跑） */
.hero-in{ position:relative; z-index:5; height:100%; max-width:var(--maxw); margin:0 auto;
  padding:0 var(--pad) clamp(74px,10vh,116px);
  display:flex; flex-direction:column; align-items:center; justify-content:flex-end; text-align:center; }
.hero .kicker{ color:var(--sub); margin-bottom:18px; }
/* 开屏标题比站内 h1 收一号：这一屏要同时让出画面给五块表 */
.hero h1{ color:var(--ink); font-size:clamp(34px,5.2vw,66px); }
.hero-sub{ margin-top:22px; font-size:clamp(16px,1.7vw,21px); line-height:1.6;
  color:var(--sub); max-width:38ch; }
.hero-cta{ display:flex; flex-wrap:wrap; gap:12px; margin-top:36px; justify-content:center; }
.hero-meta{ position:absolute; left:0; right:0; bottom:0; z-index:5; border-top:1px solid var(--hair); }
.hero-meta .inner{ display:flex; flex-wrap:wrap; gap:16px 40px; padding-top:16px; padding-bottom:16px;
  font-size:12px; color:var(--sub); justify-content:center; }

/* 白纱与文字：只认 .titled。没有 JS 时这个类不会出现，就按静态首屏显示文字 */
html.js .hero-in, html.js .hero-meta{ opacity:0; visibility:hidden; pointer-events:none;
  transform:translateY(10px);
  transition:opacity 1s ease, transform 1s ease, visibility 0s linear 1s; }
html.js .hero.titled .hero-veil{ opacity:1; }
html.js .hero.titled .hero-in, html.js .hero.titled .hero-meta{ opacity:1; visibility:visible;
  pointer-events:auto; transform:none;
  transition:opacity 1s ease, transform 1s ease, visibility 0s; }

/* 开屏期间：视频那一段整站让位。
   splash = 顶栏藏起来；locked = 页面不滚（五秒呈现途中也不许滚跑）。
   3D 一接管就去掉 splash —— 顶栏露出来，这一屏就是官网页面的样子；
   落到平铺、文字进场时再去掉 locked。 */
html.js.splash header{ opacity:0; pointer-events:none; }
html.js.locked, html.js.locked body{ overflow:hidden; }

/* ============================ 影片 ============================
   这一屏只有一条：满幅影像 + 一枚细圈播放键。没有标题、没有说明、没有出品行 ——
   跟大疆、Apple 的影片位一样，画面自己说话。上下各留的是相邻分区的间距，
   所以它看上去是「两段内容之间的一整条影像」，而不是页面里的一个组件。
   仍然不自动播、不预载：点了才加载整段。 */
.film-band{ background:var(--dark); }
.film{ position:relative; width:100%; aspect-ratio:16 / 9;
  overflow:hidden; background:var(--dark); }
/* 源片本身就是 16:9（1280×720），盒子按同一比例走，所以画面永远铺满、不裁也不留边。
   这里原来挂着 max-height:min(80vh,860px)：宽屏上盒子被压到 2.5:1，比片子扁得多，
   再配 object-fit:cover 就把画面上下各切掉一截（1920×950 上只剩 70% 的画面）。
   片子位就该让画面说话 —— 宁可这一条比视口高一点、滚一屏，也不动它一寸。 */
.film video{ display:block; width:100%; height:100%; object-fit:contain; object-position:center;
  background:transparent;
  transition:transform 1.2s cubic-bezier(.2,.7,.2,1), filter .6s ease; }
/* 静帧先压一档（暗一点、淡一点）：像片子自己的一格，细圈才立得住。
   播起来就交还给原片。 */
.film:not(.on) video{ filter:contrast(1.05) saturate(.9) brightness(.9); }
.film:not(.on):hover video{ transform:scale(1.025); }
/* 没播的时候再压一层很浅的暗；播起来就撤掉 */
.film::after{ content:""; position:absolute; inset:0; z-index:0; pointer-events:none;
  background:linear-gradient(180deg, rgba(0,0,0,.12) 0%, rgba(0,0,0,.22) 55%, rgba(0,0,0,.36) 100%);
  transition:opacity .5s ease; }
.film.on::after{ opacity:0; }
.film-play{ position:absolute; left:50%; top:50%; z-index:1; transform:translate(-50%,-50%);
  width:clamp(74px,6.6vw,98px); aspect-ratio:1; border-radius:50%; display:grid; place-items:center;
  color:#fff; border:1px solid rgba(255,255,255,.55); background:rgba(255,255,255,.07);
  -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px);
  transition:transform .35s ease, background .35s ease, border-color .35s ease, opacity .4s ease; }
.film-play svg{ width:14px; height:17px; fill:currentColor; margin-left:4px; }
.film-play:hover{ background:rgba(255,255,255,.16); border-color:rgba(255,255,255,.9);
  transform:translate(-50%,-50%) scale(1.06); }
.film-play:focus-visible{ outline:2px solid #fff; outline-offset:5px; }
.film.on .film-play{ opacity:0; pointer-events:none; }

/* ============================ 瓷砖 ============================ */
.tiles{ display:grid; grid-template-columns:1fr 1fr; gap:14px; }
.tile{ position:relative; border-radius:var(--r); overflow:hidden; min-height:540px;
  padding:clamp(28px,3.2vw,52px); display:flex; flex-direction:column; }
.tile--dark{ background:var(--dark); color:var(--dark-ink); }
.tile--light{ background:var(--alt); color:var(--ink); }
.tile .kicker{ margin-bottom:16px; }
.tile h3{ font-size:clamp(24px,2.8vw,38px); }
.tile p{ margin-top:16px; font-size:15px; line-height:1.7; max-width:34ch; opacity:.82; }
.tile .link{ margin-top:22px; font-size:14px; font-weight:600; }
.tile .link::after{ content:" →"; }
.tile .art{ margin-top:auto; padding-top:34px; }
.tile--light .art{ background:#fff; border-radius:16px; height:320px; overflow:hidden; padding-top:0; }
.tile--light .art img{ width:100%; height:100%; object-fit:cover; object-position:center; border-radius:0; }
.glossary{ margin-top:clamp(40px,6vh,64px); padding-top:26px; border-top:1px solid var(--hair);
  display:flex; flex-wrap:wrap; align-items:baseline; gap:12px 20px; }
.glossary p{ font-size:15px; color:var(--sub); }
.glossary .term .w,.glossary .term .c{ color:var(--ink); font-weight:600; }

.mock{ border:1px solid var(--dark-hair); border-radius:14px; overflow:hidden; font-family:var(--mono); font-size:11.5px; }
.mock .row{ display:flex; justify-content:space-between; gap:14px; padding:12px 15px; border-bottom:1px solid var(--dark-hair); color:var(--dark-sub); }
.mock .row:last-child{ border-bottom:0; }
.mock .row b{ color:#fff; font-weight:500; }
.mock .row .ok{ color:#cfe3d6; }

/* ============================ 能力 ============================ */
.caps{ display:grid; grid-template-columns:repeat(3,1fr); gap:0 clamp(24px,4vw,56px); }
.cap{ padding:34px 0 34px; border-top:1px solid var(--hair); }
.band--dark .cap{ border-color:var(--dark-hair); }
.cap .n{ font-family:var(--mono); font-size:12px; color:var(--sub); }
.band--dark .cap .n{ color:var(--dark-sub); }
.cap h3{ margin-top:16px; font-size:20px; }
.cap p{ margin-top:10px; font-size:14px; line-height:1.7; color:var(--sub); }
.band--dark .cap p{ color:var(--dark-sub); }
.caps-note{ margin-top:56px; font-size:clamp(20px,2.4vw,30px); font-weight:600; letter-spacing:-.01em; }

/* ============================ 交互演示 ============================ */
.demo-grid{ display:grid; grid-template-columns:minmax(180px,.66fr) 1.55fr; gap:clamp(24px,4vw,64px); align-items:start; }
.steplist{ list-style:none; display:grid; }
.steplist button{ display:flex; gap:14px; align-items:baseline; width:100%; text-align:left;
  padding:15px 0; border-top:1px solid var(--dark-hair); color:var(--dark-sub); transition:color .2s ease; }
.steplist li:last-child button{ border-bottom:1px solid var(--dark-hair); }
.steplist .n{ font-family:var(--mono); font-size:11px; }
.steplist .t{ font-size:14px; }
.steplist button:hover{ color:var(--dark-ink); }
.steplist button.on{ color:#fff; } .steplist button.on .t{ font-weight:600; }

.panel{ display:none; }
.panel.on{ display:block; animation:fade .45s ease; }
@keyframes fade{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }
.screen{ border:1px solid var(--dark-hair); border-radius:18px; background:var(--dark-2);
  padding:clamp(26px,3vw,44px); min-height:360px; display:flex; flex-direction:column; }
.screen .s-no{ font-family:var(--mono); font-size:11px; letter-spacing:.16em; color:var(--dark-sub); }
.screen h3{ margin:22px 0 14px; font-size:clamp(20px,2.2vw,28px); color:#fff; }
.screen p{ color:var(--dark-sub); font-size:14px; line-height:1.75; max-width:52ch; }
.screen .line{ margin-top:auto; padding-top:24px; font-family:var(--mono); font-size:12px; line-height:1.9;
  color:#cfe3d6; border-top:1px solid var(--dark-hair); }
.screen .line b{ color:#fff; font-weight:500; }
.demo-ctrl{ display:flex; align-items:center; gap:18px; margin-top:20px; font-size:12.5px; color:var(--dark-sub); }
.demo-ctrl .bar{ flex:1; height:2px; background:var(--dark-hair); position:relative; overflow:hidden; }
.demo-ctrl .bar i{ position:absolute; left:0; top:0; height:100%; width:0; background:#fff; transition:width .4s ease; }
.demo-ctrl button{ padding:6px 15px; border:1px solid var(--dark-hair); border-radius:980px; font-size:12px; color:var(--dark-ink); }
.demo-ctrl button:hover{ border-color:#fff; }

/* ============================ 一次派单（四段实拍） ============================
   滑动式：每段占一屏宽，当前那屏在中间，其余的在两侧（隐不越界）。
   播完一段自动滑到下一段并继续播，不需要按播放键。
   细节：一段只有一个 <video>，切到哪屏就哪屏在播（只有一个在播，带声），
   其余的停在后面。这样无声的后面不会占用编解器，也不会乱播。 */
.flowband{ background:var(--alt); overflow:hidden; }
/* 这一段的 .inner 取消最大宽度：让轨道铺满整个视口，
   视频横向拉满；每一屏正好一个视口宽，滑动一屏就换一段 */
.flowband .inner{ padding-bottom:0; max-width:none; padding-left:0; padding-right:0; }
.flowband .flowhead{ padding:0 var(--pad); }
.flowband .flow{ padding-left:0; padding-right:0; }

.flowhead{ display:grid; grid-template-columns:1fr auto; gap:40px; align-items:end; }
.flowhead h2{ max-width:20ch; }
.flowhead .lede{ margin-top:20px; max-width:52ch; }
@media (max-width:920px){ .flowhead{ grid-template-columns:1fr; gap:28px; } }

.flowctl{ display:flex; align-items:center; gap:10px; }
.flowbtn{ width:42px; height:42px; border-radius:50%; border:1px solid var(--hair-2);
  display:grid; place-items:center; color:var(--ink); transition:border-color .3s ease, background .3s ease; }
.flowbtn svg{ width:11px; height:13px; fill:currentColor; }
.flowbtn[data-flow-prev] svg{ transform:rotate(180deg); }
.flowbtn:hover{ border-color:var(--ink); background:rgba(0,0,0,.03); }
.flowbtn:focus-visible{ outline:2px solid var(--ink); outline-offset:3px; }
.flowsnd{ padding:10px 18px; border-radius:980px; border:1px solid var(--hair-2);
  font-size:12.5px; color:var(--sub); transition:color .3s ease, border-color .3s ease; }
.flowsnd:hover{ color:var(--ink); border-color:var(--ink); }
.flowsnd[aria-pressed="true"]{ color:var(--ink); border-color:var(--ink); }
.flowsnd:focus-visible{ outline:2px solid var(--ink); outline-offset:3px; }

/* 轨道：横向滑动的四屏 */
.flow{ position:relative; margin-top:clamp(36px,5vh,60px); }
.flow-rail{ display:flex;
  overflow-x:auto; scroll-snap-type:x mandatory; scroll-behavior:smooth;
  /* 轨道向左右溢出到页面边 */
  padding:0 0 clamp(28px,4vh,44px);
  margin:0;
  scrollbar-width:none;
  --cellw:100%; --cellgap:0px; }
.flow-rail::-webkit-scrollbar{ display:none; }
/* 左右两段留白（宽度由 JS 按实际屏宽算）——
   有了它，第一屏和最后一屏也能被滚到画面正中，而不是贴在边上 */
.flow-rail::before,.flow-rail::after{ content:''; flex:0 0 var(--flowpad,0px);
  scroll-snap-align:none; }

.flow-cell{ flex:0 0 var(--cellw); scroll-snap-align:center;
  margin:0 var(--cellgap) 0 0; }
.flow-cell:last-of-type{ margin-right:0; }
/* 视频回到原本的尺寸（不超过 1080 宽、居中），
   轨道本身仍然是满视口宽的 */
.flow-vid{ position:relative; width:min(1080px, 100%); margin:0 auto;
  aspect-ratio:16/9; border-radius:var(--r);
  overflow:hidden;
  background:#0a0a0b; box-shadow:0 18px 50px -28px rgba(0,0,0,.5); }
.flow-vid video{ display:block; width:100%; height:100%;
  object-fit:cover; background:#0a0a0b; }
.flow-badge{ position:absolute; left:16px; top:16px; z-index:2;
  min-width:34px; height:34px; padding:0 10px; border-radius:980px;
  display:grid; place-items:center; font-size:12px; letter-spacing:.06em;
  color:#fff; background:rgba(0,0,0,.42); border:1px solid rgba(255,255,255,.3);
  -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); }

/* 进度条：当前屏的播放进度（跟视频同宽） */
.flow-bar{ height:2px; max-width:1080px; margin:14px auto 0; background:var(--hair-2); position:relative; overflow:hidden; }
.flow-bar i{ position:absolute; left:0; top:0; height:100%; width:0; background:var(--ink); }

.flow-cell figcaption{ padding:18px 0 0; max-width:none; }
/* 说明文字跟视频同宽、同居中 */
.flow-cell figcaption{ max-width:1080px; margin:0 auto; }
.flow-k{ display:block; font-size:16px; font-weight:600; letter-spacing:-.01em; }
.flow-cell figcaption p{ margin-top:10px; font-size:14.5px; line-height:1.75; color:var(--sub); max-width:62ch; }
.flow-cell figcaption b{ color:var(--ink); font-weight:600; }

/* 当前屏：略提亮，让人看出这一屏是“正在说话”。
   不再缩放 —— 缩放会让非当前屏的横向拉满打折 */
.flow-cell{ opacity:.55; transition:opacity .6s ease; }
.flow-cell.is-on{ opacity:1; }
@media (prefers-reduced-motion:reduce){ .flow-rail{ scroll-behavior:auto; } }

/* 移动端：一屏一样宽，文案放在画面下面 */
@media (max-width:760px){
  .flow-cell{ flex:0 0 100%; }
  .flow-rail{ --cellgap:0px; }
  .flow-vid{ border-radius:16px; width:calc(100% - var(--pad) * 2); }
  .flow-cell figcaption{ padding-top:14px; }
}

/* ============================ 硬件 ============================ */
.hw-top{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(24px,4vw,64px); align-items:center; }
.hw-top .shot{ background:#fff; border-radius:var(--r); overflow:hidden; aspect-ratio:4/5; }
.hw-top .shot img{ width:100%; height:100%; object-fit:cover; object-position:center; }
.specs{ display:grid; grid-template-columns:repeat(4,1fr); gap:0 clamp(20px,3vw,44px); margin-top:clamp(48px,7vh,88px); }
.spec{ border-top:1px solid var(--dark-hair); padding-top:22px; }
.spec b{ display:block; font-size:clamp(22px,2.4vw,30px); font-weight:600; letter-spacing:-.02em; }
.spec span{ font-size:12.5px; color:var(--dark-sub); display:block; margin-top:8px; }
.hw-cols{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(24px,4vw,64px); margin-top:clamp(48px,7vh,88px); }
.hw-cols h3{ font-size:19px; }
.hw-cols p{ margin-top:14px; font-size:14.5px; line-height:1.75; color:var(--dark-sub); max-width:44ch; }

/* ============================ 开发者 ============================ */
.code{ background:var(--dark); color:var(--dark-ink); border-radius:16px;
  padding:clamp(24px,3vw,34px); font-family:var(--mono); font-size:12.5px; line-height:1.9; overflow-x:auto; }
.code .cm{ color:#7f8a85; } .code .k{ color:#cfe3d6; } .code .s{ color:#a9b6ae; }
.steps{ display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(20px,3vw,44px); margin-top:clamp(48px,7vh,84px); }.step{ border-top:1px solid var(--hair); padding-top:20px; }
.step .n{ font-family:var(--mono); font-size:12px; color:var(--sub); }
.step h3{ margin-top:14px; font-size:19px; }
.step p{ margin-top:9px; font-size:14px; color:var(--sub); line-height:1.7; }

/* 上手：整机先摆着，点一下镜头贴到表盘。iframe 里是 three 场景，透明底，直接落在纸面上 */
.try3d{ margin-top:clamp(40px,6vh,72px); }
.try3d-stage{ position:relative; height:clamp(420px,62vh,600px); max-width:820px; margin:0 auto; }
.try3d-frame{ display:block; width:100%; height:100%; border:0; background:transparent; }

/* ============================ 场景 ============================ */
.cases{ display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(20px,3vw,44px); margin-top:clamp(48px,7vh,80px); }
.case{ border-top:1px solid var(--hair); padding-top:24px; }
.case .id{ font-family:var(--mono); font-size:11.5px; color:var(--sub); }
.case h3{ margin-top:14px; font-size:22px; }
.case p{ margin-top:14px; font-size:14px; line-height:1.75; color:var(--sub); }
.case .cost{ margin-top:16px; padding-top:16px; border-top:1px solid var(--hair); font-size:13.5px; color:var(--ink); }

/* ============================ 信任条 ============================ */
.trust-lead{ display:grid; grid-template-columns:1fr auto; gap:40px; align-items:end; }
.trust-lead .lede{ margin-top:22px; }

/* 「分级与筛选」引导块：与 trust-lead 同构，但用一条分隔线另起 */
.band-lead{ display:grid; grid-template-columns:1fr auto; gap:40px; align-items:end;
  margin-top:clamp(44px,6vh,68px); padding-top:clamp(40px,5vh,60px); border-top:1px solid var(--hair); }
.band-lead .lede{ margin-top:22px; max-width:60ch; }
@media (max-width:920px){ .band-lead{ grid-template-columns:1fr; } }

/* ============================ 定价 ============================ */
.tiers{ display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin-top:clamp(48px,7vh,76px); }
.tier{ background:var(--bg); border:1px solid var(--hair); border-radius:var(--r);
  padding:clamp(26px,2.8vw,38px); display:flex; flex-direction:column; }
.band--alt .tier{ background:#fff; }
.tier--hi{ box-shadow:0 0 0 1.5px var(--ink) inset; }
.tier .tag{ font-size:12px; color:var(--sub); }
.tier h3{ margin-top:16px; font-size:22px; }
.tier .price{ font-size:clamp(30px,3.2vw,42px); font-weight:700; letter-spacing:-.02em; margin-top:12px; }
.tier .price small{ font-size:13px; font-weight:500; color:var(--sub); }
.tier ul{ list-style:none; margin:24px 0 28px; display:grid; gap:12px; font-size:14px; color:var(--ink); }
.tier li::before{ content:"—"; margin-right:10px; color:var(--sub); }
.tier .btn{ margin-top:auto; }

/* ============================ 页脚 ============================ */
footer.site{ background:var(--alt); }
.fwrap{ max-width:var(--maxw); margin:0 auto; padding:clamp(56px,8vh,80px) var(--pad) 44px; }
.fcols{ display:grid; grid-template-columns:1.5fr repeat(4,1fr); gap:clamp(22px,3vw,44px); }
.fcols h4{ font-size:12px; font-weight:600; margin-bottom:16px; }
.fcols a{ display:block; font-size:13px; color:var(--sub); padding:5px 0; }
.fcols a:hover{ color:var(--ink); }
.fbrand .brand{ margin-bottom:14px; }
.fbrand .brand .mark{ width:22px; height:22px; }
.fbrand p{ font-size:13px; color:var(--sub); max-width:32ch; line-height:1.7; }
.fbottom{ margin-top:52px; padding-top:24px; border-top:1px solid var(--hair-2); display:flex; flex-wrap:wrap; gap:10px 26px;
  font-size:12px; color:var(--sub); }

/* ============================ 移动端 ============================ */
@media (max-width:920px){
  nav.main{ display:none; }
  .hburger{ display:block; }
  .tiles,.caps,.steps,.cases,.tiers{ grid-template-columns:1fr 1fr; }
  .hw-top,.hw-cols,.trust-lead{ grid-template-columns:1fr; }
  .specs{ grid-template-columns:1fr 1fr; gap:34px 20px; }
  .fcols{ grid-template-columns:1fr 1fr; }
  .demo-grid{ grid-template-columns:1fr; gap:28px; }
  .steplist{ grid-auto-flow:column; grid-auto-columns:max-content; overflow-x:auto; gap:8px; padding-bottom:6px; }
  .steplist button{ border:1px solid var(--dark-hair); border-radius:980px; padding:9px 15px; white-space:nowrap; }
  .steplist li:last-child button{ border-bottom:1px solid var(--dark-hair); }
}
@media (max-width:620px){
  .tiles,.caps,.steps,.cases,.tiers,.specs{ grid-template-columns:1fr; }
  .tile{ min-height:auto; }
  .hero{ min-height:520px; }
}

.js .reveal{ opacity:0; transform:translateY(16px); transition:opacity .7s ease, transform .7s ease; }
.js .reveal.in{ opacity:1; transform:none; }
@media (prefers-reduced-motion:reduce){ *{ animation:none !important; transition:none !important; } .js .reveal{ opacity:1; transform:none; } }
