Files
OSGKeyboard/docs/assets/site.css
Rocky 10bc457c72
CI / Validate manifests (push) Has been cancelled
CI / SwiftLint (push) Has been cancelled
CI / iOS / Extension (push) Has been cancelled
CI / macOS (push) Has been cancelled
feat(app): add resilient Flow recovery and privacy-safe analytics
Unify PiP recovery across startup and foreground transitions, surface actionable status, and add privacy-safe analytics plus the refreshed onboarding and account experience. Update documentation assets and advance the release build to 84.
2026-08-20 20:22:20 +08:00

2058 lines
35 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:root {
color-scheme: light dark;
--canvas: #eef2f6;
--surface: #ffffff;
--surface-soft: #f7f9fb;
--surface-strong: #e5eaf0;
--ink: #111416;
--ink-secondary: #5f676e;
--ink-tertiary: #626c74;
--line: rgba(17, 20, 22, 0.1);
--line-strong: rgba(17, 20, 22, 0.18);
--accent: #2d8a57;
--accent-strong: #237247;
--accent-soft: rgba(45, 138, 87, 0.1);
--inverse: #f4f7f5;
--inverse-secondary: #aab2ad;
--inverse-line: rgba(255, 255, 255, 0.12);
--content: min(1200px, calc(100vw - 64px));
--radius-xl: 32px;
--radius-lg: 24px;
--radius-md: 16px;
}
html[data-theme="dark"] {
--canvas: #0c0e0f;
--surface: #191c1e;
--surface-soft: #222628;
--surface-strong: #2b3033;
--ink: #f2f4f3;
--ink-secondary: #aab0ac;
--ink-tertiary: #969e98;
--line: rgba(255, 255, 255, 0.09);
--line-strong: rgba(255, 255, 255, 0.16);
--accent: #6fbd8a;
--accent-strong: #82ca99;
--accent-soft: rgba(111, 189, 138, 0.12);
}
* {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
scroll-padding-top: 96px;
background: var(--canvas);
}
body {
margin: 0;
overflow-x: hidden;
background: var(--canvas);
color: var(--ink);
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC",
"Hiragino Sans GB", "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
line-height: 1.65;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
html[data-lang="en"] body {
font-family: "Outfit", -apple-system, BlinkMacSystemFont, "SF Pro Text",
"Helvetica Neue", Arial, sans-serif;
}
a {
color: inherit;
text-decoration: none;
}
button,
a {
-webkit-tap-highlight-color: transparent;
}
button {
color: inherit;
font: inherit;
}
img {
display: block;
max-width: 100%;
}
h1,
h2,
h3,
p {
margin-top: 0;
}
h1,
h2,
h3 {
text-wrap: balance;
}
html[data-lang="zh"] h1,
html[data-lang="zh"] h2,
html[data-lang="zh"] h3 {
overflow-wrap: normal;
word-break: keep-all;
}
.skip-link {
position: fixed;
z-index: 100;
top: 12px;
left: 12px;
padding: 9px 14px;
border-radius: 999px;
background: var(--ink);
color: var(--surface);
transform: translateY(-160%);
}
.skip-link:focus {
transform: translateY(0);
}
.site-nav {
position: fixed;
z-index: 50;
top: 18px;
right: 0;
left: 0;
width: var(--content);
margin: auto;
}
.nav-shell {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
min-height: 56px;
padding: 7px 8px 7px 15px;
border: 1px solid var(--line);
border-radius: 18px;
background: color-mix(in srgb, var(--surface) 82%, transparent);
box-shadow: 0 10px 32px rgba(17, 20, 22, 0.04);
backdrop-filter: blur(22px) saturate(140%);
-webkit-backdrop-filter: blur(22px) saturate(140%);
}
.brand {
display: inline-flex;
gap: 10px;
align-items: center;
justify-self: start;
font-size: 0.94rem;
font-weight: 700;
letter-spacing: -0.015em;
}
.brand img {
width: 30px;
height: 30px;
border-radius: 9px;
}
.nav-links,
.nav-actions {
display: flex;
align-items: center;
}
.nav-links {
gap: 30px;
color: var(--ink-secondary);
font-size: 0.84rem;
font-weight: 550;
}
.nav-actions {
gap: 4px;
justify-self: end;
}
.nav-links a,
.footer-links a {
transition: color 160ms ease;
}
.nav-links a:hover,
.nav-links a:focus-visible,
.footer-links a:hover,
.footer-links a:focus-visible {
color: var(--ink);
}
.icon-button,
.language-button {
display: inline-grid;
min-width: 40px;
height: 40px;
padding: 0 11px;
border: 0;
border-radius: 11px;
background: transparent;
cursor: pointer;
place-items: center;
}
.icon-button:hover,
.language-button:hover,
.icon-button:focus-visible,
.language-button:focus-visible {
background: var(--surface-strong);
}
.language-button {
font-size: 0.76rem;
font-weight: 700;
}
.icon-button.mobile-menu-button,
.mobile-nav {
display: none;
}
.mobile-nav {
gap: 4px;
margin-top: 8px;
padding: 8px;
border: 1px solid var(--line);
border-radius: 16px;
background: color-mix(in srgb, var(--surface) 94%, transparent);
box-shadow: 0 14px 34px rgba(17, 20, 22, 0.08);
backdrop-filter: blur(22px);
-webkit-backdrop-filter: blur(22px);
}
.mobile-nav a {
padding: 11px 14px;
border-radius: 10px;
color: var(--ink-secondary);
font-size: 0.84rem;
font-weight: 650;
text-align: center;
}
.mobile-nav a:hover,
.mobile-nav a:focus-visible {
background: var(--surface-strong);
color: var(--ink);
}
.material-symbols-rounded {
display: inline-grid;
width: 1.35em;
height: 1.35em;
font-size: 0 !important;
line-height: 1;
place-items: center;
}
.material-symbols-rounded::before {
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", sans-serif;
line-height: 1;
}
.mobile-menu-button .material-symbols-rounded,
#themeToggle .material-symbols-rounded {
display: none;
}
.mobile-menu-button::before {
width: 17px;
height: 12px;
border-top: 1.5px solid currentColor;
border-bottom: 1.5px solid currentColor;
content: "";
}
.mobile-menu-button[aria-expanded="true"]::before {
width: auto;
height: auto;
border: 0;
content: "×";
font-size: 1.4rem;
font-weight: 300;
}
#themeToggle::before {
content: "◐";
font-size: 1.05rem;
}
html[data-theme="dark"] #themeToggle::before {
content: "☀";
font-size: 1rem;
}
.scroll-cue .material-symbols-rounded::before,
.stage-arrow::before {
content: "↓";
font-size: 1rem;
}
.stage-arrow,
.clipboard-source > .material-symbols-rounded,
.correction-chip .material-symbols-rounded,
.outline-action .material-symbols-rounded {
width: 22px;
height: 22px;
}
.gesture-grid .material-symbols-rounded,
.skill-actions .material-symbols-rounded {
display: none;
}
.clipboard-source > .material-symbols-rounded::before {
content: "⧉";
font-size: 1.35rem;
}
.correction-chip .material-symbols-rounded::before {
content: "✓";
font-size: 0.95rem;
}
.privacy-proof > div > .material-symbols-rounded::before {
content: "◈";
font-size: 1.55rem;
}
.outline-action .material-symbols-rounded::before {
content: "⌘";
font-size: 1rem;
}
.hero {
position: relative;
display: grid;
min-height: 100svh;
padding: 132px 0 92px;
overflow: hidden;
place-items: center;
}
.hero-orb {
position: absolute;
top: 42%;
left: 50%;
width: min(760px, 84vw);
aspect-ratio: 1;
border-radius: 50%;
background: radial-gradient(
circle,
color-mix(in srgb, var(--accent) 12%, transparent) 0%,
color-mix(in srgb, #7ea7d8 8%, transparent) 38%,
transparent 70%
);
filter: blur(8px);
pointer-events: none;
transform: translate(-50%, -50%);
}
.hero-inner {
position: relative;
z-index: 1;
display: flex;
align-items: center;
width: var(--content);
max-width: 920px;
flex-direction: column;
text-align: center;
}
.launch-pill {
display: inline-flex;
gap: 9px;
align-items: center;
margin-bottom: clamp(54px, 8vh, 86px);
padding: 9px 14px;
border: 1px solid var(--line);
border-radius: 999px;
background: color-mix(in srgb, var(--surface) 72%, transparent);
color: var(--ink-secondary);
font-size: 0.76rem;
font-weight: 650;
box-shadow: 0 10px 34px rgba(17, 20, 22, 0.05);
}
.launch-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--accent);
box-shadow: 0 0 0 4px var(--accent-soft);
}
.hero h1 {
max-width: 900px;
margin-bottom: 25px;
font-size: clamp(3.6rem, 5.6vw, 4.5rem);
font-weight: 700;
letter-spacing: -0.055em;
line-height: 1.02;
}
.hero h1 > span {
display: block;
}
html[data-lang="zh"] .hero h1 {
max-width: 840px;
font-size: clamp(3.25rem, 5vw, 4rem);
letter-spacing: -0.035em;
line-height: 1.12;
}
.hero-muted {
color: var(--ink-tertiary);
}
.hero-copy {
max-width: 700px;
margin-bottom: 29px;
color: var(--ink-secondary);
font-size: clamp(1.02rem, 1.5vw, 1.18rem);
line-height: 1.75;
}
.hero-actions,
.download-actions {
display: flex;
flex-wrap: wrap;
gap: 14px;
align-items: center;
}
.store-badge {
display: inline-flex;
transition: opacity 160ms ease, transform 160ms ease;
}
.store-badge img {
width: auto;
height: 48px;
}
html[data-theme="light"] .store-badge img {
filter: invert(1);
}
html[data-theme="dark"] .store-badge img {
filter: none;
}
.store-badge:hover,
.store-badge:focus-visible {
opacity: 0.86;
transform: translateY(-1px);
}
.text-action {
display: inline-flex;
align-items: center;
min-height: 46px;
padding: 0 15px;
color: var(--ink-secondary);
font-size: 0.86rem;
font-weight: 650;
}
.text-action::after {
margin-left: 7px;
content: "↗";
}
.text-action:hover,
.text-action:focus-visible {
color: var(--ink);
}
.hero-note {
margin: 18px 0 0;
color: var(--ink-tertiary);
font-size: 0.74rem;
}
.scroll-cue {
position: absolute;
bottom: 26px;
left: 50%;
display: inline-flex;
gap: 8px;
align-items: center;
color: var(--ink-tertiary);
font-size: 0.72rem;
transform: translateX(-50%);
}
.scroll-cue .material-symbols-rounded {
font-size: 17px;
}
.section {
padding: clamp(96px, 10vw, 150px) 0;
}
.section-inner {
width: var(--content);
margin: auto;
}
.product-section {
background: var(--surface);
}
.eyebrow {
display: inline-flex;
gap: 8px;
align-items: center;
margin: 0 0 15px;
color: var(--ink-secondary);
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
html[data-lang="zh"] .eyebrow {
letter-spacing: 0.06em;
text-transform: none;
}
.eyebrow::before {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent);
content: "";
}
.center-heading {
max-width: 830px;
margin: 0 auto clamp(52px, 7vw, 84px);
text-align: center;
}
.center-heading.compact {
margin-bottom: clamp(42px, 6vw, 68px);
}
.center-heading h2,
.scene-copy h2,
.split-heading h2,
.faq-layout h2 {
margin-bottom: 18px;
font-size: clamp(2.55rem, 4.2vw, 3.5rem);
font-weight: 700;
letter-spacing: -0.05em;
line-height: 1.06;
}
html[data-lang="zh"] .center-heading h2,
html[data-lang="zh"] .scene-copy h2,
html[data-lang="zh"] .split-heading h2,
html[data-lang="zh"] .faq-layout h2 {
font-size: clamp(2.25rem, 3.8vw, 3.15rem);
letter-spacing: -0.03em;
line-height: 1.14;
}
.faq-layout h2 {
font-size: clamp(2.3rem, 3.5vw, 3rem);
}
html[data-lang="zh"] .faq-layout h2 {
font-size: clamp(2.1rem, 3vw, 2.65rem);
}
.center-heading > p:last-child,
.scene-copy > p,
.split-heading > p {
color: var(--ink-secondary);
font-size: clamp(1rem, 1.4vw, 1.12rem);
line-height: 1.75;
}
.center-heading > p:last-child {
max-width: 700px;
margin: auto;
}
.product-stage {
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius-xl);
background: var(--surface-soft);
box-shadow: 0 30px 80px rgba(30, 42, 52, 0.08);
}
.stage-bar {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
min-height: 54px;
padding: 0 18px;
border-bottom: 1px solid var(--line);
color: var(--ink-tertiary);
font-size: 0.72rem;
}
.stage-dots {
display: flex;
gap: 6px;
}
.stage-dots i {
width: 8px;
height: 8px;
border-radius: 50%;
background: var(--surface-strong);
}
.stage-status {
justify-self: end;
}
.stage-content {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(360px, 0.95fr);
min-height: 560px;
}
.conversation {
display: flex;
justify-content: center;
padding: clamp(42px, 6vw, 76px);
border-right: 1px solid var(--line);
flex-direction: column;
}
.conversation-label,
.typing-label,
.platform-label {
color: var(--ink-tertiary);
font-size: 0.71rem;
font-weight: 700;
letter-spacing: 0.07em;
text-transform: uppercase;
}
.message-bubble {
align-self: flex-start;
max-width: 510px;
margin: 12px 0 24px;
padding: 18px 20px;
border-radius: 18px 18px 18px 5px;
background: var(--ink);
color: var(--surface);
font-size: clamp(1.1rem, 1.8vw, 1.45rem);
font-weight: 600;
line-height: 1.5;
}
html[data-theme="dark"] .message-bubble {
background: #f1f4f2;
color: #151817;
}
.insert-preview {
position: relative;
max-width: 520px;
padding: 22px 24px;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--surface);
}
.preview-kicker {
color: var(--accent);
font-size: 0.71rem;
font-weight: 700;
}
.insert-preview p {
margin: 9px 0 0;
font-size: clamp(1.05rem, 1.5vw, 1.3rem);
font-weight: 550;
line-height: 1.55;
}
.text-cursor {
display: inline-block;
width: 2px;
height: 1.1em;
margin-left: 3px;
background: var(--accent);
vertical-align: -0.1em;
}
.insert-preview .text-cursor {
position: absolute;
right: 22px;
bottom: 24px;
}
.keyboard-capture {
position: relative;
align-self: center;
min-width: 0;
aspect-ratio: 1.18;
margin: 0;
overflow: hidden;
background: var(--surface-strong);
}
.keyboard-capture img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center bottom;
}
.keyboard-capture figcaption {
position: absolute;
top: 16px;
left: 16px;
padding: 7px 10px;
border: 1px solid rgba(255, 255, 255, 0.22);
border-radius: 999px;
background: rgba(17, 20, 22, 0.68);
color: #ffffff;
font-size: 0.68rem;
font-weight: 650;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
.gesture-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
margin-top: 28px;
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
}
.gesture-grid article {
display: grid;
grid-template-columns: 28px 1fr;
gap: 5px 12px;
min-height: 140px;
padding: 28px 28px 25px 0;
border-right: 1px solid var(--line);
}
.gesture-grid article:not(:first-child) {
padding-left: 28px;
}
.gesture-grid article:last-child {
border-right: 0;
}
.gesture-number {
color: var(--ink-tertiary);
font-size: 0.68rem;
font-weight: 700;
}
.gesture-grid .material-symbols-rounded {
color: var(--ink-secondary);
font-size: 21px;
}
.gesture-grid h3,
.gesture-grid p {
grid-column: 2;
}
.gesture-grid h3 {
align-self: end;
margin: 0;
font-size: 1rem;
}
.gesture-grid p {
margin: 0;
color: var(--ink-secondary);
font-size: 0.82rem;
}
.scene-section {
background: var(--canvas);
}
.scene-layout {
display: grid;
grid-template-columns: minmax(0, 0.8fr) minmax(520px, 1.2fr);
gap: clamp(64px, 9vw, 124px);
align-items: center;
}
.scene-copy {
max-width: 510px;
}
.quiet-list {
display: grid;
gap: 12px;
margin: 27px 0 0;
padding: 0;
color: var(--ink-secondary);
font-size: 0.9rem;
list-style: none;
}
.quiet-list li {
position: relative;
padding-left: 19px;
}
.quiet-list li::before {
position: absolute;
top: 0.65em;
left: 0;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent);
content: "";
}
.voice-stage {
padding: clamp(28px, 5vw, 52px);
border: 1px solid var(--line);
border-radius: var(--radius-xl);
background: var(--surface);
box-shadow: 0 26px 70px rgba(30, 42, 52, 0.07);
}
.voice-meta,
.voice-footer {
display: flex;
align-items: center;
justify-content: space-between;
color: var(--ink-tertiary);
font-size: 0.74rem;
}
.live-indicator {
display: inline-flex;
gap: 7px;
align-items: center;
color: var(--accent);
font-weight: 650;
}
.live-indicator i {
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--accent);
}
.transcript-card {
display: flex;
min-height: 230px;
justify-content: center;
padding: 54px 0 40px;
flex-direction: column;
}
.transcript-card span,
.transcript-card strong {
display: block;
font-size: clamp(1.7rem, 3.2vw, 2.7rem);
letter-spacing: -0.04em;
line-height: 1.32;
}
html[data-lang="zh"] .transcript-card span,
html[data-lang="zh"] .transcript-card strong {
font-size: clamp(1.6rem, 2.8vw, 2.35rem);
letter-spacing: -0.025em;
}
.transcript-card span {
color: var(--ink-tertiary);
}
.waveform {
display: flex;
gap: 7px;
align-items: center;
height: 66px;
margin-bottom: 25px;
}
.waveform i {
width: 4px;
height: 22%;
border-radius: 999px;
background: var(--accent);
opacity: 0.65;
animation: waveform 1.8s ease-in-out infinite;
}
.waveform i:nth-child(2n) { height: 58%; animation-delay: -0.4s; }
.waveform i:nth-child(3n) { height: 86%; animation-delay: -0.9s; }
.waveform i:nth-child(5n) { height: 42%; animation-delay: -1.2s; }
.waveform i:nth-child(7n) { height: 100%; animation-delay: -0.2s; }
@keyframes waveform {
0%,
100% { transform: scaleY(0.7); }
50% { transform: scaleY(1); }
}
.typing-section {
background: var(--surface);
}
.typing-stories {
display: grid;
gap: 22px;
}
.typing-story {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(340px, 0.95fr);
min-height: 460px;
overflow: hidden;
border: 1px solid var(--line);
border-radius: var(--radius-xl);
background: var(--surface-soft);
}
.typing-story.reverse .typing-visual {
order: 2;
border-right: 0;
border-left: 1px solid var(--line);
}
.typing-visual {
display: flex;
justify-content: center;
padding: clamp(36px, 6vw, 70px);
border-right: 1px solid var(--line);
flex-direction: column;
}
.composition-row {
display: flex;
align-items: center;
min-height: 86px;
font-size: clamp(2rem, 4vw, 3.4rem);
letter-spacing: -0.04em;
}
.candidate-row,
.suggestion-row {
display: flex;
gap: 8px;
margin-bottom: 42px;
overflow: hidden;
}
.candidate-row span,
.suggestion-row span {
flex: 0 0 auto;
padding: 8px 12px;
border: 1px solid var(--line);
border-radius: 10px;
color: var(--ink-secondary);
font-size: 0.82rem;
}
.candidate-row .selected,
.suggestion-row .selected {
border-color: var(--accent);
background: var(--accent-soft);
color: var(--accent);
}
.mini-keyboard {
display: grid;
grid-template-columns: repeat(10, 1fr);
gap: 7px;
}
.mini-keyboard span {
display: grid;
min-width: 0;
height: 42px;
border-radius: 8px;
background: var(--surface);
color: var(--ink-secondary);
font-size: 0.72rem;
box-shadow: 0 1px 0 var(--line-strong);
place-items: center;
}
.story-copy {
display: flex;
justify-content: center;
padding: clamp(38px, 6vw, 70px);
flex-direction: column;
}
.story-index {
margin-bottom: auto;
color: var(--ink-tertiary);
font-size: 0.7rem;
font-weight: 700;
}
.story-copy h3 {
margin: 72px 0 14px;
font-size: clamp(1.85rem, 3vw, 2.65rem);
letter-spacing: -0.04em;
line-height: 1.15;
}
html[data-lang="zh"] .story-copy h3 {
font-size: clamp(1.7rem, 2.7vw, 2.3rem);
letter-spacing: -0.025em;
}
.story-copy p {
margin-bottom: 0;
color: var(--ink-secondary);
line-height: 1.75;
}
.english-visual {
gap: 28px;
}
.english-line {
position: relative;
padding-bottom: 13px;
border-bottom: 1px solid var(--line-strong);
font-size: clamp(1.7rem, 3.5vw, 3rem);
letter-spacing: -0.04em;
}
.correction-mark {
position: absolute;
right: 0;
bottom: 6px;
width: 25%;
height: 3px;
border-radius: 999px;
background: #d26a5d;
}
.correction-chip {
display: inline-flex;
gap: 8px;
align-items: center;
align-self: flex-start;
padding: 9px 12px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--surface);
color: var(--accent);
font-size: 0.86rem;
font-weight: 650;
}
.correction-chip .material-symbols-rounded {
font-size: 19px;
}
.skills-section {
background: var(--canvas);
}
.skills-layout {
grid-template-columns: minmax(520px, 1.15fr) minmax(0, 0.85fr);
}
.skills-stage {
display: flex;
min-height: 500px;
justify-content: center;
padding: clamp(30px, 5vw, 58px);
border: 1px solid var(--line);
border-radius: var(--radius-xl);
background: var(--surface);
box-shadow: 0 26px 70px rgba(30, 42, 52, 0.07);
flex-direction: column;
}
.clipboard-source {
display: flex;
gap: 16px;
padding: 20px;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--surface-soft);
}
.clipboard-source > .material-symbols-rounded {
color: var(--ink-tertiary);
}
.clipboard-source small {
color: var(--ink-tertiary);
}
.clipboard-source p {
margin: 5px 0 0;
font-size: 1.02rem;
line-height: 1.55;
}
.stage-arrow {
align-self: center;
margin: 25px 0;
color: var(--ink-tertiary);
}
.skill-actions {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.skill-actions > span {
display: flex;
gap: 8px;
align-items: center;
min-height: 54px;
padding: 0 13px;
border: 1px solid var(--line);
border-radius: 14px;
color: var(--ink-secondary);
font-size: 0.82rem;
font-weight: 650;
}
.skill-actions > span.primary {
border-color: color-mix(in srgb, var(--accent) 42%, var(--line));
background: var(--accent-soft);
color: var(--accent);
}
.skill-actions .material-symbols-rounded {
font-size: 19px;
}
.styles-strip {
display: grid;
grid-template-columns: minmax(0, 0.9fr) minmax(400px, 1.1fr);
gap: 64px;
align-items: end;
margin-top: clamp(80px, 10vw, 130px);
padding-top: 42px;
border-top: 1px solid var(--line);
}
.styles-strip h3 {
max-width: 560px;
margin: 0;
font-size: clamp(2rem, 3.5vw, 3rem);
letter-spacing: -0.045em;
line-height: 1.15;
}
html[data-lang="zh"] .styles-strip h3 {
font-size: clamp(1.9rem, 3vw, 2.6rem);
letter-spacing: -0.025em;
}
.style-options {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
}
.style-options span {
padding: 16px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--surface);
color: var(--ink-secondary);
font-size: 0.84rem;
font-weight: 650;
}
.style-options span.selected {
border-color: var(--accent);
color: var(--ink);
}
.privacy-section {
--section-ink: var(--ink);
--section-secondary: var(--ink-secondary);
--section-line: var(--line);
background: #e5ebe8;
color: var(--section-ink);
}
html[data-theme="dark"] .privacy-section {
--section-ink: var(--inverse);
--section-secondary: var(--inverse-secondary);
--section-line: var(--inverse-line);
background: #050706;
}
.center-heading.inverse .eyebrow,
.center-heading.inverse > p:last-child {
color: var(--section-secondary);
}
.service-paths {
display: grid;
grid-template-columns: repeat(3, 1fr);
border-top: 1px solid var(--section-line);
border-bottom: 1px solid var(--section-line);
}
.service-paths article {
display: flex;
min-height: 390px;
padding: 32px;
border-right: 1px solid var(--section-line);
flex-direction: column;
}
.service-paths article:first-child {
padding-left: 0;
}
.service-paths article:last-child {
padding-right: 0;
border-right: 0;
}
.path-number {
color: var(--section-secondary);
font-size: 0.68rem;
font-weight: 700;
}
.service-paths .material-symbols-rounded {
display: block;
width: 34px;
height: 1px;
margin: 46px 0 25px;
background: var(--section-line);
}
.service-paths h3 {
margin-bottom: 12px;
font-size: 1.55rem;
}
.service-paths p {
color: var(--section-secondary);
line-height: 1.7;
}
.path-note {
margin-top: auto;
padding-top: 24px;
color: var(--section-ink);
font-size: 0.74rem;
}
.privacy-proof {
display: flex;
gap: 32px;
align-items: center;
justify-content: space-between;
margin-top: 54px;
}
.privacy-proof > div {
display: flex;
gap: 15px;
align-items: center;
}
.privacy-proof > div > .material-symbols-rounded {
width: 30px;
height: 30px;
color: var(--accent);
}
.privacy-proof h3 {
margin: 0;
font-size: clamp(1.2rem, 2vw, 1.55rem);
}
.inverse-link {
display: inline-flex;
gap: 8px;
align-items: center;
color: var(--section-secondary);
font-size: 0.84rem;
font-weight: 650;
}
.inverse-link:hover,
.inverse-link:focus-visible {
color: var(--section-ink);
}
.platforms-section {
background: var(--surface);
}
.platform-stories {
display: grid;
grid-template-columns: repeat(2, 1fr);
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
}
.platform-stories article {
display: grid;
grid-template-columns: 120px 1fr;
gap: 30px;
min-height: 360px;
padding: 52px 52px 52px 0;
border-right: 1px solid var(--line);
}
.platform-stories article:last-child {
padding-right: 0;
padding-left: 52px;
border-right: 0;
}
.platform-symbol {
display: grid;
width: 104px;
height: 104px;
align-self: start;
border: 1px solid var(--line);
border-radius: 24px;
background: var(--surface-soft);
color: var(--ink-secondary);
place-items: center;
}
.platform-symbol svg {
width: 48px;
height: 48px;
fill: none;
stroke: currentColor;
stroke-linecap: round;
stroke-linejoin: round;
stroke-width: 2.6;
}
.mac-symbol {
border-radius: 24px;
}
.platform-stories h3 {
margin: 26px 0 12px;
font-size: clamp(1.5rem, 2.5vw, 2.1rem);
letter-spacing: -0.035em;
line-height: 1.2;
}
html[data-lang="zh"] .platform-stories h3 {
letter-spacing: -0.02em;
}
.platform-stories p {
margin: 0;
color: var(--ink-secondary);
line-height: 1.75;
}
.platform-footnote {
margin: 20px 0 0;
color: var(--ink-tertiary);
font-size: 0.76rem;
text-align: center;
}
.start-section {
background: var(--canvas);
}
.split-heading {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.65fr);
gap: 80px;
align-items: end;
margin-bottom: 58px;
}
.split-heading h2 {
max-width: 760px;
margin: 0;
}
.split-heading > p {
margin: 0;
}
.setup-steps {
display: grid;
grid-template-columns: repeat(3, 1fr);
margin: 0;
padding: 0;
border-top: 1px solid var(--line-strong);
counter-reset: setup;
list-style: none;
}
.setup-steps li {
min-height: 260px;
padding: 30px 30px 30px 0;
border-right: 1px solid var(--line);
counter-increment: setup;
}
.setup-steps li:not(:first-child) {
padding-left: 30px;
}
.setup-steps li:last-child {
border-right: 0;
}
.setup-steps li::before {
display: block;
margin-bottom: 60px;
color: var(--ink-tertiary);
content: "0" counter(setup);
font-size: 0.7rem;
font-weight: 700;
}
.setup-steps h3 {
margin-bottom: 10px;
font-size: 1.3rem;
}
.setup-steps p {
margin: 0;
color: var(--ink-secondary);
font-size: 0.9rem;
line-height: 1.7;
}
.stable-strip {
display: grid;
grid-template-columns: auto 1fr;
gap: 48px;
align-items: center;
margin-top: 28px;
padding: 24px 28px;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--surface);
}
.stable-strip > span {
font-size: 0.82rem;
font-weight: 700;
}
.stable-strip ul {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin: 0;
padding: 0;
color: var(--ink-secondary);
font-size: 0.76rem;
list-style: none;
}
.stable-strip li {
padding-left: 13px;
border-left: 1px solid var(--line);
}
.faq-section {
background: var(--surface);
}
.faq-layout {
display: grid;
grid-template-columns: minmax(280px, 0.7fr) minmax(0, 1.3fr);
gap: clamp(70px, 10vw, 140px);
align-items: start;
}
.faq-layout h2 {
margin: 0;
}
.faq-list {
border-top: 1px solid var(--line);
}
.faq-item {
border-bottom: 1px solid var(--line);
}
.faq-item summary {
display: flex;
gap: 20px;
align-items: center;
justify-content: space-between;
padding: 23px 0;
cursor: pointer;
font-size: 1.05rem;
font-weight: 650;
list-style: none;
}
.faq-item summary::-webkit-details-marker {
display: none;
}
.faq-item summary::after {
color: var(--ink-tertiary);
content: "+";
font-size: 1.3rem;
font-weight: 400;
}
.faq-item[open] summary::after {
content: "";
}
.faq-item p {
padding: 0 0 23px;
color: var(--ink-secondary);
line-height: 1.7;
}
.download-section {
background: var(--surface);
padding-top: 0;
}
.download-panel {
--panel-ink: var(--ink);
--panel-secondary: var(--ink-secondary);
--panel-line: var(--line);
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 70px;
align-items: end;
padding: clamp(44px, 7vw, 80px);
border-radius: var(--radius-xl);
background: #e2e7eb;
color: var(--panel-ink);
}
html[data-theme="dark"] .download-panel {
--panel-ink: var(--inverse);
--panel-secondary: var(--inverse-secondary);
--panel-line: var(--inverse-line);
background: #151817;
}
.download-panel .eyebrow {
color: var(--panel-secondary);
}
.download-panel h2 {
max-width: 720px;
margin-bottom: 15px;
font-size: clamp(2.8rem, 4.8vw, 4.2rem);
letter-spacing: -0.055em;
line-height: 1.05;
}
html[data-lang="zh"] .download-panel h2 {
font-size: clamp(2.3rem, 3.8vw, 3.3rem);
letter-spacing: -0.03em;
line-height: 1.12;
}
.download-panel p:last-child {
max-width: 650px;
margin-bottom: 0;
color: var(--panel-secondary);
}
.download-actions {
max-width: 370px;
justify-content: flex-end;
}
.outline-action {
display: inline-flex;
gap: 8px;
align-items: center;
min-height: 48px;
padding: 0 16px;
border: 1px solid var(--panel-line);
border-radius: 10px;
color: var(--panel-secondary);
font-size: 0.82rem;
font-weight: 650;
}
.outline-action:hover,
.outline-action:focus-visible {
border-color: var(--line-strong);
color: var(--panel-ink);
}
.outline-action .material-symbols-rounded {
font-size: 19px;
}
.site-footer {
padding: 38px 0 48px;
background: var(--surface);
}
.footer-inner {
display: flex;
gap: 24px;
align-items: center;
justify-content: space-between;
width: var(--content);
margin: auto;
color: var(--ink-secondary);
font-size: 0.78rem;
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 17px;
}
:focus-visible {
outline: 3px solid var(--accent);
outline-offset: 3px;
}
@media (max-width: 1040px) {
:root {
--content: min(100% - 48px, 1200px);
}
.scene-layout,
.skills-layout {
grid-template-columns: minmax(0, 0.75fr) minmax(470px, 1.25fr);
gap: 54px;
}
.platform-stories article {
grid-template-columns: 1fr;
}
.platform-stories article:last-child {
padding-left: 40px;
}
.stable-strip {
grid-template-columns: 1fr;
gap: 16px;
}
}
@media (max-width: 860px) {
:root {
--content: min(100% - 36px, 1200px);
}
.nav-shell {
grid-template-columns: 1fr auto;
}
.nav-links {
display: none;
}
.icon-button.mobile-menu-button {
display: inline-grid;
}
.mobile-nav:not([hidden]) {
display: grid;
grid-template-columns: repeat(4, 1fr);
}
.stage-content,
.scene-layout,
.skills-layout,
.typing-story,
.styles-strip,
.split-heading,
.faq-layout,
.download-panel {
grid-template-columns: 1fr;
}
.stage-content {
min-height: auto;
}
.conversation {
min-height: 480px;
border-right: 0;
border-bottom: 1px solid var(--line);
}
.scene-copy {
max-width: 690px;
}
.typing-story.reverse .typing-visual {
order: 0;
border-bottom: 1px solid var(--line);
border-left: 0;
}
.typing-visual {
min-height: 420px;
border-right: 0;
border-bottom: 1px solid var(--line);
}
.story-copy {
min-height: 330px;
}
.styles-strip {
gap: 34px;
align-items: start;
}
.service-paths {
grid-template-columns: 1fr;
}
.service-paths article,
.service-paths article:first-child,
.service-paths article:last-child {
min-height: 300px;
padding: 30px 0;
border-right: 0;
border-bottom: 1px solid var(--section-line);
}
.service-paths article:last-child {
border-bottom: 0;
}
.service-paths .material-symbols-rounded {
margin: 28px 0 20px;
}
.privacy-proof {
align-items: flex-start;
flex-direction: column;
}
.platform-stories {
grid-template-columns: 1fr;
}
.platform-stories article,
.platform-stories article:last-child {
grid-template-columns: 120px 1fr;
min-height: auto;
padding: 40px 0;
border-right: 0;
border-bottom: 1px solid var(--line);
}
.platform-stories article:last-child {
border-bottom: 0;
}
.split-heading {
gap: 24px;
}
.download-panel {
align-items: start;
gap: 34px;
}
.download-actions {
justify-content: flex-start;
}
}
@media (max-width: 640px) {
:root {
--content: min(100% - 28px, 1200px);
--radius-xl: 24px;
--radius-lg: 20px;
}
.site-nav {
top: 8px;
}
.nav-shell {
min-height: 50px;
padding: 5px 5px 5px 10px;
border-radius: 14px;
}
.brand span {
display: none;
}
.mobile-nav {
border-radius: 14px;
}
.mobile-nav a {
padding: 10px 4px;
font-size: 0.76rem;
}
.hero {
min-height: 780px;
padding: 108px 0 86px;
}
.launch-pill {
margin-bottom: 54px;
font-size: 0.7rem;
}
.hero h1,
html[data-lang="zh"] .hero h1 {
font-size: clamp(2rem, 9vw, 2.2rem);
}
html[data-lang="zh"] .hero h1 > span {
white-space: nowrap;
}
.hero-copy {
font-size: 1rem;
}
.hero-actions {
flex-direction: column;
}
.hero-note {
max-width: 310px;
line-height: 1.6;
}
.scroll-cue {
white-space: nowrap;
}
.section {
padding: 82px 0;
}
.center-heading h2,
.scene-copy h2,
.split-heading h2,
.faq-layout h2,
html[data-lang="zh"] .center-heading h2,
html[data-lang="zh"] .scene-copy h2,
html[data-lang="zh"] .split-heading h2,
html[data-lang="zh"] .faq-layout h2 {
font-size: 2.2rem;
}
.stage-bar {
grid-template-columns: 1fr auto;
}
.stage-dots {
display: none;
}
.stage-status {
display: none;
}
.conversation {
min-height: 420px;
padding: 28px 20px;
}
.message-bubble {
font-size: 1rem;
}
.insert-preview {
padding: 18px;
}
.gesture-grid {
grid-template-columns: 1fr;
}
.gesture-grid article,
.gesture-grid article:not(:first-child) {
min-height: 120px;
padding: 23px 0;
border-right: 0;
border-bottom: 1px solid var(--line);
}
.gesture-grid article:last-child {
border-bottom: 0;
}
.voice-stage,
.skills-stage {
padding: 24px 20px;
}
.transcript-card {
min-height: 210px;
}
.waveform {
gap: 5px;
}
.typing-visual {
min-height: 350px;
padding: 28px 20px;
}
.story-copy {
min-height: 290px;
padding: 28px 22px;
}
.story-copy h3 {
margin-top: 54px;
}
.mini-keyboard {
gap: 4px;
}
.mini-keyboard span {
height: 34px;
font-size: 0.62rem;
}
.english-line {
font-size: 1.55rem;
}
.skills-stage {
min-height: 440px;
}
.skill-actions {
grid-template-columns: repeat(2, 1fr);
}
.styles-strip {
margin-top: 80px;
}
.style-options {
grid-template-columns: 1fr;
}
.privacy-proof h3 {
font-size: 1.08rem;
}
.platform-stories article,
.platform-stories article:last-child {
grid-template-columns: 1fr;
gap: 22px;
}
.platform-symbol {
width: 88px;
height: 88px;
border-radius: 21px;
}
.mac-symbol {
border-radius: 21px;
}
.platform-symbol svg {
width: 42px;
height: 42px;
}
.setup-steps {
grid-template-columns: 1fr;
}
.setup-steps li,
.setup-steps li:not(:first-child) {
min-height: auto;
padding: 25px 0;
border-right: 0;
border-bottom: 1px solid var(--line);
}
.setup-steps li::before {
margin-bottom: 34px;
}
.stable-strip {
padding: 22px;
}
.stable-strip ul {
grid-template-columns: repeat(2, 1fr);
}
.download-panel {
padding: 34px 22px;
}
.download-panel h2,
html[data-lang="zh"] .download-panel h2 {
font-size: 2.25rem;
}
.download-actions {
align-items: flex-start;
flex-direction: column;
}
.footer-inner {
align-items: flex-start;
flex-direction: column;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*,
*::before,
*::after {
scroll-behavior: auto !important;
transition-duration: 0.01ms !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}