Convert CSV to Table The Challenge

Given a CSV input, output a proper unicode table using box characters.

Formatting

The table will be formatted using the following rules:


Column width will be equal to the longest value of that column
All table data will be left justified
Each table will assume the first csv row to be the header
The table will use the following characters for its borders:


┌  ┬  ┐  ├  ┼  ┤ └  ┴  ┘   ─  │

Example

Input:
Name,Age,Gender
Shaun,19,Male
Debra,19,Female
Alan,26,Male
George,15,Male

Output:
┌──────┬───┬──────┐
│Name  │Age│Gender│
├──────┼───┼──────┤
│Shaun │19 │Male  │
│Debra │19 │Female│
│Alan  │26 │Male  │
│George│15 │Male  │
└──────┴───┴──────┘


Rules


Standard loopholes apply
You may submit a full program, a function or a lambda
Input can be from a file, a program argument or any acceptable alternative
Output can be to a file, returned or any acceptable alternative
CSV input should take the same format as used in my example.
Shortest answer in bytes wins.


CSV input should take the following form:

Header1,Header2,Header3 newline
Column1,Column2,Column3 newline
Column1,Column2,Column3 optional_newline
Try (Dyalog) APL, 38 43 bytes

Last input line must have a trailing newline.
{{(⊃⍵)⍪⍉⍪↑¨↓⍉↑1↓⍵}s¨',',¨(s←1↓¨⊢⊂⍨⊢=⊃)¯1⌽⍵}

Try it online! In the offline version of Dyalog APL, execute ]boxing ON -style=min for the same effect.
Explanation
{ ... } an anonymous function where ⍵ represents the argument:
 ¯1 ⌽ ⍵ rotate the trailing newline to the front
 (s ←  ... ) define the function s as follows, and apply it
  1 ↓¨ drop the first character of each
  ⊢ ⊂⍨ line, split where
  ⊃ = ⊢ the first character equals the characters in the string
 ',' ,¨ then prepend a comma to each line
 s¨ apply the function s to each line
 { ... } now apply the following anonymous function:
  1 ↓ ⍵ drop the first element (the row headers)
  ↓ ⍉ ↑ transpose the list of rows into list of columns
  ↑¨ make each element (a list of entries) into a matrix of padded entries
  ⍉ ⍪ make into one-column matrix, then transpose into one-row matrix
  (⊃⍵) ⍪ put the argument's first element (the list of headers) on top`
Note: While the line drawing characters are not explicitly used in my solution, they are part of the APL character set, and would also be counted as single bytes.