/* 龙虾AGI通用实验室 · 实验室版式（夜 / 纸） */
:root{
  --serif:"LabSerif","Noto Serif SC","Source Han Serif SC","Songti SC","STSong",serif;
  --disp:"LabDisplay","Instrument Serif","Times New Roman",Georgia,serif;
  --mono:"LabMono","JetBrains Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;
  --ease:cubic-bezier(.7,0,.2,1);--out:cubic-bezier(.16,1,.3,1);
  --gut:clamp(16px,4vw,56px);--maxw:1320px;--navh:72px;
}
html[data-theme=night]{--bg:#08080b;--bg2:#0f0f14;--bg3:#18181f;--ink:#efeae2;--ink2:#aba69d;--mute:#6f6c65;
  --line:rgba(239,234,226,.09);--line2:rgba(239,234,226,.2);--accent:#ff5b37;--accent2:#ff9b6c;--glow:#ffd6bb;--on-accent:#0b0b0e;
  --ok:#7ee2b8;--shadow:0 40px 100px -30px rgba(0,0,0,.7);color-scheme:dark}
html[data-theme=paper]{--bg:#f2ede3;--bg2:#e9e2d4;--bg3:#ddd4c2;--ink:#16140f;--ink2:#4e483f;--mute:#8e8676;
  --line:rgba(22,20,15,.11);--line2:rgba(22,20,15,.24);--accent:#c0392b;--accent2:#d9653f;--glow:#f4bf9f;--on-accent:#f2ede3;
  --ok:#2d8a66;--shadow:0 40px 90px -40px rgba(70,45,20,.4);color-scheme:light}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.8 var(--sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:clip;
  transition:background-color .5s,color .5s}
a{color:inherit;text-decoration:none}
img,svg{max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
::selection{background:var(--accent);color:var(--on-accent)}
.mono{font-family:var(--mono);font-weight:400;letter-spacing:.06em}
.num{font-family:var(--disp);font-weight:400;letter-spacing:-.02em;font-variant-numeric:lining-nums}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gut)}
.skip{position:fixed;left:12px;top:-60px;z-index:300;background:var(--accent);color:var(--on-accent);padding:8px 14px;border-radius:8px}
.skip:focus{top:12px}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}

/* 胶片颗粒 */
.grain{position:fixed;inset:-50%;z-index:90;pointer-events:none;opacity:.07;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 1.2s steps(6) infinite}
html[data-theme=paper] .grain{opacity:.16;mix-blend-mode:multiply;filter:invert(1) sepia(.4)}
@keyframes grain{0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}60%{transform:translate(-2%,-1%)}80%{transform:translate(3%,3%)}100%{transform:translate(0,0)}}

/* ================= 导航 ================= */
.nav{position:fixed;top:0;left:0;right:0;z-index:80;height:var(--navh);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;
  padding:0 var(--gut);transition:transform .6s var(--out),background-color .4s,border-color .4s;border-bottom:1px solid transparent}
.nav.scrolled{background:color-mix(in srgb,var(--bg) 72%,transparent);-webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);border-color:var(--line)}
.nav.hide{transform:translateY(-100%)}
.nav-brand{display:flex;align-items:center;gap:12px;justify-self:start}
.mark{width:34px;height:34px;border-radius:10px;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font:900 19px/1 var(--serif);
  transition:transform .6s var(--out),border-radius .6s var(--out)}
.nav-brand:hover .mark{transform:rotate(-8deg) scale(1.06);border-radius:50%}
.nb-t{font:600 15px/1.1 var(--serif);letter-spacing:.04em}
.nb-t small{display:block;font-size:9.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--mute);margin-top:5px}
.nav-links{display:flex;gap:4px;padding:5px;border-radius:999px;border:1px solid var(--line);background:color-mix(in srgb,var(--bg) 50%,transparent)}
.nav-links a{font-size:13.5px;letter-spacing:.12em;padding:6px 16px;border-radius:999px;transition:background-color .3s,color .3s;white-space:nowrap}
.nav-links a:hover{color:var(--accent)}
.nav-links a.on{background:var(--ink);color:var(--bg)}
.nav-tools{justify-self:end;display:flex;align-items:center;gap:14px}
.tsw{position:relative;display:flex;border:1px solid var(--line2);border-radius:999px;padding:3px}
.tsw button{position:relative;z-index:1;width:34px;height:28px;border-radius:999px;font:600 13px/1 var(--serif);color:var(--mute);transition:color .4s}
.tsw button[aria-pressed=true]{color:var(--on-accent)}
.tsw-thumb{position:absolute;top:3px;left:3px;width:34px;height:28px;border-radius:999px;background:var(--accent);transition:transform .6s var(--out)}
html[data-theme=paper] .tsw-thumb{transform:translateX(34px)}
.nav-classic{font-size:11px;color:var(--mute);letter-spacing:.14em;white-space:nowrap}
.nav-classic:hover{color:var(--accent)}
@media(max-width:820px){.nb-t{display:none}.nav{grid-template-columns:auto 1fr auto;gap:10px}.nav-links{justify-self:center}.nav-links a{padding:6px 10px;font-size:13px;letter-spacing:.06em}.nav-classic{display:none}}
@media(max-width:420px){.nav-links{padding:3px;gap:0}.nav-links a{padding:5px 8px;font-size:12.5px}.tsw button,.tsw-thumb{width:30px}html[data-theme=paper] .tsw-thumb{transform:translateX(30px)}.mark{width:30px;height:30px}}

/* ================= 自定义光标 ================= */
.cur{display:none}
html.cursor-on .cur{display:block;position:fixed;inset:0;pointer-events:none;z-index:250}
html.cursor-on,html.cursor-on a,html.cursor-on button{cursor:none}
html.cursor-on input,html.cursor-on textarea{cursor:text}
.cur-dot,.cur-ring{position:absolute;left:0;top:0;border-radius:50%;will-change:transform}
.cur-dot{width:6px;height:6px;margin:-3px 0 0 -3px;background:var(--accent)}
.cur-ring{width:38px;height:38px;margin:-19px 0 0 -19px;border:1px solid var(--line2);display:grid;place-items:center;transition:width .45s var(--out),height .45s var(--out),margin .45s var(--out),background-color .35s,border-color .35s}
.cur-ring b{font:500 11px/1 var(--sans);letter-spacing:.1em;color:var(--on-accent);opacity:0;transition:opacity .25s;white-space:nowrap}
.cur.link .cur-ring{width:54px;height:54px;margin:-27px 0 0 -27px;border-color:var(--accent)}
.cur.label .cur-ring{width:84px;height:84px;margin:-42px 0 0 -42px;background:var(--accent);border-color:var(--accent)}
.cur.label .cur-ring b{opacity:1}
.cur.label .cur-dot{opacity:0}
.cur.down .cur-ring{transform:scale(.85)}

/* ================= 开场加载 ================= */
.loader{display:none}
html.preload .loader{display:flex;position:fixed;inset:0;z-index:200;background:var(--bg);align-items:flex-end;justify-content:stretch;padding:var(--gut);
  animation:ldOut .9s var(--ease) 4.5s forwards;transition:transform 1s var(--ease)}
html.preload.loaded .loader{transform:translateY(-100%)}
@keyframes ldOut{to{transform:translateY(-100%)}}
.ld-in{width:100%;display:grid;grid-template-columns:1fr auto;align-items:end;gap:12px 24px}
.ld-brand{font:900 clamp(28px,5vw,64px)/1.1 var(--serif);letter-spacing:.02em}
.ld-num{font-size:clamp(64px,12vw,180px);line-height:.8;color:var(--accent);font-weight:300;letter-spacing:-.04em}
.ld-bar{grid-column:1/-1;height:1px;background:var(--line);position:relative;overflow:hidden}
.ld-bar i{position:absolute;inset:0;background:var(--accent);transform:scaleX(0);transform-origin:left}
.ld-cap{grid-column:1/-1;font-size:11px;color:var(--mute);letter-spacing:.3em}

/* ================= 页面转场幕布 ================= */
.curtain{position:fixed;inset:0;z-index:150;pointer-events:none}
.curtain i{position:absolute;inset:0;transform:translateY(100%)}
.curtain .c1{background:var(--accent)}
.curtain .c2{background:var(--bg3)}
.c-word{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font:900 clamp(22px,3vw,40px)/1 var(--serif);letter-spacing:.08em;opacity:0;white-space:nowrap}
.c-word em{font:italic 400 1.15em/1 var(--disp);color:var(--accent);margin:0 .08em}
html.leaving .curtain{pointer-events:auto}
html.leaving .curtain .c1{animation:cIn .55s var(--ease) forwards}
html.leaving .curtain .c2{animation:cIn .55s var(--ease) .08s forwards}
html.leaving .c-word{animation:fadeIn .3s .35s forwards}
html.arrive .curtain .c1{transform:none;animation:cOut .8s var(--ease) .18s forwards}
html.arrive .curtain .c2{transform:none;animation:cOut .8s var(--ease) .05s forwards}
html.arrive .c-word{opacity:1;animation:fadeOut .25s forwards}
@keyframes cIn{from{transform:translateY(100%)}to{transform:none}}
@keyframes cOut{from{transform:none}to{transform:translateY(-100%)}}
@keyframes fadeIn{to{opacity:1}}
@keyframes fadeOut{to{opacity:0}}
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}

/* ================= 文字拆分与出现 ================= */
.cm{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.1em;margin-bottom:-.1em}
.ch{display:inline-block;will-change:transform}
html.rv-ok [data-split]:not([data-hero-title]) .ch{transform:translateY(112%);transition:transform 1.1s var(--out) calc(var(--i,0) * 22ms)}
html.rv-ok [data-split].split-in .ch{transform:none}
html.rv-ok [data-reveal]{opacity:0;transform:translateY(36px);transition:opacity 1s var(--out),transform 1.2s var(--out)}
html.rv-ok [data-reveal].in{opacity:1;transform:none}

/* ================= 按钮 ================= */
.btn{position:relative;isolation:isolate;overflow:hidden;display:inline-flex;align-items:center;gap:10px;height:50px;padding:0 24px;border-radius:999px;
  background:var(--ink);color:var(--bg);font:600 14px/1 var(--sans);letter-spacing:.1em;white-space:nowrap;transition:color .45s var(--out),transform .5s var(--out)}
.btn::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--accent);border-radius:inherit;transform:translateY(101%);transition:transform .55s var(--out)}
.btn:hover{color:var(--on-accent)}
.btn:hover::before{transform:none}
.btn span{display:inline-block;transition:transform .5s var(--out)}
.btn:hover span{transform:translate(3px,-3px)}
.btn.o{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line2)}
.lnk{font-size:14px;letter-spacing:.08em;background:linear-gradient(currentColor,currentColor) left bottom/0 1px no-repeat;transition:background-size .5s var(--out),color .3s;padding-bottom:2px}
.lnk:hover{background-size:100% 1px;color:var(--accent)}

/* ================= 区块标题 ================= */
.sh{position:relative;display:grid;gap:10px;margin-bottom:clamp(36px,6vh,64px)}
.sh-no{display:block;font-size:12px;letter-spacing:.2em;color:var(--accent);text-transform:uppercase}
.sh-t{margin:0;font:900 clamp(64px,10vw,168px)/.92 var(--serif);letter-spacing:-.01em}
.sh-sub{margin:6px 0 0;font-size:17px;line-height:1.8;color:var(--ink2);max-width:520px}
.sh-more{justify-self:start;font-size:12.5px;letter-spacing:.14em;border-bottom:1px solid var(--line2);padding-bottom:3px;transition:color .3s,border-color .3s}
.sh-more:hover{color:var(--accent);border-color:var(--accent)}
@media(min-width:900px){
  .wrap>.sh{grid-template-columns:1fr auto;column-gap:48px;align-items:end}
  .wrap>.sh .sh-no{grid-column:1/-1}
  .wrap>.sh .sh-t{grid-column:1;grid-row:2/4}
  .wrap>.sh .sh-sub{grid-column:2;grid-row:2;text-align:right;justify-self:end;max-width:420px}
  .wrap>.sh .sh-more{grid-column:2;grid-row:3;justify-self:end;margin-bottom:.9em}
}

/* ================= 首页 · 开场 ================= */
.hero{position:relative}
.hero-pin{position:relative;height:420vh}
.hero-stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden}
/* 全页粒子画布：固定在所有内容背后（z-index:-1 落在根层叠上下文里，任何不透明背景都会盖住它） */
.gl-bg{position:fixed;inset:0;z-index:-1;width:100%;height:100%;display:block;pointer-events:none}
.hero-fallback{position:absolute;inset:0;display:none;background:radial-gradient(40% 50% at 70% 42%,color-mix(in srgb,var(--accent) 40%,transparent),transparent 70%),radial-gradient(30% 40% at 72% 45%,var(--glow),transparent 60%);opacity:.35;filter:blur(10px)}
html.no-gl .hero-fallback{display:block}
html.no-gl .gl-bg{display:none}
.hero-stage::after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 90% at 50% 40%,transparent 55%,color-mix(in srgb,var(--bg) 85%,transparent) 100%)}
.hero-meta{position:absolute;z-index:2;top:calc(var(--navh) + 18px);left:var(--gut);right:var(--gut);display:flex;justify-content:space-between;gap:16px;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--mute)}
.hero-copy{position:absolute;z-index:2;left:var(--gut);right:var(--gut);bottom:clamp(64px,11vh,120px);max-width:1180px}
.hero-kick{display:flex;align-items:center;gap:14px;margin:0 0 26px;font-size:11.5px;letter-spacing:.2em;color:var(--ink2);text-transform:uppercase}
.hero-kick i{width:44px;height:1px;background:var(--accent)}
.hero-title{margin:0;font:900 clamp(46px,8.6vw,156px)/1.02 var(--serif);letter-spacing:-.015em}
.hero-title .l{display:block}
.hero-title em{font-style:normal;color:var(--accent)}
.hero-steps{position:absolute;z-index:2;left:var(--gut);bottom:clamp(76px,12vh,130px);width:min(640px,86vw);list-style:none;margin:0;padding:0}
.hero-steps li{position:absolute;left:0;bottom:0;opacity:0;visibility:hidden}
.hero-steps .mono{display:block;font-size:11.5px;letter-spacing:.2em;color:var(--accent);text-transform:uppercase;margin-bottom:14px}
.hero-steps b{display:block;font:600 clamp(26px,2.8vw,42px)/1.35 var(--serif)}
.hero-scroll{position:absolute;z-index:2;right:var(--gut);bottom:34px;display:flex;align-items:center;gap:14px;font-size:10.5px;letter-spacing:.24em;color:var(--mute);text-transform:uppercase}
.hero-scroll i{position:relative;width:1px;height:46px;background:var(--line2);overflow:hidden}
.hero-scroll i::after{content:"";position:absolute;left:0;top:-50%;width:1px;height:50%;background:var(--accent);animation:drip 1.8s var(--ease) infinite}
@keyframes drip{to{top:100%}}
.hero-prog{position:absolute;z-index:2;left:var(--gut);bottom:34px;display:flex;align-items:center;gap:12px;font-size:11px;color:var(--mute);opacity:0;transition:opacity .5s}
.hero-prog.on{opacity:1}
.hero-prog i{width:120px;height:1px;background:var(--line2);position:relative}
.hero-prog b{position:absolute;inset:0;background:var(--accent);transform:scaleX(0);transform-origin:left}
.seal{display:none}
html[data-theme=paper] .seal{display:grid;position:absolute;z-index:2;right:var(--gut);bottom:110px;width:78px;height:78px;padding:7px;background:var(--accent);color:#f6efe4;
  border-radius:6px;transform:rotate(-5deg);font:900 23px/1.02 var(--serif);grid-auto-flow:column;grid-template-columns:1fr 1fr;direction:rtl;place-items:center;
  box-shadow:inset 0 0 0 2px #f6efe4,inset 0 0 0 4px var(--accent);mix-blend-mode:multiply;opacity:.92}
html[data-theme=paper] .seal i{font-style:normal;writing-mode:vertical-rl;letter-spacing:.04em}
@media(max-width:760px){html[data-theme=paper] .seal{top:calc(var(--navh) + 44px);bottom:auto;width:60px;height:60px;font-size:18px}}
html[data-theme=paper] .hero-stage::after{background:radial-gradient(120% 90% at 50% 40%,transparent 60%,color-mix(in srgb,var(--bg) 70%,transparent) 100%)}
@media(max-width:760px){
  .hero-meta span:nth-child(n+2){display:none}
  .hero-title{font-size:clamp(30px,9.3vw,64px)}
  .hero-kick{font-size:10px;letter-spacing:.14em}
  .hero-copy{bottom:clamp(84px,14vh,130px)}
  .hero-steps{bottom:13vh;right:var(--gut);width:auto}
  .hero-steps li{right:0}
  .hero-scroll span{display:none}
}

/* ================= 宣言（开窗转场） ================= */
.mani{position:relative;z-index:3;margin-top:-100vh}
.mani-win{--wx:0%;--wy:0%;--wr:0px;min-height:100vh;background:var(--bg2);clip-path:inset(var(--wy) var(--wx) round var(--wr));display:grid;align-items:center}
.mani-in{max-width:var(--maxw);margin:0 auto;padding:18vh var(--gut) 14vh;width:100%}
.mani-kick{font-size:12px;letter-spacing:.2em;color:var(--accent);text-transform:uppercase;margin:0 0 34px}
.mani-text{margin:0;font:600 clamp(26px,3.7vw,58px)/1.5 var(--serif);letter-spacing:.01em;max-width:1180px}
.mani-text b{font-weight:900}
.mani-text em{font-style:normal;color:var(--accent)}
.mani-text .wc{transition:none}

/* ================= 产品（横向滚动） ================= */
.prods{position:relative}
/* 首页卡片半透明磨砂，背后的粒子图标透出来 */
.pg-home .pcard{background:color-mix(in srgb,var(--bg2) 45%,transparent);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}
.pg-home .p-end{background:color-mix(in srgb,var(--bg) 40%,transparent)}
.prods-stage{position:relative}
.prods-track{display:flex;gap:26px;padding:0 var(--gut)}
.p-intro{display:flex;flex-direction:column;justify-content:space-between;padding:8px 0}
.p-intro .sh{margin:0}
.p-hint{font-size:11px;letter-spacing:.2em;color:var(--mute);text-transform:uppercase;margin:0}
.pcard{position:relative;isolation:isolate;display:flex;flex-direction:column;background:var(--bg2);border:1px solid var(--line);border-radius:30px;padding:26px;overflow:hidden;
  transition:border-color .5s,transform .8s var(--out),background-color .5s}
.pcard::before{content:"";position:absolute;inset:0;z-index:-1;opacity:0;transition:opacity .5s;
  background:radial-gradient(420px circle at var(--mx,50%) var(--my,30%),color-mix(in srgb,var(--accent) 16%,transparent),transparent 65%)}
.pcard:hover{border-color:var(--line2)}
.pcard:hover::before{opacity:1}
.pc-top{display:flex;justify-content:space-between;gap:12px;font-size:11px;letter-spacing:.16em;color:var(--mute);text-transform:uppercase}
.pc-top i{font-style:normal;opacity:.5}
.badge{font-style:normal;margin-left:10px;background:var(--accent);color:var(--on-accent);padding:3px 9px;border-radius:999px;letter-spacing:.1em;font-family:var(--sans);font-weight:600}
.pc-vis{flex:1;min-height:200px;display:grid;place-items:center;margin:10px -10px}
.pc-vis .v{width:100%;height:100%;max-height:300px}
.pc-name{margin:0 0 10px;font:900 clamp(28px,2.5vw,40px)/1.15 var(--serif);letter-spacing:.005em}
.pc-name a{background:linear-gradient(var(--accent),var(--accent)) left 92%/0 .08em no-repeat;transition:background-size .6s var(--out)}
.pcard:hover .pc-name a{background-size:100% .08em}
.pc-short{margin:0;font-size:15px;line-height:1.75;color:var(--ink2)}
.pc-feat{list-style:none;margin:18px 0 0;padding:0;counter-reset:f}
.pc-feat li{counter-increment:f;display:flex;gap:12px;padding:9px 0;border-top:1px solid var(--line);font-size:14px;line-height:1.6;color:var(--ink2)}
.pc-feat li::before{content:counter(f,decimal-leading-zero);font:11px/1.9 var(--mono);color:var(--accent)}
.pc-act{display:flex;align-items:center;flex-wrap:wrap;gap:12px 20px;margin-top:22px}
.pc-act .btn{height:44px;padding:0 20px;font-size:13px}
.p-end{display:flex;flex-direction:column;justify-content:space-between;padding:30px;border-radius:30px;border:1px dashed var(--line2);transition:background-color .5s,color .5s,border-color .5s}
.p-end .mono{font-size:11px;letter-spacing:.2em;color:var(--mute);text-transform:uppercase}
.p-end b{font:900 clamp(34px,3.4vw,56px)/1.1 var(--serif)}
.p-end i{font-style:normal;font:400 64px/1 var(--disp);transition:transform .6s var(--out)}
.p-end:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.p-end:hover .mono{color:inherit}
.p-end:hover i{transform:translateX(12px)}
.prods-bar{display:none}
@media(min-width:900px){
  .prods-pin{position:relative}
  .prods-stage{position:sticky;top:0;height:100vh;overflow:hidden;display:flex;align-items:center}
  .prods-track{height:min(76vh,700px);margin-top:calc(var(--navh) * .5);will-change:transform}
  .p-intro{flex:0 0 min(460px,34vw)}
  .pcard{flex:0 0 min(440px,32vw)}
  .pcard.big{flex-basis:min(880px,60vw);display:grid;grid-template-columns:1.05fr 1fr;grid-template-rows:auto 1fr;column-gap:30px}
  .pcard.big .pc-top{grid-column:1/-1}
  .pcard.big .pc-vis{grid-row:2;margin:0}
  .pcard.big .pc-body{grid-row:2;display:flex;flex-direction:column;justify-content:center}
  .pcard.big .pc-name{font-size:clamp(36px,3.6vw,56px)}
  .p-end{flex:0 0 300px}
  .prods-bar{display:flex;position:absolute;left:var(--gut);right:var(--gut);bottom:3.2vh;align-items:center;gap:14px;font-size:11px;color:var(--mute)}
  .prods-bar i{flex:1;height:1px;background:var(--line);position:relative}
  .prods-bar b{position:absolute;inset:0;background:var(--accent);transform:scaleX(0);transform-origin:left}
}
@media(max-width:899px){
  .prods{padding:14vh 0 6vh}
  .prods-track{flex-direction:column;gap:18px}
  .p-intro{margin-bottom:16px}.p-hint{display:none}
  .pcard{min-height:520px}
  .p-end{min-height:180px}
}

/* ================= 文章 ================= */
.arts{padding:20vh 0 12vh;position:relative}
/* 粒子稿纸的位置（空盒子，由 home.js 读它的位置） */
.arts-gl{height:clamp(200px,34vw,440px);margin:0 0 10vh}
@media(max-width:700px){.arts-gl{height:46vw;margin-bottom:6vh}}
.arts-grid{display:grid;grid-template-columns:1fr;gap:48px;align-items:start}
@media(min-width:960px){.arts-grid{grid-template-columns:5fr 7fr;gap:64px}}
.lead{display:flex;flex-direction:column;gap:18px;padding:clamp(24px,3vw,40px);border-radius:30px;background:var(--bg2);border:1px solid var(--line);transition:border-color .4s,transform .8s var(--out)}
@media(min-width:960px){.lead{position:sticky;top:calc(var(--navh) + 24px)}}
.lead:hover{border-color:var(--accent)}
.lead-k{font-size:11px;letter-spacing:.18em;color:var(--accent);text-transform:uppercase}
.lead-t{font:900 clamp(30px,3.1vw,48px)/1.22 var(--serif)}
.lead-p{color:var(--ink2);font-size:15.5px;line-height:1.9}
.lead-m{font-size:12px;color:var(--mute);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-top:16px;border-top:1px solid var(--line)}
.lead-m em{font-style:normal;color:var(--ink)}
.colidx{list-style:none;margin:0;padding:0;border-bottom:1px solid var(--line2)}
.ci{border-top:1px solid var(--line2)}
.ci-h{display:grid;grid-template-columns:48px 1fr auto;grid-template-areas:"n t c" "n d c";column-gap:18px;align-items:center;padding:24px 4px;transition:padding .6s var(--out),color .3s}
.ci-n{grid-area:n;font-size:12px;color:var(--mute);align-self:start;padding-top:12px}
.ci-t{grid-area:t;font:900 clamp(28px,3.4vw,52px)/1.15 var(--serif)}
.ci-d{grid-area:d;font-size:14px;color:var(--mute);margin-top:6px}
.ci-c{grid-area:c;font-size:clamp(40px,4.4vw,72px);line-height:1;color:var(--mute);transition:color .4s,transform .6s var(--out)}
.ci:hover .ci-h,.ci:focus-within .ci-h{padding-left:18px}
.ci:hover .ci-t{color:var(--accent)}
.ci:hover .ci-c{color:var(--ink);transform:translateX(-8px)}
.ci-more{display:grid;grid-template-rows:0fr;transition:grid-template-rows .7s var(--out)}
.ci-more ul{overflow:hidden;list-style:none;margin:0;padding:0 0 0 66px}
.ci:hover .ci-more,.ci:focus-within .ci-more{grid-template-rows:1fr}
.ci-more li:last-child{padding-bottom:22px}
.ci-more a{display:flex;gap:16px;padding:7px 0;font-size:15px;line-height:1.55;color:var(--ink2);transition:color .3s}
.ci-more a:hover{color:var(--accent)}
.ci-more time{font-size:11.5px;color:var(--mute);padding-top:3px;white-space:nowrap}
@media(hover:none){.ci-more{grid-template-rows:1fr}.ci-more ul{padding-left:0}}
@media(max-width:600px){.ci-h{grid-template-columns:32px 1fr auto;column-gap:12px}}

/* ================= 关于 ================= */
.about{padding:16vh 0 18vh;border-top:1px solid var(--line)}
.about-g{display:grid;grid-template-columns:1fr;gap:40px}
@media(min-width:960px){.about-g{grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:6vw}}
/* 印章位置：有 WebGL 时由粒子拼出，没有时显示 CSS 印章 */
.about-seal{align-self:start;justify-self:center;width:min(100%,340px);aspect-ratio:1;display:grid;place-items:center}
@media(min-width:960px){.about-seal{position:sticky;top:calc(var(--navh) + 8vh)}}
@media(max-width:959px){.about-seal{width:min(62vw,300px)}}
.seal-css{display:grid;width:72%;aspect-ratio:1;padding:6%;background:var(--accent);color:var(--bg);border-radius:6%;transform:rotate(-4deg);
  font:900 clamp(40px,7vw,86px)/1.02 var(--serif);grid-auto-flow:column;grid-template-columns:1fr 1fr;direction:rtl;place-items:center;
  box-shadow:inset 0 0 0 3px var(--bg),inset 0 0 0 7px var(--accent);transition:opacity .8s}
.seal-css i{font-style:normal;writing-mode:vertical-rl;letter-spacing:.04em}
html.gl-on .seal-css{opacity:0}
.about-oss{margin:0 0 44px}
.about-oss ul{list-style:none;margin:10px 0 0;padding:0;border-bottom:1px solid var(--line)}
.about-oss a{display:grid;grid-template-columns:minmax(150px,240px) 1fr 20px;gap:18px;align-items:baseline;padding:13px 0;border-top:1px solid var(--line);transition:padding .5s var(--out)}
.about-oss a:hover{padding-left:12px}
.about-oss b{font:600 15px/1.5 var(--mono);transition:color .3s}
.about-oss a:hover b{color:var(--accent)}
.about-oss span{color:var(--ink2);font-size:14.5px}
.about-oss i{font-style:normal;color:var(--accent)}
@media(max-width:600px){.about-oss a{grid-template-columns:1fr 20px;gap:2px 10px}.about-oss span{grid-row:2}}
.about-h{margin:18px 0 28px;font:900 clamp(44px,5.4vw,84px)/1.05 var(--serif)}
.about-h small{font-size:13px;letter-spacing:.3em;text-transform:uppercase;color:var(--mute);margin-left:16px;vertical-align:middle;font-weight:400}
.about-lead{font:600 clamp(20px,2vw,28px)/1.7 var(--serif);margin:0 0 44px;max-width:760px}
.cv{list-style:none;margin:0 0 36px;padding:0;border-bottom:1px solid var(--line)}
.cv li{display:grid;grid-template-columns:96px 1fr;grid-template-areas:"k b" "k s";column-gap:18px;padding:20px 0;border-top:1px solid var(--line)}
.cv-k{grid-area:k;font-size:11.5px;letter-spacing:.14em;color:var(--accent);padding-top:6px}
.cv b{grid-area:b;font:700 clamp(19px,1.6vw,24px)/1.4 var(--serif)}
.cv li>span:last-child{grid-area:s;color:var(--ink2);font-size:15px}
.about-note{color:var(--ink2);font-size:15.5px;line-height:1.95;max-width:720px;margin:0 0 48px}
.about-contact{display:grid;grid-template-columns:1fr;gap:32px;align-items:end}
@media(min-width:700px){.about-contact{grid-template-columns:1fr auto}}
.about-contact dl{margin:0}
.about-contact dt{font-size:10.5px;letter-spacing:.24em;color:var(--mute);text-transform:uppercase;padding-top:14px}
.about-contact dd{margin:4px 0 0;padding-bottom:12px;border-bottom:1px solid var(--line);font-size:16px}
.about-contact dd a:hover{color:var(--accent)}
.qrs{display:flex;gap:18px}
.qrs figure{margin:0;text-align:center}
.qrs img{display:block;width:132px;height:132px;border-radius:14px;background:#fff;padding:7px;object-fit:contain;transition:transform .6s var(--out)}
.qrs img:hover{transform:scale(1.06) rotate(-2deg)}
.qrs figcaption{font-size:10.5px;letter-spacing:.22em;color:var(--mute);margin-top:10px}

/* ================= 页脚 ================= */
.foot{position:relative;padding:16vh var(--gut) 26px;border-top:1px solid var(--line);overflow:hidden;background:var(--bg)}
.foot-top{display:grid;grid-template-columns:1fr;gap:48px;max-width:var(--maxw);margin:0 auto}
@media(min-width:900px){.foot-top{grid-template-columns:1fr auto;align-items:end}}
.foot .kick{font-size:12px;letter-spacing:.2em;color:var(--accent);text-transform:uppercase}
.foot-say{font:600 clamp(24px,2.8vw,42px)/1.45 var(--serif);margin:22px 0 26px}
.foot-mail{display:inline-flex;align-items:baseline;gap:14px;font:italic 400 clamp(34px,5.6vw,92px)/1.1 var(--disp);letter-spacing:-.01em;word-break:break-all;
  background:linear-gradient(var(--accent),var(--accent)) left bottom/0 2px no-repeat;transition:background-size .7s var(--out),color .4s}
.foot-mail:hover{background-size:100% 2px;color:var(--accent)}
.foot-mail span{font-style:normal;font-size:.6em;transition:transform .5s var(--out)}
.foot-mail:hover span{transform:translate(6px,-6px)}
.pg-home .foot{background:transparent}
.foot-side{display:flex;align-items:flex-end;gap:40px;flex-wrap:wrap}
.foot-qr{margin:0;display:grid;gap:12px;justify-items:center}
.foot-qr figcaption{font-size:10.5px;letter-spacing:.22em;color:var(--mute)}
/* 码盘：页脚粒子拼二维码的位置；没有 WebGL（或不在首页）时直接显示图片 */
.fq-plate{position:relative;width:clamp(170px,15vw,220px);aspect-ratio:1}
.fq-plate img{display:block;width:100%;height:100%;border-radius:12px;background:#fff;padding:6px;transition:opacity .6s}
/* 粒子码就位后图片透明但仍在原处，手机上长按仍能识别 */
html.gl-qr .fq-plate img{opacity:0}
.foot-links{list-style:none;margin:0;padding:0;display:grid;gap:8px;font-size:12.5px;letter-spacing:.12em}
@media(min-width:900px){.foot-links{text-align:right}}
.foot-links a:hover{color:var(--accent)}
.foot-links span{color:var(--mute)}
.foot-word{margin:14vh -1vw 2vh;font:400 clamp(60px,17.2vw,300px)/.82 var(--disp);letter-spacing:-.035em;white-space:nowrap;text-align:center;user-select:none}
.foot-word i{color:var(--accent)}
.foot-word>*{display:inline-block}
html.rv-ok .foot-word>*{transform:translateY(60%);opacity:0;transition:transform 1.4s var(--out),opacity 1.2s var(--out)}
html.rv-ok .foot-word.in>*{transform:none;opacity:1}
html.rv-ok .foot-word.in>*:nth-child(2){transition-delay:.12s}html.rv-ok .foot-word.in>*:nth-child(3){transition-delay:.24s}
.foot-base{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px 24px;font-size:11px;letter-spacing:.14em;color:var(--mute);padding-top:20px;border-top:1px solid var(--line);max-width:var(--maxw);margin:0 auto}

/* ================= 子页面通用 ================= */
.page-head{padding-top:calc(var(--navh) + 16vh);padding-bottom:6vh}
.crumb{display:block;font-size:11.5px;letter-spacing:.18em;color:var(--mute);margin-bottom:26px}
.crumb a:hover{color:var(--accent)}
.ph-t{margin:0;font:900 clamp(84px,15vw,250px)/.9 var(--serif);letter-spacing:-.02em}
.ph-t sup{font-size:.26em;color:var(--accent);vertical-align:top;margin-left:.12em;position:relative;top:.2em}
.ph-sub{margin:28px 0 0;font-size:18px;color:var(--ink2);max-width:620px}
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:22px;padding-bottom:18vh}
.pgrid .pcard{min-height:560px}

/* 产品详情 */
.pd-hero{padding-top:calc(var(--navh) + 9vh)}
.pd-meta{display:flex;flex-wrap:wrap;gap:10px 28px;font-size:11.5px;letter-spacing:.16em;color:var(--mute);text-transform:uppercase;margin-bottom:5vh}
.pd-meta a:hover{color:var(--accent)}
.pd-g{display:grid;grid-template-columns:1fr;gap:48px;align-items:center}
@media(min-width:960px){.pd-g{grid-template-columns:1.05fr 1fr;gap:5vw}}
.pd-title{margin:0;font:900 clamp(52px,7.6vw,128px)/1.02 var(--serif);letter-spacing:-.01em;word-break:break-word}
/* 没有空格的长英文名（ClaudeTerminal、VideoQuickExtract）整词放不下会被拦腰折断，缩一档 */
.pd-title.long{font-size:clamp(34px,4.4vw,72px);white-space:nowrap}
.pd-short{font:600 clamp(19px,1.9vw,27px)/1.6 var(--serif);color:var(--ink2);margin:28px 0 0;max-width:620px}
.pd-act{display:flex;flex-wrap:wrap;align-items:center;gap:14px 16px;margin-top:40px}
.pd-host{font-size:12px;color:var(--mute);margin-left:6px}
.pd-vis{aspect-ratio:4/3;background:var(--bg2);border:1px solid var(--line);border-radius:34px;display:grid;place-items:center;padding:5%;position:relative;overflow:hidden}
.pd-vis::after{content:"";position:absolute;inset:0;background:radial-gradient(60% 60% at 50% 50%,color-mix(in srgb,var(--accent) 10%,transparent),transparent 70%);pointer-events:none}
.pd-body{display:grid;grid-template-columns:1fr;gap:56px;padding-top:16vh;padding-bottom:16vh}
@media(min-width:960px){.pd-body{grid-template-columns:1.2fr 1fr;gap:6vw}}
.pd-desc p{font-size:18px;line-height:2.05;margin:20px 0 0}
.pd-desc p::first-letter{float:left;font:900 3.4em/.9 var(--serif);color:var(--accent);padding:.08em .12em 0 0}
.pd-rel{display:grid;grid-template-columns:1fr auto;gap:6px 20px;margin-top:44px;padding:24px 26px;border:1px solid var(--line2);border-radius:22px;transition:border-color .4s,background-color .4s}
.pd-rel .mono{font-size:11px;letter-spacing:.18em;color:var(--accent);text-transform:uppercase}
.pd-rel b{grid-column:1;font:700 21px/1.45 var(--serif)}
.pd-rel i{grid-column:2;grid-row:1/3;align-self:center;font:400 34px/1 var(--disp);font-style:normal;transition:transform .5s var(--out)}
.pd-rel:hover{border-color:var(--accent);background:var(--bg2)}
.pd-rel:hover i{transform:translateX(8px)}
.pd-feat ol{list-style:none;margin:20px 0 0;padding:0;border-bottom:1px solid var(--line)}
.pd-feat li{display:grid;grid-template-columns:44px 1fr;gap:10px;padding:18px 0;border-top:1px solid var(--line)}
.pd-feat li .mono{font-size:12px;color:var(--accent);padding-top:4px}
.pd-feat li p{margin:0;font-size:16px;line-height:1.75}
.pd-next{display:block;text-align:center;padding:16vh var(--gut) 18vh;border-top:1px solid var(--line);position:relative;overflow:hidden}
.pd-next .mono{font-size:11.5px;letter-spacing:.22em;color:var(--mute);text-transform:uppercase}
.pd-next b{display:block;margin:18px 0 14px;font:900 clamp(48px,9vw,156px)/1.02 var(--serif);transition:color .5s}
.pd-next-s{color:var(--ink2);font-size:16px}
.pd-next i{display:block;font:400 64px/1 var(--disp);font-style:normal;margin-top:24px;transition:transform .6s var(--out)}
.pd-next:hover b{color:var(--accent)}
.pd-next:hover i{transform:translateX(16px)}

/* 文章列表 */
.al{padding-bottom:18vh}
.al-tools{position:sticky;top:0;z-index:5;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px 24px;padding:calc(var(--navh) + 8px) 0 16px;margin-top:calc(var(--navh) * -1);background:linear-gradient(var(--bg) 82%,transparent)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips a{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;border-radius:999px;border:1px solid var(--line2);font-size:14px;transition:background-color .3s,color .3s,border-color .3s}
.chips a i{font-style:normal;font-size:.95em;color:var(--mute)}
.chips a:hover{border-color:var(--accent);color:var(--accent)}
.chips a.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.chips a.on i{color:inherit;opacity:.6}
.search{display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--line2);padding:6px 0;transition:border-color .3s}
.search:focus-within{border-color:var(--accent)}
.search .mono{font-size:11px;letter-spacing:.18em;color:var(--mute)}
.search input{background:transparent;border:0;outline:0;color:var(--ink);font:15px var(--sans);width:min(240px,60vw)}
.search input::placeholder{color:var(--mute)}
.grp{display:grid;grid-template-columns:1fr;gap:6px 24px;padding:26px 0;border-top:1px solid var(--line2)}
@media(min-width:900px){.grp{grid-template-columns:150px 1fr}}
.grp-h{margin:0;font-size:13px;font-weight:400;color:var(--ink2);letter-spacing:.14em;align-self:start}
@media(min-width:900px){.grp-h{position:sticky;top:calc(var(--navh) + 90px)}}
.grp-h i{font-style:normal;color:var(--accent);margin-left:10px;font-size:11px}
.grp ul{list-style:none;margin:0;padding:0}
.grp li a{position:relative;display:grid;grid-template-columns:60px 1fr auto auto;gap:18px;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--line);transition:padding .5s var(--out)}
.grp li:last-child a{border-bottom:0}
.grp li a::before{content:"";position:absolute;left:0;top:50%;width:0;height:1px;background:var(--accent);transition:width .5s var(--out)}
.grp li a:hover{padding-left:28px}
.grp li a:hover::before{width:18px}
.grp time{font-size:12px;color:var(--mute)}
.grp b{font:600 clamp(17px,1.5vw,21px)/1.5 var(--serif);transition:color .3s}
.grp li a:hover b{color:var(--accent)}
.grp .tag{font-size:12px;color:var(--mute);border:1px solid var(--line);padding:1px 10px;border-radius:999px;white-space:nowrap}
.grp .w{font-size:11.5px;color:var(--mute);white-space:nowrap;min-width:52px;text-align:right}
@media(max-width:700px){.grp li a{grid-template-columns:1fr auto;gap:4px 12px}.grp li a b{grid-column:1/-1;grid-row:1}.grp .tag{display:none}.grp time{grid-row:2}.grp .w{grid-row:2}}
.al-empty{padding:40px 0;color:var(--mute);font-size:13px}

/* 文章阅读 */
.rd-prog{position:fixed;top:0;left:0;right:0;height:2px;z-index:85;pointer-events:none}
.rd-prog i{display:block;height:100%;background:var(--accent);transform:scaleX(var(--p,0));transform-origin:left}
.rd-head{max-width:980px;padding-top:calc(var(--navh) + 12vh)}
.rd-title{margin:0 0 30px;font:900 clamp(34px,5vw,72px)/1.2 var(--serif);letter-spacing:-.005em}
.rd-meta{display:flex;flex-wrap:wrap;gap:8px 26px;font-size:12px;letter-spacing:.1em;color:var(--mute);padding-bottom:28px;border-bottom:1px solid var(--line2);position:relative}
.rd-meta::after{content:"";position:absolute;left:0;bottom:-1px;width:72px;height:2px;background:var(--accent)}
.rd-meta a{color:var(--ink2);border-bottom:1px solid var(--line2)}
.rd-meta a:hover{color:var(--accent);border-color:var(--accent)}
.body{max-width:760px;margin:64px auto 0;padding:0 var(--gut);font-size:17.5px;line-height:2.02;color:var(--ink);word-wrap:break-word;overflow-wrap:anywhere}
.body img{max-width:100%;height:auto;display:block;margin:28px auto;border-radius:12px}
.body p{margin:0 0 1.25em}
.body h1,.body h2,.body h3{font-family:var(--sans);font-weight:700;margin:2em 0 .8em;line-height:1.45}
.body h2{font-size:25px}.body h3{font-size:21px}
.body blockquote{border-left:3px solid var(--accent);margin:1.6em 0;padding:4px 0 4px 20px;color:var(--ink2)}
.body pre{background:var(--bg2);border:1px solid var(--line);border-radius:12px;padding:16px 18px;overflow-x:auto;font:13.5px/1.7 var(--mono)}
.body code{font-family:var(--mono);font-size:.88em}
.body a{color:var(--accent);border-bottom:1px solid currentColor}
.body table{border-collapse:collapse;width:100%;font-size:15px;display:block;overflow-x:auto}
.body td,.body th{border:1px solid var(--line2);padding:7px 12px}
.body section{padding:0!important;max-width:100%!important;box-sizing:border-box!important}
.body [style*="border-left"]{border-left-color:var(--accent)!important}
html[data-theme=night] .body :is(p,span,section,li,h1,h2,h3,h4,strong,em,b,blockquote,td,th,ul,ol,font){color:var(--ink)!important;background-color:transparent!important}
html[data-theme=night] .body :is(strong,b){color:#fff!important}
html[data-theme=night] .body pre,html[data-theme=night] .body pre *{background-color:var(--bg2)!important;color:#dcd6cc!important}
.rd-pn{display:grid;grid-template-columns:1fr 1fr;gap:16px;max-width:1040px;margin:14vh auto 0;padding:0 var(--gut)}
.rd-pn a{display:flex;flex-direction:column;gap:12px;padding:26px 28px;border-radius:22px;background:var(--bg2);border:1px solid var(--line);transition:border-color .4s,transform .6s var(--out)}
.rd-pn a:hover{border-color:var(--accent);transform:translateY(-4px)}
.rd-pn .n{text-align:right}
.rd-pn .mono{font-size:11px;letter-spacing:.18em;color:var(--mute)}
.rd-pn b{font:700 19px/1.5 var(--serif)}
@media(max-width:700px){.rd-pn{grid-template-columns:1fr}}
.rd-back{display:flex;justify-content:space-between;gap:16px;max-width:1040px;margin:40px auto 16vh;padding:0 var(--gut);font-size:12px;letter-spacing:.14em;color:var(--mute)}
.rd-back a:hover{color:var(--accent)}

/* ================= 产品动效 SVG ================= */
.v{overflow:visible;display:block}
.v.paused *,.v.paused{animation-play-state:paused!important}
@keyframes dash{to{stroke-dashoffset:-100}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes pulse{0%,100%{opacity:.55;transform:scale(.92)}50%{opacity:1;transform:scale(1.06)}}
@keyframes draw{0%{stroke-dashoffset:1;opacity:1}30%,80%{stroke-dashoffset:0;opacity:1}95%,100%{stroke-dashoffset:0;opacity:0}}
@keyframes pop{0%,10%{opacity:0;transform:scale(0)}22%,80%{opacity:1;transform:scale(1)}95%,100%{opacity:0}}
/* Opus 专线 */
.v-chat .ring{fill:none;stroke:var(--line2);stroke-width:1;stroke-dasharray:3 7;animation:dash 14s linear infinite;animation-delay:var(--d)}
.v-chat .tok{fill:var(--accent)}
.v-chat .orb{fill:var(--glow)}
.v-chat .halo{transform-origin:200px 150px;animation:pulse 4.5s ease-in-out infinite}
/* ClaudeTerminal */
.v-term .isl{fill:var(--bg3);stroke:var(--line2)}
.v-term .isl-dot{fill:var(--accent);transform-box:fill-box;transform-origin:center;animation:pulse 2.4s ease-in-out infinite}
.v-term .isl-t{fill:var(--ink2)}
.v-term .win{fill:var(--bg);stroke:var(--line2)}
.v-term .wbar{stroke:var(--line)}
.v-term .wdot{fill:var(--line2)}
.v-term .tl{fill:var(--line2)}.v-term .tl.u{fill:var(--accent)}.v-term .tl.b{fill:var(--ink2)}
.v-term .chev{fill:none;stroke:var(--ink2);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transform-box:fill-box;transform-origin:center}
.v-term .chev.open{stroke:var(--accent);animation:chev 6s var(--out) infinite}
@keyframes chev{0%,8%{transform:none}14%,74%{transform:rotate(90deg)}80%,100%{transform:none}}
.v-term .body{transform-box:fill-box;transform-origin:top;animation:fold 6s var(--out) infinite}
@keyframes fold{0%,8%{transform:scaleY(0);opacity:0}14%,74%{transform:none;opacity:1}80%,100%{transform:scaleY(0);opacity:0}}
.v-term .rail{fill:var(--line2);animation:railOn 4.2s var(--d) infinite}
@keyframes railOn{0%,100%{fill:var(--line2)}6%,18%{fill:var(--accent)}}
.v-term .caret{fill:var(--accent);animation:blink 1s steps(1) infinite}
/* 狗头军师 */
.v-juece .orbit{fill:none;stroke:var(--line2);stroke-dasharray:2 7;transform-origin:200px 150px;animation:spin 60s linear infinite}
.v-juece .ln{stroke:var(--line2);stroke-width:1;stroke-dasharray:3 5;animation:dash 6s linear infinite}
.v-juece .nd{fill:var(--bg2);stroke:var(--ink2);stroke-width:1.2;animation:speak 3.2s var(--d) infinite}
@keyframes speak{0%,100%{fill:var(--bg2);stroke:var(--ink2)}8%{fill:var(--accent);stroke:var(--accent)}24%{fill:var(--bg2);stroke:var(--ink2)}}
.v-juece .hub{fill:var(--accent)}
.v-juece .hub-t{fill:var(--on-accent);font:700 15px var(--mono);text-anchor:middle}
/* ChatTree */
.v-tree .br{fill:none;stroke:var(--line2);stroke-width:1.3;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 7s var(--out) var(--d) infinite}
.v-tree .br.hot{stroke:var(--accent);stroke-width:2}
.v-tree .nd{fill:var(--ink2);transform-box:fill-box;transform-origin:center;opacity:0;animation:pop 7s var(--d) infinite}
.v-tree .nd.hot{fill:var(--accent)}
.v-tree .root{fill:var(--accent)}
/* 视频转文字 */
.v-wave .bar{fill:var(--ink2);transform-box:fill-box;transform-origin:center;animation:eq 1.1s ease-in-out var(--d) infinite alternate}
@keyframes eq{from{transform:scaleY(.22)}to{transform:scaleY(1)}}
.v-wave .arr{fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.v-wave .tl{fill:var(--line2);transform-box:fill-box;transform-origin:left;animation:typeL 4.5s var(--out) var(--d) infinite}
.v-wave .tl:first-of-type{fill:var(--accent)}
@keyframes typeL{0%{transform:scaleX(0);opacity:1}22%,86%{transform:scaleX(1);opacity:1}100%{transform:scaleX(1);opacity:0}}
/* 公众号排版 */
.v-paiban .pane{fill:var(--bg3);stroke:var(--line)}
.v-paiban .pane.r{fill:var(--bg)}
.v-paiban .mdl{fill:var(--ink2);font:12.5px var(--mono)}
.v-paiban .ph,.v-paiban .pd,.v-paiban .pq{fill:var(--accent)}
.v-paiban .pl{fill:var(--line2)}.v-paiban .pl.b{fill:var(--ink2)}
.v-paiban .pc{fill:var(--bg3)}
.v-paiban .scan{fill:var(--accent);opacity:.8;animation:scan 3.8s ease-in-out infinite alternate}
@keyframes scan{to{transform:translateY(210px)}}
/* MarkView */
.v-md .frame{fill:none;stroke:var(--ink2);stroke-width:2;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 6s var(--out) infinite}
.v-md .glyph{fill:none;stroke:var(--accent);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 6s var(--out) .5s infinite}
.v-md .tl{fill:var(--line2);transform-box:fill-box;transform-origin:left;animation:typeL 6s var(--out) calc(var(--d) + 1.2s) infinite}
/* TXT Reader */
.v-txt .term{fill:var(--bg);stroke:var(--line2)}
.v-txt .tbar{stroke:var(--line)}
.v-txt .tdot{fill:var(--line2)}
.v-txt text{font:12px var(--mono)}
.v-txt .ic,.v-txt .who{font-weight:700}
.v-txt .u text{fill:var(--ink)}.v-txt .c .ic,.v-txt .c .who{fill:var(--accent)}.v-txt .t .ic,.v-txt .t .who{fill:var(--ok)}
.v-txt .msg{fill:var(--ink2)!important;font-family:var(--sans)}
.v-txt .row{opacity:0;animation:rowIn 7.5s var(--d) infinite}
@keyframes rowIn{0%{opacity:0;transform:translateY(6px)}6%,84%{opacity:1;transform:none}96%,100%{opacity:0}}
.v-txt .caret{fill:var(--accent);animation:blink 1s steps(1) infinite}
/* 水文 */
.v-waves{overflow:hidden}
.v-waves .wv{fill:none;stroke-width:1.6;animation:wv var(--s) linear infinite}
@keyframes wv{to{transform:translateX(-200px)}}
.v-waves .w0{stroke:var(--accent)}.v-waves .w1{stroke:var(--ink2)}.v-waves .w2{stroke:var(--line2)}.v-waves .w3{stroke:var(--accent2);opacity:.6}
.v-waves .rain{stroke:var(--line2);stroke-width:1.2;stroke-linecap:round;opacity:0;animation:rain var(--s) linear var(--d) infinite}
@keyframes rain{0%{transform:translateY(-10px);opacity:0}20%{opacity:1}100%{transform:translateY(70px);opacity:0}}
/* 植医颐眠 */
.v-leaf .br{fill:none;stroke:var(--line2);transform-origin:200px 150px;animation:breathe 6s ease-in-out var(--d) infinite}
@keyframes breathe{0%,100%{transform:scale(.86);opacity:.35}50%{transform:scale(1.05);opacity:1}}
.v-leaf .leaf{fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 6s var(--out) infinite}
.v-leaf .rib{stroke:var(--ink2);stroke-width:1.4;animation-delay:.6s}
.v-gen circle{fill:var(--line2);animation:pulse 3s var(--d) infinite}

/* ================= 减少动态 ================= */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}
  html.rv-ok [data-reveal],html.rv-ok [data-split] .ch,html.rv-ok .foot-word>*{opacity:1!important;transform:none!important}
  .hero-pin{height:auto}.hero-stage{position:relative}
  .hero-steps{display:none}
  .mani{margin-top:0}
  .grain{display:none}
}
