*, *::before, *::after { box-sizing: border-box; }

html, body {
  margin: 0;
  height: 100%;
  overscroll-behavior: none;
  background: var(--c-base);
  color: var(--c-text);
  font-family: var(--font-main);
}

button { font-family: inherit; border: none; background: none; padding: 0; }
a { color: inherit; text-decoration: none; }
img { -webkit-user-drag: none; pointer-events: none; user-select: none; }

.app-shell {
  position: relative;
  width: 100%;
  max-width: 480px;
  height: 100dvh;
  margin: 0 auto;
  overflow: hidden;
  background: var(--c-base);
  touch-action: manipulation;
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

.screen {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
}
.screen[hidden] { display: none !important; }

.loading-overlay {
  position: absolute;
  inset: 0;
  z-index: 100;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--c-base);
  color: var(--c-sub);
  font-size: 14px;
  font-weight: 700;
}
.loading-overlay[hidden] { display: none !important; }

.panel {
  position: relative;
  flex: 0 0 auto;
  margin-top: -24px;
  border-radius: var(--r-panel) var(--r-panel) 0 0;
  background: var(--c-panel);
  color: var(--c-panel-text);
  display: flex;
  flex-direction: column;
  align-items: center;
  box-sizing: border-box;
  padding-bottom: calc(34px + env(safe-area-inset-bottom, 0px));
}

.btn {
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.btn--primary {
  background: var(--c-button);
  color: var(--c-button-text);
  border-radius: var(--r-button);
  box-shadow: 0 6px 0 var(--c-button-shadow);
  font-weight: 900;
  transition: transform 100ms ease, box-shadow 100ms ease;
}
.btn--primary:active,
.btn--primary.is-pressed {
  transform: translateY(4px);
  box-shadow: 0 2px 0 var(--c-button-shadow);
}
.btn--primary:disabled {
  opacity: 0.5;
  cursor: default;
  transform: none;
  box-shadow: 0 6px 0 var(--c-button-shadow);
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
