```
def region_totals(grid: list, queries: list) -> list:
    def build_prefix_sum_table():
        if not grid or any(not isinstance(row, list) for row in grid):
            raise ValueError("grid must be a non-empty list of rows")
        
        width = len(grid[0]) if grid else 0
        if width == 0:
            raise ValueError("rows must be non-empty lists")
        
        prefix_sum_table = [[0] * (width + 1) for _ in range(len(grid) + 1)]
        
        for i, row in enumerate(grid):
            if not isinstance(row, list) or len(row) != width:
                raise ValueError("rows must all share one length")
            
            for j, cell in enumerate(row):
                if not isinstance(cell, int):
                    raise ValueError("cells must be integers")
                
                prefix_sum_table[i + 1][j + 1] = (
                    prefix_sum_table[i + 1][j] +
                    prefix_sum_table[i][j + 1] -
                    prefix_sum_table[i][j] +
                    cell
                )
        
        return prefix_sum_table
    
    def query_prefix_sum(top: int, left: int, bottom: int, right: int) -> int:
        if not (0 <= top < len(grid) and 0 <= left < width and 
                0 <= bottom <= len(grid) and 0 <= right <= width):
            raise ValueError("queries must be within the grid bounds")
        
        return (
            prefix_sum_table[bottom][right] -
            prefix_sum_table[top][right] -
            prefix_sum_table[bottom][left] +
            prefix_sum_table[top][left]
        )
    
    prefix_sum_table = build_prefix_sum_table()
    block_totals = []
    
    for query in queries:
        if not isinstance(query, list) or len(query) != 4:
            raise ValueError("queries must be lists of exactly four integers")
        
        top, left, bottom, right = query
        if top >= bottom or left >= right:
            raise ValueError("query top must be strictly less than its bottom and left must be strictly less than its right")
        
        block_totals.append(query_prefix_sum(top, left, bottom, right))
    
    return block_totals
```