/* Product pages (2026-10 redesign), rendered by [flyward_page name="…"] from pages/{name}-{zh,en}.php.
   Same design language as the homepage (home/home.css); loaded only on the converted pages (see functions.php). */
.fwp {
  --fwp-bg: #05060a;
  --fwp-line: rgba(255, 255, 255, .09);
  --fwp-line2: rgba(255, 255, 255, .16);
  --fwp-text: #f3f5f9;
  --fwp-muted: rgba(226, 232, 245, .66);
  --fwp-dim: rgba(226, 232, 245, .44);
  --fwp-a1: #74c4f6;
  --fwp-a2: #5596f8;
  --fwp-a3: #a1d0f3;
  --fwp-gradient: linear-gradient(90deg, #74c4f6 0%, #5596f8 51%, #a1d0f3 99%);
  --fwp-sans: var(--fw-sans, "Inter", "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif);
  --fwp-display: var(--fw-display, "Manrope", "Inter", "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif);
  background: var(--fwp-bg);
  color: var(--fwp-text);
  font-family: var(--fwp-sans);
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
  display: flow-root;
}
/* the theme's #lqd-wrap clips with overflow:hidden, which makes it a scroll container and switches off position:sticky
   for everything inside; clip keeps the same clipping without that (flow-root keeps its block formatting context) */
#lqd-wrap:has(.fwp) { display: flow-root; overflow: clip; }
/* the Elementor container that holds the shortcode: no padding or gap, so the hero sits flush under the header */
body .e-con:has(> .elementor-widget-shortcode .fwp) { --padding-top: 0px; --padding-right: 0px; --padding-bottom: 0px; --padding-left: 0px; --gap: 0px 0px; --row-gap: 0px; --column-gap: 0px; padding: 0; }
.fwp *, .fwp *::before, .fwp *::after { box-sizing: border-box; }
/* (media frames are divs, not figures: Elementor zeroes figure margins inside widgets with a stronger selector) */
.fwp h1, .fwp h2, .fwp h3, .fwp h4, .fwp p, .fwp ul, .fwp ol, .fwp li { margin: 0; padding: 0; }
.fwp ul, .fwp ol { list-style: none; }
.fwp a { color: inherit; text-decoration: none; }
.fwp a:hover { color: inherit; }
.fwp img, .fwp video { display: block; max-width: 100%; height: auto; }
.fwp a:focus-visible, .fwp button:focus-visible { outline: 2px solid var(--fwp-a1); outline-offset: 3px; }
.fwp h1, .fwp h2, .fwp h3 { text-wrap: balance; }
.fwp p, .fwp li { text-wrap: pretty; }
.fwp-nb { display: inline-block; }
.fwp-wrap { width: min(1280px, calc(100% - 160px)); margin: 0 auto; }

/* ---------- shared pieces ---------- */
/* background-clip:text only paints inside the box; pad it so descenders (g, y, p) are not cut off */
.fwp-grad { background: var(--fwp-gradient); -webkit-background-clip: text; background-clip: text; color: transparent; padding-bottom: .14em; margin-bottom: -.14em; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
.fwp-eyebrow { display: inline-flex; align-items: center; gap: 10px; font: 600 12.5px/1 var(--fwp-sans); letter-spacing: .16em; text-transform: uppercase; color: var(--fwp-a3); }
.fwp-eyebrow::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--fwp-a1); box-shadow: 0 0 12px var(--fwp-a1); }
.fwp .fwp-h2 { font: 700 44px/1.14 var(--fwp-display); letter-spacing: -.025em; color: var(--fwp-text); }
.fwp .fwp-lead { font: 400 18px/1.7 var(--fwp-sans); color: var(--fwp-muted); }
.fwp-btn { display: inline-flex; align-items: center; gap: 10px; height: 50px; padding: 0 26px; border-radius: 999px; font: 600 15px/1 var(--fwp-sans); transition: background .2s ease, border-color .2s ease; }
.fwp-btn svg { width: 16px; height: 16px; transition: transform .2s ease; }
.fwp-btn:hover svg { transform: translateX(3px); }
.fwp .fwp-btn--pri { background: #fff; color: #05060a; }
.fwp .fwp-btn--pri:hover { background: #e8f2fc; color: #05060a; }
.fwp .fwp-btn--sec { border: 1px solid var(--fwp-line2); color: #fff; background: rgba(255, 255, 255, .04); backdrop-filter: blur(8px); }
.fwp .fwp-btn--sec:hover { border-color: rgba(116, 196, 246, .55); color: #fff; }
.fwp-ctas { display: flex; gap: 14px; margin-top: 36px; flex-wrap: wrap; }
.fwp-sec { padding: 120px 0; border-top: 1px solid var(--fwp-line); }
.fwp-head { max-width: 820px; }
.fwp-head .fwp-h2 { margin-top: 22px; }
.fwp-head .fwp-lead { margin-top: 18px; max-width: 680px; }
/* .fwp prefix: the .fwp ul/ol/p reset (0,1,1) would otherwise zero this when the next element is a list */
.fwp .fwp-head + * { margin-top: 60px; }
.fwp-head--row { display: flex; justify-content: space-between; align-items: end; gap: 48px; max-width: none; }
.fwp-head--row > div { max-width: 760px; }
.fwp-head--row > .fwp-lead { max-width: 440px; margin-top: 0; text-wrap: balance; }

/* framed media, the same frame as the homepage product rows */
.fwp-shot { position: relative; overflow: hidden; border-radius: 18px; border: 1px solid var(--fwp-line2); background: #070a12; box-shadow: 0 50px 120px rgba(0, 0, 0, .55); }
.fwp-shot > svg { display: block; width: 100%; height: 100%; }
.fwp .fwp-shot video, .fwp .fwp-shot > img { width: 100%; height: 100%; object-fit: cover; }
.fwp-corner { position: absolute; z-index: 2; left: 14px; top: 14px; width: 22px; height: 22px; border: 1.5px solid rgba(161, 208, 243, .8); border-right: 0; border-bottom: 0; pointer-events: none; }
.fwp-cap { position: absolute; left: 16px; bottom: 16px; z-index: 2; display: flex; align-items: center; gap: 8px; padding: 9px 12px; border-radius: 8px; border: 1px solid var(--fwp-line); background: rgba(5, 6, 10, .66); backdrop-filter: blur(10px); font: 500 12px/1 var(--fwp-sans); letter-spacing: .03em; color: var(--fwp-a3); pointer-events: none; }
.fwp-cap::before { content: ""; flex: none; width: 6px; height: 6px; border-radius: 50%; background: #43e08a; box-shadow: 0 0 10px #43e08a; }
.fwp-play { position: absolute; right: 14px; bottom: 14px; z-index: 3; display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border-radius: 50%; border: 1px solid var(--fwp-line2); background: rgba(5, 6, 10, .66); backdrop-filter: blur(10px); color: #fff; cursor: pointer; transition: border-color .2s ease; }
.fwp-play:hover { border-color: rgba(116, 196, 246, .55); }
.fwp-play svg { width: 14px; height: 14px; }
.fwp-play .i-pause, .fwp-play.is-on .i-play { display: none; }
.fwp-play.is-on .i-pause { display: block; }

/* line-art illustrations (same markup and animation as the homepage) */
.fwp .fwh-art .m { stroke-dasharray: 520; stroke-dashoffset: 520; transition: stroke-dashoffset 1.6s ease; transition-delay: calc(var(--i) * 70ms); }
.fwp .is-in .fwh-art .m { stroke-dashoffset: 0; }
.fwp .fwh-art .pulse { transform-box: fill-box; transform-origin: center; animation: fwp-pulse 2.6s ease-in-out infinite; }
@keyframes fwp-pulse { 0%, 100% { opacity: .55; } 50% { opacity: 1; } }

/* reveal on scroll: pages.js marks what is already on screen before it hides the rest, so nothing flashes */
.fwp.is-ready [data-rv] { opacity: 0; transform: translateY(18px); transition: opacity .8s ease, transform .9s cubic-bezier(.19, 1, .22, 1); transition-delay: calc(var(--d, 0) * 80ms); }
.fwp.is-ready [data-rv].is-in { opacity: 1; transform: none; }

/* ---------- hero ---------- */
.fwp-hero { position: relative; overflow: hidden; padding-top: clamp(150px, 19vh, 190px); background: radial-gradient(900px 520px at 78% 34%, rgba(85, 150, 248, .13), transparent 70%), var(--fwp-bg); }
.fwp-hero::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: repeating-linear-gradient(0deg, rgba(255, 255, 255, .03) 0 1px, transparent 1px 56px), repeating-linear-gradient(90deg, rgba(255, 255, 255, .03) 0 1px, transparent 1px 56px); -webkit-mask: radial-gradient(900px 520px at 72% 32%, #000, transparent 72%); mask: radial-gradient(900px 520px at 72% 32%, #000, transparent 72%); }
.fwp-hero > * { position: relative; }
.fwp-hero__grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: 72px; align-items: center; }
.fwp .fwp-h1 { margin: 26px 0 24px; font: 700 62px/1.08 var(--fwp-display); letter-spacing: -.026em; color: #fff; }
.fwp-h1 .fwp-grad { display: block; margin-top: 16px; font-size: .56em; line-height: 1.25; letter-spacing: -.015em; }
.fwp .fwp-sub { max-width: 560px; font: 400 18px/1.7 var(--fwp-sans); color: rgba(236, 240, 250, .78); }
.fwp-shot--art { aspect-ratio: 8 / 5; }
.fwp .fwp-facts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: 96px; border-top: 1px solid var(--fwp-line); }
.fwp-facts li { padding: 26px 28px 40px; border-left: 1px solid var(--fwp-line); }
.fwp-facts li:first-child { padding-left: 0; border-left: 0; }
.fwp-facts b { display: block; margin-bottom: 12px; font: 600 12px/1 var(--fwp-sans); letter-spacing: .06em; color: var(--fwp-a1); }
.fwp-facts strong { display: block; margin-bottom: 6px; font: 600 16px/1.3 var(--fwp-sans); color: #fff; }
.fwp-facts span { display: block; font: 400 14px/1.55 var(--fwp-sans); color: var(--fwp-dim); text-wrap: balance; }

/* ---------- two-column text (heading left, prose right) ---------- */
.fwp-split { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 80px; align-items: start; }
.fwp-split .fwp-h2 { margin-top: 22px; }
.fwp-split .fwp-lead { margin-top: 18px; }
.fwp .fwp-prose p { font: 400 18px/1.8 var(--fwp-sans); color: var(--fwp-muted); }
.fwp .fwp-prose p:first-child { color: rgba(236, 240, 250, .86); }
.fwp .fwp-prose p + p { margin-top: 22px; }
.fwp-sticky { position: sticky; top: 120px; }
/* 3D diagram drawn by home/fw3d.js; the poster shows until WebGL is running (and if the context is lost) */
.fwp-3d { position: relative; margin-top: 36px; height: clamp(260px, calc(100vh - 410px), 420px); background: center / contain no-repeat; }
.fwp-3d canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.fwp-3d:not(.is-live) canvas { visibility: hidden; }
.fwp-3d--onboard:not(.is-live) { background-image: url(img/onboard-en.webp); }
.fwp[lang="zh-CN"] .fwp-3d--onboard:not(.is-live) { background-image: url(img/onboard-zh.webp); }

/* ---------- comparison cards ---------- */
.fwp-cmp { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; align-items: stretch; }
.fwp-cmp__card { padding: 32px 30px 30px; border-radius: 18px; border: 1px solid var(--fwp-line); background: linear-gradient(180deg, rgba(255, 255, 255, .03), rgba(255, 255, 255, 0) 60%), #080a10; }
.fwp-cmp__tag { font: 600 12px/1.3 var(--fwp-sans); letter-spacing: .14em; text-transform: uppercase; color: var(--fwp-dim); }
.fwp .fwp-cmp__card h3 { margin: 14px 0 22px; font: 700 23px/1.3 var(--fwp-display); letter-spacing: -.015em; color: #fff; }
.fwp-cmp__card ol { counter-reset: fwp-n; border-top: 1px solid var(--fwp-line); }
.fwp .fwp-cmp__card ol li { counter-increment: fwp-n; display: grid; grid-template-columns: 30px minmax(0, 1fr); padding: 14px 0; border-bottom: 1px solid var(--fwp-line); font: 400 14.5px/1.7 var(--fwp-sans); color: var(--fwp-muted); }
.fwp-cmp__card ol li::before { content: counter(fwp-n, decimal-leading-zero); font: 600 12px/2 var(--fwp-sans); letter-spacing: .04em; color: var(--fwp-dim); }
.fwp-cmp__card--hi { border-color: rgba(116, 196, 246, .42); background: radial-gradient(520px 280px at 50% 0%, rgba(85, 150, 248, .2), transparent 70%), #07101d; box-shadow: 0 40px 100px rgba(16, 48, 96, .28); }
.fwp-cmp__card--hi { display: flex; flex-direction: column; }
.fwp-cmp__card--hi .fwp-cmp__tag { color: var(--fwp-a3); }
.fwp-cmp__card--hi .fwp-more { padding-top: 28px; }
.fwp-cmp__card ul { border-top: 1px solid rgba(116, 196, 246, .2); }
.fwp .fwp-cmp__card ul li { display: flex; gap: 14px; padding: 15px 0; border-bottom: 1px solid rgba(116, 196, 246, .14); font: 500 15px/1.6 var(--fwp-sans); color: rgba(236, 240, 250, .9); }
.fwp-cmp__card ul li::before { content: ""; flex: none; width: 8px; height: 8px; margin-top: .55em; border: 1.5px solid var(--fwp-a1); transform: rotate(45deg); }

/* ---------- media row + legend ---------- */
.fwp-row { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 72px; align-items: center; }
.fwp-txt .fwp-h2 { margin-top: 22px; font-size: 36px; }
.fwp .fwp-txt > p { margin-top: 18px; font: 400 17px/1.7 var(--fwp-sans); color: var(--fwp-muted); }
.fwp .fwp-keys { margin-top: 30px; border-top: 1px solid var(--fwp-line); }
.fwp .fwp-keys li { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 14px; align-items: center; padding: 16px 0; border-bottom: 1px solid var(--fwp-line); font: 400 15px/1.6 var(--fwp-sans); color: var(--fwp-muted); }
.fwp-keys b { display: block; margin-bottom: 2px; font-weight: 600; color: #fff; }
.fwp-key { justify-self: center; display: block; }
.fwp-key--tile { width: 24px; height: 18px; border: 1.5px solid #9be39b; background: rgba(150, 230, 150, .28); transform: rotate(-12deg); }
.fwp-key--line { width: 28px; height: 10px; background: linear-gradient(170deg, transparent 42%, #ff6fd8 43% 50%, transparent 51%), linear-gradient(176deg, transparent 30%, #7cf09a 31% 37%, transparent 38%), linear-gradient(172deg, transparent 58%, #ffd36b 59% 65%, transparent 66%); }
.fwp-key--dot { width: 12px; height: 12px; border-radius: 50%; background: #2f4bff; box-shadow: 0 0 10px rgba(47, 75, 255, .8); }
.fwp-shot--live { aspect-ratio: 1200 / 944; }
.fwp .fwp-shot--track { aspect-ratio: 1600 / 738; margin-top: 72px; }
/* soften the bright greyscale satellite map at the edges so it sits in the dark page */
.fwp-shot--track::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: radial-gradient(120% 120% at 40% 55%, transparent 55%, rgba(5, 6, 10, .42) 100%); }
.fwp .fwp-note { margin-top: 16px; font: 400 14px/1.6 var(--fwp-sans); color: var(--fwp-dim); }

/* ---------- cards ---------- */
.fwp-grid { display: grid; gap: 20px; }
.fwp-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.fwp-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.fwp-grid--32 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.fwp-grid--32 > * { grid-column: span 2; }
.fwp-grid--32 > :nth-child(n+4) { grid-column: span 3; }
.fwp-card { position: relative; display: flex; flex-direction: column; align-items: flex-start; padding: 30px 28px 32px; border-radius: 16px; border: 1px solid var(--fwp-line); background: rgba(255, 255, 255, .02); transition: border-color .25s ease, background .25s ease; }
.fwp-card:hover { border-color: var(--fwp-line2); background: rgba(255, 255, 255, .035); }
.fwp-ic { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 12px; border: 1px solid rgba(116, 196, 246, .28); background: rgba(116, 196, 246, .08); color: var(--fwp-a1); }
.fwp-ic svg { width: 22px; height: 22px; }
.fwp .fwp-card h3 { margin-top: 22px; font: 650 19px/1.35 var(--fwp-display); letter-spacing: -.01em; color: #fff; }
.fwp .fwp-card p { margin-top: 10px; font: 400 15px/1.7 var(--fwp-sans); color: var(--fwp-muted); }
.fwp-more { display: inline-flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 24px; font: 600 14px/1 var(--fwp-sans); color: #fff; }
.fwp-more svg { width: 14px; height: 14px; color: var(--fwp-a1); transition: transform .2s ease; }
.fwp-card--link:hover { border-color: rgba(116, 196, 246, .42); background: rgba(116, 196, 246, .04); }
.fwp-card--link:hover .fwp-more svg { transform: translateX(3px); }
/* cards with a photo on top (application scenarios) */
.fwp-card.fwp-card--photo { align-items: stretch; padding: 0; overflow: hidden; }
.fwp-card__media { position: relative; width: 100%; height: 236px; overflow: hidden; background: #0b0f18; }
.fwp .fwp-card__media img { width: 100%; height: 100%; max-width: none; object-fit: cover; }
.fwp-card__media::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(5, 6, 10, 0) 55%, rgba(5, 6, 10, .45)); box-shadow: inset 0 -1px 0 var(--fwp-line); pointer-events: none; }
.fwp-card__body { padding: 24px 28px 30px; }
.fwp .fwp-card--photo h3 { margin-top: 0; }
/* the wide cards (second row on desktop, the odd last card on tablets) put the photo beside the text */
@media (min-width: 1200px) {
  .fwp-grid--32 > .fwp-card--photo:nth-child(n+4) { flex-direction: row; }
  .fwp-grid--32 > .fwp-card--photo:nth-child(n+4) .fwp-card__media { flex: 0 0 46%; height: auto; min-height: 250px; }
  .fwp-grid--32 > .fwp-card--photo:nth-child(n+4) .fwp-card__media::after { box-shadow: inset -1px 0 0 var(--fwp-line); }
  .fwp-grid--32 > .fwp-card--photo:nth-child(n+4) .fwp-card__body { align-self: center; }
}
@media (min-width: 768px) and (max-width: 1199px) {
  .fwp-grid--32 > .fwp-card--photo:last-child:nth-child(odd) { flex-direction: row; }
  .fwp-grid--32 > .fwp-card--photo:last-child:nth-child(odd) .fwp-card__media { flex: 0 0 46%; height: auto; min-height: 250px; }
  .fwp-grid--32 > .fwp-card--photo:last-child:nth-child(odd) .fwp-card__media::after { box-shadow: inset -1px 0 0 var(--fwp-line); }
  .fwp-grid--32 > .fwp-card--photo:last-child:nth-child(odd) .fwp-card__body { align-self: center; }
}

/* ---------- numbered list ---------- */
.fwp-nums { border-top: 1px solid var(--fwp-line); }
.fwp .fwp-nums li { display: grid; grid-template-columns: 64px minmax(0, 1fr); padding: 28px 0; border-bottom: 1px solid var(--fwp-line); }
.fwp-nums b { font: 600 13px/1.9 var(--fwp-sans); letter-spacing: .06em; color: var(--fwp-a1); }
.fwp .fwp-nums h3 { font: 650 20px/1.35 var(--fwp-display); letter-spacing: -.01em; color: #fff; }
.fwp .fwp-nums p { margin-top: 8px; font: 400 15.5px/1.75 var(--fwp-sans); color: var(--fwp-muted); }

/* ---------- closing call to action (same card as the homepage) ---------- */
.fwp-cta { position: relative; overflow: hidden; width: min(1280px, calc(100% - 160px)); margin: 0 auto 120px; padding: 96px 80px; border-radius: 28px; border: 1px solid var(--fwp-line2); background: radial-gradient(700px 360px at 85% 0%, rgba(85, 150, 248, .28), transparent 70%), radial-gradient(600px 300px at 10% 120%, rgba(116, 196, 246, .16), transparent 70%), #080b13; }
.fwp-cta::before { content: ""; position: absolute; inset: 0; background: repeating-linear-gradient(0deg, rgba(255, 255, 255, .035) 0 1px, transparent 1px 48px), repeating-linear-gradient(90deg, rgba(255, 255, 255, .035) 0 1px, transparent 1px 48px); -webkit-mask: radial-gradient(800px 400px at 80% 20%, #000, transparent 75%); mask: radial-gradient(800px 400px at 80% 20%, #000, transparent 75%); }
.fwp-cta > * { position: relative; }
.fwp .fwp-cta h2 { max-width: 820px; margin-top: 22px; font: 700 50px/1.12 var(--fwp-display); letter-spacing: -.03em; color: #fff; }
.fwp-cta .fwp-lead { max-width: 600px; margin-top: 20px; }

/* ---------- Chinese ---------- */
.fwp[lang="en"] .fwp-h1 { font-size: 54px; line-height: 1.08; }
.fwp[lang="zh-CN"] .fwp-h1 { font-size: 58px; line-height: 1.16; letter-spacing: 0; }
.fwp[lang="zh-CN"] .fwp-h1 .fwp-grad { letter-spacing: 0; }
.fwp[lang="en"] .fwp-h1--long { font-size: 46px; } /* long English product names: two lines, not three */
.fwp[lang="zh-CN"] .fwp-h2, .fwp[lang="zh-CN"] .fwp-cta h2, .fwp[lang="zh-CN"] .fwp-cmp__card h3 { letter-spacing: 0; }
.fwp[lang="zh-CN"] .fwp-eyebrow { letter-spacing: .12em; }
.fwp[lang="zh-CN"] .fwp-cmp__tag { letter-spacing: .08em; }
.fwp[lang="zh-CN"] .fwp-lead, .fwp[lang="zh-CN"] .fwp-sub, .fwp[lang="zh-CN"] .fwp-prose p, .fwp[lang="zh-CN"] .fwp-card p, .fwp[lang="zh-CN"] .fwp-nums p, .fwp[lang="zh-CN"] .fwp-txt > p { line-height: 1.85; }

/* ---------- flight phases under the hero, lit in step with the 3D mission (pages.js passes onStep) ---------- */
.fwp .fwp-steps { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); margin-top: 88px; border-top: 1px solid var(--fwp-line); }
.fwp .fwp-steps li { position: relative; padding: 22px 12px 30px 0; }
.fwp-steps li::before { content: ""; position: absolute; left: 0; right: 12px; top: -1px; height: 2px; background: var(--fwp-gradient); transform: scaleX(0); transform-origin: left; transition: transform .5s ease; }
.fwp-steps li.is-on::before { transform: scaleX(1); }
.fwp-steps b { display: block; font: 600 12px/1 var(--fwp-sans); letter-spacing: .06em; color: var(--fwp-a1); }
.fwp-steps span { display: block; margin-top: 12px; font: 600 16px/1.3 var(--fwp-sans); color: #fff; transition: color .3s ease; }
.fwp.is-ready .fwp-steps b { color: var(--fwp-dim); transition: color .3s ease; }
.fwp.is-ready .fwp-steps span { color: rgba(236, 240, 250, .5); }
.fwp.is-ready .fwp-steps li.is-on b { color: var(--fwp-a1); }
.fwp.is-ready .fwp-steps li.is-on span { color: #fff; }
/* hero frame holding a 3D scene */
.fwp-shot--3d { aspect-ratio: 8 / 5; background: radial-gradient(80% 70% at 50% 45%, #0c1a33 0%, #070b16 55%, #05070d 100%); }
/* scenes that fill their frame: undo the sidebar diagram's height, margin and tablet max-width */
.fwp .fwp-3d--mission, .fwp .fwp-3d--traffic, .fwp .fwp-3d--batch, .fwp .fwp-3d--aero, .fwp .fwp-3d--flow, .fwp .fwp-3d--burst { position: absolute; inset: 0; height: auto; max-width: none; margin: 0; }
.fwp-3d--mission:not(.is-live) { background-image: url(img/mission-en.webp); }
.fwp[lang="zh-CN"] .fwp-3d--mission:not(.is-live) { background-image: url(img/mission-zh.webp); }

/* ---------- 16:9 demo video, legend keys for detection overlays ---------- */
.fwp-shot--runway { aspect-ratio: 1200 / 810; }
.fwp-key--outline, .fwp-key--center, .fwp-key--dev { width: 30px; height: 22px; background: center / contain no-repeat; }
.fwp-key--outline { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 22'%3E%3Cpath d='M11 3h8l8 16H3z' fill='rgba(116,196,246,.16)' stroke='%2374c4f6' stroke-width='1.6'/%3E%3Cg fill='%23fff'%3E%3Ccircle cx='3' cy='19' r='2'/%3E%3Ccircle cx='27' cy='19' r='2'/%3E%3Ccircle cx='11' cy='3' r='1.6'/%3E%3Ccircle cx='19' cy='3' r='1.6'/%3E%3C/g%3E%3C/svg%3E"); }
.fwp-key--center { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 22'%3E%3Cpath d='M15 2v20' stroke='%2343e08a' stroke-width='1.8' stroke-dasharray='3 2.5'/%3E%3Cpath d='M6 8h6M18 8h6' stroke='%2343e08a' stroke-width='1.8'/%3E%3Cpath d='M15 4.5l3.5 3.5-3.5 3.5-3.5-3.5z' fill='%2305060a' stroke='%2343e08a' stroke-width='1.4'/%3E%3C/svg%3E"); }
.fwp-key--dev { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 22'%3E%3Cpath d='M2 11h26' stroke='rgba(255,255,255,.55)' stroke-width='1.2'/%3E%3Cg fill='none' stroke='%23fff' stroke-width='1.2'%3E%3Ccircle cx='4' cy='11' r='1.8'/%3E%3Ccircle cx='26' cy='11' r='1.8'/%3E%3C/g%3E%3Cpath d='M15 6v10' stroke='%23fff' stroke-width='1.6'/%3E%3Cpath d='M21 6.5l4.5 4.5-4.5 4.5-4.5-4.5z' fill='%2343e08a'/%3E%3C/svg%3E"); }
.fwp .fwp-key--num { width: auto; font: 700 13px/1 var(--fwp-sans); font-style: normal; color: var(--fwp-a1); }

/* ---------- integration specs and the three-step way of working ---------- */
.fwp .fwp-specs { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 60px 0 0; border-top: 1px solid var(--fwp-line); }
.fwp-specs > div { padding: 26px 28px 30px; border-left: 1px solid var(--fwp-line); }
.fwp-specs > div:first-child { padding-left: 0; border-left: 0; }
.fwp .fwp-specs dt { font: 600 12px/1.3 var(--fwp-sans); letter-spacing: .1em; text-transform: uppercase; color: var(--fwp-a1); }
.fwp .fwp-specs dd { margin: 12px 0 0; font: 400 16px/1.65 var(--fwp-sans); color: rgba(236, 240, 250, .86); }
.fwp .fwp-flow { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; }
.fwp .fwp-flow li { position: relative; display: flex; align-items: baseline; gap: 16px; padding: 24px 26px; border-radius: 14px; border: 1px solid var(--fwp-line); background: rgba(255, 255, 255, .02); }
.fwp-flow li:not(:last-child)::after { content: ""; position: absolute; right: -19px; top: 50%; width: 9px; height: 9px; border-top: 1.5px solid var(--fwp-a1); border-right: 1.5px solid var(--fwp-a1); transform: translateY(-50%) rotate(45deg); }
.fwp-flow b { flex: none; font: 600 12px/1 var(--fwp-sans); letter-spacing: .06em; color: var(--fwp-a1); }
.fwp-flow strong { font: 600 17px/1.4 var(--fwp-sans); color: #fff; }
.fwp[lang="zh-CN"] .fwp-specs dt { letter-spacing: .08em; }

/* ---------- simulation page: weather-cycle hero, scene gallery, test suites ---------- */
.fwp-shot--hero { aspect-ratio: 8 / 5; }
/* multi-sensor composite and the traffic scene */
.fwp-shot--sensors { aspect-ratio: 8 / 5; }
.fwp .fwp-shot--sensors picture { display: block; width: 100%; height: 100%; }
.fwp .fwp-shot--sensors img { width: 100%; height: 100%; object-fit: cover; }
.fwp-shot--traffic { aspect-ratio: 16 / 9; background: radial-gradient(80% 70% at 50% 40%, #0b1730 0%, #070b16 55%, #05070d 100%); }
.fwp-3d--traffic:not(.is-live) { background: url(img/traffic-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--traffic:not(.is-live) { background-image: url(img/traffic-zh.webp); }
/* simulation at scale: batch runs scene, a live chip and a running count (shown once the scene runs) */
.fwp-3d--batch:not(.is-live) { background: url(img/batch-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--batch:not(.is-live) { background-image: url(img/batch-zh.webp); }
.fwp-shot .fwp-chip--live { left: auto; right: 14px; top: 14px; }
.fwp-chip--live::before { animation: fwp-pulse 1.6s ease-in-out infinite; }
@keyframes fwp-pulse { 50% { opacity: .3; box-shadow: none; } }
.fwp-tally { position: absolute; right: 16px; bottom: 16px; z-index: 2; padding: 8px 12px; border-radius: 8px; border: 1px solid var(--fwp-line); background: rgba(5, 6, 10, .66); backdrop-filter: blur(10px); font: 500 12px/1 var(--fwp-sans); letter-spacing: .03em; color: var(--fwp-muted); opacity: 0; transition: opacity .6s; pointer-events: none; }
.fwp-tally b { margin: 0 2px; font: 650 14px/1 "SF Mono", Menlo, Consolas, monospace; font-variant-numeric: tabular-nums; color: #fff; }
.fwp-shot--batch:has(.is-live) .fwp-tally { opacity: 1; }
.fwp .fwp-bignum { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: 32px; border-top: 1px solid var(--fwp-line); }
.fwp .fwp-bignum li { padding: 26px 24px 6px 0; }
.fwp .fwp-bignum li + li { padding-left: 24px; border-left: 1px solid var(--fwp-line); }
.fwp-bignum b { display: block; font: 700 46px/1.05 var(--fwp-display); letter-spacing: -.03em; background: var(--fwp-gradient); -webkit-background-clip: text; background-clip: text; color: transparent; }
.fwp-bignum strong { display: block; margin-top: 12px; font: 650 16px/1.4 var(--fwp-display); color: #fff; }
.fwp .fwp-bignum span { display: block; margin-top: 6px; font: 400 14px/1.6 var(--fwp-sans); color: var(--fwp-muted); }
/* aerodynamics: flow scene with a speed legend, then the three analysis levels */
.fwp-3d--aero:not(.is-live) { background: url(img/aero-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--aero:not(.is-live) { background-image: url(img/aero-zh.webp); }
.fwp-legend { position: absolute; right: 16px; bottom: 16px; z-index: 2; display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 8px; border: 1px solid var(--fwp-line); background: rgba(5, 6, 10, .66); backdrop-filter: blur(10px); font: 500 12px/1 var(--fwp-sans); color: var(--fwp-muted); pointer-events: none; }
.fwp-legend i { width: 96px; height: 6px; border-radius: 3px; background: linear-gradient(90deg, #30123b, #4662d7, #36aaf9, #1ae4b6, #72fe5e, #c7ef34, #fbb938, #f56918, #c42503); }
.fwp .fwp-cmp--aero { margin-top: 32px; }
/* platform flow: the scene's step drives the captions in the frame (pages.js sets data-step) and lights the steps below */
.fwp-3d--flow:not(.is-live) { background: url(img/flow.webp) center / cover no-repeat; }
.fwp .fwp-shot--flow + .fwp-steps4 { margin-top: 32px; }
.fwp-chip--steps > span { display: none; }
.fwp-shot--flow:not([data-step]) .fwp-chip--steps > [data-at="2"], .fwp-shot--flow[data-step="0"] [data-at="0"], .fwp-shot--flow[data-step="1"] [data-at="1"], .fwp-shot--flow[data-step="2"] [data-at="2"], .fwp-shot--flow[data-step="3"] [data-at="3"] { display: inline; }
.fwp-shot--flow[data-step="2"] .fwp-tally, .fwp-shot--flow[data-step="3"] .fwp-tally, .fwp-shot--flow:not([data-step]):has(.is-live) .fwp-tally { opacity: 1; }
.fwp-prompt { position: absolute; left: 46px; top: 14px; z-index: 2; display: flex; align-items: center; gap: 10px; max-width: calc(100% - 330px); padding: 6px 14px 6px 6px; border-radius: 10px; border: 1px solid rgba(116, 196, 246, .34); background: rgba(5, 6, 10, .72); backdrop-filter: blur(10px); font: 500 13px/1.3 var(--fwp-sans); color: #fff; opacity: 0; transform: translateY(-6px); transition: opacity .45s ease, transform .45s ease; pointer-events: none; }
.fwp-prompt i { flex: none; padding: 5px 6px; border-radius: 6px; background: var(--fwp-gradient); font: 700 10.5px/1 var(--fwp-sans); font-style: normal; letter-spacing: .06em; color: #05060a; }
.fwp-prompt span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.fwp-shot--flow[data-step="0"] .fwp-prompt { opacity: 1; transform: none; }
.fwp-shot--flow[data-step="0"] .fwp-prompt span { animation: fwp-type 1.5s steps(16, end) .35s both; }
@keyframes fwp-type { from { clip-path: inset(0 100% 0 0); } }
.fwp-steps4 li::before { transform-origin: left; transition: transform .5s ease; }
.fwp-steps4 :is(b, strong) { transition: color .4s ease; }
.fwp-steps4 li > span { transition: opacity .4s ease; }
.fwp-steps4.is-sync li:not(.is-on)::before { transform: scaleX(0); }
.fwp-steps4.is-sync li:not(.is-on) b { color: var(--fwp-dim); }
.fwp-steps4.is-sync li:not(.is-on) strong { color: rgba(236, 240, 250, .6); }
.fwp-steps4.is-sync li:not(.is-on) > span { opacity: .62; }
/* weather and dynamics: the microburst scene above the capability cards, with a wind-speed legend */
.fwp-3d--burst:not(.is-live) { background: url(img/burst-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--burst:not(.is-live) { background-image: url(img/burst-zh.webp); }
.fwp .fwp-shot--burst + .fwp-grid { margin-top: 32px; }
.fwp-legend--warm i { background: linear-gradient(90deg, #8c1208, #e33908, #ff6a1b, #ffb054, #ffe2a8); }
/* data loop: numbered list beside a sticky inline-SVG figure (sim-data-figure.php) */
.fwp-split--fig .fwp-nums { margin-top: 36px; }
.fwp-shot--fig { aspect-ratio: 1000 / 860; background: radial-gradient(90% 80% at 50% 28%, #0b1730 0%, #070b16 60%, #05070d 100%); }
.fwp-shot--fig .fwp-cap { top: 16px; bottom: auto; }
.fwp-fig .fig-grid { fill: none; stroke: rgba(120, 160, 210, .2); stroke-width: 1; }
.fwp-fig .fig-shear { fill: rgba(255, 150, 90, .045); stroke: rgba(255, 160, 100, .36); stroke-width: 1; stroke-dasharray: 4 5; }
.fwp-fig .fig-streak { fill: none; stroke: rgba(255, 185, 130, .5); stroke-width: 1.2; stroke-linecap: round; }
.fwp-fig .fig-shadow { fill: none; stroke: rgba(160, 200, 240, .16); stroke-width: 1.2; stroke-dasharray: 3 5; }
.fwp-fig .fig-tr { fill: none; stroke-width: 3.4; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 0; transition: stroke-dashoffset 1.8s cubic-bezier(.3, .6, .2, 1); }
.fwp-fig .fig-c { stroke-width: 2.8; transition-delay: .5s; }
.fwp-fig .fig-base { stroke: #74c4f6; }
.fwp-fig .fig-a { stroke: #9b8cff; }
.fwp-fig .fig-b { stroke: #ffb547; }
.fwp-fig .fig-pad { fill: none; stroke: #43e08a; stroke-width: 1.3; opacity: .85; }
.fwp-fig .fig-drop { stroke: rgba(214, 232, 250, .35); stroke-width: 1; stroke-dasharray: 2 4; }
.fwp-fig .fig-dot { stroke: #05070d; stroke-width: 2; }
.fwp-fig .fig-dot-base { fill: #74c4f6; }
.fwp-fig .fig-dot-a { fill: #9b8cff; }
.fwp-fig .fig-dot-b { fill: #ffb547; }
.fwp-fig .fig-pin { color: #9b8cff; }
.fwp-fig .fig-pin-warn { color: #ff6b6b; }
.fwp-fig .fig-pin path { stroke: currentColor; stroke-width: 1.2; }
.fwp-fig .fig-pin circle { fill: #05070d; stroke: currentColor; stroke-width: 2.4; }
.fwp-fig text { font-family: var(--fwp-sans); }
.fwp-fig .fig-pin text { fill: currentColor; font-size: 26px; font-weight: 650; }
.fwp-fig .fig-zone { fill: rgba(255, 185, 130, .9); font-size: 20px; font-weight: 600; letter-spacing: .06em; }
.fwp-fig .fig-time { fill: rgba(214, 232, 250, .8); font: 600 18px/1 "SF Mono", Menlo, Consolas, monospace; letter-spacing: .06em; }
.fwp-fig .fig-panel { fill: rgba(9, 13, 24, .82); stroke: rgba(255, 255, 255, .12); }
.fwp-fig .fig-ai { fill: rgba(12, 22, 44, .88); stroke: rgba(116, 196, 246, .35); }
.fwp-fig .fig-h { fill: #fff; font-size: 22px; font-weight: 650; }
.fwp-fig .fig-axis { fill: none; stroke: rgba(255, 255, 255, .07); stroke-width: 1; }
.fwp-fig .fig-tick { fill: rgba(226, 232, 245, .5); font: 500 17px/1 "SF Mono", Menlo, Consolas, monospace; }
.fwp-fig .fig-leg { fill: rgba(226, 232, 245, .82); font-size: 20px; }
.fwp-fig .fig-cursor { stroke: rgba(214, 232, 250, .55); stroke-width: 1; stroke-dasharray: 3 4; }
.fwp-fig .fig-ev { fill: #05070d; stroke: #9b8cff; stroke-width: 2.8; }
.fwp-fig .fig-ev-warn { stroke: #ff6b6b; }
.fwp-fig .fig-spark { fill: #a1d0f3; }
.fwp-fig .fig-ai-l { fill: rgba(236, 240, 250, .9); font-size: 22px; }
.fwp[lang="en"] .fwp-fig .fig-ai-l { font-size: 20.5px; }
.fwp-fig .fig-dot, .fwp-fig .fig-pin, .fwp-fig .fig-ev, .fwp-fig .fig-ai-l { transition: opacity .6s ease 1.6s; }
.fwp-fig .fig-ai-l1 { transition-delay: 1.9s; }
.fwp-fig .fig-ai-m { display: none; fill: rgba(236, 240, 250, .9); font-size: 34px; }
.fwp.is-ready .fwp-shot--fig:not(.is-in) .fig-tr { stroke-dashoffset: 1; }
.fwp.is-ready .fwp-shot--fig:not(.is-in) :is(.fig-dot, .fig-pin, .fig-ev, .fig-ai-l) { opacity: 0; }
.fwp .fwp-spec5 { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); margin-top: 28px; border-top: 1px solid var(--fwp-line); }
.fwp .fwp-spec5 li { padding: 18px 20px 4px 0; }
.fwp .fwp-spec5 li + li { padding-left: 20px; border-left: 1px solid var(--fwp-line); }
.fwp-spec5 b { display: block; font: 650 16px/1.35 var(--fwp-display); color: #fff; }
.fwp .fwp-spec5 span { display: block; margin-top: 6px; font: 400 14px/1.6 var(--fwp-sans); color: var(--fwp-muted); }
.fwp .fwp-feat4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; margin-top: 28px; }
.fwp .fwp-feat4 li { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 14px; align-items: start; align-content: start; padding: 20px 20px 22px; border-radius: 14px; border: 1px solid var(--fwp-line); background: rgba(255, 255, 255, .02); }
.fwp-feat4 .fwp-ic { grid-row: span 2; width: 38px; height: 38px; border-radius: 10px; }
.fwp-feat4 .fwp-ic svg { width: 19px; height: 19px; }
.fwp-feat4 strong { font: 650 16px/1.4 var(--fwp-display); color: #fff; }
.fwp .fwp-feat4 span:not(.fwp-ic) { margin-top: 4px; font: 400 14px/1.6 var(--fwp-sans); color: var(--fwp-muted); }
/* hero: four aligned frames of the same camera cross-fade in turn (each item fades in over the one below, then the one below drops out) */
.fwp-cycle { --slot: 4.2s; }
.fwp-cycle__item { position: absolute; inset: 0; opacity: 0; animation: fwp-cycle calc(var(--slot) * 4) linear infinite; animation-delay: calc(var(--i) * var(--slot) - var(--slot) * .28); }
.fwp .fwp-cycle__item img { width: 100%; height: 100%; max-width: none; object-fit: cover; }
.fwp-cycle.is-paused .fwp-cycle__item { animation-play-state: paused; }
@keyframes fwp-cycle { 0% { opacity: 0; } 7% { opacity: 1; } 32% { opacity: 1; } 39% { opacity: 0; } 100% { opacity: 0; } }
.fwp-gal__item { position: relative; overflow: hidden; aspect-ratio: 8 / 5; border-radius: 14px; border: 1px solid var(--fwp-line2); background: #070a12; }
.fwp .fwp-gal__item img { width: 100%; height: 100%; max-width: none; object-fit: cover; transition: transform .9s cubic-bezier(.2, .7, .2, 1); }
.fwp-gal__item:hover img { transform: scale(1.035); }
.fwp-chip { position: absolute; left: 12px; top: 12px; z-index: 2; display: inline-flex; align-items: center; gap: 7px; padding: 7px 11px; border-radius: 999px; border: 1px solid var(--fwp-line2); background: rgba(5, 6, 10, .62); backdrop-filter: blur(8px); font: 600 12.5px/1 var(--fwp-sans); letter-spacing: .04em; color: #fff; }
.fwp-chip::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--fwp-a1); box-shadow: 0 0 8px var(--fwp-a1); }
.fwp-cycle .fwp-chip { left: auto; right: 14px; top: 14px; }
/* nine conditions from the same camera */
.fwp .fwp-wx { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.fwp .fwp-wx li { position: relative; overflow: hidden; aspect-ratio: 8 / 5; border-radius: 12px; border: 1px solid var(--fwp-line2); background: #070a12; }
.fwp .fwp-wx img { width: 100%; height: 100%; max-width: none; object-fit: cover; transition: transform .9s cubic-bezier(.2, .7, .2, 1); }
.fwp-wx li:hover img { transform: scale(1.04); }
.fwp-wx li::after { content: ""; position: absolute; inset: auto 0 0; height: 34%; z-index: 1; background: linear-gradient(to top, rgba(4, 6, 12, .55), transparent); pointer-events: none; }
.fwp-wx__t { position: absolute; right: 12px; bottom: 10px; z-index: 2; font: 600 12px/1 "SF Mono", Menlo, Consolas, monospace; letter-spacing: .06em; color: rgba(236, 240, 250, .88); text-shadow: 0 1px 8px rgba(0, 0, 0, .7); }
/* city switch above the weather grids (one panel per city, the hidden one keeps its lazy images unloaded) */
.fwp .fwp-tabs__bar { display: inline-flex; gap: 4px; margin: 0 0 20px; padding: 5px; border: 1px solid var(--fwp-line2); border-radius: 999px; background: rgba(255, 255, 255, .03); }
.fwp .fwp-tabs__bar button { appearance: none; min-height: 0; margin: 0; padding: 11px 26px; border: 0; border-radius: 999px; background: transparent; box-shadow: none; font: 600 14.5px/1 var(--fwp-sans); letter-spacing: .06em; text-transform: none; color: var(--fwp-muted); cursor: pointer; transition: background-color .25s, color .25s; }
.fwp .fwp-tabs__bar button:hover { color: var(--fwp-text); }
.fwp .fwp-tabs__bar button[aria-selected="true"] { background: rgba(255, 255, 255, .12); color: var(--fwp-text); }
.fwp .fwp-tabs__bar button:focus-visible { outline: 2px solid var(--fwp-a1); outline-offset: 2px; }
.fwp-tabs__panel[hidden] { display: none; }
.fwp .fwp-note--wide { max-width: 860px; margin-top: 28px; }
.fwp .fwp-gal { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.fwp-gal__item--pano { grid-column: 1 / -1; aspect-ratio: 1670 / 450; }
/* four-step platform flow (01 → 04) */
.fwp .fwp-steps4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--fwp-line); }
.fwp .fwp-steps4 li { position: relative; padding: 26px 28px 8px 0; }
.fwp .fwp-steps4 li + li { padding-left: 28px; border-left: 1px solid var(--fwp-line); }
.fwp-steps4 li::before { content: ""; position: absolute; left: 0; right: 28px; top: -1px; height: 2px; background: var(--fwp-gradient); opacity: .9; }
.fwp-steps4 li + li::before { left: 28px; }
.fwp-steps4 b { display: block; font: 600 12px/1 var(--fwp-sans); letter-spacing: .06em; color: var(--fwp-a1); }
.fwp-steps4 strong { display: block; margin-top: 14px; font: 650 20px/1.35 var(--fwp-display); color: #fff; }
.fwp .fwp-steps4 span { display: block; margin-top: 10px; font: 400 15px/1.75 var(--fwp-sans); color: var(--fwp-muted); }
/* ODD matrix: one row per group, chips for each operating condition */
.fwp .fwp-odd { margin: 60px 0 0; border-radius: 18px; border: 1px solid var(--fwp-line); background: linear-gradient(180deg, rgba(116, 196, 246, .045), rgba(116, 196, 246, 0) 70%), #080a10; overflow: hidden; }
.fwp-odd > div { display: grid; grid-template-columns: 250px minmax(0, 1fr); align-items: center; gap: 24px; padding: 22px 30px; }
.fwp-odd > div + div { border-top: 1px solid var(--fwp-line); }
.fwp .fwp-odd dt { display: flex; align-items: center; gap: 12px; font: 650 17px/1.3 var(--fwp-display); color: #fff; }
.fwp .fwp-odd > .fwp-odd__tag { display: flex; justify-content: flex-end; padding: 14px 22px 0; }
.fwp .fwp-odd > .fwp-odd__tag + div { border-top: 0; }
.fwp-odd__tag span { padding: 5px 11px; border-radius: 999px; border: 1px solid var(--fwp-line2); font: 600 11.5px/1 var(--fwp-sans); letter-spacing: .12em; text-transform: uppercase; color: var(--fwp-dim); }
.fwp .fwp-odd dd { display: flex; flex-wrap: wrap; gap: 10px; margin: 0; }
.fwp-odd dd span { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; border: 1px solid rgba(116, 196, 246, .26); background: rgba(116, 196, 246, .06); font: 500 14px/1.2 var(--fwp-sans); color: rgba(236, 240, 250, .9); white-space: nowrap; }
.fwp-odd dd span::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--fwp-a1); box-shadow: 0 0 8px rgba(116, 196, 246, .9); }
.fwp[lang="zh-CN"] .fwp-steps4 span { line-height: 1.85; }
.fwp-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fwp-grid--2 .fwp-card__media { height: auto; aspect-ratio: 5 / 3; }

/* ---------- planning page: route scenes, step captions, constraint layers, objective and deployment cards ---------- */
.fwp .fwp-3d--route, .fwp .fwp-3d--constraint, .fwp .fwp-3d--goal { position: absolute; inset: 0; height: auto; max-width: none; margin: 0; }
.fwp-3d--route:not(.is-live) { background: url(img/route-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--route:not(.is-live) { background-image: url(img/route-zh.webp); }
.fwp-3d--constraint:not(.is-live) { background: url(img/constraint-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--constraint:not(.is-live) { background-image: url(img/constraint-zh.webp); }
.fwp-3d--goal:not(.is-live) { background: url(img/goal-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--goal:not(.is-live) { background-image: url(img/goal-zh.webp); }
/* the caption in the frame follows the scene (pages.js sets data-step); without it, the step on the poster */
.fwp-shot--route:not([data-step]) .fwp-chip--steps > [data-at="3"], .fwp-shot--route[data-step="0"] [data-at="0"], .fwp-shot--route[data-step="1"] [data-at="1"], .fwp-shot--route[data-step="2"] [data-at="2"], .fwp-shot--route[data-step="3"] [data-at="3"] { display: inline; }
.fwp-shot--constraint:not([data-step]) .fwp-chip--steps > [data-at="4"], .fwp-shot--constraint[data-step="0"] [data-at="0"], .fwp-shot--constraint[data-step="1"] [data-at="1"], .fwp-shot--constraint[data-step="2"] [data-at="2"], .fwp-shot--constraint[data-step="3"] [data-at="3"], .fwp-shot--constraint[data-step="4"] [data-at="4"] { display: inline; }
/* step captions sit top-left, beside the corner mark: the top-right of these scenes holds the storm cell and its label */
.fwp .fwp-shot--route .fwp-chip--live, .fwp .fwp-shot--constraint .fwp-chip--live { left: 46px; right: auto; top: 14px; }
/* the five constraint layers below the scene light up as each one is added */
.fwp .fwp-shot--constraint + .fwp-spec5 { margin-top: 32px; }
.fwp .fwp-spec5--steps li { position: relative; }
.fwp-spec5--steps li::before { content: ""; position: absolute; left: 0; right: 20px; top: -1px; height: 2px; background: var(--fwp-gradient); transform: scaleX(0); transform-origin: left; transition: transform .5s ease; }
.fwp-spec5--steps li + li::before { left: 20px; }
.fwp-spec5--steps li.is-on::before { transform: scaleX(1); }
.fwp-spec5--steps b, .fwp .fwp-spec5--steps span { transition: color .4s ease, opacity .4s ease; }
.fwp-spec5--steps.is-sync li:not(.is-on) b { color: rgba(236, 240, 250, .6); }
.fwp .fwp-spec5--steps.is-sync li:not(.is-on) span { opacity: .62; }
/* objectives: each card keyed to its route colour in the scene */
.fwp .fwp-shot--goal + .fwp-cmp { margin-top: 32px; }
.fwp-cmp--goals .fwp-cmp__card { position: relative; overflow: hidden; }
.fwp-cmp--goals .fwp-cmp__card::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: var(--c); box-shadow: 0 0 18px var(--c); opacity: .85; }
.fwp-cmp__card--time { --c: #ffb547; }
.fwp-cmp__card--dist { --c: #74c4f6; }
.fwp-cmp__card--risk { --c: #43e08a; }
.fwp .fwp-cmp--goals .fwp-cmp__tag { display: inline-flex; align-items: center; gap: 10px; color: var(--c); }
.fwp-cmp--goals .fwp-cmp__tag i { width: 22px; height: 3px; border-radius: 2px; background: var(--c); box-shadow: 0 0 10px var(--c); }
/* deployment: two cards, each ending in a link */
.fwp .fwp-cmp--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fwp-cmp--2 .fwp-cmp__card { display: flex; flex-direction: column; }
.fwp .fwp-cmp--2 .fwp-more { padding-top: 28px; }
@media (max-width: 1199px) {
  .fwp-cmp--2 .fwp-cmp__card--hi { grid-column: auto; }
  .fwp-cmp--goals > :last-child { grid-column: 1 / -1; }
  .fwp-spec5--steps li:nth-child(4)::before { left: 0; }
}
@media (max-width: 899px) {
  .fwp .fwp-cmp--2 { grid-template-columns: minmax(0, 1fr); }
  .fwp-cmp--goals > :last-child { grid-column: auto; }
}
@media (max-width: 767px) {
  .fwp-shot--route { aspect-ratio: 4 / 3; }
  .fwp .fwp-shot--route .fwp-chip--live, .fwp .fwp-shot--constraint .fwp-chip--live { left: 40px; top: 8px; }
  .fwp-spec5--steps li::before, .fwp-spec5--steps li + li::before { left: 0; right: 12px; }
}

/* ---------- 4D airspace page: the template follows its own full-bleed hero (airspace/hero-*.php) ---------- */
.fwp .fwp-sec--facts { padding: 0 0 40px; border-top: 0; }
.fwp .fwp-sec--facts .fwp-facts { margin-top: 0; }
.fwp .fwp-3d--fourd, .fwp .fwp-3d--agent, .fwp .fwp-3d--vertiport, .fwp .fwp-3d--data { position: absolute; inset: 0; height: auto; max-width: none; margin: 0; }
.fwp-3d--fourd:not(.is-live) { background: url(img/fourd-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--fourd:not(.is-live) { background-image: url(img/fourd-zh.webp); }
.fwp-3d--agent:not(.is-live) { background: url(img/agent-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--agent:not(.is-live) { background-image: url(img/agent-zh.webp); }
.fwp-3d--vertiport:not(.is-live) { background: url(img/vertiport-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--vertiport:not(.is-live) { background-image: url(img/vertiport-zh.webp); }
.fwp .fwp-shot--fourd .fwp-chip--live, .fwp .fwp-shot--agent .fwp-chip--live, .fwp .fwp-shot--vertiport .fwp-chip--live, .fwp .fwp-shot--data .fwp-chip--live { left: 46px; right: auto; top: 14px; }
.fwp-shot--fourd:not([data-step]) .fwp-chip--steps > [data-at="3"], .fwp-shot--fourd[data-step="0"] [data-at="0"], .fwp-shot--fourd[data-step="1"] [data-at="1"], .fwp-shot--fourd[data-step="2"] [data-at="2"], .fwp-shot--fourd[data-step="3"] [data-at="3"] { display: inline; }
.fwp-shot--agent:not([data-step]) .fwp-chip--steps > [data-at="2"], .fwp-shot--agent[data-step="0"] [data-at="0"], .fwp-shot--agent[data-step="1"] [data-at="1"], .fwp-shot--agent[data-step="2"] [data-at="2"] { display: inline; }
.fwp-shot--vertiport:not([data-step]) .fwp-chip--steps > [data-at="3"], .fwp-shot--vertiport[data-step="0"] [data-at="0"], .fwp-shot--vertiport[data-step="1"] [data-at="1"], .fwp-shot--vertiport[data-step="2"] [data-at="2"], .fwp-shot--vertiport[data-step="3"] [data-at="3"] { display: inline; }
.fwp .fwp-shot--fourd + .fwp-steps4, .fwp .fwp-shot--vertiport + .fwp-steps4, .fwp .fwp-shot--agent + .fwp-grid, .fwp .fwp-shot--data + .fwp-feat4 { margin-top: 32px; }
.fwp .fwp-steps4 + .fwp-feat4 { margin-top: 36px; }
.fwp-legend--fly i { background: linear-gradient(90deg, #ff4d4d, #ffc247 50%, #3fe08a); }
/* the crossing cell's occupancy over the flight: A, B as first planned (overlapping, red), B after the delay */
.fwp-tl { position: absolute; right: 16px; bottom: 16px; z-index: 2; width: min(300px, 38%); padding: 10px 12px 12px; border-radius: 10px; border: 1px solid var(--fwp-line); background: rgba(5, 6, 10, .72); backdrop-filter: blur(10px); pointer-events: none; }
.fwp-tl__t { display: block; margin-bottom: 9px; font: 500 11.5px/1 var(--fwp-sans); letter-spacing: .03em; color: var(--fwp-muted); }
.fwp-tl__row { display: grid; grid-template-columns: 14px minmax(0, 1fr); align-items: center; gap: 8px; }
.fwp-tl__row + .fwp-tl__row { margin-top: 8px; }
.fwp-tl__row b { font: 650 11px/1 "SF Mono", Menlo, Consolas, monospace; color: #fff; }
.fwp-tl__track { position: relative; height: 8px; border-radius: 4px; background: rgba(255, 255, 255, .07); }
.fwp-tl__track::after { content: ""; position: absolute; top: -3px; bottom: -3px; left: calc(var(--u, 0) * 100%); width: 1.5px; background: #fff; box-shadow: 0 0 6px #fff; }
.fwp-tl__bar { position: absolute; top: 0; bottom: 0; border-radius: 4px; }
.fwp-tl__bar--a { left: 32.5%; width: 10.9%; background: #74c4f6; box-shadow: 0 0 10px rgba(116, 196, 246, .6); }
.fwp-tl__bar--b { left: 30.4%; width: 15.2%; background: #ffb547; box-shadow: 0 0 10px rgba(255, 181, 71, .6); transition: left .9s cubic-bezier(.3, .7, .2, 1); }
.fwp-shot--fourd:not([data-step]) .fwp-tl__bar--b, .fwp-shot--fourd[data-step="2"] .fwp-tl__bar--b, .fwp-shot--fourd[data-step="3"] .fwp-tl__bar--b { left: 54.4%; }
.fwp-tl__x { position: absolute; top: -2px; bottom: -2px; left: 32.5%; width: 10.9%; border-radius: 4px; background: rgba(255, 90, 95, .9); box-shadow: 0 0 12px rgba(255, 90, 95, .9); opacity: 0; transition: opacity .4s ease; }
.fwp-shot--fourd[data-step="1"] .fwp-tl__x { opacity: 1; }
@media (max-width: 767px) {
  .fwp .fwp-shot--fourd .fwp-chip--live, .fwp .fwp-shot--agent .fwp-chip--live, .fwp .fwp-shot--vertiport .fwp-chip--live, .fwp .fwp-shot--data .fwp-chip--live { left: 40px; top: 8px; }
  .fwp-tl { display: none; }
  .fwp .fwp-sec--facts { padding-bottom: 24px; }
}

/* 4D airspace page, continued: product renders, the capability index, image rows, the big-data scene */
.fwp [id] { scroll-margin-top: 104px; }
.fwp-shot--wide { aspect-ratio: 2400 / 914; }
.fwp-shot--pano { aspect-ratio: 2400 / 610; }
.fwp .fwp-shot--wide + .fwp-grid, .fwp .fwp-shot--pano + .fwp-grid { margin-top: 24px; }
.fwp .fwp-prose--sm { margin-top: 22px; }
.fwp .fwp-prose--sm p { font-size: 16.5px; }
.fwp .fwp-nums--links li { display: block; padding: 0; }
.fwp-nums--links a { display: grid; grid-template-columns: 64px minmax(0, 1fr) 22px; align-items: center; padding: 22px 0; }
.fwp-nums--links b { align-self: start; }
.fwp .fwp-nums--links p { margin-top: 4px; }
.fwp-go { color: var(--fwp-dim); transition: color .2s ease, transform .2s ease; }
.fwp-go svg { width: 16px; height: 16px; display: block; }
.fwp-nums--links a:hover h3 { color: var(--fwp-a3); }
.fwp-nums--links a:hover .fwp-go { color: var(--fwp-a1); transform: translateX(3px); }
.fwp .fwp-grid--ai .fwp-card__media { height: auto; aspect-ratio: 4 / 3; }
.fwp-grid--ai .fwp-card__body { display: flex; flex-direction: column; flex: 1; }
.fwp .fwp-grid--ai .fwp-card p { font-size: 14.5px; }
.fwp .fwp-grid--ai .fwp-more { padding-top: 18px; }
.fwp-grid--ai .fwp-card__media .fwp-chip { font-size: 11.5px; }
.fwp .fwp-grid--ops .fwp-card p, .fwp .fwp-grid--eco .fwp-card p { font-size: 15px; }
.fwp .fwp-zig { display: grid; gap: 96px; }
.fwp-zig__row { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 64px; align-items: center; }
.fwp-zig__row:nth-child(even) .fwp-zig__media { order: 2; }
.fwp-zig__media { position: relative; }
.fwp-zig__media:has(.fwp-pip) { padding-bottom: 64px; }
.fwp-pip { position: absolute; right: -28px; bottom: 0; width: 42%; overflow: hidden; border-radius: 12px; border: 1px solid var(--fwp-line2); background: #070a12; box-shadow: 0 30px 80px rgba(0, 0, 0, .65); }
.fwp-zig__row:nth-child(even) .fwp-pip { right: auto; left: -28px; }
.fwp .fwp-pip img { width: 100%; height: auto; }
.fwp .fwp-zig__txt h3 { margin-top: 18px; font: 700 30px/1.25 var(--fwp-display); letter-spacing: -.015em; color: #fff; }
.fwp .fwp-zig__txt > p { margin-top: 14px; font: 400 16.5px/1.8 var(--fwp-sans); color: var(--fwp-muted); }
.fwp .fwp-ticks { margin-top: 20px; border-top: 1px solid var(--fwp-line); }
.fwp .fwp-ticks li { display: flex; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--fwp-line); font: 400 15px/1.65 var(--fwp-sans); color: rgba(236, 240, 250, .86); }
.fwp-ticks li::before { content: ""; flex: none; width: 7px; height: 7px; margin-top: .62em; border: 1.5px solid var(--fwp-a1); transform: rotate(45deg); }
.fwp-3d--data:not(.is-live) { background: url(img/data-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--data:not(.is-live) { background-image: url(img/data-zh.webp); }
.fwp-shot--data:not([data-step]) .fwp-chip--steps > [data-at="2"], .fwp-shot--data[data-step="0"] [data-at="0"], .fwp-shot--data[data-step="1"] [data-at="1"], .fwp-shot--data[data-step="2"] [data-at="2"] { display: inline; }
.fwp-shot--data .fwp-legend { top: 14px; bottom: auto; }
.fwp-shot--data:has(.is-live) .fwp-tally { opacity: 1; }
.fwp-legend--heat i { background: linear-gradient(90deg, #1f4fd1, #36aaf9, #7fe3ff, #ffd25a, #ff6a3c); }
.fwp-stat { padding: 36px 36px 34px; border-radius: 18px; border: 1px solid rgba(116, 196, 246, .3); background: radial-gradient(520px 280px at 30% 0%, rgba(85, 150, 248, .18), transparent 70%), #07101d; box-shadow: 0 40px 100px rgba(16, 48, 96, .28); }
.fwp-stat > b { display: block; font: 700 92px/1 var(--fwp-display); letter-spacing: -.04em; background: var(--fwp-gradient); -webkit-background-clip: text; background-clip: text; color: transparent; padding-bottom: .06em; }
.fwp-stat > span { display: block; margin-top: 8px; font: 600 16px/1.4 var(--fwp-sans); color: #fff; }
.fwp .fwp-stat--inline { display: flex; align-items: center; gap: 18px; margin-top: 34px; padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none; }
.fwp .fwp-stat--inline > b { font-size: 64px; padding-bottom: 0; }
.fwp .fwp-stat--inline > span { margin-top: 0; max-width: 10em; font-size: 15px; color: rgba(236, 240, 250, .82); }
.fwp .fwp-stat--inline + .fwp-more { margin-top: 26px; padding-top: 0; }
.fwp-split:has(.fwp-shot--aiplat) { align-items: center; }
.fwp-shot--aiplat { aspect-ratio: 4 / 3; }
.fwp .fwp-pills { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }
.fwp .fwp-pills li { padding: 8px 14px; border-radius: 999px; border: 1px solid rgba(116, 196, 246, .26); background: rgba(116, 196, 246, .06); font: 500 14px/1.2 var(--fwp-sans); color: rgba(236, 240, 250, .9); }
.fwp .fwp-split .fwp-lead + .fwp-more { margin-top: 24px; padding-top: 0; }
.fwp .fwp-cmp__p { font: 400 15px/1.75 var(--fwp-sans); color: var(--fwp-muted); }
.fwp .fwp-cmp__card .fwp-pills { margin-top: 18px; border-top: 0; }
.fwp .fwp-cmp__card .fwp-pills li { display: block; padding: 8px 14px; border: 1px solid rgba(116, 196, 246, .26); font: 500 14px/1.2 var(--fwp-sans); }
.fwp-cmp__card .fwp-pills li::before { content: none; }
.fwp .fwp-cmp--2 + .fwp-grid { margin-top: 20px; }
.fwp .fwp-cta__list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: 940px; margin-top: 30px; border-top: 1px solid var(--fwp-line2); }
.fwp .fwp-cta__list li { padding: 18px 22px 4px 0; }
.fwp .fwp-cta__list li + li { padding-left: 22px; border-left: 1px solid var(--fwp-line); }
.fwp-cta__list b { display: block; font: 650 16px/1.4 var(--fwp-display); color: #fff; }
.fwp-cta__list span { display: block; margin-top: 6px; font: 400 14px/1.6 var(--fwp-sans); color: var(--fwp-muted); }
.fwp .fwp-cta__list + .fwp-lead { margin-top: 26px; }
@media (max-width: 1199px) {
  .fwp .fwp-zig { gap: 72px; }
  .fwp-zig__row { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  .fwp-zig__row:nth-child(even) .fwp-zig__media { order: 0; }
  .fwp-zig__txt { max-width: 720px; }
  .fwp-pip, .fwp-zig__row:nth-child(even) .fwp-pip { right: 16px; left: auto; width: 40%; }
}
@media (max-width: 767px) {
  .fwp .fwp-zig { gap: 56px; }
  .fwp-zig__media:has(.fwp-pip) { padding-bottom: 0; }
  .fwp-pip, .fwp-zig__row:nth-child(even) .fwp-pip { position: relative; right: auto; left: auto; bottom: auto; width: 62%; margin: -36px 10px 0 auto; }
  .fwp .fwp-zig__txt h3 { font-size: 24px; }
  .fwp-nums--links a { grid-template-columns: 44px minmax(0, 1fr) 18px; padding: 18px 0; }
  .fwp-shot--pano { aspect-ratio: 2.4 / 1; }
  .fwp-shot--wide { aspect-ratio: 2 / 1; }
  .fwp-stat { padding: 28px 22px 26px; }
  .fwp-stat > b { font-size: 64px; }
  .fwp .fwp-cta__list { grid-template-columns: minmax(0, 1fr); }
  .fwp .fwp-cta__list li, .fwp .fwp-cta__list li + li { padding: 14px 0 4px; border-left: 0; }
  .fwp .fwp-cta__list li + li { border-top: 1px solid var(--fwp-line); }
  .fwp-shot--data .fwp-legend { display: none; }
}

/* 4D airspace page: the digital Earth beside the seven capabilities (lit in step with the scene) */
.fwp .fwp-os { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 56px; align-items: center; }
.fwp-shot--intercity { aspect-ratio: 6 / 5; background: radial-gradient(70% 70% at 50% 50%, #0b1730 0%, #070b16 60%, #05070d 100%); }
.fwp .fwp-3d--intercity { position: absolute; inset: 0; height: auto; max-width: none; margin: 0; }
.fwp-3d--intercity:not(.is-live) { background: url(img/intercity-en.webp) center / cover no-repeat; }
.fwp[lang="zh-CN"] .fwp-3d--intercity:not(.is-live) { background-image: url(img/intercity-zh.webp); }
.fwp .fwp-shot--intercity .fwp-chip--live { left: 46px; right: auto; top: 14px; }
.fwp-shot--intercity:not([data-step]) .fwp-chip--steps > [data-at="6"], .fwp-shot--intercity[data-step="0"] [data-at="0"], .fwp-shot--intercity[data-step="1"] [data-at="1"], .fwp-shot--intercity[data-step="2"] [data-at="2"], .fwp-shot--intercity[data-step="3"] [data-at="3"], .fwp-shot--intercity[data-step="4"] [data-at="4"], .fwp-shot--intercity[data-step="5"] [data-at="5"], .fwp-shot--intercity[data-step="6"] [data-at="6"] { display: inline; }
.fwp .fwp-os .fwp-nums--links li { position: relative; transition: opacity .4s ease; }
.fwp-os .fwp-nums--links li::before { content: ""; position: absolute; left: -18px; top: 20px; bottom: 20px; width: 2px; border-radius: 2px; background: var(--fwp-gradient); transform: scaleY(0); transition: transform .45s ease; }
.fwp-os .fwp-nums--links li.is-on::before { transform: scaleY(1); }
.fwp .fwp-os .fwp-nums--links.is-sync li:not(.is-on) { opacity: .5; }
.fwp .fwp-os .fwp-nums--links li.is-on h3 { color: #fff; }
.fwp .fwp-os .fwp-nums--links a { padding: 18px 0; }
@media (max-width: 1199px) {
  .fwp .fwp-os { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  .fwp-os .fwp-nums--links li::before { left: -12px; }
}
@media (max-width: 767px) {
  .fwp-shot--intercity { aspect-ratio: 1 / 1; }
  .fwp .fwp-shot--intercity .fwp-chip--live { left: 40px; top: 8px; }
  .fwp-os .fwp-nums--links li::before { display: none; }
}

/* ---------- small heading above a card group ---------- */
.fwp .fwp-group { margin: 56px 0 22px; font: 600 13px/1 var(--fwp-sans); letter-spacing: .14em; text-transform: uppercase; color: var(--fwp-dim); }
.fwp .fwp-head + .fwp-group { margin-top: 56px; }
.fwp[lang="zh-CN"] .fwp-group { letter-spacing: .1em; }

/* ---------- narrow desktop 1200–1359 ---------- */
@media (max-width: 1359px) {
  .fwp-hero__grid { gap: 56px; }
  .fwp .fwp-h1, .fwp[lang="en"] .fwp-h1 { font-size: 48px; }
  .fwp[lang="zh-CN"] .fwp-h1 { font-size: 50px; }
  .fwp[lang="en"] .fwp-h1--long { font-size: 42px; }
  .fwp-row { gap: 56px; }
  .fwp-split { gap: 64px; }
  .fwp-card { padding: 26px 24px 28px; }
  .fwp-card__body { padding: 22px 24px 26px; }
}

/* ---------- tablet 768–1199 ---------- */
@media (max-width: 1199px) {
  .fwp-wrap, .fwp-cta { width: calc(100% - 64px); }
  .fwp-hero { padding-top: 150px; }
  .fwp-hero__grid { grid-template-columns: minmax(0, 1fr); gap: 56px; }
  .fwp-hero__txt { max-width: 720px; }
  .fwp .fwp-facts { margin-top: 80px; }
  .fwp-facts li { padding: 22px 18px 30px; }
  .fwp .fwp-h2 { font-size: 38px; }
  .fwp-sec { padding: 100px 0; }
  .fwp-split { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  .fwp-sticky { position: static; }
  .fwp-3d { height: 380px; max-width: 640px; }
  .fwp-cmp { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .fwp-cmp__card--hi { grid-column: 1 / -1; }
  .fwp-row { grid-template-columns: minmax(0, 1fr); gap: 44px; }
  .fwp-txt { max-width: 720px; }
  .fwp-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp .fwp-specs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp .fwp-steps4 { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 8px; }
  .fwp .fwp-steps4 li:nth-child(3) { padding-left: 0; border-left: 0; }
  .fwp-steps4 li:nth-child(3)::before { left: 0; }
  .fwp-odd > div { grid-template-columns: 170px minmax(0, 1fr); padding: 20px 24px; }
  .fwp .fwp-spec5 { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 8px; }
  .fwp .fwp-spec5 li:nth-child(4) { padding-left: 0; border-left: 0; }
  .fwp .fwp-feat4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp-bignum b { font-size: 38px; }
  .fwp-specs > div:nth-child(3) { padding-left: 0; border-left: 0; }
  .fwp-specs > div:nth-child(n+3) { border-top: 1px solid var(--fwp-line); }
  .fwp .fwp-steps { margin-top: 72px; }
  .fwp-steps span { font-size: 15px; }
  .fwp-grid--32 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp-grid--32 > *, .fwp-grid--32 > :nth-child(n+4) { grid-column: auto; }
  .fwp-grid--32 > :last-child:nth-child(odd) { grid-column: 1 / -1; }
  .fwp-head--row { flex-direction: column; align-items: start; gap: 18px; }
  .fwp-cta { padding: 72px 48px; }
  .fwp .fwp-cta h2 { font-size: 42px; }
}

/* ---------- portrait tablet 768–899 ---------- */
@media (max-width: 899px) {
  .fwp .fwp-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp-facts li:nth-child(3) { padding-left: 0; border-left: 0; }
  .fwp-facts li:nth-child(n+3) { border-top: 1px solid var(--fwp-line); }
  .fwp-cmp { grid-template-columns: minmax(0, 1fr); }
  .fwp-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp .fwp-bignum { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp .fwp-bignum li:nth-child(3) { padding-left: 0; border-left: 0; }
  .fwp .fwp-bignum li:nth-child(n+3) { border-top: 1px solid var(--fwp-line); }
  .fwp .fwp-flow { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .fwp-flow li:not(:last-child)::after { right: auto; left: 30px; top: auto; bottom: -17px; transform: rotate(135deg); }
}

/* ---------- phone ≤767 ---------- */
@media (max-width: 767px) {
  .fwp-wrap, .fwp-cta { width: calc(100% - 40px); }
  .fwp-hero { padding-top: 128px; }
  .fwp-hero__grid { gap: 40px; }
  .fwp .fwp-h1, .fwp[lang="en"] .fwp-h1, .fwp[lang="zh-CN"] .fwp-h1 { margin: 18px 0; font-size: 36px; line-height: 1.14; }
  .fwp[lang="zh-CN"] .fwp-h1 { font-size: 36px; line-height: 1.25; }
  .fwp[lang="en"] .fwp-h1--long { font-size: 34px; }
  .fwp .fwp-sub { font-size: 16.5px; }
  .fwp-ctas { flex-direction: column; gap: 10px; margin-top: 28px; }
  .fwp-ctas .fwp-btn { justify-content: center; }
  .fwp-shot { border-radius: 14px; }
  .fwp .fwp-facts { margin-top: 56px; }
  .fwp-facts li, .fwp-facts li:nth-child(3) { padding: 20px 14px 22px 0; }
  .fwp-facts li:nth-child(2n) { padding-left: 14px; border-left: 1px solid var(--fwp-line); }
  .fwp-facts li:nth-child(2n+1) { border-left: 0; }
  .fwp-facts strong { font-size: 15px; }
  .fwp-facts span { font-size: 13px; }
  .fwp-sec { padding: 80px 0; }
  .fwp .fwp-h2, .fwp-txt .fwp-h2 { font-size: 30px; }
  .fwp .fwp-lead, .fwp .fwp-prose p { font-size: 16px; }
  .fwp .fwp-head + * { margin-top: 40px; }
  .fwp-cmp__card { padding: 26px 22px 24px; }
  .fwp .fwp-shot--track { margin-top: 48px; }
  .fwp-cap { left: 10px; bottom: 10px; padding: 7px 10px; font-size: 11px; }
  .fwp-play { right: 10px; bottom: 10px; width: 32px; height: 32px; }
  .fwp-grid--3, .fwp-grid--4, .fwp-grid--32 { grid-template-columns: minmax(0, 1fr); }
  .fwp .fwp-steps { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: 48px; border-top: 0; row-gap: 4px; }
  .fwp .fwp-steps li { padding: 16px 10px 14px 0; border-top: 1px solid var(--fwp-line); }
  .fwp .fwp-specs { grid-template-columns: minmax(0, 1fr); margin-top: 40px; }
  .fwp-chip { left: 8px; top: 8px; padding: 6px 9px; font-size: 11.5px; }
  .fwp .fwp-gal { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .fwp-gal__item--pano { aspect-ratio: 2 / 1; }
  .fwp-grid--2 { grid-template-columns: minmax(0, 1fr); }
  .fwp .fwp-steps4 { grid-template-columns: minmax(0, 1fr); }
  .fwp .fwp-steps4 li, .fwp .fwp-steps4 li + li, .fwp .fwp-steps4 li:nth-child(3) { padding: 22px 0 16px; border-left: 0; }
  .fwp-steps4 li::before, .fwp-steps4 li + li::before, .fwp-steps4 li:nth-child(3)::before { left: 0; right: 0; }
  .fwp-steps4 strong { font-size: 18px; }
  .fwp .fwp-odd { margin-top: 40px; }
  .fwp-odd > div { grid-template-columns: minmax(0, 1fr); gap: 12px; padding: 18px 18px; }
  .fwp-odd dd span { padding: 7px 12px; font-size: 13px; }
  .fwp .fwp-spec5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .fwp .fwp-spec5 li, .fwp .fwp-spec5 li + li, .fwp .fwp-spec5 li:nth-child(4) { padding: 14px 12px 6px 0; border-left: 0; }
  .fwp .fwp-feat4 { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .fwp-shot--traffic { aspect-ratio: 4 / 3; }
  .fwp-shot .fwp-chip--live { left: auto; right: 8px; top: 8px; }
  .fwp-tally, .fwp-legend { right: 8px; bottom: 8px; padding: 6px 9px; font-size: 11px; }
  .fwp-tally b { font-size: 12.5px; }
  .fwp-legend i { width: 56px; }
  .fwp-shot .fwp-legend { top: 8px; bottom: auto; }
  .fwp-prompt { left: 42px; top: 9px; max-width: calc(100% - 50px); gap: 7px; padding: 4px 9px 4px 4px; border-radius: 8px; font-size: 11.5px; }
  .fwp-prompt i { padding: 4px 5px; font-size: 9.5px; }
  .fwp-shot--flow[data-step="0"] .fwp-chip--steps { display: none; }
  .fwp-shot--flow .fwp-tally { left: 42px; right: auto; top: 9px; bottom: auto; }
  .fwp-fig :is(.fig-tick, .fig-leg, .fig-time, .fig-ai-l, .fig-zone) { display: none; }
  .fwp-fig .fig-ai-m { display: inline; }
  .fwp-shot--fig .fwp-cap { top: auto; bottom: 44%; }
  .fwp-fig .fig-pin text { font-size: 40px; }
  .fwp-fig .fig-h { font-size: 34px; }
  .fwp-fig .fig-zone { font-size: 30px; }
  .fwp-bignum b { font-size: 32px; }
  .fwp .fwp-bignum li, .fwp .fwp-bignum li + li { padding: 20px 14px 4px 0; border-left: 0; }
  .fwp-shot--sensors .fwp-cap { display: none; }
  .fwp .fwp-wx { gap: 6px; }
  .fwp .fwp-wx li { border-radius: 8px; }
  .fwp-wx .fwp-chip { left: 5px; top: 5px; gap: 4px; padding: 4px 7px; font-size: 10px; letter-spacing: .02em; }
  .fwp-wx .fwp-chip::before { width: 4px; height: 4px; }
  .fwp-wx__t { display: none; }
  .fwp-specs > div, .fwp-specs > div:nth-child(3) { padding: 20px 0 22px; border-left: 0; }
  .fwp-specs > div + div { border-top: 1px solid var(--fwp-line); }
  .fwp .fwp-flow li { padding: 20px 22px; }
  .fwp-grid--32 > :last-child:nth-child(odd) { grid-column: auto; }
  .fwp-card { padding: 24px 22px 26px; }
  .fwp-card__media { height: 200px; }
  .fwp-card__body { padding: 20px 22px 24px; }
  .fwp-3d { height: 300px; margin-top: 28px; }
  .fwp .fwp-nums li { grid-template-columns: 44px minmax(0, 1fr); padding: 22px 0; }
  .fwp .fwp-nums h3 { font-size: 18px; }
  .fwp-cta { margin-bottom: 80px; padding: 48px 24px; border-radius: 20px; }
  .fwp .fwp-cta h2 { font-size: 30px; }
  .fwp-cta .fwp-ctas { flex-direction: column; }
}

@media (prefers-reduced-motion: reduce) {
  .fwp .fwh-art .pulse { animation: none; }
  .fwp .fwh-art .m { transition: none; stroke-dashoffset: 0; }
  .fwp.is-ready [data-rv] { opacity: 1; transform: none; transition: none; }
  .fwp-steps li::before { transition: none; }
  .fwp-cycle__item { animation: none; }
  .fwp-cycle__item:first-child { opacity: 1; }
  .fwp-chip--live::before { animation: none; }
}
