```python
def fill_template(template: str, values: dict) -> str:
    if not isinstance(template, str):
        raise ValueError("fill_template expects a string template")
    result = []
    i = 0
    n = len(template)
    while i < n:
        if template[i] == "(":
            # Start of a placeholder
            j = i + 1
            while j < n and template[j] != ")":
                j += 1
            if j >= n:
                raise ValueError("unterminated placeholder")
            name = template[i+1:j]
            if not name:
                raise ValueError("placeholder name is empty")
            if not all(c.isalnum() or c == "_" for c in name):
                raise ValueError("placeholder name contains invalid characters")
            if name not in values:
                raise ValueError(f"unknown placeholder name: {name}")
            result.append(str(values[name]))
            i = j + 1
        else:
            result.append(template[i])
            i += 1
    return "".join(result)
```