05AB1E, 67 62 62 59 bytes
4*<U₄RX∍2ì3«©4DjRXÌ∍®3LÂ6+‡‚I·<∍`®3L564*<U₄RX∍2ì3«©4DjRXÌ∍®āžm‡‚I·<∍`®ā56(‡»žm(•dÃи“·”.•29вŽb[+ç‡
Try it onlineTry it online or verify all test casesverify all test cases.
4* # Multiply the (implicit) input-integer by 4
< # Decrease it by 1
U # Pop and store this input*4-1 in variable `X`
₄ # Push 1000
R # Reverse it: "0001"
X∍ # Extend/shorten it to length `X`
2ì3« # Prepend a 2 and append a 3
© # Store it in variable `®` (without popping)
4 # Push 4
D # Duplicate it
j # Pad leading spaces to make it that length: " 4"
R # Reverse it: "4 "
XÌ∍ # Extend/shorten it to length `X+2` (aka input*4+1)
® # Push string `®`
3Lā # Push list [1,2,3]
 a list in #the Bifurcaterange it[1, short for Duplicate &length] Reverse(without copypopping): [3[1,2,1]3,...]
žm 6+ # Add 6 to eachPush value:constant [9,8,7]9876543210
‡ ‡ # Transliterate 1,2,3 to 9,8,7 in string `®`
# (the other values that aren't present in `®` are no-ops)
‚ # Pair the top two strings together
I·<∍ # Extend/shorten this list to length input*2-1
` # Pop and push all strings separately to the stack
® # Push string `®` again
3Lā # Push a list in the range [1,2,3]length] (without popping) again
56( # Push -56
‡ # Transliterate 1,2,3 to "-",5,6 in string `®`
# (the other integers that aren't present in `®` are no-ops again)
» # Join all strings on the stack with newline delimiter
žm # Push constant 9876543210
( # Negate it: -9876543210
•dÃи“·”.• # Push compressed integer 10932220548783273
29в # Convert it to base-29 as list: [25,28,16,19,13,10,1,7,4,22,0]
Žb[ # Push compressed integer 9552
+ # Add it to each value in the list:
# [9577,9580,9568,9571,9565,9562,9553,9559,9556,9574,9552]
ç # Convert each to a character with that unicode value:
# ["╩","╬","╠","╣","╝","╚","║","╗","╔","╦","═"]
‡ # Transliterate the "-","9","8",... to "╩","╬","╠",...
# (after which the result is output implicitly)