Initial commit
223
api/index.php
Executable file
@ -0,0 +1,223 @@
|
||||
<?php
|
||||
error_reporting(0);
|
||||
Header("Content-type: text/plain");
|
||||
$conn = mysqli_connect(
|
||||
/* 数据库地址 */ "localhost",
|
||||
/* 数据库账号 */ "root",
|
||||
/* 数据库密码 */ "123456",
|
||||
/* 数据库名称 */ "spanel",
|
||||
/* 数据库端口 */ 3306
|
||||
) or die("Database error");
|
||||
|
||||
// API 密码,需要和 Frps.ini 里面设置的一样
|
||||
define("API_TOKEN", "SakuraFrpToken");
|
||||
|
||||
// 输出禁止错误 Header
|
||||
function ServerForbidden($msg) {
|
||||
Header("HTTP/1.1 403 {$msg}");
|
||||
echo json_encode(Array(
|
||||
'status' => 403,
|
||||
'message' => $msg
|
||||
), JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 输出未找到错误 Header
|
||||
function ServerNotFound($msg) {
|
||||
Header("HTTP/1.1 404 {$msg}");
|
||||
echo json_encode(Array(
|
||||
'status' => 404,
|
||||
'message' => $msg
|
||||
), JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 输出未找到错误 Header
|
||||
function ServerBadRequest($msg) {
|
||||
Header("HTTP/1.1 400 {$msg}");
|
||||
echo json_encode(Array(
|
||||
'status' => 400,
|
||||
'message' => $msg
|
||||
), JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 输出正常消息
|
||||
function LoginSuccessful($msg) {
|
||||
Header("Content-type: text/plain", true, 200);
|
||||
echo json_encode(Array(
|
||||
'status' => 200,
|
||||
'success' => true,
|
||||
'message' => $msg
|
||||
), JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 输出正常消息
|
||||
function CheckSuccessful($msg) {
|
||||
Header("Content-type: text/plain", true, 200);
|
||||
echo json_encode(Array(
|
||||
'status' => 200,
|
||||
'success' => true,
|
||||
'message' => $msg
|
||||
), JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Json 格式消息输出
|
||||
function Println($data) {
|
||||
Header("Content-type: text/plain", true, 200);
|
||||
echo json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
function getBoolean($str) {
|
||||
return $str == "true";
|
||||
}
|
||||
|
||||
// 服务端 API 部分
|
||||
// 先进行 Frps 鉴权
|
||||
if(isset($_GET['apitoken']) && $_GET['apitoken'] == API_TOKEN) {
|
||||
if(isset($_GET['action'])) {
|
||||
switch($_GET['action']) {
|
||||
|
||||
// 检查客户端是否合法
|
||||
case "checktoken":
|
||||
if(isset($_GET['user'])) {
|
||||
if(preg_match("/^[A-Za-z0-9]{1,32}$/", $_GET['user'])) {
|
||||
$userToken = mysqli_real_escape_string($conn, $_GET['user']);
|
||||
$rs = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `tokens` WHERE `token`='{$userToken}'"));
|
||||
if($rs) {
|
||||
LoginSuccessful("Login successful, welcome!");
|
||||
} else {
|
||||
ServerForbidden("Login failed");
|
||||
}
|
||||
} else {
|
||||
ServerForbidden("Invalid username");
|
||||
}
|
||||
} else {
|
||||
ServerForbidden("Username cannot be empty");
|
||||
}
|
||||
break;
|
||||
|
||||
// 检查隧道是否合法
|
||||
case "checkproxy":
|
||||
if(isset($_GET['user'])) {
|
||||
if(preg_match("/^[A-Za-z0-9]{1,32}$/", $_GET['user'])) {
|
||||
$proxyName = str_replace("{$_GET['user']}.", "", $_GET['proxy_name']);
|
||||
$proxyType = $_GET['proxy_type'] ?? "tcp";
|
||||
$remotePort = Intval($_GET['remote_port']) ?? "";
|
||||
$userToken = mysqli_real_escape_string($conn, $_GET['user']);
|
||||
$rs = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `tokens` WHERE `token`='{$userToken}'"));
|
||||
if($rs) {
|
||||
if($proxyType == "tcp" || $proxyType == "udp" || $proxyType == "stcp" || $proxyType == "xtcp") {
|
||||
if(isset($remotePort) && preg_match("/^[0-9]{1,5}$/", $remotePort)) {
|
||||
$username = mysqli_real_escape_string($conn, $rs['username']);
|
||||
// 这里只对远程端口做限制,可根据自己的需要修改
|
||||
$rs = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `proxies` WHERE `username`='{$username}' AND `remote_port`='{$remotePort}' AND `proxy_type`='{$proxyType}'"));
|
||||
if($rs) {
|
||||
if($rs['status'] !== "0") {
|
||||
ServerForbidden("Proxy disabled");
|
||||
}
|
||||
CheckSuccessful("Proxy exist");
|
||||
} else {
|
||||
ServerNotFound("Proxy not found" . "SELECT * FROM `proxies` WHERE `username`='{$username}' AND `remote_port`='{$remotePort}' AND `proxy_type`='{$proxyType}'");
|
||||
}
|
||||
} else {
|
||||
ServerBadRequest("Invalid request");
|
||||
}
|
||||
} elseif($proxyType == "http" || $proxyType == "https") {
|
||||
if(isset($_GET['domain']) || isset($_GET['subdomain'])) {
|
||||
// 目前只验证域名和子域名
|
||||
$domain = $_GET['domain'] ?? "null";
|
||||
$subdomain = $_GET['subdomain'] ?? "null";
|
||||
$username = mysqli_real_escape_string($conn, $rs['username']);
|
||||
$domain = mysqli_real_escape_string($conn, $domain);
|
||||
$subdomain = mysqli_real_escape_string($conn, $subdomain);
|
||||
$domainsql = (isset($_GET['domain']) && !empty($_GET['domain'])) ? "`domain`='{$domain}'" : "`subdomain`='{$subdomain}'";
|
||||
$rs = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `proxies` WHERE `username`='{$username}' AND {$domainsql} AND `proxy_type`='{$proxyType}'"));
|
||||
if($rs) {
|
||||
if($rs['status'] !== "0") {
|
||||
ServerForbidden("Proxy disabled");
|
||||
}
|
||||
CheckSuccessful("Proxy exist");
|
||||
} else {
|
||||
ServerNotFound("Proxy not found");
|
||||
}
|
||||
} else {
|
||||
ServerBadRequest("Invalid request");
|
||||
}
|
||||
} else {
|
||||
ServerBadRequest("Invalid request");
|
||||
}
|
||||
} else {
|
||||
ServerNotFound("User not found");
|
||||
}
|
||||
} else {
|
||||
ServerBadRequest("Invalid request");
|
||||
}
|
||||
} else {
|
||||
ServerForbidden("Invalid username");
|
||||
}
|
||||
break;
|
||||
case "getlimit":
|
||||
Header("Content-type: text/plain", true, 200);
|
||||
if(isset($_GET['user'])) {
|
||||
if(preg_match("/^[A-Za-z0-9]{1,32}$/", $_GET['user'])) {
|
||||
$userToken = mysqli_real_escape_string($conn, $_GET['user']);
|
||||
$rs = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `tokens` WHERE `token`='{$userToken}'"));
|
||||
if($rs) {
|
||||
$username = mysqli_real_escape_string($conn, $rs['username']);
|
||||
$ls = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `limits` WHERE `username`='{$username}'"));
|
||||
if($ls) {
|
||||
exit(json_encode(Array(
|
||||
'status' => 200,
|
||||
'max-in' => Floatval($ls['inbound']),
|
||||
'max-out' => Floatval($ls['outbound'])
|
||||
)));
|
||||
} else {
|
||||
$uinfo = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `users` WHERE `username`='{$username}'"));
|
||||
if($uinfo) {
|
||||
if($rs['group'] == "admin") {
|
||||
exit(json_encode(Array(
|
||||
'status' => 200,
|
||||
'max-in' => 1000000,
|
||||
'max-out' => 1000000
|
||||
)));
|
||||
}
|
||||
$group = mysqli_real_escape_string($conn, $rs['group']);
|
||||
$gs = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `groups` WHERE `name`='{$group}'"));
|
||||
if($gs) {
|
||||
exit(json_encode(Array(
|
||||
'status' => 200,
|
||||
'max-in' => Floatval($gs['inbound']),
|
||||
'max-out' => Floatval($gs['outbound'])
|
||||
)));
|
||||
} else {
|
||||
exit(json_encode(Array(
|
||||
'status' => 200,
|
||||
'max-in' => 1024,
|
||||
'max-out' => 1024
|
||||
)));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ServerForbidden("Login failed");
|
||||
}
|
||||
} else {
|
||||
ServerForbidden("Invalid username");
|
||||
}
|
||||
} else {
|
||||
ServerForbidden("Username cannot be empty");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
ServerNotFound("Undefined action");
|
||||
}
|
||||
} else {
|
||||
ServerNotFound("Invalid request");
|
||||
}
|
||||
} else {
|
||||
ServerNotFound("Invalid request");
|
||||
}
|
68
assets/configuration/prettify.css
Executable file
@ -0,0 +1,68 @@
|
||||
/* Pretty printing styles. Used with prettify.js.
|
||||
*
|
||||
* Name: Stanley Ng
|
||||
* Email: stanleyhlng@googlegroups.com
|
||||
*
|
||||
* Credits:
|
||||
* https://github.com/chriskempson/tomorrow-theme
|
||||
*/
|
||||
.pln {
|
||||
color: #c5c8c6; }
|
||||
|
||||
.str {
|
||||
color: #b5bd68; }
|
||||
|
||||
.kwd {
|
||||
color: #b294bb; }
|
||||
|
||||
.com {
|
||||
color: #969896;
|
||||
font-style: italic; }
|
||||
|
||||
.typ {
|
||||
color: #de935f; }
|
||||
|
||||
.lit {
|
||||
color: #f0c674; }
|
||||
|
||||
.pun {
|
||||
color: #c5c8c6; }
|
||||
|
||||
.opn {
|
||||
color: #c5c8c6; }
|
||||
|
||||
.clo {
|
||||
color: #c5c8c6; }
|
||||
|
||||
.tag {
|
||||
color: #cc6666; }
|
||||
|
||||
.atn {
|
||||
color: #f0c674; }
|
||||
|
||||
.atv {
|
||||
color: #8abeb7; }
|
||||
|
||||
.dec {
|
||||
color: #c5c8c6; }
|
||||
|
||||
.var {
|
||||
color: #c82829; }
|
||||
|
||||
.fun {
|
||||
color: #cc6666; }
|
||||
|
||||
/* Put a border around prettyprinted code snippets. */
|
||||
pre.prettyprint {
|
||||
background-color: #21252E;
|
||||
padding: 30px;
|
||||
border: none; }
|
||||
|
||||
/* Specify class=linenums on a pre to get line numbering */
|
||||
ol.linenums {
|
||||
color: #969896;
|
||||
margin: 0; }
|
||||
|
||||
ol.linenums li {
|
||||
line-height: 18px;
|
||||
padding-left: 12px; }
|
28
assets/configuration/prettify.js
Executable file
@ -0,0 +1,28 @@
|
||||
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||||
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
|
||||
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
|
||||
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
|
||||
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
|
||||
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
|
||||
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
|
||||
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
|
||||
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||||
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
|
||||
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
|
||||
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
|
||||
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
|
||||
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
|
||||
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
|
||||
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
|
||||
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
|
||||
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
|
||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
|
||||
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
|
||||
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
|
||||
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
|
BIN
assets/download/freebsd.png
Executable file
After Width: | Height: | Size: 24 KiB |
BIN
assets/download/linux.png
Executable file
After Width: | Height: | Size: 13 KiB |
BIN
assets/download/macos.png
Executable file
After Width: | Height: | Size: 2.1 KiB |
BIN
assets/download/windows.png
Executable file
After Width: | Height: | Size: 1.6 KiB |
12
assets/email/findpass.html
Executable file
@ -0,0 +1,12 @@
|
||||
<meta charset="utf-8">
|
||||
<div style='padding-top: 1px;'>
|
||||
<h2 style="font-weight: 400;">{SITENAME} <small style='font-size: 16px;'>{SITEDESCRIPTION}</small></h2>
|
||||
<div style="width:100%;height:1px;border-top: 1px dashed rgba(0,0,0,0.3);"></div>
|
||||
<p>您好,{USERNAME}!</p>
|
||||
<p>我们收到了申请找回您的 {SITENAME} 账户密码的请求,点击以下链接后,您的密码将会被重设为 {TOKEN}。该链接的有效期为 1 小时,请尽快操作。</p>
|
||||
<p><a href="{URL}" target="_blank">{URL}</a></p>
|
||||
<p>如果以上地址无法点击,请复制到浏览器的地址栏再访问;如果您没有申请过找回密码,请勿点击链接。</p>
|
||||
<p>此邮件由系统自动发送,请勿直接回复,如有问题请通过站点上的联系方式联系我们。</p>
|
||||
<div style="width:100%;height:1px;border-top: 1px dashed rgba(0,0,0,0.3);"></div>
|
||||
<p style="text-align: right;">{SITENAME}</p>
|
||||
</div>
|
11
assets/email/welcome.html
Executable file
@ -0,0 +1,11 @@
|
||||
<meta charset="utf-8">
|
||||
<div style='padding-top: 1px;'>
|
||||
<h2 style="font-weight: 400;">{SITENAME} <small style='font-size: 16px;'>{SITEDESCRIPTION}</small></h2>
|
||||
<div style="width:100%;height:1px;border-top: 1px dashed rgba(0,0,0,0.3);"></div>
|
||||
<p>感谢您注册 {SITENAME},为了防止我们的服务被滥用,我们需要对您的电子邮件账号进行验证,您只在注册页面输入以下数字即可验证。验证码有效期为 15 分钟,请尽快完成注册。</p>
|
||||
<p style="font-size: 20px;"><code>{NUMBER}</code></p>
|
||||
<p>此邮件由系统自动发送,请勿直接回复,如果您没有注册过本站账号,请无视此邮件。</p>
|
||||
<p>如有问题请通过站点上的联系方式联系我们。</p>
|
||||
<div style="width:100%;height:1px;border-top: 1px dashed rgba(0,0,0,0.3);"></div>
|
||||
<p style="text-align: right;">{SITENAME}</p>
|
||||
</div>
|
3
assets/home/dist/css/style.css
vendored
Executable file
1
assets/home/dist/images/airbnb-logo.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="125" height="40" viewBox="0 0 125 40" xmlns="http://www.w3.org/2000/svg"><path d="M65.879 9.8a2.533 2.533 0 0 1-2.539 2.537 2.532 2.532 0 0 1-2.538-2.538 2.508 2.508 0 0 1 2.538-2.537c1.446.039 2.539 1.171 2.539 2.537zm-10.466 5.114v.624s-1.21-1.562-3.787-1.562c-4.256 0-7.576 3.24-7.576 7.73 0 4.45 3.28 7.73 7.576 7.73 2.616 0 3.787-1.601 3.787-1.601v.663c0 .313.235.546.547.546h3.163V14.365H55.96a.561.561 0 0 0-.547.549zm0 9.407c-.585.86-1.757 1.601-3.162 1.601-2.5 0-4.413-1.561-4.413-4.216 0-2.655 1.914-4.216 4.413-4.216 1.367 0 2.616.78 3.162 1.6v5.231zm6.053-9.954h3.749v14.678h-3.749V14.367zm55.998-.391c-2.578 0-3.788 1.562-3.788 1.562V7.301h-3.749v21.744h3.163a.558.558 0 0 0 .547-.546v-.664s1.21 1.6 3.787 1.6c4.257 0 7.576-3.277 7.576-7.728 0-4.45-3.319-7.731-7.536-7.731zm-.625 11.907c-1.445 0-2.577-.741-3.163-1.6V19.05c.586-.78 1.835-1.6 3.163-1.6 2.499 0 4.412 1.561 4.412 4.216 0 2.654-1.913 4.216-4.412 4.216zm-8.864-5.543v8.744h-3.75V20.77c0-2.42-.78-3.396-2.888-3.396-1.132 0-2.304.585-3.047 1.445v10.228h-3.748v-14.68h2.967c.313 0 .547.274.547.548v.624c1.094-1.132 2.538-1.562 3.983-1.562 1.64 0 3.007.47 4.1 1.406 1.328 1.093 1.836 2.498 1.836 4.958zm-22.533-6.364c-2.576 0-3.787 1.562-3.787 1.562V7.301h-3.749v21.744h3.163a.559.559 0 0 0 .547-.546v-.664s1.21 1.6 3.787 1.6c4.257 0 7.576-3.277 7.576-7.728.04-4.451-3.28-7.731-7.537-7.731zm-.625 11.907c-1.444 0-2.576-.741-3.162-1.6V19.05c.586-.78 1.835-1.6 3.162-1.6 2.5 0 4.413 1.561 4.413 4.216 0 2.654-1.913 4.216-4.413 4.216zM74.665 13.976c1.132 0 1.718.196 1.718.196v3.474s-3.124-1.055-5.076 1.171v10.267h-3.75V14.367h3.164c.312 0 .546.273.546.546v.625c.704-.82 2.227-1.562 3.398-1.562zM35.733 27.718c-.195-.468-.39-.976-.586-1.406-.313-.702-.625-1.366-.898-1.99l-.039-.04a406.922 406.922 0 0 0-8.63-17.644l-.117-.235c-.32-.608-.633-1.22-.937-1.835-.39-.703-.78-1.444-1.406-2.147C21.87.859 20.074 0 18.161 0c-1.953 0-3.71.86-4.998 2.342-.586.703-1.016 1.444-1.406 2.148a84.724 84.724 0 0 1-.936 1.835l-.118.234c-3.007 5.856-5.935 11.79-8.63 17.645l-.04.078c-.272.625-.585 1.289-.898 1.99-.195.43-.39.899-.585 1.406-.508 1.444-.664 2.81-.468 4.217a8.297 8.297 0 0 0 5.076 6.48c1.016.43 2.07.625 3.163.625.313 0 .703-.039 1.016-.078 1.288-.156 2.616-.585 3.905-1.327 1.6-.898 3.124-2.186 4.842-4.06 1.718 1.874 3.28 3.162 4.842 4.06 1.29.742 2.616 1.17 3.905 1.327.312.04.703.078 1.016.078 1.093 0 2.186-.195 3.162-.625 2.734-1.094 4.647-3.591 5.077-6.48.31-1.366.154-2.732-.353-4.177zm-17.611 2.03c-2.11-2.655-3.476-5.153-3.944-7.26-.195-.899-.235-1.68-.117-2.382a3.78 3.78 0 0 1 .625-1.64c.742-1.054 1.991-1.718 3.436-1.718 1.445 0 2.734.625 3.437 1.718.312.468.547 1.015.625 1.64.117.703.078 1.522-.117 2.381-.47 2.069-1.837 4.568-3.945 7.26zm15.58 1.835a5.802 5.802 0 0 1-3.553 4.568c-.937.39-1.953.507-2.968.39-.976-.118-1.953-.43-2.967-1.015-1.406-.782-2.812-1.991-4.452-3.787 2.577-3.162 4.139-6.051 4.725-8.627a9.765 9.765 0 0 0 .195-3.32 6.329 6.329 0 0 0-1.054-2.654c-1.212-1.757-3.242-2.771-5.507-2.771-2.264 0-4.295 1.054-5.505 2.771a6.335 6.335 0 0 0-1.055 2.655 8.107 8.107 0 0 0 .195 3.319c.586 2.576 2.187 5.504 4.725 8.666-1.601 1.796-3.046 3.006-4.452 3.787-1.015.586-1.991.898-2.967 1.015a6.25 6.25 0 0 1-2.968-.39 5.802 5.802 0 0 1-3.553-4.568 6.457 6.457 0 0 1 .351-3.045c.117-.39.313-.78.508-1.25.273-.624.585-1.288.898-1.951l.04-.078a425.627 425.627 0 0 1 8.59-17.528l.117-.235c.313-.585.625-1.21.937-1.795.313-.625.664-1.211 1.094-1.719.82-.936 1.913-1.444 3.124-1.444 1.21 0 2.304.508 3.124 1.444.43.51.78 1.095 1.093 1.719.313.585.626 1.21.937 1.795l.118.235a516.84 516.84 0 0 1 8.552 17.567v.039c.312.626.586 1.328.898 1.953.195.468.39.858.508 1.248.311 1.014.428 1.991.272 3.006z" fill="#889BB0"/></svg>
|
After Width: | Height: | Size: 3.6 KiB |
1
assets/home/dist/images/facebook-logo.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="124" height="40" viewBox="0 0 124 40" xmlns="http://www.w3.org/2000/svg"><path d="M63.849 19.694c-1.023 0-1.76.326-2.507.657v7.507c.716.066 1.126.066 1.805.066 2.454 0 2.79-1.092 2.79-2.616v-3.585c0-1.125-.384-2.029-2.088-2.029zm-16.295-.41c-1.702 0-2.09.908-2.09 2.033v.631h4.179v-.631c0-1.125-.389-2.033-2.089-2.033zm-31.566 7.813c0 .89.432 1.352 1.386 1.352 1.022 0 1.628-.324 2.375-.657v-1.78h-2.237c-1.059 0-1.524.19-1.524 1.085zM79.7 19.694c-1.705 0-2.296.904-2.296 2.03v4.106c0 1.129.59 2.035 2.296 2.035 1.7 0 2.296-.906 2.296-2.035v-4.107c0-1.125-.596-2.029-2.296-2.029zM7.632 31.702H2.619V19.917H.115v-4.06H2.62v-2.44c0-3.313 1.413-5.283 5.431-5.283h3.345v4.062h-2.09c-1.565 0-1.668.568-1.668 1.627l-.006 2.033h3.787l-.443 4.06H7.632v11.786zm17.13.031h-4.177l-.18-1.026a9.802 9.802 0 0 1-4.734 1.192c-3.063 0-4.694-1.988-4.694-4.737 0-3.244 1.903-4.402 5.307-4.402h3.465v-.701c0-1.656-.196-2.142-2.817-2.142h-4.286l.419-4.06h4.685c5.751 0 7.012 1.764 7.012 6.235v9.641zm14.206-11.518c-2.6-.433-3.346-.528-4.597-.528-2.246 0-2.925.481-2.925 2.335v3.506c0 1.853.679 2.337 2.925 2.337 1.251 0 1.998-.097 4.597-.532v3.961c-2.277.496-3.76.627-5.014.627-5.381 0-7.52-2.75-7.52-6.72v-2.845c0-3.975 2.139-6.729 7.52-6.729 1.254 0 2.737.13 5.014.629v3.959zM54.654 25.2h-9.191v.328c0 1.853.68 2.337 2.925 2.337 2.02 0 3.252-.097 5.847-.532v3.961c-2.503.496-3.807.627-6.262.627-5.382 0-7.522-2.75-7.522-6.72v-3.253c0-3.475 1.587-6.32 7.102-6.32 5.515 0 7.101 2.812 7.101 6.32V25.2zm16.294.076c0 3.838-1.129 6.637-7.97 6.637-2.471 0-3.92-.21-6.647-.618V9.355l5.01-.813v7.675c1.084-.39 2.485-.59 3.76-.59 5.012 0 5.847 2.183 5.847 5.69v3.959zm16.063.083c0 3.311-1.407 6.523-7.295 6.523-5.891 0-7.325-3.212-7.325-6.523v-3.197c0-3.313 1.434-6.525 7.325-6.525 5.888 0 7.295 3.212 7.295 6.525v3.197zm16.052 0c0 3.311-1.41 6.523-7.296 6.523-5.891 0-7.325-3.212-7.325-6.523v-3.197c0-3.313 1.434-6.525 7.325-6.525 5.887 0 7.296 3.212 7.296 6.525v3.197zm16.472 6.343h-5.431l-4.594-7.448v7.448h-5.012V9.354l5.012-.812v14.387l4.594-7.073h5.431l-5.014 7.719 5.014 8.127zM95.75 19.694c-1.703 0-2.294.904-2.294 2.03v4.106c0 1.129.591 2.035 2.294 2.035 1.7 0 2.301-.906 2.301-2.035v-4.107c0-1.125-.601-2.029-2.301-2.029zm26.646 9.229c.844 0 1.516.668 1.516 1.503 0 .848-.672 1.51-1.522 1.51a1.511 1.511 0 0 1-1.532-1.51c0-.835.686-1.503 1.532-1.503h.006zm-.006.234c-.68 0-1.237.568-1.237 1.27 0 .713.557 1.274 1.243 1.274.687.007 1.235-.56 1.235-1.268s-.548-1.276-1.235-1.276h-.006zm-.288 2.144h-.275v-1.677c.144-.02.282-.04.488-.04.261 0 .432.054.537.127.101.074.156.187.156.347 0 .221-.15.354-.336.408v.013c.151.027.254.16.289.406.04.261.082.361.108.416h-.288c-.04-.055-.082-.208-.117-.429-.04-.213-.15-.293-.37-.293h-.192v.722zm0-.928h.2c.225 0 .417-.081.417-.289 0-.147-.11-.293-.418-.293-.09 0-.152.007-.2.013v.569z" fill="#889BB0"/></svg>
|
After Width: | Height: | Size: 2.8 KiB |
1
assets/home/dist/images/feature-icon-01.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="a"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#338BF8" offset="39.97%"/><stop stop-color="#23FAD2" offset="100%"/></linearGradient><circle id="b" cx="36" cy="36" r="36"/><linearGradient x1="0%" y1="0%" x2="50%" y2="100%" id="e"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/></linearGradient><rect id="d" width="50" height="32" rx="2"/><filter x="-28%" y="-31.2%" width="156%" height="187.5%" filterUnits="objectBoundingBox" id="c"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="h"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><rect id="g" x="11" y="10" width="50" height="32" rx="2"/><filter x="-28%" y="-31.2%" width="156%" height="187.5%" filterUnits="objectBoundingBox" id="f"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter></defs><g fill="none" fill-rule="evenodd"><use fill="url(#a)" xlink:href="#b" transform="translate(28)"/><g transform="translate(41 14)"><use fill="#000" filter="url(#c)" xlink:href="#d"/><use fill="url(#e)" xlink:href="#d"/></g><g transform="translate(41 14)"><use fill="#000" filter="url(#f)" xlink:href="#g"/><use fill="url(#h)" xlink:href="#g"/></g></g></svg>
|
After Width: | Height: | Size: 1.8 KiB |
1
assets/home/dist/images/feature-icon-02.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="b"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#338BF8" offset="39.97%"/><stop stop-color="#23FAD2" offset="100%"/></linearGradient><circle id="a" cx="36" cy="36" r="36"/><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="f"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><path id="e" d="M10 18l-32 16 32 16 32-16z"/><filter x="-40.6%" y="-68.8%" width="181.2%" height="262.5%" filterUnits="objectBoundingBox" id="d"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="8" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter><linearGradient x1="0%" y1="0%" x2="50%" y2="100%" id="g"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/></linearGradient><path id="i" d="M36 0L0 18l36 18 36-18z"/><filter x="-36.1%" y="-61.1%" width="172.2%" height="244.4%" filterUnits="objectBoundingBox" id="h"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="8" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter></defs><g fill="none" fill-rule="evenodd"><g transform="translate(28)"><mask id="c" fill="#fff"><use xlink:href="#a"/></mask><use fill="url(#b)" xlink:href="#a"/><g opacity=".24" mask="url(#c)"><use fill="#000" filter="url(#d)" xlink:href="#e"/><use fill="url(#f)" xlink:href="#e"/></g></g><path fill="url(#g)" d="M33 28L11 39l22 11 22-11z" transform="translate(43 12)"/><g transform="translate(43 12)"><use fill="#000" filter="url(#h)" xlink:href="#i"/><use fill="url(#f)" xlink:href="#i"/></g></g></svg>
|
After Width: | Height: | Size: 2.0 KiB |
1
assets/home/dist/images/feature-icon-03.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="a"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#338BF8" offset="39.97%"/><stop stop-color="#23FAD2" offset="100%"/></linearGradient><linearGradient x1="-94.286%" y1="64.95%" x2="50%" y2="64.95%" id="b"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="e"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><rect id="d" x="41" y="48" width="12" height="12" rx="1"/><filter x="-116.7%" y="-83.3%" width="333.3%" height="333.3%" filterUnits="objectBoundingBox" id="c"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter><linearGradient x1="25.271%" y1="16.878%" x2="78.485%" y2="86.122%" id="f"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><g transform="translate(28)"><circle fill="url(#a)" cx="36" cy="36" r="36"/><path d="M65.682 56.376C51.035 53.443 40 40.51 40 25c0-8.766 3.525-16.71 9.235-22.49C62.57 7.786 72 20.79 72 36a35.834 35.834 0 0 1-6.318 20.376z" fill="url(#b)"/></g><g opacity=".48" transform="translate(16)"><use fill="#000" filter="url(#c)" xlink:href="#d"/><use fill="url(#e)" xlink:href="#d"/></g><path d="M25.406 32.584C20.458 19.694 27.128 5.144 40.305.086l5.376 14.004c2.376 6.19 2.14 13.091-.653 19.186-2.794 6.094-7.919 10.883-14.246 13.311C20.24 50.634 8.486 45.555 4.528 35.242L.944 25.907c10.541-4.047 22.295 1.033 26.254 11.345l-1.792-4.668z" fill="url(#f)" transform="translate(16)"/></g></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
assets/home/dist/images/feature-icon-04.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="b"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#338BF8" offset="39.97%"/><stop stop-color="#23FAD2" offset="100%"/></linearGradient><circle id="a" cx="36" cy="36" r="36"/><linearGradient x1="-46.73%" y1="64.95%" x2="32.222%" y2="64.95%" id="c"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="0%" y2="100%" id="e"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="h"><stop stop-color="#EEE" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><path id="g" d="M61.893.137l-43.95 35.738L.144 28.919z"/><filter x="-22.7%" y="-28%" width="145.3%" height="178.3%" filterUnits="objectBoundingBox" id="f"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter><path id="j" d="M36.894.14L.11 40.094 22.154 53.86z"/><filter x="-38.1%" y="-18.6%" width="176.1%" height="152.1%" filterUnits="objectBoundingBox" id="i"><feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/><feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/></filter></defs><g fill="none" fill-rule="evenodd"><g transform="translate(28)"><mask id="d" fill="#fff"><use xlink:href="#a"/></mask><use fill="url(#b)" xlink:href="#a"/><path d="M13.475 72l64.24-78L91.77 45.148C81.276 60.845 74.157 69.796 70.414 72 64.801 75.307 42 85.266 37 82.633c-3.333-1.755-11.175-5.3-23.525-10.633z" fill="url(#c)" mask="url(#d)"/></g><path fill="url(#e)" d="M25.03 40.074L21.934 46 18 36.69l2.136-5.944 14.71-12.936L56.464 3.114 62 0l-7.975 14.468-8.258 19.488-12.525 5.746z" transform="matrix(-1 0 0 1 92 4)"/><g transform="matrix(-1 0 0 1 92 4)"><use fill="#000" filter="url(#f)" xlink:href="#g"/><use fill="url(#h)" xlink:href="#g"/></g><g transform="matrix(-1 0 0 1 67 4)"><use fill="#000" filter="url(#i)" xlink:href="#j"/><use fill="url(#h)" xlink:href="#j"/></g></g></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
assets/home/dist/images/header-bg-left.svg
vendored
Executable file
After Width: | Height: | Size: 5.8 KiB |
1
assets/home/dist/images/header-bg-right.svg
vendored
Executable file
After Width: | Height: | Size: 35 KiB |
1
assets/home/dist/images/header-bg.svg
vendored
Executable file
After Width: | Height: | Size: 35 KiB |
1
assets/home/dist/images/hubspot-logo.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="113" height="40" viewBox="0 0 113 40" xmlns="http://www.w3.org/2000/svg"><g fill="#889BB0"><path d="M0 7h3.94v8.21h8.31V7h3.946v20.153H12.25V18.77H3.94v8.383H0V7zm28.678 13.589c0 1.687-1.465 3.06-3.264 3.06-1.799 0-3.264-1.373-3.264-3.06v-8.677h-3.736v8.677c0 3.62 3.14 6.564 7 6.564s7-2.945 7-6.564v-8.677h-3.736v8.677zm14.167-8.575c-1.854 0-3.147.504-4.397 1.655V7H34.7v12.359c0 4.626 3.567 7.794 7.573 7.794 4.454 0 8.357-3.225 8.357-7.57 0-4.29-3.599-7.57-7.784-7.57zm.093 11.886c-2.54 0-4.483-1.99-4.483-4.317s1.943-4.317 4.483-4.317c2.152 0 4.096 1.99 4.096 4.317S45.09 23.9 42.938 23.9zm13.987-11c0-1.768 1.256-2.328 2.63-2.328 1.107 0 2.572.785 3.527 1.738l2.451-2.69c-1.225-1.543-3.705-2.608-5.738-2.608-4.066 0-6.995 2.215-6.995 5.888 0 6.812 8.938 4.652 8.938 8.466 0 1.176-1.225 2.214-2.63 2.214-2.212 0-2.93-1.009-3.946-2.074l-2.72 2.634c1.734 1.991 3.886 3 6.457 3 3.856 0 6.964-2.242 6.964-5.747 0-7.569-8.938-5.214-8.938-8.493zm18.808-1.084c-4.007 0-7.573 3.167-7.573 7.794V32h3.748v-6.7c1.25 1.15 2.543 1.655 4.397 1.655 4.185 0 7.785-3.28 7.785-7.57 0-4.345-3.904-7.569-8.357-7.569zm.666 11.887c-2.54 0-4.483-1.992-4.483-4.318 0-2.327 1.943-4.317 4.483-4.317 2.152 0 4.095 1.99 4.095 4.317 0 2.326-1.943 4.318-4.095 4.318zm35.285.197c-2.211 0-2.84-.897-2.84-2.27v-6.084h3.438v-3.083h-3.437V8.397l-3.795 1.598v12.391c0 3.168 2.33 4.767 5.527 4.767.479 0 1.137-.03 1.496-.112l.927-3.196c-.418.027-.897.055-1.316.055z"/><path d="M100.964 15.775c-.714-1.105-1.718-1.99-2.974-2.658a8.595 8.595 0 0 0-3.009-.937V8.67c1.097-.42 1.778-1.346 1.778-2.428 0-1.474-1.315-2.668-2.952-2.668-1.639 0-2.976 1.194-2.976 2.668 0 1.082.641 2.009 1.738 2.428v3.513a9.297 9.297 0 0 0-2.618.738c-1.697-1.16-7.262-4.962-10.517-7.183.078-.25.137-.509.137-.781C79.57 3.323 78.1 2 76.285 2S73 3.323 73 4.956c0 1.632 1.47 2.956 3.287 2.956a3.53 3.53 0 0 0 1.686-.43l.687.468 9.44 6.117c-.5.412-.964.88-1.336 1.407-.753 1.072-1.214 2.252-1.214 3.538v.269c0 .903.191 1.756.516 2.557a6.56 6.56 0 0 0 1.223 1.91l-3.133 2.825c-.927-.31-1.97-.104-2.668.527a2.16 2.16 0 0 0-.743 1.615c0 .61.264 1.184.744 1.615a2.67 2.67 0 0 0 1.796.67 2.674 2.674 0 0 0 1.797-.67 2.16 2.16 0 0 0 .743-1.615c0-.236-.04-.466-.117-.685l3.238-2.913c.444.276.924.508 1.44.708a9.221 9.221 0 0 0 3.366.637h.225a8.651 8.651 0 0 0 3.842-.874c1.269-.62 2.262-1.468 3.012-2.55.754-1.086 1.169-2.285 1.169-3.604v-.066c0-1.298-.334-2.496-1.036-3.593zm-3.956 6.11c-.879.879-1.89 1.42-3.031 1.42h-.188c-.653 0-1.29-.162-1.915-.457a4.292 4.292 0 0 1-1.678-1.374c-.452-.576-.698-1.205-.698-1.87V19.4c0-.655.14-1.277.492-1.863A4.23 4.23 0 0 1 91.552 16a4.133 4.133 0 0 1 2.163-.587h.074c.716 0 1.394.127 2.034.422a4.181 4.181 0 0 1 1.598 1.307c.401.565.64 1.174.717 1.837.012.138.018.28.018.414 0 .9-.383 1.735-1.148 2.492z"/></g></svg>
|
After Width: | Height: | Size: 2.7 KiB |
1
assets/home/dist/images/logo.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><title>Blue</title><defs><linearGradient x1="95.059%" y1="50%" x2="5.575%" y2="50%" id="a"><stop stop-color="#55FBDC" offset="0%"/><stop stop-color="#08F" offset="100%"/></linearGradient><linearGradient x1="95.059%" y1="50%" x2="5.575%" y2="50%" id="b"><stop stop-color="#2ED4FF" offset="0%"/><stop stop-color="#08F" offset="98.277%"/></linearGradient><linearGradient x1="48.165%" y1="66.639%" x2="0%" y2="0%" id="c"><stop stop-color="#4F40DC" stop-opacity=".24" offset="0%"/><stop stop-color="#3525D3" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path d="M4 0h20a8 8 0 1 1 0 16H0V4a4 4 0 0 1 4-4z" fill="url(#a)"/><path d="M0 16h24a8 8 0 1 1 0 16H4a4 4 0 0 1-4-4V16z" fill="url(#b)"/><path d="M4 0h12v32H4a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z" fill="url(#c)" opacity=".64"/></g></svg>
|
After Width: | Height: | Size: 872 B |
1
assets/home/dist/images/microsoft-logo.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="150" height="40" viewBox="0 0 150 40" xmlns="http://www.w3.org/2000/svg"><g fill="#889BB0" fill-rule="evenodd"><path d="M150 16.514v-2.647h-3.295V9.75l-.11.034-3.095.945-.061.019v3.118h-4.884V12.13c0-.81.181-1.428.538-1.841.355-.408.863-.615 1.51-.615.465 0 .947.11 1.431.325l.122.054V7.265l-.057-.021c-.452-.162-1.068-.244-1.83-.244-.96 0-1.834.209-2.596.622a4.432 4.432 0 0 0-1.78 1.757c-.419.751-.631 1.618-.631 2.578v1.91h-2.294v2.647h2.294v11.153h3.293V16.514h4.884v7.088c0 2.919 1.38 4.398 4.1 4.398a6.78 6.78 0 0 0 1.4-.155c.488-.105.822-.21 1.018-.322l.043-.026v-2.672l-.134.089a2.309 2.309 0 0 1-.662.288 2.52 2.52 0 0 1-.65.11c-.638 0-1.11-.171-1.402-.51-.296-.34-.446-.938-.446-1.773v-6.515H150zm-24.387 8.799c-1.195 0-2.137-.396-2.801-1.175-.669-.783-1.007-1.9-1.007-3.317 0-1.464.338-2.61 1.007-3.406.664-.791 1.598-1.193 2.775-1.193 1.142 0 2.05.383 2.702 1.14.654.762.986 1.898.986 3.379 0 1.498-.312 2.65-.928 3.42-.612.764-1.531 1.152-2.734 1.152zm.147-11.779c-2.28 0-4.092.667-5.383 1.982-1.291 1.315-1.945 3.136-1.945 5.41 0 2.161.638 3.9 1.898 5.165 1.26 1.267 2.975 1.908 5.096 1.908 2.21 0 3.986-.676 5.277-2.009 1.29-1.332 1.945-3.135 1.945-5.356 0-2.195-.614-3.946-1.825-5.204-1.211-1.258-2.915-1.896-5.063-1.896zm-12.638 0c-1.551 0-2.834.396-3.815 1.177-.986.785-1.486 1.815-1.486 3.062 0 .647.108 1.223.32 1.711.214.49.545.921.985 1.283.436.359 1.11.735 2.001 1.117.75.308 1.31.569 1.665.774.347.201.594.404.733.6.135.193.204.457.204.783 0 .927-.696 1.378-2.128 1.378-.53 0-1.136-.11-1.8-.329a6.769 6.769 0 0 1-1.844-.932l-.136-.098v3.164l.05.023c.466.215 1.053.396 1.746.538a9.423 9.423 0 0 0 1.864.215c1.684 0 3.04-.398 4.028-1.183.996-.79 1.5-1.845 1.5-3.135 0-.93-.271-1.728-.807-2.37-.531-.639-1.454-1.225-2.74-1.743-1.026-.41-1.683-.751-1.954-1.013-.261-.253-.394-.61-.394-1.063 0-.401.164-.723.5-.983.339-.262.81-.395 1.401-.395.55 0 1.11.087 1.669.256a5.4 5.4 0 0 1 1.457.674l.134.092v-3.001l-.051-.022c-.378-.162-.875-.3-1.48-.412a9.05 9.05 0 0 0-1.622-.168zM99.236 25.313c-1.195 0-2.138-.396-2.802-1.175-.668-.783-1.006-1.899-1.006-3.317 0-1.464.338-2.61 1.007-3.406.664-.791 1.597-1.193 2.774-1.193 1.142 0 2.05.383 2.702 1.14.655.762.987 1.898.987 3.379 0 1.498-.313 2.65-.929 3.42-.611.764-1.53 1.152-2.733 1.152zm.147-11.779c-2.281 0-4.093.667-5.384 1.982-1.29 1.315-1.945 3.136-1.945 5.41 0 2.162.64 3.9 1.9 5.165C95.213 27.358 96.927 28 99.048 28c2.21 0 3.986-.676 5.277-2.009 1.29-1.332 1.945-3.135 1.945-5.356 0-2.195-.614-3.946-1.825-5.204-1.212-1.258-2.916-1.896-5.063-1.896zm-12.328 2.723v-2.39h-3.253v13.8h3.253v-7.06c0-1.2.273-2.186.811-2.93.531-.737 1.24-1.11 2.104-1.11.293 0 .622.049.978.144.353.095.608.198.759.306l.136.099v-3.273l-.052-.022c-.303-.129-.732-.194-1.274-.194-.818 0-1.55.263-2.176.779-.55.453-.947 1.075-1.251 1.85h-.035zm-9.079-2.723c-1.492 0-2.823.32-3.955.95a6.4 6.4 0 0 0-2.61 2.676c-.594 1.143-.896 2.478-.896 3.966 0 1.304.293 2.5.871 3.555a6.114 6.114 0 0 0 2.435 2.456c1.035.573 2.231.863 3.556.863 1.546 0 2.866-.309 3.924-.917l.043-.024v-2.974l-.137.1a6.12 6.12 0 0 1-1.591.826c-.575.2-1.1.302-1.56.302-1.276 0-2.3-.399-3.044-1.185-.746-.786-1.123-1.891-1.123-3.281 0-1.4.394-2.533 1.17-3.369.775-.833 1.802-1.256 3.052-1.256 1.069 0 2.11.361 3.096 1.075l.137.098v-3.133l-.044-.025c-.371-.207-.877-.378-1.505-.508a9.008 9.008 0 0 0-1.819-.195zm-9.701.333h-3.253v13.8h3.253v-13.8zm-1.593-5.879c-.536 0-1.003.182-1.386.542a1.787 1.787 0 0 0-.581 1.354c0 .529.193.975.575 1.327.379.351.847.529 1.392.529a2.01 2.01 0 0 0 1.398-.528 1.73 1.73 0 0 0 .582-1.328c0-.518-.19-.969-.566-1.339-.375-.37-.851-.557-1.414-.557zm-8.117 4.86v14.819h3.32V8.41H57.29l-5.84 14.302L45.782 8.41H41v19.256h3.12v-14.82h.107l5.985 14.82h2.354l5.892-14.818h.107z" fill-rule="nonzero"/><path d="M15 16H0V2h15zm17 0H17V2h15zM15 33H0V19h15zm17 0H17V19h15z"/></g></svg>
|
After Width: | Height: | Size: 3.7 KiB |
1
assets/home/dist/images/tabs-icon-01.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="56" height="56" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="0%" y1="7.585%" y2="100%" id="a"><stop stop-color="#C3FFF4" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><linearGradient x1="100%" y1="100%" x2="0%" y2="7.585%" id="b"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#33A0FF" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path fill="url(#a)" d="M0 0h56v56H0z"/><path fill="url(#b)" d="M16 16h9v24h-9zm13 0h5v24h-5zm9 0h2v24h-2z"/></g></svg>
|
After Width: | Height: | Size: 544 B |
1
assets/home/dist/images/tabs-icon-02.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="56" height="56" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="0%" y1="7.585%" y2="100%" id="a"><stop stop-color="#C3FFF4" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><linearGradient x1="100%" y1="100%" x2="0%" y2="7.585%" id="b"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#33A0FF" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path fill="url(#a)" d="M0 0h56v56H0z"/><path d="M1 0h7v8H0V1a1 1 0 0 1 1-1zm7 8h8v8H8V8zm8-8h7a1 1 0 0 1 1 1v7h-8V0zM0 16h8v8H1a1 1 0 0 1-1-1v-7zm16 0h8v7a1 1 0 0 1-1 1h-7v-8z" transform="translate(16 16)" fill="url(#b)"/></g></svg>
|
After Width: | Height: | Size: 658 B |
1
assets/home/dist/images/tabs-icon-03.svg
vendored
Executable file
@ -0,0 +1 @@
|
||||
<svg width="56" height="56" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="0%" y1="7.585%" y2="100%" id="a"><stop stop-color="#C3FFF4" offset="0%"/><stop stop-color="#C7E5FF" offset="100%"/></linearGradient><linearGradient x1="100%" y1="100%" x2="0%" y2="7.585%" id="b"><stop stop-color="#006DCC" offset="0%"/><stop stop-color="#33A0FF" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path fill="url(#a)" d="M0 0h56v56H0z"/><path d="M16 30l10 10H16V30zm14 10l10-10v10H30zm0-24h10v10L30 16zM16 26V16h10L16 26z" fill="url(#b)"/></g></svg>
|
After Width: | Height: | Size: 577 B |
1
assets/home/dist/images/tinder-logo.svg
vendored
Executable file
After Width: | Height: | Size: 6.4 KiB |
1
assets/home/dist/js/main.min.js
vendored
Executable file
@ -0,0 +1 @@
|
||||
!function(){const e=document.documentElement;if(e.classList.remove("no-js"),e.classList.add("js"),document.body.classList.contains("has-animations")){const e=window.sr=ScrollReveal();e.reveal(".hero-title, .hero-paragraph, .hero-cta",{delay:150,duration:1e3,distance:"60px",easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",origin:"bottom",interval:150}),e.reveal(".hero-right-decoration",{duration:1e3,distance:"40px",easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",origin:"top"}),e.reveal(".hero-left-decoration",{duration:1e3,distance:"40px",easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",origin:"bottom"}),e.reveal(".clients li",{delay:300,duration:1e3,rotate:{y:50},easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",interval:150}),e.reveal(".feature, .tabs-links li, .testimonial, .pricing-table, .pricing-faqs, .cta-inner",{duration:600,distance:"40px",easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",interval:100,origin:"bottom",viewFactor:.2})}const t=document.getElementsByClassName("accordion-title");if(t.length)for(let e=0;e<t.length;e++)t[e].addEventListener("click",function(){this.parentNode.classList.toggle("is-open");const e=this.nextElementSibling;e.style.maxHeight?e.style.maxHeight=null:e.style.maxHeight=`${e.scrollHeight}px`});const i=document.getElementsByClassName("tab-link");if(i.length)for(let e=0;e<i.length;e++)i[e].addEventListener("click",function(t){t.preventDefault();let n=i[e].parentNode.parentNode,a=n.nextElementSibling.getElementsByClassName("tab-panel"),s=n.getElementsByClassName("tab-link");for(let e=0;e<s.length;e++)s[e].classList.remove("is-active");for(let e=0;e<a.length;e++)a[e].classList.remove("is-active");let l=this.getAttribute("href");i[e].classList.add("is-active"),document.querySelector(l).classList.add("is-active")})}();
|
3
assets/home/src/images/airbnb-logo.svg
Executable file
@ -0,0 +1,3 @@
|
||||
<svg width="125" height="40" viewBox="0 0 125 40" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M65.879 9.8a2.533 2.533 0 0 1-2.539 2.537 2.532 2.532 0 0 1-2.538-2.538 2.508 2.508 0 0 1 2.538-2.537c1.446.039 2.539 1.171 2.539 2.537zm-10.466 5.114v.624s-1.21-1.562-3.787-1.562c-4.256 0-7.576 3.24-7.576 7.73 0 4.45 3.28 7.73 7.576 7.73 2.616 0 3.787-1.601 3.787-1.601v.663c0 .313.235.546.547.546h3.163V14.365H55.96a.561.561 0 0 0-.547.549zm0 9.407c-.585.86-1.757 1.601-3.162 1.601-2.5 0-4.413-1.561-4.413-4.216 0-2.655 1.914-4.216 4.413-4.216 1.367 0 2.616.78 3.162 1.6v5.231zm6.053-9.954h3.749v14.678h-3.749V14.367zm55.998-.391c-2.578 0-3.788 1.562-3.788 1.562V7.301h-3.749v21.744h3.163a.558.558 0 0 0 .547-.546v-.664s1.21 1.6 3.787 1.6c4.257 0 7.576-3.277 7.576-7.728 0-4.45-3.319-7.731-7.536-7.731zm-.625 11.907c-1.445 0-2.577-.741-3.163-1.6V19.05c.586-.78 1.835-1.6 3.163-1.6 2.499 0 4.412 1.561 4.412 4.216 0 2.654-1.913 4.216-4.412 4.216zm-8.864-5.543v8.744h-3.75V20.77c0-2.42-.78-3.396-2.888-3.396-1.132 0-2.304.585-3.047 1.445v10.228h-3.748v-14.68h2.967c.313 0 .547.274.547.548v.624c1.094-1.132 2.538-1.562 3.983-1.562 1.64 0 3.007.47 4.1 1.406 1.328 1.093 1.836 2.498 1.836 4.958zm-22.533-6.364c-2.576 0-3.787 1.562-3.787 1.562V7.301h-3.749v21.744h3.163a.559.559 0 0 0 .547-.546v-.664s1.21 1.6 3.787 1.6c4.257 0 7.576-3.277 7.576-7.728.04-4.451-3.28-7.731-7.537-7.731zm-.625 11.907c-1.444 0-2.576-.741-3.162-1.6V19.05c.586-.78 1.835-1.6 3.162-1.6 2.5 0 4.413 1.561 4.413 4.216 0 2.654-1.913 4.216-4.413 4.216zM74.665 13.976c1.132 0 1.718.196 1.718.196v3.474s-3.124-1.055-5.076 1.171v10.267h-3.75V14.367h3.164c.312 0 .546.273.546.546v.625c.704-.82 2.227-1.562 3.398-1.562zM35.733 27.718c-.195-.468-.39-.976-.586-1.406-.313-.702-.625-1.366-.898-1.99l-.039-.04a406.922 406.922 0 0 0-8.63-17.644l-.117-.235c-.32-.608-.633-1.22-.937-1.835-.39-.703-.78-1.444-1.406-2.147C21.87.859 20.074 0 18.161 0c-1.953 0-3.71.86-4.998 2.342-.586.703-1.016 1.444-1.406 2.148a84.724 84.724 0 0 1-.936 1.835l-.118.234c-3.007 5.856-5.935 11.79-8.63 17.645l-.04.078c-.272.625-.585 1.289-.898 1.99-.195.43-.39.899-.585 1.406-.508 1.444-.664 2.81-.468 4.217a8.297 8.297 0 0 0 5.076 6.48c1.016.43 2.07.625 3.163.625.313 0 .703-.039 1.016-.078 1.288-.156 2.616-.585 3.905-1.327 1.6-.898 3.124-2.186 4.842-4.06 1.718 1.874 3.28 3.162 4.842 4.06 1.29.742 2.616 1.17 3.905 1.327.312.04.703.078 1.016.078 1.093 0 2.186-.195 3.162-.625 2.734-1.094 4.647-3.591 5.077-6.48.31-1.366.154-2.732-.353-4.177zm-17.611 2.03c-2.11-2.655-3.476-5.153-3.944-7.26-.195-.899-.235-1.68-.117-2.382a3.78 3.78 0 0 1 .625-1.64c.742-1.054 1.991-1.718 3.436-1.718 1.445 0 2.734.625 3.437 1.718.312.468.547 1.015.625 1.64.117.703.078 1.522-.117 2.381-.47 2.069-1.837 4.568-3.945 7.26zm15.58 1.835a5.802 5.802 0 0 1-3.553 4.568c-.937.39-1.953.507-2.968.39-.976-.118-1.953-.43-2.967-1.015-1.406-.782-2.812-1.991-4.452-3.787 2.577-3.162 4.139-6.051 4.725-8.627a9.765 9.765 0 0 0 .195-3.32 6.329 6.329 0 0 0-1.054-2.654c-1.212-1.757-3.242-2.771-5.507-2.771-2.264 0-4.295 1.054-5.505 2.771a6.335 6.335 0 0 0-1.055 2.655 8.107 8.107 0 0 0 .195 3.319c.586 2.576 2.187 5.504 4.725 8.666-1.601 1.796-3.046 3.006-4.452 3.787-1.015.586-1.991.898-2.967 1.015a6.25 6.25 0 0 1-2.968-.39 5.802 5.802 0 0 1-3.553-4.568 6.457 6.457 0 0 1 .351-3.045c.117-.39.313-.78.508-1.25.273-.624.585-1.288.898-1.951l.04-.078a425.627 425.627 0 0 1 8.59-17.528l.117-.235c.313-.585.625-1.21.937-1.795.313-.625.664-1.211 1.094-1.719.82-.936 1.913-1.444 3.124-1.444 1.21 0 2.304.508 3.124 1.444.43.51.78 1.095 1.093 1.719.313.585.626 1.21.937 1.795l.118.235a516.84 516.84 0 0 1 8.552 17.567v.039c.312.626.586 1.328.898 1.953.195.468.39.858.508 1.248.311 1.014.428 1.991.272 3.006z" fill="#889BB0" fill-rule="nonzero"/>
|
||||
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
3
assets/home/src/images/facebook-logo.svg
Executable file
@ -0,0 +1,3 @@
|
||||
<svg width="124" height="40" viewBox="0 0 124 40" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M63.849 19.694c-1.023 0-1.76.326-2.507.657v7.507c.716.066 1.126.066 1.805.066 2.454 0 2.79-1.092 2.79-2.616v-3.585c0-1.125-.384-2.029-2.088-2.029zm-16.295-.41c-1.702 0-2.09.908-2.09 2.033v.631h4.179v-.631c0-1.125-.389-2.033-2.089-2.033zm-31.566 7.813c0 .89.432 1.352 1.386 1.352 1.022 0 1.628-.324 2.375-.657v-1.78h-2.237c-1.059 0-1.524.19-1.524 1.085zM79.7 19.694c-1.705 0-2.296.904-2.296 2.03v4.106c0 1.129.59 2.035 2.296 2.035 1.7 0 2.296-.906 2.296-2.035v-4.107c0-1.125-.596-2.029-2.296-2.029zM7.632 31.702H2.619V19.917H.115v-4.06H2.62v-2.44c0-3.313 1.413-5.283 5.431-5.283h3.345v4.062h-2.09c-1.565 0-1.668.568-1.668 1.627l-.006 2.033h3.787l-.443 4.06H7.632v11.786zm17.13.031h-4.177l-.18-1.026a9.802 9.802 0 0 1-4.734 1.192c-3.063 0-4.694-1.988-4.694-4.737 0-3.244 1.903-4.402 5.307-4.402h3.465v-.701c0-1.656-.196-2.142-2.817-2.142h-4.286l.419-4.06h4.685c5.751 0 7.012 1.764 7.012 6.235v9.641zm14.206-11.518c-2.6-.433-3.346-.528-4.597-.528-2.246 0-2.925.481-2.925 2.335v3.506c0 1.853.679 2.337 2.925 2.337 1.251 0 1.998-.097 4.597-.532v3.961c-2.277.496-3.76.627-5.014.627-5.381 0-7.52-2.75-7.52-6.72v-2.845c0-3.975 2.139-6.729 7.52-6.729 1.254 0 2.737.13 5.014.629v3.959zM54.654 25.2h-9.191v.328c0 1.853.68 2.337 2.925 2.337 2.02 0 3.252-.097 5.847-.532v3.961c-2.503.496-3.807.627-6.262.627-5.382 0-7.522-2.75-7.522-6.72v-3.253c0-3.475 1.587-6.32 7.102-6.32 5.515 0 7.101 2.812 7.101 6.32V25.2zm16.294.076c0 3.838-1.129 6.637-7.97 6.637-2.471 0-3.92-.21-6.647-.618V9.355l5.01-.813v7.675c1.084-.39 2.485-.59 3.76-.59 5.012 0 5.847 2.183 5.847 5.69v3.959zm16.063.083c0 3.311-1.407 6.523-7.295 6.523-5.891 0-7.325-3.212-7.325-6.523v-3.197c0-3.313 1.434-6.525 7.325-6.525 5.888 0 7.295 3.212 7.295 6.525v3.197zm16.052 0c0 3.311-1.41 6.523-7.296 6.523-5.891 0-7.325-3.212-7.325-6.523v-3.197c0-3.313 1.434-6.525 7.325-6.525 5.887 0 7.296 3.212 7.296 6.525v3.197zm16.472 6.343h-5.431l-4.594-7.448v7.448h-5.012V9.354l5.012-.812v14.387l4.594-7.073h5.431l-5.014 7.719 5.014 8.127zM95.75 19.694c-1.703 0-2.294.904-2.294 2.03v4.106c0 1.129.591 2.035 2.294 2.035 1.7 0 2.301-.906 2.301-2.035v-4.107c0-1.125-.601-2.029-2.301-2.029zm26.646 9.229c.844 0 1.516.668 1.516 1.503 0 .848-.672 1.51-1.522 1.51a1.511 1.511 0 0 1-1.532-1.51c0-.835.686-1.503 1.532-1.503h.006zm-.006.234c-.68 0-1.237.568-1.237 1.27 0 .713.557 1.274 1.243 1.274.687.007 1.235-.56 1.235-1.268s-.548-1.276-1.235-1.276h-.006zm-.288 2.144h-.275v-1.677c.144-.02.282-.04.488-.04.261 0 .432.054.537.127.101.074.156.187.156.347 0 .221-.15.354-.336.408v.013c.151.027.254.16.289.406.04.261.082.361.108.416h-.288c-.04-.055-.082-.208-.117-.429-.04-.213-.15-.293-.37-.293h-.192v.722zm0-.928h.2c.225 0 .417-.081.417-.289 0-.147-.11-.293-.418-.293-.09 0-.152.007-.2.013v.569z" fill="#889BB0" fill-rule="nonzero"/>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
41
assets/home/src/images/feature-icon-01.svg
Executable file
@ -0,0 +1,41 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="b">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#338BF8" offset="39.97%"/>
|
||||
<stop stop-color="#23FAD2" offset="100%"/>
|
||||
</linearGradient>
|
||||
<circle id="a" cx="36" cy="36" r="36"/>
|
||||
<linearGradient x1="0%" y1="0%" x2="50%" y2="100%" id="e">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<rect id="d" width="50" height="32" rx="2"/>
|
||||
<filter x="-28%" y="-31.2%" width="156%" height="187.5%" filterUnits="objectBoundingBox" id="c">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="h">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<rect id="g" x="11" y="10" width="50" height="32" rx="2"/>
|
||||
<filter x="-28%" y="-31.2%" width="156%" height="187.5%" filterUnits="objectBoundingBox" id="f">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<use fill="url(#b)" xlink:href="#a" transform="translate(28)"/>
|
||||
<g transform="translate(41 14)">
|
||||
<use fill="#000" filter="url(#c)" xlink:href="#d"/>
|
||||
<use fill="url(#e)" xlink:href="#d"/>
|
||||
</g>
|
||||
<g transform="translate(41 14)">
|
||||
<use fill="#000" filter="url(#f)" xlink:href="#g"/>
|
||||
<use fill="url(#h)" xlink:href="#g"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
47
assets/home/src/images/feature-icon-02.svg
Executable file
@ -0,0 +1,47 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="b">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#338BF8" offset="39.97%"/>
|
||||
<stop stop-color="#23FAD2" offset="100%"/>
|
||||
</linearGradient>
|
||||
<circle id="a" cx="36" cy="36" r="36"/>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="f">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<path id="e" d="M10 18l-32 16 32 16 32-16z"/>
|
||||
<filter x="-40.6%" y="-68.8%" width="181.2%" height="262.5%" filterUnits="objectBoundingBox" id="d">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="8" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
<linearGradient x1="0%" y1="0%" x2="50%" y2="100%" id="g">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<path id="i" d="M36 0L0 18l36 18 36-18z"/>
|
||||
<filter x="-36.1%" y="-61.1%" width="172.2%" height="244.4%" filterUnits="objectBoundingBox" id="h">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="8" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g transform="translate(28)">
|
||||
<mask id="c" fill="#fff">
|
||||
<use xlink:href="#a"/>
|
||||
</mask>
|
||||
<use fill="url(#b)" xlink:href="#a"/>
|
||||
<g opacity=".24" mask="url(#c)">
|
||||
<use fill="#000" filter="url(#d)" xlink:href="#e"/>
|
||||
<use fill="url(#f)" xlink:href="#e"/>
|
||||
</g>
|
||||
</g>
|
||||
<path fill="url(#g)" d="M33 28L11 39l22 11 22-11z" transform="translate(43 12)"/>
|
||||
<g transform="translate(43 12)">
|
||||
<use fill="#000" filter="url(#h)" xlink:href="#i"/>
|
||||
<use fill="url(#f)" xlink:href="#i"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
38
assets/home/src/images/feature-icon-03.svg
Executable file
@ -0,0 +1,38 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="a">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#338BF8" offset="39.97%"/>
|
||||
<stop stop-color="#23FAD2" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="-94.286%" y1="64.95%" x2="50%" y2="64.95%" id="b">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="e">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<rect id="d" x="41" y="48" width="12" height="12" rx="1"/>
|
||||
<filter x="-116.7%" y="-83.3%" width="333.3%" height="333.3%" filterUnits="objectBoundingBox" id="c">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
<linearGradient x1="25.271%" y1="16.878%" x2="78.485%" y2="86.122%" id="f">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g transform="translate(28)">
|
||||
<circle fill="url(#a)" cx="36" cy="36" r="36"/>
|
||||
<path d="M65.682 56.376C51.035 53.443 40 40.51 40 25c0-8.766 3.525-16.71 9.235-22.49C62.57 7.786 72 20.79 72 36a35.834 35.834 0 0 1-6.318 20.376z" fill="url(#b)"/>
|
||||
</g>
|
||||
<g opacity=".48" transform="translate(16)">
|
||||
<use fill="#000" filter="url(#c)" xlink:href="#d"/>
|
||||
<use fill="url(#e)" xlink:href="#d"/>
|
||||
</g>
|
||||
<path d="M25.406 32.584C20.458 19.694 27.128 5.144 40.305.086l5.376 14.004c2.376 6.19 2.14 13.091-.653 19.186-2.794 6.094-7.919 10.883-14.246 13.311C20.24 50.634 8.486 45.555 4.528 35.242L.944 25.907c10.541-4.047 22.295 1.033 26.254 11.345l-1.792-4.668z" fill="url(#f)" transform="translate(16)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
52
assets/home/src/images/feature-icon-04.svg
Executable file
@ -0,0 +1,52 @@
|
||||
<svg width="128" height="72" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient x1="49.078%" y1="100%" x2="0%" y2="7.585%" id="b">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#338BF8" offset="39.97%"/>
|
||||
<stop stop-color="#23FAD2" offset="100%"/>
|
||||
</linearGradient>
|
||||
<circle id="a" cx="36" cy="36" r="36"/>
|
||||
<linearGradient x1="-46.73%" y1="64.95%" x2="32.222%" y2="64.95%" id="c">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="0%" y2="100%" id="e">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="h">
|
||||
<stop stop-color="#EEE" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<path id="f" d="M61.893.137l-43.95 35.738L.144 28.919z"/>
|
||||
<filter x="-22.7%" y="-28%" width="145.3%" height="178.3%" filterUnits="objectBoundingBox" id="g">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
<path id="i" d="M36.894.14L.11 40.094 22.154 53.86z"/>
|
||||
<filter x="-38.1%" y="-18.6%" width="176.1%" height="152.1%" filterUnits="objectBoundingBox" id="j">
|
||||
<feOffset dy="4" in="SourceAlpha" result="shadowOffsetOuter1"/>
|
||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"/>
|
||||
<feColorMatrix values="0 0 0 0 0.207843137 0 0 0 0 0.145098039 0 0 0 0 0.82745098 0 0 0 0.16 0" in="shadowBlurOuter1"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g transform="translate(28)">
|
||||
<mask id="d" fill="#fff">
|
||||
<use xlink:href="#a"/>
|
||||
</mask>
|
||||
<use fill="url(#b)" xlink:href="#a"/>
|
||||
<path d="M13.475 72l64.24-78L91.77 45.148C81.276 60.845 74.157 69.796 70.414 72 64.801 75.307 42 85.266 37 82.633c-3.333-1.755-11.175-5.3-23.525-10.633z" fill="url(#c)" mask="url(#d)"/>
|
||||
</g>
|
||||
<path fill="url(#e)" d="M25.03 40.074L21.934 46 18 36.69l2.136-5.944 14.71-12.936L56.464 3.114 62 0l-7.975 14.468-8.258 19.488-12.525 5.746z" transform="matrix(-1 0 0 1 92 4)"/>
|
||||
<g transform="matrix(-1 0 0 1 92 4)">
|
||||
<use fill="#000" filter="url(#g)" xlink:href="#f"/>
|
||||
<use fill="url(#h)" xlink:href="#f"/>
|
||||
</g>
|
||||
<g transform="matrix(-1 0 0 1 67 4)">
|
||||
<use fill="#000" filter="url(#j)" xlink:href="#i"/>
|
||||
<use fill="url(#h)" xlink:href="#i"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
33
assets/home/src/images/header-bg-left.svg
Executable file
@ -0,0 +1,33 @@
|
||||
<svg width="1440" height="342" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="98.514%" id="b">
|
||||
<stop stop-color="#F5F6F7" offset="0%"/>
|
||||
<stop stop-color="#F5F6F7" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<path d="M671.508 214.185h-62.23c-18.098-19.494-41.228-39.044-79.601-51.27-90.346-28.786 160.5-6.237 146.904-128.006-13.596-121.77 141.405 109.792 127.68 164.84a104.328 104.328 0 0 1-4.735 14.436h-47.642c8.681-5.815 15.223-13.543 17.573-22.966 6.857-27.504-24.612-59.034-51.827-65.82-27.217-6.786-54.84 10.01-61.698 37.516-2.89 11.594 4.277 31.552 15.576 51.27z" id="a"/>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d">
|
||||
<stop stop-color="#00C7FA" offset="0%"/>
|
||||
<stop stop-color="#55FBDC" offset="100%"/>
|
||||
</linearGradient>
|
||||
<path d="M53.435 12.797c25.843 0 86.94 55.217 86.94 81.163 0 25.947-20.95 46.98-46.792 46.98-25.84 0-61-21.033-61-46.98 0-25.946 35.16-46.98 61-46.98M150.307 212C135 123.706 277.947 106 210.205 72.763 142.463 39.526 145.245.06 93.583 0 41.9 0 0 42.068 0 93.96 0 145.851 165.614 300.294 150.307 212z" id="c"/>
|
||||
<linearGradient x1="92.928%" y1="34.02%" x2="0%" y2="68.892%" id="e">
|
||||
<stop stop-color="#FFF" stop-opacity=".64" offset="0%"/>
|
||||
<stop stop-color="#FFF" stop-opacity="0" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="66.362%" y2="96.878%" id="g">
|
||||
<stop stop-color="#3525D3" offset="0%"/>
|
||||
<stop stop-color="#08F" stop-opacity=".32" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g transform="translate(-53)" fill="none" fill-rule="evenodd">
|
||||
<use fill="url(#b)" xlink:href="#a"/>
|
||||
<g transform="translate(0 103)">
|
||||
<mask id="f" fill="#fff">
|
||||
<use xlink:href="#c"/>
|
||||
</mask>
|
||||
<use fill="url(#d)" xlink:href="#c"/>
|
||||
<path d="M262.95 60.554l-23.456 47.225c-6.252-25.074-35.166-54.099-60.342-47.822-25.176 6.277-37.08 45.48-30.828 70.553 6.252 25.075 31.73 40.314 56.905 34.037 25.176-6.277 63.972-78.918 57.72-103.993zM93.098 202.74c-81.969 36.212 27.82-161.845 78.17-174.399 50.352-12.554 101.306 17.924 113.81 68.072 12.44 50.142-26.528 56.99-42.389 130.761-15.86 73.771-67.623-60.647-149.591-24.434z" fill="url(#e)" mask="url(#f)"/>
|
||||
<path d="M160.239 95.785l-.343-4.711c-.155-1.563-.5-3.108-.759-4.656-.148-.772-.266-1.549-.446-2.312l-.636-2.27-.65-2.262-.329-1.128-.42-1.099-1.723-4.37c-1.382-2.804-2.701-5.644-4.439-8.242-3.306-5.295-7.037-10.407-11.647-14.749-.572-.544-1.098-1.145-1.716-1.638l-1.834-1.509c-1.237-.992-2.447-2.032-3.812-2.849-1.34-.852-2.672-1.729-4.065-2.492-1.428-.7-2.873-1.37-4.33-2.001-.76-.328-.683-.13.086.238 1.274.61 2.532 1.246 3.773 1.901 1.241.656 2.373 1.501 3.54 2.266l1.722 1.189c.575.39 1.083.877 1.623 1.314l3.151 2.712c.981.977 1.93 1.983 2.885 2.973.472.5.96.983 1.415 1.496l1.303 1.6c.854 1.075 1.762 2.099 2.577 3.199l2.384 3.352c3.029 4.496 5.725 9.287 7.523 14.448 1.053 2.526 1.636 5.203 2.339 7.839.314 1.327.465 2.686.689 4.03.204 1.347.437 2.691.454 4.054l.178 4.213c.017 1.403-.13 2.806-.201 4.206l-.143 2.1c-.037.7-.201 1.389-.298 2.083l-.705 4.149c-.324 1.364-.717 2.713-1.082 4.066l-.57 2.023-.742 1.966c-.512 1.304-.966 2.632-1.539 3.907l-1.856 3.765c-2.675 4.891-5.699 9.671-9.556 13.767-.469.522-.919 1.064-1.407 1.568l-1.529 1.451c-1.038.946-2.016 1.966-3.125 2.831l-3.356 2.558c-.552.439-1.144.817-1.75 1.175l-1.805 1.092c-2.361 1.535-4.993 2.575-7.532 3.751-1.32.474-2.653.917-3.981 1.361-.667.211-1.321.462-1.999.633l-2.045.473c-5.423 1.411-11.029 1.733-16.563 1.727l-4.157-.226-1.039-.059c-.345-.036-.688-.097-1.033-.145l-2.062-.308c-2.771-.315-5.455-1.077-8.155-1.763-1.345-.363-2.635-.902-3.952-1.355l-1.963-.718c-.647-.26-1.265-.582-1.898-.873-1.255-.604-2.521-1.19-3.756-1.831l-3.567-2.17c-4.625-3.07-9.005-6.585-12.64-10.805l-1.404-1.542-1.267-1.659c-.827-1.118-1.708-2.2-2.475-3.36-1.461-2.37-2.987-4.708-4.112-7.268-1.307-2.473-2.14-5.152-3.059-7.784-.399-1.336-.68-2.707-1.012-4.059l-.47-2.035-.287-2.068c-.178-1.379-.376-2.756-.524-4.134l-.151-4.151c-.015-.691-.07-1.382-.05-2.072l.109-2.071c.086-1.378.115-2.761.244-4.135a66.948 66.948 0 0 1 4.416-17.831l1.905-4.216c.71-1.366 1.509-2.689 2.276-4.031.73-1.369 1.686-2.587 2.577-3.853l1.366-1.88c.46-.623 1.004-1.178 1.507-1.768.882-.992 1.764-1.994 2.679-2.966l2.955-2.718c.504-.441.976-.921 1.508-1.329l1.599-1.22c1.079-.796 2.112-1.658 3.227-2.396 2.27-1.418 4.461-2.961 6.841-4.144 1.177-.611 2.304-1.328 3.506-1.87l3.574-1.679c.816-.393.198-.685-.641-.301-1.17.536-2.345 1.052-3.529 1.553-1.161.549-2.295 1.168-3.455 1.732-2.358 1.065-4.529 2.486-6.801 3.763-4.351 2.822-8.643 5.953-12.115 9.877-1.92 1.939-3.477 4.194-5.078 6.401-.789 1.112-1.422 2.331-2.125 3.499-.684 1.182-1.384 2.352-1.912 3.615l-1.681 3.728c-.509 1.261-.909 2.567-1.361 3.848l-.654 1.929c-.217.642-.34 1.313-.512 1.968l-.962 3.946c-.279 1.385-.45 2.789-.675 4.184l-.315 2.094c-.081.7-.097 1.405-.148 2.108L36 96.646c.012 1.408.086 2.817.135 4.227l.09 2.116c.065.702.178 1.401.267 2.103l.6 4.207 1.004 4.137c.181.687.33 1.384.545 2.06l.712 2.011c1.771 5.416 4.606 10.429 7.852 15.068l2.58 3.385c.908 1.088 1.898 2.107 2.85 3.156l1.449 1.552 1.57 1.43c1.06.938 2.074 1.93 3.18 2.811 2.262 1.709 4.485 3.478 6.959 4.881 2.368 1.573 4.969 2.731 7.519 3.982 1.299.57 2.648 1.029 3.974 1.538l2.002.739c.68.201 1.37.378 2.055.565 1.375.362 2.749.744 4.133 1.069l4.213.686c.704.098 1.404.248 2.112.299l2.125.14c1.417.077 2.834.206 4.252.223l4.261-.143c.709-.042 1.424-.022 2.129-.121l2.12-.277c5.682-.595 11.226-2.27 16.521-4.455l3.873-1.813c1.285-.618 2.478-1.406 3.719-2.113l1.84-1.097c.608-.375 1.167-.82 1.752-1.229 1.157-.84 2.318-1.676 3.457-2.54 2.127-1.905 4.377-3.701 6.259-5.87l1.461-1.577c.492-.522.974-1.053 1.396-1.634l2.612-3.422c.451-.56.82-1.177 1.198-1.788l1.125-1.841 1.105-1.853c.375-.613.642-1.286.964-1.929l1.812-3.917c.496-1.349.96-2.711 1.425-4.07.223-.683.477-1.355.667-2.046l.502-2.094c.314-1.399.688-2.784.927-4.192.358-2.836.876-5.65.881-8.497l.083-2.366.033-1.182c0-.393-.041-.787-.061-1.18" fill="url(#g)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.0 KiB |
1
assets/home/src/images/header-bg-right.svg
Executable file
After Width: | Height: | Size: 35 KiB |
6
assets/home/src/images/hubspot-logo.svg
Executable file
@ -0,0 +1,6 @@
|
||||
<svg width="113" height="40" viewBox="0 0 113 40" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#889BB0" fill-rule="nonzero">
|
||||
<path d="M0 7h3.94v8.21h8.31V7h3.946v20.153H12.25V18.77H3.94v8.383H0V7zm28.678 13.589c0 1.687-1.465 3.06-3.264 3.06-1.799 0-3.264-1.373-3.264-3.06v-8.677h-3.736v8.677c0 3.62 3.14 6.564 7 6.564s7-2.945 7-6.564v-8.677h-3.736v8.677zm14.167-8.575c-1.854 0-3.147.504-4.397 1.655V7H34.7v12.359c0 4.626 3.567 7.794 7.573 7.794 4.454 0 8.357-3.225 8.357-7.57 0-4.29-3.599-7.57-7.784-7.57zm.093 11.886c-2.54 0-4.483-1.99-4.483-4.317s1.943-4.317 4.483-4.317c2.152 0 4.096 1.99 4.096 4.317S45.09 23.9 42.938 23.9zm13.987-11c0-1.768 1.256-2.328 2.63-2.328 1.107 0 2.572.785 3.527 1.738l2.451-2.69c-1.225-1.543-3.705-2.608-5.738-2.608-4.066 0-6.995 2.215-6.995 5.888 0 6.812 8.938 4.652 8.938 8.466 0 1.176-1.225 2.214-2.63 2.214-2.212 0-2.93-1.009-3.946-2.074l-2.72 2.634c1.734 1.991 3.886 3 6.457 3 3.856 0 6.964-2.242 6.964-5.747 0-7.569-8.938-5.214-8.938-8.493zm18.808-1.084c-4.007 0-7.573 3.167-7.573 7.794V32h3.748v-6.7c1.25 1.15 2.543 1.655 4.397 1.655 4.185 0 7.785-3.28 7.785-7.57 0-4.345-3.904-7.569-8.357-7.569zm.666 11.887c-2.54 0-4.483-1.992-4.483-4.318 0-2.327 1.943-4.317 4.483-4.317 2.152 0 4.095 1.99 4.095 4.317 0 2.326-1.943 4.318-4.095 4.318zm35.285.197c-2.211 0-2.84-.897-2.84-2.27v-6.084h3.438v-3.083h-3.437V8.397l-3.795 1.598v12.391c0 3.168 2.33 4.767 5.527 4.767.479 0 1.137-.03 1.496-.112l.927-3.196c-.418.027-.897.055-1.316.055z"/>
|
||||
<path d="M100.964 15.775c-.714-1.105-1.718-1.99-2.974-2.658a8.595 8.595 0 0 0-3.009-.937V8.67c1.097-.42 1.778-1.346 1.778-2.428 0-1.474-1.315-2.668-2.952-2.668-1.639 0-2.976 1.194-2.976 2.668 0 1.082.641 2.009 1.738 2.428v3.513a9.297 9.297 0 0 0-2.618.738c-1.697-1.16-7.262-4.962-10.517-7.183.078-.25.137-.509.137-.781C79.57 3.323 78.1 2 76.285 2S73 3.323 73 4.956c0 1.632 1.47 2.956 3.287 2.956a3.53 3.53 0 0 0 1.686-.43l.687.468 9.44 6.117c-.5.412-.964.88-1.336 1.407-.753 1.072-1.214 2.252-1.214 3.538v.269c0 .903.191 1.756.516 2.557.286.7.705 1.336 1.223 1.91l-3.133 2.825c-.927-.31-1.97-.104-2.668.527a2.16 2.16 0 0 0-.743 1.615c0 .61.264 1.184.744 1.615.475.43 1.122.672 1.796.67a2.674 2.674 0 0 0 1.797-.67c.477-.427.745-1.009.743-1.615 0-.236-.04-.466-.117-.685l3.238-2.913c.444.276.924.508 1.44.708a9.221 9.221 0 0 0 3.366.637h.225a8.651 8.651 0 0 0 3.842-.874c1.269-.62 2.262-1.468 3.012-2.55.754-1.086 1.169-2.285 1.169-3.604v-.066c0-1.298-.334-2.496-1.036-3.593zm-3.956 6.11c-.879.879-1.89 1.42-3.031 1.42h-.188c-.653 0-1.29-.162-1.915-.457a4.292 4.292 0 0 1-1.678-1.374c-.452-.576-.698-1.205-.698-1.87V19.4c0-.655.14-1.277.492-1.863A4.23 4.23 0 0 1 91.552 16a4.133 4.133 0 0 1 2.163-.587h.074c.716 0 1.394.127 2.034.422a4.181 4.181 0 0 1 1.598 1.307c.401.565.64 1.174.717 1.837.012.138.018.28.018.414 0 .9-.383 1.735-1.148 2.492z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
22
assets/home/src/images/logo.svg
Executable file
@ -0,0 +1,22 @@
|
||||
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>Blue</title>
|
||||
<defs>
|
||||
<linearGradient x1="95.059%" y1="50%" x2="5.575%" y2="50%" id="a">
|
||||
<stop stop-color="#55FBDC" offset="0%"/>
|
||||
<stop stop-color="#08F" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="95.059%" y1="50%" x2="5.575%" y2="50%" id="b">
|
||||
<stop stop-color="#2ED4FF" offset="0%"/>
|
||||
<stop stop-color="#08F" offset="98.277%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="48.165%" y1="66.639%" x2="0%" y2="0%" id="c">
|
||||
<stop stop-color="#4F40DC" stop-opacity=".24" offset="0%"/>
|
||||
<stop stop-color="#3525D3" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M4 0h20a8 8 0 1 1 0 16H0V4a4 4 0 0 1 4-4z" fill="url(#a)"/>
|
||||
<path d="M0 16h24a8 8 0 1 1 0 16H4a4 4 0 0 1-4-4V16z" fill="url(#b)"/>
|
||||
<path d="M4 0h12v32H4a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z" fill="url(#c)" opacity=".64"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 976 B |
6
assets/home/src/images/microsoft-logo.svg
Executable file
@ -0,0 +1,6 @@
|
||||
<svg width="150" height="40" viewBox="0 0 150 40" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#889BB0" fill-rule="evenodd">
|
||||
<path d="M150 16.514v-2.647h-3.295V9.75l-.11.034-3.095.945-.061.019v3.118h-4.884V12.13c0-.81.181-1.428.538-1.841.355-.408.863-.615 1.51-.615.465 0 .947.11 1.431.325l.122.054V7.265l-.057-.021c-.452-.162-1.068-.244-1.83-.244-.96 0-1.834.209-2.596.622a4.432 4.432 0 0 0-1.78 1.757c-.419.751-.631 1.618-.631 2.578v1.91h-2.294v2.647h2.294v11.153h3.293V16.514h4.884v7.088c0 2.919 1.38 4.398 4.1 4.398.448 0 .919-.053 1.4-.155.488-.105.822-.21 1.018-.322l.043-.026v-2.672l-.134.089a2.309 2.309 0 0 1-.662.288 2.52 2.52 0 0 1-.65.11c-.638 0-1.11-.171-1.402-.51-.296-.34-.446-.938-.446-1.773v-6.515H150zm-24.387 8.799c-1.195 0-2.137-.396-2.801-1.175-.669-.783-1.007-1.9-1.007-3.317 0-1.464.338-2.61 1.007-3.406.664-.791 1.598-1.193 2.775-1.193 1.142 0 2.05.383 2.702 1.14.654.762.986 1.898.986 3.379 0 1.498-.312 2.65-.928 3.42-.612.764-1.531 1.152-2.734 1.152zm.147-11.779c-2.28 0-4.092.667-5.383 1.982-1.291 1.315-1.945 3.136-1.945 5.41 0 2.161.638 3.9 1.898 5.165 1.26 1.267 2.975 1.908 5.096 1.908 2.21 0 3.986-.676 5.277-2.009 1.29-1.332 1.945-3.135 1.945-5.356 0-2.195-.614-3.946-1.825-5.204-1.211-1.258-2.915-1.896-5.063-1.896zm-12.638 0c-1.551 0-2.834.396-3.815 1.177-.986.785-1.486 1.815-1.486 3.062 0 .647.108 1.223.32 1.711.214.49.545.921.985 1.283.436.359 1.11.735 2.001 1.117.75.308 1.31.569 1.665.774.347.201.594.404.733.6.135.193.204.457.204.783 0 .927-.696 1.378-2.128 1.378-.53 0-1.136-.11-1.8-.329a6.769 6.769 0 0 1-1.844-.932l-.136-.098v3.164l.05.023c.466.215 1.053.396 1.746.538.691.142 1.319.215 1.864.215 1.684 0 3.04-.398 4.028-1.183.996-.79 1.5-1.845 1.5-3.135 0-.93-.271-1.728-.807-2.37-.531-.639-1.454-1.225-2.74-1.743-1.026-.41-1.683-.751-1.954-1.013-.261-.253-.394-.61-.394-1.063 0-.401.164-.723.5-.983.339-.262.81-.395 1.401-.395.55 0 1.11.087 1.669.256.558.17 1.048.397 1.457.674l.134.092v-3.001l-.051-.022c-.378-.162-.875-.3-1.48-.412a9.05 9.05 0 0 0-1.622-.168zM99.236 25.313c-1.195 0-2.138-.396-2.802-1.175-.668-.783-1.006-1.899-1.006-3.317 0-1.464.338-2.61 1.007-3.406.664-.791 1.597-1.193 2.774-1.193 1.142 0 2.05.383 2.702 1.14.655.762.987 1.898.987 3.379 0 1.498-.313 2.65-.929 3.42-.611.764-1.53 1.152-2.733 1.152zm.147-11.779c-2.281 0-4.093.667-5.384 1.982-1.29 1.315-1.945 3.136-1.945 5.41 0 2.162.64 3.9 1.9 5.165C95.213 27.358 96.927 28 99.048 28c2.21 0 3.986-.676 5.277-2.009 1.29-1.332 1.945-3.135 1.945-5.356 0-2.195-.614-3.946-1.825-5.204-1.212-1.258-2.916-1.896-5.063-1.896zm-12.328 2.723v-2.39h-3.253v13.8h3.253v-7.06c0-1.2.273-2.186.811-2.93.531-.737 1.24-1.11 2.104-1.11.293 0 .622.049.978.144.353.095.608.198.759.306l.136.099v-3.273l-.052-.022c-.303-.129-.732-.194-1.274-.194-.818 0-1.55.263-2.176.779-.55.453-.947 1.075-1.251 1.85h-.035zm-9.079-2.723c-1.492 0-2.823.32-3.955.95a6.4 6.4 0 0 0-2.61 2.676c-.594 1.143-.896 2.478-.896 3.966 0 1.304.293 2.5.871 3.555a6.114 6.114 0 0 0 2.435 2.456c1.035.573 2.231.863 3.556.863 1.546 0 2.866-.309 3.924-.917l.043-.024v-2.974l-.137.1a6.12 6.12 0 0 1-1.591.826c-.575.2-1.1.302-1.56.302-1.276 0-2.3-.399-3.044-1.185-.746-.786-1.123-1.891-1.123-3.281 0-1.4.394-2.533 1.17-3.369.775-.833 1.802-1.256 3.052-1.256 1.069 0 2.11.361 3.096 1.075l.137.098v-3.133l-.044-.025c-.371-.207-.877-.378-1.505-.508a9.008 9.008 0 0 0-1.819-.195zm-9.701.333h-3.253v13.8h3.253v-13.8zm-1.593-5.879c-.536 0-1.003.182-1.386.542-.386.362-.581.817-.581 1.354 0 .529.193.975.575 1.327.379.351.847.529 1.392.529.544 0 1.014-.178 1.398-.528a1.73 1.73 0 0 0 .582-1.328c0-.518-.19-.969-.566-1.339-.375-.37-.851-.557-1.414-.557zm-8.117 4.86v14.819h3.32V8.41H57.29l-5.84 14.302-5.668-14.302H41v19.256h3.12v-14.82h.107l5.985 14.82h2.354l5.892-14.818h.107z" fill-rule="nonzero"/>
|
||||
<path d="M15 16H0V2h15zM32 16H17V2h15zM15 33H0V19h15zM32 33H17V19h15z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
16
assets/home/src/images/tabs-icon-01.svg
Executable file
@ -0,0 +1,16 @@
|
||||
<svg width="56" height="56" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="0%" y1="7.585%" y2="100%" id="a">
|
||||
<stop stop-color="#C3FFF4" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="100%" y1="100%" x2="0%" y2="7.585%" id="b">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#33A0FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="url(#a)" d="M0 0h56v56H0z"/>
|
||||
<path fill="url(#b)" d="M16 16h9v24h-9zM29 16h5v24h-5zM38 16h2v24h-2z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 619 B |
16
assets/home/src/images/tabs-icon-02.svg
Executable file
@ -0,0 +1,16 @@
|
||||
<svg width="56" height="56" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="0%" y1="7.585%" y2="100%" id="a">
|
||||
<stop stop-color="#C3FFF4" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="100%" y1="100%" x2="0%" y2="7.585%" id="b">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#33A0FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="url(#a)" d="M0 0h56v56H0z"/>
|
||||
<path d="M1 0h7v8H0V1a1 1 0 0 1 1-1zm7 8h8v8H8V8zm8-8h7a1 1 0 0 1 1 1v7h-8V0zM0 16h8v8H1a1 1 0 0 1-1-1v-7zm16 0h8v7a1 1 0 0 1-1 1h-7v-8z" transform="translate(16 16)" fill="url(#b)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 730 B |
16
assets/home/src/images/tabs-icon-03.svg
Executable file
@ -0,0 +1,16 @@
|
||||
<svg width="56" height="56" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="0%" y1="7.585%" y2="100%" id="a">
|
||||
<stop stop-color="#C3FFF4" offset="0%"/>
|
||||
<stop stop-color="#C7E5FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
<linearGradient x1="100%" y1="100%" x2="0%" y2="7.585%" id="b">
|
||||
<stop stop-color="#006DCC" offset="0%"/>
|
||||
<stop stop-color="#33A0FF" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="url(#a)" d="M0 0h56v56H0z"/>
|
||||
<path d="M16 30l10 10H16V30zm14 10l10-10v10H30zm0-24h10v10L30 16zM16 26V16h10L16 26z" fill="url(#b)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 649 B |
3
assets/home/src/images/tinder-logo.svg
Executable file
After Width: | Height: | Size: 6.4 KiB |
97
assets/home/src/js/main.js
Executable file
@ -0,0 +1,97 @@
|
||||
(function () {
|
||||
const doc = document.documentElement
|
||||
|
||||
doc.classList.remove('no-js')
|
||||
doc.classList.add('js')
|
||||
|
||||
// Reveal animations
|
||||
if (document.body.classList.contains('has-animations')) {
|
||||
/* global ScrollReveal */
|
||||
const sr = window.sr = ScrollReveal()
|
||||
|
||||
sr.reveal('.hero-title, .hero-paragraph, .hero-cta', {
|
||||
delay: 150,
|
||||
duration: 1000,
|
||||
distance: '60px',
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
origin: 'bottom',
|
||||
interval: 150
|
||||
})
|
||||
|
||||
sr.reveal('.hero-right-decoration', {
|
||||
duration: 1000,
|
||||
distance: '40px',
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
origin: 'top'
|
||||
})
|
||||
|
||||
sr.reveal('.hero-left-decoration', {
|
||||
duration: 1000,
|
||||
distance: '40px',
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
origin: 'bottom'
|
||||
})
|
||||
|
||||
sr.reveal('.clients li', {
|
||||
delay: 300,
|
||||
duration: 1000,
|
||||
rotate: {
|
||||
y: 50
|
||||
},
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
interval: 150
|
||||
})
|
||||
|
||||
sr.reveal('.feature, .tabs-links li, .testimonial, .pricing-table, .pricing-faqs, .cta-inner', {
|
||||
duration: 600,
|
||||
distance: '40px',
|
||||
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||
interval: 100,
|
||||
origin: 'bottom',
|
||||
viewFactor: 0.2
|
||||
})
|
||||
}
|
||||
|
||||
// Accordion component
|
||||
const accordionEl = document.getElementsByClassName('accordion-title')
|
||||
|
||||
if (accordionEl.length) {
|
||||
for (let i = 0; i < accordionEl.length; i++) {
|
||||
accordionEl[i].addEventListener('click', function () {
|
||||
this.parentNode.classList.toggle('is-open')
|
||||
const panel = this.nextElementSibling
|
||||
if (panel.style.maxHeight) {
|
||||
panel.style.maxHeight = null
|
||||
} else {
|
||||
panel.style.maxHeight = `${panel.scrollHeight}px`
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Tabs component
|
||||
const tabLinksAll = document.getElementsByClassName('tab-link')
|
||||
|
||||
if (tabLinksAll.length) {
|
||||
for (let i = 0; i < tabLinksAll.length; i++) {
|
||||
tabLinksAll[i].addEventListener('click', function (e) {
|
||||
e.preventDefault()
|
||||
let tabLinksContainer = tabLinksAll[i].parentNode.parentNode
|
||||
let tabPanels = tabLinksContainer.nextElementSibling.getElementsByClassName('tab-panel')
|
||||
let tabLinks = tabLinksContainer.getElementsByClassName('tab-link')
|
||||
// Remove is-active class from all links and panels
|
||||
for (let i = 0; i < tabLinks.length; i++) {
|
||||
tabLinks[i].classList.remove('is-active')
|
||||
}
|
||||
for (let i = 0; i < tabPanels.length; i++) {
|
||||
tabPanels[i].classList.remove('is-active')
|
||||
}
|
||||
// Get the ID of panel to display
|
||||
let tabID = this.getAttribute('href')
|
||||
// Add is-active class to matching link and panel
|
||||
tabLinksAll[i].classList.add('is-active')
|
||||
document.querySelector(tabID).classList.add('is-active')
|
||||
})
|
||||
}
|
||||
}
|
||||
}())
|
231
assets/home/src/scss/_normalize.scss
Executable file
@ -0,0 +1,231 @@
|
||||
html {
|
||||
line-height: 1.15;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
article,
|
||||
aside,
|
||||
footer,
|
||||
header,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
figcaption,
|
||||
figure,
|
||||
main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
-webkit-text-decoration-skip: objects;
|
||||
}
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none;
|
||||
text-decoration: underline;
|
||||
text-decoration: underline dotted;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
mark {
|
||||
background-color: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
audio,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
line-height: 1.15;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button,
|
||||
input {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
button,
|
||||
html [type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
padding: 0.35em 0.75em 0.625em;
|
||||
}
|
||||
|
||||
legend {
|
||||
box-sizing: border-box;
|
||||
color: inherit;
|
||||
display: table;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
progress {
|
||||
display: inline-block;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
details,
|
||||
menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
canvas {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
55
assets/home/src/scss/abstracts/_functions.scss
Executable file
@ -0,0 +1,55 @@
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Font Size -------------------------------------------------
|
||||
// Used in _mixins.scss [@mixin font-size] ----------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function get-font-size($size, $elem) {
|
||||
@return nth(map-get(map-get($font__scale, $elem), $size), 1);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Line Height -----------------------------------------------
|
||||
// Used in _mixins.scss [@mixin font-size] ----------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function get-line-height($size, $elem) {
|
||||
@return nth(map-get(map-get($font__scale, $elem), $size), 2);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Kerning ---------------------------------------------------
|
||||
// Used in _mixins.scss [@mixin font-size] ----------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function get-kerning($size, $elem) {
|
||||
@return nth(map-get(map-get($font__scale, $elem), $size), 3);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Font Family -----------------------------------------------
|
||||
// Used in _mixins.scss [@mixin font-family] --------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function get-font-family($elem) {
|
||||
@return map-get($font__family, $elem);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Font Weight -----------------------------------------------
|
||||
// Used in _mixins.scss [@mixin font-weight] --------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function get-font-weight($elem) {
|
||||
@return map-get($font__weight, $elem);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Padding of Content Area Elements --------------------------
|
||||
// Used in _mixins.scss [@mixin font-size] ----------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function get-content-padding($elem) {
|
||||
@return map-get($content__padding, $elem);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
// Retrieve Colors ----------------------------------------------------
|
||||
// Usage: color(typography, 1) ----------------------------------------------
|
||||
// --------------------------------------------------------------------
|
||||
@function color($elem, $variant) {
|
||||
@return map-get(map-get($color, $elem), $variant);
|
||||
}
|
567
assets/home/src/scss/abstracts/_include-media.scss
Executable file
@ -0,0 +1,567 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
// _ _ _ _ _
|
||||
// (_) | | | | | (_)
|
||||
// _ _ __ ___| |_ _ __| | ___ _ __ ___ ___ __| |_ __ _
|
||||
// | | '_ \ / __| | | | |/ _` |/ _ \ | '_ ` _ \ / _ \/ _` | |/ _` |
|
||||
// | | | | | (__| | |_| | (_| | __/ | | | | | | __/ (_| | | (_| |
|
||||
// |_|_| |_|\___|_|\__,_|\__,_|\___| |_| |_| |_|\___|\__,_|_|\__,_|
|
||||
//
|
||||
// Simple, elegant and maintainable media queries in Sass
|
||||
// v1.4.9
|
||||
//
|
||||
// http://include-media.com
|
||||
//
|
||||
// Authors: Eduardo Boucas (@eduardoboucas)
|
||||
// Hugo Giraudel (@hugogiraudel)
|
||||
//
|
||||
// This project is licensed under the terms of the MIT license
|
||||
|
||||
|
||||
////
|
||||
/// include-media library public configuration
|
||||
/// @author Eduardo Boucas
|
||||
/// @access public
|
||||
////
|
||||
|
||||
|
||||
///
|
||||
/// Creates a list of global breakpoints
|
||||
///
|
||||
/// @example scss - Creates a single breakpoint with the label `phone`
|
||||
/// $breakpoints: ('phone': 320px);
|
||||
///
|
||||
$breakpoints: (
|
||||
'small': 480px,
|
||||
'medium': 640px,
|
||||
'large': 1024px,
|
||||
) !default;
|
||||
|
||||
|
||||
///
|
||||
/// Creates a list of static expressions or media types
|
||||
///
|
||||
/// @example scss - Creates a single media type (screen)
|
||||
/// $media-expressions: ('screen': 'screen');
|
||||
///
|
||||
/// @example scss - Creates a static expression with logical disjunction (OR operator)
|
||||
/// $media-expressions: (
|
||||
/// 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)'
|
||||
/// );
|
||||
///
|
||||
$media-expressions: (
|
||||
'screen': 'screen',
|
||||
'print': 'print',
|
||||
'handheld': 'handheld',
|
||||
'landscape': '(orientation: landscape)',
|
||||
'portrait': '(orientation: portrait)',
|
||||
'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)',
|
||||
'retina3x': '(-webkit-min-device-pixel-ratio: 3), (min-resolution: 350dpi), (min-resolution: 3dppx)'
|
||||
) !default;
|
||||
|
||||
|
||||
///
|
||||
/// Defines a number to be added or subtracted from each unit when declaring breakpoints with exclusive intervals
|
||||
///
|
||||
/// @example scss - Interval for pixels is defined as `1` by default
|
||||
/// @include media('>128px') {}
|
||||
///
|
||||
/// /* Generates: */
|
||||
/// @media (min-width: 129px) {}
|
||||
///
|
||||
/// @example scss - Interval for ems is defined as `0.01` by default
|
||||
/// @include media('>20em') {}
|
||||
///
|
||||
/// /* Generates: */
|
||||
/// @media (min-width: 20.01em) {}
|
||||
///
|
||||
/// @example scss - Interval for rems is defined as `0.1` by default, to be used with `font-size: 62.5%;`
|
||||
/// @include media('>2.0rem') {}
|
||||
///
|
||||
/// /* Generates: */
|
||||
/// @media (min-width: 2.1rem) {}
|
||||
///
|
||||
$unit-intervals: (
|
||||
'px': 1,
|
||||
'em': 0.01,
|
||||
'rem': 0.1,
|
||||
'': 0
|
||||
) !default;
|
||||
|
||||
///
|
||||
/// Defines whether support for media queries is available, useful for creating separate stylesheets
|
||||
/// for browsers that don't support media queries.
|
||||
///
|
||||
/// @example scss - Disables support for media queries
|
||||
/// $im-media-support: false;
|
||||
/// @include media('>=tablet') {
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// /* Generates: */
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
///
|
||||
$im-media-support: true !default;
|
||||
|
||||
///
|
||||
/// Selects which breakpoint to emulate when support for media queries is disabled. Media queries that start at or
|
||||
/// intercept the breakpoint will be displayed, any others will be ignored.
|
||||
///
|
||||
/// @example scss - This media query will show because it intercepts the static breakpoint
|
||||
/// $im-media-support: false;
|
||||
/// $im-no-media-breakpoint: 'desktop';
|
||||
/// @include media('>=tablet') {
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// /* Generates: */
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
///
|
||||
/// @example scss - This media query will NOT show because it does not intercept the desktop breakpoint
|
||||
/// $im-media-support: false;
|
||||
/// $im-no-media-breakpoint: 'tablet';
|
||||
/// @include media('>=desktop') {
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// /* No output */
|
||||
///
|
||||
$im-no-media-breakpoint: 'desktop' !default;
|
||||
|
||||
///
|
||||
/// Selects which media expressions are allowed in an expression for it to be used when media queries
|
||||
/// are not supported.
|
||||
///
|
||||
/// @example scss - This media query will show because it intercepts the static breakpoint and contains only accepted media expressions
|
||||
/// $im-media-support: false;
|
||||
/// $im-no-media-breakpoint: 'desktop';
|
||||
/// $im-no-media-expressions: ('screen');
|
||||
/// @include media('>=tablet', 'screen') {
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// /* Generates: */
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
///
|
||||
/// @example scss - This media query will NOT show because it intercepts the static breakpoint but contains a media expression that is not accepted
|
||||
/// $im-media-support: false;
|
||||
/// $im-no-media-breakpoint: 'desktop';
|
||||
/// $im-no-media-expressions: ('screen');
|
||||
/// @include media('>=tablet', 'retina2x') {
|
||||
/// .foo {
|
||||
/// color: tomato;
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// /* No output */
|
||||
///
|
||||
$im-no-media-expressions: ('screen', 'portrait', 'landscape') !default;
|
||||
|
||||
////
|
||||
/// Cross-engine logging engine
|
||||
/// @author Hugo Giraudel
|
||||
/// @access private
|
||||
////
|
||||
|
||||
|
||||
///
|
||||
/// Log a message either with `@error` if supported
|
||||
/// else with `@warn`, using `feature-exists('at-error')`
|
||||
/// to detect support.
|
||||
///
|
||||
/// @param {String} $message - Message to log
|
||||
///
|
||||
@function im-log($message) {
|
||||
@if feature-exists('at-error') {
|
||||
@error $message;
|
||||
} @else {
|
||||
@warn $message;
|
||||
$_: noop();
|
||||
}
|
||||
|
||||
@return $message;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Wrapper mixin for the log function so it can be used with a more friendly
|
||||
/// API than `@if im-log('..') {}` or `$_: im-log('..')`. Basically, use the function
|
||||
/// within functions because it is not possible to include a mixin in a function
|
||||
/// and use the mixin everywhere else because it's much more elegant.
|
||||
///
|
||||
/// @param {String} $message - Message to log
|
||||
///
|
||||
@mixin log($message) {
|
||||
@if im-log($message) {}
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Function with no `@return` called next to `@warn` in Sass 3.3
|
||||
/// to trigger a compiling error and stop the process.
|
||||
///
|
||||
@function noop() {}
|
||||
|
||||
///
|
||||
/// Determines whether a list of conditions is intercepted by the static breakpoint.
|
||||
///
|
||||
/// @param {Arglist} $conditions - Media query conditions
|
||||
///
|
||||
/// @return {Boolean} - Returns true if the conditions are intercepted by the static breakpoint
|
||||
///
|
||||
@function im-intercepts-static-breakpoint($conditions...) {
|
||||
$no-media-breakpoint-value: map-get($breakpoints, $im-no-media-breakpoint);
|
||||
|
||||
@if not $no-media-breakpoint-value {
|
||||
@if im-log('`#{$im-no-media-breakpoint}` is not a valid breakpoint.') {}
|
||||
}
|
||||
|
||||
@each $condition in $conditions {
|
||||
@if not map-has-key($media-expressions, $condition) {
|
||||
$operator: get-expression-operator($condition);
|
||||
$prefix: get-expression-prefix($operator);
|
||||
$value: get-expression-value($condition, $operator);
|
||||
|
||||
@if ($prefix == 'max' and $value <= $no-media-breakpoint-value) or
|
||||
($prefix == 'min' and $value > $no-media-breakpoint-value) {
|
||||
@return false;
|
||||
}
|
||||
} @else if not index($im-no-media-expressions, $condition) {
|
||||
@return false;
|
||||
}
|
||||
}
|
||||
|
||||
@return true;
|
||||
}
|
||||
|
||||
////
|
||||
/// Parsing engine
|
||||
/// @author Hugo Giraudel
|
||||
/// @access private
|
||||
////
|
||||
|
||||
|
||||
///
|
||||
/// Get operator of an expression
|
||||
///
|
||||
/// @param {String} $expression - Expression to extract operator from
|
||||
///
|
||||
/// @return {String} - Any of `>=`, `>`, `<=`, `<`, `≥`, `≤`
|
||||
///
|
||||
@function get-expression-operator($expression) {
|
||||
@each $operator in ('>=', '>', '<=', '<', '≥', '≤') {
|
||||
@if str-index($expression, $operator) {
|
||||
@return $operator;
|
||||
}
|
||||
}
|
||||
|
||||
// It is not possible to include a mixin inside a function, so we have to
|
||||
// rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
|
||||
// functions cannot be called anywhere in Sass, we need to hack the call in
|
||||
// a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
|
||||
// Sass 3.3, change this line in `@if im-log(..) {}` instead.
|
||||
$_: im-log('No operator found in `#{$expression}`.');
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Get dimension of an expression, based on a found operator
|
||||
///
|
||||
/// @param {String} $expression - Expression to extract dimension from
|
||||
/// @param {String} $operator - Operator from `$expression`
|
||||
///
|
||||
/// @return {String} - `width` or `height` (or potentially anything else)
|
||||
///
|
||||
@function get-expression-dimension($expression, $operator) {
|
||||
$operator-index: str-index($expression, $operator);
|
||||
$parsed-dimension: str-slice($expression, 0, $operator-index - 1);
|
||||
$dimension: 'width';
|
||||
|
||||
@if str-length($parsed-dimension) > 0 {
|
||||
$dimension: $parsed-dimension;
|
||||
}
|
||||
|
||||
@return $dimension;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Get dimension prefix based on an operator
|
||||
///
|
||||
/// @param {String} $operator - Operator
|
||||
///
|
||||
/// @return {String} - `min` or `max`
|
||||
///
|
||||
@function get-expression-prefix($operator) {
|
||||
@return if(index(('<', '<=', '≤'), $operator), 'max', 'min');
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Get value of an expression, based on a found operator
|
||||
///
|
||||
/// @param {String} $expression - Expression to extract value from
|
||||
/// @param {String} $operator - Operator from `$expression`
|
||||
///
|
||||
/// @return {Number} - A numeric value
|
||||
///
|
||||
@function get-expression-value($expression, $operator) {
|
||||
$operator-index: str-index($expression, $operator);
|
||||
$value: str-slice($expression, $operator-index + str-length($operator));
|
||||
|
||||
@if map-has-key($breakpoints, $value) {
|
||||
$value: map-get($breakpoints, $value);
|
||||
} @else {
|
||||
$value: to-number($value);
|
||||
}
|
||||
|
||||
$interval: map-get($unit-intervals, unit($value));
|
||||
|
||||
@if not $interval {
|
||||
// It is not possible to include a mixin inside a function, so we have to
|
||||
// rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
|
||||
// functions cannot be called anywhere in Sass, we need to hack the call in
|
||||
// a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
|
||||
// Sass 3.3, change this line in `@if im-log(..) {}` instead.
|
||||
$_: im-log('Unknown unit `#{unit($value)}`.');
|
||||
}
|
||||
|
||||
@if $operator == '>' {
|
||||
$value: $value + $interval;
|
||||
} @else if $operator == '<' {
|
||||
$value: $value - $interval;
|
||||
}
|
||||
|
||||
@return $value;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Parse an expression to return a valid media-query expression
|
||||
///
|
||||
/// @param {String} $expression - Expression to parse
|
||||
///
|
||||
/// @return {String} - Valid media query
|
||||
///
|
||||
@function parse-expression($expression) {
|
||||
// If it is part of $media-expressions, it has no operator
|
||||
// then there is no need to go any further, just return the value
|
||||
@if map-has-key($media-expressions, $expression) {
|
||||
@return map-get($media-expressions, $expression);
|
||||
}
|
||||
|
||||
$operator: get-expression-operator($expression);
|
||||
$dimension: get-expression-dimension($expression, $operator);
|
||||
$prefix: get-expression-prefix($operator);
|
||||
$value: get-expression-value($expression, $operator);
|
||||
|
||||
@return '(#{$prefix}-#{$dimension}: #{$value})';
|
||||
}
|
||||
|
||||
///
|
||||
/// Slice `$list` between `$start` and `$end` indexes
|
||||
///
|
||||
/// @access private
|
||||
///
|
||||
/// @param {List} $list - List to slice
|
||||
/// @param {Number} $start [1] - Start index
|
||||
/// @param {Number} $end [length($list)] - End index
|
||||
///
|
||||
/// @return {List} Sliced list
|
||||
///
|
||||
@function slice($list, $start: 1, $end: length($list)) {
|
||||
@if length($list) < 1 or $start > $end {
|
||||
@return ();
|
||||
}
|
||||
|
||||
$result: ();
|
||||
|
||||
@for $i from $start through $end {
|
||||
$result: append($result, nth($list, $i));
|
||||
}
|
||||
|
||||
@return $result;
|
||||
}
|
||||
|
||||
////
|
||||
/// String to number converter
|
||||
/// @author Hugo Giraudel
|
||||
/// @access private
|
||||
////
|
||||
|
||||
|
||||
///
|
||||
/// Casts a string into a number
|
||||
///
|
||||
/// @param {String | Number} $value - Value to be parsed
|
||||
///
|
||||
/// @return {Number}
|
||||
///
|
||||
@function to-number($value) {
|
||||
@if type-of($value) == 'number' {
|
||||
@return $value;
|
||||
} @else if type-of($value) != 'string' {
|
||||
$_: im-log('Value for `to-number` should be a number or a string.');
|
||||
}
|
||||
|
||||
$first-character: str-slice($value, 1, 1);
|
||||
$result: 0;
|
||||
$digits: 0;
|
||||
$minus: ($first-character == '-');
|
||||
$numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);
|
||||
|
||||
// Remove +/- sign if present at first character
|
||||
@if ($first-character == '+' or $first-character == '-') {
|
||||
$value: str-slice($value, 2);
|
||||
}
|
||||
|
||||
@for $i from 1 through str-length($value) {
|
||||
$character: str-slice($value, $i, $i);
|
||||
|
||||
@if not (index(map-keys($numbers), $character) or $character == '.') {
|
||||
@return to-length(if($minus, -$result, $result), str-slice($value, $i))
|
||||
}
|
||||
|
||||
@if $character == '.' {
|
||||
$digits: 1;
|
||||
} @else if $digits == 0 {
|
||||
$result: $result * 10 + map-get($numbers, $character);
|
||||
} @else {
|
||||
$digits: $digits * 10;
|
||||
$result: $result + map-get($numbers, $character) / $digits;
|
||||
}
|
||||
}
|
||||
|
||||
@return if($minus, -$result, $result);
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Add `$unit` to `$value`
|
||||
///
|
||||
/// @param {Number} $value - Value to add unit to
|
||||
/// @param {String} $unit - String representation of the unit
|
||||
///
|
||||
/// @return {Number} - `$value` expressed in `$unit`
|
||||
///
|
||||
@function to-length($value, $unit) {
|
||||
$units: ('px': 1px, 'cm': 1cm, 'mm': 1mm, '%': 1%, 'ch': 1ch, 'pc': 1pc, 'in': 1in, 'em': 1em, 'rem': 1rem, 'pt': 1pt, 'ex': 1ex, 'vw': 1vw, 'vh': 1vh, 'vmin': 1vmin, 'vmax': 1vmax);
|
||||
|
||||
@if not index(map-keys($units), $unit) {
|
||||
$_: im-log('Invalid unit `#{$unit}`.');
|
||||
}
|
||||
|
||||
@return $value * map-get($units, $unit);
|
||||
}
|
||||
|
||||
///
|
||||
/// This mixin aims at redefining the configuration just for the scope of
|
||||
/// the call. It is helpful when having a component needing an extended
|
||||
/// configuration such as custom breakpoints (referred to as tweakpoints)
|
||||
/// for instance.
|
||||
///
|
||||
/// @author Hugo Giraudel
|
||||
///
|
||||
/// @param {Map} $tweakpoints [()] - Map of tweakpoints to be merged with `$breakpoints`
|
||||
/// @param {Map} $tweak-media-expressions [()] - Map of tweaked media expressions to be merged with `$media-expression`
|
||||
///
|
||||
/// @example scss - Extend the global breakpoints with a tweakpoint
|
||||
/// @include media-context(('custom': 678px)) {
|
||||
/// .foo {
|
||||
/// @include media('>phone', '<=custom') {
|
||||
/// // ...
|
||||
/// }
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// @example scss - Extend the global media expressions with a custom one
|
||||
/// @include media-context($tweak-media-expressions: ('all': 'all')) {
|
||||
/// .foo {
|
||||
/// @include media('all', '>phone') {
|
||||
/// // ...
|
||||
/// }
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// @example scss - Extend both configuration maps
|
||||
/// @include media-context(('custom': 678px), ('all': 'all')) {
|
||||
/// .foo {
|
||||
/// @include media('all', '>phone', '<=custom') {
|
||||
/// // ...
|
||||
/// }
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
@mixin media-context($tweakpoints: (), $tweak-media-expressions: ()) {
|
||||
// Save global configuration
|
||||
$global-breakpoints: $breakpoints;
|
||||
$global-media-expressions: $media-expressions;
|
||||
|
||||
// Update global configuration
|
||||
$breakpoints: map-merge($breakpoints, $tweakpoints) !global;
|
||||
$media-expressions: map-merge($media-expressions, $tweak-media-expressions) !global;
|
||||
|
||||
@content;
|
||||
|
||||
// Restore global configuration
|
||||
$breakpoints: $global-breakpoints !global;
|
||||
$media-expressions: $global-media-expressions !global;
|
||||
}
|
||||
|
||||
////
|
||||
/// include-media public exposed API
|
||||
/// @author Eduardo Boucas
|
||||
/// @access public
|
||||
////
|
||||
|
||||
|
||||
///
|
||||
/// Generates a media query based on a list of conditions
|
||||
///
|
||||
/// @param {Arglist} $conditions - Media query conditions
|
||||
///
|
||||
/// @example scss - With a single set breakpoint
|
||||
/// @include media('>phone') { }
|
||||
///
|
||||
/// @example scss - With two set breakpoints
|
||||
/// @include media('>phone', '<=tablet') { }
|
||||
///
|
||||
/// @example scss - With custom values
|
||||
/// @include media('>=358px', '<850px') { }
|
||||
///
|
||||
/// @example scss - With set breakpoints with custom values
|
||||
/// @include media('>desktop', '<=1350px') { }
|
||||
///
|
||||
/// @example scss - With a static expression
|
||||
/// @include media('retina2x') { }
|
||||
///
|
||||
/// @example scss - Mixing everything
|
||||
/// @include media('>=350px', '<tablet', 'retina3x') { }
|
||||
///
|
||||
@mixin media($conditions...) {
|
||||
@if ($im-media-support and length($conditions) == 0) or
|
||||
(not $im-media-support and im-intercepts-static-breakpoint($conditions...)) {
|
||||
@content;
|
||||
} @else if ($im-media-support and length($conditions) > 0) {
|
||||
@media #{unquote(parse-expression(nth($conditions, 1)))} {
|
||||
// Recursive call
|
||||
@include media(slice($conditions, 2)...) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
102
assets/home/src/scss/abstracts/_mixins.scss
Executable file
@ -0,0 +1,102 @@
|
||||
// Font-size + Line-height + Kerning
|
||||
// Usage: @include font-size(1, mobile)
|
||||
// Add more true/false args to control what to output: font-size, line-height, kerning
|
||||
@mixin font-size($size, $elem, $font-size: true, $line-height: false, $kerning: false, $adjust-font-size: 0) {
|
||||
@if not map-has-key(map-get($font__scale, $elem), $size) {
|
||||
@warn "'#{$size}' key does not exist in array!";
|
||||
}
|
||||
@if ( $font-size != false ) {
|
||||
font-size: get-font-size($size, $elem) + $adjust-font-size;
|
||||
}
|
||||
@if ( $line-height == true ) {
|
||||
line-height: get-line-height($size, $elem);
|
||||
}
|
||||
@if ( $kerning == true ) {
|
||||
letter-spacing: get-kerning($size, $elem);
|
||||
}
|
||||
}
|
||||
|
||||
// Font Family
|
||||
@mixin font-family($elem) {
|
||||
font-family: unquote(get-font-family($elem));
|
||||
}
|
||||
|
||||
// Font Weight
|
||||
@mixin font-weight($elem) {
|
||||
font-weight: get-font-weight($elem);
|
||||
}
|
||||
|
||||
// Anchor aspect
|
||||
@mixin anchor-aspect($type: 'main') {
|
||||
@if ($type == 'main') { // Base
|
||||
color: color(primary, 1);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
outline: 0;
|
||||
text-decoration: underline;
|
||||
}
|
||||
} @else if ($type == 'header') {
|
||||
color: color(typography, 2i);
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
color: color(typography, 1i);
|
||||
}
|
||||
} @else if ($type == 'footer') {
|
||||
color: color(typography, 3);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
color: color(typography, 1i);
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin shadow {
|
||||
box-shadow: 0 16px 48px rgba(color(typography, 1), .12);
|
||||
}
|
||||
|
||||
@mixin shadow-sm {
|
||||
box-shadow: 0 16px 24px rgba(color(typography, 1), .12);
|
||||
}
|
||||
|
||||
@mixin divider-mix {
|
||||
display: block;
|
||||
height: 1px;
|
||||
background: color(bg, 3);
|
||||
background: linear-gradient(to right, rgba(color(bg, 3), .1) 0, rgba(color(bg, 3), .6) 50%, rgba(color(bg, 3), .1) 100%);
|
||||
}
|
||||
|
||||
@mixin divider($type: false) {
|
||||
@if ( $type == 'before' ) {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
@include divider-mix;
|
||||
}
|
||||
} @else if ($type == 'after') {
|
||||
position: relative;
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
@include divider-mix;
|
||||
}
|
||||
} @else {
|
||||
@include divider-mix;
|
||||
}
|
||||
}
|
103
assets/home/src/scss/abstracts/_variables.scss
Executable file
@ -0,0 +1,103 @@
|
||||
// --------------------------------------------
|
||||
// Colors -------------------------------------
|
||||
// Usage example: color(primary, main)
|
||||
// --------------------------------------------
|
||||
$color: (
|
||||
typography: (
|
||||
1: #202932,
|
||||
2: #333E4A,
|
||||
3: #889BB0,
|
||||
1i: #FFF,
|
||||
2i: rgba( #FFF, .8 )
|
||||
),
|
||||
bg: (
|
||||
1: #FFFFFF,
|
||||
2: #F5F6F7,
|
||||
3: #DEE3E9
|
||||
),
|
||||
primary: (
|
||||
1: #3525D3,
|
||||
2: #594BE0,
|
||||
3: #2A1DA8,
|
||||
4: #DDD9FF
|
||||
),
|
||||
secondary: (
|
||||
1: #0088FF,
|
||||
2: #33A0FF,
|
||||
3: #006DCC,
|
||||
4: #C7E5FF
|
||||
),
|
||||
tertiary: (
|
||||
1: #00C7FA,
|
||||
2: #2ED4FF,
|
||||
3: #009EC7,
|
||||
4: #C2F2FF
|
||||
),
|
||||
quaternary: (
|
||||
1: #55FBDC,
|
||||
2: #87FCE6,
|
||||
3: #23FAD2,
|
||||
4: #C3FFF4
|
||||
)
|
||||
);
|
||||
|
||||
// --------------------------------------------
|
||||
// Typography ---------------------------------
|
||||
// --------------------------------------------
|
||||
$font__family: (
|
||||
base: '"Oxygen", sans-serif', // font-family(base)
|
||||
heading: '"Arimo", sans-serif', // font-family(heading)
|
||||
code: 'Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace', // font-family(code)
|
||||
pre: '"Courier 10 Pitch", Courier, monospace' // font-family(pre)
|
||||
);
|
||||
|
||||
$font__sizes: (
|
||||
alpha: ( 42px, 52px, -0.1px ), // font-size, line-height, kerning (use '0' if don't want to output any kerning)
|
||||
beta: ( 38px, 48px, -0.1px ),
|
||||
gamma: ( 32px, 42px, -0.1px ),
|
||||
delta: ( 24px, 34px, -0.1px ),
|
||||
epsilon: ( 20px, 30px, -0.1px ),
|
||||
zeta: ( 18px, 27px, -0.1px ),
|
||||
eta: ( 16px, 24px, -0.1px ),
|
||||
theta: ( 14px, 20px, 0px )
|
||||
);
|
||||
|
||||
$font__scale: (
|
||||
desktop: ( // i.e. $breakpoint__m + $breakpoint__l (600 - 1024)
|
||||
1: map-get($font__sizes, alpha), // H1
|
||||
2: map-get($font__sizes, beta), // H2
|
||||
3: map-get($font__sizes, gamma), // H3
|
||||
4: map-get($font__sizes, epsilon), // H4, H5, H6
|
||||
5: map-get($font__sizes, epsilon), // Body
|
||||
6: map-get($font__sizes, zeta), // Text small
|
||||
7: map-get($font__sizes, eta), // Text smaller
|
||||
8: map-get($font__sizes, theta) // Footer area
|
||||
),
|
||||
mobile: ( // i.e. $breakpoint__xs + $breakpoint__s (up to 600)
|
||||
1: map-get($font__sizes, alpha), // H1
|
||||
2: map-get($font__sizes, beta), // H2
|
||||
3: map-get($font__sizes, gamma), // H3
|
||||
4: map-get($font__sizes, epsilon), // H4, H5, H6
|
||||
5: map-get($font__sizes, epsilon), // Body
|
||||
6: map-get($font__sizes, zeta), // Text small
|
||||
7: map-get($font__sizes, eta), // Text smaller
|
||||
8: map-get($font__sizes, theta) // Footer area
|
||||
)
|
||||
);
|
||||
|
||||
$font__weight: (
|
||||
regular: 400, // font__weight(regular)
|
||||
medium: 500, // font__weight(medium)
|
||||
semibold: 600, // font__weight(semi-bold)
|
||||
bold: 700 // font__weight(bold)
|
||||
);
|
||||
|
||||
// --------------------------------------------
|
||||
// Structure ----------------------------------
|
||||
// --------------------------------------------
|
||||
$content__padding: (
|
||||
mobile: 16px,
|
||||
desktop: 24px
|
||||
);
|
||||
$container__width: 1080px;
|
||||
$container__width-sm: 800px;
|
103
assets/home/src/scss/base/_base.scss
Executable file
@ -0,0 +1,103 @@
|
||||
html {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after { /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
body {
|
||||
background: color(bg, 1); /* Fallback for when there is no custom background color defined. */
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 0;
|
||||
@include divider();
|
||||
margin-top: 24px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
ul, ol {
|
||||
margin-top: 0;
|
||||
margin-bottom: 24px;
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
li > ul,
|
||||
li > ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
dt {
|
||||
@include font-weight(bold);
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: 24px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
img {
|
||||
height: auto; /* Make sure images are scaled correctly. */
|
||||
max-width: 100%; /* Adhere to container width. */
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 24px 0; /* Extra wide images within figure tags don't overflow the content area. */
|
||||
}
|
||||
|
||||
figcaption {
|
||||
@include font-size(8, mobile, true, true);
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
display: block;
|
||||
}
|
||||
|
||||
// tables
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin-bottom: 24px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
tr {
|
||||
border-bottom: 1px solid color(bg, 3);
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
padding: 10px 16px;
|
||||
|
||||
&:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
468
assets/home/src/scss/base/_helpers.scss
Executable file
@ -0,0 +1,468 @@
|
||||
.container,
|
||||
.container-sm {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
padding-left: get-content-padding(mobile);
|
||||
padding-right: get-content-padding(mobile);
|
||||
|
||||
@include media( '>small' ) {
|
||||
padding-left: get-content-padding(desktop);
|
||||
padding-right: get-content-padding(desktop);
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: $container__width + ( get-content-padding(desktop) * 2 );
|
||||
}
|
||||
|
||||
.container-sm {
|
||||
max-width: $container__width-sm + ( get-content-padding(desktop) * 2 );
|
||||
}
|
||||
|
||||
.container {
|
||||
|
||||
.container-sm {
|
||||
max-width: $container__width-sm;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Text meant only for screen readers. */
|
||||
.screen-reader-text {
|
||||
clip: rect(1px, 1px, 1px, 1px);
|
||||
position: absolute !important;
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
overflow: hidden;
|
||||
word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */
|
||||
|
||||
&:focus {
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
|
||||
clip: auto !important;
|
||||
display: block;
|
||||
@include font-size(7, mobile, true, false, true);
|
||||
@if ( get-font-size(7, desktop) != get-font-size(7, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(7, desktop, true, false, true);
|
||||
}
|
||||
}
|
||||
@include font-weight(bold);
|
||||
line-height: 16px;
|
||||
text-decoration: none;
|
||||
background-color: color(bg, 1);
|
||||
color: color(primary, 1) !important;
|
||||
border: none;
|
||||
height: auto;
|
||||
left: 8px;
|
||||
padding: 16px 32px;
|
||||
top: 8px;
|
||||
width: auto;
|
||||
z-index: 100000;
|
||||
}
|
||||
}
|
||||
|
||||
.list-reset {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-primary {
|
||||
color: color(primary, 1);
|
||||
}
|
||||
|
||||
.text-secondary {
|
||||
color: color(secondary, 1);
|
||||
}
|
||||
|
||||
.has-top-divider {
|
||||
@include divider(before);
|
||||
}
|
||||
|
||||
.has-bottom-divider {
|
||||
@include divider(after);
|
||||
}
|
||||
|
||||
.m-0 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.mt-0 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.mr-0 {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.mb-0 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.ml-0 {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.m-8 {
|
||||
margin: 8px;
|
||||
}
|
||||
|
||||
.mt-8 {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.mr-8 {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.mb-8 {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.ml-8 {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.m-16 {
|
||||
margin: 16px;
|
||||
}
|
||||
|
||||
.mt-16 {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.mr-16 {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.mb-16 {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.ml-16 {
|
||||
margin-left: 16px;
|
||||
}
|
||||
|
||||
.m-24 {
|
||||
margin: 24px;
|
||||
}
|
||||
|
||||
.mt-24 {
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
.mr-24 {
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.mb-24 {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.ml-24 {
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
.m-32 {
|
||||
margin: 32px;
|
||||
}
|
||||
|
||||
.mt-32 {
|
||||
margin-top: 32px;
|
||||
}
|
||||
|
||||
.mr-32 {
|
||||
margin-right: 32px;
|
||||
}
|
||||
|
||||
.mb-32 {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.ml-32 {
|
||||
margin-left: 32px;
|
||||
}
|
||||
|
||||
.m-40 {
|
||||
margin: 40px;
|
||||
}
|
||||
|
||||
.mt-40 {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.mr-40 {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
.mb-40 {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.ml-40 {
|
||||
margin-left: 40px;
|
||||
}
|
||||
|
||||
.m-48 {
|
||||
margin: 48px;
|
||||
}
|
||||
|
||||
.mt-48 {
|
||||
margin-top: 48px;
|
||||
}
|
||||
|
||||
.mr-48 {
|
||||
margin-right: 48px;
|
||||
}
|
||||
|
||||
.mb-48 {
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
|
||||
.ml-48 {
|
||||
margin-left: 48px;
|
||||
}
|
||||
|
||||
.m-56 {
|
||||
margin: 56px;
|
||||
}
|
||||
|
||||
.mt-56 {
|
||||
margin-top: 56px;
|
||||
}
|
||||
|
||||
.mr-56 {
|
||||
margin-right: 56px;
|
||||
}
|
||||
|
||||
.mb-56 {
|
||||
margin-bottom: 56px;
|
||||
}
|
||||
|
||||
.ml-56 {
|
||||
margin-left: 56px;
|
||||
}
|
||||
|
||||
.m-64 {
|
||||
margin: 64px;
|
||||
}
|
||||
|
||||
.mt-64 {
|
||||
margin-top: 64px;
|
||||
}
|
||||
|
||||
.mr-64 {
|
||||
margin-right: 64px;
|
||||
}
|
||||
|
||||
.mb-64 {
|
||||
margin-bottom: 64px;
|
||||
}
|
||||
|
||||
.ml-64 {
|
||||
margin-left: 64px;
|
||||
}
|
||||
|
||||
.p-0 {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.pt-0 {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.pr-0 {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.pb-0 {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.pl-0 {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.p-8 {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.pt-8 {
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
.pr-8 {
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
.pb-8 {
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
.pl-8 {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.p-16 {
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.pt-16 {
|
||||
padding-top: 16px;
|
||||
}
|
||||
|
||||
.pr-16 {
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
.pb-16 {
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
|
||||
.pl-16 {
|
||||
padding-left: 16px;
|
||||
}
|
||||
|
||||
.p-24 {
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
.pt-24 {
|
||||
padding-top: 24px;
|
||||
}
|
||||
|
||||
.pr-24 {
|
||||
padding-right: 24px;
|
||||
}
|
||||
|
||||
.pb-24 {
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
|
||||
.pl-24 {
|
||||
padding-left: 24px;
|
||||
}
|
||||
|
||||
.p-32 {
|
||||
padding: 32px;
|
||||
}
|
||||
|
||||
.pt-32 {
|
||||
padding-top: 32px;
|
||||
}
|
||||
|
||||
.pr-32 {
|
||||
padding-right: 32px;
|
||||
}
|
||||
|
||||
.pb-32 {
|
||||
padding-bottom: 32px;
|
||||
}
|
||||
|
||||
.pl-32 {
|
||||
padding-left: 32px;
|
||||
}
|
||||
|
||||
.p-40 {
|
||||
padding: 40px;
|
||||
}
|
||||
|
||||
.pt-40 {
|
||||
padding-top: 40px;
|
||||
}
|
||||
|
||||
.pr-40 {
|
||||
padding-right: 40px;
|
||||
}
|
||||
|
||||
.pb-40 {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
.pl-40 {
|
||||
padding-left: 40px;
|
||||
}
|
||||
|
||||
.p-48 {
|
||||
padding: 48px;
|
||||
}
|
||||
|
||||
.pt-48 {
|
||||
padding-top: 48px;
|
||||
}
|
||||
|
||||
.pr-48 {
|
||||
padding-right: 48px;
|
||||
}
|
||||
|
||||
.pb-48 {
|
||||
padding-bottom: 48px;
|
||||
}
|
||||
|
||||
.pl-48 {
|
||||
padding-left: 48px;
|
||||
}
|
||||
|
||||
.p-56 {
|
||||
padding: 56px;
|
||||
}
|
||||
|
||||
.pt-56 {
|
||||
padding-top: 56px;
|
||||
}
|
||||
|
||||
.pr-56 {
|
||||
padding-right: 56px;
|
||||
}
|
||||
|
||||
.pb-56 {
|
||||
padding-bottom: 56px;
|
||||
}
|
||||
|
||||
.pl-56 {
|
||||
padding-left: 56px;
|
||||
}
|
||||
|
||||
.p-64 {
|
||||
padding: 64px;
|
||||
}
|
||||
|
||||
.pt-64 {
|
||||
padding-top: 64px;
|
||||
}
|
||||
|
||||
.pr-64 {
|
||||
padding-right: 64px;
|
||||
}
|
||||
|
||||
.pb-64 {
|
||||
padding-bottom: 64px;
|
||||
}
|
||||
|
||||
.pl-64 {
|
||||
padding-left: 64px;
|
||||
}
|
||||
|
||||
/* Reveal animations */
|
||||
.sr {
|
||||
|
||||
.has-animations {
|
||||
|
||||
.is-revealing {
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
}
|
252
assets/home/src/scss/base/_typography.scss
Executable file
@ -0,0 +1,252 @@
|
||||
html {
|
||||
@include font-size(5, mobile, true, true);
|
||||
@if ( get-font-size(5, desktop) != get-font-size(5, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(5, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
color: color(typography, 2);
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
body,
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
@include font-family(base);
|
||||
}
|
||||
|
||||
a {
|
||||
@include anchor-aspect(main);
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
clear: both;
|
||||
color: color(typography, 1);
|
||||
@if ( get-font-family(heading) != get-font-family(base) ) {
|
||||
@include font-family(heading);
|
||||
}
|
||||
@include font-weight(bold);
|
||||
}
|
||||
|
||||
h1,
|
||||
.h1 {
|
||||
@include font-size(1, mobile, true, true, true);
|
||||
@if ( get-font-size(1, desktop) != get-font-size(1, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(1, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h2,
|
||||
.h2 {
|
||||
@include font-size(2, mobile, true, true, true);
|
||||
@if ( get-font-size(2, desktop) != get-font-size(2, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(2, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h3,
|
||||
.h3,
|
||||
blockquote {
|
||||
@include font-size(3, mobile, true, true, true);
|
||||
@if ( get-font-size(3, desktop) != get-font-size(3, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(3, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
@include font-size(4, mobile, true, true, true);
|
||||
@if ( get-font-size(4, desktop) != get-font-size(4, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(4, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '<=medium' ) {
|
||||
|
||||
.h1-mobile {
|
||||
@include font-size(1, mobile, true, true, true);
|
||||
}
|
||||
|
||||
.h2-mobile {
|
||||
@include font-size(2, mobile, true, true, true);
|
||||
}
|
||||
|
||||
.h3-mobile {
|
||||
@include font-size(3, mobile, true, true, true);
|
||||
}
|
||||
|
||||
.h4-mobile,
|
||||
.h5-mobile,
|
||||
.h6-mobile {
|
||||
@include font-size(4, mobile, true, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
.text-light {
|
||||
color: color(typography, 2i);
|
||||
|
||||
a {
|
||||
color: color(typography, 2i);
|
||||
}
|
||||
}
|
||||
|
||||
.text-light {
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
color: color(typography, 1i) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.text-sm {
|
||||
@include font-size(6, mobile, true, true, true);
|
||||
@if ( get-font-size(6, desktop) != get-font-size(6, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(6, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.text-xs {
|
||||
@include font-size(7, mobile, true, true, true);
|
||||
@if ( get-font-size(7, desktop) != get-font-size(7, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(7, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2,
|
||||
.h1, .h2 {
|
||||
margin-top: 48px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
h3,
|
||||
.h3 {
|
||||
margin-top: 36px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
h4, h5, h6,
|
||||
.h4, .h5, .h6 {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
dfn, cite, em, i {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
color: color(typography, 3);
|
||||
font-style: italic;
|
||||
margin-top: 24px;
|
||||
margin-bottom: 24px;
|
||||
margin-left: 24px;
|
||||
|
||||
&::before {
|
||||
content: "\201C";
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: "\201D";
|
||||
}
|
||||
|
||||
p {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
address {
|
||||
color: color(typography, 2);
|
||||
border-width: 1px 0;
|
||||
border-style: solid;
|
||||
border-color: color(bg, 3);
|
||||
padding: 24px 0;
|
||||
margin: 0 0 24px;
|
||||
}
|
||||
|
||||
pre,
|
||||
pre h1,
|
||||
pre h2,
|
||||
pre h3,
|
||||
pre h4,
|
||||
pre h5,
|
||||
pre h6,
|
||||
pre .h1,
|
||||
pre .h2,
|
||||
pre .h3,
|
||||
pre .h4,
|
||||
pre .h5,
|
||||
pre .h6 {
|
||||
@include font-family(pre);
|
||||
}
|
||||
|
||||
pre, code, kbd, tt, var {
|
||||
background: color(bg, 2);
|
||||
}
|
||||
|
||||
pre {
|
||||
@include font-size(7, mobile, true, true);
|
||||
margin-bottom: 1.6em;
|
||||
max-width: 100%;
|
||||
overflow: auto;
|
||||
padding: 24px;
|
||||
margin-top: 24px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
code, kbd, tt, var {
|
||||
@include font-family(code);
|
||||
@include font-size(7, mobile, true);
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
abbr, acronym {
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
mark, ins {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
small {
|
||||
@include font-size(6, mobile, true, true, true);
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
@include font-weight(bold);
|
||||
}
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
label {
|
||||
@include font-size(5, mobile, true, true);
|
||||
}
|
106
assets/home/src/scss/components/_accordion.scss
Executable file
@ -0,0 +1,106 @@
|
||||
.accordion {
|
||||
@include font-size(7, mobile, true, true, true);
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background: color(bg, 3);
|
||||
}
|
||||
|
||||
+ li {
|
||||
|
||||
&::before {
|
||||
content: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-title {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 18px 0;
|
||||
cursor: pointer;
|
||||
color: color(typography, 1);
|
||||
@include font-weight(bold);
|
||||
|
||||
span {
|
||||
width: calc(100% - 32px);
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-body {
|
||||
max-height: 0;
|
||||
opacity: 0;
|
||||
overflow: hidden;
|
||||
transition: max-height .15s ease-in-out,opacity .15s;
|
||||
|
||||
.is-open & {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.accordion-icon {
|
||||
position: relative;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
background-color: color(primary, 1);
|
||||
transition: transform .25s ease-out;
|
||||
}
|
||||
|
||||
&::before {
|
||||
top: 0;
|
||||
left: 50%;
|
||||
width: 2px;
|
||||
height: 100%;
|
||||
margin-left: -1px;
|
||||
}
|
||||
|
||||
&::after {
|
||||
top: 50%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.is-open & {
|
||||
cursor: pointer;
|
||||
|
||||
&::before {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
&::after {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.accordion {
|
||||
@include font-size(6, desktop, true, true, true);
|
||||
}
|
||||
}
|
167
assets/home/src/scss/components/_buttons.scss
Executable file
@ -0,0 +1,167 @@
|
||||
.button {
|
||||
display: inline-flex;
|
||||
@if ( get-font-family(heading) != get-font-family(base) ) {
|
||||
@include font-family(heading);
|
||||
}
|
||||
@include font-size(7, mobile, true, false, true);
|
||||
@if ( get-font-size(7, desktop) != get-font-size(7, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(7, desktop, true, false, true);
|
||||
}
|
||||
}
|
||||
@include font-weight(bold);
|
||||
line-height: 16px;
|
||||
text-decoration: none !important;
|
||||
background-color: color(bg, 1);
|
||||
background: color(bg, 1);
|
||||
color: color(primary, 1) !important;
|
||||
border: none;
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
justify-content: center;
|
||||
padding: 16px 32px;
|
||||
height: 48px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
|
||||
&:active {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
&::before {
|
||||
border-radius: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.button-shadow {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
box-shadow: 0 8px 16px rgba(color(typography, 1), .12);
|
||||
mix-blend-mode: multiply;
|
||||
transition: box-shadow .15s ease;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 8px 16px rgba(color(typography, 1), .16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-sm {
|
||||
padding: 8px 24px;
|
||||
height: 32px;
|
||||
|
||||
&.button-shadow {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 4px 16px rgba(color(typography, 1), .12);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 4px 16px rgba(color(typography, 1), .16);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-primary,
|
||||
.button-secondary {
|
||||
color: color(typography, 1i) !important;
|
||||
transition: background .15s ease;
|
||||
}
|
||||
|
||||
.button-primary {
|
||||
background: color(primary, 1);
|
||||
|
||||
&:hover {
|
||||
background: lighten(color(primary, 1), 3%);
|
||||
}
|
||||
|
||||
&.button-shadow {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 8px 16px rgba(color(primary, 1), .24);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 8px 16px rgba(color(primary, 1), .32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-sm {
|
||||
|
||||
&.button-shadow {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 4px 16px rgba(color(primary, 1), .24);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 4px 16px rgba(color(primary, 1), .32);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-secondary {
|
||||
background: mix(color(secondary, 1), color(quaternary, 3));
|
||||
background: linear-gradient(65deg, color(secondary, 1) 0, color(quaternary, 3) 100%);
|
||||
|
||||
&:hover {
|
||||
background: lighten(mix(color(secondary, 1), color(quaternary, 3)), 3%);
|
||||
background: linear-gradient(65deg, lighten(color(secondary, 1), 1%) 0, lighten(color(quaternary, 3), 3%) 100%);
|
||||
}
|
||||
|
||||
&.button-shadow {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 8px 16px rgba(mix(color(secondary, 1), color(quaternary, 3)), .24);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 8px 16px rgba(mix(color(secondary, 1), color(quaternary, 3)), .32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-sm {
|
||||
|
||||
&.button-shadow {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 4px 16px rgba(mix(color(secondary, 1), color(quaternary, 3)), .24);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
|
||||
&::before {
|
||||
box-shadow: 0 4px 16px rgba(mix(color(secondary, 1), color(quaternary, 3)), .32);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-block {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
98
assets/home/src/scss/components/_tabs.scss
Executable file
@ -0,0 +1,98 @@
|
||||
.tabs-links {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin-top: -12px;
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: -12px;
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
li {
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.tab-link {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 24px;
|
||||
background: color(bg, 1);
|
||||
@include shadow;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
border-color: rgba(color(bg, 1), 0);
|
||||
transition: border-color .25s ease;
|
||||
}
|
||||
|
||||
&,
|
||||
&:hover,
|
||||
&:active {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
&:active,
|
||||
&.is-active {
|
||||
|
||||
&::before {
|
||||
border-color: color(tertiary, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab-panel {
|
||||
display: none;
|
||||
|
||||
&.is-active {
|
||||
display: block;
|
||||
animation: panelIn .4s ease both;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes panelIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(16px);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.tabs-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.tabs-links {
|
||||
flex: 0 0 252px;
|
||||
margin-right: 48px;
|
||||
}
|
||||
|
||||
.tabs-content {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>large' ) {
|
||||
|
||||
.tabs-links {
|
||||
flex: 0 0 344px;
|
||||
margin-right: 80px;
|
||||
}
|
||||
}
|
33
assets/home/src/scss/layout/_clients.scss
Executable file
@ -0,0 +1,33 @@
|
||||
.clients {
|
||||
|
||||
.section-inner {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
ul {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
li {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
padding: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.clients {
|
||||
|
||||
ul {
|
||||
justify-content: space-around;
|
||||
}
|
||||
|
||||
li {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
}
|
69
assets/home/src/scss/layout/_cta.scss
Executable file
74
assets/home/src/scss/layout/_features-tabs.scss
Executable file
@ -0,0 +1,74 @@
|
||||
.features-tabs {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 610px;
|
||||
height: 395px;
|
||||
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjEwIiBoZWlnaHQ9IjM5NSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICA8ZGVmcz4gICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9Ijk4LjUxNCUiIGlkPSJiIj4gICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRjVGNkY3IiBvZmZzZXQ9IjAlIi8+ICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0Y1RjZGNyIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEwMCUiLz4gICAgPC9saW5lYXJHcmFkaWVudD4gICAgPHBhdGggZD0iTTkuODcyIDMxMC4xMTVjLTI2LjY5OCAyMS41NSA1LjcyNyA2Ni45NDYgMTYuMjUgOTcuNTE2LjExNS4zNC4yNC42NzUuMzU3IDEuMDE1LjU0IDEuNTUgMS4wNzYgMy4xMDMgMS42NCA0LjY0MmEyOTcuMTEgMjk3LjExIDAgMCAwIDkuMTA2IDIyLjM0NWM4LjA2NiAxNy43MiA5MS43NjMtMTU4Ljc3NiAyOS43MzggNTEuMzQ3LTYyLjAyNSAyMTAuMTI0IDkwLjg2Ni03OC4yNjkgMTA0Ljc5MS02NS4yNjUgMTMuOTQyIDEyLjk4OC0zNy4wNCAxMzMuODc0LTIwLjYzIDE0NC4xNjYgMTcuMDU4IDEwLjY0MiAzMy44MyAxOC41NjQgNDkuNjQ4IDI0LjY2MyAxLjk3Ni43NjEgMy45MDcgMS41NzQgNS44NTYgMi4yN2w1LjgxMyAxLjk3MWMzLjgzNCAxLjI4MiA3LjUzNyAyLjY1NCAxMS4yNTUgMy42NGw2LjE0NiAxLjc3N2MyLjA0OC41NjcgNC4wNiAxLjI0MSA2LjEyNiAxLjY3OGwxMi4yMzMgMi44ODZjMTYuMzUyIDMuMzg1IDMyLjQ2IDUuMzEyIDQ4LjA0NCA2LjE0MSA0LjA5Ny4xMjMgNy45MzQuMjM3IDExLjYuMzQ4IDEuODM1LjEgMy42MjctLjAxOSA1LjM4Ny0uMDNsNS4xOTctLjA5OGM2Ljg0LjAyNSAxMy4zMjUtLjYzMiAyMC4yMTYtMS4wMiAxLjY5OC0uMDcgMy4zOC0uMzI3IDUuMDc0LS41MDZsNS4wODYtLjU4NGMzLjM5NS0uMzk1IDYuODEyLS43MjMgMTAuMTkzLTEuMzU4bDEwLjIwMi0xLjY5OGMzLjM5Ni0uNjQgNi43NjUtMS40NTMgMTAuMTU5LTIuMTc5bDUuMDQyLTEuMTE0YzEuNjgyLS40MTUgMy4zNTctLjkwOCA1LjA0Ny0xLjM2NCAzLjM3My0uOTQgNi43NzYtMS44NTQgMTAuMTM0LTIuODMzbDkuODMzLTMuMjljMS42MDQtLjU2MyAzLjIyLTEuMDM1IDQuNzU4LTEuNjU4bDQuNTUzLTEuNzk4YzIzLjc4Mi05LjM0OSA0MC4zNzMtMTkuMTQ1IDUyLjY1OC0yNi45MiAxLjQ5LS45NTUgMi45MzctMS44OCA0LjM0LTIuNzggMS40MDktLjg5IDIuNzc0LTEuNzU2IDQuMDM3LTIuNjgzIDIuNTYyLTEuODAyIDQuOTYtMy40OSA3LjIwNi01LjA2OGwzLjI1Mi0yLjI4OCAyLjkyOS0yLjI2YzEuODgyLTEuNDUtMTY0LjAwMy0xMDAuNjQ2LTE2Mi4zOTgtMTAxLjg4MiAxMy4wNjItMTAuMzA2IDE5My42NDkgNzUuNzIxIDIwNS44NDMgNjIuMDY0bDQuNTM3LTUuMTc1Yy43NDgtLjg3OSAxLjU0Ni0xLjcxOSAyLjI1Ni0yLjYzNWwyLjE1OS0yLjcyNyAzLjgzLTQuODQ0YzEuMjU3LTEuNjE0IDIuNTY4LTMuMTcgMy43MDgtNC44MzhsNi44Mi05LjU0YzIuMTYzLTMuMTkzIDQuMTctNi40MjMgNi4yMTUtOS41NiA3Ljg5NS0xMi43MjQgMTQuNjUtMjUuMTIyIDE5Ljg0NC0zNy4xMjNsMi00LjQyNGMuNjktMS40NDggMS4xOTgtMi45NTUgMS43OTYtNC40MDdsMy4zNzQtOC41ODljLjI2OS0uNzAyLjU2Mi0xLjM5Mi44MDUtMi4wOTVsLjcwNy0yLjEwNSAxLjM4OC00LjE0Yy45MDMtMi43MzIgMS44MjMtNS4zODYgMi42NDMtOCAxLjQ1My01LjI3OCAyLjkyLTEwLjI1OCA0LjEyNi0xNC45OThsMy4wMS0xMy40MzRjMS40MzctOC40NDIgMi43ODUtMTUuNjM1IDMuMzA1LTIxLjU3M2wuODY0LTcuODQ4Yy4yMS0yLjI3Mi4yNDktNC4yMDYuMzM1LTUuNzY0LjEzNi0zLjEyMi4xNS00Ljc3Ni4wMzYtNC44NTQtLjExNC0uMDc5LS4zNTEgMS40Mi0uNyA0LjM3NmwtLjYxOCA1LjUxMi0xLjE1MSA3LjU3My0uNjcxIDQuNTQxYy0uMTE2Ljc5OC0uMjM2IDEuNjE2LS4zNiAyLjQ1NS0uMTM4LjgzNi0uMzIzIDEuNjg2LS40OSAyLjU1OGwtMi4yMjEgMTEuMzk3Yy0uODkzIDQuMDg2LTIuMDM4IDguNDMzLTMuMTQ3IDEzLjA4NS0uNTE1IDIuMzM3LTEuMjY3IDQuNjg4LTEuOTgxIDcuMTIybC0yLjIyIDcuNTAyYy0uMTg4LjY0My0uMzggMS4yOS0uNTcgMS45NDEtLjIyMi42NDEtLjQ0NCAxLjI4Ny0uNjcgMS45MzZsLTEuMzc1IDMuOTQxLTIuODU1IDguMTYzLTMuNDAxIDguMzc4Yy0uNTggMS40MjUtMS4xNjQgMi44NjYtMS43NTUgNC4zMjEtLjU3OCAxLjQ2LTEuMzA2IDIuODc0LTEuOTYzIDQuMzM1bC00LjEyNCA4Ljg4OGMtMS40NjIgMi45ODctMy4wOTYgNS45Ni00LjY3NiA5LjAyMWwtMi40MiA0LjYyYTg4OTAuMTQgODg5MC4xNCAwIDAgMC0yLjY4IDQuNTc1bC0yLjcyNSA0LjY0OGMtLjkzMiAxLjU1MS0xLjc5MSAzLjE2NC0yLjgzMSA0LjY4M2wtMi4zNzggMy42NDdjMjkuNDQyLTQ2LjM1OSA0Ni41MDMtMTAxLjM1NCA0Ni41MDMtMTYwLjMzOCAwLTE2NS40MDktMTM0LjA5MS0yOTkuNS0yOTkuNS0yOTkuNS0xNjUuNDEgMC03My40MDQgMTE3LTI5OS41IDI5OS41eiIgaWQ9ImEiLz4gIDwvZGVmcz4gIDx1c2UgZmlsbD0idXJsKCNiKSIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgMzA1LjUgMzA1Ljg0NykiIHhsaW5rOmhyZWY9IiNhIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-container {
|
||||
max-width: 760px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.tab-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-content {
|
||||
text-align: center;
|
||||
|
||||
h2 {
|
||||
margin-top: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium') {
|
||||
|
||||
.tabs-content {
|
||||
text-align: left;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium', '<=large' ) {
|
||||
|
||||
.tab-link {
|
||||
|
||||
span {
|
||||
@include font-size(5, mobile, true, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-content {
|
||||
|
||||
h2 {
|
||||
margin-top: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>large' ) {
|
||||
|
||||
.tabs-container {
|
||||
max-width: 900px;
|
||||
}
|
||||
|
||||
.tabs-content {
|
||||
|
||||
h2 {
|
||||
margin-top: 32px;
|
||||
}
|
||||
}
|
||||
}
|
55
assets/home/src/scss/layout/_features.scss
Executable file
@ -0,0 +1,55 @@
|
||||
.features-header {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.features-wrap {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
margin-right: -12px;
|
||||
margin-left: -12px;
|
||||
margin-top: -12px;
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: -12px;
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.feature {
|
||||
padding: 12px;
|
||||
width: 276px;
|
||||
max-width: 276px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.feature-inner {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
background: color(bg, 1);
|
||||
padding: 40px 24px;
|
||||
@include shadow;
|
||||
}
|
||||
|
||||
.feature-icon {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.features {
|
||||
|
||||
.section-paragraph {
|
||||
padding-left: 72px;
|
||||
padding-right: 72px;
|
||||
}
|
||||
}
|
||||
|
||||
.features-header {
|
||||
margin-bottom: 64px;
|
||||
}
|
||||
}
|
92
assets/home/src/scss/layout/_footer.scss
Executable file
@ -0,0 +1,92 @@
|
||||
.site-footer {
|
||||
@include font-size(8, mobile, true, true, true);
|
||||
@if ( get-font-size(8, desktop) != get-font-size(8, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(8, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
color: color(typography, 3);
|
||||
background: color(typography, 1);
|
||||
z-index: 1;
|
||||
|
||||
a {
|
||||
@include anchor-aspect(footer);
|
||||
}
|
||||
}
|
||||
|
||||
.site-footer-inner {
|
||||
position: relative; /* To display all elements above the background color */
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-top: 48px;
|
||||
padding-bottom: 48px;
|
||||
}
|
||||
|
||||
.footer-brand,
|
||||
.footer-links,
|
||||
.footer-social-links,
|
||||
.footer-copyright {
|
||||
flex: none;
|
||||
width: 100%;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.footer-brand,
|
||||
.footer-links,
|
||||
.footer-social-links {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.footer-links,
|
||||
.footer-social-links {
|
||||
|
||||
li {
|
||||
|
||||
+ li {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-social-links {
|
||||
|
||||
li {
|
||||
display: inline-flex;
|
||||
|
||||
a {
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.site-footer-inner {
|
||||
justify-content: space-between;
|
||||
padding-top: 80px;
|
||||
padding-bottom: 64px;
|
||||
}
|
||||
|
||||
.footer-brand,
|
||||
.footer-links,
|
||||
.footer-social-links,
|
||||
.footer-copyright {
|
||||
flex: 50%;
|
||||
}
|
||||
|
||||
.footer-brand,
|
||||
.footer-copyright {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.footer-links,
|
||||
.footer-social-links {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.footer-links {
|
||||
order: 1;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
54
assets/home/src/scss/layout/_header.scss
Executable file
@ -0,0 +1,54 @@
|
||||
.site-header {
|
||||
position: relative;
|
||||
padding: 24px 0;
|
||||
}
|
||||
|
||||
.header-sun {
|
||||
position: absolute;
|
||||
top: -88px;
|
||||
right: -60px;
|
||||
}
|
||||
|
||||
.site-header-inner {
|
||||
position: relative; /* To display all elements above the background color */
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.header-links {
|
||||
display: inline-flex;
|
||||
|
||||
li {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
a:not(.button) {
|
||||
@include font-size(7, mobile, true, true, true);
|
||||
@if ( get-font-size(7, desktop) != get-font-size(7, mobile) ) {
|
||||
@include media( '>medium' ) {
|
||||
@include font-size(7, desktop, true, true, true);
|
||||
}
|
||||
}
|
||||
@include font-weight(bold);
|
||||
@include anchor-aspect(header);
|
||||
line-height: 16px;
|
||||
padding: 8px 24px;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.header-sun {
|
||||
left: 440px;
|
||||
right: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>large' ) {
|
||||
|
||||
.header-sun {
|
||||
left: auto;
|
||||
right: 43%;
|
||||
}
|
||||
}
|
100
assets/home/src/scss/layout/_hero.scss
Executable file
@ -0,0 +1,100 @@
|
||||
.hero {
|
||||
position: relative;
|
||||
padding-top: 88px;
|
||||
text-align: center;
|
||||
z-index: 0;
|
||||
|
||||
.hero-left-decoration,
|
||||
.hero-right-decoration {
|
||||
position: absolute;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.hero-left-decoration {
|
||||
display: none;
|
||||
width: 1440px;
|
||||
height: 342px;
|
||||
bottom: -128px;
|
||||
left: calc(50% - 720px);
|
||||
background-image: url('../images/header-bg-left.svg');
|
||||
z-index: -2;
|
||||
}
|
||||
|
||||
.hero-right-decoration {
|
||||
width: 720px;
|
||||
height: 320px;
|
||||
top: -140px; /* min -80px, i.e. header height */
|
||||
left: calc(50% - 360px);
|
||||
background-image: url('../images/header-bg-right.svg');
|
||||
background-size: 720px 320px;
|
||||
z-index: -1;
|
||||
}
|
||||
}
|
||||
|
||||
.hero-copy,
|
||||
.hero-illustration {
|
||||
position: relative; /* to display inner elements above the illustration */
|
||||
}
|
||||
|
||||
.hero-copy {
|
||||
padding-bottom: 48px;
|
||||
}
|
||||
|
||||
.hero-paragraph {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.hero {
|
||||
text-align: left;
|
||||
padding-top: 100px;
|
||||
|
||||
.hero-left-decoration {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.hero-right-decoration {
|
||||
width: 1440px;
|
||||
height: 640px;
|
||||
top: -80px; /* min -80px, i.e. header height */
|
||||
left: calc(50% - 720px);
|
||||
background-size: 1440px 640px;
|
||||
}
|
||||
}
|
||||
|
||||
.hero-inner {
|
||||
/* Split hero in two parts */
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.hero-copy {
|
||||
padding-right: 48px;
|
||||
min-width: 512px;
|
||||
width: 512px;
|
||||
}
|
||||
|
||||
.hero-illustration {
|
||||
min-height: 430px;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '>large' ) {
|
||||
|
||||
.hero-copy {
|
||||
padding-right: 80px;
|
||||
min-width: 540px;
|
||||
width: 540px;
|
||||
}
|
||||
}
|
||||
|
||||
@include media( '<=medium' ) {
|
||||
|
||||
.hero-cta {
|
||||
|
||||
.button {
|
||||
width: 100%;
|
||||
max-width: 280px;
|
||||
}
|
||||
}
|
||||
}
|
36
assets/home/src/scss/layout/_main.scss
Executable file
@ -0,0 +1,36 @@
|
||||
.is-boxed {
|
||||
background: color(bg, 2);
|
||||
}
|
||||
|
||||
.body-wrap {
|
||||
background: color(bg, 1);
|
||||
overflow: hidden;
|
||||
/* Sticky footer */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.boxed-container {
|
||||
max-width: 1440px;
|
||||
margin: 0 auto;
|
||||
@include shadow;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
.section-inner {
|
||||
position: relative; /* To always display inner elements above pseudo decorative stuff */
|
||||
padding-top: 48px;
|
||||
padding-bottom: 48px;
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.section-inner {
|
||||
padding-top: 88px;
|
||||
padding-bottom: 88px;
|
||||
}
|
||||
}
|
135
assets/home/src/scss/layout/_pricing.scss
Executable file
132
assets/home/src/scss/layout/_testimonials.scss
Executable file
@ -0,0 +1,132 @@
|
||||
.testimonials {
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
|
||||
.section-inner {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
margin-bottom: 48px;
|
||||
}
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
&::before {
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 148px;
|
||||
left: 0;
|
||||
background: color(typography, 1);
|
||||
z-index: -2;
|
||||
}
|
||||
|
||||
&::after {
|
||||
top: 112px;
|
||||
left: 50%;
|
||||
width: 202px;
|
||||
height: 214px;
|
||||
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAyIiBoZWlnaHQ9IjIxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gIDxkZWZzPiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjEzLjEzJSIgeTE9Ii00MC45MzQlIiB4Mj0iODcuODE3JSIgeTI9IjEyMi41MDMlIiBpZD0iYSI+ICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzA4RiIgb2Zmc2V0PSIwJSIvPiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMwMEM3RkEiIG9mZnNldD0iMTAwJSIvPiAgICA8L2xpbmVhckdyYWRpZW50PiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjUwJSIgeTE9Ijk2LjA4JSIgeDI9IjUwJSIgeTI9IjAlIiBpZD0iYiI+ICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzU1RkJEQyIgc3RvcC1vcGFjaXR5PSIuMzIiIG9mZnNldD0iMCUiLz4gICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTVGQkRDIiBvZmZzZXQ9IjEwMCUiLz4gICAgPC9saW5lYXJHcmFkaWVudD4gICAgPGxpbmVhckdyYWRpZW50IHgxPSI1MCUiIHkxPSIwJSIgeDI9IjUwJSIgeTI9IjEwMCUiIGlkPSJjIj4gICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjMDhGIiBvZmZzZXQ9IjAlIi8+ICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzAwQzdGQSIgb2Zmc2V0PSIxMDAlIi8+ICAgIDwvbGluZWFyR3JhZGllbnQ+ICA8L2RlZnM+ICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICA8cGF0aCBkPSJNMTAxLjAxNyAyMTAuNDc2Yy03LjE3OS4zODgtMTQuNDgzIDEuMTMxLTIxLjE4NCAyLjMwMi0yLjA0OC4yOS0zLjk5OC42ODUtNS44MzMgMS4wOTggMTkuNjI4LTkuMTc1IDQwLjM3Ny0xNS45MjcgNjEuNjY0LTE5LjkyMiA1LjY4NC0uOTMzIDExLjMzMy0xLjk5OCAxNy4wMzUtMi41NDVsNC4yNi0uNDk3IDIuMTI3LS4yNDYuMzU4LS4wMjVjMS40NzIuMTcgMy43MjQuNDQ0IDYuNjEyLjcyMWwzLjI2LjMyNWMxLjE1OS4xMTYgMi4zODYuMjEgMy42OC40Mmw4LjQ1IDEuMTk0Yy43NTcuMTA1IDEuNTI2LjIxMiAyLjMwNi4zMjIuNzguMTIxIDEuNTcyLjI4OCAyLjM3My40MzJsNC45MjUuOTJjMS42NzIuMzEyIDMuMzg1LjYzIDUuMTMuOTU0bDQuNDk3IDEuMDU0Yy0zNC4xNDItMi4zNDItNjguMDM2IDIuNDE4LTk5LjY2IDEzLjQ5M3oiIGZpbGw9InVybCgjYSkiLz4gICAgPHBhdGggZD0iTTExMC4xMjEgMTc3Ljc4MWEyNjQuMzggMjY0LjM4IDAgMCAwLTEzLjIzMy01Mi4wMTkgMjY0LjA4NCAyNjQuMDg0IDAgMCAwLTIzLjU1NS00OC4yMThDNTQuNDM0IDQ3LjEwMyAyOS4zMzMgMjAuNTY5IDAgMCIgZmlsbD0idXJsKCNiKSIvPiAgICA8cGF0aCBkPSJNMTc4Ljg0MyA3OS41ODljMS45MTUgMS42NjQgNC4wNDkgMy4zODUgNi4xODYgNS4zNjcgNS4zMzcgNC44MzcgMTEuMDg5IDEwLjYyNSAxNi43NDIgMTYuOTFDMTc1LjQ5OSA4MC4wOTggMTQ0LjcwMyA2My42MDEgMTExIDU0IiBmaWxsPSJ1cmwoI2MpIi8+ICA8L2c+PC9zdmc+);
|
||||
background-repeat: no-repeat;
|
||||
z-index: -1;
|
||||
}
|
||||
}
|
||||
|
||||
.testimonials-wrap {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
// align-items: flex-start; /* Disable equal height */
|
||||
justify-content: center;
|
||||
margin-right: -12px;
|
||||
margin-left: -12px;
|
||||
margin-top: -12px;
|
||||
|
||||
&:last-of-type {
|
||||
margin-bottom: -12px;
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.testimonial {
|
||||
@if ( get-font-family(heading) != get-font-family(base) ) {
|
||||
@include font-family(heading);
|
||||
}
|
||||
color: color(typography, 3);
|
||||
padding: 12px;
|
||||
width: 368px;
|
||||
max-width: 368px;
|
||||
flex-grow: 1;
|
||||
|
||||
a {
|
||||
color: color(quaternary, 1);
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.testimonial-inner {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
background: color(typography, 2);
|
||||
padding: 32px 24px;
|
||||
height: 100%;
|
||||
|
||||
> * {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.testimonial-body {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 21px;
|
||||
height: 18px;
|
||||
margin-bottom: 16px;
|
||||
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMTgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+ICA8cGF0aCBkPSJNOS4yMTYgMS4wMDhDNy40ODggNC44IDYuNjI0IDcuNjU2IDYuNjI0IDkuNTc2cy43MiAzLjUwNCAyLjE2IDQuNzUyYy0uNTI4LjkxMi0xLjE0IDEuNjMyLTEuODM2IDIuMTYtLjY5Ni41MjgtMS41NzIuNzkyLTIuNjI4Ljc5Mi0xLjI5NiAwLTIuMzQtLjQ0NC0zLjEzMi0xLjMzMkMuMzk2IDE1LjA2IDAgMTMuOTQ0IDAgMTIuNmMwLTIuMTEyLjgxNi00LjQwNCAyLjQ0OC02Ljg3NkM0LjA4IDMuMjUyIDUuNTY4IDEuMzQ0IDYuOTEyIDBsMi4zMDQgMS4wMDh6bTExLjE2IDBjLTEuNzI4IDMuNzkyLTIuNTkyIDYuNjQ4LTIuNTkyIDguNTY4cy43MiAzLjUwNCAyLjE2IDQuNzUyYy0xLjA1NiAxLjk2OC0yLjU0NCAyLjk1Mi00LjQ2NCAyLjk1Mi0xLjI5NiAwLTIuMzQtLjQ0NC0zLjEzMi0xLjMzMi0uNzkyLS44ODgtMS4xODgtMi4wMDQtMS4xODgtMy4zNDggMC0yLjExMi44MTYtNC40MDQgMi40NDgtNi44NzYgMS42MzItMi40NzIgMy4xMi00LjM4IDQuNDY0LTUuNzI0bDIuMzA0IDEuMDA4eiIgZmlsbD0iIzA4RiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.testimonial-footer {
|
||||
align-self: flex-end;
|
||||
}
|
||||
|
||||
.testimonial-name {
|
||||
@include font-weight(bold);
|
||||
color: color(typography, 1);
|
||||
}
|
||||
|
||||
@include media( '>medium' ) {
|
||||
|
||||
.testimonials {
|
||||
|
||||
.section-title {
|
||||
margin-bottom: 88px;
|
||||
}
|
||||
|
||||
&::before {
|
||||
bottom: 168px;
|
||||
}
|
||||
|
||||
&::after {
|
||||
top: 76px;
|
||||
left: 79%;
|
||||
}
|
||||
}
|
||||
}
|
94
assets/home/src/scss/style.scss
Executable file
@ -0,0 +1,94 @@
|
||||
/*--------------------------------------------------------------
|
||||
# Variables, functions and mixins
|
||||
--------------------------------------------------------------*/
|
||||
@import "abstracts/variables",
|
||||
"abstracts/functions",
|
||||
"abstracts/mixins",
|
||||
'abstracts/include-media';
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
1.0 Normalize
|
||||
* normalize.css v7.0.0 | MIT License
|
||||
* github.com/necolas/normalize.css
|
||||
--------------------------------------------------------------*/
|
||||
@import "normalize";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Base
|
||||
--------------------------------------------------------------*/
|
||||
@import "base/base";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Typography
|
||||
--------------------------------------------------------------*/
|
||||
@import "base/typography";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Helpers
|
||||
--------------------------------------------------------------*/
|
||||
@import "base/helpers";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Buttons
|
||||
--------------------------------------------------------------*/
|
||||
@import "components/buttons";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Accordion
|
||||
--------------------------------------------------------------*/
|
||||
@import "components/accordion";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Tabs
|
||||
--------------------------------------------------------------*/
|
||||
@import "components/tabs";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Header
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/header";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Hero
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/hero";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Clients
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/clients";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Features
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/features";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Features tabs
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/features-tabs";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Testimonials
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/testimonials";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Pricing
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/pricing";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# CTA
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/cta";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Site content
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/main";
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# Footer
|
||||
--------------------------------------------------------------*/
|
||||
@import "layout/footer";
|
24126
assets/panel/dist/css/adminlte.css
vendored
Executable file
1
assets/panel/dist/css/adminlte.css.map
vendored
Executable file
12
assets/panel/dist/css/adminlte.min.css
vendored
Executable file
1
assets/panel/dist/css/adminlte.min.css.map
vendored
Executable file
BIN
assets/panel/dist/img/AdminLTELogo.png
vendored
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
assets/panel/dist/img/avatar.png
vendored
Executable file
After Width: | Height: | Size: 8.3 KiB |
BIN
assets/panel/dist/img/avatar04.png
vendored
Executable file
After Width: | Height: | Size: 14 KiB |
BIN
assets/panel/dist/img/avatar2.png
vendored
Executable file
After Width: | Height: | Size: 8.6 KiB |
BIN
assets/panel/dist/img/avatar3.png
vendored
Executable file
After Width: | Height: | Size: 9.6 KiB |
BIN
assets/panel/dist/img/avatar5.png
vendored
Executable file
After Width: | Height: | Size: 7.8 KiB |
BIN
assets/panel/dist/img/boxed-bg.jpg
vendored
Executable file
After Width: | Height: | Size: 121 KiB |
BIN
assets/panel/dist/img/boxed-bg.png
vendored
Executable file
After Width: | Height: | Size: 43 KiB |
BIN
assets/panel/dist/img/credit/american-express.png
vendored
Executable file
After Width: | Height: | Size: 2.2 KiB |
BIN
assets/panel/dist/img/credit/cirrus.png
vendored
Executable file
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/panel/dist/img/credit/mastercard.png
vendored
Executable file
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/panel/dist/img/credit/mestro.png
vendored
Executable file
After Width: | Height: | Size: 1.6 KiB |
BIN
assets/panel/dist/img/credit/paypal.png
vendored
Executable file
After Width: | Height: | Size: 2.0 KiB |
BIN
assets/panel/dist/img/credit/paypal2.png
vendored
Executable file
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/panel/dist/img/credit/visa.png
vendored
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/panel/dist/img/default-150x150.png
vendored
Executable file
After Width: | Height: | Size: 373 B |
BIN
assets/panel/dist/img/icons.png
vendored
Executable file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/panel/dist/img/photo1.png
vendored
Executable file
After Width: | Height: | Size: 658 KiB |
BIN
assets/panel/dist/img/photo2.png
vendored
Executable file
After Width: | Height: | Size: 414 KiB |
BIN
assets/panel/dist/img/photo3.jpg
vendored
Executable file
After Width: | Height: | Size: 383 KiB |
BIN
assets/panel/dist/img/photo4.jpg
vendored
Executable file
After Width: | Height: | Size: 1.1 MiB |
BIN
assets/panel/dist/img/prod-1.jpg
vendored
Executable file
After Width: | Height: | Size: 47 KiB |
BIN
assets/panel/dist/img/prod-2.jpg
vendored
Executable file
After Width: | Height: | Size: 33 KiB |
BIN
assets/panel/dist/img/prod-3.jpg
vendored
Executable file
After Width: | Height: | Size: 21 KiB |
BIN
assets/panel/dist/img/prod-4.jpg
vendored
Executable file
After Width: | Height: | Size: 27 KiB |
BIN
assets/panel/dist/img/prod-5.jpg
vendored
Executable file
After Width: | Height: | Size: 33 KiB |
BIN
assets/panel/dist/img/user1-128x128.jpg
vendored
Executable file
After Width: | Height: | Size: 2.8 KiB |
BIN
assets/panel/dist/img/user2-160x160.jpg
vendored
Executable file
After Width: | Height: | Size: 6.9 KiB |
BIN
assets/panel/dist/img/user3-128x128.jpg
vendored
Executable file
After Width: | Height: | Size: 3.4 KiB |
BIN
assets/panel/dist/img/user4-128x128.jpg
vendored
Executable file
After Width: | Height: | Size: 3.4 KiB |