/* Template-only styles. The motion comes from GSAP, Lenis and Swiper (vendored
   in assets/js), so nothing here fakes an animation - these cover only what the
   React shell used to provide. */

/* The scrollbar stays. Both the preloader and the phone menu have to hold the
   page still, and the usual way - overflow: hidden on the root - takes the bar
   away with it, so the page jumps sideways by the bar's width every time one
   of them opens. The bar is reserved here for good, the holding is done by
   refusing the input instead (see the preloader), and Lenis is stopped without
   letting its own stylesheet reach for overflow either. */
html {
  overflow-y: scroll;
  scrollbar-gutter: stable;
}

html.lenis.lenis-stopped {
  overflow-y: scroll;
}

[data-anim] {
  will-change: transform, opacity;
}

/* The burger menu was React state on the original; the stylesheet's own open
   state is reused, driven by a class instead. */
[class*='burger-menu_wrapper'].is-open [class*='burger-menu_backdrop'] {
  opacity: 1;
  pointer-events: auto;
}
html.menu-open {
  overflow: hidden;
}

.swiper-pagination-bullet {
  cursor: pointer;
}

/* ------------------------------------------------------------- portfolio
   Properties carousel. Left column keeps the site's own section-caption
   style; the right column, the counter/progress rule and the arrows follow
   the reference layout. Swiper drives it, so the motion comes from the same
   engine as the testimonials. */

.properties_root__Pf0lo {
  padding: 6rem 0;
  background: #fff;
  color: #151717;
  overflow: hidden;
}

.properties_hgrid__Pg1rd {
  display: grid;
  gap: 2.4rem;
  margin: 0 0 4rem;
}

.properties_caption__Pcap7 {
  font-weight: 600;
  font-size: 2rem;
  line-height: 140%;
}

.properties_title__Ptl9k h2 {
  margin: 0;
  font-family: var(--font-secondary);
  font-weight: 400;
  font-size: 4.4rem;
  line-height: 105%;
  letter-spacing: -0.02em;
}

.properties_title__Ptl9k em {
  font-style: italic;
}

.properties_controls__Pctr3 {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 2rem;
  margin: 0 0 3rem;
}

.properties_counter__Pcnt5 {
  font-size: 1.6rem;
  font-weight: 500;
  letter-spacing: 0.02em;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.properties_counter__Pcnt5 .properties_counter-rest__Psep2 {
  color: rgba(21, 23, 23, 0.4);
}

.properties_progress__Pprg8 {
  position: relative;
  height: 2px;
  background: rgba(21, 23, 23, 0.14);
}

.properties_progress-bar__Pbar4 {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 12.5%;
  background: #151717;
  transition: width 0.45s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.properties_nav__Pnav6 {
  display: flex;
  gap: 2.4rem;
}

/* Bare arrows, as on the reference - the round button treatment used elsewhere
   on the site would compete with the rule running under them. */
.properties_arrow__Parw1 {
  display: grid;
  place-items: center;
  padding: 0;
  border: 0;
  background: transparent;
  color: #151717;
  cursor: pointer;
  transition: transform 0.3s cubic-bezier(0.22, 0.61, 0.36, 1), opacity 0.3s;
}

.properties_arrow__Parw1 svg {
  display: block;
  width: 2.6rem;
  height: 2.6rem;
}

.properties_arrow__Parw1.properties_arrow-prev__Pprv7 svg {
  transform: rotate(180deg);
}

.properties_arrow__Parw1.swiper-button-disabled {
  opacity: 0.25;
  pointer-events: none;
}

/* The slider runs full-bleed to the right: the swiper starts at the container
   gutter and its own overflow clips anything scrolled past that edge. */
.properties_slider__Psld0 {
  overflow: hidden;
}

.properties_swiper__Pswp2 {
  margin-left: 2.5rem;
  overflow: hidden;
}

.properties_swiper__Pswp2 .swiper-slide {
  width: 82%;
  height: auto;
  margin-right: 1.6rem;
}

.properties_link__Plnk3 {
  display: block;
  color: inherit;
  text-decoration: none;
}

.properties_media__Pmed3 {
  position: relative;
  overflow: hidden;
  aspect-ratio: 4 / 3;
  background: #e9e9e9;
}

.properties_media__Pmed3 img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1.2s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.properties_meta__Pmet8 {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1.6rem;
  padding: 1.6rem 0 0;
}

.properties_name__Pnam4 {
  font-size: 1.6rem;
  font-weight: 500;
  line-height: 140%;
}

.properties_place__Ppla6 {
  font-size: 1.4rem;
  line-height: 140%;
  text-align: right;
  color: rgba(21, 23, 23, 0.45);
  white-space: nowrap;
}

@media (min-width: 768px) {
  .properties_root__Pf0lo {
    padding: 15rem 0;
  }

  .properties_hgrid__Pg1rd {
    grid-template-columns: auto 97.6rem;
    gap: 0;
    margin: 0 0 8rem;
  }

  .properties_title__Ptl9k {
    text-align: right;
  }

  .properties_title__Ptl9k h2 {
    font-size: 7.2rem;
    letter-spacing: -0.03em;
  }

  .properties_controls__Pctr3 {
    gap: 3.2rem;
    margin: 0 0 4rem;
  }

  .properties_swiper__Pswp2 {
    margin-left: 10rem;
  }

  .properties_swiper__Pswp2 .swiper-slide {
    width: 47%;
  }
}

@media (min-width: 1920px) {
  .properties_swiper__Pswp2 {
    margin-left: calc((var(--full-width) - 1920px) / 2 + 10rem);
  }
}

@media (hover: hover) {
  .properties_arrow__Parw1:hover {
    transform: translateX(0.4rem);
  }

  .properties_arrow__Parw1.properties_arrow-prev__Pprv7:hover {
    transform: translateX(-0.4rem);
  }

  .properties_slide__Psli9:hover .properties_media__Pmed3 img {
    transform: scale(1.04);
  }
}


/* ------------------------------------------------------------- services
   The stock rows were labelled Buy / Sell / Rent, so the oversized row label
   is set at 24rem. "Landowners" is twice as long and runs past the column, so
   the label scales with the viewport and caps well inside it. */

.services_item-more__pkhNR {
  font-size: clamp(3.6rem, 10vw, 13rem);
}

/* The stock rows are 40rem tall to carry a 24rem label. With the label scaled
   down the row can close up, and the side copy reads better a size smaller. */

.services_root__Ch_WM {
  padding: 6rem 0;
}

.services_hgrid__9FHyx {
  margin: 0 0 5rem;
}

.services_item__D_u7g {
  height: auto;
  min-height: 24rem;
}

.services_item__D_u7g > div {
  padding-top: 4rem;
  padding-bottom: 4rem;
  gap: 2rem;
}

.services_item-text__uKETL {
  align-self: center;
  max-width: 44rem;
  font-size: 1.7rem;
  line-height: 155%;
}

.services_item-more__pkhNR {
  align-self: center;
}

.services_brief__OJqWD {
  margin: 5rem 0 0;
}

@media (min-width: 768px) {
  .services_root__Ch_WM {
    padding: 9rem 0;
  }

  .services_hgrid__9FHyx {
    margin: 0 0 6rem;
  }

  .services_item__D_u7g {
    min-height: 26rem;
  }

  .services_item__D_u7g > div {
    padding-top: 5rem;
    padding-bottom: 5rem;
  }

  .services_item-text__uKETL {
    font-size: 2rem;
  }
}

/* The services section leads with the promise and the call to action rather
   than a title, so the brief type sits flush at the top of its column. */

.services_head__Shd1 {
  margin: 0;
}

.services_action__21_Mi {
  margin: 3.2rem 0 0;
}

@media (min-width: 768px) {
  .services_head__Shd1 {
    max-width: 68rem;
  }

  .services_action__21_Mi {
    margin: 4rem 0 0;
  }
}

/* ------------------------------------------------------- feature cards
   The stock cards sat on dark photography, so their white text needed no
   help. ACE's renders are bright, and the description only appears on
   hover - both need a scrim to stay readable. */

.features_item-bg__gntQ1::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(21, 23, 23, 0.66) 0%, rgba(21, 23, 23, 0.3) 42%, rgba(21, 23, 23, 0.8) 100%);
}

.features_item-title__uXmdj,
.features_item-text__X8po0 {
  text-shadow: 0 1px 14px rgba(21, 23, 23, 0.45);
}

/* --------------------------------------------------------------- why us
   The block sits in the right-hand column, so it ends where the column
   ends rather than trailing off short of the margin. */

@media (min-width: 768px) {
  .why-us_text__rT1u9 {
    text-align: right;
  }

  .why-us_text__rT1u9 > div {
    width: 100% !important;
    text-align: right !important;
  }
}

/* ---------------------------------------------------------------- header
   The stock header is sticky and always white. It now hides on the way down
   the page, returns on the way up, and stays transparent over the hero,
   where the artwork already sits behind the links. */

.header_wrapper__MJ5bn {
  transition: background-color 0.35s, transform 0.45s cubic-bezier(0.22, 0.61, 0.36, 1), box-shadow 0.35s;
  will-change: transform;
}

.header_wrapper__MJ5bn.is-hidden {
  transform: translateY(-100%);
}

/* At the very top the bar sits on the page as the design intends. The moment
   it starts behaving as a sticky bar it takes a white ground, so the links
   stay readable over whatever scrolls beneath. The template's transparent
   variant is one class more specific, so the solid state has to out-specify
   it rather than merely follow it. */
.header_wrapper__MJ5bn.is-solid,
.header_wrapper__MJ5bn.header_transparent__rCyyn.is-solid:not(.header_-fixed__r0usw) {
  background-color: #fff;
  box-shadow: 0 1px 0 rgba(21, 23, 23, 0.08);
}

.header_wrapper__MJ5bn.is-solid .header_content__cVJDb {
  color: #151717;
}

@media (prefers-reduced-motion: reduce) {
  .header_wrapper__MJ5bn {
    transition: background-color 0.35s;
  }

  .header_wrapper__MJ5bn.is-hidden {
    transform: none;
  }
}

/* ----------------------------------------------------------------- footer
   The bottom bar is one line. The stock row carried eight items - six links
   and two stray spans the framework had left with class="undefined" - which
   at this type size wrapped onto a second and third line and left the row
   looking like a paragraph. The spans are gone from the markup; what is left
   is held on one line here rather than being allowed to wrap back.

   The gap closes up a little and nothing breaks mid-label, so the row reads
   as a rule of links rather than a block of text. */

@media (min-width: 768px) {
  /* space-between over three children spread the row as
     [six links][name][copyright] - the links bunched tight at the left and two
     canyons after them. display:contents drops the sublinks box out of the
     layout so its links become items of this row in their own right; with
     eight equal children, space-between gives one even interval all the way
     across. The box is only dissolved here - on mobile the same element is
     the column the links stack in. */
  .footer_copyright-container__yt1ht {
    align-items: baseline;
    gap: 2rem;
  }

  .footer_sublinks__Pj_ed {
    display: contents;
  }

  .footer_copyright-container__yt1ht > *,
  .footer_sublinks__Pj_ed > * {
    white-space: nowrap;
  }
}

/* ------------------------------------------------------------------ logos
   The supplied artwork replaces the lettering the template drew as paths, so
   the sizing rules that targeted <svg> need their <img> equivalents. */

/* The lockup stacks ACE over DEVELOPERS, so it needs height to stay legible
   in a slim header. */
.header_logo__LO_Jk img {
  display: block;
  width: auto;
  height: 4rem;
}

.footer_logo__5ncK8 a {
  display: block;
}

.footer_logo__5ncK8 img {
  display: block;
  width: 100%;
  max-width: 42rem;
  height: auto;
}

@media (min-width: 768px) {
  .header_logo__LO_Jk img {
    height: 4.8rem;
  }
}

/* ------------------------------------------------------------- hero mark
   The wordmark is drawn twice: a stroked outline, and a copy of the building
   masked to the same shape so the letters fill with it. Both come from the
   ACE lockup traced to vector by tools/trace_logo.py, so they cannot drift
   apart. The lockup is taller than the one it replaces, so the box it sits
   in is re-proportioned here rather than restretched. */

.hero_logo__FxgRj {
  width: 26rem;
  height: 18.6rem;
  left: calc(50% - 13rem);
  top: calc(50% - 9.3rem);
}

.hero_composite__3blHB {
  mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 977 700'><path d='M250.9 1.5 0.6 563.9 1.5 564.8 119.6 564.7 157.8 480.3 306.1 480.3 306.9 479.6 292.5 462.5 274.2 436.1 257.2 403.9 249.5 383.9 200.4 383.6 201.7 378.9 232.6 310.5 231.3 277.6 233.2 248.6 238.9 215.8 248.4 183.5 258.5 159.0 269.2 138.2 285.6 112.3 296.9 98.1 296.8 95.9 257.8 15.6 257.8 14.0 250.9 1.4Z M503.0 1.5 471.7 5.0 442.1 12.0 409.2 24.0 376.4 41.0 361.9 50.5 343.6 64.3 313.9 92.8 295.0 116.1 280.5 138.2 262.9 173.5 251.5 206.4 244.6 238.5 241.4 269.4 242.0 306.1 245.8 334.5 255.3 371.7 266.7 400.8 276.1 419.7 284.3 433.5 302.6 459.4 327.3 486.6 350.6 506.7 375.2 523.8 407.3 540.8 441.5 553.4 474.2 561.0 500.7 564.1 539.3 564.1 569.6 560.4 604.9 551.5 637.1 538.9 664.2 524.4 691.3 505.5 707.7 491.6 717.3 482.1 717.3 481.1 708.5 472.6 708.4 471.6 639.7 402.2 622.0 417.9 609.4 426.7 602.2 430.5 601.8 398.4 554.4 383.2 553.4 383.5 553.4 448.6 552.6 449.4 549.1 449.3 549.0 295.9 548.3 294.4 509.2 269.2 508.0 269.4 507.9 451.9 503.6 451.1 503.5 268.6 459.0 296.3 455.2 298.8 453.2 301.4 453.2 405.1 449.9 407.8 446.3 409.5 446.3 375.3 441.9 376.1 441.7 341.7 411.1 354.9 408.5 356.9 408.4 390.6 405.3 392.3 405.1 405.9 395.3 396.4 383.3 381.2 374.5 367.4 366.3 351.0 357.4 325.0 353.0 299.2 352.4 275.1 356.1 246.1 359.9 231.6 365.0 217.6 377.6 193.0 385.2 181.7 396.5 167.8 416.1 149.4 431.3 138.7 443.2 131.8 458.4 124.8 473.0 119.8 501.3 114.1 532.4 113.5 548.1 115.3 565.2 119.1 588.0 127.4 600.6 133.7 615.7 143.1 630.2 154.5 640.2 163.9 719.2 86.2 719.2 85.2 703.3 70.0 677.5 49.8 654.2 35.3 634.0 25.3 618.9 18.9 589.1 9.5 565.2 4.4 536.8 1.3 503.0 1.4Z M639.8 1.5 639.8 16.8 641.2 18.2 667.4 31.6 690.1 46.7 709.6 62.4 733.1 85.3 639.8 178.6 639.8 388.7 728.0 477.3 731.2 482.0 713.4 499.8 689.5 519.3 665.5 535.1 640.5 547.8 639.8 548.6 639.8 564.7 975.7 564.7 975.6 453.2 752.6 453.0 752.7 338.5 918.4 338.2 918.3 227.6 752.6 227.4 752.6 112.9 974.4 112.8 974.4 1.4 639.8 1.4Z M496.3 283.0 497.3 283.3 497.3 297.4 480.2 308.2 480.3 293.2 496.2 283.1Z M474.2 297.5 474.6 311.3 460.0 320.8 459.5 307.1 474.1 297.6Z M496.9 307.0 497.3 322.0 480.8 332.1 479.7 331.9 480.3 317.8 496.8 307.0Z M474.2 321.5 474.6 335.8 460.0 345.4 459.5 331.0 474.1 321.5Z M496.3 331.5 497.3 331.8 498.0 343.3 497.3 345.3 494.7 347.9 480.2 356.7 479.7 345.0 480.3 341.8 496.2 331.6Z M473.6 346.0 474.6 346.3 474.6 359.8 460.0 369.3 459.5 355.6 473.5 346.1Z M436.4 351.7 436.8 364.8 427.2 369.3 426.1 369.1 426.1 356.9 436.3 351.8Z M496.9 355.5 497.3 369.9 480.8 380.7 479.7 380.5 480.3 366.3 496.8 355.5Z M421.3 358.7 422.9 358.9 422.9 370.5 422.2 371.9 413.4 375.6 411.6 375.4 411.6 363.8 421.2 358.7Z M474.2 370.0 474.6 384.4 460.6 393.3 459.5 393.1 459.5 380.2 474.1 370.0Z M436.4 373.8 437.4 374.0 437.4 386.9 427.2 391.4 426.8 378.3 436.3 373.8Z M496.9 379.5 497.3 394.5 480.2 405.3 479.7 392.9 480.3 390.9 496.8 379.5Z M422.6 380.1 423.6 380.3 423.5 393.2 414.0 397.7 412.9 397.5 412.9 385.2 422.4 380.1Z M437.7 393.3 438.7 393.6 438.7 406.4 430.4 410.3 428.0 410.7 428.0 398.5 437.6 393.4Z M473.6 394.6 474.6 394.8 474.6 408.3 460.0 417.9 459.5 404.2 473.5 394.6Z M558.1 397.7 562.1 398.4 572.9 402.9 572.8 414.1 560.0 411.0 557.9 409.6 558.0 397.8Z M423.2 399.6 424.2 399.9 423.5 412.7 417.2 416.0 412.9 413.4 412.9 404.8 423.1 399.7Z M577.0 402.8 591.8 408.6 591.8 419.8 579.5 416.6 577.4 415.3 576.9 402.8Z M438.3 413.5 438.7 426.5 435.4 428.6 428.0 424.7 428.0 418.8 438.2 413.5Z M558.1 420.4 568.4 423.6 572.9 426.2 572.8 437.4 559.2 433.6 557.9 432.3 558.0 420.5Z M577.6 426.1 591.8 431.3 591.8 436.1 585.5 439.3 581.4 440.0 577.4 438.6 577.5 426.1Z M536.4 585.2 522.0 588.8 513.8 593.2 503.7 602.7 496.7 614.7 492.3 631.8 492.3 651.5 496.1 667.4 502.4 679.4 510.0 687.6 515.1 691.4 522.7 695.2 537.9 699.0 551.9 699.0 565.9 695.8 576.6 690.2 586.2 681.3 593.7 668.0 597.5 654.0 598.2 635.6 595.7 621.7 593.1 614.1 588.7 605.9 580.4 596.3 572.2 590.7 566.5 588.1 553.8 584.9 536.4 585.1Z M935.4 585.2 922.3 588.8 915.3 593.2 911.5 597.0 907.1 604.6 905.8 609.1 905.8 623.2 909.0 632.1 915.3 639.1 922.9 644.2 946.6 654.9 951.1 658.8 953.0 664.6 952.4 671.1 948.5 676.9 942.8 680.1 937.1 681.4 930.6 681.4 921.1 679.5 909.7 674.5 907.7 693.9 912.3 695.9 928.1 699.0 941.5 699.0 949.0 697.8 955.5 695.8 966.2 689.5 971.3 683.8 974.4 677.5 976.4 669.8 976.4 659.6 975.1 653.8 971.9 647.5 964.9 640.4 958.0 636.0 931.1 623.3 928.5 619.5 927.8 615.6 928.5 610.4 929.8 607.7 932.4 605.1 940.7 602.0 954.7 602.6 968.1 607.0 969.4 588.8 953.4 584.9 935.4 585.1Z M4.4 587.1 3.9 696.5 46.4 696.5 61.5 694.0 73.6 688.9 81.2 683.2 86.3 677.5 92.0 667.4 95.2 656.6 96.4 648.4 96.4 635.6 95.2 626.8 92.0 615.9 89.5 610.9 85.1 604.6 79.9 599.5 68.6 592.5 52.7 588.1 37.6 586.8 4.5 586.9Z M121.7 587.1 121.1 696.4 186.5 696.4 186.6 679.1 185.8 678.3 143.7 678.0 143.8 649.9 181.3 649.9 182.2 649.0 182.0 631.6 143.8 631.5 143.8 605.2 185.8 605.1 185.9 587.6 185.1 586.8 121.7 586.9Z M201.7 587.1 239.0 696.5 265.8 696.5 266.6 695.8 279.9 654.4 281.1 652.9 302.4 586.9 281.4 586.8 280.5 587.6 257.2 658.9 253.2 673.8 225.0 586.9 201.7 586.9Z M322.1 587.1 321.5 696.4 386.3 696.4 386.3 678.3 343.5 678.0 343.6 649.9 381.7 649.9 382.6 649.0 382.5 631.6 343.6 631.5 343.6 605.2 385.6 605.1 385.7 586.9 322.1 586.9Z M413.5 587.1 412.9 696.4 477.1 696.4 477.0 678.3 435.0 678.1 434.9 587.1 413.5 586.9Z M623.4 587.1 623.5 696.5 645.4 696.4 645.6 654.9 660.3 655.5 676.8 651.7 684.4 647.3 690.2 641.6 693.9 634.6 696.5 622.5 695.2 611.6 690.2 600.8 683.2 593.8 674.3 589.4 665.4 587.5 623.4 586.9Z M716.7 587.1 716.7 696.4 781.6 696.4 781.6 679.1 780.9 678.3 738.7 678.0 738.9 649.9 777.2 649.6 777.1 631.6 738.8 631.5 738.8 605.2 780.9 605.1 780.9 587.6 780.1 586.8 716.7 586.9Z M808.1 587.1 808.1 696.4 830.1 696.4 830.4 651.1 841.2 651.8 848.4 655.7 852.8 663.2 865.6 696.5 889.3 696.4 871.1 650.6 865.3 643.6 861.7 642.1 872.2 637.8 877.4 633.4 880.5 628.3 882.5 622.5 883.1 613.5 881.8 606.0 879.3 600.2 874.8 595.1 870.4 591.9 858.9 588.1 848.8 586.8 808.1 586.9Z M540.4 602.0 550.0 602.0 560.2 606.4 568.5 615.9 573.6 629.3 574.9 645.2 571.7 661.1 566.0 671.8 560.9 676.9 555.8 680.1 548.8 682.0 541.7 682.0 535.9 680.7 530.8 678.2 525.7 673.7 521.9 668.7 518.2 660.5 516.2 652.8 515.6 635.6 519.4 620.4 523.2 613.4 529.0 607.0 535.3 603.3 540.3 602.0Z M645.7 603.8 661.0 605.1 666.8 607.7 670.6 611.5 672.6 616.7 671.9 627.6 670.6 630.2 663.6 636.0 654.7 637.9 645.5 637.8 645.6 603.9Z M26.1 604.5 43.9 605.1 51.6 607.0 57.9 610.2 66.8 619.1 71.2 628.5 72.5 634.3 72.5 649.0 69.9 658.6 66.1 665.5 59.8 671.9 50.3 676.9 38.8 679.5 25.9 679.4 26.0 604.5Z M830.4 604.5 850.1 605.1 854.0 607.0 857.2 610.3 859.1 615.4 858.5 625.2 854.6 630.3 849.6 632.8 843.8 634.1 830.2 634.0 830.3 604.5Z' fill='%23000' fill-rule='evenodd'/></svg>");
  mask-size: 26rem 18.6rem;
  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 977 700'><path d='M250.9 1.5 0.6 563.9 1.5 564.8 119.6 564.7 157.8 480.3 306.1 480.3 306.9 479.6 292.5 462.5 274.2 436.1 257.2 403.9 249.5 383.9 200.4 383.6 201.7 378.9 232.6 310.5 231.3 277.6 233.2 248.6 238.9 215.8 248.4 183.5 258.5 159.0 269.2 138.2 285.6 112.3 296.9 98.1 296.8 95.9 257.8 15.6 257.8 14.0 250.9 1.4Z M503.0 1.5 471.7 5.0 442.1 12.0 409.2 24.0 376.4 41.0 361.9 50.5 343.6 64.3 313.9 92.8 295.0 116.1 280.5 138.2 262.9 173.5 251.5 206.4 244.6 238.5 241.4 269.4 242.0 306.1 245.8 334.5 255.3 371.7 266.7 400.8 276.1 419.7 284.3 433.5 302.6 459.4 327.3 486.6 350.6 506.7 375.2 523.8 407.3 540.8 441.5 553.4 474.2 561.0 500.7 564.1 539.3 564.1 569.6 560.4 604.9 551.5 637.1 538.9 664.2 524.4 691.3 505.5 707.7 491.6 717.3 482.1 717.3 481.1 708.5 472.6 708.4 471.6 639.7 402.2 622.0 417.9 609.4 426.7 602.2 430.5 601.8 398.4 554.4 383.2 553.4 383.5 553.4 448.6 552.6 449.4 549.1 449.3 549.0 295.9 548.3 294.4 509.2 269.2 508.0 269.4 507.9 451.9 503.6 451.1 503.5 268.6 459.0 296.3 455.2 298.8 453.2 301.4 453.2 405.1 449.9 407.8 446.3 409.5 446.3 375.3 441.9 376.1 441.7 341.7 411.1 354.9 408.5 356.9 408.4 390.6 405.3 392.3 405.1 405.9 395.3 396.4 383.3 381.2 374.5 367.4 366.3 351.0 357.4 325.0 353.0 299.2 352.4 275.1 356.1 246.1 359.9 231.6 365.0 217.6 377.6 193.0 385.2 181.7 396.5 167.8 416.1 149.4 431.3 138.7 443.2 131.8 458.4 124.8 473.0 119.8 501.3 114.1 532.4 113.5 548.1 115.3 565.2 119.1 588.0 127.4 600.6 133.7 615.7 143.1 630.2 154.5 640.2 163.9 719.2 86.2 719.2 85.2 703.3 70.0 677.5 49.8 654.2 35.3 634.0 25.3 618.9 18.9 589.1 9.5 565.2 4.4 536.8 1.3 503.0 1.4Z M639.8 1.5 639.8 16.8 641.2 18.2 667.4 31.6 690.1 46.7 709.6 62.4 733.1 85.3 639.8 178.6 639.8 388.7 728.0 477.3 731.2 482.0 713.4 499.8 689.5 519.3 665.5 535.1 640.5 547.8 639.8 548.6 639.8 564.7 975.7 564.7 975.6 453.2 752.6 453.0 752.7 338.5 918.4 338.2 918.3 227.6 752.6 227.4 752.6 112.9 974.4 112.8 974.4 1.4 639.8 1.4Z M496.3 283.0 497.3 283.3 497.3 297.4 480.2 308.2 480.3 293.2 496.2 283.1Z M474.2 297.5 474.6 311.3 460.0 320.8 459.5 307.1 474.1 297.6Z M496.9 307.0 497.3 322.0 480.8 332.1 479.7 331.9 480.3 317.8 496.8 307.0Z M474.2 321.5 474.6 335.8 460.0 345.4 459.5 331.0 474.1 321.5Z M496.3 331.5 497.3 331.8 498.0 343.3 497.3 345.3 494.7 347.9 480.2 356.7 479.7 345.0 480.3 341.8 496.2 331.6Z M473.6 346.0 474.6 346.3 474.6 359.8 460.0 369.3 459.5 355.6 473.5 346.1Z M436.4 351.7 436.8 364.8 427.2 369.3 426.1 369.1 426.1 356.9 436.3 351.8Z M496.9 355.5 497.3 369.9 480.8 380.7 479.7 380.5 480.3 366.3 496.8 355.5Z M421.3 358.7 422.9 358.9 422.9 370.5 422.2 371.9 413.4 375.6 411.6 375.4 411.6 363.8 421.2 358.7Z M474.2 370.0 474.6 384.4 460.6 393.3 459.5 393.1 459.5 380.2 474.1 370.0Z M436.4 373.8 437.4 374.0 437.4 386.9 427.2 391.4 426.8 378.3 436.3 373.8Z M496.9 379.5 497.3 394.5 480.2 405.3 479.7 392.9 480.3 390.9 496.8 379.5Z M422.6 380.1 423.6 380.3 423.5 393.2 414.0 397.7 412.9 397.5 412.9 385.2 422.4 380.1Z M437.7 393.3 438.7 393.6 438.7 406.4 430.4 410.3 428.0 410.7 428.0 398.5 437.6 393.4Z M473.6 394.6 474.6 394.8 474.6 408.3 460.0 417.9 459.5 404.2 473.5 394.6Z M558.1 397.7 562.1 398.4 572.9 402.9 572.8 414.1 560.0 411.0 557.9 409.6 558.0 397.8Z M423.2 399.6 424.2 399.9 423.5 412.7 417.2 416.0 412.9 413.4 412.9 404.8 423.1 399.7Z M577.0 402.8 591.8 408.6 591.8 419.8 579.5 416.6 577.4 415.3 576.9 402.8Z M438.3 413.5 438.7 426.5 435.4 428.6 428.0 424.7 428.0 418.8 438.2 413.5Z M558.1 420.4 568.4 423.6 572.9 426.2 572.8 437.4 559.2 433.6 557.9 432.3 558.0 420.5Z M577.6 426.1 591.8 431.3 591.8 436.1 585.5 439.3 581.4 440.0 577.4 438.6 577.5 426.1Z M536.4 585.2 522.0 588.8 513.8 593.2 503.7 602.7 496.7 614.7 492.3 631.8 492.3 651.5 496.1 667.4 502.4 679.4 510.0 687.6 515.1 691.4 522.7 695.2 537.9 699.0 551.9 699.0 565.9 695.8 576.6 690.2 586.2 681.3 593.7 668.0 597.5 654.0 598.2 635.6 595.7 621.7 593.1 614.1 588.7 605.9 580.4 596.3 572.2 590.7 566.5 588.1 553.8 584.9 536.4 585.1Z M935.4 585.2 922.3 588.8 915.3 593.2 911.5 597.0 907.1 604.6 905.8 609.1 905.8 623.2 909.0 632.1 915.3 639.1 922.9 644.2 946.6 654.9 951.1 658.8 953.0 664.6 952.4 671.1 948.5 676.9 942.8 680.1 937.1 681.4 930.6 681.4 921.1 679.5 909.7 674.5 907.7 693.9 912.3 695.9 928.1 699.0 941.5 699.0 949.0 697.8 955.5 695.8 966.2 689.5 971.3 683.8 974.4 677.5 976.4 669.8 976.4 659.6 975.1 653.8 971.9 647.5 964.9 640.4 958.0 636.0 931.1 623.3 928.5 619.5 927.8 615.6 928.5 610.4 929.8 607.7 932.4 605.1 940.7 602.0 954.7 602.6 968.1 607.0 969.4 588.8 953.4 584.9 935.4 585.1Z M4.4 587.1 3.9 696.5 46.4 696.5 61.5 694.0 73.6 688.9 81.2 683.2 86.3 677.5 92.0 667.4 95.2 656.6 96.4 648.4 96.4 635.6 95.2 626.8 92.0 615.9 89.5 610.9 85.1 604.6 79.9 599.5 68.6 592.5 52.7 588.1 37.6 586.8 4.5 586.9Z M121.7 587.1 121.1 696.4 186.5 696.4 186.6 679.1 185.8 678.3 143.7 678.0 143.8 649.9 181.3 649.9 182.2 649.0 182.0 631.6 143.8 631.5 143.8 605.2 185.8 605.1 185.9 587.6 185.1 586.8 121.7 586.9Z M201.7 587.1 239.0 696.5 265.8 696.5 266.6 695.8 279.9 654.4 281.1 652.9 302.4 586.9 281.4 586.8 280.5 587.6 257.2 658.9 253.2 673.8 225.0 586.9 201.7 586.9Z M322.1 587.1 321.5 696.4 386.3 696.4 386.3 678.3 343.5 678.0 343.6 649.9 381.7 649.9 382.6 649.0 382.5 631.6 343.6 631.5 343.6 605.2 385.6 605.1 385.7 586.9 322.1 586.9Z M413.5 587.1 412.9 696.4 477.1 696.4 477.0 678.3 435.0 678.1 434.9 587.1 413.5 586.9Z M623.4 587.1 623.5 696.5 645.4 696.4 645.6 654.9 660.3 655.5 676.8 651.7 684.4 647.3 690.2 641.6 693.9 634.6 696.5 622.5 695.2 611.6 690.2 600.8 683.2 593.8 674.3 589.4 665.4 587.5 623.4 586.9Z M716.7 587.1 716.7 696.4 781.6 696.4 781.6 679.1 780.9 678.3 738.7 678.0 738.9 649.9 777.2 649.6 777.1 631.6 738.8 631.5 738.8 605.2 780.9 605.1 780.9 587.6 780.1 586.8 716.7 586.9Z M808.1 587.1 808.1 696.4 830.1 696.4 830.4 651.1 841.2 651.8 848.4 655.7 852.8 663.2 865.6 696.5 889.3 696.4 871.1 650.6 865.3 643.6 861.7 642.1 872.2 637.8 877.4 633.4 880.5 628.3 882.5 622.5 883.1 613.5 881.8 606.0 879.3 600.2 874.8 595.1 870.4 591.9 858.9 588.1 848.8 586.8 808.1 586.9Z M540.4 602.0 550.0 602.0 560.2 606.4 568.5 615.9 573.6 629.3 574.9 645.2 571.7 661.1 566.0 671.8 560.9 676.9 555.8 680.1 548.8 682.0 541.7 682.0 535.9 680.7 530.8 678.2 525.7 673.7 521.9 668.7 518.2 660.5 516.2 652.8 515.6 635.6 519.4 620.4 523.2 613.4 529.0 607.0 535.3 603.3 540.3 602.0Z M645.7 603.8 661.0 605.1 666.8 607.7 670.6 611.5 672.6 616.7 671.9 627.6 670.6 630.2 663.6 636.0 654.7 637.9 645.5 637.8 645.6 603.9Z M26.1 604.5 43.9 605.1 51.6 607.0 57.9 610.2 66.8 619.1 71.2 628.5 72.5 634.3 72.5 649.0 69.9 658.6 66.1 665.5 59.8 671.9 50.3 676.9 38.8 679.5 25.9 679.4 26.0 604.5Z M830.4 604.5 850.1 605.1 854.0 607.0 857.2 610.3 859.1 615.4 858.5 625.2 854.6 630.3 849.6 632.8 843.8 634.1 830.2 634.0 830.3 604.5Z' fill='%23000' fill-rule='evenodd'/></svg>");
  -webkit-mask-size: 26rem 18.6rem;
}

@media (min-width: 768px) {
  .hero_logo__FxgRj {
    width: 84rem;
    height: 60.2rem;
    left: calc(50% - 42rem);
    top: calc(50% - 30.1rem);
  }

  .hero_composite__3blHB {
    mask-size: 84rem 60.2rem;
    -webkit-mask-size: 84rem 60.2rem;
  }
}

/* The mark's outline is drawn on as the hero scrolls, so it starts fully
   dashed out. A non-scaling stroke keeps the same weight at every breakpoint
   rather than shrinking with the viewBox. */

.hero_logo__FxgRj path {
  stroke-width: 3px;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
}

@media (min-width: 768px) {
  .hero_logo__FxgRj path {
    stroke-width: 3.5px;
  }
}

/* Without the scripted draw the mark should still be a mark. */
@media (prefers-reduced-motion: reduce) {
  .hero_logo__FxgRj path {
    stroke-dashoffset: 0;
  }
}

/* ------------------------------------------------------------ why us film
   A silent, uncontrolled YouTube embed that only mounts once the section is
   on screen. The render stays underneath as the poster, so the box is never
   empty and still reads if the embed is blocked. */

.whyv_root__Wv1 {
  position: relative;
  overflow: hidden;
  background: #151717;
  container-type: size;
}

.whyv_poster__Wv2 {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: opacity 0.8s ease;
}

.whyv_root__Wv1[data-playing] .whyv_poster__Wv2 {
  opacity: 0;
}

.whyv_root__Wv1 iframe,
.whyv_root__Wv1 > div {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border: 0;
  /* the player letterboxes whatever box it is given, so it is oversized to
     the larger of the two axes and cropped instead */
  width: max(100cqw, 177.78cqh);
  height: max(100cqh, 56.25cqw);
  /* decorative: no clicking through to YouTube, no controls to catch */
  pointer-events: none;
}

@supports not (width: 1cqw) {
  .whyv_root__Wv1 iframe,
  .whyv_root__Wv1 > div {
    width: 100%;
    height: 100%;
  }
}

/* On a phone the film takes its own shape. The template's well is a portrait
   365:450, and a 16:9 film in it can only be cropped down the sides or fenced
   in with black - so the box becomes the film's own ratio and the whole frame
   shows, edge to edge, with nothing left over. */
@media (max-width: 767px) {
  .why-us_preview__OofJt.whyv_root__Wv1 {
    aspect-ratio: 16 / 9;
    height: auto;
  }

  .why-us_preview__OofJt.whyv_root__Wv1 iframe,
  .why-us_preview__OofJt.whyv_root__Wv1 > div {
    width: 100%;
    height: 100%;
  }
}

/* ---------------------------------------------------------- hero seam
   The hero is a 500vh scroll stage holding a 100vh sticky frame, and it pulls
   the section after it up by -100vh so that section slides over the frame.
   Those two viewport values round to device pixels independently, so at
   fractional zoom or on a fractional DPR the join can land a hairline apart -
   and what shows through the crack is the hero's sky.

   The frame gets two pixels of extra height and the following section is
   pulled two pixels further up: the overlap swallows any rounding, and since
   the section is opaque and already covers the frame there, nothing moves. */

.hero_top__WegWw {
  height: calc(100vh + 2px);
}

.hero_root__N0Loz + section {
  margin-top: -2px;
}

/* The two service rows were <button type="button"> wired to a Radix dialog
   that did not survive the framework being stripped, so they did nothing at
   all. They are links now; the stock rule already gives them display:block,
   full width and inherited colour, so only the underline needs taking off. */
a.services_item__D_u7g {
  text-decoration: none;
}
