From fc593405bb3ab7960275c12b593943ee868b86c7 Mon Sep 17 00:00:00 2001 From: thematdev Date: Fri, 31 Dec 2021 18:50:07 +0300 Subject: [PATCH] Happy New Year! Signed-off-by: thematdev --- app/__init__.py | 4 +++- app/snowfall.py | 16 ++++++++++++++++ app/static/css/snowfall.css | 1 + app/static/images/blank.png | Bin 948 -> 0 bytes app/static/images/chatmanager.png | Bin 3426 -> 0 bytes app/static/images/grave.jpg | Bin 8126 -> 0 bytes app/static/images/snowflake.png | Bin 0 -> 2819 bytes app/static/images/soon.jpg | Bin 4821 -> 0 bytes app/static/images/thissite.png | Bin 778 -> 0 bytes app/templates/index.html | 28 ++++++++++------------------ 10 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 app/snowfall.py create mode 100644 app/static/css/snowfall.css delete mode 100644 app/static/images/blank.png delete mode 100644 app/static/images/chatmanager.png delete mode 100644 app/static/images/grave.jpg create mode 100644 app/static/images/snowflake.png delete mode 100644 app/static/images/soon.jpg delete mode 100644 app/static/images/thissite.png diff --git a/app/__init__.py b/app/__init__.py index 952a087..44baf60 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,6 +3,7 @@ from flask import Flask, url_for, render_template import os import json import numpy.random as gaussian_rnd +from app.snowfall import generate_snowfall load_dotenv() @@ -67,4 +68,5 @@ def index(): data = json.loads(file.read()) cols = data['cols'] projects = data['projects'] - return render_template('index.html', random_number=generate_iq(), projects=projects) + snowflake_image_url = dated_url_for('static', filename='images/snowflake.png') + return render_template('index.html', random_number=generate_iq(), projects=projects, snowfall=generate_snowfall(snowflake_image_url)) diff --git a/app/snowfall.py b/app/snowfall.py new file mode 100644 index 0000000..c079bc6 --- /dev/null +++ b/app/snowfall.py @@ -0,0 +1,16 @@ +''' +Source files of snowfall, including CSS you can find at https://github.com/Artimon/pure-css-snowfall +''' + + +SNOWFLAKE_CHARACTERS = ['\U0001f342', '\U0001f49d', '\U0001f31f', '\U0001f381'] +SNOWFLAKE_IMAGE_COUNT = 15 + +def generate_snowfall(snowflake_image_url): + snowfall = [] + for char in SNOWFLAKE_CHARACTERS: + snowfall.append(f'{char}') + snowfall += [f''] * SNOWFLAKE_IMAGE_COUNT + return snowfall + + diff --git a/app/static/css/snowfall.css b/app/static/css/snowfall.css new file mode 100644 index 0000000..09fe025 --- /dev/null +++ b/app/static/css/snowfall.css @@ -0,0 +1 @@ +snowfall{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50000000;display:block;font-size:40px;overflow:hidden;pointer-events:none}snowfall snowflake{position:absolute;top:0;left:0;display:flex;justify-content:center;width:100px;height:100px}snowfall snowflake span{align-self:center}snowfall snowflake img{align-self:center;width:20px}snowfall snowflake:nth-child(50){animation:animation-snowflake-50 linear infinite;animation-duration:13.1s;animation-delay:-1.1s}@keyframes animation-snowflake-50{0%{left:85%;top:calc(0% - 100px);transform:scale(1.058) rotate3d(.36,.38,.25,0deg)}100%{left:114.1%;top:calc(100% + 100px);transform:scale(1.058) rotate3d(.35,.84,.72,997deg)}}snowfall snowflake:nth-child(49){animation:animation-snowflake-49 linear infinite;animation-duration:12s;animation-delay:-14.8s}@keyframes animation-snowflake-49{0%{left:26%;top:calc(0% - 100px);transform:scale(.637) rotate3d(.22,.52,.15,0deg)}100%{left:16%;top:calc(100% + 100px);transform:scale(.637) rotate3d(.12,.67,.79,-1212deg)}}snowfall snowflake:nth-child(48){animation:animation-snowflake-48 linear infinite;animation-duration:11.8s;animation-delay:-10.4s}@keyframes animation-snowflake-48{0%{left:3%;top:calc(0% - 100px);transform:scale(1.235) rotate3d(.92,.78,.97,0deg)}100%{left:26.8%;top:calc(100% + 100px);transform:scale(1.235) rotate3d(.75,.86,.08,-1042deg)}}snowfall snowflake:nth-child(47){animation:animation-snowflake-47 linear infinite;animation-duration:9.2s;animation-delay:-1s}@keyframes animation-snowflake-47{0%{left:50%;top:calc(0% - 100px);transform:scale(1.046) rotate3d(.88,.19,.75,0deg)}100%{left:75.1%;top:calc(100% + 100px);transform:scale(1.046) rotate3d(.22,.68,.67,-1287deg)}}snowfall snowflake:nth-child(46){animation:animation-snowflake-46 linear infinite;animation-duration:15.8s;animation-delay:-15.1s}@keyframes animation-snowflake-46{0%{left:78%;top:calc(0% - 100px);transform:scale(1.146) rotate3d(.95,.06,.46,0deg)}100%{left:67%;top:calc(100% + 100px);transform:scale(1.146) rotate3d(.79,.01,.63,1235deg)}}snowfall snowflake:nth-child(45){animation:animation-snowflake-45 linear infinite;animation-duration:13.4s;animation-delay:-15.5s}@keyframes animation-snowflake-45{0%{left:22%;top:calc(0% - 100px);transform:scale(.705) rotate3d(.2,1,.33,0deg)}100%{left:22.5%;top:calc(100% + 100px);transform:scale(.705) rotate3d(.99,.94,.9,1293deg)}}snowfall snowflake:nth-child(44){animation:animation-snowflake-44 linear infinite;animation-duration:11.3s;animation-delay:-15.7s}@keyframes animation-snowflake-44{0%{left:74%;top:calc(0% - 100px);transform:scale(.87) rotate3d(.89,.22,.95,0deg)}100%{left:58.7%;top:calc(100% + 100px);transform:scale(.87) rotate3d(.77,.8,.04,1038deg)}}snowfall snowflake:nth-child(43){animation:animation-snowflake-43 linear infinite;animation-duration:14.8s;animation-delay:-14s}@keyframes animation-snowflake-43{0%{left:57%;top:calc(0% - 100px);transform:scale(1.103) rotate3d(.11,.59,.53,0deg)}100%{left:55.6%;top:calc(100% + 100px);transform:scale(1.103) rotate3d(.84,.39,.31,955deg)}}snowfall snowflake:nth-child(42){animation:animation-snowflake-42 linear infinite;animation-duration:8.1s;animation-delay:-7.8s}@keyframes animation-snowflake-42{0%{left:91%;top:calc(0% - 100px);transform:scale(1.249) rotate3d(.56,.42,.15,0deg)}100%{left:81.8%;top:calc(100% + 100px);transform:scale(1.249) rotate3d(.16,.03,.8,1214deg)}}snowfall snowflake:nth-child(41){animation:animation-snowflake-41 linear infinite;animation-duration:15.9s;animation-delay:-11.1s}@keyframes animation-snowflake-41{0%{left:66%;top:calc(0% - 100px);transform:scale(1.389) rotate3d(.91,.12,.21,0deg)}100%{left:105.3%;top:calc(100% + 100px);transform:scale(1.389) rotate3d(.31,.97,.5,-885deg)}}snowfall snowflake:nth-child(40){animation:animation-snowflake-40 linear infinite;animation-duration:14.4s;animation-delay:-4.2s}@keyframes animation-snowflake-40{0%{left:3%;top:calc(0% - 100px);transform:scale(1.247) rotate3d(.38,.39,.66,0deg)}100%{left:23.7%;top:calc(100% + 100px);transform:scale(1.247) rotate3d(.98,.66,.46,999deg)}}snowfall snowflake:nth-child(39){animation:animation-snowflake-39 linear infinite;animation-duration:15.4s;animation-delay:-7.2s}@keyframes animation-snowflake-39{0%{left:11%;top:calc(0% - 100px);transform:scale(1.091) rotate3d(.92,.21,.47,0deg)}100%{left:26.9%;top:calc(100% + 100px);transform:scale(1.091) rotate3d(.29,.72,.17,1290deg)}}snowfall snowflake:nth-child(38){animation:animation-snowflake-38 linear infinite;animation-duration:12.9s;animation-delay:-15.6s}@keyframes animation-snowflake-38{0%{left:98%;top:calc(0% - 100px);transform:scale(1.319) rotate3d(.44,.68,.72,0deg)}100%{left:108%;top:calc(100% + 100px);transform:scale(1.319) rotate3d(1,.46,.76,-986deg)}}snowfall snowflake:nth-child(37){animation:animation-snowflake-37 linear infinite;animation-duration:14.9s;animation-delay:-1.6s}@keyframes animation-snowflake-37{0%{left:53%;top:calc(0% - 100px);transform:scale(1.076) rotate3d(.98,.27,.82,0deg)}100%{left:34.5%;top:calc(100% + 100px);transform:scale(1.076) rotate3d(.18,.66,.97,-1163deg)}}snowfall snowflake:nth-child(36){animation:animation-snowflake-36 linear infinite;animation-duration:8.1s;animation-delay:-9.8s}@keyframes animation-snowflake-36{0%{left:37%;top:calc(0% - 100px);transform:scale(1.243) rotate3d(.89,.81,.03,0deg)}100%{left:26.3%;top:calc(100% + 100px);transform:scale(1.243) rotate3d(.72,.02,.43,1191deg)}}snowfall snowflake:nth-child(35){animation:animation-snowflake-35 linear infinite;animation-duration:10.2s;animation-delay:-6.4s}@keyframes animation-snowflake-35{0%{left:94%;top:calc(0% - 100px);transform:scale(1.325) rotate3d(.08,1,.49,0deg)}100%{left:75.6%;top:calc(100% + 100px);transform:scale(1.325) rotate3d(.59,.71,.97,-1205deg)}}snowfall snowflake:nth-child(34){animation:animation-snowflake-34 linear infinite;animation-duration:10.4s;animation-delay:-12.2s}@keyframes animation-snowflake-34{0%{left:62%;top:calc(0% - 100px);transform:scale(1.279) rotate3d(.2,.59,.26,0deg)}100%{left:80.4%;top:calc(100% + 100px);transform:scale(1.279) rotate3d(.38,.84,.22,-1054deg)}}snowfall snowflake:nth-child(33){animation:animation-snowflake-33 linear infinite;animation-duration:13.2s;animation-delay:-13.1s}@keyframes animation-snowflake-33{0%{left:21%;top:calc(0% - 100px);transform:scale(1.061) rotate3d(.17,.36,.93,0deg)}100%{left:55.6%;top:calc(100% + 100px);transform:scale(1.061) rotate3d(.43,.77,.22,1349deg)}}snowfall snowflake:nth-child(32){animation:animation-snowflake-32 linear infinite;animation-duration:15.2s;animation-delay:-9.1s}@keyframes animation-snowflake-32{0%{left:76%;top:calc(0% - 100px);transform:scale(.678) rotate3d(.13,.84,.29,0deg)}100%{left:85.9%;top:calc(100% + 100px);transform:scale(.678) rotate3d(.24,.97,.55,-928deg)}}snowfall snowflake:nth-child(31){animation:animation-snowflake-31 linear infinite;animation-duration:12.2s;animation-delay:-14.5s}@keyframes animation-snowflake-31{0%{left:66%;top:calc(0% - 100px);transform:scale(.976) rotate3d(.84,.11,.1,0deg)}100%{left:97.2%;top:calc(100% + 100px);transform:scale(.976) rotate3d(.19,.18,.09,-1195deg)}}snowfall snowflake:nth-child(30){animation:animation-snowflake-30 linear infinite;animation-duration:10.1s;animation-delay:-13.5s}@keyframes animation-snowflake-30{0%{left:22%;top:calc(0% - 100px);transform:scale(1.134) rotate3d(.7,.26,.81,0deg)}100%{left:41.8%;top:calc(100% + 100px);transform:scale(1.134) rotate3d(.96,.05,.37,-1222deg)}}snowfall snowflake:nth-child(29){animation:animation-snowflake-29 linear infinite;animation-duration:13.5s;animation-delay:-8.1s}@keyframes animation-snowflake-29{0%{left:31%;top:calc(0% - 100px);transform:scale(.791) rotate3d(.09,.54,.58,0deg)}100%{left:25.5%;top:calc(100% + 100px);transform:scale(.791) rotate3d(.72,.86,.33,-1293deg)}}snowfall snowflake:nth-child(28){animation:animation-snowflake-28 linear infinite;animation-duration:13.8s;animation-delay:-9.2s}@keyframes animation-snowflake-28{0%{left:69%;top:calc(0% - 100px);transform:scale(1.265) rotate3d(.41,.08,.53,0deg)}100%{left:75.6%;top:calc(100% + 100px);transform:scale(1.265) rotate3d(.59,.52,.07,-981deg)}}snowfall snowflake:nth-child(27){animation:animation-snowflake-27 linear infinite;animation-duration:8.2s;animation-delay:-11.8s}@keyframes animation-snowflake-27{0%{left:54%;top:calc(0% - 100px);transform:scale(1.083) rotate3d(.32,.88,.84,0deg)}100%{left:72.1%;top:calc(100% + 100px);transform:scale(1.083) rotate3d(.44,.8,.4,-1244deg)}}snowfall snowflake:nth-child(26){animation:animation-snowflake-26 linear infinite;animation-duration:15.5s;animation-delay:-8.2s}@keyframes animation-snowflake-26{0%{left:20%;top:calc(0% - 100px);transform:scale(1.265) rotate3d(.92,.26,.4,0deg)}100%{left:46.4%;top:calc(100% + 100px);transform:scale(1.265) rotate3d(.6,.22,.73,1384deg)}}snowfall snowflake:nth-child(25){animation:animation-snowflake-25 linear infinite;animation-duration:9.1s;animation-delay:-6.6s}@keyframes animation-snowflake-25{0%{left:55%;top:calc(0% - 100px);transform:scale(1.109) rotate3d(.99,.76,.88,0deg)}100%{left:83.1%;top:calc(100% + 100px);transform:scale(1.109) rotate3d(.39,.41,.09,-1253deg)}}snowfall snowflake:nth-child(24){animation:animation-snowflake-24 linear infinite;animation-duration:12.8s;animation-delay:-2.7s}@keyframes animation-snowflake-24{0%{left:48%;top:calc(0% - 100px);transform:scale(.679) rotate3d(.07,.53,.37,0deg)}100%{left:34.6%;top:calc(100% + 100px);transform:scale(.679) rotate3d(.64,.2,.67,1156deg)}}snowfall snowflake:nth-child(23){animation:animation-snowflake-23 linear infinite;animation-duration:9.9s;animation-delay:-12.9s}@keyframes animation-snowflake-23{0%{left:51%;top:calc(0% - 100px);transform:scale(1.306) rotate3d(.12,.01,.04,0deg)}100%{left:84.7%;top:calc(100% + 100px);transform:scale(1.306) rotate3d(.43,.98,.24,847deg)}}snowfall snowflake:nth-child(22){animation:animation-snowflake-22 linear infinite;animation-duration:11.3s;animation-delay:-8.7s}@keyframes animation-snowflake-22{0%{left:97%;top:calc(0% - 100px);transform:scale(.964) rotate3d(.23,.31,.39,0deg)}100%{left:81.2%;top:calc(100% + 100px);transform:scale(.964) rotate3d(.49,.82,.23,-1168deg)}}snowfall snowflake:nth-child(21){animation:animation-snowflake-21 linear infinite;animation-duration:8.2s;animation-delay:-13s}@keyframes animation-snowflake-21{0%{left:41%;top:calc(0% - 100px);transform:scale(.727) rotate3d(.43,.68,.27,0deg)}100%{left:34.9%;top:calc(100% + 100px);transform:scale(.727) rotate3d(.51,.21,.74,-1207deg)}}snowfall snowflake:nth-child(20){animation:animation-snowflake-20 linear infinite;animation-duration:10.9s;animation-delay:-12.1s}@keyframes animation-snowflake-20{0%{left:89%;top:calc(0% - 100px);transform:scale(1.054) rotate3d(.12,.28,.78,0deg)}100%{left:112.6%;top:calc(100% + 100px);transform:scale(1.054) rotate3d(.79,.98,.03,-935deg)}}snowfall snowflake:nth-child(19){animation:animation-snowflake-19 linear infinite;animation-duration:9.6s;animation-delay:-8.1s}@keyframes animation-snowflake-19{0%{left:8%;top:calc(0% - 100px);transform:scale(1.099) rotate3d(.5,.55,.33,0deg)}100%{left:33.4%;top:calc(100% + 100px);transform:scale(1.099) rotate3d(.03,.94,.22,-1355deg)}}snowfall snowflake:nth-child(18){animation:animation-snowflake-18 linear infinite;animation-duration:8.2s;animation-delay:-1.9s}@keyframes animation-snowflake-18{0%{left:76%;top:calc(0% - 100px);transform:scale(1.176) rotate3d(.85,.88,.1,0deg)}100%{left:115%;top:calc(100% + 100px);transform:scale(1.176) rotate3d(.28,1,.43,-1280deg)}}snowfall snowflake:nth-child(17){animation:animation-snowflake-17 linear infinite;animation-duration:12.7s;animation-delay:-11.8s}@keyframes animation-snowflake-17{0%{left:61%;top:calc(0% - 100px);transform:scale(1.167) rotate3d(.63,.55,.91,0deg)}100%{left:57%;top:calc(100% + 100px);transform:scale(1.167) rotate3d(.88,.94,.56,-730deg)}}snowfall snowflake:nth-child(16){animation:animation-snowflake-16 linear infinite;animation-duration:10.1s;animation-delay:-15.6s}@keyframes animation-snowflake-16{0%{left:81%;top:calc(0% - 100px);transform:scale(.679) rotate3d(.38,.57,.03,0deg)}100%{left:89.5%;top:calc(100% + 100px);transform:scale(.679) rotate3d(.88,.72,.54,-823deg)}}snowfall snowflake:nth-child(15){animation:animation-snowflake-15 linear infinite;animation-duration:13.5s;animation-delay:-7.8s}@keyframes animation-snowflake-15{0%{left:21%;top:calc(0% - 100px);transform:scale(1.258) rotate3d(.91,.74,.08,0deg)}100%{left:50.3%;top:calc(100% + 100px);transform:scale(1.258) rotate3d(.17,.45,.92,-1414deg)}}snowfall snowflake:nth-child(14){animation:animation-snowflake-14 linear infinite;animation-duration:15.8s;animation-delay:-1.1s}@keyframes animation-snowflake-14{0%{left:91%;top:calc(0% - 100px);transform:scale(1.206) rotate3d(.99,.51,.09,0deg)}100%{left:112.7%;top:calc(100% + 100px);transform:scale(1.206) rotate3d(1,.79,.88,-1104deg)}}snowfall snowflake:nth-child(13){animation:animation-snowflake-13 linear infinite;animation-duration:9.6s;animation-delay:-3.7s}@keyframes animation-snowflake-13{0%{left:35%;top:calc(0% - 100px);transform:scale(.83) rotate3d(.71,.4,.55,0deg)}100%{left:33.7%;top:calc(100% + 100px);transform:scale(.83) rotate3d(.32,.98,.05,-751deg)}}snowfall snowflake:nth-child(12){animation:animation-snowflake-12 linear infinite;animation-duration:14.9s;animation-delay:-12.7s}@keyframes animation-snowflake-12{0%{left:100%;top:calc(0% - 100px);transform:scale(.842) rotate3d(.24,.64,.95,0deg)}100%{left:102.6%;top:calc(100% + 100px);transform:scale(.842) rotate3d(.35,.75,.27,-1036deg)}}snowfall snowflake:nth-child(11){animation:animation-snowflake-11 linear infinite;animation-duration:9.6s;animation-delay:-10.1s}@keyframes animation-snowflake-11{0%{left:38%;top:calc(0% - 100px);transform:scale(.657) rotate3d(.96,.89,.08,0deg)}100%{left:26.2%;top:calc(100% + 100px);transform:scale(.657) rotate3d(.38,.17,.49,966deg)}}snowfall snowflake:nth-child(10){animation:animation-snowflake-10 linear infinite;animation-duration:11.6s;animation-delay:0s}@keyframes animation-snowflake-10{0%{left:7%;top:calc(0% - 100px);transform:scale(.853) rotate3d(.55,.12,.29,0deg)}100%{left:1.1%;top:calc(100% + 100px);transform:scale(.853) rotate3d(.89,.15,.88,-1051deg)}}snowfall snowflake:nth-child(9){animation:animation-snowflake-9 linear infinite;animation-duration:10.1s;animation-delay:-1.1s}@keyframes animation-snowflake-9{0%{left:27%;top:calc(0% - 100px);transform:scale(1.089) rotate3d(.53,.28,.7,0deg)}100%{left:35.9%;top:calc(100% + 100px);transform:scale(1.089) rotate3d(.2,.34,.61,839deg)}}snowfall snowflake:nth-child(8){animation:animation-snowflake-8 linear infinite;animation-duration:12.2s;animation-delay:-13.1s}@keyframes animation-snowflake-8{0%{left:100%;top:calc(0% - 100px);transform:scale(1.267) rotate3d(.12,.05,.67,0deg)}100%{left:80.2%;top:calc(100% + 100px);transform:scale(1.267) rotate3d(.83,.53,.26,1210deg)}}snowfall snowflake:nth-child(7){animation:animation-snowflake-7 linear infinite;animation-duration:14.4s;animation-delay:-8.3s}@keyframes animation-snowflake-7{0%{left:88%;top:calc(0% - 100px);transform:scale(.735) rotate3d(.19,.67,.92,0deg)}100%{left:99.9%;top:calc(100% + 100px);transform:scale(.735) rotate3d(.61,.2,.61,732deg)}}snowfall snowflake:nth-child(6){animation:animation-snowflake-6 linear infinite;animation-duration:10.1s;animation-delay:-1.6s}@keyframes animation-snowflake-6{0%{left:97%;top:calc(0% - 100px);transform:scale(.843) rotate3d(.91,.22,.24,0deg)}100%{left:77.6%;top:calc(100% + 100px);transform:scale(.843) rotate3d(.28,.42,.7,-1136deg)}}snowfall snowflake:nth-child(5){animation:animation-snowflake-5 linear infinite;animation-duration:15s;animation-delay:-15.8s}@keyframes animation-snowflake-5{0%{left:75%;top:calc(0% - 100px);transform:scale(1.273) rotate3d(.43,.12,.5,0deg)}100%{left:78.4%;top:calc(100% + 100px);transform:scale(1.273) rotate3d(.85,.92,.24,756deg)}}snowfall snowflake:nth-child(4){animation:animation-snowflake-4 linear infinite;animation-duration:8.9s;animation-delay:-8.3s}@keyframes animation-snowflake-4{0%{left:62%;top:calc(0% - 100px);transform:scale(.733) rotate3d(.59,.92,.35,0deg)}100%{left:99.9%;top:calc(100% + 100px);transform:scale(.733) rotate3d(.1,.92,.88,-1240deg)}}snowfall snowflake:nth-child(3){animation:animation-snowflake-3 linear infinite;animation-duration:11s;animation-delay:-14.6s}@keyframes animation-snowflake-3{0%{left:22%;top:calc(0% - 100px);transform:scale(.985) rotate3d(.07,.47,.03,0deg)}100%{left:5.5%;top:calc(100% + 100px);transform:scale(.985) rotate3d(.71,.56,.29,-1298deg)}}snowfall snowflake:nth-child(2){animation:animation-snowflake-2 linear infinite;animation-duration:14.3s;animation-delay:-7.3s}@keyframes animation-snowflake-2{0%{left:4%;top:calc(0% - 100px);transform:scale(.756) rotate3d(.09,.66,.96,0deg)}100%{left:40%;top:calc(100% + 100px);transform:scale(.756) rotate3d(.9,.7,.22,-1393deg)}}snowfall snowflake:nth-child(1){animation:animation-snowflake-1 linear infinite;animation-duration:12.4s;animation-delay:-14.9s}@keyframes animation-snowflake-1{0%{left:30%;top:calc(0% - 100px);transform:scale(.656) rotate3d(.08,.14,.22,0deg)}100%{left:53.2%;top:calc(100% + 100px);transform:scale(.656) rotate3d(.58,.99,.13,729deg)}} diff --git a/app/static/images/blank.png b/app/static/images/blank.png deleted file mode 100644 index ba1848fbf7932e6d0afdd17c9c8ff753cb693cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST~P>fl)d$B%&n3*T*V3KUXg?B|j-u zuOhbqD9^xPV_#8_n4FzjqL7rDo|$K>^nUk#C56lsTcvPQUjyF)=hTc$kE){7;3~h6 zMhJ1(0FE1&_nsU?XD6}dTi#a0!zN?>!XfNYSkzLEl1NlCV?QiN}Sf^&XR zs)DJWsh)w79hZVlQA(Oskc%5sGmvMilu=SrV5P5LUS6(OZmgGIl&)`RX=$l%V5Dzk zqzhD`TU?n}l31aeSF8*&0%C?sYH@N=Wa z+U*w$&37?qZFLn86;uvX%t#je$eJan{3C19Y3~z9AHQp2i9Q$>Adp)l`b#`RJA%7u z5r@)^NbOr07SDwg9na`&{`@w-yzOpeK}%3qR>)5W-`Q0KHVC`JxaM8J4;uXReB-NfdK3aJ>r6f{-7nk@8q z(eaceCvN@ye>+^+?n3;Edjbuw(oa{tXLxS*WSh?G*C#d=9S``)GW})JzgLPpbshUc zuiWB4u$A$7xU23aZt>X{KCNi|S`fENr2NR^4`p1v+!tz?OTAm?{e4&biD6;s&sEts zZnyhczK{CHI9W3N*WK0WZNQYtS>O>_%)r1c48n{Iv*t(u1vh%SIEGZrd3%tN5y)#& i_`g2S!vVw`q@YH!@EHT6PeTz4$bp`&elF{r5}E+P8!_?# diff --git a/app/static/images/chatmanager.png b/app/static/images/chatmanager.png deleted file mode 100644 index c8a49a376a787bbbf77c035b6991ea81a07b6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3426 zcmV-o4W06dP)h(Z+ zz?rz-|MT#MtJuri?tZ1!@b&t^)a$0f;$V@>aGcRqiO1aM^smR|`*2A9-PHcaw@ZS> z|LNoVZA1Rm%KK+M{D55jtd;$jdj8iJ;7o zrj7iAVEd7CxzFfZj?MqLr2WCLtj6UL=F6o301ReHL_t(|ob6i)ccMrTRuGIJDj74%X7%@fY zov<6RYSSbUa`RVq4Qrev5T+yV>@5jc+}D0Rn%(l>Q}ZoRgZnev{e@a{{NHjuDLWgU zO(;Esx>}vG1b?mdhlO;|tU(=FbNb{Z6V@ulE>u4@PSe9PP z9sx+pB)pH*A5GumWIwtu`E^vfv>wY(O5Entdz|Z~w{h9^pa~ZDLW}zV4j$t9dru%M z8Sdu^F?plJt=%V#Wx4JD7%zz#bOOBj7mCi|r?v9%upk3v{!ylr@8?^&O<@skO==_Wj zMQK90b8|vEjq`67?xRbHiA38^(n#T?PZsW@_Aw`RMd{J}PVDM$ank(*$P6Tv21y)) za+d|Ws!U1XeW7>#x=EqPM7)BHvedxk%^%~_bZM~(tFCKsW~VUiX@8-^Ym2eK53^gk=Caq ziOlcm&ubqJL7t-sv9(6saV&;Up#Q(=*8<+?)j`c_7}NDh`qJB#Lm8qNMu=)X0KEdQD?S z&)=9>%k0KvD_uTOq>;PZ%K9Y*@shNY+|Mc7V&VnFZoJL(oHC%Kuwo?wCtaU(0H%kD z+>!+^sl|P`c{*-U(q$nH{Jvb*tAR)igu)Fw^smDlVwp;&-wMJS#%w~8hZCYS`aE8YG**Eoi||z5cj}o)dK7lg(D*7}#d`G4`YTT_&yUN=8A-jp zGJH^^ssv`v2G&@48jp_+^cbG^ZMEs=)AYOy(l9NhT18*rZyG<5^8^Ibm8%5u5m&z) zwh^9_w#wn*A%ww#QbX*U`FxG)M)%#x=lPYkTFGM)$5bc|6^utO^3lX$uxA!a*GWi+*%o{TzaD+pVVI^#*Ob(P&_~(En|_UT?Qm z6_T@Q_Ikb5aN{_-zE~ItRt&>fEOckH>Y1Ixh7&82hric@v>u|U^#jiX(XfCXLJ+ua zzmL;1%KDJocwXfBtrI{W@>Nmx``)4RCO0A)IfP&}fGj9(OC@4#e|j3C(m$Al?AVIM zAddtun4T~19Pb4x$Qrs0XK>h0OeOx^bv_YA7;FqzyX5%cKRmKV-}S78(>vlG0G)hA z(9T7X3h+g9WBGebYzM7a171;N!@G`u2t#*mIi{Mi6*poBk*zCqQ2=&;`LAmXJ9c(Q*U)2*#6%XqzY$8Wj^eZ*!5Og_VgQBAFinb0c$mxhrbp`{Kpo8kH-fA@* zZUB(-J8HXb@3To1utXp^+UAP+L+x*qM4(s-j~F5dBS%1=@gn+^hkx<^6cOK|-rG^7 zd;V+BW@&nn0r0xpF=?{iAA}0Pk;wrG|wSmlxM_52A^C z?nke@h?R@3I>Yr zIZ>UJMq{mLMyEiQs2ZBA99O0Vr6h`DD1ENfgO)Qei{`rRmEpNQOlVq^LVOE)SDNPg zYd5eAeV93&$pf~Ea^BFvO~tUAi0WNvCx+?I&ZKa>9&qE7;8cJ2h8u3U;f4$#H0*X< zO4U)>6vke5028v`3O*B!3bpSdMKqkt6oRNHDQU6G%l}p{hYQx zE`+e^Z}%9^L_fFnkINu*Jn?XSei-64J6C6-=gMO1wCI!)Rr$Vc=L$(e`&^r=a#6&zF@G+K5#}gxx0tkwt$ZKmjD7NagJGvkFwCEno0D{mqSGr+&c(*1(X?hR!l@%@P@KyfItvMl@ zTDR?(KNb#Q=xQWa$ct;(x9u32bC^cYR}y1CcRBV)5ITs6X1oF@m{zj>Csy-XDovs7 zXoxlI**-Jfqdw~9*+5X80FF+}l)$vTR20p5FGPT-;)Nkz9%lOJMVdm1dR}is2#vbh zSsCkaYl@dMo{==PEe0hAdN1?2db`sb>W0^sVWGH%{*hfh;~5ETdTwzJ*ef-L=7nom zsfU9G&cbrneGPL?^i3j4Q*tmoJb1ViJ*~RSYVpL$_uy_ooio1_H?;A3aD8A7b>M7> zv%ticJ|;P*ffX#3?x%q;hgP({XXvnpY{Fn&Roj3%2K)qz%$;zR85WuKg$2zPO$IUs z4``(h3GRB4-=wEuI-Yi{Y*KhU%K<{=;zhs^0p1TxHkom!=)faHm??VtD$7lfJ;0o{ zFDjSSv!}s}eQVfhU!_GPz#irzfTO)+;d(z{qKMZY>U#o*U_&@|7K>b78M6ny4YqS+ z=9g|`qjONiaEJCFudkyzz=DdC7Zo`-P6V0D3kkwAB%g{Jx`KNjrv!0f@wy~4+Nt5xN-ppadTOMr5_x!Rz* zH~_b!!XoA57vm8V2^4YU<@d`x_VK~R2u>r7S%wqx;UMqv)1JB-6RwS@B&@6dSp)x2!anU zHkj9Zahis@F+vI@^3fs+*#|$JJR#KaVN`}y$RbBTjR0wIQs5o=VVhIIHG#A0z?*Z$ zcZ}*o3oZoNQTRGFU*-8^lo-hkd_;piAs4}*H?5RwXH zm5$mj@jx^NekX=Rtvdd>Q3k8I;f5P-xZ#EyZYT!-1DM$7Ra#Iw2uK&{gsxOU1p*PJND-wYAPOkGN~9M-x`6bq6e&?b5KxpZ z3euz(K|`;b1Pib}@4ox(?vL+=4EIdV%$+%B+L^o4yE6okt0|vV20$PH0AW7BP9NY0 zKz1(z0tgWiArTQN2{ADVDFxXf%!h)GoQfRtM|YH-21-MJl$(WtfrVRulY>(LCM*n7 zQB*NBbO-&X40h@O3L=mN$N~?<3VKrkK%E9=h-9|9&I!~+rSd;*Ae z@mt21&t5(Er!OftpXL2Oe7&!6gb4oWYig3f5G;H(BEZJ+RBNa*ZAnwT7>p7*S)^}T z#oNLkDjqpVpiQ*RH)qG6_mecd zG_oq6xa>HeDy193p z<)R@gR(6bpwm6OW&S97NNt$J-Qv1mq*FcMq#%j-ZoW0j(^yCaTD(3aCU{^o-m$Uz%m*6%t*ENeq;6BpgG4Ig(>2UKlmWew5ZdWzA>Drx*EQyULbd6TCnniorCPl zQ{spH%eAp;gMZA3x5muK-n1^d>ySJ!;_hQ?$4F}Pd#fH)zjta(C~dX6U9NX=vAsgh z1Z_X5k6Rr2VB2zwDMnPBXL!$RWX{L|0R73~;<{q2pJ1mJk7GQF z@Z9oGGrD5nhe6E1?OQ_?)2dD~d>N-Zg|R7s{&~^B{h1jXlF6DCvz`{5gjJt z><>o(2p@t+0LDclFgaGg|KUZu1F*zVLGnQL?*O2-l0kY1Agz9c9aLBC8Prx%gy6pb z-Cp=7Q9Lm^&|<p^g!W27aT4RO2zlWlP3lU zyeKihu>*7*9IAjQm1cZ6V0GEJ6gZ@wBrgxj;rGi1L`fl7qzN2@1ZMzr(MVN51PBK# zFznjEzc`V~tCNG5gn4okz!a9fN1xqWW{k4u$N>--3?U#SBf=-Z!|DtI;{o{O6fDAy5CX-t zl3_~L|Zxjj32+rI>qxU zY0zSp`kB)>L_ex}j?pLfWa5iFN@w@`CXVm3MuYZa!ZEZ>NcXLr9Q-_>$Vp>WgBG#O02b z<9{azE2#PbdoS?^=v(-E!BSt=1NEhKsn{w(Y_b zbuVp1wTw9Z4R7f-5GdiPb`S1_jOdrHQ2UuN-PZRFbKcV4=`(gepcoCQNiK3tnr9{# z#U;c=r(C$Y7tSY>Hsu8x@u2KH1Z;>$4>9XI{eZ>A`iFFMn}>A`5#LTn$ajc3zuW^~ zyDeN%GLT$Dpl^P=YplUyvEG-u3(x!e^jf8%G)StZi;!eUf`~lSUifNk@&)(xt^BLD zL2uf<;H?{%8vCeX(}Bkc%OxS@oC3-qb@92Y^fni+1cM*k_|z!Yn^=1c!Z%nJY+C`l zbBg5hbL(S$rjCoo)K5Hm1k3*>JKJ~v%r5N)|7f$2LKLey^Oy=(9lF^M{2(JybEBnB z45F~sRnY?-;y!;CoLbvH##5{5;od%WeCwQtdt2fJ{9=sDu@ROn3@UO5=#2VC=4w{7 zIJ&98beVSxCP!ZXu`4SYI>e$AF8gd7ON}A>@vkj-LhmPa+kk5+oO~A9A?d{@kVx*R_%R~f2ULf$VcG5giBZhRsKtKnRsAN!my z30%AJvG?k0Kfw>_XrhGx$wd!~T}VZCYjU%F_+P_1Y1YtM=6G;NQEss(p5g;Ud=v`= zTG8R}(H=4JIO|$;W^4<|7z-MCz~7%8@OP@t{LwXYW~XnQaqbgeDWoJfH>O?3E^2f$ z5;NNej?>3#5L;~$4w!6aY?S#if!z}qbac+LN6n?WlXI|>TLlQ+pVOgsv0SdFI`o#) z&v!L6f-)+s2^H9D1hL!!d?ZgZvNWD=;Txm9IB3(|_SEUI4h$1a_ISSIfnXwhpX*_B zw}`*zuvv7NRnZ!3 zy;1lscVd!k_+!su7eCnMdx}T<1K6d#zO{S*U-7W3T-W3XqvD*z;gLR+)>G1Fg0t83 zU#7ZpeX_{qL1vF23lK^=2wKsRzG3|Dx(%C?&90hn&DIbF#g92yd1TnLHeURXLe}g) zN5wZMX)%MRY$f8YfeeUlU9*#T(vfB2VP{D`fU$R;HwBE>C7IeYG+LZN)9okW&Yu$HczqAsp5o zx03Rd>FSNN<_ZJx+XED(!gkZvbSC>FjcxP(JjEtMNyW=WsK0Scx>0sD7nwbUOv{zz zbL!0{6JMgQV-qgq{FcVBKfxU^czpA~M`|1Bbz?LgPte;h%^d;-{wodq44e2q1Wn(o zIhJm0>+Aq7w0)7y>qSQz*p>x(V}%TciR~;P$!3L5;|=um&h!-J`bByIyng0(7qo*k z?zn;FNx11jk1<;tEM0!@)-`+|c(~Hluk81B8ES0}(|(MMcByY(j>apFi*AXe>W8Dx z!k?{5n;0!v`KmixU}RUN{HQP>et3WWJs4JmTUmu7y>2}(@qKGC6<$xT*^2^y=VRL?|!6;Ut z(hQy{l|*vc0xFch_*a9iQ=dl!Nq7V22OG0vTRG%T)(M(-cK=dzGEN=FZyPD0 z!Og9@d|09>IQIKfq>6&KO37>NR?@SHea$S%q}`w4`}Y+L$`0$oOz36bw^!%WcO?^z zHveeLUncgQ92OZvPIwL$U3x!=+W_cnagl@57z=fFR{FO|q z_e;?(UD;DXg9?~E@rbkgcFbR3@Og+9cM`2=(B zWp}MqgC9j-cTCt?`Z9ZlP)PB5kBUJ&RBWBd^;K7NvQsASqvzQJxX={zFGJI%m6WpJ zC%e9t@WLfoHDVj#kxupOq?&sf$2gVInHM01Ph=X+)ludQCgvgd)Y(p<_KMfH;V@-Y z=Z1@DMGlX_%68b~O^>nG@a``zyYdUf^STFISs0QUp{%O@D0j)@RB$Ualws>?@8F6c zYq+D6H>rYwIH6Gg7m>w!toI~1YhUU-7=#ZL+_b}!aMb2@+@zd8%zEzf4&ZiG9Q8VK z6N)j1&+H7b*Byw*#9Vmmie|5hWw}vtvyzCi4i9v%rsP^AEpk71oR|ujr?>~lnS#{p z8ngZ2R4HrqQxl4ZuUBmzg;X9m7#yhLDUzA|x#!hfFAT!dC%!hxK;2&3C_`LgGJF9hiO<}nL4+PZ@o#$q^r3> zo@u&;3B3g+QCnb@t!mHA=76t#bz;iq%)_MtV#E8h`N89evdbOnqUUm%M+DOa}BiEI9DdggqP-Ky>j!WaZ1(mIRhdQ(b*!5eK5iqU{Q`a>fdn^}Wd z&b894jS1pw2Hl`?CL8HD1ys6+IM}z3XWtNh5KDP(VaNv-Zq4E;Q5bkr#@e+ZXo&JL zRim#FGdk$DFPTu2s2?jAAyICFL;Io66@JRsQ-({!YU~bVqyJu1aNBo~5iT^A;pD+H zpi7=8MBNjsoFx_QY*)ZqQGC%#rnw59zg{QUhL5Hm0sZcR_<(TJG}9CbFDTbki}m>MPo4wL}$ zj0FV}X<5sgbOvcTH}7w^CqC2W)M$BA!7DgO6Dy%M$}I!+j3W{pSwm&5-}~k^p`Fjx z(3y0xIPB^W*$ z001$IboB~CO+N#}&C(2m9)|m0VZqPnUeRT8E!ACD92{2^sAf8=N0UO`>W~rYr1Idq zZ1#4(>kZcF8`G~bgG}szWAA|N#{f6&=Kwct9}Vkt*lz|urZM5B?Hl}{xw4nR?z98k zaN_)A@PqYozToFD4v{xpFdmy|7S1HWi3Ii?AmhA;nSxA@5Ltg6d^4k~^t?iVye4yq zX8r8j(!SZMSULw*RXtU1mPH>fTr1!irWK&|Sq6t zbO+Gm!X~8(T(^qx!}Gd1&l+pfoXOO7LxRsvi|&G{*- zE%5$j{1J}Q#lB_dsFy~5mNmLyqU&9v{UAnc}8Q^!b?`Y$Xp-2ORiEG$r}w5fpvaR z-9)%Wj0Z~InPNs3MIP->hxM@>HAC^BE}?Z3Yi(j*>AqpILdO8JM+9Vl|ORU z4dGVui$uC@Lc@^l8{)f4Jm1tzhAhvvs*z*xgpHSB#42*_YU>rpr4A#g5ua<`yDR1D zBfMkY{duq;K#BuH@)}3t!GlsoD<#P|g*E6lGg&;zDhyxETVr)^5l$)v-B!Vngo(Po z>1lRT!aTMJcITtOy`l$%j``#4z-(*-Mm~$1S%nc8`Pf=%oR&J|phoP!bo5{0dUv~3 zX$ngs-8~_ozx&vlu^BVeanvQomM3x1p&PqM28{RzWWg~;t{pdecEVtO>fGpJ-g&2- z(ky7PvQlJZ6HLsAv$)4lYwZB>j#YlY^NvMRE=G`toc>qC7y6`YZMOY|yavq}`9|g75V zx0ky<{!7Fulwpkv^@D3Lrf9`p4?AW3&9XVuzc&!9(jWeP!GE6nsuteTgP tL-gvdOv{{LdkK&2%30!ZS2KcV?cSsuyfHX=V%Ao_+%tk453^z){{alm(whJP diff --git a/app/static/images/snowflake.png b/app/static/images/snowflake.png new file mode 100644 index 0000000000000000000000000000000000000000..3dcae34abcd0ce6d2b223ad34ad94b94511bab20 GIT binary patch literal 2819 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 + thematdev + + {% for snowflake in snowfall %} + {{snowflake|safe}} + {% endfor %} +
+

С Новым Годом!

thematdev

-

Тут можно подпись какую-то сделать

-

Ваш IQ: {{ random_number }}

-
-
-

Мои проекты Кладбище

-
- {% for project in projects %} -
-

{{ project.title }}

- -

{{project.description|safe}}

-
- {% endfor %} -
-
-
- - Идея про Гауссово распределение вместо обычного рандома: Prentor и pavel_the_best