/* Shared mobile-game interaction policy.
 * Prevent accidental text selection/callouts without disabling page scrolling.
 * Opt a region back into selection with data-allow-selection.
 */
body,
body :where(*),
body :where(*)::before,
body :where(*)::after {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

input,
textarea,
[contenteditable="true"],
[contenteditable=""],
[contenteditable="plaintext-only"],
[data-allow-selection],
[data-allow-selection] * {
  -webkit-user-select: text;
  user-select: text;
  -webkit-touch-callout: default;
}

select,
option {
  -webkit-user-select: auto;
  user-select: auto;
  -webkit-touch-callout: default;
}

button,
[role="button"],
a,
canvas,
svg,
img {
  -webkit-tap-highlight-color: transparent;
}

.game-tip.is-visible {
  pointer-events: auto !important;
  cursor: pointer;
  touch-action: manipulation;
}

.game-tip[role="button"]:focus-visible {
  outline: 3px solid currentColor;
  outline-offset: 3px;
}

/* Opt-in shell convention: the portal tells embedded games when its frame truly
 * owns the viewport. Games still own playfield aspect ratios/composition. */
html[data-webgames-display-mode="fullscreen"] [data-fullscreen-shell] {
  width: 100%;
  max-width: none;
}
