* marketing: keep spaces around hover words in production; mobile layout Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * marketing: centre the column when the rail is a top bar Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * marketing: centre the intro below the rail breakpoint Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> ---------
Unified · Split
| @@ -43,7 +43,7 @@ const { gh } = Astro.props; · 42 unmodified lines | ||
| 43 | 43 | <li> |
| 44 | 44 | <span class="doc__num">01</span> |
| 45 | 45 | <span> |
| 46 | − Connect | |
| 46 | + Connect{" "} | |
| 47 | 47 | <span class="doc__pop" tabindex="0"> |
| 48 | 48 | <span class="doc__pop-word">everything</span> |
| 49 | 49 | <span class="doc__pop-panel" aria-hidden="true"> |
| @@ -53,13 +53,13 @@ const { gh } = Astro.props; · 3 unmodified lines | ||
| 53 | 53 | <span class="doc__pop-pill" style={`--i:${toolLogos.length}`}>any OpenAPI, GraphQL, or MCP</span> |
| 54 | 54 | </span> |
| 55 | 55 | </span> |
| 56 | − to Executor. | |
| 56 | + {" "}to Executor. | |
| 57 | 57 | </span> |
| 58 | 58 | </li> |
| 59 | 59 | <li> |
| 60 | 60 | <span class="doc__num">02</span> |
| 61 | 61 | <span> |
| 62 | − Give | |
| 62 | + Give{" "} | |
| 63 | 63 | <span class="doc__pop" tabindex="0"> |
| 64 | 64 | <span class="doc__pop-word">your agent</span> |
| 65 | 65 | <span class="doc__pop-panel" aria-hidden="true"> |
| @@ -69,12 +69,12 @@ const { gh } = Astro.props; · 3 unmodified lines | ||
| 69 | 69 | <span class="doc__pop-pill" style={`--i:${agentLogos.length}`}>any MCP client</span> |
| 70 | 70 | </span> |
| 71 | 71 | </span> |
| 72 | − the Executor tool. | |
| 72 | + {" "}the Executor tool. | |
| 73 | 73 | </span> |
| 74 | 74 | </li> |
| 75 | 75 | <li> |
| 76 | 76 | <span class="doc__num">03</span> |
| 77 | − <span>That's it. <a href="#install">Get started.</a></span> | |
| 77 | + <span>That's it.{" "}<a href="#install">Get started.</a></span> | |
| 78 | 78 | </li> |
| 79 | 79 | </ol> |
| 80 | 80 | <p class="doc__subhead">One MCP. All your accounts.</p> |
| @@ -1742,3 +1742,13 @@ main:has(.page > .page__rail) > .pattern-bg, · 1741 unmodified lines | ||
| 1742 | 1742 | main:has(.page > .page__rail) > .pattern-bg + div { |
| 1743 | 1743 | display: none; |
| 1744 | 1744 | } |
| 1745 | + | |
| 1746 | +/* Below the desktop breakpoint the rail is a top bar; keep it in view. */ | |
| 1747 | +@media (max-width: 1023.98px) { | |
| 1748 | + .page__rail { | |
| 1749 | + position: sticky; | |
| 1750 | + top: 0; | |
| 1751 | + z-index: 30; | |
| 1752 | + background: var(--color-surface); | |
| 1753 | + } | |
| 1754 | +} | |
| @@ -1,7 +1,10 @@ | ||
| 1 | 1 | /* Document-style homepage body. Measured prose, hairline sections. */ |
| 2 | 2 | .doc { |
| 3 | 3 | max-width: 720px; |
| 4 | + /* Without the rail there is nothing to align to, so the column centres. */ | |
| 5 | + margin-inline: auto; | |
| 4 | 6 | padding: 4rem 1.5rem 6rem; |
| 7 | + overflow-x: clip; | |
| 5 | 8 | } |
| 6 | 9 | @media (min-width: 640px) { |
| 7 | 10 | .doc { |
| @@ -12,6 +15,7 @@ · 4 unmodified lines | ||
| 12 | 15 | /* Fill the content column; the frame around rail + content is centred. */ |
| 13 | 16 | .doc { |
| 14 | 17 | max-width: none; |
| 18 | + margin-inline: 0; | |
| 15 | 19 | padding-inline: 0; |
| 16 | 20 | } |
| 17 | 21 | .doc__intro, |
| @@ -613,16 +617,20 @@ a.doc__term-v:hover { · 595 unmodified lines | ||
| 613 | 617 | 0 12px 32px -12px rgba(13, 13, 16, 0.18); |
| 614 | 618 | opacity: 0; |
| 615 | 619 | pointer-events: none; |
| 620 | + visibility: hidden; | |
| 616 | 621 | transform: translateY(-4px); |
| 617 | 622 | transition: |
| 618 | 623 | opacity 0.15s ease, |
| 619 | − transform 0.15s ease; | |
| 624 | + transform 0.15s ease, | |
| 625 | + visibility 0s linear 0.15s; | |
| 620 | 626 | } |
| 621 | 627 | .doc__pop:hover .doc__pop-panel, |
| 622 | 628 | .doc__pop:focus-within .doc__pop-panel { |
| 623 | 629 | opacity: 1; |
| 624 | 630 | pointer-events: auto; |
| 631 | + visibility: visible; | |
| 625 | 632 | transform: translateY(0); |
| 633 | + transition-delay: 0s; | |
| 626 | 634 | } |
| 627 | 635 | .doc__pop-tile, |
| 628 | 636 | .doc__pop-pill { |
| @@ -818,3 +826,126 @@ a.doc__term-v:hover { · 189 unmodified lines | ||
| 818 | 826 | .doc__list--open li:last-child { |
| 819 | 827 | border-bottom: 0; |
| 820 | 828 | } |
| 829 | + | |
| 830 | +/* ── Phones ── */ | |
| 831 | +@media (max-width: 719.98px) { | |
| 832 | + .doc { | |
| 833 | + padding: 2.25rem 1.25rem 4rem; | |
| 834 | + } | |
| 835 | + .doc__title { | |
| 836 | + font-size: 1.75rem; | |
| 837 | + } | |
| 838 | + .doc__steps { | |
| 839 | + font-size: 16px; | |
| 840 | + } | |
| 841 | + .doc__steps li { | |
| 842 | + grid-template-columns: 1.75rem 1fr; | |
| 843 | + } | |
| 844 | + .doc__subhead { | |
| 845 | + font-size: 16px; | |
| 846 | + } | |
| 847 | + /* Hover reveals become tap reveals. The word can sit anywhere on the line, | |
| 848 | + so the panel is not anchored to it; it is fixed across the viewport width | |
| 849 | + just under the top bar. */ | |
| 850 | + .doc__pop { | |
| 851 | + position: static; | |
| 852 | + } | |
| 853 | + .doc__pop-panel { | |
| 854 | + position: fixed; | |
| 855 | + left: 1rem; | |
| 856 | + right: 1rem; | |
| 857 | + top: 64px; | |
| 858 | + width: auto; | |
| 859 | + max-width: none; | |
| 860 | + } | |
| 861 | + .doc__tabs { | |
| 862 | + display: flex; | |
| 863 | + width: 100%; | |
| 864 | + } | |
| 865 | + .doc__tabs button { | |
| 866 | + flex: 1; | |
| 867 | + padding: 0.45rem 0.4rem; | |
| 868 | + font-size: 13px; | |
| 869 | + white-space: nowrap; | |
| 870 | + } | |
| 871 | + .doc__tabpanes p { | |
| 872 | + min-height: 0; | |
| 873 | + } | |
| 874 | + .doc__actions { | |
| 875 | + flex-direction: column; | |
| 876 | + align-items: stretch; | |
| 877 | + } | |
| 878 | + .doc__actions > .btn-primary, | |
| 879 | + .doc__actions > .btn-secondary, | |
| 880 | + .doc__actions > .doc__cmd, | |
| 881 | + .doc__actions > .doc__dl { | |
| 882 | + width: 100%; | |
| 883 | + justify-content: center; | |
| 884 | + text-align: center; | |
| 885 | + } | |
| 886 | + .doc__dl { | |
| 887 | + display: flex; | |
| 888 | + flex-direction: column; | |
| 889 | + align-items: stretch; | |
| 890 | + } | |
| 891 | + .doc__dl > a { | |
| 892 | + width: 100%; | |
| 893 | + justify-content: center; | |
| 894 | + } | |
| 895 | + .doc__dl-other { | |
| 896 | + align-self: center; | |
| 897 | + } | |
| 898 | + .doc__dl .download-other-list { | |
| 899 | + left: 50%; | |
| 900 | + transform: translateX(-50%); | |
| 901 | + } | |
| 902 | + .doc__section { | |
| 903 | + margin-top: 2.5rem; | |
| 904 | + padding-top: 1.75rem; | |
| 905 | + } | |
| 906 | + .doc__h { | |
| 907 | + font-size: 20px; | |
| 908 | + } | |
| 909 | + .doc__ways { | |
| 910 | + grid-template-columns: 1fr; | |
| 911 | + } | |
| 912 | + .doc__way-a .btn-primary, | |
| 913 | + .doc__way-a .btn-secondary { | |
| 914 | + width: 100%; | |
| 915 | + justify-content: center; | |
| 916 | + text-align: center; | |
| 917 | + } | |
| 918 | + .doc__way-a .doc__dl { | |
| 919 | + width: 100%; | |
| 920 | + } | |
| 921 | + .doc__fig--hero .surface-card { | |
| 922 | + padding: 1rem; | |
| 923 | + } | |
| 924 | +} | |
| 925 | + | |
| 926 | +/* Below the rail breakpoint the intro is centred, not left-ragged. */ | |
| 927 | +@media (max-width: 1023.98px) { | |
| 928 | + .doc__intro { | |
| 929 | + text-align: center; | |
| 930 | + } | |
| 931 | + .doc__steps { | |
| 932 | + justify-content: center; | |
| 933 | + } | |
| 934 | + .doc__steps li { | |
| 935 | + display: flex; | |
| 936 | + justify-content: center; | |
| 937 | + gap: 0.6rem; | |
| 938 | + } | |
| 939 | + .doc__tabs { | |
| 940 | + margin-inline: auto; | |
| 941 | + } | |
| 942 | + .doc__tabpanes p { | |
| 943 | + margin-inline: auto; | |
| 944 | + } | |
| 945 | + .doc__actions { | |
| 946 | + justify-content: center; | |
| 947 | + } | |
| 948 | + .doc__pop-panel { | |
| 949 | + text-align: left; | |
| 950 | + } | |
| 951 | +} | |
| @@ -290,60 +290,69 @@ · 289 unmodified lines | ||
| 290 | 290 | color: var(--color-ink-2); |
| 291 | 291 | } |
| 292 | 292 | |
| 293 | −/* ═══ Mobile: every rail collapses to one horizontal top bar ═══ */ | |
| 293 | +/* ═══ Mobile: the rail becomes a slim top bar ═══ | |
| 294 | + Brand on the left, three links and the Get started button on the right. | |
| 295 | + Everything else in the rail (index, star pill, YC badge, contact) is hidden; | |
| 296 | + the page body carries it. */ | |
| 294 | 297 | @media (max-width: 1023.98px) { |
| 295 | 298 | .rail { |
| 296 | 299 | flex-direction: row; |
| 297 | 300 | align-items: center; |
| 298 | 301 | justify-content: space-between; |
| 299 | − gap: 16px; | |
| 302 | + gap: 12px; | |
| 300 | 303 | height: 56px; |
| 301 | − padding: 0 24px; | |
| 304 | + padding: 0 16px; | |
| 302 | 305 | border-right: 0; |
| 303 | 306 | border-bottom: 1px solid var(--color-rule); |
| 304 | 307 | } |
| 308 | + .rail .rail__brand { | |
| 309 | + margin: 0; | |
| 310 | + } | |
| 305 | 311 | .rail .rail__toc, |
| 306 | 312 | .rail .rail__toc-label, |
| 307 | 313 | .rail .rail__divider, |
| 308 | 314 | .rail .rail__foot, |
| 309 | 315 | .rail .rail__contact, |
| 310 | − .rail .rail__secondary { | |
| 316 | + .rail .rail__secondary, | |
| 317 | + .rail .gh-star, | |
| 318 | + .rail .rail__box--yc { | |
| 311 | 319 | display: none; |
| 312 | 320 | } |
| 313 | − .rail .rail__nav { | |
| 314 | − flex-direction: row; | |
| 315 | − align-items: center; | |
| 316 | − gap: 20px; | |
| 317 | − } | |
| 318 | − .rail .rail__cta { | |
| 321 | + .rail .rail__stack { | |
| 322 | + flex: 0 1 auto; | |
| 319 | 323 | flex-direction: row; |
| 320 | 324 | align-items: center; |
| 321 | − gap: 12px; | |
| 322 | − margin-top: 0; | |
| 325 | + gap: 16px; | |
| 323 | 326 | } |
| 324 | − .rail .rail__stack { | |
| 325 | − flex: 0 1 auto; | |
| 327 | + .rail .rail__nav { | |
| 326 | 328 | flex-direction: row; |
| 327 | 329 | align-items: center; |
| 328 | − justify-content: flex-end; | |
| 329 | − gap: 20px; | |
| 330 | + gap: 14px; | |
| 330 | 331 | } |
| 331 | 332 | .rail .rail__link { |
| 332 | − padding: 0 0 0 0; | |
| 333 | + padding: 0; | |
| 333 | 334 | font-size: 14px; |
| 335 | + white-space: nowrap; | |
| 334 | 336 | } |
| 335 | 337 | .rail .rail__link::before { |
| 336 | 338 | display: none; |
| 337 | 339 | } |
| 338 | − /* The star pill and the mono count are the first things to go when the bar | |
| 339 | − gets tight; the links themselves survive longest. */ | |
| 340 | − .rail .gh-star { | |
| 341 | − display: none; | |
| 340 | + .rail .rail__cta { | |
| 341 | + display: block; | |
| 342 | + margin-top: 0; | |
| 343 | + } | |
| 344 | + .rail--b .rail__box--primary { | |
| 345 | + width: auto; | |
| 346 | + height: 32px; | |
| 347 | + padding: 0 12px; | |
| 348 | + font-size: 13px; | |
| 342 | 349 | } |
| 343 | 350 | } |
| 344 | − | |
| 345 | −@media (max-width: 719.98px) { | |
| 351 | +@media (max-width: 479.98px) { | |
| 346 | 352 | .rail .rail__nav .rail__link:not(.rail__link--keep) { |
| 347 | 353 | display: none; |
| 348 | 354 | } |
| 355 | + .rail .rail__nav { | |
| 356 | + gap: 12px; | |
| 357 | + } | |
| 349 | 358 | } |
| @@ -155,3 +155,17 @@ · 154 unmodified lines | ||
| 155 | 155 | width: calc(50% - 6px); |
| 156 | 156 | } |
| 157 | 157 | } |
| 158 | + | |
| 159 | +@media (max-width: 719.98px) { | |
| 160 | + .testi { | |
| 161 | + /* No edge fade on phones: it eats the first card's left edge. */ | |
| 162 | + -webkit-mask-image: none; | |
| 163 | + mask-image: none; | |
| 164 | + } | |
| 165 | + .testi__card { | |
| 166 | + width: 240px; | |
| 167 | + } | |
| 168 | + .testi__text { | |
| 169 | + -webkit-line-clamp: 5; | |
| 170 | + } | |
| 171 | +} | |