Simulate my keyboard wave light!
Haskell, 229 bytes

e=zip[0..]
x!y=abs$x-y
k=e[&quot;Q W E R T Y U I O P&quot;,&quot; A S D F G H J K L&quot;,&quot;  Z X C V B N M&quot;]
f c=filter(any(&lt;&quot;a&quot;).words)[unlines[[[z..]!!sum[32|z&gt;'@',max(2*y!i)(y!i+x!j)/=d*2]|(x,z)&lt;-e m]|(y,m)&lt;-k]|(i,l)&lt;-k,(j,h)&lt;-e l,c==h,d&lt;-[0..9]]

Try it online!
f takes an uppercase char argument and returns a list of multiline strings.
It loops over the keyboard layout looking for (i,j), the position of the given character. When it finds it, for each d&lt;-[0..9] it generates a string (unlines[…]) of the keyboard with all letters not d hex-steps away lowercased. It never takes longer than 10 steps for the wave to leave the keyboard, so this is OK. Finally, strings that don't contain any uppercase letters are filtered away from the result.
I calculate the hex distance between two points on the keyboard as: \$ \max\left(2|y_1-y_2|, |x_1-x_2|+|y_1-y_2|\right)\$. Here are some distances around a point under this metric:
   6666666                                 6 6 6 6
  654444456                               6 4 4 4 6
 65432223456                             6 4 2 2 4 6
6543210123456  --&gt; on staggered grid:   6 4 2 0 2 4 6
 65432223456                             6 4 2 2 4 6
  654444456                               6 4 4 4 6
   6666666                                 6 6 6 6