:root {
  --button-radius-small: 10px;
  --button-radius-medium: 14px;
  --button-radius-large: 18px;
  --button-radius-pill: 999px;
  --icon-button-size-small: 44px;
  --icon-button-size-medium: 46px;
  --icon-button-size-large: 52px;
  --touch-target-min: 44px;
  --button-height-small: 44px;
  --button-height-medium: 48px;
  --button-height-large: 52px;
  --button-padding-inline: 16px;
  --motion-duration-fast: 120ms;
  --motion-duration-normal: 190ms;
  --motion-duration-slow: 280ms;
  --motion-ease-standard: cubic-bezier(.2, .7, .2, 1);
  --motion-ease-enter: cubic-bezier(.16, 1, .3, 1);
  --motion-ease-exit: cubic-bezier(.4, 0, 1, 1);
  --motion-distance-small: 4px;
  --motion-distance-medium: 10px;
}

button[data-g117a-control="button"] {
  min-block-size: var(--touch-target-min);
  border-radius: var(--button-radius-medium) !important;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  transition:
    transform var(--motion-duration-fast) var(--motion-ease-standard),
    background-color var(--motion-duration-normal) var(--motion-ease-standard),
    border-color var(--motion-duration-normal) var(--motion-ease-standard),
    color var(--motion-duration-normal) var(--motion-ease-standard),
    opacity var(--motion-duration-normal) ease,
    box-shadow var(--motion-duration-normal) var(--motion-ease-standard);
}

button[data-g117a-control="button"]:active:not(:disabled) { transform: scale(.965); }
button[data-g117a-control="button"]:disabled { cursor: not-allowed; opacity: .54; }
button[data-g117a-control="button"][aria-busy="true"] { cursor: progress; }

button[data-g117a-shape="circle"] {
  inline-size: var(--icon-button-size-medium) !important;
  block-size: var(--icon-button-size-medium) !important;
  min-inline-size: var(--icon-button-size-medium) !important;
  min-block-size: var(--icon-button-size-medium) !important;
  aspect-ratio: 1 / 1;
  padding: 0 !important;
  display: inline-grid !important;
  place-items: center !important;
  border-radius: 50% !important;
  line-height: 1;
  flex: 0 0 var(--icon-button-size-medium);
}

button[data-g117a-shape="circle"] > svg,
button[data-g117a-shape="circle"] > span > svg {
  margin: 0;
  transform-origin: center;
}

button[data-g117a-shape="rounded"] {
  min-block-size: var(--button-height-small);
  padding-inline: max(.7rem, var(--button-padding-inline));
  border-radius: var(--button-radius-medium) !important;
}

button[data-g117a-shape="rounded"].wide,
button[data-g117a-shape="rounded"].primary {
  border-radius: var(--button-radius-large) !important;
}

button[data-g117a-control="button"]:focus-visible,
[role="button"]:focus-visible,
[role="tab"]:focus-visible,
[role="switch"]:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--primary, #168fd0) 45%, transparent) !important;
  outline-offset: 2px;
}

.sheet:not(.hidden),
.g116f-mention-suggestions:not(.hidden),
.room-local-menu-panel:not(.hidden),
.toast.show {
  will-change: transform, opacity;
}

.g117a-enter {
  animation: g117a-enter var(--motion-duration-normal) var(--motion-ease-enter) both;
}

@keyframes g117a-enter {
  from { opacity: 0; transform: translateY(var(--motion-distance-small)); }
  to { opacity: 1; transform: none; }
}

html.g117a-background *,
html.g117a-background *::before,
html.g117a-background *::after { animation-play-state: paused !important; }

@media (max-width: 720px), (pointer: coarse) {
  :root {
    --touch-target-min: 48px;
    --icon-button-size-small: 48px;
    --icon-button-size-medium: 48px;
    --button-height-small: 48px;
  }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    scroll-behavior: auto !important;
    animation-duration: .01ms !important;
    animation-delay: 0ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }
  .g117a-enter { animation: none !important; }
}

/* ==========================================================================
 * E5 High Refresh + Rendering Performance
 * High-frequency surfaces are nearly opaque already; sampling a live backdrop
 * behind them while scrolling costs far more than it contributes visually.
 * ========================================================================== */
html[data-hamrah-desktop="windows"] body.g102-app-active .app > .topbar,
html[data-hamrah-desktop="windows"] .chat-header,
html[data-hamrah-desktop="windows"] #chatScreen .composer,
html[data-hamrah-desktop="windows"] .g8-page-header,
html[data-hamrah-mobile-polish="r2"] #app > .bottom-nav,
html[data-hamrah-mobile-polish="r2"] #chatScreen:not(.hidden) .composer {
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}

/* Stop decorative infinite compositor loops while preserving functional
   progress/loading/recording indicators. */
.app > .topbar::after,
.app .mini-brand,
.app .mini-brand svg,
.app .fab,
.profile-pattern,
.profile-hero::after,
.profile-avatar-wrap,
.settings-intro > span,
.settings-intro > span svg,
.about-logo,
.about-logo svg {
  animation:none!important;
}

/* Hotfix4: never invalidate the entire body tree when a scroll burst starts.
   High-frequency Windows chat chrome already disables backdrop sampling above;
   keeping the motion class targeted avoids a full-DOM style recalculation. */

html.g117a-frame-active .g114d3-options button,
html.g117a-frame-active .g114d3-featured button {
  transition:border-color 90ms ease,color 90ms ease!important;
}
html.g117a-frame-active .g114d3-preview {
  transition:none!important;
}

.sheet.hidden,
.g116f-mention-suggestions.hidden,
.toast:not(.show) {
  will-change:auto!important;
}

