3 of 3 added 1928 characters in body

## Retina, 51 47 bytes

Happy birthday from a fellow string-processing language!

Byte count assumes ISO 8859-1 encoding.

.$*$
¶$ O$^r.\G

;{*.¶

(\S.*).¶.
$1¶  Try it online! ### Explanation $
$.$*


This appends n spaces (where n is the string length), by matching the end of the string, retrieving the length of the string with $., and repeating a space that many times with $*.

$¶$


We duplicate the entire string (separated by a linefeed), by matching the end of the string again and inserting the string itself with $. O$^r.\G



This reverses the second line by matching from right-to-left (r), then matching one character at a time (.) but making sure that they're all adjacent (\G). This way, the matches can't get past the linefeed. This is then used in a sort-stage. By using the sort-by mode ($) but replacing each match with an empty string, no actual sorting is done. But due to the ^ option, the matches are reversed at the end, reversing the entire second line. ;{*.¶  This stage is for output and also affects the rest of the program. { wraps the remaining stages in a loop which is repeated until those stages fail to change the string (which will happen because the last stage won't match any more). The ; disables output at the end of the program. The * turns this stage into a dry-run which means that the stage is processed and the result is printed, but afterwards the previous string is restored. The stage itself simply removes a linefeed and the preceding character. Which gives us one line of the desired output (starting with the first line). (\S.*).¶.$1¶


Finally, this stage turns each line into the next. This is done by inserting a space in front of the first non-space character, removing the last character on the first line, as well as the first character on the second line. This process stops once there is only one non-space character left on the first line, which corresponds to the last line of the output.