This was very hard to notice, and to fix after noticing. It's very confusing that viewport.x and viewport.y are surface coordinates, but viewport.w and viewport.h are viewport distances.
N7VEV7NFK7WCJPSA3PG5DXXJH36HKM7T253EZIDEVJRRUAAVQUXQC
love.graphics.rectangle('fill', vx(Save_viewport.x), vy(Save_viewport.y), scale(Save_viewport.w), scale(Save_viewport.h))
love.graphics.rectangle('fill', vx(Save_viewport.x), vy(Save_viewport.y), scale(Save_viewport.w/Save_viewport.zoom), scale(Save_viewport.h/Save_viewport.zoom))