add share driectory
|
@ -0,0 +1,153 @@
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||||
|
<meta name="generator" content="Aspose.Words for .NET 15.1.0.0" />
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:15pt; font-weight:bold">儿童隐私保护声明</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">本隐私协议依据《个人信息保护法》、《未成年人保护法》等相关法律法规更新相关内容,以更清晰、明确地向您告知我们收集儿童个人信息的场景、目的、方式和范围,帮助您更好地管理儿童的个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">本声明中“儿童”,是指不满14周岁的未成年人。《儿童隐私保护声明》(以下简称“本声明”)和《APP隐私政策》旨在向监护人(以下简称“您”)和儿童说明我们如何收集、使用、存储和处理儿童的个人信息,以及我们为您与儿童提供的访问、更正、删除和保护这些信息的方式。</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">儿童监护人特别说明:</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如果您是儿童的监护人(父母或其他监护人),请您仔细阅读和选择是否同意本声明。我们希望您与我们共同保护儿童的个人信息,教育引导儿童增强个人信息保护意识和能力。</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">儿童特别说明:</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如果您是儿童,您需要和您的监护人(父母或其他监护人)共同仔细阅读本声明,并在征得监护人同意后,使用我们的产品、服务或向我们提供信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">请监护人和儿童在仔细阅读并充分理解《APP隐私政策》、具体产品的隐私保护指引和本声明后,由监护人选择是否同意相关隐私政策以及是否同意儿童使用我们的产品和服务。</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如果监护人不同意相关隐私政策和本声明的内容或不同意提供服务所必要的信息,将可能导致我们的产品和服务无法正常运行,或者无法达到我们拟达到的服务效果,监护人和儿童可能无法正常使用我们的产品、服务或相关的具体业务功能。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">监护人点击“同意”即表示监护人同意我们按照《APP隐私政策》、具体产品的隐私保护指引和本声明的约定收集、使用和处理监护人和儿童的信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">请仔细阅读本声明并确认了解我们对儿童个人信息的处理规则,如您在阅读本声明过程中有任何疑问或权利请求等个人信息相关事宜的,可联系我们解决。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">我们收集哪些信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">我们严格遵守法律法规的规定及与用户的约定,根据用户选择产品和服务的具体情况,收集监护人和儿童的以下个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">当我们根据法律法规及行业管理要求,需要为儿童用户配置保护措施时,</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">我们可能会提示您提供监护人的手机号码、电子邮箱或者通过“扫码验证”等方式,与我们建立联系。在某些涉及支付的产品和服务中,我们可能会要求监护</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">人填写和绑定监护人的银行</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">卡相关</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">信息,以便监护人知悉和管理儿童的支付行为</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">在儿童使用产品和服务过程中,我们会要求您提供相关必要的信息,具体请查阅《APP隐私政策》“我们收集的信息”一节。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如果我们需要收集监护人或儿童的其他个人信息,我们将再次告知监护人和儿童,并征得监护人的同意。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">监护人可以选择是否填写或向我们提供特定的信息。请您理解,</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">监护人如果不填写或不提供某些特定的信息,可能会导致我们的产品和服务无法正常运行,或者无法实现我们拟提供的服务效果,监护人和儿童可能无法正常使用我们的产品、服务或相关的具体业务功能。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">我们如何使用这些信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">我们严格遵守法律法规的规定及与用户的约定,将收集的监护人和儿童的信息可能用于以下用途:</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">验证儿童和监护人身份</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">提供必要的产品和服务、产品和服务的具体功能</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">用于优化产品和服务、安全保障</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如果我们需要超出上述用途使用监护人或儿童的个人信息,我们将再次告知监护人和儿童,并征得监护人的同意。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">管理、披露儿童个人信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">我们遵照法律法规的规定,严格管理儿童的个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">我们仅在监护人事先同意并采取符合《个人信息保护法》等法律法规要求的相关合</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">规</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">措施的情况下,才可能与监护人共享儿童的个人信息:</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">例如,我们会将部分儿童个人信息(如儿童用户名、账号,以及该儿童在我们某些产品和服务中的支付记录等)与监护人进行共享,监护人可以访问和管理相关个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">发生合并、收购、资产转让等</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">随着我们业务的持续发展,当发生合并、收购、资产转让等交易导致向第三方共享或转移监护人和儿童的个人信息时,我们将通过推送通知、公告等形式告知监护人和儿童相关情形,按照法律法规及不低于本声明所要求的标准继续保护或要求新的管理者继续保护监护人和儿童的个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">一般情况下,我们禁止披露儿童个人信息,但我们可能基于以下目的使用儿童的个人信息:</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">●</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt"> </span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">遵守适用的法律法规等有关规定;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">●</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt"> </span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">遵守法院判决、裁定或其他法律程序的规定;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">●</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt"> </span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">遵守相关政府机关或其他法定授权组织的要求;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">●</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt"> </span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">我们有理由确信需要遵守法律法规等有关规定;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">●</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt"> </span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">为执行相关服务协议或本声明、维护社会公共利益,为保护我们的客户、我们或我们的关联公司、其他用户或雇员的人身财产安全或其他合法权益合理</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">且必要</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">的用途。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">存储儿童个人信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">我们会采取加密等技术措施存储儿童个人信息,确保信息安全。我们存储儿童个人信息,不会超过实现其收集、使用目的所必需的期限。请查阅《时刻守护隐私政策》详细了解我们如何存储和保护儿童个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">当我们的产品和服务发生停止运营的情形或监护人和儿童的个人信息存储期限届满时,我们将采取例如,推送通知、公告等形式通知监护人和儿童,并在合理的期限内删除或匿名化处理监护人和儿童的个人信息。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">更正、删除儿童个人信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">在儿童用户使用我们的产品和服务期间,为了监护人和儿童可以更加便捷地访问、更正、删除相关个人信息,监护人可以通过我们提供的联系方式,来反馈和咨询相关信息。我们会在核实监护人反馈的问题后及时与监护人联系。请监护人理解,在核实过程中,我们可能需要监护人提供儿童账号、儿童身份信息、联系方式等个人信息,以便在完成身份验证和核实问题后继续响应监护人的需求。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">访问儿童个人信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">监护人和儿童可以查看儿童在使用我们产品和服务中提供或产生的个人信息,包括但不限于用户名、密码、头像、昵称、性别、主动发布的内容等。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">更正儿童个人信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">当监护人和儿童发现我们收集、使用和处理的儿童个人信息有错误时,可以联系我们进行更正。我们会在完成身份验证和核实问题后,及时采取措施予以更正。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">删除儿童个人信息</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如存在以下情况,监护人和儿童可以联系我们删除收集、使用和处理的儿童个人信息。我们会在完成身份验证和核实问题后,及时采取措施予以删除:</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">-若我们违反法律、行政法规的规定或者双方的约定收集、存储、使用、转移、披露儿童个人信息;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">-若我们超出目的范围或者必要期限收集、存储、使用、转移、披露儿童个人信息;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">-若监护人撤回同意;</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">-若监护人或儿童通过注销等方式终止使用产品或者服务的。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">但请注意,若监护人和儿童要求我们删除特定儿童个人信息,可能导致该儿童用户无法继续使用我们的产品和服务或产品和服务中的某些具体业务功能。 如监护人发现在未事先征得监护人同意的情况下收集了儿童的个人信息,请及时联系我们,我们会采取措施尽快删除相关数据。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-align:center">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">本声明的适用</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">请您理解,如本声明未规定之处,参照适用《APP隐私政策》或具体产品的隐私保护指引。</span></p>
|
||||||
|
<p style="margin:5pt 0pt; text-indent:21pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">在适用本声明的情况下,如本声明与《APP隐私政策》和具体产品的隐私保护指引的条款规定存在不一致的,以本声明为准。</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">联系我们</span></p>
|
||||||
|
<p style="margin:5pt 0pt">
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">如您对本声明有任何疑问和反馈,请通过</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt; font-weight:bold">zuomeng2@batiao8.com</span>
|
||||||
|
<span style="color:#333333; font-family:宋体; font-size:12pt">与我们联系;</span></p>
|
||||||
|
<p style="margin:0pt; orphans:0; text-align:justify; widows:0">
|
||||||
|
<span style="font-family:宋体; font-size:12pt"> </span></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -0,0 +1,489 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="Cache-Control" content="no-store, must-revalidate">
|
||||||
|
<meta http-equiv="expires" content="Wed, 11 May 2016 18:22:27 GMT">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" id="viewport"
|
||||||
|
content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"/>
|
||||||
|
<title>《APP用户隐私政策》</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="user-item-wrap">
|
||||||
|
<div class="user-item-inner">
|
||||||
|
<!--<div class="user-item-title"><h1>《APP用户服务协议》</h1></div>-->
|
||||||
|
<div class="user-item-content">
|
||||||
|
|
||||||
|
<p>版本发布日期: 2025 年 8 月 10 日</p>
|
||||||
|
|
||||||
|
<p>版本更新日期: 2025 年 9 月 17 日</p>
|
||||||
|
|
||||||
|
<p>版本生效日期: 2025 年 9 月 17 日</p>
|
||||||
|
|
||||||
|
<h3>一、总则</h3>
|
||||||
|
<p>
|
||||||
|
智驾定位非常重视用户个人信息的保护。您在使用我们的产品或服务时,我们可能会收集和使用您的相关信息。我们希望通过《智驾定位隐私政策》(以下简称“本政策”)向您说明我们在收集和使用您相关个人信息时对应的处理规则相关事宜,以便更好地保障您的权益。请在使用智驾定位服务前仔细阅读本《隐私政策》。如果您进一步访问并使用智驾定位,则表示您了解并接受了本《隐私政策》中所述的全部内容,并同意受其约束。如果您不接受前述任何内容,请停止访问或使用智驾定位。</p>
|
||||||
|
|
||||||
|
<p>如您对本隐私政策或相关事宜有任何疑问,您可随时通过发送邮件至account@batiao8.com与我们联系。</p>
|
||||||
|
|
||||||
|
<h3>二.权限申请及应用场景</h3>
|
||||||
|
<p>
|
||||||
|
我们对于软件需要在用户使用设备上获取的权限非常严格和克制,在使用本应用过程中,我们会向您申请使用该功能所必须的权限,若您不同意开启该权限,请点击“我不同意”,拒绝该权限的申请仅将影响您对特定产品功能的使用。我们在此向您列举产品将可能申请的权限及其使用目的。</p>
|
||||||
|
<p>
|
||||||
|
(1)设备信息:为了保障您正常使用提供本产品和服务,以及向您展示内容或者服务信息,我们会在<b>APP前台运行、静默状态下或后台</b>运行时收集您的设备信息,包括:<b>设备型号、设备名称、设备配置、设备序列号、IP地址、MAC地址及唯一设备标识符(IMEI、AndroidID、OAID、VAID、AAID、CAID、ADID、GUID、GAID、UUID、UAID、MEID、IMEISV、IMSI、EMMCID、UFSID 、SUCI、ICCID、SN码、SIM卡序列号)、已安装应用列表、运行中的进程、获取/监听传感器、剪切板、蓝牙信息以及读取/写入/删除SD卡数据等软硬件特征信息、操作系统和应用程序版本、语言设置、分辨率、电信运营商、设备所在位置相关信息(包括您授权的GPS位置信息及WLAN接入点和基站传感器信息)、浏览器类型、网络信息(网络状态、网络类型、SSID、BSSID、WiFi 状态、WiFi信息、WiFi列表)、联系人等</b>,来对相应的内容或者服务内容进行排序以适应您的设备界面和鉴别用户身份、记录系统故障和分析系统故障时产生的原因等。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<p>(2)存储权限:读取、存储将应用的图片及其他文件缓存/存储到手机上,以及读取一存储的图片及其他文件</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
(3)我们会从微信第三方获取您授权共享的账户信息(头像、昵称、地区)。登录后将您的第三方账户与智驾定位绑定,使您可以通过第三方账户直接登录并使用我们的产品和服务。我们会将依据与第三方的约定、对个人信息来源的合法性进行确认后,在符合相关法律和法规规定的前提下,使用您的个人信息。
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
(4)我们会通过登录、完善个人信息方式收集<b>手机号</b>、<b>身份证号</b>、<b>姓名</b>、<b>企业名称</b>、<b>企业地址</b>、<b>职位</b>、<b>电子邮箱</b>信息,用于商务对接。我们会履行隐私保护协议,在符合相关法律和法规规定的前提下使用用户个人信息,对用户个人信息进行加密存储、严格保密
|
||||||
|
</p>
|
||||||
|
<p>(5)我们会在首页和搜索页面读取您的剪切板,用于快速粘贴搜索链接,为您提供更方便的服务。</p>
|
||||||
|
<p>(6)相机权限:我的->意见反馈界面和作文批改界面
|
||||||
|
需要拍摄照片上传,更好的向我们传达用户的意见以及正常使用我们的产品</p>
|
||||||
|
<p>(7)光线传感器和加速度传感器权限:我们会在使用相机的时候使用传感器,使拍照时有更好的交互使用体验</p>
|
||||||
|
<p>(8)收集频率:Android系统下,<b>GPS频率为移动距离超过5米采集1次</b>;IOS系统下,<b>GPS频率为移动距离超过1米采集1次</b>;高频轨迹数据,<b>采集频率不低于1Hz的车辆轨迹数据</b>;低频轨迹数据,<b>采集频率低于1Hz的车辆轨迹数据</b>;</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>三.我们收集和使用这些信息的目的</h3>
|
||||||
|
|
||||||
|
<h4>对于我们收集或接收的有关您的信息,我们可能会用于多种目的,包括但不限于:</h4>
|
||||||
|
|
||||||
|
<p>1、将您的公开信息进行汇总、分析以形成报告;</p>
|
||||||
|
|
||||||
|
<p>2、处理您提交的咨询、订阅或定制服务或让您参与有关我们产品和服务的调查;</p>
|
||||||
|
|
||||||
|
<p>3、管理会员资格及会员权益(如认证身份、管理会员账户、组织会员活动、发放会员福利);</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
4、对智驾定位进行推广(如对用户信息进行统计并制作反映用户分布及兴趣偏好总体状况的分析报告、制作市场营销图表或其它营销材料,评估我们服务中的广告和其他促销及推广活动的效果,并加以改善),但我们会对该材料进行去个体识别化处理。</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
5、用于网络安全防范(在我们提供服务时,用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途,确保我们向您提供的产品和服务的安全性);</p>
|
||||||
|
|
||||||
|
<p>6、应用户特殊要求而提供特定服务时,需要将信息提供给我们的关联公司、第三方或其他用户;</p>
|
||||||
|
|
||||||
|
<p>7、其他有利于用户和智驾定位运营者利益且不违反任何强制性法律法规的情况。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>四、我们如何共享、转让、公开披露个人信息</h3>
|
||||||
|
<h4>(一)个人信息的共享、转让</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
我们不会向第三方共享、转让您的个人信息,除非经过您本人事先授权同意,或者共享、转让的个人信息是去标识化处理后的信息,且共享第三方无法重新识别此类信息的自然人主体。</p>
|
||||||
|
|
||||||
|
<p>1.在下列情况下,我们可能会共享的个人信息
|
||||||
|
|
||||||
|
<p>(1)为实现特定功能而与业务合作伙伴共享
|
||||||
|
|
||||||
|
<p>
|
||||||
|
为保障智驾定位相关功能的实现与应用安全稳定的运行,我们可能会接入由第三方提供的软件开发包(SDK)实现相关目的。在使用第三方SDK前,我们将通过弹窗或单独协议明确告知其名称、目的及数据范围,并需您主动授权,若您拒绝授权,相关功能将无法正常使用。我们会对合作方获取信息的软件工具开发包(SDK)进行严格的安全监测,以保护数据安全。我们对接入的相关第三方SDK在本隐私政策中列出,请注意,第三方SDK可能因为其版本升级、策略调整原因导致数据处理类型存在一定变化,请以其公示的官方说明为准。</p>
|
||||||
|
|
||||||
|
<h4>(二)个人信息的公开披露</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
除对违规账号、欺诈行为进行处罚公告时,我们会披露相关账号的必要信息外,我们不会公开披露您的信息,除非遵循国家法律法规规定或者获得您的同意。我们公开披露您的个人信息会采用符合行业内标准的安全保护措施。</p>
|
||||||
|
|
||||||
|
<h4>(三)依法豁免征得同意共享、转让、公开披露的个人信息</h4>
|
||||||
|
|
||||||
|
<p>请您理解,在下列情形中,根据法律法规及国家标准,我们共享、转让、公开披露您的个人信息无需征得您的授权同意</p>
|
||||||
|
|
||||||
|
<p>(1)与国家安全、国防安全直接相关的;</p>
|
||||||
|
|
||||||
|
<p>(2)与公共安全、公共卫生、重大公共利益直接相关的;</p>
|
||||||
|
|
||||||
|
<p>(3)与犯罪侦查、起诉、审判和判决执行直接相关的;</p>
|
||||||
|
|
||||||
|
<p>(4)出于维护您或其他个人的生命、财产重大合法权益但又很难得到您的同意的;</p>
|
||||||
|
|
||||||
|
<p>(5)您自行向社会公众公开的个人信息;</p>
|
||||||
|
|
||||||
|
<p>(6)从合法公开披露的信息中收集个人信息的,包括合法的新闻报道、政府信息公开渠道。</p>
|
||||||
|
|
||||||
|
<h3>五、我们如何保护用户信息</h3>
|
||||||
|
<p>
|
||||||
|
1、我们将采取合理的技术措施和其它必要措施,以确保用户信息的安全,并努力防止用户信息泄露、丢失或遭受破坏。其中包括:(1)使用加密技术来确保您的数据在传输过程中保持私密性;(2)审查我们在收集、存储和处理信息方面的做法(包括实体安全措施),以防未经授权的人员访问我们的系统;(4)所有因提供服务而必须接触个人信息的智驾定位员工、承包商和代理商,都需要遵守合同中规定的严格保密义务,否则可将被处分或被解约。</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
2、尽管严格遵守法律法规要求的标准并已经采取了上述合理有效措施,但由于技术的限制以及可能存在的各种恶意手段我们无法控制的原因,智驾定位我们将采取行业标准的安全措施保护您的信息,但因不可抗力或非我方过错导致的泄露,我们将在法律允许范围内及时补救并通知,我们将尽力确保您提供给我们的个人信息的安全性。因此,我们强烈建议您采取积极措施保护个人信息的安全,包括但不限于使用复杂密码、定期修改密码、不将自己的账号密码个人信息透露给他人。</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
3.我们会制定应急处理预案,并在发生用户信息安全事件时立即应急预案,努力阻止该安全事件的影响和后果扩大。在不幸发生用户信息安全事件(泄露、丢失)后,我们将按照法律法规的要求,及时向您告知。同时,我们还将按照监管部门要求,上报个人信息安全事件的处置情况。</p>
|
||||||
|
|
||||||
|
<h3>六、如何更新、变更、删除您的信息</h3>
|
||||||
|
<p>
|
||||||
|
您在使用我们的产品和服务时,会被要求提供您真实的个人信息,您应当对您所提供信息的真实性、合法性、有效性及完整性负责,并及时更新和维护您的个人信息,以保证信息的真实、合法和有效。您可以随时管理您的个人信息,例如您的个人账户注册信息。您可以自行从智驾定位账号中删除您的内容或个人信息(若您之前已创建了会员账户),或要求我们删除或修改信息,例如您想要删除个人帐户,您可以通过“个人中心-设置-注销账户”进行操作,当您注销账号后,我们将依据《中国人民共和国网络安全法》的规定留存你的相关信息,超出法定保存期限后,我们将删除或匿名化处理你的个人信息。</p>
|
||||||
|
|
||||||
|
<h3>七.Cookies及类似技术</h3>
|
||||||
|
<p>
|
||||||
|
1、Cookies是用户访问网站时存放于用户的计算机设备中的小文件,可被用于存储与您的计算机或设备绑定的唯一识别码,以便用户在不同网站的不同浏览进程中被识别为同一个用户。Cookies提供了多种有用的功能,例如可以用来记忆用户的密码或记录用户已经注册过的项目,使用户在网站上的操作更加有效率。</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
2、我们可能通过Cookies收集用户信息。用户拥有完全的自主权,自行设置浏览器以禁用或限用Cookies。但是,该设置可能导致用户无法登录或使用依赖于Cookie的智驾定位的某些服务或功能。</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
3、我们还可能使用其他类似的技术,例如beacons、flashcookies和HTML5本地存储。这些技术与Cookies的相似之处在于他们均被存储于用户的设备中,并可用于存储与用户的行为和偏好有关的信息。用户拥有完全的自主权,自行设置以禁用或限用该技术。同样,该设置可能导致用户无法登录或使用智驾定位的某些服务或功能。</p>
|
||||||
|
|
||||||
|
<h3>八、未成年人使用我们的服务</h3>
|
||||||
|
<p>
|
||||||
|
我们建议若您是18周岁以下的未成年人,在使用我们的产品或服务前,应事先取得其父母或监护人的同意,并建议未成年人在提交的个人信息之前寻求父母或监护人的同意和指导。</p>
|
||||||
|
|
||||||
|
<h3>九、本政策的适用范围</h3>
|
||||||
|
<p>
|
||||||
|
本隐私政策适用于智驾定位及其关联公司提供的所有服务。但是不包括附有独立隐私政策的服务(如第三方提供的产品和服务)。请您注意,本隐私政策不适用于以下情况:</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
1、通过我们的服务而接入的第三方服务(包括任何第三方网站)收集的信息(本隐私权政策不适用于第三方提供的产品和服务,例如在于智驾定位上由第三方提供的产品和服务,以及在我们的服务中链接到的其他网站,这些产品、服务或网站会有独立的隐私政策予以规范,请另行查阅相应的政策规定);</p>
|
||||||
|
|
||||||
|
<p>2、通过在我们服务中进行广告服务的其他公司或机构所收集的信息。</p>
|
||||||
|
|
||||||
|
<h3>十、本政策的更新</h3>
|
||||||
|
<p>
|
||||||
|
1.我们可能会不定期修改、更新本隐私政策,有关隐私政策的更新,我们会在智驾定位App中以通知公告形式发布,您可以访问智驾定位App查询最新版本的隐私政策。对于重大变更,我们会向您发出郑重通知(包括对于某些服务,我们会通过电子邮件发送通知,说明对隐私政策进行的更改)。</p>
|
||||||
|
|
||||||
|
<h3>十一、如何联系我们</h3>
|
||||||
|
<p>当您有任何疑问、意见或建议时,可以将您的问题发送至智驾定位account@batiao8.com或邮寄到如下地址【收件人:重庆敌无双网络科技有限公司
|
||||||
|
地址:重庆市高新区虎溪街道大学城南路22号2幢24-11(收)邮编:401120】我们将尽快审核所涉问题,并在验证您的用户身份后的十五天内予以回复。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2><br><br><br>附件一:关于第三方SDK的说明</h2>
|
||||||
|
<p>
|
||||||
|
我们所接入的第三方SDK可能会调用您的设备权限、获取您的相关信息,以便您在不同的手机设备或第三方平台上正常使用相应功能,我们将这些具有个人信息手机功能的第三方SDK的名称、提供商、所提供的功能/服务隐私政策链接、收集个人信息类型,按照实现功能/服务的类别划分说明如下:</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>一、登录、分享类SDK</h3>
|
||||||
|
|
||||||
|
<h4>SDK名称:微信开放平台</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:腾讯科技(深圳)有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.tencent.com/zh-cn/privacy-policy.html</p>
|
||||||
|
|
||||||
|
<p>收集的个人信息类型、字段:(IMEI/Mac地址(网络设备硬件地址)/androidID/IDFA/OPENUDID/GUID、SIM卡IMSI信息)、地理位置信息、网络信息</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>二、统计分析类SDK</h3>
|
||||||
|
|
||||||
|
<h4>SDK名称:友盟+</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:友盟同欣(北京)科技有限公司</p>
|
||||||
|
|
||||||
|
<p>用途目的:用于支持社会化分享、智能认证一键登录、反作弊服务</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.umeng.com/page/policy</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>使用SDK名称: 友盟SDK</h4>
|
||||||
|
|
||||||
|
<p>服务类型: 统计分析</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备信息 (IMEI/Mac/AndroidD/IDFA/OPENUDID/GUID/SIM卡IMSI/ICCID)</p>
|
||||||
|
|
||||||
|
<p>隐私权政策: https://www.umeng.com/page/policy</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:友盟+应用性能监控SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:友盟同欣(北京)科技有限公司</p>
|
||||||
|
|
||||||
|
<p>用途目的:为用户提供APP(SDK)、网页(CNZZ)数据统计分析、校准报表数据准确性,提供基础反作弊服务</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:WIFI列表、精确位置、WIFI的SSID、WIFI的BSSID、读取基站信息、读取当前位置、读取WIFI-BSSID、读取WIFI列表、获取设备IP、设备标识符(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、 SIM 卡 IMSI 信息)地理位置(粗略定位)、应用使用频率、应用列表、网络状态、浏览记录、AndroidID、 IMEI、IMSI、设备 MAC 地址、SUPI、SUCI、软件安装列表、位置、联系人、通话记录、日历、 短信、本机电话号码、图片、音视频等</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.umeng.com/page/policy</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:友盟+社会化分享SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:友盟同欣(北京)科技有限公司</p>
|
||||||
|
|
||||||
|
<p>用途目的:为用户提供广告展现、广告归因、反作弊服务</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:收集的个人信息类型、字段:设备标识信息(国际移动设备识别码(IMEI)、网络设备硬件地址(MAC))、粗略地理位置信息、网络信息(网络接入方式及类型)、设备应用列表等</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.umeng.com/page/policy</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>三、支付类SDK</h3>
|
||||||
|
|
||||||
|
<h4>SDK名称:微信SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:腾讯科技(深圳)有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://pay.weixin.qq.com/index.php/public/apply_sign/protocol_v2</p>
|
||||||
|
|
||||||
|
<p>使用场景:使用微信授权登录、完成微信支付、分享时</p>
|
||||||
|
|
||||||
|
<p>收集信息类型:设备信息、网络信息</p>
|
||||||
|
|
||||||
|
<p>使用目的:帮助用户在应用内使用微信支付,微信授权登录,帮助用户分享内容至微信</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:支付宝支付SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:阿里巴巴</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://render.alipay.com/p/c/k2cx0tg8</p>
|
||||||
|
|
||||||
|
<p>使用场景:使用使用支付宝支付时</p>
|
||||||
|
|
||||||
|
<p>信息获取:安卓(IMEI、IMSI、Android
|
||||||
|
ID、MAC地址、网络类型、运营商信息、WIFI状态/参数/列表、系统设置、系统属性、设备品牌、设备型号、操作系统、IP地址、网络权限、WIFI接入状态及WLAN热点信息);iOS(IMEI、IMSI、MAC地址、网络类型、设备型号、操作系统、IP地址、网络权限)</p>
|
||||||
|
|
||||||
|
<p>使用目的:支付、支付安全及风控</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:APP支付客户端SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:支付宝(杭州)信息技术有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://opendocs.alipay.com/open/54/01g6qm#%E6%94%AF%E4%BB%98%E5%AE%9D%20App%20%E6%94%AF%E4%BB%98%E5%AE%A2%E6%88%B7%E7%AB%AF%20SDK%20%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96</p>
|
||||||
|
|
||||||
|
<p>使用场景:使用使用支付宝支付时</p>
|
||||||
|
|
||||||
|
<p>信息获取:安卓(IMEI、IMSI、Android
|
||||||
|
ID、MAC地址、网络类型、运营商信息、WIFI状态/参数/列表、系统设置、系统属性、设备品牌、设备型号、操作系统、IP地址、网络权限、WIFI接入状态及WLAN热点信息);iOS(IMEI、IMSI、MAC地址、网络类型、设备型号、操作系统、IP地址、网络权限)</p>
|
||||||
|
|
||||||
|
<p>使用目的:支付、支付安全及风控</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>四、推送类SDK</h3>
|
||||||
|
|
||||||
|
<h4>SDK名称:个推SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:每日互动股份有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.getui.com/privacy</p>
|
||||||
|
|
||||||
|
<p>使用场景:用于实现消息推送(或其他推送)功能</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备信息:设备识别码(包含IMEI、IDFA、Android ID、AndroidID、MAC、OAID、Advertising ID、Serial
|
||||||
|
Number、IMSI、UAID、ICCID、IDFV、CAID、OpenUDID、GUID、GAID)将被用于生成唯一的用户标识,即GIUID。设备平台、设备厂商、设备品牌、设备型号及系统版本、设备序列号有助于我们帮助您标识不同的用户,并根据不同设备信息进行对应的适配,从而提供准确的产品服务,如应用于广告分发场景,分析不同用户的广告效果。</p>
|
||||||
|
<p>使用目的:</p>
|
||||||
|
<p>(1)设备信息:设备识别码(包含IMEI、IDFA、Android ID、AndroidID、MAC、OAID、Advertising ID、Serial
|
||||||
|
Number、IMSI、UAID、ICCID、IDFV、CAID)将被用于生成唯一的统计标识ID,即GCID,供系统内部使用,用做数据去重和不同维度数量统计;设备平台、设备厂商、设备品牌、设备型号及系统版本、设备序列号将用于多维度的统计计算。</p>
|
||||||
|
<p>
|
||||||
|
(2)应用相关信息:包括但不限于应用列表、渠道、时间戳、页面唯一标识、用户打点事件。我们使用上述信息来提供多维的统计分析,实现包括可视化埋点、行业分析在内的统计功能。</p>
|
||||||
|
<p>
|
||||||
|
(3)网络信息(WIFI列表、精确位置、WIFI的SSID、IP、WIFI的BSSID、DHCP)将用来和个推服务器建立连接。位置信息将用于调控区域推送,控制不同区域的链式启动策略,保障推送消息的有效触达。</p>
|
||||||
|
<p>
|
||||||
|
(4)位置信息:推荐更符合您用户需要的推送内容,减少无用推送信息对您用户的打扰
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h4>SDK名称:华为推送 SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:华为软件技术有限公司</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
隐私政策:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/sdk-data-security-0000001050042177</p>
|
||||||
|
|
||||||
|
<p>使用场景:消息推送</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
收集个人信息类型:设备信息【包括:设备型号、设备名称、SIM卡序列号、设备唯一标识符(IMEI、IMSI、AndroidID、IDFA、OAID),以下同】、网络信息。</p>
|
||||||
|
|
||||||
|
<p>使用目的:用于华为手机的离线消息推送。</p>
|
||||||
|
|
||||||
|
<h4>SDK名称:荣耀推送 SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:荣耀终端有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.hihonor.com/cn/privacy/privacy-policy/</p>
|
||||||
|
|
||||||
|
<p>使用场景:用于荣耀手机的消息推送</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备信息、网络信息。</p>
|
||||||
|
|
||||||
|
<p>使用目的:用于荣耀手机的离线消息推送。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:小米推送 SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:北京小米移动软件有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://dev.mi.com/console/doc/detail?pId=1822</p>
|
||||||
|
|
||||||
|
<p>使用场景:消息推送</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备标识符(如 Android ID、AndroidID、OAID、GAID)、设备信息。</p>
|
||||||
|
|
||||||
|
<p>使用目的:用于小米手机的离线消息推送。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:OPPO 推送 SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:广东欢太科技有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://open.oppomobile.com/wiki/doc#id=10288</p>
|
||||||
|
|
||||||
|
<p>使用场景:消息推送</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备标识符(如 IMEI、ICCID、IMSI、Android ID、AndroidID、GAID)、应用信息(如应用包名、版本号和运行状态)、网络信息(如
|
||||||
|
IP 或域名连接结果,当前网络类型)。</p>
|
||||||
|
|
||||||
|
<p>使用目的:用于oppo手机的离线消息推送。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:vivo 推送 SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:维沃移动通信有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://www.vivo.com.cn/about-vivo/privacy-policy</p>
|
||||||
|
|
||||||
|
<p>使用场景:消息推送</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备信息</p>
|
||||||
|
|
||||||
|
<p>使用目的:用于vivo手机的消息推送。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:腾讯bugly SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:深圳市腾讯计算机系统有限公司</p>
|
||||||
|
|
||||||
|
<p>包名信息:com.tencent.bugly</p>
|
||||||
|
|
||||||
|
<p>涉及个人信息:手机型号、手机品牌、Android系统版本、Android系统api级、厂商系统版本、cpu架构类型、设备是否root、磁盘空间占用大小、sdcard空间占用大小、内存空间占用大小、网络类型、应用当前正在运行的进程名和PID</p>
|
||||||
|
|
||||||
|
<p>使用目的:Bugly收集的信息是为了排查崩溃问题,帮助APP提升稳定性,为了更真实地为开发者还原Crash场景服务</p>
|
||||||
|
|
||||||
|
<p>bugly 隐私协议文档下载地址 :https://static.bugly.qq.com/bugly-sdk-privacy-statement.pdf</p>
|
||||||
|
|
||||||
|
<p>bugly隐私政策地址:https://privacy.qq.com/document/preview/fc748b3d96224fdb825ea79e132c1a56</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>五、一键认证类SDK</h3>
|
||||||
|
<h4>SDK名称:联通账号认证SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:中国联合网络通信有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://opencloud.wostore.cn/authz/resource/html/disclaimer.html?fromsdk=true</p>
|
||||||
|
|
||||||
|
<p>使用场景:一键认证</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:网络类型、网络地址、运营商类型、本机手机号、手机设备类型、手机操作系统、硬件厂商</p>
|
||||||
|
|
||||||
|
<p>使用目的:为App提供风控和认证服务。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:电信(天翼)账号认证SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:天翼数字生活科技有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://e.189.cn/sdk/agreement/detail.do?hidetop=true</p>
|
||||||
|
|
||||||
|
<p>使用场景:一键认证</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
收集个人信息类型:网络IP地址、网络类型、注册手机号码、本机号码、国际移动用户标识码、应用进程信息、网络连接类型、网络状态信息、网络地址、运营商类型、手机设备类型、手机设备厂商、手机操作系统类型及版本</p>
|
||||||
|
|
||||||
|
<p>使用目的:为App提供风控和认证服务。</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:移动账号认证SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:中移互联网有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://wap.cmpassport.com/resources/html/contract.html</p>
|
||||||
|
|
||||||
|
<p>使用场景:一键认证</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:网络类型、网络地址、运营商类型、本机号码信息、手机设备类型、手机操作系统、硬件厂商</p>
|
||||||
|
|
||||||
|
<p>使用目的:为App提供风控和认证服务。</p>
|
||||||
|
|
||||||
|
<p>五、其他SDK</p>
|
||||||
|
<h4>SDK名称:高德地图 SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:高德软件有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://lbs.amap.com/pages/privacy</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备标识符(Android如IMEI、MEID、OAID、Serial、ICCID、Android
|
||||||
|
ID、AndroidID、IMSI,iOS如IDFV、IDFA)、MAC地址、IP地址、位置信息(如GPS、蓝牙和基站)、WLAN接入点(如SSID、BSSID)、WiFi列表、设备传感器信息、应用信息、设备信息</p>
|
||||||
|
|
||||||
|
<p>使用目的:帮助用户发布信息时定位位置</p>
|
||||||
|
|
||||||
|
<p>使用场景:用户使用定位相关功能时使用</p>
|
||||||
|
|
||||||
|
<p>收集方式:SDK采集</p>
|
||||||
|
|
||||||
|
<p>合作方官网链接:https://lbs.amap.com/</p>
|
||||||
|
|
||||||
|
<p>合作方隐私政策:https://lbs.amap.com/pages/privacy/</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:Crash SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:广州市动景计算机科技有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://yueying-docs.effirst.com/privacy.html</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备型号、操作系统版本、屏幕分辨率、设备唯一标识符(如 IMEI、UUID 等)</p>
|
||||||
|
|
||||||
|
<p>使用目的:捕获 Android 应用崩溃信息</p>
|
||||||
|
|
||||||
|
<p>使用场景:应用崩溃时生成报告</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:QQ互联sdk(Android版本)</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:深圳市腾讯计算机系统有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://wiki.connect.qq.com/qq%e4%ba%92%e8%81%94sdk%e9%9a%90%e7%a7%81%e4%bf%9d%e6%8a%a4%e5%a3%b0%e6%98%8e</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备型号、操作系统版本、屏幕分辨率、设备唯一标识符(如 IMEI、UUID 等)</p>
|
||||||
|
|
||||||
|
<p>使用目的:捕获 Android 应用崩溃信息</p>
|
||||||
|
|
||||||
|
<p>使用场景:应用崩溃时生成报告</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:定位SDK</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:北京高德图强科技有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://lbs.amap.com/pages/privacy</p>
|
||||||
|
|
||||||
|
<p>使用目的:为最终用户提供定位功能及服务</p>
|
||||||
|
|
||||||
|
<p>使用场景:用户使用定位相关功能时使用</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:设备标识符(Android如IMEI、MEID、OAID、Serial、ICCID、Android
|
||||||
|
ID、AndroidID、IMSI,iOS如IDFV、IDFA)、MAC地址、IP地址、位置信息(如GPS、蓝牙和基站)、WLAN接入点(如SSID、BSSID)、WiFi列表、设备传感器信息、应用信息、设备信息等</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h4>SDK名称:微信OpenSDK Android</h4>
|
||||||
|
|
||||||
|
<p>开发者名称:深圳市腾讯计算机系统有限公司</p>
|
||||||
|
|
||||||
|
<p>隐私政策:https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8</p>
|
||||||
|
|
||||||
|
<p>使用目的:用于支持微信登录、朋友圈分享</p>
|
||||||
|
|
||||||
|
<p>使用场景:用户使用微信登录、将位置通过朋友圈分享</p>
|
||||||
|
|
||||||
|
<p>收集个人信息类型:收集的个人信息类型、字段:设备标识信息(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)、地理位置信息、网络信息等</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h3>重庆做梦科技有限公司</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1440" height="582" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="a"><stop stop-color="#606483" stop-opacity="0" offset="0%"/><stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="b"><stop stop-color="#0B0D19" offset="0%"/><stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.93%" gradientTransform="matrix(.24796 -.96592 .92535 .25883 -.151 .643)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><filter id="d"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd"><path d="M252.464 335.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z" fill="url(#a)" transform="rotate(24 -272.272 -82.087)"/><path d="M302.512 242.909c88.025 32.428 156-25.04 156-55.93 0-30.888-69.844-55.928-156-55.928-86.157 0-156 25.04-156 55.929 0 30.888 67.974 23.5 156 55.929z" fill="url(#b)" transform="rotate(24 -255.451 -119.868)"/><path d="M103.064 315.218c128.156 12.998 192.38 157.059 218.627 106.632 26.247-50.427-44.059-106.456 60.397-202.707 104.457-96.252-143.2-285.785-172.392-122.551C180.503 259.825-25.091 302.22 103.064 315.218z" transform="translate(1176 -33)" fill="url(#c)" filter="url(#d)"/></g></svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1440" height="347" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="a"><stop stop-color="#606483" stop-opacity="0" offset="0%"/><stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="b"><stop stop-color="#0B0D19" offset="0%"/><stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path d="M177.486 208.219c78.18 89.285 218.65-81.067 218.65-119.337 0-38.27-86.408-69.295-193-69.295-106.59 0-193 31.024-193 69.295 0 38.27 89.17 30.051 167.35 119.337z" transform="rotate(6 -140.175 3980.948)" fill="url(#a)"/><path d="M252.464 335.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z" fill="url(#a)" transform="rotate(24 321.92 -247.724)"/><path d="M302.512 242.909c88.025 32.428 156-25.04 156-55.93 0-30.888-69.844-55.928-156-55.928-86.157 0-156 25.04-156 55.929 0 30.888 67.974 23.5 156 55.929z" fill="url(#b)" transform="rotate(24 338.741 -285.505)"/></g></svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1440" height="318" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="38.706%" y1="-187.115%" x2="18.675%" y2="110.984%" id="a"><stop stop-color="#FFF" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="c"><stop stop-color="#606483" stop-opacity="0" offset="0%"/><stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="d"><stop stop-color="#0B0D19" stop-opacity=".32" offset="0%"/><stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/></linearGradient><filter id="b"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd"><path d="M88.494 90c67.04 7.177 161.094-24.753 224.996-90H.2c25.3 48.079 42.361 85.083 88.294 90z" transform="translate(1051)" fill="url(#a)" filter="url(#b)"/><path d="M250.464 367.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z" fill="url(#c)" transform="rotate(143 810.285 354.367)"/><path d="M373.408 256.178c88.026 32.429 156-25.04 156-55.929 0-30.888-69.843-55.929-156-55.929-86.156 0-156 25.04-156 55.93 0 30.888 67.975 23.5 156 55.928z" fill="url(#d)" transform="rotate(136 905.21 332.676)"/></g></svg>
|
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 532 KiB |
After Width: | Height: | Size: 382 KiB |
After Width: | Height: | Size: 321 KiB |
After Width: | Height: | Size: 391 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="764" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#4234F8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="58.676%" gradientTransform="scale(.81337 1) rotate(-72.484 .371 .382)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#4234F8" stop-opacity=".8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="translate(217 195)" fill="url(#b)"/><path d="M251 344c94.993 0 172-77.007 172-172S345.993 0 251 0s46.934 178.387-172 172c-218.934-6.387 77.007 172 172 172z" transform="translate(19)" fill="url(#c)"/><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="matrix(-1 0 0 1 653 195)" fill="url(#d)"/><path fill="#C1C3DA" d="M640.608 179l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639 2.143-3.165-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M642.304 218l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82 1.072-1.582-.81-1.837z"/><path fill-opacity=".64" fill="#268DF7" d="M614.686 200l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31 1.714-2.533-1.295-2.94z"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="780" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#268DF7" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.989%" gradientTransform="matrix(.2477 -.96494 .91064 .26247 -.145 .641)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#268DF7" stop-opacity=".8" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="matrix(-1 0 0 1 655 203)" fill="url(#b)"/><path d="M201.208 353c94.993 0 172-77.007 172-172s-98.8-212.473-172-172c-73.2 40.473-73.2 222.973-172 172-98.8-50.973 77.007 172 172 172z" transform="matrix(-1 0 0 1 805.208 0)" fill="url(#c)"/><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="translate(219 203)" fill="url(#d)"/><path fill="#C1C3DA" d="M260.608 103l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639 2.143-3.165-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M262.304 142l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82 1.072-1.582-.81-1.837z"/><path fill-opacity=".64" fill="#4234F8" d="M234.686 124l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31 1.714-2.533-1.295-2.94z"/></g></svg>
|
After Width: | Height: | Size: 2.2 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="762" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#4234F8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="58.178%" gradientTransform="scale(.90193 1) rotate(-74.113 .351 .41)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#4234F8" stop-opacity=".8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="translate(219 194)" fill="url(#b)"/><path d="M216 343c185-39.91 172-77.007 172-172s-115 7-172-123.102C159-82.203-100.836 90.254 44 171c144.836 80.746-13 211.91 172 172z" transform="translate(56)" fill="url(#c)"/><path fill="#C1C3DA" d="M349.608 16l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639L355 21.196l-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M351.304 55l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82L354 57.599l-.81-1.837z"/><path fill-opacity=".64" fill="#268DF7" d="M323.686 37l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31L328 41.156l-1.295-2.94z"/><path d="M392.286 540.278c37.75 237.363 436.799-108.302 173.285-173.139C302.058 302.302 487.99 194 392.286 194S219 271.517 219 367.14c0 95.621 135.536-64.225 173.286 173.138z" fill="url(#d)" transform="matrix(-1 0 0 1 874 0)"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="760" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#268DF7" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="58.741%" gradientTransform="matrix(.24453 -.95258 .76548 .3043 -.08 .62)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.77%" id="d"><stop stop-color="#FF6C50" stop-opacity=".64" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><filter x="0%" y="0%" width="100%" height="100%" filterUnits="objectBoundingBox" id="e"><feGaussianBlur in="SourceGraphic"/></filter><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="f"><stop stop-color="#268DF7" stop-opacity=".8" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="matrix(-1 0 0 1 655 193)" fill="url(#b)"/><g transform="translate(432)"><path d="M219.833 343c94.993 0 172-77.007 172-172s-87.598-167.172-172-135.18c-84.403 31.992-27 113.196-172 135.18-145 21.984 77.007 172 172 172z" fill="url(#c)" transform="matrix(-1 0 0 1 391.833 0)"/><circle fill-opacity=".72" fill="url(#d)" cx="183" cy="40" r="40"/><circle fill-opacity=".48" fill="url(#d)" filter="url(#e)" cx="298" cy="87" r="16"/></g><path d="M392.286 539.278c37.75 237.363 436.799-108.302 173.285-173.139C302.058 301.302 487.99 193 392.286 193S219 270.517 219 366.14c0 95.621 135.536-64.225 173.286 173.138z" fill="url(#f)"/><path fill="#C1C3DA" d="M697.608 50l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639L703 55.196l-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M683.304 72l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82L686 74.599l-.81-1.837z"/><path fill-opacity=".64" fill="#4234F8" d="M729.686 119l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31 1.714-2.533-1.295-2.94z"/></g></svg>
|
After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1050" height="1044" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="a"><stop stop-color="#4234F8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="32.541%" cy="46.352%" fx="32.541%" fy="46.352%" r="60.823%" id="c"><stop stop-color="#4234F8" stop-opacity="0" offset="0%"/><stop stop-color="#4234F8" stop-opacity=".64" offset="51.712%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></radialGradient><filter id="b"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd"><path d="M199 398c43.352 272.817 501.617-124.479 199-199S308.905 0 199 0 0 89.095 0 199s155.648-73.817 199 199z" transform="translate(305 463)" fill="url(#a)" filter="url(#b)"/><circle cx="172" cy="172" r="172" transform="translate(528 252)" fill="url(#c)"/></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 364 KiB |
After Width: | Height: | Size: 36 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.77%" id="a"><stop stop-color="#FF6C50" stop-opacity=".24" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient></defs><circle cx="16" cy="16" r="16" fill="url(#a)" fill-rule="evenodd"/></svg>
|
After Width: | Height: | Size: 432 B |
After Width: | Height: | Size: 7.7 KiB |
|
@ -0,0 +1 @@
|
||||||
|
!function(){const t=document,e=t.documentElement,i=t.body,n=window.sr=ScrollReveal({mobile:!1});e.classList.remove("no-js"),e.classList.add("js"),window.addEventListener("load",function(){i.classList.add("is-loaded")}),i.classList.contains("has-animations")&&window.addEventListener("load",function(){n.reveal(".feature-extended .device-mockup",{duration:600,distance:"100px",easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",origin:"bottom",viewFactor:.6}),n.reveal(".feature-extended .feature-extended-body",{duration:600,distance:"40px",easing:"cubic-bezier(0.215, 0.61, 0.355, 1)",origin:"top",viewFactor:.6})});let s=function(t){let e=this;e.parentNode=t,e.getCanvasSize(),window.addEventListener("resize",function(){e.getCanvasSize()}),e.mouseX=0,e.mouseY=0,window.addEventListener("mousemove",function(t){e.mouseX=t.clientX,e.mouseY=t.clientY}),e.randomise()};s.prototype.getCanvasSize=function(){this.canvasWidth=this.parentNode.clientWidth,this.canvasHeight=this.parentNode.clientHeight},s.prototype.generateDecimalBetween=function(t,e){return(Math.random()*(t-e)+e).toFixed(2)},s.prototype.update=function(){let t=this;t.translateX=t.translateX-t.movementX,t.translateY=t.translateY-t.movementY,t.posX+=(t.mouseX/(t.staticity/t.magnetism)-t.posX)/t.smoothFactor,t.posY+=(t.mouseY/(t.staticity/t.magnetism)-t.posY)/t.smoothFactor,(t.translateY+t.posY<0||t.translateX+t.posX<0||t.translateX+t.posX>t.canvasWidth)&&(t.randomise(),t.translateY=t.canvasHeight)},s.prototype.randomise=function(){this.colors=["85,107,139","38,141,247","66,52,248","255,108,80","243, 244, 255","96, 100, 131"],this.velocity=30,this.smoothFactor=50,this.staticity=30,this.magnetism=.1+4*Math.random(),this.color=this.colors[Math.floor(Math.random()*this.colors.length)],this.alpha=this.generateDecimalBetween(5,10)/10,this.size=this.generateDecimalBetween(1,4),this.posX=0,this.posY=0,this.movementX=this.generateDecimalBetween(-2,2)/this.velocity,this.movementY=this.generateDecimalBetween(1,20)/this.velocity,this.translateX=this.generateDecimalBetween(0,this.canvasWidth),this.translateY=this.generateDecimalBetween(0,this.canvasHeight)};let a=function(t){this.canvas=document.getElementById(t),this.ctx=this.canvas.getContext("2d"),this.dpr=window.devicePixelRatio};a.prototype.start=function(){let t=this;t.canvasSize(),window.addEventListener("resize",function(){t.canvasSize()}),t.bubblesList=[],t.generateBubbles(),t.animate()},a.prototype.canvasSize=function(){this.container=this.canvas.parentNode,this.w=this.container.offsetWidth,this.h=this.container.offsetHeight,this.wdpi=this.w*this.dpr,this.hdpi=this.h*this.dpr,this.canvas.width=this.wdpi,this.canvas.height=this.hdpi,this.canvas.style.width=this.w+"px",this.canvas.style.height=this.h+"px",this.ctx.scale(this.dpr,this.dpr)},a.prototype.animate=function(){let t=this;t.ctx.clearRect(0,0,t.canvas.clientWidth,t.canvas.clientHeight),t.bubblesList.forEach(function(e){e.update(),t.ctx.translate(e.translateX,e.translateY),t.ctx.beginPath(),t.ctx.arc(e.posX,e.posY,e.size,0,2*Math.PI),t.ctx.fillStyle="rgba("+e.color+","+e.alpha+")",t.ctx.fill(),t.ctx.setTransform(t.dpr,0,0,t.dpr,0,0)}),requestAnimationFrame(this.animate.bind(this))},a.prototype.addBubble=function(t){return this.bubblesList.push(t)},a.prototype.generateBubbles=function(){let t=this;for(let e=0;e<t.bubbleDensity();e++)t.addBubble(new s(t.canvas.parentNode))},a.prototype.bubbleDensity=function(){return 15},window.addEventListener("load",function(){const t=new a("hero-particles"),e=new a("footer-particles");t.start(),e.start()}),window.requestAnimFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();
|
|
@ -0,0 +1,131 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" class="no-js">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>智驾定位</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Heebo:400,700|Oxygen:700" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="dist/css/style.css">
|
||||||
|
<script src="https://unpkg.com/scrollreveal@4.0.5/dist/scrollreveal.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body class="is-boxed has-animations">
|
||||||
|
<div class="body-wrap boxed-container">
|
||||||
|
<header class="site-header text-light">
|
||||||
|
<div class="container">
|
||||||
|
<div class="site-header-inner">
|
||||||
|
<div class="brand header-brand">
|
||||||
|
<h1 class="m-0">
|
||||||
|
<a href="#">
|
||||||
|
<img class="header-logo-image" src="dist/images/logo2.png" alt="Logo">
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<section class="hero text-center text-light">
|
||||||
|
<!-- <div class="hero-bg"></div> -->
|
||||||
|
<div class="hero-particles-container">
|
||||||
|
<canvas id="hero-particles"></canvas>
|
||||||
|
</div>
|
||||||
|
<div class="container-sm">
|
||||||
|
<div class="hero-inner">
|
||||||
|
<div class="hero-copy">
|
||||||
|
<h1 class="hero-title mt-0"> <font color="#D151DB">面向家庭用户、车队管理者、骑行社群等多种出行场景的精准定位与智能驾驶分析APP。</font> </h1>
|
||||||
|
<p class="hero-paragraph"><font color="#9557F1">我们致力于通过精准的位置共享、行车轨迹分析和智能出行守护,为每一位用户打造更高效、更安心的出行体验。智能记录、安全前行、分享行程,让关心的人更安心!</font></p>
|
||||||
|
<div class="hero-cta">
|
||||||
|
<a class="button button-primary button-wide-mobile" href="https://sd.zuom8.cn/Download/android-r.apk">Android下载</a>
|
||||||
|
<a class="button button-primary button-wide-mobile" href="">IOS下载</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mockup-container">
|
||||||
|
<div class="mockup-bg">
|
||||||
|
<img src="dist/images/iphone-hero-bg.svg" alt="iPhone illustration">
|
||||||
|
</div>
|
||||||
|
<img class="device-mockup" src="dist/images/iphone-hero.png" alt="iPhone Hero">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="features-extended section">
|
||||||
|
<div class="features-extended-inner section-inner">
|
||||||
|
<div class="features-extended-wrap">
|
||||||
|
<div class="container">
|
||||||
|
<div class="feature-extended">
|
||||||
|
<div class="feature-extended-image">
|
||||||
|
<div class="mockup-bg">
|
||||||
|
<img src="dist/images/iphone-feature-bg-01.svg" alt="iPhone Feature 01 illustration">
|
||||||
|
</div>
|
||||||
|
<img class="device-mockup is-revealing" src="dist/images/iphone-feature-01.png" alt="iPhone Feature 01">
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended-body is-revealing">
|
||||||
|
<h3 class="mt-0 mb-16">帮助你查找朋友和车辆的定位</h3>
|
||||||
|
<p class="m-0">数据自动生成,行程随时回顾.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended">
|
||||||
|
<div class="feature-extended-image">
|
||||||
|
<div class="mockup-bg">
|
||||||
|
<img src="dist/images/iphone-feature-bg-02.svg" alt="iPhone Feature 02 illustration">
|
||||||
|
</div>
|
||||||
|
<img class="device-mockup is-revealing" src="dist/images/iphone-feature-02.png" alt="iPhone Feature 02">
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended-body is-revealing">
|
||||||
|
<h3 class="mt-0 mb-16">驾驶评分、智驾分析</h3>
|
||||||
|
<p class="m-0">自动计算驾驶行为评分,实时反馈驾驶习惯,包括急刹车、加速、超速等</p>
|
||||||
|
<p class="m-0">详细分析驾驶行为,展示每次行车的评分细节、改善建议、优化目标</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended">
|
||||||
|
<div class="feature-extended-image">
|
||||||
|
<div class="mockup-bg">
|
||||||
|
<img src="dist/images/iphone-feature-bg-03.svg" alt="iPhone Feature 03 illustration">
|
||||||
|
</div>
|
||||||
|
<img class="device-mockup is-revealing" src="dist/images/iphone-feature-03.png" alt="iPhone Feature 03">
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended-body is-revealing">
|
||||||
|
<h3 class="mt-0 mb-16">行程回顾、行程分享</h3>
|
||||||
|
<p class="m-0">精准记录每一次行程,回顾路线、时间、里程,支持轨迹回放</p>
|
||||||
|
<p class="m-0">将实时行程分享给关心你的人</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended">
|
||||||
|
<div class="feature-extended-image">
|
||||||
|
<div class="mockup-bg">
|
||||||
|
<img src="dist/images/iphone-feature-bg-04.svg" alt="iPhone Feature 04 illustration">
|
||||||
|
</div>
|
||||||
|
<img class="device-mockup is-revealing" src="dist/images/iphone-feature-04.png" alt="iPhone Feature 04">
|
||||||
|
</div>
|
||||||
|
<div class="feature-extended-body is-revealing">
|
||||||
|
<h3 class="mt-0 mb-16">安全省心、隐私保护</h3>
|
||||||
|
<p class="m-0">上车不掉队,圈子一路随行</p>
|
||||||
|
<p class="m-0">圈子虽小,连接无限,安心共享每一步,从亲近的人开始</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
<div class="site-footer-bottom">
|
||||||
|
<div class="container">
|
||||||
|
<div class="site-footer-inner">
|
||||||
|
<ul class="footer-social-links list-reset">
|
||||||
|
<li><div class="footer-icp"><a href="https://beian.miit.gov.cn">渝ICP备2025064932号</a></div></li>
|
||||||
|
<li><div class="footer-copyright">© 2025 智驾定位 版权所有</div></li>
|
||||||
|
<li><div class="footer-mail">联系我们:<a href="mailto:zuomeng2@batiao8.com">zuomeng2@batiao8.com</a></div></li>
|
||||||
|
<li><div class="footer-Privacy"><a href="Privacy.html"><font size="3">隐私政策</font></a></div></li>
|
||||||
|
<li><div class="footer-Agreement"><a href="Agreement.html"><font size="3">用户协议</font></a></div></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<script src="dist/js/main.min.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1440" height="582" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#606483" stop-opacity="0" offset="0%"/><stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="c"><stop stop-color="#0B0D19" offset="0%"/><stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.93%" gradientTransform="matrix(.24796 -.96592 .92535 .25883 -.151 .643)" id="d"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd"><path d="M252.464 335.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z" fill="url(#b)" transform="rotate(24 -272.272 -82.087)"/><path d="M302.512 242.909c88.025 32.428 156-25.04 156-55.93 0-30.888-69.844-55.928-156-55.928-86.157 0-156 25.04-156 55.929 0 30.888 67.974 23.5 156 55.929z" fill="url(#c)" transform="rotate(24 -255.451 -119.868)"/><g transform="translate(1176 -33)" fill="url(#d)" filter="url(#a)"><path d="M103.064 315.218c128.156 12.998 192.38 157.059 218.627 106.632 26.247-50.427-44.059-106.456 60.397-202.707 104.457-96.252-143.2-285.785-172.392-122.551C180.503 259.825-25.091 302.22 103.064 315.218z"/></g></g></svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1440" height="347" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#606483" stop-opacity="0" offset="0%"/><stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="c"><stop stop-color="#0B0D19" offset="0%"/><stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path d="M177.486 208.219c78.18 89.285 218.65-81.067 218.65-119.337 0-38.27-86.408-69.295-193-69.295-106.59 0-193 31.024-193 69.295 0 38.27 89.17 30.051 167.35 119.337z" transform="rotate(6 -140.175 3980.948)" fill="url(#b)"/><path d="M252.464 335.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z" fill="url(#b)" transform="rotate(24 321.92 -247.724)"/><path d="M302.512 242.909c88.025 32.428 156-25.04 156-55.93 0-30.888-69.844-55.928-156-55.928-86.157 0-156 25.04-156 55.929 0 30.888 67.974 23.5 156 55.929z" fill="url(#c)" transform="rotate(24 338.741 -285.505)"/></g></svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1440" height="318" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="38.706%" y1="-187.115%" x2="18.675%" y2="110.984%" id="a"><stop stop-color="#FFF" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="c"><stop stop-color="#606483" stop-opacity="0" offset="0%"/><stop stop-color="#0B0D19" stop-opacity=".72" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="39.334%" y2="79.282%" id="d"><stop stop-color="#0B0D19" stop-opacity=".32" offset="0%"/><stop stop-color="#0B0D19" stop-opacity="0" offset="100%"/></linearGradient><filter id="b"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd"><path d="M88.494 90c67.04 7.177 161.094-24.753 224.996-90H.2c25.3 48.079 42.361 85.083 88.294 90z" transform="translate(1051)" fill="url(#a)" filter="url(#b)"/><path d="M250.464 367.471c101.27 115.965 283.227-105.29 283.227-154.996 0-49.705-111.929-90-250-90s-250 40.295-250 90c0 49.706 115.503 39.032 216.773 154.996z" fill="url(#c)" transform="rotate(143 810.285 354.367)"/><path d="M373.408 256.178c88.026 32.429 156-25.04 156-55.929 0-30.888-69.843-55.929-156-55.929-86.156 0-156 25.04-156 55.93 0 30.888 67.975 23.5 156 55.928z" fill="url(#d)" transform="rotate(136 905.21 332.676)"/></g></svg>
|
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 118 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="764" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#4234F8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="58.676%" gradientTransform="scale(.81337 1) rotate(-72.484 .371 .382)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#4234F8" stop-opacity=".8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="translate(217 195)" fill="url(#b)"/><path d="M251 344c94.993 0 172-77.007 172-172S345.993 0 251 0s46.934 178.387-172 172c-218.934-6.387 77.007 172 172 172z" transform="translate(19)" fill="url(#c)"/><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="matrix(-1 0 0 1 653 195)" fill="url(#d)"/><path fill="#C1C3DA" d="M640.608 179l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639 2.143-3.165-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M642.304 218l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82 1.072-1.582-.81-1.837z"/><path fill-opacity=".64" fill="#268DF7" d="M614.686 200l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31 1.714-2.533-1.295-2.94z"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="780" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#268DF7" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.989%" gradientTransform="matrix(.2477 -.96494 .91064 .26247 -.145 .641)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#268DF7" stop-opacity=".8" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="matrix(-1 0 0 1 655 203)" fill="url(#b)"/><path d="M201.208 353c94.993 0 172-77.007 172-172s-98.8-212.473-172-172c-73.2 40.473-73.2 222.973-172 172-98.8-50.973 77.007 172 172 172z" transform="matrix(-1 0 0 1 805.208 0)" fill="url(#c)"/><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="translate(219 203)" fill="url(#d)"/><path fill="#C1C3DA" d="M260.608 103l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639 2.143-3.165-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M262.304 142l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82 1.072-1.582-.81-1.837z"/><path fill-opacity=".64" fill="#4234F8" d="M234.686 124l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31 1.714-2.533-1.295-2.94z"/></g></svg>
|
After Width: | Height: | Size: 2.2 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="762" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#4234F8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="58.178%" gradientTransform="scale(.90193 1) rotate(-74.113 .351 .41)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#4234F8" stop-opacity=".8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="translate(219 194)" fill="url(#b)"/><path d="M216 343c185-39.91 172-77.007 172-172s-115 7-172-123.102C159-82.203-100.836 90.254 44 171c144.836 80.746-13 211.91 172 172z" transform="translate(56)" fill="url(#c)"/><path fill="#C1C3DA" d="M349.608 16l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639L355 21.196l-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M351.304 55l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82L354 57.599l-.81-1.837z"/><path fill-opacity=".64" fill="#268DF7" d="M323.686 37l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31L328 41.156l-1.295-2.94z"/><path d="M392.286 540.278c37.75 237.363 436.799-108.302 173.285-173.139C302.058 302.302 487.99 194 392.286 194S219 271.517 219 367.14c0 95.621 135.536-64.225 173.286 173.138z" fill="url(#d)" transform="matrix(-1 0 0 1 874 0)"/></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="876" height="760" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#268DF7" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="58.741%" gradientTransform="matrix(.24453 -.95258 .76548 .3043 -.08 .62)" id="c"><stop stop-color="#FF6C50" stop-opacity="0" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.77%" id="d"><stop stop-color="#FF6C50" stop-opacity=".64" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient><filter x="0%" y="0%" width="100%" height="100%" filterUnits="objectBoundingBox" id="e"><feGaussianBlur in="SourceGraphic"/></filter><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="f"><stop stop-color="#268DF7" stop-opacity=".8" offset="0%"/><stop stop-color="#268DF7" stop-opacity="0" offset="100%"/></linearGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd" filter="url(#a)"><path d="M173.286 346.278c37.75 237.363 436.799-108.302 173.285-173.139C83.058 108.302 268.99 0 173.286 0S0 77.517 0 173.14c0 95.621 135.536-64.225 173.286 173.138z" transform="matrix(-1 0 0 1 655 193)" fill="url(#b)"/><g transform="translate(432)"><path d="M219.833 343c94.993 0 172-77.007 172-172s-87.598-167.172-172-135.18c-84.403 31.992-27 113.196-172 135.18-145 21.984 77.007 172 172 172z" fill="url(#c)" transform="matrix(-1 0 0 1 391.833 0)"/><circle fill-opacity=".72" fill="url(#d)" cx="183" cy="40" r="40"/><circle fill-opacity=".48" fill="url(#d)" filter="url(#e)" cx="298" cy="87" r="16"/></g><path d="M392.286 539.278c37.75 237.363 436.799-108.302 173.285-173.139C302.058 301.302 487.99 193 392.286 193S219 270.517 219 366.14c0 95.621 135.536-64.225 173.286 173.138z" fill="url(#f)"/><path fill="#C1C3DA" d="M697.608 50l-3.624 1.667-.984 3.53 1.158 3.36 3.45 1.443 3.249-1.639L703 55.196l-1.62-3.674z"/><path fill-opacity=".64" fill="#FF6C50" d="M683.304 72l-1.812.833-.492 1.765.579 1.68 1.725.722 1.624-.82L686 74.599l-.81-1.837z"/><path fill-opacity=".64" fill="#4234F8" d="M729.686 119l-2.899 1.334-.787 2.823.926 2.688 2.76 1.155 2.6-1.31 1.714-2.533-1.295-2.94z"/></g></svg>
|
After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="1050" height="1044" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="b"><stop stop-color="#4234F8" offset="0%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></linearGradient><radialGradient cx="32.541%" cy="46.352%" fx="32.541%" fy="46.352%" r="60.823%" id="c"><stop stop-color="#4234F8" stop-opacity="0" offset="0%"/><stop stop-color="#4234F8" stop-opacity=".64" offset="51.712%"/><stop stop-color="#4234F8" stop-opacity="0" offset="100%"/></radialGradient><filter id="a"><feTurbulence type="fractalNoise" numOctaves="2" baseFrequency=".3" result="turb"/><feComposite in="turb" operator="arithmetic" k1=".1" k2=".1" k3=".1" k4=".1" result="result1"/><feComposite operator="in" in="result1" in2="SourceGraphic" result="finalFilter"/><feBlend mode="multiply" in="finalFilter" in2="SourceGraphic"/></filter></defs><g fill="none" fill-rule="evenodd"><path d="M199 398c43.352 272.817 501.617-124.479 199-199S308.905 0 199 0 0 89.095 0 199s155.648-73.817 199 199z" transform="translate(305 463)" fill="url(#b)" filter="url(#a)"/><circle cx="172" cy="172" r="172" transform="translate(528 252)" fill="url(#c)"/></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 215 KiB |
|
@ -0,0 +1 @@
|
||||||
|
<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><defs><radialGradient cx="33.3%" cy="43.394%" fx="33.3%" fy="43.394%" r="57.77%" id="a"><stop stop-color="#FF6C50" stop-opacity=".24" offset="0%"/><stop stop-color="#FF6C50" stop-opacity=".64" offset="51.712%"/><stop stop-color="#FF6C50" stop-opacity=".24" offset="100%"/></radialGradient></defs><circle cx="16" cy="16" r="16" fill="url(#a)" fill-rule="evenodd"/></svg>
|
After Width: | Height: | Size: 432 B |
|
@ -0,0 +1,181 @@
|
||||||
|
(function () {
|
||||||
|
const doc = document
|
||||||
|
const rootEl = doc.documentElement
|
||||||
|
const body = doc.body
|
||||||
|
/* global ScrollReveal */
|
||||||
|
const sr = window.sr = ScrollReveal({ mobile: false })
|
||||||
|
|
||||||
|
rootEl.classList.remove('no-js')
|
||||||
|
rootEl.classList.add('js')
|
||||||
|
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
body.classList.add('is-loaded')
|
||||||
|
})
|
||||||
|
|
||||||
|
// Reveal animations
|
||||||
|
function revealAnimations () {
|
||||||
|
sr.reveal('.feature-extended .device-mockup', {
|
||||||
|
duration: 600,
|
||||||
|
distance: '100px',
|
||||||
|
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||||
|
origin: 'bottom',
|
||||||
|
viewFactor: 0.6
|
||||||
|
})
|
||||||
|
sr.reveal('.feature-extended .feature-extended-body', {
|
||||||
|
duration: 600,
|
||||||
|
distance: '40px',
|
||||||
|
easing: 'cubic-bezier(0.215, 0.61, 0.355, 1)',
|
||||||
|
origin: 'top',
|
||||||
|
viewFactor: 0.6
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body.classList.contains('has-animations')) {
|
||||||
|
window.addEventListener('load', revealAnimations)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Particle animation
|
||||||
|
let Bubble = function (parentNode) {
|
||||||
|
let self = this
|
||||||
|
self.parentNode = parentNode
|
||||||
|
self.getCanvasSize()
|
||||||
|
window.addEventListener('resize', function () {
|
||||||
|
self.getCanvasSize()
|
||||||
|
})
|
||||||
|
self.mouseX = 0
|
||||||
|
self.mouseY = 0
|
||||||
|
window.addEventListener('mousemove', function (e) {
|
||||||
|
self.mouseX = e.clientX
|
||||||
|
self.mouseY = e.clientY
|
||||||
|
})
|
||||||
|
self.randomise()
|
||||||
|
}
|
||||||
|
|
||||||
|
Bubble.prototype.getCanvasSize = function () {
|
||||||
|
let self = this
|
||||||
|
self.canvasWidth = self.parentNode.clientWidth
|
||||||
|
self.canvasHeight = self.parentNode.clientHeight
|
||||||
|
}
|
||||||
|
|
||||||
|
Bubble.prototype.generateDecimalBetween = function (min, max) {
|
||||||
|
return (Math.random() * (min - max) + max).toFixed(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
Bubble.prototype.update = function () {
|
||||||
|
let self = this
|
||||||
|
self.translateX = self.translateX - self.movementX
|
||||||
|
self.translateY = self.translateY - self.movementY
|
||||||
|
self.posX += ((self.mouseX / (self.staticity / self.magnetism)) - self.posX) / self.smoothFactor
|
||||||
|
self.posY += ((self.mouseY / (self.staticity / self.magnetism)) - self.posY) / self.smoothFactor
|
||||||
|
|
||||||
|
if (self.translateY + self.posY < 0 || self.translateX + self.posX < 0 || self.translateX + self.posX > self.canvasWidth) {
|
||||||
|
self.randomise()
|
||||||
|
self.translateY = self.canvasHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Bubble.prototype.randomise = function () {
|
||||||
|
let self = this
|
||||||
|
self.colors = ['85,107,139', '38,141,247', '66,52,248', '255,108,80', '243, 244, 255', '96, 100, 131']
|
||||||
|
self.velocity = 30 // Bubble levitation velocity (the higher the slower)
|
||||||
|
self.smoothFactor = 50 // The higher, the smoother
|
||||||
|
self.staticity = 30 // Increase value to make bubbles move slower on mousemove
|
||||||
|
self.magnetism = 0.1 + Math.random() * 4
|
||||||
|
self.color = self.colors[Math.floor(Math.random() * self.colors.length)]
|
||||||
|
self.alpha = self.generateDecimalBetween(5, 10) / 10
|
||||||
|
self.size = self.generateDecimalBetween(1, 4)
|
||||||
|
self.posX = 0
|
||||||
|
self.posY = 0
|
||||||
|
self.movementX = self.generateDecimalBetween(-2, 2) / self.velocity
|
||||||
|
self.movementY = self.generateDecimalBetween(1, 20) / self.velocity
|
||||||
|
self.translateX = self.generateDecimalBetween(0, self.canvasWidth)
|
||||||
|
self.translateY = self.generateDecimalBetween(0, self.canvasHeight)
|
||||||
|
}
|
||||||
|
|
||||||
|
let Background = function (selector) {
|
||||||
|
let self = this
|
||||||
|
self.canvas = document.getElementById(selector)
|
||||||
|
self.ctx = this.canvas.getContext('2d')
|
||||||
|
self.dpr = window.devicePixelRatio
|
||||||
|
}
|
||||||
|
|
||||||
|
Background.prototype.start = function () {
|
||||||
|
let self = this
|
||||||
|
self.canvasSize()
|
||||||
|
window.addEventListener('resize', function () {
|
||||||
|
self.canvasSize()
|
||||||
|
})
|
||||||
|
self.bubblesList = []
|
||||||
|
self.generateBubbles()
|
||||||
|
self.animate()
|
||||||
|
}
|
||||||
|
|
||||||
|
Background.prototype.canvasSize = function () {
|
||||||
|
let self = this
|
||||||
|
self.container = self.canvas.parentNode
|
||||||
|
// Determine window width and height
|
||||||
|
self.w = self.container.offsetWidth
|
||||||
|
self.h = self.container.offsetHeight
|
||||||
|
self.wdpi = self.w * self.dpr
|
||||||
|
self.hdpi = self.h * self.dpr
|
||||||
|
// Set canvas width and height
|
||||||
|
self.canvas.width = self.wdpi
|
||||||
|
self.canvas.height = self.hdpi
|
||||||
|
// Set width and height attributes
|
||||||
|
self.canvas.style.width = self.w + 'px'
|
||||||
|
self.canvas.style.height = self.h + 'px'
|
||||||
|
// Scale down canvas
|
||||||
|
self.ctx.scale(self.dpr, self.dpr)
|
||||||
|
}
|
||||||
|
|
||||||
|
Background.prototype.animate = function () {
|
||||||
|
let self = this
|
||||||
|
self.ctx.clearRect(0, 0, self.canvas.clientWidth, self.canvas.clientHeight)
|
||||||
|
self.bubblesList.forEach(function (bubble) {
|
||||||
|
bubble.update()
|
||||||
|
self.ctx.translate(bubble.translateX, bubble.translateY)
|
||||||
|
self.ctx.beginPath()
|
||||||
|
self.ctx.arc(bubble.posX, bubble.posY, bubble.size, 0, 2 * Math.PI)
|
||||||
|
self.ctx.fillStyle = 'rgba(' + bubble.color + ',' + bubble.alpha + ')'
|
||||||
|
self.ctx.fill()
|
||||||
|
self.ctx.setTransform(self.dpr, 0, 0, self.dpr, 0, 0)
|
||||||
|
})
|
||||||
|
/* global requestAnimationFrame */
|
||||||
|
requestAnimationFrame(this.animate.bind(this))
|
||||||
|
}
|
||||||
|
|
||||||
|
Background.prototype.addBubble = function (bubble) {
|
||||||
|
return this.bubblesList.push(bubble)
|
||||||
|
}
|
||||||
|
|
||||||
|
Background.prototype.generateBubbles = function () {
|
||||||
|
let self = this
|
||||||
|
for (let i = 0; i < self.bubbleDensity(); i++) {
|
||||||
|
self.addBubble(new Bubble(self.canvas.parentNode))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Background.prototype.bubbleDensity = function () {
|
||||||
|
return 15
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
const heroParticles = new Background('hero-particles')
|
||||||
|
const footerParticles = new Background('footer-particles')
|
||||||
|
heroParticles.start()
|
||||||
|
footerParticles.start()
|
||||||
|
})
|
||||||
|
|
||||||
|
window.requestAnimFrame = (function () {
|
||||||
|
return (
|
||||||
|
window.requestAnimationFrame ||
|
||||||
|
window.webkitRequestAnimationFrame ||
|
||||||
|
window.mozRequestAnimationFrame ||
|
||||||
|
window.oRequestAnimationFrame ||
|
||||||
|
window.msRequestAnimationFrame ||
|
||||||
|
function (callback) {
|
||||||
|
window.setTimeout(callback, 1000 / 60)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})()
|
||||||
|
}())
|
|
@ -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;
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
// 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, 2i);
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:active {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin shadow($layout: false) {
|
||||||
|
@if ( $layout == 'dark' ) {
|
||||||
|
box-shadow: 0 20px 48px rgba(darken(color(bg, 1), 35%), .2);
|
||||||
|
} @else {
|
||||||
|
box-shadow: 0 20px 48px rgba(color(typography, 1), .16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin shadow-sm($layout: false) {
|
||||||
|
@if ( $layout == 'dark' ) {
|
||||||
|
box-shadow: 0 16px 24px rgba(darken(color(bg, 1), 35%), .2);
|
||||||
|
} @else {
|
||||||
|
box-shadow: 0 16px 24px rgba(color(typography, 1), .16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin divider-mix($layout: false) {
|
||||||
|
display: block;
|
||||||
|
height: 1px;
|
||||||
|
@if ( $layout == 'dark' ) {
|
||||||
|
background: color(bg, 2i);
|
||||||
|
} @else {
|
||||||
|
background: color(bg, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin divider($type: false, $layout: false) {
|
||||||
|
@if ( $type == 'before' ) {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
@include divider-mix($layout);
|
||||||
|
}
|
||||||
|
} @else if ($type == 'after') {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
@include divider-mix($layout);
|
||||||
|
}
|
||||||
|
} @else {
|
||||||
|
@include divider-mix($layout);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
// --------------------------------------------
|
||||||
|
// Colors -------------------------------------
|
||||||
|
// Usage example: color(primary, main)
|
||||||
|
// --------------------------------------------
|
||||||
|
$color: (
|
||||||
|
typography: (
|
||||||
|
1: #161E2A,
|
||||||
|
2: #6B7A90,
|
||||||
|
1i: #FFF,
|
||||||
|
2i: #606483
|
||||||
|
),
|
||||||
|
bg: (
|
||||||
|
1: #FFFFFF,
|
||||||
|
2: #F3F4FF,
|
||||||
|
3: #E4E8EE,
|
||||||
|
1i: #0B0D19,
|
||||||
|
2i: #1E233D
|
||||||
|
),
|
||||||
|
primary: (
|
||||||
|
1: #4234F8,
|
||||||
|
2: #7065FA,
|
||||||
|
3: #1908F1,
|
||||||
|
4: #E2E0FE
|
||||||
|
),
|
||||||
|
secondary: (
|
||||||
|
1: #FF6C50,
|
||||||
|
2: #FF816A,
|
||||||
|
3: #FF411D,
|
||||||
|
4: #FFD8D1
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// --------------------------------------------
|
||||||
|
// Typography ---------------------------------
|
||||||
|
// --------------------------------------------
|
||||||
|
$font__family: (
|
||||||
|
base: '"Heebo", sans-serif', // font-family(base)
|
||||||
|
heading: '"Oxygen", 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: ( 44px, 54px, 0px ), // font-size, line-height, kerning (use '0' if don't want to output any kerning)
|
||||||
|
beta: ( 38px, 48px, 0px ),
|
||||||
|
gamma: ( 32px, 42px, 0px ),
|
||||||
|
delta: ( 28px, 34px, 0px ),
|
||||||
|
epsilon: ( 20px, 30px, -0.1px ),
|
||||||
|
zeta: ( 18px, 27px, -0.1px ),
|
||||||
|
eta: ( 16px, 24px, -0.1px ),
|
||||||
|
theta: ( 14px, 22px, 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, delta), // H4
|
||||||
|
5: map-get($font__sizes, epsilon), // Body, H5, H6
|
||||||
|
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, beta), // H1
|
||||||
|
2: map-get($font__sizes, gamma), // H2
|
||||||
|
3: map-get($font__sizes, delta), // H3
|
||||||
|
4: map-get($font__sizes, delta), // H4
|
||||||
|
5: map-get($font__sizes, epsilon), // Body, H5, H6
|
||||||
|
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(semibold)
|
||||||
|
bold: 700 // font__weight(bold)
|
||||||
|
);
|
||||||
|
|
||||||
|
// --------------------------------------------
|
||||||
|
// Structure ----------------------------------
|
||||||
|
// --------------------------------------------
|
||||||
|
$content__padding: (
|
||||||
|
mobile: 16px,
|
||||||
|
desktop: 24px
|
||||||
|
);
|
||||||
|
$container__width: 1080px;
|
||||||
|
$container__width-sm: 800px;
|
|
@ -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(semibold);
|
||||||
|
}
|
||||||
|
|
||||||
|
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(7, 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,469 @@
|
||||||
|
.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(8, mobile, true, false, true);
|
||||||
|
@if ( get-font-size(8, desktop) != get-font-size(8, mobile) ) {
|
||||||
|
@include media( '>medium' ) {
|
||||||
|
@include font-size(8, desktop, true, false, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include font-weight(semibold);
|
||||||
|
line-height: 16px;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: uppercase;
|
||||||
|
background-color: color(bg, 1);
|
||||||
|
color: color(primary, 1) !important;
|
||||||
|
border: none;
|
||||||
|
height: auto;
|
||||||
|
left: 8px;
|
||||||
|
padding: 16px 40px;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,263 @@
|
||||||
|
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(semibold);
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
.h4 {
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h5,
|
||||||
|
.h5,
|
||||||
|
h6,
|
||||||
|
.h6 {
|
||||||
|
@include font-size(5, mobile, true, true, true);
|
||||||
|
@if ( get-font-size(5, desktop) != get-font-size(5, mobile) ) {
|
||||||
|
@include media( '>medium' ) {
|
||||||
|
@include font-size(5, 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 {
|
||||||
|
@include font-size(4, mobile, true, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5-mobile,
|
||||||
|
.h6-mobile {
|
||||||
|
@include font-size(5, 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, 2);
|
||||||
|
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(semibold);
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea,
|
||||||
|
label {
|
||||||
|
@include font-size(5, mobile, true, true);
|
||||||
|
}
|
|
@ -0,0 +1,171 @@
|
||||||
|
.button {
|
||||||
|
display: inline-flex;
|
||||||
|
@include font-size(8, mobile, true, false, true);
|
||||||
|
@if ( get-font-size(8, desktop) != get-font-size(8, mobile) ) {
|
||||||
|
@include media( '>medium' ) {
|
||||||
|
@include font-size(8, desktop, true, false, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include font-weight(bold);
|
||||||
|
line-height: 16px;
|
||||||
|
text-decoration: none !important;
|
||||||
|
text-transform: uppercase;
|
||||||
|
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 40px;
|
||||||
|
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), 2%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.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: color(secondary, 1);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: lighten(color(secondary, 1), 3%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.button-shadow {
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
box-shadow: 0 8px 16px rgba(color(secondary, 1), .24);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
box-shadow: 0 8px 16px rgba(color(secondary, 1), .32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-sm {
|
||||||
|
|
||||||
|
&.button-shadow {
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
box-shadow: 0 4px 16px rgba(color(secondary, 1), .24);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
box-shadow: 0 4px 16px rgba(color(secondary, 1), .32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-block {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media( '<=medium' ) {
|
||||||
|
|
||||||
|
.button-wide-mobile {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 280px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
.cta {
|
||||||
|
|
||||||
|
.section-paragraph {
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media( '>medium' ) {
|
||||||
|
|
||||||
|
.cta {
|
||||||
|
|
||||||
|
.section-paragraph {
|
||||||
|
margin-bottom: 32px;
|
||||||
|
padding-left: 72px;
|
||||||
|
padding-right: 72px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,164 @@
|
||||||
|
.has-animations {
|
||||||
|
|
||||||
|
.features-extended {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-loaded {
|
||||||
|
|
||||||
|
.features-extended {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.features-extended-header {
|
||||||
|
margin-bottom: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.features-extended-wrap {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: -24px;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
margin-bottom: -24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:last-of-type) {
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended {
|
||||||
|
padding: 24px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended-image {
|
||||||
|
position: relative;
|
||||||
|
margin-bottom: 32px;
|
||||||
|
|
||||||
|
img,
|
||||||
|
svg {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 296px;
|
||||||
|
height: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended-body {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media( '>medium' ) {
|
||||||
|
|
||||||
|
.features-extended {
|
||||||
|
|
||||||
|
.container {
|
||||||
|
/* image width (440) + padding (96) + text width (360) = 896 */
|
||||||
|
max-width: 864px + ( get-content-padding(desktop) * 2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-inner {
|
||||||
|
padding-bottom: 128px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-paragraph {
|
||||||
|
padding-left: 72px;
|
||||||
|
padding-right: 72px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.features-extended-header {
|
||||||
|
margin-bottom: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.features-extended-wrap {
|
||||||
|
margin-top: -64px;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
margin-bottom: -64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:last-of-type) {
|
||||||
|
margin-bottom: 64px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
align-items: stretch;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 64px 0;
|
||||||
|
|
||||||
|
.feature-extended-image {
|
||||||
|
width: 440px;
|
||||||
|
margin-right: 96px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
img,
|
||||||
|
svg {
|
||||||
|
width: auto;
|
||||||
|
|
||||||
|
&.device-mockup {
|
||||||
|
max-width: 296px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(even) {
|
||||||
|
justify-content: flex-start;
|
||||||
|
|
||||||
|
.feature-extended-image {
|
||||||
|
order: 1;
|
||||||
|
margin-left: 96px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended-body {
|
||||||
|
/* Align vertically */
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
/* Align vertically, end */
|
||||||
|
flex-shrink: 0;
|
||||||
|
width: 360px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media( '>large' ) {
|
||||||
|
|
||||||
|
.features-extended {
|
||||||
|
|
||||||
|
.container {
|
||||||
|
/* image width (440) + padding (64) + text width (392) = 896 */
|
||||||
|
max-width: 896px + ( get-content-padding(desktop) * 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended {
|
||||||
|
|
||||||
|
.feature-extended-image {
|
||||||
|
margin-right: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(even) {
|
||||||
|
|
||||||
|
.feature-extended-image {
|
||||||
|
margin-left: 64px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-extended-body {
|
||||||
|
width: 392px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
.site-footer {
|
||||||
|
position: relative;
|
||||||
|
background: color(bg, 1i);
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: -76px;
|
||||||
|
left: calc(50% - 360px);
|
||||||
|
width: 720px;
|
||||||
|
height: 291px;
|
||||||
|
background-image: url('../images/footer-bg.svg');
|
||||||
|
background-size: 720px 291px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-particles-container {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer-bottom {
|
||||||
|
@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);
|
||||||
|
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;
|
||||||
|
@include divider(before, dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
.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 {
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
top: -152px;
|
||||||
|
left: calc(50% - 720px);
|
||||||
|
width: 1440px;
|
||||||
|
height: 582px;
|
||||||
|
background-size: 1440px 582px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-footer-inner {
|
||||||
|
justify-content: space-between;
|
||||||
|
padding-top: 64px;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
.site-header {
|
||||||
|
padding: 24px 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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(semibold);
|
||||||
|
@include anchor-aspect(header);
|
||||||
|
line-height: 16px;
|
||||||
|
padding: 8px 24px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,185 @@
|
||||||
|
.hero {
|
||||||
|
position: relative;
|
||||||
|
padding-top: 128px;
|
||||||
|
padding-bottom: 88px;
|
||||||
|
z-index: 0;
|
||||||
|
|
||||||
|
.hero-bg {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 42%;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: color(bg, 1i);
|
||||||
|
z-index: -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-particles-container {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 42%;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: calc(50% - 360px);
|
||||||
|
width: 720px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
top: 0;
|
||||||
|
height: 159px;
|
||||||
|
background-image: url('../images/hero-bg-top.svg');
|
||||||
|
background-size: 720px 159px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
bottom: 42%;
|
||||||
|
height: 173px;
|
||||||
|
background-image: url('../images/hero-bg-bottom.svg');
|
||||||
|
background-size: 720px 173px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-inner {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-copy {
|
||||||
|
position: relative; /* To display elements above hero illustrations */
|
||||||
|
margin-bottom: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media( '>medium' ) {
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
padding-top: 160px;
|
||||||
|
padding-bottom: 128px;
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
left: calc(50% - 720px);
|
||||||
|
width: 1440px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
height: 318px;
|
||||||
|
background-size: 1440px 318px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
height: 347px;
|
||||||
|
background-size: 1440px 347px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-copy {
|
||||||
|
margin-bottom: 88px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-paragraph {
|
||||||
|
padding-left: 72px;
|
||||||
|
padding-right: 72px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.has-animations {
|
||||||
|
|
||||||
|
.hero .hero-bg,
|
||||||
|
.hero::before,
|
||||||
|
.hero::after,
|
||||||
|
.hero-particles-container,
|
||||||
|
.site-header,
|
||||||
|
.hero-title,
|
||||||
|
.hero-paragraph,
|
||||||
|
.hero-cta,
|
||||||
|
.hero .mockup-bg,
|
||||||
|
.hero .device-mockup {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-loaded {
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
|
||||||
|
.hero-bg {
|
||||||
|
animation: heroBg .6s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
animation: heroFadeIn .6s ease forwards .45s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.site-header,
|
||||||
|
.hero-particles-container,
|
||||||
|
.hero .mockup-bg {
|
||||||
|
animation: heroFadeIn .6s ease forwards .45s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-title {
|
||||||
|
animation: heroContent .6s cubic-bezier(0.215, 0.61, 0.355, 1) forwards .15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-paragraph {
|
||||||
|
animation: heroContent .6s cubic-bezier(0.215, 0.61, 0.355, 1) forwards .3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-cta {
|
||||||
|
animation: heroContent .6s cubic-bezier(0.215, 0.61, 0.355, 1) forwards .45s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero .device-mockup {
|
||||||
|
animation: heroMockup .6s ease forwards .6s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes heroBg {
|
||||||
|
from {
|
||||||
|
transform: scaleY(0) scaleX(1.2) skewY(30deg);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: scaleY(1) scaleX(1) skewY(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes heroContent {
|
||||||
|
from {
|
||||||
|
transform: translateY(40px) skewY(2deg);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translateY(0) skewY(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes heroMockup {
|
||||||
|
from {
|
||||||
|
transform: translateY(80px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translateY(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes heroFadeIn {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
.is-boxed {
|
||||||
|
background: color(bg, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
.mockup-container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mockup-bg {
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
img,
|
||||||
|
svg {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
width: auto !important;
|
||||||
|
height: auto;
|
||||||
|
max-width: 300% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.device-mockup {
|
||||||
|
position: relative;
|
||||||
|
width: 350px;
|
||||||
|
height: auto;
|
||||||
|
margin: 0 auto;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# 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";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# Header
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/header";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# Hero
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/hero";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# Mockup
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/mockups";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# Features extended
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/features-extended";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# CTA
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/cta";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# Site content
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/main";
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------
|
||||||
|
# Footer
|
||||||
|
--------------------------------------------------------------*/
|
||||||
|
@import "layout/footer";
|