{ "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" }