Cookie Policy
What this site saves in your browser, why it is used and how long it lasts. Updated October 19, 2026.
Google Analytics cookies
Only after you accept analytics, Google Analytics 4 sets _ga (to distinguish browsers) and _ga_<identifier> (to maintain session state). We configure a two-year expiry, refreshed on consenting activity. Browser privacy settings may shorten this. Cookie expiry is not the same as Google’s server-side data retention, which has not been independently confirmed.
Before acceptance, or after rejection, Google’s tag is not loaded and no analytics pings are sent. Advertising consent remains denied. Withdrawal removes accessible first-party GA cookies and reloads the page to stop the already-loaded tag. Data previously received by Google is not deleted by this action.
Persistent localStorage
All the following localStorage items have no automatic expiry. They persist until you clear them, reset the feature, or the browser removes site data. They are not GA cookies and do not enable analytics.
- Coaster Passport — parkrank:visited-parks stores visited parks and visit dates on this device.
- Recently viewed — parkrank:recently-viewed remembers your latest three parks.
- Theme — parkrank-theme remembers light or dark appearance.
- Voting identifier — parkrank:voter-id holds a random browser identifier sent with a vote to help prevent repeat voting.
- Voting selections — parkrank:madness-votes remembers choices and lets the voting page show your recorded vote state.
- Analytics choice — parkrank:analytics-consent stores acceptance or rejection, decision time, notice version and text, plus earlier choices so withdrawal does not erase acceptance evidence.
Comparison and trip session storage
parkrank:compare uses sessionStorage for park comparison selections. parkrank:trip:<park slug> uses sessionStorage for a generated attraction itinerary for that park. Neither has a timed expiry; both normally last until the tab’s browsing session ends, though restored sessions may preserve them. Clearing a trip removes its saved plan.
Coaster comparison and multi-park trip selections also use URL parameters rather than separate persistent localStorage. Shared links disclose those selections to anyone who opens them.
Editor-only and essential storage
Authorized editor sign-in uses browser authentication storage to retain and refresh a session; its validity is controlled by the authentication service. Visitors do not need editor sign-in to use Passport or plan trips. Authentication storage can remain until sign-out or clearing site data; token validity and storage lifetime are separate.
The editor sidebar control, where used, can set sidebar_state to remember its expanded state for seven days. It is not an analytics cookie. The ordinary visitor pages do not use this sidebar control. Hosting and preview infrastructure may also manage essential security or session storage outside the application’s own storage inventory.
Server-side signals are not cookies
Voting also keeps a private, IP-derived fingerprint on the server. It is deleted 30 days after the matchup closes, plus up to 24 hours for daily cleanup, while vote totals remain. Closed matchups whose records are deleted cannot be reopened. IP-derived voting throttle and AI quota records older than 24 hours are cleared daily (up to 48 hours total). Browser voting storage remains until cleared, independently of server cleanup.
Trip requests are processed by Google Gemini through Lovable. More information about processing and your rights is in our Privacy Policy.
Managing stored data
Use Cookie settings in the footer to change analytics consent at any time. Opening settings alone does not change your saved choice. Use your browser’s site-data controls to delete other saved items. Clearing all site storage removes your Passport, history, selections and consent evidence, so the consent prompt will return. If storage is unavailable, your analytics decision applies only to the current visit.
For questions, email cypinlior@gmail.com.