You are creating the Android project SCAFFOLD + DESIGN SYSTEM for Bookshelf.
READ FIRST: ~/bookshelf/docs/SPEC.md — authoritative, follow exactly.

Environment (already installed, do not reinstall):
  JAVA_HOME=~/toolchain/jdk21 (JDK 21)   ANDROID_HOME=~/toolchain/android-sdk
  Installed: platforms;android-37.0, build-tools;37.0.0, platform-tools
  No emulator/KVM available — you CANNOT run the app. Verify by compiling.

Create a Gradle project at ~/bookshelf/app. Deliver:

1. Working Gradle build: settings.gradle.kts, build.gradle.kts, gradle.properties,
   gradle/libs.versions.toml (version catalog), app/build.gradle.kts, the Gradle
   wrapper (download a wrapper JAR compatible with AGP for compileSdk 37 + JDK 21),
   local.properties pointing at the SDK, and a sensible .gitignore.
   Pick versions that ACTUALLY RESOLVE — check Maven Central / dl.google.com rather
   than guessing. Declare every library from the SPEC in the catalog now, even ones
   later waves will use, so downstream workers never touch build files.
2. AndroidManifest with the permissions the SPEC implies (camera, internet) and a
   single MainActivity hosting Compose.
3. ui/theme: Color.kt, Type.kt, Theme.kt implementing the SPEC palette for BOTH
   light and dark. Dynamic color OFF. Bundle the Literata variable/static TTF in
   res/font (download from the Google Fonts GitHub repo, it is OFL — include the
   license file). Full Material3 ColorScheme for both modes, mapped thoughtfully:
   this app must read as warm paper and mahogany, never as default-Material purple.
4. A small reusable component set in ui/theme or ui/components that later waves will
   build every screen from — at minimum: BookshelfScaffold (topbar w/ serif title +
   gold hairline rule), PaperSurface, GoldDivider, BookCover (Coil, correct 2:3
   aspect, letterpress-ish placeholder when no cover, graceful error state),
   PrimaryButton/SecondaryButton, EmptyState, SyncStatusBar. Make these genuinely
   nice — the owner explicitly cares that this "feels like books". Restrained and
   typographic beats skeuomorphic.
5. Paparazzi configured so Compose renders to PNG on the JVM (no device). Add
   screenshot tests for the component set in BOTH light and dark, run
   `./gradlew recordPaparazziDebug` (or the equivalent task), and confirm real PNGs
   land on disk. If Paparazzi will not cooperate with this AGP/Compose combination
   after a genuine effort, say so plainly in your report and fall back to Robolectric
   + Roborazzi; do not silently skip visual verification.
6. A placeholder MainActivity screen that renders the component set, so wave 3 has a
   living style reference.

MUST end green: `./gradlew assembleDebug` and `./gradlew test` both pass.
Iterate until they do — a broken build blocks every downstream worker.

Write ~/bookshelf/app/BUILD_NOTES.md recording the EXACT resolved versions (AGP,
Gradle, Kotlin, KSP, Compose BOM, Room, Retrofit, Coil, CameraX, ML Kit, WorkManager,
Paparazzi) and any compatibility traps you hit. Downstream workers depend on this.

Do not modify ~/bookshelf/server or ~/bookshelf/docs.
Finish with a <=25 line report: versions, what builds, Paparazzi status, deviations.
