:root {
  --ease-emphasized:        cubic-bezier(.2, 0, 0, 1);
  --ease-emphasized-decel:  cubic-bezier(.05, .7, .1, 1);
  --ease-emphasized-accel:  cubic-bezier(.3, 0, .8, .15);
  --ease-standard:          cubic-bezier(.4, 0, .2, 1);
  --ease-reveal:            cubic-bezier(.22, 1, .36, 1);
  --ease-bounce: linear(
    0, 0.004, 0.016, 0.035, 0.063 9.1%, 0.141, 0.25, 0.391, 0.563, 0.765, 1,
    0.891, 0.813 45.5%, 0.785, 0.766, 0.754, 0.75, 0.754, 0.766, 0.785, 0.813 63.6%, 0.891, 1 72.7%,
    0.973, 0.953, 0.941, 0.938, 0.941, 0.953, 0.973, 1,
    0.988, 0.984, 0.988, 1
  );
  --dur-fast:    180ms;
  --dur-base:    320ms;
  --dur-reveal:  600ms;
  --dur-slow:    900ms;
  --stagger-step: 90ms;
  --z-base:     1;
  --z-sticky:  40;
  --z-header:  50;
  --z-overlay: 60;
  --z-cursor: 9998;
  --z-grain:  9999;
}
html.js .reveal        { transition: opacity var(--dur-reveal) var(--ease-reveal),
                                     transform var(--dur-reveal) var(--ease-reveal); }
html.js [data-stagger] > *        { opacity: 0; transform: translateY(18px);
                                    transition: opacity var(--dur-reveal) var(--ease-reveal),
                                                transform var(--dur-reveal) var(--ease-reveal);
                                    transition-delay: calc(var(--i, 0) * var(--stagger-step)); }
html.js [data-stagger].in > *,
html.js [data-stagger] > .in      { opacity: 1; transform: none; }
.clip-reveal            { overflow: hidden; overflow: clip; }
html.js .clip-reveal    { clip-path: inset(0 0 100% 0); }
html.js .clip-reveal img{ transform: scale(1.12); }
html.js .clip-reveal.in { clip-path: inset(0);
                          transition: clip-path var(--dur-slow) var(--ease-reveal); }
html.js .clip-reveal.in img { transform: scale(1);
                          transition: transform 1.2s var(--ease-reveal); }
.stat-num { font-variant-numeric: tabular-nums; display: inline-block; }
.line-draw path { fill: none; stroke: currentColor; stroke-width: 2;
                  stroke-linecap: round; }
html.js .line-draw path      { stroke-dasharray: 1; stroke-dashoffset: 1; }
html.js .line-draw.in path   { stroke-dashoffset: 0;
                               transition: stroke-dashoffset 1.1s var(--ease-emphasized); }
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .drift { animation: ibix-drift linear both;
             animation-timeline: view();
             animation-range: entry 0% exit 100%; }
    @keyframes ibix-drift {
      from { transform: translateY(6%)  scale(1.06); }
      to   { transform: translateY(-6%) scale(1.06); }
    }
  }
}
@supports (animation-timeline: scroll()) {
  @media (prefers-reduced-motion: no-preference) {
    html { scroll-timeline: --page-scroll block; }
    .scroll-progress { transform: scaleX(0); transform-origin: left center;
                       animation: ibix-grow linear both;
                       animation-timeline: --page-scroll; }
    [dir="rtl"] .scroll-progress { transform-origin: right center; }
    @keyframes ibix-grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
  }
}
@view-transition { navigation: auto; }
::view-transition-old(root),
::view-transition-new(root) { animation-duration: .35s; }
@keyframes ibix-failsafe-fade  { to { opacity: 1; transform: none; } }
@keyframes ibix-failsafe-clip  { to { clip-path: inset(0); } }
@keyframes ibix-failsafe-scale { to { transform: scale(1); } }
@keyframes ibix-failsafe-draw  { to { stroke-dashoffset: 0; } }
html.js:not(.mk) .reveal,
html.js:not(.mk) [data-stagger] > *,
html.js:not(.mk) .hero-line > span { animation: ibix-failsafe-fade  1ms linear 4s forwards; }
html.js:not(.mk) .clip-reveal      { animation: ibix-failsafe-fade  1ms linear 4s forwards,
                                                ibix-failsafe-clip  1ms linear 4s forwards; }
html.js:not(.mk) .clip-reveal img  { animation: ibix-failsafe-scale 1ms linear 4s forwards; }
html.js:not(.mk) .line-draw path   { animation: ibix-failsafe-draw  1ms linear 4s forwards; }
@media (prefers-reduced-motion: reduce) {
  html.js .reveal, .reveal                { opacity: 1; transform: none; transition: none; }
  html.js [data-stagger] > *              { opacity: 1; transform: none;
                                            transition: none; transition-delay: 0s; }
  html.js .clip-reveal                    { clip-path: none; transition: none; }
  html.js .clip-reveal img                { transform: none; transition: none; }
  html.js .line-draw path,
  html.js .line-draw.in path              { stroke-dasharray: none; stroke-dashoffset: 0;
                                            transition: none; }
  .drift, .scroll-progress                { animation: none; transform: none; }
  html.js:not(.mk) .reveal,
  html.js:not(.mk) [data-stagger] > *,
  html.js:not(.mk) .hero-line > span,
  html.js:not(.mk) .clip-reveal,
  html.js:not(.mk) .clip-reveal img,
  html.js:not(.mk) .line-draw path        { animation: none; }
  @view-transition                        { navigation: none; }
}
