.flow-home[data-effects='ready'] [data-reveal] {
opacity: 0;
transform: translateY(18px);
transition:
opacity 620ms ease,
transform 620ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.flow-home[data-effects='ready'] [data-reveal].is-visible {
opacity: 1;
transform: translateY(0);
}
.flow-effects-anchor {
position: absolute;
width: 0;
height: 0;
pointer-events: none;
}
.flow-home {
position: relative;
min-width: 0;
overflow: clip;
background: var(--flow-bg);
color: var(--flow-text);
}
.flow-home :where(a, button) {
-webkit-tap-highlight-color: transparent;
}
.flow-button {
display: inline-flex;
min-height: 46px;
padding: 0 17px;
border: 1px solid transparent;
border-radius: 10px;
align-items: center;
justify-content: center;
gap: 8px;
font-size: 14px;
font-weight: 670;
text-decoration: none;
transition:
background 160ms ease,
border-color 160ms ease,
color 160ms ease,
transform 160ms ease;
}
.flow-button:hover {
transform: translateY(-1px);
text-decoration: none;
}
.flow-button.is-primary {
background: var(--flow-accent);
color: #fff;
box-shadow: 0 10px 24px -12px rgb(20 86 240 / 68%);
}
.flow-button.is-primary:hover {
background: var(--flow-accent-strong);
color: #fff;
}
.flow-button.is-secondary {
border-color: var(--flow-line-strong);
background: var(--flow-surface);
color: var(--flow-text);
}
.flow-button.is-secondary:hover {
border-color: var(--flow-border-strong);
background: var(--flow-paper);
color: var(--flow-text);
}
.flow-hero {
position: relative;
isolation: isolate;
display: grid;
width: min(100%, var(--flow-max-width));
min-height: calc(100dvh - var(--rp-nav-height));
margin: 0 auto;
padding: 70px 48px 58px;
border-right: 1px solid var(--flow-line);
border-left: 1px solid var(--flow-line);
background: #f8fbff;
align-items: center;
gap: clamp(42px, 6vw, 88px);
grid-template-columns: minmax(0, 0.86fr) minmax(520px, 1.14fr);
}
.flow-hero::before {
position: absolute;
z-index: -1;
top: -220px;
right: -160px;
width: 650px;
height: 650px;
border: 1px solid rgb(20 86 240 / 10%);
border-radius: 50%;
box-shadow:
inset 0 0 0 92px rgb(255 255 255 / 34%),
0 30px 90px rgb(20 86 240 / 8%);
content: '';
pointer-events: none;
transform: rotate(-12deg);
}
.flow-hero__copy {
position: relative;
z-index: 1;
min-width: 0;
}
.flow-hero__meta {
display: flex;
margin-bottom: 34px;
align-items: center;
justify-content: space-between;
gap: 18px;
}
.flow-hero__meta > span {
display: inline-flex;
min-height: 38px;
padding: 0 14px;
border: 1px solid #c9dafb;
border-radius: 999px;
background: rgb(255 255 255 / 88%);
color: var(--flow-accent);
align-items: center;
font-family: var(--flow-mono);
font-size: 9px;
font-weight: 720;
letter-spacing: 0.1em;
white-space: nowrap;
}
.flow-hero__meta > span i {
margin: 0 6px;
color: #8ba5d3;
font-style: normal;
}
.flow-hero__meta nav {
display: inline-flex;
flex: 0 0 auto;
padding: 3px;
border: 1px solid var(--flow-line);
border-radius: 8px;
background: #f7f9fc;
}
.flow-hero__meta nav a {
display: inline-flex;
min-width: 42px;
height: 28px;
padding: 0 9px;
border-radius: 5px;
color: var(--flow-faint);
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 700;
text-decoration: none;
}
.flow-hero__meta nav a[aria-current='page'] {
background: var(--flow-surface);
color: var(--flow-accent);
box-shadow: 0 2px 8px rgb(31 65 116 / 10%);
}
.flow-hero h1 {
max-width: 680px;
margin: 0;
color: var(--flow-text);
font-size: clamp(50px, 4.7vw, 70px);
font-weight: 745;
letter-spacing: -0.04em;
line-height: 0.98;
text-wrap: balance;
}
.flow-hero h1 > span,
.flow-hero h1 > strong {
display: block;
}
.flow-hero h1 > span {
color: var(--flow-accent);
font-size: 0.72em;
font-weight: 720;
letter-spacing: -0.025em;
line-height: 1.25;
}
.flow-hero h1 > strong {
margin-top: 12px;
font-weight: inherit;
}
.flow-hero__title-line {
display: block;
}
.flow-hero__copy > p {
max-width: 620px;
margin: 28px 0 0;
color: var(--flow-muted);
font-size: 16px;
line-height: 1.72;
}
.flow-hero__actions {
display: flex;
margin-top: 36px;
align-items: center;
flex-wrap: wrap;
gap: 10px;
}
.flow-hero-canvas {
--a3s-panel: #fff;
--a3s-panel-soft: #f4f7fb;
--a3s-bg: #f5f8fc;
--a3s-line: #dbe3ed;
--a3s-line-strong: #c8d3e1;
--a3s-blue: var(--flow-accent);
--a3s-ui-font: var(--flow-font);
--flow-hero-cycle: 13.5s;
position: relative;
min-width: 0;
overflow: hidden;
border: 1px solid var(--flow-line-strong);
border-radius: 20px;
background: var(--flow-surface);
box-shadow:
0 30px 70px -42px rgb(15 35 70 / 55%),
0 8px 24px -18px rgb(15 35 70 / 35%);
}
.flow-hero-canvas > header {
display: flex;
min-height: 56px;
padding: 0 13px;
border-bottom: 1px solid var(--flow-line);
align-items: center;
justify-content: space-between;
gap: 12px;
}
.flow-hero-canvas__identity {
display: inline-flex;
min-width: 0;
color: var(--flow-text);
align-items: center;
gap: 9px;
}
.flow-hero-canvas__identity > span:first-child {
display: grid;
width: 30px;
height: 30px;
flex: 0 0 auto;
border-radius: 8px;
background: var(--flow-accent-soft);
color: var(--flow-accent);
place-items: center;
}
.flow-hero-canvas__identity > span:last-child {
display: grid;
min-width: 0;
gap: 2px;
}
.flow-hero-canvas__identity strong {
overflow: hidden;
font-size: 12px;
font-weight: 690;
text-overflow: ellipsis;
white-space: nowrap;
}
.flow-hero-canvas__identity small {
display: flex;
min-width: 0;
align-items: center;
gap: 5px;
color: var(--flow-faint);
font-size: 8px;
}
.flow-hero-canvas__identity small i {
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--flow-line-strong);
}
.flow-hero-canvas__identity svg {
color: var(--flow-accent);
}
.flow-hero-canvas__actions {
display: flex;
flex: 0 0 auto;
align-items: center;
gap: 5px;
}
.flow-hero-canvas__actions > span {
display: inline-flex;
min-height: 30px;
padding: 0 9px;
border: 1px solid var(--flow-line);
border-radius: 7px;
background: var(--flow-surface);
align-items: center;
gap: 5px;
color: var(--flow-muted);
font-size: 10px;
font-weight: 680;
}
.flow-hero-canvas__actions .is-valid {
border-color: color-mix(in srgb, var(--flow-success) 28%, var(--flow-line));
background: var(--flow-success-soft);
color: var(--flow-success);
}
.flow-hero-canvas__actions .is-run {
border-color: var(--flow-accent);
background: var(--flow-accent);
color: #fff;
}
.flow-hero-canvas__board {
position: relative;
height: 466px;
overflow: hidden;
background-color: #f8faff;
background-image: radial-gradient(circle, #ced8e7 1px, transparent 1px);
background-size: 18px 18px;
}
.flow-hero-canvas__edges {
position: absolute;
z-index: 1;
inset: 0;
width: 100%;
height: 100%;
}
.flow-hero-canvas__edges path {
fill: none;
stroke: #a4b4c9;
stroke-linecap: round;
stroke-width: 1.5;
vector-effect: non-scaling-stroke;
}
.flow-hero-canvas__rail {
position: absolute;
z-index: 5;
top: 82px;
left: 13px;
display: flex;
width: 38px;
padding: 4px;
border: 1px solid var(--flow-line);
border-radius: 10px;
background: rgb(255 255 255 / 96%);
box-shadow: 0 8px 18px -12px rgb(15 35 70 / 45%);
flex-direction: column;
gap: 3px;
}
.flow-hero-canvas__rail span {
display: grid;
width: 28px;
height: 28px;
border-radius: 7px;
color: var(--flow-muted);
place-items: center;
}
.flow-hero-canvas__rail span.is-primary {
background: var(--flow-accent);
color: #fff;
}
.flow-hero-canvas__rail span.is-active {
background: var(--flow-accent-soft);
color: var(--flow-accent-strong);
}
.flow-hero-canvas__rail svg {
width: 14px;
height: 14px;
}
.flow-hero-canvas__rail i {
width: 21px;
height: 1px;
margin: 2px auto;
background: var(--flow-line);
}
.flow-hero-canvas__node {
--flow-hero-node-scale: 0.72;
position: absolute;
z-index: 3;
width: 240px;
transform: scale(var(--flow-hero-node-scale));
transform-origin: top left;
}
.flow-hero-canvas__node.is-1 {
top: 136px;
left: 78px;
}
.flow-hero-canvas__node.is-2 {
top: 136px;
left: 292px;
}
.flow-hero-canvas__node.is-3 {
top: 136px;
left: 506px;
}
.flow-hero-canvas__cursor {
position: absolute;
z-index: 12;
top: 168px;
left: 416px;
display: grid;
width: 23px;
height: 23px;
border: 1px solid rgb(255 255 255 / 82%);
border-radius: 7px;
background: var(--flow-text);
box-shadow: 0 5px 13px rgb(15 35 70 / 22%);
color: #fff;
place-items: center;
transform: rotate(-8deg);
}
.flow-hero-canvas__inspector {
position: absolute;
z-index: 10;
top: 0;
right: 0;
bottom: 0;
display: flex;
width: 242px;
border-left: 1px solid var(--flow-line);
background: var(--flow-surface);
box-shadow: -16px 0 30px -24px rgb(15 35 70 / 42%);
flex-direction: column;
}
.flow-hero-canvas__inspector > header {
display: grid;
min-height: 72px;
padding: 12px;
border-bottom: 1px solid var(--flow-line);
align-items: center;
gap: 8px;
grid-template-columns: 30px minmax(0, 1fr) 22px;
}
.flow-hero-canvas__inspector > header > span {
display: grid;
width: 30px;
height: 30px;
border-radius: 8px;
background: var(--flow-accent-soft);
color: var(--flow-accent);
place-items: center;
}
.flow-hero-canvas__inspector > header > div {
display: grid;
min-width: 0;
gap: 3px;
}
.flow-hero-canvas__inspector > header strong {
overflow: hidden;
font-size: 12px;
font-weight: 690;
text-overflow: ellipsis;
white-space: nowrap;
}
.flow-hero-canvas__inspector > header small {
display: -webkit-box;
overflow: hidden;
color: var(--flow-faint);
font-size: 9px;
line-height: 1.35;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.flow-hero-canvas__inspector > header > svg {
color: var(--flow-faint);
}
.flow-hero-canvas__tabs {
display: flex;
min-height: 40px;
padding: 0 13px;
border-bottom: 1px solid var(--flow-line);
align-items: end;
gap: 18px;
}
.flow-hero-canvas__tabs :is(strong, span) {
position: relative;
display: inline-flex;
min-height: 39px;
color: var(--flow-faint);
align-items: center;
font-size: 10px;
font-weight: 650;
}
.flow-hero-canvas__tabs strong {
color: var(--flow-text);
}
.flow-hero-canvas__tabs strong::after {
position: absolute;
right: 0;
bottom: -1px;
left: 0;
height: 2px;
border-radius: 2px 2px 0 0;
background: var(--flow-accent);
content: '';
}
.flow-hero-canvas__inspector > section {
display: grid;
padding: 16px 13px;
gap: 14px;
}
.flow-hero-canvas__inspector label {
display: grid;
gap: 7px;
}
.flow-hero-canvas__inspector label > span {
color: var(--flow-muted);
font-size: 9px;
font-weight: 650;
}
.flow-hero-canvas__field-value {
position: relative;
display: flex;
min-height: 34px;
padding: 0 10px;
overflow: hidden;
border: 1px solid var(--flow-line-strong);
border-radius: 7px;
background: var(--flow-surface);
align-items: center;
font-family: var(--flow-mono);
font-size: 9px;
font-weight: 570;
}
.flow-hero-canvas__field-value :is(i, em) {
position: absolute;
color: var(--flow-text);
font-style: normal;
}
.flow-hero-canvas__field-value i {
opacity: 0;
}
.flow-hero-canvas__retry {
display: flex;
min-height: 46px;
padding-top: 12px;
border-top: 1px solid var(--flow-line);
align-items: center;
justify-content: space-between;
gap: 10px;
}
.flow-hero-canvas__retry > span {
display: grid;
min-width: 0;
gap: 3px;
}
.flow-hero-canvas__retry strong {
font-size: 10px;
font-weight: 660;
}
.flow-hero-canvas__retry small {
color: var(--flow-faint);
font-size: 8px;
line-height: 1.35;
}
.flow-hero-canvas__retry > i {
position: relative;
width: 28px;
height: 16px;
flex: 0 0 auto;
border-radius: 999px;
background: var(--flow-accent);
}
.flow-hero-canvas__retry > i::after {
position: absolute;
top: 2px;
right: 2px;
width: 12px;
height: 12px;
border-radius: 50%;
background: #fff;
box-shadow: 0 1px 3px rgb(15 35 70 / 22%);
content: '';
}
.flow-hero-canvas__retry-fields {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 6px;
}
.flow-hero-canvas__retry-fields span,
.flow-hero-canvas__next {
display: flex;
min-height: 34px;
padding: 0 9px;
border: 1px solid var(--flow-line);
border-radius: 7px;
background: var(--flow-bg);
align-items: center;
color: var(--flow-muted);
font-size: 8px;
}
.flow-hero-canvas__next {
gap: 6px;
background: var(--flow-surface);
color: var(--flow-accent-strong);
}
.flow-hero-canvas__inspector > footer {
display: flex;
min-height: 42px;
margin-top: auto;
padding: 0 13px;
border-top: 1px solid var(--flow-line);
align-items: center;
gap: 6px;
color: var(--flow-success);
font-size: 8px;
font-weight: 630;
}
.flow-hero-canvas__toast {
position: absolute;
z-index: 13;
bottom: 18px;
left: calc(50% - 102px);
display: inline-flex;
min-height: 34px;
padding: 0 11px;
border: 1px solid
color-mix(in srgb, var(--flow-success) 25%, var(--flow-line));
border-radius: 8px;
background: var(--flow-surface);
box-shadow: 0 8px 20px -13px rgb(15 35 70 / 52%);
align-items: center;
gap: 6px;
color: var(--flow-success);
font-size: 9px;
font-weight: 650;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__node.is-1 {
animation: flow-hero-node-1 var(--flow-hero-cycle)
cubic-bezier(0.16, 1, 0.3, 1) infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__node.is-2 {
animation: flow-hero-node-2 var(--flow-hero-cycle)
cubic-bezier(0.16, 1, 0.3, 1) infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__node.is-3 {
animation: flow-hero-node-3 var(--flow-hero-cycle)
cubic-bezier(0.16, 1, 0.3, 1) infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__edges .is-edge-1 {
animation: flow-hero-edge-1 var(--flow-hero-cycle) ease-out infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__edges .is-edge-2 {
animation: flow-hero-edge-2 var(--flow-hero-cycle) ease-out infinite both;
}
.flow-hero-canvas.is-motion-active
.flow-hero-canvas__node.is-target
.a3s-form-flow-node-preview {
animation: flow-hero-node-select var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__cursor {
animation: flow-hero-cursor var(--flow-hero-cycle)
cubic-bezier(0.2, 0.75, 0.2, 1) infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__inspector {
animation: flow-hero-inspector var(--flow-hero-cycle)
cubic-bezier(0.16, 1, 0.3, 1) infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__field-value i {
animation: flow-hero-field-before var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__field-value em {
animation: flow-hero-field-after var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__retry > i {
animation: flow-hero-retry-switch var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__retry > i::after {
animation: flow-hero-retry-knob var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__retry-fields,
.flow-hero-canvas.is-motion-active .flow-hero-canvas__next,
.flow-hero-canvas.is-motion-active .flow-hero-canvas__inspector > footer {
animation: flow-hero-config-reveal var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__actions .is-run {
animation: flow-hero-run-button var(--flow-hero-cycle) ease infinite both;
}
.flow-hero-canvas.is-motion-active .flow-hero-canvas__toast {
animation: flow-hero-toast var(--flow-hero-cycle)
cubic-bezier(0.16, 1, 0.3, 1) infinite both;
}
@keyframes flow-hero-node-1 {
0%,
4% {
opacity: 0;
filter: blur(5px);
transform: translateY(12px) scale(var(--flow-hero-node-scale));
}
8%,
100% {
opacity: 1;
filter: blur(0);
transform: translateY(0) scale(var(--flow-hero-node-scale));
}
}
@keyframes flow-hero-node-2 {
0%,
17% {
opacity: 0;
filter: blur(5px);
transform: translateY(12px) scale(var(--flow-hero-node-scale));
}
21%,
100% {
opacity: 1;
filter: blur(0);
transform: translateY(0) scale(var(--flow-hero-node-scale));
}
}
@keyframes flow-hero-node-3 {
0%,
33% {
opacity: 0;
filter: blur(5px);
transform: translateY(12px) scale(var(--flow-hero-node-scale));
}
37%,
100% {
opacity: 1;
filter: blur(0);
transform: translateY(0) scale(var(--flow-hero-node-scale));
}
}
@keyframes flow-hero-edge-1 {
0%,
10% {
opacity: 0;
stroke-dasharray: 1;
stroke-dashoffset: 1;
}
15%,
100% {
opacity: 1;
stroke-dasharray: 1;
stroke-dashoffset: 0;
}
}
@keyframes flow-hero-edge-2 {
0%,
26% {
opacity: 0;
stroke-dasharray: 1;
stroke-dashoffset: 1;
}
31%,
100% {
opacity: 1;
stroke-dasharray: 1;
stroke-dashoffset: 0;
}
}
@keyframes flow-hero-node-select {
0%,
42% {
border-color: var(--a3s-form-line-strong);
box-shadow: 0 2px 5px rgb(20 27 43 / 6%);
}
47%,
100% {
border-color: var(--flow-accent);
box-shadow:
inset 0 0 0 1px #fff,
0 0 0 1px var(--flow-accent),
0 4px 10px rgb(20 86 240 / 14%);
}
}
@keyframes flow-hero-cursor {
0%,
3% {
opacity: 0;
transform: translate(-376px, -73px) rotate(-8deg);
}
6% {
opacity: 1;
transform: translate(-376px, -73px) rotate(-8deg);
}
18% {
opacity: 1;
transform: translate(-185px, 5px) rotate(-8deg);
}
42% {
opacity: 1;
transform: translate(0, 0) rotate(-8deg);
}
54% {
opacity: 1;
transform: translate(158px, -76px) rotate(-8deg);
}
63% {
opacity: 1;
transform: translate(166px, 70px) rotate(-8deg);
}
72% {
opacity: 1;
transform: translate(177px, 148px) rotate(-8deg);
}
85% {
opacity: 1;
transform: translate(160px, -151px) rotate(-8deg);
}
91%,
100% {
opacity: 0;
transform: translate(160px, -151px) rotate(-8deg);
}
}
@keyframes flow-hero-inspector {
0%,
45% {
opacity: 0;
transform: translateX(100%);
}
51%,
100% {
opacity: 1;
transform: translateX(0);
}
}
@keyframes flow-hero-field-before {
0%,
59% {
opacity: 1;
transform: translateY(0);
}
64%,
100% {
opacity: 0;
transform: translateY(-7px);
}
}
@keyframes flow-hero-field-after {
0%,
59% {
opacity: 0;
transform: translateY(7px);
}
64%,
100% {
opacity: 1;
transform: translateY(0);
}
}
@keyframes flow-hero-retry-switch {
0%,
67% {
background: var(--flow-line-strong);
}
72%,
100% {
background: var(--flow-accent);
}
}
@keyframes flow-hero-retry-knob {
0%,
67% {
right: 14px;
}
72%,
100% {
right: 2px;
}
}
@keyframes flow-hero-config-reveal {
0%,
70% {
opacity: 0;
transform: translateY(6px);
}
76%,
100% {
opacity: 1;
transform: translateY(0);
}
}
@keyframes flow-hero-run-button {
0%,
82%,
92%,
100% {
box-shadow: none;
transform: translateY(0);
}
86% {
box-shadow: 0 0 0 4px
color-mix(in srgb, var(--flow-accent) 16%, transparent);
transform: translateY(-1px);
}
}
@keyframes flow-hero-toast {
0%,
87% {
opacity: 0;
filter: blur(3px);
transform: translateY(8px) scale(0.97);
}
92%,
100% {
opacity: 1;
filter: blur(0);
transform: translateY(0) scale(1);
}
}
.flow-assurance {
display: grid;
width: min(100%, var(--flow-max-width));
min-height: 126px;
margin: 0 auto;
overflow: hidden;
border: 1px solid var(--flow-line);
background: var(--flow-surface);
box-shadow: 0 12px 30px -28px rgb(15 35 70 / 42%);
grid-template-columns: minmax(190px, 0.62fr) minmax(0, 3.38fr);
}
.flow-assurance > strong {
display: flex;
padding: 24px 28px;
align-items: center;
color: var(--flow-text);
font-size: 13px;
font-weight: 700;
line-height: 1.5;
}
.flow-assurance__items {
display: grid;
min-width: 0;
border-left: 1px solid var(--flow-line);
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.flow-assurance article {
display: flex;
min-width: 0;
min-height: 124px;
padding: 20px 18px;
align-items: center;
gap: 12px;
}
.flow-assurance article + article {
border-left: 1px solid var(--flow-line);
}
.flow-assurance article > span {
display: grid;
width: 34px;
height: 34px;
flex: 0 0 auto;
border-radius: 50%;
background: var(--flow-accent-soft);
color: var(--flow-accent);
place-items: center;
box-shadow: 0 8px 20px rgb(20 86 240 / 12%);
}
.flow-assurance article div {
min-width: 0;
}
.flow-assurance strong,
.flow-assurance small {
display: block;
}
.flow-assurance strong {
color: var(--flow-text);
font-size: 12px;
font-weight: 690;
}
.flow-assurance small {
margin-top: 5px;
color: var(--flow-faint);
font-size: 10px;
line-height: 1.5;
}
.flow-chapter {
width: min(100%, 1280px);
margin: 0 auto;
padding: 144px 48px;
scroll-margin-top: var(--rp-nav-height);
}
.flow-chapter__meta {
display: flex;
margin-bottom: 28px;
align-items: center;
gap: 11px;
}
.flow-chapter__meta span,
.flow-chapter__meta strong {
font-family: var(--flow-mono);
font-size: 10px;
font-weight: 760;
letter-spacing: 0.1em;
}
.flow-chapter__meta span {
color: var(--flow-accent);
}
.flow-chapter__meta strong {
color: var(--flow-faint);
}
.flow-chapter__meta i {
width: 36px;
height: 1px;
background: var(--flow-line-strong);
}
.flow-chapter h2,
.flow-final h2 {
margin: 0;
color: var(--flow-text);
font-size: clamp(38px, 4.8vw, 62px);
font-weight: 745;
letter-spacing: -0.04em;
line-height: 1.04;
text-wrap: balance;
}
.flow-chapter__copy > p,
.flow-chapter__heading p {
color: var(--flow-muted);
font-size: 16px;
line-height: 1.75;
}
.flow-chapter__copy > p:first-of-type {
margin: 26px 0 0;
}
.flow-chapter__copy > p + p {
margin: 16px 0 0;
}
.flow-chapter__copy > a,
.flow-chapter__heading a {
display: inline-flex;
margin-top: 24px;
color: var(--flow-accent-strong);
align-items: center;
gap: 6px;
font-size: 13px;
font-weight: 680;
text-decoration: none;
}
.flow-chapter__copy > a:hover,
.flow-chapter__heading a:hover {
text-decoration: underline;
text-underline-offset: 4px;
}
.flow-chapter__heading {
margin-bottom: 58px;
max-width: 840px;
}
.flow-chapter__heading > p,
.flow-chapter__heading > div > p {
margin: 24px 0 0;
}
.flow-chapter__heading > div > p + p {
margin-top: 14px;
}
.flow-engine-chapter {
display: grid;
align-items: center;
gap: clamp(48px, 8vw, 108px);
grid-template-columns: minmax(0, 0.76fr) minmax(480px, 1.24fr);
}
.flow-engine-chapter > [data-reveal] {
min-width: 0;
}
.flow-recovery {
min-width: 0;
overflow: hidden;
border: 1px solid var(--flow-line-strong);
border-radius: 18px;
background: var(--flow-surface);
box-shadow: 0 24px 52px -38px rgb(15 35 70 / 48%);
}
.flow-recovery > header {
display: flex;
min-height: 54px;
padding: 0 17px;
border-bottom: 1px solid var(--flow-line);
align-items: center;
justify-content: space-between;
gap: 12px;
}
.flow-recovery > header strong {
font-size: 12px;
font-weight: 690;
}
.flow-recovery > header span {
color: var(--flow-faint);
font-family: var(--flow-mono);
font-size: 9px;
}
.flow-recovery__tabs {
display: grid;
padding: 12px;
border-bottom: 1px solid var(--flow-line);
background: var(--flow-bg);
gap: 7px;
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.flow-recovery__tabs button {
display: grid;
min-width: 0;
min-height: 70px;
padding: 10px;
border: 1px solid transparent;
border-radius: 9px;
background: transparent;
cursor: pointer;
text-align: left;
}
.flow-recovery__tabs button:hover {
border-color: var(--flow-line);
background: var(--flow-surface);
}
.flow-recovery__tabs button[aria-selected='true'] {
border-color: color-mix(in srgb, var(--flow-accent) 26%, var(--flow-line));
background: var(--flow-accent-soft);
}
.flow-recovery__tabs b {
color: var(--flow-faint);
font-family: var(--flow-mono);
font-size: 9px;
}
.flow-recovery__tabs span {
margin-top: 7px;
color: var(--flow-text);
font-size: 11px;
font-weight: 660;
}
.flow-recovery__detail {
display: grid;
min-height: 230px;
padding: 28px;
align-content: center;
gap: 18px;
}
.flow-recovery__detail small {
color: var(--flow-accent-strong);
font-size: 11px;
font-weight: 700;
}
.flow-recovery__detail p {
max-width: 54ch;
margin: 7px 0 0;
color: var(--flow-muted);
font-size: 14px;
line-height: 1.65;
}
.flow-recovery__detail > code {
display: block;
padding: 13px 15px;
border: 1px solid #263653;
border-radius: 9px;
background: var(--flow-code);
color: var(--flow-code-text);
font-family: var(--flow-mono);
font-size: 11px;
}
.flow-recovery__detail output {
display: inline-flex;
color: var(--flow-success);
align-items: center;
gap: 7px;
font-size: 11px;
font-weight: 640;
}
.flow-authoring-chapter {
width: 100%;
max-width: none;
padding-right: max(48px, calc((100vw - 1280px) / 2 + 48px));
padding-left: max(48px, calc((100vw - 1280px) / 2 + 48px));
border-top: 1px solid var(--flow-line);
border-bottom: 1px solid var(--flow-line);
background: var(--flow-surface);
}
.flow-authoring-chapter .flow-chapter__heading,
.flow-developer-chapter .flow-chapter__heading,
.flow-architecture-chapter .flow-chapter__heading {
max-width: 1184px;
margin-right: auto;
margin-left: auto;
}
.flow-catalog-visual {
--a3s-panel: #fff;
--a3s-panel-soft: #f3f6fa;
--a3s-bg: #f5f8fc;
--a3s-line: #dbe3ed;
--a3s-line-strong: #c8d3e1;
--a3s-blue: var(--flow-accent);
--a3s-ui-font: var(--flow-font);
display: grid;
max-width: 1184px;
min-height: 540px;
margin: 0 auto;
overflow: hidden;
border: 1px solid var(--flow-line-strong);
border-radius: 18px;
background: var(--flow-bg);
box-shadow: 0 28px 58px -44px rgb(15 35 70 / 50%);
grid-template-columns: 190px minmax(300px, 1fr) 310px;
}
.flow-catalog-visual > aside {
padding: 18px 12px;
border-right: 1px solid var(--flow-line);
}
.flow-catalog-visual > aside > strong {
display: block;
padding: 0 9px 12px;
color: var(--flow-faint);
font-family: var(--flow-mono);
font-size: 9px;
font-weight: 700;
letter-spacing: 0.07em;
text-transform: uppercase;
}
.flow-catalog-visual > aside button {
display: flex;
width: 100%;
min-height: 54px;
padding: 9px 10px;
border: 1px solid transparent;
border-radius: 9px;
background: transparent;
cursor: pointer;
flex-direction: column;
gap: 3px;
text-align: left;
}
.flow-catalog-visual > aside button + button {
margin-top: 3px;
}
.flow-catalog-visual > aside button:hover {
border-color: var(--flow-line);
background: var(--flow-surface);
}
.flow-catalog-visual > aside button[aria-current='true'] {
border-color: color-mix(in srgb, var(--flow-accent) 26%, var(--flow-line));
background: var(--flow-accent-soft);
}
.flow-catalog-visual > aside button span {
color: var(--flow-text);
font-size: 12px;
font-weight: 670;
}
.flow-catalog-visual > aside button small {
color: var(--flow-faint);
font-size: 9px;
}
.flow-catalog-visual__canvas {
display: flex;
min-width: 0;
border-right: 1px solid var(--flow-line);
flex-direction: column;
}
.flow-catalog-visual__canvas > header,
.flow-catalog-visual > section > header {
display: flex;
min-height: 52px;
padding: 0 15px;
border-bottom: 1px solid var(--flow-line);
background: var(--flow-surface);
color: var(--flow-muted);
align-items: center;
justify-content: space-between;
gap: 10px;
font-size: 10px;
font-weight: 670;
}
.flow-catalog-visual__canvas > header code {
color: var(--flow-accent-strong);
font-family: var(--flow-mono);
font-size: 9px;
}
.flow-catalog-visual__canvas > div {
display: grid;
flex: 1 1 auto;
padding: 48px 28px;
background-color: #f8faff;
background-image: radial-gradient(circle, #ccd7e6 1px, transparent 1px);
background-size: 21px 21px;
place-items: center;
}
.flow-catalog-visual > section {
min-width: 0;
background: var(--flow-surface);
}
.flow-catalog-visual__identity {
padding: 22px 18px;
border-bottom: 1px solid var(--flow-line);
}
.flow-catalog-visual__identity b {
font-size: 15px;
font-weight: 710;
}
.flow-catalog-visual__identity p {
margin: 7px 0 0;
color: var(--flow-muted);
font-size: 11px;
line-height: 1.55;
}
.flow-catalog-visual > section dl {
margin: 0;
padding: 8px 18px 18px;
}
.flow-catalog-visual > section dl > div {
display: grid;
padding: 12px 0;
border-bottom: 1px solid var(--flow-line);
gap: 8px;
grid-template-columns: minmax(0, 1fr) minmax(80px, 0.8fr);
}
.flow-catalog-visual > section dt,
.flow-catalog-visual > section dd {
min-width: 0;
margin: 0;
font-size: 10px;
}
.flow-catalog-visual > section dt {
color: var(--flow-muted);
font-weight: 620;
}
.flow-catalog-visual > section dd {
overflow: hidden;
color: var(--flow-text);
font-family: var(--flow-mono);
text-align: right;
text-overflow: ellipsis;
white-space: nowrap;
}