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

html {
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: var(--leading-normal);
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
  -webkit-text-size-adjust: 100%;
  -webkit-tap-highlight-color: transparent;
}

body {
  min-height: 100dvh;
  padding-top: env(safe-area-inset-top);
  padding-bottom: env(safe-area-inset-bottom);
  overflow-x: hidden;
}

h1, h2, h3 {
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
  letter-spacing: var(--tracking-tight);
}

h2 { font-size: var(--text-lg); }
h3 { font-size: var(--text-md); }

a { color: var(--accent); text-decoration: none; }

input, button, select, textarea {
  font: inherit;
  color: inherit;
  border: none;
  outline: none;
  background: none;
}

button { cursor: pointer; }
img, svg { display: block; max-width: 100%; }

.hidden { display: none !important; }
.text-muted { color: var(--ink-2); }
.text-caption { color: var(--ink-3); font-size: var(--text-xs); }
.text-mono { font-family: var(--font-mono); }
.text-center { text-align: center; }

.fade-in {
  animation: fadeIn var(--duration) var(--ease);
}
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

::-webkit-scrollbar { width: 0; height: 0; }
