Write a function to parse and extract specific key-value pairs from a nested, unstructured text document.
Implement extract_key_values(document, keys), returning a dictionary that maps each requested key to its values in document order. Keys use identifier characters plus ., _, and -; assignments use : or =, and values may be quoted, escaped, nested, or repeated.
Input: two strings or a list of strings. Output: dict[str, list[str]]. Quoted delimiters must remain part of the value, and missing keys are omitted.
Example: events { status: pending; status: "needs, review" } with keys = ["status"] returns {"status": ["pending", "needs, review"]}. Constraints: document length is at most 5,000 characters.
., _, and -: or =def extract_key_values(document, keys):