/* One Talori-family touch, response and settle contract. No geometry or device tilt. */
:root {
  --motion-press: 110ms;
  --motion-response: 180ms;
  --motion-surface: 280ms;
  --motion-editorial: 620ms;
  --motion-hero: 850ms;
  --ease-settle: cubic-bezier(.16, 1, .3, 1);
  --ease-response: cubic-bezier(.2, .75, .25, 1);
}

html.nodecast-motion :is(.button, .nc-control, .nc-hero-motion, .menu summary, .language a, .mobile-links a) {
  transition: color var(--motion-response), background-color var(--motion-response),
    border-color var(--motion-response), box-shadow var(--motion-surface),
    transform var(--motion-surface) var(--ease-settle), opacity var(--motion-response);
}
html.nodecast-motion :is(.button, .nc-control, .nc-hero-motion, .menu summary):is(:active, .is-pressed) {
  transform: translateY(1px) scale(.975);
  transition-duration: var(--motion-press);
}
html.nodecast-motion :is(.button, .nc-control, .nc-hero-motion):focus-visible {
  box-shadow: 0 0 0 5px #55b4ff20;
}
html.nodecast-motion :is(.main-nav a:not(.nc-nav-test), .text-link, .footer-links a) {
  background-image: linear-gradient(currentColor, currentColor);
  background-repeat: no-repeat;
  background-position: 0 calc(100% - 7px);
  background-size: 0 1px;
  transition: color var(--motion-response), background-size var(--motion-surface) var(--ease-settle),
    border-color var(--motion-response);
}
html.nodecast-motion :is(.main-nav a:not(.nc-nav-test), .text-link, .footer-links a):is(:hover, :focus-visible) {
  background-size: 100% 1px;
}
html.nodecast-motion .main-nav a:not(.nc-nav-test):hover { border-bottom-color: transparent; }
html.nodecast-motion :is(.text-link, .button) .icon {
  transition: transform var(--motion-surface) var(--ease-settle);
}
html.nodecast-motion :is(.text-link, .button):is(:hover, :focus-visible) .icon { transform: translateX(4px); }
html.nodecast-motion :is(.nc-phone, .nc-mac, .nc-menu-figure) > a {
  transition: transform 420ms var(--ease-settle), filter var(--motion-surface);
}
html.nodecast-motion :is(.nc-phone, .nc-mac, .nc-menu-figure) > a:focus-visible {
  outline: 3px solid var(--cyan);
  outline-offset: 6px;
}
html.nodecast-motion :is(.nc-faq, .guide-list) summary {
  transition: color var(--motion-response), opacity var(--motion-response);
}
html.nodecast-motion :is(.nc-faq, .guide-list) summary:is(:hover, :focus-visible) { color: var(--cyan); }
html.nodecast-motion :is(.nc-faq, .guide-list) summary:is(:active, .is-pressed) { opacity: .72; }
html.nodecast-motion :is(.nc-faq, .guide-list) details[data-disclosure-state=animating] { overflow: hidden; }

@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  html.nodecast-motion :is(.nc-phone, .nc-mac, .nc-menu-figure) > a:hover {
    transform: translateY(-4px);
    filter: brightness(1.035);
  }
  html.nodecast-motion .nc-row { transition: border-color var(--motion-surface); }
}
@media (prefers-reduced-motion: reduce) {
  html.nodecast-motion { scroll-behavior: auto; }
  html.nodecast-motion :is(.button, .nc-control, .nc-hero-motion, .menu summary,
    .nc-phone > a, .nc-mac > a, .nc-menu-figure > a):is(:hover, :active, .is-pressed) {
    transform: none !important;
  }
  html.nodecast-motion *, html.nodecast-motion *::before, html.nodecast-motion *::after {
    transition-duration: 0s !important;
    animation: none !important;
  }
  html.nodecast-motion .pixel-grid { display: block; }
}
