1<!DOCTYPE html> 2<html lang="en" data-beasties-container> 3 <head> 4 <meta charset="UTF-8" /> 5 <link rel="icon" type="image/png" href="/assets/favicon-fi_uJybw.ico" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7
7<script 8 type="module" 9 async 10 crossorigin 11 src="/assets/app-Dk7xcN3Y.js" 12 ></script>
12 13 <style> 14 .app-button--link .app-button__label[data-v-ef5ce0b1] { 15 border-bottom: 1px solid currentColor; 16 padding-bottom: 0.12em; 17 } 18 .app-button--link:hover .app-button__label[data-v-ef5ce0b1] { 19 border-bottom-width: 2px; 20 } 21 .app-button__arrow[data-v-ef5ce0b1] { 22 text-decoration: none; 23 } 24 @font-face { 25 font-family: Recursive Variable; 26 font-style: oblique 0deg 15deg; 27 font-display: swap; 28 font-weight: 300 1000; 29 src: url(/assets/recursive-cyrillic-ext-full-normal-DL48ug1z.woff2) 30 format("woff2-variations"); 31 unicode-range: 32 U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, 33 U+FE2E-FE2F; 34 } 35 @font-face { 36 font-family: Recursive Variable; 37 font-style: oblique 0deg 15deg; 38 font-display: swap; 39 font-weight: 300 1000; 40 src: url(/assets/recursive-vietnamese-full-normal-C9d0lu7G.woff2) 41 format("woff2-variations"); 42 unicode-range: 43 U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, 44 U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, 45 U+1EA0-1EF9, U+20AB; 46 } 47 @font-face { 48 font-family: Recursive Variable; 49 font-style: oblique 0deg 15deg; 50 font-display: swap; 51 font-weight: 300 1000; 52 src: url(/assets/recursive-latin-ext-full-normal-Ced8ljaz.woff2) 53 format("woff2-variations"); 54 unicode-range: 55 U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, 56 U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, 57 U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; 58 } 59 @font-face { 60 font-family: Recursive Variable; 61 font-style: oblique 0deg 15deg; 62 font-display: swap; 63 font-weight: 300 1000; 64 src: url(/assets/recursive-latin-full-normal-Bbk0y8ID.woff2) 65 format("woff2-variations"); 66 unicode-range: 67 U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, 68 U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, 69 U+2212, U+2215, U+FEFF, U+FFFD; 70 } 71 :root { 72 --accent-500: #3569e5; 73 --accent-600: #2457d6; 74 --accent-700: #1945b6; 75 --accent-soft: #dce6ff; 76 --signal: #f05a32; 77 --radius-sm: 2px; 78 --radius-md: 4px; 79 --radius-lg: 4px; 80 --radius-pill: 999px; 81 --shadow-sm: 0 1px 2px rgba(16, 24, 32, 0.06); 82 --shadow-md: 0 8px 24px rgba(16, 24, 32, 0.08); 83 --shadow-lg: 0 20px 44px -16px rgba(16, 24, 32, 0.2); 84 --dur-fast: 0.12s; 85 --dur-base: 0.2s; 86 --dur-slow: 0.4s; 87 --ease-out: cubic-bezier(0.22, 1, 0.36, 1); 88 --text-xs: 0.75rem; 89 --text-sm: 0.875rem; 90 --text-base: 1rem; 91 --text-lg: 1.125rem; 92 --text-xl: clamp(1.25rem, 1.1rem + 0.6vw, 1.5rem); 93 --text-2xl: clamp(1.5rem, 1.3rem + 1vw, 2rem); 94 --text-3xl: clamp(2rem, 1.6rem + 1.8vw, 2.75rem); 95 --text-4xl: clamp(2.5rem, 1.8rem + 3vw, 4rem); 96 --text-5xl: clamp(3rem, 2rem + 4.5vw, 5.5rem); 97 --font-sans: 98 "Recursive Variable", ui-sans-serif, system-ui, -apple-system, 99 sans-serif; 100 --font-serif: var(--font-sans); 101 --font-mono: 102 "Recursive Variable", ui-monospace, SFMono-Regular, Menlo, monospace; 103 } 104 [data-surface="editorial"] { 105 --bg: #f4f5f2; 106 --bg-elev: #ffffff; 107 --bg-sunken: #e9ecef; 108 --ink: #101820; 109 --ink-muted: #56616b; 110 --ink-faint: #76818a; 111 --rule: #c9d0d5; 112 --workflow-card-bg: #e7ebee; 113 --workflow-card-border: #c5cdd3; 114 --accent: var(--accent-600); 115 --accent-ink: #ffffff; 116 --link: var(--accent-600); 117 --display-font: var(--font-sans); 118 --display-weight: 700; 119 --body-font: var(--font-sans); 120 --mono-font: var(--font-mono); 121 --selection-bg: var(--accent-soft); 122 --selection-fg: var(--ink); 123 } 124 [data-surface] { 125 background: var(--bg); 126 color: var(--ink); 127 font-family: var(--body-font); 128 font-feature-settings: "ss01"; 129 font-variation-settings: 130 "MONO" 0, 131 "CASL" 0, 132 "slnt" 0, 133 "CRSV" 0; 134 } 135 [data-surface] ::-moz-selection { 136 background: var(--selection-bg); 137 color: var(--selection-fg); 138 } 139 [data-surface] ::selection { 140 background: var(--selection-bg); 141 color: var(--selection-fg); 142 } 143 @media (prefers-reduced-motion: reduce) { 144 * { 145 animation-duration: 0.01ms !important; 146 transition-duration: 0.01ms !important; 147 } 148 } 149 *, 150 :before, 151 :after { 152 --tw-border-spacing-x: 0; 153 --tw-border-spacing-y: 0; 154 --tw-translate-x: 0; 155 --tw-translate-y: 0; 156 --tw-rotate: 0; 157 --tw-skew-x: 0; 158 --tw-skew-y: 0; 159 --tw-scale-x: 1; 160 --tw-scale-y: 1; 161 --tw-pan-x: ; 162 --tw-pan-y: ; 163 --tw-pinch-zoom: ; 164 --tw-scroll-snap-strictness: proximity; 165 --tw-gradient-from-position: ;
166 --tw-gradient-via-position: ; 167 --tw-gradient-to-position: ; 168 --tw-ordinal: ; 169 --tw-slashed-zero: ; 170 --tw-numeric-figure: ; 171 --tw-numeric-spacing: ; 172 --tw-numeric-fraction: ; 173 --tw-ring-inset: ; 174 --tw-ring-offset-width: 0px; 175 --tw-ring-offset-color: #fff; 176 --tw-ring-color: rgb(59 130 246 / 0.5); 177 --tw-ring-offset-shadow: 0 0 #0000; 178 --tw-ring-shadow: 0 0 #0000; 179 --tw-shadow: 0 0 #0000; 180 --tw-shadow-colored: 0 0 #0000; 181 --tw-blur: ; 182 --tw-brightness: ; 183 --tw-contrast: ; 184 --tw-grayscale: ; 185 --tw-hue-rotate: ; 186 --tw-invert: ; 187 --tw-saturate: ; 188 --tw-sepia: ; 189 --tw-drop-shadow: ; 190 --tw-backdrop-blur: ; 191 --tw-backdrop-brightness: ; 192 --tw-backdrop-contrast: ; 193 --tw-backdrop-grayscale: ; 194 --tw-backdrop-hue-rotate: ; 195 --tw-backdrop-invert: ; 196 --tw-backdrop-opacity: ; 197 --tw-backdrop-saturate: ; 198 --tw-backdrop-sepia: ; 199 --tw-contain-size: ; 200 --tw-contain-layout: ; 201 --tw-contain-paint: ; 202 --tw-contain-style: ; 203 } 204 *, 205 :before, 206 :after { 207 box-sizing: border-box; 208 border-width: 0; 209 border-style: solid; 210 border-color: #e5e7eb; 211 } 212 :before, 213 :after { 214 --tw-content: ""; 215 } 216 html { 217 line-height: 1.5; 218 -webkit-text-size-adjust: 100%; 219 -moz-tab-size: 4; 220 -o-tab-size: 4; 221 tab-size: 4; 222 font-family: 223 Recursive Variable, 224 ui-sans-serif, 225 system-ui, 226 sans-serif; 227 font-feature-settings: normal; 228 font-variation-settings: normal; 229 -webkit-tap-highlight-color: transparent; 230 } 231 body { 232 margin: 0; 233 line-height: inherit; 234 } 235 h1, 236 h2, 237 h3 { 238 font-size: inherit; 239 font-weight: inherit; 240 } 241 a { 242 color: inherit; 243 text-decoration: inherit; 244 } 245 button, 246 input, 247 textarea { 248 font-family: inherit; 249 font-feature-settings: inherit; 250 font-variation-settings: inherit; 251 font-size: 100%; 252 font-weight: inherit; 253 line-height: inherit; 254 letter-spacing: inherit; 255 color: inherit; 256 margin: 0; 257 padding: 0; 258 } 259 button { 260 text-transform: none; 261 } 262 button, 263 input:where([type="button"]), 264 input:where([type="reset"]), 265 input:where([type="submit"]) { 266 -webkit-appearance: button; 267 background-color: transparent; 268 background-image: none; 269 } 270 h1, 271 h2, 272 h3, 273 p { 274 margin: 0; 275 } 276 ul { 277 list-style: none; 278 margin: 0; 279 padding: 0; 280 } 281 textarea { 282 resize: vertical; 283 } 284 input::-moz-placeholder, 285 textarea::-moz-placeholder { 286 opacity: 1; 287 color: #9ca3af; 288 } 289 input::placeholder, 290 textarea::placeholder { 291 opacity: 1; 292 color: #9ca3af; 293 } 294 button { 295 cursor: pointer; 296 } 297 img, 298 svg { 299 display: block; 300 vertical-align: middle; 301 } 302 img { 303 max-width: 100%; 304 height: auto; 305 } 306 [data-surface="editorial"] main :is(p, li, dd) a:not(.app-button) { 307 text-decoration-color: color-mix( 308 in srgb, 309 currentColor 58%, 310 transparent 311 ); 312 text-decoration-line: underline; 313 text-decoration-thickness: 1px; 314 text-underline-offset: 0.24em; 315 -webkit-text-decoration-skip: ink; 316 text-decoration-skip-ink: auto; 317 } 318 [data-surface="editorial"] main :is(p, li, dd) a:not(.app-button):hover { 319 text-decoration-color: currentColor; 320 text-decoration-thickness: 2px; 321 } 322 .prose { 323 color: var(--tw-prose-body); 324 max-width: 65ch; 325 } 326 .prose 327 :where(p):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 328 margin-top: 1.25em; 329 margin-bottom: 1.25em; 330 line-height: 1.75; 331 } 332 .prose 333 :where([class~="lead"]):not( 334 :where([class~="not-prose"], [class~="not-prose"] *) 335 ) { 336 color: var(--tw-prose-lead); 337 font-size: 1.25em; 338 line-height: 1.6; 339 margin-top: 1.2em; 340 margin-bottom: 1.2em; 341 } 342 .prose
343 :where(a):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 344 color: var(--tw-prose-links); 345 text-decoration: underline; 346 font-weight: 500; 347 } 348 .prose 349 :where(strong):not( 350 :where([class~="not-prose"], [class~="not-prose"] *) 351 ) { 352 color: var(--tw-prose-bold); 353 font-weight: 600; 354 } 355 .prose 356 :where(a strong):not( 357 :where([class~="not-prose"], [class~="not-prose"] *) 358 ) { 359 color: inherit; 360 } 361 .prose 362 :where(blockquote strong):not( 363 :where([class~="not-prose"], [class~="not-prose"] *) 364 ) { 365 color: inherit; 366 } 367 .prose 368 :where(thead th strong):not( 369 :where([class~="not-prose"], [class~="not-prose"] *) 370 ) { 371 color: inherit; 372 } 373 .prose 374 :where(ol):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 375 list-style-type: decimal; 376 margin-top: 1.25em; 377 margin-bottom: 1.25em; 378 padding-inline-start: 1.625em; 379 } 380 .prose 381 :where(ol[type="A"]):not( 382 :where([class~="not-prose"], [class~="not-prose"] *) 383 ) { 384 list-style-type: upper-alpha; 385 } 386 .prose 387 :where(ol[type="a"]):not( 388 :where([class~="not-prose"], [class~="not-prose"] *) 389 ) { 390 list-style-type: lower-alpha; 391 } 392 .prose 393 :where(ol[type="A s"]):not( 394 :where([class~="not-prose"], [class~="not-prose"] *) 395 ) { 396 list-style-type: upper-alpha; 397 } 398 .prose 399 :where(ol[type="a s"]):not( 400 :where([class~="not-prose"], [class~="not-prose"] *) 401 ) { 402 list-style-type: lower-alpha; 403 } 404 .prose 405 :where(ol[type="I"]):not( 406 :where([class~="not-prose"], [class~="not-prose"] *) 407 ) { 408 list-style-type: upper-roman; 409 } 410 .prose 411 :where(ol[type="i"]):not( 412 :where([class~="not-prose"], [class~="not-prose"] *) 413 ) { 414 list-style-type: lower-roman; 415 } 416 .prose 417 :where(ol[type="I s"]):not( 418 :where([class~="not-prose"], [class~="not-prose"] *) 419 ) { 420 list-style-type: upper-roman; 421 } 422 .prose 423 :where(ol[type="i s"]):not( 424 :where([class~="not-prose"], [class~="not-prose"] *) 425 ) { 426 list-style-type: lower-roman; 427 } 428 .prose 429 :where(ol[type="1"]):not( 430 :where([class~="not-prose"], [class~="not-prose"] *) 431 ) { 432 list-style-type: decimal; 433 } 434 .prose 435 :where(ul):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 436 list-style-type: disc; 437 margin-top: 1.25em; 438 margin-bottom: 1.25em; 439 padding-inline-start: 1.625em; 440 } 441 .prose 442 :where(ol > li):not( 443 :where([class~="not-prose"], [class~="not-prose"] *) 444 )::marker { 445 font-weight: 400; 446 color: var(--tw-prose-counters); 447 } 448 .prose 449 :where(ul > li):not( 450 :where([class~="not-prose"], [class~="not-prose"] *) 451 )::marker { 452 color: var(--tw-prose-bullets); 453 } 454 .prose 455 :where(dt):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 456 color: var(--tw-prose-headings); 457 font-weight: 600; 458 margin-top: 1.25em; 459 } 460 .prose 461 :where(hr):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 462 border-color: var(--tw-prose-hr); 463 border-top-width: 1px; 464 margin-top: 2em; 465 margin-bottom: 2em; 466 } 467 .prose 468 :where(blockquote):not( 469 :where([class~="not-prose"], [class~="not-prose"] *) 470 ) { 471 font-weight: 500; 472 font-style: italic; 473 color: var(--tw-prose-quotes); 474 border-inline-start-width: 0.25rem; 475 border-inline-start-color: var(--tw-prose-quote-borders); 476 quotes: "â" "â" "â" "â"; 477 padding-inline-start: 1em; 478 padding-left: 1em; 479 margin: 1.5em 0; 480 } 481 .prose 482 :where(blockquote p:first-of-type):not( 483 :where([class~="not-prose"], [class~="not-prose"] *) 484 ):before { 485 content: open-quote; 486 } 487 .prose 488 :where(blockquote p:last-of-type):not( 489 :where([class~="not-prose"], [class~="not-prose"] *) 490 ):after { 491 content: close-quote; 492 } 493 .prose 494 :where(h1):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 495 color: var(--tw-prose-headings); 496 font-weight: 800; 497 font-size: 2.25rem; 498 margin-top: 0; 499 margin-bottom: 0.8888889em; 500 line-height: 2.5rem; 501 } 502 .prose 503 :where(h1 strong):not( 504 :where([class~="not-prose"], [class~="not-prose"] *) 505 ) { 506 font-weight: 900; 507 color: inherit; 508 } 509 .prose 510 :where(h2):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 511 color: var(--tw-prose-headings); 512 font-weight: 700; 513 font-size: 1.875rem; 514 margin-top: 2em; 515 margin-bottom: 1em; 516 line-height: 2.25rem; 517 } 518 .prose 519 :where(h2 strong):not( 520 :where([class~="not-prose"], [class~="not-prose"] *) 521 ) { 522 font-weight: 800; 523 color: inherit; 524 } 525 .prose 526 :where(h3):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 527 color: var(--tw-prose-headings); 528 font-weight: 600; 529 font-size: 1.5rem; 530 margin-top: 1.6em; 531 margin-bottom: 0.6em; 532 line-height: 2rem; 533 } 534 .prose 535 :where(h3 strong):not( 536 :where([class~="not-prose"], [class~="not-prose"] *) 537 ) { 538 font-weight: 700; 539 color: inherit; 540 } 541 .prose 542 :where(h4):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 543 color: var(--tw-prose-headings); 544 font-weight: 600; 545 margin-top: 1.5em; 546 margin-bottom: 0.5em; 547 line-height: 1.5; 548 } 549 .prose 550 :where(h4 strong):not( 551 :where([class~="not-prose"], [class~="not-prose"] *) 552 ) { 553 font-weight: 700; 554 color: inherit; 555 } 556 .prose 557 :where(img):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 558 margin-top: 2em; 559 margin-bottom: 2em; 560 border-radius: 0.5rem; 561 box-shadow: 562 0 10px 15px -3px #0000001a, 563 0 4px 6px -2px #0000000d; 564 } 565 .prose 566 :where(picture):not( 567 :where([class~="not-prose"], [class~="not-prose"] *) 568 ) { 569 display: block; 570 margin-top: 2em; 571 margin-bottom: 2em; 572 } 573 .prose 574 :where(video):not( 575 :where([class~="not-prose"], [class~="not-prose"] *) 576 ) { 577 margin-top: 2em; 578 margin-bottom: 2em; 579 } 580 .prose 581 :where(kbd):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 582 font-weight: 500; 583 font-family: inherit; 584 color: var(--tw-prose-kbd); 585 box-shadow: 586 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 587 0 3px rgb(var(--tw-prose-kbd-shadows) / 10%); 588 font-size: 0.875em; 589 border-radius: 0.3125rem; 590 padding-top: 0.1875em; 591 padding-inline-end: 0.375em; 592 padding-bottom: 0.1875em; 593 padding-inline-start: 0.375em; 594 } 595 .prose 596 :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 597 color: #1f2937; 598 font-weight: 600; 599 font-size: 0.9em; 600 font-family: 601 Recursive Variable, 602 ui-monospace, 603 monospace; 604 background-color: #e5e7eb; 605 padding: 0.1em 0.3em; 606 border-radius: 0.25rem; 607 } 608 .prose 609 :where(code):not( 610 :where([class~="not-prose"], [class~="not-prose"] *) 611 ):before { 612 content: "`"; 613 } 614 .prose 615 :where(code):not( 616 :where([class~="not-prose"], [class~="not-prose"] *) 617 ):after { 618 content: "`"; 619 } 620 .prose 621 :where(a code):not( 622 :where([class~="not-prose"], [class~="not-prose"] *) 623 ) { 624 color: inherit; 625 } 626 .prose 627 :where(h1 code):not( 628 :where([class~="not-prose"], [class~="not-prose"] *) 629 ) { 630 color: inherit; 631 } 632 .prose 633 :where(h2 code):not( 634 :where([class~="not-prose"], [class~="not-prose"] *) 635 ) { 636 color: inherit; 637 font-size: 0.875em; 638 } 639 .prose 640 :where(h3 code):not( 641 :where([class~="not-prose"], [class~="not-prose"] *) 642 ) { 643 color: inherit; 644 font-size: 0.9em; 645 } 646 .prose 647 :where(h4 code):not( 648 :where([class~="not-prose"], [class~="not-prose"] *) 649 ) { 650 color: inherit; 651 } 652 .prose 653 :where(blockquote code):not( 654 :where([class~="not-prose"], [class~="not-prose"] *) 655 ) { 656 color: inherit; 657 } 658 .prose 659 :where(thead th code):not( 660 :where([class~="not-prose"], [class~="not-prose"] *) 661 ) { 662 color: inherit; 663 } 664 .prose 665 :where(pre):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 666 color: var(--tw-prose-pre-code); 667 background-color: var(--tw-prose-pre-bg); 668 overflow-x: auto; 669 font-weight: 400; 670 font-size: 0.9em; 671 line-height: 1.7142857; 672 margin-top: 1.7142857em; 673 margin-bottom: 1.7142857em; 674 border-radius: 0.375rem; 675 padding-inline-end: 1.1428571em; 676 padding-inline-start: 1.1428571em; 677 font-family: 678 Recursive Variable, 679 ui-monospace, 680 monospace; 681 border: 1px solid #d1d5db; 682 padding: 1em; 683 } 684 .prose 685 :where(pre code):not( 686 :where([class~="not-prose"], [class~="not-prose"] *) 687 ) { 688 background-color: transparent; 689 border-width: 0; 690 border-radius: 0; 691 padding: 0; 692 font-weight: inherit; 693 color: var(--tw-prose-pre-code); 694 font-size: 1em; 695 font-family: inherit; 696 line-height: inherit; 697 border: none; 698 } 699 .prose 700 :where(pre code):not( 701 :where([class~="not-prose"], [class~="not-prose"] *) 702 ):before { 703 content: none; 704 } 705 .prose 706 :where(pre code):not( 707 :where([class~="not-prose"], [class~="not-prose"] *) 708 ):after { 709 content: none; 710 } 711 .prose 712 :where(table):not( 713 :where([class~="not-prose"], [class~="not-prose"] *) 714 ) { 715 width: 100%; 716 table-layout: auto; 717 margin-top: 2em; 718 margin-bottom: 2em; 719 font-size: 0.875em; 720 line-height: 1.7142857; 721 } 722 .prose 723 :where(thead):not( 724 :where([class~="not-prose"], [class~="not-prose"] *) 725 ) { 726 border-bottom-width: 1px; 727 border-bottom-color: var(--tw-prose-th-borders); 728 } 729 .prose 730 :where(thead th):not( 731 :where([class~="not-prose"], [class~="not-prose"] *) 732 ) { 733 color: var(--tw-prose-headings); 734 font-weight: 600; 735 vertical-align: bottom; 736 padding-inline-end: 0.5714286em; 737 padding-bottom: 0.5714286em; 738 padding-inline-start: 0.5714286em; 739 } 740 .prose 741 :where(tbody tr):not( 742 :where([class~="not-prose"], [class~="not-prose"] *) 743 ) { 744 border-bottom-width: 1px; 745 border-bottom-color: var(--tw-prose-td-borders); 746 } 747 .prose 748 :where(tbody tr:last-child):not( 749 :where([class~="not-prose"], [class~="not-prose"] *) 750 ) { 751 border-bottom-width: 0; 752 } 753 .prose 754 :where(tbody td):not( 755 :where([class~="not-prose"], [class~="not-prose"] *) 756 ) { 757 vertical-align: baseline; 758 } 759 .prose 760 :where(tfoot):not( 761 :where([class~="not-prose"], [class~="not-prose"] *) 762 ) { 763 border-top-width: 1px; 764 border-top-color: var(--tw-prose-th-borders); 765 } 766 .prose 767 :where(tfoot td):not( 768 :where([class~="not-prose"], [class~="not-prose"] *) 769 ) { 770 vertical-align: top; 771 } 772 .prose 773 :where(th, td):not( 774 :where([class~="not-prose"], [class~="not-prose"] *) 775 ) { 776 text-align: start; 777 } 778 .prose 779 :where(figure > *):not( 780 :where([class~="not-prose"], [class~="not-prose"] *) 781 ) { 782 margin-top: 0; 783 margin-bottom: 0; 784 } 785 .prose 786 :where(figcaption):not( 787 :where([class~="not-prose"], [class~="not-prose"] *) 788 ) { 789 color: var(--tw-prose-captions); 790 font-size: 0.875em; 791 line-height: 1.4285714; 792 margin-top: 0.8571429em; 793 } 794 .prose { 795 --tw-prose-body: #374151; 796 --tw-prose-headings: #111827; 797 --tw-prose-lead: #4b5563; 798 --tw-prose-links: #4f46e5; 799 --tw-prose-bold: #111827; 800 --tw-prose-counters: #6b7280; 801 --tw-prose-bullets: #9ca3af; 802 --tw-prose-hr: #e5e7eb; 803 --tw-prose-quotes: #4b5563; 804 --tw-prose-quote-borders: #6366f1; 805 --tw-prose-captions: #6b7280; 806 --tw-prose-kbd: #111827; 807 --tw-prose-kbd-shadows: 17 24 39; 808 --tw-prose-code: #4f46e5; 809 --tw-prose-pre-code: #c7d2fe; 810 --tw-prose-pre-bg: #1f2937; 811 --tw-prose-th-borders: #d1d5db; 812 --tw-prose-td-borders: #e5e7eb; 813 --tw-prose-invert-body: #d1d5db; 814 --tw-prose-invert-headings: #fff; 815 --tw-prose-invert-lead: #9ca3af; 816 --tw-prose-invert-links: #fff; 817 --tw-prose-invert-bold: #fff; 818 --tw-prose-invert-counters: #9ca3af; 819 --tw-prose-invert-bullets: #4b5563; 820 --tw-prose-invert-hr: #374151; 821 --tw-prose-invert-quotes: #f3f4f6; 822 --tw-prose-invert-quote-borders: #374151; 823 --tw-prose-invert-captions: #9ca3af; 824 --tw-prose-invert-kbd: #fff; 825 --tw-prose-invert-kbd-shadows: 255 255 255; 826 --tw-prose-invert-code: #fff; 827 --tw-prose-invert-pre-code: #d1d5db; 828 --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); 829 --tw-prose-invert-th-borders: #4b5563; 830 --tw-prose-invert-td-borders: #374151; 831 font-size: 1rem; 832 line-height: 1.75; 833 } 834 .prose 835 :where(picture > img):not( 836 :where([class~="not-prose"], [class~="not-prose"] *) 837 ) { 838 margin-top: 0; 839 margin-bottom: 0; 840 } 841 .prose 842 :where(li):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 843 margin-top: 0.5em; 844 margin-bottom: 0.5em; 845 padding-left: 0.25em; 846 line-height: 1.75; 847 } 848 .prose 849 :where(ol > li):not( 850 :where([class~="not-prose"], [class~="not-prose"] *) 851 ) { 852 padding-inline-start: 0.375em; 853 } 854 .prose 855 :where(ul > li):not( 856 :where([class~="not-prose"], [class~="not-prose"] *) 857 ) { 858 padding-inline-start: 0.375em; 859 } 860 .prose 861 :where(.prose > ul > li p):not( 862 :where([class~="not-prose"], [class~="not-prose"] *) 863 ) { 864 margin-top: 0.75em; 865 margin-bottom: 0.75em; 866 } 867 .prose 868 :where(.prose > ul > li > p:first-child):not( 869 :where([class~="not-prose"], [class~="not-prose"] *) 870 ) { 871 margin-top: 1.25em; 872 } 873 .prose 874 :where(.prose > ul > li > p:last-child):not( 875 :where([class~="not-prose"], [class~="not-prose"] *) 876 ) { 877 margin-bottom: 1.25em; 878 } 879 .prose 880 :where(.prose > ol > li > p:first-child):not( 881 :where([class~="not-prose"], [class~="not-prose"] *) 882 ) { 883 margin-top: 1.25em; 884 } 885 .prose 886 :where(.prose > ol > li > p:last-child):not( 887 :where([class~="not-prose"], [class~="not-prose"] *) 888 ) { 889 margin-bottom: 1.25em; 890 } 891 .prose 892 :where(ul ul, ul ol, ol ul, ol ol):not( 893 :where([class~="not-prose"], [class~="not-prose"] *) 894 ) { 895 margin-top: 0.75em; 896 margin-bottom: 0.75em; 897 } 898 .prose 899 :where(dl):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 900 margin-top: 1.25em;
901 margin-bottom: 1.25em; 902 } 903 .prose 904 :where(dd):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 905 margin-top: 0.5em; 906 padding-inline-start: 1.625em; 907 } 908 .prose 909 :where(hr + *):not( 910 :where([class~="not-prose"], [class~="not-prose"] *) 911 ) { 912 margin-top: 0; 913 } 914 .prose 915 :where(h2 + *):not( 916 :where([class~="not-prose"], [class~="not-prose"] *) 917 ) { 918 margin-top: 0; 919 } 920 .prose 921 :where(h3 + *):not( 922 :where([class~="not-prose"], [class~="not-prose"] *) 923 ) { 924 margin-top: 0; 925 } 926 .prose 927 :where(h4 + *):not( 928 :where([class~="not-prose"], [class~="not-prose"] *) 929 ) { 930 margin-top: 0; 931 } 932 .prose 933 :where(thead th:first-child):not( 934 :where([class~="not-prose"], [class~="not-prose"] *) 935 ) { 936 padding-inline-start: 0; 937 } 938 .prose 939 :where(thead th:last-child):not( 940 :where([class~="not-prose"], [class~="not-prose"] *) 941 ) { 942 padding-inline-end: 0; 943 } 944 .prose 945 :where(tbody td, tfoot td):not( 946 :where([class~="not-prose"], [class~="not-prose"] *) 947 ) { 948 padding-top: 0.5714286em; 949 padding-inline-end: 0.5714286em; 950 padding-bottom: 0.5714286em; 951 padding-inline-start: 0.5714286em; 952 } 953 .prose 954 :where(tbody td:first-child, tfoot td:first-child):not( 955 :where([class~="not-prose"], [class~="not-prose"] *) 956 ) { 957 padding-inline-start: 0; 958 } 959 .prose 960 :where(tbody td:last-child, tfoot td:last-child):not( 961 :where([class~="not-prose"], [class~="not-prose"] *) 962 ) { 963 padding-inline-end: 0; 964 } 965 .prose 966 :where(figure):not( 967 :where([class~="not-prose"], [class~="not-prose"] *) 968 ) { 969 margin-top: 2em; 970 margin-bottom: 2em; 971 } 972 .prose 973 :where(.prose > :first-child):not( 974 :where([class~="not-prose"], [class~="not-prose"] *) 975 ) { 976 margin-top: 0; 977 } 978 .prose 979 :where(.prose > :last-child):not( 980 :where([class~="not-prose"], [class~="not-prose"] *) 981 ) { 982 margin-bottom: 0; 983 } 984 .prose 985 :where(h1, h2, h3, h4, h5, h6):not( 986 :where([class~="not-prose"], [class~="not-prose"] *) 987 ) { 988 font-family: 989 Recursive Variable, 990 ui-sans-serif, 991 system-ui, 992 sans-serif; 993 font-weight: 700; 994 margin-top: 1.5em; 995 margin-bottom: 0.75em; 996 } 997 .prose 998 :where(ul, ol):not( 999 :where([class~="not-prose"], [class~="not-prose"] *) 1000 ) { 1001 margin-top: 1.25em; 1002 margin-bottom: 1.25em; 1003 padding-left: 1.75em; 1004 } 1005 .prose 1006 :where(li > p):not( 1007 :where([class~="not-prose"], [class~="not-prose"] *) 1008 ) { 1009 margin-top: 0.25em; 1010 margin-bottom: 0.25em; 1011 } 1012 .prose 1013 :where(li ul, li ol):not( 1014 :where([class~="not-prose"], [class~="not-prose"] *) 1015 ) { 1016 margin-top: 0.5em; 1017 margin-bottom: 0.5em; 1018 padding-left: 1.5em; 1019 } 1020 .fixed { 1021 position: fixed; 1022 } 1023 .sticky { 1024 position: sticky; 1025 } 1026 .left-0 { 1027 left: 0; 1028 } 1029 .top-0 { 1030 top: 0; 1031 } 1032 .z-40 { 1033 z-index: 40; 1034 } 1035 .z-50 { 1036 z-index: 50; 1037 } 1038 .col-span-2 { 1039 grid-column: span 2 / span 2; 1040 } 1041 .mx-2 { 1042 margin-left: 0.5rem; 1043 margin-right: 0.5rem; 1044 } 1045 .mx-auto { 1046 margin-left: auto; 1047 margin-right: auto; 1048 } 1049 .mb-2 { 1050 margin-bottom: 0.5rem; 1051 } 1052 .mb-4 { 1053 margin-bottom: 1rem; 1054 } 1055 .mb-6 { 1056 margin-bottom: 1.5rem; 1057 } 1058 .mt-10 { 1059 margin-top: 2.5rem; 1060 } 1061 .mt-16 { 1062 margin-top: 4rem; 1063 } 1064 .mt-4 { 1065 margin-top: 1rem; 1066 } 1067 .mt-6 { 1068 margin-top: 1.5rem; 1069 } 1070 .mt-8 { 1071 margin-top: 2rem; 1072 } 1073 .mt-auto { 1074 margin-top: auto; 1075 } 1076 .flex { 1077 display: flex; 1078 } 1079 .inline-flex { 1080 display: inline-flex; 1081 } 1082 .grid { 1083 display: grid; 1084 } 1085 .hidden { 1086 display: none; 1087 } 1088 .\!h-auto { 1089 height: auto !important; 1090 } 1091 .h-10 { 1092 height: 2.5rem; 1093 } 1094 .h-16 { 1095 height: 4rem; 1096 } 1097 .h-5 { 1098 height: 1.25rem; 1099 } 1100 .h-6 { 1101 height: 1.5rem; 1102 } 1103 .h-9 { 1104 height: 2.25rem; 1105 } 1106 .h-\[2px\] { 1107 height: 2px; 1108 } 1109 .h-auto { 1110 height: auto; 1111 } 1112 .min-h-screen { 1113 min-height: 100vh; 1114 } 1115 .w-10 { 1116 width: 2.5rem; 1117 } 1118 .w-6 { 1119 width: 1.5rem; 1120 } 1121 .w-full { 1122 width: 100%; 1123 } 1124 .w-px { 1125 width: 1px; 1126 } 1127 .max-w-3xl { 1128 max-width: 48rem; 1129 } 1130 .max-w-4xl { 1131 max-width: 56rem; 1132 } 1133 .max-w-5xl { 1134 max-width: 64rem; 1135 } 1136 .max-w-7xl { 1137 max-width: 80rem; 1138 } 1139 .max-w-\[680px\] { 1140 max-width: 680px; 1141 } 1142 .max-w-none { 1143 max-width: none; 1144 } 1145 .max-w-sm { 1146 max-width: 24rem; 1147 } 1148 .flex-grow { 1149 flex-grow: 1; 1150 } 1151 .select-none { 1152 -webkit-user-select: none; 1153 -moz-user-select: none; 1154 user-select: none; 1155 } 1156 .list-disc { 1157 list-style-type: disc; 1158 } 1159 .grid-cols-1 { 1160 grid-template-columns: repeat(1, minmax(0, 1fr)); 1161 } 1162 .grid-cols-2 { 1163 grid-template-columns: repeat(2, minmax(0, 1fr)); 1164 } 1165 .flex-col { 1166 flex-direction: column; 1167 } 1168 .items-start { 1169 align-items: flex-start; 1170 } 1171 .items-center { 1172 align-items: center; 1173 } 1174 .items-baseline { 1175 align-items: baseline; 1176 } 1177 .justify-center { 1178 justify-content: center; 1179 } 1180 .justify-between { 1181 justify-content: space-between; 1182 } 1183 .gap-1 { 1184 gap: 0.25rem; 1185 } 1186 .gap-10 { 1187 gap: 2.5rem; 1188 } 1189 .gap-2 { 1190 gap: 0.5rem; 1191 } 1192 .gap-3 { 1193 gap: 0.75rem; 1194 } 1195 .gap-6 { 1196 gap: 1.5rem; 1197 } 1198 .gap-x-10 { 1199 -moz-column-gap: 2.5rem; 1200 column-gap: 2.5rem; 1201 } 1202 .gap-y-6 { 1203 row-gap: 1.5rem; 1204 } 1205 .space-y-2 > :not([hidden]) ~ :not([hidden]) { 1206 --tw-space-y-reverse: 0; 1207 margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); 1208 margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); 1209 } 1210 .space-y-3 > :not([hidden]) ~ :not([hidden]) { 1211 --tw-space-y-reverse: 0; 1212 margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); 1213 margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); 1214 } 1215 .space-y-4 > :not([hidden]) ~ :not([hidden]) { 1216 --tw-space-y-reverse: 0; 1217 margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); 1218 margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 1219 } 1220 .space-y-5 > :not([hidden]) ~ :not([hidden]) { 1221 --tw-space-y-reverse: 0; 1222 margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); 1223 margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); 1224 } 1225 .whitespace-nowrap { 1226 white-space: nowrap; 1227 } 1228 .\!rounded-none { 1229 border-radius: 0 !important; 1230 } 1231 .rounded-lg { 1232 border-radius: var(--radius-lg); 1233 } 1234 .rounded-md { 1235 border-radius: var(--radius-md); 1236 } 1237 .rounded-sm { 1238 border-radius: var(--radius-sm); 1239 } 1240 .border { 1241 border-width: 1px; 1242 } 1243 .border-b { 1244 border-bottom-width: 1px; 1245 } 1246 .border-t { 1247 border-top-width: 1px; 1248 } 1249 .border-accent { 1250 border-color: var(--accent); 1251 } 1252 .border-rule { 1253 border-color: var(--rule); 1254 } 1255 .border-transparent { 1256 border-color: transparent; 1257 } 1258 .bg-accent { 1259 background-color: var(--accent); 1260 } 1261 .bg-rule { 1262 background-color: var(--rule); 1263 } 1264 .bg-surface { 1265 background-color: var(--bg); 1266 } 1267 .bg-surface-elev { 1268 background-color: var(--bg-elev); 1269 } 1270 .bg-surface-sunken { 1271 background-color: var(--bg-sunken); 1272 } 1273 .bg-transparent { 1274 background-color: transparent; 1275 } 1276 .\!px-0 { 1277 padding-left: 0 !important; 1278 padding-right: 0 !important; 1279 } 1280 .px-3 { 1281 padding-left: 0.75rem; 1282 padding-right: 0.75rem; 1283 } 1284 .px-4 { 1285 padding-left: 1rem; 1286 padding-right: 1rem; 1287 } 1288 .px-6 { 1289 padding-left: 1.5rem; 1290 padding-right: 1.5rem; 1291 } 1292 .py-12 { 1293 padding-top: 3rem; 1294 padding-bottom: 3rem; 1295 } 1296 .py-16 { 1297 padding-top: 4rem; 1298 padding-bottom: 4rem; 1299 } 1300 .py-2 { 1301 padding-top: 0.5rem; 1302 padding-bottom: 0.5rem; 1303 } 1304 .pb-12 { 1305 padding-bottom: 3rem; 1306 } 1307 .pb-\[1px\] { 1308 padding-bottom: 1px; 1309 } 1310 .pt-28 { 1311 padding-top: 7rem; 1312 } 1313 .pt-8 { 1314 padding-top: 2rem; 1315 } 1316 .font-display { 1317 font-family: var(--display-font), sans-serif; 1318 } 1319 .font-mono { 1320 font-family: 1321 Recursive Variable, 1322 ui-monospace, 1323 monospace; 1324 } 1325 .font-sans, 1326 .font-serif { 1327 font-family: 1328 Recursive Variable, 1329 ui-sans-serif, 1330 system-ui, 1331 sans-serif; 1332 } 1333 .text-2xl { 1334 font-size: 1.5rem; 1335 line-height: 2rem; 1336 } 1337 .text-\[10px\] { 1338 font-size: 10px; 1339 } 1340 .text-\[11px\] { 1341 font-size: 11px; 1342 } 1343 .text-lg { 1344 font-size: 1.125rem; 1345 line-height: 1.75rem; 1346 } 1347 .text-sm { 1348 font-size: 0.875rem; 1349 line-height: 1.25rem; 1350 } 1351 .text-xl { 1352 font-size: 1.25rem; 1353 line-height: 1.75rem; 1354 } 1355 .font-extrabold { 1356 font-weight: 800; 1357 } 1358 .font-semibold { 1359 font-weight: 600; 1360 } 1361 .uppercase { 1362 text-transform: uppercase; 1363 } 1364 .leading-\[1\.02\] { 1365 line-height: 1.02; 1366 } 1367 .leading-none { 1368 line-height: 1; 1369 } 1370 .leading-relaxed { 1371 line-height: 1.625; 1372 } 1373 .tracking-\[-0\.04em\] { 1374 letter-spacing: -0.04em; 1375 } 1376 .tracking-\[0\.22em\] { 1377 letter-spacing: 0.22em; 1378 } 1379 .tracking-\[0\.2em\] { 1380 letter-spacing: 0.2em; 1381 } 1382 .text-\[color\:var\(--accent-ink\)\] { 1383 color: var(--accent-ink); 1384 } 1385 .text-accent { 1386 color: var(--accent); 1387 } 1388 .text-ink { 1389 color: var(--ink); 1390 } 1391 .text-ink-faint { 1392 color: var(--ink-faint); 1393 } 1394 .text-ink-muted { 1395 color: var(--ink-muted); 1396 } 1397 .transition-\[width\] { 1398 transition-property: width; 1399 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 1400 transition-duration: 0.15s; 1401 } 1402 .transition-all { 1403 transition-property: all; 1404 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 1405 transition-duration: 0.15s; 1406 } 1407 .transition-colors { 1408 transition-property: 1409 color, background-color, border-color, text-decoration-color, fill, 1410 stroke; 1411 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 1412 transition-duration: 0.15s; 1413 } 1414 .transition-transform { 1415 transition-property: transform; 1416 transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); 1417 transition-duration: 0.15s; 1418 } 1419 .duration-75 { 1420 transition-duration: 75ms; 1421 } 1422 .duration-\[var\(--dur-base\)\] { 1423 transition-duration: var(--dur-base); 1424 } 1425 .ease-out { 1426 transition-timing-function: var(--ease-out); 1427 } 1428 .font-display { 1429 font-family: var(--display-font); 1430 font-variation-settings: 1431 "MONO" 0, 1432 "CASL" 0, 1433 "slnt" 0, 1434 "CRSV" 0; 1435 } 1436 .font-mono { 1437 font-family: var(--mono-font); 1438 font-variation-settings: 1439 "MONO" 1, 1440 "CASL" 0, 1441 "slnt" 0, 1442 "CRSV" 0; 1443 } 1444 [data-surface="editorial"] :is(h1, h2, h3).font-display { 1445 font-weight: 700 !important; 1446 letter-spacing: -0.035em !important; 1447 } 1448 [data-surface="editorial"] :is(h1, h2, h3) :is(em, .italic) { 1449 color: var(--accent); 1450 font-family: var(--display-font) !important; 1451 font-style: normal !important; 1452 font-variation-settings: 1453 "MONO" 0, 1454 "CASL" 0, 1455 "slnt" 0, 1456 "CRSV" 0; 1457 } 1458 [data-surface="editorial"] .font-mono.uppercase { 1459 font-family: var(--body-font); 1460 font-variation-settings: 1461 "MONO" 0, 1462 "CASL" 0, 1463 "slnt" 0, 1464 "CRSV" 0; 1465 font-weight: 700; 1466 letter-spacing: 0.08em !important; 1467 } 1468 html { 1469 scroll-behavior: smooth; 1470 } 1471 body { 1472 display: flex; 1473 min-height: 100vh; 1474 flex-direction: column; 1475 -webkit-font-smoothing: antialiased; 1476 -moz-osx-font-smoothing: grayscale; 1477 background-color: #f4f5f2;
1478 color: #101820; 1479 } 1480 .hover\:border-accent:hover { 1481 border-color: var(--accent); 1482 } 1483 .hover\:border-accent-700:hover { 1484 border-color: var(--accent-700); 1485 } 1486 .hover\:border-current:hover { 1487 border-color: currentColor; 1488 } 1489 .hover\:bg-accent-700:hover { 1490 background-color: var(--accent-700); 1491 } 1492 .hover\:bg-surface-elev:hover { 1493 background-color: var(--bg-elev); 1494 } 1495 .hover\:text-\[color\:var\(--accent-700\)\]:hover { 1496 color: var(--accent-700); 1497 } 1498 .hover\:text-accent:hover { 1499 color: var(--accent); 1500 } 1501 .hover\:text-ink:hover { 1502 color: var(--ink); 1503 } 1504 .focus-visible\:outline-none:focus-visible { 1505 outline: 2px solid transparent; 1506 outline-offset: 2px; 1507 } 1508 .active\:translate-y-\[1px\]:active { 1509 --tw-translate-y: 1px; 1510 transform: translate(var(--tw-translate-x), var(--tw-translate-y)) 1511 rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) 1512 skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) 1513 scaleY(var(--tw-scale-y)); 1514 } 1515 .group:hover .group-hover\:translate-x-0\.5 { 1516 --tw-translate-x: 0.125rem; 1517 transform: translate(var(--tw-translate-x), var(--tw-translate-y)) 1518 rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) 1519 skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) 1520 scaleY(var(--tw-scale-y)); 1521 } 1522 .group:hover .group-hover\:translate-x-1 { 1523 --tw-translate-x: 0.25rem; 1524 transform: translate(var(--tw-translate-x), var(--tw-translate-y)) 1525 rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) 1526 skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) 1527 scaleY(var(--tw-scale-y)); 1528 } 1529 @media (min-width: 640px) { 1530 .sm\:inline { 1531 display: inline; 1532 } 1533 } 1534 @media (min-width: 768px) { 1535 .md\:grid-cols-2 { 1536 grid-template-columns: repeat(2, minmax(0, 1fr)); 1537 } 1538 .md\:grid-cols-5 { 1539 grid-template-columns: repeat(5, minmax(0, 1fr)); 1540 } 1541 .md\:flex-row { 1542 flex-direction: row; 1543 } 1544 .md\:items-center { 1545 align-items: center; 1546 } 1547 .md\:gap-8 { 1548 gap: 2rem; 1549 } 1550 .md\:px-8 { 1551 padding-left: 2rem; 1552 padding-right: 2rem; 1553 } 1554 .md\:py-16 { 1555 padding-top: 4rem; 1556 padding-bottom: 4rem; 1557 } 1558 .md\:py-20 { 1559 padding-top: 5rem; 1560 padding-bottom: 5rem; 1561 } 1562 .md\:py-24 { 1563 padding-top: 6rem; 1564 padding-bottom: 6rem; 1565 } 1566 .md\:pb-16 { 1567 padding-bottom: 4rem; 1568 } 1569 .md\:pt-32 { 1570 padding-top: 8rem; 1571 } 1572 .md\:text-2xl { 1573 font-size: 1.5rem; 1574 line-height: 2rem; 1575 } 1576 } 1577 @media (min-width: 1024px) { 1578 .lg\:flex { 1579 display: flex; 1580 } 1581 .lg\:hidden { 1582 display: none; 1583 } 1584 } 1585 </style> 1586 <link 1587 rel="preload" 1588 crossorigin 1589 href="/assets/app-BOXp1MmS.css" 1590 as="style" 1591 /> 1592 <link 1593 rel="sitemap" 1594 type="application/xml" 1595 title="Sitemap" 1596 href="/sitemap.xml" 1597 /> 1598 <link rel="modulepreload" crossorigin href="/assets/HomePage-DY_xLc0B.js" /> 1599 <link 1600 rel="modulepreload" 1601 crossorigin 1602 href="/assets/AccordionItem-CLNgxUMp.js" 1603 /> 1604 <link rel="preload" href="/assets/AccordionItem-CU0z0BtU.css" as="style" /> 1605 <title>AI Implementation Consulting | workflows.diy</title> 1606
1606<script type="application/ld+json"> 1607 { 1608 "@context": "https://schema.org", 1609 "@type": "Organization", 1610 "@id": "https://workflows.diy#org", 1611 "name": "workflows.diy", 1612 "url": "https://workflows.diy", 1613 "description": "1:1 AI implementation consulting. Build and deploy AI that your org actually uses.", 1614 "knowsAbout": [ 1615 "AI implementation", 1616 "Fractional Chief AI Officer", 1617 "n8n workflow automation", 1618 "Agentic AI systems", 1619 "Model Context Protocol (MCP)", 1620 "AI-first software development", 1621 "Context engineering", 1622 "AI governance" 1623 ] 1624 } 1625 </script>
1625 1626
1626<script type="application/ld+json"> 1627 { 1628 "@context": "https://schema.org", 1629 "@type": "WebSite", 1630 "@id": "https://workflows.diy#website", 1631 "name": "workflows.diy", 1632 "url": "https://workflows.diy", 1633 "description": "1:1 AI implementation consulting. Build and deploy AI that your org actually uses.", 1634 "publisher": { "@id": "https://workflows.diy#org" }, 1635 "inLanguage": "en-US" 1636 } 1637 </script>
1637 1638 <meta 1639 name="description" 1640 content="1:1 AI implementation consulting for leaders and builders. Map a business process, ship working software, and add evals and cost controls before rollout." 1641 /> 1642 <meta property="og:site_name" content="workflows.diy" /> 1643 <meta property="og:type" content="website" /> 1644 <meta property="og:url" content="https://workflows.diy" /> 1645 <meta 1646 property="og:image" 1647 content="https://workflows.diy/default-og-image.png" 1648 /> 1649 <meta property="og:image:width" content="1200" /> 1650 <meta property="og:image:height" content="630" /> 1651 <meta property="og:locale" content="en_US" /> 1652 <meta name="twitter:card" content="summary_large_image" /> 1653 <meta name="author" content="workflows.diy" /> 1654 <meta name="theme-color" content="#f4f5f2" /> 1655 <meta name="msapplication-TileColor" content="#2457d6" /> 1656 <link rel="canonical" href="https://workflows.diy" /> 1657 <meta 1658 property="og:title" 1659 content="workflows.diy | 1:1 AI Implementation Consulting" 1660 /> 1661 <meta 1662 property="og:description" 1663 content="Work directly with Cory LePage to move one AI workflow from a stalled pilot to working software in your stack." 1664 /> 1665
1665<script type="application/ld+json"> 1666 { 1667 "@context": "https://schema.org", 1668 "@type": "FAQPage", 1669 "mainEntity": [ 1670 { 1671 "@type": "Question", 1672 "name": "What's the refund policy?", 1673 "acceptedAnswer": { 1674 "@type": "Answer", 1675 "text": "If the work is not worth the price, tell me and I will refund 100%. Your judgment is the test." 1676 } 1677 }, 1678 { 1679 "@type": "Question", 1680 "name": "What kind of AI work do you actually help with?", 1681 "acceptedAnswer": { 1682 "@type": "Answer", 1683 "text": "I help map business processes, build n8n workflows and agentic systems, connect tools through MCP, and add evals and monitoring. Most engagements start with one process and one measurable release, then iterate from real usage." 1684 } 1685 }, 1686 { 1687 "@type": "Question", 1688 "name": "How do you help with AI strategy?", 1689 "acceptedAnswer": { 1690 "@type": "Answer", 1691 "text": "By refusing to separate strategy from implementation, and by pushing on what to kill, not just what to build. I build the roadmap against what's actually shippable this quarter, not what sounds visionary on a deck. Identify high-impact use cases, pick the right model and tool portfolio, sequence the rollout, and set the cost/eval discipline that keeps it honest." 1692 } 1693 }, 1694 { 1695 "@type": "Question", 1696 "name": "Do you build the AI solutions for me?", 1697 "acceptedAnswer": { 1698 "@type": "Answer", 1699 "text": "My primary role is to guide and coach you and your team to build and implement AI solutions. I'll pair on technical work, but the goal is to leave your team with the skills and ownership to keep shipping after I'm gone. Dependency isn't the product." 1700 } 1701 }, 1702 { 1703 "@type": "Question", 1704 "name": "How fast can we start?", 1705 "acceptedAnswer": { 1706 "@type": "Answer", 1707 "text": "One-off calls can usually be scheduled within a week. Monthly and premium retainers start with a short call to confirm the problem, scope, and fit." 1708 } 1709 } 1710 ] 1711 } 1712 </script>
1712 1713 <link 1714 rel="preload" 1715 as="font" 1716 crossorigin="anonymous" 1717 href="/assets/recursive-cyrillic-ext-full-normal-DL48ug1z.woff2" 1718 /> 1719 <link 1720 rel="preload" 1721 as="font" 1722 crossorigin="anonymous" 1723 href="/assets/recursive-vietnamese-full-normal-C9d0lu7G.woff2" 1724 /> 1725 <link 1726 rel="preload" 1727 as="font" 1728 crossorigin="anonymous" 1729 href="/assets/recursive-latin-ext-full-normal-Ced8ljaz.woff2" 1730 /> 1731 <link 1732 rel="preload" 1733 as="font" 1734 crossorigin="anonymous" 1735 href="/assets/recursive-latin-full-normal-Bbk0y8ID.woff2" 1736 /> 1737 </head> 1738 <body> 1739 <div id="app" data-server-rendered="true"> 1740 <div 1741 data-surface="editorial" 1742 class="min-h-screen flex flex-col bg-surface text-ink" 1743 > 1744 <!--[--> 1745 <header 1746 class="sticky top-0 z-40 w-full transition-all duration-[var(--dur-base)] ease-out bg-transparent border-b border-transparent" 1747 > 1748 <div 1749 class="mx-auto max-w-7xl px-6 md:px-8 flex items-center justify-between h-16" 1750 > 1751 <a 1752 aria-current="page" 1753 href="/" 1754 class="router-link-active router-link-exact-active group inline-flex items-baseline gap-2" 1755 ><span 1756 class="font-sans text-xl font-extrabold tracking-[-0.04em] leading-none text-ink" 1757 > 1758 workflows<span class="text-accent">.</span>diy </span 1759 ><span 1760 class="hidden sm:inline text-[11px] font-semibold text-ink-faint pb-[1px]" 1761 > 1762 AI implementation 1763 </span></a 1764 > 1765 <nav class="hidden lg:flex items-center gap-1 font-sans text-sm"> 1766 <!--[--><a 1767 href="/ai-for-ceos" 1768 class="px-3 py-2 rounded-sm text-ink-muted hover:text-ink hover:bg-surface-elev transition-colors" 1769 >For Leaders</a 1770 ><a 1771 href="/n8n-workflow-repository" 1772 class="px-3 py-2 rounded-sm text-ink-muted hover:text-ink hover:bg-surface-elev transition-colors" 1773 >For Builders</a 1774 ><a 1775 href="/ai-first-philosophy" 1776 class="px-3 py-2 rounded-sm text-ink-muted hover:text-ink hover:bg-surface-elev transition-colors" 1777 >Philosophy</a 1778 ><a 1779 href="/blog" 1780 class="px-3 py-2 rounded-sm text-ink-muted hover:text-ink hover:bg-surface-elev transition-colors" 1781 >Writing</a 1782 ><!--]--><span 1783 class="w-px h-5 bg-rule mx-2" 1784 aria-hidden="true" 1785 ></span 1786 ><a 1787 aria-current="page" 1788 href="/#contact" 1789 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-9 px-4 text-sm rounded-md bg-accent border border-accent text-[color:var(--accent-ink)] hover:bg-accent-700 hover:border-accent-700 active:translate-y-[1px]" 1790 data-v-ef5ce0b1 1791 ><!--[--><!--]--><span class="app-button__label" data-v-ef5ce0b1 1792 ><!--[-->Book a call<!--]--></span 1793 ><span 1794 aria-hidden="true" 1795 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 1796 data-v-ef5ce0b1 1797 >â</span 1798 ><!--[--><!--]--></a 1799 > 1800 </nav> 1801 <button 1802 class="lg:hidden inline-flex items-center justify-center w-10 h-10 rounded-md text-ink hover:bg-surface-elev transition-colors" 1803 aria-expanded="false" 1804 aria-controls="mobile-menu-drawer" 1805 aria-label="Open menu" 1806 > 1807 <svg 1808 xmlns="http://www.w3.org/2000/svg" 1809 fill="none"
1810 viewBox="0 0 24 24" 1811 stroke-width="1.5" 1812 stroke="currentColor" 1813 class="w-6 h-6" 1814 > 1815 <path 1816 stroke-linecap="round" 1817 stroke-linejoin="round" 1818 d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" 1819 /> 1820 </svg> 1821 </button> 1822 </div> 1823 </header> 1824 <!----><!--]--> 1825 <main class="flex-grow"> 1826 <div data-surface="editorial" class="bg-surface text-ink"> 1827 <section class="relative"> 1828 <div 1829 class="mx-auto max-w-6xl px-6 md:px-8 pt-20 md:pt-28 pb-16 md:pb-20" 1830 > 1831 <p 1832 class="text-[11px] font-mono uppercase tracking-[0.22em] text-ink-faint mb-8 inline-flex items-center gap-2" 1833 > 1834 <span class="inline-block w-5 h-px bg-accent"></span> 1:1 AI 1835 implementation consulting 1836 </p> 1837 <h1 1838 class="font-display text-ink leading-[0.98]" 1839 style=" 1840 font-weight: 400; 1841 font-size: var(--text-5xl); 1842 letter-spacing: -0.02em; 1843 " 1844 > 1845 Ship one AI workflow 1846 <span 1847 class="italic" 1848 style=" 1849 font-family: var(--font-serif); 1850 font-feature-settings: "ss01"; 1851 " 1852 >your team can own.</span 1853 > 1854 </h1> 1855 <p 1856 class="mt-8 text-lg md:text-xl text-ink-muted max-w-2xl leading-relaxed" 1857 > 1858 Work with me 1:1 to map a business process, ship working 1859 software in your stack, and add evals and cost controls before 1860 rollout. 1861 </p> 1862 <div class="mt-10 flex flex-wrap items-center gap-4"> 1863 <a 1864 aria-current="page" 1865 href="/#contact" 1866 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-14 px-8 text-lg rounded-md bg-accent border border-accent text-[color:var(--accent-ink)] hover:bg-accent-700 hover:border-accent-700 active:translate-y-[1px]" 1867 data-v-ef5ce0b1 1868 ><!--[--><!--]--><span 1869 class="app-button__label" 1870 data-v-ef5ce0b1 1871 ><!--[-->Tell me what needs to ship<!--]--></span 1872 ><span 1873 aria-hidden="true" 1874 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 1875 data-v-ef5ce0b1 1876 >â</span 1877 ><!--[--><!--]--></a 1878 ><a 1879 aria-current="page" 1880 href="/#pricing" 1881 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-14 px-8 text-lg rounded-md bg-surface-elev border border-rule text-ink hover:border-accent hover:text-accent" 1882 data-v-ef5ce0b1 1883 ><!--[--><!--]--><span 1884 class="app-button__label" 1885 data-v-ef5ce0b1 1886 ><!--[-->See prices and scope<!--]--></span 1887 ><span 1888 aria-hidden="true" 1889 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 1890 data-v-ef5ce0b1 1891 >â</span 1892 ><!--[--><!--]--></a 1893 > 1894 </div> 1895 <div 1896 class="mt-16 md:mt-24 grid grid-cols-2 md:grid-cols-4 gap-6 md:gap-8 pt-10 border-t border-rule" 1897 > 1898 <div> 1899 <p 1900 class="font-display text-ink leading-none" 1901 style="font-weight: 500; font-size: var(--text-3xl)" 1902 > 1903 10+ 1904 </p> 1905 <p 1906 class="mt-2 text-xs font-mono uppercase tracking-[0.16em] text-ink-faint" 1907 > 1908 Years shipping software 1909 </p> 1910 </div> 1911 <div> 1912 <p 1913 class="font-display text-ink leading-none" 1914 style="font-weight: 500; font-size: var(--text-3xl)" 1915 > 1916 3+ yr 1917 </p> 1918 <p 1919 class="mt-2 text-xs font-mono uppercase tracking-[0.16em] text-ink-faint" 1920 > 1921 AI-exclusive workflow 1922 </p> 1923 </div> 1924 <div> 1925 <p 1926 class="font-display text-ink leading-none" 1927 style="font-weight: 500; font-size: var(--text-3xl)" 1928 > 1929 33 1930 </p> 1931 <p 1932 class="mt-2 text-xs font-mono uppercase tracking-[0.16em] text-ink-faint" 1933 > 1934 Public n8n templates 1935 </p> 1936 </div> 1937 <div> 1938 <p 1939 class="font-display text-ink leading-none" 1940 style="font-weight: 500; font-size: var(--text-3xl)" 1941 > 1942 100% 1943 </p> 1944 <p 1945 class="mt-2 text-xs font-mono uppercase tracking-[0.16em] text-ink-faint" 1946 > 1947 Money-back guarantee 1948 </p> 1949 </div> 1950 </div> 1951 </div> 1952 </section> 1953 <section 1954 id="fork" 1955 class="relative w-full bg-surface-sunken py-20 md:py-32" 1956 > 1957 <div class="mx-auto px-6 md:px-8 max-w-7xl"> 1958 <header class="mb-10 md:mb-14 max-w-3xl"> 1959 <p 1960 class="text-xs uppercase tracking-[0.18em] text-ink-faint font-mono mb-4" 1961 > 1962 Choose your path 1963 </p> 1964 <h2 1965 class="font-display text-ink leading-[1.05] text-[var(--text-4xl)]" 1966 style="font-weight: var(--display-weight)" 1967 > 1968 <!--[-->Start with the work you own.<!--]--> 1969 </h2> 1970 <p class="mt-5 text-lg text-ink-muted leading-relaxed"> 1971 Leaders need a roadmap and accountable delivery. Builders 1972 need templates, implementation patterns, and a second set of 1973 technical eyes. 1974 </p> 1975 </header> 1976 <!--[--> 1977 <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mt-12"> 1978 <a 1979 href="/ai-for-ceos" 1980 class="group relative block p-8 md:p-10 rounded-lg bg-surface-elev border border-rule transition-colors duration-[var(--dur-base)] ease-out hover:border-accent" 1981 ><p 1982 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 1983 > 1984 For leaders 1985 </p> 1986 <h3 1987 class="mt-3 font-display text-ink leading-tight" 1988 style="font-weight: 400; font-size: var(--text-3xl)" 1989 > 1990 I'm deploying AI 1991 <em class="italic" style="font-family: var(--font-serif)" 1992 >across my organization.</em 1993 > 1994 </h3> 1995 <p class="mt-4 text-ink-muted leading-relaxed"> 1996 You own the budget and the outcome. You need a prioritized 1997 roadmap, production criteria, and a team that can keep 1998 shipping after the engagement. 1999 </p> 2000 <ul class="mt-6 space-y-2 text-sm text-ink-muted"> 2001 <li class="flex items-start gap-2">
2002 <span class="text-accent mt-1">·</span>Fractional CAIO + 2003 strategy for the board 2004 </li> 2005 <li class="flex items-start gap-2"> 2006 <span class="text-accent mt-1">·</span>The DRIVE AI 2007 operations framework 2008 </li> 2009 <li class="flex items-start gap-2"> 2010 <span class="text-accent mt-1">·</span>Agent strategy, 2011 model portfolio, cost governance 2012 </li> 2013 </ul> 2014 <p 2015 class="mt-8 inline-flex items-center gap-2 text-accent font-medium" 2016 > 2017 Enter the leaders path 2018 <span 2019 class="transition-transform group-hover:translate-x-1" 2020 >â</span 2021 > 2022 </p></a 2023 ><a 2024 href="/n8n-workflow-repository" 2025 class="group relative block p-8 md:p-10 rounded-lg bg-surface-elev border border-rule transition-colors duration-[var(--dur-base)] ease-out hover:border-accent" 2026 ><p 2027 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2028 > 2029 For builders 2030 </p> 2031 <h3 2032 class="mt-3 font-display text-ink leading-tight" 2033 style="font-weight: 400; font-size: var(--text-3xl)" 2034 > 2035 I'm building with AI 2036 <em class="italic" style="font-family: var(--font-serif)" 2037 >myself.</em 2038 > 2039 </h3> 2040 <p class="mt-4 text-ink-muted leading-relaxed"> 2041 You write code or ship workflows. You want public n8n 2042 templates, AI-first implementation patterns, and practical 2043 help with the work in front of you. 2044 </p> 2045 <ul class="mt-6 space-y-2 text-sm text-ink-muted"> 2046 <li class="flex items-start gap-2"> 2047 <span class="text-accent mt-1">âº</span>33 public n8n 2048 workflow templates 2049 </li> 2050 <li class="flex items-start gap-2"> 2051 <span class="text-accent mt-1">âº</span>Context 2052 engineering & agentic patterns 2053 </li> 2054 <li class="flex items-start gap-2"> 2055 <span class="text-accent mt-1">âº</span>MCP integrations 2056 + workflow JSON for LLM analysis 2057 </li> 2058 </ul> 2059 <p 2060 class="mt-8 inline-flex items-center gap-2 text-accent font-medium" 2061 > 2062 Enter the builders path 2063 <span 2064 class="transition-transform group-hover:translate-x-1" 2065 >â</span 2066 > 2067 </p></a 2068 > 2069 </div> 2070 <p class="mt-8 text-sm text-ink-faint text-center font-mono"> 2071 Not sure which fits? The pricing and contact sections apply to 2072 both. 2073 </p> 2074 <!--]--> 2075 </div> 2076 </section> 2077 <section 2078 id="about" 2079 class="relative w-full bg-surface py-20 md:py-32" 2080 > 2081 <div class="mx-auto px-6 md:px-8 max-w-5xl"> 2082 <header class="mb-10 md:mb-14 max-w-3xl"> 2083 <p 2084 class="text-xs uppercase tracking-[0.18em] text-ink-faint font-mono mb-4" 2085 > 2086 About 2087 </p> 2088 <!----><!----> 2089 </header> 2090 <!--[--> 2091 <div 2092 class="grid grid-cols-1 md:grid-cols-12 gap-8 md:gap-12 items-start" 2093 > 2094 <div class="md:col-span-3"> 2095 <div 2096 class="relative overflow-hidden rounded-lg border border-rule shadow-card w-40 md:w-full md:max-w-[180px]" 2097 > 2098 <img 2099 src="/assets/cory-COctTDOA.jpg" 2100 alt="Cory LePage, workflows.diy" 2101 class="w-full h-auto object-cover" 2102 /> 2103 </div> 2104 <p class="mt-4 text-sm font-mono text-ink-faint"> 2105 Cory LePage, founder of workflows.diy 2106 </p> 2107 </div> 2108 <div class="md:col-span-9"> 2109 <h2 2110 class="font-display text-ink leading-[1.05]" 2111 style="font-weight: 400; font-size: var(--text-4xl)" 2112 > 2113 I don't consult 2114 <em class="italic" style="font-family: var(--font-serif)" 2115 >about</em 2116 > 2117 AI. I ship 2118 <em class="italic" style="font-family: var(--font-serif)" 2119 >with</em 2120 > 2121 it. 2122 </h2> 2123 <div 2124 class="mt-8 space-y-5 text-lg text-ink leading-relaxed max-w-2xl" 2125 > 2126 <p> 2127 I'm an AI-First software developer. For more than three 2128 years, every line of production code I touch has been 2129 written in collaboration with AI coding agents, 2130 including Claude Code and Cursor. 2131 </p> 2132 <p class="text-ink-muted"> 2133 Before that, I spent ten years building across the 2134 stack. That background helps me catch incorrect 2135 assumptions, bad patterns, and regressions in 2136 AI-generated code. 2137 </p> 2138 <p class="text-ink-muted"> 2139 The deliverable is working software in your stack with 2140 evals, cost controls, and a path to production. A 2141 roadmap or workshop only matters when it helps that 2142 software ship. 2143 </p> 2144 </div> 2145 </div> 2146 </div> 2147 <!--]--> 2148 </div> 2149 </section> 2150 <section 2151 id="services" 2152 class="relative w-full bg-surface-sunken py-20 md:py-32" 2153 > 2154 <div class="mx-auto px-6 md:px-8 max-w-5xl"> 2155 <header class="mb-10 md:mb-14 max-w-3xl"> 2156 <p 2157 class="text-xs uppercase tracking-[0.18em] text-ink-faint font-mono mb-4" 2158 > 2159 What you get 2160 </p> 2161 <h2 2162 class="font-display text-ink leading-[1.05] text-[var(--text-4xl)]" 2163 style="font-weight: var(--display-weight)" 2164 > 2165 <!--[-->Two ways to work together.<!--]--> 2166 </h2> 2167 <p class="mt-5 text-lg text-ink-muted leading-relaxed">
2168 Short-loop chat for the questions you hit daily. Scheduled 2169 calls for the decisions that need a whiteboard. 2170 </p> 2171 </header> 2172 <!--[--> 2173 <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mt-10"> 2174 <div 2175 class="block relative transition-all duration-[var(--dur-base)] ease-out bg-surface-elev border border-rule rounded-lg p-6 md:p-8" 2176 > 2177 <!--[--> 2178 <p 2179 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2180 > 2181 Service 01 2182 </p> 2183 <h3 2184 class="mt-3 font-display text-ink" 2185 style="font-weight: 500; font-size: var(--text-2xl)" 2186 > 2187 Chat access 2188 </h3> 2189 <p class="mt-4 text-ink-muted leading-relaxed"> 2190 Message me on Telegram when you are stuck on code, 2191 prompts, architecture, or sequencing. Use the thread to 2192 keep daily decisions moving between calls. 2193 </p> 2194 <ul class="mt-6 space-y-2 text-sm text-ink-muted"> 2195 <li class="flex items-start gap-2"> 2196 <span class="text-accent mt-1">·</span>Same-timezone 2197 response 2198 </li> 2199 <li class="flex items-start gap-2"> 2200 <span class="text-accent mt-1">·</span>Code, prompts, 2201 architecture 2202 </li> 2203 <li class="flex items-start gap-2"> 2204 <span class="text-accent mt-1">·</span>No ticket queue 2205 </li> 2206 </ul> 2207 <!--]--> 2208 </div> 2209 <div 2210 class="block relative transition-all duration-[var(--dur-base)] ease-out bg-surface-elev border border-rule rounded-lg p-6 md:p-8" 2211 > 2212 <!--[--> 2213 <p 2214 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2215 > 2216 Service 02 2217 </p> 2218 <h3 2219 class="mt-3 font-display text-ink" 2220 style="font-weight: 500; font-size: var(--text-2xl)" 2221 > 2222 One-to-one coaching calls 2223 </h3> 2224 <p class="mt-4 text-ink-muted leading-relaxed"> 2225 Three or four 60-minute calls per month for strategy, 2226 sequencing, technical review, and decisions about what to 2227 stop doing. 2228 </p> 2229 <ul class="mt-6 space-y-2 text-sm text-ink-muted"> 2230 <li class="flex items-start gap-2"> 2231 <span class="text-accent mt-1">·</span>60-min working 2232 sessions 2233 </li> 2234 <li class="flex items-start gap-2"> 2235 <span class="text-accent mt-1">·</span>Roadmap & 2236 sequencing 2237 </li> 2238 <li class="flex items-start gap-2"> 2239 <span class="text-accent mt-1">·</span>Team coaching on 2240 request 2241 </li> 2242 </ul> 2243 <!--]--> 2244 </div> 2245 </div> 2246 <div 2247 class="mt-16 p-8 md:p-10 rounded-lg bg-surface border border-rule" 2248 > 2249 <div class="flex items-start justify-between gap-6 flex-wrap"> 2250 <div> 2251 <p 2252 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2253 > 2254 The method 2255 </p> 2256 <h3 2257 class="mt-3 font-display text-ink" 2258 style="font-weight: 400; font-size: var(--text-3xl)" 2259 > 2260 The DRIVE implementation framework 2261 </h3> 2262 </div> 2263 <a 2264 href="/ai-operations" 2265 class="app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-11 px-6 text-base rounded-md app-button--link !h-auto !px-0 !rounded-none text-accent hover:text-[color:var(--accent-700)]" 2266 data-v-ef5ce0b1 2267 ><!--[--><!--]--><span 2268 class="app-button__label" 2269 data-v-ef5ce0b1 2270 ><!--[-->Full breakdown<!--]--></span 2271 ><span 2272 aria-hidden="true" 2273 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 2274 data-v-ef5ce0b1 2275 >â</span 2276 ><!--[--><!--]--></a 2277 > 2278 </div> 2279 <div 2280 class="mt-8 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 ga
2280p-4" 2281 > 2282 <div class="border-l-2 border-rule pl-4"> 2283 <p 2284 class="font-display text-accent leading-none" 2285 style="font-weight: 500; font-size: 2rem" 2286 > 2287 D 2288 </p> 2289 <p class="mt-2 font-medium text-ink">Define</p> 2290 <p class="mt-1 text-sm text-ink-muted leading-relaxed"> 2291 Strategic goals & current processes. 2292 </p> 2293 </div> 2294 <div class="border-l-2 border-rule pl-4"> 2295 <p 2296 class="font-display text-accent leading-none" 2297 style="font-weight: 500; font-size: 2rem" 2298 > 2299 R 2300 </p> 2301 <p class="mt-2 font-medium text-ink">Roadmap</p> 2302 <p class="mt-1 text-sm text-ink-muted leading-relaxed"> 2303 Select one measurable first release. 2304 </p> 2305 </div> 2306 <div class="border-l-2 border-rule pl-4"> 2307 <p 2308 class="font-display text-accent leading-none" 2309 style="font-weight: 500; font-size: 2rem" 2310 > 2311 I 2312 </p> 2313 <p class="mt-2 font-medium text-ink">Implement</p> 2314 <p class="mt-1 text-sm text-ink-muted leading-relaxed"> 2315 Ship with AI-assisted development. 2316 </p> 2317 </div> 2318 <div class="border-l-2 border-rule pl-4"> 2319 <p 2320 class="font-display text-accent leading-none" 2321 style="font-weight: 500; font-size: 2rem" 2322 > 2323 V 2324 </p> 2325 <p class="mt-2 font-medium text-ink">Validate</p> 2326 <p class="mt-1 text-sm text-ink-muted leading-relaxed"> 2327 Run evals and measure the result. 2328 </p> 2329 </div> 2330 <div class="border-l-2 border-rule pl-4"> 2331 <p 2332 class="font-display text-accent leading-none" 2333 style="font-weight: 500; font-size: 2rem" 2334 > 2335 E 2336 </p> 2337 <p class="mt-2 font-medium text-ink">Evolve</p> 2338 <p class="mt-1 text-sm text-ink-muted leading-relaxed"> 2339 Roll out, monitor, and revise. 2340 </p> 2341 </div> 2342 </div> 2343 </div> 2344 <!--]--> 2345 </div> 2346 </section> 2347 <section 2348 id="pricing" 2349 class="relative w-full bg-surface py-20 md:py-32" 2350 > 2351 <div class="mx-auto px-6 md:px-8 max-w-7xl"> 2352 <header class="mb-10 md:mb-14 text-center mx-auto max-w-3xl"> 2353 <p 2354 class="text-xs uppercase tracking-[0.18em] text-ink-faint font-mono mb-4" 2355 > 2356 Pricing 2357 </p> 2358 <h2 2359 class="font-display text-ink leading-[1.05] text-[var(--text-4xl)]" 2360 style="font-weight: var(--display-weight)" 2361 > 2362 <!--[-->Three ways to start.<!--]--> 2363 </h2> 2364 <p class="mt-5 text-lg text-ink-muted leading-relaxed"> 2365 Plain numbers. No discovery-call tax before you see them. 2366 </p> 2367 </header> 2368 <!--[--> 2369 <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mt-14"> 2370 <div 2371 class="relative flex flex-col p-8 md:p-10 rounded-lg transition-all duration-[var(--dur-base)] ease-out bg-surface-elev border border-rule hover:border-ink-faint" 2372 > 2373 <p 2374 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2375 > 2376 Try it 2377 </p> 2378 <h3 2379 class="mt-4 font-display text-ink" 2380 style="font-weight: 500; font-size: var(--text-2xl)" 2381 > 2382 One-off call
2383 </h3> 2384 <div 2385 class="mt-4 flex flex-wrap items-baseline gap-x-2 gap-y-1" 2386 > 2387 <span 2388 class="font-display text-ink" 2389 style=" 2390 font-weight: 400; 2391 font-size: var(--text-4xl); 2392 letter-spacing: -0.01em; 2393 " 2394 >$350</span 2395 ><span class="text-sm font-mono text-ink-faint" 2396 >USD · one time</span 2397 > 2398 </div> 2399 <ul class="mt-8 space-y-3 flex-grow"> 2400 <li class="flex items-start gap-3 text-ink-muted"> 2401 <span 2402 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2403 aria-hidden="true" 2404 ></span 2405 ><span>1-hour working session</span> 2406 </li> 2407 <li class="flex items-start gap-3 text-ink-muted"> 2408 <span 2409 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2410 aria-hidden="true" 2411 ></span 2412 ><span>Personalized to your specific situation</span> 2413 </li> 2414 <li class="flex items-start gap-3 text-ink-muted"> 2415 <span 2416 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2417 aria-hidden="true" 2418 ></span 2419 ><span 2420 >For a single stuck decision or direction check</span 2421 > 2422 </li> 2423 <li class="flex items-start gap-3 text-ink-muted"> 2424 <span 2425 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2426 aria-hidden="true" 2427 ></span 2428 ><span>No commitment</span> 2429 </li> 2430 <li class="flex items-start gap-3 text-ink-muted"> 2431 <span 2432 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2433 aria-hidden="true" 2434 ></span 2435 ><span>100% refund if not worth it</span> 2436 </li> 2437 </ul> 2438 <div class="mt-10"> 2439 <a 2440 aria-current="page" 2441 href="/#contact" 2442 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-11 px-6 text-base rounded-md bg-surface-elev border border-rule text-ink hover:border-accent hover:text-accent w-full" 2443 data-v-ef5ce0b1 2444 ><!--[--><!--]--><span 2445 class="app-button__label" 2446 data-v-ef5ce0b1 2447 ><!--[-->Contact me<!--]--></span 2448 ><span 2449 aria-hidden="true" 2450 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 2451 data-v-ef5ce0b1 2452 >â</span 2453 ><!--[--><!--]--></a 2454 > 2455 </div> 2456 </div> 2457 <div 2458 class="relative flex flex-col p-8 md:p-10 rounded-lg transition-all duration-[var(--dur-base)] ease-out bg-surface-elev border-2 border-ink shadow-lift -mt-4 md:-mt-6" 2459 > 2460 <p 2461 class="absolute -top-3 left-8 px-3 py-1 rounded-pill bg-ink text-[color:var(--bg)] text-[10px] font-mono uppercase tracking-[0.22em]" 2462 > 2463 Standard 2464 </p> 2465 <h3 2466 class="mt-4 font-display text-ink" 2467 style="font-weight: 500; font-size: var(--text-2xl)" 2468 > 2469 Monthly coaching 2470 </h3> 2471 <div 2472 class="mt-4 flex flex-wrap items-baseline gap-x-2 gap-y-1" 2473 >
2474 <span 2475 class="font-display text-ink" 2476 style=" 2477 font-weight: 400; 2478 font-size: var(--text-4xl); 2479 letter-spacing: -0.01em; 2480 " 2481 >$6,000</span 2482 ><span class="text-sm font-mono text-ink-faint" 2483 >USD / month</span 2484 > 2485 </div> 2486 <ul class="mt-8 space-y-3 flex-grow"> 2487 <li class="flex items-start gap-3 text-ink-muted"> 2488 <span 2489 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2490 aria-hidden="true" 2491 ></span 2492 ><span>4 standing calls per month</span> 2493 </li> 2494 <li class="flex items-start gap-3 text-ink-muted"> 2495 <span 2496 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2497 aria-hidden="true" 2498 ></span 2499 ><span>Unlimited chat access on Telegram</span> 2500 </li> 2501 <li class="flex items-start gap-3 text-ink-muted"> 2502 <span 2503 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2504 aria-hidden="true" 2505 ></span 2506 ><span>Strategic + technical 1:1</span> 2507 </li> 2508 <li class="flex items-start gap-3 text-ink-muted"> 2509 <span 2510 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2511 aria-hidden="true" 2512 ></span 2513 ><span>Month-to-month, cancel anytime</span> 2514 </li> 2515 <li class="flex items-start gap-3 text-ink-muted"> 2516 <span 2517 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2518 aria-hidden="true" 2519 ></span 2520 ><span>100% refund if not worth it</span> 2521 </li> 2522 </ul> 2523 <div class="mt-10"> 2524 <a 2525 aria-current="page" 2526 href="/#contact" 2527 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-11 px-6 text-base rounded-md bg-accent border border-accent text-[color:var(--accent-ink)] hover:bg-accent-700 hover:border-accent-700 active:translate-y-[1px] w-full" 2528 data-v-ef5ce0b1 2529 ><!--[--><!--]--><span 2530 class="app-button__label" 2531 data-v-ef5ce0b1 2532 ><!--[-->Join the waitlist<!--]--></span 2533 ><span 2534 aria-hidden="true" 2535 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 2536 data-v-ef5ce0b1 2537 >â</span 2538 ><!--[--><!--]--></a 2539 > 2540 </div> 2541 </div> 2542 <div 2543 class="relative flex flex-col p-8 md:p-10 rounded-lg transition-all duration-[var(--dur-base)] ease-out bg-surface-elev border border-rule hover:border-ink-faint" 2544 > 2545 <p 2546 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2547 > 2548 High-touch 2549 </p> 2550 <h3 2551 class="mt-4 font-display text-ink" 2552 style="font-weight: 500; font-size: var(--text-2xl)" 2553 > 2554 Premium coaching 2555 </h3> 2556 <div 2557 class="mt-4 flex flex-wrap items-baseline gap-x-2 gap-y-1" 2558 >
2559 <span 2560 class="font-display text-ink" 2561 style=" 2562 font-weight: 400; 2563 font-size: var(--text-4xl); 2564 letter-spacing: -0.01em; 2565 " 2566 >$18,000</span 2567 ><span class="text-sm font-mono text-ink-faint" 2568 >USD / month</span 2569 > 2570 </div> 2571 <ul class="mt-8 space-y-3 flex-grow"> 2572 <li class="flex items-start gap-3 text-ink-muted"> 2573 <span 2574 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2575 aria-hidden="true" 2576 ></span 2577 ><span>Daily chat plus weekly calls</span> 2578 </li> 2579 <li class="flex items-start gap-3 text-ink-muted"> 2580 <span 2581 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2582 aria-hidden="true" 2583 ></span 2584 ><span>Team coaching included</span> 2585 </li> 2586 <li class="flex items-start gap-3 text-ink-muted"> 2587 <span 2588 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2589 aria-hidden="true" 2590 ></span 2591 ><span>Hands-on implementation support</span> 2592 </li> 2593 <li class="flex items-start gap-3 text-ink-muted"> 2594 <span 2595 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2596 aria-hidden="true" 2597 ></span 2598 ><span>Prioritized chat response</span> 2599 </li> 2600 <li class="flex items-start gap-3 text-ink-muted"> 2601 <span 2602 class="text-accent mt-[7px] w-2 h-px bg-accent shrink-0" 2603 aria-hidden="true" 2604 ></span 2605 ><span>100% refund if not worth it</span> 2606 </li> 2607 </ul> 2608 <div class="mt-10"> 2609 <a 2610 aria-current="page" 2611 href="/#contact" 2612 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-11 px-6 text-base rounded-md bg-surface-elev border border-rule text-ink hover:border-accent hover:text-accent w-full" 2613 data-v-ef5ce0b1 2614 ><!--[--><!--]--><span 2615 class="app-button__label" 2616 data-v-ef5ce0b1 2617 ><!--[-->Join the waitlist<!--]--></span 2618 ><span 2619 aria-hidden="true" 2620 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 2621 data-v-ef5ce0b1 2622 >â</span 2623 ><!--[--><!--]--></a 2624 > 2625 </div> 2626 </div> 2627 </div> 2628 <p class="mt-10 text-center text-sm text-ink-faint font-mono"> 2629 Every tier has the same promise. If the work is not worth the 2630 price, tell me and I will refund 100%. 2631 </p> 2632 <!--]--> 2633 </div> 2634 </section> 2635 <section 2636 id="faq" 2637 class="relative w-full bg-surface-sunken py-20 md:py-32" 2638 > 2639 <div class="mx-auto px-6 md:px-8 max-w-5xl"> 2640 <header class="mb-10 md:mb-14 max-w-3xl"> 2641 <p 2642 class="text-xs uppercase tracking-[0.18em] text-ink-faint font-mono mb-4" 2643 > 2644 Reality check 2645 </p> 2646 <h2 2647 class="font-display text-ink leading-[1.05] text-[var(--text-4xl)]" 2648 style="font-weight: var(--display-weight)" 2649 > 2650 <!--[-->The honest FAQ.<!--]--> 2651 </h2> 2652 <p class="mt-5 text-lg text-ink-muted leading-relaxed"> 2653 Including the question you won't see on other consulting 2654 sites. 2655 </p> 2656 </header> 2657 <!--[--> 2658 <div class="grid grid-cols-1 md:grid-cols-12 gap-10 mt-10"> 2659 <aside class="md:col-span-4"> 2660 <p 2661 class="text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint" 2662 > 2663 Should you buy? 2664 </p> 2665 <h3 2666 class="mt-3 font-display text-ink leading-tight" 2667 style="font-weight: 400; font-size: var(--text-2xl)" 2668 > 2669 Probably 2670 <em class="italic" style="font-family: var(--font-serif)" 2671 >not.</em 2672 > 2673 </h3> 2674 <div class="mt-5 space-y-4 text-ink-muted leading-relaxed"> 2675 <p> 2676 Most of what I know is already free. I write it, share 2677 it, and link it. If you are still defining the problem, 2678 start there. 2679 </p> 2680 <p> 2681 Buy my time only when you want dedicated 1:1 help with a 2682 specific problem. This is direct work with me, not a 2683 course or community. 2684 </p> 2685 <p class="text-ink-faint font-mono text-sm"> 2686 If the work is not worth the price, tell me and I will 2687 refund 100%. Your judgment is the test. 2688 </p> 2689 </div> 2690 </aside> 2691 <div class="md:col-span-8 space-y-3"> 2692 <!--[--> 2693 <div 2694 class="accordion-item rounded-lg border border-rule bg-surface-elev overflow-hidden" 2695 data-v-ab907870 2696 > 2697 <button 2698 class="w-full flex justify-between items-center gap-6 p-5 md:p-6 text-left font-display text-lg text-ink hover:bg-surface-sunken transition-colors" 2699 style="font-weight: 500" 2700 aria-expanded="true" 2701 aria-controls="accordion-content-0" 2702 data-v-ab907870 2703 >
2704 <span data-v-ab907870>What's the refund policy?</span 2705 ><svg 2706 class="rotate-180 w-5 h-5 text-ink-muted transform transition-transform duration-[var(--dur-base)]" 2707 fill="none" 2708 stroke="currentColor" 2709 viewBox="0 0 24 24" 2710 xmlns="http://www.w3.org/2000/svg" 2711 data-v-ab907870="" 2712 > 2713 <path 2714 stroke-linecap="round" 2715 stroke-linejoin="round" 2716 stroke-width="2" 2717 d="M19 9l-7 7-7-7" 2718 data-v-ab907870="" 2719 /> 2720 </svg> 2721 </button> 2722 <div 2723 id="accordion-content-0" 2724 class="overflow-hidden transition-all duration-[var(--dur-base)] ease-out" 2725 style="max-height: 0px" 2726 data-v-ab907870 2727 > 2728 <div 2729 class="px-5 md:px-6 pb-5 md:pb-6 text-ink-muted leading-relaxed border-t border-rule pt-5" 2730 data-v-ab907870 2731 > 2732 <div data-v-ab907870> 2733 If the work is not worth the price, tell me and I 2734 will refund 100%. Your judgment is the test. 2735 </div> 2736 </div> 2737 </div> 2738 </div> 2739 <div 2740 class="accordion-item rounded-lg border border-rule bg-surface-elev overflow-hidden" 2741 data-v-ab907870 2742 > 2743 <button 2744 class="w-full flex justify-between items-center gap-6 p-5 md:p-6 text-left font-display text-lg text-ink hover:bg-surface-sunken transition-colors" 2745 style="font-weight: 500" 2746 aria-expanded="false" 2747 aria-controls="accordion-content-1" 2748 data-v-ab907870 2749 > 2750 <span data-v-ab907870 2751 >What kind of AI work do you actually help with?</span 2752 ><svg 2753 class="w-5 h-5 text-ink-muted transform transition-transform duration-[var(--dur-base)]" 2754 fill="none" 2755 stroke="currentColor"
2756 viewBox="0 0 24 24" 2757 xmlns="http://www.w3.org/2000/svg" 2758 data-v-ab907870="" 2759 > 2760 <path 2761 stroke-linecap="round" 2762 stroke-linejoin="round" 2763 stroke-width="2" 2764 d="M19 9l-7 7-7-7" 2765 data-v-ab907870="" 2766 /> 2767 </svg> 2768 </button> 2769 <div 2770 id="accordion-content-1" 2771 class="overflow-hidden transition-all duration-[var(--dur-base)] ease-out" 2772 style="max-height: 0" 2773 data-v-ab907870 2774 > 2775 <div 2776 class="px-5 md:px-6 pb-5 md:pb-6 text-ink-muted leading-relaxed border-t border-rule pt-5" 2777 data-v-ab907870 2778 > 2779 <div data-v-ab907870> 2780 I help map business processes, build n8n workflows 2781 and agentic systems, connect tools through MCP, and 2782 add evals and monitoring. Most engagements start 2783 with one process and one measurable release, then 2784 iterate from real usage. 2785 </div> 2786 </div> 2787 </div> 2788 </div> 2789 <div 2790 class="accordion-item rounded-lg border border-rule bg-surface-elev overflow-hidden" 2791 data-v-ab907870 2792 > 2793 <button 2794 class="w-full flex justify-between items-center gap-6 p-5 md:p-6 text-left font-display text-lg text-ink hover:bg-surface-sunken transition-colors" 2795 style="font-weight: 500" 2796 aria-expanded="false" 2797 aria-controls="accordion-content-2" 2798 data-v-ab907870 2799 > 2800 <span data-v-ab907870 2801 >How do you help with AI strategy?</span 2802 ><svg 2803 class="w-5 h-5 text-ink-muted transform transition-transform duration-[var(--dur-base)]" 2804 fill="none" 2805 stroke="currentColor"
2806 viewBox="0 0 24 24" 2807 xmlns="http://www.w3.org/2000/svg" 2808 data-v-ab907870="" 2809 > 2810 <path 2811 stroke-linecap="round" 2812 stroke-linejoin="round" 2813 stroke-width="2" 2814 d="M19 9l-7 7-7-7" 2815 data-v-ab907870="" 2816 /> 2817 </svg> 2818 </button> 2819 <div 2820 id="accordion-content-2" 2821 class="overflow-hidden transition-all duration-[var(--dur-base)] ease-out" 2822 style="max-height: 0" 2823 data-v-ab907870 2824 > 2825 <div 2826 class="px-5 md:px-6 pb-5 md:pb-6 text-ink-muted leading-relaxed border-t border-rule pt-5" 2827 data-v-ab907870 2828 > 2829 <div data-v-ab907870> 2830 By refusing to separate strategy from 2831 implementation, and by pushing on what to kill, not 2832 just what to build. I build the roadmap against 2833 what's actually shippable this quarter, not what 2834 sounds visionary on a deck. Identify high-impact use 2835 cases, pick the right model and tool portfolio, 2836 sequence the rollout, and set the cost/eval 2837 discipline that keeps it honest. 2838 </div> 2839 </div> 2840 </div> 2841 </div> 2842 <div 2843 class="accordion-item rounded-lg border border-rule bg-surface-elev overflow-hidden" 2844 data-v-ab907870 2845 > 2846 <button 2847 class="w-full flex justify-between items-center gap-6 p-5 md:p-6 text-left font-display text-lg text-ink hover:bg-surface-sunken transition-colors" 2848 style="font-weight: 500" 2849 aria-expanded="false" 2850 aria-controls="accordion-content-3" 2851 data-v-ab907870 2852 > 2853 <span data-v-ab907870 2854 >Do you build the AI solutions for me?</span 2855 ><svg 2856 class="w-5 h-5 text-ink-muted transform transition-transform duration-[var(--dur-base)]" 2857 fill="none" 2858 stroke="currentColor"
2859 viewBox="0 0 24 24" 2860 xmlns="http://www.w3.org/2000/svg" 2861 data-v-ab907870="" 2862 > 2863 <path 2864 stroke-linecap="round" 2865 stroke-linejoin="round" 2866 stroke-width="2" 2867 d="M19 9l-7 7-7-7" 2868 data-v-ab907870="" 2869 /> 2870 </svg> 2871 </button> 2872 <div 2873 id="accordion-content-3" 2874 class="overflow-hidden transition-all duration-[var(--dur-base)] ease-out" 2875 style="max-height: 0" 2876 data-v-ab907870 2877 > 2878 <div 2879 class="px-5 md:px-6 pb-5 md:pb-6 text-ink-muted leading-relaxed border-t border-rule pt-5" 2880 data-v-ab907870 2881 > 2882 <div data-v-ab907870> 2883 My primary role is to guide and coach you and your 2884 team to build and implement AI solutions. I'll pair 2885 on technical work, but the goal is to leave your 2886 team with the skills and ownership to keep shipping 2887 after I'm gone. Dependency isn't the product. 2888 </div> 2889 </div> 2890 </div> 2891 </div> 2892 <div 2893 class="accordion-item rounded-lg border border-rule bg-surface-elev overflow-hidden" 2894 data-v-ab907870 2895 > 2896 <button 2897 class="w-full flex justify-between items-center gap-6 p-5 md:p-6 text-left font-display text-lg text-ink hover:bg-surface-sunken transition-colors" 2898 style="font-weight: 500" 2899 aria-expanded="false" 2900 aria-controls="accordion-content-4" 2901 data-v-ab907870 2902 > 2903 <span data-v-ab907870>How fast can we start?</span 2904 ><svg 2905 class="w-5 h-5 text-ink-muted transform transition-transform duration-[var(--dur-base)]" 2906 fill="none" 2907 stroke="currentColor"
2908 viewBox="0 0 24 24" 2909 xmlns="http://www.w3.org/2000/svg" 2910 data-v-ab907870="" 2911 > 2912 <path 2913 stroke-linecap="round" 2914 stroke-linejoin="round" 2915 stroke-width="2" 2916 d="M19 9l-7 7-7-7" 2917 data-v-ab907870="" 2918 /> 2919 </svg> 2920 </button> 2921 <div 2922 id="accordion-content-4" 2923 class="overflow-hidden transition-all duration-[var(--dur-base)] ease-out" 2924 style="max-height: 0" 2925 data-v-ab907870 2926 > 2927 <div 2928 class="px-5 md:px-6 pb-5 md:pb-6 text-ink-muted leading-relaxed border-t border-rule pt-5" 2929 data-v-ab907870 2930 > 2931 <div data-v-ab907870> 2932 One-off calls can usually be scheduled within a 2933 week. Monthly and premium retainers start with a 2934 short call to confirm the problem, scope, and fit. 2935 </div> 2936 </div> 2937 </div> 2938 </div> 2939 <!--]--> 2940 </div> 2941 </div> 2942 <!--]--> 2943 </div> 2944 </section> 2945 <section 2946 id="contact" 2947 class="relative w-full bg-surface py-20 md:py-32" 2948 > 2949 <div class="mx-auto px-6 md:px-8 max-w-5xl"> 2950 <header class="mb-10 md:mb-14 max-w-3xl"> 2951 <p 2952 class="text-xs uppercase tracking-[0.18em] text-ink-faint font-mono mb-4" 2953 > 2954 Get in touch 2955 </p> 2956 <!----><!----> 2957 </header> 2958 <!--[--> 2959 <div class="grid grid-cols-1 md:grid-cols-12 gap-10 md:gap-16"> 2960 <div class="md:col-span-5"> 2961 <h2 2962 class="font-display text-ink leading-[1.05]" 2963 style="font-weight: 400; font-size: var(--text-4xl)" 2964 > 2965 Tell me what you're trying to 2966 <em class="italic" style="font-family: var(--font-serif)" 2967 >actually</em 2968 > 2969 build. 2970 </h2> 2971 <p class="mt-6 text-lg text-ink-muted leading-relaxed"> 2972 I read every message myself and reply within two business 2973 days. 2974 </p> 2975 <p 2976 class="mt-6 text-sm text-ink-faint font-mono leading-relaxed" 2977 > 2978 The form is the only way to reach me. Keeps the signal 2979 high, the noise out. 2980 </p> 2981 </div> 2982 <form 2983 class="md:col-span-7 space-y-5 bg-surface-elev border border-rule rounded-lg p-6 md:p-8" 2984 > 2985 <div 2986 class="absolute -left-[10000px] h-px w-px overflow-hidden" 2987 aria-hidden="true" 2988 > 2989 <label for="company-website">Company website</label 2990 ><input 2991 id="company-website" 2992 value 2993 name="_gotcha" 2994 type="text" 2995 tabindex="-1" 2996 autocomplete="off" 2997 /> 2998 </div> 2999 <div> 3000 <label 3001 for="name" 3002 class="block text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint mb-2" 3003 >Your name</label 3004 ><input 3005 type="text" 3006 name="name" 3007 id="name" 3008 value 3009 required 3010 class="w-full px-4 py-3 bg-surface border border-rule text-ink rounded-md outline-none focus:border-accent focus:ring-2 focus:ring-[color:var(--accent)]/20 transition-colors placeholder:text-ink-faint disabled:opacity-50" 3011 placeholder="Jane Doe" 3012 /> 3013 </div> 3014 <div> 3015 <label 3016 for="email" 3017 class="block text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint mb-2" 3018 >Email</label 3019 ><input 3020 type="email" 3021 name="email" 3022 id="email" 3023 value 3024 required 3025 class="w-full px-4 py-3 bg-surface border border-rule text-ink rounded-md outline-none focus:border-accent focus:ring-2 focus:ring-[color:var(--accent)]/20 transition-colors placeholder:text-ink-faint disabled:opacity-50" 3026 placeholder="[email protected]" 3027 /> 3028 </div> 3029 <div> 3030 <label 3031 for="message" 3032 class="block text-[10px] font-mono uppercase tracking-[0.22em] text-ink-faint mb-2" 3033 >Message</label 3034 ><textarea 3035 name="message" 3036 id="message" 3037 rows="6" 3038 required 3039 class="w-full px-4 py-3 bg-surface border border-rule text-ink rounded-md outline-none focus:border-accent focus:ring-2 focus:ring-[color:var(--accent)]/20 transition-colors placeholder:text-ink-faint resize-y disabled:opacity-50" 3040 placeholder="What are you trying to build? What's in the way?" 3041 ></textarea> 3042 </div> 3043 <div class="pt-2"> 3044 <button 3045 type="submit" 3046 class="app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-14 px-8 text-lg rounded-md bg-accent border border-accent text-[color:var(--accent-ink)] hover:bg-accent-700 hover:border-accent-700 active:translate-y-[1px] w-full" 3047 data-v-ef5ce0b1 3048 > 3049 <!--[--><!--]--><span 3050 class="app-button__label" 3051 data-v-ef5ce0b1 3052 ><!--[-->Send<!--]--></span 3053 ><span 3054 aria-hidden="true" 3055 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 3056 data-v-ef5ce0b1 3057 >â</span 3058 ><!--[--><!--]--> 3059 </button> 3060 </div> 3061 <!----> 3062 </form> 3063 </div> 3064 <!--]--> 3065 </div> 3066 </section> 3067 </div> 3068 </main> 3069 <footer class="mt-auto bg-surface-sunken border-t border-rule"> 3070 <div class="mx-auto max-w-7xl px-6 md:px-8 py-16 md:py-20">
3071 <div class="grid grid-cols-2 md:grid-cols-5 gap-10 md:gap-8"> 3072 <div class="col-span-2"> 3073 <a 3074 aria-current="page" 3075 href="/" 3076 class="router-link-active router-link-exact-active inline-flex items-baseline gap-2" 3077 ><span 3078 class="font-sans text-2xl font-extrabold tracking-[-0.04em] text-ink" 3079 > 3080 workflows<span class="text-accent">.</span>diy 3081 </span></a 3082 > 3083 <p class="mt-4 text-ink-muted max-w-sm leading-relaxed"> 3084 1:1 AI implementation consulting. Build and deploy AI that 3085 your org actually uses. 3086 </p> 3087 <div class="mt-6 flex items-center gap-3"> 3088 <a 3089 aria-current="page" 3090 href="/#contact" 3091 class="router-link-active router-link-exact-active app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-9 px-4 text-sm rounded-md bg-accent border border-accent text-[color:var(--accent-ink)] hover:bg-accent-700 hover:border-accent-700 active:translate-y-[1px]" 3092 data-v-ef5ce0b1 3093 ><!--[--><!--]--><span 3094 class="app-button__label" 3095 data-v-ef5ce0b1 3096 ><!--[-->Book a call<!--]--></span 3097 ><span 3098 aria-hidden="true" 3099 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 3100 data-v-ef5ce0b1 3101 >â</span 3102 ><!--[--><!--]--></a 3103 ><a 3104 href="https://github.com/workflowsdiy/n8n-workflows" 3105 class="app-button group inline-flex items-center justify-center gap-2 whitespace-nowrap font-semibold transition-all duration-[var(--dur-base)] ease-out select-none focus-visible:outline-none h-9 px-4 text-sm rounded-md bg-surface-elev border border-rule text-ink hover:border-accent hover:text-accent" 3106 data-v-ef5ce0b1 3107 ><!--[--><!--]--><span 3108 class="app-button__label" 3109 data-v-ef5ce0b1 3110 ><!--[-->n8n on GitHub<!--]--></span 3111 ><span 3112 aria-hidden="true" 3113 class="app-button__arrow transition-transform duration-[var(--dur-base)] ease-out group-hover:translate-x-0.5" 3114 data-v-ef5ce0b1 3115 >â</span 3116 ><!--[--><!--]--></a 3117 > 3118 </div> 3119 </div> 3120 <div> 3121 <p 3122 class="text-[10px] font-mono uppercase tracking-[0.2em] text-ink-faint mb-4" 3123 > 3124 For Leaders 3125 </p> 3126 <ul class="space-y-3"> 3127 <li> 3128 <a 3129 href="/ai-for-ceos" 3130 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3131 >AI for CEOs</a 3132 > 3133 </li> 3134 <li> 3135 <a 3136 href="/ai-operations" 3137 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3138 >AI Operations</a 3139 > 3140 </li> 3141 <li> 3142 <a 3143 href="/ai-first-philosophy" 3144 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3145 >AI-First Philosophy</a 3146 > 3147 </li> 3148 <li> 3149 <a 3150 aria-current="page" 3151 href="/#pricing" 3152 class="router-link-active router-link-exact-active text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3153 >Services & Pricing</a 3154 > 3155 </li> 3156 </ul> 3157 </div> 3158 <div> 3159 <p 3160 class="text-[10px] font-mono uppercase tracking-[0.2em] text-ink-faint mb-4" 3161 > 3162 For Builders 3163 </p> 3164 <ul class="space-y-3"> 3165 <li> 3166 <a 3167 href="/n8n-workflow-repository" 3168 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3169 >n8n Workflow Repository</a 3170 > 3171 </li> 3172 <li> 3173 <a 3174 href="/n8n-workflows/all" 3175 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3176 >Featured n8n Workflows</a 3177 > 3178 </li> 3179 <li> 3180 <a 3181 href="/n8n-workflows" 3182 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3183 >Creator Profile</a 3184 > 3185 </li> 3186 </ul> 3187 </div> 3188 <div> 3189 <p 3190 class="text-[10px] font-mono uppercase tracking-[0.2em] text-ink-faint mb-4" 3191 > 3192 More 3193 </p> 3194 <ul class="space-y-3"> 3195 <li> 3196 <a 3197 href="/blog" 3198 class="text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3199 >Writing</a 3200 > 3201 </li> 3202 <li> 3203 <a 3204 aria-current="page" 3205 href="/#faq" 3206 class="router-link-active router-link-exact-active text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3207 >FAQ</a 3208 > 3209 </li> 3210 <li> 3211 <a 3212 aria-current="page" 3213 href="/#contact" 3214 class="router-link-active router-link-exact-active text-ink-muted border-b border-transparent hover:text-ink hover:border-current transition-colors" 3215 >Contact</a 3216 > 3217 </li> 3218 </ul> 3219 </div> 3220 </div> 3221 <div class="mt-16 pt-8 border-t border-rule text-sm"> 3222 <p class="text-ink-faint font-mono"> 3223 © 2026 workflows.diy · made in the open · hand-built, not 3224 templated 3225 </p> 3226 </div> 3227 </div> 3228 </footer> 3229 </div> 3230 </div> 3231 3232 <link rel="stylesheet" crossorigin href="/assets/app-BOXp1MmS.css" /><link 3233 rel="stylesheet" 3234 href="/assets/AccordionItem-CU0z0BtU.css" 3235 /> 3236 </body> 3237</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.