/* Wison New Energies — round 4.
   One type scale, one button, one accent. White page, imagery does the work.
   §1 tokens  §2 base + type  §3 buttons  §4 header  §5 hero  §6 bands
   §7 stats  §8 stages  §9 products  §10 bases + globe  §11 sustainability
   §12 news  §13 footer  §14 direction B chapters  §15 motion  §16 responsive */
@import url('../fonts/_notosans.css');
@font-face{font-family:'Noto Sans SC';font-weight:400;font-display:swap;src:url('../fonts/NotoSansSC-400.woff2') format('woff2')}
@font-face{font-family:'Noto Sans SC';font-weight:500;font-display:swap;src:url('../fonts/NotoSansSC-500.woff2') format('woff2')}
@font-face{font-family:'Noto Sans SC';font-weight:700;font-display:swap;src:url('../fonts/NotoSansSC-700.woff2') format('woff2')}

/* ═══ §1 tokens ═══════════════════════════════════════════════════════ */
:root{
  --paper:#FFFFFF; --paper-2:#F6F7F9; --line:#E4EBF3;
  --ink:#16202E; --ink-2:#4A5A6E; --ink-3:#7C8B9C;
  --red:#DA291C;
  --sans:'Noto Sans','Noto Sans SC',system-ui,-apple-system,'PingFang SC','Hiragino Sans GB','Microsoft YaHei',sans-serif;
  /* the scale: desktop → 1440×715 → phone. Nothing else in the file sets a size. */
  --fs-display:clamp(2.5rem,5vw,4.5rem);      /* 72 */
  --fs-h2:clamp(2rem,3.4vw,3rem);             /* 48 */
  --fs-h3:clamp(1.25rem,1.9vw,1.75rem);       /* 28 */
  --fs-lead:clamp(1.125rem,1.45vw,1.3125rem); /* 21 */
  --fs-body:1.0625rem;                        /* 17 */
  --fs-ui:.9375rem;                           /* 15 */
  --fs-cap:.8125rem;                          /* 13 */
  --lh-tight:1.05; --lh-h2:1.1; --lh-h3:1.25; --lh-lead:1.5; --lh-body:1.6;
  --w-display:300; --w-h3:400;
  --track-display:-.02em; --track-h2:-.015em;
  --wrap:76rem; --gut:clamp(1rem,4vw,3.5rem);
  --r-panel:1.5rem; --r-card:1rem; --r-pill:999px;
  --band:clamp(4rem,9vh,7rem);
  --hdr:4rem;
}
html[lang="zh-Hans"]{
  --w-display:400; --w-h3:500; --track-display:0; --track-h2:0;
  --lh-tight:1.15; --lh-h2:1.2; --lh-h3:1.35; --lh-lead:1.7; --lh-body:1.8;
}

/* ═══ §2 base + type ══════════════════════════════════════════════════ */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font:400 var(--fs-body)/var(--lh-body) var(--sans);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}
img,video,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
h1,h2,h3,h4,p{margin:0}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:1rem;top:-3rem;background:var(--ink);color:#fff;padding:.5rem 1rem;border-radius:var(--r-pill);z-index:100}
.skip:focus{top:1rem}
.wrap{width:min(var(--wrap),100% - 2*var(--gut));margin-inline:auto}
.cover{width:100%;height:100%;object-fit:cover}

.display{font-size:var(--fs-display);line-height:var(--lh-tight);font-weight:var(--w-display);letter-spacing:var(--track-display);text-wrap:balance}
.h2{font-size:var(--fs-h2);line-height:var(--lh-h2);font-weight:var(--w-display);letter-spacing:var(--track-h2);text-wrap:balance}
.h3{font-size:var(--fs-h3);line-height:var(--lh-h3);font-weight:var(--w-h3)}
.lead{font-size:var(--fs-lead);line-height:var(--lh-lead);color:var(--ink-2);max-width:60ch;text-wrap:pretty}
.eyebrow{font-size:var(--fs-cap);line-height:1.4;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
html[lang="zh-Hans"] .eyebrow{letter-spacing:.2em}
.cap{font-size:var(--fs-cap);line-height:1.5;color:var(--ink-3)}
.more{display:inline-flex;align-items:center;gap:.35rem;font-size:var(--fs-ui);font-weight:500;color:var(--ink)}
.more svg,.btn svg{width:1.1em;height:1.1em;flex:none;transition:transform .25s}
a:hover .more svg,.btn:hover svg{transform:translateX(3px)}

/* ═══ §3 the one button ═══════════════════════════════════════════════ */
.btn{display:inline-flex;align-items:center;gap:.45rem;height:2.75rem;padding:0 1.4rem;border-radius:var(--r-pill);
  font-size:var(--fs-ui);font-weight:500;line-height:1;white-space:nowrap;border:1px solid transparent;
  transition:background .2s,color .2s,border-color .2s,transform .2s}
.btn:active{transform:scale(.97)}
.btn--fill{background:var(--ink);color:#fff}
.btn--fill:hover{background:#000}
.btn--white{background:#fff;color:var(--ink)}
.btn--white:hover{background:var(--paper-2)}
.btn--ghost{color:#fff;border-color:rgba(255,255,255,.6);backdrop-filter:blur(6px)}
.btn--ghost:hover{background:rgba(255,255,255,.14);border-color:#fff}
.btn--line{color:var(--ink);border-color:var(--ink)}
.btn--line:hover{background:var(--ink);color:#fff}
.btns{display:flex;flex-wrap:wrap;gap:.75rem}

/* ═══ §4 header ═══════════════════════════════════════════════════════ */
.hdr{position:fixed;inset:0 0 auto;z-index:50;height:var(--hdr);color:#fff;transition:background .3s,color .3s,box-shadow .3s}
.hdr__in{width:min(var(--wrap),100% - 2*var(--gut));margin-inline:auto;height:100%;display:flex;align-items:center;gap:2rem}
.hdr__logo{display:block;height:2.125rem}
.hdr__logo img{height:100%;width:auto}
.hdr__logo--dark{display:none}
.hdr__nav{margin-inline:auto}
.hdr__nav ul,.menu ul{list-style:none;margin:0;padding:0;display:flex;gap:2rem}
.hdr__nav a{font-size:var(--fs-ui);opacity:.86;transition:opacity .2s;padding:.5rem 0}
.hdr__nav a:hover{opacity:1}
.hdr__end{display:flex;align-items:center;gap:1rem}
.hdr__lang{font-size:var(--fs-cap);font-weight:500;letter-spacing:.06em;opacity:.86;padding:.4rem .7rem;border:1px solid currentColor;border-radius:var(--r-pill);line-height:1}
.hdr__lang:hover{opacity:1}
.hdr__menu{display:none;width:2.5rem;height:2.5rem;position:relative}
.hdr__menu span:not(.sr){position:absolute;left:.6rem;right:.6rem;height:1.5px;background:currentColor;transition:transform .3s,top .3s}
.hdr__menu span:nth-child(1){top:.95rem}.hdr__menu span:nth-child(2){top:1.45rem}
.hdr__menu[aria-expanded="true"] span:nth-child(1){top:1.2rem;transform:rotate(45deg)}
.hdr__menu[aria-expanded="true"] span:nth-child(2){top:1.2rem;transform:rotate(-45deg)}
.hdr--stuck,.hdr--open{background:rgba(255,255,255,.9);color:var(--ink);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 1px 0 var(--line)}
.hdr--stuck .hdr__logo--dark,.hdr--open .hdr__logo--dark{display:block}
.hdr--stuck .hdr__logo--light,.hdr--open .hdr__logo--light{display:none}
.hdr--stuck .hdr__nav a{color:var(--ink-2);opacity:1}
.hdr--stuck .hdr__nav a:hover{color:var(--ink)}
.menu{background:#fff;border-top:1px solid var(--line);padding:1rem var(--gut) 1.5rem}
.menu ul{flex-direction:column;gap:0}
.menu a{display:block;padding:.8rem 0;font-size:var(--fs-lead);border-bottom:1px solid var(--line)}

/* ═══ §5 hero ═════════════════════════════════════════════════════════ */
.hero{position:relative;min-height:100svh;display:grid;place-items:center;color:#fff;overflow:hidden;isolation:isolate;text-align:center;padding:calc(var(--hdr) + 2rem) 0 5rem}
.hero__media{position:absolute;inset:0;z-index:-1;background:var(--ink)}
.hero__media img,.hero__media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero__media video{opacity:0;transition:opacity .8s}
.hero.is-playing .hero__media video{opacity:1}
.hero__media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.28),rgba(0,0,0,.12) 45%,rgba(0,0,0,.42))}
.hero__in{display:grid;justify-items:center;gap:1.5rem}
.hero .lead{color:rgba(255,255,255,.88);max-width:44ch}
html[lang="zh-Hans"] .hero .lead{max-width:30em}
.hero .btns{justify-content:center;margin-top:.5rem}
.hero__cue{position:absolute;left:50%;bottom:1.5rem;transform:translateX(-50%);width:2.5rem;height:2.5rem;color:#fff;opacity:.8;transition:opacity .3s}
.hero__cue svg{width:100%;height:100%;animation:cue 2.2s ease-in-out infinite}
@keyframes cue{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}

/* the updates strip — the Gastech card, reduced to one line */
.upd{border-bottom:1px solid var(--line);background:var(--paper)}
.upd__in{min-height:3.5rem;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.5rem 1.25rem;padding:.65rem 0;font-size:var(--fs-ui)}
.upd__kind{color:var(--red);font-size:var(--fs-cap);font-weight:500;letter-spacing:.1em;text-transform:uppercase}
.upd__title{font-weight:500}
.upd__meta{color:var(--ink-2)}
.upd__cta{display:inline-flex;align-items:center;gap:.35rem;font-weight:500}
.upd__cta svg{width:1.1em;height:1.1em;transition:transform .25s}
.upd__cta:hover svg{transform:translateX(3px)}

/* ═══ §6 bands ════════════════════════════════════════════════════════ */
.band{padding-block:var(--band)}
.band--tint{background:var(--paper-2)}
.band--short{padding-block:calc(var(--band) * .7)}
.bhead{text-align:center;max-width:52rem;margin-inline:auto;display:grid;justify-items:center;gap:.75rem}
.bhead .lead{margin-top:.25rem}
.bhead--row{max-width:none;display:flex;justify-content:space-between;align-items:end;text-align:start;gap:2rem}
.bhead--row > div{display:grid;gap:.75rem}

/* ═══ §7 the numbers ══════════════════════════════════════════════════ */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-top:3rem}
.stat{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-card);padding:2rem 1rem 1.75rem;text-align:center}
.num{font-size:clamp(2.25rem,3.4vw,3.25rem);line-height:1;font-weight:300;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.num__unit{font-size:var(--fs-lead);color:var(--ink-2);margin-left:.15rem}
.stat p{margin-top:.6rem;color:var(--ink-2);font-size:var(--fs-ui)}
.stats--onimg{margin-top:0}
.stats--onimg .stat{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.28);color:#fff;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.stats--onimg .num__unit,.stats--onimg .stat p{color:rgba(255,255,255,.8)}

/* ═══ §8 EPCIC stages ═════════════════════════════════════════════════ */
.stage{margin-top:2.5rem}
.stage__tabs{display:flex;justify-content:space-between;gap:1rem;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
.stage__tabs::-webkit-scrollbar{display:none}
.stage__tabs [role=tab]{position:relative;padding:.9rem 0;font-size:var(--fs-ui);color:var(--ink-3);white-space:nowrap;transition:color .2s}
.stage__tabs [role=tab]:hover{color:var(--ink-2)}
.stage__tabs [role=tab][aria-selected="true"]{color:var(--ink);font-weight:500}
.stage__bar{position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--red);transform:scaleX(0);transform-origin:left}
.stage__panel{position:relative;margin-top:1.5rem;height:clamp(300px,48vh,540px);border-radius:var(--r-panel);overflow:hidden;background:var(--line)}
.stage__panel [role=tabpanel]{position:absolute;inset:0;opacity:0;transition:opacity .5s}
.stage__panel [role=tabpanel][data-on]{opacity:1}
.stage__panel [role=tabpanel][hidden]{display:block}
.stage__cap{position:absolute;inset:auto 0 0;padding:4rem 2.5rem 2.25rem;color:#fff;background:linear-gradient(180deg,transparent,rgba(0,0,0,.55))}
.stage__cap p{margin-top:.4rem;max-width:52ch;color:rgba(255,255,255,.86)}

/* ═══ §9 products ═════════════════════════════════════════════════════ */
.prods{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin-top:2.5rem}
.prods--3{grid-template-columns:repeat(3,1fr);margin-top:1.25rem}
.prod{display:block;background:var(--paper-2);border-radius:var(--r-panel);overflow:hidden}
.band--tint .prod{background:var(--paper)}
.prod > img,.prod > video,.ncard > img,.yard > video{width:100%;height:auto;object-fit:cover}
.prod > img,.prod > video{aspect-ratio:16/10;transition:transform .6s}
.prods--3 .prod > img{aspect-ratio:4/3}
.prod:hover > img,.prod:hover > video{transform:scale(1.025)}
.prod__cap{padding:1.5rem 1.75rem 1.75rem;display:grid;gap:.5rem}
.prod__cap p{color:var(--ink-2);max-width:48ch}
.prod__cap .more{margin-top:.5rem}

/* ═══ §10 the bases: the globe, then the two yards ════════════════════ */
.globe{position:relative;margin-top:2.5rem;height:min(72vh,720px);min-height:420px;border-radius:var(--r-panel);
  background:var(--paper);border:1px solid var(--line);overflow:hidden;isolation:isolate;cursor:grab;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.globe.is-dragging{cursor:grabbing}
.globe canvas{position:absolute;inset:0}
.globe__labels{position:absolute;inset:0;pointer-events:none}
.glab{position:absolute;left:0;top:0;transform:translate(-9999px,-9999px);white-space:nowrap;font-size:.75rem;line-height:1;color:var(--ink-2);opacity:0;transition:opacity .3s;will-change:transform}
.glab span{display:block;transform:translateY(-50%)}
.glab em{display:none}
.glab--hq,.glab--yard{color:var(--ink);font-weight:500}
.glab.is-left span{transform:translate(-100%,-50%)}
.glab.is-hot{color:var(--red)}
.globe__tip{position:absolute;left:0;top:0;z-index:2;pointer-events:none;background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:.75rem;
  box-shadow:0 12px 32px rgba(22,32,46,.12);padding:.8rem 1rem;min-width:11rem;max-width:16rem;font-size:var(--fs-cap);line-height:1.45}
.globe__tip b{display:block;font-size:var(--fs-ui);font-weight:500}
.globe__tip i{display:block;font-style:normal;color:var(--red);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;margin-top:.15rem}
.globe__tip span{display:block;color:var(--ink-3)}
.globe__tip p{margin-top:.4rem;color:var(--ink-2)}
.globe__tip em{display:none}
.globe__tip small{display:block;margin-top:.5rem;color:var(--ink-3);font-size:.7rem}
.globe__tip [hidden]{display:none}
.globe__bar{position:absolute;left:1.25rem;right:1.25rem;bottom:1.1rem;display:flex;justify-content:space-between;align-items:center;gap:1rem;pointer-events:none}
.globe__cap{font-size:var(--fs-cap);color:var(--ink-2);transition:opacity .3s}
.globe__steps{display:flex;gap:.4rem;pointer-events:auto}
.globe__step{font-size:.7rem;font-weight:500;letter-spacing:.1em;text-transform:uppercase;padding:.5rem .85rem;border:1px solid var(--line);border-radius:var(--r-pill);
  background:rgba(255,255,255,.85);color:var(--ink-2);transition:background .2s,color .2s,border-color .2s,transform .15s}
html[lang="zh-Hans"] .globe__step{letter-spacing:.15em;font-size:.75rem}
.globe__step:hover{border-color:var(--ink-3);color:var(--ink)}
.globe__step:active{transform:scale(.96)}
.globe__step.is-on{background:var(--ink);color:#fff;border-color:var(--ink)}
.globe[data-still] .globe__steps{display:none}

.yards{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin-top:1.25rem}
.yard{position:relative;background:var(--paper);border-radius:var(--r-panel);overflow:hidden;transition:box-shadow .3s}
.band--tint .yard{border:1px solid var(--line)}
.yard.is-hot{box-shadow:0 0 0 2px var(--red)}
.yard > video{aspect-ratio:16/9}
.yard__cap{padding:1.5rem 1.75rem 1.75rem;display:grid;gap:.4rem}
.yard__cap h3 a{display:inline-flex;align-items:center;gap:.4rem}
.yard__cap h3 svg{width:.8em;height:.8em;transition:transform .25s}
.yard__cap h3 a:hover svg{transform:translateX(3px)}
.yard__cap p{color:var(--ink-2);max-width:40ch}
.yard__cap small{color:var(--ink-3);font-size:var(--fs-cap);font-variant-numeric:tabular-nums}

/* ═══ §11 sustainability — one quiet line ═════════════════════════════ */
.sust{display:grid;grid-template-columns:1.1fr 1fr;gap:2rem 4rem;align-items:end}
.sust > div:first-child{display:grid;gap:.75rem}
.sust__side{display:grid;gap:1.5rem;justify-items:start}

/* ═══ §12 news ════════════════════════════════════════════════════════ */
.news{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem;margin-top:2.5rem}
.ncard{display:block;background:var(--paper-2);border-radius:var(--r-panel);overflow:hidden}
.ncard > img{aspect-ratio:16/10;transition:transform .6s}
.ncard:hover > img{transform:scale(1.025)}
.ncard__cap{padding:1.5rem 1.75rem 1.75rem;display:grid;gap:.6rem;align-content:start}
.ncard .cap{display:flex;gap:.75rem;flex-wrap:wrap}
.ncard .h3{font-size:1.25rem;line-height:1.35;font-weight:var(--w-h3);text-wrap:pretty}
.ncard .more{margin-top:.5rem}

/* ═══ §13 footer ══════════════════════════════════════════════════════ */
.ftr{border-top:1px solid var(--line);padding:4rem 0 2rem;font-size:var(--fs-ui)}
.ftr__grid{display:grid;grid-template-columns:1.5fr repeat(3,1fr);gap:2.5rem 3rem}
.ftr__brand{display:grid;gap:1rem;justify-items:start;align-content:start}
.ftr__brand img{height:2rem;width:auto}
.ftr__tag{font-size:var(--fs-lead);line-height:var(--lh-lead)}
.ftr__addr{color:var(--ink-2);font-size:var(--fs-cap);line-height:1.6}
.ftr__col h4{font-size:var(--fs-cap);font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);margin-bottom:1rem}
html[lang="zh-Hans"] .ftr__col h4{letter-spacing:.2em}
.ftr__col ul{list-style:none;margin:0;padding:0}
.ftr__col a{display:block;padding:.3rem 0;color:var(--ink-2)}
.ftr__col a:hover{color:var(--ink)}
.ftr__base{margin-top:3rem;padding-top:1.5rem;border-top:1px solid var(--line);display:flex;justify-content:space-between;flex-wrap:wrap;gap:.75rem 2rem;font-size:var(--fs-cap);color:var(--ink-3)}
.ftr__legal{display:flex;gap:1.5rem;align-items:center}
.ftr__legal a:hover{color:var(--ink)}
.ftr__dir{display:inline-flex;align-items:center;gap:.3rem;color:var(--ink-3)}
.ftr__dir svg{width:1em;height:1em}

/* ═══ §14 direction B — full-frame chapters ═══════════════════════════ */
html[data-dir="b"]{scroll-snap-type:y proximity}
.dir-b .hero,.chap,.dir-b .band,.dir-b .ftr{scroll-snap-align:start}
.chap{position:relative;height:min(100svh,900px);min-height:560px;display:flex;flex-direction:column;justify-content:space-between;
  padding:calc(var(--hdr) + 3rem) 0 3.5rem;color:#fff;overflow:hidden;isolation:isolate;text-align:center}
.chap__media{position:absolute;inset:0;z-index:-1;background:var(--ink)}
.chap__media img,.chap__media video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.chap__media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.55),rgba(0,0,0,.12) 42%,rgba(0,0,0,.1) 62%,rgba(0,0,0,.5))}
.chap__top{display:grid;justify-items:center;gap:.75rem}
.chap__top .eyebrow{color:rgba(255,255,255,.72)}
.chap__top .lead{color:rgba(255,255,255,.88);max-width:44ch}
.chap__bottom .btns{justify-content:center}
.hero--b{padding-bottom:6rem}

/* ═══ §15 motion — a fade-up once, and nothing else ═══════════════════ */
.reveal{opacity:0;transform:translateY(12px);transition:opacity .5s ease,transform .5s ease}
.reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .reveal{opacity:1;transform:none;transition:none}
  .hero__cue svg{animation:none}
  .prod > img,.prod > video,.ncard > img{transition:none}
}

/* ═══ §16 responsive ══════════════════════════════════════════════════ */
@media (max-width:1100px){
  .hdr__nav ul{gap:1.25rem}
}
@media (max-width:960px){
  .hdr__nav{display:none}
  .hdr__menu{display:block}
  .stats{grid-template-columns:1fr 1fr}
  .prods--3{grid-template-columns:1fr 1fr}
  .ftr__grid{grid-template-columns:1fr 1fr}
  .sust{grid-template-columns:1fr}
  .stage__panel{height:clamp(260px,42vh,460px)}
}
@media (max-width:640px){
  :root{--band:3.5rem}
  .hero{padding-bottom:4.5rem}
  .prods,.prods--3,.yards,.news,.stats,.ftr__grid{grid-template-columns:1fr}
  .stats{gap:.75rem}
  .stat{padding:1.4rem 1rem 1.25rem}
  .bhead--row{flex-direction:column;align-items:start}
  .globe{height:auto;aspect-ratio:1;min-height:0}
  .globe__cap{display:none}
  .globe__bar{justify-content:center}
  .stage__cap{padding:3rem 1.25rem 1.25rem}
  .prod__cap,.ncard__cap,.yard__cap{padding:1.25rem}
  .chap{min-height:100svh;padding-bottom:2.5rem}
  .ftr__base{flex-direction:column}
}
