/* Shared touch feedback. Never captures input or changes the layout. */
.portal-touch-pressed {
  box-shadow: inset 0 0 0 100vmax rgba(164, 205, 126, .15) !important;
}
.portal-touch-ripple {
  position: fixed;
  width: 76px;
  height: 76px;
  margin: -38px 0 0 -38px;
  border-radius: 50%;
  pointer-events: none;
  z-index: 2147483647;
  background: radial-gradient(circle, rgba(183, 220, 146, .35) 0 22%, rgba(183, 220, 146, .16) 45%, transparent 72%);
  animation: portal-touch-confirm .34s ease-out both;
}
@keyframes portal-touch-confirm {
  from { transform: scale(.28); opacity: .9; }
  to { transform: scale(1.15); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .portal-touch-ripple { animation: none; opacity: .28; }
}
