Continuum is a daily ranking calibration game published at scalargame.com/continuum as part of the ScalarGame platform. Three anchor cards are pre-placed on a sorted timeline at game start. A deck of incoming cards arrives one at a time — name visible, value hidden. Drag each into the right position in the ranking. Three wrong placements ends the run. Score is the number of correctly placed cards.
How It Works
Each daily puzzle is seeded via a Mulberry32 PRNG from the date, which selects both a category (Countries or Elements) and a specific numeric metric to rank by. That combination determines the entire deck for the day — every player worldwide sees the same puzzle.
Anchors: Three cards are pre-placed at game start — one drawn from the bottom 5th percentile, one from the 40th–60th (mid), and one from the top 5th. These give you fixed reference points before the first move.
Card Dealing — Fuzzy Bisection: Each new card targets the largest open gap in the timeline, then picks a card whose actual value falls in the middle 50% of that gap. This ensures each placement is a genuine calibration challenge — never trivially at either extreme of an interval.
Feedback on Error: A wrong placement doesn't remove the card. It flickers, slides to its correct position, and becomes a permanent anchor for all future bisection calculations. The incorrectly placed card is marked with a red left border on the end screen.
Categories & Metrics
| Category | Eligible Metrics |
|---|---|
| Countries | Population, Area, GDP per Capita |
| Elements | Atomic Number, Density, Atomic Radius |
The daily PRNG picks one metric from the eligible set for each category, so the specific challenge changes day to day even within the same category.
Drag & Drop
Continuum uses the Pointer Events API rather than the HTML5 Drag and Drop API — the HTML5 API is incompatible with mobile touch. A drag ghost follows the cursor with an opacity fade. Gap highlighting activates as the ghost passes over intervals. The same interaction works identically on desktop (mouse) and mobile (touch).
Android devices receive haptic feedback via the Vibration API: an 8ms pulse when the ghost crosses a gap boundary, and a `[60,50,60,50,120]ms` stutter-thud pattern on a wrong placement. iOS blocks the Vibration API.
Scoring & Streaks
Score equals the count of correctly placed cards. No move penalties, no time pressure.
Streaks increment on the first completed daily round per calendar date. If a day is missed the streak resets to zero on the next app load — there's no grace window. Free Play mode preserves all stats without affecting the daily streak.
Modes
- Daily — counts toward streak and lifetime stats; same puzzle for all players
- Free Play — random past date, suppresses stats
Design
The layout splits the viewport: the sorted timeline occupies the left 60% (highest value at top, cards stacked vertically), and the current card to place sits in the right 40%. On mobile the layout stacks with a hamburger nav; the timeline is scrollable.
The wordmark — Continuum in Geist Mono bold — inserts a random decimal point at a different position each render (`.con tinuum`, `continu.um`, etc.) with the decimal rendered in teal. Tagline: `daily · calibration` above, `rank · place · repeat` below.
State
Zustand store (`continuum-game-storage`, v4) persists the daily round result, streak, and lifetime stats. In-progress placements are intentionally not persisted — reloading mid-game starts the round over. Free-play date and mode are persisted. Streak rehydration checks `lastFinishedDate` on load: if it's older than yesterday, the streak resets immediately.