/* css/ry-motion.css */
/* Motion geometry/timing follows the supplied live source, not its styling. */
.ry-motion-root {
  --ry-motion-ease: cubic-bezier(.25, .46, .45, .94);
  --ry-motion-distance: 50px;
}
.ry-motion-legacy { opacity: 1 !important; transform: none !important; }
.ry-motion-template { transform: none !important; }
.ry-motion-reveal { opacity: 1; }
.ry-motion-root[data-motion-ready="true"] .ry-motion-reveal {
  transition: opacity .55s var(--ry-motion-ease) var(--reveal-delay, 0ms), translate .55s var(--ry-motion-ease) var(--reveal-delay, 0ms);
}
.ry-motion-root[data-motion-ready="true"] .ry-motion-reveal:not([data-visible="true"]) {
  opacity: 0 !important;
  translate: 0 var(--ry-motion-distance);
}
.ry-motion-root .ry-motion-reveal[data-visible="true"]:not(.ry-motion-hero-enter) { opacity: 1 !important; }
.page-wrapper.ry-motion-root .ry-motion-reveal:is([text-scroll], [paragraph-scroll], [cms-image]) { visibility: visible !important; }
.ry-motion-hero-enter {
  animation: ry-motion-hero-enter .55s var(--ry-motion-ease) var(--ry-motion-hero-delay, 0ms) both;
}
/* Individual translate preserves the phone wrapper's placement/rotation. */
@keyframes ry-motion-hero-enter {
  from { opacity: 0; translate: 0 var(--ry-motion-distance); }
  to { opacity: 1; translate: 0 0; }
}

/* LCP: exempt the hero H1 from the shared entrance. Its animation is fill-mode `both`, so the
   element holds the keyframe's opacity 0 through the delay and the 550 ms fade, and the largest
   paint on the page cannot happen until that is over. Every other hero element still animates.
   animation: none means animationend never fires and js/ry-motion.js never removes this class;
   that is why the rule sets the finished state itself instead of relying on the
   :not(.ry-motion-hero-enter) rule above. No !important: the H1 is marked data-visible="true"
   inside register(), before data-motion-ready is set, so the !important rule for not-yet-visible
   reveals never matches it. */
#ry-hero-title.ry-motion-hero-enter { animation: none; opacity: 1; translate: 0 0; }
.ry-motion-press-viewport {
  --ry-motion-press-gap: var(--spacing--48);
  display: block;
  overflow: hidden;
}
.ry-motion-press-rail { display: flex; width: max-content; animation: ry-motion-press 40s linear infinite; }
.ry-motion-press-group {
  display: flex;
  align-items: center;
  flex: none;
  gap: var(--ry-motion-press-gap);
  padding-right: var(--ry-motion-press-gap);
}
.ry-motion-press-group > .ry-cases-press-logo { width: var(--width--2-columns); flex: none; }
@keyframes ry-motion-press { to { transform: translateX(-50%); } }
.ry-motion-press-viewport[data-ry-motion-visible="false"] .ry-motion-press-rail,
.ry-motion-root[data-ry-motion-page-hidden="true"] .ry-motion-press-rail,
.ry-motion-root[data-ry-motion-page-hidden="true"] .ry-work-community-track { animation-play-state: paused; }
/* Use translate so legacy Webflow transforms cannot freeze these rows. */
.ry-motion-reviews { animation: ry-motion-reviews var(--ry-review-duration, 50s) linear infinite; }
.ry-motion-reviews-reverse { animation-direction: reverse; }
@keyframes ry-motion-reviews { to { translate: calc(-1 * var(--ry-review-distance, 0px)) 0; } }
[data-ry-motion-visible="false"] > .ry-motion-reviews,
.ry-motion-root[data-ry-motion-page-hidden="true"] .ry-motion-reviews { animation-play-state: paused; }
.ry-motion-reviews:focus-visible { outline: 2px solid currentColor; outline-offset: -2px; }
/* Restore the template's masked text roll using its existing text shadow. */
.ry-motion-root .cta_primary .button_text-mask > .text-button { display: block; transition: translate .3s var(--ry-motion-ease); }
.ry-motion-root .cta_primary .icon-wrap_button.right { transition: translate .3s var(--ry-motion-ease); }
.ry-motion-root .cta_primary:focus-visible .btn-bg { background-color: var(--color-tokens-button-primary-hover-background); }
.ry-motion-root .cta_primary.secondary:focus-visible .btn-bg { background-color: var(--color-tokens-button-secondary-hover-background); }
@media (hover: hover) and (pointer: fine) {
  .ry-motion-root .cta_primary:hover .btn-bg { background-color: var(--color-tokens-button-primary-hover-background); }
  .ry-motion-root .cta_primary.secondary:hover .btn-bg { background-color: var(--color-tokens-button-secondary-hover-background); }
  .ry-motion-root .cta_primary:hover .button_text-mask > .text-button { translate: 0 -1.5em; }
  .ry-motion-root .cta_primary:hover .icon-wrap_button.right { translate: 2px 0; }
}
@media (max-width: 767px) {
  .ry-motion-press-viewport { --ry-motion-press-gap: var(--spacing--32); }
  .ry-motion-press-group > .ry-cases-press-logo { width: var(--spacing--160); }
}
@media (prefers-reduced-motion: reduce) {
  .ry-motion-root .ry-motion-reveal {
    opacity: 1 !important;
    transform: none !important;
    translate: none !important;
    transition: none !important;
  }
  .ry-motion-hero-enter { animation: none; }
  .ry-motion-press-rail { animation: none; }
  .ry-motion-press-viewport { overflow-x: auto; }
  .ry-motion-press-group[aria-hidden="true"] { display: none; }
  .ry-motion-reviews { animation: none; translate: none; overflow-x: auto; }
  .ry-motion-reviews > [aria-hidden="true"] { display: none; }
  .ry-motion-root .cta_primary .button_text-mask > .text-button,
  .ry-motion-root .cta_primary .icon-wrap_button.right { translate: none !important; transition: none; }
}

/* css/ry-reviews.css */
/* Written Senja reviews inside the original continuous marquee layout. */
.ry-reviews-preview .testimonial_top-tile {
  gap: var(--spacing--24);
}

.ry-reviews-preview .testimonial_top-tile > p {
  color: var(--color-base-base-dark-88);
  font-size: 1.25rem;
  line-height: 1.5;
}

.ry-reviews-preview .ry-review-rating {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .5rem .75rem;
}

.ry-reviews-preview .ry-review-stars {
  display: inline-flex;
  flex: none;
  gap: .1875rem;
  color: #f5c542;
}

.ry-reviews-preview .ry-review-stars svg {
  display: block;
  width: 1.375rem;
  height: 1.375rem;
  fill: currentColor;
}

.ry-reviews-preview .testimonial_bottom-tile {
  gap: var(--spacing--16);
}

.ry-reviews-preview .ry-review-avatar {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  background: var(--color-tokens-background-depth);
  border: 1px solid var(--color-base-base-dark-8);
  color: var(--color-base-base-dark-88);
  font-size: 1.125rem;
  font-weight: 500;
  letter-spacing: -.02em;
}

.ry-reviews-preview .ry-review-avatar > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ry-reviews-preview .text-wrap_testimonial-author {
  min-width: 0;
}

@media (max-width: 767px) {
  .ry-reviews-preview .card_testimonial {
    max-width: min(var(--width--3-columns), calc(100vw - 2 * var(--layout-grid--margin)));
    min-height: 20rem;
  }

  .ry-reviews-preview .testimonial_top-tile {
    gap: var(--spacing--20);
  }

  .ry-reviews-preview .testimonial_top-tile > p {
    font-size: 1.125rem;
  }

  .ry-reviews-preview .ry-review-stars svg {
    width: 1.25rem;
    height: 1.25rem;
  }

  .ry-reviews-preview .ry-review-avatar {
    width: 3.25rem;
    height: 3.25rem;
    font-size: 1rem;
  }

  .ry-reviews-preview .text-wrap_testimonial-author > .text_body-bold {
    font-size: 1rem;
    line-height: 1.5;
  }

  .ry-reviews-preview .text-wrap_testimonial-author > .tone-medium {
    font-size: .875rem;
    line-height: 1.4;
  }
}

.ry-reviews-preview .ry-review-volume { display: block; color: var(--color-tokens-tone-medium); }

/* Reviewer identity details requested for the approved website. */
.ry-reviews-preview .text-wrap_testimonial-author { gap:4px; }
.ry-reviews-preview .ry-review-author-line { display:flex; align-items:center; flex-wrap:wrap; gap:4px 9px; }
.ry-reviews-preview .ry-review-author-line .text_body-bold { font-size:14px; line-height:1.4; }
.ry-reviews-preview .ry-review-verified { display:inline-flex; align-items:center; gap:4px; color:#13854b; font-size:12px; font-weight:500; line-height:1.4; white-space:nowrap; }
.ry-reviews-preview .ry-review-verified svg { display:block; width:14px; height:14px; flex:none; }
.ry-reviews-preview .ry-review-author-meta { display:flex; align-items:center; flex-wrap:wrap; gap:4px 9px; color:var(--color-tokens-tone-medium); font-size:12px; line-height:1.5; }
.ry-reviews-preview .ry-review-country { display:inline-flex; align-items:center; gap:6px; white-space:nowrap; }
.ry-reviews-preview .ry-review-flag { display:block; width:18px; height:12px; border-radius:1px; flex:none; box-shadow:0 0 0 1px #0000000c; }
.ry-reviews-preview .ry-review-author-meta time { font:inherit; color:inherit; }
.ry-reviews-preview .ry-review-meta-dot { color:var(--color-tokens-tone-subtle); }
@media(max-width:767px) {
 .ry-reviews-preview .ry-review-author-line .text_body-bold { font-size:14px; }
 .ry-reviews-preview .ry-review-verified { font-size:11px; }
 .ry-reviews-preview .ry-review-author-meta { font-size:11px; gap:4px 7px; }
}

/* Compact review cards, aligned with the site's body type and card spacing. */
.ry-reviews-preview .card_testimonial { width: 360px; max-width: calc(100vw - 32px); min-height: 0; padding: 24px; gap: 24px; border-radius: 16px; }
.ry-reviews-preview .testimonial_top-tile { gap: 16px; }
.ry-reviews-preview .testimonial_top-tile > p { font-size: 16px; line-height: 1.5; }
.ry-reviews-preview .ry-review-stars svg { width: 18px; height: 18px; }
.ry-reviews-preview .ry-review-avatar { width: 40px; height: 40px; font-size: 14px; }
.ry-reviews-preview .testimonial_bottom-tile { gap: 12px; }
@media (max-width: 767px) { .ry-reviews-preview .card_testimonial { width: 310px; padding: 20px; gap: 20px; } }

/* Equal row tracks let every review card share the tallest natural height. */
#reviews .master_marquee.testimonials { display: grid; grid-template-columns: minmax(0, 1fr); grid-auto-rows: 1fr; }
#reviews .wrap_marquee-testimonials { min-width: 0; }

/* Scale the complete review card while retaining natural layout and row heights. */
#reviews .card_testimonial { zoom: .9; }
