```python
def merge_settings(base: dict, ours: dict, theirs: dict) -> dict:
    if not all(isinstance(key, str) for key in ours) or not all(isinstance(key, str) for key in theirs):
        raise ValueError("Both ours and theirs must be flat mappings of string values.")
    
    merged = {}
    for key in base:
        if key in ours and key in theirs:
            if ours[key] == theirs[key]:
                merged[key] = ours[key]
            elif ours[key] != theirs[key]:
                merged[key] = theirs[key]
        elif key in ours:
            merged[key] = ours[key]
        elif key in theirs:
            merged[key] = theirs[key]
        else:
            merged[key] = None
    
    for key in ours:
        if key not in base:
            merged[key] = ours[key]
    
    for key in theirs:
        if key not in base:
            merged[key] = theirs[key]
    
    return merged
```