/* Homepage v2. Shell, tokens and buttons come from styles.css and ui.css. */
.v2 { --v2-gap: clamp(112px, 13vw, 184px); --v2-head: clamp(44px, 5.2vw, 72px); --v2-grid: clamp(16px, 1.9vw, 24px); --v2-pad: clamp(24px, 2.7vw, 36px); overflow-x: clip; }
.v2-wrap { width: min(var(--page-max), calc(100% - var(--gutter) * 2)); margin-inline: auto; }
.v2 h1, .v2 h2, .v2 h3 { margin: 0; color: var(--ink); text-wrap: balance; }
.v2 p { margin: 0; }
/* Line breaks. Short copy does not strand a word or two on its last line. On a desktop, Chinese copy breaks only at
   punctuation, so a line ends where a clause does: app.js ties the space beside a Latin word or a number to its
   neighbours. Long legal text keeps ordinary wrapping. */
.v2 :is(p, li, summary, dd) { text-wrap: pretty; }
@media (min-width: 1001px) {
  :lang(zh) .v2 :is(p, li, dd):not(.legal-section *, .legal-summary *, .legal-operator *) { word-break: keep-all; overflow-wrap: anywhere; }
}
.v2 svg { fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* Section rhythm: eyebrow → title → lead → content. */
.v2-section { padding-top: var(--v2-gap); }
/* A title may run the width of its column, so it stays on one line where it can; the lead keeps a reading measure. */
.v2-head { display: grid; gap: 18px; margin-bottom: var(--v2-head); }
.v2-head > .v2-lead { max-width: 760px; }
.v2-head.center { margin-inline: auto; text-align: center; justify-items: center; }
.v2-eyebrow { color: var(--accent-text); font-size: 13px; font-weight: 600; letter-spacing: .02em; }
.v2-head h2 { font-size: clamp(32px, 4.2vw, 52px); line-height: 1.15; letter-spacing: -.035em; font-weight: 650; }
.v2-lead { text-wrap: pretty; color: var(--text-soft); font-size: clamp(16px, 1.5vw, 18px); line-height: 1.75; }
.v2-link { display: inline-flex; align-items: center; gap: 6px; color: var(--ink); font-size: 15px; font-weight: 600; text-decoration: none; }
.v2-link svg { width: 16px; height: 16px; transition: transform var(--duration-base) var(--ease); }
.v2-link:hover svg { transform: translateX(3px); }
.v2-chip { display: inline-flex; align-items: center; height: 26px; padding: 0 10px; border: 1px solid var(--hairline-strong); border-radius: 999px; color: var(--text-soft); font-size: 12px; font-weight: 550; white-space: nowrap; }
.v2-chip.warm { border-color: color-mix(in srgb, var(--accent) 40%, transparent); background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent-text); }

/* ① Hero */
.v2-hero { position: relative; padding-top: clamp(72px, 10vw, 128px); isolation: isolate; }
.v2-hero-glow { position: absolute; inset: -160px 0 auto; height: 760px; z-index: -1; background: radial-gradient(50% 55% at 50% 0%, var(--glow-strong), transparent 70%), radial-gradient(30% 35% at 78% 18%, var(--glow), transparent 70%); pointer-events: none; }
.v2-hero-grid { position: absolute; inset: 0 0 auto; height: 720px; z-index: -1; background-image: linear-gradient(var(--hairline) 1px, transparent 1px), linear-gradient(90deg, var(--hairline) 1px, transparent 1px); background-size: 56px 56px; mask-image: radial-gradient(60% 70% at 50% 0%, #000 30%, transparent 75%); pointer-events: none; }
.v2-hero-copy { display: grid; justify-items: center; gap: 24px; text-align: center; }
.v2-pill { display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 14px; border: 1px solid var(--hairline-strong); border-radius: 999px; background: color-mix(in srgb, var(--surface-1) 70%, transparent); backdrop-filter: blur(8px); color: var(--text-soft); font-size: 13px; font-weight: 550; }
.v2-pill i { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 4px var(--glow); }
.v2-hero h1 { font-size: clamp(44px, 8vw, 92px); line-height: 1.04; letter-spacing: -.05em; font-weight: 700; background: linear-gradient(180deg, var(--ink) 30%, color-mix(in srgb, var(--ink) 62%, transparent)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.v2-hero .v2-lead { max-width: 640px; }
.v2-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 8px; }
.v2-facts { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 24px; margin: 4px 0 0; padding: 0; list-style: none; color: var(--muted); font-size: 13px; }
.v2-facts li { display: inline-flex; align-items: center; gap: 8px; }
.v2-facts svg { width: 14px; height: 14px; color: var(--accent); }

/* The homepage hero: one headline on one line, then the stages a business goes through. */
.v2-home-hero h1 { font-size: clamp(34px, 5.6vw, 76px); line-height: 1.12; }
:lang(en) .v2-home-hero h1 { font-size: clamp(30px, 4.5vw, 62px); }
/* Wide enough for one clause-ended line each, in Chinese: the measure follows the font size. */
.v2-home-hero .v2-lead { max-width: 33em; }
/* Chinese here breaks at punctuation and spaces, so a line ends where a clause does. */
:lang(zh) :is(.v2-home-hero .v2-lead, .v2-path-step > span:last-child) { word-break: keep-all; overflow-wrap: anywhere; }

/* The stages: four steps that rise from left to right. The first two are digitalization, the last two AI, and a line
   under each pair names the phase. Each step links to the service that takes a business there. */
.v2-path { display: grid; gap: 28px var(--v2-grid); margin: clamp(56px, 7vw, 88px) 0 0; }
.v2-path-phase { display: grid; align-content: start; gap: 12px; }
.v2-path-step { --n: 0; position: relative; display: grid; align-content: start; gap: 6px; padding: 20px; border: 1px solid var(--hairline-strong); border-radius: 16px; background: linear-gradient(180deg, var(--surface-2), var(--surface-1)); color: inherit; text-align: left; text-decoration: none; isolation: isolate; transition: border-color var(--duration-base) var(--ease), translate var(--duration-slow) var(--ease); }
.v2-path-step + .v2-path-step { --n: 1; }
.v2-path-phase + .v2-path-phase .v2-path-step { --n: 2; border-color: color-mix(in srgb, var(--accent) 40%, transparent); background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 10%, var(--surface-1)), var(--surface-1)); }
.v2-path-phase + .v2-path-phase .v2-path-step + .v2-path-step { --n: 3; box-shadow: 0 0 44px -12px var(--glow-strong); }
.v2-path-step:hover { translate: 0 -2px; border-color: var(--quiet); }
.v2-path-phase + .v2-path-phase .v2-path-step:hover { border-color: color-mix(in srgb, var(--accent) 70%, transparent); }
.v2-path-step::after { border-radius: inherit; }
.v2-path-no { margin-bottom: 4px; color: var(--muted); font-size: 26px; font-weight: 650; line-height: 1.15; letter-spacing: -.04em; font-variant-numeric: tabular-nums; }
.v2-path-phase + .v2-path-phase .v2-path-no { background: linear-gradient(180deg, var(--accent), color-mix(in srgb, var(--accent) 35%, transparent)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.v2-path-step b { color: var(--ink); font-size: 17px; font-weight: 650; letter-spacing: -.01em; }
.v2-path-step > span:last-child { color: var(--text-soft); font-size: 13.5px; line-height: 1.6; text-wrap: pretty; }
.v2 .v2-path-label { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 10px; padding-left: 12px; border-left: 2px solid var(--hairline-strong); text-align: left; }
.v2 .v2-path-phase + .v2-path-phase .v2-path-label { border-color: var(--accent); }
.v2-path-label b { color: var(--ink); font-size: 18px; font-weight: 650; letter-spacing: -.02em; }
.v2-path-label span { color: var(--muted); font-size: 13px; line-height: 1.5; }
/* The steps arrive in order, one after another. */
html.js .v2 .v2-path-step[data-rise].is-in { animation-delay: calc(var(--n) * 130ms + 240ms); }
html.js .v2 .v2-path-label[data-rise].is-in { animation-delay: 760ms; }
/* Two phases side by side on a tablet; on a desktop the four steps share one row and their tops rise. */
@media (min-width: 561px) {
  .v2-path { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 901px) {
  .v2-path { grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: end; row-gap: 16px; }
  .v2-path-phase { display: contents; }
  .v2-path-step { grid-row: 1; min-height: calc(var(--path-base, 168px) + var(--n) * 30px); }
  :lang(en) .v2-path { --path-base: 186px; }
  .v2 .v2-path-label { grid-row: 2; grid-column: span 2; justify-content: center; padding: 14px 0 0; border-left: 0; border-top: 2px solid var(--hairline-strong); }
}
.v2-run-label { color: var(--muted); font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; }
.v2-avatar { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; background: var(--surface-3); color: var(--ink); font-size: 11px; font-weight: 600; font-style: normal; }

/* ② Principles */
.v2-principles { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--v2-grid); }
.v2-principle { display: grid; gap: 14px; align-content: start; padding: var(--v2-pad); border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); }
.v2-icon { display: grid; place-items: center; width: 40px; height: 40px; margin-bottom: 8px; border: 1px solid var(--hairline-strong); border-radius: 12px; background: linear-gradient(180deg, var(--surface-2), var(--surface-1)); color: var(--accent); }
.v2-icon svg { width: 20px; height: 20px; }
.v2-principle h3 { font-size: 20px; letter-spacing: -.02em; }
.v2-principle p { color: var(--text-soft); font-size: 15px; line-height: 1.7; text-wrap: pretty; }
.v2-principle .v2-ticks { gap: 10px; margin: 2px 0 0; padding-top: 16px; border-top: 1px solid var(--hairline); }
.v2-principle .v2-ticks li { font-size: 14px; }

/* ③ Solutions bento with a pointer spotlight. */
.v2-card { position: relative; display: grid; grid-column: span 3; grid-template-rows: auto 1fr; gap: 32px; min-height: 320px; padding: var(--v2-pad); border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); overflow: hidden; isolation: isolate; }
[data-spot]::after { content: ''; position: absolute; inset: 0; z-index: -1; opacity: 0; background: radial-gradient(420px circle at var(--x, 50%) var(--y, 0%), var(--glow), transparent 60%); transition: opacity .3s; pointer-events: none; }
[data-spot]:hover::after { opacity: 1; }
.v2 .v2-more { display: flex; flex-wrap: wrap; gap: 12px 32px; margin-top: 28px; }

/* ③ What we do: every service in its category, one row per category. */
.v2-map { overflow: hidden; border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); }
.v2-map-row { display: grid; grid-template-columns: minmax(0, 220px) minmax(0, 1fr); }
.v2-map-row + .v2-map-row { border-top: 1px solid var(--hairline); }
.v2-map-group { display: grid; align-content: start; gap: 6px; padding: 24px; border-right: 1px solid var(--hairline); background: var(--surface-2); }
.v2-map-group h3 { font-size: 16px; font-weight: 650; letter-spacing: -.01em; }
.v2-map-group p { color: var(--muted); font-size: 13px; line-height: 1.6; }
.v2-map-items { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); }
.v2-map-item { position: relative; display: grid; align-content: start; gap: 6px; padding: 24px; color: inherit; text-decoration: none; overflow: hidden; isolation: isolate; transition: background-color var(--duration-base) var(--ease); }
.v2-map-item + .v2-map-item { border-left: 1px solid var(--hairline); }
.v2-map-item:hover { background: var(--surface-2); }
.v2-map-item b { color: var(--ink); font-size: 17px; font-weight: 650; letter-spacing: -.01em; }
.v2-map-item > span:last-child { color: var(--text-soft); font-size: 14px; line-height: 1.7; text-wrap: pretty; }
@media (min-width: 1001px) {
  :lang(zh) .v2-map-item > span:last-child { word-break: keep-all; overflow-wrap: anywhere; }
}

/* ④ Process */
.v2-steps-row { position: relative; display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--v2-grid); margin: 0; padding: 0; list-style: none; }
.v2-step { display: grid; gap: 14px; align-content: start; padding: var(--v2-pad); border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); }
.v2-step-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.v2-step-no { font-size: 40px; font-weight: 600; line-height: 1; letter-spacing: -.04em; background: linear-gradient(180deg, var(--accent), color-mix(in srgb, var(--accent) 30%, transparent)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.v2-step h3 { font-size: 20px; letter-spacing: -.02em; }
.v2-step p { color: var(--text-soft); font-size: 15px; line-height: 1.7; }

/* ⑤ Governance */
.v2-split { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.25fr); gap: clamp(32px, 6vw, 80px); align-items: center; }
.v2-split .v2-head { margin-bottom: 28px; }
.v2-ticks { display: grid; gap: 14px; margin: 0 0 32px; padding: 0; list-style: none; }
.v2-ticks li { display: flex; gap: 12px; color: var(--text-soft); font-size: 15px; line-height: 1.65; }
.v2-ticks svg { flex: none; width: 18px; height: 18px; margin-top: 3px; color: var(--accent); }
.v2-shot { position: relative; margin: 0; }
.v2-shot::before { content: ''; position: absolute; inset: 8% -6% -10%; z-index: -1; background: radial-gradient(closest-side, var(--glow-strong), transparent); filter: blur(30px); }
.v2-frame { padding: 8px; border: 1px solid var(--hairline-strong); border-radius: 18px; background: linear-gradient(180deg, var(--surface-3), var(--surface-1)); box-shadow: var(--shadow-lg); }
.v2-frame img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; border-radius: 11px; background: var(--surface-2); }
.v2-shot figcaption { margin-top: 12px; color: var(--muted); font-size: 12px; }

/* ⑥ Products */
.v2-products { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--v2-grid); }
/* Two cards to a row: the developer tools first, then the personal apps. */
.v2-products-two { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.v2-products-two .v2-product { grid-column: span 3; }
.v2-products-two .v2-product-shot { height: 280px; }
.v2-products-page { margin-top: clamp(40px, 6vw, 64px); }
/* The flagship spans the first row. */
.v2-products-lead .v2-product:first-child { grid-column: 1 / -1; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); grid-template-rows: none; }
.v2-products-lead .v2-product:first-child .v2-product-shot { height: 340px; border-right: 1px solid var(--hairline); border-bottom: 0; }
.v2-products-lead .v2-product:first-child .v2-product-body { grid-template-rows: none; align-content: center; padding: var(--v2-pad); }
/* On the homepage the products pass by as one joined band, right to left (home.js). The band runs the full width of
   the window, square-edged, and fades out at both ends. It is a scroll area: it drifts by itself, stops under the
   pointer or keyboard focus, and can be scrolled sideways by hand. */
.v2-marquee { --fade: clamp(24px, 9vw, 160px); overflow-x: auto; overscroll-behavior-x: contain; scrollbar-width: none; border-block: 1px solid var(--hairline); background: var(--surface-1); -webkit-mask-image: linear-gradient(90deg, transparent, #000 var(--fade), #000 calc(100% - var(--fade)), transparent); mask-image: linear-gradient(90deg, transparent, #000 var(--fade), #000 calc(100% - var(--fade)), transparent); }
.v2-marquee::-webkit-scrollbar { display: none; }
.v2-marquee-track { display: flex; width: max-content; }
.v2-marquee.is-live .v2-marquee-track { will-change: transform; }
.v2-marquee.is-live .v2-product { -webkit-user-select: none; user-select: none; }
.v2-marquee.is-dragging { cursor: grabbing; }
.v2-marquee.is-dragging .v2-product { pointer-events: none; }
/* The second set of cards only exists for the loop: without the script or without motion, each product shows once. */
.v2-marquee:not(.is-live) [aria-hidden='true'] { display: none; }
/* Cards are low and wide, and meet edge to edge: a hairline is all that separates them.
   The screen takes most of a card; the name and the line under it stay two tight rows. */
.v2-marquee .v2-product { flex: 0 0 clamp(300px, 31vw, 420px); border: 0; border-right: 1px solid var(--hairline); border-radius: 0; background: none; }
.v2-marquee .v2-product-shot { height: clamp(150px, 14.6vw, 200px); }
.v2-marquee .v2-product-body { grid-template-rows: auto auto; align-content: start; gap: 4px; padding: 12px 20px 14px; }
.v2-marquee .v2-product .product-wordmark { font-size: 19px; }
.v2-marquee .v2-product-body > p.v2-product-line { font-size: 14px; line-height: 1.5; }
.v2-product { position: relative; display: grid; grid-template-rows: auto 1fr; border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); color: inherit; text-decoration: none; overflow: hidden; isolation: isolate; transition: border-color var(--duration-base) var(--ease); }
.v2-product:hover { border-color: var(--hairline-strong); }
.v2-product-shot { height: 200px; overflow: hidden; border-bottom: 1px solid var(--hairline); background: var(--surface-2); }
.v2-product-shot img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top left; transition: transform .6s var(--ease); }
.v2-product:hover .v2-product-shot img { transform: scale(1.03); }
.v2-product-body { display: grid; grid-template-rows: auto auto 1fr auto; gap: 10px; padding: 24px; }
.v2-product .product-wordmark { margin: 0; font-size: 22px; }
.v2-product-body > p:not(.product-wordmark) { color: var(--text-soft); font-size: 15px; line-height: 1.7; }
.v2-product-body > p.v2-product-line { color: var(--ink); font-size: 16px; font-weight: 600; line-height: 1.5; }
.v2-product .v2-link { margin-top: 6px; font-size: 14px; }

/* ⑦ FAQ */
.v2-faq { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.4fr); gap: clamp(32px, 6vw, 80px); align-items: start; }
.v2-faq-list { border-top: 1px solid var(--hairline-strong); }
.v2-faq details { border-bottom: 1px solid var(--hairline-strong); }
.v2-faq summary { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 22px 0; color: var(--ink); font-size: 17px; font-weight: 600; cursor: pointer; list-style: none; }
.v2-faq summary::-webkit-details-marker { display: none; }
.v2-faq summary::after { content: ''; flex: none; width: 10px; height: 10px; border-right: 1.6px solid var(--muted); border-bottom: 1.6px solid var(--muted); transform: rotate(45deg) translateY(-3px); transition: transform var(--duration-base) var(--ease); }
.v2-faq details[open] summary::after { transform: rotate(-135deg) translateY(-3px); }
.v2-faq details p { padding: 0 32px 24px 0; color: var(--text-soft); font-size: 15px; line-height: 1.75; }

/* ⑧ Team: the founder, for now. */
.v2-team { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 28px; align-items: center; padding: clamp(24px, 3vw, 36px); border-radius: 20px; background: var(--surface-1); }
.v2-founder { display: grid; flex: none; place-items: center; width: 64px; height: 64px; border-radius: 50%; background: linear-gradient(135deg, var(--accent), color-mix(in srgb, var(--accent) 40%, var(--surface-3))); color: #fff; font-size: 22px; font-weight: 650; }
.v2-team .v2-founder { align-self: start; }
.v2-team h3 { font-size: 22px; letter-spacing: -.02em; font-weight: 650; }
.v2-team h3 span { margin-left: 6px; color: var(--muted); font-size: 16px; font-weight: 500; }
/* The English edition already shows the name in English. */
:lang(en) .v2-team h3 span { display: none; }
.v2 .v2-team-role { margin: 4px 0 12px; color: var(--accent-text); font-size: 13px; font-weight: 600; }
.v2-team p:not(.v2-team-role) { color: var(--text-soft); font-size: 15px; line-height: 1.8; }
.v2-about-links { display: flex; flex-wrap: wrap; gap: 8px; }

/* ⑨ Closing call to action */
/* The closing card is set apart by its fill and its glow, so it carries no border (founder, 2026-11-11). */
.v2-cta { position: relative; display: grid; justify-items: center; gap: 16px; margin-top: var(--v2-gap); padding: clamp(56px, 8vw, 96px) 24px; border-radius: 28px; background: var(--surface-1); text-align: center; overflow: hidden; isolation: isolate; }
.v2-cta::before { content: ''; position: absolute; inset: auto -20% -60%; height: 120%; z-index: -1; background: radial-gradient(50% 50% at 50% 50%, var(--glow-strong), transparent 70%); }
.v2-cta h2 { font-size: clamp(30px, 4.4vw, 52px); line-height: 1.15; letter-spacing: -.035em; font-weight: 650; }
.v2-cta p { max-width: 680px; color: var(--text-soft); font-size: 17px; line-height: 1.7; }
.v2-tail { height: var(--v2-gap); }

/* Entrance: fade and a short rise, staggered within a group. The animation only fills
   backwards, so once it ends hover transitions own transform and translate again. */
html.js .v2 [data-rise] { opacity: 0; }
html.js .v2 [data-rise].is-in { opacity: 1; animation: v2-rise .9s var(--ease) backwards; animation-delay: calc(var(--i, 0) * 80ms); }
/* Headlines arrive slightly out of focus, like a camera settling. */
html.js .v2 :is(h1, .v2-head, .v2-pill, .v2-lead, .legal-crumbs, .legal-meta)[data-rise].is-in { animation-name: v2-rise-soft; }
/* Illustrations play out: the request lands, then each result line follows. */
@keyframes v2-rise { from { opacity: 0; transform: translateY(18px); } }
@keyframes v2-rise-soft { from { opacity: 0; transform: translateY(14px); filter: blur(6px); } }
@keyframes v2-item { from { opacity: 0; transform: translateX(-8px); } }
@keyframes v2-drop { from { opacity: 0; transform: translateY(-8px); } }


@media (max-width: 1000px) {
  .v2-team { grid-template-columns: auto minmax(0, 1fr); align-items: start; }
  .v2-about-links { grid-column: 1 / -1; }
  .v2-map-row { grid-template-columns: minmax(0, 1fr); }
  .v2-map-group { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 14px 24px; border-right: 0; border-bottom: 1px solid var(--hairline); }
  .v2-products { grid-template-columns: 1fr 1fr; }
  .v2-products-two .v2-product { grid-column: auto; }
  .v2-split, .v2-faq { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
  .v2-principles, .v2-steps-row, .v2-products { grid-template-columns: 1fr; }
  .v2-products-lead .v2-product:first-child { grid-column: auto; grid-template-columns: minmax(0, 1fr); }
  .v2-products-lead .v2-product:first-child .v2-product-shot { height: 280px; border-right: 0; border-bottom: 1px solid var(--hairline); }
  .v2-map-items { grid-auto-flow: row; }
  .v2-map-item + .v2-map-item { border-left: 0; border-top: 1px solid var(--hairline); }
  .v2-head { margin-bottom: 36px; }
  .v2-actions .btn { flex: 1 1 100%; }
}
@media (prefers-reduced-motion: reduce) {
  html.js .v2 [data-rise] { opacity: 1; animation: none !important; }
  .v2-product-shot img, .v2-link svg { transition: none; }
}

/* Subpages: solutions, pricing and contact share the homepage system. */
.v2-page-hero { padding-bottom: clamp(16px, 4vw, 40px); }
.v2-page-hero h1 { font-size: clamp(40px, 6.4vw, 76px); }
.v2-page-hero .v2-lead { max-width: 680px; }
.v2-chips { display: flex; flex-wrap: wrap; gap: 10px; }
.v2-chips .v2-chip { height: 36px; padding: 0 16px; font-size: 14px; color: var(--ink); background: var(--surface-1); }

/* Solutions: alternating scene chapters. */
.v2-scene { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: clamp(32px, 6vw, 80px); align-items: center; }
.v2-scene.reverse .v2-scene-copy { order: 2; }
.v2-scene-copy { display: grid; gap: 16px; }
.v2-scene-copy h2 { font-size: clamp(30px, 3.6vw, 44px); line-height: 1.15; letter-spacing: -.035em; font-weight: 650; }
.v2-scene-copy .v2-ticks { margin: 12px 0 0; }
.v2-scene-check { display: grid; gap: 6px; margin-top: 8px; padding: 16px 18px; border: 1px solid var(--hairline); border-radius: 14px; background: var(--surface-1); font-size: 14px; line-height: 1.65; }
.v2-scene-check b { color: var(--accent-text); font-size: 12px; font-weight: 600; letter-spacing: .04em; }
.v2-scene-check span { color: var(--text-soft); }
.v2-scene-visual { grid-column: auto; grid-template-rows: auto; align-content: center; min-height: 0; padding: clamp(24px, 4vw, 48px); }

/* Pricing: the free assessment comes first, the one offer every client can take. */
.v2-assess { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr) auto; gap: clamp(24px, 4vw, 56px); align-items: center; margin-top: clamp(40px, 6vw, 72px); padding: var(--v2-pad); border: 1px solid color-mix(in srgb, var(--accent) 55%, transparent); border-radius: 20px; background: var(--surface-1); box-shadow: 0 30px 80px -40px var(--glow-strong); overflow: hidden; isolation: isolate; }
.v2-assess-copy { display: grid; justify-items: start; gap: 10px; }
.v2-assess h2 { font-size: clamp(22px, 2.4vw, 28px); letter-spacing: -.02em; font-weight: 650; }
.v2-assess-copy p { color: var(--text-soft); font-size: 15px; line-height: 1.7; }
.v2-assess .v2-chip { background: color-mix(in srgb, var(--accent) 12%, var(--surface-1)); }
.v2-assess .v2-ticks { gap: 10px; margin: 0; }
.v2-assess-action { display: grid; justify-items: center; gap: 16px; }
.v2-price { color: var(--ink); font-size: clamp(34px, 3.2vw, 44px); font-weight: 650; line-height: 1; letter-spacing: -.04em; font-variant-numeric: tabular-nums; }
.v2 .v2-plans-note { margin-top: 20px; color: var(--muted); font-size: 13px; line-height: 1.7; text-align: center; text-wrap: balance; }
.v2-split-even { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; }
.v2-scene-def { display: grid; border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); overflow: hidden; }
.v2-scene-def > div { display: grid; grid-template-columns: 124px minmax(0, 1fr); gap: 16px; padding: 18px 24px; font-size: 15px; line-height: 1.65; }
.v2-scene-def > div + div { border-top: 1px solid var(--hairline); }
.v2-scene-def b { color: var(--ink); font-weight: 600; }
.v2-scene-def span { color: var(--text-soft); }

/* Contact: the headline first, then the ways to reach us in one wide card, mail on the left and the two codes on the right. */
.v2-desk { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); max-width: 1040px; margin: clamp(48px, 6vw, 72px) auto 0; overflow: hidden; isolation: isolate; border: 1px solid var(--hairline-strong); border-radius: 24px; background: linear-gradient(180deg, var(--surface-2), var(--surface-1)); box-shadow: var(--shadow-lg), 0 40px 120px -40px var(--glow-strong); }
.v2-desk::before { content: ''; position: absolute; inset: 0; border-radius: inherit; padding: 1px; background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 45%, transparent), transparent 40%); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; }
.v2-desk-bar { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 16px; padding: 14px var(--v2-pad); border-bottom: 1px solid var(--hairline); font-size: 13px; }
.v2-desk-brand { display: inline-flex; align-items: center; gap: 10px; color: var(--ink); font-weight: 600; }
.v2-desk-bar b { display: inline-flex; align-items: center; gap: 8px; color: var(--accent-text); font-weight: 600; }
.v2-desk-bar b::before { content: ''; width: 6px; height: 6px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 4px var(--glow); }
.v2-desk-mail { display: grid; align-content: center; justify-items: start; gap: 24px; padding: var(--v2-pad); }
.v2-desk-mail h2, .v2-desk-code h2 { font-size: 15px; font-weight: 600; letter-spacing: -.01em; }
.v2-desk-mail p:last-child, .v2-desk-code p { color: var(--text-soft); font-size: 14px; line-height: 1.6; }
.v2 .v2-desk-address { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin: 10px 0 8px; }
.v2-desk-address a { color: var(--ink); font-size: clamp(21px, 2.1vw, 27px); font-weight: 650; line-height: 1.25; letter-spacing: -.025em; text-decoration: none; }
.v2-desk-address a:hover { color: var(--accent-text); }
.v2 .v2-copy { position: relative; width: 36px; height: 36px; color: var(--muted); }
.v2-copy svg { position: absolute; inset: 9px; width: 18px; height: 18px; transition: opacity var(--duration-fast) var(--ease); }
.v2-copy svg + svg, .v2-copy.is-copied svg { opacity: 0; }
.v2-copy.is-copied svg + svg { opacity: 1; color: var(--accent); }
.v2-copied { color: var(--accent-text); font-size: 13px; font-weight: 600; }
.v2-desk-scan { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-left: 1px solid var(--hairline); }
.v2-desk-code .v2-link { font-size: 14px; }
.v2-desk-code { display: grid; justify-items: center; align-content: start; gap: 6px; padding: var(--v2-pad) 16px; text-align: center; }
.v2-desk-code + .v2-desk-code { box-shadow: -1px 0 var(--hairline); }
.v2-desk-code h2 { margin-top: 18px; }
.v2-qr { position: relative; width: min(172px, calc(100% - 16px)); aspect-ratio: 1; overflow: hidden; border-radius: 12px; background: #fff; box-shadow: 0 0 0 1px var(--hairline-strong), 0 0 0 7px var(--surface-2), 0 0 0 8px var(--hairline); }
.v2-qr img { position: absolute; height: auto; max-width: none; }
.v2-qr.qr-feishu img { width: 129.924242%; left: -14.962121%; top: -33.333333%; }
.v2-qr.qr-wecom img { width: 88%; left: 6%; top: 6%; }
button.v2-qr { display: block; padding: 0; border: 0; font: inherit; cursor: zoom-in; }
/* The code keeps its white ground under the pointer: the shared button hover would tint the margin around it. */
.v2 button.v2-qr:is(:hover, :active, :focus-visible) { background: #fff; }
.v2-qr-dialog { width: 100%; height: 100%; max-width: none; max-height: none; margin: 0; padding: 16px; border: 0; background: transparent; cursor: zoom-out; }
.v2-qr-dialog[open] { display: grid; place-items: center; }
.v2-qr-dialog::backdrop { background: rgb(0 0 0 / .72); }
.v2-qr.v2-qr-large { width: min(100%, 80vh, 520px); border-radius: 20px; box-shadow: none; }
html:has(.v2-qr-dialog[open]) { overflow: hidden; }
.v2 .v2-desk-note { grid-column: 1 / -1; padding: 14px var(--v2-pad); border-top: 1px solid var(--hairline); color: var(--muted); font-size: 13px; line-height: 1.6; }
.v2-brief { margin: 0; padding: 0; border-top: 1px solid var(--hairline-strong); list-style: none; }
.v2-brief li { display: flex; align-items: center; gap: 20px; padding: 20px 0; border-bottom: 1px solid var(--hairline-strong); color: var(--ink); font-size: clamp(17px, 1.5vw, 19px); font-weight: 550; letter-spacing: -.01em; }
.v2-brief .v2-icon { flex: none; margin: 0; }
.v2-contact-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 32px; margin-top: var(--v2-grid); padding: 20px var(--v2-pad); border: 1px solid var(--hairline); border-radius: 20px; color: var(--text-soft); font-size: 15px; }
html:not(.js) .v2-copy { display: none; }
@media (max-width: 380px) {
  .v2-desk-address a { font-size: 19px; }
}
@media (hover: hover) and (min-width: 721px) {
  .v2 .v2-desk-note { display: none; }
}

@media (max-width: 1000px) {
  .v2-desk { grid-template-columns: minmax(0, 1fr); }
  .v2-desk-mail { grid-template-columns: minmax(0, 1fr) auto; align-items: end; justify-items: stretch; }
  .v2-desk-scan { border-left: 0; border-top: 1px solid var(--hairline); }
  .v2-scene, .v2-split-even { grid-template-columns: 1fr; }
  .v2-assess { grid-template-columns: minmax(0, 1fr); align-items: start; }
  .v2-assess-action { grid-auto-flow: column; justify-content: start; align-items: center; gap: 20px; }
  .v2-scene.reverse .v2-scene-copy { order: 0; }
}
@media (max-width: 720px) {
  .v2-desk-mail { grid-template-columns: minmax(0, 1fr); }
  .v2-desk-mail .btn { width: 100%; }
  .v2-desk-code { padding-inline: 12px; }
  .v2-scene-def > div { grid-template-columns: 1fr; gap: 4px; }
}

/* Services: service index, input → output illustrations, delivery and tools. */
.v2-catalog { display: grid; gap: var(--v2-grid); margin-top: clamp(40px, 6vw, 72px); }
.v2-catalog-flush { margin-top: 0; }
.v2-catalog-group { overflow: hidden; border: 1px solid var(--hairline); border-radius: 20px; background: var(--surface-1); }
.v2-catalog-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 14px 24px; border-bottom: 1px solid var(--hairline); background: var(--surface-2); }
.v2-catalog-head b { color: var(--ink); font-size: 15px; font-weight: 600; }
.v2-catalog-head span { color: var(--muted); font-size: 13px; }
.v2-catalog-row { display: grid; grid-template-columns: minmax(0, 1.06fr) minmax(0, 2fr); gap: clamp(20px, 3vw, 40px); padding: 24px; scroll-margin-top: 96px; }
.v2-catalog-row + .v2-catalog-row { border-top: 1px solid var(--hairline); }
.v2-catalog-row .v2-run-label { margin-bottom: 10px; }
.v2-catalog-name { display: grid; align-content: start; justify-items: start; gap: 8px; }
.v2-catalog-name h3 { font-size: 19px; letter-spacing: -.02em; }
.v2-catalog-name p { color: var(--text-soft); font-size: 14px; line-height: 1.7; }
.v2-catalog-name .v2-link { margin-top: 4px; font-size: 14px; }
/* What a service includes fills two columns, so the list reads as a lot for one row. */
.v2-catalog-row .v2-ticks { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 32px; margin: 0; }
.v2-catalog-row .v2-ticks li { font-size: 14px; }
.v2-catalog-row.v2-price-row { grid-template-columns: minmax(0, 1fr) minmax(0, 320px); align-items: center; }
.v2-price-tag { display: grid; justify-items: end; gap: 4px; text-align: right; }
.v2-price-tag b { color: var(--ink); font-size: 24px; font-weight: 650; line-height: 1.2; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.v2-price-tag span { color: var(--muted); font-size: 13px; line-height: 1.55; }
.v2-catalog-group.v2-offer { border-color: color-mix(in srgb, var(--accent) 55%, transparent); }
.v2-section-tight .v2-head { margin-bottom: 0; }
.v2-section-tight + .v2-section { padding-top: var(--v2-head); }

/* Typical scenarios: each draws its own subject. */
.v2-scene-visual { gap: 14px; margin: 0; }
.scene-note { color: var(--muted); font-size: 12px; text-align: right; }
.v2-scene-wide { display: grid; gap: clamp(28px, 4vw, 48px); }
.v2-scene-head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(32px, 6vw, 80px); align-items: end; }
.v2-scene-side { display: grid; gap: 16px; }
.v2-scene-side .v2-ticks { margin: 0; }
.v2-scene-side .v2-scene-check { margin-top: 0; }
.v2-scene-copy .v2-scene-def { margin-top: 12px; }
.v2-scene-copy .v2-scene-def > div { grid-template-columns: 56px minmax(0, 1fr); padding: 14px 18px; font-size: 14px; }
.scene-node { display: grid; gap: 2px; align-content: center; min-height: 58px; padding: 10px 14px; border: 1px solid var(--hairline-strong); border-radius: 12px; background: var(--surface-2); font-size: 13px; }
.scene-node b { color: var(--ink); font-weight: 600; }
.scene-node span { color: var(--muted); font-size: 12px; }
.scene-node.done span { color: #22a06b; }
.scene-node.risk { border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.scene-node.risk span { color: var(--danger); }
.scene-node.hub { border-color: color-mix(in srgb, var(--accent) 45%, transparent); background: color-mix(in srgb, var(--accent) 10%, var(--surface-1)); box-shadow: 0 0 32px -8px var(--glow-strong); }
.scene-node.hub span { color: var(--accent-text); }
.scene-column { display: grid; align-content: space-between; gap: 10px; }
.v2 .scene-links { width: 100%; height: 100%; color: var(--hairline-strong); }
.scene-links path { vector-effect: non-scaling-stroke; stroke-width: 1.2; }
.v2 .scene-meter { width: 100%; height: 6px; border-radius: 3px; stroke: none; }
.scene-meter rect { fill: var(--surface-3); stroke: none; }
.scene-meter .fill { fill: var(--accent); }
.scene-usage { display: grid; gap: 8px; }
.scene-usage > p { color: var(--muted); font-size: 12px; }
.scene-usage > div { display: grid; grid-template-columns: 72px minmax(0, 1fr) 36px; gap: 10px; align-items: center; color: var(--text-soft); font-size: 12px; }
.scene-usage b { color: var(--ink); font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }

.scene-app { overflow: hidden; border: 1px solid var(--hairline-strong); border-radius: 12px; background: var(--surface-2); font-size: 13px; }
.scene-app-bar { display: flex; align-items: center; gap: 6px; padding: 10px 14px; border-bottom: 1px solid var(--hairline); color: var(--muted); font-size: 12px; }
.scene-app-bar i { width: 8px; height: 8px; border-radius: 50%; background: var(--surface-3); }
.scene-app-bar span { margin-left: 8px; }
.scene-app-body { display: grid; grid-template-columns: 84px minmax(0, 1fr); min-height: 236px; }
.scene-app-nav { display: grid; align-content: start; gap: 4px; padding: 12px 8px; border-right: 1px solid var(--hairline); color: var(--muted); }
.scene-app-nav > * { padding: 6px 8px; border-radius: 8px; }
.scene-app-nav b { background: var(--surface-3); color: var(--ink); font-weight: 600; }
.scene-app-main { display: grid; align-content: start; gap: 12px; padding: 14px; }
.scene-app-roles { display: flex; gap: 14px; color: var(--muted); }
.scene-app-roles b { color: var(--accent-text); font-weight: 600; }
.scene-app-table { display: grid; }
.scene-app-table > div { display: grid; grid-template-columns: 72px minmax(0, 1fr) auto; gap: 10px; align-items: center; min-height: 42px; border-top: 1px solid var(--hairline); color: var(--text-soft); }
.scene-app-table > .head { min-height: 30px; border-top: 0; color: var(--muted); font-size: 12px; }
.scene-app-table .head span:last-child { padding-right: 10px; }

.scene-chat { overflow: hidden; border: 1px solid var(--hairline-strong); border-radius: 14px; background: var(--surface-2); font-size: 14px; }
.scene-chat-head { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--hairline); }
.scene-chat-head b { color: var(--ink); font-weight: 600; }
.scene-chat-head small { margin-left: auto; color: var(--muted); font-size: 12px; }
.scene-chat-log { display: grid; gap: 10px; padding: 16px 14px; }
.scene-chat-log p { justify-self: start; max-width: 86%; padding: 10px 14px; border-radius: 4px 14px 14px; background: var(--surface-3); color: var(--text-soft); line-height: 1.6; }
.scene-chat-log p.mine { justify-self: end; border-radius: 14px 4px 14px 14px; background: color-mix(in srgb, var(--accent) 14%, var(--surface-1)); color: var(--ink); }

.scene-gateway { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(0, 1fr); gap: clamp(24px, 4vw, 48px); align-items: center; }
.scene-routes { display: grid; grid-template-columns: minmax(0, 1fr) 40px minmax(0, 1.1fr) 40px minmax(0, 1fr); align-items: stretch; }
.scene-routes > .hub { align-self: center; min-height: 92px; }

.scene-flow { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.scene-flow li { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 12px; gap: 2px 12px; padding: 0 0 22px 30px; font-size: 14px; }
.scene-flow li:last-child { padding-bottom: 0; }
.scene-flow li::before { content: ''; position: absolute; left: 0; top: 3px; width: 14px; height: 14px; border: 2px solid var(--accent); border-radius: 50%; background: var(--accent); }
.scene-flow li.wait::before { background: transparent; box-shadow: 0 0 0 5px var(--glow); }
.scene-flow li:not(:last-child)::after { content: ''; position: absolute; left: 6px; top: 22px; bottom: 2px; width: 2px; background: color-mix(in srgb, var(--accent) 45%, transparent); }
.scene-flow b { grid-column: 1; color: var(--ink); font-weight: 600; }
.scene-flow span { grid-column: 1; color: var(--text-soft); font-size: 13px; }
.scene-flow em { grid-column: 2; grid-row: 1 / 3; align-self: center; font-style: normal; }

.scene-canvas { display: grid; grid-template-columns: minmax(0, 1fr) 40px minmax(0, 1.25fr) 40px minmax(0, 1fr) 28px minmax(0, 1fr); align-items: center; }
.scene-canvas > .scene-column { align-self: stretch; }
.scene-canvas > .scene-links { align-self: stretch; }

.scene-stack { position: relative; display: grid; gap: 8px; padding: 30px 14px 14px; border: 1px dashed var(--hairline-strong); border-radius: 14px; }
.scene-boundary { position: absolute; left: 14px; top: 8px; color: var(--accent-text); font-size: 12px; font-weight: 600; }
.scene-layer { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: 12px; align-items: center; min-height: 48px; padding: 8px 14px; border: 1px solid var(--hairline); border-radius: 10px; background: var(--surface-2); font-size: 13px; }
.scene-layer b { color: var(--ink); font-weight: 600; }
.scene-layer > span { color: var(--text-soft); }
.scene-layer.compute { align-items: start; padding-block: 12px; border-color: color-mix(in srgb, var(--accent) 35%, transparent); }
.v2-scene-visual { padding: clamp(20px, 3vw, 32px); }
/* Four steps sit two to a row: four narrow columns broke every sentence into three short lines. */
.v2-steps-four { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.v2 .v2-step-note { margin-top: auto; padding-top: 12px; border-top: 1px solid var(--hairline); color: var(--muted); font-size: 13px; }
@media (max-width: 1000px) {
  .v2-scene-head, .scene-gateway, .v2-catalog-row { grid-template-columns: minmax(0, 1fr); align-items: start; }
  .v2-catalog-row { gap: 16px; }
}
@media (max-width: 720px) {
  .v2-steps-four { grid-template-columns: 1fr; }
  .scene-routes, .scene-canvas { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .v2 .scene-links { display: none; }
  .scene-routes > .hub { min-height: 72px; }
  .scene-app-body { grid-template-columns: minmax(0, 1fr); }
  .scene-app-nav { display: flex; border-right: 0; border-bottom: 1px solid var(--hairline); }
  .v2-catalog-row.v2-price-row { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .v2-catalog-row .v2-ticks { grid-template-columns: minmax(0, 1fr); }
  .v2-price-tag { justify-items: start; text-align: left; }
}

/* FAQ answers unfold instead of snapping open, where the browser can animate to auto. */
@media (prefers-reduced-motion: no-preference) {
  @supports (interpolate-size: allow-keywords) {
    .v2-faq { interpolate-size: allow-keywords; }
    .v2-faq details::details-content { height: 0; overflow: clip; transition: height var(--duration-slow) var(--ease), content-visibility var(--duration-slow) allow-discrete; }
    .v2-faq details[open]::details-content { height: auto; }
  }
}
