git.iko.soy/rowtype-yoga/psfp
on master help sign in
Add landing page
133b502Mark Eibes
.storybook/preview-head.html+8−2
@@ -1,2 +1,8 @@
1−<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700,800,900&display=swap" rel="stylesheet">
1+<link href="https://fonts.googleapis.com/css?family=Overpass|Playfair+Display|Montserrat:300,400,500,600,700,800,900&display=swap" rel="stylesheet">
2−<style> html, body, #app { min-height: 100%; min-width: 100% }</style>
2+<style> html, body, #app
3+ {
4+
5+ margin: 0;
6+ padding: 0;
7+ }
8+</style>
.vscode/settings.json+1
@@ -16,4 +16,5 @@
16 "replace": "∀$1"
16 "replace": "∀$1"
17 },
17 },
18],
18],
19+"purescript.buildCommand": "spago build --purs-args '--json-errors'",
19}
20}
assets/alternative.svg → assets/icons/alternative.svgrenamed

The content is the same.

assets/ap.svg → assets/icons/ap.svgrenamed

The content is the same.

assets/append.svg → assets/icons/append.svgrenamed

The content is the same.

assets/apply.svg → assets/icons/apply.svgrenamed

The content is the same.

assets/applyflipped.svg → assets/icons/applyflipped.svgrenamed

The content is the same.

assets/bind.svg → assets/icons/bind.svgrenamed

The content is the same.

assets/compose.svg → assets/icons/compose.svgrenamed

The content is the same.

assets/composeflipped.svg → assets/icons/composeflipped.svgrenamed

The content is the same.

assets/forall.svg → assets/icons/forall.svgrenamed

The content is the same.

assets/kleisli.svg → assets/icons/kleisli.svgrenamed

The content is the same.

assets/icons/landingpagedark.svgnew file+1
@@ -0,0 +1 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 800 447" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="800" height="446.374" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0" width="800" height="446.374"/></clipPath><g clip-path="url(#_clip1)"><g id="Background"><path d="M800.828,448.051l0,-451.564l-803.856,0l0,451.564l803.856,0Z" style="fill:url(#_Linear2);"/><ellipse cx="174.599" cy="310.24" rx="330.479" ry="252.189" style="fill:url(#_Radial3);"/></g><g id="Stars"><circle cx="362.644" cy="4.733" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="334.392" cy="11.38" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="369.845" cy="6.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="72.557" cy="31.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="49.291" cy="25.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="403.867" cy="17.97" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="125.013" cy="9.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="87.333" cy="15.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M709.089,15.919c-0.575,0.333 -1.312,0.135 -1.644,-0.44c-0.333,-0.576 -0.135,-1.313 0.44,-1.645c0.576,-0.332 1.313,-0.135 1.645,0.441c0.332,0.575 0.135,1.312 -0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M716.544,3.358c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M701.851,87.271c-0.342,0.198 -0.78,0.081 -0.977,-0.261c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.341 0.081,0.779 -0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M669.995,7.519c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.261,-0.976c0.342,-0.198 0.78,-0.081 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.032,24.138c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M614.599,24.138c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M691.664,7.383c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.163 1.996,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><circle cx="198.7" cy="7.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="244.102" cy="79.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M104.17,29.677c0.342,0.198 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="203.07" cy="73.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="193.264" cy="22.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="157.667" cy="14.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="261.444" cy="28.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="223.281" cy="52.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M583.698,25.392c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="330.57" cy="98.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="330.376" cy="79.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="365.972" cy="26.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="112.16" cy="59.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="800.966" cy="4.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.399" cy="127.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="771.687" cy="32.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.953" cy="26.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><path d="M44.17,26.599c0.342,-0.198 0.78,-0.08 0.977,0.262c0.198,0.341 0.08,0.779 -0.261,0.976c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="133.264" cy="33.817" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.667" cy="41.428" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="201.444" cy="28.019" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="163.281" cy="23.473" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M523.698,30.884c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.341 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="305.972" cy="29.398" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="769.852" cy="44.016" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="711.687" cy="24.074" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="734.953" cy="30.168" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="717.719" cy="10.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="756.911" cy="16.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M454.676,37.115c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.534c-0.404,0.698 -0.164,1.592 0.534,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.701,47.253c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M32.393,28.151c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.342 -0.08,0.779 0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M494.249,8.398c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M699.212,25.017c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M549.645,25.017c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M472.652,7.069c0.442,0.255 1.009,0.103 1.265,-0.339c0.255,-0.443 0.103,-1.01 -0.339,-1.265c-0.443,-0.256 -1.01,-0.104 -1.265,0.339c-0.256,0.442 -0.104,1.009 0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M416.68,31.856c0.488,0.282 1.112,0.114 1.394,-0.373c0.281,-0.488 0.114,-1.112 -0.374,-1.393c-0.487,-0.282 -1.112,-0.115 -1.393,0.373c-0.281,0.487 -0.114,1.112 0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M529.444,13.243c0.565,0.326 1.289,0.132 1.615,-0.433c0.326,-0.565 0.132,-1.289 -0.433,-1.615c-0.565,-0.326 -1.289,-0.133 -1.615,0.433c-0.326,0.565 -0.132,1.288 0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M498.917,29.864c0.52,0.3 1.186,0.122 1.486,-0.398c0.301,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.3,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="573.265" cy="5.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="648.544" cy="38.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="638.738" cy="17.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="274.158" cy="3.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="213.142" cy="10.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M173.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M323.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M353.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M383.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="254.174" cy="44.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="263.98" cy="23.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="299.577" cy="15.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="195.559" cy="38.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="233.963" cy="33.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M37.775,12.928c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="146.674" cy="49.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="126.868" cy="20.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="481.272" cy="27.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="735.084" cy="60.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M623.013,27.532c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.535,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M520.261,21.259c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.404,0.698 0.164,1.592 -0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M554.976,21.878c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.301,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="591.184" cy="24.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="208.506" cy="36.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="183.086" cy="22.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="153.07" cy="32.998" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="280.376" cy="27.009" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="62.16" cy="47.109" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="260.57" cy="57.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="740.966" cy="51.298" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.399" cy="55.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="778.687" cy="80.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.953" cy="74.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="726.231" cy="58.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="763.911" cy="64.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M462.155,64.919c0.575,0.333 1.312,0.135 1.644,-0.44c0.333,-0.576 0.135,-1.313 -0.44,-1.645c-0.576,-0.332 -1.313,-0.135 -1.645,0.441c-0.332,0.575 -0.135,1.312 0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M454.7,52.358c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M469.393,136.271c0.342,0.198 0.78,0.081 0.977,-0.261c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M501.249,56.519c0.342,0.197 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.081 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M706.212,73.138c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M556.645,73.138c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M729.58,36.383c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.163 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M548.231,56.532c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.535,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.163,1.592 0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M650.983,50.259c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M616.268,50.878c0.52,0.3 1.186,0.122 1.486,-0.398c0.3,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.301,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="580.06" cy="53.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="655.544" cy="86.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="645.738" cy="65.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="681.158" cy="31.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="610.142" cy="158.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M750.074,78.677c-0.342,0.198 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.262,-0.976c0.341,-0.198 0.779,-0.08 0.976,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="651.174" cy="122.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="660.98" cy="71.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="696.577" cy="63.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="592.8" cy="77.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="630.963" cy="81.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M270.546,74.392c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="533.674" cy="47.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="523.868" cy="128.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="488.272" cy="75.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="742.084" cy="108.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="53.278" cy="53.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="24.392" cy="61.26" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.845" cy="176.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="82.557" cy="81.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.291" cy="75.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="13.635" cy="87.617" r="1.228" style="fill:#fee;fill-opacity:0.69;"/><circle cx="136.525" cy="59.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.333" cy="65.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M399.568,66.115c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.699,-0.403 1.593,-0.164 1.996,0.534c0.403,0.698 0.163,1.592 -0.535,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M398.543,46.253c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M391.851,117.151c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.342 0.081,0.779 -0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M359.995,57.398c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977c0.342,-0.198 0.78,-0.08 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M155.032,74.017c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M304.599,74.017c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M381.592,56.069c-0.442,0.255 -1.009,0.103 -1.265,-0.339c-0.255,-0.443 -0.103,-1.01 0.339,-1.265c0.443,-0.256 1.01,-0.104 1.265,0.339c0.256,0.442 0.104,1.009 -0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M437.564,80.856c-0.488,0.282 -1.112,0.114 -1.393,-0.373c-0.282,-0.488 -0.115,-1.112 0.373,-1.393c0.487,-0.282 1.112,-0.115 1.393,0.373c0.282,0.487 0.114,1.112 -0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M314.8,32.243c-0.565,0.326 -1.288,0.132 -1.615,-0.433c-0.326,-0.565 -0.132,-1.289 0.433,-1.615c0.565,-0.326 1.289,-0.133 1.615,0.433c0.326,0.565 0.132,1.288 -0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M355.327,78.864c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.3,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="280.979" cy="54.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="205.7" cy="87.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="215.506" cy="176.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="190.086" cy="52.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="251.102" cy="59.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M301.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M151.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M121.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M91.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="210.07" cy="93.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="200.264" cy="72.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="164.667" cy="64.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="268.685" cy="127.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="230.281" cy="82.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M426.469,61.928c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="327.57" cy="48.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="337.376" cy="69.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="372.972" cy="76.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="119.16" cy="109.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/></g><g id="Clouds"><path id="_-Curve-" serif:id="(Curve)" d="M610.291,177.316c-35.879,-0.428 -84.67,-0.691 -138.392,-0.689c-38.684,0.002 -74.811,0.141 -105.402,0.38c-49.14,-2.745 -80.877,-9.954 -80.877,-14.718c0,-1.333 2.655,0.335 7.294,-0.896c96.772,-0.175 171.302,-1.213 171.302,-2.464c0,-1.107 -59.462,-3.372 -140.106,-3.687c38.487,-2.059 102.543,-4.972 173.823,-4.972c11.996,0 23.761,0.07 35.216,0.206c20.76,-4.638 60.945,-2.784 107.07,-2.784c36.08,0 68.525,-0.075 90.882,2.983c32.491,0.899 72.142,-1.186 114.922,-0.379c38.68,0.729 74.805,1.273 105.395,1.613c49.101,3.673 80.599,8.516 80.54,13.279c-0.016,1.334 -2.504,2.58 -7.158,3.723c-96.763,-1.654 -171.297,-2.024 -171.312,-0.774c-0.013,1.108 58.473,3.15 139.105,4.989c-38.514,3.085 -101.653,4.38 -172.925,3.033c-11.995,-0.227 -23.757,-0.52 -35.209,-0.872c-20.815,4.245 -61.034,6.631 -107.154,5.759c-24.754,-0.468 -47.786,-1.809 -67.014,-3.73Z" style="fill:#240c3c;"/><path id="_-Curve-1" serif:id="(Curve)" d="M609.299,171.607c-35.88,-0.338 -84.67,-0.545 -138.392,-0.543c-38.684,0.001 -74.812,0.111 -105.402,0.299c-49.141,-2.166 -80.694,-5.519 -80.694,-9.279c0,-1.052 2.472,-2.073 7.111,-3.045c96.772,-0.137 171.302,-0.957 171.302,-1.944c-0.001,-0.874 -58.506,-1.614 -139.15,-1.862c38.471,-3.009 101.587,-4.973 172.867,-4.973c11.996,0 23.761,0.055 35.216,0.162c20.76,-3.66 60.945,-6.143 107.07,-6.143c36.08,0 68.525,1.519 90.882,3.933c32.491,0.709 72.142,1.432 114.922,2.069c38.68,0.575 74.805,1.005 105.395,1.272c49.101,2.9 80.598,6.722 80.54,10.482c-0.017,1.052 -2.505,2.036 -7.158,2.938c-96.763,-1.305 -171.297,-1.597 -171.312,-0.611c-0.014,0.875 58.473,2.486 139.104,3.938c-38.514,2.435 -101.653,3.457 -172.924,2.394c-11.995,-0.179 -23.758,-0.41 -35.21,-0.688c-20.814,3.35 -61.033,5.234 -107.153,4.545c-24.754,-0.369 -47.786,-1.428 -67.014,-2.944Z" style="fill:#120b38;"/><path d="M684.234,222.269c-12.108,-1.642 -29.721,-2.832 -29.76,-5.218c-0.063,-3.861 34.226,-4.225 76.6,-3.504c42.375,0.721 75.9,-2.707 76.956,1.008c2.476,8.704 -12.549,8.552 -32.56,10.141c-12.403,-0.58 -28.24,0.216 -44.434,0.479c-16.193,0.263 -35.197,-1.331 -46.802,-2.906Z" style="fill:url(#_Linear4);"/><path d="M130.064,213.821c42.381,0 76.789,0.237 76.789,4.224c0,3.986 -14.408,4.223 -56.789,4.223c-42.38,0 -96.788,0.208 -96.788,-4.223c0,-4.431 34.408,-4.224 76.788,-4.224Z" style="fill:#a7847d;"/></g><g id="Mountains"><path d="M476.098,218.299l81.644,216.765l-205.408,0l123.764,-216.765Z" style="fill:#04102d;"/><path d="M476.098,218.299l21.823,203.477l81.177,-8.706l-103,-194.771Z" style="fill:#250849;"/><path d="M369.627,308.648l88.326,125.788l-205.407,0l117.081,-125.788Z" style="fill:#04102d;"/><path d="M326.11,338.332l68.193,96.732l-205.407,0l137.214,-96.732Z" style="fill:#04102d;"/><path d="M508.168,243.792l163.526,204.747l-256.643,0l93.117,-204.747Z" style="fill:#04102d;"/><path d="M508.168,245.355l63.395,75.115l-54.953,46.379l-8.442,-121.494Z" style="fill:#250849;"/><path d="M369.612,308.648l54.182,77.687l-58.981,41.135l4.799,-118.822Z" style="fill:#250849;"/><path d="M326.184,338.326l16.813,23.99l-16.887,11.835l0.074,-35.825Z" style="fill:#250849;"/><path d="M633.647,230.42l175.693,204.644l-351.387,0l175.694,-204.644Z" style="fill:#04102d;"/><path d="M633.647,230.42l101.573,245.129l86.041,-35.653l-187.614,-209.476Z" style="fill:#250849;"/><path d="M643.625,254.389c-0.57,0.219 -0.744,0.283 -1.862,0.819c-2.862,1.393 -6.074,3.204 -9.177,2.636c-6.182,-1.132 -10.808,-6.27 -16.675,-6.724l17.736,-20.7l9.978,23.969Z" style="fill:#655578;"/><path d="M654.153,253.404c-0.495,-0.027 -0.799,-0.017 -0.799,-0.017c-3.255,-0.486 -6.617,-0.192 -9.677,0.982l-0.052,0.02l-9.978,-23.969l20.506,22.984Z" style="fill:#9d779e;"/></g><g id="Buildings"><path d="M195.171,451.298l0,-292.145l-102.462,0l0,292.145l102.462,0Z" style="fill:url(#_Linear5);"/><path d="M289.755,451.298l0,-218.487l-57.232,0l0,218.487l57.232,0Z" style="fill:url(#_Linear6);"/><path d="M323.451,451.298l0,-123.585l-71.555,0l0,123.585l71.555,0Z" style="fill:url(#_Linear7);"/><path d="M207.557,451.298l0,-218.487l25.314,0l0,218.487l-25.314,0Z" style="fill:#130425;"/><path d="M92.709,451.298l0,-292.145l25.314,0l0,292.145l-25.314,0Z" style="fill:#130425;"/><path d="M323.451,451.298l0,-123.585l-16.692,0l0,123.585l16.692,0Z" style="fill:url(#_Linear8);"/><path d="M272.498,451.298l0,-95.771l-136.555,0l0,95.771l136.555,0Z" style="fill:url(#_Linear9);"/><path d="M85.122,451.298l0,-178.856l-97.675,0l0,178.856l97.675,0Z" style="fill:url(#_Linear10);"/><path d="M173.526,451.298l0,-95.771l-37.583,0l0,95.771l37.583,0Z" style="fill:#2e1232;"/><path d="M66.649,456.944l0,-184.502l-69.677,0l0,184.502l69.677,0Z" style="fill:url(#_Linear11);"/></g><rect x="-3.028" y="431.298" width="826.844" height="20.006" style="fill:#253141;"/><g id="Laptop"><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M599.193,275.905c0,-3.05 -2.476,-5.526 -5.526,-5.526l-193.063,0c-3.05,0 -5.526,2.476 -5.526,5.526l0,141.039c0,3.05 2.476,5.526 5.526,5.526l193.063,0c3.05,0 5.526,-2.476 5.526,-5.526l0,-141.039Z" style="fill:#130c2b;"/><path d="M655.04,427.228c0,-0.252 -0.205,-0.457 -0.457,-0.457c-13.334,0 -313.753,0 -313.753,0l0,4.975c0,2.761 2.239,5 5,5c36.953,0 267.257,0 304.21,0c2.761,0 5,-2.239 5,-5c0,-1.845 0,-3.687 0,-4.518Z" style="fill:url(#_Linear12);"/><circle id="Camera" cx="497.178" cy="267.001" r="1.238" style="fill-opacity:0.45;"/><circle id="Mic" cx="500.009" cy="267.001" r="0.527" style="fill-opacity:0.45;"/><circle id="Ambient-Light-" serif:id="Ambient Light?" cx="494.263" cy="267.001" r="0.527" style="fill:#102708;fill-opacity:0.45;"/><g id="Icon"><path d="M543.109,335.27l-18.005,-18.014l-4.857,4.857l15.576,15.585l-15.576,15.582l4.857,4.856l18.005,-18.007c0.649,-0.652 1.008,-1.516 1.008,-2.434c-0.004,-0.918 -0.359,-1.778 -1.008,-2.425" style="fill:#ccffd6;fill-rule:nonzero;"/><path d="M497.136,326.699c7.364,-7.356 19.316,-7.354 26.677,0.007c7.361,7.362 7.364,19.313 0.007,26.677l0.007,0.007l-26.684,26.684l-26.684,-26.684c-7.364,-7.363 -7.364,-19.32 0,-26.684c7.361,-7.361 19.313,-7.363 26.677,-0.007Z" style="fill:#c47dff;"/><path d="M473.797,339.323l-4.859,-4.857l-18.012,18.01c-0.647,0.646 -1.004,1.511 -1.001,2.428c0,0.918 0.354,1.781 1.001,2.428l18.012,18.012l4.859,-4.856l-15.583,-15.584l15.583,-15.581Z" style="fill:#ccffd6;fill-rule:nonzero;"/></g></g></g><defs><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-8.64246e-14,451.564,-803.856,-1.43038e-13,398.9,-3.51255)"><stop offset="0" style="stop-color:#000434;stop-opacity:1"/><stop offset="0.28" style="stop-color:#171043;stop-opacity:1"/><stop offset="0.68" style="stop-color:#573774;stop-opacity:1"/><stop offset="1" style="stop-color:#b8734e;stop-opacity:1"/></linearGradient><radialGradient id="_Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(330.479,0,0,252.189,174.599,310.24)"><stop offset="0" style="stop-color:#f60;stop-opacity:0.3"/><stop offset="1" style="stop-color:#fff552;stop-opacity:0"/></radialGradient><linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.538323,-17.3125,1.44013,-0.04478,749.812,228.864)"><stop offset="0" style="stop-color:#e59f77;stop-opacity:1"/><stop offset="0.47" style="stop-color:#a46075;stop-opacity:1"/><stop offset="1" style="stop-color:#914d74;stop-opacity:1"/></linearGradient><linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(31.4265,292.145,-292.145,31.4265,112.513,159.153)"><stop offset="0" style="stop-color:#08001b;stop-opacity:1"/><stop offset="1" style="stop-color:#571547;stop-opacity:1"/></linearGradient><linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(19.1616,218.487,-218.487,19.1616,241.977,232.811)"><stop offset="0" style="stop-color:#000418;stop-opacity:1"/><stop offset="1" style="stop-color:#571548;stop-opacity:1"/></linearGradient><linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(46.7869,123.585,-71.5547,27.0893,259.972,327.713)"><stop offset="0" style="stop-color:#000418;stop-opacity:1"/><stop offset="1" style="stop-color:#571548;stop-opacity:1"/></linearGradient><linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,123.585,-123.585,0,315.105,327.713)"><stop offset="0" style="stop-color:#3a0843;stop-opacity:1"/><stop offset="1" style="stop-color:#9f5c6a;stop-opacity:1"/></linearGradient><linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(89.6564,47.8855,-47.8855,89.6564,162.618,355.527)"><stop offset="0" style="stop-color:#2c1d2f;stop-opacity:1"/><stop offset="1" style="stop-color:#480445;stop-opacity:1"/></linearGradient><linearGradient id="_Linear10" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-7.19036,106.447,-106.447,-7.19036,77.8467,255.423)"><stop offset="0" style="stop-color:#2c1d2f;stop-opacity:1"/><stop offset="1" style="stop-color:#480445;stop-opacity:1"/></linearGradient><linearGradient id="_Linear11" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(20.5602,1.9877e-06,-184.503,2.215e-07,11.2504,272.442)"><stop offset="0" style="stop-color:#000624;stop-opacity:1"/><stop offset="1" style="stop-color:#4f1557;stop-opacity:1"/></linearGradient><linearGradient id="_Linear12" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(314.21,0,0,9.97478,340.83,431.758)"><stop offset="0" style="stop-color:#a9abc1;stop-opacity:1"/><stop offset="0.11" style="stop-color:#65687d;stop-opacity:1"/><stop offset="0.5" style="stop-color:#c3c5d2;stop-opacity:1"/><stop offset="0.89" style="stop-color:#64677c;stop-opacity:1"/><stop offset="1" style="stop-color:#a4a7c2;stop-opacity:1"/></linearGradient></defs></svg>
assets/icons/landingpagelight.svgnew file+1
@@ -0,0 +1 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 800 447" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="800" height="446.374" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0" width="800" height="446.374"/></clipPath><g clip-path="url(#_clip1)"><g id="Background"><path d="M800.828,448.051l0,-451.564l-803.856,0l0,451.564l803.856,0Z" style="fill:url(#_Linear2);"/><ellipse cx="842.486" cy="270.379" rx="647.316" ry="459.814" style="fill:url(#_Radial3);"/></g><g id="Stars" opacity="0.15"><circle cx="362.644" cy="4.733" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="334.392" cy="11.38" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="369.845" cy="6.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="72.557" cy="31.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="49.291" cy="25.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="403.867" cy="17.97" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="125.013" cy="9.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="87.333" cy="15.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M709.089,15.919c-0.575,0.333 -1.312,0.135 -1.644,-0.44c-0.333,-0.576 -0.135,-1.313 0.44,-1.645c0.576,-0.332 1.313,-0.135 1.645,0.441c0.332,0.575 0.135,1.312 -0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M716.544,3.358c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M701.851,87.271c-0.342,0.198 -0.78,0.081 -0.977,-0.261c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.341 0.081,0.779 -0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M669.995,7.519c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.261,-0.976c0.342,-0.198 0.78,-0.081 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.032,24.138c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M614.599,24.138c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M691.664,7.383c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.163 1.996,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><circle cx="198.7" cy="7.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="244.102" cy="79.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M104.17,29.677c0.342,0.198 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="203.07" cy="73.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="193.264" cy="22.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="157.667" cy="14.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="261.444" cy="28.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="223.281" cy="52.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M583.698,25.392c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="330.57" cy="98.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="330.376" cy="79.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="365.972" cy="26.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="112.16" cy="59.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="800.966" cy="4.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.399" cy="127.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="771.687" cy="32.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.953" cy="26.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><path d="M44.17,26.599c0.342,-0.198 0.78,-0.08 0.977,0.262c0.198,0.341 0.08,0.779 -0.261,0.976c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="133.264" cy="33.817" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.667" cy="41.428" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="201.444" cy="28.019" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="163.281" cy="23.473" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M523.698,30.884c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.341 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="305.972" cy="29.398" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="769.852" cy="44.016" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="711.687" cy="24.074" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="734.953" cy="30.168" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="717.719" cy="10.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="756.911" cy="16.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M454.676,37.115c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.534c-0.404,0.698 -0.164,1.592 0.534,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.701,47.253c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M32.393,28.151c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.342 -0.08,0.779 0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M494.249,8.398c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M699.212,25.017c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M549.645,25.017c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M472.652,7.069c0.442,0.255 1.009,0.103 1.265,-0.339c0.255,-0.443 0.103,-1.01 -0.339,-1.265c-0.443,-0.256 -1.01,-0.104 -1.265,0.339c-0.256,0.442 -0.104,1.009 0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M416.68,31.856c0.488,0.282 1.112,0.114 1.394,-0.373c0.281,-0.488 0.114,-1.112 -0.374,-1.393c-0.487,-0.282 -1.112,-0.115 -1.393,0.373c-0.281,0.487 -0.114,1.112 0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M529.444,13.243c0.565,0.326 1.289,0.132 1.615,-0.433c0.326,-0.565 0.132,-1.289 -0.433,-1.615c-0.565,-0.326 -1.289,-0.133 -1.615,0.433c-0.326,0.565 -0.132,1.288 0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M498.917,29.864c0.52,0.3 1.186,0.122 1.486,-0.398c0.301,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.3,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="573.265" cy="5.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="648.544" cy="38.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="638.738" cy="17.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="274.158" cy="3.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="213.142" cy="10.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M173.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M323.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M353.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M383.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="254.174" cy="44.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="263.98" cy="23.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="299.577" cy="15.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="195.559" cy="38.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="233.963" cy="33.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M37.775,12.928c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="146.674" cy="49.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="126.868" cy="20.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="481.272" cy="27.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="735.084" cy="60.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M623.013,27.532c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.535,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M520.261,21.259c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.404,0.698 0.164,1.592 -0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M554.976,21.878c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.301,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="591.184" cy="24.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="208.506" cy="36.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="183.086" cy="22.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="153.07" cy="32.998" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="280.376" cy="27.009" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="62.16" cy="47.109" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="260.57" cy="57.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="740.966" cy="51.298" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.399" cy="55.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="778.687" cy="80.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.953" cy="74.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="726.231" cy="58.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="763.911" cy="64.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M462.155,64.919c0.575,0.333 1.312,0.135 1.644,-0.44c0.333,-0.576 0.135,-1.313 -0.44,-1.645c-0.576,-0.332 -1.313,-0.135 -1.645,0.441c-0.332,0.575 -0.135,1.312 0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M454.7,52.358c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M469.393,136.271c0.342,0.198 0.78,0.081 0.977,-0.261c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M501.249,56.519c0.342,0.197 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.081 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M706.212,73.138c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M556.645,73.138c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M729.58,36.383c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.163 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M548.231,56.532c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.535,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.163,1.592 0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M650.983,50.259c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M616.268,50.878c0.52,0.3 1.186,0.122 1.486,-0.398c0.3,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.301,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="580.06" cy="53.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="655.544" cy="86.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="645.738" cy="65.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="681.158" cy="31.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="610.142" cy="158.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M750.074,78.677c-0.342,0.198 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.262,-0.976c0.341,-0.198 0.779,-0.08 0.976,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="651.174" cy="122.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="660.98" cy="71.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="696.577" cy="63.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="592.8" cy="77.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="630.963" cy="81.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M270.546,74.392c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="533.674" cy="47.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="523.868" cy="128.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="488.272" cy="75.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="742.084" cy="108.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="53.278" cy="53.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="24.392" cy="61.26" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.845" cy="176.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="82.557" cy="81.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.291" cy="75.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="13.635" cy="87.617" r="1.228" style="fill:#fee;fill-opacity:0.69;"/><circle cx="136.525" cy="59.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.333" cy="65.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M399.568,66.115c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.699,-0.403 1.593,-0.164 1.996,0.534c0.403,0.698 0.163,1.592 -0.535,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M398.543,46.253c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M391.851,117.151c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.342 0.081,0.779 -0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M359.995,57.398c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977c0.342,-0.198 0.78,-0.08 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M155.032,74.017c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M304.599,74.017c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M381.592,56.069c-0.442,0.255 -1.009,0.103 -1.265,-0.339c-0.255,-0.443 -0.103,-1.01 0.339,-1.265c0.443,-0.256 1.01,-0.104 1.265,0.339c0.256,0.442 0.104,1.009 -0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M437.564,80.856c-0.488,0.282 -1.112,0.114 -1.393,-0.373c-0.282,-0.488 -0.115,-1.112 0.373,-1.393c0.487,-0.282 1.112,-0.115 1.393,0.373c0.282,0.487 0.114,1.112 -0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M314.8,32.243c-0.565,0.326 -1.288,0.132 -1.615,-0.433c-0.326,-0.565 -0.132,-1.289 0.433,-1.615c0.565,-0.326 1.289,-0.133 1.615,0.433c0.326,0.565 0.132,1.288 -0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M355.327,78.864c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.3,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="280.979" cy="54.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="205.7" cy="87.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="215.506" cy="176.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="190.086" cy="52.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="251.102" cy="59.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M301.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M151.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M121.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M91.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="210.07" cy="93.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="200.264" cy="72.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="164.667" cy="64.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="268.685" cy="127.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="230.281" cy="82.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M426.469,61.928c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="327.57" cy="48.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="337.376" cy="69.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="372.972" cy="76.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="119.16" cy="109.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/></g><g id="Clouds"><path id="_-Curve-" serif:id="(Curve)" d="M610.291,177.316c-35.879,-0.428 -84.67,-0.691 -138.392,-0.689c-38.684,0.002 -74.811,0.141 -105.402,0.38c-49.14,-2.745 -80.877,-9.954 -80.877,-14.718c0,-1.333 2.655,0.335 7.294,-0.896c96.772,-0.175 171.302,-1.213 171.302,-2.464c0,-1.107 -59.462,-3.372 -140.106,-3.687c38.487,-2.059 102.543,-4.972 173.823,-4.972c11.996,0 23.761,0.07 35.216,0.206c20.76,-4.638 60.945,-2.784 107.07,-2.784c36.08,0 68.525,-0.075 90.882,2.983c32.491,0.899 72.142,-1.186 114.922,-0.379c38.68,0.729 74.805,1.273 105.395,1.613c49.101,3.673 80.599,8.516 80.54,13.279c-0.016,1.334 -2.504,2.58 -7.158,3.723c-96.763,-1.654 -171.297,-2.024 -171.312,-0.774c-0.013,1.108 58.473,3.15 139.105,4.989c-38.514,3.085 -101.653,4.38 -172.925,3.033c-11.995,-0.227 -23.757,-0.52 -35.209,-0.872c-20.815,4.245 -61.034,6.631 -107.154,5.759c-24.754,-0.468 -47.786,-1.809 -67.014,-3.73Z" style="fill:#af92cb;"/><path id="_-Curve-1" serif:id="(Curve)" d="M609.299,171.607c-35.88,-0.338 -84.67,-0.545 -138.392,-0.543c-38.684,0.001 -74.812,0.111 -105.402,0.299c-49.141,-2.166 -80.694,-5.519 -80.694,-9.279c0,-1.052 2.472,-2.073 7.111,-3.045c96.772,-0.137 171.302,-0.957 171.302,-1.944c-0.001,-0.874 -58.506,-1.614 -139.15,-1.862c38.471,-3.009 101.587,-4.973 172.867,-4.973c11.996,0 23.761,0.055 35.216,0.162c20.76,-3.66 60.945,-6.143 107.07,-6.143c36.08,0 68.525,1.519 90.882,3.933c32.491,0.709 72.142,1.432 114.922,2.069c38.68,0.575 74.805,1.005 105.395,1.272c49.101,2.9 80.598,6.722 80.54,10.482c-0.017,1.052 -2.505,2.036 -7.158,2.938c-96.763,-1.305 -171.297,-1.597 -171.312,-0.611c-0.014,0.875 58.473,2.486 139.104,3.938c-38.514,2.435 -101.653,3.457 -172.924,2.394c-11.995,-0.179 -23.758,-0.41 -35.21,-0.688c-20.814,3.35 -61.033,5.234 -107.153,4.545c-24.754,-0.369 -47.786,-1.428 -67.014,-2.944Z" style="fill:#6b649f;"/><path d="M684.234,222.269c-12.108,-1.642 -29.721,-2.832 -29.76,-5.218c-0.063,-3.861 34.226,-4.225 76.6,-3.504c42.375,0.721 75.9,-2.707 76.956,1.008c2.476,8.704 -12.549,8.552 -32.56,10.141c-12.403,-0.58 -28.24,0.216 -44.434,0.479c-16.193,0.263 -35.197,-1.331 -46.802,-2.906Z" style="fill:url(#_Linear4);"/><path d="M130.064,213.821c42.381,0 76.789,0.237 76.789,4.224c0,3.986 -14.408,4.223 -56.789,4.223c-42.38,0 -96.788,0.208 -96.788,-4.223c0,-4.431 34.408,-4.224 76.788,-4.224Z" style="fill:#a7847d;"/></g><g id="Mountains"><path d="M476.098,218.299l81.644,216.765l-205.408,0l123.764,-216.765Z" style="fill:#04102d;"/><path d="M476.098,218.299l21.823,203.477l81.177,-8.706l-103,-194.771Z" style="fill:#250849;"/><path d="M369.627,308.648l88.326,125.788l-205.407,0l117.081,-125.788Z" style="fill:#04102d;"/><path d="M326.11,338.332l68.193,96.732l-205.407,0l137.214,-96.732Z" style="fill:#04102d;"/><path d="M508.168,243.792l163.526,204.747l-256.643,0l93.117,-204.747Z" style="fill:#04102d;"/><path d="M508.168,245.355l63.395,75.115l-54.953,46.379l-8.442,-121.494Z" style="fill:#250849;"/><path d="M369.612,308.648l54.182,77.687l-58.981,41.135l4.799,-118.822Z" style="fill:#250849;"/><path d="M326.184,338.326l16.813,23.99l-16.887,11.835l0.074,-35.825Z" style="fill:#250849;"/><path d="M633.647,230.42l175.693,204.644l-351.387,0l175.694,-204.644Z" style="fill:#04102d;"/><path d="M633.647,230.42l101.573,245.129l86.041,-35.653l-187.614,-209.476Z" style="fill:#250849;"/><path d="M643.625,254.389c-0.57,0.219 -0.744,0.283 -1.862,0.819c-2.862,1.393 -6.074,3.204 -9.177,2.636c-6.182,-1.132 -10.808,-6.27 -16.675,-6.724l17.736,-20.7l9.978,23.969Z" style="fill:#655578;"/><path d="M654.153,253.404c-0.495,-0.027 -0.799,-0.017 -0.799,-0.017c-3.255,-0.486 -6.617,-0.192 -9.677,0.982l-0.052,0.02l-9.978,-23.969l20.506,22.984Z" style="fill:#9d779e;"/></g><g id="Buildings"><path d="M195.171,451.298l0,-292.145l-102.462,0l0,292.145l102.462,0Z" style="fill:url(#_Linear5);"/><path d="M289.755,451.298l0,-218.487l-57.232,0l0,218.487l57.232,0Z" style="fill:url(#_Linear6);"/><path d="M323.451,451.298l0,-123.585l-71.555,0l0,123.585l71.555,0Z" style="fill:url(#_Linear7);"/><path d="M207.557,451.298l0,-218.487l25.314,0l0,218.487l-25.314,0Z" style="fill:#130425;"/><path d="M92.709,451.298l0,-292.145l25.314,0l0,292.145l-25.314,0Z" style="fill:#282341;"/><path d="M323.451,451.298l0,-123.585l-16.692,0l0,123.585l16.692,0Z" style="fill:url(#_Linear8);"/><path d="M272.498,451.298l0,-95.771l-136.555,0l0,95.771l136.555,0Z" style="fill:url(#_Linear9);"/><path d="M85.122,451.298l0,-178.856l-97.675,0l0,178.856l97.675,0Z" style="fill:url(#_Linear10);"/><path d="M173.526,451.298l0,-95.771l-37.583,0l0,95.771l37.583,0Z" style="fill:#2e1232;"/><path d="M66.649,456.944l0,-184.502l-69.677,0l0,184.502l69.677,0Z" style="fill:url(#_Linear11);"/></g><rect x="-3.028" y="431.298" width="826.844" height="20.006" style="fill:#253141;"/><g id="Laptop"><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M599.193,275.905c0,-3.05 -2.476,-5.526 -5.526,-5.526l-193.063,0c-3.05,0 -5.526,2.476 -5.526,5.526l0,141.039c0,3.05 2.476,5.526 5.526,5.526l193.063,0c3.05,0 5.526,-2.476 5.526,-5.526l0,-141.039Z" style="fill:#f9d3d3;"/><path d="M655.04,427.228c0,-0.252 -0.205,-0.457 -0.457,-0.457c-13.334,0 -313.753,0 -313.753,0l0,4.975c0,2.761 2.239,5 5,5c36.953,0 267.257,0 304.21,0c2.761,0 5,-2.239 5,-5c0,-1.845 0,-3.687 0,-4.518Z" style="fill:url(#_Linear12);"/><circle id="Camera" cx="497.178" cy="267.001" r="1.238" style="fill-opacity:0.45;"/><circle id="Mic" cx="500.009" cy="267.001" r="0.527" style="fill-opacity:0.45;"/><circle id="Ambient-Light-" serif:id="Ambient Light?" cx="494.263" cy="267.001" r="0.527" style="fill:#102708;fill-opacity:0.45;"/><g id="Icon"><path d="M543.109,335.27l-18.005,-18.014l-4.857,4.857l15.576,15.585l-15.576,15.582l4.857,4.856l18.005,-18.007c0.649,-0.652 1.008,-1.516 1.008,-2.434c-0.004,-0.918 -0.359,-1.778 -1.008,-2.425" style="fill:#ccffd6;fill-rule:nonzero;"/><path d="M497.136,326.699c7.364,-7.356 19.316,-7.354 26.677,0.007c7.361,7.362 7.364,19.313 0.007,26.677l0.007,0.007l-26.684,26.684l-26.684,-26.684c-7.364,-7.363 -7.364,-19.32 0,-26.684c7.361,-7.361 19.313,-7.363 26.677,-0.007Z" style="fill:#c47dff;"/><path d="M473.797,339.323l-4.859,-4.857l-18.012,18.01c-0.647,0.646 -1.004,1.511 -1.001,2.428c0,0.918 0.354,1.781 1.001,2.428l18.012,18.012l4.859,-4.856l-15.583,-15.584l15.583,-15.581Z" style="fill:#ccffd6;fill-rule:nonzero;"/></g></g></g><defs><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-8.64246e-14,451.564,-803.856,-1.43038e-13,398.9,-3.51255)"><stop offset="0" style="stop-color:#022d62;stop-opacity:1"/><stop offset="0.28" style="stop-color:#0040a0;stop-opacity:1"/><stop offset="0.68" style="stop-color:#4289dc;stop-opacity:1"/><stop offset="1" style="stop-color:#5f4eb8;stop-opacity:1"/></linearGradient><radialGradient id="_Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(647.316,0,0,459.814,842.486,270.379)"><stop offset="0" style="stop-color:#cfcfcf;stop-opacity:0.65"/><stop offset="1" style="stop-color:#fff552;stop-opacity:0"/></radialGradient><linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.538323,-17.3125,1.44013,-0.04478,749.812,228.864)"><stop offset="0" style="stop-color:#e59f77;stop-opacity:1"/><stop offset="0.47" style="stop-color:#a46075;stop-opacity:1"/><stop offset="1" style="stop-color:#914d74;stop-opacity:1"/></linearGradient><linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(31.4265,292.145,-292.145,31.4265,112.513,159.153)"><stop offset="0" style="stop-color:#74597f;stop-opacity:1"/><stop offset="1" style="stop-color:#571547;stop-opacity:1"/></linearGradient><linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(19.1616,218.487,-218.487,19.1616,241.977,232.811)"><stop offset="0" style="stop-color:#362272;stop-opacity:1"/><stop offset="1" style="stop-color:#571548;stop-opacity:1"/></linearGradient><linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(46.7869,123.585,-71.5547,27.0893,259.972,327.713)"><stop offset="0" style="stop-color:#000418;stop-opacity:1"/><stop offset="1" style="stop-color:#571548;stop-opacity:1"/></linearGradient><linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,123.585,-123.585,0,315.105,327.713)"><stop offset="0" style="stop-color:#3a0843;stop-opacity:1"/><stop offset="1" style="stop-color:#9f5c6a;stop-opacity:1"/></linearGradient><linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(89.6564,47.8855,-47.8855,89.6564,162.618,355.527)"><stop offset="0" style="stop-color:#65436e;stop-opacity:1"/><stop offset="1" style="stop-color:#480445;stop-opacity:1"/></linearGradient><linearGradient id="_Linear10" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-7.19036,106.447,-106.447,-7.19036,77.8467,255.423)"><stop offset="0" style="stop-color:#9a76a4;stop-opacity:1"/><stop offset="1" style="stop-color:#654b8e;stop-opacity:1"/></linearGradient><linearGradient id="_Linear11" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(20.5602,1.9877e-06,-184.503,2.215e-07,11.2504,272.442)"><stop offset="0" style="stop-color:#223251;stop-opacity:1"/><stop offset="1" style="stop-color:#4f1557;stop-opacity:1"/></linearGradient><linearGradient id="_Linear12" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(314.21,0,0,9.97478,340.83,431.758)"><stop offset="0" style="stop-color:#a9abc1;stop-opacity:1"/><stop offset="0.11" style="stop-color:#65687d;stop-opacity:1"/><stop offset="0.5" style="stop-color:#c3c5d2;stop-opacity:1"/><stop offset="0.89" style="stop-color:#64677c;stop-opacity:1"/><stop offset="1" style="stop-color:#a4a7c2;stop-opacity:1"/></linearGradient></defs></svg>
assets/icons/lovelogo.svgnew file+1
@@ -0,0 +1 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 101 72" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="100.651" height="71.235" style="fill:none;"/><g id="Icon"><path d="M96.414,22.222l-18.005,-18.014l-4.857,4.857l15.576,15.585l-15.576,15.582l4.857,4.856l18.005,-18.007c0.649,-0.652 1.007,-1.516 1.007,-2.434c-0.003,-0.918 -0.358,-1.778 -1.007,-2.425" style="fill:#ccffd6;fill-rule:nonzero;"/><path d="M50.441,13.651c7.364,-7.356 19.315,-7.354 26.677,0.007c7.361,7.362 7.363,19.313 0.007,26.677l0.007,0.007l-26.684,26.684l-26.684,-26.684c-7.364,-7.363 -7.364,-19.32 0,-26.684c7.361,-7.361 19.312,-7.363 26.677,-0.007Z" style="fill:#c47dff;"/><path d="M27.102,26.276l-4.859,-4.858l-18.012,18.01c-0.647,0.647 -1.004,1.511 -1.002,2.428c0,0.919 0.355,1.781 1.002,2.428l18.012,18.012l4.859,-4.856l-15.583,-15.584l15.583,-15.58Z" style="fill:#ccffd6;fill-rule:nonzero;"/></g></svg>
assets/map.svg → assets/icons/map.svgrenamed

The content is the same.

assets/mapflipped.svg → assets/icons/mapflipped.svgrenamed

The content is the same.

assets/menu.svg → assets/icons/menu.svgrenamed

The content is the same.

assets/pslogo.svg → assets/icons/pslogo.svgrenamed

The content is the same.

assets/icons/trianglelogo.svgnew file+1
@@ -0,0 +1 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 39 34" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0,33.021l12.425,-21.521l3.753,6.5l-8.672,15.021l-7.506,0Zm24.85,0l-11.571,0l5.785,-10.021l5.786,10.021Zm13.279,0l-7.506,0l-15.311,-26.521l3.752,-6.5l19.065,33.021Z"/></svg>
assets/images/landingpagedark.svgnew file+1
@@ -0,0 +1 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 800 447" preserveAspectRatio="xMidYMax slice" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="800" height="446.374" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0" width="800" height="446.374"/></clipPath><g clip-path="url(#_clip1)"><g id="Background"><path d="M800.828,448.051l0,-451.564l-803.856,0l0,451.564l803.856,0Z" style="fill:url(#_Linear2);"/><ellipse cx="174.599" cy="310.24" rx="330.479" ry="252.189" style="fill:url(#_Radial3);"/></g><g id="Stars"><circle cx="362.644" cy="4.733" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="334.392" cy="11.38" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="369.845" cy="6.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="72.557" cy="31.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="49.291" cy="25.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="403.867" cy="17.97" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="125.013" cy="9.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="87.333" cy="15.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M709.089,15.919c-0.575,0.333 -1.312,0.135 -1.644,-0.44c-0.333,-0.576 -0.135,-1.313 0.44,-1.645c0.576,-0.332 1.313,-0.135 1.645,0.441c0.332,0.575 0.135,1.312 -0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M716.544,3.358c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M701.851,87.271c-0.342,0.198 -0.78,0.081 -0.977,-0.261c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.341 0.081,0.779 -0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M669.995,7.519c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.261,-0.976c0.342,-0.198 0.78,-0.081 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.032,24.138c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M614.599,24.138c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M691.664,7.383c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.163 1.996,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><circle cx="198.7" cy="7.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="244.102" cy="79.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M104.17,29.677c0.342,0.198 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="203.07" cy="73.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="193.264" cy="22.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="157.667" cy="14.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="261.444" cy="28.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="223.281" cy="52.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M583.698,25.392c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="330.57" cy="98.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="330.376" cy="79.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="365.972" cy="26.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="112.16" cy="59.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="800.966" cy="4.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.399" cy="127.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="771.687" cy="32.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.953" cy="26.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><path d="M44.17,26.599c0.342,-0.198 0.78,-0.08 0.977,0.262c0.198,0.341 0.08,0.779 -0.261,0.976c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="133.264" cy="33.817" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.667" cy="41.428" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="201.444" cy="28.019" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="163.281" cy="23.473" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M523.698,30.884c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.341 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="305.972" cy="29.398" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="769.852" cy="44.016" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="711.687" cy="24.074" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="734.953" cy="30.168" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="717.719" cy="10.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="756.911" cy="16.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M454.676,37.115c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.534c-0.404,0.698 -0.164,1.592 0.534,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.701,47.253c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M32.393,28.151c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.342 -0.08,0.779 0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M494.249,8.398c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M699.212,25.017c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M549.645,25.017c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M472.652,7.069c0.442,0.255 1.009,0.103 1.265,-0.339c0.255,-0.443 0.103,-1.01 -0.339,-1.265c-0.443,-0.256 -1.01,-0.104 -1.265,0.339c-0.256,0.442 -0.104,1.009 0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M416.68,31.856c0.488,0.282 1.112,0.114 1.394,-0.373c0.281,-0.488 0.114,-1.112 -0.374,-1.393c-0.487,-0.282 -1.112,-0.115 -1.393,0.373c-0.281,0.487 -0.114,1.112 0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M529.444,13.243c0.565,0.326 1.289,0.132 1.615,-0.433c0.326,-0.565 0.132,-1.289 -0.433,-1.615c-0.565,-0.326 -1.289,-0.133 -1.615,0.433c-0.326,0.565 -0.132,1.288 0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M498.917,29.864c0.52,0.3 1.186,0.122 1.486,-0.398c0.301,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.3,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="573.265" cy="5.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="648.544" cy="38.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="638.738" cy="17.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="274.158" cy="3.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="213.142" cy="10.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M173.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M323.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M353.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M383.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="254.174" cy="44.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="263.98" cy="23.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="299.577" cy="15.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="195.559" cy="38.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="233.963" cy="33.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M37.775,12.928c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="146.674" cy="49.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="126.868" cy="20.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="481.272" cy="27.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="735.084" cy="60.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M623.013,27.532c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.535,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M520.261,21.259c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.404,0.698 0.164,1.592 -0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M554.976,21.878c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.301,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="591.184" cy="24.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="208.506" cy="36.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="183.086" cy="22.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="153.07" cy="32.998" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="280.376" cy="27.009" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="62.16" cy="47.109" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="260.57" cy="57.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="740.966" cy="51.298" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.399" cy="55.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="778.687" cy="80.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.953" cy="74.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="726.231" cy="58.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="763.911" cy="64.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M462.155,64.919c0.575,0.333 1.312,0.135 1.644,-0.44c0.333,-0.576 0.135,-1.313 -0.44,-1.645c-0.576,-0.332 -1.313,-0.135 -1.645,0.441c-0.332,0.575 -0.135,1.312 0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M454.7,52.358c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M469.393,136.271c0.342,0.198 0.78,0.081 0.977,-0.261c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M501.249,56.519c0.342,0.197 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.081 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M706.212,73.138c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M556.645,73.138c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M729.58,36.383c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.163 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M548.231,56.532c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.535,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.163,1.592 0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M650.983,50.259c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M616.268,50.878c0.52,0.3 1.186,0.122 1.486,-0.398c0.3,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.301,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="580.06" cy="53.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="655.544" cy="86.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="645.738" cy="65.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="681.158" cy="31.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="610.142" cy="158.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M750.074,78.677c-0.342,0.198 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.262,-0.976c0.341,-0.198 0.779,-0.08 0.976,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="651.174" cy="122.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="660.98" cy="71.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="696.577" cy="63.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="592.8" cy="77.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="630.963" cy="81.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M270.546,74.392c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="533.674" cy="47.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="523.868" cy="128.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="488.272" cy="75.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="742.084" cy="108.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="53.278" cy="53.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="24.392" cy="61.26" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.845" cy="176.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="82.557" cy="81.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.291" cy="75.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="13.635" cy="87.617" r="1.228" style="fill:#fee;fill-opacity:0.69;"/><circle cx="136.525" cy="59.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.333" cy="65.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M399.568,66.115c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.699,-0.403 1.593,-0.164 1.996,0.534c0.403,0.698 0.163,1.592 -0.535,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M398.543,46.253c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M391.851,117.151c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.342 0.081,0.779 -0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M359.995,57.398c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977c0.342,-0.198 0.78,-0.08 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M155.032,74.017c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M304.599,74.017c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M381.592,56.069c-0.442,0.255 -1.009,0.103 -1.265,-0.339c-0.255,-0.443 -0.103,-1.01 0.339,-1.265c0.443,-0.256 1.01,-0.104 1.265,0.339c0.256,0.442 0.104,1.009 -0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M437.564,80.856c-0.488,0.282 -1.112,0.114 -1.393,-0.373c-0.282,-0.488 -0.115,-1.112 0.373,-1.393c0.487,-0.282 1.112,-0.115 1.393,0.373c0.282,0.487 0.114,1.112 -0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M314.8,32.243c-0.565,0.326 -1.288,0.132 -1.615,-0.433c-0.326,-0.565 -0.132,-1.289 0.433,-1.615c0.565,-0.326 1.289,-0.133 1.615,0.433c0.326,0.565 0.132,1.288 -0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M355.327,78.864c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.3,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="280.979" cy="54.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="205.7" cy="87.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="215.506" cy="176.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="190.086" cy="52.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="251.102" cy="59.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M301.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M151.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M121.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M91.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="210.07" cy="93.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="200.264" cy="72.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="164.667" cy="64.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="268.685" cy="127.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="230.281" cy="82.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M426.469,61.928c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="327.57" cy="48.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="337.376" cy="69.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="372.972" cy="76.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="119.16" cy="109.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/></g><g id="Clouds"><path id="_-Curve-" serif:id="(Curve)" d="M610.291,177.316c-35.879,-0.428 -84.67,-0.691 -138.392,-0.689c-38.684,0.002 -74.811,0.141 -105.402,0.38c-49.14,-2.745 -80.877,-9.954 -80.877,-14.718c0,-1.333 2.655,0.335 7.294,-0.896c96.772,-0.175 171.302,-1.213 171.302,-2.464c0,-1.107 -59.462,-3.372 -140.106,-3.687c38.487,-2.059 102.543,-4.972 173.823,-4.972c11.996,0 23.761,0.07 35.216,0.206c20.76,-4.638 60.945,-2.784 107.07,-2.784c36.08,0 68.525,-0.075 90.882,2.983c32.491,0.899 72.142,-1.186 114.922,-0.379c38.68,0.729 74.805,1.273 105.395,1.613c49.101,3.673 80.599,8.516 80.54,13.279c-0.016,1.334 -2.504,2.58 -7.158,3.723c-96.763,-1.654 -171.297,-2.024 -171.312,-0.774c-0.013,1.108 58.473,3.15 139.105,4.989c-38.514,3.085 -101.653,4.38 -172.925,3.033c-11.995,-0.227 -23.757,-0.52 -35.209,-0.872c-20.815,4.245 -61.034,6.631 -107.154,5.759c-24.754,-0.468 -47.786,-1.809 -67.014,-3.73Z" style="fill:#240c3c;"/><path id="_-Curve-1" serif:id="(Curve)" d="M609.299,171.607c-35.88,-0.338 -84.67,-0.545 -138.392,-0.543c-38.684,0.001 -74.812,0.111 -105.402,0.299c-49.141,-2.166 -80.694,-5.519 -80.694,-9.279c0,-1.052 2.472,-2.073 7.111,-3.045c96.772,-0.137 171.302,-0.957 171.302,-1.944c-0.001,-0.874 -58.506,-1.614 -139.15,-1.862c38.471,-3.009 101.587,-4.973 172.867,-4.973c11.996,0 23.761,0.055 35.216,0.162c20.76,-3.66 60.945,-6.143 107.07,-6.143c36.08,0 68.525,1.519 90.882,3.933c32.491,0.709 72.142,1.432 114.922,2.069c38.68,0.575 74.805,1.005 105.395,1.272c49.101,2.9 80.598,6.722 80.54,10.482c-0.017,1.052 -2.505,2.036 -7.158,2.938c-96.763,-1.305 -171.297,-1.597 -171.312,-0.611c-0.014,0.875 58.473,2.486 139.104,3.938c-38.514,2.435 -101.653,3.457 -172.924,2.394c-11.995,-0.179 -23.758,-0.41 -35.21,-0.688c-20.814,3.35 -61.033,5.234 -107.153,4.545c-24.754,-0.369 -47.786,-1.428 -67.014,-2.944Z" style="fill:#120b38;"/><path d="M684.234,222.269c-12.108,-1.642 -29.721,-2.832 -29.76,-5.218c-0.063,-3.861 34.226,-4.225 76.6,-3.504c42.375,0.721 75.9,-2.707 76.956,1.008c2.476,8.704 -12.549,8.552 -32.56,10.141c-12.403,-0.58 -28.24,0.216 -44.434,0.479c-16.193,0.263 -35.197,-1.331 -46.802,-2.906Z" style="fill:url(#_Linear4);"/><path d="M130.064,213.821c42.381,0 76.789,0.237 76.789,4.224c0,3.986 -14.408,4.223 -56.789,4.223c-42.38,0 -96.788,0.208 -96.788,-4.223c0,-4.431 34.408,-4.224 76.788,-4.224Z" style="fill:#a7847d;"/></g><g id="Mountains"><path d="M476.098,218.299l81.644,216.765l-205.408,0l123.764,-216.765Z" style="fill:#04102d;"/><path d="M476.098,218.299l21.823,203.477l81.177,-8.706l-103,-194.771Z" style="fill:#250849;"/><path d="M369.627,308.648l88.326,125.788l-205.407,0l117.081,-125.788Z" style="fill:#04102d;"/><path d="M326.11,338.332l68.193,96.732l-205.407,0l137.214,-96.732Z" style="fill:#04102d;"/><path d="M508.168,243.792l163.526,204.747l-256.643,0l93.117,-204.747Z" style="fill:#04102d;"/><path d="M508.168,245.355l63.395,75.115l-54.953,46.379l-8.442,-121.494Z" style="fill:#250849;"/><path d="M369.612,308.648l54.182,77.687l-58.981,41.135l4.799,-118.822Z" style="fill:#250849;"/><path d="M326.184,338.326l16.813,23.99l-16.887,11.835l0.074,-35.825Z" style="fill:#250849;"/><path d="M633.647,230.42l175.693,204.644l-351.387,0l175.694,-204.644Z" style="fill:#04102d;"/><path d="M633.647,230.42l101.573,245.129l86.041,-35.653l-187.614,-209.476Z" style="fill:#250849;"/><path d="M643.625,254.389c-0.57,0.219 -0.744,0.283 -1.862,0.819c-2.862,1.393 -6.074,3.204 -9.177,2.636c-6.182,-1.132 -10.808,-6.27 -16.675,-6.724l17.736,-20.7l9.978,23.969Z" style="fill:#655578;"/><path d="M654.153,253.404c-0.495,-0.027 -0.799,-0.017 -0.799,-0.017c-3.255,-0.486 -6.617,-0.192 -9.677,0.982l-0.052,0.02l-9.978,-23.969l20.506,22.984Z" style="fill:#9d779e;"/></g><g id="Buildings"><path d="M195.171,451.298l0,-292.145l-102.462,0l0,292.145l102.462,0Z" style="fill:url(#_Linear5);"/><path d="M289.755,451.298l0,-218.487l-57.232,0l0,218.487l57.232,0Z" style="fill:url(#_Linear6);"/><path d="M323.451,451.298l0,-123.585l-71.555,0l0,123.585l71.555,0Z" style="fill:url(#_Linear7);"/><path d="M207.557,451.298l0,-218.487l25.314,0l0,218.487l-25.314,0Z" style="fill:#130425;"/><path d="M92.709,451.298l0,-292.145l25.314,0l0,292.145l-25.314,0Z" style="fill:#130425;"/><path d="M323.451,451.298l0,-123.585l-16.692,0l0,123.585l16.692,0Z" style="fill:url(#_Linear8);"/><path d="M272.498,451.298l0,-95.771l-136.555,0l0,95.771l136.555,0Z" style="fill:url(#_Linear9);"/><path d="M85.122,451.298l0,-178.856l-97.675,0l0,178.856l97.675,0Z" style="fill:url(#_Linear10);"/><path d="M173.526,451.298l0,-95.771l-37.583,0l0,95.771l37.583,0Z" style="fill:#2e1232;"/><path d="M66.649,456.944l0,-184.502l-69.677,0l0,184.502l69.677,0Z" style="fill:url(#_Linear11);"/></g><rect x="-3.028" y="431.298" width="826.844" height="20.006" style="fill:#253141;"/><g id="Laptop"><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M599.193,275.905c0,-3.05 -2.476,-5.526 -5.526,-5.526l-193.063,0c-3.05,0 -5.526,2.476 -5.526,5.526l0,141.039c0,3.05 2.476,5.526 5.526,5.526l193.063,0c3.05,0 5.526,-2.476 5.526,-5.526l0,-141.039Z" style="fill:#130c2b;"/><path d="M655.04,427.228c0,-0.252 -0.205,-0.457 -0.457,-0.457c-13.334,0 -313.753,0 -313.753,0l0,4.975c0,2.761 2.239,5 5,5c36.953,0 267.257,0 304.21,0c2.761,0 5,-2.239 5,-5c0,-1.845 0,-3.687 0,-4.518Z" style="fill:url(#_Linear12);"/><circle id="Camera" cx="497.178" cy="267.001" r="1.238" style="fill-opacity:0.45;"/><circle id="Mic" cx="500.009" cy="267.001" r="0.527" style="fill-opacity:0.45;"/><circle id="Ambient-Light-" serif:id="Ambient Light?" cx="494.263" cy="267.001" r="0.527" style="fill:#102708;fill-opacity:0.45;"/><g id="Icon"><path d="M543.109,335.27l-18.005,-18.014l-4.857,4.857l15.576,15.585l-15.576,15.582l4.857,4.856l18.005,-18.007c0.649,-0.652 1.008,-1.516 1.008,-2.434c-0.004,-0.918 -0.359,-1.778 -1.008,-2.425" style="fill:#ccffd6;fill-rule:nonzero;"/><path d="M497.136,326.699c7.364,-7.356 19.316,-7.354 26.677,0.007c7.361,7.362 7.364,19.313 0.007,26.677l0.007,0.007l-26.684,26.684l-26.684,-26.684c-7.364,-7.363 -7.364,-19.32 0,-26.684c7.361,-7.361 19.313,-7.363 26.677,-0.007Z" style="fill:#c47dff;"/><path d="M473.797,339.323l-4.859,-4.857l-18.012,18.01c-0.647,0.646 -1.004,1.511 -1.001,2.428c0,0.918 0.354,1.781 1.001,2.428l18.012,18.012l4.859,-4.856l-15.583,-15.584l15.583,-15.581Z" style="fill:#ccffd6;fill-rule:nonzero;"/></g></g></g><defs><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-8.64246e-14,451.564,-803.856,-1.43038e-13,398.9,-3.51255)"><stop offset="0" style="stop-color:#000434;stop-opacity:1"/><stop offset="0.28" style="stop-color:#171043;stop-opacity:1"/><stop offset="0.68" style="stop-color:#573774;stop-opacity:1"/><stop offset="1" style="stop-color:#b8734e;stop-opacity:1"/></linearGradient><radialGradient id="_Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(330.479,0,0,252.189,174.599,310.24)"><stop offset="0" style="stop-color:#f60;stop-opacity:0.3"/><stop offset="1" style="stop-color:#fff552;stop-opacity:0"/></radialGradient><linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.538323,-17.3125,1.44013,-0.04478,749.812,228.864)"><stop offset="0" style="stop-color:#e59f77;stop-opacity:1"/><stop offset="0.47" style="stop-color:#a46075;stop-opacity:1"/><stop offset="1" style="stop-color:#914d74;stop-opacity:1"/></linearGradient><linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(31.4265,292.145,-292.145,31.4265,112.513,159.153)"><stop offset="0" style="stop-color:#08001b;stop-opacity:1"/><stop offset="1" style="stop-color:#571547;stop-opacity:1"/></linearGradient><linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(19.1616,218.487,-218.487,19.1616,241.977,232.811)"><stop offset="0" style="stop-color:#000418;stop-opacity:1"/><stop offset="1" style="stop-color:#571548;stop-opacity:1"/></linearGradient><linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(46.7869,123.585,-71.5547,27.0893,259.972,327.713)"><stop offset="0" style="stop-color:#000418;stop-opacity:1"/><stop offset="1" style="stop-color:#571548;stop-opacity:1"/></linearGradient><linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,123.585,-123.585,0,315.105,327.713)"><stop offset="0" style="stop-color:#3a0843;stop-opacity:1"/><stop offset="1" style="stop-color:#9f5c6a;stop-opacity:1"/></linearGradient><linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(89.6564,47.8855,-47.8855,89.6564,162.618,355.527)"><stop offset="0" style="stop-color:#2c1d2f;stop-opacity:1"/><stop offset="1" style="stop-color:#480445;stop-opacity:1"/></linearGradient><linearGradient id="_Linear10" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-7.19036,106.447,-106.447,-7.19036,77.8467,255.423)"><stop offset="0" style="stop-color:#2c1d2f;stop-opacity:1"/><stop offset="1" style="stop-color:#480445;stop-opacity:1"/></linearGradient><linearGradient id="_Linear11" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(20.5602,1.9877e-06,-184.503,2.215e-07,11.2504,272.442)"><stop offset="0" style="stop-color:#000624;stop-opacity:1"/><stop offset="1" style="stop-color:#4f1557;stop-opacity:1"/></linearGradient><linearGradient id="_Linear12" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(314.21,0,0,9.97478,340.83,431.758)"><stop offset="0" style="stop-color:#a9abc1;stop-opacity:1"/><stop offset="0.11" style="stop-color:#65687d;stop-opacity:1"/><stop offset="0.5" style="stop-color:#c3c5d2;stop-opacity:1"/><stop offset="0.89" style="stop-color:#64677c;stop-opacity:1"/><stop offset="1" style="stop-color:#a4a7c2;stop-opacity:1"/></linearGradient></defs></svg>
assets/images/landingpagelight.svgnew file+1
@@ -0,0 +1 @@
1+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 800 447" preserveAspectRatio="xMidYMax slice" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="800" height="446.374" style="fill:none;"/><clipPath id="_clip1"><rect x="0" y="0" width="800" height="446.374"/></clipPath><g clip-path="url(#_clip1)"><g id="Background"><path d="M800.828,448.051l0,-451.564l-803.856,0l0,451.564l803.856,0Z" style="fill:url(#_Linear2);"/><ellipse cx="720.558" cy="355.142" rx="647.316" ry="309.935" style="fill:url(#_Radial3);"/></g><g id="Stars" opacity="0.15"><circle cx="362.644" cy="4.733" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="334.392" cy="11.38" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="369.845" cy="6.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="49.291" cy="25.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="403.867" cy="17.97" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="125.013" cy="9.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="87.333" cy="15.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M709.089,15.919c-0.575,0.333 -1.312,0.135 -1.644,-0.44c-0.333,-0.576 -0.135,-1.313 0.44,-1.645c0.576,-0.332 1.313,-0.135 1.645,0.441c0.332,0.575 0.135,1.312 -0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M716.544,3.358c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M701.851,87.271c-0.342,0.198 -0.78,0.081 -0.977,-0.261c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.341 0.081,0.779 -0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M669.995,7.519c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.261,-0.976c0.342,-0.198 0.78,-0.081 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.032,24.138c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M614.599,24.138c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M691.664,7.383c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.163 1.996,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><circle cx="198.7" cy="7.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="244.102" cy="79.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M104.17,29.677c0.342,0.198 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="203.07" cy="73.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="193.264" cy="22.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="157.667" cy="14.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="261.444" cy="28.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="223.281" cy="52.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M583.698,25.392c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="330.57" cy="98.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="330.376" cy="79.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="365.972" cy="26.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="112.16" cy="59.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="800.966" cy="4.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.399" cy="127.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="771.687" cy="32.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="794.953" cy="26.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><path d="M44.17,26.599c0.342,-0.198 0.78,-0.08 0.977,0.262c0.198,0.341 0.08,0.779 -0.261,0.976c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="133.264" cy="33.817" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.667" cy="41.428" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="201.444" cy="28.019" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="163.281" cy="23.473" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M523.698,30.884c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.341 0.08,0.779 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="305.972" cy="29.398" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="769.852" cy="44.016" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="711.687" cy="24.074" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="734.953" cy="30.168" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="717.719" cy="10.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="756.911" cy="16.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M454.676,37.115c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.534c-0.404,0.698 -0.164,1.592 0.534,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M465.701,47.253c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M32.393,28.151c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.342 -0.08,0.779 0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M494.249,8.398c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M699.212,25.017c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M549.645,25.017c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M472.652,7.069c0.442,0.255 1.009,0.103 1.265,-0.339c0.255,-0.443 0.103,-1.01 -0.339,-1.265c-0.443,-0.256 -1.01,-0.104 -1.265,0.339c-0.256,0.442 -0.104,1.009 0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M416.68,31.856c0.488,0.282 1.112,0.114 1.394,-0.373c0.281,-0.488 0.114,-1.112 -0.374,-1.393c-0.487,-0.282 -1.112,-0.115 -1.393,0.373c-0.281,0.487 -0.114,1.112 0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M529.444,13.243c0.565,0.326 1.289,0.132 1.615,-0.433c0.326,-0.565 0.132,-1.289 -0.433,-1.615c-0.565,-0.326 -1.289,-0.133 -1.615,0.433c-0.326,0.565 -0.132,1.288 0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M498.917,29.864c0.52,0.3 1.186,0.122 1.486,-0.398c0.301,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.3,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="573.265" cy="5.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="648.544" cy="38.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="638.738" cy="17.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="274.158" cy="3.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="213.142" cy="10.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M173.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M323.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M353.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M383.074,50.556c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.198 0.779,-0.08 0.976,0.262c0.198,0.341 0.08,0.779 -0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="254.174" cy="44.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="263.98" cy="23.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="299.577" cy="15.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="195.559" cy="38.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="233.963" cy="33.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M37.775,12.928c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.779 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="146.674" cy="49.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="126.868" cy="20.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="481.272" cy="27.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="735.084" cy="60.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M623.013,27.532c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.535,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.403,0.698 0.163,1.592 -0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M520.261,21.259c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.698,-0.403 1.592,-0.164 1.995,0.535c0.404,0.698 0.164,1.592 -0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M554.976,21.878c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.301,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="591.184" cy="24.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="208.506" cy="36.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="183.086" cy="22.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="153.07" cy="32.998" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="280.376" cy="27.009" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="62.16" cy="47.109" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="260.57" cy="57.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="740.966" cy="51.298" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.399" cy="55.949" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="778.687" cy="80.323" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="801.953" cy="74.229" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><ellipse cx="726.231" cy="58.633" rx="0.737" ry="0.821" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="763.911" cy="64.439" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M462.155,64.919c0.575,0.333 1.312,0.135 1.644,-0.44c0.333,-0.576 0.135,-1.313 -0.44,-1.645c-0.576,-0.332 -1.313,-0.135 -1.645,0.441c-0.332,0.575 -0.135,1.312 0.441,1.644Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M454.7,52.358c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.341 0.08,-0.779 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.78 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M469.393,136.271c0.342,0.198 0.78,0.081 0.977,-0.261c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.341,-0.197 -0.779,-0.08 -0.976,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M501.249,56.519c0.342,0.197 0.78,0.08 0.977,-0.262c0.198,-0.341 0.08,-0.779 -0.261,-0.976c-0.342,-0.198 -0.78,-0.081 -0.977,0.261c-0.198,0.342 -0.08,0.78 0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M706.212,73.138c0.342,0.197 0.78,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.779,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M556.645,73.138c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M729.58,36.383c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.163 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M548.231,56.532c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.535,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.163,1.592 0.535,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M650.983,50.259c0.698,0.403 1.592,0.163 1.995,-0.535c0.403,-0.698 0.164,-1.592 -0.534,-1.995c-0.698,-0.403 -1.592,-0.164 -1.995,0.535c-0.403,0.698 -0.164,1.592 0.534,1.995Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M616.268,50.878c0.52,0.3 1.186,0.122 1.486,-0.398c0.3,-0.52 0.122,-1.186 -0.398,-1.486c-0.52,-0.3 -1.186,-0.122 -1.486,0.398c-0.301,0.52 -0.122,1.186 0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="580.06" cy="53.216" r="0.762" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="655.544" cy="86.738" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="645.738" cy="65.92" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="681.158" cy="31.385" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="610.142" cy="158.308" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M750.074,78.677c-0.342,0.198 -0.78,0.08 -0.977,-0.262c-0.198,-0.341 -0.08,-0.779 0.262,-0.976c0.341,-0.198 0.779,-0.08 0.976,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="651.174" cy="122.278" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="660.98" cy="71.459" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="696.577" cy="63.848" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="592.8" cy="77.257" r="0.805" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="630.963" cy="81.803" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M270.546,74.392c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.341 -0.08,-0.779 0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="533.674" cy="47.448" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="523.868" cy="128.267" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="488.272" cy="75.878" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="742.084" cy="108.167" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="53.278" cy="53.978" r="0.826" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="24.392" cy="61.26" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.845" cy="176.828" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="82.557" cy="81.202" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="59.291" cy="75.108" r="1.461" style="fill:#fee;fill-opacity:0.69;"/><circle cx="13.635" cy="87.617" r="1.228" style="fill:#fee;fill-opacity:0.69;"/><circle cx="136.525" cy="59.364" r="0.673" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="97.333" cy="65.319" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M399.568,66.115c-0.698,0.403 -1.592,0.163 -1.995,-0.535c-0.403,-0.698 -0.164,-1.592 0.534,-1.995c0.699,-0.403 1.593,-0.164 1.996,0.534c0.403,0.698 0.163,1.592 -0.535,1.996Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M398.543,46.253c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M391.851,117.151c-0.342,0.197 -0.78,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.78 0.262,-0.977c0.341,-0.197 0.779,-0.08 0.976,0.262c0.198,0.342 0.081,0.779 -0.261,0.977Z" style="fill:#fffeee;fill-opacity:0.69;"/><path d="M359.995,57.398c-0.342,0.198 -0.78,0.08 -0.977,-0.261c-0.198,-0.342 -0.08,-0.78 0.261,-0.977c0.342,-0.198 0.78,-0.08 0.977,0.261c0.198,0.342 0.08,0.78 -0.261,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M155.032,74.017c-0.342,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.779,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M304.599,74.017c-0.341,0.197 -0.779,0.08 -0.977,-0.262c-0.197,-0.342 -0.08,-0.779 0.262,-0.977c0.342,-0.197 0.78,-0.08 0.977,0.262c0.197,0.342 0.08,0.78 -0.262,0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M381.592,56.069c-0.442,0.255 -1.009,0.103 -1.265,-0.339c-0.255,-0.443 -0.103,-1.01 0.339,-1.265c0.443,-0.256 1.01,-0.104 1.265,0.339c0.256,0.442 0.104,1.009 -0.339,1.265Z" style="fill:#fee;fill-opacity:0.69;"/><path d="M437.564,80.856c-0.488,0.282 -1.112,0.114 -1.393,-0.373c-0.282,-0.488 -0.115,-1.112 0.373,-1.393c0.487,-0.282 1.112,-0.115 1.393,0.373c0.282,0.487 0.114,1.112 -0.373,1.393Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M314.8,32.243c-0.565,0.326 -1.288,0.132 -1.615,-0.433c-0.326,-0.565 -0.132,-1.289 0.433,-1.615c0.565,-0.326 1.289,-0.133 1.615,0.433c0.326,0.565 0.132,1.288 -0.433,1.615Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M355.327,78.864c-0.52,0.3 -1.186,0.122 -1.486,-0.398c-0.3,-0.52 -0.122,-1.186 0.398,-1.486c0.52,-0.3 1.186,-0.122 1.486,0.398c0.3,0.52 0.122,1.186 -0.398,1.486Z" style="fill:#fff8e8;fill-opacity:0.69;"/><circle cx="280.979" cy="54.3" r="0.967" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="205.7" cy="87.618" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="215.506" cy="176.799" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="190.086" cy="52.264" r="1.069" style="fill:#fee;fill-opacity:0.69;"/><circle cx="251.102" cy="59.187" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M301.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M151.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M121.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><path d="M91.17,49.556c0.342,0.198 0.78,0.08 0.977,-0.261c0.198,-0.342 0.08,-0.78 -0.261,-0.977c-0.342,-0.198 -0.78,-0.08 -0.977,0.262c-0.198,0.341 -0.08,0.779 0.261,0.976Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="210.07" cy="93.157" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="200.264" cy="72.339" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="164.667" cy="64.727" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="268.685" cy="127.849" r="1.461" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="230.281" cy="82.683" r="1.088" style="fill:#fff8e8;fill-opacity:0.69;"/><path d="M426.469,61.928c-0.342,-0.197 -0.78,-0.08 -0.977,0.262c-0.197,0.342 -0.08,0.779 0.262,0.977c0.342,0.197 0.779,0.08 0.977,-0.262c0.197,-0.342 0.08,-0.78 -0.262,-0.977Z" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="327.57" cy="48.327" r="0.715" style="fill:#fffeee;fill-opacity:0.69;"/><circle cx="337.376" cy="69.146" r="0.715" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="372.972" cy="76.758" r="0.496" style="fill:#eeefff;fill-opacity:0.69;"/><circle cx="119.16" cy="109.046" r="0.44" style="fill:#eeefff;fill-opacity:0.69;"/></g><g id="Clouds"><path id="_-Curve-" serif:id="(Curve)" d="M610.291,177.316c-35.879,-0.428 -84.67,-0.691 -138.392,-0.689c-38.684,0.002 -74.811,0.141 -105.402,0.38c-49.14,-2.745 -80.877,-9.954 -80.877,-14.718c0,-1.333 2.655,0.335 7.294,-0.896c96.772,-0.175 171.302,-1.213 171.302,-2.464c0,-1.107 -59.462,-3.372 -140.106,-3.687c38.487,-2.059 102.543,-4.972 173.823,-4.972c11.996,0 23.761,0.07 35.216,0.206c20.76,-4.638 60.945,-2.784 107.07,-2.784c36.08,0 68.525,-0.075 90.882,2.983c32.491,0.899 72.142,-1.186 114.922,-0.379c38.68,0.729 74.805,1.273 105.395,1.613c49.101,3.673 80.599,8.516 80.54,13.279c-0.016,1.334 -2.504,2.58 -7.158,3.723c-96.763,-1.654 -171.297,-2.024 -171.312,-0.774c-0.013,1.108 58.473,3.15 139.105,4.989c-38.514,3.085 -101.653,4.38 -172.925,3.033c-11.995,-0.227 -23.757,-0.52 -35.209,-0.872c-20.815,4.245 -61.034,6.631 -107.154,5.759c-24.754,-0.468 -47.786,-1.809 -67.014,-3.73Z" style="fill:#ddf0fb;"/><path id="_-Curve-1" serif:id="(Curve)" d="M609.299,171.607c-35.88,-0.338 -84.67,-0.545 -138.392,-0.543c-38.684,0.001 -74.812,0.111 -105.402,0.299c-49.141,-2.166 -80.694,-5.519 -80.694,-9.279c0,-1.052 2.472,-2.073 7.111,-3.045c96.772,-0.137 171.302,-0.957 171.302,-1.944c-0.001,-0.874 -58.506,-1.614 -139.15,-1.862c38.471,-3.009 101.587,-4.973 172.867,-4.973c11.996,0 23.761,0.055 35.216,0.162c20.76,-3.66 60.945,-6.143 107.07,-6.143c36.08,0 68.525,1.519 90.882,3.933c32.491,0.709 72.142,1.432 114.922,2.069c38.68,0.575 74.805,1.005 105.395,1.272c49.101,2.9 80.598,6.722 80.54,10.482c-0.017,1.052 -2.505,2.036 -7.158,2.938c-96.763,-1.305 -171.297,-1.597 -171.312,-0.611c-0.014,0.875 58.473,2.486 139.104,3.938c-38.514,2.435 -101.653,3.457 -172.924,2.394c-11.995,-0.179 -23.758,-0.41 -35.21,-0.688c-20.814,3.35 -61.033,5.234 -107.153,4.545c-24.754,-0.369 -47.786,-1.428 -67.014,-2.944Z" style="fill:#d8effd;"/><path d="M684.234,222.269c-12.108,-1.642 -29.721,-2.832 -29.76,-5.218c-0.063,-3.861 34.226,-4.225 76.6,-3.504c42.375,0.721 75.9,-2.707 76.956,1.008c2.476,8.704 -12.549,8.552 -32.56,10.141c-12.403,-0.58 -28.24,0.216 -44.434,0.479c-16.193,0.263 -35.197,-1.331 -46.802,-2.906Z" style="fill:#d8effd;"/><path d="M130.064,213.821c42.381,0 76.789,0.237 76.789,4.224c0,3.986 -14.408,4.223 -56.789,4.223c-42.38,0 -96.788,0.208 -96.788,-4.223c0,-4.431 34.408,-4.224 76.788,-4.224Z" style="fill:#d8effd;"/></g><g id="Mountains"><path d="M476.098,218.299l81.644,216.765l-205.408,0l123.764,-216.765Z" style="fill:#4560a0;"/><path d="M476.098,218.299l21.823,203.477l81.177,-8.706l-103,-194.771Z" style="fill:#5e84ba;"/><path d="M369.627,308.648l88.326,125.788l-205.407,0l117.081,-125.788Z" style="fill:#4560a0;"/><path d="M326.11,338.332l68.193,96.732l-205.407,0l137.214,-96.732Z" style="fill:#4560a0;"/><path d="M508.168,243.792l163.526,204.747l-256.643,0l93.117,-204.747Z" style="fill:#4560a0;"/><path d="M508.168,245.355l63.395,75.115l-54.953,46.379l-8.442,-121.494Z" style="fill:#5e84ba;"/><path d="M369.612,308.648l54.182,77.687l-58.981,41.135l4.799,-118.822Z" style="fill:#5e84ba;"/><path d="M326.184,338.326l16.813,23.99l-16.887,11.835l0.074,-35.825Z" style="fill:#5e84ba;"/><path d="M633.647,230.42l175.693,204.644l-351.387,0l175.694,-204.644Z" style="fill:#4560a0;"/><path d="M633.647,230.42l101.573,245.129l86.041,-35.653l-187.614,-209.476Z" style="fill:#5e84ba;"/><path d="M643.625,254.384c-0.571,0.219 -0.745,0.283 -1.863,0.82c-2.864,1.395 -6.079,3.209 -9.184,2.64c-6.187,-1.134 -10.854,-6.283 -16.725,-6.738l17.786,-20.729l9.986,24.007Z" style="fill:#d9d9d9;"/><path d="M654.229,253.4c-0.494,-0.028 -0.875,-0.013 -0.875,-0.013c-3.255,-0.486 -6.617,-0.192 -9.677,0.982l-0.052,0.02l-9.978,-23.97l20.582,22.981Z" style="fill:#fff;"/></g><g id="Buildings"><path d="M195.171,451.298l0,-292.145l-102.462,0l0,292.145l102.462,0Z" style="fill:url(#_Linear4);"/><path d="M289.755,451.298l0,-218.487l-57.232,0l0,218.487l57.232,0Z" style="fill:url(#_Linear5);"/><path d="M323.451,451.298l0,-123.585l-71.555,0l0,123.585l71.555,0Z" style="fill:#b4dbfb;"/><path d="M207.557,451.298l0,-218.487l25.314,0l0,218.487l-25.314,0Z" style="fill:#b4dbfb;"/><path d="M92.709,451.298l0,-292.145l25.314,0l0,292.145l-25.314,0Z" style="fill:#b4dbfb;"/><path d="M323.451,451.298l0,-123.585l-16.692,0l0,123.585l16.692,0Z" style="fill:url(#_Linear6);"/><path d="M272.498,451.298l0,-95.771l-136.555,0l0,95.771l136.555,0Z" style="fill:url(#_Linear7);"/><path d="M85.122,451.298l0,-178.856l-97.675,0l0,178.856l97.675,0Z" style="fill:url(#_Linear8);"/><path d="M173.526,451.298l0,-95.771l-37.583,0l0,95.771l37.583,0Z" style="fill:#b4dbfb;"/><path d="M66.649,456.944l0,-184.502l-69.677,0l0,184.502l69.677,0Z" style="fill:#b4dbfb;"/></g><rect x="-3.028" y="431.298" width="826.844" height="20.006" style="fill:#fafafa;"/><g id="Laptop"><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M606.064,273.603c0,-6.261 -5.076,-11.337 -11.337,-11.337c-37.536,0 -157.517,0 -195.054,0c-6.261,0 -11.337,5.076 -11.337,11.337c0,33.077 0,128.577 0,151.521c0,1.326 0.527,2.598 1.465,3.536c0.938,0.937 2.209,1.464 3.535,1.464c29.3,0 178.429,0 207.728,0c1.326,0 2.598,-0.527 3.536,-1.464c0.937,-0.938 1.464,-2.21 1.464,-3.536c0,-22.944 0,-118.444 0,-151.521Z" style="fill:#657390;"/><path d="M599.193,275.905c0,-3.05 -2.476,-5.526 -5.526,-5.526l-193.063,0c-3.05,0 -5.526,2.476 -5.526,5.526l0,141.039c0,3.05 2.476,5.526 5.526,5.526l193.063,0c3.05,0 5.526,-2.476 5.526,-5.526l0,-141.039Z" style="fill:#130c2b;"/><path d="M655.04,427.228c0,-0.252 -0.205,-0.457 -0.457,-0.457c-13.334,0 -313.753,0 -313.753,0l0,4.975c0,2.761 2.239,5 5,5c36.953,0 267.257,0 304.21,0c2.761,0 5,-2.239 5,-5c0,-1.845 0,-3.687 0,-4.518Z" style="fill:url(#_Linear9);"/><circle id="Camera" cx="497.178" cy="267.001" r="1.238" style="fill-opacity:0.45;"/><circle id="Mic" cx="500.009" cy="267.001" r="0.527" style="fill-opacity:0.45;"/><circle id="Ambient-Light-" serif:id="Ambient Light?" cx="494.263" cy="267.001" r="0.527" style="fill:#102708;fill-opacity:0.45;"/><g id="Icon"><path d="M543.109,335.27l-18.005,-18.014l-4.857,4.857l15.576,15.585l-15.576,15.582l4.857,4.856l18.005,-18.007c0.649,-0.652 1.008,-1.516 1.008,-2.434c-0.004,-0.918 -0.359,-1.778 -1.008,-2.425" style="fill:#ccffd6;fill-rule:nonzero;"/><path d="M497.136,326.699c7.364,-7.356 19.316,-7.354 26.677,0.007c7.361,7.362 7.364,19.313 0.007,26.677l0.007,0.007l-26.684,26.684l-26.684,-26.684c-7.364,-7.363 -7.364,-19.32 0,-26.684c7.361,-7.361 19.313,-7.363 26.677,-0.007Z" style="fill:#c47dff;"/><path d="M473.797,339.323l-4.859,-4.857l-18.012,18.01c-0.647,0.646 -1.004,1.511 -1.001,2.428c0,0.918 0.354,1.781 1.001,2.428l18.012,18.012l4.859,-4.856l-15.583,-15.584l15.583,-15.581Z" style="fill:#ccffd6;fill-rule:nonzero;"/></g></g></g><defs><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-8.64246e-14,451.564,-803.856,-1.43038e-13,398.9,-3.51255)"><stop offset="0" style="stop-color:#68adfc;stop-opacity:1"/><stop offset="0.34" style="stop-color:#cbe0f8;stop-opacity:1"/><stop offset="1" style="stop-color:#d2cbf8;stop-opacity:1"/></linearGradient><radialGradient id="_Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(647.316,0,0,309.935,720.558,355.142)"><stop offset="0" style="stop-color:#cfcfcf;stop-opacity:0.65"/><stop offset="1" style="stop-color:#fff552;stop-opacity:0"/></radialGradient><linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(31.4265,292.145,-292.145,31.4265,112.513,159.153)"><stop offset="0" style="stop-color:#bde8f7;stop-opacity:1"/><stop offset="1" style="stop-color:#86b6fe;stop-opacity:1"/></linearGradient><linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(19.1616,218.487,-218.487,19.1616,241.977,232.811)"><stop offset="0" style="stop-color:#bde8f7;stop-opacity:1"/><stop offset="1" style="stop-color:#86b6fe;stop-opacity:1"/></linearGradient><linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,123.585,-123.585,0,315.105,327.713)"><stop offset="0" style="stop-color:#bde8f7;stop-opacity:1"/><stop offset="1" style="stop-color:#86b6fe;stop-opacity:1"/></linearGradient><linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(47.6759,123.555,-123.555,47.6759,204.22,342.055)"><stop offset="0" style="stop-color:#bde8f7;stop-opacity:1"/><stop offset="1" style="stop-color:#86b6fe;stop-opacity:1"/></linearGradient><linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.16924e-14,190.951,-190.951,1.16924e-14,77.8467,255.423)"><stop offset="0" style="stop-color:#bde8f7;stop-opacity:1"/><stop offset="1" style="stop-color:#86b6fe;stop-opacity:1"/></linearGradient><linearGradient id="_Linear9" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(314.21,0,0,9.97478,340.83,431.758)"><stop offset="0" style="stop-color:#a9abc1;stop-opacity:1"/><stop offset="0.11" style="stop-color:#65687d;stop-opacity:1"/><stop offset="0.5" style="stop-color:#c3c5d2;stop-opacity:1"/><stop offset="0.89" style="stop-color:#64677c;stop-opacity:1"/><stop offset="1" style="stop-color:#a4a7c2;stop-opacity:1"/></linearGradient></defs></svg>
src/Button/Component.purs+20−12
@@ -2,15 +2,20 @@ module Button.Component where
2
2
3import Prelude
3import Prelude
4
4
5+import CSS (ColorSpace(..), mix, toHexString)
6+import CSS.Safer (cssSafer)
7+import Color (fromHexString)
5import Data.Foldable (intercalate)
8import Data.Foldable (intercalate)
9+import Data.Maybe (fromMaybe)
6import Data.Monoid (guard)
10import Data.Monoid (guard)
7import Effect (Effect)
11import Effect (Effect)
8import Prim.Row (class Lacks, class Union)
12import Prim.Row (class Lacks, class Union)
9import React.Basic (JSX)
13import React.Basic (JSX)
10−import React.Basic.DOM (Props_button, css, unsafeCreateDOMComponent)
14+import React.Basic.DOM (Props_button, unsafeCreateDOMComponent)
11import React.Basic.Hooks (ReactComponent, component, element)
15import React.Basic.Hooks (ReactComponent, component, element)
12import React.Basic.Hooks as React
16import React.Basic.Hooks as React
13import Record (union)
17import Record (union)
18+import Theme (increaseContrast)
14import Theme.Styles (classNames, makeStyles)
19import Theme.Styles (classNames, makeStyles)
15import Theme.Types (CSSTheme)
20import Theme.Types (CSSTheme)
16
21
@@ -39,13 +44,13 @@ mkButton = do
39 useStyles <-
44 useStyles <-
40 makeStyles \(theme ∷ CSSTheme) ->
45 makeStyles \(theme ∷ CSSTheme) ->
41 { "@keyframes gradientBG":
46 { "@keyframes gradientBG":
42− css
47+ cssSafer
43− { "0%": css { backgroundPosition: "0% 50%" }
48+ { "0%": { backgroundPosition: "0% 50%" }
44− , "50%": css { backgroundPosition: "100% 50%" }
49+ , "50%": { backgroundPosition: "100% 50%" }
45− , "100%": css { backgroundPosition: "0% 50%" }
50+ , "100%": { backgroundPosition: "0% 50%" }
46 }
51 }
47 , btn:
52 , btn:
48− css
53+ cssSafer
49 { background:
54 { background:
50 if theme.isLight
55 if theme.isLight
51 then
56 then
@@ -77,7 +82,6 @@ mkButton = do
77 , textTransform: "uppercase"
82 , textTransform: "uppercase"
78 , outline: "none"
83 , outline: "none"
79 , "&:focus":
84 , "&:focus":
80− css
81 { background:
85 { background:
82 linearGradient
86 linearGradient
83 [ "-5deg"
87 [ "-5deg"
@@ -90,7 +94,6 @@ mkButton = do
90 , animation: "$gradientBG 3s ease infinite"
94 , animation: "$gradientBG 3s ease infinite"
91 }
95 }
92 , "&:active":
96 , "&:active":
93− css
94 { background:
97 { background:
95 linearGradient
98 linearGradient
96 [ "180deg"
99 [ "180deg"
@@ -100,7 +103,6 @@ mkButton = do
100 , boxShadow: "inset 0 0 2px black"
103 , boxShadow: "inset 0 0 2px black"
101 }
104 }
102 , "&:disabled":
105 , "&:disabled":
103− css
104 { boxShadow: "0 0 0 black"
106 { boxShadow: "0 0 0 black"
105 , background: theme.backgroundColour
107 , background: theme.backgroundColour
106 , border: "1px dotted " <> theme.interfaceColourLightest
108 , border: "1px dotted " <> theme.interfaceColourLightest
@@ -109,7 +111,7 @@ mkButton = do
109 }
111 }
110 }
112 }
111 , highlightedButton:
113 , highlightedButton:
112− css
114+ cssSafer
113 { background:
115 { background:
114 if theme.isLight
116 if theme.isLight
115 then
117 then
@@ -117,11 +119,17 @@ mkButton = do
117 else
119 else
118 linearGradient [ theme.highlightColour, theme.highlightColourDark ]
120 linearGradient [ theme.highlightColour, theme.highlightColourDark ]
119 , "&:active":
121 , "&:active":
120− css
121 { background:
122 { background:
122 linearGradient [ theme.highlightColourDark, theme.highlightColour ]
123 linearGradient [ theme.highlightColourDark, theme.highlightColour ]
123 }
124 }
124− , color: theme.textColour
125+ , color: fromMaybe theme.textColour
126+ do
127+ hlc <- theme.highlightColour # fromHexString
128+ hlcd <- theme.highlightColourDark # fromHexString
129+ let bg = if theme.isLight then hlc else mix HSL hlc hlcd 0.5
130+ tc <- theme.textColour # fromHexString
131+ pure $ increaseContrast bg tc # toHexString
132+
125 }
133 }
126 }
134 }
127 component "Button" \{ children, buttonType, buttonProps } -> React.do
135 component "Button" \{ children, buttonType, buttonProps } -> React.do
src/CSS/Safer.pursnew file+8
@@ -0,0 +1,8 @@
1+module CSS.Safer where
2+
3+import React.Basic.DOM (CSS, css)
4+import Simple.JSON (class WriteForeign)
5+
6+cssSafer ∷ ∀ r. WriteForeign { | r } => { | r } -> CSS
7+cssSafer = css
8+
src/Card/Component.purs+5−5
@@ -2,9 +2,9 @@ module Card.Component where
2
2
3import Prelude
3import Prelude
4
4
5+import CSS.Safer (cssSafer)
5import Effect (Effect)
6import Effect (Effect)
6import React.Basic (JSX)
7import React.Basic (JSX)
7−import React.Basic.DOM (css)
8import React.Basic.DOM as R
8import React.Basic.DOM as R
9import React.Basic.Hooks (ReactComponent, component)
9import React.Basic.Hooks (ReactComponent, component)
10import React.Basic.Hooks as React
10import React.Basic.Hooks as React
@@ -21,7 +21,7 @@ mkCard = do
21 useStyles <-
21 useStyles <-
22 makeStyles \(theme ∷ CSSTheme) ->
22 makeStyles \(theme ∷ CSSTheme) ->
23 { card:
23 { card:
24− css
24+ cssSafer
25 { background: theme.backgroundColourLighter
25 { background: theme.backgroundColourLighter
26 , color: theme.textColour
26 , color: theme.textColour
27 , margin: "20px"
27 , margin: "20px"
@@ -52,7 +52,7 @@ mkCardTitle = do
52 useStyles <-
52 useStyles <-
53 makeStyles \(theme ∷ CSSTheme) ->
53 makeStyles \(theme ∷ CSSTheme) ->
54 { cardtitle:
54 { cardtitle:
55− css
55+ cssSafer
56 { color: theme.textColourLightest
56 { color: theme.textColourLightest
57 , fontSize: "1.2em"
57 , fontSize: "1.2em"
58 , fontWeight: "400"
58 , fontWeight: "400"
@@ -80,7 +80,7 @@ mkCardSubtitle = do
80 useStyles <-
80 useStyles <-
81 makeStyles \(theme ∷ CSSTheme) ->
81 makeStyles \(theme ∷ CSSTheme) ->
82 { cardtitle:
82 { cardtitle:
83− css
83+ cssSafer
84 { color: theme.textColourDarker
84 { color: theme.textColourDarker
85 , opacity: "0.8"
85 , opacity: "0.8"
86 , fontSize: "1.0em"
86 , fontSize: "1.0em"
@@ -109,7 +109,7 @@ mkCardContent = do
109 useStyles <-
109 useStyles <-
110 makeStyles \(theme ∷ CSSTheme) ->
110 makeStyles \(theme ∷ CSSTheme) ->
111 { cardContent:
111 { cardContent:
112− css
112+ cssSafer
113 { fontFamily: theme.textFontFamily
113 { fontFamily: theme.textFontFamily
114 , color: theme.textColourDarker
114 , color: theme.textColourDarker
115 , fontSize: "0.8em"
115 , fontSize: "0.8em"
src/Container/Component.purs+17−16
@@ -1,12 +1,12 @@
1module Container.Component where
1module Container.Component where
2
2
3import Prelude
3import Prelude
4−
4+import CSS.Safer (cssSafer)
5import Container.Header (mkHeader)
5import Container.Header (mkHeader)
6+import Container.Landing (mkLandingPage)
6import Container.Sidebar (mkSidebar, mkSidebarLink)
7import Container.Sidebar (mkSidebar, mkSidebarLink)
7import Effect (Effect)
8import Effect (Effect)
8import React.Basic (JSX)
9import React.Basic (JSX)
9−import React.Basic.DOM (css)
10import React.Basic.DOM as R
10import React.Basic.DOM as R
11import React.Basic.Hooks ((/\), ReactComponent, component, element, useState)
11import React.Basic.Hooks ((/\), ReactComponent, component, element, useState)
12import React.Basic.Hooks as React
12import React.Basic.Hooks as React
@@ -30,30 +30,34 @@ mkContainer = do
30
30
31mkContainerContent ∷ Effect (ReactComponent { children ∷ Array JSX })
31mkContainerContent ∷ Effect (ReactComponent { children ∷ Array JSX })
32mkContainerContent = do
32mkContainerContent = do
33+ landingPage <- mkLandingPage
33 sidebar <- mkSidebar
34 sidebar <- mkSidebar
34 header <- mkHeader
35 header <- mkHeader
35 useStyles <-
36 useStyles <-
36− makeStyles \(theme ∷ CSSTheme)->
37+ makeStyles \(theme ∷ CSSTheme) ->
38+ -- { "@global": cssSafer { "*": { outline: "1px solid red" } }
37 { container:
39 { container:
38− css
40+ cssSafer
39 { backgroundColor: theme.backgroundColour
41 { backgroundColor: theme.backgroundColour
40 , fontFamily: theme.textFontFamily
42 , fontFamily: theme.textFontFamily
41 , color: theme.textColour
43 , color: theme.textColour
42 , display: "grid"
44 , display: "grid"
43 , transition: "0.2s ease-in-out"
45 , transition: "0.2s ease-in-out"
44 , gridTemplateAreas:
46 , gridTemplateAreas:
45− "'landing landing landing'"
47+ "'landing landing landing'"
46− <> "'header header header' "
48+ <> "'header header header' "
47− <> "'nav content content'"
49+ <> "'nav content content'"
48 -- , "footer footer footer"
50 -- , "footer footer footer"
49 -- , gridTemplateColumns: "max-content auto"
51 -- , gridTemplateColumns: "max-content auto"
50 , minWidth: "100%"
52 , minWidth: "100%"
51− , minHeight: "100%"
53+ , maxWidth: "100%"
52− , height: "5000px"
54+ }
55+ , content:
56+ cssSafer
57+ { gridArea: "content"
58+ , minHeight: "200vh"
53 }
59 }
54− , landing: css { width: "100vw", height: "100vh", gridArea: "landing" }
55− , content: css { gridArea: "content" }
56− , icon: css { fill: "theme.textColour" }
60+ , icon: cssSafer { fill: "theme.textColour" }
57 }
61 }
58 sidebarLink <- mkSidebarLink
62 sidebarLink <- mkSidebarLink
59 component "ContainerContent" \{ children } -> React.do
63 component "ContainerContent" \{ children } -> React.do
@@ -63,10 +67,7 @@ mkContainerContent = do
63 $ R.div
67 $ R.div
64 { className: classes.container
68 { className: classes.container
65 , children:
69 , children:
66− [ R.img
70+ [ element landingPage {}
67− { src: "https://images.unsplash.com/photo-1537498425277-c283d32ef9db?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9"
68− , className: classes.landing
69− }
70 , element sidebar
71 , element sidebar
71 { collapsed
72 { collapsed
72 , modifyCollapsed
73 , modifyCollapsed
src/Container/Header.purs+59−55
@@ -2,24 +2,25 @@ module Container.Header where
2
2
3import Prelude
3import Prelude
4
4
5−import Control.Alt ((<|>))
5+import CSS.Safer (cssSafer)
6import Data.Int (toNumber)
6import Data.Int (toNumber)
7−import Data.Maybe (Maybe(..), fromMaybe)
7+import Data.Maybe (Maybe(..))
8import Data.Monoid (guard)
8import Data.Monoid (guard)
9−import Data.Nullable (null)
9+import Data.Newtype (class Newtype)
10−import Debug.Trace (spy)
10+import Data.Nullable (Nullable, null)
11import Effect (Effect)
11import Effect (Effect)
12−import React.Basic.DOM (css)
12+import Effect.Class.Console (log)
13import React.Basic.DOM as R
13import React.Basic.DOM as R
14−import React.Basic.Hooks (ReactComponent, component, element, readRef, readRefMaybe, useEffect, useLayoutEffect, useRef, useState, writeRef, (/\))
14+import React.Basic.Hooks (type (/\), Hook, ReactComponent, Ref, UseLayoutEffect, UseRef, UseState, coerceHook, component, element, readRefMaybe, useLayoutEffect, useRef, useState, (/\))
15import React.Basic.Hooks as React
15import React.Basic.Hooks as React
16−import SVG.Icon (pslogoIcon)
16+import SVG.Icon (trianglelogoIcon)
17import Theme.Styles (makeStyles)
17import Theme.Styles (makeStyles)
18import Theme.Types (CSSTheme)
18import Theme.Types (CSSTheme)
19import Typography.Header (HeadingLevel(..), mkH)
19import Typography.Header (HeadingLevel(..), mkH)
20+import Web.DOM (Node)
20import Web.Event.Event (EventType(..))
21import Web.Event.Event (EventType(..))
21−import Web.Event.EventTarget (addEventListener, eventListener, removeEventListener)
22+import Web.Event.EventTarget (EventListener, addEventListener, eventListener, removeEventListener)
22−import Web.HTML (window)
23+import Web.HTML (HTMLElement, window)
23import Web.HTML.HTMLElement (offsetTop)
24import Web.HTML.HTMLElement (offsetTop)
24import Web.HTML.HTMLElement as HTMLElement
25import Web.HTML.HTMLElement as HTMLElement
25import Web.HTML.Window (scrollY, toEventTarget)
26import Web.HTML.Window (scrollY, toEventTarget)
@@ -30,73 +31,76 @@ mkHeader = do
30 useStyles <-
31 useStyles <-
31 makeStyles \(theme ∷ CSSTheme) ->
32 makeStyles \(theme ∷ CSSTheme) ->
32 { header:
33 { header:
33− css
34+ cssSafer
34 { backgroundColor: theme.backgroundColour
35 { backgroundColor: theme.backgroundColour
35− , borderBottom: "1px solid " <> theme.highlightColour
36+ , borderBottom: "0"
36− , paddingLeft: "20px"
37− , fontFamily: theme.textFontFamily
37+ , fontFamily: theme.headingFontFamily
38 , gridArea: "header"
38 , gridArea: "header"
39 , display: "flex"
39 , display: "flex"
40 , alignItems: "center"
40 , alignItems: "center"
41+ , justifyContent: "flex-end"
41− , width: "100vw"
42+ , width: "100%"
42 , height: "80px"
43 , height: "80px"
43 }
44 }
44− , sticky: css { position: "fixed", top: "0" }
45+ , sticky: cssSafer { position: "fixed", top: "0" }
46+ , title: cssSafer { paddingRight: "30px"}
45 , logo:
47 , logo:
46− css
48+ cssSafer
47 { width: "70px"
49 { width: "70px"
48 , height: "70px"
50 , height: "70px"
49 , padding: "5px"
51 , padding: "5px"
52+ , marginTop: "9px"
50 , marginRight: "7px"
53 , marginRight: "7px"
51 , fill: theme.textColour
54 , fill: theme.textColour
52 }
55 }
53 }
56 }
54− useScrollYPosition <- mkUseScrollYPosition
55 component "Header" \{} -> React.do
57 component "Header" \{} -> React.do
56 classes <- useStyles
58 classes <- useStyles
57− mustBeSticky /\ modifyMustBeSticky <- useState false
59+ shouldBeSticky /\ nodeRef <- useShouldBeSticky
58− nodeY /\ modifyNodeY <- useState 0
59− nodeOffset /\ modifyONP <- useState Nothing
60− nodeRef <- useRef null
61− scrollYPos <- useScrollYPosition
62− useEffect scrollYPos do
63− maybeNode <- readRefMaybe nodeRef
64− let maybeElem = maybeNode >>= HTMLElement.fromNode
65− case maybeElem of
66− Nothing -> pure (pure unit)
67− Just element -> do
68− offset <- offsetTop element
69− modifyONP case _ of
70− Just x -> Just x
71− Nothing -> Just offset
72− let offset' = fromMaybe offset nodeOffset
73− modifyMustBeSticky
74− if toNumber scrollYPos > offset'
75− then const true
76− else const false
77− pure (pure unit)
78−
79 pure
60 pure
80 $ R.header
61 $ R.header
81 { ref: nodeRef
62 { ref: nodeRef
82− , className: classes.header <> " " <> guard mustBeSticky classes.sticky
63+ , className: classes.header <> " " <> guard shouldBeSticky classes.sticky
83 , children:
64 , children:
65+ [ element h { level: H2, text: "Kleislove", className: Just classes.title }
84− [ R.div { children: [ element pslogoIcon {} ], className: classes.logo }
66+ , R.div { children: [ element trianglelogoIcon {} ], className: classes.logo }
85− , element h { level: H2, text: "Purescript", className: Nothing }
86 ]
67 ]
87 }
68 }
88
69
89−mkUseScrollYPosition = do
70+newtype UseShouldBeSticky hooks
90− initialPosition <- window >>= scrollY
71+ = UseShouldBeSticky (UseLayoutEffect Unit (UseState Boolean (UseRef (Nullable Node) hooks)))
72+
73+derive instance ntUseScrollYPosition ∷ Newtype (UseShouldBeSticky hooks) _
74+
75+useShouldBeSticky ∷ Hook UseShouldBeSticky (Boolean /\ Ref (Nullable Node))
76+useShouldBeSticky =
91− pure $ React.do
77+ coerceHook React.do
92− scrollPosY /\ modifyScrollPosY <- useState initialPosition
78+ nodeRef <- useRef null
79+ mustBeSticky /\ modifyMustBeSticky <- useState false
80+ let setSticky = modifyMustBeSticky <<< const
93 useLayoutEffect unit do
81 useLayoutEffect unit do
82+ maybeNode <- readRefMaybe nodeRef
83+ case maybeNode >>= HTMLElement.fromNode of
84+ Nothing -> do
85+ log "Could not register listener because there was no node"
86+ pure (pure unit)
87+ Just element -> do
88+ listener <- makeListener setSticky element
89+ registerListener listener
90+ pure (mustBeSticky /\ nodeRef)
91+
92+scrollEventType ∷ EventType
93+scrollEventType = EventType "scroll"
94+
95+registerListener ∷ EventListener -> Effect (Effect Unit)
96+registerListener listener = do
94− target <- window <#> toEventTarget
97+ target <- window <#> toEventTarget
95− let eventType = EventType "scroll"
98+ addEventListener scrollEventType listener false target
99+ pure $ removeEventListener scrollEventType listener false target
100+
101+makeListener ∷ (Boolean -> Effect Unit) -> HTMLElement -> Effect EventListener
102+makeListener setSticky element = do
103+ nodeStartPos <- offsetTop element
96− listener <- eventListener
104+ eventListener $ const do
97− \_ -> window >>= scrollY >>= \newPos -> modifyScrollPosY (const newPos)
105+ yPos <- window >>= scrollY <#> toNumber
98− addEventListener eventType listener false target
106+ setSticky $ nodeStartPos < yPos
99− let _ = spy "registered event listener" unit
100− pure $
101− removeEventListener eventType listener false target
102− pure $ scrollPosY
src/Container/Landing.pursnew file+140
@@ -0,0 +1,140 @@
1+module Container.Landing where
2+
3+import Prelude
4+
5+import Button.Component (ButtonType(..), mkButton)
6+import CSS.Safer (cssSafer)
7+import Data.Foldable (for_)
8+import Data.Nullable (null)
9+import Effect (Effect)
10+import Effect.Uncurried (runEffectFn1)
11+import React.Basic.DOM as R
12+import React.Basic.Events (handler_)
13+import React.Basic.Hooks (ReactComponent, component, element, readRefMaybe, useRef)
14+import React.Basic.Hooks as React
15+import SVG.Icon (trianglelogoIcon)
16+import SVG.Image (landingPageDark, landingPageLight)
17+import Theme.Styles (makeStyles, useTheme)
18+import Theme.Types (CSSTheme)
19+import Typography.Header (mkH)
20+import Unsafe.Coerce (unsafeCoerce)
21+import Web.HTML (window)
22+import Web.HTML.HTMLElement (getBoundingClientRect)
23+import Web.HTML.HTMLElement as HTMLElement
24+
25+mkLandingPage ∷ Effect (ReactComponent {})
26+mkLandingPage = do
27+ useStyles <-
28+ makeStyles \(theme ∷ CSSTheme) ->
29+ { landing:
30+ cssSafer
31+ { width: "100vw"
32+ , height: "100vh"
33+ , gridArea: "landing"
34+ }
35+ , textLayer:
36+ cssSafer
37+ { position: "absolute"
38+ , width: "100%"
39+ , height: "100%"
40+ , zIndex: 2
41+ }
42+ , topBar:
43+ cssSafer
44+ { width: "100%"
45+ , display: "flex"
46+ , flexDirection: "row"
47+ , height: "90px"
48+ , justifyContent: "center"
49+ , alignItems: "space-around"
50+ }
51+ , logo:
52+ cssSafer
53+ { fill: theme.textColour
54+ , width: "50px"
55+ , height: "50px"
56+ , marginTop: "33px"
57+ }
58+ , welcomeText:
59+ cssSafer
60+ { fontSize: "36pt"
61+ , marginTop: "33px"
62+ , marginLeft: "5vw"
63+ }
64+ , welcomeCopy:
65+ cssSafer
66+ { fontSize: "22pt"
67+ , marginTop: "20px"
68+ , marginLeft: "5vw"
69+ , maxWidth: "400px"
70+ }
71+ , actionButton:
72+ cssSafer
73+ { fontSize: "40pt"
74+ , marginLeft: "5vw"
75+ }
76+ , landingImage:
77+ cssSafer
78+ { position: "absolute"
79+ , width: "100%"
80+ , height: "100%"
81+ }
82+ }
83+ h <- mkH
84+ button <- mkButton
85+ component "LandingPage" \{ } -> React.do
86+ classes <- useStyles
87+ theme <- useTheme
88+ ref <- useRef null
89+ let
90+ backgroundImage =
91+ if theme.isLight then
92+ landingPageLight
93+ else
94+ landingPageDark
95+ pure
96+ $ R.div
97+ { ref
98+ , className: classes.landing
99+ , children:
100+ [ element backgroundImage { className: classes.landingImage }
101+ , R.div
102+ { className: classes.textLayer
103+ , children:
104+ [ R.div
105+ { className: classes.topBar
106+ , children: [ element trianglelogoIcon { className: classes.logo } ]
107+ }
108+ , R.div { className: classes.welcomeText, children: [ R.text welcomeText ] }
109+ , R.div { className: classes.welcomeCopy, children: [ R.text copyText ] }
110+ , R.div
111+ { className: classes.actionButton
112+ , children:
113+ [ element button
114+ { buttonProps:
115+ { onClick: handler_ do
116+ maybeNode <- readRefMaybe ref
117+ for_ (maybeNode >>= HTMLElement.fromNode) \n -> do
118+ height <- getBoundingClientRect n <#> _.height
119+ win <- window
120+ runEffectFn1 ((unsafeCoerce win).scrollTo)
121+ { top: height, left: 0, behavior: "smooth"}
122+ }
123+ , buttonType: HighlightedButton
124+ , children: [ R.text buttonText ]
125+ }
126+ ]
127+ }
128+ ]
129+ }
130+ ]
131+ }
132+
133+welcomeText ∷ String
134+welcomeText = "Enter the college of Kleisli"
135+
136+copyText ∷ String
137+copyText = "Learn how to tame and harness the compiler, whether you're a λ or a Λ"
138+
139+buttonText ∷ String
140+buttonText = "I can't wait, let's go!"
src/Container/Sidebar.purs+10−11
@@ -2,10 +2,10 @@ module Container.Sidebar where
2
2
3import Prelude
3import Prelude
4
4
5+import CSS.Safer (cssSafer)
5import Data.Monoid (guard)
6import Data.Monoid (guard)
6import Effect (Effect)
7import Effect (Effect)
7import React.Basic (JSX)
8import React.Basic (JSX)
8−import React.Basic.DOM (css)
9import React.Basic.DOM as R
9import React.Basic.DOM as R
10import React.Basic.Events (handler_)
10import React.Basic.Events (handler_)
11import React.Basic.Hooks (ReactComponent, component, element)
11import React.Basic.Hooks (ReactComponent, component, element)
@@ -26,7 +26,7 @@ mkSidebar = do
26 useStyles <-
26 useStyles <-
27 makeStyles \(theme ∷ CSSTheme) ->
27 makeStyles \(theme ∷ CSSTheme) ->
28 { sidebar:
28 { sidebar:
29− css
29+ cssSafer
30 { background: theme.backgroundColour
30 { background: theme.backgroundColour
31 , fontFamily: theme.textFontFamily
31 , fontFamily: theme.textFontFamily
32 , color: theme.textColour
32 , color: theme.textColour
@@ -37,10 +37,10 @@ mkSidebar = do
37 , transition: "0.2s ease-in-out"
37 , transition: "0.2s ease-in-out"
38 , overflowX: "hidden"
38 , overflowX: "hidden"
39 }
39 }
40− , sidebarCollapsed: css { width: "70px" }
40+ , sidebarCollapsed: cssSafer { width: "70px" }
41− , sidebarExpanded: css { width: "250px" }
41+ , sidebarExpanded: cssSafer { width: "250px" }
42 , logo:
42 , logo:
43− css
43+ cssSafer
44 { width: "60px"
44 { width: "60px"
45 , height: "60px"
45 , height: "60px"
46 , padding: "0 5px 0 5px"
46 , padding: "0 5px 0 5px"
@@ -49,7 +49,7 @@ mkSidebar = do
49 , alignSelf: "flex-end"
49 , alignSelf: "flex-end"
50 }
50 }
51 , logoCollapsed:
51 , logoCollapsed:
52− css
52+ cssSafer
53 {} -- transform: "rotate(180deg)"}
53 {} -- transform: "rotate(180deg)"}
54 }
54 }
55 menu <- mkMenu
55 menu <- mkMenu
@@ -82,7 +82,7 @@ mkSidebarLink = do
82 useStyles <-
82 useStyles <-
83 makeStyles \(theme ∷ CSSTheme) ->
83 makeStyles \(theme ∷ CSSTheme) ->
84 { sidebarEntry:
84 { sidebarEntry:
85− css
85+ cssSafer
86 { fontFamily: theme.headingFontFamily
86 { fontFamily: theme.headingFontFamily
87 , alignSelf: "flex-end"
87 , alignSelf: "flex-end"
88 , justifyContent: "space-between"
88 , justifyContent: "space-between"
@@ -97,13 +97,12 @@ mkSidebarLink = do
97 , borderRadius: "5px 0 0 5px"
97 , borderRadius: "5px 0 0 5px"
98 , cursor: "pointer"
98 , cursor: "pointer"
99 , "&:hover":
99 , "&:hover":
100− css
101 { background: theme.highlightColour
100 { background: theme.highlightColour
102 }
101 }
103− -- , "&:hover": css { opacity: "1.0"}
102+ -- , "&:hover": cssSafer{ opacity: "1.0"}
104 }
103 }
105 , label:
104 , label:
106− css
105+ cssSafer
107 { fontFamily: theme.textFontFamily
106 { fontFamily: theme.textFontFamily
108 , color: theme.textColour
107 , color: theme.textColour
109 , paddingLeft: "20px"
108 , paddingLeft: "20px"
@@ -112,7 +111,7 @@ mkSidebarLink = do
112 , fontSize: "1.4em"
111 , fontSize: "1.4em"
113 }
112 }
114 , icon:
113 , icon:
115− css
114+ cssSafer
116 { width: "50px"
115 { width: "50px"
117 , height: "50px"
116 , height: "50px"
118 , padding: "5px 10px 5px 5px"
117 , padding: "5px 10px 5px 5px"
src/Element.purs+5−4
@@ -1,23 +1,24 @@
1module Element where
1module Element where
2
2
3import Prelude
3import Prelude
4+
5+import CSS.Safer (cssSafer)
4import Effect (Effect)
6import Effect (Effect)
5import Effect.Console (log)
7import Effect.Console (log)
6−import React.Basic.DOM (css)
7import React.Basic.DOM as R
8import React.Basic.DOM as R
8import React.Basic.Events (handler_)
9import React.Basic.Events (handler_)
9import React.Basic.Hooks (ReactComponent, component, element, useEffect, useState, (/\))
10import React.Basic.Hooks (ReactComponent, component, element, useEffect, useState, (/\))
10import React.Basic.Hooks as React
11import React.Basic.Hooks as React
11import Theme.Provider (mkThemeProvider)
12import Theme.Provider (mkThemeProvider)
12import Theme.Styles (makeStyles)
13import Theme.Styles (makeStyles)
13−import Theme.Types (Theme)
14+import Theme.Types (CSSTheme)
14
15
15mkToggleButton ∷ Effect (ReactComponent { label ∷ String })
16mkToggleButton ∷ Effect (ReactComponent { label ∷ String })
16mkToggleButton = do
17mkToggleButton = do
17 useStyles <-
18 useStyles <-
18− makeStyles \(theme ∷ Theme) -> -- do
19+ makeStyles \(theme ∷ CSSTheme) -> -- do
19 { button:
20 { button:
20− css
21+ cssSafer
21 { backgroundColor: theme.highlightColour
22 { backgroundColor: theme.highlightColour
22 , color: theme.textColour
23 , color: theme.textColour
23 , fontFamily: theme.textFontFamily
24 , fontFamily: theme.textFontFamily
src/SVG/Icon.js+14−12
@@ -1,17 +1,18 @@
1'use strict'
1'use strict'
2
2
3−var alternative = require("../../assets/alternative.svg");
3+var alternative = require("../../assets/icons/alternative.svg");
4−var ap = require("../../assets/ap.svg");
4+var ap = require("../../assets/icons/ap.svg");
5−var append = require("../../assets/append.svg");
5+var append = require("../../assets/icons/append.svg");
6−var apply = require("../../assets/apply.svg");
6+var apply = require("../../assets/icons/apply.svg");
7−var applyflipped = require("../../assets/applyflipped.svg");
7+var applyflipped = require("../../assets/icons/applyflipped.svg");
8−var bind = require("../../assets/bind.svg");
8+var bind = require("../../assets/icons/bind.svg");
9−var compose = require("../../assets/compose.svg");
9+var compose = require("../../assets/icons/compose.svg");
10−var forall = require("../../assets/forall.svg");
10+var forall = require("../../assets/icons/forall.svg");
11−var kleisli = require("../../assets/kleisli.svg");
11+var kleisli = require("../../assets/icons/kleisli.svg");
12−var map = require("../../assets/map.svg");
12+var map = require("../../assets/icons/map.svg");
13−var mapflipped = require("../../assets/mapflipped.svg");
13+var mapflipped = require("../../assets/icons/mapflipped.svg");
14−var pslogo = require("../../assets/pslogo.svg");
14+var pslogo = require("../../assets/icons/pslogo.svg");
15+var trianglelogo = require("../../assets/icons/trianglelogo.svg");
15
16
16exports.alternativeIconRaw = alternative.default;
17exports.alternativeIconRaw = alternative.default;
17exports.apIconRaw = ap.default;
18exports.apIconRaw = ap.default;
@@ -25,3 +26,4 @@ exports.kleisliIconRaw = kleisli.default;
25exports.mapIconRaw = map.default;
26exports.mapIconRaw = map.default;
26exports.mapflippedIconRaw = mapflipped.default;
27exports.mapflippedIconRaw = mapflipped.default;
27exports.pslogoIconRaw = pslogo.default;
28exports.pslogoIconRaw = pslogo.default;
29+exports.trianglelogoIconRaw = trianglelogo.default;
src/SVG/Icon.purs+23−24
@@ -2,69 +2,72 @@ module SVG.Icon where
2
2
3import Prelude
3import Prelude
4
4
5+import CSS.Safer (cssSafer)
5import Data.Monoid (guard)
6import Data.Monoid (guard)
6import Effect (Effect)
7import Effect (Effect)
7import Prim.Row (class Union)
8import Prim.Row (class Union)
8−import React.Basic.DOM (css)
9import React.Basic.DOM.SVG as SVG
9import React.Basic.DOM.SVG as SVG
10import React.Basic.Hooks (ReactComponent, component)
10import React.Basic.Hooks (ReactComponent, component)
11import React.Basic.Hooks as React
11import React.Basic.Hooks as React
12import Theme.Styles (makeStyles)
12import Theme.Styles (makeStyles)
13−import Theme.Types (Theme)
13+import Theme.Types (CSSTheme)
14import Unsafe.Coerce (unsafeCoerce)
14import Unsafe.Coerce (unsafeCoerce)
15
15
16−type ImageProps = ( width ∷ Int, height ∷ Int )
16+type ImageProps = ( width ∷ Int, height ∷ Int, className ∷ String )
17
17
18−type Raw = ReactComponent { width ∷ Int, height ∷ Int, className ∷ String }
18+type Raw r = ReactComponent { | r }
19
19
20−foreign import alternativeIconRaw ∷ Raw
20+foreign import alternativeIconRaw ∷ ∀ r. Raw r
21alternativeIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
21alternativeIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
22alternativeIcon = unsafeCoerce alternativeIconRaw
22alternativeIcon = unsafeCoerce alternativeIconRaw
23
23
24−foreign import apIconRaw ∷ Raw
24+foreign import apIconRaw ∷ ∀ r. Raw r
25apIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
25apIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
26apIcon = unsafeCoerce apIconRaw
26apIcon = unsafeCoerce apIconRaw
27
27
28−foreign import appendIconRaw ∷ Raw
28+foreign import appendIconRaw ∷ ∀ r. Raw r
29appendIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
29appendIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
30appendIcon = unsafeCoerce appendIconRaw
30appendIcon = unsafeCoerce appendIconRaw
31
31
32−foreign import applyIconRaw ∷ Raw
32+foreign import applyIconRaw ∷ ∀ r. Raw r
33applyIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
33applyIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
34applyIcon = unsafeCoerce applyIconRaw
34applyIcon = unsafeCoerce applyIconRaw
35
35
36−foreign import applyflippedIconRaw ∷ Raw
36+foreign import applyflippedIconRaw ∷ ∀ r. Raw r
37applyflippedIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
37applyflippedIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
38applyflippedIcon = unsafeCoerce applyflippedIconRaw
38applyflippedIcon = unsafeCoerce applyflippedIconRaw
39
39
40−foreign import bindIconRaw ∷ Raw
40+foreign import bindIconRaw ∷ ∀ r. Raw r
41bindIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
41bindIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
42bindIcon = unsafeCoerce bindIconRaw
42bindIcon = unsafeCoerce bindIconRaw
43
43
44−foreign import composeIconRaw ∷ Raw
44+foreign import composeIconRaw ∷ ∀ r. Raw r
45composeIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
45composeIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
46composeIcon = unsafeCoerce composeIconRaw
46composeIcon = unsafeCoerce composeIconRaw
47
47
48−foreign import forallIconRaw ∷ Raw
48+foreign import forallIconRaw ∷ ∀ r. Raw r
49forallIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
49forallIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
50forallIcon = unsafeCoerce forallIconRaw
50forallIcon = unsafeCoerce forallIconRaw
51
51
52−foreign import kleisliIconRaw ∷ Raw
52+foreign import kleisliIconRaw ∷ ∀ r. Raw r
53kleisliIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
53kleisliIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
54kleisliIcon = unsafeCoerce kleisliIconRaw
54kleisliIcon = unsafeCoerce kleisliIconRaw
55
55
56−foreign import mapIconRaw ∷ Raw
56+foreign import mapIconRaw ∷ ∀ r. Raw r
57mapIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
57mapIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
58mapIcon = unsafeCoerce mapIconRaw
58mapIcon = unsafeCoerce mapIconRaw
59
59
60−foreign import mapflippedIconRaw ∷ Raw
60+foreign import mapflippedIconRaw ∷ ∀ r. Raw r
61mapflippedIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
61mapflippedIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
62mapflippedIcon = unsafeCoerce mapflippedIconRaw
62mapflippedIcon = unsafeCoerce mapflippedIconRaw
63
63
64−foreign import pslogoIconRaw ∷ Raw
64+foreign import pslogoIconRaw ∷ ∀ r. Raw r
65pslogoIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
65pslogoIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
66pslogoIcon = unsafeCoerce pslogoIconRaw
66pslogoIcon = unsafeCoerce pslogoIconRaw
67
67
68+foreign import trianglelogoIconRaw ∷ ∀ r. Raw r
69+trianglelogoIcon ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
70+trianglelogoIcon = unsafeCoerce trianglelogoIconRaw
68
71
69
72
70data ActiveArrowDirection
73data ActiveArrowDirection
@@ -76,22 +79,18 @@ derive instance eqActiveArrowDirection ∷ Eq ActiveArrowDirection
76mkMenu ∷ Effect (ReactComponent { activeArrowDirection ∷ ActiveArrowDirection })
79mkMenu ∷ Effect (ReactComponent { activeArrowDirection ∷ ActiveArrowDirection })
77mkMenu = do
80mkMenu = do
78 useStyles <-
81 useStyles <-
79− makeStyles \(theme ∷ Theme) ->
82+ makeStyles \(theme ∷ CSSTheme) ->
80− { arrow:
83+ { arrow: cssSafer
81− css
82 { fill: theme.textColour
84 { fill: theme.textColour
83 , transition: "0.3s ease-out"
85 , transition: "0.3s ease-out"
84 }
86 }
85− , arrowInactive:
87+ , arrowInactive: cssSafer
86− css
87 { fillOpacity: ".1"
88 { fillOpacity: ".1"
88 }
89 }
89− , svg:
90+ , svg: cssSafer
90− css
91 { width: "100%"
91 { width: "100%"
92 , height: "100%"
92 , height: "100%"
93 , "&:hover":
93 , "&:hover":
94− css
95 { fill: theme.backgroundColour
94 { fill: theme.backgroundColour
96 }
95 }
97 }
96 }
src/SVG/Image.jsnew file+4
@@ -0,0 +1,4 @@
1+'use strict'
2+
3+exports.landingPageLightRaw = require("../../assets/images/landingpagelight.svg").default;
4+exports.landingPageDarkRaw = require("../../assets/images/landingpagedark.svg").default;
src/SVG/Image.pursnew file+17
@@ -0,0 +1,17 @@
1+module SVG.Image where
2+
3+
4+import Prim.Row (class Union)
5+import React.Basic.Hooks (ReactComponent)
6+import SVG.Icon (Raw, ImageProps)
7+import Unsafe.Coerce (unsafeCoerce)
8+
9+foreign import landingPageDarkRaw ∷ ∀ r. Raw r
10+
11+landingPageLight ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
12+landingPageLight = unsafeCoerce landingPageLightRaw
13+
14+foreign import landingPageLightRaw ∷ ∀ r. Raw r
15+
16+landingPageDark ∷ ∀ attrs attrs_. Union attrs attrs_ ImageProps => ReactComponent { | attrs }
17+landingPageDark = unsafeCoerce landingPageDarkRaw
src/Theme.pursnew file+92
@@ -0,0 +1,92 @@
1+module Theme where
2+
3+import Prelude
4+
5+import CSS (ColorSpace(..), blue, brightness, contrast, darken, desaturate, isLight, lighten, mix, rotateHue, toHexString)
6+import Color (Color)
7+import Data.Foldable (intercalate)
8+import Data.Symbol (SProxy(..))
9+import Record.Builder as RB
10+import Theme.Types (Theme, CSSTheme)
11+
12+increaseContrast ∷ Color -> Color -> Color
13+increaseContrast contrastWith = go 0
14+ where
15+ modify = if isLight contrastWith then darken else lighten
16+ go i col
17+ = if contrast contrastWith col >= 7.5 || i >= 20
18+ then col
19+ else go (i+1) (modify 0.1 col)
20+
21+
22+f ∷ ∀ fieldName. SProxy fieldName
23+f = SProxy
24+
25+fromTheme ∷ Theme -> CSSTheme
26+fromTheme theme = RB.build (
27+ -- background
28+ RB.modify (f ∷ _ "backgroundColour") toHexString
29+ >>> RB.insert (f ∷ _ "backgroundColourLighter")
30+ (theme.backgroundColour # lighter >>> toHexString)
31+ >>> RB.modify (f ∷ _ "interfaceColour") toHexString
32+ >>> RB.insert (f ∷ _ "interfaceColourLighter")
33+ (theme.interfaceColour # lighter >>> toHexString)
34+ >>> RB.insert (f ∷ _ "interfaceColourLightest")
35+ (theme.interfaceColour # lighter >>> lighter >>> toHexString)
36+ >>> RB.insert (f ∷ _ "interfaceColourDarker")
37+ (theme.interfaceColour # darker >>> toHexString)
38+ >>> RB.insert (f ∷ _ "interfaceColourDarkest")
39+ (theme.interfaceColour # darker >>> darker >>> toHexString)
40+ -- foreground
41+ >>> RB.modify (f ∷ _ "textColour") toHexString
42+ >>> RB.insert (f ∷ _ "textColourLighter")
43+ (theme.textColour # lighter >>> toHexString)
44+ >>> RB.insert (f ∷ _ "textColourLightest")
45+ (theme.textColour # lighter >>> lighter >>> toHexString)
46+ >>> RB.insert (f ∷ _ "textColourDarker")
47+ (theme.textColour # darker >>> toHexString)
48+ >>> RB.insert (f ∷ _ "textColourDarkest")
49+ (theme.textColour # darker >>> darker >>> toHexString)
50+ -- highlight
51+ >>> RB.modify (f ∷ _ "highlightColour") toHexString
52+ >>> RB.insert (f ∷ _ "highlightColourDark")
53+ (theme.highlightColour # darken 0.2 # rotateHue (-10.0) # toHexString)
54+ -- altHighlight
55+ >>> RB.modify (f ∷ _ "altHighlightColour") toHexString
56+ >>> RB.insert (f ∷ _ "altHighlightColourDark")
57+ (theme.altHighlightColour # darken 0.2 # toHexString)
58+ -- palette
59+ >>> RB.modify (f ∷ _ "yellow") toHexString
60+ >>> RB.modify (f ∷ _ "green") toHexString
61+ >>> RB.modify (f ∷ _ "pink") toHexString
62+ >>> RB.modify (f ∷ _ "orange") toHexString
63+ >>> RB.modify (f ∷ _ "turquoise") toHexString
64+ >>> RB.modify (f ∷ _ "red") toHexString
65+ >>> RB.modify (f ∷ _ "blue") toHexString
66+ -- fonts
67+ >>> RB.modify (f ∷ _ "textFontFamily") (intercalate ",")
68+ >>> RB.modify (f ∷ _ "headingFontFamily") (intercalate ",")
69+ >>> RB.insert (f ∷ _ "isLight") isLightTheme
70+ ) theme
71+ where
72+ isLightTheme = isLight theme.backgroundColour
73+ yellower ∷ Color -> Color
74+ yellower col =
75+ if brightness col > 0.8
76+ then
77+ lighten 0.02 col
78+ else
79+ col
80+ # lighten 0.1
81+ # desaturate 0.03
82+
83+ bluer col =
84+ mix HSL col blue 0.05
85+ # darken 0.1
86+ # desaturate 0.03
87+
88+ lighter ∷ Color -> Color
89+ lighter = yellower
90+
91+ darker ∷ Color -> Color
92+ darker = bluer
src/Theme/Default.purs+23−30
@@ -3,38 +3,31 @@ module Theme.Default where
3import Color as Color
3import Color as Color
4import Theme.Types (Theme)
4import Theme.Types (Theme)
5
5
6−lightTheme ∷ Theme
7−lightTheme =
8− { textColour: Color.hsl 225.0 0.18 0.25
9− , backgroundColour: Color.hsl 210.0 0.00 0.98
10− , interfaceColour: Color.hsl 210.0 0.10 0.70
11− , highlightColour: Color.hsl 150.0 0.55 0.78
12− , altHighlightColour: Color.hsl 84.0 0.617 0.631
13− , textFontFamily: ["-apple-system", "BlinkMacSystemFont", "Helvetica", "Arial", "sans-serif"]
14− , headingFontFamily: ["Montserrat", "Monaco", "sans-serif"]
15− , yellow: Color.rgb 255 235 149
16− , green: Color.rgb 173 219 103
17− , pink: Color.rgb 199 146 234
18− , orange: Color.rgb 255 203 139
19− , turquoise: Color.rgb 127 219 202
20− , red: Color.rgb 255 88 116
21− , blue: Color.rgb 130 170 255
22− }
23−
24darkTheme ∷ Theme
6darkTheme ∷ Theme
25darkTheme =
7darkTheme =
26− { backgroundColour: Color.hsl 215.0 0.28 0.20
8+ { backgroundColour: Color.hsl 215.0 0.28 0.20
27− , textColour: Color.hsl 225.0 0.28 0.90
9+ , textColour: Color.hsl 225.0 0.28 0.90
28− , interfaceColour: Color.hsl 215.0 0.28 0.20
10+ , interfaceColour: Color.hsl 215.0 0.28 0.20
29− , highlightColour: Color.rgb 183 130 218
11+ , highlightColour: Color.rgb 183 130 218
30 , altHighlightColour: Color.hsl 84.0 0.617 0.631
12 , altHighlightColour: Color.hsl 84.0 0.617 0.631
31− , textFontFamily: ["-apple-system", "BlinkMacSystemFont", "Helvetica", "Arial", "sans-serif"]
13+ -- , textFontFamily: ["-apple-system", "BlinkMacSystemFont", "Helvetica", "Arial", "sans-serif"]
14+ , textFontFamily: [ "Montserrat", "Monaco", "sans-serif" ]
32− , headingFontFamily: ["Montserrat", "Monaco", "sans-serif"]
15+ , headingFontFamily: [ "Montserrat", "Monaco", "sans-serif" ]
33− , yellow: Color.rgb 255 235 149
16+ , yellow: Color.rgb 255 235 149
34− , green: Color.rgb 173 219 103
17+ , green: Color.rgb 173 219 103
35− , pink: Color.rgb 199 146 234
18+ , pink: Color.rgb 199 146 234
36− , orange: Color.rgb 255 203 139
19+ , orange: Color.rgb 255 203 139
37 , turquoise: Color.rgb 127 219 202
20 , turquoise: Color.rgb 127 219 202
38− , red: Color.rgb 255 88 116
21+ , red: Color.rgb 255 88 116
39− , blue: Color.rgb 130 170 255
22+ , blue: Color.rgb 130 170 255
40 }
23 }
24+
25+lightTheme ∷ Theme
26+lightTheme =
27+ darkTheme
28+ { textColour = Color.hsl 225.0 0.18 0.25
29+ , backgroundColour = Color.hsl 210.0 0.00 0.98
30+ , interfaceColour = Color.hsl 210.0 0.10 0.70
31+ , highlightColour = Color.hsl 260.0 0.85 0.58
32+ , altHighlightColour = Color.hsl 84.0 0.617 0.631
33+ }
src/Theme/Styles.purs+2−2
@@ -23,11 +23,11 @@ foreign import data UseStyles ∷ Type -> Type -> Type
23
23
24foreign import makeStylesImpl ∷
24foreign import makeStylesImpl ∷
25 ∀ css classNames.
25 ∀ css classNames.
26− EffectFn1 {|css} (Hook (UseStyles { | css }) { | classNames })
26+ EffectFn1 {|css} (Hook (UseStyles { | css}) { | classNames })
27
27
28foreign import makeStylesThemedImpl ∷
28foreign import makeStylesThemedImpl ∷
29 ∀ theme css classNames.
29 ∀ theme css classNames.
30− EffectFn1 ({|theme} -> {|css}) (Hook (UseStyles { | css }) { | classNames })
30+ EffectFn1 ({|theme} -> {|css}) (Hook (UseStyles { | css}) { | classNames })
31
31
32makeStyles ∷
32makeStyles ∷
33 ∀ theme css cssList classNames.
33 ∀ theme css cssList classNames.
src/Theme/Types.purs−80
@@ -1,13 +1,6 @@
1module Theme.Types where
1module Theme.Types where
2
2
3−import Prelude
4−
5−import CSS (ColorSpace(..), blue, brightness, darken, desaturate, isLight, lighten, mix, rotateHue)
6−import CSS.Color (toHexString)
7import Color (Color)
3import Color (Color)
8−import Data.Foldable (intercalate)
9−import Data.Symbol (SProxy(..))
10−import Record.Builder as RB
11
4
12type Theme =
5type Theme =
13 { backgroundColour ∷ Color
6 { backgroundColour ∷ Color
@@ -26,78 +19,6 @@ type Theme =
26 , blue ∷ Color
19 , blue ∷ Color
27 }
20 }
28
21
29−f ∷ ∀ fieldName. SProxy fieldName
30−f = SProxy
31−
32−fromTheme ∷ Theme -> CSSTheme
33−fromTheme theme = RB.build (
34− -- background
35− RB.modify (f ∷ _ "backgroundColour") toHexString
36− >>> RB.insert (f ∷ _ "backgroundColourLighter")
37− (theme.backgroundColour # lighter >>> toHexString)
38− >>> RB.modify (f ∷ _ "interfaceColour") toHexString
39− >>> RB.insert (f ∷ _ "interfaceColourLighter")
40− (theme.interfaceColour # lighter >>> toHexString)
41− >>> RB.insert (f ∷ _ "interfaceColourLightest")
42− (theme.interfaceColour # lighter >>> lighter >>> toHexString)
43− >>> RB.insert (f ∷ _ "interfaceColourDarker")
44− (theme.interfaceColour # darker >>> toHexString)
45− >>> RB.insert (f ∷ _ "interfaceColourDarkest")
46− (theme.interfaceColour # darker >>> darker >>> toHexString)
47− -- foreground
48− >>> RB.modify (f ∷ _ "textColour") toHexString
49− >>> RB.insert (f ∷ _ "textColourLighter")
50− (theme.textColour # lighter >>> toHexString)
51− >>> RB.insert (f ∷ _ "textColourLightest")
52− (theme.textColour # lighter >>> lighter >>> toHexString)
53− >>> RB.insert (f ∷ _ "textColourDarker")
54− (theme.textColour # darker >>> toHexString)
55− >>> RB.insert (f ∷ _ "textColourDarkest")
56− (theme.textColour # darker >>> darker >>> toHexString)
57− -- highlight
58− >>> RB.modify (f ∷ _ "highlightColour") toHexString
59− >>> RB.insert (f ∷ _ "highlightColourDark")
60− (theme.highlightColour # darken 0.2 # rotateHue (-10.0) # toHexString)
61− -- altHighlight
62− >>> RB.modify (f ∷ _ "altHighlightColour") toHexString
63− >>> RB.insert (f ∷ _ "altHighlightColourDark")
64− (theme.altHighlightColour # darken 0.2 # toHexString)
65− -- palette
66− >>> RB.modify (f ∷ _ "yellow") toHexString
67− >>> RB.modify (f ∷ _ "green") toHexString
68− >>> RB.modify (f ∷ _ "pink") toHexString
69− >>> RB.modify (f ∷ _ "orange") toHexString
70− >>> RB.modify (f ∷ _ "turquoise") toHexString
71− >>> RB.modify (f ∷ _ "red") toHexString
72− >>> RB.modify (f ∷ _ "blue") toHexString
73− -- fonts
74− >>> RB.modify (f ∷ _ "textFontFamily") (intercalate ",")
75− >>> RB.modify (f ∷ _ "headingFontFamily") (intercalate ",")
76− >>> RB.insert (f ∷ _ "isLight") isLightTheme
77− ) theme
78− where
79− isLightTheme = isLight theme.backgroundColour
80− yellower ∷ Color -> Color
81− yellower col =
82− if brightness col > 0.8
83− then
84− lighten 0.02 col
85− else
86− col
87− # lighten 0.1
88− # desaturate 0.03
89−
90− bluer col =
91− mix HSL col blue 0.05
92− # darken 0.1
93− # desaturate 0.03
94−
95− lighter ∷ Color -> Color
96− lighter = yellower
97−
98− darker ∷ Color -> Color
99− darker = bluer
100−
101type CSSTheme =
22type CSSTheme =
102 { backgroundColour ∷ String
23 { backgroundColour ∷ String
103 , backgroundColourLighter ∷ String
24 , backgroundColourLighter ∷ String
@@ -126,4 +47,3 @@ type CSSTheme =
126 , red ∷ String
47 , red ∷ String
127 , blue ∷ String
48 , blue ∷ String
128 }
49 }
129−
src/Typography/Header.purs+7−7
@@ -2,11 +2,11 @@ module Typography.Header where
2
2
3import Prelude
3import Prelude
4
4
5+import CSS.Safer (cssSafer)
5import Data.Array as Array
6import Data.Array as Array
6import Data.Foldable (intercalate)
7import Data.Foldable (intercalate)
7import Data.Maybe (Maybe)
8import Data.Maybe (Maybe)
8import Effect (Effect)
9import Effect (Effect)
9−import React.Basic.DOM (css)
10import React.Basic.DOM as R
10import React.Basic.DOM as R
11import React.Basic.Hooks (ReactComponent, component)
11import React.Basic.Hooks (ReactComponent, component)
12import React.Basic.Hooks as React
12import React.Basic.Hooks as React
@@ -26,12 +26,12 @@ mkH = do
26 useStyles <-
26 useStyles <-
27 makeStyles \(theme ∷ CSSTheme) ->
27 makeStyles \(theme ∷ CSSTheme) ->
28 { common:
28 { common:
29− css
29+ cssSafer
30 { color: theme.textColour
30 { color: theme.textColour
31 , fontFamily: theme.headingFontFamily
31 , fontFamily: theme.headingFontFamily
32 }
32 }
33 , h1:
33 , h1:
34− css
34+ cssSafer
35 { textTransform: "uppercase"
35 { textTransform: "uppercase"
36 , fontSize: "3.6em"
36 , fontSize: "3.6em"
37 , letterSpacing: "0.07em"
37 , letterSpacing: "0.07em"
@@ -39,7 +39,7 @@ mkH = do
39 , padding: 0
39 , padding: 0
40 }
40 }
41 , h2:
41 , h2:
42− css
42+ cssSafer
43 { textTransform: "uppercase"
43 { textTransform: "uppercase"
44 , fontSize: "3em"
44 , fontSize: "3em"
45 , letterSpacing: "0.05em"
45 , letterSpacing: "0.05em"
@@ -47,19 +47,19 @@ mkH = do
47 , padding: 0
47 , padding: 0
48 }
48 }
49 , h3:
49 , h3:
50− css
50+ cssSafer
51 { fontSize: "2.2em"
51 { fontSize: "2.2em"
52 , margin: 0
52 , margin: 0
53 , padding: 0
53 , padding: 0
54 }
54 }
55 , h4:
55 , h4:
56− css
56+ cssSafer
57 { fontSize: "1.5em"
57 { fontSize: "1.5em"
58 , margin: 0
58 , margin: 0
59 , padding: 0
59 , padding: 0
60 }
60 }
61 , h5:
61 , h5:
62− css
62+ cssSafer
63 { fontSize: "1.0em"
63 { fontSize: "1.0em"
64 , margin: 0
64 , margin: 0
65 , padding: 0
65 , padding: 0
src/Typography/Paragraph.purs+5−4
@@ -1,20 +1,21 @@
1module Typography.Paragraph where
1module Typography.Paragraph where
2
2
3import Prelude
3import Prelude
4+
5+import CSS.Safer (cssSafer)
4import Effect (Effect)
6import Effect (Effect)
5−import React.Basic.DOM (css)
6import React.Basic.DOM as R
7import React.Basic.DOM as R
7import React.Basic.Hooks (ReactComponent, component)
8import React.Basic.Hooks (ReactComponent, component)
8import React.Basic.Hooks as React
9import React.Basic.Hooks as React
9import Theme.Styles (makeStyles)
10import Theme.Styles (makeStyles)
10−import Theme.Types (Theme)
11+import Theme.Types (CSSTheme)
11
12
12mkP ∷ Effect (ReactComponent { text ∷ String })
13mkP ∷ Effect (ReactComponent { text ∷ String })
13mkP = do
14mkP = do
14 useStyles <-
15 useStyles <-
15− makeStyles \(theme ∷ Theme) ->
16+ makeStyles \(theme ∷ CSSTheme) ->
16 { p:
17 { p:
17− css
18+ cssSafer
18 { color: theme.textColour
19 { color: theme.textColour
19 , fontFamily: theme.textFontFamily
20 , fontFamily: theme.textFontFamily
20 , fontSize: "1em"
21 , fontSize: "1em"
stories/ButtonStories.purs−1
@@ -6,7 +6,6 @@ import Button.Component (ButtonType(..), mkButton)
6import Decorator.FullScreen (fullScreenDecorator)
6import Decorator.FullScreen (fullScreenDecorator)
7import Effect (Effect)
7import Effect (Effect)
8import Effect.Console (log)
8import Effect.Console (log)
9−import React.Basic.DOM (css)
10import React.Basic.DOM as R
9import React.Basic.DOM as R
11import React.Basic.Events (handler_)
10import React.Basic.Events (handler_)
12import React.Basic.Hooks (component, element)
11import React.Basic.Hooks (component, element)
stories/ContainerStories.purs−4
@@ -4,14 +4,10 @@ import Prelude hiding (add)
4import Container.Component (mkContainer)
4import Container.Component (mkContainer)
5import Decorator.FullScreen (fullScreenDecorator)
5import Decorator.FullScreen (fullScreenDecorator)
6import Effect (Effect)
6import Effect (Effect)
7−import React.Basic.DOM (css)
8−import React.Basic.DOM as R
9import React.Basic.Hooks (component, element)
7import React.Basic.Hooks (component, element)
10import React.Basic.Hooks as React
8import React.Basic.Hooks as React
11import Storybook.React (Storybook, add, addDecorator, storiesOf)
9import Storybook.React (Storybook, add, addDecorator, storiesOf)
12−import Theme.Default (darkTheme)
13import Theme.Styles (useTheme)
10import Theme.Styles (useTheme)
14−import Theme.Types (fromTheme)
15
11
16stories ∷ Effect Storybook
12stories ∷ Effect Storybook
17stories =
13stories =
stories/Decorator/FullScreen.purs+25−10
@@ -1,7 +1,7 @@
1module Decorator.FullScreen where
1module Decorator.FullScreen where
2
2
3import Prelude
3import Prelude
4−
4+import CSS.Safer (cssSafer)
5import Data.Array (find)
5import Data.Array (find)
6import Data.Map (Map)
6import Data.Map (Map)
7import Data.Maybe (Maybe, fromMaybe)
7import Data.Maybe (Maybe, fromMaybe)
@@ -15,9 +15,11 @@ import React.Basic.Events (handler)
15import React.Basic.Hooks (ReactComponent, component, element, useState, (/\))
15import React.Basic.Hooks (ReactComponent, component, element, useState, (/\))
16import React.Basic.Hooks as React
16import React.Basic.Hooks as React
17import Simple.JSON (readJSON_, writeJSON)
17import Simple.JSON (readJSON_, writeJSON)
18+import Theme (fromTheme)
18import Theme.Default (darkTheme, lightTheme)
19import Theme.Default (darkTheme, lightTheme)
19import Theme.Provider (mkThemeProvider)
20import Theme.Provider (mkThemeProvider)
21+import Theme.Styles (makeStyles_)
20−import Theme.Types (CSSTheme, fromTheme)
22+import Theme.Types (CSSTheme)
21import Web.HTML (window)
23import Web.HTML (window)
22import Web.HTML.Window (localStorage)
24import Web.HTML.Window (localStorage)
23import Web.Storage.Storage (getItem, setItem)
25import Web.Storage.Storage (getItem, setItem)
@@ -26,15 +28,14 @@ fullScreenDecorator ∷ JSX -> Effect JSX
26fullScreenDecorator child = do
28fullScreenDecorator child = do
27 let
29 let
28 dark = fromTheme darkTheme
30 dark = fromTheme darkTheme
31+
29 light = fromTheme lightTheme
32 light = fromTheme lightTheme
30 themeSwitcher <- mkThemeSwitcher
33 themeSwitcher <- mkThemeSwitcher
31 pure
34 pure
32 $ R.div
35 $ R.div
33 { style:
36 { style:
34 css
37 css
35− { width: "100vw"
38+ { minWidth: "100vw"
36− , minHeight: "900px"
37− , minWidth: "1440px"
38 , height: "100vh"
39 , height: "100vh"
39 }
40 }
40 , children:
41 , children:
@@ -42,9 +43,9 @@ fullScreenDecorator child = do
42 { children: [ child ]
43 { children: [ child ]
43 , defaultTheme: { name: "Dark", theme: dark }
44 , defaultTheme: { name: "Dark", theme: dark }
44 , themes:
45 , themes:
45− [ { name: "Dark", theme: dark }
46+ [ { name: "Dark", theme: dark }
46− , { name: "Light", theme: light }
47+ , { name: "Light", theme: light }
47− ]
48+ ]
48 }
49 }
49 ]
50 ]
50 }
51 }
@@ -52,7 +53,8 @@ fullScreenDecorator child = do
52type ThemesWithNames
53type ThemesWithNames
53 = Map String CSSTheme
54 = Map String CSSTheme
54
55
56+type DefaultTheme
55−type DefaultTheme = { name ∷ String, theme ∷ CSSTheme }
57+ = { name ∷ String, theme ∷ CSSTheme }
56
58
57mkThemeSwitcher ∷
59mkThemeSwitcher ∷
58 Effect
60 Effect
@@ -60,9 +62,20 @@ mkThemeSwitcher ∷
60 )
62 )
61mkThemeSwitcher = do
63mkThemeSwitcher = do
62 themeProvider <- mkThemeProvider
64 themeProvider <- mkThemeProvider
65+ useStyles <-
66+ makeStyles_
67+ { selector:
68+ cssSafer
69+ { position: "absolute"
70+ , zIndex: 20
71+ , top: 10
72+ , right: 10
73+ }
74+ }
63 storage <- window >>= localStorage
75 storage <- window >>= localStorage
64 saved ∷ (Maybe DefaultTheme) <- getItem "theme" storage <#> (_ >>= readJSON_)
76 saved ∷ (Maybe DefaultTheme) <- getItem "theme" storage <#> (_ >>= readJSON_)
65 component "ThemeSwitcher" \{ defaultTheme, themes, children } -> React.do
77 component "ThemeSwitcher" \{ defaultTheme, themes, children } -> React.do
78+ classes <- useStyles
66 { theme, name } /\ modTheme <- useState $ fromMaybe defaultTheme saved
79 { theme, name } /\ modTheme <- useState $ fromMaybe defaultTheme saved
67 let
80 let
68 setTheme newTheme = do
81 setTheme newTheme = do
@@ -78,8 +91,10 @@ mkThemeSwitcher = do
78 R.select
91 R.select
79 { onChange: handler targetValue handleClicked
92 { onChange: handler targetValue handleClicked
80 , value: name
93 , value: name
94+ , className: classes.selector
81 , children:
95 , children:
82− themes <#> \x ->
96+ themes
97+ <#> \x ->
83 R.option
98 R.option
84 { value: x.name
99 { value: x.name
85 , key: x.name
100 , key: x.name
stories/ThemeStories.purs+8−7
@@ -1,25 +1,26 @@
1module ThemeStories where
1module ThemeStories where
2
2
3import Prelude hiding (add)
3import Prelude hiding (add)
4+
4import Effect (Effect)
5import Effect (Effect)
5import React.Basic.DOM (css)
6import React.Basic.DOM (css)
6import React.Basic.DOM as R
7import React.Basic.DOM as R
7import React.Basic.Hooks (component, element)
8import React.Basic.Hooks (component, element)
8import Storybook.React (Storybook, add, storiesOf)
9import Storybook.React (Storybook, add, storiesOf)
10+import Theme (fromTheme)
9import Theme.Default (darkTheme, lightTheme)
11import Theme.Default (darkTheme, lightTheme)
10−import Theme.Types (fromTheme)
11
12
12stories ∷ Effect Storybook
13stories ∷ Effect Storybook
13stories =
14stories =
14 storiesOf "Theme" do
15 storiesOf "Theme" do
15 add "The swatches in the themes" mkExample
16 add "The swatches in the themes" mkExample
16− [ { theme: darkTheme, name: "Dark theme" }
17+ [ { theme: darkTheme, themeName: "Dark theme" }
17− , { theme: lightTheme, name: "Light theme" }
18+ , { theme: lightTheme, themeName: "Light theme" }
18 ]
19 ]
19 where
20 where
20 mkExample = do
21 mkExample = do
21 swatch <- mkSwatch
22 swatch <- mkSwatch
22− component "ExampleSwatches" \{ theme, name } -> React.do
23+ component "ExampleSwatches" \{ theme, themeName } -> React.do
23 let
24 let
24 cssTheme = fromTheme theme
25 cssTheme = fromTheme theme
25
26
@@ -39,7 +40,7 @@ stories =
39 , fontFamily: cssTheme.headingFontFamily
40 , fontFamily: cssTheme.headingFontFamily
40 , padding: "20px 0 30px 10px"
41 , padding: "20px 0 30px 10px"
41 }
42 }
42− , children: [ R.text name ]
43+ , children: [ R.text themeName ]
43 }
44 }
44 , R.div
45 , R.div
45 { style:
46 { style:
@@ -71,11 +72,11 @@ stories =
71 component "Swatch" \{ name, colour, fontFamily } -> React.do
72 component "Swatch" \{ name, colour, fontFamily } -> React.do
72 pure
73 pure
73 $ R.div
74 $ R.div
74− { style: css { display: "flex", flexDirection: "column", alignItems: "center" }
75+ { style: css{ display: "flex", flexDirection: "column", alignItems: "center" }
75 , children:
76 , children:
76 [ R.div
77 [ R.div
77 { children: [ R.text name ]
78 { children: [ R.text name ]
78− , style: css { fontFamily, paddingBottom: "5px" }
79+ , style: css{ fontFamily, paddingBottom: "5px" }
79 }
80 }
80 , R.div
81 , R.div
81 { style:
82 { style:
stories/TypographyStories.purs−5
@@ -2,16 +2,11 @@ module TypographyStories where
2
2
3import Prelude hiding (add)
3import Prelude hiding (add)
4
4
5−import Container.Component (mkContainer)
6import Data.Maybe (Maybe(..))
5import Data.Maybe (Maybe(..))
7import Decorator.FullScreen (fullScreenDecorator)
6import Decorator.FullScreen (fullScreenDecorator)
8import Effect (Effect)
7import Effect (Effect)
9−import React.Basic (element)
10import Storybook.React (Storybook, add, addDecorator, storiesOf)
8import Storybook.React (Storybook, add, addDecorator, storiesOf)
11−import Theme.Default (darkTheme)
12−import Theme.Types (fromTheme)
13import Typography.Header (HeadingLevel(..), mkH)
9import Typography.Header (HeadingLevel(..), mkH)
14−import Typography.Paragraph (mkP)
15
10
16stories ∷ Effect Storybook
11stories ∷ Effect Storybook
17stories =
12stories =