{
  "tcpPort": 7777,
  "httpPort": 8080,
  "maxPacketSizeBytes": 1048576,
  "tickMs": 200,
  "positionBroadcastRateMs": 1000,
  "maxSpeedMps": 12.0,
  "movementValidationWindowSec": 5.0,
  "teleportThresholdMeters": 50.0,
  "cheatScoreWarnThreshold": 10,
  "cheatScoreRestrictThreshold": 25,
  "cheatScoreKickThreshold": 50,
  "killDistanceM": 10.0,
  "killCooldownMs": 5000,
  "meetingArrivalRadiusM": 20.0,
  "arrivalBaseMs": 3000,
  "arrivalSafetyMarginMs": 500,
  "allowedLateMs": 2000,
  "discussionPhaseMs": 3000,
  "votingPhaseMs": 10000,
  "emergencyMeetingCooldownMs": 5000,
  "maxEmergencyMeetingsPerPlayer": 3,
  "reportDistanceM": 10.0,
  "taskStartDistanceM": 5.0,
  "taskLeaveDebounceMs": 2000,
  "taskProgressKeepaliveMs": 5000,
  "snapshotEvents": 200,
  "snapshotIntervalMs": 300000,
  "walMaxSizeMb": 10,
  "dataPath": "data",
  "hostTimeoutMs": 15000,
  "reconnectWindowMs": 60000,
  "idleLobbyTtlMs": 3600000,
  "joinCodeTtlMs": 86400000,
  "maxPlayersPerLobby": 15,
  "joinRateLimitPerMinute": 10,
  "sessionKeySizeBytes": 32,
  "rsaKeySizeBits": 2048,
  "statsApiRateLimit": 100,
  "statsApiKey": null,
  "defaultImpostorCount": 1,
  "defaultTaskCount": 5,
  "defaultTiePolicy": "NoEject"
}
