Why are some place holders '@' and others '%'?
Have a look into the function definition of the format_string()
 function which is used by the t() function:

Each type of placeholder has a way in which this function intrepretes it:

@variable: Escaped to HTML using check_plain(). Use this as the default choice for anything displayed on a page on the site.
%variable: Escaped to HTML and formatted using drupal_placeholder(), which makes it display as &lt;em&gt;emphasized&lt;/em&gt; text.
!variable: Inserted as is, with no sanitization or formatting. Only use this for text that has already been prepared for HTML display (for example, user-supplied text that has already been run through check_plain() previously, or is expected to contain some limited HTML tags and has already been run through filter_xss() previously).