/* ============ SELF-HOSTED FONTS（latin 子集，共 117KB，无境外依赖） ============ */
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:400;font-display:swap;src:url(../assets/fonts/space-grotesk-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:500;font-display:swap;src:url(../assets/fonts/space-grotesk-latin-500-normal.woff2) format("woff2")}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:600;font-display:swap;src:url(../assets/fonts/space-grotesk-latin-600-normal.woff2) format("woff2")}
@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:700;font-display:swap;src:url(../assets/fonts/space-grotesk-latin-700-normal.woff2) format("woff2")}
@font-face{font-family:"Instrument Serif";font-style:italic;font-weight:400;font-display:swap;src:url(../assets/fonts/instrument-serif-latin-400-italic.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url(../assets/fonts/ibm-plex-mono-latin-400-normal.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url(../assets/fonts/ibm-plex-mono-latin-500-normal.woff2) format("woff2")}

:root{
  --abyss:#04080D;
  --deep:#071019;
  --ice:#9FE8FF;
  --ice-dim:#5FA8C4;
  --glow:#3BD6FF;
  --text:#E4F1F7;
  --text-dim:#8AA3B1;
  --cream:#F5D9A8;
  --line:rgba(159,232,255,.13);
  --sans:"Space Grotesk","Instrument Sans",-apple-system,sans-serif;
  --serif:"Instrument Serif",Georgia,serif;
  --mono:"IBM Plex Mono",monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:auto}
body{
  background:var(--abyss);color:var(--text);font-family:var(--sans);
  font-size:16.5px;line-height:1.8;overflow-x:hidden;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
::selection{background:var(--glow);color:var(--abyss)}
:focus-visible{outline:2px solid var(--glow);outline-offset:3px}
.mono{font-family:var(--mono)}
.wrap{max-width:1200px;margin:0 auto;padding:0 30px}
.fogA,.fogB{background-size:contain;background-repeat:no-repeat;aspect-ratio:1}
.fogA{background-image:url(../assets/fog1b.webp?a=15)}
.fogB{background-image:url(../assets/fog2b.webp?a=15)}
/* r29：主图由 .machineTex 单张背景改为 #mx-gal 四图滑动画廊
   （结构在模板 #stage 内，图片 src 带 ?a={{A}}，发布即自动破缓存） */

/* ============ TYPE SYSTEM ============ */
h1,h2,h3{font-weight:600;letter-spacing:-.022em;line-height:1.12}
h2{font-size:clamp(30px,4.6vw,58px)}
h2 em,.acc{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--ice);letter-spacing:0;font-size:1.05em}
.sec-tag{
  font-family:var(--mono);font-size:11px;letter-spacing:.32em;text-transform:uppercase;
  color:var(--ice-dim);display:flex;align-items:center;gap:14px;margin-bottom:30px;
}
.sec-tag::before{content:"";width:34px;height:1px;background:var(--ice-dim)}

/* 标题遮罩逐词升起 */
.split .wline{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.08em;margin-bottom:-.08em}
.split .wword{display:inline-block;transform:translateY(112%);transition:transform .85s cubic-bezier(.22,.9,.24,1)}
.split.in .wword{transform:translateY(0)}

/* 段落滚动逐行点亮 + 当前行放大（行由 JS 运行时按折行归组） */
/* 未读：暗、虚焦、灰 ←→ 已读：白、加粗描边、冰光辉光。当前行再放大。
   加粗用 text-stroke（不改字宽，避免整段折行跳动）。 */
.fill .fline{display:block;opacity:.15;color:var(--text-dim);filter:blur(1.5px);
  transform-origin:left center;
  transition:opacity .45s linear,filter .45s linear,color .45s linear,
             transform .55s cubic-bezier(.2,.7,.2,1),text-shadow .45s linear}
.fill .fline.lit{opacity:1;color:#fff;filter:blur(0);
  -webkit-text-stroke:.45px currentColor;
  text-shadow:0 0 24px rgba(159,232,255,.28)}
.fill .fline.cur{transform:scale(1.055);text-shadow:0 0 34px rgba(159,232,255,.5)}
/* r17：宣言首行点亮后用冰蓝，其余保持白（选择器只命中第一段的首行） */
#manifesto p.fill:first-of-type .fline:first-child.lit{color:var(--ice);text-shadow:0 0 28px rgba(159,232,255,.45)}
#manifesto p.fill:first-of-type .fline:first-child.cur{text-shadow:0 0 38px rgba(159,232,255,.65)}
@media (max-width:640px){
  .fill .fline{filter:blur(1.1px)}
  .fill .fline.lit{filter:blur(0)}
  .fill .fline.cur{transform:scale(1.035)}
}

.rv{opacity:0;transform:translateY(28px);transition:opacity .9s cubic-bezier(.2,.6,.2,1),transform .9s cubic-bezier(.2,.6,.2,1)}
.rv.in{opacity:1;transform:none}

/* ============ CURSOR ============ */
@media (pointer:fine){
  body.entered{cursor:none}
  body.entered a,body.entered button,body.entered select,body.entered input,body.entered textarea,body.entered summary{cursor:none}
  /* r34：面板内自定义光标是隐藏的，必须换回系统光标（原版靠 3D 画布的 cursor:grab 掩盖了此问题） */
  body.entered.panel-open{cursor:auto}
  body.entered.panel-open a,body.entered.panel-open button,body.entered.panel-open summary{cursor:pointer}
  body.entered.panel-open select,body.entered.panel-open input,body.entered.panel-open textarea{cursor:auto}
}
#cur-dot,#cur-ring{position:fixed;top:0;left:0;pointer-events:none;z-index:300;border-radius:50%;opacity:0}
body.entered #cur-dot,body.entered #cur-ring{opacity:1}
#cur-dot{width:6px;height:6px;background:var(--glow);transform:translate(-50%,-50%)}
#cur-ring{
  width:38px;height:38px;border:1px solid rgba(159,232,255,.5);
  transform:translate(-50%,-50%);transition:width .28s,height .28s,border-color .28s,background .28s;
}
#cur-ring.hov{width:64px;height:64px;border-color:var(--glow);background:rgba(59,214,255,.07)}
@media (pointer:coarse){#cur-dot,#cur-ring{display:none}}

/* ============ PRELOADER + GATE ============ */
#loader{
  position:fixed;inset:0;z-index:200;background:var(--abyss);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  transition:opacity .9s ease,visibility .9s;
}
#loader.gone{opacity:0;visibility:hidden}
.loader-mark{width:52px;height:52px;animation:pulse 2.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:.45;transform:scale(.96)}50%{opacity:1;transform:scale(1)}}
#pct{font-family:var(--mono);font-size:12px;letter-spacing:.34em;color:var(--ice-dim)}
.loader-bar{width:190px;height:1px;background:rgba(159,232,255,.12);overflow:hidden}
.loader-bar i{display:block;height:100%;width:0;background:var(--glow)}
#load-phase{display:flex;flex-direction:column;align-items:center;gap:24px}
#gate{position:absolute;opacity:0;pointer-events:none;transition:opacity .8s;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:0 24px}
#gate.on{opacity:1;pointer-events:auto}
#gate .g1{font-family:var(--mono);font-size:11px;letter-spacing:.4em;color:var(--text-dim);text-transform:uppercase;overflow:hidden}
#gate .g1 span,#gate .g2 span{display:inline-block;transform:translateY(110%);transition:transform .8s cubic-bezier(.22,.9,.24,1)}
#gate.on .g1 span{transform:none;transition-delay:.1s}
#gate .g2{font-size:clamp(30px,5.4vw,52px);font-weight:600;letter-spacing:-.02em;overflow:hidden;line-height:1.2}
#gate .g2 .acc{font-size:1.04em}
#gate.on .g2 span{transform:none;transition-delay:.24s}
#enter-wrap{margin-top:36px}
#enter{
  font-family:var(--mono);font-size:12px;letter-spacing:.32em;text-transform:uppercase;
  color:var(--ice);background:transparent;border:1px solid var(--line);
  padding:18px 48px;position:relative;overflow:hidden;transition:color .3s,border-color .3s;
  display:inline-block;
}
#enter i{position:absolute;inset:0;background:var(--glow);transform:scaleX(0);transform-origin:left;transition:transform .4s cubic-bezier(.7,0,.2,1);z-index:-1;font-style:normal}
#enter:hover{color:var(--abyss);border-color:var(--glow)}
#enter:hover i{transform:scaleX(1)}

/* ============ FIXED CHROME ============ */
#snow{position:fixed;inset:0;z-index:1;pointer-events:none}
#frost-overlay{
  position:fixed;inset:0;z-index:2;pointer-events:none;opacity:.05;
  background-image:url(../assets/frost.webp?a=15);
  background-size:460px;mix-blend-mode:screen;
}
#progress{position:fixed;top:0;left:0;height:2px;background:linear-gradient(90deg,var(--ice-dim),var(--glow));width:0;z-index:95}
.nav{
  position:fixed;top:0;left:0;right:0;z-index:90;padding:24px 36px;
  display:flex;align-items:center;justify-content:space-between;
  opacity:0;transform:translateY(-12px);transition:opacity .9s .4s,transform .9s .4s;
  background:linear-gradient(180deg,rgba(4,8,13,.75),transparent);
}
body.entered .nav{opacity:1;transform:none}
.brand{display:flex;align-items:center;gap:11px;font-weight:700;font-size:16px;letter-spacing:.14em}
.brand svg{width:23px;height:23px}
.nav-links{display:flex;gap:34px;font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim)}
.nav-links a{transition:.25s;padding:4px 0;position:relative}
.nav-links a::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background:var(--glow);transform:scaleX(0);transform-origin:right;transition:transform .3s}
.nav-links a:hover{color:var(--ice)}
.nav-links a:hover::after{transform:scaleX(1);transform-origin:left}
.nav-cta{
  font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ice);border:1px solid var(--line);padding:12px 22px;transition:.25s;display:inline-block;
}
.nav-cta:hover{background:var(--glow);color:var(--abyss);border-color:var(--glow)}
/* 声音开关 */
.snd{
  display:flex;align-items:center;gap:9px;background:none;border:0;cursor:pointer;
  color:var(--text-dim);font-family:var(--mono);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;transition:.25s;padding:6px 2px;
}
.snd:hover{color:var(--ice)}
body.snd-on .snd{color:var(--ice)}
.snd.armed{color:var(--ice-dim)}
.snd.armed .bars i{animation:armPulse 1.6s ease-in-out infinite}
@keyframes armPulse{0%,100%{height:3px;opacity:.5}50%{height:8px;opacity:1}}
.bars{display:flex;align-items:flex-end;gap:2px;height:12px}
.bars i{width:2px;height:3px;background:currentColor;transition:height .3s}
body.snd-on .bars i{animation:eq 1s ease-in-out infinite}
body.snd-on .bars i:nth-child(2){animation-delay:.15s}
body.snd-on .bars i:nth-child(3){animation-delay:.3s}
body.snd-on .bars i:nth-child(4){animation-delay:.45s}
@keyframes eq{0%,100%{height:3px}50%{height:12px}}

/* ============ HERO ============ */
#hero{position:relative;height:116vh;overflow:hidden;z-index:3}
.layer{position:absolute;will-change:transform;pointer-events:none}
#cave-bg{
  position:absolute;inset:-6% -4%;background:url(../assets/cave.webp?a=15) center/cover no-repeat;
  opacity:.32;will-change:transform;
  -webkit-mask-image:linear-gradient(180deg,#000 55%,transparent 98%);
  mask-image:linear-gradient(180deg,#000 55%,transparent 98%);
}
#ice-far{top:5%;left:-6%;width:42vw;max-width:540px;opacity:.38;filter:blur(5px) brightness(.6)}
#ice-mid{top:15%;right:-9%;width:52vw;max-width:650px;opacity:.85;filter:brightness(.85)}
#ice-near{bottom:-15%;left:-5%;width:58vw;max-width:720px;opacity:.95;filter:blur(1.5px)}
#hero-fog1{bottom:-6%;left:0;width:100vw;opacity:.5;mix-blend-mode:screen}
#hero-fog2{top:22%;right:-16%;width:72vw;opacity:.34;mix-blend-mode:screen}
.hero-core{
  position:relative;z-index:6;height:100vh;display:flex;flex-direction:column;
  align-items:center;justify-content:center;text-align:center;padding:0 22px;
}
.hero-eyebrow{
  font-family:var(--mono);font-size:11.5px;letter-spacing:.42em;text-transform:uppercase;
  color:var(--ice-dim);margin-bottom:30px;
  opacity:0;transition:opacity 1s .5s;
}
body.entered .hero-eyebrow{opacity:1}
h1.hero-title{
  font-weight:700;color:var(--text);
  font-size:clamp(58px,13.5vw,178px);letter-spacing:.015em;line-height:.98;
  text-shadow:0 0 84px rgba(59,214,255,.34);
  display:flex;overflow:hidden;padding-bottom:.06em;
}
h1.hero-title span{
  display:inline-block;transform:translateY(112%);
  transition:transform 1s cubic-bezier(.22,.9,.24,1);
}
body.entered h1.hero-title span{transform:none}
.hero-sub{
  margin-top:34px;max-width:33em;font-size:clamp(16px,1.8vw,20px);color:var(--text-dim);line-height:1.7;
  opacity:0;transform:translateY(16px);transition:opacity 1s 1.35s,transform 1s 1.35s;
}
.hero-sub .acc{font-size:1.08em}
body.entered .hero-sub{opacity:1;transform:none}
.scroll-cue{
  position:absolute;bottom:9vh;left:50%;transform:translateX(-50%);z-index:6;
  font-family:var(--mono);font-size:10px;letter-spacing:.34em;color:var(--text-dim);
  display:flex;flex-direction:column;align-items:center;gap:12px;
  opacity:0;transition:opacity 1s 1.9s;
}
body.entered .scroll-cue{opacity:1}
.scroll-cue i{width:1px;height:46px;background:linear-gradient(180deg,var(--glow),transparent);animation:drip 1.9s ease-in-out infinite}
@keyframes drip{0%{transform:scaleY(0);transform-origin:top}55%{transform:scaleY(1);transform-origin:top}56%{transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* ============ MARQUEE ============ */
.marquee{
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  overflow:hidden;padding:20px 0;position:relative;z-index:4;background:rgba(4,8,13,.5);
}
.marq-track{display:flex;width:max-content;animation:marq 34s linear infinite}
.marquee:hover .marq-track{animation-play-state:paused}
.marq-track span{
  font-family:var(--mono);font-size:13px;letter-spacing:.3em;text-transform:uppercase;
  color:var(--text-dim);padding:0 34px;white-space:nowrap;
}
.marq-track span b{color:var(--ice);font-weight:500}
@keyframes marq{to{transform:translateX(-50%)}}

/* ============ SECTIONS ============ */
section{position:relative;z-index:4}
.sec-num{font-family:var(--serif);font-style:italic;color:rgba(159,232,255,.15);font-size:clamp(54px,7.5vw,96px);line-height:1;position:absolute;right:0;top:-20px;user-select:none}

/* MANIFESTO — 钉住式：画面不动，文字随滚动逐词点亮 */
#manifesto{height:250vh;padding:0}
.mani-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;overflow:hidden}
.mani-pin .wrap{position:relative;width:100%}
#manifesto p.big{
  font-size:clamp(23px,3.3vw,38px);line-height:1.6;font-weight:500;max-width:27em;letter-spacing:-.014em;
}
#manifesto p.big + p.big{margin-top:1.5em}
.drift{position:absolute;mix-blend-mode:screen;pointer-events:none;will-change:transform}
#drift1{width:400px;right:-8%;top:-16%;opacity:.5}
#drift2{width:320px;left:-14%;bottom:-28%;opacity:.35;transform:scaleX(-1)}

/* MACHINE REVEAL */
#reveal{height:480vh}   /* r36：再加长钉住区——每张过渡行程更长，滑动更慢更绵 */
.reveal-pin{position:sticky;top:0;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center}
#reveal-fogL,#reveal-fogR{position:absolute;top:50%;width:70vw;max-width:880px;mix-blend-mode:screen;opacity:.8;will-change:transform,opacity}
#reveal-fogL{left:0;transform:translate(-12%,-50%)}
#reveal-fogR{right:0;transform:translate(12%,-50%) scaleX(-1)}
.machine-stage{position:relative;width:min(62vw,500px);will-change:transform,opacity}
@media (pointer:fine){.machine-stage .mx-slide img{filter:drop-shadow(0 0 80px rgba(59,214,255,.22))}}
/* r33：滚动驱动整体右滑画廊——去背机器直接悬浮在页面底色上，
   不裁切、不缩放、无卡片框；整条内容随滚动向右滑，下一台从左侧淡入浮现。
   transform/opacity 由 main.js 按滚动进度逐帧写入，无 CSS 过渡 */
.mx-gal{position:relative}
.mx-track{display:flex;flex-direction:row-reverse;will-change:transform}
.mx-slide{flex:0 0 100%;margin:0;aspect-ratio:1017/1075;display:flex;align-items:center;justify-content:center}
.mx-slide img{width:100%;height:100%;object-fit:contain;user-select:none;-webkit-user-drag:none;pointer-events:none}
.mx-count{font-size:10px;letter-spacing:.22em;color:var(--ice-dim);margin-right:6px;align-self:center;pointer-events:none}
/* r31：残留 3D 入口（旧 index.html / 缓存页）一律隐藏，JS 会再物理移除 */
.reveal-cta,.open-panel[data-panel="model"]{display:none!important}
.mx-dots{display:flex;justify-content:center;gap:10px;margin-top:14px}
.mx-dots button{width:26px;border:0;padding:6px 0;background:none;cursor:pointer}
.mx-dots button::before{content:"";display:block;height:3px;border-radius:2px;background:rgba(159,232,255,.25);transition:background .3s}
.mx-dots button.on::before{background:var(--glow)}
@media (pointer:coarse){.machine-halo{inset:-30%;background:radial-gradient(circle,rgba(59,214,255,.24),transparent 60%)}}
.machine-halo{position:absolute;inset:-22%;background:radial-gradient(circle,rgba(59,214,255,.16),transparent 62%);z-index:-1}
.callout{
  position:absolute;font-family:var(--mono);font-size:clamp(9px,1.05vw,12px);letter-spacing:.1em;color:var(--ice);
  white-space:nowrap;opacity:0;transform:translateY(8px);transition:opacity .5s,transform .5s;
}
.callout small{display:block;color:var(--text-dim);letter-spacing:.18em;font-size:.8em;margin-bottom:2px}
.callout::after{content:"";position:absolute;width:44px;height:1px;background:var(--ice-dim);top:50%}
.callout.L{text-align:right}
.callout.L::after{left:calc(100% + 10px)}
.callout.R::after{right:calc(100% + 10px)}
.callout.show{opacity:1;transform:none}
#co1{top:13%;left:-54%}#co2{top:34%;right:-58%}#co3{top:60%;left:-58%}#co4{top:80%;right:-54%}
.reveal-title{
  position:absolute;bottom:8vh;left:50%;transform:translateX(-50%);text-align:center;
  opacity:0;transition:opacity .6s;width:100%;padding:0 20px;
  pointer-events:none;   /* r29：纯展示文字，放行下方画廊圆点的点击 */
}
.reveal-title.show{opacity:1}
.reveal-title .m{font-size:clamp(22px,3vw,32px);font-weight:600;letter-spacing:-.01em}
.reveal-title .m em{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--ice)}
.reveal-title .t{font-family:var(--mono);font-size:11px;letter-spacing:.28em;color:var(--ice-dim);text-transform:uppercase;margin-top:8px}

/* PRODUCT LINES — 大编号行 */
#lines{padding:16vh 0 10vh}
.rows{margin-top:64px;border-top:1px solid var(--line)}
.row{
  display:grid;grid-template-columns:110px 1fr 1.1fr auto;gap:28px;align-items:baseline;
  padding:42px 10px;border-bottom:1px solid var(--line);position:relative;transition:background .35s;
}
.row::before{
  content:"";position:absolute;inset:0;opacity:0;transition:.4s;pointer-events:none;
  background:radial-gradient(640px circle at var(--mx,50%) var(--my,50%),rgba(59,214,255,.08),transparent 46%);
}
.row:hover{background:rgba(7,16,25,.5)}
.row:hover::before{opacity:1}
.row .no{font-family:var(--serif);font-style:italic;font-size:clamp(24px,2.8vw,36px);color:var(--ice-dim);transition:color .3s}
.row:hover .no{color:var(--glow)}
.row h3{font-size:clamp(22px,2.8vw,34px);font-weight:600;letter-spacing:-.018em}
.row h3 small{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.26em;color:var(--ice-dim);text-transform:uppercase;margin-top:8px;font-weight:400}
.row p{font-size:15px;color:var(--text-dim);max-width:30em}
.row .rs{font-family:var(--mono);font-size:12px;color:var(--text-dim);text-align:right;line-height:2}
.row .rs b{color:var(--ice);font-weight:500}
.row .arrow{
  position:absolute;right:12px;top:38px;font-size:20px;color:var(--glow);
  opacity:0;transform:translateX(-10px);transition:.3s;
}
.row:hover .arrow{opacity:1;transform:none}

/* SPECS */
#specs{padding:12vh 0 14vh}
.tbl{border:1px solid var(--line);overflow-x:auto;margin-top:52px;background:rgba(4,8,13,.6)}
table{border-collapse:collapse;width:100%;min-width:780px;font-size:13px}
thead th{
  font-family:var(--mono);font-weight:500;font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ice-dim);text-align:left;padding:16px 18px;border-bottom:1px solid var(--line);white-space:nowrap;
}
tbody td{font-family:var(--mono);padding:15px 18px;border-bottom:1px solid rgba(159,232,255,.06);color:var(--text-dim);white-space:nowrap}
tbody td:first-child{color:var(--ice);font-weight:500}
tbody tr{transition:.2s}
tbody tr:hover td{background:rgba(59,214,255,.05);color:var(--text)}
tbody tr:last-child td{border-bottom:0}
.tbl-note{font-family:var(--mono);font-size:11px;color:var(--text-dim);margin-top:16px;letter-spacing:.05em}

/* CREAM */
#cream{position:relative;min-height:98vh;display:flex;align-items:center;overflow:hidden}
#cream-img{
  position:absolute;inset:0;background:center/cover no-repeat;
  opacity:.85;will-change:transform;transform:scale(1.12);
}
body.ld-cream #cream-img{background-image:url(../assets/cream1.webp?a=15)}
#cream::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(4,8,13,.92) 8%,rgba(4,8,13,.3) 55%,rgba(4,8,13,.75))}
#cream .wrap{position:relative;z-index:2;padding-top:14vh;padding-bottom:14vh}
#cream h2{max-width:12em}
#cream h2 em{color:var(--cream)}
#cream p{max-width:30em;margin-top:26px;color:var(--text-dim);font-size:17px}
.cream-stats{display:flex;gap:52px;margin-top:50px;flex-wrap:wrap}
.cream-stats div b{font-size:clamp(30px,3.6vw,44px);font-weight:600;color:var(--cream);display:block;line-height:1.2;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.cream-stats div span{font-family:var(--mono);font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--text-dim)}

/* JOURNEY — 粒子机器专属栏：机器悬浮，巨字随滚动滑过 */
#journey{height:340vh}
.journey-pin{position:sticky;top:0;height:100vh;overflow:hidden;display:flex;align-items:center;justify-content:center}
.j-intro{
  position:absolute;top:12vh;left:50%;transform:translateX(-50%);width:100%;text-align:center;padding:0 24px;
  font-family:var(--mono);font-size:11.5px;letter-spacing:.34em;text-transform:uppercase;color:var(--ice-dim);
}
.j-word{
  position:absolute;left:0;width:100%;text-align:center;
  font-weight:700;font-size:clamp(64px,15vw,215px);letter-spacing:.02em;line-height:1;
  color:var(--text);text-shadow:0 0 90px rgba(59,214,255,.3);
  will-change:transform,opacity;opacity:0;white-space:nowrap;
}
.j-word em{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--ice)}
@media (prefers-reduced-motion:reduce){
  .fill .fline{transition:none}
  .fill .fline.cur{transform:none}
  #journey{height:auto}
  .journey-pin{position:static;height:auto;padding:16vh 0;flex-direction:column;gap:24px}
  .j-word{position:static;opacity:1;font-size:clamp(44px,9vw,120px)}
  .j-intro{position:static;transform:none;margin-bottom:20px}
}
#capability{padding:16vh 0 12vh}
.cap-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin-top:56px}
.cap{background:var(--abyss);padding:34px 28px;transition:.3s}
.cap:hover{background:var(--deep)}
.cap .n{font-family:var(--serif);font-style:italic;font-size:19px;color:var(--glow);display:block;margin-bottom:14px}
.cap h3{font-size:17px;font-weight:600;margin-bottom:8px;letter-spacing:-.01em}
.cap p{font-size:14px;color:var(--text-dim)}

/* INQUIRY — 左右分栏收尾 */
#inquiry{min-height:100vh;display:flex;align-items:center;padding:16vh 0 12vh;position:relative;overflow:hidden}
#inq-fog{position:absolute;bottom:-34%;left:-12%;width:124vw;opacity:.24;mix-blend-mode:screen;pointer-events:none}
.inq-wrap{
  position:relative;z-index:2;width:100%;
  padding:0 clamp(24px,4vw,72px);
  display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(44px,8vw,180px);align-items:start;
}
.inq-h{font-size:clamp(38px,5.8vw,104px);line-height:1.06;margin-bottom:9vh;max-width:9em}
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:52px clamp(48px,5vw,110px);margin-bottom:8vh}
.f label{font-family:var(--sans);font-size:17px;font-weight:600;color:var(--text);display:block;margin-bottom:14px;letter-spacing:-.01em}
.f input{
  width:100%;background:transparent;border:0;border-bottom:1px solid var(--line);
  color:var(--text);font-family:var(--sans);font-size:18px;padding:8px 2px 14px;
  transition:border-color .25s;border-radius:0;
}
.f input::placeholder{color:rgba(138,163,177,.55)}
.f input:focus{outline:none;border-bottom-color:var(--glow)}
.f-wide{grid-column:1/-1}
.send{
  font-family:var(--mono);font-size:13px;letter-spacing:.26em;text-transform:uppercase;
  color:var(--abyss);background:linear-gradient(115deg,var(--glow),var(--ice));border:0;border-radius:999px;
  padding:21px 62px;transition:.28s;display:inline-block;cursor:pointer;
  box-shadow:0 0 26px rgba(59,214,255,.28);
}
.send:hover{filter:brightness(1.12);box-shadow:0 0 46px rgba(159,232,255,.5);transform:translateY(-2px)}
/* r23：反垃圾蜜罐字段，真人不可见（勿删） */
#inq .hp{position:absolute!important;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}
.form-msg{margin-top:22px;font-family:var(--mono);font-size:12.5px;color:var(--ice);letter-spacing:.04em;display:none;line-height:1.8}
.form-msg.on{display:block}
/* 右栏：推介 + 直达邮箱 */
.inq-right{padding-top:10vh}
.lead{font-size:clamp(18px,1.55vw,23px);line-height:1.75;color:var(--text-dim);max-width:22em}
.lead b{color:var(--glow);font-weight:600}
.quick{margin-top:11vh}
.quick span{font-size:17px;font-weight:600;color:var(--text);display:block;margin-bottom:16px;letter-spacing:-.01em}
.quick a{
  font-size:clamp(19px,1.9vw,27px);color:var(--glow);letter-spacing:-.01em;
  border-bottom:1px solid transparent;transition:.25s;
}
.quick a:hover{border-bottom-color:var(--glow)}
.quick .tel{font-size:12.5px;color:var(--text-dim);margin-top:18px;letter-spacing:.06em}
/* 回顶圆钮 */
#totop{
  position:absolute;right:clamp(24px,5vw,84px);bottom:9vh;z-index:3;
  width:64px;height:64px;border-radius:50%;border:1px solid rgba(159,232,255,.35);
  background:transparent;color:var(--text);font-size:22px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:.3s;
}
#totop:hover{border-color:var(--glow);color:var(--ice);transform:translateY(-4px);box-shadow:0 0 28px rgba(59,214,255,.2)}

/* FOOTER */
footer{border-top:1px solid var(--line);padding:46px 0;position:relative;z-index:4}
/* r25：旧 .foot 移除 */

/* ============ RESPONSIVE / MOTION ============ */
@media (max-width:1000px){
  .row{grid-template-columns:64px 1fr;gap:14px}
  .row p{grid-column:2}
  .row .rs{grid-column:2;text-align:left;display:flex;gap:22px;flex-wrap:wrap}
  .row .rs br{display:none}
}
@media (max-width:960px){
  .nav-links{display:none}
  .cap-grid{grid-template-columns:1fr 1fr}
  .inq-wrap{grid-template-columns:1fr;gap:60px}
  .inq-right{padding-top:0}
  .quick{margin-top:7vh}
  #totop{bottom:5vh;width:54px;height:54px}
  #co1{left:-8%}#co3{left:-10%}#co2{right:-8%}#co4{right:-6%}
  .callout{font-size:9px}
  #reveal{height:400vh}
}
@media (max-width:640px){
  #manifesto{height:170vh}
  #reveal{height:380vh}
  #journey{height:230vh}
  .fgrid{grid-template-columns:1fr;gap:34px}
  .inq-h{margin-bottom:6vh}
  .cap-grid{grid-template-columns:1fr}
  #ice-far{display:none}
  #hero{height:106vh}
  .callout.L{text-align:left}
  #co1{top:-9%;left:2%}#co2{top:-9%;right:2%}#co3{bottom:-13%;top:auto;left:2%}#co4{bottom:-13%;top:auto;right:2%}
  .callout::after{display:none}
  .row{padding:34px 6px}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none!important;transition-duration:.01ms!important}
  .rv,.split .wword{opacity:1;transform:none}
  .fill .w{opacity:1}
  #snow,#cur-dot,#cur-ring{display:none}
  body.entered{cursor:auto}
  #manifesto{height:auto}
  .mani-pin{position:static;height:auto;padding:18vh 0}
}
/* ============================================================
   PANEL — 全屏浮层（3D 机型 / 工厂介绍）
   内容按需 fetch，three.js 与模型只在打开时才下载
   ============================================================ */
#panel{
  position:fixed;inset:0;z-index:210;background:var(--abyss);
  opacity:0;visibility:hidden;transition:opacity .42s ease,visibility .42s;
  display:flex;flex-direction:column;
}
#panel::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 80% at 50% -12%,rgba(59,214,255,.13),transparent 62%);
}
#panel.on{opacity:1;visibility:visible}
body.panel-open{overflow:hidden}
body.panel-open #snow,body.panel-open #frost-overlay,
body.panel-open #cur-dot,body.panel-open #cur-ring,
body.panel-open .nav,body.panel-open #totop{opacity:0;pointer-events:none}
body.panel-open #cur-dot,body.panel-open #cur-ring{display:none}
/* r34：面板全屏遮挡期间，底下的无限动画一律暂停省性能 */
body.panel-open .marq-track,body.panel-open .fg-mist,body.panel-open .scroll-cue i{animation-play-state:paused}

/* 顶栏：细线 + 关闭 */
.panel-top{
  position:relative;z-index:3;flex:0 0 auto;
  display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:20px clamp(18px,4vw,44px);border-bottom:1px solid var(--line);
}
.panel-brand{display:flex;align-items:center;gap:11px;font-weight:700;font-size:14px;letter-spacing:.14em}
.panel-brand svg{width:20px;height:20px}
.panel-x{
  background:none;border:1px solid var(--line);color:var(--text-dim);cursor:pointer;
  width:40px;height:40px;border-radius:50%;font-size:17px;line-height:1;
  transition:.28s;display:flex;align-items:center;justify-content:center;flex:0 0 auto;
}
.panel-x:hover{border-color:var(--glow);color:var(--ice);background:rgba(59,214,255,.07)}
.panel-rule{position:absolute;left:0;bottom:-1px;height:1px;width:0;background:var(--glow);transition:width 1.1s cubic-bezier(.2,.7,.2,1)}
#panel.on .panel-rule{width:100%}

#panel-inner{
  position:relative;z-index:2;flex:1 1 auto;min-height:0;
  opacity:0;transform:translateY(16px);transition:opacity .55s .12s ease,transform .55s .12s cubic-bezier(.2,.7,.2,1);
}
#panel.on #panel-inner{opacity:1;transform:none}
#panel[data-kind="model"] #panel-inner{display:flex;flex-direction:column;overflow:hidden}
#panel[data-kind="factory"] #panel-inner{overflow-y:auto;overscroll-behavior:contain}

/* 首页入口按钮 */
.open-panel{
  display:inline-flex;align-items:center;gap:12px;cursor:pointer;
  font-family:var(--mono);font-size:11px;letter-spacing:.24em;text-transform:uppercase;
  color:var(--ice);background:rgba(59,214,255,.05);border:1px solid var(--ice-dim);
  padding:14px 26px;transition:.3s;
}
.open-panel:hover{background:var(--glow);border-color:var(--glow);color:var(--abyss)}
.open-panel .op-i{
  width:16px;height:16px;flex:0 0 auto;border:1px solid currentColor;
  position:relative;transform:rotate(45deg);transition:transform .45s cubic-bezier(.2,.7,.2,1);
}
.open-panel:hover .op-i{transform:rotate(135deg)}
.cap-cta{margin-top:46px;display:flex;justify-content:flex-start}

/* r29：3D 查看器样式已随功能下线移除 */

/* ---------- 工厂介绍 ---------- */
.fx{max-width:1080px;margin:0 auto;padding:clamp(38px,7vh,88px) clamp(20px,5vw,40px) 12vh}
.fx-head{max-width:36em}
.fx-title{font-size:clamp(28px,4.2vw,54px);font-weight:600;letter-spacing:-.022em;line-height:1.14;margin-top:20px}
.fx-title em{font-family:var(--serif);font-style:italic;font-weight:400;color:var(--ice);font-size:1.05em}
.fx-lead{margin-top:28px;color:var(--text-dim);font-size:17px;line-height:1.8}

.fx-figs{
  display:grid;grid-template-columns:repeat(6,1fr);gap:1px;background:var(--line);
  border:1px solid var(--line);margin:clamp(44px,7vh,76px) 0;
}
.fx-figs div{background:var(--abyss);padding:26px 18px;text-align:center}
.fx-figs b{display:block;font-size:clamp(19px,2.1vw,27px);font-weight:600;color:var(--ice);letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.fx-figs span{display:block;margin-top:9px;font-family:var(--mono);font-size:9.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--text-dim)}

.fx-block{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,4vw,64px);align-items:center;margin:clamp(46px,8vh,92px) 0}
.fx-block-flip .fx-plate{order:2}
.fx-text h4{font-size:clamp(20px,2.4vw,30px);font-weight:600;letter-spacing:-.018em}
.fx-text p{margin-top:18px;color:var(--text-dim);font-size:15.5px;line-height:1.85}
.fx-sub{font-size:14px!important;color:var(--ice-dim)!important;border-left:1px solid var(--line);padding-left:16px}

/* 图位：先用现有素材做冷色底，替换成真图时把 background-image 换掉即可 */
.fx-plate{
  position:relative;aspect-ratio:4/3;overflow:hidden;
  background-size:cover;background-position:center;
  /* r40：去掉边框与外发光——不再有任何"光圈"，改由边缘羽化融入页面（见 ::after） */
}
/* r37：遮罩改为"字幕条压底"——图片主体只留极轻冷色调，重压暗只在底部保证文字可读
   （原来整图 50%→88% 压黑是为占位冷色底设计的，换真实照片后会像隔着烟玻璃出怪光晕） */
/* r38：压底改为缓动渐变坡——按指数曲线取样，靠近图片处几乎无感、向下平滑加深，无分界带 */
.fx-plate::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,
    rgba(4,8,13,.07) 0%,rgba(4,8,13,.08) 42%,rgba(4,8,13,.11) 58%,
    rgba(4,8,13,.17) 70%,rgba(4,8,13,.28) 80%,rgba(4,8,13,.44) 88%,
    rgba(4,8,13,.63) 94%,rgba(4,8,13,.80) 100%);
  /* r40：四边用页面底色向内羽化，照片像从黑暗中浮现，与页面之间没有任何分界 */
  box-shadow:inset 0 0 26px 5px rgba(4,8,13,.92)}   /* r41：羽化收窄（约60px→30px） */
.fx-plate-cave{background-image:url(../assets/factory-a.webp?a=15)}
.fx-plate-frost{background-image:url(../assets/factory-b.webp?a=15)}
.fx-plate-cream{background-image:url(../assets/factory-c.webp?a=15)}
.fx-cap{
  position:absolute;left:16px;bottom:14px;z-index:2;font-size:9.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ice-dim);
}

.fx-h{font-size:clamp(20px,2.4vw,30px);font-weight:600;letter-spacing:-.018em;margin-bottom:40px}
.fx-steps{list-style:none;border-top:1px solid var(--line)}
.fx-steps li{display:grid;grid-template-columns:88px 1fr;gap:clamp(16px,3vw,40px);padding:28px 0;border-bottom:1px solid var(--line)}
.fx-no{font-family:var(--serif);font-style:italic;font-size:clamp(22px,2.6vw,32px);color:var(--ice-dim);line-height:1}
.fx-steps h5{font-size:17px;font-weight:600;letter-spacing:-.01em}
.fx-steps p{margin-top:9px;color:var(--text-dim);font-size:14.5px;line-height:1.8;max-width:44em}

.fx-cert{margin:clamp(46px,8vh,92px) 0}
.fx-cert-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.fx-cert-grid div{background:var(--abyss);padding:28px 22px}
.fx-cert-grid b{display:block;font-family:var(--mono);font-size:14px;letter-spacing:.14em;color:var(--glow)}
.fx-cert-grid span{display:block;margin-top:12px;font-size:13.5px;line-height:1.7;color:var(--text-dim)}
.fx-note{margin-top:20px;font-size:10.5px;letter-spacing:.05em;line-height:1.8;color:var(--text-dim);max-width:60em}

.fx-foot{border-top:1px solid var(--line);padding-top:clamp(34px,5vh,58px);text-align:center}
.fx-visit{max-width:34em;margin:0 auto;color:var(--text-dim);font-size:15.5px;line-height:1.85}
.fx-cta{
  display:inline-block;margin-top:34px;font-family:var(--mono);font-size:11px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--abyss);background:var(--glow);padding:16px 34px;transition:.3s;
}
.fx-cta:hover{background:var(--ice);box-shadow:0 0 40px rgba(159,232,255,.32)}
.fx-addr{margin-top:38px;font-size:10px;letter-spacing:.18em;color:var(--text-dim)}

/* ---------- PANEL 响应式 ---------- */
@media (max-width:900px){
  .fx-figs{grid-template-columns:repeat(3,1fr)}
  .fx-block,.fx-block-flip{grid-template-columns:1fr}
  .fx-block-flip .fx-plate{order:0}
  .fx-cert-grid{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:640px){
  .fx-figs{grid-template-columns:repeat(2,1fr)}
  .fx-steps li{grid-template-columns:52px 1fr;gap:14px}
}
@media (prefers-reduced-motion:reduce){
  #panel,#panel-inner,.panel-rule{transition:none}
  #panel-inner{transform:none}
}

/* iOS 动量滚动飞快，钉住段加长以恢复叙事节奏（仅手机尺寸的 iOS） */
@media (max-width:760px){
  html.ios #manifesto{height:215vh}
  html.ios #reveal{height:470vh}
  html.ios #journey{height:300vh}
}

/* ============ r15：FROST GUARD 演示 ============ */
#frost .fg-demo{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr);gap:56px;align-items:center;margin-top:54px}
.fg-stage{position:relative;border-radius:16px;overflow:hidden;aspect-ratio:900/1251;max-height:72vh;background:var(--deep);box-shadow:0 30px 80px rgba(0,0,0,.45)}
.fg-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:opacity 1.15s ease,transform 1.15s ease}
.fg-img-on{opacity:0;transform:scale(1.03)}
.fg-on .fg-img-on{opacity:1;transform:scale(1)}
.fg-on .fg-img-off{opacity:0;transform:scale(1.03)}
.fg-mist{position:absolute;inset:-22%;background:url(../assets/fog1b.webp?a=15) center/cover no-repeat;mix-blend-mode:screen;opacity:.5;pointer-events:none;transition:opacity 1.3s ease;animation:fgdrift 15s ease-in-out infinite alternate;will-change:transform,opacity}
.fg-on .fg-mist{opacity:0}
@keyframes fgdrift{from{transform:translate3d(-4%,-2%,0) scale(1.06)}to{transform:translate3d(4%,3%,0) scale(1.14)}}
.fg-state{position:absolute;left:16px;bottom:14px;font-size:11px;letter-spacing:.14em;color:#cfeeff;background:rgba(4,8,13,.55);backdrop-filter:blur(6px);padding:7px 12px;border-radius:7px;transition:color .5s,background .5s}
.fg-on .fg-state{color:#0a1420;background:rgba(159,232,255,.9)}
.fg-side p{max-width:38ch;margin:0 0 30px;color:var(--fg-soft,#b9cfdd);line-height:1.75}
.fg-switch{display:inline-flex;align-items:center;gap:16px;background:none;border:0;cursor:pointer;padding:0;color:inherit}
.fg-knob{position:relative;width:88px;height:44px;border-radius:44px;border:1px solid rgba(159,232,255,.35);background:rgba(159,232,255,.06);transition:background .45s,border-color .45s;flex:0 0 auto}
.fg-knob i{position:absolute;top:4px;left:4px;width:34px;height:34px;border-radius:50%;background:#5FA8C4;transition:transform .45s cubic-bezier(.6,-.2,.3,1.3),background .45s,box-shadow .45s}
.fg-on .fg-knob{background:rgba(159,232,255,.22);border-color:var(--ice)}
.fg-on .fg-knob i{transform:translateX(44px);background:var(--ice);box-shadow:0 0 22px rgba(159,232,255,.85)}
.fg-lbl{font-size:13px;letter-spacing:.22em;color:var(--ice-dim);transition:color .45s}
.fg-on .fg-lbl{color:var(--ice)}
.fg-hint{display:block;margin-top:22px;font-size:11px;letter-spacing:.1em;color:var(--ice-dim);opacity:.75}
@media(max-width:820px){
  #frost .fg-demo{grid-template-columns:1fr;gap:30px}
  .fg-stage{max-height:58vh}
}

/* ============ r16：CLIENTS（数字 / 双列滚动缩放画廊） ============ */
.cl-stats{display:flex;gap:8vw;margin:46px 0 10px;flex-wrap:wrap}
.cl-stats b{display:block;font-size:clamp(34px,4.6vw,58px);font-weight:600;color:var(--ice);letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.cl-stats span{display:block;margin-top:6px;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ice-dim)}
.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(14px,2.4vw,30px);margin-top:56px}
.fcard{border-radius:13px;overflow:hidden;aspect-ratio:10/9;transform-origin:50% 50%;will-change:transform;transform:translateZ(0)}
.fcard:nth-child(even){margin-top:clamp(24px,4vw,64px)}   /* 右列下沉错位，两列中心不同高，缩放节奏交错 */
.fcard:nth-child(odd):last-child{margin-bottom:clamp(24px,4vw,64px)}
.fcard img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.94) contrast(1.02)}
@media(max-width:820px){
  .cl-stats{gap:34px}
}
@media (prefers-reduced-motion: reduce){
  .fg-mist{animation:none}
  .fcard{transform:none!important}
}

/* ============ r20：WHY 滚动焦点逐行缩放 ============ */
#why .why-lines{margin-top:54px;display:grid;gap:clamp(12px,2.4vh,24px);max-width:19em}
.wline{margin:0;font-weight:600;font-size:clamp(21px,3.4vw,42px);letter-spacing:-.01em;line-height:1.22;
  color:var(--text-dim);opacity:.4;transform-origin:left center;will-change:transform;
  transition:color .4s linear,text-shadow .4s linear}
.wline.cur{color:var(--ice);text-shadow:0 0 26px rgba(159,232,255,.4)}
.why-wall{margin:70px 0 0}
.why-wall img{width:100%;border-radius:14px;display:block;opacity:.93}
.why-wall figcaption{margin-top:14px;font-size:11px;letter-spacing:.12em;color:var(--ice-dim);opacity:.75}
@media (prefers-reduced-motion: reduce){
  .wline{transform:none!important;opacity:1!important;color:var(--text)}
}

/* ============ r24：JOURNAL 博客精选 ============ */
#journal{padding:14vh 0 6vh}
.jn-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(14px,2vw,26px);margin-top:50px}
.jn-card{display:block;background:rgba(12,22,32,.55);border:1px solid rgba(159,232,255,.12);
  border-radius:14px;padding:26px 24px 24px;text-decoration:none;position:relative;overflow:hidden;
  transition:transform .45s cubic-bezier(.2,.7,.2,1),border-color .45s,box-shadow .45s}
.jn-card::before{content:"";position:absolute;inset:0 auto auto 0;width:100%;height:2px;
  background:linear-gradient(90deg,var(--glow),transparent 70%);opacity:0;transition:opacity .45s}
.jn-card:hover{transform:translateY(-6px);border-color:rgba(159,232,255,.32);
  box-shadow:0 18px 46px rgba(0,0,0,.4)}
.jn-card:hover::before{opacity:1}
.jn-date{font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;color:var(--ice-dim);text-transform:uppercase}
.jn-title{margin:12px 0 10px;font-size:clamp(16px,1.4vw,19px);font-weight:600;line-height:1.35;color:var(--text)}
.jn-card:hover .jn-title{color:var(--ice)}
.jn-ex{font-size:13px;line-height:1.7;color:var(--text-dim);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jn-read{display:inline-block;margin-top:16px;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;color:var(--ice-dim);transition:color .3s,transform .3s}
.jn-card:hover .jn-read{color:var(--ice);transform:translateX(4px)}
.jn-all{margin-top:34px}
.jn-all a{font-family:var(--mono);font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--ice-dim);text-decoration:none;transition:color .3s}
.jn-all a:hover{color:var(--ice)}

@media(max-width:820px){.jn-grid{grid-template-columns:1fr}}

/* ============ r25：正式页脚 ============ */
footer{padding:0;border-top:1px solid var(--line)}
.foot2{display:grid;grid-template-columns:1.5fr 1fr 1.2fr;gap:clamp(28px,5vw,90px);padding:64px 0 46px}
.ft-brand{font-size:21px;font-weight:700;letter-spacing:.08em;color:var(--text)}
.ft-desc{margin:14px 0 18px;font-size:13.5px;line-height:1.75;color:var(--text-dim);max-width:34ch}
.ft-cert{font-size:10.5px;letter-spacing:.2em;color:var(--ice-dim)}
.ft-col{display:flex;flex-direction:column;align-items:flex-start;gap:11px}
.ft-h{font-size:10.5px;letter-spacing:.24em;color:var(--ice-dim);margin-bottom:5px}
.ft-col a{color:var(--text-dim);text-decoration:none;font-size:13.5px;transition:color .3s,transform .3s}
.ft-col a:hover{color:var(--ice);transform:translateX(3px)}
.ft-line{font-size:12.5px;color:var(--text-dim);font-family:var(--mono);letter-spacing:.04em}
.ft-cta{margin-top:8px;font-family:var(--mono);font-size:11.5px!important;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ice)!important;border:1px solid rgba(159,232,255,.3);border-radius:999px;padding:9px 20px;transition:.3s}
.ft-cta:hover{background:rgba(159,232,255,.1);box-shadow:0 0 24px rgba(159,232,255,.25);transform:none!important}
.ft-bottom{border-top:1px solid var(--line);padding:18px 0 22px;font-size:10.5px;letter-spacing:.14em;color:var(--text-dim);opacity:.75}
@media(max-width:760px){
  .foot2{grid-template-columns:1fr;gap:34px;padding:50px 0 38px}
}
