diff options
Diffstat (limited to 'web-ui')
21 files changed, 547 insertions, 36 deletions
diff --git a/web-ui/app/images/dead-mail.svg b/web-ui/app/images/dead-mail.svg new file mode 100644 index 00000000..0dc673e2 --- /dev/null +++ b/web-ui/app/images/dead-mail.svg @@ -0,0 +1,30 @@ +<svg width="86px" height="119px" viewBox="482 331 86 119" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 41.1 (35376) - http://www.bohemiancoding.com/sketch --> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="Group-2-Copy" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(482.000000, 331.000000)"> + <g id="Group-20" transform="translate(15.000000, 49.000000)"> + <path d="M0.423828125,0.793328536 C19.8945313,15.7606394 47.2617188,2.79332854 54.1413981,9.29988178 C58.9511371,13.8487599 51.15625,23.359375 45.0316162,20.7606394 C35.2938756,16.628831 1.79484049,9.93393156 1.79484049,26.7543688 C1.79484049,36.4128289 30.3603083,19.8833117 39.3109946,28.3312933 C45.0316162,33.7306229 39.3109946,35.7515676 28.7154948,35.7515676 C18.119995,35.7515676 13.4375,42.0689248 28.9879557,47.0555613" id="Path-6" stroke="#9D9D99" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="3.9"></path> + <ellipse id="Oval-Copy-6" stroke="#4A4A4A" stroke-width="1.3" fill="#C2C2C2" cx="8.27083333" cy="18.1377706" rx="3.22916667" ry="3.24303377"></ellipse> + <ellipse id="Oval-Copy-7" stroke="#4A4A4A" stroke-width="1.3" fill="#C2C2C2" cx="40.5625" cy="29.7430338" rx="3.22916667" ry="3.24303377"></ellipse> + <path d="M22.5295708,27.0946057 L22.5295708,28.0471347 C22.5295708,28.179431 22.483189,28.2918812 22.3904241,28.3844887 C22.2976592,28.4770961 22.1850177,28.5233992 22.0524963,28.5233992 L19.9851736,28.5233992 L19.9851736,30.587212 C19.9851736,30.7195083 19.9387919,30.8319585 19.8460269,30.924566 C19.753262,31.0171734 19.6406205,31.0634765 19.5080992,31.0634765 L18.5539502,31.0634765 C18.4214289,31.0634765 18.3087874,31.0171734 18.2160225,30.924566 C18.1232575,30.8319585 18.0768758,30.7195083 18.0768758,30.587212 L18.0768758,28.5233992 L16.0095531,28.5233992 C15.8770317,28.5233992 15.7643902,28.4770961 15.6716253,28.3844887 C15.5788604,28.2918812 15.5324786,28.179431 15.5324786,28.0471347 L15.5324786,27.0946057 C15.5324786,26.9623093 15.5788604,26.8498591 15.6716253,26.7572516 C15.7643902,26.6646442 15.8770317,26.6183412 16.0095531,26.6183412 L18.0768758,26.6183412 L18.0768758,24.5545283 C18.0768758,24.422232 18.1232575,24.3097818 18.2160225,24.2171743 C18.3087874,24.1245669 18.4214289,24.0782638 18.5539502,24.0782638 L19.5080992,24.0782638 C19.6406205,24.0782638 19.753262,24.1245669 19.8460269,24.2171743 C19.9387919,24.3097818 19.9851736,24.422232 19.9851736,24.5545283 L19.9851736,26.6183412 L22.0524963,26.6183412 C22.1850177,26.6183412 22.2976592,26.6646442 22.3904241,26.7572516 C22.483189,26.8498591 22.5295708,26.9623093 22.5295708,27.0946057 Z" id="-copy-24" fill="#4A4A4A" transform="translate(19.031025, 27.570870) rotate(-315.000000) translate(-19.031025, -27.570870) "></path> + <path d="M31.5712375,7.46302672 L31.5712375,8.41555571 C31.5712375,8.54785206 31.5248557,8.66030228 31.4320908,8.75290973 C31.3393258,8.84551718 31.2266844,8.89182021 31.094163,8.89182021 L29.0268403,8.89182021 L29.0268403,10.955633 C29.0268403,11.0879294 28.9804585,11.2003796 28.8876936,11.292987 C28.7949286,11.3855945 28.6822872,11.4318975 28.5497658,11.4318975 L27.5956169,11.4318975 C27.4630955,11.4318975 27.3504541,11.3855945 27.2576891,11.292987 C27.1649242,11.2003796 27.1185424,11.0879294 27.1185424,10.955633 L27.1185424,8.89182021 L25.0512197,8.89182021 C24.9186984,8.89182021 24.8060569,8.84551718 24.713292,8.75290973 C24.620527,8.66030228 24.5741453,8.54785206 24.5741453,8.41555571 L24.5741453,7.46302672 C24.5741453,7.33073036 24.620527,7.21828015 24.713292,7.1256727 C24.8060569,7.03306525 24.9186984,6.98676222 25.0512197,6.98676222 L27.1185424,6.98676222 L27.1185424,4.9229494 C27.1185424,4.79065304 27.1649242,4.67820283 27.2576891,4.58559538 C27.3504541,4.49298793 27.4630955,4.4466849 27.5956169,4.4466849 L28.5497658,4.4466849 C28.6822872,4.4466849 28.7949286,4.49298793 28.8876936,4.58559538 C28.9804585,4.67820283 29.0268403,4.79065304 29.0268403,4.9229494 L29.0268403,6.98676222 L31.094163,6.98676222 C31.2266844,6.98676222 31.3393258,7.03306525 31.4320908,7.1256727 C31.5248557,7.21828015 31.5712375,7.33073036 31.5712375,7.46302672 Z" id="-copy-26" fill="#4A4A4A" transform="translate(28.072691, 7.939291) rotate(-315.000000) translate(-28.072691, -7.939291) "></path> + </g> + <g id="Group-21" transform="translate(8.000000, 0.000000)"> + <path d="M63.5945025,5.72253441 C63.5945025,4.94340261 63.3172727,4.29707737 62.7584127,3.7791318 C62.1951523,3.26118623 61.530681,3 60.7561979,3 L5.83830458,3 C5.06382147,3 4.39935017,3.26118623 3.84049019,3.7791318 C3.27722975,4.29707737 3,4.94340261 3,5.72253441 L3,38.9241736 C3,39.7033054 3.27722975,40.3496307 3.84049019,40.8720031 C4.39935017,41.3899487 5.06382147,41.646708 5.83830458,41.646708 L60.7561979,41.646708 C61.530681,41.646708 62.1951523,41.3899487 62.7584127,40.8720031 C63.3172727,40.3496307 63.5945025,39.7033054 63.5945025,38.9241736 L63.5945025,5.72253441 Z" id="Path-Copy-23" fill="#E9E7F3"></path> + <g id="Group-15-Copy-12" transform="translate(46.000000, 21.000000)" stroke="#4A4A4A" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"> + <path d="M0.126411855,6.74710425 L6.90379521,0.747104247" id="Line-Copy-15"></path> + <path d="M7.12641186,6.74710425 L0.349028504,0.747104247" id="Line-Copy-16"></path> + </g> + <g id="Group-15-Copy-13" transform="translate(14.000000, 21.000000)" stroke="#4A4A4A" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"> + <path d="M0.126411855,6.74710425 L6.90379521,0.747104247" id="Line-Copy-15"></path> + <path d="M7.12641186,6.74710425 L0.349028504,0.747104247" id="Line-Copy-16"></path> + </g> + <path d="M36.6410997,12.4069862 C36.6410997,11.1691397 36.6090736,10.1422897 36.5445129,9.31940308 C36.4794439,8.49651646 36.4026829,8.08155654 36.313213,8.08155654 L32.8393145,8.08155654 C32.7498446,8.08155654 29.8027555,8.49651646 29.7381948,9.31940308 C29.6731259,10.1422897 29.6410997,11.1691397 29.6410997,12.4069862 L29.6410997,65.1561284 C29.6410997,66.3939749 29.6731259,67.4208249 29.7381948,68.2507447 C29.8027555,69.0736314 32.7498446,69.4815581 32.8393145,69.4815581 L36.313213,69.4815581 C36.4026829,69.4815581 36.4794439,69.0736314 36.5445129,68.2507447 C36.6090736,67.4208249 36.6410997,66.3939749 36.6410997,65.1561284 L36.6410997,12.4069862 Z" id="Path-Copy-24" fill="#DDD9ED" transform="translate(33.141100, 38.781557) rotate(-90.000000) translate(-33.141100, -38.781557) "></path> + <path d="M43.7921986,32.9004703 C44.5373914,31.517688 43.1883355,30 41.1808117,30 L26.8197896,30 C24.8122658,30 23.4616038,31.517688 24.2084027,32.9004703 C25.7614231,35.7800625 29.5612641,36.6216164 34.0003006,36.6216164 C38.4393372,36.6216164 42.2391782,35.7800625 43.7921986,32.9004703" id="Fill-147-Copy-14" stroke="#4A4A4A" fill="#FEFEFE" transform="translate(34.000000, 33.310808) scale(1, -1) translate(-34.000000, -33.310808) "></path> + <path d="M3,3 C5.36446037,3 30.743339,18.2128906 33.6328125,18.2128906 C36.9547202,18.2128906 64.421875,3.3515625 64.421875,3.3515625" id="Path-4-Copy-8" stroke="#918DA9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M63.3007929,5.57787538 C63.3007929,4.79874358 63.0235631,4.15241834 62.4647031,3.63447277 C61.9014427,3.1165272 61.2369714,2.85534097 60.4624883,2.85534097 L5.544595,2.85534097 C4.77011189,2.85534097 4.10564058,3.1165272 3.54678061,3.63447277 C2.98352016,4.15241834 2.70629041,4.79874358 2.70629041,5.57787538 L2.70629041,38.7795146 C2.70629041,39.5586464 2.98352016,40.2049716 3.54678061,40.7273441 C4.10564058,41.2452897 4.77011189,41.502049 5.544595,41.502049 L60.4624883,41.502049 C61.2369714,41.502049 61.9014427,41.2452897 62.4647031,40.7273441 C63.0235631,40.2049716 63.3007929,39.5586464 63.3007929,38.7795146 L63.3007929,5.57787538 Z M64.3965105,1.62466688 C65.4702257,2.70482687 66.0070833,4.02403867 66.0070833,5.57787538 L66.0070833,38.7795146 C66.0070833,40.3377782 65.4702257,41.65699 64.3965105,42.73715 C63.3183948,43.81731 62.0114545,44.35739 60.4624883,44.35739 L5.544595,44.35739 C3.99562877,44.35739 2.68868853,43.81731 1.61057283,42.73715 C0.536857611,41.65699 0,40.3377782 0,38.7795146 L0,5.57787538 C0,4.02403867 0.536857611,2.70482687 1.61057283,1.62466688 C2.68868853,0.540079998 3.99562877,0 5.544595,0 L60.4624883,0 C62.0114545,0 63.3183948,0.540079998 64.3965105,1.62466688 L64.3965105,1.62466688 Z" id="Fill-1-Copy-103" fill="#918DA9"></path> + </g> + <ellipse id="Oval-3" fill="#E9E9EA" cx="43" cy="113.5" rx="43" ry="5.5"></ellipse> + </g> +</svg> diff --git a/web-ui/app/images/welcome.svg b/web-ui/app/images/welcome.svg new file mode 100644 index 00000000..3f655b85 --- /dev/null +++ b/web-ui/app/images/welcome.svg @@ -0,0 +1,91 @@ +<svg width="180px" height="225px" viewBox="546 224 180 225" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 41.1 (35376) - http://www.bohemiancoding.com/sketch --> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="illustration-copy-2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(547.000000, 225.000000)"> + <g id="Group-3" transform="translate(0.000000, 218.562500)" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"> + <path d="M16.422619,0.915209632 L139.331948,0.915209632" id="Line"></path> + <path d="M144.625,0.915209632 L154.219396,0.915209632" id="Line"></path> + <path d="M160.517857,0.915209632 L177.470238,0.915209632" id="Line"></path> + <path d="M0.529761905,0.915209632 L11.125,0.915209632" id="Line"></path> + </g> + <g id="COMPUTER" transform="translate(50.972727, 176.312500)"> + <path d="M11.8446139,34.7011552 L64.7012034,34.7011552 L64.7012034,3.88892257 L11.8446139,3.88892257 L11.8446139,34.7011552 Z M13.0290753,5.08551413 L63.516742,5.08551413 L63.516742,33.5045637 L13.0290753,33.5045637 L13.0290753,5.08551413 Z M74.1768945,37.0943383 L68.4026452,37.0943383 L68.4026452,2.84190495 C68.4026452,2.04417326 68.1312089,1.37109724 67.588328,0.822656697 C67.0454472,0.274216157 66.4285464,0 65.7376071,0 L10.9562678,0 C10.166623,0 9.50037011,0.299144898 8.95748925,0.89744367 C8.4146084,1.49574244 8.14317205,2.14388972 8.14317205,2.84190495 L8.14317205,37.0943383 L1.62863441,37.0943383 C0.542872708,37.0943383 0,37.6427707 0,38.7396517 L0,40.2353912 C0,41.0331229 0.394816515,41.5815552 1.18446139,41.8807046 L4.44173021,44.1243138 L4.44173021,44.2738877 L71.215741,44.2738877 L71.215741,44.1243138 L74.4730098,41.8807046 C75.3613603,41.6812717 75.8055289,41.1328393 75.8055289,40.2353912 L75.8055289,38.7396517 C75.8055289,37.6427707 75.2626562,37.0943383 74.1768945,37.0943383 Z M9.32763344,2.84190495 C9.32763344,1.74502387 9.87050615,1.19659156 10.9562678,1.19659156 L65.7376071,1.19659156 C66.8233688,1.19659156 67.3662415,1.74502387 67.3662415,2.84190495 L67.3662415,37.0943383 L9.32763344,37.0943383 L9.32763344,2.84190495 Z M3.25726882,41.8807046 L72.4002024,41.8807046 L70.771568,43.0772961 L5.0339609,43.0772961 L3.25726882,41.8807046 Z M74.7691252,40.2353912 C74.7691252,40.634257 74.5717169,40.833687 74.1768945,40.833687 L1.62863441,40.833687 L1.48057674,40.684113 L1.48057674,40.833687 C1.18445991,40.5345376 1.03640372,40.3351077 1.03640372,40.2353912 L1.03640372,38.7396517 C1.03640372,38.3407859 1.23381197,38.141356 1.62863441,38.141356 L74.1768945,38.141356 C74.5717169,38.141356 74.7691252,38.3407859 74.7691252,38.7396517 L74.7691252,40.2353912 Z" id="7" fill="#000000"></path> + <polygon id="Path" fill="#FFFFFF" points="12.9454545 33.815823 63.1090909 33.815823 63.1090909 4.875 12.9454545 4.875"></polygon> + </g> + <g id="MAIL" transform="translate(61.490909, 0.000000)"> + <path d="M58.6700246,10.067306 L64.3727202,4.30620853" id="Line-Copy-6" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M54.140365,7.32167706 L54.140365,0.769773183" id="Line-Copy-7" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M61.5870258,13.7281445 L68.1823096,13.7281445" id="Line-Copy-8" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(64.558582, 14.185749) scale(-1, -1) translate(-64.558582, -14.185749) "></path> + <g id="Group-17" transform="translate(0.000000, 13.000000)"> + <path d="M51.216096,5.16127613 C51.216096,4.52823155 50.991792,4.00309229 50.5396235,3.58226151 C50.0838946,3.16143073 49.5462769,2.94921692 48.9196496,2.94921692 L4.48608141,2.94921692 C3.85945416,2.94921692 3.32183647,3.16143073 2.86966795,3.58226151 C2.41393904,4.00309229 2.18963497,4.52823155 2.18963497,5.16127613 L2.18963497,32.137608 C2.18963497,32.7706526 2.41393904,33.2957918 2.86966795,33.7202194 C3.32183647,34.1410502 3.85945416,34.3496672 4.48608141,34.3496672 L48.9196496,34.3496672 C49.5462769,34.3496672 50.0838946,34.1410502 50.5396235,33.7202194 C50.991792,33.2957918 51.216096,32.7706526 51.216096,32.137608 L51.216096,5.16127613 Z" id="Path" fill="#E9E7F3"></path> + <path d="M51.216096,5.16127613 C51.216096,4.52823155 51.1890134,4.00309229 51.1344181,3.58226151 C51.079393,3.16143073 51.0144805,2.94921692 50.938821,2.94921692 L45.5738704,2.94921692 C45.4982108,2.94921692 45.4332984,3.16143073 45.3787031,3.58226151 C45.323678,4.00309229 45.2965953,4.52823155 45.2965953,5.16127613 L45.2965953,32.137608 C45.2965953,32.7706526 45.323678,33.2957918 45.3787031,33.7202194 C45.4332984,34.1410502 45.4982108,34.3496672 45.5738704,34.3496672 L50.938821,34.3496672 C51.0144805,34.3496672 51.079393,34.1410502 51.1344181,33.7202194 C51.1890134,33.2957918 51.216096,32.7706526 51.216096,32.137608 L51.216096,5.16127613 Z" id="Path" fill="#DDD9ED"></path> + <path d="M47.3566419,27.817798 C47.9832691,28.1702888 48.0865202,28.695428 47.6699555,29.3968127 C47.459893,29.7493034 47.1465793,29.9255488 46.7300146,29.9255488 C46.5911597,29.9255488 46.3810972,29.8536119 46.1033874,29.713335 L36.091593,22.969252 C35.4649658,22.6203581 35.3617147,22.091622 35.7782794,21.3902374 C36.1271968,20.7571928 36.6470126,20.6528843 37.3412871,21.0737151 L47.3566419,27.817798 Z M26.7028655,24.447555 L7.19909254,11.6967421 C6.5724653,11.2723145 6.46921422,10.7831437 6.88577892,10.2184391 C7.30234362,9.51705451 7.78655558,9.37677759 8.34553557,9.79760837 L26.7028655,21.8110681 L45.0601955,9.79760837 C45.6191754,9.37677759 46.1033874,9.51705451 46.5235125,10.2184391 C46.9400772,10.7831437 46.8368261,11.2723145 46.2101989,11.6967421 L26.7028655,24.447555 Z M17.6274516,21.3902374 C18.0475767,22.091622 17.9407652,22.6203581 17.314138,22.969252 L7.30234362,29.713335 C7.02463382,29.8536119 6.81457128,29.9255488 6.67571638,29.9255488 C6.25915168,29.9255488 5.94583805,29.7493034 5.73933589,29.3968127 C5.31921081,28.695428 5.42602227,28.1702888 6.04908913,27.817798 L16.0644439,21.0737151 C16.7587184,20.6528843 17.2785342,20.7571928 17.6274516,21.3902374 L17.6274516,21.3902374 Z M51.216096,5.16127613 C51.216096,4.52823155 50.991792,4.00309229 50.5396235,3.58226151 C50.0838946,3.16143073 49.5462769,2.94921692 48.9196496,2.94921692 L4.48608141,2.94921692 C3.85945416,2.94921692 3.32183647,3.16143073 2.86966795,3.58226151 C2.41393904,4.00309229 2.18963497,4.52823155 2.18963497,5.16127613 L2.18963497,32.137608 C2.18963497,32.7706526 2.41393904,33.2957918 2.86966795,33.7202194 C3.32183647,34.1410502 3.85945416,34.3496672 4.48608141,34.3496672 L48.9196496,34.3496672 C49.5462769,34.3496672 50.0838946,34.1410502 50.5396235,33.7202194 C50.991792,33.2957918 51.216096,32.7706526 51.216096,32.137608 L51.216096,5.16127613 Z M52.1026312,1.94929422 C52.9713644,2.82692422 53.405731,3.8987838 53.405731,5.16127613 L53.405731,32.137608 C53.405731,33.4036972 52.9713644,34.4755567 52.1026312,35.3531867 C51.2303376,36.2308167 50.1729041,36.6696317 48.9196496,36.6696317 L4.48608141,36.6696317 C3.23282692,36.6696317 2.17539344,36.2308167 1.30309984,35.3531867 C0.434366612,34.4755567 0,33.4036972 0,32.137608 L0,5.16127613 C0,3.8987838 0.434366612,2.82692422 1.30309984,1.94929422 C2.17539344,1.06806738 3.23282692,0.629252383 4.48608141,0.629252383 L48.9196496,0.629252383 C50.1729041,0.629252383 51.2303376,1.06806738 52.1026312,1.94929422 L52.1026312,1.94929422 Z" id="Fill-1" fill="#4A4A4A"></path> + <path d="M29.5963336,32.5871184 C29.5963336,33.0514349 29.4415258,33.6764764 29.1304633,34.4622428 C28.9322514,35.0724024 28.6356569,35.3774821 28.2406799,35.3774821 C27.8442561,35.3774821 27.5462148,35.0724024 27.3494497,34.4622428 C27.0383872,33.6764764 26.8835794,33.0514349 26.8835794,32.5871184 C26.8835794,32.1808415 27.010898,31.8459978 27.2655352,31.5840757 C27.5187256,31.3221536 27.8442561,31.1926807 28.2406799,31.1926807 C28.6356569,31.1926807 28.9611874,31.3221536 29.2143778,31.5840757 C29.469015,31.8459978 29.5963336,32.1808415 29.5963336,32.5871184 L29.5963336,32.5871184 Z M30.1475653,22.2545877 C29.6108016,21.7024677 28.9742086,21.4256637 28.2406799,21.4256637 C27.5042575,21.4256637 26.8691114,21.7024677 26.3323477,22.2545877 C25.7955841,22.8067077 25.5264789,23.4600248 25.5264789,24.2160273 L25.5264789,27.006391 L30.9519873,27.006391 L30.9519873,24.2160273 C30.9519873,23.4600248 30.6828821,22.8067077 30.1475653,22.2545877 Z M35.7843068,27.6165506 C36.1807306,28.0243157 36.3774958,28.5183961 36.3774958,29.0987918 L36.3774958,33.9815562 C36.3774958,35.7257195 35.7843068,37.2079607 34.597929,38.4297679 C33.4115511,39.650087 31.9705361,40.2602465 30.2748839,40.2602465 L26.2050291,40.2602465 C24.5093769,40.2602465 23.0683618,39.650087 21.881984,38.4297679 C20.6956062,37.2079607 20.1024172,35.7257195 20.1024172,33.9815562 L20.1024172,29.0987918 C20.1024172,28.5183961 20.2991823,28.0243157 20.6956062,27.6165506 C21.0905832,27.2102736 21.5709215,27.006391 22.1366212,27.006391 L22.1366212,24.2160273 C22.1366212,22.471864 22.7298101,20.9896228 23.916188,19.7693038 C25.1040126,18.5474965 26.5450277,17.937337 28.2406799,17.937337 C29.9348853,17.937337 31.3759004,18.5474965 32.563725,19.7693038 C33.7501029,20.9896228 34.3432918,22.471864 34.3432918,24.2160273 L34.3432918,27.006391 C34.9089915,27.006391 35.387883,27.2102736 35.7843068,27.6165506 L35.7843068,27.6165506 Z" id="Fill-1" stroke="#4A4A4A" stroke-width="1.458" fill="#7ED321" transform="translate(28.239956, 29.098792) rotate(-24.000000) translate(-28.239956, -29.098792) "></path> + <path d="M26.7028655,24.447555 L7.19909254,11.6967421 C6.5724653,11.2723145 6.46921422,10.7831437 6.88577892,10.2184391 C7.30234362,9.51705451 7.78655558,9.37677759 8.34553557,9.79760837 L26.7028655,21.8110681 L26.7028655,24.447555 Z" id="Path" fill="#4A4A4A"></path> + </g> + <path d="M10.2194138,76.214585 L43.4474374,76.214585" id="Line-Copy-13" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(26.637522, 76.672190) rotate(-90.000000) translate(-26.637522, -76.672190) "></path> + <path d="M-0.198803156,65.6896743 L19.0226866,65.6896743" id="Line-Copy-12" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(9.424816, 66.147279) rotate(-90.000000) translate(-9.424816, -66.147279) "></path> + <path d="M34.2266093,65.6896743 L53.448099,65.6896743" id="Line-Copy-14" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(43.850228, 66.147279) rotate(-90.000000) translate(-43.850228, -66.147279) "></path> + </g> + <g id="FEATURES" transform="translate(0.809091, 97.500000)"> + <ellipse id="Oval-Copy" stroke="#F2A641" stroke-width="2.187" cx="150.378449" cy="56.9741856" rx="3.62372762" ry="3.66083853"></ellipse> + <ellipse id="Oval-Copy-4" stroke="#F2A641" stroke-width="2.187" cx="150.378449" cy="56.9741856" rx="3.62372762" ry="3.66083853"></ellipse> + <ellipse id="Oval-Copy-2" stroke="#F2A641" stroke-width="2.187" cx="39.4673921" cy="16.9672054" rx="3.62372762" ry="3.66083853"></ellipse> + <g id="Group-18" transform="translate(116.409126, 26.660381)" stroke="#4A4A4A"> + <ellipse id="Oval" stroke-width="0.729" fill="#F2A641" cx="56.1677782" cy="3.66083853" rx="3.62372762" ry="3.66083853"></ellipse> + <path d="M39.4080379,3.66083853 L47.6116002,3.66083853" id="Line-Copy-3" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M0.794598038,3.66083853 L34.0226216,3.66083853" id="Line-Copy-4" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M18.0073043,11.8977252 L37.228794,11.8977252" id="Line-Copy-5" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + </g> + <g id="Group-14" transform="translate(30.173780, 45.866018) scale(-1, 1) translate(-30.173780, -45.866018) translate(0.237417, 38.959768)" stroke="#4A4A4A"> + <ellipse id="Oval-Copy-3" stroke-width="0.729" fill="#F2A641" cx="56.1677782" cy="3.66083853" rx="3.62372762" ry="3.66083853"></ellipse> + <path d="M39.4080379,3.66083853 L47.6116002,3.66083853" id="Line-Copy-9" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M0.794598038,3.66083853 L34.0226216,3.66083853" id="Line-Copy-10" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + <path d="M18.0073043,11.8977252 L37.228794,11.8977252" id="Line-Copy-11" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path> + </g> + <g id="Group-16" transform="translate(100.327273, 5.687500)"> + <path d="M2.4660568,2.35696127 L2.4660568,19.7459443 L19.678763,19.7459443 L19.678763,2.35696127 L2.4660568,2.35696127 Z M18.9727731,3.07018128 L18.9727731,14.6854785 L18.4684946,14.6854785 L16.0143392,9.7608642 C15.7678018,9.17217172 15.3083527,8.8778299 14.635978,8.8778299 C14.0308408,8.8778299 13.5825977,9.1382092 13.2912353,9.65897562 L11.374977,12.9533728 C10.366415,11.6854198 9.31304374,11.0514528 8.21483173,11.0514528 C7.67693197,11.0514528 7.13904028,11.3118321 6.60114052,11.8325985 C6.06324076,12.3533649 5.67102807,12.8458214 5.42449068,13.3099828 C5.17795329,13.7741442 4.95383176,14.2326382 4.75211935,14.6854785 L3.17204671,14.6854785 L3.17204671,3.07018128 L18.9727731,3.07018128 Z M17.661649,14.6854785 L5.52534638,14.6854785 C6.46667096,12.738265 7.36315711,11.7646728 8.21483173,11.7646728 C8.39413165,11.7646728 8.56782584,11.7873145 8.73591952,11.8325985 C8.90401319,11.8778825 9.0665013,11.9401472 9.22338873,12.0193942 C9.38027616,12.0986413 9.5315582,12.189208 9.67723939,12.2910971 C9.82292057,12.3929862 9.95739349,12.5005341 10.0806622,12.6137442 C10.2039309,12.7269543 10.3215947,12.8345023 10.4336571,12.9363914 C10.5457196,13.0382804 10.6409712,13.1458284 10.719415,13.2590385 C10.7978587,13.3722486 10.8706982,13.4628153 10.9379356,13.5307414 C11.0051731,13.5986674 11.0499974,13.6552716 11.0724099,13.7005557 L11.139647,13.8024442 C11.229297,13.9156543 11.3301517,13.9609377 11.4422141,13.9382957 C11.5766891,13.9382957 11.6775438,13.8816915 11.7447812,13.7684814 L13.8963695,10.0325671 C14.0756694,9.73822082 14.3222031,9.59104991 14.635978,9.59104991 C14.9721653,9.59104991 15.218699,9.74954166 15.3755865,10.0665299 L17.661649,14.6854785 Z M3.17204671,19.0327243 L3.17204671,15.3986985 L18.9727731,15.3986985 L18.9727731,19.0327243 L3.17204671,19.0327243 Z M7.13903759,8.8778299 L9.29062587,8.8778299 C9.87335061,8.8778299 10.3776241,8.66273396 10.8034614,8.23253561 C11.2292987,7.80233726 11.4422141,7.2928995 11.4422141,6.70420703 C11.4422141,6.11551455 11.2292987,5.60607679 10.8034614,5.17587844 C10.3776241,4.74568009 9.87335061,4.53058415 9.29062587,4.53058415 C8.25965133,4.53058415 7.57608064,5.01738024 7.23989329,5.99098702 C6.83646847,5.94570298 6.47787401,6.07023221 6.16409915,6.36457845 C5.85032429,6.65892469 5.69343922,7.0098707 5.69343922,7.41742703 C5.69343922,7.82498336 5.83351518,8.17026896 6.1136713,8.45329418 C6.39382743,8.73631941 6.73561277,8.8778299 7.13903759,8.8778299 Z M7.13903759,6.70420703 C7.20627506,6.70420703 7.2847176,6.7268487 7.37436756,6.77213274 L7.81140893,6.90798417 L7.87864606,6.46646702 C7.92347104,6.10419473 8.08035612,5.80985291 8.349306,5.58343273 C8.61825588,5.35701255 8.93202603,5.24380415 9.29062587,5.24380415 C9.6716382,5.24380415 10.0022175,5.38531465 10.2823736,5.66833987 C10.5625297,5.9513651 10.7026057,6.2966507 10.7026057,6.70420703 C10.7026057,7.11176335 10.5625297,7.45704895 10.2823736,7.74007418 C10.0022175,8.0230994 9.6716382,8.1646099 9.29062587,8.1646099 L7.13903759,8.1646099 C6.93732518,8.1646099 6.76363099,8.09102444 6.61794981,7.94385132 C6.47226862,7.7966782 6.39942912,7.6212052 6.39942912,7.41742703 C6.39942912,7.23629089 6.47226862,7.07213872 6.61794981,6.9249656 C6.76363099,6.77779248 6.93732518,6.70420703 7.13903759,6.70420703 Z" id="Page-1" fill="#000000" transform="translate(11.072410, 11.051453) rotate(-19.000000) translate(-11.072410, -11.051453) "></path> + <path d="M18.2294448,3.09731161 L18.2294448,14.7126089 L17.7251663,14.7126089 L15.271011,9.78799452 C15.0244736,9.19930205 14.5650244,8.90496023 13.8926497,8.90496023 C13.2875125,8.90496023 12.8392694,9.16533953 12.5479071,9.68610595 L10.6316487,12.9805031 C9.6230867,11.7125501 8.56971547,11.0785831 7.47150346,11.0785831 C6.9336037,11.0785831 6.39571201,11.3389624 5.85781225,11.8597288 C5.3199125,12.3804952 4.92769981,12.8729518 4.68116242,13.3371131 C4.43462503,13.8012745 4.21050349,14.2597685 4.00879108,14.7126089 L2.42871844,14.7126089 L2.42871844,3.09731161 L18.2294448,3.09731161 Z" id="Path" fill="#CFEEEF" transform="translate(10.329082, 8.904960) rotate(-18.000000) translate(-10.329082, -8.904960) "></path> + <path d="M18.1951663,14.2731589 L6.0588637,14.2731589 C7.00018827,12.3259453 7.89667442,11.3523532 8.74834904,11.3523532 C8.92764896,11.3523532 9.10134315,11.3749948 9.26943683,11.4202789 C9.4375305,11.4655629 9.60001862,11.5278275 9.75690605,11.6070746 C9.91379348,11.6863216 10.0650755,11.7768884 10.2107567,11.8787774 C10.3564379,11.9806665 10.4909108,12.0882145 10.6141795,12.2014246 C10.7374482,12.3146347 10.855112,12.4221827 10.9671745,12.5240717 C11.0792369,12.6259608 11.1744886,12.7335088 11.2529323,12.8467189 C11.331376,12.959929 11.4042155,13.0504957 11.471453,13.1184217 C11.5386904,13.1863478 11.5835147,13.242952 11.6059272,13.288236 L11.6731644,13.3901246 C11.7628143,13.5033347 11.863669,13.548618 11.9757315,13.525976 C12.1102064,13.525976 12.2110611,13.4693718 12.2782986,13.3561617 L14.4298868,9.62024742 C14.6091868,9.32590118 14.8557204,9.17873027 15.1694953,9.17873027 C15.5056827,9.17873027 15.7522163,9.33722202 15.9091038,9.65421028 L18.1951663,14.2731589 Z" id="Path" fill="#7ED321" transform="translate(12.127015, 11.725945) rotate(-19.000000) translate(-12.127015, -11.725945) "></path> + </g> + <g id="Group-13" transform="translate(52.281643, 9.750000)"> + <path d="M18.9573329,2.74026634 L16.7278911,0.487992636 C16.653576,0.41291647 16.5544907,0.375378951 16.4306322,0.375378951 C16.3315454,0.375378951 16.2448457,0.41291647 16.1705306,0.487992636 L15.8361144,0.788295797 C15.4645389,0.538041911 15.0372335,0.437941859 14.5541853,0.487992636 C14.0711372,0.538043413 13.6686031,0.725731011 13.346571,1.05106106 L8.88768743,5.59314637 C8.66474213,5.76832409 8.66474213,5.95601168 8.88768743,6.15621479 C8.96200253,6.23129096 9.04870217,6.26882848 9.14778897,6.26882848 C9.27164747,6.26882848 9.37073278,6.23129096 9.44504788,6.15621479 L13.9039315,1.61412949 C14.3002787,1.21372327 14.7585482,1.13864823 15.2787539,1.38890212 L3.83428602,12.9505738 C3.63611242,13.1257515 3.63611242,13.3134391 3.83428602,13.5136422 L3.98291547,13.6637938 C3.88382867,13.6387684 3.75997203,13.6262559 3.61134184,13.6262559 C2.96727765,13.6262559 2.40992277,13.8639935 1.93926049,14.3394759 C0.94839251,15.3154661 0.452965953,16.8044544 0.452965953,18.8064854 L0.452965953,19.2194023 L0.824539586,19.2194023 C1.07225658,19.2194023 1.38189818,19.2006335 1.75347367,19.1630954 C2.12504916,19.1255574 2.6947897,18.9816635 3.46271238,18.7314096 C4.23063506,18.4811558 4.8375326,18.1308056 5.28342319,17.6803486 C5.72931378,17.2298916 5.95225573,16.6668288 5.95225573,15.9911433 C5.95225573,15.840991 5.93987006,15.7283784 5.91509836,15.6533022 L6.06372782,15.7659159 C6.16281461,15.8660175 6.26189992,15.9160675 6.36098672,15.9160675 C6.43530182,15.9160675 6.52200147,15.8660175 6.62108827,15.7659159 L14.4612919,7.84542007 L18.9573329,3.34087266 C19.1059631,3.14066955 19.1059631,2.94046945 18.9573329,2.74026634 Z M4.72606274,17.1172802 C4.15631365,17.6928641 3.21500319,18.0932643 1.90210312,18.3184928 L3.35124029,16.816977 C3.52464219,16.6167739 3.52464219,16.4290863 3.35124029,16.2539086 C3.1778384,16.0787308 2.99205344,16.0787308 2.79387984,16.2539086 L1.30758531,17.7554244 C1.5305306,16.4040534 1.92687185,15.4531029 2.49662094,14.9025443 C2.81865303,14.5772143 3.19022295,14.4145517 3.61134184,14.4145517 C4.03246073,14.4145517 4.40403064,14.5772143 4.72606274,14.9025443 C5.02332313,15.202849 5.1719511,15.5657117 5.1719511,15.9911433 C5.1719511,16.4416003 5.02332313,16.8169755 4.72606274,17.1172802 Z M6.36098672,14.9400822 L4.65174801,13.250877 L11.9717486,5.85591163 L13.6438299,7.5826548 L6.36098672,14.9400822 Z M14.2011904,7.01958638 L12.529109,5.29284321 L16.4306322,1.35136422 L18.1027135,3.0405695 L14.2011904,7.01958638 Z" id="o" fill="#000000"></path> + <path d="M4.72606274,17.1172802 C4.15631365,17.6928641 3.21500319,18.0932643 1.90210312,18.3184928 L3.35124029,16.816977 C3.52464219,16.6167739 3.52464219,16.4290863 3.35124029,16.2539086 C3.1778384,16.0787308 2.99205344,16.0787308 2.79387984,16.2539086 L1.30758531,17.7554244 C1.5305306,16.4040534 1.92687185,15.4531029 2.49662094,14.9025443 C2.81865303,14.5772143 3.19022295,14.4145517 3.61134184,14.4145517 C4.03246073,14.4145517 4.40403064,14.5772143 4.72606274,14.9025443 C5.02332313,15.202849 5.1719511,15.5657117 5.1719511,15.9911433 C5.1719511,16.4416003 5.02332313,16.8169755 4.72606274,17.1172802 Z" id="Path" fill="#E8E8E7"></path> + <polygon id="Path" fill="#E9E7F3" points="6.36098672 14.9400822 4.65174801 13.250877 11.9717486 5.85591163 13.6438299 7.5826548"></polygon> + <polygon id="Path" fill="#F2565B" points="14.2011904 7.01958638 12.529109 5.29284321 16.4306322 1.35136422 18.1027135 3.0405695"></polygon> + </g> + <g id="Group-11" transform="translate(120.349457, 46.974705) rotate(-45.000000) translate(-120.349457, -46.974705) translate(112.663093, 40.880955)"> + <path d="M13.9188613,6.48304803 L11.574632,10.2722268 C11.3792786,10.5682579 11.1155555,10.7162712 10.7834546,10.7162712 L1.87538342,10.7162712 C1.60188863,10.7162712 1.37723558,10.6274632 1.2014175,10.4498445 C1.02559943,10.2722259 0.937691709,10.0452722 0.937691709,9.76897649 L0.937691709,2.19061897 C0.937691709,1.9143233 1.02559943,1.68736955 1.2014175,1.50975091 C1.37723558,1.33213227 1.60188863,1.24332428 1.87538342,1.24332428 L10.7834546,1.24332428 C11.1155555,1.24332428 11.3792786,1.3913376 11.574632,1.68736867 L13.9188613,5.47654743 C14.1532854,5.81204931 14.1532854,6.14754615 13.9188613,6.48304803 Z" id="Path" fill="#F2A641"></path> + <path d="M10.7834546,4.55885569 C10.3927478,4.55885569 10.060652,4.69700146 9.78715721,4.97329712 C9.51366243,5.24959279 9.37691709,5.58508964 9.37691709,5.97979773 C9.37691709,6.37450582 9.51366243,6.71000267 9.78715721,6.98629834 C10.060652,7.262594 10.3927478,7.40073976 10.7834546,7.40073976 C11.1741615,7.40073976 11.5062573,7.262594 11.7797521,6.98629834 C12.0532469,6.71000267 12.1899922,6.37450582 12.1899922,5.97979773 C12.1899922,5.58508964 12.0532469,5.24959279 11.7797521,4.97329712 C11.5062573,4.69700146 11.1741615,4.55885569 10.7834546,4.55885569 Z" id="Path" fill="#FFFFFF"></path> + <path d="M14.7100387,4.97329712 L12.3658094,1.18411836 C12.0337086,0.592056221 11.5062623,0.296029591 10.7834546,0.296029591 L1.87538342,0.296029591 C1.36746454,0.296029591 0.927925943,0.483513123 0.556754452,0.858485813 C0.185582961,1.2334585 -2.87349942e-13,1.67749845 -2.87349942e-13,2.19061897 L-2.87349942e-13,9.76897649 C-2.87349942e-13,10.282097 0.185582961,10.726137 0.556754452,11.1011096 C0.927925943,11.4760823 1.36746454,11.6635659 1.87538342,11.6635659 L10.7834546,11.6635659 C11.5062623,11.6635659 12.0337086,11.3675392 12.3658094,10.7754771 L14.7100387,6.98629834 C15.1202809,6.31529458 15.1202809,5.64430088 14.7100387,4.97329712 Z M13.9188613,6.48304803 L11.574632,10.2722268 C11.3792786,10.5682579 11.1155555,10.7162712 10.7834546,10.7162712 L1.87538342,10.7162712 C1.60188863,10.7162712 1.37723558,10.6274632 1.2014175,10.4498445 C1.02559943,10.2722259 0.937691709,10.0452722 0.937691709,9.76897649 L0.937691709,2.19061897 C0.937691709,1.9143233 1.02559943,1.68736955 1.2014175,1.50975091 C1.37723558,1.33213227 1.60188863,1.24332428 1.87538342,1.24332428 L10.7834546,1.24332428 C11.1155555,1.24332428 11.3792786,1.3913376 11.574632,1.68736867 L13.9188613,5.47654743 C14.1532854,5.81204931 14.1532854,6.14754615 13.9188613,6.48304803 Z M10.7834546,4.55885569 C10.3927478,4.55885569 10.060652,4.69700146 9.78715721,4.97329712 C9.51366243,5.24959279 9.37691709,5.58508964 9.37691709,5.97979773 C9.37691709,6.37450582 9.51366243,6.71000267 9.78715721,6.98629834 C10.060652,7.262594 10.3927478,7.40073976 10.7834546,7.40073976 C11.1741615,7.40073976 11.5062573,7.262594 11.7797521,6.98629834 C12.0532469,6.71000267 12.1899922,6.37450582 12.1899922,5.97979773 C12.1899922,5.58508964 12.0532469,5.24959279 11.7797521,4.97329712 C11.5062573,4.69700146 11.1741615,4.55885569 10.7834546,4.55885569 Z M10.7834546,6.92709242 C10.5099599,6.92709242 10.2853068,6.83828443 10.1094887,6.66066579 C9.93367066,6.48304715 9.84576294,6.2560934 9.84576294,5.97979773 C9.84576294,5.70350206 9.93367066,5.47654831 10.1094887,5.29892967 C10.2853068,5.12131103 10.5099599,5.03250304 10.7834546,5.03250304 C11.0569494,5.03250304 11.2816025,5.12131103 11.4574206,5.29892967 C11.6332386,5.47654831 11.7211464,5.70350206 11.7211464,5.97979773 C11.7211464,6.2560934 11.6332386,6.48304715 11.4574206,6.66066579 C11.2816025,6.83828443 11.0569494,6.92709242 10.7834546,6.92709242 Z" id="S" fill="#000000"></path> + </g> + <g id="Group-12" transform="translate(78.800281, 2.437500)" fill="#000000"> + <path d="M13.3058749,1.49385501 C12.5131805,0.68946752 11.5506375,0.287279809 10.4182169,0.287279809 C9.28579637,0.287279809 8.32325335,0.68946752 7.53055897,1.49385501 L0.934242278,8.1300186 C0.311410979,8.76203734 0,9.52332122 0,10.4138931 C0,11.3044649 0.311410979,12.0561729 0.934242278,12.6690396 C1.5381999,13.3010583 2.27898056,13.617063 3.15660648,13.617063 C4.03423241,13.617063 4.78444976,13.3010583 5.40728106,12.6690396 L12.0319081,6.06160397 C12.4660027,5.60195398 12.6830467,5.0561278 12.6830467,4.42410906 C12.6830467,3.79209032 12.4660027,3.24626414 12.0319081,2.78661415 C11.5789399,2.34611624 11.0410482,2.12587059 10.4182169,2.12587059 C9.79538562,2.12587059 9.25749393,2.34611624 8.80452571,2.78661415 L3.8502106,7.84273879 C3.64260017,8.05341171 3.64260017,8.27365736 3.8502106,8.50348235 C4.05782103,8.71415527 4.27486505,8.71415527 4.50134916,8.50348235 L9.45566427,3.44735771 C9.71989573,3.17922855 10.0407434,3.04516598 10.4182169,3.04516598 C10.7956904,3.04516598 11.1165381,3.17922855 11.3807696,3.44735771 C11.645001,3.71548687 11.7771148,4.0410674 11.7771148,4.42410906 C11.7771148,4.80715072 11.645001,5.13273125 11.3807696,5.40086041 L4.75614251,12.037024 C4.32204796,12.4775219 3.79359297,12.6977676 3.17076167,12.6977676 C2.54793037,12.6977676 2.01003868,12.4775219 1.55707046,12.037024 C1.12297592,11.577374 0.905931906,11.0315478 0.905931906,10.3995291 C0.905931906,9.76751035 1.12297592,9.23126007 1.55707046,8.79076216 L8.12507678,2.21205453 C8.72903441,1.58003579 9.46981507,1.26403116 10.347441,1.26403116 C11.2250669,1.26403116 11.9752843,1.58003579 12.5981156,2.21205453 C13.2209469,2.84407327 13.5323578,3.60535715 13.5323578,4.49592901 C13.5323578,5.38650088 13.2209469,6.13820886 12.5981156,6.75107552 L7.7004212,11.7497442 C7.45506342,11.9604171 7.45506342,12.1710869 7.7004212,12.3817598 C7.90803163,12.6307369 8.11563895,12.6307369 8.32324939,12.3817598 L13.3058749,7.35436312 C14.0985692,6.54997563 14.4949105,5.57323404 14.4949105,4.42410906 C14.4949105,3.27498408 14.0985692,2.2982425 13.3058749,1.49385501 Z" id="O"></path> + </g> + <g id="Group-10" transform="translate(96.701026, 58.585957) rotate(-21.000000) translate(-96.701026, -58.585957) translate(85.778299, 47.210957)"> + <g id="Group-19" transform="translate(-0.000000, 0.000000)"> + <path d="M13.5889786,15.1009589 C11.7204847,15.1009589 10.1209647,14.4288586 8.79037052,13.0846377 C7.45977638,11.7404168 6.79448929,10.124516 6.79448929,8.23688669 C6.79448929,6.34925739 7.45977638,4.73335654 8.79037052,3.38913567 C10.1209647,2.0449148 11.7204847,1.37281445 13.5889786,1.37281445 C15.4574725,1.37281445 17.0569925,2.0449148 18.3875867,3.38913567 C19.7181808,4.73335654 20.3834679,6.34925739 20.3834679,8.23688669 C20.3834679,10.124516 19.7181808,11.7404168 18.3875867,13.0846377 C17.0569925,14.4288586 15.4574725,15.1009589 13.5889786,15.1009589 Z" id="Path" fill="#E9E7F3"></path> + <path d="M13.5889786,6.23501251e-13 C11.3241375,6.23501251e-13 9.39905145,0.80080042 7.81366269,2.40242528 C6.22827393,4.00405015 5.43559144,5.94885117 5.43559144,8.23688669 C5.43559144,9.609708 5.74700241,10.8967087 6.36983371,12.0979273 L0.721914488,17.8036874 C0.240635756,18.2898949 -2.87446834e-13,18.8761952 -2.87446834e-13,19.5626059 C-2.87446834e-13,20.2204161 0.233558234,20.7852664 0.700681708,21.2571737 C1.16780518,21.729081 1.72692944,21.9650312 2.37807125,21.9650312 C3.05752358,21.9650312 3.6378804,21.721931 4.11915913,21.2357235 L9.76707836,15.5299634 C10.9561199,16.1591732 12.2300739,16.4737734 13.5889786,16.4737734 C15.8538197,16.4737734 17.7789057,15.672973 19.3642945,14.0713481 C20.9496833,12.4697232 21.7423657,10.5249222 21.7423657,8.23688669 C21.7423657,5.94885117 20.9496833,4.00405015 19.3642945,2.40242528 C17.7789057,0.80080042 15.8538197,6.23501251e-13 13.5889786,6.23501251e-13 Z M3.26984797,20.3777145 C3.01505335,20.6351185 2.71779742,20.7638185 2.37807125,20.7638185 C2.0666556,20.7638185 1.79063224,20.6422685 1.54999287,20.3991647 C1.3093535,20.1560609 1.18903563,19.8772108 1.18903563,19.5626059 C1.18903563,19.2766014 1.31643103,18.9763013 1.57122565,18.6616964 L7.04928264,13.1275382 C7.53056137,13.7853484 8.09676315,14.3573487 8.74790497,14.8435562 L3.26984797,20.3777145 Z M13.5889786,15.1009589 C11.7204847,15.1009589 10.1209647,14.4288586 8.79037052,13.0846377 C7.45977638,11.7404168 6.79448929,10.124516 6.79448929,8.23688669 C6.79448929,6.34925739 7.45977638,4.73335654 8.79037052,3.38913567 C10.1209647,2.0449148 11.7204847,1.37281445 13.5889786,1.37281445 C15.4574725,1.37281445 17.0569925,2.0449148 18.3875867,3.38913567 C19.7181808,4.73335654 20.3834679,6.34925739 20.3834679,8.23688669 C20.3834679,10.124516 19.7181808,11.7404168 18.3875867,13.0846377 C17.0569925,14.4288586 15.4574725,15.1009589 13.5889786,15.1009589 Z M13.5889786,3.43203612 C12.286695,3.43203612 11.1684464,3.90393637 10.2341995,4.84775102 C9.29995255,5.79156567 8.83283608,6.92126627 8.83283608,8.23688669 C8.83283608,8.46569024 8.94607644,8.5800903 9.17256055,8.5800903 C9.39904466,8.5800903 9.51228501,8.46569024 9.51228501,8.23688669 C9.51228501,7.09286893 9.90862626,6.12046842 10.7013206,5.31965599 C11.494015,4.51884356 12.456558,4.11844335 13.5889786,4.11844335 C13.8154627,4.11844335 13.9287031,4.00404329 13.9287031,3.77523973 C13.9287031,3.54643618 13.8154627,3.43203612 13.5889786,3.43203612 Z" id="Page-1" fill="#000000"></path> + </g> + <path d="M3.26984797,20.3777145 C3.01505335,20.6351185 2.71779742,20.7638185 2.37807125,20.7638185 C2.0666556,20.7638185 1.79063224,20.6422685 1.54999287,20.3991647 C1.3093535,20.1560609 1.18903563,19.8772108 1.18903563,19.5626059 C1.18903563,19.2766014 1.31643103,18.9763013 1.57122565,18.6616964 L7.04928264,13.1275382 C7.53056137,13.7853484 8.09676315,14.3573487 8.74790497,14.8435562 L3.26984797,20.3777145 Z" id="Path" fill="#F6A623"></path> + </g> + <g id="Group-5" transform="translate(85.113777, 33.321092) rotate(-11.000000) translate(-85.113777, -33.321092) translate(75.809231, 25.196092)"> + <path d="M18.0832502,9.41128655 L15.8184204,1.13762804 C15.6532757,0.609030553 15.2876037,0.344735771 14.7213935,0.344735771 L3.39724465,0.344735771 C2.83103438,0.344735771 2.46536239,0.609030553 2.30021773,1.13762804 L0.0353879651,9.41128655 C0.0117958704,9.48023405 1.73514536e-13,9.58365375 1.73514536e-13,9.72154874 L1.73514536e-13,13.5825894 C1.73514536e-13,14.1801344 0.224121538,14.6972329 0.672371336,15.1339004 C1.12062114,15.5705678 1.6514353,15.7888983 2.26482976,15.7888983 L15.8538084,15.7888983 C16.4672028,15.7888983 16.998017,15.5705678 17.4462668,15.1339004 C17.8945166,14.6972329 18.1186381,14.1801344 18.1186381,13.5825894 L18.1186381,9.72154874 C18.1186381,9.58365375 18.1068422,9.48023405 18.0832502,9.41128655 Z M15.1106611,9.16997151 L12.8104434,9.16997151 C12.3621936,9.16997151 12.0201133,9.3768109 11.7841924,9.7904959 L10.9702692,11.3762804 L7.14836895,11.3762804 L6.33444575,9.7904959 C6.0985248,9.3768109 5.75644456,9.16997151 5.30819476,9.16997151 L3.00797703,9.16997151 L4.67121139,3.10262194 L13.4474267,3.10262194 L15.1106611,9.16997151 Z" id="Path" fill="#34A6C9"></path> + <path d="M18.0832502,9.41128655 L15.8184204,1.13762804 C15.6532757,0.609030553 15.2876037,0.344735771 14.7213935,0.344735771 L3.39724465,0.344735771 C2.83103437,0.344735771 2.46536239,0.609030553 2.30021773,1.13762804 L0.0353879651,9.41128655 C0.0117958704,9.48023405 -1.55822022e-13,9.58365375 -1.55822022e-13,9.72154874 L-1.55822022e-13,13.5825894 C-1.55822022e-13,14.1801344 0.224121538,14.6972329 0.672371336,15.1339004 C1.12062114,15.5705678 1.6514353,15.7888983 2.26482976,15.7888983 L15.8538084,15.7888983 C16.4672028,15.7888983 16.998017,15.5705678 17.4462668,15.1339004 C17.8945166,14.6972329 18.1186381,14.1801344 18.1186381,13.5825894 L18.1186381,9.72154874 C18.1186381,9.58365375 18.1068422,9.48023405 18.0832502,9.41128655 Z M16.9862232,13.5825894 C16.9862232,13.9043444 16.8800604,14.1686392 16.6677316,14.3754817 C16.4554027,14.5823242 16.1840977,14.6857438 15.8538084,14.6857438 L2.26482976,14.6857438 C1.93454044,14.6857438 1.66323542,14.5823242 1.45090657,14.3754817 C1.23857772,14.1686392 1.13241488,13.9043444 1.13241488,13.5825894 L1.13241488,9.72154874 L3.39724465,1.44789024 L14.7213935,1.44789024 L16.9862232,9.72154874 L16.9862232,13.5825894 Z M13.4474267,2.55104471 L4.67121139,2.55104471 C4.38810625,2.55104471 4.2111682,2.68893764 4.14039191,2.96472763 L2.19405383,9.58365444 C2.12327755,9.74453193 2.14686929,9.90540702 2.26482976,10.0662845 C2.38279024,10.2041795 2.53613655,10.273126 2.72487331,10.273126 L5.30819476,10.273126 L6.12211796,11.8589105 C6.3580389,12.2725955 6.70011915,12.4794349 7.14836895,12.4794349 L10.9702692,12.4794349 C11.418519,12.4794349 11.7605992,12.2725955 11.9965202,11.8589105 L12.8104434,10.273126 L15.3937648,10.273126 C15.6060937,10.273126 15.75944,10.2041795 15.8538084,10.0662845 C15.9717688,9.90540702 15.9953606,9.74453193 15.9245843,9.58365444 L13.9782462,2.96472763 C13.9074699,2.68893764 13.7305319,2.55104471 13.4474267,2.55104471 Z M15.1106611,9.16997151 L12.8104434,9.16997151 C12.3621936,9.16997151 12.0201133,9.3768109 11.7841924,9.7904959 L10.9702692,11.3762804 L7.14836895,11.3762804 L6.33444575,9.7904959 C6.0985248,9.3768109 5.75644456,9.16997151 5.30819476,9.16997151 L3.00797703,9.16997151 L4.67121139,3.10262194 L13.4474267,3.10262194 L15.1106611,9.16997151 Z" id="R" fill="#000000"></path> + </g> + <rect id="Rectangle-4" fill="#6CBFD2" x="50.6634609" y="0.119301753" width="5.43559144" height="5.49125779"></rect> + <polygon id="Rectangle-4-Copy-3" fill="#B8E986" points="129.479537 7.44097881 134.915128 12.9322366 129.479537 12.9322366"></polygon> + <polygon id="Rectangle-4-Copy-4" fill="#B8E986" points="162.093085 44.0493641 167.528677 49.5406219 162.093085 49.5406219"></polygon> + <rect id="Rectangle-4-Copy" fill="#6CBFD2" x="132.487855" y="66.0143953" width="5.43559144" height="5.49125779"></rect> + <rect id="Rectangle-4-Copy-6" fill="#6CBFD2" x="37.0744823" y="65.0991856" width="5.43559144" height="5.49125779"></rect> + <rect id="Rectangle-4-Copy-7" fill="#6CBFD2" x="134.915128" y="2.86493065" width="5.43559144" height="5.49125779"></rect> + <g id="Group-9" transform="translate(66.477527, 55.934907) rotate(135.000000) translate(-66.477527, -55.934907) translate(63.645709, 47.809907)"> + <path d="M2.73743369,0.131688952 C2.67225638,0.0438958783 2.57449186,-6.48370246e-13 2.44413723,-6.48370246e-13 C2.31378259,-6.48370246e-13 2.21601808,0.0438958783 2.15084076,0.131688952 L0.0651769927,3.29222379 C0.021725447,3.38001687 7.00183346e-13,3.44586069 7.00183346e-13,3.48975722 L7.00183346e-13,13.6627287 C7.00183346e-13,14.1455907 0.168372214,14.5626015 0.505121694,14.9137738 C0.841871173,15.2649461 1.2492233,15.4405296 1.72719031,15.4405296 L3.12849565,15.4405296 C3.60646265,15.4405296 4.01381479,15.2649461 4.35056426,14.9137738 C4.68731374,14.5626015 4.85568596,14.1455907 4.85568596,13.6627287 L4.85568596,3.48975722 C4.85568596,3.40196415 4.84482323,3.33612033 4.82309746,3.29222379 L2.73743369,0.131688952 Z" id="Path" fill="#F5E6B3"></path> + <path d="M0.684358424,3.58852394 L1.46648234,2.43624561 L3.42179212,2.43624561 L4.17132753,3.58852394 L4.17132753,3.85190184 C4.17132753,4.02748799 4.10071983,4.18661055 3.95950231,4.32927429 C3.81828478,4.47193803 3.66077529,4.54326884 3.48696911,4.54326884 C3.29143716,4.54326884 3.12306494,4.47193803 2.98184742,4.32927429 C2.84062989,4.18661055 2.77002219,4.02748799 2.77002219,3.85190184 C2.77002219,3.61047089 2.66139496,3.48975722 2.44413723,3.48975722 C2.20515373,3.48975722 2.08566377,3.61047089 2.08566377,3.85190184 C2.08566377,4.02748799 2.01505606,4.18661055 1.87383854,4.32927429 C1.73262102,4.47193803 1.57511153,4.54326884 1.40130534,4.54326884 C1.20577339,4.54326884 1.03740117,4.47193803 0.89618365,4.32927429 C0.754966126,4.18661055 0.684358424,4.02748799 0.684358424,3.85190184 L0.684358424,3.58852394 Z" id="Path" fill="#FFFFFF"></path> + <path d="M2.73743369,0.131688952 C2.67225638,0.0438958783 2.57449186,1.33113656e-13 2.44413723,1.33113656e-13 C2.31378259,1.33113656e-13 2.21601808,0.0438958783 2.15084076,0.131688952 L0.0651769927,3.29222379 C0.021725447,3.38001687 2.96829228e-14,3.44586069 2.96829228e-14,3.48975722 L2.96829228e-14,13.6627287 C2.96829228e-14,14.1455907 0.168372214,14.5626015 0.505121694,14.9137738 C0.841871173,15.2649461 1.2492233,15.4405296 1.72719031,15.4405296 L3.12849565,15.4405296 C3.60646265,15.4405296 4.01381479,15.2649461 4.35056426,14.9137738 C4.68731374,14.5626015 4.85568596,14.1455907 4.85568596,13.6627287 L4.85568596,3.48975722 C4.85568596,3.40196415 4.84482323,3.33612033 4.82309746,3.29222379 L2.73743369,0.131688952 Z M2.44413723,4.7737245 C2.57449186,4.90541411 2.6831191,4.99320587 2.77002219,5.03710241 L2.77002219,11.2264831 L2.08566377,11.2264831 L2.08566377,5.03710241 C2.2160184,4.9712576 2.33550836,4.88346584 2.44413723,4.7737245 Z M1.40130534,11.2264831 L0.684358424,11.2264831 L0.684358424,5.03710241 C0.923341925,5.16879202 1.16232184,5.23463583 1.40130534,5.23463583 L1.40130534,11.2264831 Z M0.684358424,11.9178501 L4.17132753,11.9178501 L4.17132753,12.6092171 L0.684358424,12.6092171 L0.684358424,11.9178501 Z M3.48696911,11.2264831 L3.48696911,5.23463583 C3.74767839,5.23463583 3.97579558,5.16879202 4.17132753,5.03710241 L4.17132753,11.2264831 L3.48696911,11.2264831 Z M2.44413723,0.954744901 L2.93296467,1.74487861 L1.92272129,1.74487861 L2.44413723,0.954744901 Z M0.684358424,3.58852394 L1.46648234,2.43624561 L3.42179212,2.43624561 L4.17132753,3.58852394 L4.17132753,3.85190184 C4.17132753,4.02748799 4.10071983,4.18661055 3.95950231,4.32927429 C3.81828478,4.47193803 3.66077529,4.54326884 3.48696911,4.54326884 C3.29143716,4.54326884 3.12306494,4.47193803 2.98184742,4.32927429 C2.84062989,4.18661055 2.77002219,4.02748799 2.77002219,3.85190184 C2.77002219,3.61047089 2.66139496,3.48975722 2.44413723,3.48975722 C2.20515373,3.48975722 2.08566377,3.61047089 2.08566377,3.85190184 C2.08566377,4.02748799 2.01505606,4.18661055 1.87383854,4.32927429 C1.73262102,4.47193803 1.57511153,4.54326884 1.40130534,4.54326884 C1.20577339,4.54326884 1.03740117,4.47193803 0.89618365,4.32927429 C0.754966126,4.18661055 0.684358424,4.02748799 0.684358424,3.85190184 L0.684358424,3.58852394 Z M3.12849565,14.7162404 L1.72719031,14.7162404 C1.44475526,14.7162404 1.20034398,14.6119877 0.993949139,14.4034791 C0.787554297,14.1949706 0.684358424,13.9480562 0.684358424,13.6627287 L0.684358424,13.3335064 L4.17132753,13.3335064 L4.17132753,13.6627287 C4.17132753,13.9480562 4.07356302,14.1949706 3.87803107,14.4034791 C3.68249911,14.6119877 3.43265647,14.7162404 3.12849565,14.7162404 Z" id="C" fill="#000000"></path> + <path d="M3.12849565,14.7162404 L1.72719031,14.7162404 C1.44475526,14.7162404 1.20034398,14.6119877 0.993949139,14.4034791 C0.787554297,14.1949706 0.684358424,13.9480562 0.684358424,13.6627287 L0.684358424,13.3335064 L4.17132753,13.3335064 L4.17132753,13.6627287 C4.17132753,13.9480562 4.07356302,14.1949706 3.87803107,14.4034791 C3.68249911,14.6119877 3.43265647,14.7162404 3.12849565,14.7162404 Z" id="Path" fill="#F2565B"></path> + </g> + </g> + </g> +</svg> diff --git a/web-ui/app/locales/en_US/translation.json b/web-ui/app/locales/en_US/translation.json index 7aad4fe8..3f050e67 100644 --- a/web-ui/app/locales/en_US/translation.json +++ b/web-ui/app/locales/en_US/translation.json @@ -65,7 +65,11 @@ "timeout": "A timeout occurred", "general": "Problems talking to server", "parse": "Got invalid response from server", - "auth": "Invalid email or password" + "auth": "Invalid email or password", + "login": { + "title": "Oh, something went wrong :(", + "message": "Try to login again in a few minutes. If the problem persists, contact your account administrator." + } }, "tags": { "inbox": "Inbox", @@ -89,6 +93,8 @@ "login": { "email": "Your email", "password": "Your password", - "submit": "Login" + "submit": "Login", + "welcome-image-alt": "Welcome image", + "welcome-message": "Pixelated is an email that respects the privacy of your information." } } diff --git a/web-ui/app/locales/pt_BR/translation.json b/web-ui/app/locales/pt_BR/translation.json index b38b7535..431b8f82 100644 --- a/web-ui/app/locales/pt_BR/translation.json +++ b/web-ui/app/locales/pt_BR/translation.json @@ -65,7 +65,11 @@ "timeout": "A operação excedeu o limite de tempo", "general": "Problemas ao se comunicar com o servidor", "parse": "Obteve uma resposta inválida do servidor", - "auth": "E-mail ou senha inválidos" + "auth": "E-mail ou senha inválidos", + "login": { + "title": "Ops, algo deu errado :(", + "message": "Tente entrar novamente em alguns minutos. Se o problema persistir, contate o administrador da sua conta." + } }, "tags": { "inbox": "Caixa de Entrada", @@ -89,6 +93,8 @@ "login": { "email": "Seu e-mail", "password": "Sua senha", - "submit": "Entrar" + "submit": "Entrar", + "welcome-image-alt": "Imagem de boas vindas", + "welcome-message": "Pixelated é um e-mail que respeita a privacidade da sua informação." } } diff --git a/web-ui/src/interstitial/interstitial.js b/web-ui/src/interstitial/interstitial.js index 78a17190..c9a29c21 100644 --- a/web-ui/src/interstitial/interstitial.js +++ b/web-ui/src/interstitial/interstitial.js @@ -44,8 +44,10 @@ $(function () { method: 'GET', url: '/status' }).success(function (data) { - if (data.status === 'completed' || data.status === 'error') { + if (data.status === 'completed') { window.location="/"; + } else if (data.status === 'error') { + window.location="/login?error"; } }); }, 2000); diff --git a/web-ui/src/login/about/pixelated-welcome.scss b/web-ui/src/login/about/pixelated-welcome.scss new file mode 100644 index 00000000..17d05f13 --- /dev/null +++ b/web-ui/src/login/about/pixelated-welcome.scss @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +@import "~scss/base/colors"; + +.pixelated-welcome { + display: none; +} + +@media only screen and (min-width : 960px) { + .pixelated-welcome { + font-size: 0.9em; + color: $medium_grey; + display: flex; + font-weight: 300; + flex-direction: column; + align-self: flex-end; + order: 2; + width: 34%; + margin-right: 8%; + margin-top: -20.5em; + + h3 { + font-weight: normal; + font-size: 1.2em; + margin-top: 0; + } + } + + .welcome-logo { + order: 1; + width: 90%; + height: 15em; + } +} diff --git a/web-ui/src/login/about/pixelated_welcome.js b/web-ui/src/login/about/pixelated_welcome.js new file mode 100644 index 00000000..82a7d7d0 --- /dev/null +++ b/web-ui/src/login/about/pixelated_welcome.js @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +import React from 'react'; +import { translate } from 'react-i18next'; + +import './pixelated-welcome.scss'; + +export const PixelatedWelcome = ({ t }) => ( + <div className='pixelated-welcome'> + <img className='welcome-logo' src='/public/images/welcome.svg' alt={t('login.welcome-image-alt')} /> + <div> + <h3>{t('login.welcome-message')}</h3> + </div> + </div> +); + +PixelatedWelcome.propTypes = { + t: React.PropTypes.func.isRequired +}; + +export default translate('', { wait: true })(PixelatedWelcome); diff --git a/web-ui/src/login/app.js b/web-ui/src/login/app.js index 07099c60..3259f7b5 100644 --- a/web-ui/src/login/app.js +++ b/web-ui/src/login/app.js @@ -19,19 +19,32 @@ import React from 'react'; import { translate } from 'react-i18next'; import InputField from 'src/common/input_field/input_field'; import SubmitButton from 'src/common/submit_button/submit_button'; +import AuthError from 'src/login/error/auth_error'; +import GenericError from 'src/login/error/generic_error'; +import PixelatedWelcome from 'src/login/about/pixelated_welcome'; import './app.scss'; const errorMessage = (t, authError) => { - if (authError) return <p className='error'>{t('error.auth')}</p>; + if (authError) return <AuthError />; return <div />; }; -export const App = ({ t, authError }) => ( +const rightPanel = (t, error) => { + if (error) return <GenericError />; + return <PixelatedWelcome />; +}; + +export const App = ({ t, authError, error }) => ( <div className='login'> - <img className='logo' src='/public/images/logo-orange.svg' alt='Pixelated logo' /> - {errorMessage(t, authError)} - <form className='standard' id='login_form' action='/login' method='post'> + <img + className={error ? 'logo small-logo' : 'logo'} + src='/public/images/logo-orange.svg' + alt='Pixelated logo' + /> + {rightPanel(t, error)} + <form className='standard' id='login_form' action='/login' method='post' noValidate > + {errorMessage(t, authError)} <InputField name='username' label={t('login.email')} /> <InputField type='password' name='password' label={t('login.password')} /> <SubmitButton buttonText={t('login.submit')} /> @@ -41,7 +54,8 @@ export const App = ({ t, authError }) => ( App.propTypes = { t: React.PropTypes.func.isRequired, - authError: React.PropTypes.bool + authError: React.PropTypes.bool, + error: React.PropTypes.bool }; export default translate('', { wait: true })(App); diff --git a/web-ui/src/login/app.scss b/web-ui/src/login/app.scss index f6e6bc11..32e3b979 100644 --- a/web-ui/src/login/app.scss +++ b/web-ui/src/login/app.scss @@ -17,11 +17,6 @@ @import "~scss/base/colors"; -.error { - color: $error; - margin: 10px 0 0 0; -} - .login { display: block; width: 90%; @@ -37,11 +32,14 @@ } #login_form { - padding: 20px 0; width: 70%; + display: flex; + align-items: center; + flex-direction: column; .input-field-group { width: 100%; + margin: 0 0 1.5em 0; } .submit-button { @@ -51,10 +49,16 @@ .logo { width: 70%; + margin-bottom: 2em; +} + +.small-logo { + width: 50%; + margin-bottom: 1em; } @media only screen and (min-width : 500px) { - #login_form .input-field-group { + #login_form { margin-top: 1em; } @@ -64,7 +68,38 @@ } @media only screen and (min-width : 960px) { + .content { + font-size: 0.9em; + } + .login { - width: 40%; + display: flex; + align-items: flex-start; + width: 70%; + max-width: 700px; + padding: 2.5em 0; + height: 22em; + + &:after { + content: ''; + height: 22em; + position: absolute; + margin-top: inherit; + top: 2.5em; + left: 50%; + border: 1px solid $lighter_gray; + transform: scaleX(0.5); + } + } + + .logo { + height: 6em; + margin-bottom: 1em; + margin-top: 1.5em; + } + + .logo, #login_form { + width: 34%; + margin-left: 8%; } } diff --git a/web-ui/src/login/error/auth-error.scss b/web-ui/src/login/error/auth-error.scss new file mode 100644 index 00000000..f6256be4 --- /dev/null +++ b/web-ui/src/login/error/auth-error.scss @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +@import "~scss/base/colors"; + +.auth-error { + color: $error; + margin: -1em 0 1em 0; +} + +@media only screen and (min-width : 960px) { + .auth-error { + margin: -2em 0 1em 0; + } +} diff --git a/web-ui/src/login/error/auth_error.js b/web-ui/src/login/error/auth_error.js new file mode 100644 index 00000000..ceeaf42b --- /dev/null +++ b/web-ui/src/login/error/auth_error.js @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +import React from 'react'; +import { translate } from 'react-i18next'; + +import './auth-error.scss'; + +export const AuthError = ({ t }) => ( + <p className='auth-error'>{t('error.auth')}</p> +); + +AuthError.propTypes = { + t: React.PropTypes.func.isRequired +}; + +export default translate('', { wait: true })(AuthError); diff --git a/web-ui/src/login/error/generic-error.scss b/web-ui/src/login/error/generic-error.scss new file mode 100644 index 00000000..5a077f32 --- /dev/null +++ b/web-ui/src/login/error/generic-error.scss @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +@import "~scss/base/colors"; + +.generic-error { + font-size: 0.9em; + color: $medium_grey; + display: flex; + padding: 0 1.5em; + font-weight: 300; + + h2 { + font-weight: normal; + font-size: 1.4em; + } +} + +.dead-mail { + width: 20%; + margin-right: 1.5em; + margin-top: 1.7em; + align-self: flex-start; +} + +@media only screen and (min-width : 960px) { + .generic-error { + flex-direction: column; + align-self: flex-end; + order: 2; + width: 34%; + margin-right: 8%; + margin-top: -19.5em; + padding: 0; + + h2 { + margin: 0; + } + } + + .dead-mail { + order: 1; + width: 30%; + } +} diff --git a/web-ui/src/login/error/generic_error.js b/web-ui/src/login/error/generic_error.js new file mode 100644 index 00000000..023e1bcf --- /dev/null +++ b/web-ui/src/login/error/generic_error.js @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ + +import React from 'react'; +import { translate } from 'react-i18next'; + +import './generic-error.scss'; + +export const GenericError = ({ t }) => ( + <div className='generic-error'> + <img className='dead-mail' src='/public/images/dead-mail.svg' alt='' /> + <div> + <h2>{t('error.login.title')}</h2> + <p>{t('error.login.message')}</p> + </div> + </div> +); + +GenericError.propTypes = { + t: React.PropTypes.func.isRequired +}; + +export default translate('', { wait: true })(GenericError); diff --git a/web-ui/src/login/login.css b/web-ui/src/login/login.css index d1206a39..5116875e 100644 --- a/web-ui/src/login/login.css +++ b/web-ui/src/login/login.css @@ -46,17 +46,24 @@ body { } @media only screen and (min-width : 500px) { - body { - font-size: 1.2em; - } - .disclaimer { width: 60%; } } @media only screen and (min-width : 960px) { + body { + font-size: 1.2em; + } + .disclaimer { - width: 40%; + width: 70%; + max-width: 700px; + padding: 0; + font-size: 1em; + } + + .disclaimer-content { + font-size: 0.7em; } } diff --git a/web-ui/src/login/login.js b/web-ui/src/login/login.js index 74e5a14e..b1d895ae 100644 --- a/web-ui/src/login/login.js +++ b/web-ui/src/login/login.js @@ -28,7 +28,7 @@ if (process.env.NODE_ENV === 'development') a11y(React); render( <I18nextProvider i18n={i18n}> - <AppWrapper authError={hasQueryParameter('auth-error')} /> + <AppWrapper authError={hasQueryParameter('auth-error')} error={hasQueryParameter('error')} /> </I18nextProvider>, document.getElementById('root') ); diff --git a/web-ui/src/util.js b/web-ui/src/util.js index 1b244458..effb3d9c 100644 --- a/web-ui/src/util.js +++ b/web-ui/src/util.js @@ -1,6 +1,7 @@ -export const hasQueryParameter = param => ( - decodeURIComponent(window.location.search.substring(1)).includes(param) -); +export const hasQueryParameter = (param) => { + const decodedUri = decodeURIComponent(window.location.search.substring(1)); + return !(decodedUri.split('&').indexOf(param) < 0); +}; export default { hasQueryParameter diff --git a/web-ui/test/unit/login/about/pixelated_welcome.spec.js b/web-ui/test/unit/login/about/pixelated_welcome.spec.js new file mode 100644 index 00000000..d03cb457 --- /dev/null +++ b/web-ui/test/unit/login/about/pixelated_welcome.spec.js @@ -0,0 +1,17 @@ +import { shallow } from 'enzyme'; +import expect from 'expect'; +import React from 'react'; +import { PixelatedWelcome } from 'src/login/about/pixelated_welcome'; + +describe('PixelatedWelcome', () => { + let pixelatedWelcome; + const mockTranslations = key => key; + + beforeEach(() => { + pixelatedWelcome = shallow(<PixelatedWelcome t={mockTranslations} />); + }); + + it('renders welcome component', () => { + expect(pixelatedWelcome.find('.pixelated-welcome').length).toEqual(1); + }); +}); diff --git a/web-ui/test/unit/login/app.spec.js b/web-ui/test/unit/login/app.spec.js index 347e2b19..39d21f04 100644 --- a/web-ui/test/unit/login/app.spec.js +++ b/web-ui/test/unit/login/app.spec.js @@ -2,25 +2,52 @@ import { shallow } from 'enzyme'; import expect from 'expect'; import React from 'react'; import { App } from 'src/login/app'; +import AuthError from 'src/login/error/auth_error'; +import GenericError from 'src/login/error/generic_error'; +import PixelatedWelcome from 'src/login/about/pixelated_welcome'; describe('App', () => { let app; const mockTranslations = key => key; - beforeEach(() => { + it('renders login form', () => { app = shallow(<App t={mockTranslations} />); + expect(app.find('form').props().action).toEqual('/login'); }); - it('renders login form', () => { - expect(app.find('form').props().action).toEqual('/login'); + it('renders welcome message when no error', () => { + app = shallow(<App t={mockTranslations} />); + expect(app.find(PixelatedWelcome).length).toEqual(1); }); it('renders auth error message', () => { app = shallow(<App t={mockTranslations} authError />); - expect(app.find('.error').length).toEqual(1); + expect(app.find(AuthError).length).toEqual(1); + }); + + it('renders generic error message when error', () => { + app = shallow(<App t={mockTranslations} error />); + expect(app.find(GenericError).length).toEqual(1); }); - it('does not render auth error message', () => { - expect(app.find('.error').length).toEqual(0); + it('does not render welcome message when error', () => { + app = shallow(<App t={mockTranslations} error />); + expect(app.find(PixelatedWelcome).length).toEqual(0); + }); + + it('does not render error message', () => { + app = shallow(<App t={mockTranslations} />); + expect(app.find(AuthError).length).toEqual(0); + expect(app.find(GenericError).length).toEqual(0); + }); + + it('adds small logo class when error', () => { + app = shallow(<App t={mockTranslations} error />); + expect(app.find('.logo').props().className).toEqual('logo small-logo'); + }); + + it('does not add small logo class when no error', () => { + app = shallow(<App t={mockTranslations} />); + expect(app.find('.logo').props().className).toEqual('logo'); }); }); diff --git a/web-ui/test/unit/login/error/auth_error.spec.js b/web-ui/test/unit/login/error/auth_error.spec.js new file mode 100644 index 00000000..55d8920f --- /dev/null +++ b/web-ui/test/unit/login/error/auth_error.spec.js @@ -0,0 +1,17 @@ +import { shallow } from 'enzyme'; +import expect from 'expect'; +import React from 'react'; +import { AuthError } from 'src/login/error/auth_error'; + +describe('AuthError', () => { + let authError; + const mockTranslations = key => key; + + beforeEach(() => { + authError = shallow(<AuthError t={mockTranslations} />); + }); + + it('renders error message', () => { + expect(authError.find('.auth-error').length).toEqual(1); + }); +}); diff --git a/web-ui/test/unit/login/error/generic_error.spec.js b/web-ui/test/unit/login/error/generic_error.spec.js new file mode 100644 index 00000000..1ef8349d --- /dev/null +++ b/web-ui/test/unit/login/error/generic_error.spec.js @@ -0,0 +1,17 @@ +import { shallow } from 'enzyme'; +import expect from 'expect'; +import React from 'react'; +import { GenericError } from 'src/login/error/generic_error'; + +describe('GenericError', () => { + let genericError; + const mockTranslations = key => key; + + beforeEach(() => { + genericError = shallow(<GenericError t={mockTranslations} />); + }); + + it('renders error message', () => { + expect(genericError.find('.generic-error').length).toEqual(1); + }); +}); diff --git a/web-ui/test/unit/util.spec.js b/web-ui/test/unit/util.spec.js index 84decf6f..968b2d83 100644 --- a/web-ui/test/unit/util.spec.js +++ b/web-ui/test/unit/util.spec.js @@ -5,12 +5,12 @@ describe('Utils', () => { describe('.hasQueryParameter', () => { global.window = { location: { - search: '?auth&lng=pt-BR' + search: '?auth-error&lng=pt-BR' } }; it('checks if param included in query parameters', () => { - expect(Util.hasQueryParameter('auth')).toBe(true); + expect(Util.hasQueryParameter('auth-error')).toBe(true); }); it('checks if param not included in query parameters', () => { |