From 433481e30e2dc2e15ecb45939614a912c84bb237 Mon Sep 17 00:00:00 2001 From: Amir Date: Wed, 11 Sep 2024 23:05:33 +0200 Subject: [PATCH] added colors --- about/__pycache__/models.cpython-310.pyc | Bin 994 -> 1078 bytes about/models.py | 14 +- contact/__pycache__/models.cpython-310.pyc | Bin 1605 -> 1689 bytes contact/models.py | 14 +- db.sqlite3 | Bin 1101824 -> 1187840 bytes home/__pycache__/models.cpython-310.pyc | Bin 1524 -> 1626 bytes .../__pycache__/wagtail_hooks.cpython-310.pyc | Bin 0 -> 1718 bytes home/models.py | 31 +-- home/wagtail_hooks.py | 72 +++++++ .../__pycache__/custom_editor.cpython-310.pyc | Bin 0 -> 264 bytes saburly/custom_editor.py | 8 + .../settings/__pycache__/dev.cpython-310.pyc | Bin 372 -> 503 bytes saburly/settings/dev.py | 5 + saburly/settings/production.py | 4 + services/__pycache__/models.cpython-310.pyc | Bin 2014 -> 2140 bytes services/models.py | 56 +++--- static/css/saburly.css | 0 static/css/saburly.d41d8cd98f00.css | 0 static/css/welcome_page.85e6f9d19e42.css | 184 ++++++++++++++++++ static/css/welcome_page.css | 184 ++++++++++++++++++ templates/footer.html | 6 +- 21 files changed, 521 insertions(+), 57 deletions(-) create mode 100644 home/__pycache__/wagtail_hooks.cpython-310.pyc create mode 100644 home/wagtail_hooks.py create mode 100644 saburly/__pycache__/custom_editor.cpython-310.pyc create mode 100644 saburly/custom_editor.py create mode 100644 static/css/saburly.css create mode 100644 static/css/saburly.d41d8cd98f00.css create mode 100644 static/css/welcome_page.85e6f9d19e42.css create mode 100644 static/css/welcome_page.css diff --git a/about/__pycache__/models.cpython-310.pyc b/about/__pycache__/models.cpython-310.pyc index b7c187ad3890a96adc875bc1f024055e6952803d..6dcc38814c9cb5b3c16163f81fe228c8dfb4f946 100644 GIT binary patch delta 483 zcmYk1&q~8U5Qld+O|xk>NztmbAVR@I6p9ZZiuezqsA%;Nk(xT&qHPT%&B2ogd+j0Q z2?X)zu}|R>=V z;;K0>=3L7;&AFcQ5;qz8QMrJH)6dO!PkE|e< zfhBgaQ+==FN27DE$6F3b)y}|s>Zi2Jy-^hKFqz^HY$vy5V~vXS0w!TglqD7<79}dl z8(A+_rB;(KvQ^WC8sdcw0g4!5SX{|uS*dHXeCk-quF}6wmqM=-1%v0teH4!TVVlFl l$Pa>9qHGN2b2F<6OX>E|hiJfeu=s_R0Fx;qp)7JLxSnTUH;1j-qQiFYbmNSG58{b{(B302 zB9K=k58Bu3_BVTY!?-2|1yV50fdX65qUX$W<~tM4q_aSWw~>yu0uDX!77WdICYDxm zkPzU^=EDE8fel737`vdd!IGr}-<#ljSGwS2Ts8NXqf!rZ+Ii#YXf`oF^qnT=h3#hc z-EQF;3oDq_ty^Y-pwg z+|`3omrk9sX6evunetC)3F-e)=zCUib;tYid3R6mE8gA8?~Xfm9Gl^~OYR3h%!Rwo zzb#rp2N+nx@~GlhI6GjF2m31nTiG+suVP*RiMdpH%xmDhXH9o;eN}Aoq_F?t@UXYH z`>Ol)T|D47xdt{58*xi?9=eD{j7XwbOmM+<4Es;$#$Uvv^WS)^n9qUvLTSL24q`5R zBg452n;Et;oX@bW3ZJBMlnWZ@V9W(lZbfEFfd&@j=jUQsXs@mdE0U{12MdKNf(u3P zkR0V<%Mz6THLs);h#AN8>Wl{hYV=K@uQ6Xj9cQ%`(iFN)kr+qA{^{q$8mRtcs)Z_w zFSJYU#hd!a7p1U*RbiE+Mq-gTBH1Bx9=|qz^^;oEKbnTav-a^cnv6$11t*hnm|D{tE}Nyj|67quVr`Gc YFdeFw9J7diU6K`U5A7Og=xJ5+FZ5!6t^fc4 delta 572 zcmY+BF-yZh6vyu_Ns}g*G`7)*sHmV&L=guk5mC|2ML`HSs4oVzT1e^SP)Z$KI+RR) z09V1u(M7+4Lnl|kuORqdA}8MQ{`}s(d;i>B?%g-(HC@+cIBwb>=U=6PH_7h?i^;+s z0}INx49clpTT zN~>oW|AvFvCPwQWC1w!^7KvB`4x-N^U6G-vq{vicDeB;PFPvD$E@+^G(HBT1MP@;X zMz_Nn?Xy+YQ6$wqH{a)h2Nm%1jtcgSK=s$VR!|~(9M^;S9!~^}Qd6RbEOKBBA1X{e zyxw7*4~^5t$@OLSq&@ITcBCJ#_-PeOX^kWxu}CIJrbwnqW=Lj9=CV(HX}NfB%5xeg zqA!p^YYW9XWwSLuvb|c>4WJkx7ObVJl LmwcT2T44SFyGv)c diff --git a/contact/models.py b/contact/models.py index 56b69c2a..44483672 100644 --- a/contact/models.py +++ b/contact/models.py @@ -9,6 +9,8 @@ from wagtail.contrib.forms.models import AbstractEmailForm, AbstractFormField from wagtail.fields import RichTextField from wagtail.admin.panels import FieldPanel, FieldRowPanel,InlinePanel, MultiFieldPanel +from saburly.custom_editor import FULL_EDITOR + class FormField(AbstractFormField): page = ParentalKey( @@ -19,13 +21,13 @@ class FormField(AbstractFormField): class ContactPage(AbstractEmailForm): - section_one_title = RichTextField(blank=True) - section_one_text = RichTextField(blank=True) - section_one_img = RichTextField(blank=True) + section_one_title = RichTextField(blank=True, features=FULL_EDITOR) + section_one_text = RichTextField(blank=True, features=FULL_EDITOR) + section_one_img = RichTextField(blank=True, features=FULL_EDITOR) - section_two_title = RichTextField(blank=True) - section_two_text = RichTextField(blank=True) - section_two_img = RichTextField(blank=True) + section_two_title = RichTextField(blank=True, features=FULL_EDITOR) + section_two_text = RichTextField(blank=True, features=FULL_EDITOR) + section_two_img = RichTextField(blank=True, features=FULL_EDITOR) content_panels = AbstractEmailForm.content_panels + [ MultiFieldPanel([ diff --git a/db.sqlite3 b/db.sqlite3 index 14a27fb6208a1b3b6716dd664ef8b6123f945e9a..0942cf75218daeb4785ec09b743dbfdaca1fafb0 100644 GIT binary patch delta 19057 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 Fe*t1-$P)kn diff --git a/home/__pycache__/models.cpython-310.pyc b/home/__pycache__/models.cpython-310.pyc index 3fcd352e4372ff5c77e4dbe253a88fc4f3821c76..b7c75be0843b76d5f821032612f1bfdd61325b31 100644 GIT binary patch delta 728 zcmZwF%SyvQ6b9g#G?!^IO{4bWbyIOs72OGfxbY6fyDs8Ft7k0sVjyWjS6wK$>Z0Ze z#7FRDBpdM^T#GYWhFO@9!w2Uden|4=B-9Nu85{BI<^A(IwEONPzUa@bl>mX+bXwG> z7;Pc2fIK1~%y>xo8Au}4=Em2Ji>DIJS(swq(BFwr*WB5)}LxA zAdu!ek+bF20lhmoLS>M@u0hb1!K{=gb3-yWEVm<4Iho7LTtRM&Qp=+H}xfR zQgAB1(`U?*U@3mp7w6NQ4u7IL9|Td2Vt)TW<8QrUi37W3H$E^Lr%67lUUtIf{lZlz sY6q=z1~=^>41fDYF#Kzhn&wK#N-Ka)ldbY!4Mi>=RP^#rk2mMEA3PkMAOHXW delta 611 zcmZwFJxjwt7zgmXyu zNbAu|Jm8n4T}W3~>AF6@r-Vq7P#}pRO`u>bX~Iwz%0@XTjw+yBl!p>19~FFQt{+## zlOd{vD$B|slCi9U2@I^Ip=6_+Z}m;!P*5}7b8+gS1onLF1;DOy}RM_t1+jvmYuTASbw~!uOrYA z>L_Ikwwt}Mmfh6bX7>>@kbITo81;lDT1Xfpd6ZQ1#LwIi0&2y66%5F6j)hKW|COzk1#VS zY~-BU1OEeCY0Itu5t4eGDF|v&lvpVmAf)#=!KsZcWTnJN$4J*mZ{QmrJ87iNK{IU)TF7GPB%tI8 zq7HQ*Sr5^mU28n*8%>AeeXG~_1Kwu!kaDJZekktuusXM!3VPCWgn>vO4v-KEL7p$bPPAuvbwnQhmfcl=;$O4^Beei5( zPuhHJOH$YmQH*E{v;l3?PMHHV8^<`-mhLguvEK*Of-Y>{@7anZY%G;Kf~uilhsTqt zROl;(_7wVh;oeQ+Nwy7sP7)1SqKG`2G1a0_B#&n@&NJmx9*t!bCn^}_kR_8sMv^Tq z(D=c(LbvYY%ep<+BAx5b_A`9>KsAQC-C-Kdlns8$F^-F1-SH__9xDf;oEgt&0yO8x zJWoR!$!Hh}7LIeCMpA9b{6$^QQLolBVl$K z9x!gkJO?5)u8`PYOsc`pz^@*-n(keCHk$ zhcch-h-f(H$x&(fA)4rhhKA1m>`1*{f6zvR8Regrg7GGCLtX4_5X}Hlctx-U!4*IwW(pPS*C5K dWBx~JPT@FzqW{xEBM?|uQ5X5RiTt-a=wA~8=|2Df literal 0 HcmV?d00001 diff --git a/home/models.py b/home/models.py index c8c87ff7..573288f3 100644 --- a/home/models.py +++ b/home/models.py @@ -6,28 +6,29 @@ from wagtail.models import Page from wagtail.fields import RichTextField from wagtail.admin.panels import FieldPanel, MultiFieldPanel +from saburly.custom_editor import FULL_EDITOR class HomePage(Page): - section_one_title = RichTextField(blank=True) - section_one_text = RichTextField(blank=True) - section_one_img = RichTextField(blank=True) + section_one_title = RichTextField(blank=True, features=FULL_EDITOR) + section_one_text = RichTextField(blank=True, features=FULL_EDITOR) + section_one_img = RichTextField(blank=True, features=FULL_EDITOR) - section_two_title = RichTextField(blank=True) - section_two_text = RichTextField(blank=True) - section_two_img = RichTextField(blank=True) + section_two_title = RichTextField(blank=True, features=FULL_EDITOR) + section_two_text = RichTextField(blank=True, features=FULL_EDITOR) + section_two_img = RichTextField(blank=True, features=FULL_EDITOR) - section_three_title = RichTextField(blank=True) - section_three_text = RichTextField(blank=True) - section_three_img = RichTextField(blank=True) + section_three_title = RichTextField(blank=True, features=FULL_EDITOR) + section_three_text = RichTextField(blank=True, features=FULL_EDITOR) + section_three_img = RichTextField(blank=True, features=FULL_EDITOR) - section_four_title = RichTextField(blank=True) - section_four_text = RichTextField(blank=True) - section_four_img = RichTextField(blank=True) + section_four_title = RichTextField(blank=True, features=FULL_EDITOR) + section_four_text = RichTextField(blank=True, features=FULL_EDITOR) + section_four_img = RichTextField(blank=True, features=FULL_EDITOR) - section_five_title = RichTextField(blank=True) - section_five_text = RichTextField(blank=True) - section_five_img = RichTextField(blank=True) + section_five_title = RichTextField(blank=True, features=FULL_EDITOR) + section_five_text = RichTextField(blank=True, features=FULL_EDITOR) + section_five_img = RichTextField(blank=True, features=FULL_EDITOR) content_panels = Page.content_panels + [ MultiFieldPanel([ diff --git a/home/wagtail_hooks.py b/home/wagtail_hooks.py new file mode 100644 index 00000000..c35f51a2 --- /dev/null +++ b/home/wagtail_hooks.py @@ -0,0 +1,72 @@ +from wagtail import hooks +import wagtail.admin.rich_text.editors.draftail.features as draftail_features +from wagtail.admin.rich_text.converters.html_to_contentstate import BlockElementHandler, InlineStyleElementHandler + +@hooks.register('register_rich_text_features') +def register_alignment_feature(features): + alignment_features = ['left', 'center', 'right'] + labels = { + 'left': 'L', + 'center': 'C', + 'right': 'R' + } + + for feature in alignment_features: + control = { + 'label': labels[feature], + 'type': feature, + 'description': f'Align {feature}', + } + features.register_editor_plugin( + 'draftail', feature, draftail_features.BlockFeature(control) + ) + features.register_converter_rule( + 'contentstate', feature, { + 'from_database_format': { + f'div[style="text-align: {feature}"]': BlockElementHandler(feature) + }, + 'to_database_format': { + 'block_map': { + feature: { + 'element': 'div', + 'props': {'style': f'text-align: {feature}'} + } + } + } + } + ) + +@hooks.register('register_rich_text_features') +def register_color_feature(features): + colors = [ + ('black', '#000000', 'CB'), + ('saburly-blue', '#5763AB', 'CS') + ] + + for feature_name, color_code, label in colors: + control = { + 'type': feature_name, + 'label': label, + 'description': f'Text color: {feature_name}', + 'style': {'color': color_code}, + } + + features.register_editor_plugin( + 'draftail', + feature_name, + draftail_features.InlineStyleFeature(control), + ) + + features.register_converter_rule('contentstate', feature_name, { + 'from_database_format': { + f'span[style="color: {color_code}"]': InlineStyleElementHandler(feature_name), + }, + 'to_database_format': { + 'style_map': { + feature_name: { + 'element': 'span', + 'props': {'style': f'color: {color_code}'} + } + } + } + }) diff --git a/saburly/__pycache__/custom_editor.cpython-310.pyc b/saburly/__pycache__/custom_editor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f67d935afa1a89aa860fe0a21ba62fb54dce32b GIT binary patch literal 264 zcmYk1O-chn5QS@+Oc0%b9%B|dV6qf(5d|SA__J{nx~D5M&2*=Jg)7T_w zO-rIbWv0xGgtsIz(+4WiDbzHwW<5}8oa~TFWo0`&S5c}Q?DkmMjNE~%MB^6M33)7- zu1`00K?hfli^cMCe*JKJ_XgpJPx-O0Y14a$jdUh7bBsgso91`pUu|um9y|An}Fu!3(Wu~4G` literal 0 HcmV?d00001 diff --git a/saburly/custom_editor.py b/saburly/custom_editor.py new file mode 100644 index 00000000..f4548405 --- /dev/null +++ b/saburly/custom_editor.py @@ -0,0 +1,8 @@ +FULL_EDITOR = [ + 'bold', 'italic', 'h2', 'h3', 'h4', + 'ol', 'ul', + 'hr', + 'embed', 'link', 'image', + 'black', 'saburly-blue', + 'left', 'center', 'right' +] diff --git a/saburly/settings/__pycache__/dev.cpython-310.pyc b/saburly/settings/__pycache__/dev.cpython-310.pyc index a8d6ee29dc3c2199f4bf3c2e4d9fc83186ae8ea4..525fd953aa3909d938a65aba0b1f2c3359d7b7ca 100644 GIT binary patch delta 248 zcmeyu^qpBdpO=@50SFZKK1`EhVqka-;vfSSAjbiSiybCv%W9;uX0a_`PvuBqTga5o z7{!^w9>oP0<5kJ0izUid1}(+O^o_{AcHv=SeRLu*_b()0HVkflK=n! diff --git a/saburly/settings/dev.py b/saburly/settings/dev.py index 51693023..6ff40d9c 100644 --- a/saburly/settings/dev.py +++ b/saburly/settings/dev.py @@ -11,4 +11,9 @@ ALLOWED_HOSTS = ["*"] EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, 'static'), +] +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') diff --git a/saburly/settings/production.py b/saburly/settings/production.py index a61ffc34..2b408941 100644 --- a/saburly/settings/production.py +++ b/saburly/settings/production.py @@ -18,6 +18,10 @@ DATABASES = { } } +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, 'static'), +] + STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') diff --git a/services/__pycache__/models.cpython-310.pyc b/services/__pycache__/models.cpython-310.pyc index cfcfd521e950cf535c4d674c21776e4f4bfc589e..a86ed6e64517c33a112ed665ed81747aa81668e7 100644 GIT binary patch delta 923 zcmY+C%TC)s6ozNU_!7rAAR#1#O9BL?1yreh#m} z;fp3G+=z;OCv+%zMYzeW8^SGNPqfhGg=5mTr#Bz{HqDAJ-ya-w_V-?&ygi!!sg0j7 zLIepZCm|CWr(%Y)TNdib4dfJ$XCVMWkWQ@I@cytat5eRXiwt?H*Xna7E}w9v07q7 zSjF^EJvS(CC*x;M;V6`&mSj1m0&O~z9?TM2%%k?pVjUiw{+jh51_v}J4>+e)|7cgEwrf>d?ZldlpMaVXpxkRiXXD5~oJPx`}% zOx5U3+e@FCS0A!+(mfr;(e>`xC>aj=9lUIDNr-961xM^!pU9$ delta 799 zcmY+CJxjwt7{~7}=B3FsX=`6>ZSAXK>*(SjE(&fU*eN1Xy|ZYmg;X6}I@C!JEE(PW z0wR7Dry}C#a5DEO51Mel{O)__|`KjW`3;$F!@d zA9~NAvmlKDZRi~AIHYl)3!R5u0@6_u9w{hiu}njn0cN4gVK)b99#{a*1B<{CZ~<5b zR)AGt4Oov>qZa++q}G1sVx diff --git a/services/models.py b/services/models.py index 522cac2d..3f524a14 100644 --- a/services/models.py +++ b/services/models.py @@ -5,48 +5,50 @@ from wagtail.fields import RichTextField from wagtail.admin.panels import FieldPanel, MultiFieldPanel from wagtail.models import Page +from saburly.custom_editor import FULL_EDITOR + class ServicesPage(Page): - section_one_title = RichTextField(blank=True) - section_one_text = RichTextField(blank=True) - section_one_img = RichTextField(blank=True) + section_one_title = RichTextField(blank=True, features=FULL_EDITOR) + section_one_text = RichTextField(blank=True, features=FULL_EDITOR) + section_one_img = RichTextField(blank=True, features=FULL_EDITOR) - section_two_title = RichTextField(blank=True) - section_two_text = RichTextField(blank=True) - section_two_img = RichTextField(blank=True) + section_two_title = RichTextField(blank=True, features=FULL_EDITOR) + section_two_text = RichTextField(blank=True, features=FULL_EDITOR) + section_two_img = RichTextField(blank=True, features=FULL_EDITOR) - section_three_title = RichTextField(blank=True) - section_three_text = RichTextField(blank=True) - section_three_img = RichTextField(blank=True) + section_three_title = RichTextField(blank=True, features=FULL_EDITOR) + section_three_text = RichTextField(blank=True, features=FULL_EDITOR) + section_three_img = RichTextField(blank=True, features=FULL_EDITOR) - section_four_title = RichTextField(blank=True) - section_four_text = RichTextField(blank=True) - section_four_img = RichTextField(blank=True) + section_four_title = RichTextField(blank=True, features=FULL_EDITOR) + section_four_text = RichTextField(blank=True, features=FULL_EDITOR) + section_four_img = RichTextField(blank=True, features=FULL_EDITOR) - section_five_title = RichTextField(blank=True) - section_five_text = RichTextField(blank=True) - section_five_img = RichTextField(blank=True) + section_five_title = RichTextField(blank=True, features=FULL_EDITOR) + section_five_text = RichTextField(blank=True, features=FULL_EDITOR) + section_five_img = RichTextField(blank=True, features=FULL_EDITOR) - sub_section_one = RichTextField(blank=True) - sub_section_one_img = RichTextField(blank=True) + sub_section_one = RichTextField(blank=True, features=FULL_EDITOR) + sub_section_one_img = RichTextField(blank=True, features=FULL_EDITOR) - sub_section_two = RichTextField(blank=True) - sub_section_two_img = RichTextField(blank=True) + sub_section_two = RichTextField(blank=True, features=FULL_EDITOR) + sub_section_two_img = RichTextField(blank=True, features=FULL_EDITOR) - sub_section_three = RichTextField(blank=True) - sub_section_three_img = RichTextField(blank=True) + sub_section_three = RichTextField(blank=True, features=FULL_EDITOR) + sub_section_three_img = RichTextField(blank=True, features=FULL_EDITOR) - sub_section_four = RichTextField(blank=True) - sub_section_four_img = RichTextField(blank=True) + sub_section_four = RichTextField(blank=True, features=FULL_EDITOR) + sub_section_four_img = RichTextField(blank=True, features=FULL_EDITOR) - sub_section_five = RichTextField(blank=True) - sub_section_five_img = RichTextField(blank=True) + sub_section_five = RichTextField(blank=True, features=FULL_EDITOR) + sub_section_five_img = RichTextField(blank=True, features=FULL_EDITOR) - sub_section_six = RichTextField(blank=True) - sub_section_six_img = RichTextField(blank=True) + sub_section_six = RichTextField(blank=True, features=FULL_EDITOR) + sub_section_six_img = RichTextField(blank=True, features=FULL_EDITOR) diff --git a/static/css/saburly.css b/static/css/saburly.css new file mode 100644 index 00000000..e69de29b diff --git a/static/css/saburly.d41d8cd98f00.css b/static/css/saburly.d41d8cd98f00.css new file mode 100644 index 00000000..e69de29b diff --git a/static/css/welcome_page.85e6f9d19e42.css b/static/css/welcome_page.85e6f9d19e42.css new file mode 100644 index 00000000..bad29334 --- /dev/null +++ b/static/css/welcome_page.85e6f9d19e42.css @@ -0,0 +1,184 @@ +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + max-width: 960px; + min-height: 100vh; + margin: 0 auto; + padding: 0 15px; + color: #231f20; + font-family: 'Helvetica Neue', 'Segoe UI', Arial, sans-serif; + line-height: 1.25; +} + +a { + background-color: transparent; + color: #308282; + text-decoration: underline; +} + +a:hover { + color: #ea1b10; +} + +h1, +h2, +h3, +h4, +h5, +p, +ul { + padding: 0; + margin: 0; + font-weight: 400; +} + +svg:not(:root) { + overflow: hidden; +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; + padding-top: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #e6e6e6; +} + +.logo { + width: 150px; + margin-inline-end: 20px; +} + +.logo a { + display: block; +} + +.figure-logo { + max-width: 150px; + max-height: 55.1px; +} + +.release-notes { + font-size: 14px; +} + +.main { + padding: 40px 0; + margin: 0 auto; + text-align: center; +} + +.figure-space { + max-width: 265px; +} + +@keyframes pos { + 0%, 100% { + transform: rotate(-6deg); + } + 50% { + transform: rotate(6deg); + } +} + +.egg { + fill: #43b1b0; + animation: pos 3s ease infinite; + transform: translateY(50px); + transform-origin: 50% 80%; +} + +.main-text { + max-width: 400px; + margin: 5px auto; +} + +.main-text h1 { + font-size: 22px; +} + +.main-text p { + margin: 15px auto 0; +} + +.footer { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border-top: 1px solid #e6e6e6; + padding: 10px; +} + +.option { + display: block; + padding: 10px 10px 10px 34px; + position: relative; + text-decoration: none; +} + +.option svg { + width: 24px; + height: 24px; + fill: gray; + border: 1px solid #d9d9d9; + padding: 5px; + border-radius: 100%; + top: 10px; + inset-inline-start: 0; + position: absolute; +} + +.option h2 { + font-size: 19px; + text-decoration: underline; +} + +.option p { + padding-top: 3px; + color: #231f20; + font-size: 15px; + font-weight: 300; +} + +@media (max-width: 996px) { + body { + max-width: 780px; + } +} + +@media (max-width: 767px) { + .option { + flex: 0 0 50%; + } +} + +@media (max-width: 599px) { + .main { + padding: 20px 0; + } + + .figure-space { + max-width: 200px; + } + + .footer { + display: block; + width: 300px; + margin: 0 auto; + } +} + +@media (max-width: 360px) { + .header-link { + max-width: 100px; + } +} diff --git a/static/css/welcome_page.css b/static/css/welcome_page.css new file mode 100644 index 00000000..bad29334 --- /dev/null +++ b/static/css/welcome_page.css @@ -0,0 +1,184 @@ +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + max-width: 960px; + min-height: 100vh; + margin: 0 auto; + padding: 0 15px; + color: #231f20; + font-family: 'Helvetica Neue', 'Segoe UI', Arial, sans-serif; + line-height: 1.25; +} + +a { + background-color: transparent; + color: #308282; + text-decoration: underline; +} + +a:hover { + color: #ea1b10; +} + +h1, +h2, +h3, +h4, +h5, +p, +ul { + padding: 0; + margin: 0; + font-weight: 400; +} + +svg:not(:root) { + overflow: hidden; +} + +.header { + display: flex; + justify-content: space-between; + align-items: center; + padding-top: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #e6e6e6; +} + +.logo { + width: 150px; + margin-inline-end: 20px; +} + +.logo a { + display: block; +} + +.figure-logo { + max-width: 150px; + max-height: 55.1px; +} + +.release-notes { + font-size: 14px; +} + +.main { + padding: 40px 0; + margin: 0 auto; + text-align: center; +} + +.figure-space { + max-width: 265px; +} + +@keyframes pos { + 0%, 100% { + transform: rotate(-6deg); + } + 50% { + transform: rotate(6deg); + } +} + +.egg { + fill: #43b1b0; + animation: pos 3s ease infinite; + transform: translateY(50px); + transform-origin: 50% 80%; +} + +.main-text { + max-width: 400px; + margin: 5px auto; +} + +.main-text h1 { + font-size: 22px; +} + +.main-text p { + margin: 15px auto 0; +} + +.footer { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border-top: 1px solid #e6e6e6; + padding: 10px; +} + +.option { + display: block; + padding: 10px 10px 10px 34px; + position: relative; + text-decoration: none; +} + +.option svg { + width: 24px; + height: 24px; + fill: gray; + border: 1px solid #d9d9d9; + padding: 5px; + border-radius: 100%; + top: 10px; + inset-inline-start: 0; + position: absolute; +} + +.option h2 { + font-size: 19px; + text-decoration: underline; +} + +.option p { + padding-top: 3px; + color: #231f20; + font-size: 15px; + font-weight: 300; +} + +@media (max-width: 996px) { + body { + max-width: 780px; + } +} + +@media (max-width: 767px) { + .option { + flex: 0 0 50%; + } +} + +@media (max-width: 599px) { + .main { + padding: 20px 0; + } + + .figure-space { + max-width: 200px; + } + + .footer { + display: block; + width: 300px; + margin: 0 auto; + } +} + +@media (max-width: 360px) { + .header-link { + max-width: 100px; + } +} diff --git a/templates/footer.html b/templates/footer.html index bc42c39f..97685365 100644 --- a/templates/footer.html +++ b/templates/footer.html @@ -66,9 +66,9 @@

- 1819 S Pearl St
- Denver, CO 80210
- Phone: 720-643-2025
+ Saburly D.O.O
+ Hakije Turajlica 2
+ 71 000 Sarajevo BIH
info@saburly.com