```python
def shift_civil_date(date: str, days: int) -> str:
    if not (4 == len(date.split('-')) and date.isdigit()):
        raise ValueError("Invalid date format")
    
    year = int(date[:4])
    month = int(date[5:7])
    day = int(date[8:])
    
    if not (1 <= month <= 12):
        raise ValueError("Month out of range")
    
    if day < 1 or (month == 2 and day > 29) or ((month in {4, 6, 9, 11}) and day > 30):
        raise ValueError("Day out of range for the given month")
    
    if not isinstance(days, int):
        raise ValueError("Day count must be an integer")
    
    if days < -999999 or days > 999999:
        raise ValueError("Day count magnitude exceeds one million")
    
    if year < 1 or year > 9999:
        raise ValueError("Year out of range")
    
    month_lengths = [31, 28 + (year % 4 == 0 and year % 100 != 0 or year % 400 == 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    while days:
        if days > 0:
            day += 1
            if day > month_lengths[month - 1]:
                day = 1
                month += 1
                if month > 12:
                    month = 1
                    year += 1
        else:
            day -= 1
            if day < 1:
                month -= 1
                if month < 1:
                    month = 12
                    year -= 1
                day = month_lengths[month - 1]
        
        days += -1 if days > 0 else +1
    
    return f"{year:04d}-{month:02d}-{day:02d}"
```