.app {
  --pull-offset: 0px;
  position: relative;
  width: calc(100vw / var(--page-scale));
  height: calc(100vh / var(--page-scale));
  height: calc(100dvh / var(--page-scale));
  padding: clamp(18px, 3vw, 40px);
  overflow-x: hidden;
  transform: translateY(var(--pull-offset)) scale(var(--page-scale));
  transform-origin: top left;
}

.pwa-pull-enabled .app {
  transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
}

.pwa-pull-enabled .app.is-pull-dragging {
  transition: none;
}

.app:has(> .launch:not(.is-covered)) {
  overflow-y: auto;
}

body:is(.calendar-open, .patreon-rss-open, .a2hs-open, .player-expanded, .search-results-open) #app {
  overflow: hidden;
  overscroll-behavior: none;
}

body.search-results-open #app {
  touch-action: none;
}

body.search-results-open .launch-search,
body.search-results-open .launch-search__results,
body.search-results-open .launch-search__panel {
  touch-action: pan-y;
}

body.library-open .app,
body.stats-open .app {
  overflow: hidden;
}

.launch.is-covered {
  pointer-events: none;
  user-select: none;
}

.launch {
  height: 100%;
  min-height: 0;
}
