```python
def drain_frames(chunks: list, marker: str) -> dict:
    if len(marker) != 1:
        raise ValueError("Marker must be a single character")

    frames = []
    pending_text = ""
    buffer = "".join(chunks)

    i = 0
    while i < len(buffer):
        if buffer[i:i+len(marker)] == marker * 2:
            frames.append(pending_text)
            pending_text = marker
            i += len(marker) * 2
        elif buffer[i:i+len(marker)] == marker:
            frames.append(pending_text)
            pending_text = ""
            i += len(marker)
        else:
            pending_text += buffer[i]
            i += 1

    return {"frames": frames, "pending": pending_text}
```