{
  "$schema": "https://refundrush.example/schemas/game-manifest-v1.json",
  "game": {
    "id": "refund_rush",
    "name": "Refund Rush",
    "version": "1.0.0",
    "studio": "Oki Studios",
    "release_date": "2026-04-18",
    "category": "video_slot",
    "subcategory": "themed_jackpot",
    "theme": ["finance", "tax_refund", "americana"],
    "tags": ["hold-and-spin", "free-spins", "ways-to-win", "progressive-jackpot", "high-volatility"],
    "available_skins": [
      {"id": "refund_rush", "name": "Refund Rush", "status": "primary"},
      {"id": "trucker_tom", "name": "Trucker Tom", "status": "same_engine_skin_pending_math_cert"},
      {"id": "diner_dough", "name": "Diner Dough", "status": "same_engine_skin_pending_math_cert"},
      {"id": "dealers_choice", "name": "Dealer's Choice", "status": "same_engine_skin_pending_math_cert"},
      {"id": "space_wins", "name": "Cosmic Cashout", "status": "same_engine_skin_pending_math_cert"}
    ]
  },
  "engine": {
    "type": "html5",
    "renderer": "pixijs_8",
    "min_browser": {
      "chrome": 100,
      "safari": 15,
      "firefox": 100,
      "edge": 100
    },
    "mobile_supported": true,
    "orientation_support": ["landscape", "portrait"]
  },
  "math": {
    "certification_status": "PRE_CERT_BLOCKED",
    "rtp_default_pct": null,
    "rtp_configurable_targets": [88, 92, 96],
    "rtp_target_to_actual": {"88": null, "92": null, "96": null},
    "_rtp_doc": "Current runtime math is not lab-ready. Certgate and staged 1B simulation reconciliation now pass for the current 96-target hash, but the exact Direct Deposit pot-ladder PAR layer remains lab-grade blocked. Current 1B staged evidence is 96.022224% RTP with +/-0.052142 pp 95% CI half-width; keep public RTP fields null until business/compliance signoff and external lab acceptance. See docs/evidence/readiness/current_math_recert_candidate.md.",
    "volatility": "high",
    "volatility_index": null,
    "max_win_multiplier": null,
    "non_progressive_max_win_multiplier": 10000,
    "_max_win_doc": "Non-progressive wins are capped at 10000x total bet. Minor and Grand pool progressives are uncapped must-hit-on-win pools and can grow until awarded, so the total game maximum is not a fixed multiplier.",
    "hit_frequency_pct": null,
    "reels": 5,
    "rows": 3,
    "paylines": 0,
    "ways_to_win": 243,
    "_scoring_doc": "v2: all-ways scoring (3^5 = 243). Lines model retired in 2026-04-21 math overhaul.",
    "min_bet_units": 100,
    "max_bet_units": 2500000,
    "currency_minor_units": 100,
    "rng": {
      "type": "csprng",
      "source": "secrets.randbelow (Python stdlib, OS-backed)",
      "audit_log": true,
      "certifiable": true
    }
  },
  "features": {
    "_doc": "v2 survivor set: free_spins, direct_deposit, receipt_meter, progressive_jackpots + 2 random events (DD Alert, Rush Hour).",
    "free_spins": {
      "name": "Bonus Season",
      "trigger": "3+ scatters anywhere on the reels",
      "spin_counts": [10, 15, 20],
      "retrigger": true,
      "retrigger_max_spins": 50,
      "multiplier_ladder": [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5],
      "_multiplier_doc": "Current runtime standard ladder first 16 spins; not certified while PRE_CERT_BLOCKED.",
      "rtp_contribution_pct": null
    },
    "direct_deposit": {
      "name": "Direct Deposit",
      "type": "hold_and_respin",
      "trigger": ["6+ dollar symbols", "receipt meter maximum"],
      "respins_initial": 3,
      "respins_reset_on_landing": true,
      "respins_max_overtime": 2,
      "audit_doubles_locked_values": true,
      "audit_max_per_feature": 2,
      "rtp_contribution_pct": null
    },
    "receipt_meter": {
      "name": "Refund Meter",
      "type": "fill_to_threshold",
      "thresholds": {
        "standard_deduction": 30,
        "itemized_deduction": 65,
        "maximum_refund": 300
      },
      "_threshold_doc": "Current runtime thresholds; not certified while PRE_CERT_BLOCKED.",
      "maximum_auto_triggers": "direct_deposit",
      "pitch": "Even your cold spins are stacking your refund.",
      "rtp_contribution_pct": null
    }
  },
  "progressives": {
    "linked": false,
    "uncapped_pool_tiers": ["minor", "grand"],
    "tiers": [
      {"id": "mini",  "name": "Coin Jar",        "type": "fixed", "seed_minor_units": 100000,   "contribution_pct": null},
      {"id": "minor", "name": "Side Hustle",     "type": "uncapped_pool", "seed_minor_units": 500000,   "contribution_pct": null},
      {"id": "major", "name": "Year-End Bonus",  "type": "fixed", "seed_minor_units": 5000000,  "contribution_pct": null},
      {"id": "grand", "name": "Jackpot Refund",  "type": "uncapped_pool", "seed_minor_units": 50000000, "contribution_pct": null}
    ],
    "_contribution_doc": "Contribution percentages require current-hash certification reconciliation before operator publication.",
    "trigger_modes": ["random_per_spin", "feature_grid_fill", "feature_pick"]
  },
  "random_events": [
    {"id": "dd_alert",  "name": "DD Alert (Wild Reels)", "frequency_per_spin": "REQUIRES_CURRENT_HASH_REVALIDATION"},
    {"id": "rush_hour", "name": "Rush Hour",             "frequency_per_spin": "REQUIRES_CURRENT_HASH_REVALIDATION", "duration_spins": 5, "multiplier": 2}
  ],
  "_random_events_doc": "Current survivor pair: DD Alert + Rush Hour. Trigger probabilities are runtime-configured but require current-hash certification reconciliation before operator publication.",
  "currencies_supported": [
    "USD", "EUR", "GBP", "CAD", "AUD", "JPY", "BRL", "INR", "MXN", "SEK", "NOK", "DKK"
  ],
  "languages_supported": ["en"],
  "languages_planned": ["es", "fr", "de", "pt", "it", "sv", "ja", "ko", "zh"],
  "responsible_gaming": {
    "modes": ["off", "strict"],
    "strict_mode_enforces": [
      "autoplay_max_100_spins",
      "min_spin_time_2500ms",
      "min_big_win_hold_2500ms",
      "session_time_hud",
      "reality_check_60min",
      "self_exclusion",
      "ldw_celebration_suppression",
      "demo_currency_disclaimer"
    ],
    "self_exclusion_durations_seconds": [3600, 86400, 604800, 2592000],
    "loss_limit_supported": true,
    "session_stats_visible": true,
    "anti_frustration_pity_enabled": true
  },
  "integration": {
    "rgs_protocol": "REST",
    "rgs_endpoints_base": "/api/v1/game",
    "wallet_models_supported": ["seamless", "transfer", "demo"],
    "session_auth": "hmac_sha256_bearer_token",
    "idempotency": "round_id_based",
    "currencies_per_session": "single",
    "spec_doc": "./integration_spec.md",
    "math_doc": "./par_sheet.md",
    "manifest": "./game_manifest.json"
  },
  "assets": {
    "logo": "/assets/logo/logo_primary.png",
    "icon": "/assets/logo/logo_icon.png",
    "thumbnail_1x1": "/aggregator/assets/thumb_1024.png",
    "banner_16x9": "/aggregator/assets/banner_1920x1080.png",
    "portrait_9x16": "/aggregator/assets/portrait_1080x1920.png",
    "category_card_16x9": "/aggregator/assets/card_640x360.png",
    "demo_video_url": "/aggregator/assets/demo.mp4"
  },
  "certifications": {
    "current_status": "DEMO_INTAKE_ONLY_NOT_CERTIFIED",
    "current_math_hash": "6eb62f1916cf1e3567a6ba6c37eac92db73b1cc47b9f48204e8e015d9300ace1",
    "pinned_math_hash": "6eb62f1916cf1e3567a6ba6c37eac92db73b1cc47b9f48204e8e015d9300ace1",
    "recert_candidate_manifest": "/docs/evidence/readiness/current_math_recert_candidate.json",
    "rng_audit": "EXTERNAL_AUDIT_NOT_STARTED",
    "math_audit": "EXTERNAL_AUDIT_NOT_STARTED",
    "jurisdictions_target": ["UK", "MGA", "AGCO", "DGOJ", "ADM"]
  }
}
