```python
def shift_civil_date(date: str, days: int) -> str:
    if not (len(date) == 10 and date[4] == '-' and date[7] == '-'):
        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("Invalid month")
    
    if days < -999900 or days > 999900:
        raise ValueError("Day count magnitude exceeds one million")
    
    def is_leap_year(y: int) -> bool:
        return y % 4 == 0 and (y % 100 != 0 or y % 400 == 0)
    
    month_lengths = [31, 28 if not is_leap_year(year) else 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    while days != 0:
        if days > 0:
            if day + days <= month_lengths[month - 1]:
                day += days
                break
            else:
                days -= (month_lengths[month - 1] - day + 1)
                month += 1
                if month > 12:
                    year += 1
                    month = 1
        else:
            if day + days >= 1:
                day += days
                break
            else:
                days += day
                month -= 1
                if month < 1:
                    year -= 1
                    month = 12
    
    return f"{year:04d}-{month:02d}-{day:02d}"
```