/* ==========================================================
   SKYHY design system
   Palette: ink / paper / concrete / aluminium / steel / signal
   Signal amber is functional only: markers, attention, focus.
   ========================================================== */
:root{
  --ink:#121416; --ink-2:#1B1E21; --paper:#F5F5F2; --concrete:#E4E3DF;
  --alu:#9B9EA1; --steel:#585C60; --line:rgba(18,20,22,.14); --line-inv:rgba(245,245,242,.16);
  --signal:#E8A317;
  --bg:var(--paper); --fg:var(--ink); --muted:var(--steel);
  --m:clamp(20px,4.2vw,64px);            /* page margin */
  --gap:clamp(16px,2vw,28px);
  --max:1680px;
  --f:"Archivo","Noto Sans TC",system-ui,-apple-system,"PingFang TC","Microsoft JhengHei",sans-serif;
  --ease:cubic-bezier(.2,.7,.1,1);
  --nav-h:72px;
  color-scheme:light;
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
@media (prefers-color-scheme:dark){ :root:not([data-theme="light"]){ --bg:var(--paper); } }
:root[data-theme="dark"]{ --bg:var(--paper); }
*,*::before,*::after{box-sizing:inherit}
html{overflow-x:clip;scroll-padding-top:env(safe-area-inset-top,0px);-webkit-text-size-adjust:100%;height:100%}
body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--f);font-size:17px;line-height:1.55;
  font-variation-settings:"wdth" 100;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip}
html[lang="zh-Hant-TW"] body{line-height:1.8;letter-spacing:.02em}
img,svg{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px}
.skip{position:absolute;left:-9999px;top:8px;z-index:200;background:var(--ink);color:var(--paper);padding:10px 16px}
.skip:focus{left:8px}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- type scale ---------- */
.d1,.d2,.d3,.d4{font-weight:500;margin:0;letter-spacing:-.035em;line-height:.92}
.d1{font-size:clamp(46px,9.4vw,168px);font-variation-settings:"wdth" 118}
.d2{font-size:clamp(38px,6.4vw,112px);font-variation-settings:"wdth" 114;line-height:.96}
.d3{font-size:clamp(30px,4vw,64px);font-variation-settings:"wdth" 110;line-height:1.02;letter-spacing:-.025em}
.d4{font-size:clamp(22px,2.2vw,32px);font-variation-settings:"wdth" 106;line-height:1.15;letter-spacing:-.015em}
html[lang="zh-Hant-TW"] .d1,html[lang="zh-Hant-TW"] .d2,html[lang="zh-Hant-TW"] .d3{letter-spacing:.01em;line-height:1.12;font-weight:600}
html[lang="zh-Hant-TW"] .d1{font-size:clamp(40px,7.4vw,128px)}
html[lang="zh-Hant-TW"] .d2{font-size:clamp(34px,5.2vw,88px)}
.lede{font-size:clamp(19px,1.6vw,24px);line-height:1.45;max-width:34ch;letter-spacing:-.005em}
.body{max-width:58ch;color:var(--muted)}
.inv .body{color:var(--alu)}
.label{font-size:13px;font-variation-settings:"wdth" 82;font-weight:500;letter-spacing:.01em;font-variant-numeric:tabular-nums;color:var(--muted)}
.inv .label{color:var(--alu)}
.num{font-variant-numeric:tabular-nums}
p{margin:0 0 1em}

/* ---------- layout ---------- */
.wrap{padding-inline:var(--m)!important;max-width:var(--max);margin-inline:auto}
.grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap)}
.inv{background:var(--ink);color:var(--paper)}
.inv ::selection{background:var(--paper);color:var(--ink)}
::selection{background:var(--ink);color:var(--paper)}
.rule{height:1px;background:var(--line);border:0;margin:0}
.inv .rule{background:var(--line-inv)}
main{display:block;min-height:100vh}

/* ---------- navigation ---------- */
.nav{position:fixed;inset:0 0 auto 0;z-index:60;height:calc(var(--nav-h) + env(safe-area-inset-top,0px));padding-top:env(safe-area-inset-top,0px);
  display:flex;align-items:center;transition:background .5s var(--ease),color .5s var(--ease),transform .5s var(--ease)}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;width:100%}
.nav[data-tone="dark"]{color:var(--paper)}
.nav.solid{background:rgba(245,245,242,.94);color:var(--ink);box-shadow:0 1px 0 var(--line)}
.nav.solid[data-tone="dark"]{background:rgba(18,20,22,.94);color:var(--paper);box-shadow:0 1px 0 var(--line-inv)}
.nav.hide{transform:translateY(-100%)}
.brand{display:flex;align-items:baseline;gap:12px}
.brand img{height:15px;width:auto}
.brand .lb{display:none}
.nav:not([data-tone="dark"]) .brand .lw,.nav.solid:not([data-tone="dark"]) .brand .lw{display:none}
.nav:not([data-tone="dark"]) .brand .lb{display:block}
.brand small{font-size:12px;opacity:.7;letter-spacing:.2em}
.menu{display:flex;gap:clamp(14px,2vw,30px);align-items:center;font-size:14px}
.menu a{position:relative;padding:6px 0;opacity:.78;transition:opacity .2s}
.menu a:hover,.menu a[aria-current="page"]{opacity:1}
.lang{font-size:13px;border:1px solid currentColor;padding:5px 10px;background:none;cursor:pointer;opacity:.8;border-radius:0}
.lang:hover{opacity:1}
.burger{display:none;background:none;border:0;padding:10px;cursor:pointer;width:44px;height:44px;position:relative}
.burger span{position:absolute;left:10px;right:10px;height:1.5px;background:currentColor;transition:transform .35s var(--ease)}
.burger span:first-child{top:17px}.burger span:last-child{top:25px}
.nav.open .burger span:first-child{transform:translateY(4px) rotate(45deg)}
.nav.open .burger span:last-child{transform:translateY(-4px) rotate(-45deg)}
.sheet{position:fixed;inset:0;z-index:55;background:var(--ink);color:var(--paper);display:flex;flex-direction:column;justify-content:flex-end;
  padding:calc(var(--nav-h) + env(safe-area-inset-top,0px) + 24px) var(--m) calc(32px + env(safe-area-inset-bottom,0px));
  clip-path:inset(0 0 100% 0);transition:clip-path .6s var(--ease);visibility:hidden}
.sheet.open{clip-path:inset(0 0 0 0);visibility:visible}
.sheet a.big{display:flex;justify-content:space-between;align-items:baseline;font-size:clamp(34px,9vw,54px);font-variation-settings:"wdth" 116;
  letter-spacing:-.03em;line-height:1.1;padding:6px 0;border-bottom:1px solid var(--line-inv)}
.sheet a.big .label{font-size:12px}
.sheet .foot{display:flex;justify-content:space-between;margin-top:28px;font-size:14px;color:var(--alu)}
@media (max-width:980px){.menu{display:none}.burger{display:block}.nav .lang.desk{display:none}}
@media (min-width:981px){.sheet{display:none}}

/* ---------- buttons / links ---------- */
.btn{white-space:nowrap;display:inline-flex;align-items:center;gap:14px;min-height:52px;padding:0 26px;font-size:15px;font-weight:500;border:1px solid currentColor;
  background:transparent;cursor:pointer;transition:background .3s var(--ease),color .3s var(--ease);border-radius:0}
.btn.fill{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.inv .btn.fill,.btn.fill.light{background:var(--paper);color:var(--ink);border-color:var(--paper)}
.btn:hover{background:var(--fg);color:var(--bg)}
.inv .btn:hover{background:var(--paper);color:var(--ink)}
.btn.fill:hover{background:transparent;color:var(--fg)}
.inv .btn.fill:hover{background:transparent;color:var(--paper)}
.btn svg{width:16px;height:10px;transition:transform .3s var(--ease)}
.btn:hover svg{transform:translateX(4px)}
.tl{display:inline-flex;gap:10px;align-items:center;border-bottom:1px solid currentColor;padding-bottom:3px;font-weight:500}
.tl svg{width:14px;height:9px;transition:transform .3s var(--ease)}
.tl:hover svg{transform:translateX(4px)}

/* ---------- route transition ---------- */
#view{transition:opacity .45s var(--ease)}
#view.out{opacity:0}
.scan{position:fixed;left:0;right:0;top:0;height:1px;background:var(--signal);z-index:90;transform:scaleX(0);transform-origin:left;pointer-events:none}
.scan.go{animation:scan .8s var(--ease) forwards}
@keyframes scan{0%{transform:scaleX(0);opacity:1}70%{transform:scaleX(1);opacity:1}100%{transform:scaleX(1);opacity:0}}

/* ---------- reveal (used selectively) ---------- */
.rv{opacity:0;transform:translateY(18px);transition:opacity 1s var(--ease),transform 1.1s var(--ease)}
.rv.in{opacity:1;transform:none}
.mask{display:block;overflow:hidden;padding-bottom:.1em;margin-bottom:-.1em}
.mask>span{display:block;transform:translateY(105%);transition:transform 1.2s var(--ease)}
.in .mask>span,.mask.in>span{transform:none}
.mask:nth-child(2)>span{transition-delay:.08s}.mask:nth-child(3)>span{transition-delay:.16s}.mask:nth-child(4)>span{transition-delay:.24s}
.draw path,.draw line,.draw polyline{stroke-dasharray:var(--len,1200);stroke-dashoffset:var(--len,1200);transition:stroke-dashoffset 2.2s var(--ease)}
.draw.in path,.draw.in line,.draw.in polyline{stroke-dashoffset:0}

/* ---------- drawings / figures ---------- */
figure{margin:0}
.fig{position:relative;overflow:hidden;background:var(--concrete)}
.inv .fig,.fig.dark{background:var(--ink-2)}
.fig svg{width:100%;height:100%}
.cap{display:flex;justify-content:space-between;gap:20px;padding-top:12px;font-size:12.5px;font-variation-settings:"wdth" 84;color:var(--muted)}
.inv .cap{color:var(--alu)}
.ph{display:inline-block;border:1px dashed currentColor;padding:1px 7px;font-size:12px;font-variation-settings:"wdth" 84;opacity:.9;letter-spacing:.01em}
.tbc{background:rgba(232,163,23,.14);color:inherit;padding:0 5px;border-bottom:1px dashed var(--signal)}

/* ==========================================================
   HOME
   ========================================================== */
.hero{contain:paint;position:relative;height:100vh;height:100svh;min-height:620px;overflow:clip;background:var(--ink);color:var(--paper)}
.hero .stage{position:absolute;inset:-6% -2% 0 -2%;perspective:1100px;perspective-origin:62% 110%}
.hero .tower{position:absolute;left:46%;width:50%;bottom:-18%;height:260%;transform-origin:50% 100%;transform:rotateX(30deg);will-change:transform}
.hero .tower svg{width:100%;height:100%}
.hero .fog{position:absolute;inset:0;background:linear-gradient(180deg,rgba(18,20,22,1) 0%,rgba(18,20,22,.6) 16%,rgba(18,20,22,0) 38%),linear-gradient(180deg,rgba(18,20,22,.0) 0%,rgba(18,20,22,.1) 45%,rgba(18,20,22,.86) 88%),linear-gradient(90deg,rgba(18,20,22,.9) 0%,rgba(18,20,22,.35) 45%,rgba(18,20,22,0) 70%)}
.hero .drone{position:absolute;left:60%;top:30%;width:clamp(110px,13vw,220px);z-index:3}
.hero .drone .hose{position:absolute;left:50%;top:60%;width:1px;height:80vh;background:linear-gradient(var(--alu),rgba(155,158,161,0))}
.hero .drone svg{position:relative}
.hero .copy{position:absolute;left:0;right:0;bottom:0;z-index:4;padding-bottom:clamp(28px,6vh,72px)}
.hero h1{max-width:12ch;font-size:clamp(46px,8.2vw,150px)}
.hero .sub{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:28px;margin-top:clamp(24px,4vh,48px)}
.hero .sub p{margin:0;font-size:clamp(17px,1.4vw,21px);max-width:30ch;color:#D4D5D3}
.hero .ctas{display:flex;gap:12px;flex-wrap:wrap}
.hero .coord{position:absolute;right:var(--m);top:calc(var(--nav-h) + 24px);z-index:4;text-align:right;line-height:1.7}
.hero .note{position:absolute;left:61%;top:calc(34% - 26px);z-index:4;white-space:nowrap}
@media (max-width:760px){
  .hero .stage{perspective-origin:50% 120%}
  .hero .tower{left:14%;width:110%;height:220%;bottom:-10%}
  .hero .drone{left:56%;top:20%;width:92px}
  .hero .note{left:56%;top:calc(20% - 22px)}
  .hero .fog{background:linear-gradient(180deg,rgba(18,20,22,.15) 0%,rgba(18,20,22,.35) 40%,rgba(18,20,22,.94) 72%)}
  .hero .coord{display:none}
  .hero .ctas .btn{flex:1;justify-content:space-between}
}

/* problem: typographic statement */
.stmt{padding:clamp(110px,18vh,220px) 0 clamp(80px,12vh,160px)}
.stmt h2{grid-column:1/span 11}
.stmt h2 .lt{color:var(--alu)}
.stmt .aside{grid-column:7/span 5;margin-top:clamp(40px,8vh,110px)}
.stmt .aside .label{margin-bottom:18px;display:block}
.compare{grid-column:1/-1;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-top:clamp(70px,10vh,130px);border-top:1px solid var(--line)}
.compare>div{padding-top:22px}
.compare .a{grid-column:1/span 4}.compare .b{grid-column:7/span 5}
.compare ul{list-style:none;margin:14px 0 0;padding:0}
.compare li{padding:10px 0;border-bottom:1px solid var(--line);font-size:16px}
.compare .a li{color:var(--muted)}
@media (max-width:760px){.stmt .aside{grid-column:1/-1}.compare .a,.compare .b{grid-column:1/-1}.compare .b{margin-top:30px}}

/* capabilities: sticky facade canvas */
.caps{position:relative;background:var(--ink);color:var(--paper)}
.caps .grid{align-items:start}
.caps .canvas{grid-column:1/span 6;position:sticky;top:0;height:100vh;height:100svh;display:flex;align-items:center;padding:calc(var(--nav-h) + 10px) 0 30px}
.caps .canvas .fig{width:100%;height:100%;background:transparent}
.caps .chapters{grid-column:8/span 5}
.chap{min-height:100vh;display:flex;flex-direction:column;justify-content:center;padding:12vh 0}
.chap .k{font-size:clamp(56px,6vw,104px);font-variation-settings:"wdth" 100;font-weight:600;letter-spacing:-.05em;line-height:.85;color:transparent;-webkit-text-stroke:1px var(--alu);margin-bottom:28px;transition:color .8s var(--ease)}
.chap.on .k{color:var(--paper);-webkit-text-stroke-color:transparent}
.chap h3{margin-bottom:18px}
.chap ul.tags{list-style:none;padding:0;margin:22px 0 28px;display:flex;flex-wrap:wrap;gap:8px 18px;font-size:14px;color:var(--alu)}
.chap ul.tags li::before{content:"";display:inline-block;width:5px;height:5px;background:var(--signal);margin-right:8px;vertical-align:middle}
.layer{transition:opacity .9s var(--ease)}
.caps[data-step="0"] .l-insp,.caps[data-step="0"] .l-intel{opacity:0}
.caps[data-step="1"] .l-clean,.caps[data-step="1"] .l-intel{opacity:0}
.caps[data-step="2"] .l-clean{opacity:0}
.caps[data-step="2"] .l-insp{opacity:.35}
.sweep{transition:transform 1.6s var(--ease)}
@media (max-width:900px){
  .caps .canvas{grid-column:1/-1;height:50vh;height:50svh;top:0;z-index:3;background:var(--ink);padding:calc(var(--nav-h) + 4px) 0 6px}
  .caps .chapters{grid-column:1/-1;position:relative;z-index:1}
  .chap{min-height:75vh;min-height:75svh;justify-content:flex-start;padding:40px 0 80px}
  .chap .k{font-size:60px;margin-bottom:18px}
}

/* coating: quiet line */
.aside-line{padding:clamp(60px,9vh,110px) 0;border-bottom:1px solid var(--line)}
.aside-line .grid{align-items:end}
.aside-line .t{grid-column:1/span 3}
.aside-line h3{grid-column:4/span 6}
.aside-line .go{grid-column:11/span 2;justify-self:end}
@media (max-width:760px){.aside-line .t,.aside-line h3,.aside-line .go{grid-column:1/-1;justify-self:start;margin-top:12px}}

/* process as flight path */
.path{padding:clamp(100px,16vh,200px) 0 clamp(80px,12vh,150px)}
.path .head{grid-column:1/span 7}
.path .headr{grid-column:9/span 4;align-self:end}
.route{position:relative;margin-top:clamp(60px,10vh,120px)}
.route svg.line{position:absolute;left:0;right:0;top:9px;width:100%;height:40px;overflow:visible}
.route ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(6,1fr);gap:var(--gap);position:relative}
.route li{padding-top:52px;position:relative}
.route li::before{content:"";position:absolute;top:4px;left:0;width:11px;height:11px;border:1px solid var(--ink);background:var(--bg);transform:rotate(45deg)}
.route li .n{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.route li h4{font-size:clamp(20px,1.7vw,26px);font-weight:500;font-variation-settings:"wdth" 110;margin:6px 0 10px;letter-spacing:-.015em}
.route li p{font-size:14.5px;color:var(--muted);margin:0;max-width:24ch}
.route li:nth-child(5) h4::after{content:" *";color:var(--signal)}
@media (max-width:900px){
  .route svg.line{display:none}
  .route ol{grid-template-columns:1fr;gap:0;border-left:1px solid var(--ink);margin-left:5px}
  .route li{padding:0 0 34px 30px}
  .route li::before{left:-6px;top:6px}
  .path .head,.path .headr{grid-column:1/-1}.path .headr{margin-top:24px}
}

/* safety manifesto */
.manif{padding:clamp(110px,18vh,220px) 0 clamp(90px,14vh,170px)}
.manif h2{grid-column:1/span 11;margin-bottom:clamp(60px,10vh,120px)}
.manif h2 .lt{color:var(--steel)}
.logbook{grid-column:5/span 8;border-top:1px solid var(--line-inv)}
.logbook .row{display:grid;grid-template-columns:5ch 1fr auto;gap:20px;padding:15px 0;border-bottom:1px solid var(--line-inv);font-size:15.5px;align-items:baseline}
.logbook .row .label{font-size:12.5px}
.logbook .row .chk{width:13px;height:13px;border:1px solid var(--alu);position:relative;top:2px}
.logbook .row .chk::after{content:"";position:absolute;left:3px;top:0;width:4px;height:8px;border:solid var(--signal);border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}
.manif .foot{grid-column:5/span 8;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:20px;margin-top:40px}
@media (max-width:900px){.manif h2,.logbook,.manif .foot{grid-column:1/-1}}

/* single project frame */
.frame{padding:clamp(100px,16vh,190px) 0 0}
.frame .top{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:34px;flex-wrap:wrap}
.frame .fig{aspect-ratio:21/9}
.frame .over{position:absolute;inset:auto 0 0 0;padding:clamp(20px,3vw,40px);display:flex;justify-content:space-between;align-items:flex-end;gap:20px;color:var(--paper)}
@media (max-width:760px){.frame .fig{aspect-ratio:4/5}}

/* horizon / expansion */
.horizon{padding:clamp(110px,18vh,220px) 0 clamp(90px,12vh,150px);overflow:hidden}
.horizon .steps{display:flex;flex-direction:column;gap:0;margin-top:50px}
.horizon .steps span{display:block;font-size:clamp(40px,6vw,104px);font-variation-settings:"wdth" 120;font-weight:500;letter-spacing:-.04em;line-height:1.02;white-space:nowrap}
.horizon .steps span:nth-child(1){color:var(--ink)}
.horizon .steps span:nth-child(2){color:#6E7275;padding-left:5vw}
.horizon .steps span:nth-child(3){color:#8F9396;padding-left:10vw}
.horizon .steps span:nth-child(4){color:#AFB2B4;padding-left:15vw}
.horizon .steps span:nth-child(5){color:#C9CBCC;padding-left:20vw}
.horizon .steps em{font-style:normal;font-size:13px;letter-spacing:0;vertical-align:top;margin-left:12px;color:var(--muted);font-variation-settings:"wdth" 84;font-weight:400}
html[lang="zh-Hant-TW"] .horizon .steps span{letter-spacing:0}
@media (max-width:760px){.horizon .steps span{white-space:normal;padding-left:0!important}}

/* closing */
.close{padding:clamp(100px,16vh,200px) 0 clamp(60px,8vh,100px)}
.close a.huge{display:block;font-size:clamp(46px,10vw,180px);font-variation-settings:"wdth" 122;font-weight:500;letter-spacing:-.045em;line-height:.9}
.close a.huge .ar{display:inline-block;width:.6em;transition:transform .5s var(--ease)}
.close a.huge:hover .ar{transform:translateX(.15em)}
html[lang="zh-Hant-TW"] .close a.huge{letter-spacing:0;font-size:clamp(40px,8vw,140px)}

/* ==========================================================
   GENERIC PAGE OPENING (varied per page via modifiers)
   ========================================================== */
.p-open{padding:calc(var(--nav-h) + clamp(70px,14vh,170px)) 0 clamp(60px,10vh,120px)}
.p-open .label{display:block;margin-bottom:26px}
.p-open .lede{margin-top:34px}

/* services index */
.idx{border-top:1px solid var(--line)}
.idx a.row{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:center;padding:clamp(24px,4vh,44px) 0;border-bottom:1px solid var(--line);position:relative}
.idx .nm{grid-column:1/span 7;font-size:clamp(34px,5.2vw,92px);font-variation-settings:"wdth" 116;font-weight:500;letter-spacing:-.04em;line-height:.95;transition:transform .6s var(--ease)}
html[lang="zh-Hant-TW"] .idx .nm{letter-spacing:0;font-size:clamp(30px,4.2vw,72px)}
.idx .ds{grid-column:8/span 4;color:var(--muted);font-size:15.5px;max-width:38ch}
.idx .ar{grid-column:12;justify-self:end}
.idx .ar svg{width:28px;height:16px;transition:transform .4s var(--ease)}
.idx a.row:hover .nm{transform:translateX(14px)}
.idx a.row:hover .ar svg{transform:translateX(6px)}
.idx a.row.minor .nm{font-size:clamp(26px,3vw,48px);color:var(--steel)}
.idx .peek{position:fixed;width:280px;height:340px;pointer-events:none;z-index:40;opacity:0;transform:translate(-50%,-50%) scale(.94);transition:opacity .3s,transform .4s var(--ease);background:var(--ink);overflow:hidden}
.idx .peek.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
@media (hover:none),(max-width:900px){.idx .peek{display:none}}
@media (max-width:760px){.idx .nm,.idx .ds{grid-column:1/-1}.idx .ds{margin-top:12px}.idx .ar{display:none}}

.pillars{padding:clamp(90px,14vh,170px) 0}
.pillars .grid>*{min-width:0}

/* ---------- service detail ---------- */
.sv-hero{position:relative;min-height:100vh;min-height:100svh;display:grid;grid-template-rows:1fr auto}
.sv-hero .fig{position:absolute;inset:0;background:var(--ink)}
.sv-hero .copy{position:relative;z-index:2;align-self:end;padding:calc(var(--nav-h) + 60px) 0 clamp(36px,7vh,80px);color:var(--paper)}
.sv-hero .copy .lede{color:#D4D5D3}
.sv-hero .shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(18,20,22,0) 30%,rgba(18,20,22,.9) 92%)}
.ruler{position:absolute;right:var(--m);top:calc(var(--nav-h) + 30px);bottom:40px;z-index:2;width:60px;color:var(--alu);display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;font-size:11px;font-variation-settings:"wdth" 80;border-right:1px solid var(--line-inv);padding-right:10px}
.ruler span{position:relative}
.ruler span::after{content:"";position:absolute;right:-10px;top:50%;width:6px;height:1px;background:var(--alu)}
@media (max-width:760px){.ruler{display:none}}

.sv-body{padding:clamp(90px,14vh,170px) 0}
.sv-body .intro{grid-column:1/span 5}
.sv-body .intro-r{grid-column:7/span 5}
.spec{margin-top:clamp(70px,11vh,130px);border-top:1px solid var(--line)}
.spec dl{margin:0;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap)}
.spec dt{grid-column:1/span 4;padding:18px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:15px}
.spec dd{grid-column:5/span 8;margin:0;padding:18px 0;border-bottom:1px solid var(--line);font-size:16px}
@media (max-width:760px){.sv-body .intro,.sv-body .intro-r{grid-column:1/-1}.sv-body .intro-r{margin-top:28px}.spec dt,.spec dd{grid-column:1/-1}.spec dt{border:0;padding-bottom:0}}

.split{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:center}
.split .fig{grid-column:1/span 7;aspect-ratio:4/5}
.split .tx{grid-column:9/span 4}
.split.rev .fig{grid-column:6/span 7;grid-row:1}
.split.rev .tx{grid-column:1/span 4;grid-row:1}
@media (max-width:900px){.split .fig,.split .tx,.split.rev .fig,.split.rev .tx{grid-column:1/-1;grid-row:auto}.split .tx{margin-top:34px}.split .fig{aspect-ratio:4/3}}

/* inspection targets — a viewfinder list */
.targets{padding:clamp(90px,14vh,170px) 0}
.vf{position:relative;aspect-ratio:16/9;background:var(--ink);overflow:hidden}
.vf .corner{position:absolute;width:26px;height:26px;border:solid var(--paper);opacity:.8}
.vf .c1{left:18px;top:18px;border-width:1px 0 0 1px}.vf .c2{right:18px;top:18px;border-width:1px 1px 0 0}
.vf .c3{left:18px;bottom:18px;border-width:0 0 1px 1px}.vf .c4{right:18px;bottom:18px;border-width:0 1px 1px 0}
.vf .hud{position:absolute;left:24px;right:24px;bottom:22px;display:flex;justify-content:space-between;color:var(--paper);font-size:12px;font-variation-settings:"wdth" 82;opacity:.85}
.tlist{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);margin-top:34px}
.tlist button{all:unset;cursor:pointer;padding:18px 18px 18px 0;border-bottom:1px solid var(--line);font-size:17px;display:flex;justify-content:space-between;align-items:center;gap:12px}
.tlist button[aria-pressed="true"]{color:var(--ink)}
.tlist button[aria-pressed="false"]{color:var(--muted)}
.tlist button .dot{width:8px;height:8px;border:1px solid currentColor}
.tlist button[aria-pressed="true"] .dot{background:var(--signal);border-color:var(--signal)}
.tlist button:focus-visible{outline:2px solid var(--signal)}
@media (max-width:760px){.tlist{grid-template-columns:1fr 1fr}.vf{aspect-ratio:4/5}}

/* ==========================================================
   INTELLIGENCE (technical language)
   ========================================================== */
.int-open{padding:calc(var(--nav-h) + clamp(70px,14vh,160px)) 0 clamp(60px,9vh,110px)}
.status{display:inline-flex;align-items:center;gap:10px;font-size:13px;border:1px solid var(--line-inv);padding:6px 12px;color:var(--alu)}
.status i{width:7px;height:7px;background:var(--signal);display:block;animation:blink 2.4s steps(1) infinite}
@keyframes blink{50%{opacity:.25}}
.chain{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line-inv);margin-top:clamp(60px,9vh,110px)}
.chain div{padding:22px 20px 26px 0;border-right:1px solid var(--line-inv)}
.chain div:last-child{border-right:0}
.chain div+div{padding-left:20px}
.chain b{display:block;font-size:clamp(22px,2.4vw,38px);font-variation-settings:"wdth" 112;font-weight:500;letter-spacing:-.02em;margin:8px 0 10px}
.chain p{font-size:14.5px;color:var(--alu);margin:0;max-width:26ch}
@media (max-width:760px){.chain{grid-template-columns:1fr 1fr}.chain div:nth-child(2){border-right:0}.chain div:nth-child(3){padding-left:0}.chain div:nth-child(n+3){border-top:1px solid var(--line-inv)}}

.console{margin:clamp(40px,6vh,70px) 0 0;border:1px solid var(--line-inv);background:#0C0E10;display:grid;grid-template-columns:260px 1fr 300px;min-height:640px;font-size:13px}
.console .bar{grid-column:1/-1;display:flex;justify-content:space-between;align-items:center;padding:12px 18px;border-bottom:1px solid var(--line-inv);color:var(--alu);font-variation-settings:"wdth" 84}
.console .side{border-right:1px solid var(--line-inv);padding:18px}
.console .main{position:relative;padding:18px;display:flex;flex-direction:column}
.console .det{border-left:1px solid var(--line-inv);padding:18px;display:flex;flex-direction:column;gap:14px}
.console h5{margin:0 0 10px;font-size:12px;font-weight:500;color:var(--alu);font-variation-settings:"wdth" 84}
.console .kv{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line-inv);font-variant-numeric:tabular-nums}
.console .kv span:first-child{color:var(--alu)}
.console .sev{display:flex;gap:6px;margin-top:6px}
.console .sev button{all:unset;cursor:pointer;flex:1;text-align:center;padding:7px 0;border:1px solid var(--line-inv);color:var(--alu);font-size:12px}
.console .sev button[aria-pressed="true"]{border-color:var(--paper);color:var(--paper)}
.console .elev{flex:1;position:relative;display:flex;align-items:center;justify-content:center}
.console .elev svg{max-height:520px;width:auto;height:100%}
.console .mk{cursor:pointer}
.console .mk:focus{outline:none}
.console .mk:focus-visible rect{stroke:var(--paper);stroke-width:2}
.console .photo{aspect-ratio:4/3;background:#1B1E21;position:relative;overflow:hidden}
.console .timeline{display:flex;align-items:center;gap:12px;margin-top:14px;color:var(--alu)}
.console input[type=range]{flex:1;accent-color:var(--paper)}
.console .conceptnote{color:var(--alu);font-size:12px;line-height:1.5;margin-top:auto;border-top:1px solid var(--line-inv);padding-top:12px}
@media (max-width:1100px){.console{grid-template-columns:1fr;min-height:0}.console .side,.console .det{border:0;border-top:1px solid var(--line-inv)}.console .side{order:3}.console .elev svg{max-height:440px}}

.roadmap{padding:clamp(90px,14vh,170px) 0}
.rm{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line-inv)}
.rm>div{padding:26px 24px 30px 0}
.rm>div+div{padding-left:24px;border-left:1px solid var(--line-inv)}
.rm .state{display:inline-flex;gap:8px;align-items:center;font-size:12.5px;color:var(--alu);margin-bottom:16px}
.rm .state i{width:8px;height:8px;border:1px solid var(--alu)}
.rm .state.now i{background:var(--paper);border-color:var(--paper)}
.rm .state.dev i{background:var(--signal);border-color:var(--signal)}
.rm ul{list-style:none;padding:0;margin:14px 0 0;color:var(--alu);font-size:15px}
.rm li{padding:6px 0}
@media (max-width:760px){.rm{grid-template-columns:1fr}.rm>div+div{padding-left:0;border-left:0;border-top:1px solid var(--line-inv)}}

/* ==========================================================
   SAFETY (documentation language)
   ========================================================== */
.doc-head{padding:calc(var(--nav-h) + clamp(60px,12vh,150px)) 0 0}
.docmeta{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--ink);border-bottom:1px solid var(--line);margin-top:clamp(50px,8vh,90px);font-size:14px}
.docmeta div{padding:14px 16px 14px 0}
.docmeta div+div{padding-left:16px;border-left:1px solid var(--line)}
.docmeta .label{display:block;margin-bottom:4px}
@media (max-width:760px){.docmeta{grid-template-columns:1fr 1fr}.docmeta div:nth-child(3){padding-left:0;border-left:0}.docmeta div:nth-child(n+3){border-top:1px solid var(--line)}}
.phase{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);padding:clamp(60px,9vh,110px) 0;border-bottom:1px solid var(--line)}
.phase .ph-n{grid-column:1/span 2;font-size:clamp(48px,6vw,96px);font-variation-settings:"wdth" 120;font-weight:500;letter-spacing:-.05em;line-height:.9;color:var(--alu)}
.phase .ph-t{grid-column:3/span 4}
.phase .ph-t p{color:var(--muted);margin-top:16px;max-width:36ch}
.phase .ph-c{grid-column:8/span 5}
.phase table{width:100%;border-collapse:collapse;font-size:15px}
.phase th{text-align:left;font-weight:500;font-size:12.5px;color:var(--muted);font-variation-settings:"wdth" 84;padding:0 0 10px;border-bottom:1px solid var(--ink)}
.phase td{padding:13px 0;border-bottom:1px solid var(--line);vertical-align:top}
.phase td:last-child{color:var(--muted);text-align:right;white-space:nowrap;padding-left:14px;font-size:13.5px}
@media (max-width:900px){.phase .ph-n{grid-column:1/-1}.phase .ph-t{grid-column:1/-1;margin-top:10px}.phase .ph-c{grid-column:1/-1;margin-top:30px}}
.site-diag{padding:clamp(90px,14vh,170px) 0}
.site-diag .fig{aspect-ratio:16/8;background:var(--paper);border:1px solid var(--line)}
@media (max-width:760px){.site-diag .fig{aspect-ratio:1/1.05}}
.verify{padding:clamp(80px,12vh,150px) 0}
.verify .rows{grid-column:6/span 7;border-top:1px solid var(--line-inv)}
.verify .rows div{display:flex;justify-content:space-between;gap:20px;padding:16px 0;border-bottom:1px solid var(--line-inv);font-size:15.5px}
.verify .t{grid-column:1/span 4}
@media (max-width:900px){.verify .rows,.verify .t{grid-column:1/-1}.verify .rows{margin-top:36px}}

/* ==========================================================
   PROJECTS
   ========================================================== */
.pj-open{padding:calc(var(--nav-h) + clamp(70px,14vh,170px)) 0 clamp(40px,6vh,70px)}
.pj-filter{display:flex;gap:22px;flex-wrap:wrap;font-size:14.5px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-top:clamp(40px,7vh,80px)}
.pj-filter button{all:unset;cursor:pointer;color:var(--muted);padding:4px 0}
.pj-filter button[aria-pressed="true"]{color:var(--ink);border-bottom:1px solid var(--ink)}
.pj-filter button:focus-visible{outline:2px solid var(--signal)}
.pj-list{padding:clamp(40px,7vh,80px) 0 clamp(90px,14vh,170px)}
.pj{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);margin-bottom:clamp(80px,13vh,160px);align-items:end}
.pj .fig{aspect-ratio:3/2;overflow:hidden}
.pj .meta h3{margin:14px 0 12px}
.pj.a .fig{grid-column:1/span 8}.pj.a .meta{grid-column:9/span 4}
.pj.b .fig{grid-column:5/span 8;grid-row:1}.pj.b .meta{grid-column:1/span 3;grid-row:1}
.pj.c .fig{grid-column:3/span 6;aspect-ratio:4/5}.pj.c .meta{grid-column:9/span 3}
@media (max-width:900px){.pj .fig,.pj .meta,.pj.b .fig,.pj.b .meta,.pj.c .fig,.pj.c .meta{grid-column:1/-1;grid-row:auto}.pj .meta{margin-top:18px}.pj.c .fig{aspect-ratio:3/2}}
.pj-note{grid-column:1/-1;border-top:1px solid var(--line);padding-top:20px;display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}
.pd-hero{position:relative;height:88vh;height:88svh;min-height:560px;background:var(--ink);color:var(--paper);overflow:hidden}
.pd-hero .fig{position:absolute;inset:0}
.pd-hero .copy{position:absolute;left:0;right:0;bottom:0;padding-bottom:clamp(30px,6vh,70px);z-index:2}
.pd-facts{display:grid;grid-template-columns:repeat(5,1fr);border-bottom:1px solid var(--line)}
.pd-facts div{padding:20px 16px 22px 0;font-size:15px}
.pd-facts div+div{padding-left:16px;border-left:1px solid var(--line)}
.pd-facts .label{display:block;margin-bottom:6px}
@media (max-width:760px){.pd-facts{grid-template-columns:1fr 1fr}.pd-facts div{border-left:0!important;padding-left:0!important;border-top:1px solid var(--line)}}
.pd-body{padding:clamp(80px,12vh,150px) 0}
.pd-body section{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);padding:34px 0;border-top:1px solid var(--line)}
.pd-body h2{grid-column:1/span 4;font-size:clamp(20px,1.8vw,26px);font-weight:500;font-variation-settings:"wdth" 108;margin:0}
.pd-body section>div{grid-column:6/span 7}
.slot{border:1px dashed var(--alu);padding:18px 20px;color:var(--muted);font-size:15px}
@media (max-width:760px){.pd-body h2,.pd-body section>div{grid-column:1/-1}.pd-body section>div{margin-top:14px}}

/* ==========================================================
   ABOUT
   ========================================================== */
.ab-open{min-height:100vh;min-height:100svh;display:flex;align-items:flex-end;padding:calc(var(--nav-h) + 80px) 0 clamp(50px,9vh,110px);position:relative;overflow:hidden}
.ab-open .sky{position:absolute;inset:0;z-index:0}
.ab-open .wrap{position:relative;z-index:1;width:100%}
.ab-open h1{max-width:14ch}
.ab-now{padding:clamp(110px,18vh,220px) 0}
.ab-now .l{grid-column:1/span 4}
.ab-now .r{grid-column:6/span 7}
.build{list-style:none;padding:0;margin:40px 0 0;border-top:1px solid var(--line)}
.build li{display:grid;grid-template-columns:1fr 2fr;gap:20px;padding:18px 0;border-bottom:1px solid var(--line)}
.build li b{font-weight:500}
.build li span{color:var(--muted);font-size:15.5px}
@media (max-width:760px){.ab-now .l,.ab-now .r{grid-column:1/-1}.ab-now .r{margin-top:30px}.build li{grid-template-columns:1fr}.build li span{margin-top:-10px}}
.principles{padding:clamp(80px,12vh,150px) 0 clamp(110px,16vh,200px)}
.principles p.big{font-size:clamp(28px,3.6vw,58px);font-variation-settings:"wdth" 108;line-height:1.12;letter-spacing:-.025em;margin:0 0 .5em;max-width:22ch}
.principles p.big:nth-child(2){margin-left:auto;text-align:right}
.principles p.big:nth-child(3){margin-left:16%}
.principles p.big span{color:var(--alu)}
html[lang="zh-Hant-TW"] .principles p.big{letter-spacing:0}

/* ==========================================================
   CONTACT
   ========================================================== */
.ct{padding:calc(var(--nav-h) + clamp(60px,12vh,150px)) 0 clamp(80px,12vh,150px)}
.ct .l{grid-column:1/span 4;position:sticky;top:calc(var(--nav-h) + 40px);align-self:start}
.ct .r{grid-column:6/span 7}
.ct .direct{margin-top:clamp(40px,8vh,90px);border-top:1px solid var(--line);font-size:15.5px}
.ct .direct div{display:flex;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--line)}
.ct .direct div span:first-child{color:var(--muted)}
@media (max-width:900px){.ct .l,.ct .r{grid-column:1/-1;position:static}.ct .r{margin-top:50px}}
fieldset{border:0;margin:0 0 clamp(40px,7vh,70px);padding:0}
legend{display:flex;align-items:baseline;gap:18px;padding:0 0 18px;width:100%;border-bottom:1px solid var(--ink)}
legend .n{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
legend .t{font-size:clamp(22px,2vw,30px);font-variation-settings:"wdth" 110;font-weight:500;letter-spacing:-.015em}
.fgrid{display:grid;grid-template-columns:1fr 1fr;column-gap:var(--gap)}
.f{position:relative;border-bottom:1px solid var(--line);padding:22px 0 10px}
.f.w{grid-column:1/-1}
.f label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
.f label .opt{opacity:.7}
.f input,.f select,.f textarea{width:100%;border:0;background:transparent;padding:6px 0 8px;font-size:18px;border-radius:0;outline:none;-webkit-appearance:none;appearance:none}
.f select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23585C60'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 4px center;padding-right:28px;cursor:pointer}
.f textarea{min-height:130px;resize:vertical;line-height:1.5}
.f:focus-within{border-bottom-color:var(--ink)}
.f:focus-within::after{content:"";position:absolute;left:0;bottom:-1px;width:40px;height:2px;background:var(--signal)}
.f .err{display:none;color:#A33A12;font-size:13px;margin-top:4px}
.f.bad .err{display:block}
.f.bad{border-bottom-color:#A33A12}
.chips{display:flex;flex-wrap:wrap;gap:0;margin-top:8px;border:1px solid var(--line)}
.chips label{margin:0;flex:1 1 auto;position:relative}
.chips input{position:absolute;opacity:0;pointer-events:none}
.chips span{display:block;text-align:center;padding:12px 14px;font-size:15px;color:var(--ink);cursor:pointer;border-right:1px solid var(--line);white-space:nowrap}
.chips label:last-child span{border-right:0}
.chips input:checked+span{background:var(--ink);color:var(--paper)}
.chips input:focus-visible+span{outline:2px solid var(--signal);outline-offset:-2px}
.submit{display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap}
.submit p{font-size:13.5px;color:var(--muted);max-width:44ch;margin:0}
.sent{border-top:1px solid var(--ink);padding-top:30px}
@media (max-width:640px){.fgrid{grid-template-columns:1fr}.chips span{white-space:normal}.chips label{flex:1 1 50%}.chips label:nth-child(2n) span{border-right:0}.chips label span{border-bottom:1px solid var(--line)}.submit .btn{width:100%;justify-content:space-between}}

/* ==========================================================
   INSIGHTS / LEGAL / 404
   ========================================================== */
.plain{padding:calc(var(--nav-h) + clamp(60px,12vh,150px)) 0 clamp(80px,12vh,150px)}
.plain .col{max-width:720px}
.plain h2{font-size:22px;font-weight:500;margin:44px 0 12px;font-variation-settings:"wdth" 106}
.topics{border-top:1px solid var(--line);margin-top:50px}
.topics div{display:grid;grid-template-columns:1fr auto;padding:18px 0;border-bottom:1px solid var(--line);font-size:clamp(19px,1.8vw,24px);font-variation-settings:"wdth" 106}
.topics div span:last-child{font-size:13px;color:var(--muted);align-self:center}

/* ==========================================================
   FOOTER
   ========================================================== */
.site-foot{background:var(--ink);color:var(--paper);padding:clamp(70px,10vh,120px) 0 calc(30px + env(safe-area-inset-bottom,0px))}
.site-foot .brandline{grid-column:1/span 5}
.site-foot .brandline img{height:22px;width:auto;margin-bottom:22px}
.site-foot .brandline p{color:var(--alu);max-width:30ch;font-size:15px}
.site-foot nav{grid-column:7/span 3;display:flex;flex-direction:column;gap:9px;font-size:15px}
.site-foot .cx{grid-column:10/span 3;display:flex;flex-direction:column;gap:9px;font-size:15px}
.site-foot a{opacity:.8}.site-foot a:hover{opacity:1}
.site-foot .base{grid-column:1/-1;display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-top:clamp(60px,10vh,110px);padding-top:20px;border-top:1px solid var(--line-inv);font-size:13px;color:var(--alu)}
.site-foot .base div{display:flex;gap:20px;flex-wrap:wrap}
@media (max-width:760px){.site-foot .brandline,.site-foot nav,.site-foot .cx{grid-column:1/-1}.site-foot nav,.site-foot .cx{margin-top:36px}}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
  .rv,.mask>span{opacity:1!important;transform:none!important}
  .draw path,.draw line,.draw polyline{stroke-dashoffset:0!important}
  .hero .tower{transform:rotateX(30deg)!important}
}

[tabindex="-1"]:focus{outline:none}
.sv-hero .copy{width:100%}
.vfimg{position:absolute;inset:0}.vfimg svg{width:100%;height:100%}
.idx{border-top:0}.idx a.row:first-of-type{border-top:1px solid var(--line)}
.ab-open .sky{inset:0 0 auto 0;height:58%}
.ab-open .sky svg{width:100%;height:100%}
.ab-open h1{max-width:20ch}
@media (max-width:760px){.ab-open .sky{height:46%}}
@media (max-width:760px){
  .grid>*{grid-column:1/-1!important}
  .site-diag .fig{aspect-ratio:auto;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .site-diag .fig svg{min-width:880px;height:auto}
}
/* ==========================================================
   V2 — typography system (EN and zh tuned separately)
   ========================================================== */
.d1{font-size:clamp(42px,6.8vw,124px);font-variation-settings:"wdth" 116;line-height:.94}
.d2{font-size:clamp(32px,4.1vw,70px);font-variation-settings:"wdth" 112;line-height:1.01;letter-spacing:-.03em}
.d3{font-size:clamp(25px,2.5vw,40px);font-variation-settings:"wdth" 108;line-height:1.1;letter-spacing:-.02em}
.d4{font-size:clamp(19px,1.55vw,25px);line-height:1.25}
.d1,.d2,.d3,.d4{text-wrap:balance}
p,li,dd,td{text-wrap:pretty}
.lede{max-width:40ch;font-size:clamp(18px,1.4vw,21px);line-height:1.5}
.body{max-width:62ch}
.hero h1{font-size:clamp(44px,7.2vw,132px)}
.nw{white-space:nowrap}
html[lang="zh-Hant-TW"] .d1{font-size:clamp(36px,5.6vw,100px);line-height:1.16;letter-spacing:.02em;font-weight:600}
html[lang="zh-Hant-TW"] .d2{font-size:clamp(28px,3.3vw,56px);line-height:1.3;letter-spacing:.03em;font-weight:600}
html[lang="zh-Hant-TW"] .d3{font-size:clamp(22px,2.1vw,34px);line-height:1.45;letter-spacing:.03em;font-weight:600}
html[lang="zh-Hant-TW"] .d4{font-size:clamp(18px,1.4vw,22px);line-height:1.6;letter-spacing:.03em;font-weight:500}
html[lang="zh-Hant-TW"] .lede{max-width:27em;font-size:clamp(17px,1.25vw,20px);line-height:1.8}
html[lang="zh-Hant-TW"] .body{max-width:34em;line-height:1.85}
html[lang="zh-Hant-TW"] .hero h1{font-size:clamp(38px,5.8vw,104px);max-width:none}
html[lang="zh-Hant-TW"] .hero .sub p{max-width:22em}
html[lang="zh-Hant-TW"] :is(h1,h2,h3,p)[style*="ch"]{max-width:30em!important}
html[lang="zh-Hant-TW"] .ab-open h1{max-width:none}
html[lang="zh-Hant-TW"] .idx .ds{max-width:22em}
.sv-t{max-width:18ch}
html[lang="zh-Hant-TW"] .sv-t{max-width:none}
.ab-open h1{max-width:24ch}
.int-open h1{max-width:16ch}
html[lang="zh-Hant-TW"] .int-open h1{max-width:none}

/* sizes of recurring display moments, recalibrated */
.close a.huge{font-size:clamp(40px,7vw,128px)}
html[lang="zh-Hant-TW"] .close a.huge{font-size:clamp(34px,5.4vw,96px);letter-spacing:.02em}
.idx .nm{font-size:clamp(28px,3.6vw,60px)}
.idx a.row.minor .nm{font-size:clamp(24px,2.5vw,40px)}
html[lang="zh-Hant-TW"] .idx .nm{font-size:clamp(24px,2.8vw,46px)}
html[lang="zh-Hant-TW"] .idx a.row.minor .nm{font-size:clamp(21px,2.1vw,34px)}
.chap .k{font-size:clamp(48px,5vw,88px)}
.horizon .steps span{font-size:clamp(36px,5.2vw,92px)}
html[lang="zh-Hant-TW"] .horizon .steps span{font-size:clamp(32px,4.4vw,76px)}
.stmt{padding-block:clamp(100px,16vh,190px) clamp(70px,10vh,130px)}
.manif h2{margin-bottom:clamp(50px,8vh,100px)}
.frame .top{margin-bottom:26px}

/* ==========================================================
   V2 — micro-interaction language
   ========================================================== */
.zoom{overflow:hidden}
.zoom>svg{transition:transform 1.8s var(--ease);transform-origin:50% 55%}
a:hover>.zoom>svg,a:focus-visible>.zoom>svg,.pj:hover .zoom>svg{transform:scale(1.045)}
.framelink,.figlink{display:block}
.tl{border-bottom:0;padding-bottom:4px;background:linear-gradient(currentColor,currentColor) 0 100%/calc(100% - 24px) 1px no-repeat;transition:background-size .55s var(--ease)}
.tl:not(:has(svg)){background-size:100% 1px}
.tl:hover,.tl:focus-visible{background-size:100% 1px}
.menu a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform .45s var(--ease)}
.menu a:hover::after,.menu a[aria-current="page"]::after{transform:scaleX(1)}
.rv{transform:translateY(10px)}

/* ==========================================================
   SERVICES — contained hover preview
   ========================================================== */
.idx a.row{min-height:clamp(110px,15vh,170px)}
.idx .nm{grid-column:1/span 6}
.idx .pvslot{grid-column:7/span 2;position:relative;align-self:stretch}
.idx .pv{position:absolute;left:15%;width:70%;top:50%;aspect-ratio:4/5;transform:translateY(-50%) scale(.97);opacity:0;overflow:hidden;background:var(--ink);pointer-events:none;transition:opacity .5s var(--ease),transform .9s var(--ease)}
.idx .pv svg{width:100%;height:100%;transition:transform 2s var(--ease)}
.idx a.row:hover .pv,.idx a.row:focus-visible .pv{opacity:1;transform:translateY(-50%)}
.idx a.row:hover .pv svg{transform:scale(1.05)}
.idx .ds{grid-column:9/span 3}
.idx a.row:hover .nm{transform:translateX(8px)}
@media (max-width:760px){
  .idx a.row{grid-template-columns:76px 1fr;column-gap:16px;min-height:0;align-items:start}
  .idx .nm{grid-column:2!important;grid-row:1}
  .idx .pvslot{grid-column:1!important;grid-row:1/span 2;align-self:start}
  .idx .pv{position:static;opacity:1;transform:none;width:76px;height:76px;aspect-ratio:auto}
  .idx .ds{grid-column:2!important;grid-row:2;margin-top:10px}
  .idx a.row:hover .nm{transform:none}
}
.mat-line{border-top:0;padding-block:clamp(40px,7vh,80px)}
.sv-body .mat-line{margin-top:clamp(40px,7vh,80px);border-bottom:1px solid var(--line);border-top:1px solid var(--line)}

/* ==========================================================
   HOME — mission flow (timeline + shared stage)
   ========================================================== */
.mission{position:relative;border-bottom:1px solid var(--line)}
.ms-wrap{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);width:100%}
.ms-head{grid-column:1/span 5;grid-row:1;align-self:end}
.ms-head .body{margin-top:14px;max-width:40ch}
.ms-steps{grid-column:1/span 5;grid-row:2;align-self:start;list-style:none;margin:30px 0 0;padding:0 0 0 22px;position:relative;border-left:1px solid var(--line)}
.ms-steps::before{content:"";position:absolute;left:-1px;top:0;width:1px;height:calc(var(--p,0) * 100%);background:var(--ink);transition:height .8s var(--ease)}
.ms-steps button{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:3ch 1fr;column-gap:14px;padding:8px 0;width:100%}
.ms-steps button:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
.ms-steps .n{color:var(--alu);font-size:12.5px;padding-top:6px}
.ms-steps .nm{font-size:clamp(19px,1.45vw,23px);font-variation-settings:"wdth" 108;font-weight:500;color:var(--alu);transition:color .45s}
.ms-steps .ds{grid-column:2;max-height:0;overflow:hidden;opacity:0;color:var(--muted);font-size:15px;line-height:1.5;max-width:40ch;transition:max-height .7s var(--ease),opacity .5s,margin .5s}
html[lang="zh-Hant-TW"] .ms-steps .ds{max-width:24em;line-height:1.75}
.ms-steps button:hover .nm{color:var(--steel)}
.ms-steps button[aria-current="step"] .nm,.ms-steps button[aria-current="step"] .n{color:var(--ink)}
.ms-steps button[aria-current="step"] .ds{max-height:9em;opacity:1;margin-top:6px}
.ms-stage{grid-column:6/span 7;grid-row:1/span 2;margin:0;height:min(80vh,700px);align-self:center}
.ms-stage svg{width:100%;height:100%}
.ms-L,.ms-base{transition:opacity .9s var(--ease)}
.ms-L{opacity:0}
@media (min-width:901px){
  .mission{height:calc(100vh + 6 * 55vh)}
  .mission .sc-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;padding-top:var(--nav-h)}
}
@media (max-width:900px){
  .mission{padding-block:90px 70px}
  .ms-head,.ms-steps{grid-column:1/-1}
  .ms-stage{grid-column:1/-1;grid-row:2;height:auto;aspect-ratio:16/15;margin-top:26px}
  .ms-steps{grid-row:3;margin-top:22px}
}

/* ==========================================================
   INTELLIGENCE — four-phase data visualisation
   ========================================================== */
.iv{position:relative}
.iv-wrap{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:26px;width:100%}
.iv-tabs{grid-column:1/-1;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line-inv);position:relative}
.iv-tabs button{all:unset;cursor:pointer;padding:14px 16px 0 0;color:var(--steel);font-size:clamp(16px,1.35vw,21px);font-variation-settings:"wdth" 108;transition:color .45s}
.iv-tabs button .num{display:block;font-size:12px;margin-bottom:4px}
.iv-tabs button:hover{color:var(--alu)}
.iv-tabs button[aria-current="step"]{color:var(--paper)}
.iv-tabs button:focus-visible{outline:2px solid var(--signal)}
.iv-rail{position:absolute;left:0;top:-1px;height:1px;width:25%;background:var(--paper);transform:translateX(calc(var(--s,0) * 100%));transition:transform .8s var(--ease)}
.iv-stage{grid-column:1/span 6;margin:0;height:min(66vh,620px)}
.iv-stage svg{width:100%;height:100%}
.iv-panel{grid-column:8/span 5;align-self:center;min-height:360px}
.iv-panel .label{display:block;margin-bottom:10px}
.iv-panel .body{margin-top:12px}
.iv-p0,.iv-p1,.iv-p2,.iv-p3{transition:opacity .9s var(--ease)}
.iv-p1,.iv-p2,.iv-p3{opacity:0}
.iv-pt{transition:opacity .45s var(--ease) calc(var(--d) * 90ms)}
.iv-f{cursor:pointer}.iv-f:focus{outline:none}
.iv-f .iv-fm{transition:stroke .3s,stroke-width .3s}
.iv-f.sel .iv-fm,.iv-f:focus-visible .iv-fm{stroke:#F5F5F2;stroke-width:2.5}
.iv-kv{display:grid;grid-template-columns:auto 1fr;gap:0 18px;margin:18px 0 0;font-size:14.5px}
.iv-kv dt{color:var(--alu);padding:7px 0;border-bottom:1px solid var(--line-inv)}
.iv-kv dd{margin:0;padding:7px 0;border-bottom:1px solid var(--line-inv);text-align:right}
.iv-t{width:100%;border-collapse:collapse;margin-top:18px;font-size:14px;font-variant-numeric:tabular-nums}
.iv-t th{text-align:left;font-weight:500;color:var(--alu);padding:0 0 8px;border-bottom:1px solid var(--paper)}
.iv-t td{padding:8px 0;border-bottom:1px solid var(--line-inv)}
.iv-find{display:grid;grid-template-columns:140px 1fr;gap:18px;margin-top:18px;align-items:start}
.iv-find .ph-img{aspect-ratio:4/3;overflow:hidden;background:#1B1E21}
.iv-find .ph-img svg{width:100%;height:100%}
.iv-find .iv-kv{margin-top:0}
.iv-pri{list-style:none;padding:0;margin:18px 0 0;counter-reset:p}
.iv-pri li{display:grid;grid-template-columns:2ch 1fr;column-gap:12px;padding:10px 0;border-bottom:1px solid var(--line-inv);counter-increment:p}
.iv-pri li::before{content:counter(p);color:var(--signal);grid-row:1/span 2}
.iv-pri b{font-weight:500}
.iv-pri span{color:var(--alu);font-size:14px}
.iv-note{margin-top:18px;font-size:12.5px;color:var(--steel)}
@media (min-width:901px){
  .iv{height:calc(100vh + 4 * 70vh)}
  .iv .sc-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;padding-top:var(--nav-h)}
}
@media (max-width:900px){
  .iv{padding-block:30px 60px}
  .iv-stage{grid-column:1/-1;height:auto;aspect-ratio:1/1.3}
  .iv-panel{grid-column:1/-1;min-height:0}
  .iv-tabs button{font-size:15px;padding-right:6px}
  .iv-find{grid-template-columns:1fr}
}

/* ==========================================================
   SAFETY — interactive site plan
   ========================================================== */
.sd-head{margin-bottom:40px;row-gap:18px}
.sd-head h2{grid-column:1/span 6}
.sd-head .body{grid-column:8/span 5;align-self:end}
.sd-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:start}
.plan{grid-column:1/span 8;margin:0;border:1px solid var(--line);background:var(--paper)}
.plan svg{width:100%;height:auto}
.plan [data-k],.plan .base{transition:opacity .45s var(--ease)}
.plan [data-k]{cursor:pointer}
.plan .tag{opacity:0;transition:opacity .45s var(--ease);pointer-events:none}
.plan.act [data-k]{opacity:.13}
.plan.act .base{opacity:.55}
.plan.act [data-k].on{opacity:1}
.plan.act [data-k].on .tag{opacity:1}
.legend{grid-column:10/span 3}
.legend ul{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}
.legend button{all:unset;box-sizing:border-box;cursor:pointer;display:flex;gap:14px;align-items:center;width:100%;padding:12px 0;border-bottom:1px solid var(--line);font-size:15px;color:var(--ink);transition:color .35s,padding .45s var(--ease)}
.legend button:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
.legend.has button:not(.act){color:var(--alu)}
.legend button.act{padding-left:8px}
.legend button[aria-pressed="true"]{font-weight:500}
.sym{width:16px;height:16px;flex:none;display:block;box-sizing:border-box}
.sym-pilot{background:var(--ink);border-radius:50%}
.sym-observer{border:1.5px solid var(--ink);border-radius:50%}
.sym-access{border:1.5px solid var(--ink)}
.sym-exclusion{border:1px solid var(--signal);background:repeating-linear-gradient(45deg,var(--signal) 0 1.3px,transparent 1.3px 5px)}
.sym-boundary{height:0;border-top:1.5px dashed var(--steel)}
.sym-envelope{height:0;border-top:1.5px dotted var(--ink)}
.sym-equipment{height:10px;background:var(--alu)}
.lg-note{margin-top:22px;font-size:15px;color:var(--muted);min-height:7em}
.lg-note b{color:var(--ink);font-weight:500}
@media (max-width:900px){
  .sd-head h2,.sd-head .body{grid-column:1/-1}
  .plan{grid-column:1/-1;position:sticky;top:calc(var(--nav-h) + 6px);z-index:2}
  .plan .tag{display:none}
  .legend{grid-column:1/-1;margin-top:22px}
}

/* ==========================================================
   FACADE MATERIALS — sample archive
   ========================================================== */
.mx{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:start;padding-bottom:30px}
.mx-index{grid-column:1/span 3;border-top:1px solid var(--ink)}
.mx-index button{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:44px 1fr 44px;align-items:center;gap:12px;width:100%;padding:9px 0;border-bottom:1px solid var(--line);color:var(--muted);transition:color .3s}
.mx-index button:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
.mx-index .code{font-size:12px}
.mx-index .nm{font-size:16px}
.mx-index .th{width:44px;height:44px;overflow:hidden;opacity:.7;transition:opacity .35s}
.mx-index .th svg{width:100%;height:100%;transition:transform 1.2s var(--ease)}
.mx-index button:hover{color:var(--ink)}
.mx-index button:hover .th svg{transform:scale(1.08)}
.mx-index button[aria-selected="true"]{color:var(--ink)}
.mx-index button[aria-selected="true"] .th{opacity:1;outline:1px solid var(--ink);outline-offset:2px}
.mx-swatch{grid-column:4/span 5;position:sticky;top:calc(var(--nav-h) + 20px);aspect-ratio:4/5;overflow:hidden;background:var(--concrete);margin:0}
.sw{position:absolute;inset:0;opacity:0;transform:scale(1.04);transition:opacity .9s var(--ease),transform 1.8s var(--ease)}
.sw.on{opacity:1;transform:none}
.sw svg{width:100%;height:100%}
.mx-swatch figcaption{position:absolute;left:16px;bottom:14px;color:#fff;mix-blend-mode:difference;font-size:13px}
.mx-sheet{grid-column:10/span 3;transition:opacity .22s}
.mx-sheet.swap{opacity:0}
.mx-sheet .label{display:block;margin-bottom:12px}
.mx-sheet .alt{color:var(--muted);margin:6px 0 20px}
.mx-dl{margin:0;border-top:1px solid var(--ink)}
.mx-dl dt{font-size:12.5px;color:var(--muted);padding-top:14px}
.mx-dl dd{margin:4px 0 0;padding-bottom:14px;border-bottom:1px solid var(--line);font-size:15px;line-height:1.55}
html[lang="zh-Hant-TW"] .mx-dl dd{line-height:1.8}
.pending{display:inline-block;color:var(--muted);border:1px dashed var(--alu);padding:1px 8px;font-size:13.5px}
@media (max-width:1100px) and (min-width:901px){.mx-index{grid-column:1/span 4}.mx-swatch{grid-column:5/span 4}.mx-sheet{grid-column:9/span 4}}
@media (max-width:900px){
  .mx-swatch{grid-column:1/-1;grid-row:1;position:relative;top:0;aspect-ratio:4/3}
  .mx-index{grid-column:1/-1;grid-row:2;display:flex;overflow-x:auto;border-top:0;gap:10px;padding:14px 0 6px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .mx-index button{display:flex;flex-direction:column-reverse;align-items:flex-start;gap:6px;width:92px;flex:none;border:0;padding:0 0 4px}
  .mx-index .th{width:92px;height:64px}
  .mx-index .nm{font-size:13.5px;line-height:1.3}
  .mx-index .code{display:none}
  .mx-sheet{grid-column:1/-1;grid-row:3;margin-top:24px}
}

/* ==========================================================
   PROJECTS — editorial archive
   ========================================================== */
.pj .meta dl{display:grid;grid-template-columns:auto 1fr;gap:0 16px;margin:0 0 16px;font-size:14px}
.pj .meta dt{color:var(--muted);padding:6px 0;border-bottom:1px solid var(--line)}
.pj .meta dd{margin:0;padding:6px 0;border-bottom:1px solid var(--line)}
.pj .meta h3 a{background:linear-gradient(currentColor,currentColor) 0 100%/0 1px no-repeat;transition:background-size .55s var(--ease)}
.pj:hover .meta h3 a{background-size:100% 1px}
.pj-list{padding-bottom:clamp(40px,7vh,80px)}
.archive{padding-bottom:clamp(90px,14vh,160px)}
.ar-head{display:flex;justify-content:space-between;align-items:baseline;gap:20px;flex-wrap:wrap;border-top:1px solid var(--ink);padding-top:18px}
.tscroll{overflow-x:auto}
.archive table{width:100%;min-width:620px;border-collapse:collapse;font-size:15px;margin-top:18px}
.archive th{text-align:left;font-weight:500;font-size:12.5px;color:var(--muted);padding:0 14px 10px 0;border-bottom:1px solid var(--line)}
.archive td{padding:16px 14px 16px 0;border-bottom:1px solid var(--line);vertical-align:top}
.archive td .tbc{white-space:nowrap}

/* ==========================================================
   ABOUT — scroll story
   ========================================================== */
.story{position:relative}
.st-wrap{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:center;width:100%}
.st-text{grid-column:1/span 6}
.st-text ol{list-style:none;margin:24px 0 0;padding:0}
.st-line{display:grid;grid-template-columns:3ch 1fr;column-gap:14px;padding:9px 0;color:#3E4449;transition:color .9s var(--ease)}
.st-line p{margin:0;font-size:clamp(20px,1.85vw,30px);line-height:1.25;font-variation-settings:"wdth" 106;letter-spacing:-.012em;max-width:30ch}
html[lang="zh-Hant-TW"] .st-line p{font-size:clamp(18px,1.6vw,26px);line-height:1.55;letter-spacing:.03em;max-width:none}
.st-line .num{font-size:12px;padding-top:.7em}
.st-line.past{color:#7E8387}
.st-line.on{color:var(--paper)}
.st-stage{grid-column:8/span 5;margin:0;height:min(82vh,740px)}
.st-stage svg{width:100%;height:100%}
.st-L{opacity:0;transition:opacity 1.3s var(--ease)}
.st-close{padding-block:clamp(40px,7vh,80px) clamp(90px,14vh,160px)}
.st-close p{color:var(--alu);border-top:1px solid var(--line-inv);padding-top:24px}
@media (min-width:901px){
  .story{height:calc(100vh + 6 * 55vh)}
  .story .sc-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;padding-top:var(--nav-h)}
}
@media (max-width:900px){
  .story .sc-pin{padding-top:0}
  .st-wrap{display:flex;flex-direction:column;align-items:stretch}
  .st-stage{position:sticky;top:0;z-index:2;height:46svh;background:var(--ink);padding:calc(var(--nav-h) + 4px) 0 8px;order:-1}
  .st-text{padding-top:30px}
  .st-line{min-height:36svh;align-content:start;padding-top:18px}
}
@media (prefers-reduced-motion:reduce){.ms-L,.st-L,.iv-p0,.iv-p1,.iv-p2,.iv-p3,.sw{transition:none!important}}
.legend.has button:not(.act) .sym{opacity:.3}
.legend .sym{transition:opacity .35s}
.iv-kv{column-gap:0}.iv-kv dd{padding-left:16px}
.pj .meta dl{grid-template-columns:auto minmax(0,1fr)}.pj .meta dd{overflow-wrap:anywhere}
@media (max-width:760px){.ab-open{min-height:78svh}}
.vf.vf-hero{position:absolute;left:var(--m);right:var(--m);top:calc(var(--nav-h) + 24px);height:44%;aspect-ratio:auto;background:transparent;z-index:1}
html[lang="zh-Hant-TW"] .sv-hero .lede{max-width:32em}

/* ==========================================================
   V2.1 — consolidated typography scale + image hover
   Cinematic moments: .hero h1, .close a.huge, story lines.
   Everything else sits on a calmer editorial scale.
   ========================================================== */
/* masks become inline phrases so headings wrap naturally at every width */
.mask{display:inline-block;vertical-align:top;max-width:100%}
.mask>span{display:inline-block}

/* ---- English scale ---- */
.hero h1{font-size:clamp(42px,5.3vw,84px);line-height:.98;letter-spacing:-.03em;max-width:14ch}
.d1{font-size:clamp(40px,5vw,80px);line-height:1}
.d2{font-size:clamp(34px,3.8vw,58px);line-height:1.04;letter-spacing:-.025em}
.d2.sec{font-size:clamp(30px,3.1vw,48px);line-height:1.08}
.d3{font-size:clamp(24px,2.2vw,34px);line-height:1.14;letter-spacing:-.015em}
.d4{font-size:clamp(19px,1.45vw,23px);line-height:1.3;letter-spacing:-.005em}
.lede{font-size:clamp(17.5px,1.3vw,20px);line-height:1.55;max-width:54ch}
.body{font-size:clamp(16px,1.1vw,17px);max-width:64ch}
.label,.cap{font-size:13px}
.close a.huge{font-size:clamp(34px,4.4vw,70px);letter-spacing:-.03em}
.idx .nm{font-size:clamp(26px,2.7vw,42px)}
.idx a.row.minor .nm{font-size:clamp(22px,2vw,31px)}
.chap .k{font-size:clamp(44px,4.1vw,66px)}
.horizon .steps span{font-size:clamp(30px,3.9vw,62px)}
.phase .ph-n{font-size:clamp(36px,3.4vw,54px)}
.st-line p{font-size:clamp(19px,1.65vw,26px);line-height:1.3;max-width:34ch}
.sheet a.big{font-size:clamp(28px,7.2vw,40px)}
.sv-t{max-width:20ch}
.int-open h1{max-width:18ch}
.ab-open h1{max-width:22ch}
.frame .top h2,.pillars h2,.roadmap h2{max-width:24ch}
.ct .l{grid-column:1/span 5}
.ct .r{grid-column:7/span 6}

/* ---- Traditional Chinese scale (tuned independently) ---- */
html[lang="zh-Hant-TW"] .hero h1{font-size:clamp(36px,4.5vw,72px);line-height:1.22;letter-spacing:.04em;max-width:none}
html[lang="zh-Hant-TW"] .d1{font-size:clamp(34px,4.2vw,68px);line-height:1.24}
html[lang="zh-Hant-TW"] .d2{font-size:clamp(30px,3vw,48px);line-height:1.34;letter-spacing:.04em}
html[lang="zh-Hant-TW"] .d2.sec{font-size:clamp(26px,2.5vw,40px);line-height:1.4}
html[lang="zh-Hant-TW"] .d3{font-size:clamp(22px,1.9vw,30px);line-height:1.48;letter-spacing:.035em}
html[lang="zh-Hant-TW"] .d4{font-size:clamp(18px,1.3vw,21px);line-height:1.6}
html[lang="zh-Hant-TW"] .lede{font-size:clamp(17px,1.2vw,19px);line-height:1.85;max-width:30em}
html[lang="zh-Hant-TW"] .body{font-size:clamp(16px,1.05vw,17px);line-height:1.9;max-width:36em}
html[lang="zh-Hant-TW"] .close a.huge{font-size:clamp(30px,3.6vw,58px);letter-spacing:.04em}
html[lang="zh-Hant-TW"] .idx .nm{font-size:clamp(22px,2.2vw,34px)}
html[lang="zh-Hant-TW"] .idx a.row.minor .nm{font-size:clamp(20px,1.7vw,27px)}
html[lang="zh-Hant-TW"] .horizon .steps span{font-size:clamp(28px,3.3vw,52px)}
html[lang="zh-Hant-TW"] .st-line p{font-size:clamp(18px,1.45vw,23px);line-height:1.6}
html[lang="zh-Hant-TW"] .chap .k{font-size:clamp(40px,3.6vw,58px);letter-spacing:.06em}
html[lang="zh-Hant-TW"] :is(h1,h2,h3,p)[style*="ch"]{max-width:34em!important}

/* containers that were narrower than their content needed */
.stmt .aside{grid-column:7/span 6}
.aside-line h3{grid-column:4/span 7}
.sd-head h2{grid-column:1/span 7}
.sd-head .body{grid-column:8/span 5}
.ms-head{grid-column:1/span 5}
.ms-steps .ds{max-width:42ch}
html[lang="zh-Hant-TW"] .ms-steps .ds{max-width:26em}
.idx .ds{max-width:40ch}
html[lang="zh-Hant-TW"] .idx .ds{max-width:24em}
.mx-sheet .alt{font-size:15px}
.hero .sub p{max-width:34ch}
html[lang="zh-Hant-TW"] .hero .sub p{max-width:24em}
.hero .sub{margin-top:clamp(20px,3.2vh,40px)}
.hero .copy{padding-bottom:clamp(36px,8vh,96px)}

/* tablet */
@media (max-width:1100px) and (min-width:901px){
  .ct .l{grid-column:1/span 5}.ct .r{grid-column:6/span 7}
}
@media (max-width:1100px) and (min-width:761px){
  .idx .pvslot{display:none}.idx .nm{grid-column:1/span 6}.idx .ds{grid-column:7/span 5}
  .ab-now .l{grid-column:1/-1}.ab-now .r{grid-column:1/span 10;margin-top:28px}
  .pillars .grid>*, .pillars>div{grid-column:1/-1!important}
}

/* ---- mobile scale ---- */
@media (max-width:760px){
  body{font-size:16.5px}
  .hero h1{font-size:clamp(40px,11.4vw,50px);line-height:1.02}
  html[lang="zh-Hant-TW"] .hero h1{font-size:clamp(34px,9.4vw,42px);line-height:1.3}
  .d2{font-size:clamp(32px,9.2vw,40px)}
  .d2.sec{font-size:clamp(28px,8vw,34px)}
  .d3{font-size:clamp(24px,6.6vw,28px)}
  .d4{font-size:clamp(19px,5vw,21px)}
  html[lang="zh-Hant-TW"] .d2{font-size:clamp(28px,8vw,34px)}
  html[lang="zh-Hant-TW"] .d2.sec{font-size:clamp(25px,7vw,30px)}
  html[lang="zh-Hant-TW"] .d3{font-size:clamp(22px,6vw,26px)}
  html[lang="zh-Hant-TW"] .d4{font-size:clamp(18px,4.8vw,20px)}
  .lede,html[lang="zh-Hant-TW"] .lede{font-size:17px;max-width:none}
  .body,html[lang="zh-Hant-TW"] .body{font-size:16px;max-width:none}
  .close a.huge{font-size:clamp(32px,9vw,38px)}
  html[lang="zh-Hant-TW"] .close a.huge{font-size:clamp(28px,8vw,34px)}
  .idx .nm{font-size:clamp(22px,6.2vw,26px)}
  .idx a.row.minor .nm{font-size:clamp(20px,5.4vw,23px)}
  html[lang="zh-Hant-TW"] .idx .nm,html[lang="zh-Hant-TW"] .idx a.row.minor .nm{font-size:clamp(20px,5.4vw,23px)}
  .chap .k,html[lang="zh-Hant-TW"] .chap .k{font-size:44px}
  .horizon .steps span{font-size:clamp(26px,7.4vw,32px)}
  html[lang="zh-Hant-TW"] .horizon .steps span{font-size:clamp(24px,6.8vw,28px)}
  .st-line p,html[lang="zh-Hant-TW"] .st-line p{font-size:19px}
  .phase .ph-n{font-size:34px}
  .p-open,.pj-open,.int-open,.doc-head,.ct,.plain{padding-top:calc(var(--nav-h) + 44px)}
  .p-open{padding-bottom:44px}
  .stmt,.manif,.frame,.close,.horizon,.ab-now,.sv-body,.targets,.roadmap,.pillars,.site-diag,.verify{padding-block:72px}
  .hero .ctas{width:100%}
  .btn{padding:0 20px}
}
@media (max-width:370px){
  .hero .ctas{flex-direction:column}
  .hero .ctas .btn{width:100%}
}

/* ==========================================================
   Image hover: the frame stays still, the image moves slightly.
   Pointer devices only; touch keeps images static.
   ========================================================== */
.zoom,.mx-swatch,.idx .pv,.split .fig{overflow:hidden;contain:paint}
.zoom>svg,.split .fig>svg,.mx-swatch .sw svg{transform:scale(1);transform-origin:50% 50%;transition:transform 1.6s cubic-bezier(.22,.61,.36,1)}
a:hover>.zoom>svg,.pj:hover .zoom>svg{transform:none}
@media (hover:hover) and (pointer:fine){
  a:hover>.zoom>svg,a:focus-visible>.zoom>svg,.pj:hover .zoom>svg,.zoom:hover>svg,.split .fig:hover>svg{transform:scale(1.04)}
  .mx-swatch:hover .sw.on svg{transform:scale(1.03)}
}
@media (prefers-reduced-motion:reduce){
  .zoom>svg,.split .fig>svg,.mx-swatch .sw svg{transition:none!important;transform:none!important}
}
.pj .figlink{display:contents}
.ct h1.d2{font-size:clamp(34px,3.3vw,50px)}html[lang="zh-Hant-TW"] .ct h1.d2{font-size:clamp(28px,2.7vw,42px)}@media (max-width:760px){.ct h1.d2{font-size:34px}html[lang="zh-Hant-TW"] .ct h1.d2{font-size:30px}}
@media (max-width:900px){.pj .fig,.pj .meta,.pj.a .fig,.pj.a .meta,.pj.b .fig,.pj.b .meta,.pj.c .fig,.pj.c .meta{grid-column:1/-1!important;grid-row:auto!important}}
@media (max-width:760px){.ab-open{min-height:0;padding-top:calc(var(--nav-h) + 170px);padding-bottom:56px}.ab-open .sky{height:190px;top:var(--nav-h)}}

/* ==========================================================
   V2.2 — services panels, services dropdown, initial assessment form
   ========================================================== */
/* ---------- plus / minus glyph ---------- */
.pm{position:relative;width:14px;height:14px;flex:none;display:inline-block}
.pm::before,.pm::after{content:"";position:absolute;left:0;right:0;top:50%;height:1.3px;background:currentColor;transition:transform .45s var(--ease)}
.pm::after{transform:rotate(90deg)}
[aria-expanded="true"] .pm::after,[aria-expanded="true"]>.pm::after{transform:rotate(0)}

/* ---------- services: shared ---------- */
.sx{padding-bottom:clamp(60px,9vh,110px)}
.sx-row{display:flex}
.sx-p{position:relative;overflow:hidden}
.sx-img{margin:0;overflow:hidden;background:var(--ink)}
.sx-img svg{width:100%;height:100%;display:block;transform:scale(1);transition:transform 1.6s cubic-bezier(.22,.61,.36,1)}
.sx-h{all:unset;box-sizing:border-box;cursor:pointer}
.sx-h:focus-visible{outline:2px solid var(--signal);outline-offset:4px}
.sx-h .num{font-size:12.5px;letter-spacing:.02em}
.sx-n{display:block;font-weight:500;font-variation-settings:"wdth" 106}
.sx-b{display:grid;grid-template-rows:0fr;transition:grid-template-rows .75s var(--ease)}
.sx-bi{overflow:hidden;min-height:0}
.sx-bi p{margin:0 0 16px;opacity:0;transition:opacity .45s var(--ease)}
.sx-go{opacity:0;transition:opacity .45s var(--ease),background-size .55s var(--ease)}
.sx-p.on .sx-b{grid-template-rows:1fr}
.sx-p.on .sx-bi p,.sx-p.on .sx-go{opacity:1;transition-delay:.28s}

/* ---------- services: desktop panels (fine pointer, ≥761px) ---------- */
.sx-row.panels{gap:6px;height:clamp(440px,62vh,620px)}
.sx-row.panels .sx-p{flex:1 1 0;min-width:0;color:var(--paper);background:var(--ink);transition:flex-grow .9s cubic-bezier(.22,.61,.36,1)}
.sx-row.panels.has .sx-p.on{flex-grow:2.5}
.sx-row.panels .sx-img{position:absolute;inset:0;transition:opacity .8s var(--ease)}
.sx-row.panels.has .sx-p:not(.on) .sx-img{opacity:.55}
.sx-row.panels .sx-p.on .sx-img svg{transform:scale(1.04)}
.sx-row.panels .sx-p::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(18,20,22,0) 35%,rgba(18,20,22,.88) 100%);pointer-events:none}
.sx-row.panels .sx-cover{position:absolute;inset:0;z-index:1}
.sx-row.panels .sx-tx{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:clamp(18px,1.9vw,30px);pointer-events:none}
.sx-row.panels .sx-h,.sx-row.panels .sx-go{pointer-events:auto}
.sx-row.panels .sx-h{display:flex;flex-direction:column;gap:10px}
.sx-row.panels .sx-h .num{color:#C9CBCC}
.sx-row.panels .sx-n{font-size:clamp(18px,1.45vw,23px);line-height:1.25;max-width:14em}
html[lang="zh-Hant-TW"] .sx-row.panels .sx-n{font-size:clamp(17px,1.3vw,21px);line-height:1.5;letter-spacing:.04em}
.sx-row.panels .pm{display:none}
.sx-row.panels .sx-bi{padding-top:14px}
.sx-row.panels .sx-bi p{width:min(24rem,calc(100vw - 4 * var(--m)));color:#D4D5D3;font-size:15.5px;line-height:1.55}
html[lang="zh-Hant-TW"] .sx-row.panels .sx-bi p{width:min(22em,calc(100vw - 4 * var(--m)));line-height:1.85}
.sx-row.panels .sx-go{color:var(--paper)}

/* ---------- services: touch accordion ---------- */
.sx-row.acc{flex-direction:column;border-top:1px solid var(--ink)}
.sx-row.acc .sx-p{border-bottom:1px solid var(--line)}
.sx-row.acc .sx-cover{display:none}
.sx-row.acc .sx-img{height:64px;margin-top:14px;transition:height .7s var(--ease)}
.sx-row.acc .sx-p.on .sx-img{height:clamp(180px,48vw,300px)}
.sx-row.acc .sx-h{display:grid;grid-template-columns:2.6em 1fr auto;align-items:center;column-gap:10px;width:100%;min-height:60px;padding:12px 0}
.sx-row.acc .sx-h .num{color:var(--muted)}
.sx-row.acc .sx-n{font-size:clamp(18px,4.8vw,21px);line-height:1.35}
.sx-row.acc .sx-bi{padding:0 0 22px 0}
.sx-row.acc .sx-bi p{color:var(--muted);font-size:16px;line-height:1.6;max-width:36em}
html[lang="zh-Hant-TW"] .sx-row.acc .sx-bi p{line-height:1.85}
@media (min-width:761px){.sx-row.acc .sx-bi{padding-left:calc(2.6em + 10px)}}
.aside-line .go{white-space:nowrap}

/* ---------- nav: services dropdown ---------- */
.dd{position:relative;display:flex;align-items:center;gap:3px}
.dd-btn{background:none;border:0;color:inherit;padding:8px 3px;cursor:pointer;opacity:.7;display:flex;align-items:center}
.dd-btn:hover,.dd.open .dd-btn{opacity:1}
.dd-btn svg{width:9px;height:6px;transition:transform .35s var(--ease)}
.dd.open .dd-btn svg{transform:rotate(180deg)}
.dd-panel{position:absolute;top:calc(100% + 16px);left:-26px;width:max-content;min-width:290px;max-width:360px;padding:22px 26px 18px;background:var(--paper);color:var(--ink);border:1px solid var(--line);opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .25s var(--ease),transform .35s var(--ease),visibility 0s linear .35s}
.dd-panel::before{content:"";position:absolute;left:0;right:0;top:-18px;height:18px}
.dd.open .dd-panel{opacity:1;visibility:visible;transform:none;transition:opacity .25s var(--ease),transform .35s var(--ease),visibility 0s}
.nav[data-tone="dark"] .dd-panel{background:var(--ink);color:var(--paper);border-color:var(--line-inv)}
.dd-g .label{display:block;margin-bottom:6px}
.dd-g+.dd-g{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.nav[data-tone="dark"] .dd-g+.dd-g{border-top-color:var(--line-inv)}
.menu .dd-l{display:block;padding:7px 0;font-size:15px;opacity:.82;transition:opacity .25s,transform .35s var(--ease)}
.menu .dd-l::after{display:none}
.menu .dd-l:hover,.menu .dd-l:focus-visible,.menu .dd-l[aria-current="page"]{opacity:1;transform:translateX(4px)}
html[lang="zh-Hant-TW"] .menu .dd-l{letter-spacing:.03em}

/* ---------- mobile sheet: services submenu ---------- */
.sheet{justify-content:flex-start;overflow-y:auto;-webkit-overflow-scrolling:touch}
.sheet-in{margin-top:auto}
.sheet button.big{all:unset;box-sizing:border-box;cursor:pointer;display:flex;justify-content:space-between;align-items:baseline;width:100%;font-size:clamp(28px,7.2vw,40px);font-variation-settings:"wdth" 116;letter-spacing:-.03em;line-height:1.1;padding:6px 0;border-bottom:1px solid var(--line-inv)}
.sheet button.big:focus-visible{outline:2px solid var(--signal)}
.sheet button.big .pm{width:13px;height:13px;margin-left:14px;vertical-align:middle;position:relative;top:-4px}
.sheet .sub{padding:6px 0 16px 2px;border-bottom:1px solid var(--line-inv)}
.sheet .sub .label{display:block;margin:14px 0 2px}
.sheet .sub-l{display:block;padding:10px 0;font-size:18px;color:#D4D5D3;min-height:24px}
html[lang="zh-Hant-TW"] .sheet button.big{letter-spacing:.02em}

/* ---------- contact: initial assessment ---------- */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.ct .hint{font-size:14px;color:var(--muted);margin:10px 0 0}
.ct .err{color:#A33A12;font-size:13.5px;margin:8px 0 0}
.ct .err:empty{display:none}
.ct .f .err{display:block}
legend .opt{margin-left:auto;font-size:12px;color:var(--muted);border:1px solid var(--line);padding:1px 8px;align-self:center}
fieldset.quiet legend{border-bottom-color:var(--line)}
fieldset.quiet legend .t{color:var(--steel)}
.qchips{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.qchips label{position:relative;cursor:pointer;margin:0}
.qchips input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.qchips span{display:flex;align-items:center;min-height:44px;padding:9px 15px;border:1px solid rgba(18,20,22,.22);font-size:15px;line-height:1.35;transition:background .25s,color .25s,border-color .25s}
.qchips label:hover span{border-color:var(--ink)}
.qchips input:checked+span{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.qchips input:focus-visible+span{outline:2px solid var(--signal);outline-offset:2px}
.qchips.bad span{border-color:#A33A12}
.disc{all:unset;box-sizing:border-box;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px;width:100%;min-height:52px;padding:12px 0;border-bottom:1px solid var(--line);font-size:16px}
.disc:hover{color:var(--ink)}
.disc:focus-visible{outline:2px solid var(--signal)}
.disc-b{padding-top:6px}
.qlabel{font-size:13px;color:var(--muted);margin:28px 0 0}
.up{margin-top:26px}
.up-drop{display:flex;flex-direction:column;gap:4px;margin-top:14px;padding:20px 22px;border:1px dashed var(--alu);cursor:pointer;transition:border-color .3s}
.up-drop:hover{border-color:var(--ink)}
.up:has(#q-photos:focus-visible) .up-drop{outline:2px solid var(--signal);outline-offset:2px}
.up-t{font-weight:500;font-size:16px}
.up-s{font-size:13px;color:var(--muted)}
.up-list{list-style:none;padding:0;margin:10px 0 0}
.up-list li{display:grid;grid-template-columns:44px minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line);font-size:14px}
.up-th{width:44px;height:44px;background:var(--concrete) center/cover no-repeat}
.up-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.up-sz{color:var(--muted);font-size:13px}
.up-list button{all:unset;cursor:pointer;font-size:13px;color:var(--muted);text-decoration:underline;text-underline-offset:3px;padding:6px 0}
.up-note{font-size:13px;color:var(--muted);margin:12px 0 0;padding-left:10px;border-left:2px solid var(--signal)}
.submit .btn{white-space:normal;text-align:left}
.qstate{border-top:1px solid var(--ink);padding:24px 0 30px;margin-bottom:34px}
.qstate .d4{margin:8px 0 12px}
.qsum{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 20px;margin:18px 0 26px;font-size:15px}
.qsum dt,.qsum dd{margin:0;padding:9px 0;border-bottom:1px solid var(--line)}
.qsum dt{color:var(--muted)}
.qsum dd{overflow-wrap:anywhere}
@media (max-width:640px){.submit .btn{width:100%;justify-content:space-between}.qchips span{font-size:14.5px}}
legend .opt.req{color:var(--ink);border-color:rgba(18,20,22,.3)}
.qstate{scroll-margin-top:calc(var(--nav-h) + 24px)}

/* ==========================================================
   V2.3 — safety sequence, credentials, projects filter, about trajectory + story,
   materials inside services, footer
   ========================================================== */
/* ---------- safety ---------- */
.sf-head{padding-bottom:clamp(30px,5vh,60px)}
.sf-head + .site-diag{padding-top:0}
.sq{position:relative;border-top:1px solid var(--line)}
.sq-wrap{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:22px;width:100%}
.sq-head{grid-column:1/-1;display:flex;justify-content:space-between;align-items:baseline;gap:12px 24px;flex-wrap:wrap}
.sq-rail{grid-column:1/-1;list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line)}
.sq-rail li{position:relative}
.sq-rail li::before{content:"";position:absolute;left:0;right:12px;top:-1px;height:2px;background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease)}
.sq-rail li.done::before{transform:scaleX(1);background:var(--alu)}
.sq-rail li:has([aria-current="step"])::before{transform:scaleX(1);background:var(--ink)}
.sq-rail button{all:unset;box-sizing:border-box;cursor:pointer;display:grid;grid-template-columns:auto auto 1fr;align-items:center;gap:10px;width:100%;min-height:52px;padding:14px 12px 14px 0;color:var(--alu);transition:color .4s}
.sq-rail button:hover{color:var(--steel)}
.sq-rail button:focus-visible{outline:2px solid var(--signal);outline-offset:-2px}
.sq-rail button[aria-current="step"]{color:var(--ink)}
.sq-rail .num{font-size:12.5px}
.sq-t{font-size:clamp(15px,1.15vw,18px);font-weight:500}
.sq-box{width:13px;height:13px;border:1px solid currentColor;position:relative}
.sq-rail li.done .sq-box::after{content:"";position:absolute;left:3px;top:0;width:4px;height:8px;border:solid var(--signal);border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}
.sq-stage{grid-column:1/span 6;margin:0;height:min(58vh,520px)}
.sq-stage svg{width:100%;height:100%}
.ss-L,.ss-base{transition:opacity .9s var(--ease)}
.ss-L{opacity:0}
.sq-panel{grid-column:8/span 5;align-self:center;min-height:330px}
.sq-panel .d4{margin:10px 0 8px}
.sq-panel table{width:100%;border-collapse:collapse;margin-top:18px;font-size:15px}
.sq-panel th{text-align:left;font-weight:500;font-size:12.5px;color:var(--muted);padding:0 0 9px;border-bottom:1px solid var(--ink)}
.sq-panel th:last-child,.sq-panel td:last-child{text-align:right;padding-left:14px;white-space:nowrap}
.sq-panel td{padding:11px 0;border-bottom:1px solid var(--line);vertical-align:top}
.sq-panel td:last-child{color:var(--muted);font-size:13.5px}
.sq-panel tbody tr{animation:sqIn .6s var(--ease) both;animation-delay:calc(var(--k) * 90ms)}
@keyframes sqIn{from{opacity:0;transform:translateY(6px)}}
@media (min-width:901px){
  .sq{height:calc(100vh + 4 * 60vh)}
  .sq .sc-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;padding-top:var(--nav-h)}
}
@media (max-width:900px){
  .sq{padding-block:64px 56px}
  .sq-stage{grid-column:1/-1;height:auto;aspect-ratio:640/540}
  .sq-panel{grid-column:1/-1;min-height:0}
  .sq-rail{grid-template-columns:1fr 1fr}
  .sq-rail li:nth-child(n+3){border-top:1px solid var(--line)}
}
.sf-doc{padding-block:clamp(40px,7vh,80px) 0}
.sf-doc .docmeta{margin-top:0;border-top:1px solid var(--line);font-size:13.5px;color:var(--muted)}
.cred{padding-block:clamp(80px,12vh,140px);margin-top:clamp(40px,7vh,80px)}
.cred .t{grid-column:1/span 5}
.cred .cr{grid-column:7/span 6}
.cr-scope{display:flex;flex-wrap:wrap;margin:26px 0 0;border-top:1px solid var(--line-inv)}
.cr-scope span{flex:1 1 50%;padding:12px 12px 12px 0;border-bottom:1px solid var(--line-inv);font-size:14px;color:var(--alu)}
.cr-g{border-top:1px solid var(--line-inv);padding:14px 0 6px}
.cr-i{display:flex;justify-content:space-between;gap:16px;padding:10px 0;font-size:15px}
.cr-i span{color:var(--alu);font-size:13.5px;text-align:right}
@media (max-width:760px){.cred .t,.cred .cr{grid-column:1/-1}.cred .cr{margin-top:24px}.cr-scope span{flex-basis:100%}}

/* ---------- projects filter ---------- */
.pj.off,.archive tr.off{display:none}
.pj.in-f{animation:pjIn .7s var(--ease) both}
@keyframes pjIn{from{opacity:0;transform:translateY(10px)}}
.pj-count{margin-top:12px;min-height:1em}
.pj-empty{margin:0;padding:34px 0 60px;color:var(--muted);font-size:15.5px}

/* ---------- about: flight trajectory ---------- */
.tj{position:relative;border-top:1px solid var(--line);height:230vh}
.tj-pin{position:sticky;top:0;height:100vh;height:100svh;display:flex;align-items:center;padding-top:var(--nav-h);overflow:hidden}
.tj-pin>.wrap{width:100%}
.tj-head{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:12px;margin-bottom:clamp(30px,6vh,64px)}
.tj-head h2{grid-column:1/span 6}
.tj-head .body{grid-column:8/span 5;align-self:end;margin:0}
.tj-stage{position:relative;width:100%;margin-inline:auto}
.tj-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.tj-future{fill:none;stroke:var(--alu);stroke-width:1;stroke-dasharray:3 7}
.tj-done{fill:none;stroke:var(--ink);stroke-width:1.5}
.tj-m{position:absolute;width:0;height:0}
.tj-dot{position:absolute;left:-5px;top:-5px;width:10px;height:10px;border:1px solid var(--alu);background:var(--bg);transform:rotate(45deg);transition:background .5s,border-color .5s}
.tj-m.on .tj-dot{background:var(--ink);border-color:var(--ink)}
.tj-m.first.on .tj-dot{background:var(--signal);border-color:var(--signal)}
.tj-n,.tj-m em{position:absolute;left:0;white-space:nowrap;transform:translate(-50%,6px);opacity:0;transition:opacity .6s var(--ease),transform .8s var(--ease)}
.tj-n{top:22px;font-size:clamp(17px,1.5vw,24px);font-weight:500;font-variation-settings:"wdth" 108}
.tj-m em{top:54px;font-style:normal;font-size:12.5px;color:var(--muted)}
.tj-m.on .tj-n,.tj-m.on em{opacity:1;transform:translate(-50%,0)}
.tj-m.first .tj-n,.tj-m.first em{left:-6px;transform:translate(0,6px)}
.tj-m.first.on .tj-n,.tj-m.first.on em{transform:translate(0,0)}
.tj-m.last .tj-n,.tj-m.last em{top:auto;bottom:22px;left:auto;right:-10px;transform:translate(0,6px)}
.tj-m.last em{bottom:52px}
.tj-m.last.on .tj-n,.tj-m.last.on em{transform:translate(0,0)}
html[lang="zh-Hant-TW"] .tj-n{letter-spacing:.06em}
.tj-drone{position:absolute;width:40px;height:40px;transform:translate(-50%,-50%);z-index:2;pointer-events:none}
.tj-drone svg{width:100%;height:100%}
.tj.vert .tj-stage{width:min(100%,calc((100svh - var(--nav-h) - 230px) * 360 / 620));margin-inline:0}
.tj.vert .tj-n,.tj.vert .tj-m em,.tj.vert .tj-m.first .tj-n,.tj.vert .tj-m.last .tj-n,.tj.vert .tj-m.first em,.tj.vert .tj-m.last em{left:22px;right:auto;top:-12px;bottom:auto;transform:translate(6px,0)}
.tj.vert .tj-m em,.tj.vert .tj-m.first em,.tj.vert .tj-m.last em{top:14px}
.tj.vert .tj-m.on .tj-n,.tj.vert .tj-m.on em{transform:translate(0,0)}
.tj.vert .tj-n{font-size:19px}
@media (max-width:760px){.tj{height:220svh}.tj-head h2,.tj-head .body{grid-column:1/-1}.tj-head .body{font-size:14.5px}}
@media (prefers-reduced-motion:reduce){.tj-n,.tj-m em,.tj-dot{transition:none!important}}

/* ---------- about: principles story (desktop carousel) ---------- */
.story{--st-step:clamp(104px,14vh,140px)}
.st-title{margin:12px 0 0;font-size:clamp(20px,1.65vw,26px);font-weight:500;line-height:1.3;color:var(--paper);max-width:26ch;letter-spacing:-.01em}
html[lang="zh-Hant-TW"] .st-title{font-size:clamp(19px,1.5vw,24px);line-height:1.6;letter-spacing:.04em;max-width:none}
.st-count{margin-top:26px}
.st-count b{color:var(--paper);font-weight:500}
.story.car .st-list{position:relative;height:calc(var(--st-step) * 3);margin-top:10px;-webkit-mask-image:linear-gradient(transparent,#000 22%,#000 78%,transparent);mask-image:linear-gradient(transparent,#000 22%,#000 78%,transparent)}
.story.car .st-line{position:absolute;left:0;right:0;top:calc(50% - var(--st-step) / 2);height:var(--st-step);align-content:center;padding:0;color:var(--paper);transition:transform .9s var(--ease),opacity .9s var(--ease)}
.story.car .st-line p{font-size:clamp(22px,2vw,32px);line-height:1.22}
html[lang="zh-Hant-TW"] .story.car .st-line p{font-size:clamp(20px,1.7vw,27px);line-height:1.5}
@media (prefers-reduced-motion:reduce){.story.car .st-line{transition:none}}

/* ---------- services: materials section ---------- */
.mx-sec{padding-top:clamp(70px,11vh,130px);border-top:1px solid var(--line);scroll-margin-top:var(--nav-h)}
.mx-intro{margin-bottom:clamp(30px,5vh,56px);align-items:baseline;row-gap:14px}
.mx-intro .label{grid-column:1/span 3}
.mx-intro>div{grid-column:4/span 8}
.mx-sec .mx-swatch{aspect-ratio:7/5}
.mx-sec .cap{margin-bottom:clamp(50px,8vh,90px)}
@media (max-width:900px){.mx-sec .mx-swatch{aspect-ratio:16/10}}

/* ---------- footer ---------- */
.ft{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);row-gap:48px}
.ft-brand{grid-column:1/span 4}
.ft-brand img{height:22px;width:auto;margin-bottom:22px}
.ft-tag{color:var(--alu);font-size:15px;margin:0;max-width:28ch}
html[lang="zh-Hant-TW"] .ft-tag{max-width:none;letter-spacing:.04em}
.ft-contact{margin-top:26px;display:grid;gap:14px;font-size:15px}
.ft-contact div{display:grid;gap:2px}
.ft-cta{margin:28px 0 0;font-size:15px}
.ft-col{display:flex;flex-direction:column;align-items:flex-start;gap:10px;font-size:15px}
.ft-col .label{margin-bottom:6px}
.ft-col a{opacity:.82;transition:opacity .25s}
.ft-col a:hover{opacity:1}
.ft>nav:nth-of-type(1){grid-column:5/span 3}
.ft>nav:nth-of-type(2){grid-column:8/span 2}
.ft-area{grid-column:10/span 3}
.ft-area p{margin:0;color:#C9CBCC;font-size:14.5px;line-height:1.65}
html[lang="zh-Hant-TW"] .ft-area p{line-height:1.85}
.ft-soc-l{margin-top:22px}
.socs{display:flex;gap:8px}
.soc{--cut:9px;position:relative;width:46px;height:46px;display:grid;place-items:center;color:var(--paper);background:rgba(245,245,242,.32);clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));transition:background .35s var(--ease)}
.soc::before{content:"";position:absolute;inset:1px;background:var(--ink);clip-path:polygon(calc(var(--cut) - .5px) 0,100% 0,100% calc(100% - var(--cut) + .5px),calc(100% - var(--cut) + .5px) 100%,0 100%,0 calc(var(--cut) - .5px));transition:background .35s var(--ease)}
.soc::after{content:"";position:absolute;right:5px;top:5px;width:4px;height:4px;background:var(--signal);opacity:0;transition:opacity .35s}
.soc svg{position:relative;width:20px;height:20px;transition:transform .45s var(--ease)}
a.soc:hover,a.soc:focus-visible{background:var(--paper)}
a.soc:hover svg,a.soc:focus-visible svg{transform:translateY(-2px)}
a.soc:hover::after,a.soc:focus-visible::after{opacity:1}
a.soc:focus-visible{outline:none}
a.soc:focus-visible::before{background:#1B1E21}
.soc.off{opacity:.42;cursor:default}
.ft-note{margin:10px 0 0!important;font-size:12.5px!important;color:var(--steel)!important}
.ft-base{grid-column:1/-1;display:flex;justify-content:space-between;flex-wrap:wrap;gap:14px 24px;padding-top:20px;border-top:1px solid var(--line-inv);font-size:13px;color:var(--alu)}
.ft-base div{display:flex;gap:20px;flex-wrap:wrap;align-items:center}
.ft-base a{opacity:.8}
.ft-base .lang{border:0;padding:0;opacity:.8;font-size:13px}
@media (max-width:1100px){
  .ft-brand{grid-column:1/-1}
  .ft>nav:nth-of-type(1){grid-column:1/span 4}
  .ft>nav:nth-of-type(2){grid-column:5/span 3}
  .ft-area{grid-column:8/span 5}
}
@media (max-width:760px){
  .ft{grid-template-columns:1fr 1fr;row-gap:40px}
  .ft-brand,.ft-area,.ft-base{grid-column:1/-1!important}
  .ft>nav:nth-of-type(1){grid-column:1}
  .ft>nav:nth-of-type(2){grid-column:2}
  .ft-col{font-size:14.5px}
  .soc{width:48px;height:48px}
}

/* ==========================================================
   V2.4 — FAQ, credentials rows, team & qualifications, compact mission,
   service workflow strip, inspection data, coating table, before/after slider,
   news, footer careers
   ========================================================== */
/* ---------- FAQ ---------- */
.faq{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);padding-block:clamp(70px,11vh,130px);border-top:1px solid var(--line)}
.faq-h{grid-column:1/span 4}
.faq-h .d3{margin-top:12px}
.faq-l{grid-column:6/span 7;border-top:1px solid var(--ink)}
.faq-i{border-bottom:1px solid var(--line)}
.faq-i summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:20px;min-height:56px;padding:16px 0;font-size:clamp(16px,1.2vw,18px);font-weight:500}
.faq-i summary::-webkit-details-marker{display:none}
.faq-i summary:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
.faq-i summary .pm{color:var(--steel)}
.faq-i[open] summary .pm::after{transform:rotate(0)}
.faq-a{overflow:hidden;transition:height .38s var(--ease)}
.faq-a p{margin:0;padding:0 0 20px;color:var(--muted);max-width:60ch;font-size:16px;line-height:1.65}
html[lang="zh-Hant-TW"] .faq-a p{max-width:34em;line-height:1.9}
html[lang="zh-Hant-TW"] .faq-i summary{letter-spacing:.03em}
@media (max-width:900px){.faq-h,.faq-l{grid-column:1/-1}.faq-l{margin-top:26px}}

/* ---------- credential rows (dark default, .light on paper) ---------- */
.cr-rows{border-top:1px solid var(--line-inv)}
.cr-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px 24px;padding:16px 0;border-bottom:1px solid var(--line-inv);font-size:15px;align-items:baseline}
.cr-k b{display:block;font-weight:500}
.cr-k span{display:block;color:var(--alu);font-size:13.5px;margin-top:4px}
.cr-v{color:#C9CBCC}
.cr-pend{display:inline-flex;align-items:center;gap:8px;font-size:13.5px;color:var(--alu)}
.cr-pend::before{content:"";width:7px;height:7px;border:1px solid currentColor}
.cr-rows.light{border-top-color:var(--ink)}
.cr-rows.light .cr-row{border-bottom-color:var(--line)}
.cr-rows.light .cr-k span,.cr-rows.light .cr-pend{color:var(--muted)}
.cr-rows.light .cr-v{color:var(--ink)}
@media (max-width:560px){.cr-row{grid-template-columns:1fr}}
.cred .cr{grid-column:6/span 7}
.cred .t{grid-column:1/span 4}
@media (max-width:900px){.cred .cr,.cred .t{grid-column:1/-1}.cred .cr{margin-top:28px}}

/* ---------- home: team & qualifications ---------- */
.tq{padding-block:clamp(90px,14vh,170px)}
.tq-l{grid-column:1/span 5}
.tq-l .d3{margin:14px 0 18px}
.tq-l .btn{margin-top:14px}
.tq-r{grid-column:7/span 6;align-self:end}
@media (max-width:900px){.tq-l,.tq-r{grid-column:1/-1}.tq-r{margin-top:34px}}

/* ---------- home: compact mission (click/hover, not scroll-pinned) ---------- */
.mission.compact{height:auto!important}
.mission.compact .sc-pin{position:static!important;height:auto!important;display:block;padding-block:clamp(80px,12vh,140px)}
.mission.compact .ms-stage{height:min(62vh,540px)}
.ms-more{grid-column:1/span 5;grid-row:3;margin:26px 0 0}
@media (max-width:900px){.mission.compact .sc-pin{padding-block:0}.mission.compact .ms-stage{height:auto}.ms-more{grid-column:1/-1;grid-row:4}}

/* ---------- service: workflow strip ---------- */
.wf{margin-top:clamp(60px,9vh,110px)}
.wf-h{display:flex;justify-content:space-between;align-items:baseline;gap:16px;flex-wrap:wrap;padding-bottom:14px;border-bottom:1px solid var(--ink)}
.wf ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.wf li{padding:18px 18px 20px 0;border-bottom:1px solid var(--line)}
.wf li+li{padding-left:18px;border-left:1px solid var(--line)}
.wf .num{font-size:12px;color:var(--muted)}
.wf b{display:block;font-weight:500;font-size:17px;margin:4px 0 6px}
.wf p{margin:0;font-size:14px;color:var(--muted);line-height:1.55}
html[lang="zh-Hant-TW"] .wf p{line-height:1.8}
@media (max-width:760px){.wf ol{grid-template-columns:1fr}.wf li+li{padding-left:0;border-left:0}.wf li{display:grid;grid-template-columns:2.4em 1fr;column-gap:8px}.wf li .num{grid-row:1/span 2;padding-top:5px}}
.sv-body.short{padding-bottom:clamp(40px,6vh,70px)}

/* ---------- inspection: data section (moved from Intelligence) ---------- */
.insp-d-h{padding-block:clamp(80px,12vh,140px) clamp(20px,4vh,40px)}
#inspection-data .roadmap{padding-block:clamp(40px,7vh,80px) clamp(70px,10vh,120px)}
#inspection-data{scroll-margin-top:var(--nav-h)}

/* ---------- coating: materials table ---------- */
.cm{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);padding-block:clamp(70px,11vh,130px);border-top:1px solid var(--line)}
.cm .faq-h{grid-column:1/span 4}
.cm-b{grid-column:6/span 7}
.cm-t{width:100%;border-collapse:collapse;margin-top:22px;font-size:15px}
.cm-t th{text-align:left;font-weight:500;font-size:12.5px;color:var(--muted);padding:0 0 9px;border-bottom:1px solid var(--ink)}
.cm-t td{padding:12px 0;border-bottom:1px solid var(--line);vertical-align:middle}
.cm-t td .label{margin-right:10px}
@media (max-width:900px){.cm .faq-h,.cm-b{grid-column:1/-1}.cm-b{margin-top:22px}}

/* ---------- related projects ---------- */
.rel{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);padding-block:clamp(70px,11vh,130px);border-top:1px solid var(--line)}
.rel .faq-h{grid-column:1/span 4}
.rel-l{grid-column:6/span 7;display:grid;gap:40px}
.rel-t{display:flex;gap:14px;align-items:baseline;margin-top:14px}
@media (max-width:900px){.rel .faq-h,.rel-l{grid-column:1/-1}.rel-l{margin-top:22px}}

/* ---------- before / after slider ---------- */
.ba-wrap{margin:0 0 30px}
.ba{position:relative;overflow:hidden;background:var(--ink);cursor:ew-resize;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.ba-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.ba-clip{position:absolute;inset:0;clip-path:inset(0 calc(100% - var(--pos)) 0 0)}
.ba-line{position:absolute;top:0;bottom:0;left:var(--pos);width:1px;margin-left:-.5px;background:var(--paper);pointer-events:none}
.ba-handle{position:absolute;top:50%;left:var(--pos);width:44px;height:44px;margin:-22px 0 0 -22px;border-radius:50%;border:1px solid var(--paper);background:rgba(18,20,22,.72);color:var(--paper);display:grid;place-items:center;cursor:ew-resize;padding:0;transition:background .3s,transform .3s var(--ease)}
.ba-handle svg{width:22px;height:11px}
.ba:hover .ba-handle,.ba.drag .ba-handle{background:var(--ink)}
.ba-handle:focus-visible{outline:2px solid var(--signal);outline-offset:3px}
.ba.hint .ba-clip{transition:clip-path .7s var(--ease)}
.ba.hint .ba-line,.ba.hint .ba-handle{transition:left .7s var(--ease)}
.ba-tag{position:absolute;top:14px;padding:4px 10px;font-size:12px;letter-spacing:.04em;color:var(--paper);background:rgba(18,20,22,.6);pointer-events:none}
.ba-tag.l{left:14px}.ba-tag.r{right:14px}
@media (prefers-reduced-motion:reduce){.ba.hint .ba-clip,.ba.hint .ba-line,.ba.hint .ba-handle{transition:none}}

/* ---------- about ---------- */
.ab-focus,.ab-cred{padding-block:clamp(70px,11vh,130px);border-top:1px solid var(--line)}
.ab-focus .l,.ab-cred .l{grid-column:1/span 4}
.ab-focus .r,.ab-cred .r{grid-column:6/span 7}
.focus-l{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}
.focus-l a{display:grid;grid-template-columns:3em 1fr auto;align-items:center;padding:16px 0;border-bottom:1px solid var(--line);font-size:clamp(17px,1.35vw,20px)}
.focus-l a svg{width:16px;height:10px;transition:transform .35s var(--ease)}
.focus-l a:hover svg{transform:translateX(4px)}
@media (max-width:900px){.ab-focus .l,.ab-focus .r,.ab-cred .l,.ab-cred .r{grid-column:1/-1}.ab-focus .r,.ab-cred .r{margin-top:24px}}

/* ---------- news ---------- */
.news-l{padding-bottom:clamp(90px,14vh,160px);min-height:30vh}
.nw-i{display:grid;grid-template-columns:8em 10em 1fr;column-gap:var(--gap);padding:22px 0;border-bottom:1px solid var(--line)}
.nw-i .body{grid-column:3;margin:6px 0 0}
@media (max-width:760px){.nw-i{grid-template-columns:1fr 1fr}.nw-i .d4,.nw-i .body{grid-column:1/-1}.nw-i .d4{margin-top:8px}}

/* ---------- footer: careers (104) ---------- */
.ft-job{margin-top:22px}
.job{display:inline-flex;align-items:center;gap:12px;padding:8px 14px 8px 8px;border:1px solid var(--line-inv);transition:border-color .3s,background .3s}
a.job:hover,a.job:focus-visible{border-color:var(--paper)}
a.job:hover .j104{transform:translateY(-2px)}
.j104{display:grid;place-items:center;width:38px;height:30px;font-size:12.5px;font-weight:600;letter-spacing:.02em;color:var(--ink);background:var(--paper);transition:transform .4s var(--ease)}
.job .jt{display:grid;line-height:1.3}
.job .jt b{font-weight:500;font-size:14px}
.job .jt small{font-size:12px;color:var(--alu)}
.job.off{opacity:.55;cursor:default}

/* ==========================================================
   V3 — Phase 1: proportions, spacing and readability
   Overrides only. Every V2 rule above is unchanged; deleting this
   block restores the V2 layout. No fixed heights on content blocks.
   ========================================================== */

/* ---------- page openings: less dead space above the first heading ---------- */
.p-open,.pj-open,.doc-head,.plain,.ct{padding-top:calc(var(--nav-h) + clamp(44px,8vh,96px))}
.p-open{padding-bottom:clamp(40px,6vh,72px)}
.pillars{padding-block:clamp(64px,9vh,110px)}

/* ---------- service detail: shorter hero, next content in view ---------- */
.sv-hero{min-height:clamp(460px,66vh,700px);min-height:clamp(460px,66svh,700px)}
.sv-hero .copy{padding:calc(var(--nav-h) + 40px) 0 clamp(30px,5vh,56px)}
.sv-hero .copy>.label{margin-bottom:16px!important}
.sv-hero .copy .lede{margin-top:18px!important}
.ruler{top:calc(var(--nav-h) + 20px);bottom:28px}
.vf.vf-hero{height:48%}
.sv-body{padding-block:clamp(56px,8vh,100px)}
.sv-body .intro .lede{font-size:clamp(19px,1.5vw,23px);max-width:none}
.sv-body .intro-r .body{font-size:clamp(17px,1.2vw,19px);line-height:1.6;color:#3E4449;max-width:none}
html[lang="zh-Hant-TW"] .sv-body .intro .lede{font-size:clamp(18px,1.35vw,21px)}
html[lang="zh-Hant-TW"] .sv-body .intro-r .body{font-size:clamp(16.5px,1.15vw,18px);line-height:1.9}

/* image + text split: image no longer taller than the viewport */
.sv-body .split{margin-top:clamp(56px,8vh,100px)!important}
@media (min-width:901px){.split .fig{grid-column:1/span 6;aspect-ratio:4/3}.split .tx{grid-column:8/span 5}}
.split .tx .body{font-size:clamp(17px,1.2vw,19px);color:#3E4449}

/* specification table and workflow strip: larger type, tighter rhythm */
.spec{margin-top:clamp(48px,7vh,84px)}
.spec dt{font-size:15.5px}
.spec dd{font-size:17px;line-height:1.55}
.wf{margin-top:clamp(44px,6vh,72px)}
.wf b{font-size:18px}
.wf p{font-size:15px}

/* inspection targets: viewfinder beside the list instead of a full-width 16:9 frame */
.targets{padding-block:clamp(56px,8vh,100px) 0;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gap);align-items:start}
.targets>.grid{grid-column:1/-1}
.targets .vf{grid-column:1/span 7;aspect-ratio:4/3}
.targets .tlist{grid-column:9/span 4;grid-template-columns:1fr;margin-top:0;border-top:1px solid var(--ink)}
.targets .tlist button{font-size:18px;padding-block:17px}

/* materials guide */
.mx-sec{padding-top:clamp(56px,8vh,100px)}
.mx-index .nm{font-size:16.5px}
.mx-dl dd{font-size:16px}

/* inspection data (dark): shorter scroll runway, same four steps */
.insp-d-h{padding-block:clamp(56px,8vh,100px) clamp(16px,3vh,32px)}

/* coating table, FAQ, related */
.cm,.faq,.rel{padding-block:clamp(56px,8vh,100px)}
.cm-t{font-size:16px}
.faq-a p{font-size:16.5px}

/* ---------- home: capabilities (clean / inspect) ---------- */
.caps .chapters{grid-column:7/span 6}
.chap{min-height:72vh;padding:8vh 0}
.chap .body{font-size:clamp(17px,1.25vw,19px);color:#C9CBCC;max-width:46ch}
html[lang="zh-Hant-TW"] .chap .body{max-width:26em}
.chap ul.tags{font-size:15px}

/* ---------- safety ---------- */
.sf-head{padding-bottom:clamp(24px,4vh,48px)}
.site-diag{padding-block:clamp(56px,8vh,100px)}
.sf-head + .site-diag{padding-top:0}
.sq + .cred{margin-top:0}

/* ---------- projects ---------- */
.pj{margin-bottom:clamp(56px,9vh,110px)}
.pd-hero{height:68vh;height:68svh;min-height:480px}
.pd-body{padding-block:clamp(56px,8vh,100px)}

/* ---------- about ---------- */
.ab-open{min-height:clamp(520px,72vh,760px);min-height:clamp(520px,72svh,760px);padding-bottom:clamp(40px,6vh,72px)}
.ab-open .sky{height:44%}
.ab-lede{margin-top:clamp(18px,2.6vh,28px);max-width:52ch;color:#3E4449}
html[lang="zh-Hant-TW"] .ab-lede{max-width:30em}
.ab-now{padding-block:clamp(64px,9vh,110px)}
.tj{height:175vh}
.ab-co{padding-block:clamp(48px,7vh,80px) clamp(64px,9vh,110px);border-top:1px solid var(--line)}
.ab-co .spec{margin-top:14px}

/* ---------- contact ---------- */
.ct .direct{margin-top:clamp(28px,5vh,56px)}
.ct .direct .addr{text-align:right;max-width:24em}

/* ---------- legal ---------- */
.plain.legal .col{max-width:760px}
.plain.legal h2{margin:38px 0 10px}
.plain.legal .body{font-size:17px;color:#3E4449;max-width:none}
html[lang="zh-Hant-TW"] .plain.legal .body{font-size:16.5px}

/* ---------- footer: square social icons ---------- */
.soc.soc-sq{clip-path:none;width:44px;height:44px;background:transparent;border:1px solid rgba(245,245,242,.3);transition:border-color .3s var(--ease),background .3s var(--ease)}
.soc.soc-sq::before,.soc.soc-sq::after{display:none}
.soc.soc-sq svg{width:20px;height:20px;transition:transform .4s var(--ease)}
a.soc.soc-sq:hover,a.soc.soc-sq:focus-visible{background:rgba(245,245,242,.07);border-color:var(--paper)}
a.soc.soc-sq:hover svg,a.soc.soc-sq:focus-visible svg{transform:translateY(-1px)}
a.soc.soc-sq:focus-visible{outline:2px solid var(--signal);outline-offset:3px}
.socs{gap:10px}

/* ---------- scroll-pinned runways (desktop only), same steps, less scrolling ---------- */
@media (min-width:901px){
  .iv-stage{height:min(62vh,580px)}
  .caps .canvas{padding:calc(var(--nav-h) + 4vh) 0 5vh}
  .st-stage{height:min(72vh,640px)}
  .iv{height:calc(100vh + 4 * 42vh)}
  .sq{height:calc(100vh + 4 * 42vh)}
  .story{height:calc(100vh + 6 * 30vh)}
}

/* ---------- tablet ---------- */
@media (max-width:1100px) and (min-width:901px){
  .caps .chapters{grid-column:7/span 6}
}
@media (max-width:900px){
  .split .fig{aspect-ratio:16/10}
  .targets .vf,.targets .tlist{grid-column:1/-1}
  .targets .vf{aspect-ratio:16/10}
  .targets .tlist{grid-template-columns:1fr 1fr;margin-top:24px}
  .chap{min-height:58vh;min-height:58svh;padding:32px 0 56px}
  .caps .chapters{grid-column:1/-1}
}

/* ---------- mobile ---------- */
@media (max-width:760px){
  .p-open,.pj-open,.int-open,.doc-head,.ct,.plain{padding-top:calc(var(--nav-h) + 36px)}
  .sv-hero{min-height:clamp(420px,62vh,560px);min-height:clamp(420px,62svh,560px)}
  .sv-body,.targets,.site-diag,.ab-now,.pillars{padding-block:56px}
  .targets{padding-bottom:0}
  .targets .tlist{grid-template-columns:1fr}
  .targets .tlist button{font-size:17px}
  .ab-open{min-height:0}
  .ab-open .sky{height:190px}
  .tj{height:190svh}
  .ct .direct .addr{text-align:left}
  .ct .direct div{flex-direction:column;gap:2px}
}

/* ---------- V3 revision: material note, legal pages, idle social icons, home coating line ---------- */
.mx-foot{margin-top:6px}
.mx-note{margin:0;max-width:72ch;padding:14px 0 14px 16px;border-left:2px solid var(--ink);font-size:16px;line-height:1.6;color:#3E4449}
html[lang="zh-Hant-TW"] .mx-note{max-width:40em;line-height:1.85}
.mx-foot .cap{padding-top:14px}
.plain.legal .lede{margin-top:22px;max-width:none}
.legal-draft{display:inline-block;margin:18px 0 0;padding:4px 10px;border:1px solid var(--line);font-size:13px;color:var(--muted)}
.legal-l{margin:4px 0 1em;padding-left:1.2em;color:#3E4449;font-size:17px;line-height:1.6}
.legal-l li{padding:3px 0}
html[lang="zh-Hant-TW"] .legal-l{font-size:16.5px;line-height:1.85}
.legal-co{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 24px;margin:6px 0 0;border-top:1px solid var(--ink);font-size:16px}
.legal-co dt,.legal-co dd{margin:0;padding:11px 0;border-bottom:1px solid var(--line)}
.legal-co dt{color:var(--muted)}
@media (max-width:560px){.legal-co{grid-template-columns:1fr}.legal-co dt{border-bottom:0;padding-bottom:0}}
.soc.soc-sq.idle{cursor:default}
.aside-line{padding-block:clamp(40px,6vh,72px)}
@media (max-width:760px){.aside-line{padding-block:44px}}

/* ==========================================================
   V3 Phase 2 — homepage cleaning-method comparison
   Uses the shared .ba slider. Images are never scaled independently:
   both layers fill the same 768:1024 box with object-fit:cover.
   ========================================================== */
:root{--skyhy-blue:#071125}
.cmpx{padding-block:clamp(56px,8vh,100px);border-top:1px solid var(--line)}
.cmpx .grid{align-items:center;row-gap:32px}
.cmpx-tx{grid-column:1/span 5}
.cmpx-tx .d3{margin:12px 0 14px}
.cmpx-tx .body{max-width:44ch}
html[lang="zh-Hant-TW"] .cmpx-tx .body{max-width:26em}
.cmpx-k{margin:26px 0 0;border-top:1px solid var(--ink)}
.cmpx-k>div{padding:14px 0;border-bottom:1px solid var(--line)}
.cmpx-k dt{display:flex;align-items:center;gap:10px;font-weight:500;font-size:16.5px}
.cmpx-k dd{margin:6px 0 0 18px;color:var(--muted);font-size:15.5px;line-height:1.55}
html[lang="zh-Hant-TW"] .cmpx-k dd{line-height:1.8}
.cmpx-dot{width:8px;height:8px;flex:none;border:1px solid var(--ink)}
.cmpx-dot.r{background:var(--skyhy-blue);border-color:var(--skyhy-blue)}
.cmpx-note{margin:18px 0 0;font-size:13px;color:var(--muted);line-height:1.6}
.cmpx-fig{grid-column:7/span 6;display:flex;justify-content:flex-start}
.cmpx-tx .d3 .nw{display:block;white-space:normal}
/* width follows a height cap, so the 3:4 frame never gets taller than ~70% of the screen */
.cmpx-ba{margin:0;width:100%;max-width:min(100%,calc(min(72vh,680px) * .75))}
.cmpx-ba .ba{background:var(--skyhy-blue)}
.cmpx-ba .ba-img{object-fit:cover}
.cmpx-ba picture{display:contents}
.cmpx-ba .ba-line{width:2px;margin-left:-1px;background:var(--paper);box-shadow:0 0 0 1px rgba(7,17,37,.25)}
.cmpx-ba .ba-handle{width:46px;height:46px;margin:-23px 0 0 -23px;background:var(--skyhy-blue);border:1.5px solid var(--paper);box-shadow:0 2px 10px rgba(7,17,37,.35)}
.cmpx-ba .ba:hover .ba-handle,.cmpx-ba .ba.drag .ba-handle{background:var(--skyhy-blue);transform:scale(1.06)}
.cmpx-ba .ba-tag{top:auto;bottom:14px;max-width:calc(100% - 28px);white-space:nowrap;padding:6px 10px;font-size:12px;line-height:1.35;letter-spacing:.02em;background:rgba(7,17,37,.78);border-left:2px solid var(--paper)}
.cmpx-ba .ba-tag.r{border-left:0;border-right:2px solid var(--paper);text-align:right}
@media (prefers-reduced-motion:reduce){.cmpx-ba .ba-handle{transition:none}}
@media (max-width:900px){
  .cmpx-tx,.cmpx-fig{grid-column:1/-1}
  .cmpx-fig{justify-content:center}
  .cmpx-ba{max-width:min(100%,calc(min(70vh,640px) * .75))}
}
@media (max-width:760px){
  .cmpx{padding-block:56px}
  .cmpx-ba{max-width:min(100%,calc(66svh * .75))}
  .cmpx-ba .ba-tag{font-size:11px;bottom:10px;padding:5px 8px;white-space:normal;max-width:calc(50% - 22px)}
}

/* ==========================================================
   V3 Phase 2 — six-step workflow (homepage), scroll-driven
   The drawing never moves: only its layers fade. Navy marks progress.
   ========================================================== */
.mission.flow .ms-count{display:flex;align-items:center;gap:10px;margin:18px 0 0;color:var(--muted)}
.mission.flow .ms-count b{color:var(--skyhy-blue);font-weight:600}
.ms-bar{position:relative;display:block;width:72px;height:2px;background:var(--line);overflow:hidden}
.ms-bar i{position:absolute;inset:0 auto 0 0;width:calc(var(--p,.1667) * 100%);background:var(--skyhy-blue);transition:width .6s var(--ease)}
.mission.flow .ms-steps::before{width:2px;left:-1.5px;background:var(--skyhy-blue)}
.mission.flow .ms-steps li{position:relative}
.mission.flow .ms-steps li::before{content:"";position:absolute;left:-27px;top:15px;width:9px;height:9px;background:var(--bg);border:1px solid var(--alu);transition:background .4s,border-color .4s}
.mission.flow .ms-steps li.past::before{background:var(--alu);border-color:var(--alu)}
.mission.flow .ms-steps li.on::before{background:var(--skyhy-blue);border-color:var(--skyhy-blue)}
.mission.flow .ms-steps button[aria-current="step"] .n{color:var(--skyhy-blue);font-weight:600}
.mission.flow .ms-steps li.past .nm{color:var(--steel)}
.mission.flow .ms-stage{display:flex;flex-direction:column}
.mission.flow .ms-stage svg{flex:1 1 auto;min-height:0}
.ms-cap{display:flex;gap:12px;align-items:baseline;margin-top:10px;padding-top:10px;border-top:1px solid var(--line);font-size:13.5px;color:var(--muted);min-height:2.6em}
.ms-cap .num{color:var(--skyhy-blue);font-weight:600;font-size:12.5px}
html[lang="zh-Hant-TW"] .ms-cap{letter-spacing:.03em}

/* desktop: pinned, short runway (6 steps × 36vh) */
@media (min-width:901px) and (min-height:640px){
  .mission.flow{height:calc(100vh + 6 * 36vh)}
  .mission.flow .sc-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;padding-top:var(--nav-h)}
  .mission.flow .ms-stage{height:min(68vh,580px)}
}
/* wide but short screens: no pinning; the step follows the reading line */
@media (min-width:901px) and (max-height:639.98px){
  .mission.flow{height:auto}
  .mission.flow .sc-pin{position:static;height:auto;display:block;padding-block:72px}
  .mission.flow .ms-stage{height:min(84vh,500px);position:sticky;top:12px}
}
/* tablet + mobile: compact vertical list, drawing stays in view at the top */
@media (max-width:900px){
  .mission.flow{height:auto;padding-block:64px 48px}
  .mission.flow .sc-pin{position:static;height:auto;display:block;padding:0}
  .mission.flow .ms-stage{position:sticky;top:0;z-index:2;height:auto;aspect-ratio:auto;margin-top:20px;padding:10px 0 8px;background:var(--bg)}
  .mission.flow .ms-stage::before{content:"";position:absolute;inset:0 calc(-1 * var(--m));z-index:-1;background:var(--bg);border-bottom:1px solid var(--line)}
  .mission.flow .ms-stage svg{flex:none;height:min(32svh,300px);width:100%}
  .mission.flow .ms-cap{margin-top:6px;padding-top:8px;font-size:12.5px}
  .mission.flow .ms-steps{margin-top:18px}
  .mission.flow .ms-steps button{padding:12px 0}
  .mission.flow .ms-steps .ds{max-height:none;opacity:1;margin-top:4px;font-size:14.5px}
  .mission.flow .ms-steps li.on .ds{color:#3E4449}
  .mission.flow .ms-steps li::before{top:19px}
}

/* ==========================================================
   V3 Phase 2 — homepage case studies (two cards)
   ========================================================== */
.cs{padding-block:clamp(56px,8vh,100px) clamp(16px,3vh,32px)}
.cs-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px 32px;flex-wrap:wrap;margin-bottom:clamp(22px,3.5vh,36px)}
.cs-head .d3{margin:0 0 10px}
.cs-head .body{margin:0;max-width:62ch}
html[lang="zh-Hant-TW"] .cs-head .body{max-width:34em}
.cs-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap)}
.cs-card{min-width:0}
.cs-link{display:flex;flex-direction:column;height:100%;border-top:2px solid var(--skyhy-blue)}
.cs-fig{position:relative;margin:0;aspect-ratio:16/9;overflow:hidden;background:var(--skyhy-blue)}
.cs-fig img,.cs-art,.cs-art svg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.cs-art svg,.cs-fig img{transform:scale(1);transition:transform 1.4s cubic-bezier(.22,.61,.36,1)}
.cs-note{position:absolute;left:12px;bottom:12px;max-width:calc(100% - 24px);padding:5px 9px;font-size:11.5px;line-height:1.35;letter-spacing:.02em;color:var(--paper);background:rgba(7,17,37,.78);border-left:2px solid var(--paper)}
.cs-body{display:flex;flex-direction:column;gap:8px;padding:18px 0 4px;flex:1}
.cs-meta{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin:0}
.cs-svcs{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.cs-svcs span{font-size:11.5px;padding:2px 8px;border:1px solid var(--line);color:var(--steel)}
.cs-body .d4{margin:2px 0 0}
.cs-sum{margin:0;color:var(--muted);font-size:15.5px;line-height:1.6;max-width:56ch}
html[lang="zh-Hant-TW"] .cs-sum{line-height:1.85}
.cs-more{display:inline-flex;align-items:center;gap:10px;margin-top:auto;padding-top:6px;font-size:14.5px;font-weight:500;color:var(--skyhy-blue)}
.cs-more svg{width:14px;height:9px;transition:transform .35s var(--ease)}
@media (hover:hover) and (pointer:fine){
  .cs-link:hover .cs-art svg,.cs-link:hover .cs-fig img{transform:scale(1.025)}
  .cs-link:hover .cs-more svg{transform:translateX(4px)}
  .cs-link:hover .d4{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}
}
.cs-link:focus-visible{outline:2px solid var(--signal);outline-offset:4px}
@media (prefers-reduced-motion:reduce){.cs-art svg,.cs-fig img,.cs-more svg{transition:none!important;transform:none!important}}
@media (max-width:760px){
  .cs{padding-block:56px 16px}
  .cs-grid{grid-template-columns:1fr;gap:32px}
  .cs-fig{aspect-ratio:3/2}
  .cs-note{font-size:11px;left:10px;bottom:10px}
}

/* ==========================================================
   V3 Phase 3 — contact form
   ========================================================== */
.q-intro{margin:0 0 14px;font-size:13.5px;color:var(--muted)}
.ct .f label{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ct .f label .opt{display:inline-block;font-size:11.5px;line-height:1.4;padding:0 7px;border:1px solid var(--line);color:var(--muted);opacity:1}
.ct .f label .opt.req{color:var(--skyhy-blue);border-color:rgba(7,17,37,.35)}
.ct .f select{font-size:18px;padding:6px 28px 8px 0;color:var(--ink)}
.ct .f select:invalid,.ct .f select option[value=""]{color:var(--muted)}
.fhint{margin:6px 0 0;font-size:12.5px;color:var(--muted)}
.ct .f.bad label{color:#A33A12}
.ct .f textarea{min-height:140px}
.q-alert{margin:0 0 22px;padding:14px 16px;border-left:3px solid #A33A12;background:rgba(163,58,18,.06);font-size:15px;line-height:1.6}
.q-alert p{margin:0}
.q-alert .q-alert-t{font-weight:600;margin-bottom:4px}
.q-alert a{text-decoration:underline;text-underline-offset:3px}
.q-alert:focus{outline:none}
.ts-wrap{margin:0 0 22px}
.ts{min-height:65px;max-width:400px}
.ts-wrap .err:empty{display:none}
.btn.busy{cursor:progress;opacity:.85}
.btn.busy svg{display:none}
.btn.busy::after{content:"";width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:qspin .8s linear infinite}
@keyframes qspin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.btn.busy::after{animation:none;border-right-color:currentColor;opacity:.6}}
.btn[disabled]{pointer-events:none}
.qstate .qsum{max-width:520px}
@media (max-width:640px){.ct .f select{font-size:17px}.ts{max-width:none}}
.ct fieldset{margin-bottom:clamp(30px,4.5vh,48px)}
.ct legend{padding-bottom:14px}

/* ==========================================================
   V3 final — service intros (two columns: situation / SKYHY approach)
   ========================================================== */
.sv-scn{font-size:12px;opacity:.85}
.sv-intro{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:clamp(28px,4vw,72px);row-gap:28px}
.sv-ic{padding-top:16px;border-top:1px solid var(--line)}
.sv-ic-b{border-top:2px solid var(--skyhy-blue)}
.sv-il{display:block;font-size:12.5px;letter-spacing:.04em;color:var(--muted);font-variant-numeric:tabular-nums}
.sv-ic-b .sv-il{color:var(--skyhy-blue);font-weight:600}
.sv-ih{margin:8px 0 10px;font-size:clamp(20px,1.6vw,26px);font-weight:500;line-height:1.25;letter-spacing:-.01em;font-variation-settings:"wdth" 106}
html[lang="zh-Hant-TW"] .sv-ih{font-size:clamp(19px,1.45vw,23px);line-height:1.5;letter-spacing:.03em;font-weight:600}
.sv-ib{margin:0;font-size:clamp(16px,1.15vw,17.5px);line-height:1.65;color:#3E4449;max-width:46ch}
html[lang="zh-Hant-TW"] .sv-ib{line-height:1.9;max-width:28em}
.sv-intro.dark{margin-top:clamp(18px,3vh,28px)}
.sv-intro.dark .sv-ic{border-top-color:var(--line-inv)}
.sv-intro.dark .sv-ic-b{border-top-color:var(--paper)}
.sv-intro.dark .sv-il{color:var(--alu)}
.sv-intro.dark .sv-ic-b .sv-il{color:var(--paper)}
.sv-intro.dark .sv-ih{color:var(--paper)}
.sv-intro.dark .sv-ib{color:#C9CBCC}
@media (max-width:760px){.sv-intro{grid-template-columns:1fr;row-gap:24px}.sv-ib{max-width:none}}

/* ==========================================================
   V3 final — projects: compact card grid (3 / 2 / 1), 4:3 images
   ========================================================== */
.pj-list{padding-block:clamp(28px,4vh,48px) clamp(48px,7vh,80px)}
.pj-open{padding-bottom:clamp(16px,2.5vh,28px)}
.pj-open + .pj-list{padding-top:clamp(12px,2vh,24px)}
.pj-open .pj-count{margin-bottom:0}
.pj-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(28px,3vh,40px) var(--gap)}
.pj.pj-card{display:block;margin:0;grid-template-columns:none}
.pj-link{display:flex;flex-direction:column;gap:10px;height:100%}
.pj-fig{position:relative;margin:0;aspect-ratio:4/3;overflow:hidden;background:var(--ink-2)}
.pj-fig svg{position:absolute;inset:0;width:100%;height:100%;transform:scale(1);transition:transform 1.4s cubic-bezier(.22,.61,.36,1)}
.pj-tag{position:absolute;left:10px;bottom:10px;padding:4px 9px;font-size:11.5px;letter-spacing:.02em;color:var(--paper);background:rgba(7,17,37,.78);border-left:2px solid var(--paper)}
.pj-meta{display:flex;justify-content:space-between;gap:12px;margin-top:4px}
.pj-name{margin:0;font-size:clamp(18px,1.35vw,21px);font-weight:500;line-height:1.35}
@media (hover:hover) and (pointer:fine){.pj-link:hover .pj-fig svg{transform:scale(1.03)}.pj-link:hover .pj-name{text-decoration:underline;text-underline-offset:4px;text-decoration-thickness:1px}}
.pj-link:focus-visible{outline:2px solid var(--signal);outline-offset:4px}
@media (prefers-reduced-motion:reduce){.pj-fig svg{transition:none!important;transform:none!important}}
.archive{padding-top:clamp(8px,2vh,24px)}
.pd-demo .pd-links{display:flex;gap:24px;flex-wrap:wrap;margin:6px 0 0}
@media (max-width:1100px){.pj-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.pj-grid{grid-template-columns:1fr}}
.pj.pj-card.off{display:none}

/* ---------- V3 final — About opening: skyline at a fixed height, intro follows directly (no viewport-height gap).
   The horizon SVG is xMidYMax slice, so its ground line sits 8.75vw above the SVG bottom. ---------- */
.ab-open{min-height:0;display:block;--ab-ground:calc(var(--nav-h) + clamp(150px,13vw,220px));padding:calc(var(--ab-ground) + 64px) 0 clamp(44px,6vh,64px)}
.ab-open .sky{inset:0 0 auto 0;height:calc(var(--ab-ground) + 8.75vw)}
.ab-open + .ab-now{padding-top:clamp(40px,6vh,72px)}
.ab-now .ab-story .body{margin-top:14px}
.ab-now .ab-build-intro{margin-top:26px}
@media (max-width:760px){
  .ab-open{--ab-ground:calc(var(--nav-h) + 130px);padding-top:calc(var(--ab-ground) + 52px);padding-bottom:44px}
  .ab-open .sky{top:0;height:calc(var(--ab-ground) + 8.75vw)}
}
