commit 1095dd6a0a126868f74e9dce1e3ec3edaac8c534
Author: jens <jens.se@icloud.com>
AuthorDate: Mon Apr 20 19:48:06 2026 +0200
Commit: jens <jens.se@icloud.com>
CommitDate: Mon Apr 20 19:48:06 2026 +0200
first commit
---
.DS_Store | Bin 0 -> 6148 bytes
.github/agents/local.agent.md | 0
.gitignore | 1 +
ibm_vga_8x16.woff | Bin 0 -> 22584 bytes
impure65.ans | 258 ++++++++
impure65.html | 274 +++++++++
index.html | 1354 +++++++++++++++++++++++++++++++++++++++++
skull.ans | 60 ++
tk-roxyimage.ans | 101 +++
9 files changed, 2048 insertions(+)
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..be37c48
Binary files /dev/null and b/.DS_Store differ
diff --git a/.github/agents/local.agent.md b/.github/agents/local.agent.md
new file mode 100644
index 0000000..e69de29
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..09163ce
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/Ny mapp med objekt
\ No newline at end of file
diff --git a/ibm_vga_8x16.woff b/ibm_vga_8x16.woff
new file mode 100644
index 0000000..466064d
Binary files /dev/null and b/ibm_vga_8x16.woff differ
diff --git a/impure65.ans b/impure65.ans
new file mode 100644
index 0000000..18b61f5
--- /dev/null
+++ b/impure65.ans
@@ -0,0 +1,258 @@
+[0;40;37m
+
+[1;30m [0m[6C[1m/\___[0m [1m __ [0m[7C[1m/\___[0m[9C[1m__[0m[8C[1m____[0m[8C[1m/\___ [0mxz
+[1;30m [37m__[36m,_\ ,/_,__,/ \ _,__,__\ (_, _,__ / \__ _,__)__ \_,__ __\ (_, [37m__
+ [36m\// \ // \// \_/ \// __ \\/ \\[0m[5C[1;36m\\/ |/ \\// __/ \\/
+ | \/[0m[5C[1;36m| __[0m[5C[1;36m|[0m[5C[1;36m|/ | \\[0m[5C[1;36m|[0m[5C[1;36m_[0m[5C[1;36m|[0m[6C[1;36m/ |
+
+[1;30m [0m[10C[1;30mt h e [0mz e r o [1;30m. [37ms i x [30m. [0mf i v e [1;30m b i t e y e c a n d y
+
+
+
+[0m[49C[1m_,,[0m---""""""---,_
+[46C[1m,-"[0m[17C[1;30m"-,
+[0m[14C[1m____[0m[25C[1m,-"[0m[7C[1;30m,--"""""""--, \\
+[0m[9C[1m,-""" [0m""--,[17C[1m,-" . [30m,-"[0m[13C[1;30m"-, \\
+[0m[8C[1m/ [0m_ _[9C'-.[12C[1m,-[0m[6C' [1;30m,"[0m[20C[1;30m. \
+[0m [1;30m [37m/[0m[6C" [1;30m' [0m, \[10C[1m- [0m-. [1;30m."[0m[26C[1;30m\
+[0m [1;30m [37m:: [0m,,-- [1;30m' [0m/[5C\\[6C[1m,' [0m'-, [1;30m/[0m[9C[1;30m__,,,,,[0m[13C[1;30m\
+[0m [1;30m [37m![0m[5C,, [1;30m;[0m[5C:[7C\ [1m/ [0m.[6C[1;30m//[0m[7C[1;30m,-" "-, "\\[0m[11C[1;30m:
+[0m [1;30m [37m!. [0m-" [1;30m\ .\[0m[7C[1;30m\ [37m/ [0m'-, [1;30m/[0m[6C[1;30m,-"[0m[8C[1;30m'-, \\[0m[9C[1;30m|
+[0m [1;30m [0m;[1m! [0m,- [1;30m\'[0m[5C[1;30m"-. _ ,-"[37m/[0m/ '-, /[1;30m/[0m[5C[1;30m/[0m[14C[1;30m\-, \[0m[8C[1;30m:
+[0m [1;30m [37m\ [0m"[5C[1;30m;'[0m[5C[1;30m':">/> [0m/ -, "" [1;30m/[0m[5C[1;30m/[0m[18C[1;30m\ [0m:[7C[1;30m|
+[0m [1;30m [37m\\[0m[5C, ,[1;30m\.[0m[6C[1;30m:/> [37m/ [0m\\ "--,:[5C[1;30m./:[0m[18C[1;30m\[0m![7C[1;30m:
+[0m[8C[1m\ [0m.-" ," [1;30m\\[0m[6C[1;30m</ [0m/ -,_ ;[6C[1;30m:>:[0m[18C|[7C[1;30m|
+[0m[9C\:" -" .:' ,[1;30m\\:. /// [0m</ "-,, :[6C[1;30m.!:/[0m[18C:[7C[1;30m;
+[0m[10C\\ .;' .' [1;30m"-':</ / [0m; . "" . [1;30m. >\[0m[10C[1;30m,,,,,, [0m;[6C[1;30m/
+[0m[11C\\ .: / / [1;30m':> / [0m/> "-,,.[5C[1;30m://:/[0m[6C[1;30m.-""""[0m[6C./[5C[1;30m/
+[0m[13C\\': / / [1;30m/:'// [0m<\:'-,,_ [1;30m_/,//;[0m[6C[1;30m/[0m[12C:/[5C[1;30m/
+[0m[15C\ / [1;30m:> / [0m\\\->,_ [1;30m.,-:/[0m[22C/[5C[1;30m/
+[0m[17C"-, [1;30m>// / [0m: >\:=[1;30m--'/-+[0m[8C[1;30m.[0m[13C[1m/[0m[5C[1;30m/
+[0m[18C[1m/[0m\:-[1;30m<: \[0m[8C" [1;30m::'' / \\'[0m[8C[1m/\\_,'[0m[5C[1;30m/
+[0m[17C[1m/ [0m"-" [1;30m: [0m' ' . [1;30m.' [0m___[1;30m___/ __\\[0m[8C[1m\[0m[9C/
+[16C[1m;/[0m[6C/ [1;30m:: [0m: : [1;30m,[0m-"[6C[1;30m""\ \\ .- [37m\[0m_ ,,'
+[15C[1m/\"""[0m--, : :[1;30m! [0m: '[1;30m->[0m[11C[1;30m\[0m[5C[1;30m'-"[0m[6C""""
+ [1m/"""""----"" "-[0m, : :: \[1;30m\ [0m\\__[1;30m/[0m[12C/ [1;30m\\__,ldn:"
+[0m [1m"[0m"--,,_[7C[1;30m,-[0m\ '-,__\[1;30m\ [0m- ---[1;30m-,, [0m,-" /[5C[1;30m/""
+[0m[10C"""[1;30m--"" :[0m[5C[1;30m, [0m>[9C[1;30m""-.""" .[0m-/[5C[1;30m/
+[0m[21C[1;30m:"--",[37m/[0m[14C""""[5C[1;30m,-'
+[0m[21C[1;30m'"--" [37m:[0m----[1;30m,, [0m""""\[1;30m\ ,-"
+[0m[22C[1;30m: [37m:[0m[6C[1;30m\[0m[8C[1;30m\\\-"
+[0m[23C[1;30m'. [0m\ [1;30m\ \ ,>
+[0m[25C[1;30m"[0m-, \[1;30m\\-'
+[0m[29C/[6C[1;30m,-"
+[0m[29C\_[8C[1;30m\ \\[0m[6C[1;30m\
+[0m[29C: ': [1;30m:::[0m[5C[1;30m,- \,-
+[0m[30C\[9C[1;30m_,- -"."
+[0m[31C\[5C[1;30m,-"[0m[5C[1;30m\\
+[0m[32C\[1;30m--"" \_.\ /
+[0m[33C\[1;30m__\_./ \/
+
+
+
+[0m[8C[1m__[0m[60C[1m__
+[0m [1m [0m [1m__[36m\/[37m________[0m [1;30m__________[0m [1m________________________________________[36m\/[37m__
+[0m[6C[1;36m\/[0m \[36m________[37m\\[36m [1mi[34m [36mn[34m [36mf[34m [36mo[0m //[36m_______________________________________[1;30m/ [36m\/
+[0m [1m____[0m [1;30m|[0m[54C[1;30m [0m [1;30m|[0m [1m____
+[0m [1;36m\ /[0m [1;30m|[0m[58C[1;30m|[0m [1;36m\ /
+[0m [1;35m [36m\/[37m_[0m [1;30m|[0m On a [32mmidsummer[37m fair, with flowers in our hairs and with [1;30m|[0m [1m_[36m\/
+[0m [1m__[0m [1;36m\/[0m [1;30m|[0m pagan gods all around us we give you our [36m65th[37m (!) ascii [1;30m|[0m [1;36m\/[0m [1m__
+[0m [1;36m\/[0m [1m__[30m|[0m art collection. This midsummer three years ago two of [1;30m|[37m__[0m [1;36m\/
+[0m[6C[1m__[36m\/[30m|[0m us in a weak moment of nostalgia decided that it would [1;30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m [1;30m|[0m be a laugh to release a one-off [31mImpure!ascii[37m reunion[5C[1;30m|[0m [1;36m\/
+[0m[10C[1;30m|[0m art pack after the group had been dead since eight[7C[1;30m|
+[0m[10C[1;30m|[0m years. Without us giving it much thought it seems like [1;30m|
+[0m [1;30m:[0m [1;30m::::[0m [1;30m|[0m we started a non-stopable [36mmachinery[37m that has been[8C[1;30m|
+[0m[10C[1;30m|[0m producing art ever since as this is the [36m13th[37m art pack [1;30m|
+[0m[10C[1;30m|[0m that we release since that reunion. It's very nice to [1;30m|
+[0m[10C[1;30m|[0m see that we are still [1;32mconstantly growing[0m and improving [1;30m|
+[0m[10C[1;30m|[0m our skills and that we have also been a platform to[6C[1;30m|
+[0m[10C[1;30m|[0m launch some new talents into the scene. Looks like[7C[1;30m|
+[0m[10C[1;30m|[0m there is nothing stopping us now as we are pushing the [1;30m|
+[0m[10C[1;30m|[0m boundaries of [31mamiga ascii art[37m.[27C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|[0m [1;30m: ::[0m [1;30m:
+[0m[10C[1;30m|[0m Oh- If you appreciate the scene as much as we do and[5C[1;30m|
+[0m[10C[1;30m|[0m want to help out- please give a [1;32mdonation[0m to[31m Maze's[37m[7C[1;30m|
+[0m[10C[1;30m|[0m [31mwww.textmod.es[37m art scene conservation project. This[6C[1;30m|
+[0m[10C[1;30m|[0m will be used for upkeep and machinery. Follow the[8C[1;30m|
+[0m[10C[1;30m|[0m banner on the index page.[32C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m We would also like to welcome our [1;34marg[37men[33mt[37min[34mian[0m ascii[6C[1;30m|
+[0m[10C[1;30m|[0m superstar [1;31mPIX[0m (former splonk) back to the group after [1;30m|
+[0m[10C[1;30m|[0m years upon years in exile. We love to have him back.[5C[1;30m|
+[0m[10C[1;30m|[0m Make sure to check out our new [32mbbs dist[37m sites:[11C[1;30m|
+[0m[10C[1;30m|[0m Xibalba, Error 404, Cyberia and Dali's cat.[14C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m See you at [36mEvoke![37m[40C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1m [0m[14C.[10C[1;33m+[0m[19C.[9C[1;30m|
+[0m[10C[1;30m|[0m [1m [0m.[54C[1;30m|
+[0m[10C[1;30m|[0m [1m [0m[8C[1m/\[0m [1m [0m [1m [0m .[1m _[0m [1m [0m [1m [0m[7C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0m[7C[1m/ [0m \ [1m /[0m\ [1m /[0m\ [1m /_[0m\ [1m /\[0m__ [1m /\[0m [1;30m.[0m [1;30m|
+[0m[10C[1;30m|[0m [1;30m [37m |\ [0m|/[6C\|/ \ / \ [1m //[0m o \\/ \ /____\[5C[1;30m|
+[0m [1m [0m [1m__[36m\/[30m|[37m_______ [30m__________[0m [1m_______________________________________[30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m \[36m________[37m\\[33m [1;36mi[34m [36mn[34m [36mf[34m [36mo[0m //[36m_______________________________________[1;30m/ [36m\/
+[0m [1m____[0m [1;30m|[0m[58C[1;30m|[0m [1m____
+[0m [1;36m\ /[0m [1;30m|[0m [1;30m.[0mwant to apply to impure? mail us at impure@thuglife.org [1;30m|[0m [1;36m\ /
+[0;33m [37m [1;35m [36m\/[37m_[0m [1;30m|[0m and/or eric@modermodemet.se and include examples of[5C[1;30m|[0m [1m_[36m\/
+[0m [1m__[0m [1;36m\/[0m [1;30m|[0m your work.. or drop by #impure on irc efnet[13C[1;30m|[0m [1;36m\/[0m [1m__
+[0;33m [37m [1;36m\/[0m [1m__[30m|[0m[58C[1;30m|[37m__[0m [1;36m\/
+[0m[6C[1m__[36m\/[30m|[0m [1;30m.[0mImpure is a style, not a group. If you think you have [1;30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m [1;30m|[0m the style, join up! ;)[34C[1;30m|[0m [1;36m\/
+[0m[8C[1m__[30m|[0m[58C[1;30m|[37m__
+[0m [1m [0m [1m__[36m\/[30m|[37m_______[30m ________________ [37m_________________________________[30m|[36m\/[37m__
+[30m [0m [1;36m\/[0m \[36m________[37m\\ [1;36mc[34m [36mo[34m [36mn[34m [36mt[34m [36ma[34m [36mc[34m [36mt[0m //[36m_________________________________[1;30m/ [36m\/
+[0m [1m____[0m [1;30m|[0m[58C[1;30m|[0m [1m____
+[0m [1;36m\ /[0m [1;30m|[0m [1;30m([0;32mftp[1;30m)[0m [1;30mn/a[0m[47C[1;30m|[0m [1;36m\ /
+[0m [1;35m [36m\/[37m_[0m [1;30m|[0m [1;30m([0;32mirc[1;30m)[0m #impure [1;30m@[0m efnet[35C[1;30m|[0m [1m_[36m\/
+[0m [1m__[0m [1;36m\/[0m [1;30m|[0m [1;30m([0;32mmail[1;30m)[0m impure@thuglife.org [1;30mand[0m eric@modermodemet.se[5C[1;30m|[0m [1;36m\/[0m [1m__
+[0m [1;36m\/[0m [1m__[30m|[0m [1;30m([0;32mwww[1;30m)[0m https://www.impure.nl[29C[1;30m|[37m__[0m [1;36m\/
+[0m[6C[1m__[36m\/[30m|[0m [1;30m([0;32mbbs[1;30m)[0m blackflag.acid.org[32C[1;30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m [1;30m|[0m [1;30m [0;33m [37m[52C[1;30m|[0m [1;36m\/
+[0m[10C[1;30m|[0m [1;30m([0;32martflow[1;30m)[0m email us your guest pieces.[19C[1;30m|
+[0m [1;30m:::[0m [1;30m:[0m [1;30m|[0m[12Cmembers know where to submit.[17C[1;30m|
+[0m[8C[1m__[30m|[0m[58C[1;30m|[37m__
+[0m [1m [0m [1m__[36m\/[30m|[37m_______[30m ______________[0m [1m___________________________________[30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m \[36m________[37m\\ [1;36mb[34m [36mo[34m [36ma[34m [36mr[34m [36md[34m [36ms[0m //[36m___________________________________[1;30m/ [36m\/
+[0m [1m____[0m [1;30m|[0m[58C[1;30m|[0m [1m____
+[0m [1;36m\ /[0m [1;30m|[0m [1;30m([0;32mworld-hq[1;30m)[0m [34m-[37m Piranha [34m-[37m Black Flag - master[1;30m:[0m caphood [1;30m|[0m [1;36m\ /
+[0m [1;35m [36m\/[37m_[0m [1;30m|[0m [1;30m [0m[6C[1;30m [0m[5C[32m+[37m [1mblackflag.acid.org[0m [32m+[37m[21C[1;30m|[0m [1m_[36m\/
+[0m [1m__[0m [1;36m\/[0m [1;30m|[0m[15C[32m+ [37mport[1;30m:[0m 23/Mystic [32m+[37m[24C[1;30m|[0m [1;36m\/[0m [1m__
+[0m [1;36m\/[0m [1m__[30m|[0m [1;30m [0m[12C[32m+[31m [37mport[1;30m:[0m 24/Searchlight [32m+[37m[19C[1;30m|[37m__[0m [1;36m\/
+[0m[6C[1m__[36m\/[30m|[0m[15C[32m+[1;34m [0mport[1;30m:[0m 2627/PCBoard [32m+[37m[21C[1;30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m [1;30m|[0m[58C[1;30m|[0m [1;36m\/
+[0m[10C[1;30m|[0m[15C[34m-[37m ACiD Underworld [34m-[37m[24C[1;30m|
+[0m[10C[1;30m|[0m[15C[32m+ [1;37minvite only [0;32m+[37m[28C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32meuro-hq[1;30m)[0m [34m-[37m Haciend [34m-[37m[12C- master[1;30m:[0m h7[8C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0m[12C[32m+[36m [1;37mhaciend.bbs.fi[0m [32m+[37m[25C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mDE-hq[1;30m)[0;32m [37m[5C[34m-[37m The Yard [34m-[37m[11C- master[1;30m:[0m zANER[5C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0m[12C[32m+[36m [1;37mtoo-l33t-4-u [0;32m+[37m[27C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mmember[1;30m)[0m[5C[34m-[37m Blood island/x [34m-[37m[5C- master[1;30m:[0m xzippo [1;30m|[0m [1;30m: :[0m [1;30m::
+[0m[10C[1;30m|[0m [1;30m [0m[12C[32m+[37m [1mbloodisland.ph4.se[0m [32m+[37m [1;30m([0m hellbeard [1;30m)[0m [1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mmember[1;30m)[0m[5C[34m-[37m Distortion [34m-[37m[9C- master[1;30m:[0m jP![7C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0m[6C[1;30m [0m[5C[32m+[37m [1md1st.org[0m [32m+[37m[31C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mmember[1;30m)[0m[5C[34m-[37m 79 Columns [34m-[37m[9C- master[1;30m:[0m haliphax [1;30m|
+[0m[10C[1;30m|[0m [1;30m [0m[6C[1;30m [0m[5C[32m+[37m [1moddnetwork.org[0m [32m+[37m[25C[1;30m|
+[0m [1;30m: [0m [1;30m:[0m [1;30m::[0m [1;30m|[0m [36m [37m[51C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m FlupH [34m-[37m[14C- master[1;30m:[0m Skuz[6C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mfluph.zapto.org[0m [32m+[37m[24C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Alcoholiday [34m-[37m[8C- master[1;30m:[0m Zero[6C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1malco.bbs.io[0m [32m+[37m[18CReader [1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Slime City [34m-[37m[9C- master[1;30m:[0m m00p[6C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mbbs.retrohack.se[0m [32m+[37m[23C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m[15C[34m-[37m FRoZEN FLoPPY [34m-[37m[26C[1;30m|
+[0m[10C[1;30m|[0m[15C[32m+[37m [1mbbs.retrohack.se[0m [32m+[37m[23C[1;30m|
+[0m[10C[1;30m|[0m[17Cport[1;30m:[0m 6464 [1;30m([0mUse CGterm![1;30m)[0m[17C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m[15C[34m-[37m bANANA bENDER [34m-[37m[26C[1;30m|
+[0m[10C[1;30m|[0m[15C[32m+[37m [1mbbs.retrohack.se[0m [32m+[37m[23C[1;30m|
+[0m[10C[1;30m|[0m[17Cport[1;30m:[0m 8484[31C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Dreamland [34m-[37m[10C- master[1;30m:[0m Dream[5C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mdreamland.darktech.org[0m [32m+[37m[7CMaster [1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Necronomicon [34m-[37m[7C- master[1;30m:[0m Necro[5C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mnecrobbs.strangled.net[0m [32m+[37m[7Cmaster [1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m iNK tWO! [34m-[37m[11C- master[1;30m:[0m Smooth [1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mbbs.inktwo.com[0m [32m+[37m[25C[1;30m|
+[0m[10C[1;30m|[0m[15C[32m+[37m [1minktwo.acid.org [0;32m+[37m[24C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Xibalba [34m-[37m[12C- master[1;30m:[0m NuSkooler [1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mxibalba.l33t.codes[0m [32m+[37m[21C[1;30m|
+[0m[10C[1;30m|[0m[15C[32m+[37m port[1;30m:[0m 44510 [32m+[37m[28C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Error 404 [34m-[37m[10C- master[1;30m:[0m Solaris [1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1merror404bbs.ddns.net[0m [32m+[37m[19C[1;30m|
+[0m[10C[1;30m|[0m[17Cport[1;30m: [0m404[32C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Cyberia [34m-[37m[12C- master[1;30m:[0m Gryphon [1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mcyberia.darktech.org[0m [32m+[37m[19C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m([0;32mdistro[1;30m)[0m[5C[34m-[37m Dali's Cat [34m-[37m[9C- master[1;30m:[0m lobo[6C[1;30m|
+[0m[10C[1;30m|[0m [1;30m [0;36m [37m [1;30m [0m[5C[32m+[37m [1mdaliscat.synchro.net[0m [32m+[37m[19C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m [1;30m.[0mwant to be a dist. board/BBS or site, contact us.[6C[1;30m|
+[0m[8C[1m__[30m|[0m[58C[1;30m|[37m__
+[0m [1m [0m [1m__[36m\/[30m|[37m_______[0m [1;30m________________[0m [1m_________________________________[30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m \[36m________[37m\\ [1;36mm[34m [36me[34m [36mm[34m [36mb[34m [36me[34m [36mr[34m [36ms[0m //[36m_________________________________[1;30m/ [36m\/
+[0m [1m____[0m [1;30m|[0m[34C[1;30m|[0m[23C[1;30m|[0m [1m____
+[0m [1;36m\ /[0m [1;30m|[0m [1;30m.the clan.[0m[22C[1;30m| .memories.[0m[12C[1;30m|[0m [1;36m\ /
+[0m [1;35m [36m\/[37m_[0m [1;30m|[0m[34C[1;30m| greetz goes to our [0m [1;30m|[0m [1m_[36m\/
+[0m [1m__[0m [1;36m\/[0m [1;30m|[0m ([1mpO[0m) pOGUE[6C[36m [34m-[36m [1;30m(norway) [0m [1;30m|[0m [1;30mpast members, who has[0m [1;30m|[0m [1;36m\/[0m [1m__
+[0m [1;36m\/[0m [1m__[30m|[0m ([1mxz[0m) hELLBEARD [36m [34m-[36m [1;30m(sweden) [0m [1;30m|[0m [1;30mbegan their journey [0m [1;30m|[37m__[0m [1;36m\/
+[0m[6C[1m__[36m\/[30m|[0m ([1mgrk[0m) gRISKOKARE [36m [34m- [1;30m(sweden) [0m [1;30m|[0m [1;30minto a new scene, a [0m [1;30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m [1;30m|[0m ([1mhx[0m) hALIPHAX [36m [34m- [1;30m(usa)[0m [1;30m [0m [1;30m|[0m [1;30mnew world or maybe [0m [1;30m|[0m [1;36m\/
+[0m[10C[1;30m|[0m ([1mjp[0m) jACK pHLASH[36m [34m- [1;30m(usa)[0m[7C[1;30m|[0m [1;30mjust a new group (in [0m [1;30m|
+[0m[10C[1;30m|[0m ([1mmz[0m) mAZE [36m [37m [1;30m [0;34m-[1;30m (holland) [0m [1;30m|[0m [1;30mno partically order):[0m [1;30m|
+[0m[10C[1;30m|[0m ([1mldn[0m) lORD nIKON [36m [34m-[36m [1;30m(germany) [0m [1;30m|[0m [1;30mspitfire, befeater, [0m [1;30m|
+[0m [1;30m:[0m [1;30m:::[0m [1;30m|[0m ([1mgrx[0m) gRMMXI[6C[34m-[37m [1;30m(finland)[0m [1;30m|[0m [1;30mdorm, dopedemon, esc,[0m [1;30m|
+[0m[10C[1;30m|[0m ([1mch[0m) cAPHOOD[5C[34m-[36m [1;30m(usa)[0m[7C[1;30m|[0m [1;30mhex corrupt, quix, [0m [1;30m|
+[0m[10C[1;30m|[0m ([1m+l[0m)[1m [0m 2o! [31m [37m [34m-[36m [1;30m(cuba)[0m[6C[1;30m|[0m [1;30mthe director, methane[0m [1;30m|
+[0m[10C[1;30m|[0m ([1mvnm[0m)[1m [0mvENAM [31m [37m [34m-[36m [1;30m(lebanon)[0m [1;30m|[0m [1;30mskywalker, acid^burn,[0m [1;30m|
+[0m[10C[1;30m|[0m ([1mx0[0m) [1m [0mxERO[8C[34m-[36m [1;30m(usa)[0m[7C[1;30m|[0m [1;30mcleaner, dark stalker[0m [1;30m|
+[0m[10C[1;30m|[0m ([1mpix[0m) pIX[9C[34m-[37m [1;30m(argentina)[0m [1;30m|[0m [1;30mthe genocidal servant[0m [1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30m(magma), mystic rage,[0m [1;30m|
+[0m[10C[1;30m|[0m + special guest[17C[1;30m|[0m [1;30mhelter skelter, dwarf[0m [1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30mshypht(sagramore), [0m [1;30m|
+[0m[10C[1;30m|[0m ([1mj3[0m) Junior 3lf [34m-[37m [1;30m(holland)[0m [1;30m|[0m [1;30mdark entity,[0m[10C[1;30m|
+[0m[10C[1;30m|[0m [1;30m(maze's adept and daughter)[0m [1;30m |[0m [1;30mtekk(rik-e), zimmer, [0m [1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30minphamilair, blooz, [0m [1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30mansichrist, pdz,[0m[6C[1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30mdedchylde, devilangel[0m [1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30macidbrain, elend, [0m [1;30m|[0m [1;30m::[0m [1;30m:::
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30msimonking, ozzeth, [0m [1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30mshadow lord,[0m[10C[1;30m|
+[0m[10C[1;30m|[0m[34C[1;30m|[0m [1;30mdead brain, tribe, [0m [1;30m|
+[0m[8C[1m__[30m|[0m[34C[1;30m|[0m [1;30mnoof, scour, curdon[0m [1;30m|[37m__
+ [0m [1m [0m [1m__[36m\/[30m|[37m_______[0m [1;30m______________[0m [1m___________[30m|[37m_______________________[30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m \[36m________[37m\\ [1;36mg[34m [36mr[34m [36me[34m [36me[34m [36mt[34m [36ms[0m //[36m___________________________________[1;30m/ [36m\/
+[0m [1m____[0m [1;30m|[0m[58C[1;30m|[0m [1m____
+[0m [1;36m\ /[0m [1;30m|[0m [1;30m.[0mhello to our friends in[1;30m:[0m[32C[1;30m|[0m [1;36m\ /
+ [0m [1;35m [36m\/[37m_[0m [1;30m|[0m[58C[1;30m|[0m [1m_[36m\/
+[0m [1m__[0m [1;36m\/[0m [1;30m|[0m[9Cbreak!!ascii [1;30m.[0m blocktronics [1;30m.[0m mistigris[10C[1;30m|[0m [1;36m\/[0m [1m__
+[0m [1;36m\/[0m [1m__[30m|[0m[10Cdezign [1;30m.[0m dekadence [1;30m.[0m devotion [1;30m.[0m galza[11C[1;30m|[37m__[0m [1;36m\/
+[0m[6C[1m__[36m\/[30m|[0m[14Cdivine stylers [1;30m.[0m red sector[17C[1;30m|[36m\/[37m__
+[0m[6C[1;36m\/[0m [1;30m|[0m[58C[1;30m|[0m [1;36m\/
+[0m[10C[1;30m|[0m [1;30m+[0m all of you old geezers still in the art scene[8C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m|[0m We don't believe in bad [32mKARMA[37m, we don't [32mMIMIC[37m, we[6C[1;30m|
+[0m[10C[1;30m|[0m have no [32mREMORSE[37m and we are not about to [32mBREAK[37m up.[6C[1;30m|
+[0;30m [37m[9C[1;30m|[0m[58C[1;30m|
+[0;30m [1;37m------------------------------------------------------------------------------
+ [34m::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ [37m____ [0;34m:IIIIIIIIIIIIIIII:[ [1;37mi [0;34m:: [1;37mm [0;34m:: [1;37mp [0;34m:: [1;37mu [0;34m:: [1;37mr [0;34m:: [1;37me [0;34m]:IIIIIIIIIIIIIIII: [1;37m____
+ [36m\ / [0;33m__ [34m`:`[33m______ [34m:IIIIIII: [33m______ [34m:IIIIIIII: [33m_ [34m:II: [33m______ [34m:II: [33m______ [1;36m\ /
+ \/ [33m/ \\ [0;34m`. [1;33m\_ \\ _____ [0;34m:. [1;33m\_ \\_ [0;34m:II:` [1;33m___\\ [0;34m::. [1;33m\_ \\ [0;34m`I:. [1;33m\_ \\ [36m\/
+ [0;32m__ [1;37m_(_[33mOo[37m_)____( [33m__[37m(/\)[33m__[37m(__ [0;34m`[1;37m__( [33m__ [37m(_ [0;34mI: [1;37m__([33m__ [37m(/\ ____( [33m__[37m(/\_ ___( [33m__[37m(/\ [0;32m__
+ I: [37m\[7C/ l/ l/ \/ l/ \ / // \\[5C|/ \\ |/ \ [32mI
+ II: [37m\[6C\_ \_ /____/\ _/[5C\/_ /_\_ \\_ |\_ \\ l____/_[32m`
+ II:: [1;30m\ ___/_____/ | [0;32m.... [1;30m\ \______/ /______/ / /___| / /_\___ / \
+ [0;32mII: [1;30m<<___| [0;32m...... [1;30m\___| [0;32mII: [1;30m<<___| [0;32m.......... [1;30m<<____\ [0;32m..... [1;30m\_____| <<______/
+ [0;32mIII:.......:IIIII:......III:.......:IIIIIIII::........I[33mgRK[32m::.................:
+ [1m::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ [0;36m------------------------------------------------------------------------------
+[37m[10C[1;30m|[0m[58C[1;30m|
+[0m[10C[1;30m| [0m[8C[36m [1;30m*[37m 1 9 4 0 [30m-[37m 2 0 1 7 [30m*[0m[9C[1;30m [37m [0m [1;30m|
+[0m[10C[1;30m|[0m[5Cseventy seven years of ascii art and counting![7C[1;30m|
+[0m[10C[1;30m|[0m[58C[1;30m|
+[0m[7C[1;30m |__________________________________________________________|
\ No newline at end of file
diff --git a/impure65.html b/impure65.html
new file mode 100644
index 0000000..604e915
--- /dev/null
+++ b/impure65.html
@@ -0,0 +1,274 @@
+<!DOCTYPE html>
+<html><head><meta charset="UTF-8">
+<title>impure65.ans</title>
+<style>
+*{margin:0;padding:0;box-sizing:border-box}
+body{background:#000;display:flex;justify-content:center;padding:20px 0 40px}
+#screen{
+ font-family:"Courier New",monospace;
+ font-size:16px;
+ line-height:1.2;
+ white-space:pre;
+ color:#aaaaaa;
+ display:inline-block;
+ align-content: center;
+}
+</style>
+</head>
+<body><div id="screen">
+
+<span style="color:#555555;background:#000000;"> </span> <span style="color:#ffffff;">/\___</span> <span style="color:#ffffff;"> __ </span> <span style="color:#ffffff;">/\___</span> <span style="color:#ffffff;">__</span> <span style="color:#ffffff;">____</span> <span style="color:#ffffff;">/\___ </span>xz
+<span style="color:#555555;"> </span><span style="color:#ffffff;">__</span><span style="color:#55ffff;">,_\ ,/_,__,/ \ _,__,__\ (_, _,__ / \__ _,__)__ \_,__ __\ (_, </span><span style="color:#ffffff;">__</span>
+<span style="color:#ffffff;"> </span><span style="color:#55ffff;">\// \ // \// \_/ \// __ \\/ \\</span> <span style="color:#55ffff;">\\/ |/ \\// __/ \\/</span>
+<span style="color:#55ffff;"> | \/</span> <span style="color:#55ffff;">| __</span> <span style="color:#55ffff;">|</span> <span style="color:#55ffff;">|/ | \\</span> <span style="color:#55ffff;">|</span> <span style="color:#55ffff;">_</span> <span style="color:#55ffff;">|</span> <span style="color:#55ffff;">/ |</span>
+<span style="color:#55ffff;"> |</span> <span style="color:#55ffff;">| \/ : |</span> <span style="color:#55ffff;">| : |</span> <span style="color:#55ffff;">"</span> <span style="color:#55ffff;">| // :| »»</span> <span style="color:#55ffff;">|</span>
+<span style="color:#55ffff;"> </span><span style="color:#00aaaa;">(\</span><span style="color:#55ffff;">\__</span> <span style="color:#55ffff;">__/ \___/ __/ \__</span> <span style="color:#55ffff;">__/ \__</span> <span style="color:#55ffff;">__/ \__/» __/ \__</span> <span style="color:#55ffff;">__/</span><span style="color:#00aaaa;">/)</span>
+ <span style="color:#00aaaa;">»»\ _/»» »»\___/»» »»\___/»» »»\___/»» »»\___/»» »»\_ /»»</span>
+ <span style="color:#00aaaa;">\/»</span> <span style="color:#00aaaa;">»»»</span> <span style="color:#00aaaa;">»»»</span> <span style="color:#00aaaa;">»»»</span> <span style="color:#00aaaa;">»»»</span> <span style="color:#00aaaa;">»\/</span>
+
+<span style="color:#555555;"> </span> <span style="color:#555555;">t h e </span>z e r o <span style="color:#555555;">. </span><span style="color:#ffffff;">s i x </span><span style="color:#555555;">. </span>f i v e <span style="color:#555555;"> b i t e y e c a n d y</span>
+
+
+
+ <span style="color:#ffffff;">_,,</span>---""""""---,_
+ <span style="color:#ffffff;">,-"</span> <span style="color:#555555;">"-,</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#ffffff;">,-"</span> <span style="color:#555555;">,--"""""""--, \\</span>
+ <span style="color:#ffffff;">,-""" </span>""--, <span style="color:#ffffff;">,-" . </span><span style="color:#555555;">,-"</span> <span style="color:#555555;">"-, \\</span>
+ <span style="color:#ffffff;">/ </span>_ _ '-. <span style="color:#ffffff;">,-</span> ' <span style="color:#555555;">,"</span> <span style="color:#555555;">. \</span>
+ <span style="color:#555555;"> </span><span style="color:#ffffff;">/</span> " <span style="color:#555555;">' </span>, \ <span style="color:#ffffff;">- </span>-. <span style="color:#555555;">."</span> <span style="color:#555555;">\</span>
+ <span style="color:#555555;"> </span><span style="color:#ffffff;">:: </span>,,-- <span style="color:#555555;">' </span>/ \\ <span style="color:#ffffff;">,' </span>'-, <span style="color:#555555;">/</span> <span style="color:#555555;">__,,,,,</span> <span style="color:#555555;">\</span>
+ <span style="color:#555555;"> </span><span style="color:#ffffff;">!</span> ,, <span style="color:#555555;">;</span> : \ <span style="color:#ffffff;">/ </span>. <span style="color:#555555;">//</span> <span style="color:#555555;">,-" "-, "\\</span> <span style="color:#555555;">:</span>
+ <span style="color:#555555;"> </span><span style="color:#ffffff;">!. </span>-" <span style="color:#555555;">\ .\</span> <span style="color:#555555;">\ </span><span style="color:#ffffff;">/ </span>'-, <span style="color:#555555;">/</span> <span style="color:#555555;">,-"</span> <span style="color:#555555;">'-, \\</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;"> </span>;<span style="color:#ffffff;">! </span>,- <span style="color:#555555;">\'</span> <span style="color:#555555;">"-. _ ,-"</span><span style="color:#ffffff;">/</span>/ '-, /<span style="color:#555555;">/</span> <span style="color:#555555;">/</span> <span style="color:#555555;">\-, \</span> <span style="color:#555555;">:</span>
+ <span style="color:#555555;"> </span><span style="color:#ffffff;">\ </span>" <span style="color:#555555;">;'</span> <span style="color:#555555;">':">/> </span>/ -, "" <span style="color:#555555;">/</span> <span style="color:#555555;">/</span> <span style="color:#555555;">\ </span>: <span style="color:#555555;">|</span>
+ <span style="color:#555555;"> </span><span style="color:#ffffff;">\\</span> , ,<span style="color:#555555;">\.</span> <span style="color:#555555;">:/> </span><span style="color:#ffffff;">/ </span>\\ "--,: <span style="color:#555555;">./:</span> <span style="color:#555555;">\</span>! <span style="color:#555555;">:</span>
+ <span style="color:#ffffff;">\ </span>.-" ," <span style="color:#555555;">\\</span> <span style="color:#555555;"></ </span>/ -,_ ; <span style="color:#555555;">:>:</span> | <span style="color:#555555;">|</span>
+ \:" -" .:' ,<span style="color:#555555;">\\:. /// </span></ "-,, : <span style="color:#555555;">.!:/</span> : <span style="color:#555555;">;</span>
+ \\ .;' .' <span style="color:#555555;">"-':</ / </span>; . "" . <span style="color:#555555;">. >\</span> <span style="color:#555555;">,,,,,, </span>; <span style="color:#555555;">/</span>
+ \\ .: / / <span style="color:#555555;">':> / </span>/> "-,,. <span style="color:#555555;">://:/</span> <span style="color:#555555;">.-""""</span> ./ <span style="color:#555555;">/</span>
+ \\': / / <span style="color:#555555;">/:'// </span><\:'-,,_ <span style="color:#555555;">_/,//;</span> <span style="color:#555555;">/</span> :/ <span style="color:#555555;">/</span>
+ \ / <span style="color:#555555;">:> / </span>\\\->,_ <span style="color:#555555;">.,-:/</span> / <span style="color:#555555;">/</span>
+ "-, <span style="color:#555555;">>// / </span>: >\:=<span style="color:#555555;">--'/-+</span> <span style="color:#555555;">.</span> <span style="color:#ffffff;">/</span> <span style="color:#555555;">/</span>
+ <span style="color:#ffffff;">/</span>\:-<span style="color:#555555;"><: \</span> " <span style="color:#555555;">::'' / \\'</span> <span style="color:#ffffff;">/\\_,'</span> <span style="color:#555555;">/</span>
+ <span style="color:#ffffff;">/ </span>"-" <span style="color:#555555;">: </span>' ' . <span style="color:#555555;">.' </span>___<span style="color:#555555;">___/ __\\</span> <span style="color:#ffffff;">\</span> /
+ <span style="color:#ffffff;">;/</span> / <span style="color:#555555;">:: </span>: : <span style="color:#555555;">,</span>-" <span style="color:#555555;">""\ \\ .- </span><span style="color:#ffffff;">\</span>_ ,,'
+ <span style="color:#ffffff;">/\"""</span>--, : :<span style="color:#555555;">! </span>: '<span style="color:#555555;">-></span> <span style="color:#555555;">\</span> <span style="color:#555555;">'-"</span> """"
+ <span style="color:#ffffff;">/"""""----"" "-</span>, : :: \<span style="color:#555555;">\ </span>\\__<span style="color:#555555;">/</span> / <span style="color:#555555;">\\__,ldn:"</span>
+ <span style="color:#ffffff;">"</span>"--,,_ <span style="color:#555555;">,-</span>\ '-,__\<span style="color:#555555;">\ </span>- ---<span style="color:#555555;">-,, </span>,-" / <span style="color:#555555;">/""</span>
+ """<span style="color:#555555;">--"" :</span> <span style="color:#555555;">, </span>> <span style="color:#555555;">""-.""" .</span>-/ <span style="color:#555555;">/</span>
+ <span style="color:#555555;">:"--",</span><span style="color:#ffffff;">/</span> """" <span style="color:#555555;">,-'</span>
+ <span style="color:#555555;">'"--" </span><span style="color:#ffffff;">:</span>----<span style="color:#555555;">,, </span>""""\<span style="color:#555555;">\ ,-"</span>
+ <span style="color:#555555;">: </span><span style="color:#ffffff;">:</span> <span style="color:#555555;">\</span> <span style="color:#555555;">\\\-"</span>
+ <span style="color:#555555;">'. </span>\ <span style="color:#555555;">\ \ ,></span>
+ <span style="color:#555555;">"</span>-, \<span style="color:#555555;">\\-'</span>
+ / <span style="color:#555555;">,-"</span>
+ \_ <span style="color:#555555;">\ \\</span> <span style="color:#555555;">\</span>
+ : ': <span style="color:#555555;">:::</span> <span style="color:#555555;">,- \,-</span>
+ \ <span style="color:#555555;">_,- -"."</span>
+ \ <span style="color:#555555;">,-"</span> <span style="color:#555555;">\\</span>
+ \<span style="color:#555555;">--"" \_.\ /</span>
+ \<span style="color:#555555;">__\_./ \/</span>
+
+
+
+ <span style="color:#ffffff;">__</span> <span style="color:#ffffff;">__</span>
+ <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">________</span> <span style="color:#555555;">__________</span> <span style="color:#ffffff;">________________________________________</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> \<span style="color:#00aaaa;">________</span>\\<span style="color:#00aaaa;"> </span><span style="color:#55ffff;">i</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">n</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">f</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">o</span> //<span style="color:#00aaaa;">_______________________________________</span><span style="color:#555555;">/ </span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">____</span>
+ <span style="color:#55ffff;">\ /</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\ /</span>
+ <span style="color:#ff55ff;"> </span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">_</span> <span style="color:#555555;">|</span> On a <span style="color:#00aa00;">midsummer</span> fair, with flowers in our hairs and with <span style="color:#555555;">|</span> <span style="color:#ffffff;">_</span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> pagan gods all around us we give you our <span style="color:#00aaaa;">65th</span> (!) ascii <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> art collection. This midsummer three years ago two of <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span> us in a weak moment of nostalgia decided that it would <span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> be a laugh to release a one-off <span style="color:#aa0000;">Impure!ascii</span> reunion <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#555555;">|</span> art pack after the group had been dead since eight <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> years. Without us giving it much thought it seems like <span style="color:#555555;">|</span>
+ <span style="color:#555555;">:</span> <span style="color:#555555;">::::</span> <span style="color:#555555;">|</span> we started a non-stopable <span style="color:#00aaaa;">machinery</span> that has been <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> producing art ever since as this is the <span style="color:#00aaaa;">13th</span> art pack <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> that we release since that reunion. It's very nice to <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> see that we are still <span style="color:#55ff55;">constantly growing</span> and improving <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> our skills and that we have also been a platform to <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> launch some new talents into the scene. Looks like <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> there is nothing stopping us now as we are pushing the <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> boundaries of <span style="color:#aa0000;">amiga ascii art</span>. <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">: ::</span> <span style="color:#555555;">:</span>
+ <span style="color:#555555;">|</span> Oh- If you appreciate the scene as much as we do and <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> want to help out- please give a <span style="color:#55ff55;">donation</span> to<span style="color:#aa0000;"> Maze's</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#aa0000;">www.textmod.es</span> art scene conservation project. This <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> will be used for upkeep and machinery. Follow the <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> banner on the index page. <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> We would also like to welcome our <span style="color:#5555ff;">arg</span><span style="color:#ffffff;">en</span><span style="color:#ffff55;">t</span><span style="color:#ffffff;">in</span><span style="color:#5555ff;">ian</span> ascii <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> superstar <span style="color:#ff5555;">PIX</span> (former splonk) back to the group after <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> years upon years in exile. We love to have him back. <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> Make sure to check out our new <span style="color:#00aa00;">bbs dist</span> sites: <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> Xibalba, Error 404, Cyberia and Dali's cat. <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> See you at <span style="color:#00aaaa;">Evoke!</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#ffffff;"> </span> . <span style="color:#ffff55;">+</span> . <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#ffffff;"> </span>. <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">/\</span> <span style="color:#ffffff;"> </span> <span style="color:#ffffff;"> </span> .<span style="color:#ffffff;"> _</span> <span style="color:#ffffff;"> </span> <span style="color:#ffffff;"> </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#ffffff;">/ </span> \ <span style="color:#ffffff;"> /</span>\ <span style="color:#ffffff;"> /</span>\ <span style="color:#ffffff;"> /_</span>\ <span style="color:#ffffff;"> /\</span>__ <span style="color:#ffffff;"> /\</span> <span style="color:#555555;">.</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#ffffff;"> \ _/</span> ░░ \__<span style="color:#ffffff;"> / </span> \ <span style="color:#ffffff;"> / </span> \ <span style="color:#ffffff;"> // </span>\\ <span style="color:#ffffff;"> / </span>\| <span style="color:#ffffff;">/ </span>\ <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#ffffff;"> |\ </span>|/ \|/ \ / \ <span style="color:#ffffff;"> //</span> o \\/ \ /____\ <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> | \| |/___ \/»»»»»»\// _ \\_____/» »\ <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> o | __ | »»|| |»| | - || | \ <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span>____|_||_____|__I___||___I__|_|___▒_||__::_|___I__ | <span style="color:#555555;">|</span>
+ <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#00aaaa;">▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span>
+ <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span><span style="color:#ffffff;">_______ </span><span style="color:#555555;">__________</span> <span style="color:#ffffff;">_______________________________________</span><span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> \<span style="color:#00aaaa;">________</span>\\<span style="color:#aa5500;"> </span><span style="color:#55ffff;">i</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">n</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">f</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">o</span> //<span style="color:#00aaaa;">_______________________________________</span><span style="color:#555555;">/ </span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">____</span>
+ <span style="color:#55ffff;">\ /</span> <span style="color:#555555;">|</span> <span style="color:#555555;">.</span>want to apply to impure? mail us at impure@thuglife.org <span style="color:#555555;">|</span> <span style="color:#55ffff;">\ /</span>
+<span style="color:#aa5500;"> </span> <span style="color:#ff55ff;"> </span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">_</span> <span style="color:#555555;">|</span> and/or eric@modermodemet.se and include examples of <span style="color:#555555;">|</span> <span style="color:#ffffff;">_</span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> your work.. or drop by #impure on irc efnet <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span>
+<span style="color:#aa5500;"> </span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span> <span style="color:#555555;">.</span>Impure is a style, not a group. If you think you have <span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> the style, join up! ;) <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span>
+ <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span><span style="color:#ffffff;">_______</span><span style="color:#555555;"> ________________ </span><span style="color:#ffffff;">_________________________________</span><span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+<span style="color:#555555;"> </span> <span style="color:#55ffff;">\/</span> \<span style="color:#00aaaa;">________</span>\\ <span style="color:#55ffff;">c</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">o</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">n</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">t</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">a</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">c</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">t</span> //<span style="color:#00aaaa;">_________________________________</span><span style="color:#555555;">/ </span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">____</span>
+ <span style="color:#55ffff;">\ /</span> <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">ftp</span><span style="color:#555555;">)</span> <span style="color:#555555;">n/a</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\ /</span>
+ <span style="color:#ff55ff;"> </span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">_</span> <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">irc</span><span style="color:#555555;">)</span> #impure <span style="color:#555555;">@</span> efnet <span style="color:#555555;">|</span> <span style="color:#ffffff;">_</span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">mail</span><span style="color:#555555;">)</span> impure@thuglife.org <span style="color:#555555;">and</span> eric@modermodemet.se <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">www</span><span style="color:#555555;">)</span> https://www.impure.nl <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">bbs</span><span style="color:#555555;">)</span> blackflag.acid.org <span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#aa5500;"> </span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">artflow</span><span style="color:#555555;">)</span> email us your guest pieces. <span style="color:#555555;">|</span>
+ <span style="color:#555555;">:::</span> <span style="color:#555555;">:</span> <span style="color:#555555;">|</span> members know where to submit. <span style="color:#555555;">|</span>
+ <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span>
+ <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span><span style="color:#ffffff;">_______</span><span style="color:#555555;"> ______________</span> <span style="color:#ffffff;">___________________________________</span><span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> \<span style="color:#00aaaa;">________</span>\\ <span style="color:#55ffff;">b</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">o</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">a</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">r</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">d</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">s</span> //<span style="color:#00aaaa;">___________________________________</span><span style="color:#555555;">/ </span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">____</span>
+ <span style="color:#55ffff;">\ /</span> <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">world-hq</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Piranha <span style="color:#0000aa;">-</span> Black Flag - master<span style="color:#555555;">:</span> caphood <span style="color:#555555;">|</span> <span style="color:#55ffff;">\ /</span>
+ <span style="color:#ff55ff;"> </span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">_</span> <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">blackflag.acid.org</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">_</span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> <span style="color:#00aa00;">+ </span>port<span style="color:#555555;">:</span> 23/Mystic <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span><span style="color:#aa0000;"> </span>port<span style="color:#555555;">:</span> 24/Searchlight <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span> <span style="color:#00aa00;">+</span><span style="color:#5555ff;"> </span>port<span style="color:#555555;">:</span> 2627/PCBoard <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#555555;">|</span> <span style="color:#0000aa;">-</span> ACiD Underworld <span style="color:#0000aa;">-</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#00aa00;">+ </span><span style="color:#ffffff;">invite only </span><span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">euro-hq</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Haciend <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> h7 <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span><span style="color:#00aaaa;"> </span><span style="color:#ffffff;">haciend.bbs.fi</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">DE-hq</span><span style="color:#555555;">)</span><span style="color:#00aa00;"> </span> <span style="color:#0000aa;">-</span> The Yard <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> zANER <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span><span style="color:#00aaaa;"> </span><span style="color:#ffffff;">too-l33t-4-u </span><span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">member</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Blood island/x <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> xzippo <span style="color:#555555;">|</span> <span style="color:#555555;">: :</span> <span style="color:#555555;">::</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">bloodisland.ph4.se</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">(</span> hellbeard <span style="color:#555555;">)</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">member</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Distortion <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> jP! <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">d1st.org</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">member</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> 79 Columns <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> haliphax <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">oddnetwork.org</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">: </span> <span style="color:#555555;">:</span> <span style="color:#555555;">::</span> <span style="color:#555555;">|</span> <span style="color:#00aaaa;"> </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> FlupH <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Skuz <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">fluph.zapto.org</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Alcoholiday <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Zero <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">alco.bbs.io</span> <span style="color:#00aa00;">+</span> Reader <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Slime City <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> m00p <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">bbs.retrohack.se</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#0000aa;">-</span> FRoZEN FLoPPY <span style="color:#0000aa;">-</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">bbs.retrohack.se</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> port<span style="color:#555555;">:</span> 6464 <span style="color:#555555;">(</span>Use CGterm!<span style="color:#555555;">)</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#0000aa;">-</span> bANANA bENDER <span style="color:#0000aa;">-</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">bbs.retrohack.se</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> port<span style="color:#555555;">:</span> 8484 <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Dreamland <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Dream <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">dreamland.darktech.org</span> <span style="color:#00aa00;">+</span> Master <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Necronomicon <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Necro <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">necrobbs.strangled.net</span> <span style="color:#00aa00;">+</span> master <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> iNK tWO! <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Smooth <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">bbs.inktwo.com</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">inktwo.acid.org </span><span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Xibalba <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> NuSkooler <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">xibalba.l33t.codes</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#00aa00;">+</span> port<span style="color:#555555;">:</span> 44510 <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Error 404 <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Solaris <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">error404bbs.ddns.net</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> port<span style="color:#555555;">: </span>404 <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Cyberia <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> Gryphon <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">cyberia.darktech.org</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(</span><span style="color:#00aa00;">distro</span><span style="color:#555555;">)</span> <span style="color:#0000aa;">-</span> Dali's Cat <span style="color:#0000aa;">-</span> - master<span style="color:#555555;">:</span> lobo <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;"> </span><span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span> <span style="color:#00aa00;">+</span> <span style="color:#ffffff;">daliscat.synchro.net</span> <span style="color:#00aa00;">+</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">.</span>want to be a dist. board/BBS or site, contact us. <span style="color:#555555;">|</span>
+ <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span>
+ <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span><span style="color:#ffffff;">_______</span> <span style="color:#555555;">________________</span> <span style="color:#ffffff;">_________________________________</span><span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> \<span style="color:#00aaaa;">________</span>\\ <span style="color:#55ffff;">m</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">e</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">m</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">b</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">e</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">r</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">s</span> //<span style="color:#00aaaa;">_________________________________</span><span style="color:#555555;">/ </span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">____</span>
+ <span style="color:#55ffff;">\ /</span> <span style="color:#555555;">|</span> <span style="color:#555555;">.the clan.</span> <span style="color:#555555;">| .memories.</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\ /</span>
+ <span style="color:#ff55ff;"> </span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">_</span> <span style="color:#555555;">|</span> <span style="color:#555555;">| greetz goes to our </span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">_</span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> (<span style="color:#ffffff;">pO</span>) pOGUE <span style="color:#00aaaa;"> </span><span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(norway) </span> <span style="color:#555555;">|</span> <span style="color:#555555;">past members, who has</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> (<span style="color:#ffffff;">xz</span>) hELLBEARD <span style="color:#00aaaa;"> </span><span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(sweden) </span> <span style="color:#555555;">|</span> <span style="color:#555555;">began their journey </span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span> (<span style="color:#ffffff;">grk</span>) gRISKOKARE <span style="color:#00aaaa;"> </span><span style="color:#0000aa;">- </span><span style="color:#555555;">(sweden) </span> <span style="color:#555555;">|</span> <span style="color:#555555;">into a new scene, a </span> <span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> (<span style="color:#ffffff;">hx</span>) hALIPHAX <span style="color:#00aaaa;"> </span><span style="color:#0000aa;">- </span><span style="color:#555555;">(usa)</span> <span style="color:#555555;"> </span> <span style="color:#555555;">|</span> <span style="color:#555555;">new world or maybe </span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">jp</span>) jACK pHLASH<span style="color:#00aaaa;"> </span><span style="color:#0000aa;">- </span><span style="color:#555555;">(usa)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">just a new group (in </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">mz</span>) mAZE <span style="color:#00aaaa;"> </span> <span style="color:#555555;"> </span><span style="color:#0000aa;">-</span><span style="color:#555555;"> (holland) </span> <span style="color:#555555;">|</span> <span style="color:#555555;">no partically order):</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">ldn</span>) lORD nIKON <span style="color:#00aaaa;"> </span><span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(germany) </span> <span style="color:#555555;">|</span> <span style="color:#555555;">spitfire, befeater, </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">:</span> <span style="color:#555555;">:::</span> <span style="color:#555555;">|</span> (<span style="color:#ffffff;">grx</span>) gRMMXI <span style="color:#0000aa;">-</span> <span style="color:#555555;">(finland)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">dorm, dopedemon, esc,</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">ch</span>) cAPHOOD <span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(usa)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">hex corrupt, quix, </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">+l</span>)<span style="color:#ffffff;"> </span> 2o! <span style="color:#aa0000;"> </span> <span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(cuba)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">the director, methane</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">vnm</span>)<span style="color:#ffffff;"> </span>vENAM <span style="color:#aa0000;"> </span> <span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(lebanon)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">skywalker, acid^burn,</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">x0</span>) <span style="color:#ffffff;"> </span>xERO <span style="color:#0000aa;">-</span><span style="color:#00aaaa;"> </span><span style="color:#555555;">(usa)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">cleaner, dark stalker</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">pix</span>) pIX <span style="color:#0000aa;">-</span> <span style="color:#555555;">(argentina)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">the genocidal servant</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">(magma), mystic rage,</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> + special guest <span style="color:#555555;">|</span> <span style="color:#555555;">helter skelter, dwarf</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">shypht(sagramore), </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> (<span style="color:#ffffff;">j3</span>) Junior 3lf <span style="color:#0000aa;">-</span> <span style="color:#555555;">(holland)</span> <span style="color:#555555;">|</span> <span style="color:#555555;">dark entity,</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">(maze's adept and daughter)</span> <span style="color:#555555;"> |</span> <span style="color:#555555;">tekk(rik-e), zimmer, </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">inphamilair, blooz, </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">ansichrist, pdz,</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">dedchylde, devilangel</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">acidbrain, elend, </span> <span style="color:#555555;">|</span> <span style="color:#555555;">::</span> <span style="color:#555555;">:::</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">simonking, ozzeth, </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">shadow lord,</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">dead brain, tribe, </span> <span style="color:#555555;">|</span>
+ <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#555555;">noof, scour, curdon</span> <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span>
+<span style="color:#ffffff;"> </span> <span style="color:#ffffff;"> </span> <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span><span style="color:#ffffff;">_______</span> <span style="color:#555555;">______________</span> <span style="color:#ffffff;">___________</span><span style="color:#555555;">|</span><span style="color:#ffffff;">_______________________</span><span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> \<span style="color:#00aaaa;">________</span>\\ <span style="color:#55ffff;">g</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">r</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">e</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">e</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">t</span><span style="color:#5555ff;"> </span><span style="color:#55ffff;">s</span> //<span style="color:#00aaaa;">___________________________________</span><span style="color:#555555;">/ </span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">____</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">____</span>
+ <span style="color:#55ffff;">\ /</span> <span style="color:#555555;">|</span> <span style="color:#555555;">.</span>hello to our friends in<span style="color:#555555;">:</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\ /</span>
+<span style="color:#55ffff;"> </span> <span style="color:#ff55ff;"> </span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">_</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#ffffff;">_</span><span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> break!!ascii <span style="color:#555555;">.</span> blocktronics <span style="color:#555555;">.</span> mistigris <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#ffffff;">__</span><span style="color:#555555;">|</span> dezign <span style="color:#555555;">.</span> dekadence <span style="color:#555555;">.</span> devotion <span style="color:#555555;">.</span> galza <span style="color:#555555;">|</span><span style="color:#ffffff;">__</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#ffffff;">__</span><span style="color:#55ffff;">\/</span><span style="color:#555555;">|</span> divine stylers <span style="color:#555555;">.</span> red sector <span style="color:#555555;">|</span><span style="color:#55ffff;">\/</span><span style="color:#ffffff;">__</span>
+ <span style="color:#55ffff;">\/</span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span> <span style="color:#55ffff;">\/</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">+</span> all of you old geezers still in the art scene <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> We don't believe in bad <span style="color:#00aa00;">KARMA</span>, we don't <span style="color:#00aa00;">MIMIC</span>, we <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> have no <span style="color:#00aa00;">REMORSE</span> and we are not about to <span style="color:#00aa00;">BREAK</span> up. <span style="color:#555555;">|</span>
+<span style="color:#000000;"> </span> <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+<span style="color:#000000;"> </span><span style="color:#ffffff;">------------------------------------------------------------------------------</span>
+<span style="color:#ffffff;"> </span><span style="color:#5555ff;">::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::</span>
+<span style="color:#5555ff;"> </span><span style="color:#ffffff;">____ </span><span style="color:#0000aa;">:IIIIIIIIIIIIIIII:[ </span><span style="color:#ffffff;">i </span><span style="color:#0000aa;">:: </span><span style="color:#ffffff;">m </span><span style="color:#0000aa;">:: </span><span style="color:#ffffff;">p </span><span style="color:#0000aa;">:: </span><span style="color:#ffffff;">u </span><span style="color:#0000aa;">:: </span><span style="color:#ffffff;">r </span><span style="color:#0000aa;">:: </span><span style="color:#ffffff;">e </span><span style="color:#0000aa;">]:IIIIIIIIIIIIIIII: </span><span style="color:#ffffff;">____</span>
+<span style="color:#ffffff;"> </span><span style="color:#55ffff;">\ / </span><span style="color:#aa5500;">__ </span><span style="color:#0000aa;">`:`</span><span style="color:#aa5500;">______ </span><span style="color:#0000aa;">:IIIIIII: </span><span style="color:#aa5500;">______ </span><span style="color:#0000aa;">:IIIIIIII: </span><span style="color:#aa5500;">_ </span><span style="color:#0000aa;">:II: </span><span style="color:#aa5500;">______ </span><span style="color:#0000aa;">:II: </span><span style="color:#aa5500;">______ </span><span style="color:#55ffff;">\ /</span>
+<span style="color:#55ffff;"> \/ </span><span style="color:#ffff55;">/ \\ </span><span style="color:#0000aa;">`. </span><span style="color:#ffff55;">\_ \\ _____ </span><span style="color:#0000aa;">:. </span><span style="color:#ffff55;">\_ \\_ </span><span style="color:#0000aa;">:II:` </span><span style="color:#ffff55;">___\\ </span><span style="color:#0000aa;">::. </span><span style="color:#ffff55;">\_ \\ </span><span style="color:#0000aa;">`I:. </span><span style="color:#ffff55;">\_ \\ </span><span style="color:#55ffff;">\/</span>
+<span style="color:#55ffff;"> </span><span style="color:#00aa00;">__ </span><span style="color:#ffffff;">_(_</span><span style="color:#ffff55;">Oo</span><span style="color:#ffffff;">_)____( </span><span style="color:#ffff55;">__</span><span style="color:#ffffff;">(/\)</span><span style="color:#ffff55;">__</span><span style="color:#ffffff;">(__ </span><span style="color:#0000aa;">`</span><span style="color:#ffffff;">__( </span><span style="color:#ffff55;">__ </span><span style="color:#ffffff;">(_ </span><span style="color:#0000aa;">I: </span><span style="color:#ffffff;">__(</span><span style="color:#ffff55;">__ </span><span style="color:#ffffff;">(/\ ____( </span><span style="color:#ffff55;">__</span><span style="color:#ffffff;">(/\_ ___( </span><span style="color:#ffff55;">__</span><span style="color:#ffffff;">(/\ </span><span style="color:#00aa00;">__</span>
+<span style="color:#00aa00;"> I: </span>\ / l/ l/ \/ l/ \ / // \\ |/ \\ |/ \ <span style="color:#00aa00;">I</span>
+<span style="color:#00aa00;"> II: </span>\ \_ \_ /____/\ _/ \/_ /_\_ \\_ |\_ \\ l____/_<span style="color:#00aa00;">`</span>
+<span style="color:#00aa00;"> II:: </span><span style="color:#555555;">\ ___/_____/ | </span><span style="color:#00aa00;">.... </span><span style="color:#555555;">\ \______/ /______/ / /___| / /_\___ / \</span>
+<span style="color:#555555;"> </span><span style="color:#00aa00;">II: </span><span style="color:#555555;"><<___| </span><span style="color:#00aa00;">...... </span><span style="color:#555555;">\___| </span><span style="color:#00aa00;">II: </span><span style="color:#555555;"><<___| </span><span style="color:#00aa00;">.......... </span><span style="color:#555555;"><<____\ </span><span style="color:#00aa00;">..... </span><span style="color:#555555;">\_____| <<______/</span>
+<span style="color:#555555;"> </span><span style="color:#00aa00;">III:.......:IIIII:......III:.......:IIIIIIII::........I</span><span style="color:#aa5500;">gRK</span><span style="color:#00aa00;">::.................:</span>
+<span style="color:#00aa00;"> </span><span style="color:#55ff55;">::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::</span>
+<span style="color:#55ff55;"> </span><span style="color:#00aaaa;">------------------------------------------------------------------------------</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">| </span> <span style="color:#00aaaa;"> </span><span style="color:#555555;">*</span><span style="color:#ffffff;"> 1 9 4 0 </span><span style="color:#555555;">-</span><span style="color:#ffffff;"> 2 0 1 7 </span><span style="color:#555555;">*</span> <span style="color:#555555;"> </span><span style="color:#ffffff;"> </span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> seventy seven years of ascii art and counting! <span style="color:#555555;">|</span>
+ <span style="color:#555555;">|</span> <span style="color:#555555;">|</span>
+ <span style="color:#555555;"> |__________________________________________________________|</span></div></body></html>
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..1b75543
--- /dev/null
+++ b/index.html
@@ -0,0 +1,1354 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>NFO / ANS EDITOR</title>
+<style>
+ @import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');
+ @font-face {
+ font-family: 'IBM VGA 8x16';
+ src: url('ibm_vga_8x16.woff') format('woff');
+ font-weight: normal; font-style: normal;
+ }
+ :root {
+ --bg:#0a0a0a; --border:#1a1a1a; --cyan:#00e5cc;
+ --cyan-dk:#006b5e; --white:#cccccc; --dim:#3a3a3a; --dim2:#555555;
+ }
+ *{margin:0;padding:0;box-sizing:border-box}
+ html,body{background:var(--bg);color:var(--white);font-family:'Share Tech Mono','Courier New',monospace;font-size:13px;min-height:100vh}
+ #topbar{position:sticky;top:0;z-index:100;background:#000;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:7px 16px;flex-wrap:wrap}
+ .logo{color:var(--cyan);font-size:13px;letter-spacing:3px;text-shadow:0 0 10px rgba(0,229,204,.35);white-space:nowrap}
+ .logo em{color:var(--dim2);font-style:normal}
+ .tb-btn{background:none;border:1px solid var(--cyan-dk);color:var(--cyan);font-family:inherit;font-size:11px;padding:3px 10px;cursor:pointer;letter-spacing:1px;transition:all .15s;white-space:nowrap}
+ .tb-btn:hover{background:var(--cyan-dk);color:#fff}
+ .tb-btn.dim{border-color:var(--dim);color:var(--dim2)}
+ .tb-btn.dim:hover{border-color:var(--cyan-dk);color:var(--cyan)}
+ .tb-btn.hidden{display:none}
+ .tb-btn.active{border-color:var(--cyan);background:rgba(0,229,204,.08);color:var(--cyan)}
+ #filename{color:var(--dim2);font-size:11px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
+ #width-wrap{display:none;align-items:center;gap:6px}
+ #width-wrap.visible{display:flex}
+ #width-wrap label{color:var(--dim2);font-size:11px}
+ #width-sel{background:#000;border:1px solid var(--dim);color:var(--cyan);font-family:inherit;font-size:11px;padding:2px 6px;cursor:pointer}
+ #file-input{display:none}
+ #img-input{display:none}
+ #dropzone{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:calc(100vh - 45px);cursor:pointer;transition:background .2s;gap:14px}
+ #dropzone.over{background:rgba(0,229,204,.03)}
+ .drop-box{border:1px dashed var(--cyan-dk);padding:36px 56px;text-align:center;pointer-events:none}
+ .drop-title{color:var(--cyan);font-size:13px;letter-spacing:3px;margin-bottom:10px}
+ .drop-sub{color:var(--dim2);font-size:11px;line-height:1.9;letter-spacing:1px}
+ .deco{color:var(--dim);font-size:11px;pointer-events:none;user-select:none}
+ #output-wrap{display:none;padding:16px 16px 80px;overflow:auto}
+ #output-wrap.visible{display:block}
+ #output-wrap.centered{display:flex !important;justify-content:center;align-items:flex-start}
+ #canvas-wrap{position:relative;display:inline-block;line-height:0}
+ #screen{display:block;image-rendering:-webkit-optimize-contrast;image-rendering:pixelated;cursor:crosshair}
+ #screen:focus{outline:none}
+ #cursor-el{position:absolute;pointer-events:none;box-sizing:border-box;border:1px solid var(--cyan);display:none;animation:cblink 1s step-end infinite}
+ @keyframes cblink{50%{opacity:0}}
+ #statusbar{position:fixed;bottom:0;left:0;right:0;background:#000;border-top:1px solid var(--border);padding:3px 16px;font-size:11px;color:var(--dim2);display:flex;gap:20px;flex-wrap:wrap;z-index:80}
+ #statusbar b{color:var(--cyan-dk);font-weight:normal}
+ ::-webkit-scrollbar{width:5px;height:5px}
+ ::-webkit-scrollbar-track{background:#000}
+ ::-webkit-scrollbar-thumb{background:var(--cyan-dk)}
+ #editbar{display:none;position:fixed;bottom:0;left:0;right:0;z-index:90;background:#000;border-top:1px solid var(--cyan-dk);padding:5px 16px;gap:8px;align-items:center;flex-wrap:wrap}
+ #editbar.visible{display:flex}
+ .eb-label{color:var(--dim2);font-size:10px;letter-spacing:1px;-webkit-user-select:none;user-select:none;white-space:nowrap}
+ .eb-sep{width:1px;height:16px;background:var(--dim);flex-shrink:0}
+ .csw{width:14px;height:14px;display:inline-block;cursor:pointer;border:1px solid #333;flex-shrink:0;transition:transform .1s,border-color .1s;position:relative}
+ .csw:hover{border-color:var(--cyan);transform:scale(1.3);z-index:1}
+ .csw.sel{border:2px solid #fff !important}
+ .eb-btn{background:none;border:1px solid var(--dim);color:var(--dim2);font-family:inherit;font-size:10px;padding:2px 8px;cursor:pointer;letter-spacing:1px;transition:all .15s;white-space:nowrap}
+ .eb-btn:hover{border-color:var(--cyan-dk);color:var(--cyan)}
+ .eb-btn.active{border-color:var(--cyan);color:var(--cyan)}
+ .swatch-row{display:flex;gap:2px}
+ #active-char-wrap{display:flex;align-items:center;gap:4px;cursor:pointer}
+ #active-char-box{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid var(--cyan-dk);font-family:'IBM VGA 8x16',monospace;font-size:16px;line-height:1;background:#000;color:#fff}
+ #active-char-wrap:hover #active-char-box{border-color:var(--cyan)}
+ #charpicker{display:none;position:fixed;z-index:200;background:#000;border:1px solid var(--cyan-dk);padding:6px;box-shadow:0 0 20px rgba(0,0,0,.9)}
+ #charpicker.visible{display:block}
+ #canvas-bg-picker{display:none;position:fixed;z-index:200;background:#000;border:1px solid var(--cyan-dk);padding:6px;box-shadow:0 0 20px rgba(0,0,0,.9)}
+ #canvas-bg-picker.visible{display:block}
+ #cbp-grid{display:grid;grid-template-columns:repeat(8,18px);gap:2px}
+ #canvas-bg-swatch{width:22px;height:22px;border:1px solid var(--cyan-dk);cursor:pointer;flex-shrink:0}
+ #canvas-bg-swatch:hover{border-color:var(--cyan)}
+ /* Tab bar */
+ #tabbar{position:sticky;top:0;z-index:95;background:#000;border-bottom:1px solid var(--border);display:flex;align-items:stretch;overflow-x:auto;flex-shrink:0}
+ .tab{background:none;border:none;border-right:1px solid var(--border);color:var(--dim2);font-family:inherit;font-size:11px;padding:4px 10px 4px 12px;cursor:pointer;letter-spacing:1px;white-space:nowrap;display:flex;align-items:center;gap:5px;flex-shrink:0}
+ .tab:hover{background:rgba(255,255,255,.03);color:var(--white)}
+ .tab.active{background:rgba(0,229,204,.05);color:var(--cyan);border-bottom:2px solid var(--cyan)}
+ .tab-x{opacity:.4;font-size:13px;line-height:1;cursor:pointer;padding:0 2px;-webkit-user-select:none;user-select:none}
+ .tab-x:hover{opacity:1}
+ #tab-add{background:none;border:none;color:var(--dim2);font-family:inherit;font-size:16px;line-height:1;padding:0 12px;cursor:pointer}
+ #tab-add:hover{color:var(--cyan)}
+ #cp-grid{display:grid;grid-template-columns:repeat(32,18px);gap:1px}
+ .cpc{width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-family:'IBM VGA 8x16',monospace;font-size:13px;line-height:1;cursor:pointer;color:#aaa;border:1px solid transparent;-webkit-user-select:none;user-select:none}
+ .cpc:hover{background:var(--cyan-dk);color:#fff}
+ .cpc.sel{border-color:var(--cyan);color:var(--cyan)}
+ #new-dlg{display:none;position:fixed;z-index:200;top:50%;left:50%;transform:translate(-50%,-50%);background:#0a0a0a;border:1px solid var(--cyan-dk);padding:24px;min-width:260px}
+ #new-dlg.visible{display:block}
+ #new-dlg h3{color:var(--cyan);font-size:11px;letter-spacing:2px;margin-bottom:16px}
+ .dlg-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}
+ .dlg-row label{color:var(--dim2);font-size:11px;width:70px}
+ .dlg-row input{background:#000;border:1px solid var(--dim);color:var(--cyan);font-family:inherit;font-size:11px;padding:3px 8px;width:90px}
+ .dlg-btns{display:flex;gap:8px;margin-top:16px;justify-content:flex-end}
+ #overlay{display:none;position:fixed;inset:0;z-index:150;background:rgba(0,0,0,.6)}
+ #overlay.visible{display:block}
+ #help-overlay{display:none;position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.82);align-items:center;justify-content:center}
+ #help-overlay.visible{display:flex}
+ #help-box{background:#0a0a0a;border:1px solid var(--cyan-dk);padding:28px 32px;max-width:580px;width:90%;max-height:90vh;overflow-y:auto;box-shadow:0 0 40px rgba(0,229,204,.08)}
+ #help-box h2{color:var(--cyan);font-size:11px;letter-spacing:4px;margin-bottom:20px;text-align:center}
+ .help-section{margin-bottom:18px}
+ .help-section h3{color:var(--dim2);font-size:10px;letter-spacing:2px;margin-bottom:8px;border-bottom:1px solid var(--border);padding-bottom:4px}
+ .help-row{display:flex;gap:12px;margin-bottom:5px;align-items:baseline}
+ .help-key{color:var(--cyan);font-size:11px;min-width:160px;flex-shrink:0}
+ .help-key kbd{background:#111;border:1px solid var(--cyan-dk);padding:1px 5px;border-radius:2px;font-family:inherit;font-size:10px}
+ .help-desc{color:var(--white);font-size:11px;opacity:.75}
+ #help-close{display:block;margin:20px auto 0;background:none;border:1px solid var(--cyan-dk);color:var(--cyan);font-family:inherit;font-size:11px;padding:4px 20px;cursor:pointer;letter-spacing:1px}
+ #help-close:hover{background:var(--cyan-dk)}
+ #help-titlebar{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
+ #help-titlebar h2{margin-bottom:0}
+ #os-toggle{display:flex;border:1px solid var(--cyan-dk);font-size:10px}
+ .os-btn{background:none;color:var(--dim2);border:none;padding:3px 10px;font-family:inherit;cursor:pointer;letter-spacing:1px}
+ .os-btn.active{background:var(--cyan-dk);color:#fff}
+ /* Active color preview */
+ #color-preview{position:relative;width:30px;height:24px;flex-shrink:0;cursor:default}
+ #cp-bg-box{position:absolute;bottom:0;right:0;width:18px;height:18px;border:1px solid #444}
+ #cp-fg-box{position:absolute;top:0;left:0;width:18px;height:18px;border:1px solid #aaa;box-shadow:0 0 0 1px #000}
+ /* Image convert dialog */
+ #img-dlg{display:none;position:fixed;z-index:200;top:50%;left:50%;transform:translate(-50%,-50%);background:#0a0a0a;border:1px solid var(--cyan-dk);padding:24px;min-width:280px}
+ #img-dlg.visible{display:block}
+ #img-dlg h3{color:var(--cyan);font-size:11px;letter-spacing:2px;margin-bottom:16px}
+ .dlg-check{display:flex;align-items:center;gap:8px;margin-bottom:10px}
+ .dlg-check label{color:var(--dim2);font-size:11px}
+ .dlg-check input[type=checkbox]{accent-color:var(--cyan);cursor:pointer}
+ #img-preview-wrap{margin:12px 0;text-align:center;min-height:40px}
+ #img-preview{max-width:100%;max-height:200px;image-rendering:pixelated}
+</style>
+</head>
+<body>
+
+<div id="topbar">
+ <div class="logo">NFO<em>::</em>ANS<em>::</em>EDITOR</div>
+ <button type="button" class="tb-btn" onclick="document.getElementById('file-input').click()" title="Ctrl+O">[ OPEN ]</button>
+ <button type="button" class="tb-btn dim" onclick="showNewDlg()" title="Ctrl+N">[ NEW ]</button>
+ <button type="button" class="tb-btn dim" onclick="document.getElementById('img-input').click()" title="Konvertera bild till ANSI">[ BILD→ANS ]</button>
+ <input type="file" id="file-input" accept=".nfo,.ans,.txt,.diz,.asc,.ansi">
+ <input type="file" id="img-input" accept="image/*" title="Välj bild att konvertera till ANSI">
+ <div id="filename">drop .nfo / .ans anywhere</div>
+ <div id="width-wrap">
+ <label>cols:</label>
+ <select id="width-sel" onchange="rerender()">
+ <option value="80">80</option>
+ <option value="160">160</option>
+ <option value="0">auto</option>
+ </select>
+ </div>
+ <button type="button" id="export-btn" class="tb-btn dim hidden" onclick="exportHTML()" title="Ctrl+Shift+S">[ EXPORT HTML ]</button>
+ <button type="button" id="exportans-btn" class="tb-btn dim hidden" onclick="exportANS()" title="Ctrl+S">[ EXPORT ANS ]</button>
+ <button type="button" id="edit-btn" class="tb-btn dim hidden" onclick="toggleEdit()" title="Esc (exit edit)">[ EDIT ]</button>
+ <button type="button" class="tb-btn dim" onclick="showHelp()" title="?">[ ? ]</button>
+</div>
+
+<div id="tabbar"></div>
+
+<div id="help-overlay" onclick="hideHelp()">
+ <div id="help-box" onclick="event.stopPropagation()">
+ <div id="help-titlebar">
+ <h2>KEYBOARD SHORTCUTS</h2>
+ <div id="os-toggle">
+ <button type="button" id="os-win" class="os-btn active" onclick="setOsMode('win')">WIN</button>
+ <button type="button" id="os-mac" class="os-btn" onclick="setOsMode('mac')">MAC</button>
+ </div>
+ </div>
+
+ <div class="help-section">
+ <h3>GLOBAL</h3>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>O</kbd></span><span class="help-desc">Öppna fil</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>N</kbd></span><span class="help-desc">Ny canvas</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>S</kbd></span><span class="help-desc">Exportera ANS</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>S</kbd></span><span class="help-desc">Exportera HTML</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>Z</kbd></span><span class="help-desc">Ångra</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>Y</kbd></span><span class="help-desc">Gör om</span></div>
+ </div>
+
+ <div class="help-section">
+ <h3>EDIT-LÄGE</h3>
+ <div class="help-row"><span class="help-key"><kbd>Esc</kbd></span><span class="help-desc">Avsluta edit-läge</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Tab</kbd></span><span class="help-desc">Växla TEXT ↔ DRAW</span></div>
+ <div class="help-row"><span class="help-key"><kbd>F2</kbd></span><span class="help-desc">Öppna teckenpanel</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>Delete</kbd></span><span class="help-desc">Radera aktuell rad</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>Insert</kbd></span><span class="help-desc">Infoga tom rad</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>+</kbd></span><span class="help-desc">Zooma in</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Ctrl</kbd> + <kbd>-</kbd></span><span class="help-desc">Zooma ut</span></div>
+ </div>
+
+ <div class="help-section">
+ <h3>TEXT-LÄGE</h3>
+ <div class="help-row"><span class="help-key"><kbd>Piltangenter</kbd></span><span class="help-desc">Flytta markör</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Home</kbd> / <kbd>End</kbd></span><span class="help-desc">Radstart / radslut</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Enter</kbd></span><span class="help-desc">Ny rad</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Backspace</kbd></span><span class="help-desc">Radera tecken till vänster</span></div>
+ <div class="help-row"><span class="help-key"><kbd>Delete</kbd></span><span class="help-desc">Radera tecken vid markör</span></div>
+ <div class="help-row"><span class="help-key">Valfritt tecken</span><span class="help-desc">Skriv med aktiv FG/BG-färg</span></div>
+ </div>
+
+ <div class="help-section">
+ <h3>DRAW-LÄGE</h3>
+ <div class="help-row"><span class="help-key">Klick</span><span class="help-desc">Måla cell med aktivt tecken</span></div>
+ <div class="help-row"><span class="help-key">Klick + drag</span><span class="help-desc">Måla längs drag</span></div>
+ <div class="help-row"><span class="help-key"><kbd>F2</kbd></span><span class="help-desc">Välj aktivt tecken</span></div>
+ </div>
+
+ <button type="button" id="help-close" onclick="hideHelp()">[ STÄNG ]</button>
+ </div>
+</div>
+
+<div id="editbar">
+ <button type="button" class="eb-btn active" id="mode-text-btn" onclick="setMode('text')" title="Tab">[ TEXT ]</button>
+ <button type="button" class="eb-btn" id="mode-draw-btn" onclick="setMode('draw')" title="Tab">[ DRAW ]</button>
+ <button type="button" class="eb-btn" id="mode-sel-btn" onclick="setMode('select')" title="Markera område">[ SEL ]</button>
+ <div class="eb-sep"></div>
+ <div id="color-preview" title="Aktiv FG/BG">
+ <div id="cp-bg-box"></div>
+ <div id="cp-fg-box"></div>
+ </div>
+ <div class="eb-sep"></div>
+ <div id="active-char-wrap" onclick="toggleCharPicker(event)" title="F2 — pick character">
+ <span class="eb-label">CHAR:</span>
+ <div id="active-char-box">█</div>
+ </div>
+ <div class="eb-sep"></div>
+ <span class="eb-label">FG:</span>
+ <div id="fg-swatches" class="swatch-row"></div>
+ <div class="eb-sep"></div>
+ <span class="eb-label">BG:</span>
+ <div id="bg-swatches" class="swatch-row"></div>
+ <div class="eb-sep"></div>
+ <span class="eb-label">YTA:</span>
+ <div id="canvas-bg-swatch" title="Arbetsytans bakgrundsfärg — klicka för att byta" onclick="toggleCanvasBgPicker(event)"></div>
+ <div class="eb-sep"></div>
+ <button type="button" class="eb-btn" onclick="deleteRow()" title="Ctrl+Delete">[ DEL ROW ]</button>
+ <button type="button" class="eb-btn" onclick="insertRow()" title="Ctrl+Insert">[ INS ROW ]</button>
+ <button type="button" class="eb-btn" id="center-btn" onclick="toggleCenter()">[ CENTER ]</button>
+ <button type="button" class="eb-btn" onclick="adjFont(1)" title="Ctrl++">[ A+ ]</button>
+ <button type="button" class="eb-btn" onclick="adjFont(-1)" title="Ctrl+-">[ A- ]</button>
+ <div class="eb-sep"></div>
+ <button type="button" class="eb-btn" onclick="undo()" title="Ctrl+Z">[ ↩ UNDO ]</button>
+ <button type="button" class="eb-btn" onclick="redo()" title="Ctrl+Y / Ctrl+Shift+Z">[ ↪ REDO ]</button>
+ <div class="eb-sep"></div>
+ <span class="eb-label" id="cur-pos">0,0</span>
+</div>
+
+<div id="charpicker"><div id="cp-grid"></div></div>
+<div id="canvas-bg-picker"><div id="cbp-grid"></div></div>
+
+<div id="overlay" onclick="hideActiveDialog()"></div>
+<div id="new-dlg">
+ <h3>NEW CANVAS</h3>
+ <div class="dlg-row"><label>Columns</label><input type="number" id="dlg-cols" value="80" min="20" max="320"></div>
+ <div class="dlg-row"><label>Rows</label><input type="number" id="dlg-rows" value="25" min="5" max="300"></div>
+ <div class="dlg-btns">
+ <button type="button" class="eb-btn" onclick="hideNewDlg()">[ CANCEL ]</button>
+ <button class="eb-btn active" onclick="createNewCanvas()">[ CREATE ]</button>
+ </div>
+</div>
+
+<div id="img-dlg">
+ <h3>BILD → ANSI</h3>
+ <div class="dlg-row"><label>Kolonner</label><input type="number" id="img-cols" value="80" min="10" max="320" oninput="imgAutoRows()"></div>
+ <div class="dlg-row"><label>Rader</label><input type="number" id="img-rows" value="40" min="5" max="300"></div>
+ <div class="dlg-check"><input type="checkbox" id="img-half" checked><label for="img-half">Halvblock ▀ (dubbel vertikal upplösning)</label></div>
+ <div class="dlg-check"><input type="checkbox" id="img-dither" checked><label for="img-dither">Dithering (bättre färgövergångar)</label></div>
+ <div class="dlg-check"><input type="checkbox" id="img-aspect" checked onchange="imgAutoRows()"><label for="img-aspect">Bevara proportioner</label></div>
+ <div id="img-preview-wrap"></div>
+ <div class="dlg-btns">
+ <button type="button" class="eb-btn" onclick="hideImgDlg()">[ AVBRYT ]</button>
+ <button type="button" class="eb-btn active" onclick="doImgConvert()">[ KONVERTERA ]</button>
+ </div>
+</div>
+
+<div id="dropzone" onclick="document.getElementById('file-input').click()">
+ <div class="deco">\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/</div>
+ <div class="drop-box">
+ <div class="drop-title">DROP FILE HERE</div>
+ <div class="drop-sub">.nfo .ans .diz .asc .txt<br>CP437 + ANSI color + cursor forward<br><br>click to browse · or [ NEW ] for blank canvas</div>
+ </div>
+ <div class="deco">\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/</div>
+</div>
+
+<div id="output-wrap">
+ <div id="canvas-wrap">
+ <canvas id="screen" tabindex="0"></canvas>
+ <div id="cursor-el"></div>
+ </div>
+</div>
+
+<div id="statusbar">
+ <div>file: <b id="s-name">—</b></div>
+ <div>size: <b id="s-size">—</b></div>
+ <div>type: <b id="s-type">—</b></div>
+ <div>dims: <b id="s-dims">—</b></div>
+ <div>encoding: <b>CP437</b></div>
+</div>
+
+<script>
+'use strict';
+
+const CP437 = new Uint32Array([
+ 0,0x263A,0x263B,0x2665,0x2666,0x2663,0x2660,0x2022,0x25D8,0x25CB,0x25D9,0x2642,0x2640,0x266A,0x266B,0x263C,
+ 0x25BA,0x25C4,0x2195,0x203C,0xB6,0xA7,0x25AC,0x21A8,0x2191,0x2193,0x2192,0x2190,0x221F,0x2194,0x25B2,0x25BC,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+ 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x2302,
+ 0xC7,0xFC,0xE9,0xE2,0xE4,0xE0,0xE5,0xE7,0xEA,0xEB,0xE8,0xEF,0xEE,0xEC,0xC4,0xC5,
+ 0xC9,0xE6,0xC6,0xF4,0xF6,0xF2,0xFB,0xF9,0xFF,0xD6,0xDC,0xA2,0xA3,0xA5,0x20A7,0x192,
+ 0xE1,0xED,0xF3,0xFA,0xF1,0xD1,0xAA,0xBA,0xBF,0x2310,0xAC,0xBD,0xBC,0xA1,0xAB,0xBB,
+ 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,
+ 0x255D,0x255C,0x255B,0x2510,0x2514,0x2534,0x252C,0x251C,0x2500,0x253C,0x255E,0x255F,
+ 0x255A,0x2554,0x2569,0x2566,0x2560,0x2550,0x256C,0x2567,0x2568,0x2564,0x2565,0x2559,
+ 0x2558,0x2552,0x2553,0x256B,0x256A,0x2518,0x250C,0x2588,0x2584,0x258C,0x2590,0x2580,
+ 0x3B1,0xDF,0x393,0x3C0,0x3A3,0x3C3,0xB5,0x3C4,0x3A6,0x398,0x3A9,0x3B4,0x221E,0x3C6,
+ 0x3B5,0x2229,0x2261,0xB1,0x2265,0x2264,0x2320,0x2321,0xF7,0x2248,0xB0,0x2219,0xB7,
+ 0x221A,0x207F,0xB2,0x25A0,0xA0
+]);
+
+const CP437_REV = new Map();
+for (let i = 1; i < 256; i++) CP437_REV.set(CP437[i], i);
+CP437_REV.set(0x20, 0x20);
+
+const TRANSP_BG = 'repeating-conic-gradient(#888 0% 25%,#fff 0% 50%) 0/8px 8px';
+const PALETTE = [
+ '#000000','#aa0000','#00aa00','#aa5500',
+ '#0000aa','#aa00aa','#00aaaa','#aaaaaa',
+ '#555555','#ff5555','#55ff55','#ffff55',
+ '#5555ff','#ff55ff','#55ffff','#ffffff'
+];
+
+// ── Data model ───────────────────────────────────────────────────────────────
+let sparseMap = new Map();
+let lastBytes = null, lastFile = null;
+let canvasCols = 80, canvasRows = 25;
+let canvasBg = '#000000';
+
+// ── Canvas metrics ───────────────────────────────────────────────────────────
+const DPR = window.devicePixelRatio || 1;
+let CHAR_W = 8, CHAR_H = 16, fontScale = 1;
+
+document.fonts.ready.then(() => {
+ const off = document.createElement('canvas');
+ const octx = off.getContext('2d');
+ octx.font = '16px "IBM VGA 8x16"';
+ CHAR_W = Math.round(octx.measureText('\u2588').width) || 8;
+ if (sparseMap.size > 0) drawAll();
+});
+
+// ── Edit state ───────────────────────────────────────────────────────────────
+let editMode = false, drawMode = 'text';
+let curRow = 0, curCol = 0;
+let activeFg = 7, activeBg = -1;
+let activeChar = '\u2588';
+let isPainting = false, isCentered = false;
+let undoStack = [], redoStack = [];
+let selActive = false, selDragging = false;
+let selR1 = 0, selC1 = 0, selR2 = 0, selC2 = 0;
+let clipboard = null;
+
+// ── Tabs ──────────────────────────────────────────────────────────────────────
+function newTabState() {
+ return { name:'untitled', sparseMap:new Map(), lastFile:null, lastBytes:null,
+ canvasCols:80, canvasRows:25, canvasBg:'#000000',
+ undoStack:[], redoStack:[], isCentered:false };
+}
+let tabs = [newTabState()];
+let activeTab = 0;
+
+updateColorPreview();
+document.getElementById('canvas-bg-swatch').style.background = canvasBg;
+renderTabs();
+
+// ── Canvas rendering ─────────────────────────────────────────────────────────
+const canvas = document.getElementById('screen');
+let ctx = null;
+
+function cw() { return Math.round(fontScale * CHAR_W); }
+function ch() { return Math.round(fontScale * CHAR_H); }
+
+function getBounds(map) {
+ let maxRow = 0, maxCol = 0;
+ for (const key of map.keys()) {
+ const r = Math.floor(key / 100000), c = key % 100000;
+ if (r > maxRow) maxRow = r;
+ if (c > maxCol) maxCol = c;
+ }
+ return { maxRow, maxCol };
+}
+
+function drawAll() {
+ const { maxRow, maxCol } = getBounds(sparseMap);
+ const rows = Math.max(maxRow + 1, canvasRows);
+ const cols = Math.max(maxCol + 1, canvasCols);
+ const W = cols * cw(), H = rows * ch();
+
+ canvas.style.width = W + 'px';
+ canvas.style.height = H + 'px';
+ canvas.width = W * DPR;
+ canvas.height = H * DPR;
+
+ ctx = canvas.getContext('2d');
+ ctx.scale(DPR, DPR);
+ ctx.fillStyle = canvasBg;
+ ctx.fillRect(0, 0, W, H);
+ ctx.font = `${fontScale * CHAR_H}px "IBM VGA 8x16"`;
+ ctx.textBaseline = 'top';
+
+ for (const [key, cell] of sparseMap) {
+ const row = Math.floor(key / 100000), col = key % 100000;
+ const x = col * cw(), y = row * ch();
+ if (cell.bg >= 0) {
+ ctx.fillStyle = PALETTE[cell.bg];
+ ctx.fillRect(x, y, cw(), ch());
+ }
+ ctx.fillStyle = PALETTE[cell.fg] || PALETTE[7];
+ ctx.fillText(cell.ch, x, y);
+ }
+ drawSelection();
+ updateCursor();
+}
+
+function drawCell(row, col, cell) {
+ if (!ctx) return;
+ const x = col * cw(), y = row * ch();
+ ctx.fillStyle = canvasBg;
+ ctx.fillRect(x, y, cw(), ch());
+ if (!cell) return;
+ if (cell.bg >= 0) {
+ ctx.fillStyle = PALETTE[cell.bg];
+ ctx.fillRect(x, y, cw(), ch());
+ }
+ ctx.font = `${fontScale * CHAR_H}px "IBM VGA 8x16"`;
+ ctx.textBaseline = 'top';
+ ctx.fillStyle = PALETTE[cell.fg] || PALETTE[7];
+ ctx.fillText(cell.ch, x, y);
+}
+
+function updateCursor() {
+ const el = document.getElementById('cursor-el');
+ if (!editMode || drawMode !== 'text') { el.style.display = 'none'; return; }
+ el.style.display = 'block';
+ el.style.width = cw() + 'px';
+ el.style.height = ch() + 'px';
+ el.style.left = (curCol * cw()) + 'px';
+ el.style.top = (curRow * ch()) + 'px';
+ document.getElementById('cur-pos').textContent = curRow + ',' + curCol;
+}
+
+// ── ANSI parser ───────────────────────────────────────────────────────────────
+function parse(bytes, cols) {
+ sparseMap = new Map();
+ let end = bytes.length;
+ for (let i = Math.max(0, end - 256); i < end - 5; i++) {
+ if (bytes[i]===0x53&&bytes[i+1]===0x41&&bytes[i+2]===0x55&&
+ bytes[i+3]===0x43&&bytes[i+4]===0x45) {
+ end = i;
+ if (end > 0 && bytes[end-1] === 0x1a) end--;
+ break;
+ }
+ }
+ let row = 0, col = 0, fg = 7, bg = -1, bold = false;
+ const COLS = cols || 80;
+ let wrapPending = false;
+ let i = 0;
+ while (i < end) {
+ const b = bytes[i];
+ if (b === 0x1b && i+1 < end && bytes[i+1] === 0x5b) {
+ i += 2;
+ let seq = '';
+ while (i < end && !(bytes[i] >= 0x41 && bytes[i] <= 0x7a))
+ seq += String.fromCharCode(bytes[i++]);
+ const cmd = i < end ? String.fromCharCode(bytes[i++]) : '';
+ const parts = seq.split(';');
+ const n0 = parts[0]===''||parts[0]==null ? 0 : parseInt(parts[0],10)||0;
+ if (cmd==='C') { col += n0||1; }
+ else if (cmd==='m') {
+ for (const n of parts.map(p=>p===''?0:parseInt(p,10)||0)) {
+ if (n===0) { fg=7; bg=-1; bold=false; }
+ else if (n===1) bold=true;
+ else if (n===22) bold=false;
+ else if (n>=30&&n<=37) fg=n-30;
+ else if (n===39) fg=7;
+ else if (n>=40&&n<=47) bg=n-40;
+ else if (n===49) bg=-1;
+ else if (n>=90&&n<=97) fg=n-90+8;
+ else if (n>=100&&n<=107) bg=n-100+8;
+ }
+ } else if (cmd==='A') { row=Math.max(0,row-(n0||1)); }
+ else if (cmd==='B') { row+=n0||1; }
+ else if (cmd==='D') { col=Math.max(0,col-(n0||1)); }
+ else if (cmd==='H'||cmd==='f') {
+ row=Math.max(0,parseInt(parts[0]||'1',10)-1);
+ col=Math.max(0,parseInt(parts[1]||'1',10)-1);
+ } else if (cmd==='J') { if (n0===2) { sparseMap.clear(); row=0; col=0; } }
+ continue;
+ }
+ if (b===0x0d) { col=0; wrapPending=false; i++; continue; }
+ if (b===0x0a) { if (!wrapPending) row++; wrapPending=false; col=0; i++; continue; }
+ if (b===0x09) { col=(Math.floor(col/8)+1)*8; i++; continue; }
+ if (wrapPending) { row++; col=0; wrapPending=false; }
+ const fgIdx = bold ? Math.min(fg+8,15) : fg;
+ sparseMap.set(row*100000+col, { ch: String.fromCodePoint(CP437[b]), fg:fgIdx, bg });
+ col++;
+ if (COLS>0 && col>=COLS) { col=0; wrapPending=true; }
+ i++;
+ }
+}
+
+// ── File loading ──────────────────────────────────────────────────────────────
+function processFile(file) {
+ const reader = new FileReader();
+ reader.onload = e => {
+ lastBytes = new Uint8Array(e.target.result);
+ lastFile = file;
+ doRender(parseInt(document.getElementById('width-sel').value, 10));
+ };
+ reader.readAsArrayBuffer(file);
+}
+
+function doRender(cols) {
+ canvasCols = cols || 80;
+ parse(lastBytes, cols);
+ const { maxRow: mr } = getBounds(sparseMap);
+ canvasRows = mr + 1;
+ drawAll();
+ const { maxRow, maxCol } = getBounds(sparseMap);
+ const hasColor = [...sparseMap.values()].some(c => c.fg !== 7 || c.bg >= 0);
+ showOutput();
+ document.getElementById('filename').textContent = lastFile.name;
+ document.getElementById('s-name').textContent = lastFile.name;
+ document.getElementById('s-size').textContent = fmt(lastFile.size);
+ document.getElementById('s-type').textContent = hasColor ? 'ANSI color' : 'plain CP437';
+ document.getElementById('s-dims').textContent = `${maxCol+1}×${maxRow+1}`;
+ document.getElementById('width-wrap').classList.add('visible');
+ tabs[activeTab].name = lastFile.name;
+ renderTabs();
+}
+
+function rerender() {
+ if (!lastBytes) return;
+ doRender(parseInt(document.getElementById('width-sel').value, 10));
+}
+
+function showOutput() {
+ document.getElementById('output-wrap').classList.add('visible');
+ document.getElementById('dropzone').style.display = 'none';
+ document.getElementById('export-btn').classList.remove('hidden');
+ document.getElementById('exportans-btn').classList.remove('hidden');
+ document.getElementById('edit-btn').classList.remove('hidden');
+}
+
+function fmt(n) {
+ if (n < 1024) return n + ' B';
+ if (n < 1048576) return (n/1024).toFixed(1) + ' KB';
+ return (n/1048576).toFixed(2) + ' MB';
+}
+
+// ── Edit mode ─────────────────────────────────────────────────────────────────
+function toggleEdit() {
+ editMode = !editMode;
+ const editbar = document.getElementById('editbar');
+ const btn = document.getElementById('edit-btn');
+ const sb = document.getElementById('statusbar');
+ editbar.classList.toggle('visible', editMode);
+ btn.classList.toggle('active', editMode);
+ btn.textContent = editMode ? '[ EDITING ]' : '[ EDIT ]';
+ if (editMode) {
+ canvas.focus();
+ requestAnimationFrame(() => { sb.style.bottom = editbar.offsetHeight + 'px'; });
+ updateCursor();
+ } else {
+ sb.style.bottom = '';
+ document.getElementById('cursor-el').style.display = 'none';
+ hideCharPicker();
+ }
+}
+
+function setMode(m) {
+ drawMode = m;
+ document.getElementById('mode-text-btn').classList.toggle('active', m === 'text');
+ document.getElementById('mode-draw-btn').classList.toggle('active', m === 'draw');
+ document.getElementById('mode-sel-btn').classList.toggle('active', m === 'select');
+ canvas.style.cursor = (m === 'draw' || m === 'select') ? 'crosshair' : 'text';
+ if (m !== 'select') { selActive = false; if (ctx) drawAll(); }
+ updateCursor();
+}
+
+// ── Color swatches ────────────────────────────────────────────────────────────
+(function buildSwatches() {
+ const fgDiv = document.getElementById('fg-swatches');
+ const bgDiv = document.getElementById('bg-swatches');
+ PALETTE.forEach((color, i) => {
+ const fs = document.createElement('span');
+ fs.className = 'csw' + (i === activeFg ? ' sel' : '');
+ fs.style.background = color;
+ fs.title = 'FG ' + i;
+ fs.dataset.idx = i;
+ fs.addEventListener('mousedown', e => { e.preventDefault(); setActiveFg(i); });
+ fgDiv.appendChild(fs);
+ const bs = document.createElement('span');
+ bs.className = 'csw';
+ bs.style.background = color;
+ bs.title = 'BG ' + i;
+ bs.dataset.idx = i;
+ bs.addEventListener('mousedown', e => { e.preventDefault(); setActiveBg(i); });
+ bgDiv.appendChild(bs);
+ });
+ // Transparent BG swatch
+ const ns = document.createElement('span');
+ ns.className = 'csw sel';
+ ns.style.background = TRANSP_BG;
+ ns.title = 'BG none';
+ ns.dataset.idx = -1;
+ ns.addEventListener('mousedown', e => { e.preventDefault(); setActiveBg(-1); });
+ bgDiv.appendChild(ns);
+})();
+
+function updateColorPreview() {
+ document.getElementById('cp-fg-box').style.background = PALETTE[activeFg];
+ document.getElementById('cp-bg-box').style.background =
+ activeBg >= 0 ? PALETTE[activeBg] : TRANSP_BG;
+}
+function setActiveFg(i) {
+ activeFg = i;
+ document.querySelectorAll('#fg-swatches .csw').forEach(s =>
+ s.classList.toggle('sel', +s.dataset.idx === i));
+ updateColorPreview();
+}
+function setActiveBg(i) {
+ activeBg = i;
+ document.querySelectorAll('#bg-swatches .csw').forEach(s =>
+ s.classList.toggle('sel', +s.dataset.idx === i));
+ updateColorPreview();
+}
+
+// ── Char picker ───────────────────────────────────────────────────────────────
+(function buildCharPicker() {
+ const grid = document.getElementById('cp-grid');
+ for (let i = 1; i < 256; i++) {
+ const cell = document.createElement('div');
+ cell.className = 'cpc';
+ cell.textContent = String.fromCodePoint(CP437[i]);
+ cell.dataset.idx = i;
+ cell.title = '#' + i + ' 0x' + i.toString(16).toUpperCase().padStart(2,'0');
+ cell.addEventListener('click', () => {
+ activeChar = String.fromCodePoint(CP437[i]);
+ document.getElementById('active-char-box').textContent = activeChar;
+ document.querySelectorAll('.cpc').forEach(c => c.classList.toggle('sel', c === cell));
+ hideCharPicker();
+ });
+ grid.appendChild(cell);
+ }
+})();
+
+function toggleCharPicker(e) {
+ e.stopPropagation();
+ const picker = document.getElementById('charpicker');
+ if (picker.classList.contains('visible')) { hideCharPicker(); return; }
+ const ebH = document.getElementById('editbar').offsetHeight;
+ picker.style.bottom = (ebH + 4) + 'px';
+ picker.style.left = '16px';
+ picker.classList.add('visible');
+}
+function hideCharPicker() {
+ document.getElementById('charpicker').classList.remove('visible');
+}
+
+// ── Canvas background picker ──────────────────────────────────────────────────
+(function buildCanvasBgPicker() {
+ const grid = document.getElementById('cbp-grid');
+ PALETTE.forEach((color, i) => {
+ const s = document.createElement('div');
+ s.className = 'csw';
+ s.style.background = color;
+ s.title = color;
+ s.addEventListener('mousedown', e => { e.preventDefault(); setCanvasBg(color); });
+ grid.appendChild(s);
+ });
+})();
+
+function toggleCanvasBgPicker(e) {
+ e.stopPropagation();
+ const picker = document.getElementById('canvas-bg-picker');
+ if (picker.classList.contains('visible')) { hideCanvasBgPicker(); return; }
+ const ebH = document.getElementById('editbar').offsetHeight;
+ picker.style.bottom = (ebH + 4) + 'px';
+ const rect = document.getElementById('canvas-bg-swatch').getBoundingClientRect();
+ picker.style.left = rect.left + 'px';
+ picker.classList.add('visible');
+}
+function hideCanvasBgPicker() {
+ document.getElementById('canvas-bg-picker').classList.remove('visible');
+}
+function setCanvasBg(color) {
+ canvasBg = color;
+ document.getElementById('canvas-bg-swatch').style.background = color;
+ hideCanvasBgPicker();
+ if (ctx) drawAll();
+}
+document.addEventListener('click', e => {
+ if (!document.getElementById('canvas-bg-picker').contains(e.target) &&
+ !document.getElementById('canvas-bg-swatch').contains(e.target))
+ hideCanvasBgPicker();
+});
+document.addEventListener('click', e => {
+ if (!document.getElementById('charpicker').contains(e.target) &&
+ !document.getElementById('active-char-wrap').contains(e.target))
+ hideCharPicker();
+});
+
+// ── Mouse on canvas ───────────────────────────────────────────────────────────
+function cellFromEvent(e) {
+ const rect = canvas.getBoundingClientRect();
+ return {
+ row: Math.max(0, Math.floor((e.clientY - rect.top) / ch())),
+ col: Math.max(0, Math.floor((e.clientX - rect.left) / cw()))
+ };
+}
+
+canvas.addEventListener('mousedown', e => {
+ if (!editMode) return;
+ e.preventDefault();
+ canvas.focus();
+ const { row, col } = cellFromEvent(e);
+ curRow = row; curCol = col;
+ if (drawMode === 'select') {
+ selActive = true; selDragging = true;
+ selR1 = selR2 = row; selC1 = selC2 = col;
+ drawAll();
+ } else if (drawMode === 'draw') {
+ pushUndo();
+ isPainting = true;
+ paintCell(row, col);
+ } else {
+ updateCursor();
+ }
+});
+
+canvas.addEventListener('mousemove', e => {
+ if (!editMode) return;
+ const { row, col } = cellFromEvent(e);
+ if (drawMode === 'select' && selDragging) {
+ selR2 = row; selC2 = col; drawAll(); return;
+ }
+ if (!isPainting || drawMode !== 'draw') return;
+ paintCell(row, col);
+});
+
+canvas.addEventListener('mouseup', () => { isPainting = false; selDragging = false; });
+canvas.addEventListener('mouseleave', () => { isPainting = false; selDragging = false; });
+
+function paintCell(row, col) {
+ const key = row * 100000 + col;
+ const cell = { ch: activeChar, fg: activeFg, bg: activeBg };
+ const existing = sparseMap.get(key);
+ if (existing && existing.ch===cell.ch && existing.fg===cell.fg && existing.bg===cell.bg) return;
+ sparseMap.set(key, cell);
+ drawCell(row, col, cell);
+}
+
+// ── Keyboard ──────────────────────────────────────────────────────────────────
+canvas.addEventListener('keydown', e => {
+ if (!editMode) return;
+ const ctrl = e.ctrlKey || e.metaKey;
+
+ // ── Shortcuts available in both modes ────────────────────────────────────
+ if (ctrl && (e.key==='z'||e.key==='Z')) { e.preventDefault(); undo(); return; }
+ if (ctrl && (e.key==='y'||e.key==='Y')) { e.preventDefault(); redo(); return; }
+ if (ctrl && (e.key==='c'||e.key==='C')) { e.preventDefault(); copySelection(); return; }
+ if (ctrl && (e.key==='x'||e.key==='X')) { e.preventDefault(); cutSelection(); return; }
+ if (ctrl && (e.key==='v'||e.key==='V')) { e.preventDefault(); pasteClipboard(); return; }
+ if (e.key==='Escape') {
+ if (selActive) { e.preventDefault(); selActive=false; drawAll(); return; }
+ e.preventDefault(); toggleEdit(); return;
+ }
+ if (e.key==='Tab') { e.preventDefault(); setMode(drawMode==='text'?'draw':'text'); return; }
+ if (ctrl && e.key==='Delete') { e.preventDefault(); deleteRow(); return; }
+ if (ctrl && e.key==='Insert') { e.preventDefault(); insertRow(); return; }
+ if (ctrl && (e.key==='='||e.key==='+')) { e.preventDefault(); adjFont(1); return; }
+ if (ctrl && e.key==='-') { e.preventDefault(); adjFont(-1); return; }
+ if (e.key==='F2') { e.preventDefault(); toggleCharPicker({stopPropagation:()=>{}}); return; }
+ if (e.metaKey && e.key==='Backspace') { e.preventDefault(); if(drawMode==='text'){pushUndo();sparseMap.delete(curRow*100000+curCol);drawCell(curRow,curCol,null);updateCursor();} return; }
+
+ if (ctrl) return;
+
+ // ── Text mode navigation & editing ───────────────────────────────────────
+ if (drawMode !== 'text') return;
+ e.preventDefault();
+ switch (e.key) {
+ case 'ArrowRight': curCol++; break;
+ case 'ArrowLeft': curCol = Math.max(0, curCol-1); break;
+ case 'ArrowDown': curRow++; break;
+ case 'ArrowUp': curRow = Math.max(0, curRow-1); break;
+ case 'Home': curCol = 0; break;
+ case 'End': {
+ let mx = 0;
+ for (const k of sparseMap.keys())
+ if (Math.floor(k/100000)===curRow) mx = Math.max(mx, k%100000);
+ curCol = mx + 1;
+ break;
+ }
+ case 'Enter': curRow++; curCol = 0; break;
+ case 'Backspace':
+ if (curCol > 0) {
+ pushUndo();
+ curCol--;
+ sparseMap.delete(curRow*100000+curCol);
+ drawCell(curRow, curCol, null);
+ }
+ break;
+ case 'Delete':
+ pushUndo();
+ sparseMap.delete(curRow*100000+curCol);
+ drawCell(curRow, curCol, null);
+ break;
+ default:
+ if (e.key.length === 1) {
+ pushUndo();
+ const cell = { ch: e.key, fg: activeFg, bg: activeBg };
+ sparseMap.set(curRow*100000+curCol, cell);
+ drawCell(curRow, curCol, cell);
+ curCol++;
+ }
+ }
+ updateCursor();
+});
+
+// ── Global shortcuts (work outside canvas too) ────────────────────────────
+document.addEventListener('keydown', e => {
+ if (e.key === 'Escape') {
+ if (document.getElementById('help-overlay').classList.contains('visible')) { hideHelp(); return; }
+ if (document.getElementById('img-dlg').classList.contains('visible')) { hideImgDlg(); return; }
+ if (document.getElementById('new-dlg').classList.contains('visible')) { hideNewDlg(); return; }
+ }
+ // ⌘+Backspace = Delete, works even when canvas lost focus
+ if (e.metaKey && e.key === 'Backspace' && editMode && drawMode === 'text') {
+ e.preventDefault();
+ pushUndo();
+ sparseMap.delete(curRow * 100000 + curCol);
+ drawCell(curRow, curCol, null);
+ updateCursor();
+ return;
+ }
+ if (document.activeElement === canvas) return; // handled above
+ const ctrl = e.ctrlKey || e.metaKey;
+ if (!ctrl) return;
+ if (e.key==='z'||e.key==='Z') { e.preventDefault(); undo(); }
+ if (e.key==='y'||e.key==='Y') { e.preventDefault(); redo(); }
+ if (e.key==='c'||e.key==='C') { e.preventDefault(); copySelection(); }
+ if (e.key==='x'||e.key==='X') { e.preventDefault(); cutSelection(); }
+ if (e.key==='v'||e.key==='V') { e.preventDefault(); pasteClipboard(); }
+ if (e.key==='o'||e.key==='O') { e.preventDefault(); document.getElementById('file-input').click(); }
+ if (e.key==='n'||e.key==='N') { e.preventDefault(); showNewDlg(); }
+ if (e.key==='s'&&!e.shiftKey) { e.preventDefault(); exportANS(); }
+ if (e.key==='s'&& e.shiftKey) { e.preventDefault(); exportHTML(); }
+});
+
+// ── Undo / redo ───────────────────────────────────────────────────────────────
+function cloneMap(m) {
+ const c = new Map();
+ for (const [k,v] of m) c.set(k, {...v});
+ return c;
+}
+function pushUndo() {
+ undoStack.push(cloneMap(sparseMap));
+ if (undoStack.length > 50) undoStack.shift();
+ redoStack = [];
+}
+function undo() {
+ if (!undoStack.length) return;
+ redoStack.push(cloneMap(sparseMap));
+ sparseMap = undoStack.pop();
+ drawAll();
+}
+function redo() {
+ if (!redoStack.length) return;
+ undoStack.push(cloneMap(sparseMap));
+ sparseMap = redoStack.pop();
+ drawAll();
+}
+
+// ── Selection & clipboard ─────────────────────────────────────────────────────
+function drawSelection() {
+ if (!selActive || !ctx) return;
+ const r1=Math.min(selR1,selR2), r2=Math.max(selR1,selR2);
+ const c1=Math.min(selC1,selC2), c2=Math.max(selC1,selC2);
+ ctx.fillStyle = 'rgba(0,229,204,0.18)';
+ ctx.fillRect(c1*cw(), r1*ch(), (c2-c1+1)*cw(), (r2-r1+1)*ch());
+ ctx.strokeStyle = 'rgba(0,229,204,0.85)';
+ ctx.lineWidth = 1;
+ ctx.strokeRect(c1*cw()+0.5, r1*ch()+0.5, (c2-c1+1)*cw()-1, (r2-r1+1)*ch()-1);
+}
+function copySelection() {
+ if (!selActive) return;
+ const r1=Math.min(selR1,selR2), r2=Math.max(selR1,selR2);
+ const c1=Math.min(selC1,selC2), c2=Math.max(selC1,selC2);
+ const cells = new Map();
+ for (let r=r1; r<=r2; r++)
+ for (let c=c1; c<=c2; c++) {
+ const cell = sparseMap.get(r*100000+c);
+ if (cell) cells.set((r-r1)*100000+(c-c1), {...cell});
+ }
+ clipboard = { cells, rows:r2-r1+1, cols:c2-c1+1 };
+}
+function cutSelection() {
+ if (!selActive) return;
+ copySelection();
+ pushUndo();
+ const r1=Math.min(selR1,selR2), r2=Math.max(selR1,selR2);
+ const c1=Math.min(selC1,selC2), c2=Math.max(selC1,selC2);
+ for (let r=r1; r<=r2; r++)
+ for (let c=c1; c<=c2; c++)
+ sparseMap.delete(r*100000+c);
+ selActive = false;
+ drawAll();
+}
+function pasteClipboard() {
+ if (!clipboard || !editMode) return;
+ pushUndo();
+ for (const [key, cell] of clipboard.cells) {
+ const dr = Math.floor(key/100000), dc = key%100000;
+ sparseMap.set((curRow+dr)*100000+(curCol+dc), {...cell});
+ }
+ drawAll();
+}
+
+// ── Tabs ──────────────────────────────────────────────────────────────────────
+function saveCurrentTab() {
+ const t = tabs[activeTab];
+ t.name = lastFile ? lastFile.name : t.name;
+ t.sparseMap=sparseMap; t.lastFile=lastFile; t.lastBytes=lastBytes;
+ t.canvasCols=canvasCols; t.canvasRows=canvasRows; t.canvasBg=canvasBg;
+ t.undoStack=undoStack; t.redoStack=redoStack; t.isCentered=isCentered;
+}
+function renderTabs() {
+ const bar = document.getElementById('tabbar');
+ bar.innerHTML = '';
+ tabs.forEach((t, i) => {
+ const btn = document.createElement('button');
+ btn.type = 'button';
+ btn.className = 'tab' + (i===activeTab ? ' active' : '');
+ btn.dataset.tabIdx = i;
+ const nm = document.createElement('span');
+ nm.textContent = t.name;
+ btn.appendChild(nm);
+ if (tabs.length > 1) {
+ const x = document.createElement('span');
+ x.className = 'tab-x';
+ x.textContent = '×';
+ x.dataset.closeIdx = i;
+ btn.appendChild(x);
+ }
+ bar.appendChild(btn);
+ });
+ const add = document.createElement('button');
+ add.type='button'; add.id='tab-add'; add.textContent='+'; add.title='Ny flik';
+ add.dataset.tabAdd = '1';
+ bar.appendChild(add);
+ bar.style.top = document.getElementById('topbar').offsetHeight + 'px';
+}
+function switchTab(idx) {
+ if (idx === activeTab) return;
+ saveCurrentTab();
+ if (editMode) toggleEdit();
+ activeTab = idx;
+ const t = tabs[idx];
+ sparseMap=t.sparseMap; lastFile=t.lastFile; lastBytes=t.lastBytes;
+ canvasCols=t.canvasCols; canvasRows=t.canvasRows; canvasBg=t.canvasBg;
+ undoStack=t.undoStack; redoStack=t.redoStack; isCentered=t.isCentered;
+ curRow=0; curCol=0; selActive=false;
+ document.getElementById('canvas-bg-swatch').style.background = canvasBg;
+ document.getElementById('output-wrap').classList.toggle('centered', isCentered);
+ document.getElementById('center-btn').classList.toggle('active', isCentered);
+ if (sparseMap.size > 0) {
+ showOutput();
+ drawAll();
+ document.getElementById('filename').textContent = t.name;
+ document.getElementById('s-name').textContent = t.name;
+ document.getElementById('width-wrap').classList.add('visible');
+ } else {
+ document.getElementById('output-wrap').classList.remove('visible');
+ document.getElementById('dropzone').style.display = '';
+ document.getElementById('export-btn').classList.add('hidden');
+ document.getElementById('exportans-btn').classList.add('hidden');
+ document.getElementById('edit-btn').classList.add('hidden');
+ document.getElementById('filename').textContent = 'drop .nfo / .ans anywhere';
+ document.getElementById('width-wrap').classList.remove('visible');
+ }
+ renderTabs();
+}
+function addTab() {
+ saveCurrentTab();
+ if (editMode) toggleEdit();
+ tabs.push(newTabState());
+ activeTab = tabs.length - 1;
+ const t = tabs[activeTab];
+ sparseMap=t.sparseMap; lastFile=null; lastBytes=null;
+ canvasCols=80; canvasRows=25; canvasBg='#000000'; isCentered=false;
+ undoStack=[]; redoStack=[]; curRow=0; curCol=0; selActive=false;
+ document.getElementById('canvas-bg-swatch').style.background = canvasBg;
+ document.getElementById('output-wrap').classList.remove('centered','visible');
+ document.getElementById('center-btn').classList.remove('active');
+ document.getElementById('dropzone').style.display = '';
+ document.getElementById('export-btn').classList.add('hidden');
+ document.getElementById('exportans-btn').classList.add('hidden');
+ document.getElementById('edit-btn').classList.add('hidden');
+ document.getElementById('filename').textContent = 'drop .nfo / .ans anywhere';
+ document.getElementById('width-wrap').classList.remove('visible');
+ renderTabs();
+}
+function closeTab(idx) {
+ if (tabs.length === 1) return;
+ const wasActive = idx === activeTab;
+ tabs.splice(idx, 1);
+ if (wasActive) {
+ activeTab = -1;
+ switchTab(Math.min(idx, tabs.length-1));
+ } else {
+ if (idx < activeTab) activeTab--;
+ renderTabs();
+ }
+}
+
+// ── New canvas ────────────────────────────────────────────────────────────────
+function showHelp() {
+ document.getElementById('help-overlay').classList.add('visible');
+}
+function hideHelp() {
+ document.getElementById('help-overlay').classList.remove('visible');
+}
+function setOsMode(os) {
+ document.getElementById('os-win').classList.toggle('active', os === 'win');
+ document.getElementById('os-mac').classList.toggle('active', os === 'mac');
+ document.querySelectorAll('#help-box .help-key kbd').forEach(kbd => {
+ if (kbd.textContent === 'Ctrl' || kbd.textContent === '⌘')
+ kbd.textContent = os === 'mac' ? '⌘' : 'Ctrl';
+ });
+}
+
+function showNewDlg() {
+ document.getElementById('overlay').classList.add('visible');
+ document.getElementById('new-dlg').classList.add('visible');
+}
+function hideActiveDialog() {
+ if (document.getElementById('img-dlg').classList.contains('visible')) { hideImgDlg(); return; }
+ hideNewDlg();
+}
+function hideNewDlg() {
+ document.getElementById('overlay').classList.remove('visible');
+ document.getElementById('new-dlg').classList.remove('visible');
+}
+function createNewCanvas() {
+ const cols = parseInt(document.getElementById('dlg-cols').value,10) || 80;
+ const rows = parseInt(document.getElementById('dlg-rows').value,10) || 25;
+ hideNewDlg();
+ sparseMap = new Map();
+ canvasCols = cols; canvasRows = rows;
+ lastFile = null; lastBytes = null;
+ undoStack = []; redoStack = [];
+ drawAll();
+ showOutput();
+ document.getElementById('filename').textContent = 'untitled.ans';
+ document.getElementById('s-name').textContent = 'untitled.ans';
+ document.getElementById('s-size').textContent = '—';
+ document.getElementById('s-type').textContent = 'new';
+ document.getElementById('s-dims').textContent = cols + '×' + rows;
+ document.getElementById('width-wrap').classList.add('visible');
+ tabs[activeTab].name = 'untitled.ans';
+ renderTabs();
+ if (!editMode) toggleEdit();
+ curRow = 0; curCol = 0;
+ updateCursor();
+}
+
+// ── Center / font size ────────────────────────────────────────────────────────
+function deleteRow() {
+ pushUndo();
+ const newMap = new Map();
+ for (const [k, v] of sparseMap) {
+ const r = Math.floor(k / 100000), c = k % 100000;
+ if (r === curRow) continue;
+ newMap.set((r < curRow ? r : r - 1) * 100000 + c, v);
+ }
+ sparseMap = newMap;
+ curRow = Math.max(0, curRow - (curRow > 0 ? 0 : 0));
+ drawAll();
+}
+
+function insertRow() {
+ pushUndo();
+ const newMap = new Map();
+ for (const [k, v] of sparseMap) {
+ const r = Math.floor(k / 100000), c = k % 100000;
+ newMap.set((r < curRow ? r : r + 1) * 100000 + c, v);
+ }
+ sparseMap = newMap;
+ drawAll();
+ updateCursor();
+}
+
+function toggleCenter() {
+ isCentered = !isCentered;
+ document.getElementById('output-wrap').classList.toggle('centered', isCentered);
+ document.getElementById('center-btn').classList.toggle('active', isCentered);
+}
+function adjFont(delta) {
+ const steps = [0.5,0.75,1,1.25,1.5,2,2.5,3];
+ let idx = steps.findIndex(s => Math.abs(s - fontScale) < 0.01);
+ if (idx < 0) idx = 2;
+ idx = Math.max(0, Math.min(steps.length-1, idx + delta));
+ fontScale = steps[idx];
+ if (sparseMap.size > 0 || canvasRows > 0) drawAll();
+}
+
+// ── Export HTML ───────────────────────────────────────────────────────────────
+function buildHtml(map) {
+ if (map.size === 0) return '';
+ const { maxRow, maxCol } = getBounds(map);
+ const lines = [];
+ for (let r = 0; r <= maxRow; r++) {
+ let rowMax = -1;
+ for (const k of map.keys())
+ if (Math.floor(k/100000)===r) rowMax = Math.max(rowMax, k%100000);
+ if (rowMax < 0) { lines.push(''); continue; }
+ let html = '', curFg = null, curBg = null, spanOpen = false;
+ for (let c = 0; c <= rowMax; c++) {
+ let ch2 = ' ', fgI = 7, bgI = -1;
+ const cell = map.get(r*100000+c);
+ if (cell) { ch2=cell.ch; fgI=cell.fg; bgI=cell.bg; }
+ const needStyle = fgI!==7||bgI>=0;
+ if (fgI!==curFg||bgI!==curBg) {
+ if (spanOpen) { html+='</span>'; spanOpen=false; }
+ if (needStyle) {
+ let st=`color:${PALETTE[fgI]};`;
+ if (bgI>=0) st+=`background:${PALETTE[bgI]};`;
+ html+=`<span style="${st}">`; spanOpen=true;
+ }
+ curFg=fgI; curBg=bgI;
+ }
+ if (ch2==='&') html+='&';
+ else if (ch2==='<') html+='<';
+ else if (ch2==='>') html+='>';
+ else html+=ch2;
+ }
+ if (spanOpen) html+='</span>';
+ lines.push(html);
+ }
+ return lines.join('\n');
+}
+
+function exportHTML() {
+ const content = buildHtml(sparseMap);
+ const fname = lastFile ? lastFile.name.replace(/\.[^.]+$/,'') : 'untitled';
+ const fs = Math.round(fontScale*16)+'px';
+ const centered = isCentered ? 'display:flex;justify-content:center' : '';
+ const blob = new Blob([`<!DOCTYPE html><html><head><meta charset="UTF-8"><title>${fname}</title>
+<style>*{margin:0;padding:0}body{background:#000;padding:20px}
+#w{${centered}}#s{display:inline-block;font-family:"Courier New",monospace;font-size:${fs};line-height:1;white-space:pre;color:#aaaaaa}
+</style></head><body><div id="w"><div id="s">${content}</div></div></body></html>`],
+ {type:'text/html'});
+ const a = document.createElement('a');
+ a.href = URL.createObjectURL(blob);
+ a.download = fname + '.html';
+ a.click();
+}
+
+// ── Export ANS ────────────────────────────────────────────────────────────────
+function exportANS() {
+ if (sparseMap.size === 0) return;
+ const { maxRow } = getBounds(sparseMap);
+ const rowMaxCol = new Array(maxRow+1).fill(-1);
+ for (const k of sparseMap.keys()) {
+ const r=Math.floor(k/100000), c=k%100000;
+ if (c>rowMaxCol[r]) rowMaxCol[r]=c;
+ }
+ const bytes = [];
+ function pushStr(s) { for (let i=0;i<s.length;i++) bytes.push(s.charCodeAt(i)); }
+ function emitColor(fg,bg) {
+ const bold=fg>=8, base=bold?fg-8:fg;
+ const parts=['0'];
+ if (bold) parts.push('1');
+ parts.push(String(30+base));
+ if (bg>=0 && bg<8) parts.push(String(40+bg));
+ if (bg>=8) parts.push(String(100+(bg-8)));
+ pushStr('\x1b['+parts.join(';')+'m');
+ }
+ let curFg=7, curBg=-1;
+ emitColor(7,-1);
+ for (let r=0;r<=maxRow;r++) {
+ const lastC=rowMaxCol[r];
+ if (lastC<0) { pushStr('\r\n'); continue; }
+ for (let c=0;c<=lastC;c++) {
+ const cell=sparseMap.get(r*100000+c);
+ const fg=cell?cell.fg:7, bg=cell?cell.bg:-1, ch2=cell?cell.ch:' ';
+ if (fg!==curFg||bg!==curBg) { emitColor(fg,bg); curFg=fg; curBg=bg; }
+ bytes.push(CP437_REV.get(ch2.codePointAt(0)) ?? 0x20);
+ }
+ if (r<maxRow) pushStr('\r\n');
+ }
+ const fname = lastFile ? lastFile.name.replace(/\.[^.]+$/,'') : 'untitled';
+ const a = document.createElement('a');
+ a.href = URL.createObjectURL(new Blob([new Uint8Array(bytes)],{type:'application/octet-stream'}));
+ a.download = fname + '.ans';
+ a.click();
+}
+
+// ── Image → ANSI ─────────────────────────────────────────────────────────────
+let imgSrc = null;
+
+document.getElementById('img-input').addEventListener('change', function () {
+ if (!this.files[0]) return;
+ const reader = new FileReader();
+ reader.onload = ev => {
+ const img = new Image();
+ img.onload = () => {
+ imgSrc = img;
+ imgAutoRows();
+ // Show tiny preview
+ const prev = document.getElementById('img-preview-wrap');
+ prev.innerHTML = '';
+ const thumb = document.createElement('canvas');
+ const scale = Math.min(240 / img.width, 80 / img.height, 1);
+ thumb.width = Math.round(img.width * scale);
+ thumb.height = Math.round(img.height * scale);
+ thumb.id = 'img-preview';
+ thumb.getContext('2d').drawImage(img, 0, 0, thumb.width, thumb.height);
+ prev.appendChild(thumb);
+ showImgDlg();
+ };
+ img.src = ev.target.result;
+ };
+ reader.readAsDataURL(this.files[0]);
+ this.value = '';
+});
+
+function imgAutoRows() {
+ if (!imgSrc) return;
+ if (!document.getElementById('img-aspect').checked) return;
+ const cols = parseInt(document.getElementById('img-cols').value, 10) || 80;
+ const half = document.getElementById('img-half').checked;
+ const aspect = imgSrc.width / imgSrc.height;
+ // char cell is CHAR_W × CHAR_H; half-block = CHAR_W × (CHAR_H/2) effective pixel
+ const charAspect = half ? CHAR_W / (CHAR_H / 2) : CHAR_W / CHAR_H;
+ const rows = Math.max(1, Math.round(cols / aspect / charAspect));
+ document.getElementById('img-rows').value = rows;
+}
+
+function showImgDlg() {
+ document.getElementById('overlay').classList.add('visible');
+ document.getElementById('img-dlg').classList.add('visible');
+}
+function hideImgDlg() {
+ document.getElementById('overlay').classList.remove('visible');
+ document.getElementById('img-dlg').classList.remove('visible');
+}
+
+function doImgConvert() {
+ if (!imgSrc) return;
+ const cols = parseInt(document.getElementById('img-cols').value, 10) || 80;
+ const rows = parseInt(document.getElementById('img-rows').value, 10) || 40;
+ const half = document.getElementById('img-half').checked;
+ const dither = document.getElementById('img-dither').checked;
+ hideImgDlg();
+
+ const srcH = half ? rows * 2 : rows;
+ const off = document.createElement('canvas');
+ off.width = cols;
+ off.height = srcH;
+ const oc = off.getContext('2d');
+ oc.drawImage(imgSrc, 0, 0, cols, srcH);
+ const raw = oc.getImageData(0, 0, cols, srcH).data;
+ // Mutable float copy for dithering
+ const pix = new Float32Array(raw);
+
+ const palRGB = PALETTE.map(h => [
+ parseInt(h.slice(1,3),16), parseInt(h.slice(3,5),16), parseInt(h.slice(5,7),16)
+ ]);
+
+ function nearest(r,g,b) {
+ let best=0, bestD=Infinity;
+ for (let i=0;i<16;i++) {
+ const [pr,pg,pb]=palRGB[i];
+ const d=(r-pr)**2+(g-pg)**2+(b-pb)**2;
+ if (d<bestD) { bestD=d; best=i; }
+ }
+ return best;
+ }
+ function getP(x,y) {
+ const i=(y*cols+x)*4;
+ return [Math.max(0,Math.min(255,pix[i])),Math.max(0,Math.min(255,pix[i+1])),Math.max(0,Math.min(255,pix[i+2]))];
+ }
+ function addErr(x,y,er,eg,eb,f) {
+ if (x<0||x>=cols||y<0||y>=srcH) return;
+ const i=(y*cols+x)*4; pix[i]+=er*f; pix[i+1]+=eg*f; pix[i+2]+=eb*f;
+ }
+
+ pushUndo();
+ sparseMap = new Map();
+
+ for (let row=0; row<rows; row++) {
+ for (let col=0; col<cols; col++) {
+ if (half) {
+ const [r1,g1,b1] = getP(col, row*2);
+ const [r2,g2,b2] = getP(col, row*2+1);
+ const fg = nearest(r1,g1,b1);
+ const bg = nearest(r2,g2,b2);
+ if (dither) {
+ const [p1r,p1g,p1b]=palRGB[fg]; const e1r=r1-p1r,e1g=g1-p1g,e1b=b1-p1b;
+ addErr(col+1,row*2, e1r,e1g,e1b,7/16); addErr(col-1,row*2+1,e1r,e1g,e1b,3/16);
+ addErr(col, row*2+1,e1r,e1g,e1b,5/16); addErr(col+1,row*2+1,e1r,e1g,e1b,1/16);
+ const [p2r,p2g,p2b]=palRGB[bg]; const e2r=r2-p2r,e2g=g2-p2g,e2b=b2-p2b;
+ addErr(col+1,row*2+2,e2r,e2g,e2b,7/16); addErr(col-1,row*2+3,e2r,e2g,e2b,3/16);
+ addErr(col, row*2+3,e2r,e2g,e2b,5/16); addErr(col+1,row*2+3,e2r,e2g,e2b,1/16);
+ }
+ sparseMap.set(row*100000+col, { ch:'\u2580', fg, bg }); // ▀
+ } else {
+ const [r,g,b] = getP(col, row);
+ const fg = nearest(r,g,b);
+ if (dither) {
+ const [pr,pg,pb]=palRGB[fg]; const er=r-pr,eg=g-pg,eb=b-pb;
+ addErr(col+1,row, er,eg,eb,7/16); addErr(col-1,row+1,er,eg,eb,3/16);
+ addErr(col, row+1,er,eg,eb,5/16); addErr(col+1,row+1,er,eg,eb,1/16);
+ }
+ sparseMap.set(row*100000+col, { ch:'\u2588', fg, bg:-1 }); // █
+ }
+ }
+ }
+
+ canvasCols = cols; canvasRows = rows;
+ lastFile = null; lastBytes = null;
+ drawAll();
+ showOutput();
+ document.getElementById('filename').textContent = 'image-convert.ans';
+ document.getElementById('s-name').textContent = 'image-convert.ans';
+ document.getElementById('s-size').textContent = '—';
+ document.getElementById('s-type').textContent = 'ANSI color';
+ document.getElementById('s-dims').textContent = `${cols}×${rows}`;
+ tabs[activeTab].name = 'image-convert.ans';
+ renderTabs();
+ if (!editMode) toggleEdit();
+}
+
+// ── Drop / file events ────────────────────────────────────────────────────────
+const dz = document.getElementById('dropzone');
+dz.addEventListener('dragover', e=>{e.preventDefault();dz.classList.add('over')});
+dz.addEventListener('dragleave', ()=>dz.classList.remove('over'));
+dz.addEventListener('drop', e=>{e.preventDefault();dz.classList.remove('over');const f=e.dataTransfer.files[0];if(f)processFile(f)});
+document.getElementById('file-input').addEventListener('change', function(){if(this.files[0])processFile(this.files[0])});
+document.addEventListener('dragover', e=>e.preventDefault());
+document.addEventListener('drop', e=>{e.preventDefault();const f=e.dataTransfer.files[0];if(f)processFile(f)});
+</script>
+</body>
+</html>
diff --git a/skull.ans b/skull.ans
new file mode 100644
index 0000000..5a35784
--- /dev/null
+++ b/skull.ans
@@ -0,0 +1,60 @@
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [47m [47m [107m [107m [107m [107m [107m [107m [47m [47m [100m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [100m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [100m [100m [47m [47m [47m [47m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [47m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [107m [107m [107m [47m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [47m [47m [107m [107m [47m [47m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [47m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [47m [47m [47m [107m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [47m [47m [100m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [100m [47m [100m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [107m [107m [107m [107m [107m [44m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [40m [40m [100m [100m [100m [47m [40m [40m [100m [47m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [107m [100m [40m [40m [40m [40m [40m [40m [100m [107m [47m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [100m [40m [40m [40m [100m [47m [47m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [40m [100m [100m [100m [47m [47m [100m [100m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [40m [40m [47m [107m [47m [107m [47m [47m [100m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [40m [40m [100m [47m [100m [40m [40m [47m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [40m [40m [100m [100m [47m [107m [47m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [40m [40m [100m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [47m [47m [47m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [47m [47m [47m [100m [100m [47m [100m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [100m [40m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [100m [47m [47m [47m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [47m [47m [47m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [47m [47m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [100m [100m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [47m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [47m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [107m [107m [107m [107m [107m [107m [107m [107m [107m [107m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [100m [47m [47m [100m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
+[40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [40m [0m
diff --git a/tk-roxyimage.ans b/tk-roxyimage.ans
new file mode 100644
index 0000000..f197537
--- /dev/null
+++ b/tk-roxyimage.ans
@@ -0,0 +1,101 @@
+[0;40;37m
+
+
+
\ No newline at end of file