diff --git a/assets/logo-light.b64 b/assets/logo-light.b64 index 44da3bb..58e5749 100644 --- a/assets/logo-light.b64 +++ b/assets/logo-light.b64 @@ -1 +1 @@ -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 \ No newline at end of file +iVBORw0KGgoAAAANSUhEUgAAAJYAAAApCAYAAADXndBCAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAKJ5JREFUeAHtnHmYXUW16Kv23mfuDoFAQgaGQCAJwQcaBAIk6chFhKQTBkFQcLp+eh3ug6t+ODzvZ64XFa8XFRHwOoDDEyVRICNjkk7CIBciMgSSEJOQOYQhSXefs8+wd73fqn12n92nuzOo771/qK/P2bWrVq1atWrVWqtW1Wmdm1f8vHb0B4xRvtIqVMY4SmujkskYbcvip9QNlI/bDVQfl8szmZJ9DlQXt5V2A+WTOA81H/cb0xL3kXwKzri+GX8MlyxvxhnX9Qcb1/X3TMIn8zFsc1nyPZmP4f+ezwg/sqMcrVWW1995WuvxelD2TMRKqTCAaU6jS6CYwMb7AXMiK4cC34TwkPvrp70UCQmx2MZ5S9bfQFtTVwjXIfKmGUHyPcG3Q8Vr4QXXQY5N4C34QcJH0PXvBJ29ynkxoVKOq3SW/N7i8x4TUDUVXqplYRS1SiRLnnHPgi0hbbz1n/6aNklMSHWPSLjJioPMS//yGSBZpsRjkeffkv5WWht9G2gWS9FYCsIFLMQBeS7zkxyvzNH+xxX1dSjzKvhjeLI989NfX4yj5hgnI8qp6gm0BY80kyBhWKitWHOFFnfvgdtGvb6knSMSa5PgMmGSoF7ATS91NnqIO/SGNT62UwHbP6MaiCKaHXfgBRDRBG4Wj6NqTAn9HTT+uCcZk1au0AppQmYYCG8kHSytETQtyYjx8JTjifsRlcvaDuCBgsYo9TeJ8RxFDI/GFuEbiA5Tn1cHdNKVTE80R9GY6p3VH1Im+FzG2pAF6UesmuFLFkNvHtKD4IwweDAnYq9VqdbviUboInNRGdqsAjX1FvWeex7ib4hf5qWsKrTIg2oMfjDM1qAOLTMdB1rswJ36oA+mvZAStROm7S9paHQRq4BPxY8HdLB9CGaBNdCKcNKZ0CrP0C6iQ8HD6tauyrC6hYqy+CGqRJ6JdNMqgz3RylNVZEv6ivoVmChZKphFF37FizkMWC5VwdYfHYgAdHrpqL0IQICFilIz0yIc6awHNUpVoKFWEWChI6fSWQXlrqkZFysnsJJkDqGFruu9s1qceqX0RjGdm2plhapU7hexZsZOo/TDMLHvZItAOHBXGFyrPmzCymKB0zqcotz0JUoELGJdf4OVuoD+XAivwOif6lp1sXHccyj/DAMYwuTLqo20qkD3TT00M8h7VVh9kFF7DBJaA+oaFhVSM4zjaEZ/OivhXJ3JFuoTGuHoi7u5hLGiEa2GMncoU3tEGz2eNfVlFtVgxi+Mb56kZhzyjlDByxSTXPb/Ao6FlP0J+t4yWns6DIdRLjyHh6lTEDKH9yTuQKWyrqn463W1fDeO8m42X0MY85Uqmz0FWDHTjYE3eOyrqv9L4F8Ct9A5C1a1qcBa9ZgH8lT0qcGzj5cH8MFXQPJ2qA4he7Ap+2NRRecyoZNULptWvnWhonbRt0VhJ01mHbGSB0Q7rq6pSnFV5hY1W4eFOV1Hm5x7lsqkxyu/Z4CRoMjaT6UZePktxPM7XbPySwVrfkFpvM65ynRVheqBmS191ioGIcoiRHu6Z7U8CPyD+fnFU3RaXW59P0F4oIS2VhWzqDizcOeBQNUzJpXfUbwAxs2m33fTr4wlOXEDoWDuGU6aSS2X/FJ7YT6A83MLSqc7afcqU7OLaP947EJEqMQaVEr3oTi/VG7PvtJfh+A9VgfVa1S1+gnleaPRXDJtEd9lsrQ+CqpXlWblhQ5VmF/aYCrln6tUJsUiY0FiYq35IIdsmi51T7GQ/Zyapmu5+4vHoAs+pFKABLWGIIq5zGYd4/trsXRfLM0siND3Tb/aWcgdPmiGU/Q/g+aZLMTQFwumAWoFywqarUNQRMUp1ZabWLqipNQ93Ve27Mwt8Beg5cYDJ0ISD1DIcFGLkG+e6vKzTwpaGHIej8uN5bOUJLuz7/GX+BeMmDXE4jVldXV+ceW+4sXpZ6FwntNVngGTMhGT9qu1rFig6cZm55dGm5ROp6pVD+PNJEeqX75r5bDoX5bdDBOqRaUWZxb5691K+Q8w8lRVwhSJMh+YVqmpmz6yWl9bmFf+dfeszPNMwN2m6L8fYfFUDbOVYG480PozWroscvp7DDX9yWL7oNcZvy7M6z4V4RkRBKYERzaV2nOb5UO7b8H7IU7G+7wpWsESVDQtV3Uhe5jp8r/Zcn95fdclmZe6W7Nzc53+e520voYFCa3WAgW6JesBtwHH8PsiVLKw1I7St3U+dwZ0C76Y4kClMy4Lbq+jg//Z3d7ysFSKgCMRY1z0lQ6rO7pGtKxTZ+hukY38Ah9WmjOxOlnmSRZVj6Zs0ib4SrI7zGVFB1wugxbkRpuFYcnvRDtF7JfCSMU6Qpxx9GJ1paYvm6Yz6CMgcH+r1y458AtMJwMPmOAxqha0C4aUrj6A1D6pM1H3Fmv/XxFToJkJ/gTu3qNOzSwOtLfANd4i1wT2g7++0EmrRfmF/s9bFnaeKqjK07PrGMKP0bZ0mBI+yMrtm+IRY6cwG3us1s5khxkdfkCAi2rvEqZwhU6zRiNq7Drti0i0e8ZBqBha+OtOESomObew9Fnjuo+A40F02UN4rA/k5vs35RYXR2Xnd06l+8tNRFlD8FnQ8AyJzJ4auuH1ao5JIzRIibmN+dhEuYynIsJueWv0f3S3p58TmvLbyx/HvbnaiJPBIuNbYC3Nwm/W+fxYqFio72FIc5xAM0bzYKi9h3I7/V9mF5YmF+Z1DWMcn7TWRmQmHr3kSIK0kcQ3EQYzEHpqy80rnSmVvsmuYgEs11g9iBEiIkKYDyRkDTb3IYHLLPZPhJD2qNaal4jVUtk71XQOx1WpbXxu4fOMPoJvrS4QNW2ZrswCU2TcruwKBph0Kmxi1MrLHKGzuRN0Niuf0dEnxzM3Gp/hBJ3LTtBHZj8Whu6Ng+97a3DUMPUknNym2OQNmCTslxJajfgcN0HkCzrHq1aXFhZ1Ha3aRxTRMncbsfrWD62PvhmhCKhr2fE6ihqhhl87ysczyV/UR2WHgV+mOqvz2VOcfOZLOtAP4m3fDu3H1TcayblCI+mawYsgfTSb8a+UTGlm/o/Mzk9MRdarSuuMFfalKSczRwoK93Wdjqq4nj5k81Jl7MLbOLliZXBpXuwpcNSn9JDsWdZ0y7ynsiOdluzVwMzFQtwHDTMwpQIeKRFLTtS6QawUxmJQq0BW7igU22UWrF2j8vT9pgzzHDF+TLR2PNE38GtZtPqRgVCdzyRMMCUrwQ3cUV+Nb+nHGmH9TPH1nd8CyaM2QItDyNxcLIB4ygsIPTyvcwKoozUrFf0n8dUCtEkVTdn3AxOhqWjegglaT6p6qeMETajDPQy7s44yHn2yB2u+dKSony796ambMTHzbCDATY03gbb80TpYhBl8Hj80bptgcVxUf6KvMJh25j2nJn2vVsKuDLswLIrBLPOpCR8pE2c8xtWbPhGKqjWJKfZfX0wvKI+zPZSCu9h8LWUhaSObRKPG1ILuY6QuTLk3ILTj0GqCs9/VFLpOD69Zri+bPTUl/jL0eLIZM53Q5rjDsDCT4CWSYE20aJheqffkR5Uu22fZkDPferpoEGkRptQSHNQ1deZhj2EiOwegrIN32MI9h7MCLrPmy7D6aNyrp8ZLDZucMvswfyZ4SH1stK+D4DHzlr8bjUJ8KJyu5rzWIk4tA3vA+mraOkt2MhpomnKyfdcOK7C/D3EGrfO61Qrp7qDm7pXWRIfzECn6Z6Bkd4KyoNi9zVWzpxH/ChdiXvbpApsTra9Sc7bkuqe37GTsViswauFpE5ttCaaUYq2OdF01WjqUdvg+X4UXd2CSX2Sn1ylhGzSKXXZoFZlk0ZkD8dI13ZjEfO404kbXYRJd8YnZzP/I+OW9MvGYxdFoly9wdHcDY2i3ZpVlCN7ec4+IiLuPZTpFaJOkneDHJqjeYLpKT7DZ2C2bFwSWBQCbReBlnmVEcWrkEsh7Cm3G4O/QRE/QrjNd2vkX5TbBr0V1HIQpLPeeLqpMh5RVw9TZPKYa61rR2cDMMBpXg/S08bTFF7qpPNg8u3KVMzmXbblQAEj3q3Jpc2Q2cTwHStKbxHNkCy8fsZ7NH2bT7Cm9BWW3+ZdkXxVUJgzfyWOkimKczcIA44AWJtZqq1kEC6QNseNBfBmF2WDazsrlhlj+OE7tXjTmVrSMZYzlgDRopCjuw66LqNdHrY9Cnfg+xfbcZ0JjZuInfphd4DcQlgdx0N9EK0hci4ENqLGFkYHVTEp9PJvzr5LuSpfk70Mef2PnqAShRl2lXX0jNLUgEPLOoHqlaNIBJc0sLPDfKxkR/FJ7/rspnZuBrvkAC+lf8LXvBsdfcD3gDUImO904JTjYLLWA2Noo2Ja1vsWl6q6NcEtq0E4lfy9S69qdVGgeUGImZ+P0O84sdiBZa5L6roa4azShmzIlq20XlS7Ob7W7lDC4VLfkDkfNVnQhI/7PLGkgPgO9Pho1RvDqxEXv9jsaipPSJqgtI07zTVb9Tbpa+Z6uVb4fffzvm2r5u8TIvorpbi/OyN4hgtG6wByJb/iPTB6BSOus9DYNIlZ21yr9mN8XZxW225wippfJHCYmCyHCSLJtJ3XNaH0ZuPutoyDaWtr3TlFZmZCdl25Di9yFFjk35q0/M7ex2F64vzgz9/Wizl6O6F6pSqX70Qpwk1WTnMDeeKEfk9iSxQMWk7jPmkSa3Iagr9ZZZEiCrQ4rTXxRoaL/JDvCkDEdCem3FxaUPjxozl7xfNXeGfotf1brstKM7A/YrX4I4bgEnt6ERt3HTlJkqA/eSOX27UiAa3hSHqScUxg6vK2b+JJfyj6Tz5WXq4KaaXy9LnCqVuMUJna/g0DhdKsYI1x2BfRFi0uaTbls/Nc6oTNf6rOv+ecAfIF1z4lpi/yznT9fdkT+zNblgNxvukuXqVxuMAPHyPdZbWgpZCKo3YvQ/Khvn31LMvfuOzlUpRt1KjtVMdHgFMY0FlksFuK0l/3tHIDNFSzW+TXmfdEa1RVapbEX02SX5M/IrQTJPfgvH9GpdCsBZl5lDhOskD5Qk/gqDovzIgTn7NyRwx7S87tXYnNX69BsQNtskcUKv5dg2p7IZ/3bEf6PojFjqhIIe8YW7RLzudO9Yvm6yhxzXdfF+iV2wbJLvMVugEIbaEO4etr0zQh9EqvMZU8klvWLai69PD+/xMIOnwtS7itlk9mkLtZlFpE4+F/Jz/c3okhuwTpkGZNorp7F2WBmn24w0LKNz2ZbOFK63FZfqbuYwQfEZGGLH6+0D1pjy7XzPpXNjWIShOyBcNKxSYuNh7sPSQxI2rK3eZ8u5IahAaRthgEZBjZCG3em1BeH54mms52P9FV/TBUwxk5kvZ4OW2gOzz/YPTw/r3tEy72dQ+Ny0aww4zNuKvWwyeSugCmQxEQnhUqAY0ETNmm1oGtmZrUtdt3pKpMbioYTBsAf2eRkDmPAVmuVVmWfYGwP2t2zNIgky+YSX4BwLCAbDS9zuNOau0pl8rdR+Ae03dzcguIP8GvPEn9JQjhOrXYzfH2VeRA9OJA7IDyXRSfjuSyb98+V/kJtFtPXc7rusknZAZNwWGhjdTuFbBs+2o1Gu/e4NfWHXOjflVtYvEJ8YMFTnJn9Cf09YHfVJopJxvgbQiBE9UoMDAYwGEkXtMwvT5AMm8HHTWeZIwh2cqT8H7qHszQvtSZANM7AUx+wStEApZ2B0fOkbes8fyzie1G9DQ6/EKdqfNOPvsj2eQaxFq3nmS5Ui+xMRJP2lzDGcXFV+V9QVXcJpmwRO6GHc/OLdjsuJwksDPG/josOYW1sv6dd3J4n4QuOtop+F2L3WykXYaWHdtuLCCMQMNXadPLTW8UEgZ8OfouPFBLwlLE0c1VKqEu78ALtwf6l0y9ZJz2TG4ITfpZzWO46/KGf5TKls6VfT7ds5fGi3UU3YxOARnIix1w82LBVip1aWIWP7OhJopMPlIQ2tuWWNrS16S6X4UFFu25e5zMTJNTAero7nx90bYwKaX/ajpJdCE+J9tnUH1PjNtFTDkKZCHbI1u/pDtN/YXL+XafCZQJg0noKYnCWESfRKqN+ByAsYdcGvFHL/Pasbcux6T9wHnaabUuUR0bPn2tKaAIvPT5wghkWaaW2kFjq0/sNmCYn0bDpGJYZj992uj4ydxrM/Xa8MDj2ud3Uav+BsEItB75W0qSXnoRsIJLE6HDFHvX97GNSUzb+xdB2pj0YtoTWx1ll3KnMKKKfVwlcyS0tYRQr6zEkGbd8JNmnDV7WKhvDYuk3phZ0cRcuR3sce98wiUW7KSDwyfyeHjWTbxvI5HEA2bDViFctWnzEt134LYvxYJIEqVkMYRVX5bdoyZf0IE4+5DyQ9SMCxiII9HBx2MPzexCGsjp63noyDcHqn2b8NKIu4sNo1T74PjNY7H+xJb+w+L7CDhvxNeoyHG70rj3N7B+LqHAOUyEYU8pOjxlrWdx5FLxu13nGHRIgic2RPENWmgSPQ90uJq3rstbXONleOGDAtM/Agr3mTZRKN7b5dd9nMk8IdfBv0GtVuFuq/idOfod1bKOVLMIUJcHlehrTLBds7sYcBWrxK+KhXguTCRkkzuxkIQVsKSXwqfVldkwXD9nH7u53dqcmIZBYsETwUxnNBG1jXX+W3dY1NP5nQg1P4AgXObTX8CgvfmrY5S/VTu1xIajs+YN4HGsnDyk5iCQmM5oHlC65g2kkmkqcd0H/rdLM3AeRyY+pfaW5bNJ2W4Fmo2LPSXf4O1j71ucUYE5dRkdaHOLoNyaxIVj9dy8khpwfCo6JZbdkt6Gqa4esdPzp0kSs1wWJw+L+BYsu5cYK6WlP15ZKJqi6k3kQnrC4G3RIJRMmYQuQTUIkL7IlQbAIy7MuCphaV98Wx18gkEm0iZWaUnIoZYzsZlOmW3yh3OXQ+2kB6LqydTe9/huT/LrVIMylbVgXAqttlHnGc3LLpLwQHDOV6Zmi7A0WCxvTC38wr/YcV72DmyvWFw0r1YfZma6tny7IACPxRQDZmK0vehkrNN0zW35BrOhypuOj+GtfU+Xit02ldJ3r1D7HVv/P0jc8uJDm7zIl6wHE/UrV/pLlhSnjmUY97w9W6tBrMkGyHFWHFJTa0//dXcpdQ2jkKvj+Bcz1N/n8K2fGHyq1Z+4RmPT9nRLzupDWsrCEwJ75Pxg1GZ8fptjFvJ/Gc+QYgydJz0RbHW59Clm9/SeJIsuZlSyHn0XHNbR0dbuEJ2wkF8PX1NRVQaWKmUjhz4kJvrP7kpYX8gtL/xuB+wbb7zSxJ5G8aCB8c54p2tAm/E679KgVPSGzKQFbD7CvZu/r+pN/acsSvz3XkV1Qup4T+v/C7BZsmERgXdeRkwOQ/7DYrl8XhCC5Cm2Vw6mVl7jXqDMVcihMiFsi3SUbR/qxf/ngDYQS7oDVP4Dh4quK4HIVhc2Qds7O10q/0gv9H3VPzyzt1nondT0aoI7UPth8yAbmK5goVJfcWOjDpyR4PY+f5+k98uI7XW8UVIv1UfoBTBZFc6z0ETgAP6Df29wguLfzMv0GIxZFIJ9eKXPfnhNd1/suWmy0kutacq6cMNWNCZUpEsnrm0Rg5PxQFH4bp90fJCS3Eh/gVBh+mXUYY3b33148FsH6Gt8Fu2X39LkQcmHiBkTfXplAbjyAOZzCTumGQAeLMZHYt6rETgapEJUWaymJaCvntOy80hTE20ErHJ8IKdKtBF/xD/K5wQjSv4OPIKfaBSc6GfNaBPVdgkB6s4HWWrCb87Cs7M4cT48D30U2ai6aDc735pPlZkCEWPhzptAKwKOWFRW/Gx+yIEchJBFwcdwzuNezWIzn5Bb5D+kF3Y+HofMSweKdmlCn5zgFgqWjMRTnw4KrEaqhmCNZRI25Emx9E03sOkoTgZ2SX9DdBbFyI+XIun63k9C3mS2ROroj5TOnQdsdgetcQSxrGfLyZ4a8mSOHonF1ihsOIzA/ZxBJ+SDz8E57aQEG0V42Kz1Jc3dK4iSftqf84lXEvk4PiM1IEzqX/sM9ELAHJOKvHGlrD/QlvDciJobwjCSHa4gqT1n0OvC3HWzUVnXRRghgx4OpiwYj7/XE7kebSFNZ2uxlnLhSnuDiG0kxAU6zbM/twa/GQTTix9ip50sEB1rDOq38PAB275dWaSHYo3Fid00neSlt5Sm0WvT1r2gnSVTd3pjilgL1r7Gd2gsCaZsDeijhhVbao6k41pE5iahP4umdj2kAAc26GZ8sSxHGAmPiGSnN3o36vAm/ayyGlL3DJTdhquW3aC+fIoSmwHs4ZnOo5n4mroQgEMRCH7LDfl6C6r5/R3Q1OcYvjO8/yZQKA3Awc4Nh1WAbDBXT0BhQ/y2lVITAcTMcj2Qs78Vns1cthHMDdxpV0lZWOUf01qBw2RQt1tSQVy+d156Tlwq7cwvppPdkRJRyGq/T2RZYAR9AJXG9gGCmwMpH3E9LayaiVcSgEsmroO43xf3IOL10GlqHDExrfffr+8IF9FDKZZKGQcswywoZgBg9iedFO1bxkw6cLO1AIqE6nWnBABN/pJnE2uzVaRntARM84HCbA30cCzA6Hnr7cHAdLi0tBvhhyoTMihIusH5twwVK9IAkYzSsKWE4VupguZyFiRDFKX4X1mPrTdmSLAgj5zCuj+Hjp5TTREi0ZswvB1bRiDmxcQ9I3V9bSwM4apXQ1MS4cXQUDSZqF/cj+IUZ8hOJKInzmhhwr/EYBEW2yEiBTRIGicYsr9KnXGv2kUyBEEqjGM2BaZWx9NBKKzHBFkOifzteqbM1OP7VGof7kRazhfWaSNsInMT3es9HA66Ri2FkYVT9wFQkZif8kqigjE8mQkhKzGujdSMX45ES7poj4CIddVZJocXB+b3lL9q0hzaJ7bHRZcxYPgBMQQ8C2MfBZniWDGk/cOL4ncpEVwOD/j+tkUk82BTtUfcPfTAw+8fw/6/2/x7tA8y9qBobXGGfYV43BSbD2WxeL21H8rChrHikDmVqxYYVS7Z3Pi6TZ5JvMVyyLIZJ1vXXXurjcmkf5+UZ44txJMviOnkOhCMJI/kId7QsWNs06z2+BoyUW7VmYeJ+B+qnub653+Z2zfXSl2iDiL790RS1jOGanw28DXyNsr58StZJPjmORl3EB3mP+SX5ZN/MlFgLR3UZbqo4m7UcyXCneghFIZdZCU5Ik7fT2xw4RA7EssNWNCzX3jjE1m+Dv82Bg+OAVnPmuOqoK3pMzsE1exvqbQ7shwNtHMYlquO89a8S5X9t9u+BL8aRpOHvRV8SZzKf7PNg+joQfFx/MLiSdCTzMQ4pOxQ8yXaH2jbuvxnHQeORho2teZRPImvOJ2Glk7h9M5zUSYq2u1FevgUuCduo6V23P7j+8DTDJ/sgP1voaCrr9U51H5jmsTbRauHjMsGdhG9+b+aDtGumqb+yJpr79Clt+kvJdgeqb4Ztfu+vfVyWhJV88j2G6fVMMkkqkg3ifPysN+w16F7I6pOWLEu2TeaB2R+eJAqbl7bNtCaA+uAS+Kb+7HtzWQJHv/DJ+qZ8nz6T9f0JU9x3/BT4/Yxpv/QkcST7jfPJevJX9BzexwB/xVNwJvFGL8eOmzaRreNFHORKyH6NcSsPbV395Jsjx50/hPOPd3tl1bFpU4c/cnzb2QQ689vWrlgaETTXBvZGjp3yHvahpW1rlj85asKkI8JaehYHdsOIiRFkVG9xc2/JzjUdm8aMuShT9LonEoB8Y/vax9dCjDBPVLuZOHFiakd34d0qdN7cvq5jzcgxbaOUy30s7RxBMKIboFaAt7tl5+5ytjbBCfXgbetWLqGtTSNObjuSWO+56Zy7XPGz0kpancdNkGe3rVnyxohxU87hCDG9dU1HRx1cjZrQNiasqqO3rzvqSc6A7TiOGfOeE0MnmKkdM5RIxD6uW6/YvnbZE7QRGoVxyac69uS280KHu0n8dJTYMiEbs3jbmsfW1fvQx4xvm8W537sJHsgV7xd1sfL7rVuftD/sHTV+ykkmdE4b7O2ev3r1avZUMsFzgxHjJ78LWo/b+vLy+44/vi1bTYdXwsfR9MGRFefKTm3p5pceXy289L2us+H79q0vr3iFPmHPbB6zwyPGnDUo52Qu4R7a8cSPikR201ruWdX079KBs7uaUTO0cZ7cum7pNqH1+AltR3OOPsmr6GXM856R4ydPJ978dKs+bK/vlK5FLobzKTlyS1SbPAcfK4u14jP5VOFCfr29bOf6lbsFjyTm4R8cU+t0Rp487TQCpf/EL3s3wLfnYMA7ueUrh7JyTWooiD7MJNl7TBD3Pgby8+EnTRkfT8aoU6adRdmdQLdJG11Nn0g8/VL5TTWzAE49Fq7+67ATzxm6fv0DZUbfzk8TJwqsamvj9Qo+Sm2tDknzM+4ZnFdHdZ46naOn9zIpcka4hc9u7v68JQLuGrlV6nxSJlbaSuL2yqeAP3PTnzv2qKw6mt/aXclPxYfbOqOmMbZfjBo3baoF5oso/emOa9rHjOmygdWR46ZOMh4XGLVKcSi8BGEugnM6dHNvrCcJrSJcatS4KR8MtPlnE+oNRHkeJL4zmOvU/6hYIFLPYvtf8ssbgP/Isfhy+jpHFdI3IRDRuWSgx8Cz2/bVhlwj8MJPBGkwk3crPXxSSiqF2lCEo50YEWfT6s/MzVFB6N0wYuy0sfBS+MvtB32qwAovJ05cYLVPIZU7FoZMB4/Pid4Lwj9gN6azTlX4xxjHsGivs+34qgbhF4E5SYRKBJY7/ldygjZa5su4wQ4EcyN0vYehjwB8HQfmb761YRU/xdenc1H2czGeY8a2nQHPPkEktOTxg/x34cJ729asuLsOcK9IfAwsTyeVCeWJ1O7haupu/m3IJ3j9gjBRdwcfI7+TybC/1Qt0yK9F9GYnFd65+YXHOLy8Yt7Icbu+46U8uVf1Sz6NdNRRdpJ6CnqmjRJuF1D54ra1y3/YUx9l9Na1K58fOW7KUlbjRyl6zGoOZcaxCL4hIKFTLRg4Imcxknh2gvBFjt4QxvO2bF732AZ+XSuRO0eYZ2EM/+HG0UvRaj+zjaKr10KRHTtPodUiHDnuvJPJXg4/bt6+doVoNFgxceWOPYWj1apV1ZHjpzGp4YRq2b/+tY1P7ZL6409ve6Lmm+/4XvEjvN7KsXAXmDdy6nkh2mulaJ1a1lwr2o+unpY2HrfiQ0fv4nDp7m2vLOdXQOoRBHq2/e2lUt9j0dWAjQYpvOzsjPIhv6h29A7llH+2BcsjuHqlrvItppC+WRYHpz5c5DBOtVb9hcDUWko5U+LmGT/DlvdtL69cJE9gUUDmse1rVtpr5VKG7NzKNfNbxWKJFQPPp9Cbi7e+vJL/6Be4K5RXmzpq3NRbIPIpV5tlr768coc0lARwJVOyt0Npo6uYzN+wGtxRY6feoIrmDYTydYTtTkYEQ2C343IOZ0K/q5qW91Env3E0pYMgCiGzbOBGsj1rVGr3bq3aKOzgQ2LmqgzImiXlBCUdOsePGjvlQ5TvIEB+OP0+X1f7ioXwXwxoFJrmZsxQgf5/vSUyCXLvrsZqqlZrPf8ULcNq/xWsOAJp+wJdfRYz96YE/KVf1Pc4hMQLqoFl2tFjJp/C/1Y7Acbtq1Rqa3b95YnXAGsIWeiehUZ+dfuaSKgwP86qVbPlbswWwcdIJtH/Y3Whksk2oklHjJ2yCM12qUCEgf15+yPwdAM8/fjI8VNehtfDEJZbgTlRYKpuOuD/T4Qc+suFRcz3pCP4WekRoNso76Km0dJW8Cdu2OD4XJaV4loYdrv8NxrW+Gcxxy8AP4Jz6DXbhjsrVEdHTcwxY/y65zq/ZNwpjsGv3bbGjlF1V1UtC+/kcFdw9SRMGnh6Xsk4IifMwe3QcQ3zMANNuJn5gc9Ublm/9C/85PxLrOpn+ZwRGOeHx4ydPEsqIVrOdNwQ4yzv/Lcs0WSv52r521i70/FDLsyU09+FGVXYbgfPGuIqgDk5lc5+HSn/On7PTZCziZU9f8KECdyfFupoIUlWWUdDazHNcknb9qVDBJRrOby9k5/3vYszz4mYnVG2XVubXU3I4B0AT6LZri1rVjxs6/jiN3XCBEdxg0MSODjfdPANO37MhO8dObbtegYlV2Hs1RhOsAWyks7ZOxtcwnBGgvcMTrc+n0qlLrFIGpqLlYovahL3Zts6MEORCRRYfsaVYoBWE1LuxXVc2BLeROPD54MWd8va5XfRD/j0F/kHi3fxP474XxgsIhIXa+SKw3H8aO7LYlpVkL4V7G+edLTzGzFZcFIHSKjArjrhhHA19yYlL0nGjMCyoMPD0IqDmcjCxFijUe963IlhwjlEShfhum3EFz8DYBrgXSNZehFAuW/WOIO0bgwaDU0Fjs3Q8m7+D9xPbTPmxxs1alJu64tLRF3/QgpHjp16BfReTXYe/5eHawVY98EWt1SLtBXEfAA3mzd/w4ZHmajJh8EYK+FAe7RH/ZoOnlv4zccfstWcOJdqV20w/9ILuEBbpqu5kdMsdWFQoRPIpwd5xy/JoeWey1bSN0kfUsInWkUdHVarbVn7+PZjxk55CiY+J01EcMURRmHCsAZv4B9XBEOrUYN9XTc6rS3fhtHn0+RP0o6fkL9C2aBazZvI66ObX17+CM9Hjhk/5bNMSsPHEoFmxQeO+TPjnSUbgK2rO9ZL2SoaDPsf7y3sev5hhNU8D6UXUnTnKkwjT5sY2zSGt1ZejBPg/jgRTUr9CClYIYscMzpOfrclMFzC4Io1WxFtnkCQnzShuzBVMWs76O/Yd5zXaqquIInu9ES8rGt78BqzNeWl/nNjNLeCTm2339Zsp3Z1Zf8VAUKQuQNcrX4ZfN8Q1yXnVFLYV+QkWgA2W2+Hkon4L+8JhQBtzzJrhU2rl++0oCgMz7R670GNnc//T7innPZe5drDSTDtVQHAZnGdVy7M1RP2A8ZYzYTvsywulpXHBFgtAnwG09SZC8oPrl//1L4YRp7Zbv7BaAu7CsechSpexy3gYSioarqinvHKuarvFuXOlXVAeeL/Ka8zF10op3ljUAmkCAgbRGtWuK8YrVgubUCSyaRCxJxEXv5xhhXY7dtXFYeNnfIDz+jFSJ+lT8rQrnNxNj7FcxA29LGU6x6Phj6D8SxJdGez219e+Sd8vBXotxtHnjz5pzrlvsq/TrxAl/3jcMBne0Hu975XmoSWuY2x/tTTHveFgqsRmKEpT98iSKARfnG7BPJkx8xTPshQDf7K/59Aqzi1NOzwcURW7HhlpfhYPakUemzuTGuo3ckjT2rbhZIeCr1VmRdMWykIzfBKUL1w+KlTnnaq+mjhM27Ky7JL3tXdijsQlLetXTlHEDLmW8Oq+09kv+115Uo1r5T3+H9YPZ2RETmI+ZwslzyuqsiIazcuspDmihYw5T+iMl/kJ98fzgbmOwJYzVRvlic2uhvJfbTidrIdJrFSeccJltSIfwSBZoUae/kfR3MXQvF4w2Oc7ShZ6aT6VvtZlsNRXOS8lnV5KUeW02uuGmV3IPzYAorWCyy/qtmAlX8mKJfsAK0ZlfE1J2P+2wnMRileteoEK3z8u4U9jGmlCRzr18HwZ1kTq+Omu9au2Ij/dD1jwXxCH2krmxcE+Sd0MVVWOjvrj0DnYkItv6+306KZyFt4fLzvQeW9SO37Cap8hfLhaMnfy65LxuL56mus8Jf4xfen+QHTv6AA3nSd8GubVnfYVc2OVXyrFbSz2immA4Fbj3TZRct/T0Hw+fdRIY6+JOFjnZe7V3cU4fPTuEJcIAjfz8K+CIXSNurkSSPLXmoT0C/AxLOdmr4WrrETD2fxv8MGo5kOp9+9gZO6XVBK4n9sfZfrzPuOGz95eH0eHiUUsiOqjb6xjyuhxVqeqGRune5orhjFk2pVe6Qx+S9H/we2AQGZVChyxgAAAABJRU5ErkJggg== diff --git a/build.sh b/build.sh index e0ad99f..1658c22 100755 --- a/build.sh +++ b/build.sh @@ -30,7 +30,8 @@ def build(name): return out.stat().st_size for name in ("index.html","editor.html","player.html","teacher.html","stage.html","micro.html","showcase.html", - "embed.html"): + "embed.html", + "info-editor.html","info-player.html","info-teacher.html","info-stage.html","info-micro.html","info-showcase.html"): print("built %s (%dKB)" % (name, build(name) // 1024)) pathlib.Path("dist/embed.js").write_text(pathlib.Path("embed.js").read_text()) # loader, served as-is print("copied embed.js") diff --git a/deploy.sh b/deploy.sh index f8553e6..918bb7d 100755 --- a/deploy.sh +++ b/deploy.sh @@ -41,15 +41,16 @@ fi # stamp the version into the built copy only (source stays clean) echo "deployed v$BUILD -> $DEST_DIR" for f in index.html editor.html player.html teacher.html stage.html micro.html showcase.html \ - embed.html; do + embed.html \ + info-editor.html info-player.html info-teacher.html info-stage.html info-micro.html info-showcase.html; do sed "s|const APP_VERSION = \"[^\"]*\";|const APP_VERSION = \"$BUILD\";|" "$DIST_DIR/$f" > "$DEST_DIR/$f" echo " $f ($(stat -c '%s' "$DEST_DIR/$f") bytes)" done cp "$DIST_DIR/embed.js" "$DEST_DIR/embed.js"; echo " embed.js ($(stat -c '%s' "$DEST_DIR/embed.js") bytes)" rm -f "$DEST_DIR/player-asbuilt.html" # renamed to teacher.html rm -f "$DEST_DIR/concepts.html" # Concepts is now the landing (/) -rm -f "$DEST_DIR"/info-*.html # info pages merged into each form-factor page -# (stage.html / info-stage.html are deployed again — now the foot-pedal Stage stompbox) +# info-*.html are first-class pages again: each form factor has a lean widget page +# (.html) + a separate spec/BOM page (info-.html that embeds it). # If real audio samples are added later (see the plan's GM-sample note), # sync that directory too. diff --git a/index.html b/index.html index 292ae92..c934cc0 100644 --- a/index.html +++ b/index.html @@ -43,7 +43,8 @@ .pane .chip.hw{ color:var(--cyan); border-color:rgba(10,179,247,.45); } .pane .chip.app{ color:#2fe07a; border-color:rgba(47,224,160,.45); } .pane p{ margin:0; font-size:12px; color:var(--muted); line-height:1.45; flex:1; } - .pane .open{ font-size:11px; color:var(--link); text-decoration:none; font-weight:600; align-self:flex-start; } + .pane .links{ display:flex; gap:14px; align-items:center; flex-wrap:wrap; } + .pane .open{ font-size:11px; color:var(--link); text-decoration:none; font-weight:600; } /* viewport: the live, selected device */ .viewport{ margin-top:16px; border:1px solid var(--panel-bd); border-radius:14px; overflow:hidden; background:var(--field-bg); } @@ -109,7 +110,7 @@
-
PM_E‑1 EditorOpen full page ↗
+
PM_E‑1 EditorSpecs & info ⓘ  ·  Open full page ↗
@@ -154,7 +155,10 @@ function renderPanes() {
${v.chip === "app" ? "Web app" : v.chip === "hw" ? "Hardware" : "Concept"}

${v.name}

${v.sum}

- Open full page ↗ +
`).join(""); $("panes").querySelectorAll(".pane").forEach((el) => { const k = el.dataset.key; @@ -167,6 +171,7 @@ function loadVersion(key, prog) { $("panes").querySelectorAll(".pane").forEach((p) => p.classList.toggle("active", p.dataset.key === key)); $("vpName").innerHTML = "" + v.name + ""; $("vpOpen").href = v.file; + $("vpInfo").href = v.file.replace("/", "/info-"); vp.style.height = (v.h || 440) + "px"; vp.src = v.file + "?embed=1" + (prog ? "#p=" + encodeURIComponent(prog) : ""); if (prog && !userEditing) box.value = prog; diff --git a/info-editor.html b/info-editor.html new file mode 100644 index 0000000..9040691 --- /dev/null +++ b/info-editor.html @@ -0,0 +1,68 @@ + + + + + +VARASYS PM_E‑1 PolyMeter Editor — what it is + + + + + + + +/*@BUILD:include:src/header.html@*/ + +
+
+

PM_E‑1 PolyMeter Editor

+

The web workbench for the whole family — design grooves here, and the same program string plays identically on every form factor.

+
+ + /*@BUILD:include:src/infoembed.html@*/ + +
+

What it is

+
Web appThe workbenchRuns in any browser
+

The editor is where you build a groove: stack independent meter lanes, each with its own subdivision, + drum voice and per‑step accents, ghosts and mutes, plus swing, ratio polyrhythm, set lists and a + per‑lane dB gain. It's zero‑install — it runs in any modern browser and works fully offline.

+

Everything you design saves to a compact program string in the shared share‑language. That same string + loads into any of the hardware concepts or an embedded widget, so a groove built here plays back identically + everywhere. There's no bill of materials — it's the software workbench, not a buildable device; the buildable + realizations are the Teacher, Stage, + Practice and Display.

+
+ +

Embed the editor (or any device) elsewhere with one <div> + a script — + see the embed docs.

+
+ +/*@BUILD:include:src/footer.html@*/ + + + + diff --git a/info-micro.html b/info-micro.html new file mode 100644 index 0000000..3f9ed12 --- /dev/null +++ b/info-micro.html @@ -0,0 +1,129 @@ + + + + + +VARASYS PM_P‑1 Practice — purpose, dimensions & bill of materials + + + + + + + +/*@BUILD:include:src/header.html@*/ + +
+
+

PM_P‑1 Practice

+

A long, narrow inline practice bar — patch it into your signal, drive everything from one clickable thumb‑roller, and read tempo and track names off an amber 14‑segment display.

+
+ + /*@BUILD:include:src/infoembed.html@*/ + +
+

What it is

+
HardwareInline practice bar~$35 one‑off
+

A long, narrow practice bar you patch into your signal: instrument in one end, amp or headphones out + the other, the click mixed in. One clickable thumb‑roller does everything (roll = tempo, press = start/stop, + hold + roll = switch track), and an amber 14‑segment display shows tempo and track names.

+

The click is summed into your signal in the analog domain (plus a small monitor speaker). Powered over + USB‑C — a wall adapter for a permanent practice‑space install, or a pocket power bank when you're mobile (no + internal battery to wear out); ships with the editor's grooves built in.

+
+ +
+

Dimensions & layout — ≈ 6.3 × 1.4 × 1.0 in (160 × 36 × 26 mm), an extruded bar

+
+
↕ 1.4 in
(36 mm)
+
+ Front (top face) +
+
+
14‑seg display
+
thumb‑roller
+
+
+
↔ 6.3 in (160 mm) long
+
+
+
+ Left end +
+
TRS In (instrument)
+
+
+
+
+ Right end +
+
+
USB‑C · TRS Out
+
+
+
+
↕ ends ≈ 1.0 in (26 mm) deep
+
+ +
+ Spec & bill of materials +
+

Rough parts list — a USB‑C‑powered RP2040 inline bar with analog click injection. + Ballpark one‑off prices (USD); cheaper at volume.

+ + + + + + + + + + + + + + + + + + + + + +
PartQty~$
Brain & display
RP2040 board, USB‑C — e.g. Waveshare RP2040‑Zero14
4‑char 14‑segment alphanumeric LED + I²C driver — amber; HT16K33. Shows BPM & track names14
Control
Clickable thumb‑roller — EC11 encoder + roller wheel · roll / press / hold‑roll12
Audio — analog click injection
PCM5102A I²S DAC — line‑level click13
Dual op‑amp, NE5532 / OPA2134 — hi‑Z instrument buffer + summing mixer11
PAM8302A mono Class‑D + 8 Ω speaker — monitor14
Connectors & power
1/4″ jack — Inst In (TS) · Out (TRS)22
USB‑C bus power (5 V) + PWR LED — wall adapter or power bank; also carries config11
Build
Custom PCB (or perfboard)14
Passives, headers, wire — R/C for the analog stage + decoupling2
Extruded aluminium bar enclosure + end caps — bead‑blasted, matte‑black anodised18
Total (one‑off)≈ $35
+
+
+ +

Embed this widget elsewhere with one <div> + a script — + see the embed docs.

+
+ +/*@BUILD:include:src/footer.html@*/ + + + + diff --git a/info-player.html b/info-player.html new file mode 100644 index 0000000..ae8d1f5 --- /dev/null +++ b/info-player.html @@ -0,0 +1,68 @@ + + + + + +VARASYS PM_C‑1 Concept — the idealized player + + + + + + + +/*@BUILD:include:src/header.html@*/ + +
+
+

PM_C‑1 Concept

+

The idealized concept render — a clean, screen‑first player with a colour beat display, set‑list navigation, theming and a fullscreen landscape view.

+
+ + /*@BUILD:include:src/infoembed.html@*/ + +
+

What it is

+
ConceptIdealized deviceNot buildable as drawn
+

The idealized concept (PM_C‑1): the player as a clean, screen‑first device with no concession to mechanical parts yet. + It's the look we design toward — full set‑list navigation, a colour beat display showing every lane, + light/dark theming, and a fullscreen landscape "stage" view. It runs the same engine and program strings as + everything else in the family, but as an idealized object, before deciding which buttons, encoders, + jacks and enclosure actually make it real.

+

Because it's a concept, there's no bill of materials — there's nothing to source for a render. The + buildable realization of this idea is the PM_T‑1 Teacher (full priced BOM there); + for the smallest practical unit, see the PM_P‑1 Practice.

+
+ +

Embed this widget elsewhere with one <div> + a script — + see the embed docs.

+
+ +/*@BUILD:include:src/footer.html@*/ + + + + diff --git a/info-showcase.html b/info-showcase.html new file mode 100644 index 0000000..aa229a9 --- /dev/null +++ b/info-showcase.html @@ -0,0 +1,123 @@ + + + + + +VARASYS PM_D‑1 Display — purpose, dimensions & bill of materials + + + + + + + +/*@BUILD:include:src/header.html@*/ + +
+
+

PM_D‑1 Display

+

A display‑piece metronome — the pendulum is an RGB light bar that combines every lane's subdivisions & accents; a printed tempo scale with a sliding weight sets the tempo.

+
+ + /*@BUILD:include:src/infoembed.html@*/ + +
+

What it is

+
HardwareDisplay piece~$41 one‑off
+

A metronome as an object: the silhouette of a classic pyramid wind‑up unit, but the swinging pendulum is + pure RGB light. The whole bar is the display — every lane's subdivisions & accents ride along its + length as moving points of light (all meters combined), a printed tempo scale runs up the vertical axis, + and a sliding weight sets the tempo just like the mechanical original.

+

It's a beautiful, glanceable tempo reference for the shelf, the studio, or a shop window: accents glow + amber, normal steps cyan, ghosts soft violet, and the pendulum eases to each beat exactly as a weighted rod + would. It runs the same grooves as everything else (load any program string), plays the click through a + small speaker, and is powered over USB‑C with a second "thru" port to daisy‑chain. There's no power switch — + the real unit starts when you lift it from its holder / set it swinging. No instrument I/O; it's a showpiece.

+
+ +
+

Dimensions & profile — ≈ 4.7 × 7.1 × 3.1 in (120 × 180 × 80 mm), a truncated‑pyramid plinth

+
+
↕ 7.1 in (180 mm)
+
+ Front +
+
+
RGB‑light pendulum bar + tempo scale
+
+
+
↔ 4.7 in (120 mm) base
+
+
↕ 7.1 in (180 mm)
+
+ Side +
+
+
USB‑C in base
+
+
+
↔ 3.1 in (80 mm) deep
+
+ +
+ Spec & bill of materials +
+

Rough parts list — a USB‑C‑powered RP2040 display piece driving addressable RGB light. + Ballpark one‑off prices (USD); cheaper at volume.

+ + + + + + + + + + + + + + + + + + +
PartQty~$
Brain
RP2040 board, USB‑C — e.g. Waveshare RP2040‑Zero14
RGB light
Addressable RGB LEDs (WS2812B) — a strip down the pendulum bar, ~40 px15
Frosted acrylic diffuser / light‑guide — the glowing pendulum bar13
Audio
MAX98357A I²S amp + small speaker — the click14
Power & build
2× USB‑C (data+power & power‑thru) + PWR LED — daisy‑chain13
Tilt / lift sensor (accelerometer) — starts when lifted from its holder12
Custom PCB (or perfboard)14
Passives, wire2
Pyramid enclosure — cast/CNC aluminium or hardwood, frosted front panel114
Total (one‑off)≈ $41
+
+
+ +

Embed this widget elsewhere with one <div> + a script — + see the embed docs.

+
+ +/*@BUILD:include:src/footer.html@*/ + + + + diff --git a/info-stage.html b/info-stage.html new file mode 100644 index 0000000..d053b9f --- /dev/null +++ b/info-stage.html @@ -0,0 +1,130 @@ + + + + + +VARASYS PM_S‑1 Stage — purpose, dimensions & bill of materials + + + + + + + +/*@BUILD:include:src/header.html@*/ + +
+
+

PM_S‑1 Stage

+

A foot‑pedal polymeter stompbox — hands‑free footswitches, expression‑pedal tempo, a floor‑readable RGB beat light, and analog instrument pass‑through with the click mixed in.

+
+ + /*@BUILD:include:src/infoembed.html@*/ + +
+

What it is

+
HardwareFoot‑pedal stompbox~$52 one‑off
+

A foot‑operated polymeter stompbox for the stage: drive it hands‑free with two heavy footswitches and an + expression pedal, read it off the floor from the big RGB beat light, and run your instrument through it with + the click mixed in. (For a desk/lesson unit with a full screen, see the Teacher.)

+

The controls are built for feet: the left footswitch taps tempo (hold to start/stop), the right + steps through your set list (hold for previous), and a 1/4″ expression‑pedal input sweeps tempo on the + fly. Your instrument passes through (1/4″ in) with the click summed in the analog domain and sent to a + balanced 1/4″ TRS out. Powered over USB‑C — with a second USB‑C "thru" port so several pedals + daisy‑chain off one charger or power bank.

+
+ +
+

Dimensions & layout — ≈ 4.7 × 3.7 × 1.5 in (120 × 93 × 38 mm), a 1590BB‑style stompbox

+
+
↕ 3.7 in (93 mm)
+
+ Front +
+
+
+
+
angled TFT · RGB beat light · Tap + Next footswitches
+
+
+
↔ 4.7 in (120 mm) wide
+
+
↕ 1.5 in (38 mm)
+
+ Top edge — I/O +
+
+
+
Trig · Inst In · Out TRS · Exp · USB‑C · USB‑C thru
+
+
+
↔ 4.7 in (120 mm)
+
+ +
+ Spec & bill of materials +
+

Rough parts list — a foot‑operated RP2040 stompbox (USB‑C, dual‑port) with analog click injection. + Ballpark one‑off prices (USD); cheaper at volume.

+ + + + + + + + + + + + + + + + + + + + + + + +
PartQty~$
Brain & display
RP2040 board, USB‑C — e.g. Waveshare RP2040‑Zero14
1.3″ IPS TFT, ST7789 — SPI; angled BPM / item readout16
High‑bright diffused RGB beat indicator — floor‑readable11
Controls
Heavy‑duty momentary footswitch (soft‑touch) — Tap · Next26
1/4″ expression‑pedal input jack (TRS) — tempo sweep11
Audio — analog click injection
PCM5102A I²S DAC — line‑level click13
Dual op‑amp, NE5532 / OPA2134 — hi‑Z instrument buffer + summing mixer11
Balanced line driver, DRV134 — → 1/4″ TRS out14
Connectors & power
1/4″ jack — Inst In (TS) · Out (TRS) · Trig In (TS)33
2× USB‑C (data+power & power‑thru) + power‑path/protection + PWR LED — daisy‑chain pedals13
Build
Custom PCB (or perfboard)15
Passives, headers, wire — R/C for the analog stage + decoupling3
Die‑cast aluminium stompbox (Hammond 1590BB‑style) — bead‑blasted, matte‑black Type II anodise, laser‑etched112
Total (one‑off)≈ $52
+

No built‑in speaker — the Stage feeds your amp / PA. The click is summed in + the analog domain (hi‑Z instrument buffer + DAC → balanced line driver), so your instrument is never + re‑digitised (no added latency).

+
+
+ +

Embed this widget elsewhere with one <div> + a script — + see the embed docs.

+
+ +/*@BUILD:include:src/footer.html@*/ + + + + diff --git a/info-teacher.html b/info-teacher.html new file mode 100644 index 0000000..ba573b7 --- /dev/null +++ b/info-teacher.html @@ -0,0 +1,105 @@ + + + + + +VARASYS PM_T‑1 Teacher — purpose, spec & bill of materials + + + + + + + +/*@BUILD:include:src/header.html@*/ + +
+
+

PM_T‑1 Teacher

+

The full‑feature studio / lesson desk console — a colour TFT showing every lane, arcade buttons and a thumb‑roller, with your instrument running through and the click mixed in.

+
+ + /*@BUILD:include:src/infoembed.html@*/ + +
+

What it is

+
HardwareStudio / lesson console~$59 one‑off
+

The full‑feature desktop console: a colour readout of every lane, fast set‑list navigation, and your + instrument running straight through with the click mixed in — the hands‑on unit for a studio desk or a + teaching room, on a non‑reflective matte‑black case. (For hands‑free live use, see the foot‑operated + Stage stompbox.)

+

Top‑mounted 1/4″ jacks keep cabling tidy; the metronome click is summed into the signal in the + analog domain (no re‑digitising, no added latency) and sent to a balanced 1/4″ TRS output for the + desk or interface, plus a small monitor speaker. Powered over USB‑C — a wall adapter or a power bank. The + colour TFT shows tempo, the item name and all lane patterns; arcade buttons + a recessed thumb‑roller make + it quick to drive while you teach or track.

+
+ +
+ Spec & bill of materials +
+

Rough parts list — a desk/studio RP2040 build (USB‑C powered) with analog click injection. + Ballpark one‑off prices (USD); cheaper at volume.

+ + + + + + + + + + + + + + + + + + + + + + + + +
PartQty~$
Brain & display
RP2040 board, USB‑C — e.g. Waveshare RP2040‑Zero / Pico‑clone14
2.0″ 320×240 IPS TFT, ST7789 — SPI18
Controls
Arcade pushbutton, 24 mm — Prev · Next · Tap34
Arcade pushbutton, 30 mm — Play12
Detented encoder (EC11 / PEC12) + side‑mount thumb‑roller — recessed; nothing to snap off12
Audio — analog click injection
PCM5102A I²S DAC — line‑level click13
Dual op‑amp, NE5532 / OPA2134 — hi‑Z instrument buffer + summing mixer11
Balanced line driver, DRV134 — (or cross‑coupled op‑amp) → 1/4″ TRS out14
PAM8302A mono Class‑D + 8 Ω 2 W speaker — monitor14
Connectors & power
1/4″ jack — Inst In (TS) · Out (TRS) · Trig In (TS)33
USB‑C bus power (5 V) + PWR LED — wall adapter or power bank; same port carries config; no battery11
Build
Custom PCB (or perfboard)15
Passives, headers, wire — R/C for the analog stage + decoupling3
Die‑cast aluminium enclosure (Hammond 1590‑style) — bead‑blasted, matte‑black Type II anodise, laser‑etched legends112
Total (one‑off)≈ $56
+

Audio is summed in the analog domain: the DAC's click is mixed with a + high‑impedance buffer of the 1/4″ instrument input, then fed to the balanced line driver (1/4″ TRS out) and the + monitor amp — so your instrument is never re‑digitised (no added latency).

+
+
+ +

Embed this widget elsewhere with one <div> + a script — + see the embed docs.

+
+ +/*@BUILD:include:src/footer.html@*/ + + + + diff --git a/micro.html b/micro.html index fb36e9d..ccd3362 100644 --- a/micro.html +++ b/micro.html @@ -82,7 +82,7 @@ linear-gradient(180deg, #2b2d33, #161719); /* matte anodised graphite */ box-shadow:0 24px 50px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.05), inset 0 -2px 8px rgba(0,0,0,.5) } .brandrow{ display:flex; align-items:center; justify-content:space-between; margin:0 } - .dev-logo{ height:13px } + .dev-logo{ height:22px } .silk{ display:flex; align-items:center; gap:7px; color:var(--silk) } .silk .model{ font-size:8.5px; text-transform:uppercase; letter-spacing:.16em; opacity:.85 } .meta{ display:flex; align-items:center; gap:12px } @@ -140,7 +140,7 @@
-
Simplifying ComplexityPM_P‑1 Practice
+
PM_P‑1 Practice
USB‑C PWR
@@ -346,86 +346,7 @@ window.loadProgramString = function(plain){ var s=patchToSetup(plain); tracks=[{ /*@BUILD:include:src/progbox.js@*/ - - + /*@BUILD:include:src/footer.html@*/ diff --git a/player.html b/player.html index bfb1544..90b57f9 100644 --- a/player.html +++ b/player.html @@ -84,8 +84,7 @@ .brandrow{ display:flex; align-items:center; justify-content:space-between; margin:2px 6px 16px; } .logo{ display:flex; align-items:center; gap:11px } - .logo .dev-logo{ height:19px } - .logo .dev-tag{ color:var(--dmuted) } + .logo .dev-logo{ height:26px } .logo .model{ color:var(--dmuted); font-size:12px; letter-spacing:.04em } .pwr{ display:flex; align-items:center; gap:7px; font-size:10px; color:var(--dmuted); text-transform:uppercase; letter-spacing:.12em } .pwr .dot{ width:8px; height:8px; border-radius:50%; background:#2fe07a; box-shadow:0 0 8px #2fe07a } @@ -222,7 +221,7 @@
- +
PWR
@@ -493,21 +492,7 @@ requestAnimationFrame(draw); /*@BUILD:include:src/progbox.js@*/ - - + /*@BUILD:include:src/footer.html@*/ diff --git a/showcase.html b/showcase.html index b0a1d99..3ef8c1e 100644 --- a/showcase.html +++ b/showcase.html @@ -75,80 +75,7 @@ /*@BUILD:include:src/progbox.html@*/ - - + /*@BUILD:include:src/footer.html@*/ @@ -226,15 +153,11 @@ function drawBody(){ g.beginPath(); g.moveTo(tlx,topY); g.lineTo(trx,topY); g.lineTo(brx,botY); g.lineTo(blx,botY); g.closePath(); g.fillStyle=grd; g.fill(); g.lineWidth=1.5; g.strokeStyle="rgba(255,255,255,.06)"; g.stroke(); g.beginPath(); g.moveTo(tlx,topY); g.lineTo(blx,botY); g.lineWidth=2; g.strokeStyle="rgba(255,255,255,.05)"; g.stroke(); - // proper VARASYS logo (wordmark image) + tagline + model - const lw=60, lh=Math.round(lw*82/304), lx=CW/2-lw/2, ly=15; + // official VARASYS logo (the "Simplifying Complexity" tagline is baked into the image) + model + const lw=92, lh=Math.round(lw*82/304), lx=CW/2-lw/2, ly=14; if(logoReady) g.drawImage(LOGO, lx, ly, lw, lh); g.textAlign="center"; - g.fillStyle="#8f9aa6"; g.font="600 5px 'Segoe UI',Roboto,Arial,sans-serif"; g.globalAlpha=.85; - try{ g.letterSpacing="1.4px"; }catch(e){} - g.fillText("SIMPLIFYING COMPLEXITY", CW/2, ly+lh+7); - try{ g.letterSpacing="0px"; }catch(e){} g.globalAlpha=1; - g.fillStyle="#aab2bc"; g.font="600 7px 'Segoe UI',Roboto,Arial,sans-serif"; g.fillText("PM_D‑1 DISPLAY", CW/2, ly+lh+17); + g.fillStyle="#aab2bc"; g.font="600 7px 'Segoe UI',Roboto,Arial,sans-serif"; g.fillText("PM_D‑1 DISPLAY", CW/2, ly+lh+11); } function drawPendulum(){ diff --git a/src/base.css b/src/base.css index 48516ee..6e84eb0 100644 --- a/src/base.css +++ b/src/base.css @@ -11,18 +11,16 @@ body { -webkit-font-smoothing: antialiased; } -/* ---- VARASYS brand lockup: wordmark + "Simplifying Complexity" tagline beneath ---- */ -.brand { display:inline-flex; flex-direction:column; align-items:stretch; flex:0 0 auto; gap:2px; text-decoration:none; } -.brand-logo { height:28px; width:auto; display:block; } +/* ---- VARASYS brand lockup (the official logo PNGs already bake in the + "Simplifying Complexity" tagline — dark variant for dark themes, light for light) ---- */ +.brand { display:inline-flex; align-items:center; flex:0 0 auto; text-decoration:none; } +.brand-logo { height:34px; width:auto; display:block; } .brand-light { display:none; } :root[data-theme="light"] .brand-dark { display:none; } :root[data-theme="light"] .brand-light { display:block; } -.brand-tag { font-size:7px; line-height:1; letter-spacing:.26em; text-transform:uppercase; text-align:center; - color:var(--muted,#7f8b9a); white-space:nowrap; } -/* on-device silkscreen brand lockup (wordmark image + tagline) — used in device brandrows */ -.dev-lock { display:inline-flex; flex-direction:column; align-items:stretch; gap:1px; } -.dev-logo { display:block; width:auto; height:14px; } -.dev-tag { font-size:5px; line-height:1; letter-spacing:.16em; text-transform:uppercase; text-align:center; opacity:.8; white-space:nowrap; } +/* on-device silkscreen brand (official logo image, tagline included) — used in device brandrows */ +.dev-lock { display:inline-flex; align-items:center; } +.dev-logo { display:block; width:auto; height:20px; } .site-head { width:100%; max-width:980px; margin:0 auto; display:flex; align-items:center; justify-content:space-between; gap:10px 16px; flex-wrap:wrap; } .head-left { display:flex; align-items:center; gap:12px; flex-wrap:wrap; } @@ -84,6 +82,17 @@ details.spec .spec-body { padding:2px 16px 16px; } .ff-title { font-size:20px; margin:6px 0 2px; text-align:center; color:var(--txt,#c7d0db); } .ff-sum { max-width:60ch; margin:0 auto; text-align:center; color:var(--muted,#7f8b9a); font-size:13.5px; line-height:1.55; } [data-embed] .ff-title, [data-embed] .ff-sum { display:none !important; } +/* link from the lean device page out to its info page (specs / dimensions / BOM) */ +.ff-link { text-align:center; margin:16px auto 0; font-size:13px; } +.ff-link a { font-weight:600; } + +/* ---- info-.html: the embedded live widget at the top of the spec page ---- */ +.infoview { width:100%; max-width:760px; margin:18px auto 0; border:1px solid var(--panel-bd,#2a313c); + border-radius:14px; overflow:hidden; background:var(--field-bg,#0e1116); } +.iv-bar { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:8px 12px; + border-bottom:1px solid var(--panel-bd,#2a313c); font-size:12px; color:var(--muted,#7f8b9a); } +.iv-bar b { color:var(--txt,#c7d0db); } +.infoview iframe { display:block; width:100%; height:440px; border:0; background:var(--field-bg,#0e1116); transition:height .15s; } /* ---- per-device program I/O box (plain view) ---- */ .progbox { width:100%; max-width:620px; margin:14px auto 0; display:flex; align-items:center; gap:9px; flex-wrap:wrap; @@ -117,10 +126,3 @@ details.spec .spec-body { padding:2px 16px 16px; } .dschem .jk { position:absolute; width:12px; height:12px; border-radius:50%; border:2px solid #5b6470; background:radial-gradient(circle at 40% 34%,#333a44,#07090c 72%); } .dschem .jk.u { width:14px; height:6px; border-radius:3px; } .dschem .jl { position:absolute; font-size:7px; color:var(--silk,#aab2bc); letter-spacing:.03em; text-transform:uppercase; opacity:.85; text-align:center; line-height:1.1; } - -/* ---- "Show info" toggle + technical section ---- */ -.info-toggle { display:flex; align-items:center; justify-content:center; gap:8px; margin:18px auto 0; max-width:620px; - font-size:13px; color:var(--muted,#7f8b9a); cursor:pointer; } -.info-toggle input { width:15px; height:15px; cursor:pointer; } -[data-embed] .info-toggle { display:none !important; } -#techinfo[hidden] { display:none; } diff --git a/src/header.html b/src/header.html index bb62ddb..1951346 100644 --- a/src/header.html +++ b/src/header.html @@ -4,7 +4,6 @@ - Simplifying Complexity
-
Simplifying ComplexityPM_S‑1 Stage
+
PM_S‑1 Stage
USB‑C PWR
@@ -306,87 +306,7 @@ window.loadProgramString = function(plain){ var s=patchToSetup(plain); tracks=[{ /*@BUILD:include:src/progbox.js@*/ - - + /*@BUILD:include:src/footer.html@*/ diff --git a/teacher.html b/teacher.html index d600788..b57f3d9 100644 --- a/teacher.html +++ b/teacher.html @@ -89,7 +89,7 @@ } .brandrow{ display:flex; align-items:flex-end; justify-content:space-between; margin:0 2px 12px; } .silk{ display:flex; align-items:center; gap:8px; color:var(--silk); letter-spacing:.04em } - .dev-logo{ height:16px } + .dev-logo{ height:24px } .silk .model{ font-size:10px; text-transform:uppercase; letter-spacing:.18em; opacity:.8 } .pwr{ display:flex; align-items:center; gap:6px; font-size:9px; color:var(--silk); text-transform:uppercase; letter-spacing:.14em; opacity:.85 } .pwr .dot{ width:7px; height:7px; border-radius:50%; background:#2fe07a; box-shadow:0 0 7px #2fe07a } @@ -231,7 +231,7 @@
-
Simplifying ComplexityPM_T‑1 Teacher
+
PM_T‑1 Teacher
PWR
@@ -278,59 +278,7 @@
- - +