Spring practice recap: offense