/* ABOUTME: Defines the tactile, keyboard-aware interaction contract for native buttons. */

/* ABOUTME: Applies the same contract to intentional button-like links via .ui-pressable. */

:is(
  button,
  summary,
  input[type="button"],
  input[type="reset"],
  input[type="submit"],
  .ui-pressable
) {
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
  transition: scale var(--transition-release) var(--ease-pop),
    background-color 0.15s var(--ease-out),
    border-color 0.15s var(--ease-out),
    box-shadow 0.15s var(--ease-out),
    color 0.15s var(--ease-out),
    opacity 0.15s var(--ease-out),
    padding 0.2s var(--ease-out),
    transform 0.2s var(--ease-out);
}

:is(
  button,
  summary,
  input[type="button"],
  input[type="reset"],
  input[type="submit"],
  .ui-pressable
):focus {
  outline: none;
}

html:not([data-input-mode="pointer"]) :is(
  button,
  summary,
  input[type="button"],
  input[type="reset"],
  input[type="submit"],
  .ui-pressable
):focus-visible {
  outline: 2px solid var(--orange);
  outline-offset: 2px;
}

:is(
  button,
  summary,
  input[type="button"],
  input[type="reset"],
  input[type="submit"],
  .ui-pressable
):active:not(:disabled, [disabled], [aria-disabled="true"], [data-ui-press="none"]) {
  scale: var(--ui-press-scale, 0.97);
  transition-duration: var(--transition-press);
  transition-timing-function: var(--ease-spring);
}

/* Small circular controls need a larger delta to read at a glance. */
.ui-pressable--icon {
  --ui-press-scale: 0.9;
}

/* Back navigation benefits from an unmistakable press on compact controls. */
.ui-pressable--back {
  --ui-press-scale: 0.82;
}

:is(
  button,
  input[type="button"],
  input[type="reset"],
  input[type="submit"],
  .ui-pressable
):is(:disabled, [disabled], [aria-disabled="true"]) {
  scale: 1;
}

@media (prefers-reduced-motion: reduce) {
  :is(
    button,
    summary,
    input[type="button"],
    input[type="reset"],
    input[type="submit"],
    .ui-pressable
  ) {
    scale: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
