:root { --bg: #f8fafc; --bg-alt: #f1f5f9; --surface: #ffffff; --ink: #0f172a; --ink-2: #334155; --muted: #64748b; --line: #e2e8f0; --line-2: #cbd5e1; --accent: #4f46e5; --accent-ink: #ffffff; --accent-soft: #eef2ff; --code-bg: #0f172a; --code-ink: #e2e8f0; --code-muted: #64748b; --mark: #0f172a; --api-bg: #dcfce7; --api-ink: #166534; --local-bg: #e0f2fe; --local-ink: #075985; --ui-bg: #fef3c7; --ui-ink: #92400e; --you-bg: #fce7f3; --you-ink: #9d174d; --you-line: #f9a8d4; --shadow: 0 1px 2px rgba(15, 23, 42, .06), 0 8px 24px -12px rgba(15, 23, 42, .18); --radius: 14px; --grid: rgb(15 23 42 / .055); --ok: #15803d; --str: #0f766e; --pv-bg: #f8fafc; --gutter: 16px; --font: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; } @media (prefers-color-scheme: dark) { :root { --bg: #0b1120; --bg-alt: #0f172a; --surface: #131c2f; --ink: #f1f5f9; --ink-2: #cbd5e1; --muted: #94a3b8; --line: #1e293b; --line-2: #334155; --accent: #818cf8; --accent-ink: #0b1120; --accent-soft: #1e1b4b; --code-bg: #060a14; --mark: #f1f5f9; --api-bg: #14532d; --api-ink: #86efac; --local-bg: #0c4a6e; --local-ink: #7dd3fc; --ui-bg: #451a03; --ui-ink: #fcd34d; --you-bg: #500724; --you-ink: #f9a8d4; --you-line: #9d174d; --shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 12px 32px -16px rgba(0, 0, 0, .7); --grid: rgb(148 163 184 / .07); --ok: #4ade80; --str: #5eead4; --pv-bg: #0e1626; } } *, *::before, *::after { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: 72px; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } } body { margin: 0; background: var(--bg); color: var(--ink); font: 16px/1.6 var(--font); overflow-x: clip; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } img, video, svg { max-width: 100%; height: auto; display: block; } /* icons: Phosphor's own SVG files and the simple-icons store marks (site/img/icons, vendored by tools/site-icons.ts) as masks in the text colour */ .ic { display: inline-block; flex: none; width: 1em; height: 1em; background-color: currentColor; -webkit-mask: none center / contain no-repeat; mask: none center / contain no-repeat; } .ic-caret-right { -webkit-mask-image: url(img/icons/caret-right.svg); mask-image: url(img/icons/caret-right.svg); } .ic-play { -webkit-mask-image: url(img/icons/play.svg); mask-image: url(img/icons/play.svg); } .ic-user { -webkit-mask-image: url(img/icons/user.svg); mask-image: url(img/icons/user.svg); } .ic-squares-four { -webkit-mask-image: url(img/icons/squares-four.svg); mask-image: url(img/icons/squares-four.svg); } .ic-briefcase { -webkit-mask-image: url(img/icons/briefcase.svg); mask-image: url(img/icons/briefcase.svg); } .ic-appstore { -webkit-mask-image: url(img/icons/appstore.svg); mask-image: url(img/icons/appstore.svg); } .ic-googleplay { -webkit-mask-image: url(img/icons/googleplay.svg); mask-image: url(img/icons/googleplay.svg); } a { color: var(--accent); text-underline-offset: 3px; } a:hover { text-decoration-thickness: 2px; } :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 6px; } code { font-family: var(--mono); font-size: .88em; } :not(pre) > code { background: var(--accent-soft); color: var(--ink); padding: .1em .38em; border-radius: 5px; overflow-wrap: anywhere; } h1, h2, h3, h4 { line-height: 1.15; letter-spacing: -.02em; margin: 0; text-wrap: balance; } p { margin: 0; } .wrap { width: 100%; max-width: 1120px; margin: 0 auto; padding: 0 var(--gutter); } @media (min-width: 720px) { :root { --gutter: 28px; } } .skip { position: absolute; left: -9999px; top: 8px; background: var(--ink); color: var(--bg); padding: 8px 12px; border-radius: 8px; z-index: 100; } .skip:focus { left: 8px; } /* header */ .top { position: sticky; top: 0; z-index: 50; background: var(--bg); box-shadow: 0 6px 16px -12px rgb(0 0 0 / .35); border-bottom: 1px solid var(--line); } .top-in { display: flex; align-items: center; justify-content: space-between; height: 60px; gap: 12px; } .brand { display: inline-flex; align-items: center; gap: 10px; color: var(--ink); text-decoration: none; font-weight: 700; letter-spacing: -.01em; font-size: 17px; } .mark { width: 28px; height: 28px; flex: none; display: block; } .top nav { display: flex; gap: 4px; align-items: center; } .top nav a { color: var(--ink-2); text-decoration: none; font-size: 14.5px; padding: 6px 10px; border-radius: 8px; } .top nav a:hover { background: var(--bg-alt); color: var(--ink); } .top nav .nav-git { border: 1px solid var(--line-2); } @media (max-width: 640px) { .top nav a:not(.nav-git) { display: none; } } .copy { font: 600 12.5px var(--font); color: inherit; background: color-mix(in srgb, currentColor 7%, transparent); border: 1px solid color-mix(in srgb, currentColor 20%, transparent); border-radius: 8px; padding: 0 12px; cursor: pointer; flex: none; min-height: 32px; transition: background-color .15s ease, border-color .15s ease; } .copy:hover { background: color-mix(in srgb, currentColor 14%, transparent); border-color: color-mix(in srgb, currentColor 35%, transparent); } .copy.done { border-color: #22c55e; } .code, .term { color: var(--code-ink); } html:not(.js) .copy { display: none; } .term { min-width: 0; background: var(--code-bg); border-radius: var(--radius); box-shadow: var(--shadow); border: 1px solid color-mix(in srgb, var(--code-ink) 10%, transparent); overflow: hidden; } .term-bar { display: flex; align-items: center; gap: 6px; padding: 10px 14px; border-bottom: 1px solid color-mix(in srgb, var(--code-ink) 10%, transparent); } .term-bar span { width: 10px; height: 10px; border-radius: 50%; background: #334155; } .term-bar em { margin-left: 8px; font: 12px var(--mono); color: var(--code-muted); font-style: normal; } .term pre { margin: 0; padding: 16px 18px 20px; color: var(--code-ink); font: 13.5px/1.75 var(--mono); overflow-x: auto; } .term code { font-size: inherit; } .c { color: var(--code-muted); } .p { color: #818cf8; user-select: none; } .you { display: inline-block; margin-top: 6px; color: #f9a8d4; background: #500724; border-radius: 6px; padding: 1px 8px; font-weight: 700; } /* sections */ .sec { padding: 72px 0; border-top: 1px solid var(--line); } @media (min-width: 960px) { .sec { padding: 96px 0; } } .sec.alt { background: var(--bg-alt); } .kicker { font: 600 12.5px var(--mono); text-transform: uppercase; letter-spacing: .12em; color: var(--accent); margin-bottom: 12px; } h2 { font-size: clamp(26px, 4.4vw, 38px); font-weight: 750; max-width: 22em; } .sub { margin-top: 14px; color: var(--ink-2); max-width: 46em; font-size: 17px; } .note { margin-top: 24px; color: var(--muted); font-size: 15px; } .tag { display: inline-block; font: 700 11px/1 var(--mono); letter-spacing: .06em; padding: 5px 9px; border-radius: 999px; vertical-align: middle; } .t-api { background: var(--api-bg); color: var(--api-ink); } .t-local { background: var(--local-bg); color: var(--local-ink); } .t-ui { background: var(--ui-bg); color: var(--ui-ink); } .t-you { background: var(--you-bg); color: var(--you-ink); } .journey { margin: 36px 0 0; border-radius: 20px; overflow: hidden; box-shadow: var(--shadow); background: #0f172a; } .journey img { width: 100%; } .legend { list-style: none; padding: 0; margin: 20px 0 0; display: flex; flex-wrap: wrap; gap: 10px 24px; color: var(--muted); font-size: 14px; } .legend li { display: flex; align-items: center; gap: 8px; } .cols3 { display: grid; gap: 16px; margin-top: 36px; } @media (min-width: 900px) { .cols3 { grid-template-columns: repeat(3, 1fr); } } .col { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 24px; min-width: 0; } .col-you { border-color: var(--you-line); } .col h3 { font-size: 20px; margin-top: 14px; } .col-sub { color: var(--muted); font-size: 14.5px; margin-top: 8px; } .col ul { margin: 16px 0 0; padding: 16px 0 0; border-top: 1px dashed var(--line-2); list-style: none; display: grid; gap: 9px; font-size: 15px; color: var(--ink-2); } .col li { padding-left: 20px; position: relative; } .col li::before { content: ""; position: absolute; left: 2px; top: .62em; width: 7px; height: 7px; border-radius: 2px; background: var(--line-2); } .col li strong { color: var(--ink); } .qgrid { display: grid; gap: 14px; margin-top: 36px; } @media (min-width: 640px) { .qgrid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 980px) { .qgrid { grid-template-columns: repeat(3, 1fr); } } .q { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 20px 18px; display: flex; flex-direction: column; gap: 10px; min-width: 0; } .q-top { display: flex; justify-content: space-between; align-items: center; } .store { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: var(--muted); } .store .ic { width: 13px; height: 13px; } .q h3 { font-size: 18px; } .q p { font-size: 14.5px; color: var(--ink-2); flex: 1; } .q .cmd { align-self: flex-start; background: var(--bg-alt); border: 1px solid var(--line); padding: 3px 9px; border-radius: 6px; font-size: 12.5px; color: var(--ink); } .badges { list-style: none; padding: 0; margin: 28px 0 0; display: flex; flex-wrap: wrap; gap: 10px; } .badges li { font: 600 14.5px var(--font); padding: 9px 16px; border-radius: 999px; background: var(--surface); border: 1px solid var(--line-2); color: var(--ink); } .badges li:last-child { border-style: dashed; color: var(--muted); font-weight: 500; } .shot { margin: 0; min-width: 0; } .shot img, .shot video { border-radius: 12px; border: 1px solid var(--line); background: #11131a; width: 100%; } .shot figcaption { font-size: 13.5px; color: var(--muted); margin-top: 10px; } .shot-wide { margin-top: 36px; } .shot-wide img { background: #16171d; } .art2 { display: grid; gap: 20px; margin-top: 24px; align-items: start; } @media (min-width: 760px) { .art2 { grid-template-columns: 1fr 240px; } } .shot-video video { max-width: 240px; margin: 0 auto; } @media (min-width: 760px) { .shot-video video { margin: 0; } } .facts { list-style: none; padding: 0; margin: 32px 0 0; display: grid; gap: 14px; } @media (min-width: 760px) { .facts { grid-template-columns: repeat(2, 1fr); gap: 16px 28px; } } .facts li { font-size: 15px; color: var(--ink-2); padding-left: 14px; border-left: 2px solid var(--accent); } .facts b { color: var(--ink); } /* rejection scan */ .scan-term { margin-top: 36px; } .scan-term pre { font-size: 12.5px; line-height: 1.7; } .rules-h { font-size: 20px; margin-top: 40px; } .rules { list-style: none; padding: 0; margin: 18px 0 0; display: grid; gap: 12px; } @media (min-width: 640px) { .rules { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (min-width: 980px) { .rules { grid-template-columns: repeat(3, minmax(0, 1fr)); } } .rules > li { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; min-width: 0; } .rules p { margin-top: 8px; font-size: 14.5px; color: var(--ink-2); } .rg { display: inline-flex; flex-wrap: wrap; gap: 6px; } .rg b, .rg i { font: 700 11.5px/1 var(--mono); font-style: normal; padding: 5px 8px; border-radius: 999px; } .rg b { background: var(--accent-soft); color: var(--accent); } .rg i { background: var(--api-bg); color: var(--api-ink); } /* everything else */ .more { list-style: none; padding: 0; margin: 36px 0 0; display: grid; gap: 12px; } @media (min-width: 760px) { .more { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .more > li { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; min-width: 0; } .more-cmd { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; } .more-cmd code { font-size: 12.5px; } .more p { margin-top: 8px; font-size: 14.5px; color: var(--ink-2); } .more p code { white-space: nowrap; } .new { font: 700 10.5px/1 var(--mono); text-transform: uppercase; letter-spacing: .08em; padding: 4px 7px; border-radius: 999px; background: var(--you-bg); color: var(--you-ink); } /* desktop app */ .desk2 { display: grid; gap: 20px; margin-top: 24px; } @media (min-width: 760px) { .desk2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* quick start */ .start { display: grid; gap: 40px; margin-top: 36px; } .step { min-width: 0; } .step h3 { font-size: 20px; display: flex; align-items: center; gap: 12px; margin-bottom: 16px; } .num { display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; background: var(--accent); color: var(--accent-ink); font: 700 15px var(--mono); flex: none; } .code { position: relative; background: var(--code-bg); border-radius: 12px; border: 1px solid color-mix(in srgb, var(--code-ink) 10%, transparent); } .code pre { margin: 0; padding: 16px 18px; padding-right: 84px; color: var(--code-ink); font: 13.5px/1.7 var(--mono); overflow-x: auto; } .code pre code { font-size: inherit; } .code .copy { position: absolute; top: 10px; right: 10px; } .tablist { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 4px; margin-bottom: 14px; scrollbar-width: thin; } .tablist [role="tab"] { font: 600 14px var(--font); color: var(--ink-2); background: var(--surface); border: 1px solid var(--line-2); border-radius: 999px; padding: 8px 14px; cursor: pointer; white-space: nowrap; flex: none; min-height: 38px; } .tablist [role="tab"]:hover { color: var(--ink); border-color: var(--muted); } .tablist [role="tab"][aria-selected="true"] { background: var(--ink); color: var(--bg); border-color: var(--ink); } html:not(.js) .tablist { display: none; } .panel { margin-bottom: 18px; } .panel p { margin-top: 12px; color: var(--ink-2); font-size: 15px; } .panel-h { font-size: 16px; margin-bottom: 10px; } html.js .panel-h { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } html.js .panel[hidden] { display: none; } .asks { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 10px; } .asks li { background: var(--surface); border: 1px solid var(--line); border-radius: 12px 12px 12px 4px; padding: 10px 14px; font-size: 15px; color: var(--ink); } /* a first session */ .session { display: grid; gap: 28px; margin-top: 36px; align-items: start; } @media (min-width: 1020px) { .session { grid-template-columns: minmax(0, 1.25fr) minmax(0, .75fr); } } .chat { margin: 0; } .chat pre { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12.5px; line-height: 1.65; } .chat .o { color: color-mix(in srgb, var(--code-ink) 72%, var(--code-bg)); } .chat .say { display: block; padding-left: 6ch; text-indent: -6ch; font-family: var(--font); font-size: 14px; line-height: 1.55; margin: 4px 0; color: var(--code-ink); } .chat .say .who-you, .chat .say .who-ai { display: inline-block; width: 6ch; text-indent: 0; font-family: var(--mono); font-size: 12.5px; } .chat .say-end { text-indent: 0; } .chat .say .you { text-indent: 0; font-family: var(--mono); font-size: 12.5px; } @media (max-width: 640px) { .chat pre { font-size: 11.5px; } .chat .say { font-size: 13.5px; } } .who-you { color: #f9a8d4; font-weight: 700; } .who-ai { color: #86efac; font-weight: 700; } .bl { color: #fca5a5; font-weight: 700; } .see { min-width: 0; } .see-fig { margin: 0; } .see-k { font: 600 12.5px var(--mono); text-transform: uppercase; letter-spacing: .12em; color: var(--muted); margin-bottom: 10px; } .see video { width: 100%; aspect-ratio: 16 / 9; border-radius: 12px; border: 1px solid var(--line); background: #0b1020; } .player { position: relative; } .play { position: absolute; left: 50%; bottom: 14px; transform: translateX(-50%); display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 18px 0 14px; border-radius: 999px; border: 1px solid color-mix(in srgb, #fff 25%, transparent); background: color-mix(in srgb, #0b1020 72%, transparent); color: #fff; font: 650 14.5px var(--font); cursor: pointer; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); } .play .ic { width: 20px; height: 20px; } .play:hover { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); } .play:focus-visible { outline-offset: 3px; border-radius: 999px; } .see figcaption { font-size: 13.5px; color: var(--muted); margin-top: 10px; } .session-facts { grid-template-columns: 1fr !important; margin-top: 24px; gap: 12px; } /* safety */ .safety { list-style: none; padding: 0; margin: 36px 0 0; display: grid; gap: 14px; } @media (min-width: 720px) { .safety { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1020px) { .safety { grid-template-columns: repeat(3, 1fr); } } .safety li { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px; min-width: 0; } .safety h3 { font-size: 17px; margin-bottom: 8px; } .safety p { font-size: 14.5px; color: var(--ink-2); } /* footer */ .foot { border-top: 1px solid var(--line); padding: 40px 0 48px; background: var(--bg-alt); } .foot-in { display: flex; flex-wrap: wrap; gap: 24px; justify-content: space-between; align-items: flex-start; } .foot .fine { margin-top: 10px; } .foot nav { display: flex; flex-wrap: wrap; gap: 8px 20px; } .foot nav a { color: var(--ink-2); text-decoration: none; font-size: 14.5px; } .foot nav a:hover { color: var(--accent); text-decoration: underline; } @media (max-width: 640px) { .code { display: grid; } .code .copy { position: static; justify-self: end; margin: 8px 8px -6px; } .code pre { padding: 8px 16px 14px; font-size: 12.5px; } .term pre { font-size: 12.5px; } .eyebrow { font-size: 12px; } } /* external links open in a new tab: small arrow, announced to screen readers */ .ext{display:inline-block;margin-left:.25em;font-size:.8em;opacity:.6;text-decoration:none} a:hover .ext{opacity:1} .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0} /* ---------- hero ---------- */ .fine { font-size: 13.5px; color: var(--muted); margin-top: 14px; } .fine a { color: inherit; } /* overflow-x: clip keeps the demo glow (.demo::before reaches 4% past the window and blurs) from widening the page at 450-1020px, where the gutter is narrower than that; it clips at the viewport edge, where body already did */ .hero { position: relative; isolation: isolate; padding: 48px 0 0; overflow-x: clip; background: radial-gradient(55% 60% at 78% 0%, color-mix(in srgb, var(--accent) 13%, transparent), transparent 70%); } .hero-bg { position: absolute; inset: 0; z-index: -1; pointer-events: none; background-image: linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px); background-size: 48px 48px; background-position: center -1px; -webkit-mask-image: radial-gradient(ellipse 70% 75% at 65% 10%, #000 20%, transparent 72%); mask-image: radial-gradient(ellipse 70% 75% at 65% 10%, #000 20%, transparent 72%); } .hero-in { display: grid; gap: 44px; align-items: center; } @media (min-width: 1024px) { .hero { padding-top: 88px; } .hero-in { grid-template-columns: minmax(0, 1fr) minmax(0, 1.04fr); gap: 64px; } } .hero-copy { min-width: 0; } .eyebrow { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 550; color: var(--ink-2); background: color-mix(in srgb, var(--surface) 80%, transparent); border: 1px solid var(--line); padding: 4px 12px 4px 10px; border-radius: 999px; margin-bottom: 24px; } .dot { width: 7px; height: 7px; border-radius: 50%; background: #22c55e; box-shadow: 0 0 0 3px color-mix(in srgb, #22c55e 22%, transparent); flex: none; } h1 { font-size: clamp(38px, 9.6vw, 60px); font-weight: 760; letter-spacing: -.042em; line-height: 1.03; } h1 .hl { color: var(--accent); } .lede { margin-top: 22px; font-size: clamp(17px, 1.6vw, 19px); line-height: 1.6; color: var(--ink-2); max-width: 34em; text-wrap: pretty; } .lede strong { color: var(--ink); font-weight: 650; } .ctas { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 32px; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 44px; padding: 0 18px; border-radius: 10px; font-weight: 600; text-decoration: none; font-size: 15px; transition: background-color .15s ease, border-color .15s ease, transform .12s ease; } .btn .ic { width: 16px; height: 16px; margin-right: -4px; transition: transform .15s ease; } .btn:hover .ic { transform: translateX(2px); } .btn:active { transform: translateY(1px); } .btn-primary { background: var(--accent); color: var(--accent-ink); box-shadow: 0 1px 0 rgb(255 255 255 / .18) inset, 0 6px 16px -8px var(--accent); } .btn-primary:hover { background: color-mix(in srgb, var(--accent) 86%, var(--ink)); } .btn-ghost { color: var(--ink); border: 1px solid var(--line-2); background: var(--surface); } .btn-ghost:hover { border-color: var(--muted); } .install { display: inline-flex; align-items: center; gap: 10px; margin-top: 16px; max-width: 100%; background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 5px 5px 5px 14px; color: var(--ink); } .install code { background: none; padding: 0; border-radius: 0; color: inherit; font-size: 14px; white-space: nowrap; overflow-x: auto; min-width: 0; padding-right: 18px; } .install .prompt { color: var(--muted); font-family: var(--mono); font-size: 14px; } .install .copy { color: var(--ink-2); } .install-note { margin-top: 10px; font-size: 13.5px; color: var(--muted); } .install-note a { color: inherit; } /* hero demo: four real CLI scenes in a dark window (same in both themes). Each scene opens with a plain-language headline and outcome, then the proof. Without JS (or with reduced motion) every scene shows its final frame; main.js adds .is-anim to play them and cycles the tabs while the hero is on screen. */ .demo { margin: 0; min-width: 0; position: relative; } .demo::before { content: ""; position: absolute; inset: 8% -4% -6% 6%; z-index: -1; border-radius: 40px; background: color-mix(in srgb, var(--accent) 28%, transparent); filter: blur(60px); opacity: .55; } .demo-win { background: #0b1222; color: #e2e8f0; border: 1px solid rgb(148 163 184 / .18); border-radius: 14px; overflow: hidden; box-shadow: 0 0 0 1px rgb(0 0 0 / .04), 0 2px 4px rgb(15 23 42 / .06), 0 24px 60px -20px rgb(15 23 42 / .45); } .demo-bar { display: flex; align-items: center; gap: 6px; padding: 11px 14px; background: rgb(255 255 255 / .02); } .demo-bar span { width: 10px; height: 10px; border-radius: 50%; background: #2b3548; flex: none; } .demo-bar em { margin-left: 8px; font: 12px var(--mono); color: #94a3b8; font-style: normal; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .demo-cap { margin-top: 12px; font-size: 12.5px; line-height: 1.5; color: var(--muted); text-align: center; text-wrap: balance; } .demo-cap code { background: none; padding: 0; color: var(--ink-2); font-size: 12px; } .sc-tabs { display: flex; gap: 2px; padding: 0 10px; border-bottom: 1px solid rgb(148 163 184 / .14); overflow-x: auto; scrollbar-width: none; } .sc-tabs::-webkit-scrollbar { display: none; } .sc-tabs button { position: relative; flex: 1 0 auto; appearance: none; border: 0; background: none; color: #94a3b8; font: 600 13px/1 var(--font); padding: 11px 10px 12px; cursor: pointer; border-radius: 8px 8px 0 0; white-space: nowrap; transition: color .15s ease, background-color .15s ease; } .sc-tabs button:hover { color: #e2e8f0; } .sc-tabs button[aria-selected="true"] { color: #fff; background: rgb(255 255 255 / .05); } /* progress: the selected tab's underline fills over the scene's time (play + hold) */ .sc-tabs button::before { content: ""; position: absolute; left: 8px; right: 8px; bottom: -1px; height: 2px; border-radius: 2px; background: rgb(129 140 248 / .22); opacity: 0; } .sc-tabs button::after { content: ""; position: absolute; left: 8px; right: 8px; bottom: -1px; height: 2px; border-radius: 2px; background: #818cf8; transform: scaleX(0); transform-origin: left; } .sc-tabs button[aria-selected="true"]::after { transform: none; } .demo.is-auto .sc-tabs button::before { opacity: 1; } .sc-tabs button:focus-visible { outline: 2px solid #a5b4fc; outline-offset: -3px; } .demo.is-auto .sc-tabs button[aria-selected="true"]::after { animation: sc-bar var(--sc-ms, 6s) linear forwards; } .demo.is-auto.is-held .sc-tabs button[aria-selected="true"]::after { animation-play-state: paused; } @keyframes sc-bar { from { transform: scaleX(0); } to { transform: none; } } .sc-stage { position: relative; height: 548px; } .sc { position: absolute; inset: 0; padding: 14px 16px 14px; display: flex; flex-direction: column; gap: 0; overflow: hidden; font: 12px/1.65 var(--mono); color: #cbd5e1; outline: none; } .sc[hidden] { display: none; } .sc > * { flex-shrink: 0; } .sc:focus-visible { box-shadow: inset 0 0 0 2px #a5b4fc; } .sc p { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sc .t-wrap { white-space: normal; overflow-wrap: anywhere; } /* the plain-language part: what storebound just did for you */ .sc-head { flex: none; margin: -14px -16px 12px; padding: 13px 16px 12px; background: linear-gradient(rgb(129 140 248 / .10), rgb(129 140 248 / .04)); border-bottom: 1px solid rgb(129 140 248 / .18); } .sc .sc-head p { white-space: normal; overflow: visible; } .sc-h { font: 700 16.5px/1.3 var(--font); letter-spacing: -.012em; color: #fff; text-wrap: balance; } .sc-out { margin-top: 5px; font: 13.5px/1.5 var(--font); color: #aab6ca; text-wrap: pretty; } .sc-out b { color: #fff; font-weight: 650; } .sc-hand { margin-top: auto; padding-top: 10px; font: 12.5px/1.45 var(--font); color: #8391a7; white-space: normal !important; } .sc-hand span { display: inline-block; font: 700 10.5px/1 var(--font); letter-spacing: .06em; text-transform: uppercase; color: #cbd5e1; background: rgb(148 163 184 / .14); padding: 4px 7px; border-radius: 5px; margin-right: 7px; vertical-align: 1px; } .t-cmd { color: #f8fafc; margin-top: 8px; } .t-cmd:first-child, .sc-head + .t-cmd { margin-top: 0; } .t-cmd i { font-style: normal; color: #818cf8; } .t-cmd span { display: inline-block; vertical-align: bottom; overflow: hidden; white-space: nowrap; } .t-out, .t-ok, .t-bad, .t-err, .t-note { padding-left: 2ch; } .t-out { color: #94a3b8; } .sc b { font-weight: 400; color: #64748b; } .sc .sc-out b { font-weight: 650; color: #fff; } .t-ok { color: #86efac; } .t-ok b { color: #4ade80; } .t-strong { font-weight: 700; } .t-bad { color: #fca5a5; } .t-err { color: #f87171; font-weight: 600; } .t-note { color: #7c8aa3; font-style: italic; } .sc-foot { margin-top: 10px; font: 13px/1.4 var(--font); color: #94a3b8; white-space: normal !important; } .sc-foot .big { font-weight: 700; color: #fff; font-size: 15px; letter-spacing: -.01em; } .sc-foot .big span { font-variant-numeric: tabular-nums; color: #a5b4fc; } .sc-foot .sep { color: #475569; margin: 0 2px; } /* streaming log: newest line at the bottom, older lines scroll off the top */ .tick { display: flex; flex-direction: column; justify-content: flex-end; overflow: hidden; height: calc(2 * 1.65em); margin: 2px 0 10px; padding-left: 2ch; color: #64748b; flex: none; -webkit-mask-image: linear-gradient(transparent, #000 60%); mask-image: linear-gradient(transparent, #000 60%); } .tick p { flex: none; padding-left: 0; } .tick b { color: #475569; } .tick-csv { height: calc(9 * 1.6em); font-size: 11px; line-height: 1.6; margin: 6px 0 4px; padding: 6px 10px; border-radius: 8px; background: rgb(148 163 184 / .06); -webkit-mask-image: linear-gradient(transparent, #000 30%); mask-image: linear-gradient(transparent, #000 30%); } .tick-csv p { color: #64748b; } .tick-csv em { font-style: normal; color: #4ade80; font-weight: 700; } .tick-csv .lbl { color: #94a3b8; } .tick-csv i, .tick-csv em { display: inline-block; width: 4ch; font-style: normal; } .tick-csv i { color: #334155; } .tick-ic { height: calc(6 * 1.65em); margin: 12px 0 0; } /* the CSV box and the icon log take the scene's spare height, so the scene ends on content, not on a gap */ .tick-csv, .tick-ic, .sc-shots .tick { flex: 1 0 auto; } .pf-list { flex: 1 0 auto; align-content: space-between; } /* Store forms final frame (and the no-JS / reduced-motion view): only the key rows of the CSV, in file order */ .sc:not(.is-anim) .tick-csv p:not([data-key]), .sc.is-anim .tick-csv.fixed p:not([data-key]) { display: none; } .sc:not(.is-anim) .tick-csv, .sc.is-anim .tick-csv.fixed { justify-content: center; -webkit-mask-image: none; mask-image: none; } .sc.is-anim .tick-csv.fixed p[data-key] { animation: csv-in .35s ease both; } .tick-csv p.hot .lbl { color: #e2e8f0; } .sc:not(.is-anim) .tick-csv p[data-key], .sc.is-anim .tick-csv.fixed p[data-key] { white-space: normal; padding-left: 4ch; text-indent: -4ch; margin: 2px 0; } .tick-csv p[data-key] em { text-indent: 0; } @keyframes csv-in { from { opacity: 0; transform: translateY(4px); } } @media (prefers-reduced-motion: reduce) { .sc.is-anim .tick-csv.fixed p[data-key] { animation: none; } } /* a narrow demo window (the 2-column hero just above 1024 px): the skipped row goes, so the checklist fits */ .sc-stage { container-type: inline-size; } @container (max-width: 480px) { .pf-na { display: none !important; } } .tick-ic p { color: #94a3b8; } .tick-ic .kb { color: #64748b; } /* screenshots */ .shot-grid { list-style: none; margin: 0; padding: 0; max-width: 480px; display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 7px; } .shot-grid li { position: relative; aspect-ratio: 1320 / 2868; border-radius: 6px; overflow: hidden; background: #1e293b; box-shadow: 0 0 0 1px rgb(255 255 255 / .06); } .shot-grid img { width: 100%; height: 100%; object-fit: cover; } .shot-grid li span { position: absolute; left: 3px; bottom: 3px; font: 700 8.5px/1 var(--font); letter-spacing: .04em; color: #0f172a; background: rgb(255 255 255 / .88); padding: 2px 3px; border-radius: 3px; } /* pre-flight: a checklist of what `storebound check` verified; the terminal strip above it shows the commands */ .pf-strip { position: relative; flex: none; display: flex; align-items: flex-end; gap: 10px; padding: 7px 10px 6px; margin-bottom: 8px; border-radius: 8px; background: rgb(0 0 0 / .28); box-shadow: inset 0 0 0 1px rgb(148 163 184 / .1); } .tick-pf { flex: 1; min-width: 0; margin: 0; padding-left: 0; height: 1.65em; } .tick-pf .t-cmd { margin-top: 0; } .tick-pf .t-out, .tick-pf .t-ok, .tick-pf .t-err, .tick-pf .t-note { padding-left: 2ch; } .sc-pill { flex: none; font: 700 11px/1 var(--font); letter-spacing: .02em; overflow: visible; align-self: center; } .sc-pill span { display: none; padding: 5px 9px; border-radius: 999px; white-space: nowrap; } .sc.is-anim .sc-pill span { animation: pop .3s cubic-bezier(.2, .9, .3, 1.3); } .pill-bad { color: #fecaca; background: rgb(239 68 68 / .2); box-shadow: inset 0 0 0 1px rgb(239 68 68 / .45); } .pill-good { color: #bbf7d0; background: rgb(34 197 94 / .2); box-shadow: inset 0 0 0 1px rgb(34 197 94 / .5); } .sc:not(.is-anim) .pill-good, .sc[data-pill="bad"] .pill-bad, .sc[data-pill="good"] .pill-good { display: inline-block; } @keyframes pop { from { transform: scale(.6); opacity: 0; } } .pf-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 3px; font: 12.5px/1.3 var(--font); } .pf-row { display: grid; grid-template-columns: 18px minmax(0, 16em) minmax(0, 1fr); align-items: center; gap: 2px 10px; padding: 3px 8px; border-radius: 7px; background: rgb(148 163 184 / .045); transition: background-color .3s ease; } .pf-ic { width: 18px; height: 18px; border-radius: 50%; display: grid; place-items: center; font: 800 11px/1 var(--font); color: #052e16; background: #4ade80; } .pf-ic::before { content: "✓"; } .pf-what { color: #e2e8f0; font-weight: 600; min-width: 0; } .pf-what small { display: block; font: 400 10px/1.3 var(--mono); color: #64748b; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .pf-det { color: #b4c0d3; min-width: 0; } .pf-det code { white-space: nowrap; font-size: 11px; background: rgb(148 163 184 / .16); color: #f1f5f9; padding: .05em .35em; border-radius: 4px; } .pf-det em { display: inline-block; margin-left: 4px; font: 600 10px/1 var(--font); font-style: normal; letter-spacing: .02em; color: #fcd34d; background: rgb(251 191 36 / .12); box-shadow: inset 0 0 0 1px rgb(251 191 36 / .3); padding: 3px 6px; border-radius: 999px; vertical-align: 1px; white-space: nowrap; } .d-bad { display: none; } .pf-na .pf-ic { background: #334155; color: #94a3b8; } .pf-na .pf-ic::before { content: "–"; } .pf-na .pf-what, .pf-na .pf-det { color: #64748b; } /* while playing, a [data-bad] row shows the problem and its fix until the re-check flips it (.fixed) */ .sc.is-anim .pf-row[data-bad]:not(.fixed) { background: rgb(239 68 68 / .1); box-shadow: inset 2px 0 0 #f87171; } .sc.is-anim .pf-row[data-bad]:not(.fixed) .pf-ic { background: #f87171; color: #450a0a; } .sc.is-anim .pf-row[data-bad]:not(.fixed) .pf-ic::before { content: "✗"; } .sc.is-anim .pf-row[data-bad]:not(.fixed) .d-bad { display: inline; color: #fecaca; } .sc.is-anim .pf-row[data-bad]:not(.fixed) .d-ok { display: none; } .sc.is-anim .pf-row.fixed { background: rgb(34 197 94 / .1); } .sc.is-anim .pf-row.fixed .pf-ic { animation: pop .35s cubic-bezier(.2, .9, .3, 1.3); } /* icons */ .ic-row { display: flex; align-items: center; gap: 12px; margin-top: 12px; } .ic-src { margin: 0; flex: none; text-align: center; } .ic-src img { width: 76px; height: 76px; border-radius: 17px; box-shadow: 0 0 0 1px rgb(255 255 255 / .1); } .ic-src figcaption, .ic-out small { display: block; margin-top: 5px; font: 10px/1.2 var(--mono); color: #64748b; white-space: nowrap; } .ic-arrow { color: #818cf8; font: 20px var(--font); flex: none; } .ic-out { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 8px; align-items: end; flex: 1; min-width: 0; } .ic-out li { text-align: center; min-width: 0; } .ic-out img { margin: 0 auto; } .ic-out small { overflow: hidden; text-overflow: ellipsis; } .ic-sq { border-radius: 22%; } .ic-ro { border-radius: 50%; } /* animation states (main.js adds .is-anim to a scene while it plays) */ .sc.is-anim [data-s] { opacity: 0; transform: translateY(3px); } .sc.is-anim [data-s].on { opacity: 1; transform: none; transition: opacity .18s ease, transform .18s ease; } .sc.is-anim .tick p { display: none; } .sc.is-anim .tick p.on { display: block; } .sc.is-anim .tick:not(:has(p.on)) { opacity: 0; } .sc.is-anim .tick { transition: opacity .18s ease-out; } @media (prefers-reduced-motion: reduce) { .sc.is-anim .tick { transition: none; } } .sc.is-anim .shot-grid li, .sc.is-anim .ic-out li { opacity: 0; transform: scale(.86); } .sc.is-anim .shot-grid li.on, .sc.is-anim .ic-out li.on { opacity: 1; transform: none; transition: opacity .22s ease, transform .3s cubic-bezier(.2, .9, .3, 1.25); } .sc.is-anim .t-cmd.typing span { width: calc(var(--n, 0) * 1ch); } .sc.is-anim .t-cmd.typing::after { content: ""; display: inline-block; width: .55em; height: 1.15em; margin-left: 1px; vertical-align: -.2em; background: #a5b4fc; animation: caret 1s steps(1) infinite; } @keyframes caret { 50% { opacity: 0; } } /* hide the first scene's lines until main.js starts it, so the final frame does not flash first */ @media (prefers-reduced-motion: no-preference) { .js .demo:not(.is-ready) .sc [data-s] { opacity: 0; } } /* no JS: the four scenes stack, each in its final frame */ html:not(.js) .sc-tabs { display: none; } html:not(.js) .sc-stage { height: auto; } html:not(.js) .sc, html:not(.js) .sc[hidden] { position: relative; display: flex; } html:not(.js) .sc + .sc { border-top: 1px solid rgb(148 163 184 / .18); } html:not(.js) .sc-hand { margin-top: 10px; } @media (max-width: 640px) { .sc-stage { height: 592px; } .sc { padding: 12px 12px 12px; font-size: 11px; } .sc-head { margin: -12px -12px 10px; padding: 11px 12px 10px; } .sc-h { font-size: 15.5px; } .sc-out { font-size: 13px; } .sc-hand { font-size: 12px; } .sc-tabs { padding: 0 6px; } .sc-tabs button { font-size: 12.5px; padding: 10px 7px 11px; } .shot-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; } .shot-grid li:nth-child(n+13) { display: none; } .sc-foot { font-size: 12px; } .sc-foot .big { font-size: 14px; display: block; } .sc-foot .big + .sep { display: none; } .tick-csv { font-size: 10px; height: calc(9 * 1.6em); } .tick-ic { height: calc(7 * 1.65em); } .pf-strip { padding: 5px 8px 4px; } .tick-pf { height: 1.65em; } .pf-list { font-size: 12px; gap: 3px; } .pf-row { grid-template-columns: 18px minmax(0, 1fr); padding: 4px 7px; gap: 0 8px; } .pf-ic { width: 17px; height: 17px; grid-row: span 2; align-self: start; margin-top: 1px; } .pf-what small { display: none; } .pf-det { font-size: 11.5px; } .pf-na { display: none !important; } .ic-row { gap: 8px; } .ic-src img { width: 56px; height: 56px; border-radius: 13px; } .ic-src figcaption { display: none; } .ic-out { gap: 10px 4px; } .ic-out small { font-size: 9px; } } .trust { list-style: none; padding: 22px 0 0; margin: 56px 0 0; border-top: 1px solid var(--line); display: flex; flex-wrap: wrap; gap: 8px 0; font-size: 14px; color: var(--ink-2); } .trust li { display: block; } .trust li + li::before { content: ""; display: inline-block; vertical-align: middle; width: 3px; height: 3px; border-radius: 50%; background: var(--muted); opacity: .6; margin: 0 14px; } .trust code { background: none; padding: 0; color: var(--ink); } .works { margin-top: 10px; padding-bottom: 40px; font-size: 14px; color: var(--muted); } .works span { color: var(--ink-2); font-weight: 600; margin-right: 4px; } @media (min-width: 1024px) { .trust { margin-top: 80px; } .works { padding-bottom: 56px; } } @media (max-width: 640px) { .hero { padding-top: 36px; } .trust { margin-top: 40px; font-size: 13.5px; gap: 6px 18px; } .trust li + li::before { display: none; } .ctas .btn { flex: 1 1 auto; } } /* ---------- sections, shared ---------- */ h2 { font-size: clamp(28px, 4.2vw, 40px); font-weight: 720; letter-spacing: -.032em; line-height: 1.1; max-width: 20em; } .sub { max-width: 60ch; line-height: 1.6; text-wrap: pretty; } /* ---------- how it works: stepper ---------- */ .steps { list-style: none; padding: 0; margin: 48px 0 0; position: relative; } .st { position: relative; padding: 0 0 36px 50px; min-width: 0; } .st::before { content: ""; position: absolute; left: 15px; top: 40px; bottom: 6px; width: 1px; background: var(--line-2); } .st:last-child { padding-bottom: 0; } .st:last-child::before { display: none; } .st-head { position: static; } .st-num { position: absolute; left: 0; top: 0; width: 31px; height: 31px; border-radius: 50%; display: grid; place-items: center; font: 600 13px var(--mono); color: var(--accent); background: var(--surface); border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--line)); } .st-t { display: block; padding-top: 3px; } .st-t h3 { display: block; font-size: 17.5px; font-weight: 650; letter-spacing: -.015em; color: var(--ink); line-height: 1.35; } .st-t p { display: block; margin-top: 3px; font-size: 15px; color: var(--muted); line-height: 1.5; } .st-panel { margin-top: 16px; display: grid; gap: 14px; min-width: 0; align-content: start; } .st-panel:focus-visible { outline-offset: 6px; } .pv { border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: var(--pv-bg); min-width: 0; color: var(--ink); } .pv-bar { display: flex; align-items: center; gap: 10px; min-height: 42px; padding: 5px 6px 5px 14px; border-bottom: 1px solid var(--line); } .pv-k { font: 500 12.5px var(--mono); color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; } .pv-bar .copy { margin-left: auto; color: var(--ink-2); } .pv-tag { font: 600 11px/1 var(--mono); padding: 4px 8px; border-radius: 999px; background: var(--api-bg); color: var(--api-ink); flex: none; } .pv pre { margin: 0; padding: 14px 16px; font: 13px/1.7 var(--mono); overflow-x: auto; } .pv pre code { font-size: inherit; } .pv .s { color: var(--str); } .pv .k { color: var(--accent); } .pv-term { background: var(--code-bg); border-color: color-mix(in srgb, var(--code-bg) 80%, #94a3b8); color: var(--code-ink); } .pv-term .pv-bar { border-color: rgb(148 163 184 / .14); min-height: 0; padding-top: 4px; padding-bottom: 4px; } .pv-term .pv-k { color: #94a3b8; } .pv-term .pv-bar .copy { color: var(--code-ink); } .pv-term pre { padding: 12px 16px 14px; } .pv-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; } .pv-label { font: 600 11.5px var(--mono); text-transform: uppercase; letter-spacing: .1em; color: var(--muted); margin-right: 4px; } .pill { border: 1px solid var(--line-2); border-radius: 999px; padding: 2px 10px; background: var(--surface); } .pill code { background: none !important; padding: 0 !important; font-size: 13px; } .tree { list-style: none; margin: 0; padding: 0; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); } .tree li { display: grid; gap: 2px; padding: 10px 14px; font-size: 14.5px; } .tree li + li { border-top: 1px solid var(--line); } .tree code { background: none !important; padding: 0 !important; font-size: 13px; color: var(--ink); font-weight: 600; } .tree span { color: var(--muted); } @media (min-width: 560px) { .tree li { grid-template-columns: 200px 1fr; gap: 12px; align-items: baseline; } } .pv-note { font-size: 14.5px; color: var(--ink-2); max-width: 62ch; } .pv-note a { color: var(--accent); } .asks2 { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; } .asks2 li { display: flex; align-items: center; gap: 12px; padding: 6px 6px 6px 14px; border-radius: 12px 12px 12px 4px; background: var(--accent-soft); border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent); font-size: 14.5px; font-weight: 550; color: var(--ink); } .asks2 span { flex: 1; min-width: 0; } .asks2 span::before { content: "\201C"; } .asks2 span::after { content: "\201D"; } .asks2 .copy { color: var(--accent); background: var(--surface); } .gate { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; counter-reset: g; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); } .gate li { counter-increment: g; display: grid; grid-template-columns: 26px 1fr; column-gap: 12px; padding: 12px 14px; font-size: 14.5px; } .gate li + li { border-top: 1px solid var(--line); } .gate li::before { content: counter(g); grid-row: span 2; width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; font: 600 12px var(--mono); background: var(--bg-alt); color: var(--ink-2); } .gate b { color: var(--ink); font-weight: 600; } .gate span { color: var(--muted); } .gate .gate-you { background: color-mix(in srgb, var(--you-bg) 55%, var(--surface)); border-radius: 0 0 11px 11px; } .gate .gate-you::before { background: var(--you-bg); color: var(--you-ink); } .gate .gate-you b { color: var(--you-ink); } /* desktop: steps on the left, one shared preview on the right */ @media (min-width: 1024px) { html.js .steps { display: grid; grid-template-columns: minmax(0, 400px) minmax(0, 1fr); grid-template-rows: repeat(5, auto) 1fr; column-gap: 48px; row-gap: 4px; align-items: start; } html.js .steps::before { content: ""; position: absolute; left: 32px; top: 40px; bottom: 40px; width: 1px; background: var(--line); } html.js .st { display: contents; } html.js .st::before { display: none; } html.js .st-head { grid-column: 1; position: relative; display: block; padding: 14px 16px 14px 64px; border: 1px solid transparent; border-radius: 14px; cursor: pointer; transition: background-color .2s ease; outline-offset: 2px; } html.js .st:nth-child(1) .st-head { grid-row: 1; } html.js .st:nth-child(2) .st-head { grid-row: 2; } html.js .st:nth-child(3) .st-head { grid-row: 3; } html.js .st:nth-child(4) .st-head { grid-row: 4; } html.js .st:nth-child(5) .st-head { grid-row: 5; } html.js .st-num { left: 16px; top: 15px; z-index: 1; transition: background-color .2s ease, color .2s ease; } html.js .st-head:hover { background: color-mix(in srgb, var(--surface) 60%, transparent); } html.js .st-head:not([aria-selected="true"]) .st-t p { color: var(--muted); } html.js .st-head:not([aria-selected="true"]) .st-t h3 { color: var(--ink-2); } html.js .st-head[aria-selected="true"] { background: var(--surface); border-color: var(--line); box-shadow: var(--shadow); } html.js .st-head[aria-selected="true"] .st-num { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); } html.js .st-head[aria-selected="true"]::after { content: ""; position: absolute; left: 64px; right: 16px; bottom: -1px; height: 2px; border-radius: 2px; background: var(--accent); transform-origin: left; transform: scaleX(0); opacity: 0; } html.js .steps.is-auto .st-head[aria-selected="true"]::after { opacity: .7; animation: stepbar var(--step-ms, 6000ms) linear forwards; } html.js .steps.is-paused .st-head[aria-selected="true"]::after { animation-play-state: paused; } html.js .st-panel { grid-column: 2; grid-row: 1 / -1; margin: 0; min-height: 100%; padding: 24px; border: 1px solid var(--line); border-radius: 18px; background: var(--surface); box-shadow: var(--shadow); gap: 16px; } html.js .st-panel[hidden] { display: none; } html.js .st-panel.enter { animation: panelin .32s ease both; } } @keyframes stepbar { to { transform: scaleX(1); } } @keyframes panelin { from { opacity: 0; transform: translateY(6px); } } @media (prefers-reduced-motion: reduce) { html.js .st-panel.enter { animation: none; } } .for { margin-top: 72px; padding-top: 40px; border-top: 1px solid var(--line); } .for-h { font: 600 12.5px var(--mono); text-transform: uppercase; letter-spacing: .12em; color: var(--muted); } .for-list { list-style: none; padding: 0; margin: 20px 0 0; display: grid; gap: 24px; } @media (min-width: 760px) { .for-list { grid-template-columns: repeat(3, 1fr); gap: 32px; } } .for-list li { display: flex; gap: 14px; align-items: flex-start; } .for-ic { width: 40px; height: 40px; flex: none; display: grid; place-items: center; border-radius: 10px; background: var(--accent-soft); color: var(--accent); } .for-ic .ic { width: 22px; height: 22px; } .for-list b { display: block; font-size: 16px; color: var(--ink); letter-spacing: -.01em; } .for-list p { margin-top: 4px; font-size: 15px; color: var(--ink-2); } /* ---------- faq ---------- */ .faq-in { display: grid; gap: 32px; } @media (min-width: 960px) { .faq-in { grid-template-columns: minmax(0, 340px) minmax(0, 1fr); gap: 80px; align-items: start; } .faq-side { position: sticky; top: 100px; } } .faq-links { margin-top: 24px; display: flex; flex-direction: column; gap: 10px; align-items: flex-start; font-size: 15px; font-weight: 550; } .faq-links a { text-decoration: none; } .faq-links a:hover { text-decoration: underline; } .faq { border-top: 1px solid var(--line-2); interpolate-size: allow-keywords; } .faq details { border-bottom: 1px solid var(--line-2); } .faq summary { cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 20px 4px; border-radius: 8px; } .faq summary::-webkit-details-marker { display: none; } .faq summary h3 { font-size: 17px; font-weight: 600; letter-spacing: -.012em; line-height: 1.4; transition: color .15s ease; } .faq summary:hover h3 { color: var(--accent); } .faq summary::after { content: ""; flex: none; width: 8px; height: 8px; margin-right: 8px; border-right: 1.75px solid var(--muted); border-bottom: 1.75px solid var(--muted); transform: translateY(-3px) rotate(45deg); transition: transform .25s ease; } .faq details[open] summary::after { transform: translateY(2px) rotate(-135deg); } .faq-a p { padding: 0 48px 22px 4px; color: var(--ink-2); font-size: 15.5px; max-width: 64ch; } .faq details::details-content { block-size: 0; overflow: clip; transition: block-size .28s ease, content-visibility .28s allow-discrete; } .faq details[open]::details-content { block-size: auto; } @media (prefers-reduced-motion: reduce) { .faq details::details-content, .faq summary::after { transition: none; } } @media (max-width: 640px) { .faq-a p { padding-right: 8px; } .faq summary h3 { font-size: 16px; } } @media (min-width: 1024px) and (max-width: 1199px) { h1 { font-size: 50px; } } .st-foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: auto; padding-top: 16px; border-top: 1px solid var(--line); font-size: 13.5px; color: var(--muted); } .st-foot[hidden] { display: none; } .st-next { display: inline-flex; align-items: center; gap: 4px; font: 600 14px var(--font); color: var(--accent); background: none; border: 0; padding: 6px 4px; cursor: pointer; text-decoration: none; border-radius: 6px; } .st-next .ic { width: 15px; height: 15px; transition: transform .15s ease; } .st-next:hover .ic { transform: translateX(2px); } @media (min-width: 1024px) { html.js .st-panel:not([hidden]) { display: flex; flex-direction: column; } } /* ---- 2026-10-13 one-page story: hero teaser, the whole job, desktop tabs + downloads, your AI, what it covers ---- */ /* phone: the section links scroll sideways in a second row instead of disappearing */ @media (max-width: 640px) { .top-in { height: auto; flex-wrap: wrap; padding-top: 10px; padding-bottom: 6px; row-gap: 4px; } .top nav.nav-main { position: relative; order: 3; width: calc(100% + 2 * var(--gutter)); overflow-x: auto; scrollbar-width: none; margin: 0 calc(-1 * var(--gutter)); padding: 0 var(--gutter) 4px; } .top nav.nav-main::-webkit-scrollbar { display: none; } .top nav.nav-main a:not(.nav-git) { display: inline-block; white-space: nowrap; flex: none; padding: 6px 9px; font-size: 14px; } .top nav.nav-main .nav-git { flex: none; } html { scroll-padding-top: 108px; } } .hero-video { margin: 0; min-width: 0; position: relative; } .hero-video::before { content: ""; position: absolute; inset: 8% -4% -6% 6%; z-index: -1; border-radius: 40px; background: color-mix(in srgb, var(--accent) 28%, transparent); filter: blur(60px); opacity: .5; } .hero-video video { width: 100%; aspect-ratio: 16 / 9; border-radius: 14px; border: 1px solid rgb(148 163 184 / .2); background: #0b1020; box-shadow: var(--shadow); } .hero-video figcaption { margin-top: 12px; font-size: 13px; color: var(--muted); text-align: center; text-wrap: balance; } .sub-h { font-size: 20px; font-weight: 700; margin: 56px 0 18px; } .ship { display: grid; gap: 28px; margin-top: 36px; align-items: start; } @media (min-width: 1020px) { .ship { grid-template-columns: minmax(0, 1.2fr) minmax(0, .8fr); } } .does { list-style: none; padding: 0; margin: 0; display: grid; gap: 12px; } .does li { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; display: grid; gap: 4px; min-width: 0; } .does b { font-size: 16px; color: var(--ink); } .does span { font-size: 14.5px; color: var(--ink-2); } .ship-demo { max-width: 760px; } .cols-you { display: grid; gap: 20px; min-width: 0; } .cols-you .sub { margin-top: 0; } .you-box { border: 1px solid var(--you-line); background: color-mix(in srgb, var(--you-bg) 45%, var(--surface)); border-radius: var(--radius); padding: 18px 20px; } .you-box ul { margin: 12px 0 0; padding-left: 18px; color: var(--ink-2); font-size: 15px; display: grid; gap: 6px; } .you-box strong { color: var(--ink); } /* real CLI output as text */ .term-real { margin: 0; } .term-real pre { white-space: pre-wrap; overflow-wrap: anywhere; font-size: 12.5px; line-height: 1.6; max-height: 560px; overflow-y: auto; } .term-real .o { color: color-mix(in srgb, var(--code-ink) 62%, var(--code-bg)); } .term-cap { padding: 0 18px 14px; font-size: 12px; color: var(--code-muted); } .term-cap a { color: inherit; } @media (max-width: 640px) { .term-real pre { font-size: 11.5px; padding: 14px; } } /* desktop app: one tab per screen, light / dark captures */ .desk-tabs { margin-top: 32px; } .desk-panel { margin: 0; } .desk-panel img { width: 100%; border-radius: 12px; border: 1px solid var(--line); box-shadow: var(--shadow); background: var(--surface); } .desk-panel figcaption { margin-top: 12px; font-size: 14px; color: var(--muted); } .dl { margin-top: 44px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 22px; min-width: 0; } .dl-head h3 { font-size: 20px; } .dl-status { margin-top: 6px; font-size: 14.5px; color: var(--muted); } .dl-os { list-style: none; padding: 0; margin: 18px 0 0; display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(min(100%, 190px), 1fr)); } .dl-os .btn { width: 100%; flex-direction: column; align-items: flex-start; gap: 2px; padding: 12px 16px; min-height: 64px; } .dl-os .btn b { font-size: 15.5px; } .dl-os .btn small { font-weight: 500; font-size: 12.5px; color: var(--muted); } .dl-os .btn.is-off { opacity: .6; cursor: default; pointer-events: none; } .dl-os .btn.is-here { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; } .dl-notice { margin-top: 16px; padding: 14px 16px; border-radius: 12px; border: 1px solid var(--ui-ink); background: var(--ui-bg); color: var(--ui-ink); font-size: 14.5px; } .dl-notice ol { margin: 8px 0 0; padding-left: 20px; } .dl-verify { margin-top: 18px; } .dl-verify summary, .chat-more summary { cursor: pointer; font-weight: 600; color: var(--ink); min-height: 32px; } .dl-table { width: 100%; border-collapse: collapse; margin-top: 14px; font-size: 14.5px; } .dl-table th, .dl-table td { text-align: left; padding: 10px 8px; border-bottom: 1px solid var(--line); vertical-align: top; } .dl-table th { font: 600 12px var(--mono); text-transform: uppercase; letter-spacing: .08em; color: var(--muted); } .dl-table .sha { font: 12px/1.5 var(--mono); overflow-wrap: anywhere; display: block; } .dl-table .fname { font-weight: 600; overflow-wrap: anywhere; } .dl-table .small { font-size: 13px; color: var(--muted); } @media (max-width: 720px) { .dl-table thead { display: none; } .dl-table, .dl-table tbody, .dl-table tr, .dl-table td { display: block; width: 100%; } .dl-table td { border: 0; padding: 4px 0; } .dl-table tr { border-bottom: 1px solid var(--line); padding: 8px 0; } } .dl-steps { margin: 14px 0 0; padding-left: 20px; color: var(--ink-2); font-size: 14.5px; } .dl-steps li { margin: 6px 0; } .dl-key { display: block; margin-top: 6px; font: 12.5px/1.6 var(--mono); overflow-wrap: anywhere; } .agent-setup { min-width: 0; } .session .sub-h { margin-top: 0; } .chat-more { margin-top: 32px; } .chat-more .chat { margin-top: 14px; } .covers { list-style: none; padding: 0; margin: 36px 0 0; display: grid; gap: 12px; } @media (min-width: 640px) { .covers { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (min-width: 980px) { .covers { grid-template-columns: repeat(3, minmax(0, 1fr)); } } .covers a { display: grid; align-content: start; gap: 4px; height: 100%; padding: 16px 18px; background: var(--surface); border: 1px solid var(--line); border-radius: 12px; text-decoration: none; color: var(--ink-2); font-size: 14.5px; transition: border-color .15s ease; } .covers a:hover { border-color: var(--accent); } .covers b { color: var(--ink); font-size: 16px; } .ship-demo .demo::before { inset: 8% 0 -6% 6%; }