main.css

   1/*
   2 * impeccable.style — Renaissance Redesign
   3 *
   4 * Editorial precision meets fluid motion.
   5 * Light, high-contrast, typographically bold.
   6 */
   7
   8/* Shared design tokens + minimal reset */
   9@import "./tokens.css";
  10
  11/* Section partials (landing page only) */
  12@import "./problem-section.css";
  13@import "./workflow.css";
  14@import "./live-mode.css";
  15@import "./gallery.css";
  16@import "./skill-demos.css";
  17
  18
  19/* ============================================
  20   SKIP LINK (Accessibility)
  21   ============================================ */
  22
  23.skip-link {
  24  position: absolute;
  25  top: -100%;
  26  left: 50%;
  27  transform: translateX(-50%);
  28  z-index: 10000;
  29  padding: var(--spacing-sm) var(--spacing-lg);
  30  background: var(--color-ink);
  31  color: var(--color-paper);
  32  font-weight: 600;
  33  text-decoration: none;
  34  border-radius: 0 0 8px 8px;
  35  transition: top 0.2s ease;
  36}
  37
  38.skip-link:focus {
  39  top: 0;
  40  outline: 2px solid var(--color-accent);
  41  outline-offset: 2px;
  42}
  43
  44/* ============================================
  45   FLOATING BOTTOM NAV
  46   ============================================ */
  47
  48.section-nav {
  49  position: fixed;
  50  bottom: var(--spacing-md);
  51  left: 50%;
  52  transform: translateX(-50%) translateY(20px);
  53  z-index: 100;
  54  display: flex;
  55  align-items: center;
  56  gap: 2px;
  57  padding: 4px;
  58  background: oklch(98% 0 0 / 0.85);
  59  backdrop-filter: blur(12px);
  60  -webkit-backdrop-filter: blur(12px);
  61  border: 1px solid var(--color-mist);
  62  border-radius: 100px;
  63  box-shadow: 0 4px 24px -4px rgba(0,0,0,0.12), 0 1px 3px rgba(0,0,0,0.06);
  64  opacity: 0;
  65  pointer-events: none;
  66  transition: opacity 0.4s var(--ease-out), transform 0.4s var(--ease-out);
  67}
  68
  69.section-nav.is-visible {
  70  opacity: 1;
  71  pointer-events: auto;
  72  transform: translateX(-50%) translateY(0);
  73}
  74
  75.section-nav-item {
  76  display: flex;
  77  align-items: center;
  78  gap: 4px;
  79  padding: 8px 12px;
  80  text-decoration: none;
  81  border-radius: 100px;
  82  transition: background 0.2s ease, color 0.2s ease;
  83}
  84
  85.section-nav-item:hover {
  86  background: var(--color-mist);
  87  text-decoration: none;
  88}
  89
  90.section-nav-item.is-active {
  91  background: var(--color-ink);
  92}
  93
  94.section-nav-item.is-active .section-nav-num {
  95  color: var(--color-paper);
  96}
  97
  98.section-nav-item.is-active .section-nav-label {
  99  color: var(--color-paper);
 100}
 101
 102.section-nav-num {
 103  font-family: var(--font-mono);
 104  font-size: 0.5625rem;
 105  font-weight: 500;
 106  color: var(--color-ash);
 107  letter-spacing: 0.02em;
 108  transition: color 0.2s ease;
 109}
 110
 111.section-nav-label {
 112  font-family: var(--font-body);
 113  font-size: 0.6875rem;
 114  font-weight: 500;
 115  color: var(--color-charcoal);
 116  transition: color 0.2s ease;
 117  white-space: nowrap;
 118}
 119
 120@media (max-width: 700px) {
 121  .section-nav-label {
 122    display: none;
 123  }
 124  .section-nav-item {
 125    padding: 8px 10px;
 126  }
 127}
 128
 129@media (max-width: 400px) {
 130  .section-nav-item {
 131    padding: 8px;
 132  }
 133
 134  .section-nav-num {
 135    font-size: 0.625rem;
 136  }
 137}
 138
 139
 140/* ============================================
 141   BASE STYLES
 142   ============================================ */
 143
 144html {
 145  -webkit-font-smoothing: antialiased;
 146  -moz-osx-font-smoothing: grayscale;
 147  text-rendering: optimizeLegibility;
 148  overflow-x: clip; /* Prevent horizontal scroll without breaking position:sticky */
 149}
 150
 151body {
 152  font-family: var(--font-body);
 153  font-size: 16px;
 154  line-height: 1.625;
 155  color: var(--color-text);
 156  background: var(--color-paper);
 157  overflow-x: clip;
 158  min-height: 100vh;
 159  min-height: 100dvh;
 160}
 161
 162h1, h2, h3, h4, h5, h6 {
 163  font-family: var(--font-display);
 164  font-weight: 400;
 165  line-height: 1.1;
 166  letter-spacing: -0.02em;
 167  color: var(--color-ink);
 168}
 169
 170a {
 171  color: var(--color-accent);
 172  text-decoration: underline;
 173  text-decoration-thickness: 1px;
 174  text-underline-offset: 2px;
 175  transition: color var(--duration-fast) var(--ease-out), text-decoration-color var(--duration-fast) var(--ease-out);
 176}
 177
 178a:hover {
 179  color: var(--color-accent-hover);
 180  text-decoration-thickness: 2px;
 181}
 182
 183/* Remove underline for buttons styled as links */
 184.btn,
 185.footer-logo,
 186[class*="nav-item"] {
 187  text-decoration: none;
 188}
 189
 190strong {
 191  font-weight: 600;
 192  color: var(--color-ink);
 193}
 194
 195code {
 196  font-family: var(--font-mono);
 197  font-size: 0.9em;
 198  padding: 0.15em 0.4em;
 199  background: var(--color-accent-dim);
 200  color: var(--color-accent);
 201  border-radius: 4px;
 202}
 203
 204::selection {
 205  background: var(--color-accent-soft);
 206  color: var(--color-ink);
 207}
 208
 209/* ============================================
 210   GRAIN OVERLAY
 211   ============================================ */
 212
 213.grain-overlay {
 214  position: fixed;
 215  inset: 0;
 216  pointer-events: none;
 217  z-index: 9999;
 218  opacity: 0.03;
 219  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
 220  background-repeat: repeat;
 221}
 222
 223/* ============================================
 224   LAYOUT
 225   ============================================ */
 226
 227.site-content {
 228  max-width: var(--width-max);
 229  margin: 0 auto;
 230  padding: 0 var(--spacing-lg);
 231}
 232
 233@media (max-width: 768px) {
 234  .site-content {
 235    padding: 0 var(--spacing-md);
 236  }
 237}
 238
 239/* ============================================
 240   SECTION HEADERS
 241   ============================================ */
 242
 243.section-header {
 244  margin-bottom: var(--spacing-lg);
 245  position: relative;
 246}
 247
 248.section-number {
 249  display: block;
 250  font-family: var(--font-mono);
 251  font-size: 0.625rem;
 252  font-weight: 500;
 253  letter-spacing: 0.05em;
 254  color: var(--color-ash);
 255  margin-bottom: var(--spacing-xs);
 256  text-transform: uppercase;
 257}
 258
 259.section-title {
 260  font-size: clamp(1.75rem, 4vw, 2.5rem);
 261  font-weight: 400;
 262  line-height: 1.2;
 263  margin: 0;
 264}
 265
 266.section-subtitle {
 267  font-size: 1rem;
 268  line-height: 1.6;
 269  color: var(--color-charcoal);
 270  margin-top: var(--spacing-sm);
 271  max-width: 55ch;
 272}
 273
 274.cheatsheet-link {
 275  color: var(--color-accent);
 276  text-decoration: none;
 277  font-size: 0.875rem;
 278  margin-left: 0.5em;
 279}
 280
 281.cheatsheet-link:hover {
 282  text-decoration: underline;
 283}
 284
 285.section-lead {
 286  font-size: 1rem;
 287  line-height: 1.6;
 288  color: var(--color-charcoal);
 289  max-width: 55ch;
 290  margin-bottom: var(--spacing-lg);
 291}
 292
 293/* ============================================
 294   HERO SECTION - Combined Layout
 295   ============================================ */
 296
 297.hero-combined {
 298  position: relative;
 299  display: flex;
 300  flex-direction: column;
 301  justify-content: center;
 302  min-height: 100vh;
 303  min-height: 100dvh;
 304  padding: var(--spacing-lg) 0 var(--spacing-2xl);
 305  background: var(--color-paper);
 306}
 307
 308.github-link {
 309  position: absolute;
 310  top: var(--spacing-md);
 311  right: var(--spacing-lg);
 312  z-index: 10;
 313  color: var(--color-ash);
 314  transition: color 0.2s ease;
 315  display: flex;
 316  align-items: center;
 317  gap: 6px;
 318  text-decoration: none;
 319}
 320
 321.github-link:hover {
 322  color: var(--color-ink);
 323  text-decoration: none;
 324}
 325
 326.github-stars {
 327  font-family: var(--font-mono);
 328  font-size: 0.75rem;
 329  font-weight: 500;
 330  color: var(--color-ash);
 331  transition: color 0.2s ease;
 332}
 333
 334.github-link:hover .github-stars {
 335  color: var(--color-ink);
 336}
 337
 338.hero-combined-container {
 339  max-width: var(--width-max);
 340  margin: 0 auto;
 341  padding: 0 var(--spacing-lg);
 342  display: grid;
 343  grid-template-columns: 1fr 1fr;
 344  gap: var(--spacing-xl);
 345  align-items: center;
 346  width: 100%;
 347}
 348
 349@media (max-width: 1024px) {
 350  .hero-combined-container {
 351    grid-template-columns: 1fr;
 352    gap: var(--spacing-lg);
 353    text-align: center;
 354  }
 355}
 356
 357@media (max-width: 768px) {
 358  .hero-combined-right {
 359    order: -1;
 360    padding-top: var(--spacing-xl);
 361  }
 362
 363  .hero-combined-container {
 364    gap: var(--spacing-md);
 365  }
 366
 367  .hero-combined-left {
 368    gap: var(--spacing-sm);
 369    padding-top: var(--spacing-md);
 370  }
 371
 372  .hero-hook-text,
 373  .hero-included-box,
 374  .hero-cta-group {
 375    margin-top: var(--spacing-xs);
 376  }
 377}
 378
 379.hero-combined-left {
 380  display: flex;
 381  flex-direction: column;
 382  gap: var(--spacing-md);
 383}
 384
 385@media (max-width: 1024px) {
 386  .hero-combined-left {
 387    align-items: center;
 388  }
 389}
 390
 391.hero-title-combined {
 392  font-family: var(--font-display);
 393  font-size: clamp(2.5rem, 7vw, 4.5rem);
 394  font-weight: 300;
 395  font-style: italic;
 396  line-height: 1;
 397  letter-spacing: -0.02em;
 398  margin: 0;
 399  color: var(--color-ink);
 400}
 401
 402.hero-tagline-combined {
 403  font-family: var(--font-display);
 404  font-size: clamp(1.125rem, 2.5vw, 1.75rem);
 405  font-weight: 400;
 406  font-style: italic;
 407  line-height: 1.3;
 408  margin: 0;
 409  color: var(--color-charcoal);
 410}
 411
 412.hero-hook-text {
 413  font-size: 1rem;
 414  line-height: 1.6;
 415  color: var(--color-charcoal);
 416  max-width: 45ch;
 417  margin: 0;
 418}
 419
 420.hero-hook-text--short {
 421  display: none;
 422}
 423
 424@media (max-width: 768px) {
 425  .hero-hook-text--full {
 426    display: none;
 427  }
 428
 429  .hero-hook-text--short {
 430    display: block;
 431  }
 432}
 433
 434/* Hero Included Box - Subtle "What's included" */
 435.hero-included-box {
 436  display: flex;
 437  flex-direction: column;
 438  gap: 6px;
 439  padding: 10px 14px;
 440  border: 1px solid var(--color-mist);
 441  background: transparent;
 442  max-width: 45ch;
 443}
 444
 445.hero-included-title {
 446  font-family: var(--font-body);
 447  font-size: 0.5625rem;
 448  font-weight: 500;
 449  text-transform: uppercase;
 450  letter-spacing: 0.1em;
 451  color: var(--color-ash);
 452}
 453
 454.hero-included-items {
 455  display: flex;
 456  flex-wrap: wrap;
 457  align-items: center;
 458  gap: 6px;
 459  font-size: 0.8125rem;
 460  color: var(--color-charcoal);
 461  line-height: 1.5;
 462}
 463
 464.hero-included-items em {
 465  font-style: normal;
 466  font-family: var(--font-mono);
 467  font-size: 0.75rem;
 468}
 469
 470.hero-included-sep {
 471  color: var(--color-mist);
 472}
 473
 474@media (max-width: 500px) {
 475  .hero-included-items {
 476    flex-direction: column;
 477    align-items: flex-start;
 478    gap: 4px;
 479  }
 480
 481  .hero-included-sep {
 482    display: none;
 483  }
 484}
 485
 486.hero-cta-group {
 487  display: flex;
 488  align-items: center;
 489  gap: var(--spacing-lg);
 490  margin-top: var(--spacing-sm);
 491}
 492
 493@media (max-width: 600px) {
 494  .hero-cta-group {
 495    flex-direction: column;
 496    gap: var(--spacing-md);
 497  }
 498}
 499
 500.hero-cta-combined {
 501  display: inline-block;
 502  padding: var(--spacing-sm) var(--spacing-xl);
 503  font-family: var(--font-body);
 504  font-size: 0.9rem;
 505  font-weight: 500;
 506  letter-spacing: 0.05em;
 507  text-transform: uppercase;
 508  text-decoration: none;
 509  color: var(--color-paper);
 510  background: var(--color-ink);
 511  border: none;
 512  transition: transform 0.2s ease, background 0.2s ease;
 513}
 514
 515.hero-cta-combined:hover {
 516  transform: translateY(-2px);
 517  background: var(--color-accent);
 518  color: var(--color-paper);
 519}
 520
 521.hero-logos-inline {
 522  display: flex;
 523  flex-direction: column;
 524  align-items: flex-start;
 525  gap: 6px;
 526}
 527
 528.hero-logos-inline .hero-logos-label {
 529  font-size: 0.6875rem;
 530  color: var(--color-ash);
 531  letter-spacing: 0.03em;
 532}
 533
 534.hero-logos-inline .hero-logos-row {
 535  display: flex;
 536  align-items: center;
 537  gap: 8px;
 538  flex-wrap: wrap;
 539}
 540
 541.hero-logos-inline .hero-logos-row img {
 542  border-radius: 4px;
 543  opacity: 0.7;
 544  transition: opacity 0.2s ease;
 545}
 546
 547.hero-logos-inline .hero-logos-row img:hover {
 548  opacity: 1;
 549}
 550
 551.hero-combined-right {
 552  display: flex;
 553  justify-content: center;
 554}
 555
 556.hero-combined-right .split-comparison {
 557  max-width: 520px;
 558  width: 100%;
 559}
 560
 561.hero-combined-right .split-container {
 562  max-width: 100%;
 563}
 564
 565/* Bias tags at bottom of hero */
 566.hero-bias-tags {
 567  display: flex;
 568  flex-direction: column;
 569  align-items: center;
 570  gap: var(--spacing-xs);
 571  margin-top: var(--spacing-lg);
 572  padding-top: var(--spacing-md);
 573  border-top: 1px solid var(--color-mist);
 574  max-width: var(--width-max);
 575  margin-left: auto;
 576  margin-right: auto;
 577  width: 100%;
 578  padding-bottom: var(--spacing-md);
 579}
 580
 581/* ============================================
 582   PROBLEM SECTION - Clarity Lens
 583   ============================================ */
 584
 585.problem-section {
 586  padding: var(--spacing-2xl) 0;
 587  border-top: 1px solid var(--color-mist);
 588}
 589
 590.problem-content {
 591  display: grid;
 592  gap: var(--spacing-xl);
 593}
 594
 595/* Split Screen Comparison */
 596.split-comparison {
 597  position: relative;
 598  width: 100%;
 599  max-width: 600px;
 600  margin: 0 auto;
 601  padding: 20px;
 602  margin-top: -20px;
 603  margin-bottom: -20px;
 604}
 605
 606.split-container {
 607  position: relative;
 608  width: 100%;
 609  max-width: 500px;
 610  height: 380px;
 611  margin: 0 auto;
 612  border-radius: 12px;
 613  overflow: hidden;
 614  background: var(--color-cream);
 615  border: 1px solid var(--color-mist);
 616  cursor: ew-resize;
 617  user-select: none;
 618}
 619
 620.split-before,
 621.split-after {
 622  position: absolute;
 623  inset: 0;
 624  display: flex;
 625  align-items: center;
 626  justify-content: center;
 627}
 628
 629.split-before {
 630  z-index: 1;
 631}
 632
 633.split-content {
 634  width: 100%;
 635  height: 100%;
 636  display: flex;
 637  align-items: center;
 638  justify-content: center;
 639}
 640
 641.split-after {
 642  /* Angled clip-path matching divider's skewX(-10deg): top-right, bottom-left */
 643  clip-path: polygon(58% 0%, 100% 0%, 100% 100%, 42% 100%);
 644  z-index: 2;
 645  background: var(--color-paper);
 646}
 647
 648.split-divider {
 649  position: absolute;
 650  top: 0;
 651  bottom: 0;
 652  left: 50%;
 653  width: 3px;
 654  background: var(--color-accent);
 655  transform: translateX(-50%) skewX(-10deg);
 656  pointer-events: none;
 657  z-index: 3;
 658  box-shadow: 0 0 20px rgba(0,0,0,0.15);
 659}
 660
 661.split-label {
 662  position: absolute;
 663  top: 50%;
 664  left: 50%;
 665  transform: translate(-50%, -50%) skewX(10deg);
 666  font-size: 0.6875rem;
 667  font-weight: 600;
 668  letter-spacing: 0.08em;
 669  text-transform: uppercase;
 670  color: var(--color-paper);
 671  background: var(--color-accent);
 672  padding: 6px 14px;
 673  border-radius: 4px;
 674  white-space: nowrap;
 675  box-shadow: 0 2px 8px rgba(0,0,0,0.2);
 676}
 677
 678/* Slop Card - Generic AI output */
 679.slop-card {
 680  width: 280px;
 681  height: 280px;
 682  background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 50%, #ddd6fe 100%);
 683  border-radius: 16px;
 684  padding: 24px;
 685  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
 686  font-family: 'Inter', system-ui, sans-serif;
 687  display: flex;
 688  flex-direction: column;
 689}
 690
 691.slop-header {
 692  display: flex;
 693  align-items: center;
 694  gap: 12px;
 695  margin-bottom: 16px;
 696}
 697
 698.slop-avatar {
 699  width: 40px;
 700  height: 40px;
 701  border-radius: 50%;
 702  background: linear-gradient(135deg, #8b5cf6, #7c3aed);
 703  flex-shrink: 0;
 704}
 705
 706.slop-text { flex: 1; }
 707.slop-title { font-size: 14px; font-weight: 600; color: #1f2937; margin-bottom: 2px; }
 708.slop-subtitle { font-size: 12px; color: #6b7280; }
 709.slop-body { font-size: 13px; line-height: 1.5; color: #4b5563; margin-bottom: auto; flex: 1; }
 710
 711.slop-button {
 712  width: 100%;
 713  padding: 10px 20px;
 714  background: linear-gradient(135deg, #8b5cf6, #7c3aed);
 715  color: white;
 716  border: none;
 717  border-radius: 8px;
 718  font-family: 'Inter', system-ui, sans-serif;
 719  font-size: 13px;
 720  font-weight: 500;
 721  cursor: pointer;
 722  margin-top: auto;
 723}
 724
 725/* Callout labels pointing to issues */
 726.slop-callouts {
 727  position: absolute;
 728  inset: 0;
 729  pointer-events: none;
 730}
 731
 732.slop-callout {
 733  position: absolute;
 734  font-size: 0.625rem;
 735  font-weight: 600;
 736  text-transform: uppercase;
 737  letter-spacing: 0.06em;
 738  color: var(--color-accent);
 739  background: var(--color-paper);
 740  padding: 4px 8px;
 741  border: 1px solid var(--color-accent);
 742  border-radius: 3px;
 743  white-space: nowrap;
 744  opacity: 0;
 745  animation: calloutFadeIn 0.4s var(--ease-out) forwards;
 746  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
 747}
 748
 749.slop-callout[data-point="font"] {
 750  top: 15%;
 751  right: 5%;
 752  animation-delay: 0.1s;
 753}
 754
 755.slop-callout[data-point="gradient"] {
 756  top: 40%;
 757  left: 5%;
 758  animation-delay: 0.25s;
 759}
 760
 761.slop-callout[data-point="copy"] {
 762  bottom: 35%;
 763  right: 8%;
 764  animation-delay: 0.4s;
 765}
 766
 767.slop-callout[data-point="rounded"] {
 768  bottom: 12%;
 769  left: 10%;
 770  animation-delay: 0.55s;
 771}
 772
 773@keyframes calloutFadeIn {
 774  from {
 775    opacity: 0;
 776    transform: scale(0.9);
 777  }
 778  to {
 779    opacity: 1;
 780    transform: scale(1);
 781  }
 782}
 783
 784/* Impeccable Card - With Design Skills */
 785.impeccable-card {
 786  width: 280px;
 787  height: 300px;
 788  background: var(--color-paper);
 789  border: 1px solid var(--color-mist);
 790  padding: var(--spacing-lg);
 791  text-align: left;
 792  display: flex;
 793  flex-direction: column;
 794}
 795
 796.impeccable-eyebrow {
 797  font-family: var(--font-mono);
 798  font-size: 0.625rem;
 799  font-weight: 500;
 800  letter-spacing: 0.15em;
 801  text-transform: uppercase;
 802  color: var(--color-accent);
 803  margin-bottom: var(--spacing-xs);
 804}
 805
 806.impeccable-title {
 807  font-family: var(--font-display);
 808  font-size: 1.75rem;
 809  font-weight: 300;
 810  font-style: italic;
 811  color: var(--color-ink);
 812  margin-bottom: var(--spacing-sm);
 813  line-height: 1.1;
 814}
 815
 816.impeccable-body {
 817  font-size: 0.875rem;
 818  line-height: 1.6;
 819  color: var(--color-ash);
 820  margin-bottom: auto;
 821  flex: 1;
 822}
 823
 824.impeccable-button {
 825  display: inline-flex;
 826  margin-top: var(--spacing-sm);
 827  padding: 0.625rem 1.5rem;
 828  background: var(--color-ink);
 829  color: var(--color-paper);
 830  border: none;
 831  font-family: var(--font-body);
 832  font-size: 0.8125rem;
 833  font-weight: 500;
 834  letter-spacing: 0.03em;
 835  cursor: pointer;
 836  transition: all var(--duration-base) var(--ease-out);
 837  align-self: flex-start;
 838}
 839
 840.impeccable-button:hover {
 841  background: var(--color-accent);
 842}
 843
 844/* Split Labels */
 845.split-labels {
 846  display: flex;
 847  justify-content: center;
 848  gap: var(--spacing-xl);
 849  margin-top: var(--spacing-md);
 850}
 851
 852.split-label-item {
 853  display: flex;
 854  align-items: center;
 855  gap: var(--spacing-xs);
 856  font-size: 0.8125rem;
 857  color: var(--color-ash);
 858}
 859
 860@media (max-width: 768px) {
 861  .split-comparison {
 862    padding: 8px;
 863    margin-top: -8px;
 864    margin-bottom: -8px;
 865  }
 866
 867  .split-labels {
 868    display: none;
 869  }
 870}
 871
 872.split-label-dot {
 873  width: 8px;
 874  height: 8px;
 875  border-radius: 50%;
 876  background: var(--color-mist);
 877}
 878
 879.split-label-dot--accent {
 880  background: var(--color-accent);
 881}
 882
 883/* ============================================
 884   FOUNDATION SECTION
 885   ============================================ */
 886
 887.foundation-section {
 888  padding: var(--spacing-2xl) 0;
 889  border-top: 1px solid var(--color-mist);
 890}
 891
 892.foundation-content {
 893  display: grid;
 894  gap: var(--spacing-lg);
 895}
 896
 897.foundation-grid {
 898  display: flex;
 899  align-items: flex-end;
 900  height: 600px;
 901  gap: var(--spacing-sm);
 902  margin-top: -80px; /* Pull up into the header whitespace */
 903  position: relative;
 904}
 905
 906.foundation-column {
 907  flex: 1;
 908  display: flex;
 909  flex-direction: column;
 910  height: 100%;
 911  justify-content: flex-end;
 912  cursor: pointer;
 913  min-width: 0;
 914}
 915
 916.foundation-card {
 917  padding: var(--spacing-md);
 918  background: white;
 919  border: 1px solid var(--color-bg);
 920  border-radius: 12px;
 921  display: flex;
 922  flex-direction: column;
 923  height: 280px;
 924  margin-bottom: var(--spacing-xs);
 925  transition: transform var(--duration-slow) var(--ease-out-quint), border-color var(--duration-base) var(--ease-out), box-shadow var(--duration-base) var(--ease-out);
 926  position: relative;
 927  z-index: 2;
 928  box-sizing: border-box;
 929}
 930
 931.foundation-column:hover .foundation-card {
 932  transform: translateY(-12px);
 933  border-color: var(--color-accent);
 934  box-shadow: 0 20px 40px rgba(0, 0, 0, 0.08);
 935}
 936
 937.foundation-plinth {
 938  width: 100%;
 939  background: repeating-linear-gradient(45deg, var(--color-bg), var(--color-bg) 2px, transparent 2px, transparent 10px);
 940  border: 1px solid var(--color-mist);
 941  border-bottom: none;
 942  border-radius: 8px 8px 0 0;
 943  transition: all var(--duration-base) var(--ease-out);
 944}
 945
 946.foundation-column:hover .foundation-plinth {
 947  background: var(--color-mist);
 948  opacity: 0.7;
 949}
 950
 951/* Plinth Heights - More dramatic steps */
 952.plinth-1 { height: 4%; }
 953.plinth-2 { height: 12%; }
 954.plinth-3 { height: 20%; }
 955.plinth-4 { height: 28%; }
 956.plinth-5 { height: 36%; }
 957.plinth-6 { height: 44%; }
 958.plinth-7 { height: 52%; }
 959
 960.foundation-card-viz {
 961  height: 52px;
 962  display: flex;
 963  align-items: center;
 964  justify-content: flex-start;
 965  color: var(--color-ink);
 966  margin-bottom: var(--spacing-md);
 967}
 968
 969.foundation-card-header {
 970  display: flex;
 971  align-items: baseline;
 972  gap: var(--spacing-xs);
 973  margin-bottom: 8px;
 974  overflow: hidden;
 975}
 976
 977.foundation-card-label {
 978  font-family: var(--font-display);
 979  font-size: 1.35rem;
 980  color: var(--color-ink);
 981  line-height: 1.1;
 982}
 983
 984.foundation-card-count {
 985  font-family: var(--font-mono);
 986  font-size: 0.7rem;
 987  color: var(--color-accent);
 988  flex-shrink: 0;
 989}
 990
 991.foundation-card-detail {
 992  font-size: 0.875rem;
 993  color: var(--color-ash);
 994  line-height: 1.4;
 995  margin: auto 0 0 0;
 996}
 997
 998.foundation-svg {
 999  width: 44px;
1000  height: 44px;
1001}
1002
1003/* Typography & Spatial (Breathing draw + full draw on hover) */
1004.anim-draw { stroke-dasharray: 100; stroke-dashoffset: 100; animation: draw-breathe 4s ease-in-out infinite; }
1005.foundation-column:hover .anim-draw { animation: draw-in 0.8s var(--ease-out) forwards; }
1006.anim-draw-delay { stroke-dasharray: 100; stroke-dashoffset: 100; }
1007.foundation-column:hover .anim-draw-delay { animation: draw-in 1s var(--ease-out) 0.2s forwards; }
1008@keyframes draw-breathe { 0%, 100% { stroke-dashoffset: 100; } 50% { stroke-dashoffset: 40; } }
1009@keyframes draw-in { from { stroke-dashoffset: 100; } to { stroke-dashoffset: 0; } }
1010
1011/* Color & Contrast (Breathing pulse + spread on hover) */
1012.anim-move-x { animation: pulse-x 3s ease-in-out infinite; }
1013.foundation-column:hover .anim-move-x { animation: spread-x 0.6s var(--ease-in-out) forwards; }
1014.anim-move-x-opp { animation: pulse-x-opp 3s ease-in-out infinite; }
1015.foundation-column:hover .anim-move-x-opp { animation: spread-x-opp 0.6s var(--ease-in-out) forwards; }
1016.anim-fade-in { opacity: 0; transition: opacity 0.6s var(--ease-in-out); }
1017.foundation-column:hover .anim-fade-in { opacity: 1; }
1018@keyframes pulse-x { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(1.5px); } }
1019@keyframes pulse-x-opp { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-1.5px); } }
1020@keyframes spread-x { from { transform: translateX(0); } to { transform: translateX(4px); } }
1021@keyframes spread-x-opp { from { transform: translateX(0); } to { transform: translateX(-4px); } }
1022
1023/* Responsive (Staggered reflow from desktop 2-col to mobile stack) */
1024.anim-res-frame, .anim-res-img, .anim-res-title, .anim-res-line-1, .anim-res-line-2 {
1025  transform-box: fill-box;
1026  transform-origin: 50% 50%;
1027  transition: transform 0.4s var(--ease-in-out);
1028}
1029.anim-res-frame { transition-delay: 0s; }
1030.anim-res-img { transition-delay: 0s; }
1031.anim-res-title { transition-delay: 0s; }
1032.anim-res-line-1 { transition-delay: 0s; }
1033.anim-res-line-2 { transition-delay: 0s; }
1034.foundation-column:hover .anim-res-frame { transform: scaleX(0.57) scaleY(1.17); transition-delay: 0s; }
1035.foundation-column:hover .anim-res-img { transform: translate(6px, -4px) scale(0.65); transition-delay: 0.05s; }
1036.foundation-column:hover .anim-res-title { transform: translate(-7px, 6px) scaleX(0.65); transition-delay: 0.1s; }
1037.foundation-column:hover .anim-res-line-1 { transform: translate(-7px, 4.75px) scaleX(0.65); transition-delay: 0.15s; }
1038.foundation-column:hover .anim-res-line-2 { transform: translate(-6px, 4.25px) scaleX(0.6); transition-delay: 0.2s; }
1039
1040/* Interaction (Gentle wobble + full toggle on hover) */
1041.anim-toggle-move { animation: toggle-wobble 3s ease-in-out infinite; }
1042.foundation-column:hover .anim-toggle-move { animation: toggle-snap 0.35s var(--ease-in-out) forwards; }
1043@keyframes toggle-wobble { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(2px); } }
1044@keyframes toggle-snap { from { transform: translateX(0); fill: var(--color-mist); } to { transform: translateX(8px); fill: var(--color-accent); } }
1045
1046/* Motion (Gentle bob + full bounce on hover) */
1047.anim-squash-ball { transform-origin: 20px 20px; animation: ball-bob 2.5s ease-in-out infinite; }
1048.foundation-column:hover .anim-squash-ball { animation: bounce-ball 1.5s linear infinite; }
1049@keyframes ball-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(3px); } }
1050@keyframes bounce-ball {
1051  0% { transform: translateY(0); }
1052  6% { transform: translateY(0.5px); }
1053  18% { transform: translateY(4px); }
1054  35% { transform: translateY(12px); }
1055  42% { transform: translateY(12px) scaleX(1.3) scaleY(0.6); }
1056  48% { transform: translateY(12px); }
1057  65% { transform: translateY(4px); }
1058  78% { transform: translateY(0.5px); }
1059  88%, 100% { transform: translateY(0); }
1060}
1061
1062/* UX Writing (Cursor always blinks) */
1063.anim-blink { animation: blink-key 1s step-end infinite; }
1064@keyframes blink-key { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
1065
1066/* Tablet: 3-col grid (switch before stairs clip) */
1067@media (max-width: 1200px) {
1068  .foundation-grid {
1069    display: grid;
1070    grid-template-columns: repeat(3, 1fr);
1071    height: auto;
1072    gap: var(--spacing-md);
1073    margin-top: var(--spacing-xl);
1074  }
1075  .foundation-column { height: auto; }
1076  .foundation-card { height: auto; min-height: 200px; }
1077  .foundation-plinth { display: none; }
1078  .foundation-column:hover .foundation-card { transform: translateY(-4px); }
1079
1080  /* Enable hover animations on card hover for grid */
1081  .foundation-card:hover .anim-draw { animation: draw-in 0.8s var(--ease-out) forwards; }
1082  .foundation-card:hover .anim-draw-delay { animation: draw-in 1s var(--ease-out) 0.2s forwards; }
1083  .foundation-card:hover .anim-move-x { animation: spread-x 0.6s var(--ease-in-out) forwards; }
1084  .foundation-card:hover .anim-move-x-opp { animation: spread-x-opp 0.6s var(--ease-in-out) forwards; }
1085  .foundation-card:hover .anim-fade-in { opacity: 1; }
1086  .foundation-card:hover .anim-res-frame { transform: scaleX(0.57) scaleY(1.17); }
1087  .foundation-card:hover .anim-res-img { transform: translate(6px, -4px) scale(0.65); }
1088  .foundation-card:hover .anim-res-title { transform: translate(-7px, 6px) scaleX(0.65); }
1089  .foundation-card:hover .anim-res-line-1 { transform: translate(-7px, 4.75px) scaleX(0.65); }
1090  .foundation-card:hover .anim-res-line-2 { transform: translate(-6px, 4.25px) scaleX(0.6); }
1091  .foundation-card:hover .anim-toggle-move { animation: toggle-snap 0.35s var(--ease-in-out) forwards; }
1092  .foundation-card:hover .anim-squash-ball { animation: bounce-ball 1.5s linear infinite; }
1093}
1094
1095/* Small tablet: 2-col grid */
1096@media (max-width: 768px) {
1097  .foundation-grid { grid-template-columns: repeat(2, 1fr); }
1098}
1099
1100/* Small mobile: compact horizontal cards */
1101@media (max-width: 520px) {
1102  .foundation-grid {
1103    grid-template-columns: 1fr;
1104    gap: var(--spacing-sm);
1105  }
1106  .foundation-card {
1107    display: grid;
1108    grid-template-columns: auto 1fr;
1109    grid-template-rows: auto auto;
1110    align-items: start;
1111    min-height: auto;
1112    padding: var(--spacing-sm) var(--spacing-md);
1113    gap: 0 var(--spacing-md);
1114  }
1115  .foundation-card-viz {
1116    grid-row: 1 / -1;
1117    align-self: center;
1118    height: auto;
1119    margin-bottom: 0;
1120  }
1121  .foundation-card-header { margin-bottom: 2px; }
1122  .foundation-card-label { font-size: 1.1rem; }
1123  .foundation-card-detail { margin: 0; font-size: 0.8125rem; }
1124}
1125
1126.foundation-cta {
1127  text-align: center;
1128}
1129
1130.foundation-cta-text {
1131  font-size: 0.9375rem;
1132  color: var(--color-charcoal);
1133  margin: 0;
1134}
1135
1136.foundation-cta-text code {
1137  font-family: var(--font-mono);
1138  font-size: 0.875rem;
1139  color: var(--color-ink);
1140}
1141
1142.foundation-slash {
1143  color: var(--color-accent);
1144}
1145
1146/* ============================================
1147   LANGUAGE SECTION (wraps periodic table + commands)
1148   ============================================ */
1149
1150.language-section {
1151  padding: var(--spacing-2xl) 0;
1152  border-top: 1px solid var(--color-mist);
1153}
1154
1155.language-content {
1156  display: grid;
1157  gap: var(--spacing-sm);
1158}
1159
1160/* Grid and flex items default to min-width: auto, which lets them expand to
1161   fit their intrinsic content. The mobile commands layout has a split-compare
1162   demo wide enough to blow out the entire section on mobile (~2400px wide).
1163   Cascade min-width: 0 through every layer of the language section so the
1164   intrinsic width can't propagate up the parent chain. */
1165.language-section,
1166.language-section * {
1167  min-width: 0;
1168}
1169
1170.language-content .section-lead {
1171  margin-bottom: 0;
1172}
1173
1174.commands-subsection {
1175  display: grid;
1176  gap: var(--spacing-md);
1177}
1178
1179.commands-header-subtitle {
1180  font-size: 0.9375rem;
1181  color: var(--color-warm-gray);
1182  margin: 0;
1183}
1184
1185/* ============================================
1186   VISUAL MODE SECTION
1187   ============================================ */
1188
1189.visual-mode-section {
1190  padding: var(--spacing-2xl) 0;
1191  border-top: 1px solid var(--color-mist);
1192}
1193
1194.visual-mode-content {
1195  display: grid;
1196  gap: var(--spacing-lg);
1197}
1198
1199.visual-mode-demo {
1200  display: grid;
1201  grid-template-columns: 3fr 2fr;
1202  gap: var(--spacing-xl);
1203  align-items: start;
1204}
1205
1206@media (max-width: 900px) {
1207  .visual-mode-demo {
1208    grid-template-columns: 1fr;
1209  }
1210}
1211
1212/* Browser chrome frame for the iframe */
1213.visual-mode-preview {
1214  border-radius: 8px;
1215  overflow: hidden;
1216  border: 1px solid var(--color-mist);
1217  box-shadow: 0 8px 30px -6px rgba(0,0,0,0.12);
1218}
1219
1220.visual-mode-preview-header {
1221  display: flex;
1222  align-items: center;
1223  gap: 6px;
1224  padding: 10px 14px;
1225  background: var(--color-cream);
1226  border-bottom: 1px solid var(--color-mist);
1227}
1228
1229.visual-mode-preview-dot {
1230  width: 10px;
1231  height: 10px;
1232  border-radius: 50%;
1233}
1234
1235.visual-mode-preview-dot.red { background: #ff5f56; }
1236.visual-mode-preview-dot.yellow { background: #ffbd2e; }
1237.visual-mode-preview-dot.green { background: #27c93f; }
1238
1239.visual-mode-preview-title {
1240  margin-left: auto;
1241  font-family: var(--font-mono);
1242  font-size: 0.75rem;
1243  color: var(--color-ash);
1244}
1245
1246.visual-mode-iframe {
1247  display: block;
1248  width: 100%;
1249  height: 480px;
1250  border: none;
1251  background: white;
1252}
1253
1254/* Details sidebar — editorial blocks, no cards.
1255   The live detection overlay (left iframe) is the visual anchor for the
1256   whole section; the right column should be quiet text + a single image
1257   for the Chrome extension CTA. Hierarchy via typography + space, not
1258   bordered containers. */
1259.visual-mode-details {
1260  display: flex;
1261  flex-direction: column;
1262  gap: var(--spacing-xl);
1263  padding: var(--spacing-md) 0;
1264}
1265
1266.visual-mode-feature {
1267  display: flex;
1268  flex-direction: column;
1269  gap: var(--spacing-xs);
1270}
1271
1272.visual-mode-feature-label {
1273  display: block;
1274  font-family: var(--font-mono);
1275  font-size: 0.6875rem;
1276  font-weight: 600;
1277  text-transform: uppercase;
1278  letter-spacing: 0.08em;
1279  color: var(--color-accent);
1280}
1281
1282.visual-mode-feature p {
1283  font-size: 0.9375rem;
1284  line-height: 1.55;
1285  color: var(--color-charcoal);
1286  margin: 0;
1287}
1288
1289.visual-mode-feature code {
1290  font-family: var(--font-mono);
1291  font-size: 0.875rem;
1292  color: var(--color-ink);
1293}
1294
1295/* ============================================
1296   SOLUTION SECTION (legacy styles for periodic table)
1297   ============================================ */
1298
1299.solution-section {
1300  padding: var(--spacing-2xl) 0;
1301}
1302
1303.solution-content {
1304  display: grid;
1305  gap: var(--spacing-lg);
1306}
1307
1308.solution-content .section-lead {
1309  margin-bottom: 0;
1310}
1311
1312/* Two-pillar visual layout */
1313.solution-visual {
1314  display: grid;
1315  grid-template-columns: 1fr auto 1fr;
1316  gap: var(--spacing-lg);
1317  align-items: stretch;
1318}
1319
1320@media (max-width: 900px) {
1321  .solution-visual {
1322    grid-template-columns: 1fr;
1323    gap: var(--spacing-md);
1324  }
1325}
1326
1327/* Interactive Framework Viz - Periodic Table */
1328.solution-visual-interactive {
1329  width: 100%;
1330  min-height: 380px;
1331  background: var(--color-paper);
1332  border: 1px solid var(--color-mist);
1333  border-radius: 8px;
1334  position: relative;
1335  overflow: visible;
1336}
1337
1338.solution-pillar {
1339  background: var(--color-cream);
1340  border: 1px solid var(--color-mist);
1341  padding: var(--spacing-lg);
1342  transition: all var(--duration-base) var(--ease-out);
1343}
1344
1345.solution-pillar:hover {
1346  border-color: var(--color-accent);
1347  transform: translateY(-4px);
1348  box-shadow: 0 20px 60px var(--color-accent-dim);
1349}
1350
1351.pillar-header {
1352  text-align: center;
1353  margin-bottom: var(--spacing-lg);
1354  padding-bottom: var(--spacing-md);
1355  border-bottom: 1px solid var(--color-mist);
1356}
1357
1358.pillar-icon {
1359  display: inline-flex;
1360  align-items: center;
1361  justify-content: center;
1362  width: 56px;
1363  height: 56px;
1364  border-radius: 50%;
1365  background: var(--color-accent-dim);
1366  color: var(--color-accent);
1367  margin-bottom: var(--spacing-sm);
1368}
1369
1370.pillar-title {
1371  font-family: var(--font-display);
1372  font-size: 1.75rem;
1373  font-weight: 400;
1374  margin: 0 0 var(--spacing-xs);
1375}
1376
1377.pillar-subtitle {
1378  font-size: 0.875rem;
1379  color: var(--color-ash);
1380  margin: 0;
1381}
1382
1383.pillar-content {
1384  display: flex;
1385  flex-direction: column;
1386  gap: var(--spacing-sm);
1387}
1388
1389.pillar-item {
1390  display: flex;
1391  justify-content: space-between;
1392  align-items: center;
1393  padding: var(--spacing-sm);
1394  background: var(--color-paper);
1395  border-radius: 4px;
1396  transition: all var(--duration-fast) var(--ease-out);
1397}
1398
1399.pillar-item:hover {
1400  background: var(--color-accent-dim);
1401}
1402
1403.pillar-item-name {
1404  font-weight: 500;
1405  color: var(--color-ink);
1406  font-size: 0.9375rem;
1407}
1408
1409.pillar-item-code {
1410  font-family: var(--font-mono);
1411  font-size: 0.875rem;
1412  font-weight: 500;
1413  color: var(--color-accent);
1414  background: transparent;
1415  padding: 0;
1416}
1417
1418.pillar-item-desc {
1419  font-size: 0.75rem;
1420  color: var(--color-ash);
1421}
1422
1423.pillar-item--more {
1424  justify-content: center;
1425  font-size: 0.8125rem;
1426  font-weight: 500;
1427  color: var(--color-accent);
1428  background: transparent;
1429  border: 1px dashed var(--color-mist);
1430}
1431
1432/* Connector between pillars */
1433.solution-connector {
1434  display: flex;
1435  align-items: center;
1436  justify-content: center;
1437}
1438
1439.connector-plus {
1440  font-family: var(--font-display);
1441  font-size: 3rem;
1442  font-weight: 300;
1443  color: var(--color-accent);
1444  opacity: 0.5;
1445}
1446
1447@media (max-width: 900px) {
1448  .solution-connector {
1449    padding: var(--spacing-sm) 0;
1450  }
1451  
1452  .connector-plus {
1453    font-size: 2rem;
1454  }
1455}
1456
1457
1458/* ============================================
1459   SKILLS SECTION
1460   ============================================ */
1461
1462.skills-section {
1463  padding: var(--spacing-2xl) 0;
1464  border-top: 1px solid var(--color-mist);
1465}
1466
1467.skills-gallery {
1468  display: grid;
1469  grid-template-columns: 200px 1fr;
1470  gap: var(--spacing-xl);
1471  align-items: start;
1472}
1473
1474@media (max-width: 968px) {
1475  .skills-gallery {
1476    grid-template-columns: 1fr;
1477    gap: var(--spacing-lg);
1478  }
1479}
1480
1481.skills-nav {
1482  display: flex;
1483  flex-direction: column;
1484  gap: 2px;
1485  position: sticky;
1486  top: var(--spacing-lg);
1487}
1488
1489@media (max-width: 968px) {
1490  .skills-nav {
1491    flex-direction: row;
1492    flex-wrap: wrap;
1493    gap: var(--spacing-xs);
1494    position: static;
1495  }
1496}
1497
1498.skill-nav-item {
1499  padding: var(--spacing-sm) var(--spacing-md);
1500  background: transparent;
1501  border: none;
1502  border-left: 2px solid transparent;
1503  color: var(--color-ash);
1504  font-family: var(--font-body);
1505  font-size: 0.9375rem;
1506  font-weight: 400;
1507  cursor: pointer;
1508  transition: all 0.2s ease;
1509  text-align: left;
1510  text-decoration: none;
1511  display: block;
1512}
1513
1514.skill-nav-item:hover {
1515  color: var(--color-text);
1516  background: var(--color-cream);
1517}
1518
1519.skill-nav-item.active {
1520  color: var(--color-accent);
1521  border-left-color: var(--color-accent);
1522  background: var(--color-accent-dim);
1523  font-weight: 500;
1524}
1525
1526@media (max-width: 968px) {
1527  .skill-nav-item {
1528    border-left: none;
1529    border-bottom: 2px solid transparent;
1530    padding: var(--spacing-xs) var(--spacing-md);
1531  }
1532  
1533  .skill-nav-item.active {
1534    border-bottom-color: var(--color-accent);
1535  }
1536}
1537
1538.skills-showcase {
1539  display: grid;
1540  grid-template-columns: 1.2fr 1fr;
1541  gap: var(--spacing-lg);
1542  align-items: start;
1543}
1544
1545@media (max-width: 1100px) {
1546  .skills-showcase {
1547    grid-template-columns: 1fr;
1548  }
1549}
1550
1551.loading-state {
1552  padding: var(--spacing-xl);
1553  text-align: center;
1554  color: var(--color-ash);
1555  font-style: italic;
1556}
1557
1558/* ============================================
1559   MOBILE COMMANDS LAYOUT
1560   ============================================ */
1561
1562.mobile-commands-layout {
1563  display: none;
1564}
1565
1566@media (max-width: 900px) {
1567  .mobile-commands-layout {
1568    display: flex;
1569    flex-direction: column;
1570    gap: var(--spacing-md);
1571    /* Without min-width: 0, the flex container expands to fit any intrinsically
1572       wide descendant (the split-compare demo blows it out to ~2400px otherwise).
1573       The same constraint cascades to direct children via the next rule. */
1574    min-width: 0;
1575    width: 100%;
1576  }
1577
1578  .mobile-commands-layout > * {
1579    min-width: 0;
1580    max-width: 100%;
1581  }
1582
1583  .commands-container {
1584    display: none;
1585  }
1586}
1587
1588.mobile-carousel-wrapper {
1589  overflow-x: auto;
1590  -webkit-overflow-scrolling: touch;
1591  scrollbar-width: none;
1592  padding: var(--spacing-xs) 0;
1593}
1594
1595.mobile-carousel-wrapper::-webkit-scrollbar {
1596  display: none;
1597}
1598
1599.mobile-carousel {
1600  display: flex;
1601  gap: var(--spacing-xs);
1602  padding-right: var(--spacing-md);
1603}
1604
1605.mobile-cmd-pill {
1606  flex-shrink: 0;
1607  padding: var(--spacing-sm) var(--spacing-md);
1608  min-height: 44px;
1609  font-family: var(--font-mono);
1610  font-size: 0.8125rem;
1611  font-weight: 500;
1612  color: var(--color-charcoal);
1613  background: none;
1614  border: none;
1615  border-radius: 100px;
1616  cursor: pointer;
1617  transition: background 0.2s ease, color 0.2s ease;
1618  white-space: nowrap;
1619}
1620
1621.mobile-cmd-pill:hover {
1622  background: var(--color-mist);
1623}
1624
1625.mobile-cmd-pill.active {
1626  color: var(--color-paper);
1627  background: var(--color-ink);
1628}
1629
1630.mobile-demo-area {
1631  padding: 0;
1632}
1633
1634.mobile-demo-area .demo-split-comparison {
1635  width: 100%;
1636}
1637
1638.mobile-demo-area .split-container {
1639  width: 100%;
1640  max-width: 100%;
1641  height: 320px;
1642}
1643
1644.mobile-demo-area .demo-caption {
1645  font-size: 0.75rem;
1646  margin-top: var(--spacing-sm);
1647}
1648
1649.mobile-info-area {
1650  padding-top: var(--spacing-sm);
1651}
1652
1653.mobile-cmd-info {
1654  display: none;
1655  padding: var(--spacing-sm) 0;
1656}
1657
1658.mobile-cmd-info.active {
1659  display: block;
1660}
1661
1662.mobile-cmd-name {
1663  font-family: var(--font-mono);
1664  font-size: 1.125rem;
1665  font-weight: 600;
1666  color: var(--color-ink);
1667  margin: 0 0 var(--spacing-xs) 0;
1668}
1669
1670.mobile-cmd-namespace {
1671  color: var(--color-ash);
1672  font-weight: 400;
1673}
1674
1675.mobile-cmd-desc {
1676  font-size: 0.875rem;
1677  color: var(--color-charcoal);
1678  line-height: 1.5;
1679  margin: 0;
1680}
1681
1682.mobile-cmd-rel {
1683  margin-top: var(--spacing-xs);
1684  font-size: 0.75rem;
1685  color: var(--color-ash);
1686}
1687
1688.mobile-cmd-rel code {
1689  font-family: var(--font-mono);
1690  color: var(--color-ink);
1691}
1692
1693/* ============================================
1694   DOWNLOADS SECTION
1695   ============================================ */
1696
1697.downloads-section {
1698  padding: var(--spacing-2xl) 0;
1699  border-top: 1px solid var(--color-mist);
1700}
1701
1702.downloads-grid {
1703  display: grid;
1704  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1705  gap: var(--spacing-lg);
1706}
1707
1708.download-card {
1709  display: flex;
1710  flex-direction: column;
1711  align-items: center;
1712  text-align: center;
1713  padding: var(--spacing-lg);
1714  background: var(--color-cream);
1715  border: 1px solid var(--color-mist);
1716  transition: all var(--duration-base) var(--ease-out);
1717}
1718
1719.download-card:hover {
1720  border-color: var(--color-accent);
1721  transform: translateY(-4px);
1722  box-shadow: 0 20px 60px var(--color-accent-dim);
1723}
1724
1725.download-card-icon {
1726  margin-bottom: var(--spacing-sm);
1727}
1728
1729.download-card-icon img {
1730  width: 40px;
1731  height: 40px;
1732  object-fit: contain;
1733  border-radius: 8px;
1734}
1735
1736.download-card-title {
1737  font-family: var(--font-display);
1738  font-size: 1.25rem;
1739  font-weight: 400;
1740  margin: 0 0 var(--spacing-sm) 0;
1741}
1742
1743.download-card-note {
1744  font-size: 0.75rem;
1745  color: var(--color-ash);
1746  margin-bottom: var(--spacing-xs);
1747}
1748
1749.download-card .btn {
1750  margin-top: var(--spacing-xs);
1751}
1752
1753/* Install command box */
1754.install-command {
1755  display: flex;
1756  align-items: center;
1757  gap: var(--spacing-xs);
1758  background: var(--color-paper);
1759  border: 1px solid var(--color-mist);
1760  border-radius: 6px;
1761  padding: var(--spacing-sm);
1762  margin-top: var(--spacing-sm);
1763  width: 100%;
1764}
1765
1766.install-command code {
1767  flex: 1;
1768  font-family: var(--font-mono);
1769  font-size: 0.75rem;
1770  color: var(--color-ink);
1771  background: transparent;
1772  padding: 0;
1773  white-space: nowrap;
1774  overflow: hidden;
1775  text-overflow: ellipsis;
1776}
1777
1778.copy-btn {
1779  display: flex;
1780  align-items: center;
1781  justify-content: center;
1782  width: 28px;
1783  height: 28px;
1784  background: transparent;
1785  border: 1px solid var(--color-mist);
1786  border-radius: 4px;
1787  color: var(--color-ash);
1788  cursor: pointer;
1789  flex-shrink: 0;
1790  transition: all var(--duration-fast) var(--ease-out);
1791}
1792
1793.copy-btn:hover {
1794  background: var(--color-accent-dim);
1795  border-color: var(--color-accent);
1796  color: var(--color-accent);
1797}
1798
1799.copy-btn.copied {
1800  background: var(--color-accent);
1801  border-color: var(--color-accent);
1802  color: var(--color-paper);
1803}
1804
1805.install-hint {
1806  font-size: 0.75rem;
1807  color: var(--color-ash);
1808  margin: var(--spacing-xs) 0 0 0;
1809}
1810
1811.install-hint code {
1812  font-family: var(--font-mono);
1813  font-size: 0.6875rem;
1814  background: var(--color-mist);
1815  padding: 2px 5px;
1816  border-radius: 3px;
1817}
1818
1819.download-card-details {
1820  width: 100%;
1821  margin-top: var(--spacing-sm);
1822  font-size: 0.8125rem;
1823  text-align: left;
1824}
1825
1826.download-card-details summary {
1827  cursor: pointer;
1828  color: var(--color-ash);
1829  font-size: 0.75rem;
1830  padding: var(--spacing-xs) 0;
1831  list-style: none;
1832  display: flex;
1833  align-items: center;
1834  justify-content: center;
1835  gap: 4px;
1836}
1837
1838.download-card-details summary::before {
1839  content: '▶';
1840  font-size: 0.5rem;
1841  transition: transform var(--duration-fast) var(--ease-out);
1842}
1843
1844.download-card-details[open] summary::before {
1845  transform: rotate(90deg);
1846}
1847
1848.download-card-details summary::-webkit-details-marker {
1849  display: none;
1850}
1851
1852.download-card-details ol {
1853  margin: var(--spacing-sm) 0;
1854  padding-left: var(--spacing-md);
1855  color: var(--color-charcoal);
1856  line-height: 1.6;
1857}
1858
1859.download-card-details li {
1860  margin-bottom: 4px;
1861}
1862
1863.download-card-details code {
1864  font-family: var(--font-mono);
1865  font-size: 0.6875rem;
1866  background: var(--color-mist);
1867  padding: 2px 5px;
1868  border-radius: 3px;
1869}
1870
1871.download-card-details a {
1872  color: var(--color-accent);
1873  text-decoration: none;
1874  font-size: 0.75rem;
1875}
1876
1877.download-card-details a:hover {
1878  text-decoration: underline;
1879}
1880
1881/* ============================================
1882   OPEN SOURCE SECTION
1883   ============================================ */
1884
1885.opensource-section {
1886  padding: var(--spacing-2xl) 0;
1887  border-top: 1px solid var(--color-mist);
1888  text-align: center;
1889}
1890
1891.opensource-content {
1892  max-width: 500px;
1893  margin: 0 auto;
1894  display: flex;
1895  flex-direction: column;
1896  align-items: center;
1897  gap: var(--spacing-md);
1898}
1899
1900.opensource-title {
1901  font-size: clamp(1.5rem, 4vw, 2rem);
1902  font-weight: 300;
1903}
1904
1905.opensource-desc {
1906  font-size: 1.125rem;
1907  color: var(--color-ash);
1908  line-height: 1.6;
1909}
1910
1911/* ============================================
1912   FOOTER
1913   ============================================ */
1914
1915.site-footer {
1916  border-top: 1px solid var(--color-mist);
1917  padding: var(--spacing-xl) var(--spacing-lg);
1918  background: var(--color-cream);
1919}
1920
1921/* Single horizontal row: wordmark left, nav centered, credit right.
1922   Three groups, no two-tier split, no dividers. */
1923.footer-row {
1924  max-width: var(--width-max);
1925  margin: 0 auto;
1926  display: grid;
1927  grid-template-columns: auto 1fr auto;
1928  align-items: center;
1929  gap: var(--spacing-xl);
1930}
1931
1932.footer-logo {
1933  font-family: var(--font-display);
1934  font-size: 1.25rem;
1935  font-weight: 400;
1936  color: var(--color-ink);
1937  text-decoration: none;
1938}
1939
1940.footer-links {
1941  display: flex;
1942  justify-content: center;
1943  gap: var(--spacing-lg);
1944  flex-wrap: wrap;
1945}
1946
1947.footer-links a {
1948  font-size: 0.875rem;
1949  color: var(--color-ash);
1950  text-decoration: none;
1951  transition: color var(--duration-fast) var(--ease-out);
1952}
1953
1954.footer-links a:hover {
1955  color: var(--color-accent);
1956}
1957
1958.footer-credit {
1959  display: flex;
1960  align-items: center;
1961  gap: var(--spacing-sm);
1962  font-size: 0.875rem;
1963  color: var(--color-ash);
1964  white-space: nowrap;
1965}
1966
1967.footer-credit a {
1968  color: var(--color-text);
1969  text-decoration: none;
1970  transition: color var(--duration-fast) var(--ease-out);
1971}
1972
1973.footer-credit a:hover {
1974  color: var(--color-accent);
1975}
1976
1977.footer-social-link {
1978  display: inline-flex;
1979  align-items: center;
1980  justify-content: center;
1981  padding: 4px;
1982  color: var(--color-ash);
1983  transition: color var(--duration-fast) var(--ease-out);
1984}
1985
1986.footer-social-link:hover {
1987  color: var(--color-accent);
1988}
1989
1990@media (max-width: 900px) {
1991  .footer-row {
1992    grid-template-columns: 1fr;
1993    justify-items: center;
1994    text-align: center;
1995    gap: var(--spacing-md);
1996  }
1997
1998  .footer-links {
1999    justify-content: center;
2000    gap: var(--spacing-sm) var(--spacing-md);
2001    font-size: 0.8125rem;
2002  }
2003
2004  .site-footer {
2005    padding: var(--spacing-lg) var(--spacing-md);
2006  }
2007}
2008
2009/* ============================================
2010   BUTTONS
2011   ============================================ */
2012
2013.btn {
2014  display: inline-flex;
2015  align-items: center;
2016  justify-content: center;
2017  gap: var(--spacing-xs);
2018  padding: 1rem 2rem;
2019  font-family: var(--font-body);
2020  font-size: 0.9375rem;
2021  font-weight: 600;
2022  letter-spacing: 0.03em;
2023  border: none;
2024  cursor: pointer;
2025  transition: all var(--duration-base) var(--ease-out);
2026  position: relative;
2027  overflow: hidden;
2028  text-decoration: none;
2029}
2030
2031.btn-primary {
2032  background: var(--color-ink);
2033  color: var(--color-paper);
2034}
2035
2036.btn-primary::before {
2037  content: '';
2038  position: absolute;
2039  inset: 0;
2040  background: var(--color-accent);
2041  transform: translateY(100%);
2042  transition: transform var(--duration-base) var(--ease-out);
2043  z-index: 0;
2044}
2045
2046.btn-primary:hover::before {
2047  transform: translateY(0);
2048}
2049
2050.btn-primary:hover {
2051  color: var(--color-paper);
2052}
2053
2054.btn-primary span,
2055.btn-primary svg {
2056  position: relative;
2057  z-index: 1;
2058}
2059
2060/* For buttons without span wrapper */
2061.btn-primary:not(:has(span)) {
2062  position: relative;
2063  z-index: 1;
2064}
2065
2066.btn-secondary {
2067  background: transparent;
2068  color: var(--color-ink);
2069  border: 1px solid var(--color-ink);
2070}
2071
2072.btn-secondary:hover {
2073  background: var(--color-ink);
2074  color: var(--color-paper);
2075}
2076
2077/* Focus styles for all buttons */
2078.btn:focus-visible {
2079  outline: 2px solid var(--color-accent);
2080  outline-offset: 2px;
2081}
2082
2083.btn-primary:focus-visible {
2084  outline-color: var(--color-paper);
2085  box-shadow: 0 0 0 4px var(--color-accent);
2086}
2087
2088.btn-secondary:focus-visible {
2089  outline-color: var(--color-accent);
2090}
2091
2092/* ============================================
2093   ANIMATIONS
2094   ============================================ */
2095
2096@keyframes revealUp {
2097  to {
2098    opacity: 1;
2099    transform: translateY(0);
2100  }
2101}
2102
2103@keyframes fadeIn {
2104  to {
2105    opacity: 1;
2106  }
2107}
2108
2109@keyframes float {
2110  0%, 100% { transform: translateX(-50%) translateY(0); }
2111  50% { transform: translateX(-50%) translateY(-8px); }
2112}
2113
2114@keyframes bounce {
2115  0%, 100% { transform: translateY(0); }
2116  50% { transform: translateY(4px); }
2117}
2118
2119/* Reveal animation for scroll */
2120[data-reveal] {
2121  opacity: 0;
2122  transform: translateY(30px);
2123  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
2124}
2125
2126[data-reveal].revealed {
2127  opacity: 1;
2128  transform: translateY(0);
2129}
2130
2131/* Staggered reveals */
2132[data-reveal]:nth-child(1) { transition-delay: 0s; }
2133[data-reveal]:nth-child(2) { transition-delay: 0.1s; }
2134[data-reveal]:nth-child(3) { transition-delay: 0.2s; }
2135[data-reveal]:nth-child(4) { transition-delay: 0.3s; }
2136
2137/* ============================================
2138   REDUCED MOTION (Accessibility)
2139   ============================================ */
2140
2141@media (prefers-reduced-motion: reduce) {
2142  *,
2143  *::before,
2144  *::after {
2145    animation-duration: 0.01ms !important;
2146    animation-iteration-count: 1 !important;
2147    transition-duration: 0.01ms !important;
2148    scroll-behavior: auto !important;
2149  }
2150
2151  /* Allow smooth scrolling to remain for anchor links only if user explicitly triggers */
2152  html {
2153    scroll-behavior: auto;
2154  }
2155
2156  /* Disable hero canvas animation */
2157  .hero-canvas {
2158    display: none;
2159  }
2160
2161  /* Disable scroll indicator animation */
2162  .hero-scroll-indicator {
2163    animation: none;
2164    opacity: 1;
2165  }
2166
2167  /* Disable reveal animations - show content immediately */
2168  [data-reveal] {
2169    opacity: 1;
2170    transform: none;
2171  }
2172
2173  /* Disable gallery frame transitions */
2174  .gallery-frame {
2175    opacity: 1;
2176    transform: none;
2177  }
2178}
2179
2180/* ============================================
2181   ERROR STATES
2182   ============================================ */
2183
2184.load-error {
2185  display: flex;
2186  flex-direction: column;
2187  align-items: center;
2188  justify-content: center;
2189  text-align: center;
2190  padding: var(--spacing-2xl) var(--spacing-lg);
2191  gap: var(--spacing-md);
2192  background: var(--color-cream);
2193  border: 1px solid var(--color-mist);
2194  border-radius: 8px;
2195}
2196
2197.load-error-icon {
2198  font-size: 2.5rem;
2199  color: var(--color-accent);
2200}
2201
2202.load-error-title {
2203  font-family: var(--font-display);
2204  font-size: 1.5rem;
2205  font-weight: 400;
2206  color: var(--color-ink);
2207  margin: 0;
2208}
2209
2210.load-error-text {
2211  font-size: 1rem;
2212  color: var(--color-ash);
2213  max-width: 40ch;
2214  line-height: 1.5;
2215}
2216
2217.load-error-retry {
2218  margin-top: var(--spacing-sm);
2219}
2220
2221/* ============================================
2222   BIAS TAGS (Compact Problem Section)
2223   ============================================ */
2224
2225.bias-tags {
2226  display: flex;
2227  flex-direction: column;
2228  align-items: center;
2229  gap: var(--spacing-sm);
2230  margin-top: var(--spacing-lg);
2231}
2232
2233.bias-tags-label {
2234  font-family: var(--font-mono);
2235  font-size: 0.6875rem;
2236  font-weight: 500;
2237  letter-spacing: 0.1em;
2238  text-transform: uppercase;
2239  color: var(--color-ash);
2240}
2241
2242.bias-tags-list {
2243  display: flex;
2244  flex-wrap: wrap;
2245  justify-content: center;
2246  gap: var(--spacing-xs);
2247}
2248
2249.bias-tag {
2250  font-size: 0.75rem;
2251  font-weight: 500;
2252  padding: 6px 12px;
2253  background: var(--color-cream);
2254  border: 1px solid var(--color-mist);
2255  color: var(--color-charcoal);
2256  transition: all var(--duration-fast) var(--ease-out);
2257}
2258
2259.bias-tag:hover {
2260  border-color: var(--color-accent);
2261  color: var(--color-accent);
2262}
2263
2264/* ============================================
2265   ANTIDOTE SECTION
2266   ============================================ */
2267
2268.antidote-section {
2269  padding: var(--spacing-2xl) 0;
2270  border-top: 1px solid var(--color-mist);
2271}
2272
2273/* Antidote row: patterns + gallery side by side */
2274.antidote-row {
2275  display: flex;
2276  gap: var(--spacing-xl);
2277  align-items: stretch;
2278  margin-bottom: var(--spacing-xl);
2279}
2280
2281.antidote-row .patterns-tabbed {
2282  flex: 1;
2283  min-width: 0;
2284  margin-bottom: 0;
2285}
2286
2287/* Gallery of Shame — 3D card stack */
2288.gallery-stack-container {
2289  flex: 0 0 clamp(320px, 34vw, 420px);
2290  display: flex;
2291  flex-direction: column;
2292  gap: var(--spacing-xs);
2293  position: relative;
2294}
2295
2296
2297/* Header: ← Gallery of Shame → */
2298.gallery-stack-header {
2299  display: flex;
2300  align-items: center;
2301  gap: var(--spacing-xs);
2302  white-space: nowrap;
2303}
2304
2305.gallery-stack-title {
2306  font-family: var(--font-display);
2307  font-size: 1rem;
2308  font-weight: 600;
2309  color: var(--color-ink);
2310  flex: 1;
2311}
2312
2313.gallery-stack-btn {
2314  width: 24px;
2315  height: 24px;
2316  border-radius: 50%;
2317  border: 1px solid var(--color-mist);
2318  background: white;
2319  cursor: pointer;
2320  display: flex;
2321  align-items: center;
2322  justify-content: center;
2323  font-size: 0.6875rem;
2324  color: var(--color-charcoal);
2325  flex-shrink: 0;
2326  transition: border-color var(--duration-fast), background var(--duration-fast);
2327  position: relative;
2328}
2329
2330/* Invisible 44px touch target */
2331.gallery-stack-btn::after {
2332  content: '';
2333  position: absolute;
2334  inset: -10px;
2335}
2336
2337.gallery-stack-btn:hover {
2338  border-color: var(--color-charcoal);
2339}
2340
2341/* Card stack — stacked deck offset to bottom-right */
2342.gallery-stack {
2343  position: relative;
2344  width: calc(100% - 20px);
2345  aspect-ratio: 3 / 2;
2346  margin-bottom: 20px;
2347}
2348
2349.gallery-stack-card {
2350  position: absolute;
2351  top: 0;
2352  left: 0;
2353  width: 100%;
2354  height: 100%;
2355  display: flex;
2356  flex-direction: column;
2357  border-radius: 8px;
2358  overflow: hidden;
2359  border: 1px solid var(--color-mist);
2360  text-decoration: none;
2361  background: white;
2362  transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.35s ease, box-shadow 0.35s ease;
2363  will-change: transform, opacity;
2364}
2365
2366.gallery-stack-card img {
2367  flex: 1;
2368  min-height: 0;
2369  width: 100%;
2370  object-fit: cover;
2371  object-position: top left;
2372}
2373
2374.gallery-stack-label {
2375  padding: 6px 10px;
2376  font-size: 0.75rem;
2377  font-weight: 600;
2378  color: var(--color-charcoal);
2379  flex-shrink: 0;
2380}
2381
2382/* Stack depth: cards peek behind at bottom-right */
2383.gallery-stack-card[data-offset="0"] {
2384  z-index: 3;
2385  transform: translate(0, 0);
2386  opacity: 1;
2387  box-shadow: 0 2px 12px oklch(0.2 0 0 / 0.1);
2388}
2389
2390.gallery-stack-card[data-offset="1"] {
2391  z-index: 2;
2392  transform: translate(8px, 8px);
2393  opacity: 1;
2394  box-shadow: 0 1px 6px oklch(0.2 0 0 / 0.08);
2395  pointer-events: none;
2396}
2397
2398.gallery-stack-card[data-offset="2"] {
2399  z-index: 1;
2400  transform: translate(16px, 16px);
2401  opacity: 1;
2402  box-shadow: 0 1px 4px oklch(0.2 0 0 / 0.06);
2403  pointer-events: none;
2404}
2405
2406.gallery-stack-card:not([data-offset="0"]):not([data-offset="1"]):not([data-offset="2"]) {
2407  z-index: 0;
2408  transform: translate(20px, 20px);
2409  opacity: 0;
2410  pointer-events: none;
2411}
2412
2413.gallery-stack-link {
2414  font-size: 0.75rem;
2415  font-weight: 500;
2416  color: var(--color-accent);
2417  text-decoration: none;
2418  text-align: center;
2419}
2420
2421.gallery-stack-link:hover {
2422  text-decoration: underline;
2423}
2424
2425@media (max-width: 900px) {
2426  .antidote-row {
2427    flex-direction: column;
2428  }
2429
2430  .gallery-stack-container {
2431    flex: none;
2432    width: 100%;
2433    max-width: 360px;
2434  }
2435
2436}
2437
2438/* ---- Pattern tabs ---- */
2439.patterns-tabbed {
2440  margin-bottom: var(--spacing-xl);
2441  background: white;
2442  border-radius: 8px;
2443  padding: var(--spacing-lg);
2444}
2445
2446.patterns-tabs-wrap {
2447  position: relative;
2448  margin-bottom: var(--spacing-md);
2449}
2450
2451.patterns-tabs {
2452  display: flex;
2453  flex-wrap: nowrap;
2454  gap: 6px;
2455  overflow-x: auto;
2456  scrollbar-width: none;
2457  -webkit-overflow-scrolling: touch;
2458  scroll-snap-type: x proximity;
2459}
2460
2461.patterns-tabs::-webkit-scrollbar {
2462  display: none;
2463}
2464
2465/* Edge fade only on sides where more content exists. data-scroll is set
2466   by JS: start | middle | end | none. */
2467.patterns-tabs[data-scroll="start"] {
2468  mask-image: linear-gradient(to right, black calc(100% - 40px), transparent);
2469  -webkit-mask-image: linear-gradient(to right, black calc(100% - 40px), transparent);
2470}
2471.patterns-tabs[data-scroll="middle"] {
2472  mask-image: linear-gradient(to right, transparent, black 32px, black calc(100% - 40px), transparent);
2473  -webkit-mask-image: linear-gradient(to right, transparent, black 32px, black calc(100% - 40px), transparent);
2474}
2475.patterns-tabs[data-scroll="end"] {
2476  mask-image: linear-gradient(to right, transparent, black 32px);
2477  -webkit-mask-image: linear-gradient(to right, transparent, black 32px);
2478}
2479.patterns-tabs[data-scroll="none"] {
2480  mask-image: none;
2481  -webkit-mask-image: none;
2482}
2483
2484/* Chevrons sit on the wrapper (outside the mask) so they're always fully
2485   opaque, regardless of edge fade. Visible only when scroll can progress
2486   in that direction. */
2487.patterns-tabs-wrap::before,
2488.patterns-tabs-wrap::after {
2489  content: '';
2490  position: absolute;
2491  top: 50%;
2492  width: 9px;
2493  height: 9px;
2494  border-top: 1.5px solid var(--color-ash);
2495  border-right: 1.5px solid var(--color-ash);
2496  pointer-events: none;
2497  opacity: 0;
2498  transition: opacity 0.18s ease;
2499}
2500.patterns-tabs-wrap::before {
2501  left: 2px;
2502  transform: translateY(-50%) rotate(-135deg);
2503}
2504.patterns-tabs-wrap::after {
2505  right: 2px;
2506  transform: translateY(-50%) rotate(45deg);
2507}
2508.patterns-tabs-wrap[data-scroll="start"]::after,
2509.patterns-tabs-wrap[data-scroll="middle"]::after { opacity: 1; }
2510.patterns-tabs-wrap[data-scroll="end"]::before,
2511.patterns-tabs-wrap[data-scroll="middle"]::before { opacity: 1; }
2512
2513.patterns-tab {
2514  scroll-snap-align: start;
2515  flex-shrink: 0;
2516}
2517
2518.patterns-tab {
2519  font-family: var(--font-body);
2520  font-size: 0.75rem;
2521  font-weight: 500;
2522  color: var(--color-charcoal);
2523  background: none;
2524  border: none;
2525  border-radius: 100px;
2526  padding: 6px 12px;
2527  cursor: pointer;
2528  white-space: nowrap;
2529  transition: background 0.2s ease, color 0.2s ease;
2530}
2531
2532.patterns-tab:hover {
2533  background: var(--color-mist);
2534}
2535
2536.patterns-tab.is-active {
2537  background: var(--color-ink);
2538  color: var(--color-paper);
2539}
2540
2541.patterns-content {
2542  display: none;
2543}
2544
2545.patterns-content.is-active {
2546  display: flex;
2547  flex-direction: column;
2548  gap: var(--spacing-md);
2549}
2550
2551.patterns-col ul {
2552  list-style: none;
2553  padding: 0;
2554  margin: 0;
2555  display: flex;
2556  flex-direction: column;
2557  gap: 6px;
2558}
2559
2560.patterns-col li {
2561  font-size: 0.8125rem;
2562  line-height: 1.55;
2563  padding-left: var(--spacing-sm);
2564  position: relative;
2565  color: var(--color-charcoal);
2566  overflow-wrap: break-word;
2567  word-break: break-word;
2568}
2569
2570.patterns-col--dont li::before {
2571  content: '\00d7';
2572  position: absolute;
2573  left: 0;
2574  color: var(--color-accent);
2575  font-weight: 600;
2576}
2577
2578.patterns-col--do li::before {
2579  content: '\2713';
2580  position: absolute;
2581  left: 0;
2582  color: var(--color-success, #22c55e);
2583  font-weight: 600;
2584}
2585
2586
2587/* Detection callout — flat editorial CTA, no card chrome.
2588   Image thumbnail on the left, NEW eyebrow + CTA stacked on the right.
2589   The whole element is a clickable anchor. Hover shifts color, no
2590   transform or shadow theatrics. */
2591.detection-callout {
2592  display: flex;
2593  align-items: center;
2594  gap: var(--spacing-md);
2595  text-decoration: none;
2596  color: inherit;
2597  padding: var(--spacing-sm) 0;
2598  border-top: 1px solid var(--color-mist);
2599}
2600
2601.detection-callout-image {
2602  display: block;
2603  width: 132px;
2604  height: 112px;
2605  flex-shrink: 0;
2606  object-fit: cover;
2607  object-position: top left;
2608  border: 1px solid var(--color-mist);
2609  border-radius: 6px;
2610  transition: border-color 0.2s ease;
2611}
2612
2613.detection-callout:hover .detection-callout-image {
2614  border-color: var(--color-accent);
2615}
2616
2617.detection-callout-inner {
2618  flex: 1;
2619  display: flex;
2620  flex-direction: column;
2621  align-items: flex-start;
2622  justify-content: center;
2623  gap: 6px;
2624}
2625
2626.detection-eyebrow {
2627  font-family: var(--font-mono);
2628  font-size: 0.6875rem;
2629  font-weight: 600;
2630  text-transform: uppercase;
2631  letter-spacing: 0.08em;
2632  color: var(--color-accent);
2633}
2634
2635.detection-callout-title {
2636  font-family: var(--font-display);
2637  font-size: 1.25rem;
2638  font-weight: 600;
2639  color: var(--color-ink);
2640  letter-spacing: -0.01em;
2641  line-height: 1.15;
2642}
2643
2644.detection-callout:hover .detection-callout-title {
2645  color: var(--color-accent);
2646}
2647
2648.detection-desc {
2649  flex: 1;
2650  font-size: 0.8125rem;
2651  line-height: 1.55;
2652  color: var(--color-ash);
2653  min-width: 200px;
2654}
2655
2656.detection-desc code {
2657  font-family: var(--font-mono);
2658  font-size: 0.8125rem;
2659  color: var(--color-charcoal);
2660}
2661
2662.detection-cmd {
2663  flex-shrink: 0;
2664  font-family: var(--font-body);
2665  font-size: 0.875rem;
2666  font-weight: 600;
2667  color: var(--color-ink);
2668  white-space: nowrap;
2669  transition: color 0.15s ease;
2670}
2671
2672.detection-callout:hover .detection-cmd {
2673  color: var(--color-accent);
2674}
2675
2676/* Antidote footer */
2677.antidote-footer {
2678  text-align: center;
2679}
2680
2681.antidote-suggest-link {
2682  font-size: 0.8125rem;
2683  color: var(--color-ash);
2684  text-decoration: none;
2685}
2686
2687.antidote-suggest-link:hover {
2688  color: var(--color-accent);
2689  text-decoration: underline;
2690}
2691
2692/* ============================================
2693   SOLUTION SECTION ENHANCEMENTS
2694   ============================================ */
2695
2696/* Main skill item styling */
2697.pillar-item--main {
2698  background: var(--color-accent-dim);
2699  border: 1px solid var(--color-accent);
2700}
2701
2702.pillar-item--main .pillar-item-name {
2703  font-size: 1.125rem;
2704  font-weight: 600;
2705  color: var(--color-accent);
2706}
2707
2708.pillar-item--ref {
2709  background: transparent;
2710  padding: var(--spacing-xs) var(--spacing-sm);
2711}
2712
2713.pillar-item-label {
2714  font-size: 0.75rem;
2715  font-weight: 500;
2716  text-transform: uppercase;
2717  letter-spacing: 0.05em;
2718  color: var(--color-ash);
2719}
2720
2721/* Reference domain tags */
2722.pillar-refs {
2723  display: flex;
2724  flex-wrap: wrap;
2725  gap: var(--spacing-xs);
2726  padding: 0 var(--spacing-sm);
2727}
2728
2729.pillar-ref {
2730  font-size: 0.6875rem;
2731  font-weight: 500;
2732  text-transform: uppercase;
2733  letter-spacing: 0.03em;
2734  padding: 4px 10px;
2735  background: var(--color-paper);
2736  color: var(--color-ash);
2737  border: 1px solid var(--color-mist);
2738  border-radius: 3px;
2739  transition: all var(--duration-fast) var(--ease-out);
2740}
2741
2742.pillar-ref:hover {
2743  border-color: var(--color-accent);
2744  color: var(--color-accent);
2745}
2746
2747/* Command groups */
2748.pillar-command-group {
2749  display: flex;
2750  flex-wrap: wrap;
2751  align-items: center;
2752  gap: var(--spacing-xs);
2753  padding: var(--spacing-sm);
2754  background: var(--color-paper);
2755  border-radius: 4px;
2756}
2757
2758.pillar-group-label {
2759  font-size: 0.6875rem;
2760  font-weight: 600;
2761  text-transform: uppercase;
2762  letter-spacing: 0.05em;
2763  color: var(--color-ash);
2764  width: 100%;
2765  margin-bottom: 4px;
2766}
2767
2768.pillar-command-group .pillar-item-code {
2769  font-size: 0.8125rem;
2770  padding: 4px 8px;
2771  background: var(--color-accent-dim);
2772  border-radius: 3px;
2773}
2774
2775/* ============================================
2776   PLATFORMS SECTION (alias for downloads)
2777   ============================================ */
2778
2779.platforms-section {
2780  padding: var(--spacing-2xl) 0;
2781  border-top: 1px solid var(--color-mist);
2782}
2783
2784@media (min-width: 1100px) {
2785  .platforms-section {
2786    border-top: none;
2787  }
2788}
2789
2790.platforms-section .section-subtitle {
2791  max-width: 60ch;
2792}
2793
2794/* Two-path install layout */
2795/* Row 1: full-width primary install card with internal 2-column split */
2796.install-row-primary {
2797  display: grid;
2798  grid-template-columns: 1fr 1fr;
2799  gap: var(--spacing-xl);
2800  align-items: start;
2801  margin: 0 0 var(--spacing-xl);
2802  background: white;
2803  border-radius: 16px;
2804  padding: var(--spacing-lg);
2805  min-width: 0;
2806}
2807
2808.install-primary-main,
2809.install-primary-howto {
2810  display: flex;
2811  flex-direction: column;
2812  min-width: 0;
2813}
2814
2815.install-primary-howto {
2816  padding-left: var(--spacing-xl);
2817  border-left: 1px solid var(--color-mist);
2818}
2819
2820/* The "Use it" side uses the hero body copy size so both columns feel balanced
2821   in typographic weight, not just pixel width. */
2822.install-primary-howto .install-path-desc {
2823  font-size: 0.9375rem;
2824  line-height: 1.6;
2825  color: var(--color-ink);
2826  max-width: 48ch;
2827}
2828
2829.install-primary-howto .install-path-desc em {
2830  font-family: var(--font-display);
2831  font-style: italic;
2832  font-weight: 500;
2833  color: var(--color-accent);
2834}
2835
2836.install-primary-alts {
2837  min-width: 0;
2838}
2839
2840/* "Other install methods" is a collapsed <details> panel that sits
2841   directly under the main install card. The alternatives are worth
2842   keeping discoverable but don't need to be visible by default. */
2843.install-primary-main > .install-primary-alts {
2844  margin-top: var(--spacing-lg);
2845  padding-top: var(--spacing-md);
2846  border-top: 1px solid var(--color-mist);
2847}
2848
2849.install-primary-alts[open] > .install-alts-summary > .install-alts-arrow {
2850  transform: rotate(90deg);
2851}
2852
2853.install-alts-summary {
2854  display: flex;
2855  align-items: center;
2856  gap: var(--spacing-xs);
2857  list-style: none;
2858  cursor: pointer;
2859  padding: 2px 0;
2860}
2861
2862.install-alts-summary::-webkit-details-marker {
2863  display: none;
2864}
2865
2866.install-alts-arrow {
2867  color: var(--color-ash);
2868  transition: transform var(--duration-fast) var(--ease-out, ease);
2869}
2870
2871.install-primary-alts[open] > .install-alts-summary {
2872  margin-bottom: var(--spacing-md);
2873}
2874
2875.install-primary-alts[open] > .install-alt-method + .install-alt-method {
2876  margin-top: var(--spacing-lg);
2877}
2878
2879/* Editorial "How to use" step list on the right side of the install row.
2880   Uses display-font numerals as prominent visual anchors, generous vertical
2881   rhythm, and body text at the same scale as the hero copy for hierarchy
2882   parity with the rest of the page. */
2883.install-howto-steps {
2884  list-style: none;
2885  counter-reset: howto-step;
2886  padding: 0;
2887  margin: var(--spacing-lg) 0 0;
2888  display: flex;
2889  flex-direction: column;
2890  gap: var(--spacing-lg);
2891}
2892
2893.install-howto-steps > li {
2894  counter-increment: howto-step;
2895  position: relative;
2896  padding-left: 3rem;
2897  min-height: 2.5rem;
2898}
2899
2900.install-howto-steps > li::before {
2901  content: counter(howto-step, decimal-leading-zero);
2902  position: absolute;
2903  left: 0;
2904  top: -0.1em;
2905  font-family: var(--font-display);
2906  font-size: 1.75rem;
2907  font-weight: 400;
2908  font-style: italic;
2909  color: var(--color-accent);
2910  line-height: 1;
2911  letter-spacing: -0.02em;
2912}
2913
2914.install-howto-step-label {
2915  font-family: var(--font-body);
2916  font-size: 1rem;
2917  font-weight: 600;
2918  color: var(--color-ink);
2919  margin-bottom: 0.35rem;
2920  line-height: 1.3;
2921  letter-spacing: -0.005em;
2922}
2923
2924.install-howto-steps > li p {
2925  margin: 0;
2926  font-size: 0.9375rem;
2927  color: var(--color-ink);
2928  line-height: 1.6;
2929}
2930
2931.install-howto-steps code {
2932  font-family: var(--font-mono);
2933  font-size: 0.8125rem;
2934  font-weight: 500;
2935  color: var(--color-ink);
2936  background: var(--color-accent-dim);
2937  padding: 1px 6px;
2938  border-radius: 3px;
2939  white-space: nowrap;
2940}
2941
2942.install-howto-steps .install-path-slash {
2943  color: var(--color-accent);
2944}
2945
2946/* Compact 3-row "try it" table. Replaces the numbered sub-steps
2947   inside step 2 to condense vertical height. Each row: mono command
2948   example + one-line caption. Collapses to stacked on narrow screens. */
2949.install-howto-rows {
2950  margin: var(--spacing-lg) 0 0;
2951  padding: 0;
2952  display: flex;
2953  flex-direction: column;
2954}
2955
2956.install-howto-row {
2957  display: grid;
2958  grid-template-columns: minmax(0, 0.42fr) minmax(0, 0.58fr);
2959  gap: var(--spacing-md);
2960  align-items: baseline;
2961  padding: var(--spacing-sm) 0;
2962  border-bottom: 1px solid var(--color-mist);
2963}
2964
2965.install-howto-row:first-child {
2966  padding-top: 0;
2967}
2968
2969.install-howto-row:last-child {
2970  padding-bottom: 0;
2971  border-bottom: 0;
2972}
2973
2974.install-howto-row dt {
2975  margin: 0;
2976  min-width: 0;
2977}
2978
2979.install-howto-row dt code {
2980  font-family: var(--font-mono);
2981  font-size: 0.8125rem;
2982  font-weight: 500;
2983  color: var(--color-ink);
2984  background: var(--color-accent-dim);
2985  padding: 3px 8px;
2986  border-radius: 3px;
2987  white-space: nowrap;
2988}
2989
2990.install-howto-row dd {
2991  margin: 0;
2992  font-size: 0.9375rem;
2993  line-height: 1.55;
2994  color: var(--color-ink);
2995}
2996
2997.install-howto-row dd code {
2998  font-family: var(--font-mono);
2999  font-size: 0.8125em;
3000  background: var(--color-mist);
3001  padding: 1px 5px;
3002  border-radius: 3px;
3003  color: var(--color-ink);
3004  white-space: nowrap;
3005}
3006
3007.install-howto-row .install-path-slash {
3008  color: var(--color-accent);
3009}
3010
3011@media (max-width: 700px) {
3012  .install-howto-row {
3013    grid-template-columns: 1fr;
3014    gap: 6px;
3015  }
3016}
3017
3018.install-howto-footer {
3019  display: flex;
3020  flex-wrap: wrap;
3021  gap: var(--spacing-lg);
3022  margin-top: var(--spacing-xl);
3023  padding-top: var(--spacing-lg);
3024  border-top: 1px solid var(--color-mist);
3025}
3026
3027.install-howto-link {
3028  font-family: var(--font-body);
3029  font-size: 0.875rem;
3030  font-weight: 500;
3031  color: var(--color-accent);
3032  text-decoration: none;
3033  display: inline-flex;
3034  align-items: baseline;
3035  gap: 0.35em;
3036  transition: gap 0.2s var(--ease-out-quart, ease);
3037}
3038
3039.install-howto-link:hover {
3040  gap: 0.6em;
3041}
3042
3043.install-howto-link span {
3044  display: inline-block;
3045  transition: transform 0.2s var(--ease-out-quart, ease);
3046}
3047
3048.install-howto-link:hover span {
3049  transform: translateX(2px);
3050}
3051
3052/* Two-tool grid inside the "Anti-pattern tools" step. */
3053.install-tool-grid {
3054  display: grid;
3055  grid-template-columns: 1fr 1fr;
3056  gap: var(--spacing-lg);
3057  margin-top: var(--spacing-md);
3058}
3059
3060.install-tool {
3061  display: flex;
3062  flex-direction: column;
3063  gap: var(--spacing-sm);
3064  min-width: 0;
3065}
3066
3067/* Solo install-tool (no grid wrapper) — used when step 3 is Chrome-only.
3068   The preview screenshot sits to the left of the CTA button so neither
3069   dominates vertical space. Collapses to a stack on narrow screens. */
3070.install-tool--solo {
3071  flex-direction: row;
3072  align-items: center;
3073  gap: var(--spacing-lg);
3074  margin-top: var(--spacing-md);
3075  width: 100%;
3076}
3077
3078.install-tool--solo .install-tool-preview {
3079  flex: 0 1 260px;
3080  min-width: 0;
3081  margin-top: 0;
3082}
3083
3084.install-tool--solo .install-tool-cta {
3085  flex: 1 1 auto;
3086  margin-top: 0;
3087  width: auto;
3088  white-space: nowrap;
3089}
3090
3091@media (max-width: 640px) {
3092  .install-tool--solo {
3093    flex-direction: column;
3094    align-items: stretch;
3095  }
3096
3097  .install-tool--solo .install-tool-preview,
3098  .install-tool--solo .install-tool-cta {
3099    flex: 1 1 auto;
3100  }
3101}
3102
3103.install-tool-label {
3104  font-family: var(--font-body);
3105  font-size: 0.9375rem;
3106  font-weight: 600;
3107  color: var(--color-ink);
3108  display: flex;
3109  align-items: center;
3110  gap: 0.4rem;
3111}
3112
3113.install-tool-desc {
3114  margin: 0;
3115  font-size: 0.8125rem;
3116  color: var(--color-ink);
3117  line-height: 1.55;
3118}
3119
3120/* Chrome extension screenshot preview inside the install-tool column */
3121.install-tool-preview {
3122  display: block;
3123  margin-top: var(--spacing-sm);
3124  border: 1px solid var(--color-mist);
3125  border-radius: 8px;
3126  overflow: hidden;
3127  text-decoration: none;
3128  background: var(--color-paper);
3129  transition: border-color var(--duration-fast) var(--ease-out, ease),
3130              transform var(--duration-fast) var(--ease-out, ease);
3131}
3132
3133.install-tool-preview:hover {
3134  border-color: var(--color-accent);
3135  transform: translateY(-1px);
3136}
3137
3138.install-tool-preview img {
3139  display: block;
3140  width: 100%;
3141  height: auto;
3142}
3143
3144.install-tool-preview-caption {
3145  display: block;
3146  padding: 0.4rem 0.75rem;
3147  font-family: var(--font-body);
3148  font-size: 0.75rem;
3149  color: var(--color-ash);
3150  border-top: 1px solid var(--color-mist);
3151}
3152
3153/* "Install from Chrome Web Store" uses the standard .btn .btn-primary
3154   styles; this modifier only adds layout (full width + top spacing). */
3155.install-tool-cta {
3156  margin-top: var(--spacing-sm);
3157  width: 100%;
3158}
3159
3160.install-alts-label {
3161  display: block;
3162  font-family: var(--font-mono);
3163  font-size: 0.625rem;
3164  font-weight: 600;
3165  text-transform: uppercase;
3166  letter-spacing: 0.14em;
3167  color: var(--color-ash);
3168}
3169
3170.install-alt-sublabel {
3171  font-family: var(--font-body);
3172  font-size: 0.75rem;
3173  font-weight: 400;
3174  color: var(--color-ash);
3175  text-transform: none;
3176  letter-spacing: 0;
3177  margin-left: 4px;
3178}
3179
3180/* Compact zip download links — replaces the old big black download button.
3181   Two equal-weight options stacked vertically, each is its own affordance. */
3182.install-zip-links {
3183  display: flex;
3184  flex-direction: column;
3185  gap: 6px;
3186  margin-top: var(--spacing-xs);
3187}
3188
3189.install-zip-link {
3190  display: flex;
3191  align-items: center;
3192  gap: var(--spacing-sm);
3193  padding: 8px 12px;
3194  font-family: var(--font-body);
3195  font-size: 0.8125rem;
3196  color: var(--color-charcoal);
3197  background: transparent;
3198  border: 1px solid var(--color-mist);
3199  border-radius: 6px;
3200  cursor: pointer;
3201  text-align: left;
3202  transition: border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
3203}
3204
3205.install-zip-link:hover {
3206  border-color: var(--color-accent);
3207  color: var(--color-accent);
3208}
3209
3210.install-zip-link svg {
3211  flex-shrink: 0;
3212  color: var(--color-ash);
3213}
3214
3215.install-zip-link:hover svg {
3216  color: var(--color-accent);
3217}
3218
3219.install-zip-link-name {
3220  font-weight: 600;
3221  color: var(--color-ink);
3222  white-space: nowrap;
3223}
3224
3225.install-zip-link:hover .install-zip-link-name {
3226  color: var(--color-accent);
3227}
3228
3229.install-zip-link-examples {
3230  display: flex;
3231  flex-wrap: nowrap;
3232  gap: 4px;
3233  margin-left: auto;
3234}
3235
3236.install-alt-method .install-zip-link-examples code {
3237  font-family: var(--font-mono);
3238  font-size: 0.6875rem;
3239  background: var(--color-accent-dim);
3240  color: var(--color-accent);
3241  padding: 2px 6px;
3242  border-radius: 3px;
3243  white-space: nowrap;
3244}
3245
3246.install-path {
3247  display: flex;
3248  flex-direction: column;
3249  min-width: 0;
3250}
3251
3252.install-path-primary {
3253  background: white;
3254  border-radius: 16px;
3255  padding: var(--spacing-lg);
3256}
3257
3258/* Steps 2-4: vertical accordion. Native <details name="install-steps">
3259   gives mutual exclusion (opening one closes the others). Items are
3260   separated by hairlines, not card chrome. */
3261.install-accordion {
3262  display: flex;
3263  flex-direction: column;
3264  margin: 0 0 var(--spacing-xl);
3265}
3266
3267.install-step {
3268  border-top: 1px solid var(--color-mist);
3269}
3270
3271.install-step:last-child {
3272  border-bottom: 1px solid var(--color-mist);
3273}
3274
3275.install-step-summary {
3276  display: flex;
3277  align-items: center;
3278  gap: var(--spacing-md);
3279  padding: var(--spacing-md) var(--spacing-xs);
3280  cursor: pointer;
3281  list-style: none;
3282  transition: background var(--duration-fast) var(--ease-out);
3283}
3284
3285.install-step-summary::-webkit-details-marker {
3286  display: none;
3287}
3288
3289.install-step-summary:hover {
3290  background: var(--color-cream);
3291}
3292
3293.install-step-summary h3 {
3294  flex: 1;
3295  margin: 0;
3296}
3297
3298.install-step-arrow {
3299  flex-shrink: 0;
3300  color: var(--color-ash);
3301  transition: transform var(--duration-base) var(--ease-out);
3302}
3303
3304.install-step[open] .install-step-arrow {
3305  transform: rotate(90deg);
3306}
3307
3308.install-step-body {
3309  padding: 0 var(--spacing-xs) var(--spacing-md);
3310  display: flex;
3311  flex-direction: column;
3312  max-width: 56ch;
3313}
3314
3315.install-step-body .install-path-desc {
3316  margin-top: 0;
3317}
3318
3319.install-step-status {
3320  font-size: 0.8125rem;
3321  color: var(--color-ash);
3322  margin: 0 0 var(--spacing-sm);
3323  font-style: italic;
3324}
3325
3326.install-path-title {
3327  display: flex;
3328  align-items: center;
3329  flex-wrap: wrap;
3330  gap: 10px;
3331  font-family: var(--font-display);
3332  font-size: 1.5rem;
3333  font-weight: 600;
3334  margin: 0 0 var(--spacing-sm);
3335  line-height: 1.2;
3336}
3337
3338/* titles unified - no size override for step 3 */
3339
3340.install-path-badge {
3341  font-family: var(--font-mono);
3342  font-size: 0.5rem;
3343  font-weight: 600;
3344  text-transform: uppercase;
3345  letter-spacing: 0.08em;
3346  color: var(--color-accent);
3347  border: 1px solid var(--color-accent);
3348  border-radius: 3px;
3349  padding: 2px 6px;
3350  vertical-align: middle;
3351  margin-left: 6px;
3352  position: relative;
3353  top: -2px;
3354}
3355
3356.install-path-badge-muted {
3357  color: var(--color-ash);
3358  border-color: var(--color-mist);
3359}
3360
3361.install-path-desc {
3362  font-size: 0.9375rem;
3363  line-height: 1.6;
3364  color: var(--color-charcoal);
3365  margin: 0 0 var(--spacing-md);
3366}
3367
3368.terminal-header-license {
3369  margin-left: auto;
3370  font-size: 0.6875rem;
3371  color: oklch(65% 0.01 350);
3372  letter-spacing: 0.01em;
3373}
3374
3375.terminal-header-license a {
3376  color: inherit;
3377  text-decoration: underline;
3378  text-decoration-color: oklch(85% 0.005 350);
3379  text-underline-offset: 2px;
3380}
3381
3382.terminal-header-license a:hover {
3383  color: var(--color-charcoal);
3384}
3385
3386/* removed - unified font sizes across columns */
3387
3388.install-path-terminal {
3389  margin-bottom: var(--spacing-sm);
3390}
3391
3392.install-path-terminal .glass-terminal {
3393  height: auto;
3394}
3395
3396.install-path-terminal .terminal-body {
3397  padding: 0;
3398}
3399
3400.install-path-next {
3401  font-size: 0.8125rem;
3402  color: var(--color-charcoal);
3403  line-height: 1.5;
3404  margin-top: auto;
3405  padding-top: var(--spacing-md);
3406}
3407
3408.install-path-next code {
3409  font-family: var(--font-mono);
3410  font-size: 0.8125rem;
3411  font-weight: 600;
3412  color: var(--color-ink);
3413}
3414
3415.install-path-slash {
3416  color: var(--color-accent);
3417}
3418
3419
3420.install-path-subcommands {
3421  display: flex;
3422  flex-direction: column;
3423  gap: 6px;
3424  margin-top: var(--spacing-sm);
3425}
3426
3427.install-path-subcommand {
3428  font-size: 0.75rem;
3429  color: var(--color-charcoal);
3430  line-height: 1.4;
3431}
3432
3433.install-path-subcommand code {
3434  font-family: var(--font-mono);
3435  font-size: 0.6875rem;
3436  font-weight: 600;
3437  color: var(--color-ink);
3438  background: var(--color-mist);
3439  padding: 2px 6px;
3440  border-radius: 3px;
3441  margin-right: 4px;
3442}
3443
3444.install-path-link {
3445  margin-top: auto;
3446  padding-top: var(--spacing-md);
3447  font-size: 0.8125rem;
3448}
3449
3450.install-path-link a {
3451  color: var(--color-accent);
3452  text-decoration: none;
3453}
3454
3455.install-path-link a:hover {
3456  text-decoration: underline;
3457}
3458
3459/* Lightweight terminal block — used in row 2 (CLI) where the heavy
3460   skeuomorphic glass-terminal would be visually too much. Just a thin
3461   bordered code line with a copy button and an optional note below. */
3462.install-cmd-block {
3463  display: flex;
3464  flex-direction: column;
3465  gap: var(--spacing-xs);
3466  margin-bottom: var(--spacing-sm);
3467}
3468
3469.install-cmd-line {
3470  display: flex;
3471  align-items: center;
3472  gap: var(--spacing-sm);
3473  padding: 10px 14px;
3474  background: var(--color-cream);
3475  border: 1px solid var(--color-mist);
3476  border-radius: 6px;
3477  min-width: 0;
3478}
3479
3480.install-cmd-line .terminal-prompt {
3481  flex-shrink: 0;
3482  color: var(--color-accent);
3483  font-family: var(--font-mono);
3484  font-size: 0.8125rem;
3485}
3486
3487.install-cmd-line code {
3488  flex: 1;
3489  font-family: var(--font-mono);
3490  font-size: 0.8125rem;
3491  color: var(--color-ink);
3492  background: transparent;
3493  padding: 0;
3494  white-space: nowrap;
3495  overflow: hidden;
3496  text-overflow: ellipsis;
3497}
3498
3499.install-cmd-line .copy-btn {
3500  flex-shrink: 0;
3501}
3502
3503.install-cmd-note {
3504  font-size: 0.75rem;
3505  color: var(--color-ash);
3506  line-height: 1.5;
3507  text-wrap: pretty;
3508}
3509
3510.install-cmd-note code {
3511  font-family: var(--font-mono);
3512  font-size: 0.6875rem;
3513  background: var(--color-mist);
3514  padding: 2px 5px;
3515  border-radius: 3px;
3516  color: var(--color-ink);
3517  white-space: nowrap;
3518}
3519
3520.install-cmd-note a {
3521  white-space: nowrap;
3522}
3523
3524
3525/* Better together callout */
3526.install-together {
3527  max-width: 960px;
3528  margin: 0 0 var(--spacing-xl);
3529  border: 1px solid var(--color-mist);
3530  border-radius: 8px;
3531  padding: var(--spacing-sm) var(--spacing-md);
3532}
3533
3534.install-together-inner {
3535  display: flex;
3536  align-items: center;
3537  gap: var(--spacing-md);
3538}
3539
3540.install-together-badge {
3541  font-family: var(--font-mono);
3542  font-size: 0.625rem;
3543  font-weight: 600;
3544  text-transform: uppercase;
3545  letter-spacing: 0.05em;
3546  color: var(--color-accent);
3547  border: 1px solid var(--color-accent);
3548  padding: 2px 10px;
3549  border-radius: 99px;
3550  flex-shrink: 0;
3551  white-space: nowrap;
3552}
3553
3554.install-together-text {
3555  font-size: 0.8125rem;
3556  line-height: 1.55;
3557  color: var(--color-ash);
3558  margin: 0;
3559}
3560
3561/* Inline step numbers — sit to the left of the title text inside each h3.
3562   The h3 uses flex with align-items: center so the step is centered with
3563   the text without needing vertical-align fiddling. Margin/gap is handled
3564   by the parent flex's gap. */
3565.install-path-step {
3566  display: inline-flex;
3567  align-items: center;
3568  justify-content: center;
3569  width: 22px;
3570  height: 22px;
3571  border-radius: 50%;
3572  border: 1.5px solid var(--color-accent);
3573  color: var(--color-accent);
3574  font-family: var(--font-mono);
3575  font-size: 0.625rem;
3576  font-weight: 700;
3577  line-height: 1;
3578  flex-shrink: 0;
3579}
3580
3581/* Stay updated (third column) */
3582.install-updated-subscribe {
3583  display: grid;
3584  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
3585  gap: var(--spacing-sm);
3586  margin-bottom: var(--spacing-md);
3587  align-items: stretch;
3588}
3589
3590.install-updated-substack {
3591  display: block;
3592  width: 100%;
3593  min-width: 0;
3594  height: 130px;
3595  border: 1px solid var(--color-mist);
3596  border-radius: 8px;
3597  background: var(--color-paper);
3598}
3599
3600.install-updated-x {
3601  display: flex;
3602  flex-direction: column;
3603  align-items: flex-start;
3604  justify-content: space-between;
3605  gap: var(--spacing-xs);
3606  height: 130px;
3607  padding: var(--spacing-sm) var(--spacing-md);
3608  border: 1px solid var(--color-mist);
3609  border-radius: 8px;
3610  background: var(--color-paper);
3611  color: var(--color-ink);
3612  text-decoration: none;
3613  transition: border-color var(--duration-fast) var(--ease-out),
3614              background var(--duration-fast) var(--ease-out),
3615              transform var(--duration-fast) var(--ease-out);
3616}
3617
3618.install-updated-x:hover {
3619  border-color: var(--color-ink);
3620  background: var(--color-cream);
3621}
3622
3623.install-updated-x-icon {
3624  color: var(--color-ink);
3625  flex-shrink: 0;
3626}
3627
3628.install-updated-x-label {
3629  font-size: 0.6875rem;
3630  font-weight: 600;
3631  text-transform: uppercase;
3632  letter-spacing: 0.08em;
3633  color: var(--color-ash);
3634  font-family: var(--font-mono);
3635}
3636
3637.install-updated-x-handle {
3638  font-size: 1rem;
3639  font-weight: 600;
3640  color: var(--color-ink);
3641  letter-spacing: -0.01em;
3642}
3643
3644.install-updated-x:hover .install-updated-x-handle {
3645  color: var(--color-accent);
3646}
3647
3648.install-updated-refs {
3649  margin-top: auto;
3650  padding-top: var(--spacing-md);
3651  border-top: 1px solid var(--color-mist);
3652}
3653
3654.install-updated-refs-label {
3655  display: block;
3656  font-family: var(--font-mono);
3657  font-size: 0.5625rem;
3658  font-weight: 600;
3659  text-transform: uppercase;
3660  letter-spacing: 0.1em;
3661  color: var(--color-ash);
3662  margin-bottom: 8px;
3663}
3664
3665.install-updated-ref {
3666  display: block;
3667  font-size: 0.8125rem;
3668  color: var(--color-charcoal);
3669  text-decoration: none;
3670  margin-bottom: 6px;
3671  transition: color var(--duration-fast) var(--ease-out);
3672}
3673
3674a.install-updated-ref:hover {
3675  color: var(--color-accent);
3676}
3677
3678.install-updated-ref-terminal {
3679  display: flex;
3680  align-items: center;
3681  gap: var(--spacing-xs);
3682  font-family: var(--font-mono);
3683  font-size: 0.75rem;
3684  color: var(--color-charcoal);
3685  background: var(--color-cream);
3686  border: 1px solid var(--color-mist);
3687  border-radius: 6px;
3688  padding: 6px 10px;
3689  margin-top: 8px;
3690}
3691
3692.install-updated-ref-terminal .terminal-prompt {
3693  color: var(--color-ash);
3694  font-size: 0.75rem;
3695}
3696
3697.install-updated-ref-terminal code {
3698  font-family: inherit;
3699  font-size: inherit;
3700  background: none;
3701  padding: 0;
3702  color: var(--color-ink);
3703}
3704
3705@media (max-width: 900px) {
3706  .install-row-primary {
3707    grid-template-columns: 1fr;
3708    gap: var(--spacing-lg);
3709    max-width: calc(100vw - var(--spacing-md) * 2);
3710  }
3711
3712  .install-primary-howto {
3713    padding-left: 0;
3714    padding-top: var(--spacing-lg);
3715    border-left: none;
3716    border-top: 1px solid var(--color-mist);
3717  }
3718
3719  .install-tool-grid {
3720    grid-template-columns: 1fr;
3721  }
3722
3723  .install-path-primary {
3724    margin-bottom: var(--spacing-sm);
3725    padding: var(--spacing-md);
3726  }
3727
3728  .install-path-title {
3729    font-size: 1.25rem;
3730  }
3731
3732  .install-path-desc {
3733    font-size: 0.875rem;
3734    overflow-wrap: break-word;
3735  }
3736
3737  .install-together-inner {
3738    flex-direction: column;
3739    align-items: flex-start;
3740    gap: var(--spacing-xs);
3741  }
3742
3743  .install-updated-subscribe {
3744    grid-template-columns: 1fr;
3745  }
3746
3747  .install-updated-substack {
3748    height: 130px;
3749  }
3750
3751  .install-updated-x {
3752    height: auto;
3753    flex-direction: row;
3754    align-items: center;
3755    justify-content: flex-start;
3756    gap: var(--spacing-sm);
3757    padding: var(--spacing-sm) var(--spacing-md);
3758  }
3759
3760  .install-updated-x-label {
3761    display: none;
3762  }
3763
3764  .install-terminal-cmd code {
3765    font-size: 0.75rem;
3766    white-space: normal;
3767    overflow-wrap: break-word;
3768  }
3769
3770  .install-alt-method {
3771    padding: var(--spacing-sm);
3772  }
3773
3774  .install-alt-method .install-terminal-cmd code {
3775    font-size: 0.6875rem;
3776    white-space: normal;
3777    overflow-wrap: break-word;
3778  }
3779
3780  .install-alt-method .install-terminal-cmd .copy-btn {
3781    display: none;
3782  }
3783
3784  .install-path-terminal .glass-terminal {
3785    box-shadow: none;
3786  }
3787
3788  .install-terminal {
3789    max-width: 100%;
3790  }
3791
3792  .install-alternatives {
3793    max-width: 100%;
3794  }
3795}
3796
3797/* Install terminal (glass terminal style) */
3798.install-terminal {
3799  max-width: 640px;
3800  margin: 0 auto;
3801}
3802
3803.install-terminal .glass-terminal {
3804  height: auto;
3805}
3806
3807.install-terminal .terminal-body {
3808  padding: 0;
3809  display: flex;
3810  flex-direction: column;
3811}
3812
3813.install-terminal-row {
3814  display: flex;
3815  flex-direction: column;
3816  gap: 6px;
3817  padding: var(--spacing-md) var(--spacing-lg);
3818}
3819
3820.install-terminal-label {
3821  font-family: var(--font-mono);
3822  font-size: 0.625rem;
3823  font-weight: 600;
3824  text-transform: uppercase;
3825  letter-spacing: 0.1em;
3826  color: var(--color-ash);
3827}
3828
3829.install-terminal-cmd {
3830  display: flex;
3831  align-items: center;
3832  gap: var(--spacing-sm);
3833}
3834
3835.install-terminal-cmd .terminal-prompt {
3836  flex-shrink: 0;
3837}
3838
3839.install-terminal-cmd code {
3840  flex: 1;
3841  font-family: var(--font-mono);
3842  font-size: 0.9375rem;
3843  color: var(--color-ink);
3844  background: transparent;
3845  padding: 0;
3846  white-space: nowrap;
3847  overflow: hidden;
3848  text-overflow: ellipsis;
3849}
3850
3851.install-terminal-cmd .copy-btn {
3852  flex-shrink: 0;
3853}
3854
3855.install-terminal-cmd .btn {
3856  padding: 0.5rem 1rem;
3857  font-size: 0.8125rem;
3858}
3859
3860.install-terminal-note {
3861  font-size: 0.75rem;
3862  color: var(--color-ash);
3863  padding-left: calc(0.75rem + var(--spacing-sm)); /* align with code after prompt */
3864}
3865
3866.install-terminal-note code {
3867  font-family: var(--font-mono);
3868  font-size: 0.6875rem;
3869  background: var(--color-mist);
3870  padding: 2px 5px;
3871  border-radius: 3px;
3872  color: var(--color-ink);
3873}
3874
3875.install-terminal-divider {
3876  height: 1px;
3877  background: var(--color-mist);
3878  margin: 0;
3879}
3880
3881@media (max-width: 600px) {
3882  .install-terminal-row {
3883    padding: var(--spacing-sm) var(--spacing-md);
3884  }
3885
3886  .install-terminal-cmd code {
3887    font-size: 0.75rem;
3888  }
3889}
3890
3891/* Works with provider badges */
3892.install-providers {
3893  display: flex;
3894  flex-direction: column;
3895  align-items: center;
3896  gap: var(--spacing-sm);
3897  margin-top: var(--spacing-md);
3898}
3899
3900.install-providers-label {
3901  font-size: 0.75rem;
3902  font-weight: 600;
3903  text-transform: uppercase;
3904  letter-spacing: 0.1em;
3905  color: var(--color-ash);
3906}
3907
3908.install-providers-row {
3909  display: flex;
3910  flex-wrap: wrap;
3911  justify-content: center;
3912  gap: var(--spacing-sm);
3913}
3914
3915.install-provider-badge {
3916  display: flex;
3917  align-items: center;
3918  gap: 6px;
3919  font-size: 0.8125rem;
3920  color: var(--color-charcoal);
3921}
3922
3923.install-provider-badge img {
3924  border-radius: 4px;
3925}
3926
3927/* Install alternatives (collapsible) */
3928.install-alternatives {
3929  max-width: 640px;
3930  margin: var(--spacing-sm) auto 0;
3931}
3932
3933.install-alternatives-toggle {
3934  font-family: var(--font-mono);
3935  font-size: 0.75rem;
3936  font-weight: 600;
3937  text-transform: uppercase;
3938  letter-spacing: 0.08em;
3939  color: var(--color-ash);
3940  cursor: pointer;
3941  padding: var(--spacing-sm) 0;
3942  list-style: none;
3943  display: flex;
3944  align-items: center;
3945  gap: 6px;
3946  transition: color var(--duration-fast) var(--ease-out);
3947}
3948
3949.install-alternatives-toggle::-webkit-details-marker {
3950  display: none;
3951}
3952
3953.install-alternatives-toggle::before {
3954  content: '';
3955  display: inline-block;
3956  width: 0;
3957  height: 0;
3958  border-left: 5px solid currentColor;
3959  border-top: 4px solid transparent;
3960  border-bottom: 4px solid transparent;
3961  transition: transform var(--duration-fast) var(--ease-out);
3962}
3963
3964.install-alternatives[open] .install-alternatives-toggle::before {
3965  transform: rotate(90deg);
3966}
3967
3968.install-alternatives-toggle:hover {
3969  color: var(--color-charcoal);
3970}
3971
3972.install-alternatives-content {
3973  animation: altFadeIn 0.2s var(--ease-out);
3974}
3975
3976@keyframes altFadeIn {
3977  from { opacity: 0; transform: translateY(-4px); }
3978  to { opacity: 1; transform: translateY(0); }
3979}
3980
3981.install-alt-method {
3982  padding: var(--spacing-md) var(--spacing-lg);
3983}
3984
3985.install-alt-label {
3986  display: block;
3987  font-family: var(--font-mono);
3988  font-size: 0.625rem;
3989  font-weight: 600;
3990  text-transform: uppercase;
3991  letter-spacing: 0.1em;
3992  color: var(--color-ash);
3993  margin-bottom: 6px;
3994}
3995
3996.install-alt-method .install-terminal-cmd {
3997  display: flex;
3998  align-items: center;
3999  gap: var(--spacing-sm);
4000}
4001
4002.install-alt-method .terminal-prompt {
4003  color: var(--color-accent);
4004  font-family: var(--font-mono);
4005  font-weight: bold;
4006  user-select: none;
4007}
4008
4009.install-alt-method code {
4010  font-family: var(--font-mono);
4011  font-size: 0.875rem;
4012  color: var(--color-ink);
4013}
4014
4015.install-alt-note {
4016  display: block;
4017  font-size: 0.75rem;
4018  color: var(--color-ash);
4019  margin-top: 4px;
4020}
4021
4022.install-alt-note code {
4023  font-family: var(--font-mono);
4024  font-size: 0.6875rem;
4025  background: var(--color-mist);
4026  padding: 2px 5px;
4027  border-radius: 3px;
4028  color: var(--color-ink);
4029}
4030
4031/* Visually hidden helper (kept for accessibility patterns elsewhere) */
4032.sr-only {
4033  position: absolute;
4034  width: 1px;
4035  height: 1px;
4036  padding: 0;
4037  margin: -1px;
4038  overflow: hidden;
4039  clip: rect(0, 0, 0, 0);
4040  white-space: nowrap;
4041  border: 0;
4042}
4043
4044@media (max-width: 600px) {
4045  .install-alt-method code {
4046    font-size: 0.75rem;
4047  }
4048}
4049
4050/* Tooltips */
4051.has-tooltip {
4052  position: relative;
4053  cursor: default;
4054}
4055
4056.has-tooltip::after {
4057  content: attr(data-tooltip);
4058  position: absolute;
4059  bottom: calc(100% + 8px);
4060  left: 50%;
4061  transform: translateX(-50%);
4062  padding: 6px 10px;
4063  background: var(--color-ink);
4064  color: var(--color-paper);
4065  font-size: 0.6875rem;
4066  line-height: 1.4;
4067  border-radius: 6px;
4068  white-space: nowrap;
4069  pointer-events: none;
4070  opacity: 0;
4071  transition: opacity 0.15s ease;
4072  z-index: 100;
4073}
4074
4075.has-tooltip:hover::after {
4076  opacity: 1;
4077}
4078
4079/* Hero logo icon wrapper */
4080.hero-logo-icon {
4081  display: inline-flex;
4082  align-items: center;
4083}
4084
4085.download-tip {
4086  font-size: 0.8125rem;
4087  color: var(--color-ash);
4088  margin-top: var(--spacing-sm);
4089  text-align: center;
4090}
4091
4092.download-tip a {
4093  color: var(--color-accent);
4094  text-decoration: none;
4095}
4096
4097.download-tip a:hover {
4098  text-decoration: underline;
4099}
4100
4101
4102/* ============================================
4103   CONSULTING SECTION
4104   ============================================ */
4105
4106.consulting-section {
4107  padding: var(--spacing-xl) 0;
4108  border-top: 1px solid var(--color-mist);
4109}
4110
4111.consulting-content {
4112  display: flex;
4113  align-items: center;
4114  justify-content: space-between;
4115  gap: var(--spacing-lg);
4116  flex-wrap: wrap;
4117}
4118
4119.consulting-actions {
4120  display: flex;
4121  gap: var(--spacing-sm);
4122  flex-shrink: 0;
4123}
4124
4125.consulting-text {
4126  flex: 1;
4127  min-width: 280px;
4128}
4129
4130.consulting-title {
4131  font-size: clamp(1.5rem, 4vw, 2rem);
4132  font-weight: 300;
4133  font-style: italic;
4134  margin: 0 0 var(--spacing-sm) 0;
4135}
4136
4137.consulting-desc {
4138  font-size: 1rem;
4139  color: var(--color-charcoal);
4140  line-height: 1.6;
4141  margin: 0;
4142  max-width: 45ch;
4143}
4144
4145@media (max-width: 600px) {
4146  .consulting-content {
4147    flex-direction: column;
4148    align-items: flex-start;
4149  }
4150
4151  .consulting-actions {
4152    flex-direction: column;
4153    width: 100%;
4154  }
4155
4156  .consulting-actions .btn {
4157    width: 100%;
4158    justify-content: center;
4159  }
4160}