{
  "_comment": "Externalized regex patterns for VerbStrengthValidator. Edit here to iterate on pattern lists without touching Python code. If this file is absent, prompt_validators.py falls back to built-in patterns.",
  "micro_detail_patterns": [
    "jaw(?:\\s+\\S+){0,5}\\s+(tight|clench|set|grind|lock|press|work)",
    "fingers?(?:\\s+\\S+){0,5}\\s+(curl|grip|white|clench|spread|dig|find|trace|press|wrap|drum|tap|trail|wedge|wrench|reach|extend|yank)",
    "knuckle[s]?(?:\\s+\\S+){0,5}\\s+(white|whiten|tight|grip|crack|press|span|encrust)",
    "teeth(?:\\s+\\S+){0,5}\\s+(bare|grit|clench|show|grind|set)",
    "eyes?(?:\\s+\\S+){0,5}\\s+(wid|narrow|lock|track|blaz|squint|dart|scan|dilat|snap|shift|reflect|open|focus)",
    "iris(es)?(?:\\s+\\S+){0,5}\\s+(blaz|glow|dilat|contract|shift|burn|flare)",
    "pupil[s]?(?:\\s+\\S+){0,5}\\s+(dilat|contract|track|wid)",
    "gaze(?:\\s+\\S+){0,5}\\s+(lock|shift|cast|fix|track|assess|sweep|narrow)",
    "brow(?:\\s+\\S+){0,5}\\s+(furrow|raise|knit|crease|heavy)",
    "lips?(?:\\s+\\S+){0,5}\\s+(press|part|crack|thin|curl|tighten|split)",
    "mouth(?:\\s+\\S+){0,5}\\s+(open|press|set|work|crack|tighten)",
    "shoulder[s]?(?:\\s+\\S+){0,5}\\s+(square|brace|hunch|drop|tense|set|pull)",
    "chest(?:\\s+\\S+){0,5}\\s+(ris|heav|expand|compress|tight)",
    "breath(?:\\s+\\S+){0,5}\\s+(held|catch|ragg|quick|shallow|visible|fog)",
    "breathing(?:\\s+\\S+){0,5}\\s+(hard|heavy|ragg|shallow|fast)",
    "muscle[s]?(?:\\s+\\S+){0,5}\\s+(tens|strain|flex|bulg|taut|lock|fire)",
    "tendon[s]?(?:\\s+\\S+){0,5}\\s+(strain|vis|pull|tight|taut)",
    "vein[s]?(?:\\s+\\S+){0,5}\\s+(bulg|vis|pulse|throb|stand)",
    "sweat(?:\\s+\\S+){0,5}\\s+(bead|drip|glisten|sheen|slick)",
    "fist[s]?(?:\\s+\\S+){0,5}\\s+(clench|tight|white|ball|curl)",
    "arm[s]?(?:\\s+\\S+){0,5}\\s+(trem|strain|lock|brace|extend|reach|shake|lunge)",
    "leg[s]?(?:\\s+\\S+){0,5}\\s+(brace|plant|spread|drive|strain|bent|kick|swing|dangle)",
    "boot[s]?(?:\\s+\\S+){0,5}\\s+(plant|slam|dig|press|flat|slide|grip|swing|hit|clear|dangle|hover|leave|aim|land)",
    "wrist(?:\\s+\\S+){0,5}\\s+(glow|amber|compress|strain|turn|twist|press|catch|buckle)",
    "skin(?:\\s+\\S+){0,5}\\s+(flush|pale|tight|pore|goose|sweat|glow|catch|show|bloodless|marble|tighten)",
    "hair(?:\\s+\\S+){0,5}\\s+(whip|catch|slick|fall|mat|cling|crop|frame|close)",
    "hand[s]?(?:\\s+\\S+){0,5}\\s+(trem|shake|grip|clench|reach|press|steady|close|twitch|extend|lift)",
    "palm(?:\\s+\\S+){0,5}\\s+(press|flat|slick|open|close|slam|push)",
    "chin(?:\\s+\\S+){0,5}\\s+(tilt|lift|drop|set|jut|lower|raise)",
    "neck(?:\\s+\\S+){0,5}\\s+(strain|tend|tilt|crane|twist)",
    "body(?:\\s+\\S+){0,5}\\s+(torque|brace|compress|shift|lean|angle|coil|hang|suspend|lift)",
    "weight(?:\\s+\\S+){0,5}\\s+(shift|plant|forward|back|lean|drop|throw|commit)",
    "spine(?:\\s+\\S+){0,5}\\s+(straight|curve|stiffen|arch|rigid)",
    "face(?:\\s+\\S+){0,5}\\s+(flush|pale|set|shift|fill|catch|lit|illuminat|carv|strain)",
    "expression(?:\\s+\\S+){0,5}\\s+(shift|set|war|harden|soften|neutral|stun|falter)",
    "posture(?:\\s+\\S+){0,5}\\s+(emerg|shift|set|square|sag|stiffen|straighten)",
    "grin(?:\\s+\\S+){0,5}\\s+(split|spread|commit|falter|flash|widen|set)",
    "eyelash(es)?(?:\\s+\\S+){0,5}\\s+(shatter|frost|crust|catch|cling|frozen|break)",
    "toe[s]?(?:\\s+\\S+){0,5}\\s+(catch|point|clear|hover|curl|grip|dig)",
    "sole[s]?(?:\\s+\\S+){0,5}\\s+(separ|hover|clear|worn|flat|press|land)",
    "knee[s]?(?:\\s+\\S+){0,5}\\s+(compress|bend|buckle|lock|drive|bend|flex)",
    "frost[- ]whiten",
    "sweat[- ]blacken",
    "white[- ]knuckle",
    "cryo[- ]pallor",
    "scar(red)?\\s+(fist|knuckle|skin|hand)",
    "rust(?:\\s+\\S+){0,5}\\s+(cascad|flak|crumbl|dust|peel|scat|fall|drift|curl|land|streak|catch|melt)",
    "spark[s]?(?:\\s+\\S+){0,5}\\s+(erupt|fly|shower|burst|scatter|arc|die|catch|ignit|trail)",
    "frost(?:\\s+\\S+){0,5}\\s+(crack|shatter|melt|cryst|form|cling|break|radi|residu|encrust|catch|refract|fragment)",
    "metal(?:\\s+\\S+){0,5}\\s+(groan|scream|creak|screech|bend|buckle|yield|gleam|catch)",
    "grating(?:\\s+\\S+){0,5}\\s+(vibrat|rattle|clang|ring|shake|corrode)",
    "counter(?:\\s+\\S+){0,5}\\s+(tick|glow|pulse|climb|flash|blaze|cast|bleed|radiat)",
    "gas(?:\\s+\\S+){0,5}\\s+(erupt|vent|billow|blast|hiss|cloud|rush|clear|dissipat|burn)",
    "condensation(?:\\s+\\S+){0,5}\\s+(bead|drip|form|fog|cloud|mist|weep)",
    "light(?:\\s+\\S+){0,5}\\s+(catch|refract|scatter|pool|wash|cast|die|flick|carv|illuminat|plung|punch|intensif)",
    "shadow[s]?(?:\\s+\\S+){0,5}\\s+(carv|pool|deep|shift|fall|stretch)",
    "debris(?:\\s+\\S+){0,5}\\s+(suspend|float|scatter|fall|drift|hang|tumbl)",
    "particl[e]?(?:\\s+\\S+){0,5}\\s+(hang|drift|float|suspend|swirl|ignit|glow|catch)",
    "vapor(?:\\s+\\S+){0,5}\\s+(explod|billow|dissipat|clear|hang|drift|burn)",
    "digit[s]?(?:\\s+\\S+){0,5}\\s+(tick|cast|climb|glow|pulse|flash)",
    "beam(?:\\s+\\S+){0,5}\\s+(plung|punch|whip|carv|cut|catch|sweep|angle|point|die|swing)",
    "glow(?:\\s+\\S+){0,5}\\s+(cast|wash|climb|pulse|radiat|bleed|intensif|warm|amber|steady)",
    "flakes?\\s+drift",
    "drip(ping|s)?\\s+from",
    "hum(ming|s)?\\s+",
    "vibrat(ing|e|es)\\s+through",
    "catching\\s+(amber|light|glow|fire)",
    "hanging\\s+motionless",
    "pulsing\\s+(steady|with|blue|amber|warm|faint)",
    "refracting\\s+",
    "gleam(ing)?\\s+impossible",
    "weeping\\s+condensation",
    "corroded\\s+(wall|ladder|grating|metal|surface|catwalk|steel)",
    "amber\\s+(emergency|glow|light|LED|counter|readout)",
    "blue-white\\s+(glow|light|pulse|machinery|systems|pod|internal)",
    "dissipating\\s+(cryogenic|gas|vapor|mist|fog|smoke)",
    "outline\\s+of\\s+something\\s+(massive|enormous|huge|vast)",
    "shrouded\\s+in\\s+(dissipating|cryogenic|gas|vapor|mist|fog)"
  ],
  "bare_patterns": [
    "^(standing|sitting|looking|holding|walking|waiting|watching|staring|leaning) (in|at|on|by|near|toward|against|into) ",
    "^(a|the) (woman|man|figure|person|character|salvager) (stands|sits|looks|holds|walks|waits|watches|stares|leans) "
  ]
}
