```python
def region_totals(grid: list, queries: list) -> list:
    """
    Calculate the sum of each specified rectangular block in the grid.

    :param grid: A non-empty list of rows, each row a non-empty list of integers.
    :param queries: A list of four-element lists [top, left, bottom, right].
    :return: A list of sums corresponding to each query.
    """
    if not grid or not grid[0]:
        raise ValueError("Grid must have at least one row and one cell.")
    
    rows = len(grid)
    cols = len(grid[0])
    
    # Validate grid dimensions
    for i in range(1, rows):
        if len(grid[i]) != cols:
            raise ValueError("All rows must have the same length.")
    
    # Validate queries
    for query in queries:
        if not isinstance(query, list) or len(query) != 4:
            raise ValueError("Each query must be a four-element list.")
        
        top, left, bottom, right = query
        
        if not (0 <= top < rows and 0 <= left < cols and
                0 < bottom <= rows and 0 < right <= cols):
            raise ValueError("Query out of bounds or invalid dimensions.")
    
    # Build prefix-sum table
    prefix_sum = [[0] * (cols + 1) for _ in range(rows + 1)]
    
    for i in range(1, rows + 1):
        for j in range(1, cols + 1):
            prefix_sum[i][j] = grid[i - 1][j - 1] + \
                               prefix_sum[i - 1][j] + \
                               prefix_sum[i][j - 1] - \
                               prefix_sum[i - 1][j - 1]
    
    # Calculate block totals
    results = []
    for query in queries:
        top, left, bottom, right = query
        total = (prefix_sum[bottom][right] -
                prefix_sum[top][right] -
                prefix_sum[bottom][left] +
                prefix_sum[top][left])
        results.append(total)
    
    return results
```