```python
def drain_frames(chunks: list, marker: str) -> dict:
    if not isinstance(marker, str) or len(marker) != 1:
        raise ValueError("marker must be a single character")
    buffer = "".join(chunks)
    pending = ""
    frames = []
    current_frame = []
    i = 0

    while i < len(buffer):
        char = buffer[i]
        if char == marker:
            if pending:
                current_frame.append(pending)
                pending = ""
            if i + 1 < len(buffer) and buffer[i + 1] == marker:
                current_frame.append(marker)
                i += 1
                continue
            frames.append(current_frame)
            current_frame = []
        else:
            pending += char
        i += 1

    if pending:
        frames.append(pending)

    return {"frames": frames, "pending": "" if not frames else frames[-1]}
```