├── .gitignore
├── LICENSE
├── README.md
├── assets
└── styles
│ ├── angled-edges.css
│ ├── angled-edges.scss
│ ├── site.css
│ ├── site.scss
│ └── site
│ ├── _normalize.scss
│ └── _site.scss
├── gulpfile.js
├── index.html
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017 Nigel O Toole
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Angled Edges (SASS mixin)
2 |
3 | [Live demo](http://nigelotoole.github.io/angled-edges/)
4 |
5 | Add a consistent angled edge to a full width element.
6 | This technique uses CSS clip-path to clip the image but has a fallback using pseudo elements for older browsers.
7 | It is only intended for use on full width elements as it uses the vw unit to calulate the angle.
8 |
9 |
10 | ## Usage
11 |
12 | Once you have downloaded the code, run the commands below to view the demo.
13 |
14 | ```javascript
15 | $ npm install
16 | $ gulp serve
17 | ```
18 |
19 | You can also import **angled-edges.scss** into your own project directly and use the classes already setup or use the mixin in your own classes.
20 |
21 |
22 | Follow the code example below for basic usage with an angle on the top left.
23 |
24 | ```html
25 |
26 |
27 |
28 | ```
29 |
30 |
31 | ### License
32 | MIT © Nigel O Toole
33 |
--------------------------------------------------------------------------------
/assets/styles/angled-edges.css:
--------------------------------------------------------------------------------
1 | .angle--top-left {
2 | position: relative;
3 | overflow: hidden;
4 | -webkit-clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 100%);
5 | clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 100%);
6 | }
7 |
8 | @supports not ((-webkit-clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 100%)) or (clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 100%))) {
9 | .angle--top-left::before, .angle--top-left::after {
10 | content: "";
11 | position: absolute;
12 | left: 0;
13 | z-index: 10;
14 | display: block;
15 | border-style: solid;
16 | }
17 | .angle--top-left::before {
18 | top: 0;
19 | border-width: 8vw 100vw 0 0;
20 | border-color: #fff transparent transparent transparent;
21 | }
22 | }
23 |
24 | .angle--top-right {
25 | position: relative;
26 | overflow: hidden;
27 | -webkit-clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 100%);
28 | clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 100%);
29 | }
30 |
31 | @supports not ((-webkit-clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 100%)) or (clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 100%))) {
32 | .angle--top-right::before, .angle--top-right::after {
33 | content: "";
34 | position: absolute;
35 | left: 0;
36 | z-index: 10;
37 | display: block;
38 | border-style: solid;
39 | }
40 | .angle--top-right::before {
41 | top: 0;
42 | border-width: 8vw 0 0 100vw;
43 | border-color: #fff transparent transparent transparent;
44 | }
45 | }
46 |
47 | .angle--bottom-left {
48 | position: relative;
49 | overflow: hidden;
50 | -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 7vw));
51 | clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 7vw));
52 | }
53 |
54 | @supports not ((-webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 7vw))) or (clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - 7vw)))) {
55 | .angle--bottom-left::before, .angle--bottom-left::after {
56 | content: "";
57 | position: absolute;
58 | left: 0;
59 | z-index: 10;
60 | display: block;
61 | border-style: solid;
62 | }
63 | .angle--bottom-left::after {
64 | bottom: 0;
65 | border-width: 0 100vw 8vw 0;
66 | border-color: transparent transparent #fff transparent;
67 | }
68 | }
69 |
70 | .angle--bottom-right {
71 | position: relative;
72 | overflow: hidden;
73 | -webkit-clip-path: polygon(0 0, 100% 0, 100% calc(100% - 7vw), 0 100%);
74 | clip-path: polygon(0 0, 100% 0, 100% calc(100% - 7vw), 0 100%);
75 | }
76 |
77 | @supports not ((-webkit-clip-path: polygon(0 0, 100% 0, 100% calc(100% - 7vw), 0 100%)) or (clip-path: polygon(0 0, 100% 0, 100% calc(100% - 7vw), 0 100%))) {
78 | .angle--bottom-right::before, .angle--bottom-right::after {
79 | content: "";
80 | position: absolute;
81 | left: 0;
82 | z-index: 10;
83 | display: block;
84 | border-style: solid;
85 | }
86 | .angle--bottom-right::after {
87 | bottom: 0;
88 | border-width: 0 0 8vw 100vw;
89 | border-color: transparent transparent #fff transparent;
90 | }
91 | }
92 |
93 | .angle--both-left-left {
94 | position: relative;
95 | overflow: hidden;
96 | -webkit-clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 calc(100% - 7vw));
97 | clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 calc(100% - 7vw));
98 | }
99 |
100 | @supports not ((-webkit-clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 calc(100% - 7vw))) or (clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% 100%, 0 calc(100% - 7vw)))) {
101 | .angle--both-left-left::before, .angle--both-left-left::after {
102 | content: "";
103 | position: absolute;
104 | left: 0;
105 | z-index: 10;
106 | display: block;
107 | border-style: solid;
108 | }
109 | .angle--both-left-left::before {
110 | top: 0;
111 | border-width: 8vw 100vw 0 0;
112 | border-color: #fff transparent transparent transparent;
113 | }
114 | .angle--both-left-left::after {
115 | bottom: 0;
116 | border-width: 0 100vw 8vw 0;
117 | border-color: transparent transparent #fff transparent;
118 | }
119 | }
120 |
121 | .angle--both-right-right {
122 | position: relative;
123 | overflow: hidden;
124 | -webkit-clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% calc(100% - 7vw), 0 100%);
125 | clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% calc(100% - 7vw), 0 100%);
126 | }
127 |
128 | @supports not ((-webkit-clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% calc(100% - 7vw), 0 100%)) or (clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% calc(100% - 7vw), 0 100%))) {
129 | .angle--both-right-right::before, .angle--both-right-right::after {
130 | content: "";
131 | position: absolute;
132 | left: 0;
133 | z-index: 10;
134 | display: block;
135 | border-style: solid;
136 | }
137 | .angle--both-right-right::before {
138 | top: 0;
139 | border-width: 8vw 0 0 100vw;
140 | border-color: #fff transparent transparent transparent;
141 | }
142 | .angle--both-right-right::after {
143 | bottom: 0;
144 | border-width: 0 0 8vw 100vw;
145 | border-color: transparent transparent #fff transparent;
146 | }
147 | }
148 |
149 | .angle--both-left-right {
150 | position: relative;
151 | overflow: hidden;
152 | -webkit-clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% calc(100% - 7vw), 0 100%);
153 | clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% calc(100% - 7vw), 0 100%);
154 | }
155 |
156 | @supports not ((-webkit-clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% calc(100% - 7vw), 0 100%)) or (clip-path: polygon(0 calc(0% + 7vw), 100% 0, 100% calc(100% - 7vw), 0 100%))) {
157 | .angle--both-left-right::before, .angle--both-left-right::after {
158 | content: "";
159 | position: absolute;
160 | left: 0;
161 | z-index: 10;
162 | display: block;
163 | border-style: solid;
164 | }
165 | .angle--both-left-right::before {
166 | top: 0;
167 | border-width: 8vw 100vw 0 0;
168 | border-color: #fff transparent transparent transparent;
169 | }
170 | .angle--both-left-right::after {
171 | bottom: 0;
172 | border-width: 0 0 8vw 100vw;
173 | border-color: transparent transparent #fff transparent;
174 | }
175 | }
176 |
177 | .angle--both-right-left {
178 | position: relative;
179 | overflow: hidden;
180 | -webkit-clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 calc(100% - 7vw));
181 | clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 calc(100% - 7vw));
182 | }
183 |
184 | @supports not ((-webkit-clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 calc(100% - 7vw))) or (clip-path: polygon(0 0, 100% calc(0% + 7vw), 100% 100%, 0 calc(100% - 7vw)))) {
185 | .angle--both-right-left::before, .angle--both-right-left::after {
186 | content: "";
187 | position: absolute;
188 | left: 0;
189 | z-index: 10;
190 | display: block;
191 | border-style: solid;
192 | }
193 | .angle--both-right-left::before {
194 | top: 0;
195 | border-width: 8vw 0 0 100vw;
196 | border-color: #fff transparent transparent transparent;
197 | }
198 | .angle--both-right-left::after {
199 | bottom: 0;
200 | border-width: 0 100vw 8vw 0;
201 | border-color: transparent transparent #fff transparent;
202 | }
203 | }
204 |
205 | .angle__content {
206 | display: block;
207 | width: 100%;
208 | height: auto;
209 | }
210 |
211 | .angle--colour {
212 | color: #fff;
213 | background-color: #2196F3;
214 | text-align: center;
215 | padding: 10% 0;
216 | }
217 |
218 | /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFuZ2xlZC1lZGdlcy5zY3NzIiwiYW5nbGVkLWVkZ2VzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0SEE7RUFsSEUsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQW1FakIsd0VBRG1CO1VBQ25CLGdFQURtQjtDQWlEcEI7O0FBMUN3QztFQXdDekM7SUFyQ1EsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixRQUFRO0lBQ1IsWUFBWTtJQUNaLGVBQWU7SUFDZixvQkFBb0I7R0FDckI7RUErQlA7SUEzQlUsT0FBTztJQUNQLDRCQXZEMEM7SUF3RDFDLHVEQS9DZ0U7R0FnRGpFO0NDaEZSOztBRDRHRDtFQXRIRSxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBbUVqQix3RUFEbUI7VUFDbkIsZ0VBRG1CO0NBcURwQjs7QUE5Q3dDO0VBNEN6QztJQXpDUSxZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixZQUFZO0lBQ1osZUFBZTtJQUNmLG9CQUFvQjtHQUNyQjtFQW1DUDtJQS9CVSxPQUFPO0lBQ1AsNEJBakQwQztJQWtEMUMsdURBL0NnRTtHQWdEakU7Q0MxRFI7O0FEMEZEO0VBMUhFLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFtRWpCLHVFQURtQjtVQUNuQiwrREFEbUI7Q0F5RHBCOztBQWxEd0M7RUFnRHpDO0lBN0NRLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsUUFBUTtJQUNSLFlBQVk7SUFDWixlQUFlO0lBQ2Ysb0JBQW9CO0dBQ3JCO0VBdUNQO0lBM0JVLFVBQVU7SUFDViw0QkF6QzZDO0lBMEM3Qyx1REFqQ21FO0dBa0NwRTtDQzVDUjs7QUR3RUQ7RUE5SEUsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQW1FakIsdUVBRG1CO1VBQ25CLCtEQURtQjtDQTZEcEI7O0FBdER3QztFQW9EekM7SUFqRFEsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixRQUFRO0lBQ1IsWUFBWTtJQUNaLGVBQWU7SUFDZixvQkFBb0I7R0FDckI7RUEyQ1A7SUEvQlUsVUFBVTtJQUNWLDRCQW5DNkM7SUFvQzdDLHVEQWpDbUU7R0FrQ3BFO0NDdEJSOztBRHNERDtFQWxJRSxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBbUVqQixvRkFEbUI7VUFDbkIsNEVBRG1CO0NBaUVwQjs7QUExRHdDO0VBd0R6QztJQXJEUSxZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixZQUFZO0lBQ1osZUFBZTtJQUNmLG9CQUFvQjtHQUNyQjtFQStDUDtJQTNDVSxPQUFPO0lBQ1AsNEJBdkQwQztJQXdEMUMsdURBL0NnRTtHQWdEakU7RUF3Q1Q7SUFuQ1UsVUFBVTtJQUNWLDRCQXpDNkM7SUEwQzdDLHVEQWpDbUU7R0FrQ3BFO0NDS1I7O0FEK0JEO0VBdElFLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFtRWpCLG9GQURtQjtVQUNuQiw0RUFEbUI7Q0FxRXBCOztBQTlEd0M7RUE0RHpDO0lBekRRLFlBQVk7SUFDWixtQkFBbUI7SUFDbkIsUUFBUTtJQUNSLFlBQVk7SUFDWixlQUFlO0lBQ2Ysb0JBQW9CO0dBQ3JCO0VBbURQO0lBL0NVLE9BQU87SUFDUCw0QkFqRDBDO0lBa0QxQyx1REEvQ2dFO0dBZ0RqRTtFQTRDVDtJQXZDVSxVQUFVO0lBQ1YsNEJBbkM2QztJQW9DN0MsdURBakNtRTtHQWtDcEU7Q0NnQ1I7O0FEUUQ7RUExSUUsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQW1FakIsb0ZBRG1CO1VBQ25CLDRFQURtQjtDQXlFcEI7O0FBbEV3QztFQWdFekM7SUE3RFEsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixRQUFRO0lBQ1IsWUFBWTtJQUNaLGVBQWU7SUFDZixvQkFBb0I7R0FDckI7RUF1RFA7SUFuRFUsT0FBTztJQUNQLDRCQXZEMEM7SUF3RDFDLHVEQS9DZ0U7R0FnRGpFO0VBZ0RUO0lBM0NVLFVBQVU7SUFDViw0QkFuQzZDO0lBb0M3Qyx1REFqQ21FO0dBa0NwRTtDQzJEUjs7QURmRDtFQTlJRSxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBbUVqQixvRkFEbUI7VUFDbkIsNEVBRG1CO0NBNkVwQjs7QUF0RXdDO0VBb0V6QztJQWpFUSxZQUFZO0lBQ1osbUJBQW1CO0lBQ25CLFFBQVE7SUFDUixZQUFZO0lBQ1osZUFBZTtJQUNmLG9CQUFvQjtHQUNyQjtFQTJEUDtJQXZEVSxPQUFPO0lBQ1AsNEJBakQwQztJQWtEMUMsdURBL0NnRTtHQWdEakU7RUFvRFQ7SUEvQ1UsVUFBVTtJQUNWLDRCQXpDNkM7SUEwQzdDLHVEQWpDbUU7R0FrQ3BFO0NDc0ZSOztBRHJDQztFQUNFLGVBQWU7RUFDZixZQUFZO0VBQ1osYUFBYTtDQUNkOztBQUVIO0VBQ0UsWUFBWTtFQUNaLDBCQUEwQjtFQUMxQixtQkFBbUI7RUFDbkIsZUFBZTtDQUNoQiIsImZpbGUiOiJhbmdsZWQtZWRnZXMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyAkYW5nbGU6IFRoZSBhbmdsZSBpbiBkZWdyZWVzOiAxIC0gNDVcbi8vICRhbmdsZS1wb3NpdGlvbi15OiBUaGUgWSBwb3NpdGlvbiBvZiB0aGUgYW5nbGU6IHRvcCB8IGJvdHRvbSB8IGJvdGhcbi8vICRhbmdsZS1wb3NpdGlvbi14OiBUaGUgWCBwb3NpdGlvbiBvZiB0aGUgYW5nbGU6IGxlZnQgfCByaWdodFxuLy8gJGFuZ2xlLXBvc2l0aW9uLWJvdHRvbS14OiBUaGUgWCBwb3NpdGlvbiBvZiB0aGUgYm90dG9tIGFuZ2xlIGlmIHVzaW5nICdib3RoJyBmb3IgJGFuZ2xlLXBvc2l0aW9uLXk6IGxlZnQgfCByaWdodFxuLy8gJGZhbGxiYWNrOiBDcmVhdGUgYSBmYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlcnM6IHRydWUgfCBmYWxzZVxuLy8gJGZhbGxiYWNrLWNvbG9yOiBGYWxsYmFjayBjb2xvdXIgZm9yIG9sZGVyIGJyb3dzZXJzOiBIZXggY29sb3JcblxuQG1peGluIGFuZ2xlLWVkZ2UoJGFuZ2xlLCAkYW5nbGUtcG9zaXRpb24teSwgJGFuZ2xlLXBvc2l0aW9uLXgsICRhbmdsZS1wb3NpdGlvbi1ib3R0b20teDogJycsICRmYWxsYmFjazogdHJ1ZSwgJGZhbGxiYWNrLWNvbG9yOiAjZmZmKSB7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIC8vIENvbnZlcnRzIGRlZ3JlZXMgdG8gVlcsIDEwMHZ3ID0gNDVkZWcgdXNpbmcgdGhpcyB0ZWNobmlxdWVcbiAgQGlmICRhbmdsZSA+IDQ1IHtcbiAgICAkYW5nbGU6IDA7XG4gICAgQGVycm9yICdJbnZhbGlkIGFuZ2xlLCBpdCBtdXN0IGJlIGJldHdlZW4gMS00NSc7XG4gIH1cbiAgQGlmICRhbmdsZSA8IDQ2IHtcbiAgICAkYW5nbGU6IGNvbnZlcnREZWdUb1ZXKCRhbmdsZSk7XG4gIH1cblxuICBAaWYgJGFuZ2xlLXBvc2l0aW9uLWJvdHRvbS14ID09ICcnIHtcbiAgICAkYW5nbGUtcG9zaXRpb24tYm90dG9tLXg6ICRhbmdsZS1wb3NpdGlvbi14O1xuICB9XG5cbiAgJGFuZ2xlLWNhbGMtdG9wOiBjYWxjKDAlICsgI3skYW5nbGV9dncpO1xuICAkYW5nbGUtY2FsYy1ib3R0b206IGNhbGMoMTAwJSAtICN7JGFuZ2xlfXZ3KTtcblxuICAkY2xpcC1wYXRoLXRvcDogMCAwLCAxMDAlIDA7XG4gICRjbGlwLXBhdGgtYm90dG9tOiAxMDAlIDEwMCUsIDAgMTAwJTtcblxuICAkYm9yZGVyLXdpZHRoLXRvcDogJyc7XG4gICRib3JkZXItd2lkdGgtYm90dG9tOiAnJztcbiAgJGJvcmRlci1jb2xvci10b3A6ICcnO1xuICAkYm9yZGVyLWNvbG9yLWJvdHRvbTogJyc7XG5cblxuICBAaWYgJGFuZ2xlLXBvc2l0aW9uLXkgPT0gJ3RvcCcgb3IgJGFuZ2xlLXBvc2l0aW9uLXkgPT0gJ2JvdGgnIHtcblxuICAgIEBpZiAkYW5nbGUtcG9zaXRpb24teCA9PSAnbGVmdCcge1xuICAgICAgJGNsaXAtcGF0aC10b3A6IDAgJGFuZ2xlLWNhbGMtdG9wLCAxMDAlIDA7XG5cbiAgICAgICRib3JkZXItd2lkdGgtdG9wOiAjeyRhbmdsZSArIDF9dncgMTAwdncgMCAwO1xuICAgIH1cblxuICAgIEBpZiAkYW5nbGUtcG9zaXRpb24teCA9PSAncmlnaHQnIHtcbiAgICAgICRjbGlwLXBhdGgtdG9wOiAwIDAsIDEwMCUgJGFuZ2xlLWNhbGMtdG9wO1xuXG4gICAgICAkYm9yZGVyLXdpZHRoLXRvcDogI3skYW5nbGUgKyAxfXZ3IDAgMCAxMDB2dztcbiAgICB9XG5cbiAgICAkYm9yZGVyLWNvbG9yLXRvcDogJGZhbGxiYWNrLWNvbG9yIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG5cblxuICBAaWYgJGFuZ2xlLXBvc2l0aW9uLXkgPT0gJ2JvdHRvbScgb3IgJGFuZ2xlLXBvc2l0aW9uLXkgPT0gJ2JvdGgnIHtcblxuICAgIEBpZiAkYW5nbGUtcG9zaXRpb24teSA9PSAnYm90aCcgYW5kICRhbmdsZS1wb3NpdGlvbi14ICE9ICRhbmdsZS1wb3NpdGlvbi1ib3R0b20teCB7XG4gICAgICAkYW5nbGUtcG9zaXRpb24teDogJGFuZ2xlLXBvc2l0aW9uLWJvdHRvbS14O1xuICAgIH1cblxuICAgIEBpZiAkYW5nbGUtcG9zaXRpb24teCA9PSAnbGVmdCcge1xuICAgICAgJGNsaXAtcGF0aC1ib3R0b206IDEwMCUgMTAwJSwgMCAkYW5nbGUtY2FsYy1ib3R0b207XG5cbiAgICAgICRib3JkZXItd2lkdGgtYm90dG9tOiAwIDEwMHZ3ICN7JGFuZ2xlICsgMX12dyAwO1xuICAgIH1cblxuICAgIEBpZiAkYW5nbGUtcG9zaXRpb24teCA9PSAncmlnaHQnIHtcbiAgICAgICRjbGlwLXBhdGgtYm90dG9tOiAxMDAlICRhbmdsZS1jYWxjLWJvdHRvbSwgMCAxMDAlO1xuXG4gICAgICAkYm9yZGVyLXdpZHRoLWJvdHRvbTogMCAwICN7JGFuZ2xlICsgMX12dyAxMDB2dztcbiAgICB9XG5cbiAgICAkYm9yZGVyLWNvbG9yLWJvdHRvbTogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJGZhbGxiYWNrLWNvbG9yIHRyYW5zcGFyZW50O1xuICB9XG5cbiAgJGNsaXAtcGF0aDogcG9seWdvbigkY2xpcC1wYXRoLXRvcCwgJGNsaXAtcGF0aC1ib3R0b20pO1xuICBjbGlwLXBhdGg6ICRjbGlwLXBhdGg7XG5cblxuICAvLyBGYWxsYmFjayBmb3IgY2xpcC1wYXRoIHdpdGggc29saWQgY29sb3Vyc1xuICBAaWYgJGZhbGxiYWNrIHtcblxuICAgIEBzdXBwb3J0cyBub3QgKGNsaXAtcGF0aDogJGNsaXAtcGF0aCkge1xuXG4gICAgICAmOjpiZWZvcmUsICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICB9XG5cbiAgICAgIEBpZiAkYW5nbGUtcG9zaXRpb24teSA9PSAndG9wJyBvciAkYW5nbGUtcG9zaXRpb24teSA9PSAnYm90aCcge1xuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBib3JkZXItd2lkdGg6ICRib3JkZXItd2lkdGgtdG9wO1xuICAgICAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvci10b3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGlmICRhbmdsZS1wb3NpdGlvbi15ID09ICdib3R0b20nIG9yICRhbmdsZS1wb3NpdGlvbi15ID09ICdib3RoJyB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgYm9yZGVyLXdpZHRoOiAkYm9yZGVyLXdpZHRoLWJvdHRvbTtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3ItYm90dG9tO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG5cbiAgfVxuXG59XG5cbi8vIENvbnZlcnRzIGRlZ3JlZXMgdG8gVlcsIDEwMHZ3ID0gNDVkZWcgdXNpbmcgdGhpcyB0ZWNobmlxdWVcbkBmdW5jdGlvbiBjb252ZXJ0RGVnVG9WVygkYW5nbGUpe1xuICBAcmV0dXJuIHJvdW5kKCRhbmdsZSoyLjIyKTtcbn1cblxuXG4vLyBDbGFzc2VzXG4uYW5nbGUtLXRvcC1sZWZ0IHtcbiAgQGluY2x1ZGUgYW5nbGUtZWRnZSgkYW5nbGU6IDMsICRhbmdsZS1wb3NpdGlvbi15OiAndG9wJywgJGFuZ2xlLXBvc2l0aW9uLXg6ICdsZWZ0Jyk7XG59XG5cbi5hbmdsZS0tdG9wLXJpZ2h0IHtcbiAgQGluY2x1ZGUgYW5nbGUtZWRnZSgkYW5nbGU6IDMsICRhbmdsZS1wb3NpdGlvbi15OiAndG9wJywgJGFuZ2xlLXBvc2l0aW9uLXg6ICdyaWdodCcpO1xufVxuXG4uYW5nbGUtLWJvdHRvbS1sZWZ0IHtcbiAgQGluY2x1ZGUgYW5nbGUtZWRnZSgkYW5nbGU6IDMsICRhbmdsZS1wb3NpdGlvbi15OiAnYm90dG9tJywgJGFuZ2xlLXBvc2l0aW9uLXg6ICdsZWZ0Jyk7XG59XG5cbi5hbmdsZS0tYm90dG9tLXJpZ2h0IHtcbiAgQGluY2x1ZGUgYW5nbGUtZWRnZSgkYW5nbGU6IDMsICRhbmdsZS1wb3NpdGlvbi15OiAnYm90dG9tJywgJGFuZ2xlLXBvc2l0aW9uLXg6ICdyaWdodCcpO1xufVxuXG4uYW5nbGUtLWJvdGgtbGVmdC1sZWZ0IHtcbiAgQGluY2x1ZGUgYW5nbGUtZWRnZSgkYW5nbGU6IDMsICRhbmdsZS1wb3NpdGlvbi15OiAnYm90aCcsICRhbmdsZS1wb3NpdGlvbi14OiAnbGVmdCcpO1xufVxuXG4uYW5nbGUtLWJvdGgtcmlnaHQtcmlnaHQge1xuICBAaW5jbHVkZSBhbmdsZS1lZGdlKCRhbmdsZTogMywgJGFuZ2xlLXBvc2l0aW9uLXk6ICdib3RoJywgJGFuZ2xlLXBvc2l0aW9uLXg6ICdyaWdodCcpO1xufVxuXG4uYW5nbGUtLWJvdGgtbGVmdC1yaWdodCB7XG4gIEBpbmNsdWRlIGFuZ2xlLWVkZ2UoJGFuZ2xlOiAzLCAkYW5nbGUtcG9zaXRpb24teTogJ2JvdGgnLCAkYW5nbGUtcG9zaXRpb24teDogJ2xlZnQnLCAkYW5nbGUtcG9zaXRpb24tYm90dG9tLXg6ICdyaWdodCcpO1xufVxuXG4uYW5nbGUtLWJvdGgtcmlnaHQtbGVmdCB7XG4gIEBpbmNsdWRlIGFuZ2xlLWVkZ2UoJGFuZ2xlOiAzLCAkYW5nbGUtcG9zaXRpb24teTogJ2JvdGgnLCAkYW5nbGUtcG9zaXRpb24teDogJ3JpZ2h0JywgJGFuZ2xlLXBvc2l0aW9uLWJvdHRvbS14OiAnbGVmdCcpO1xufVxuXG5cbiAgLmFuZ2xlX19jb250ZW50IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cblxuLmFuZ2xlLS1jb2xvdXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMztcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwYWRkaW5nOiAxMCUgMDtcbn1cbiIsIi5hbmdsZS0tdG9wLWxlZnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXAtcGF0aDogcG9seWdvbigwIGNhbGMoMCUgKyA3dncpLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCAxMDAlKTtcbn1cblxuQHN1cHBvcnRzIG5vdCAoY2xpcC1wYXRoOiBwb2x5Z29uKDAgY2FsYygwJSArIDd2dyksIDEwMCUgMCwgMTAwJSAxMDAlLCAwIDEwMCUpKSB7XG4gIC5hbmdsZS0tdG9wLWxlZnQ6OmJlZm9yZSwgLmFuZ2xlLS10b3AtbGVmdDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgei1pbmRleDogMTA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgfVxuICAuYW5nbGUtLXRvcC1sZWZ0OjpiZWZvcmUge1xuICAgIHRvcDogMDtcbiAgICBib3JkZXItd2lkdGg6IDh2dyAxMDB2dyAwIDA7XG4gICAgYm9yZGVyLWNvbG9yOiAjZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5hbmdsZS0tdG9wLXJpZ2h0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIGNhbGMoMCUgKyA3dncpLCAxMDAlIDEwMCUsIDAgMTAwJSk7XG59XG5cbkBzdXBwb3J0cyBub3QgKGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgY2FsYygwJSArIDd2dyksIDEwMCUgMTAwJSwgMCAxMDAlKSkge1xuICAuYW5nbGUtLXRvcC1yaWdodDo6YmVmb3JlLCAuYW5nbGUtLXRvcC1yaWdodDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgei1pbmRleDogMTA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgfVxuICAuYW5nbGUtLXRvcC1yaWdodDo6YmVmb3JlIHtcbiAgICB0b3A6IDA7XG4gICAgYm9yZGVyLXdpZHRoOiA4dncgMCAwIDEwMHZ3O1xuICAgIGJvcmRlci1jb2xvcjogI2ZmZiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4uYW5nbGUtLWJvdHRvbS1sZWZ0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCBjYWxjKDEwMCUgLSA3dncpKTtcbn1cblxuQHN1cHBvcnRzIG5vdCAoY2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCAxMDAlIDEwMCUsIDAgY2FsYygxMDAlIC0gN3Z3KSkpIHtcbiAgLmFuZ2xlLS1ib3R0b20tbGVmdDo6YmVmb3JlLCAuYW5nbGUtLWJvdHRvbS1sZWZ0OjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG4gIC5hbmdsZS0tYm90dG9tLWxlZnQ6OmFmdGVyIHtcbiAgICBib3R0b206IDA7XG4gICAgYm9yZGVyLXdpZHRoOiAwIDEwMHZ3IDh2dyAwO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgI2ZmZiB0cmFuc3BhcmVudDtcbiAgfVxufVxuXG4uYW5nbGUtLWJvdHRvbS1yaWdodCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSAwLCAxMDAlIGNhbGMoMTAwJSAtIDd2dyksIDAgMTAwJSk7XG59XG5cbkBzdXBwb3J0cyBub3QgKGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSA3dncpLCAwIDEwMCUpKSB7XG4gIC5hbmdsZS0tYm90dG9tLXJpZ2h0OjpiZWZvcmUsIC5hbmdsZS0tYm90dG9tLXJpZ2h0OjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG4gIC5hbmdsZS0tYm90dG9tLXJpZ2h0OjphZnRlciB7XG4gICAgYm90dG9tOiAwO1xuICAgIGJvcmRlci13aWR0aDogMCAwIDh2dyAxMDB2dztcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLmFuZ2xlLS1ib3RoLWxlZnQtbGVmdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDAgY2FsYygwJSArIDd2dyksIDEwMCUgMCwgMTAwJSAxMDAlLCAwIGNhbGMoMTAwJSAtIDd2dykpO1xufVxuXG5Ac3VwcG9ydHMgbm90IChjbGlwLXBhdGg6IHBvbHlnb24oMCBjYWxjKDAlICsgN3Z3KSwgMTAwJSAwLCAxMDAlIDEwMCUsIDAgY2FsYygxMDAlIC0gN3Z3KSkpIHtcbiAgLmFuZ2xlLS1ib3RoLWxlZnQtbGVmdDo6YmVmb3JlLCAuYW5nbGUtLWJvdGgtbGVmdC1sZWZ0OjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG4gIC5hbmdsZS0tYm90aC1sZWZ0LWxlZnQ6OmJlZm9yZSB7XG4gICAgdG9wOiAwO1xuICAgIGJvcmRlci13aWR0aDogOHZ3IDEwMHZ3IDAgMDtcbiAgICBib3JkZXItY29sb3I6ICNmZmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLmFuZ2xlLS1ib3RoLWxlZnQtbGVmdDo6YWZ0ZXIge1xuICAgIGJvdHRvbTogMDtcbiAgICBib3JkZXItd2lkdGg6IDAgMTAwdncgOHZ3IDA7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZmZmIHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5hbmdsZS0tYm90aC1yaWdodC1yaWdodCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSBjYWxjKDAlICsgN3Z3KSwgMTAwJSBjYWxjKDEwMCUgLSA3dncpLCAwIDEwMCUpO1xufVxuXG5Ac3VwcG9ydHMgbm90IChjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAxMDAlIGNhbGMoMCUgKyA3dncpLCAxMDAlIGNhbGMoMTAwJSAtIDd2dyksIDAgMTAwJSkpIHtcbiAgLmFuZ2xlLS1ib3RoLXJpZ2h0LXJpZ2h0OjpiZWZvcmUsIC5hbmdsZS0tYm90aC1yaWdodC1yaWdodDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgei1pbmRleDogMTA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgfVxuICAuYW5nbGUtLWJvdGgtcmlnaHQtcmlnaHQ6OmJlZm9yZSB7XG4gICAgdG9wOiAwO1xuICAgIGJvcmRlci13aWR0aDogOHZ3IDAgMCAxMDB2dztcbiAgICBib3JkZXItY29sb3I6ICNmZmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG4gIH1cbiAgLmFuZ2xlLS1ib3RoLXJpZ2h0LXJpZ2h0OjphZnRlciB7XG4gICAgYm90dG9tOiAwO1xuICAgIGJvcmRlci13aWR0aDogMCAwIDh2dyAxMDB2dztcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLmFuZ2xlLS1ib3RoLWxlZnQtcmlnaHQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXAtcGF0aDogcG9seWdvbigwIGNhbGMoMCUgKyA3dncpLCAxMDAlIDAsIDEwMCUgY2FsYygxMDAlIC0gN3Z3KSwgMCAxMDAlKTtcbn1cblxuQHN1cHBvcnRzIG5vdCAoY2xpcC1wYXRoOiBwb2x5Z29uKDAgY2FsYygwJSArIDd2dyksIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSA3dncpLCAwIDEwMCUpKSB7XG4gIC5hbmdsZS0tYm90aC1sZWZ0LXJpZ2h0OjpiZWZvcmUsIC5hbmdsZS0tYm90aC1sZWZ0LXJpZ2h0OjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG4gIC5hbmdsZS0tYm90aC1sZWZ0LXJpZ2h0OjpiZWZvcmUge1xuICAgIHRvcDogMDtcbiAgICBib3JkZXItd2lkdGg6IDh2dyAxMDB2dyAwIDA7XG4gICAgYm9yZGVyLWNvbG9yOiAjZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG4gIC5hbmdsZS0tYm90aC1sZWZ0LXJpZ2h0OjphZnRlciB7XG4gICAgYm90dG9tOiAwO1xuICAgIGJvcmRlci13aWR0aDogMCAwIDh2dyAxMDB2dztcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLmFuZ2xlLS1ib3RoLXJpZ2h0LWxlZnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXAtcGF0aDogcG9seWdvbigwIDAsIDEwMCUgY2FsYygwJSArIDd2dyksIDEwMCUgMTAwJSwgMCBjYWxjKDEwMCUgLSA3dncpKTtcbn1cblxuQHN1cHBvcnRzIG5vdCAoY2xpcC1wYXRoOiBwb2x5Z29uKDAgMCwgMTAwJSBjYWxjKDAlICsgN3Z3KSwgMTAwJSAxMDAlLCAwIGNhbGMoMTAwJSAtIDd2dykpKSB7XG4gIC5hbmdsZS0tYm90aC1yaWdodC1sZWZ0OjpiZWZvcmUsIC5hbmdsZS0tYm90aC1yaWdodC1sZWZ0OjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG4gIC5hbmdsZS0tYm90aC1yaWdodC1sZWZ0OjpiZWZvcmUge1xuICAgIHRvcDogMDtcbiAgICBib3JkZXItd2lkdGg6IDh2dyAwIDAgMTAwdnc7XG4gICAgYm9yZGVyLWNvbG9yOiAjZmZmIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG4gIC5hbmdsZS0tYm90aC1yaWdodC1sZWZ0OjphZnRlciB7XG4gICAgYm90dG9tOiAwO1xuICAgIGJvcmRlci13aWR0aDogMCAxMDB2dyA4dncgMDtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnQ7XG4gIH1cbn1cblxuLmFuZ2xlX19jb250ZW50IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5hbmdsZS0tY29sb3VyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTk2RjM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMTAlIDA7XG59XG4iXX0= */
219 |
--------------------------------------------------------------------------------
/assets/styles/angled-edges.scss:
--------------------------------------------------------------------------------
1 |
2 | // $angle: The angle in degrees: 1 - 45
3 | // $angle-position-y: The Y position of the angle: top | bottom | both
4 | // $angle-position-x: The X position of the angle: left | right
5 | // $angle-position-bottom-x: The X position of the bottom angle if using 'both' for $angle-position-y: left | right
6 | // $fallback: Create a fallback for older browsers: true | false
7 | // $fallback-color: Fallback colour for older browsers: Hex color
8 |
9 | @mixin angle-edge($angle, $angle-position-y, $angle-position-x, $angle-position-bottom-x: '', $fallback: true, $fallback-color: #fff) {
10 |
11 | position: relative;
12 | overflow: hidden;
13 |
14 | // Converts degrees to VW, 100vw = 45deg using this technique
15 | @if $angle > 45 {
16 | $angle: 0;
17 | @error 'Invalid angle, it must be between 1-45';
18 | }
19 | @if $angle < 46 {
20 | $angle: convertDegToVW($angle);
21 | }
22 |
23 | @if $angle-position-bottom-x == '' {
24 | $angle-position-bottom-x: $angle-position-x;
25 | }
26 |
27 | $angle-calc-top: calc(0% + #{$angle}vw);
28 | $angle-calc-bottom: calc(100% - #{$angle}vw);
29 |
30 | $clip-path-top: 0 0, 100% 0;
31 | $clip-path-bottom: 100% 100%, 0 100%;
32 |
33 | $border-width-top: '';
34 | $border-width-bottom: '';
35 | $border-color-top: '';
36 | $border-color-bottom: '';
37 |
38 |
39 | @if $angle-position-y == 'top' or $angle-position-y == 'both' {
40 |
41 | @if $angle-position-x == 'left' {
42 | $clip-path-top: 0 $angle-calc-top, 100% 0;
43 |
44 | $border-width-top: #{$angle + 1}vw 100vw 0 0;
45 | }
46 |
47 | @if $angle-position-x == 'right' {
48 | $clip-path-top: 0 0, 100% $angle-calc-top;
49 |
50 | $border-width-top: #{$angle + 1}vw 0 0 100vw;
51 | }
52 |
53 | $border-color-top: $fallback-color transparent transparent transparent;
54 | }
55 |
56 |
57 | @if $angle-position-y == 'bottom' or $angle-position-y == 'both' {
58 |
59 | @if $angle-position-y == 'both' and $angle-position-x != $angle-position-bottom-x {
60 | $angle-position-x: $angle-position-bottom-x;
61 | }
62 |
63 | @if $angle-position-x == 'left' {
64 | $clip-path-bottom: 100% 100%, 0 $angle-calc-bottom;
65 |
66 | $border-width-bottom: 0 100vw #{$angle + 1}vw 0;
67 | }
68 |
69 | @if $angle-position-x == 'right' {
70 | $clip-path-bottom: 100% $angle-calc-bottom, 0 100%;
71 |
72 | $border-width-bottom: 0 0 #{$angle + 1}vw 100vw;
73 | }
74 |
75 | $border-color-bottom: transparent transparent $fallback-color transparent;
76 | }
77 |
78 | $clip-path: polygon($clip-path-top, $clip-path-bottom);
79 | clip-path: $clip-path;
80 |
81 |
82 | // Fallback for clip-path with solid colours
83 | @if $fallback {
84 |
85 | @supports not (clip-path: $clip-path) {
86 |
87 | &::before, &::after {
88 | content: "";
89 | position: absolute;
90 | left: 0;
91 | z-index: 10;
92 | display: block;
93 | border-style: solid;
94 | }
95 |
96 | @if $angle-position-y == 'top' or $angle-position-y == 'both' {
97 | &::before {
98 | top: 0;
99 | border-width: $border-width-top;
100 | border-color: $border-color-top;
101 | }
102 | }
103 |
104 | @if $angle-position-y == 'bottom' or $angle-position-y == 'both' {
105 | &::after {
106 | bottom: 0;
107 | border-width: $border-width-bottom;
108 | border-color: $border-color-bottom;
109 | }
110 | }
111 |
112 | }
113 |
114 | }
115 |
116 | }
117 |
118 | // Converts degrees to VW, 100vw = 45deg using this technique
119 | @function convertDegToVW($angle){
120 | @return round($angle*2.22);
121 | }
122 |
123 |
124 | // Classes
125 | .angle--top-left {
126 | @include angle-edge($angle: 3, $angle-position-y: 'top', $angle-position-x: 'left');
127 | }
128 |
129 | .angle--top-right {
130 | @include angle-edge($angle: 3, $angle-position-y: 'top', $angle-position-x: 'right');
131 | }
132 |
133 | .angle--bottom-left {
134 | @include angle-edge($angle: 3, $angle-position-y: 'bottom', $angle-position-x: 'left');
135 | }
136 |
137 | .angle--bottom-right {
138 | @include angle-edge($angle: 3, $angle-position-y: 'bottom', $angle-position-x: 'right');
139 | }
140 |
141 | .angle--both-left-left {
142 | @include angle-edge($angle: 3, $angle-position-y: 'both', $angle-position-x: 'left');
143 | }
144 |
145 | .angle--both-right-right {
146 | @include angle-edge($angle: 3, $angle-position-y: 'both', $angle-position-x: 'right');
147 | }
148 |
149 | .angle--both-left-right {
150 | @include angle-edge($angle: 3, $angle-position-y: 'both', $angle-position-x: 'left', $angle-position-bottom-x: 'right');
151 | }
152 |
153 | .angle--both-right-left {
154 | @include angle-edge($angle: 3, $angle-position-y: 'both', $angle-position-x: 'right', $angle-position-bottom-x: 'left');
155 | }
156 |
157 |
158 | .angle__content {
159 | display: block;
160 | width: 100%;
161 | height: auto;
162 | }
163 |
164 | .angle--colour {
165 | color: #fff;
166 | background-color: #2196F3;
167 | text-align: center;
168 | padding: 10% 0;
169 | }
170 |
--------------------------------------------------------------------------------
/assets/styles/site.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
2 | /**
3 | * 1. Change the default font family in all browsers (opinionated).
4 | * 2. Prevent adjustments of font size after orientation changes in IE and iOS.
5 | */
6 | html {
7 | font-family: sans-serif;
8 | /* 1 */
9 | -ms-text-size-adjust: 100%;
10 | /* 2 */
11 | -webkit-text-size-adjust: 100%;
12 | /* 2 */
13 | }
14 |
15 | /**
16 | * Remove the margin in all browsers (opinionated).
17 | */
18 | body {
19 | margin: 0;
20 | }
21 |
22 | /* HTML5 display definitions
23 | ========================================================================== */
24 | /**
25 | * Add the correct display in IE 9-.
26 | * 1. Add the correct display in Edge, IE, and Firefox.
27 | * 2. Add the correct display in IE.
28 | */
29 | article,
30 | aside,
31 | details,
32 | figcaption,
33 | figure,
34 | footer,
35 | header,
36 | main,
37 | menu,
38 | nav,
39 | section,
40 | summary {
41 | /* 1 */
42 | display: block;
43 | }
44 |
45 | /**
46 | * Add the correct display in IE 9-.
47 | */
48 | audio,
49 | canvas,
50 | progress,
51 | video {
52 | display: inline-block;
53 | }
54 |
55 | /**
56 | * Add the correct display in iOS 4-7.
57 | */
58 | audio:not([controls]) {
59 | display: none;
60 | height: 0;
61 | }
62 |
63 | /**
64 | * Add the correct vertical alignment in Chrome, Firefox, and Opera.
65 | */
66 | progress {
67 | vertical-align: baseline;
68 | }
69 |
70 | /**
71 | * Add the correct display in IE 10-.
72 | * 1. Add the correct display in IE.
73 | */
74 | template,
75 | [hidden] {
76 | display: none;
77 | }
78 |
79 | /* Links
80 | ========================================================================== */
81 | /**
82 | * 1. Remove the gray background on active links in IE 10.
83 | * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
84 | */
85 | a {
86 | background-color: transparent;
87 | /* 1 */
88 | -webkit-text-decoration-skip: objects;
89 | /* 2 */
90 | }
91 |
92 | /**
93 | * Remove the outline on focused links when they are also active or hovered
94 | * in all browsers (opinionated).
95 | */
96 | a:active,
97 | a:hover {
98 | outline-width: 0;
99 | }
100 |
101 | /* Text-level semantics
102 | ========================================================================== */
103 | /**
104 | * 1. Remove the bottom border in Firefox 39-.
105 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
106 | */
107 | abbr[title] {
108 | border-bottom: none;
109 | /* 1 */
110 | text-decoration: underline;
111 | /* 2 */
112 | text-decoration: underline dotted;
113 | /* 2 */
114 | }
115 |
116 | /**
117 | * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
118 | */
119 | b,
120 | strong {
121 | font-weight: inherit;
122 | }
123 |
124 | /**
125 | * Add the correct font weight in Chrome, Edge, and Safari.
126 | */
127 | b,
128 | strong {
129 | font-weight: bolder;
130 | }
131 |
132 | /**
133 | * Add the correct font style in Android 4.3-.
134 | */
135 | dfn {
136 | font-style: italic;
137 | }
138 |
139 | /**
140 | * Correct the font size and margin on `h1` elements within `section` and
141 | * `article` contexts in Chrome, Firefox, and Safari.
142 | */
143 | h1 {
144 | font-size: 2em;
145 | margin: 0.67em 0;
146 | }
147 |
148 | /**
149 | * Add the correct background and color in IE 9-.
150 | */
151 | mark {
152 | background-color: #ff0;
153 | color: #000;
154 | }
155 |
156 | /**
157 | * Add the correct font size in all browsers.
158 | */
159 | small {
160 | font-size: 80%;
161 | }
162 |
163 | /**
164 | * Prevent `sub` and `sup` elements from affecting the line height in
165 | * all browsers.
166 | */
167 | sub,
168 | sup {
169 | font-size: 75%;
170 | line-height: 0;
171 | position: relative;
172 | vertical-align: baseline;
173 | }
174 |
175 | sub {
176 | bottom: -0.25em;
177 | }
178 |
179 | sup {
180 | top: -0.5em;
181 | }
182 |
183 | /* Embedded content
184 | ========================================================================== */
185 | /**
186 | * Remove the border on images inside links in IE 10-.
187 | */
188 | img {
189 | border-style: none;
190 | }
191 |
192 | /**
193 | * Hide the overflow in IE.
194 | */
195 | svg:not(:root) {
196 | overflow: hidden;
197 | }
198 |
199 | /* Grouping content
200 | ========================================================================== */
201 | /**
202 | * 1. Correct the inheritance and scaling of font size in all browsers.
203 | * 2. Correct the odd `em` font sizing in all browsers.
204 | */
205 | code,
206 | kbd,
207 | pre,
208 | samp {
209 | font-family: monospace, monospace;
210 | /* 1 */
211 | font-size: 1em;
212 | /* 2 */
213 | }
214 |
215 | /**
216 | * Add the correct margin in IE 8.
217 | */
218 | figure {
219 | margin: 1em 40px;
220 | }
221 |
222 | /**
223 | * 1. Add the correct box sizing in Firefox.
224 | * 2. Show the overflow in Edge and IE.
225 | */
226 | hr {
227 | box-sizing: content-box;
228 | /* 1 */
229 | height: 0;
230 | /* 1 */
231 | overflow: visible;
232 | /* 2 */
233 | }
234 |
235 | /* Forms
236 | ========================================================================== */
237 | /**
238 | * 1. Change font properties to `inherit` in all browsers (opinionated).
239 | * 2. Remove the margin in Firefox and Safari.
240 | */
241 | button,
242 | input,
243 | select,
244 | textarea {
245 | font: inherit;
246 | /* 1 */
247 | margin: 0;
248 | /* 2 */
249 | }
250 |
251 | /**
252 | * Restore the font weight unset by the previous rule.
253 | */
254 | optgroup {
255 | font-weight: bold;
256 | }
257 |
258 | /**
259 | * Show the overflow in IE.
260 | * 1. Show the overflow in Edge.
261 | */
262 | button,
263 | input {
264 | /* 1 */
265 | overflow: visible;
266 | }
267 |
268 | /**
269 | * Remove the inheritance of text transform in Edge, Firefox, and IE.
270 | * 1. Remove the inheritance of text transform in Firefox.
271 | */
272 | button,
273 | select {
274 | /* 1 */
275 | text-transform: none;
276 | }
277 |
278 | /**
279 | * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
280 | * controls in Android 4.
281 | * 2. Correct the inability to style clickable types in iOS and Safari.
282 | */
283 | button,
284 | html [type="button"],
285 | [type="reset"],
286 | [type="submit"] {
287 | -webkit-appearance: button;
288 | /* 2 */
289 | }
290 |
291 | /**
292 | * Remove the inner border and padding in Firefox.
293 | */
294 | button::-moz-focus-inner,
295 | [type="button"]::-moz-focus-inner,
296 | [type="reset"]::-moz-focus-inner,
297 | [type="submit"]::-moz-focus-inner {
298 | border-style: none;
299 | padding: 0;
300 | }
301 |
302 | /**
303 | * Restore the focus styles unset by the previous rule.
304 | */
305 | button:-moz-focusring,
306 | [type="button"]:-moz-focusring,
307 | [type="reset"]:-moz-focusring,
308 | [type="submit"]:-moz-focusring {
309 | outline: 1px dotted ButtonText;
310 | }
311 |
312 | /**
313 | * Change the border, margin, and padding in all browsers (opinionated).
314 | */
315 | fieldset {
316 | border: 1px solid #c0c0c0;
317 | margin: 0 2px;
318 | padding: 0.35em 0.625em 0.75em;
319 | }
320 |
321 | /**
322 | * 1. Correct the text wrapping in Edge and IE.
323 | * 2. Correct the color inheritance from `fieldset` elements in IE.
324 | * 3. Remove the padding so developers are not caught out when they zero out
325 | * `fieldset` elements in all browsers.
326 | */
327 | legend {
328 | box-sizing: border-box;
329 | /* 1 */
330 | color: inherit;
331 | /* 2 */
332 | display: table;
333 | /* 1 */
334 | max-width: 100%;
335 | /* 1 */
336 | padding: 0;
337 | /* 3 */
338 | white-space: normal;
339 | /* 1 */
340 | }
341 |
342 | /**
343 | * Remove the default vertical scrollbar in IE.
344 | */
345 | textarea {
346 | overflow: auto;
347 | }
348 |
349 | /**
350 | * 1. Add the correct box sizing in IE 10-.
351 | * 2. Remove the padding in IE 10-.
352 | */
353 | [type="checkbox"],
354 | [type="radio"] {
355 | box-sizing: border-box;
356 | /* 1 */
357 | padding: 0;
358 | /* 2 */
359 | }
360 |
361 | /**
362 | * Correct the cursor style of increment and decrement buttons in Chrome.
363 | */
364 | [type="number"]::-webkit-inner-spin-button,
365 | [type="number"]::-webkit-outer-spin-button {
366 | height: auto;
367 | }
368 |
369 | /**
370 | * 1. Correct the odd appearance in Chrome and Safari.
371 | * 2. Correct the outline style in Safari.
372 | */
373 | [type="search"] {
374 | -webkit-appearance: textfield;
375 | /* 1 */
376 | outline-offset: -2px;
377 | /* 2 */
378 | }
379 |
380 | /**
381 | * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.
382 | */
383 | [type="search"]::-webkit-search-cancel-button,
384 | [type="search"]::-webkit-search-decoration {
385 | -webkit-appearance: none;
386 | }
387 |
388 | /**
389 | * Correct the text style of placeholders in Chrome, Edge, and Safari.
390 | */
391 | ::-webkit-input-placeholder {
392 | color: inherit;
393 | opacity: 0.54;
394 | }
395 |
396 | /**
397 | * 1. Correct the inability to style clickable types in iOS and Safari.
398 | * 2. Change font properties to `inherit` in Safari.
399 | */
400 | ::-webkit-file-upload-button {
401 | -webkit-appearance: button;
402 | /* 1 */
403 | font: inherit;
404 | /* 2 */
405 | }
406 |
407 | *,
408 | *:before,
409 | *:after {
410 | box-sizing: border-box;
411 | }
412 |
413 | html {
414 | font-size: 10px;
415 | }
416 |
417 | body {
418 | padding-top: 90px;
419 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
420 | font-size: 18px;
421 | font-weight: 300;
422 | line-height: 1.4;
423 | color: #333;
424 | background-color: #fff;
425 | }
426 |
427 | a {
428 | color: #1976D2;
429 | text-decoration: none;
430 | transition: color 0.3s;
431 | }
432 |
433 | a:hover, a:focus {
434 | color: #2196F3;
435 | }
436 |
437 | h1, h2, h3, h4, h5, h6 {
438 | font-weight: 300;
439 | }
440 |
441 | h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
442 | font-size: 60%;
443 | }
444 |
445 | h1, h2, h3 {
446 | margin: 20px 0;
447 | }
448 |
449 | h4, h5, h6 {
450 | margin: 10px 0;
451 | }
452 |
453 | h1 {
454 | font-size: 38px;
455 | }
456 |
457 | h2 {
458 | font-size: 34px;
459 | }
460 |
461 | h3 {
462 | font-size: 26px;
463 | }
464 |
465 | h4 {
466 | font-size: 20px;
467 | }
468 |
469 | h5 {
470 | font-size: 16px;
471 | }
472 |
473 | h6 {
474 | font-size: 14px;
475 | }
476 |
477 | p {
478 | margin: 0 0 15px 0;
479 | }
480 |
481 | strong {
482 | font-weight: 400;
483 | }
484 |
485 | .container {
486 | max-width: 1170px;
487 | margin-right: auto;
488 | margin-left: auto;
489 | padding-left: 15px;
490 | padding-right: 15px;
491 | }
492 |
493 | .container:before, .container:after {
494 | content: " ";
495 | display: table;
496 | }
497 |
498 | .container:after {
499 | clear: both;
500 | }
501 |
502 | .header {
503 | position: fixed;
504 | top: 0;
505 | z-index: 100;
506 | width: 100%;
507 | padding: 15px 0;
508 | color: #fff;
509 | background-color: #1976D2;
510 | box-shadow: 0 0 6px 6px rgba(0, 0, 0, 0.1);
511 | }
512 |
513 | .logo-text {
514 | margin: 0;
515 | }
516 |
517 | @media (max-width: 767px) {
518 | .logo-text {
519 | font-size: 25px;
520 | }
521 | }
522 |
523 | @media (min-width: 768px) {
524 | .logo-text {
525 | display: inline-block;
526 | }
527 | }
528 |
529 | .header--links .btn {
530 | margin: 0;
531 | margin-top: 7px;
532 | }
533 |
534 | .header--links .btn:last-child {
535 | margin-left: 7px;
536 | }
537 |
538 | @media (min-width: 768px) {
539 | .header--links {
540 | float: right;
541 | }
542 | }
543 |
544 | .footer {
545 | padding-top: 15px;
546 | padding-bottom: 15px;
547 | font-size: 12px;
548 | text-align: center;
549 | }
550 |
551 | .demo {
552 | margin-top: 20px;
553 | margin-bottom: 40px;
554 | }
555 |
556 | .demo--intro {
557 | border-bottom: 1px solid #ddd;
558 | }
559 |
560 | .btn {
561 | display: inline-block;
562 | text-align: center;
563 | vertical-align: middle;
564 | cursor: pointer;
565 | border: 1px solid #bbb;
566 | padding: 4px 12px 6px 12px;
567 | font-size: 18px;
568 | background-color: #fff;
569 | border-radius: 4px;
570 | transition: background-color .3s, color .3s;
571 | }
572 |
573 | .btn:hover, .btn:active {
574 | background-color: #f3f3f3;
575 | }
576 |
577 | .btn-white {
578 | color: #fff;
579 | border-color: #fff;
580 | background-color: transparent;
581 | }
582 |
583 | .install .btn {
584 | margin-right: 15px;
585 | margin-bottom: 15px;
586 | }
587 |
588 | pre {
589 | display: block;
590 | padding: 10px 15px;
591 | margin: 0 0 20px 0;
592 | overflow: auto;
593 | font-family: 'Cutive Mono', monospace;
594 | font-size: 14px;
595 | word-break: break-all;
596 | word-wrap: break-word;
597 | background-color: #f3f3f3;
598 | border: 1px solid #bbb;
599 | border-radius: 4px;
600 | }
601 |
602 | /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNpdGUvX25vcm1hbGl6ZS5zY3NzIiwic2l0ZS5jc3MiLCJzaXRlL19zaXRlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEVBQTRFO0FBRTVFOzs7R0FHRztBQUVIO0VBQ0Usd0JBQXdCO0VBQUUsT0FBTztFQUNqQywyQkFBMkI7RUFBRSxPQUFPO0VBQ3BDLCtCQUErQjtFQUFFLE9BQU87Q0FDekM7O0FBRUQ7O0dBRUc7QUFFSDtFQUNFLFVBQVU7Q0FDWDs7QUFFRDtnRkFDZ0Y7QUFFaEY7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7Ozs7RUFXVSxPQUFPO0VBQ2YsZUFBZTtDQUNoQjs7QUFFRDs7R0FFRztBQUVIOzs7O0VBSUUsc0JBQXNCO0NBQ3ZCOztBQUVEOztHQUVHO0FBRUg7RUFDRSxjQUFjO0VBQ2QsVUFBVTtDQUNYOztBQUVEOztHQUVHO0FBRUg7RUFDRSx5QkFBeUI7Q0FDMUI7O0FBRUQ7OztHQUdHO0FBRUg7O0VBRUUsY0FBYztDQUNmOztBQUVEO2dGQUNnRjtBQUVoRjs7O0dBR0c7QUFFSDtFQUNFLDhCQUE4QjtFQUFFLE9BQU87RUFDdkMsc0NBQXNDO0VBQUUsT0FBTztDQUNoRDs7QUFFRDs7O0dBR0c7QUFFSDs7RUFFRSxpQkFBaUI7Q0FDbEI7O0FBRUQ7Z0ZBQ2dGO0FBRWhGOzs7R0FHRztBQUVIO0VBQ0Usb0JBQW9CO0VBQUUsT0FBTztFQUM3QiwyQkFBMkI7RUFBRSxPQUFPO0VBQ3BDLGtDQUFrQztFQUFFLE9BQU87Q0FDNUM7O0FBRUQ7O0dBRUc7QUFFSDs7RUFFRSxxQkFBcUI7Q0FDdEI7O0FBRUQ7O0dBRUc7QUFFSDs7RUFFRSxvQkFBb0I7Q0FDckI7O0FBRUQ7O0dBRUc7QUFFSDtFQUNFLG1CQUFtQjtDQUNwQjs7QUFFRDs7O0dBR0c7QUFFSDtFQUNFLGVBQWU7RUFDZixpQkFBaUI7Q0FDbEI7O0FBRUQ7O0dBRUc7QUFFSDtFQUNFLHVCQUF1QjtFQUN2QixZQUFZO0NBQ2I7O0FBRUQ7O0dBRUc7QUFFSDtFQUNFLGVBQWU7Q0FDaEI7O0FBRUQ7OztHQUdHO0FBRUg7O0VBRUUsZUFBZTtFQUNmLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIseUJBQXlCO0NBQzFCOztBQUVEO0VBQ0UsZ0JBQWdCO0NBQ2pCOztBQUVEO0VBQ0UsWUFBWTtDQUNiOztBQUVEO2dGQUNnRjtBQUVoRjs7R0FFRztBQUVIO0VBQ0UsbUJBQW1CO0NBQ3BCOztBQUVEOztHQUVHO0FBRUg7RUFDRSxpQkFBaUI7Q0FDbEI7O0FBRUQ7Z0ZBQ2dGO0FBRWhGOzs7R0FHRztBQUVIOzs7O0VBSUUsa0NBQWtDO0VBQUUsT0FBTztFQUMzQyxlQUFlO0VBQUUsT0FBTztDQUN6Qjs7QUFFRDs7R0FFRztBQUVIO0VBQ0UsaUJBQWlCO0NBQ2xCOztBQUVEOzs7R0FHRztBQUVIO0VBQ0Usd0JBQXdCO0VBQUUsT0FBTztFQUNqQyxVQUFVO0VBQUUsT0FBTztFQUNuQixrQkFBa0I7RUFBRSxPQUFPO0NBQzVCOztBQUVEO2dGQUNnRjtBQUVoRjs7O0dBR0c7QUFFSDs7OztFQUlFLGNBQWM7RUFBRSxPQUFPO0VBQ3ZCLFVBQVU7RUFBRSxPQUFPO0NBQ3BCOztBQUVEOztHQUVHO0FBRUg7RUFDRSxrQkFBa0I7Q0FDbkI7O0FBRUQ7OztHQUdHO0FBRUg7O0VBQ1EsT0FBTztFQUNiLGtCQUFrQjtDQUNuQjs7QUFFRDs7O0dBR0c7QUFFSDs7RUFDUyxPQUFPO0VBQ2QscUJBQXFCO0NBQ3RCOztBQUVEOzs7O0dBSUc7QUFFSDs7OztFQUlFLDJCQUEyQjtFQUFFLE9BQU87Q0FDckM7O0FBRUQ7O0dBRUc7QUFFSDs7OztFQUlFLG1CQUFtQjtFQUNuQixXQUFXO0NBQ1o7O0FBRUQ7O0dBRUc7QUFFSDs7OztFQUlFLCtCQUErQjtDQUNoQzs7QUFFRDs7R0FFRztBQUVIO0VBQ0UsMEJBQTBCO0VBQzFCLGNBQWM7RUFDZCwrQkFBK0I7Q0FDaEM7O0FBRUQ7Ozs7O0dBS0c7QUFFSDtFQUNFLHVCQUF1QjtFQUFFLE9BQU87RUFDaEMsZUFBZTtFQUFFLE9BQU87RUFDeEIsZUFBZTtFQUFFLE9BQU87RUFDeEIsZ0JBQWdCO0VBQUUsT0FBTztFQUN6QixXQUFXO0VBQUUsT0FBTztFQUNwQixvQkFBb0I7RUFBRSxPQUFPO0NBQzlCOztBQUVEOztHQUVHO0FBRUg7RUFDRSxlQUFlO0NBQ2hCOztBQUVEOzs7R0FHRztBQ2JIOztFRGlCRSx1QkFBdUI7RUFBRSxPQUFPO0VBQ2hDLFdBQVc7RUFBRSxPQUFPO0NBQ3JCOztBQUVEOztHQUVHO0FDWkg7O0VEZ0JFLGFBQWE7Q0FDZDs7QUFFRDs7O0dBR0c7QUNiSDtFRGdCRSw4QkFBOEI7RUFBRSxPQUFPO0VBQ3ZDLHFCQUFxQjtFQUFFLE9BQU87Q0FDL0I7O0FBRUQ7O0dBRUc7QUNaSDs7RURnQkUseUJBQXlCO0NBQzFCOztBQUVEOztHQUVHO0FBRUg7RUFDRSxlQUFlO0VBQ2YsY0FBYztDQUNmOztBQUVEOzs7R0FHRztBQUVIO0VBQ0UsMkJBQTJCO0VBQUUsT0FBTztFQUNwQyxjQUFjO0VBQUUsT0FBTztDQUN4Qjs7QUVuWkQ7OztFQUdFLHVCQUF1QjtDQUN4Qjs7QUFFRDtFQUNFLGdCQUFnQjtDQUNqQjs7QUFFRDtFQUNFLGtCQUFrQjtFQUNsQixvRUFBb0U7RUFDcEUsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsWUFBWTtFQUNaLHVCQUF1QjtDQUN4Qjs7QUFFRDtFQUNFLGVBQWU7RUFDZixzQkFBc0I7RUFDdEIsdUJBQXVCO0NBS3hCOztBQVJEO0VBTUksZUFBZTtDQUNoQjs7QUFJSDtFQUNFLGlCQUFpQjtDQUtsQjs7QUFORDtFQUlJLGVBQWU7Q0FDaEI7O0FBRUg7RUFDRSxlQUFlO0NBQ2hCOztBQUNEO0VBQ0UsZUFBZTtDQUNoQjs7QUFFRDtFQUFLLGdCQUFnQjtDQUFJOztBQUN6QjtFQUFLLGdCQUFnQjtDQUFJOztBQUN6QjtFQUFLLGdCQUFnQjtDQUFJOztBQUN6QjtFQUFLLGdCQUFnQjtDQUFJOztBQUN6QjtFQUFLLGdCQUFnQjtDQUFJOztBQUN6QjtFQUFLLGdCQUFnQjtDQUFJOztBQUV6QjtFQUNFLG1CQUFtQjtDQUNwQjs7QUFFRDtFQUNFLGlCQUFpQjtDQUNsQjs7QUFLRDtFQUNFLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixvQkFBb0I7Q0FFckI7O0FBUEQ7RUExRUksYUFBYTtFQUNiLGVBQWU7Q0FDaEI7O0FBd0VIO0VBdEVJLFlBQVk7Q0FDYjs7QUFnRkg7RUFDRSxnQkFBZ0I7RUFDaEIsT0FBTztFQUNQLGFBQWE7RUFDYixZQUFZO0VBQ1osZ0JBQWdCO0VBQ2hCLFlBQVk7RUFDWiwwQkFBMEI7RUFDMUIsMkNBQTRCO0NBQzdCOztBQUVDO0VBQ0UsVUFBVTtDQVFYOztBQU5DO0VBSEY7SUFJSSxnQkFBZ0I7R0FLbkI7Q0QyWkY7O0FDOVpHO0VBTkY7SUFPSSxzQkFBc0I7R0FFekI7Q0RpYUY7O0FDL1pDO0VBR0ksVUFBVTtFQUNWLGdCQUFnQjtDQUtqQjs7QUFUSDtFQU9NLGlCQUFpQjtDQUNsQjs7QUFHSDtFQVhGO0lBWUksYUFBYTtHQUVoQjtDRGdhRjs7QUM5WkQ7RUFDRSxrQkFBa0I7RUFDbEIscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQixtQkFBbUI7Q0FDcEI7O0FBSUQ7RUFDRSxpQkFBaUI7RUFDakIsb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0UsOEJBQThCO0NBQy9COztBQUVEO0VBQ0Usc0JBQXNCO0VBQ3RCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsZ0JBQWdCO0VBQ2hCLHVCQUF1QjtFQUN2QiwyQkFBMkI7RUFDM0IsZ0JBQWdCO0VBQ2hCLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsNENBQTRDO0NBSzdDOztBQWZEO0VBYUksMEJBQTBCO0NBQzNCOztBQUdIO0VBQ0UsWUFBWTtFQUNaLG1CQUFtQjtFQUNuQiw4QkFBOEI7Q0FDL0I7O0FBRUQ7RUFDRSxtQkFBbUI7RUFDbkIsb0JBQW9CO0NBQ3JCOztBQUVEO0VBQ0UsZUFBZTtFQUNmLG1CQUFtQjtFQUNuQixtQkFBbUI7RUFDbkIsZUFBZTtFQUNmLHNDQUFzQztFQUN0QyxnQkFBZ0I7RUFDaEIsc0JBQXNCO0VBQ3RCLHNCQUFzQjtFQUN0QiwwQkFBMEI7RUFDMUIsdUJBQXVCO0VBQ3ZCLG1CQUFtQjtDQUNwQiIsImZpbGUiOiJzaXRlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qISBub3JtYWxpemUuY3NzIHY0LjEuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyoqXG4gKiAxLiBDaGFuZ2UgdGhlIGRlZmF1bHQgZm9udCBmYW1pbHkgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAyLiBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIElFIGFuZCBpT1MuXG4gKi9cblxuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyAvKiAxICovXG4gIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICovXG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG5cbi8qIEhUTUw1IGRpc3BsYXkgZGVmaW5pdGlvbnNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSwgYW5kIEZpcmVmb3guXG4gKiAyLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAqL1xuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLCAvKiAxICovXG5maWdjYXB0aW9uLFxuZmlndXJlLFxuZm9vdGVyLFxuaGVhZGVyLFxubWFpbiwgLyogMiAqL1xubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IHsgLyogMSAqL1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAqL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gaU9TIDQtNy5cbiAqL1xuXG5hdWRpbzpub3QoW2NvbnRyb2xzXSkge1xuICBkaXNwbGF5OiBub25lO1xuICBoZWlnaHQ6IDA7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbiAqL1xuXG5wcm9ncmVzcyB7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMC0uXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAqL1xuXG50ZW1wbGF0ZSwgLyogMSAqL1xuW2hpZGRlbl0ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMaW5rc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBvbiBhY3RpdmUgbGlua3MgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgZ2FwcyBpbiBsaW5rcyB1bmRlcmxpbmUgaW4gaU9TIDgrIGFuZCBTYWZhcmkgOCsuXG4gKi9cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyAvKiAxICovXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXA6IG9iamVjdHM7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG91dGxpbmUgb24gZm9jdXNlZCBsaW5rcyB3aGVuIHRoZXkgYXJlIGFsc28gYWN0aXZlIG9yIGhvdmVyZWRcbiAqIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLlxuICovXG5cbmE6YWN0aXZlLFxuYTpob3ZlciB7XG4gIG91dGxpbmUtd2lkdGg6IDA7XG59XG5cbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBGaXJlZm94IDM5LS5cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lOyAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFByZXZlbnQgdGhlIGR1cGxpY2F0ZSBhcHBsaWNhdGlvbiBvZiBgYm9sZGVyYCBieSB0aGUgbmV4dCBydWxlIGluIFNhZmFyaSA2LlxuICovXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogaW5oZXJpdDtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHN0eWxlIGluIEFuZHJvaWQgNC4zLS5cbiAqL1xuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxuICogYGFydGljbGVgIGNvbnRleHRzIGluIENocm9tZSwgRmlyZWZveCwgYW5kIFNhZmFyaS5cbiAqL1xuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBiYWNrZ3JvdW5kIGFuZCBjb2xvciBpbiBJRSA5LS5cbiAqL1xuXG5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMDtcbiAgY29sb3I6ICMwMDA7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuLyoqXG4gKiBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBlbGVtZW50cyBmcm9tIGFmZmVjdGluZyB0aGUgbGluZSBoZWlnaHQgaW5cbiAqIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtO1xufVxuXG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgYm9yZGVyIG9uIGltYWdlcyBpbnNpZGUgbGlua3MgaW4gSUUgMTAtLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxuLyoqXG4gKiBIaWRlIHRoZSBvdmVyZmxvdyBpbiBJRS5cbiAqL1xuXG5zdmc6bm90KDpyb290KSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIEdyb3VwaW5nIGNvbnRlbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxucHJlLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBtYXJnaW4gaW4gSUUgOC5cbiAqL1xuXG5maWd1cmUge1xuICBtYXJnaW46IDFlbSA0MHB4O1xufVxuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAxICovXG4gIGhlaWdodDogMDsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqL1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqIDIuIFJlbW92ZSB0aGUgbWFyZ2luIGluIEZpcmVmb3ggYW5kIFNhZmFyaS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udDogaW5oZXJpdDsgLyogMSAqL1xuICBtYXJnaW46IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZXN0b3JlIHRoZSBmb250IHdlaWdodCB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAqL1xuXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vKipcbiAqIFNob3cgdGhlIG92ZXJmbG93IGluIElFLlxuICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCB7IC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gKi9cblxuYnV0dG9uLFxuc2VsZWN0IHsgLyogMSAqL1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiAxLiBQcmV2ZW50IGEgV2ViS2l0IGJ1ZyB3aGVyZSAoMikgZGVzdHJveXMgbmF0aXZlIGBhdWRpb2AgYW5kIGB2aWRlb2BcbiAqICAgIGNvbnRyb2xzIGluIEFuZHJvaWQgNC5cbiAqIDIuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuaHRtbCBbdHlwZT1cImJ1dHRvblwiXSwgLyogMSAqL1xuW3R5cGU9XCJyZXNldFwiXSxcblt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAqL1xuXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSB0ZXh0IHdyYXBwaW5nIGluIEVkZ2UgYW5kIElFLlxuICogMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLlxuICogMy4gUmVtb3ZlIHRoZSBwYWRkaW5nIHNvIGRldmVsb3BlcnMgYXJlIG5vdCBjYXVnaHQgb3V0IHdoZW4gdGhleSB6ZXJvIG91dFxuICogICAgYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxubGVnZW5kIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xuICBjb2xvcjogaW5oZXJpdDsgLyogMiAqL1xuICBkaXNwbGF5OiB0YWJsZTsgLyogMSAqL1xuICBtYXgtd2lkdGg6IDEwMCU7IC8qIDEgKi9cbiAgcGFkZGluZzogMDsgLyogMyAqL1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsOyAvKiAxICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRS5cbiAqL1xuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIElFIDEwLS5cbiAqIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC0uXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgYW5kIGNhbmNlbCBidXR0b25zIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFguXG4gKi9cblxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5bdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSB0ZXh0IHN0eWxlIG9mIHBsYWNlaG9sZGVycyBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIG9wYWNpdHk6IDAuNTQ7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xufVxuIiwiLyohIG5vcm1hbGl6ZS5jc3MgdjQuMS4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuLyoqXG4gKiAxLiBDaGFuZ2UgdGhlIGRlZmF1bHQgZm9udCBmYW1pbHkgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAyLiBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIElFIGFuZCBpT1MuXG4gKi9cbmh0bWwge1xuICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgLyogMSAqL1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLyogMiAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLyogSFRNTDUgZGlzcGxheSBkZWZpbml0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSwgYW5kIEZpcmVmb3guXG4gKiAyLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAqL1xuYXJ0aWNsZSxcbmFzaWRlLFxuZGV0YWlscyxcbmZpZ2NhcHRpb24sXG5maWd1cmUsXG5mb290ZXIsXG5oZWFkZXIsXG5tYWluLFxubWVudSxcbm5hdixcbnNlY3Rpb24sXG5zdW1tYXJ5IHtcbiAgLyogMSAqL1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS5cbiAqL1xuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuXG4gKi9cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5wcm9ncmVzcyB7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMC0uXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS5cbiAqL1xudGVtcGxhdGUsXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIExpbmtzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGdyYXkgYmFja2dyb3VuZCBvbiBhY3RpdmUgbGlua3MgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgZ2FwcyBpbiBsaW5rcyB1bmRlcmxpbmUgaW4gaU9TIDgrIGFuZCBTYWZhcmkgOCsuXG4gKi9cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLyogMSAqL1xuICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwOiBvYmplY3RzO1xuICAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBvdXRsaW5lIG9uIGZvY3VzZWQgbGlua3Mgd2hlbiB0aGV5IGFyZSBhbHNvIGFjdGl2ZSBvciBob3ZlcmVkXG4gKiBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZS13aWR0aDogMDtcbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBGaXJlZm94IDM5LS5cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cbmFiYnJbdGl0bGVdIHtcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgLyogMSAqL1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgLyogMiAqL1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG4gIC8qIDIgKi9cbn1cblxuLyoqXG4gKiBQcmV2ZW50IHRoZSBkdXBsaWNhdGUgYXBwbGljYXRpb24gb2YgYGJvbGRlcmAgYnkgdGhlIG5leHQgcnVsZSBpbiBTYWZhcmkgNi5cbiAqL1xuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBpbmhlcml0O1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHN0eWxlIGluIEFuZHJvaWQgNC4zLS5cbiAqL1xuZGZuIHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGJhY2tncm91bmQgYW5kIGNvbG9yIGluIElFIDktLlxuICovXG5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMDtcbiAgY29sb3I6ICMwMDA7XG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cbnN1YixcbnN1cCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbi8qIEVtYmVkZGVkIGNvbnRlbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIFJlbW92ZSB0aGUgYm9yZGVyIG9uIGltYWdlcyBpbnNpZGUgbGlua3MgaW4gSUUgMTAtLlxuICovXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbi8qKlxuICogSGlkZSB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKi9cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLyogR3JvdXBpbmcgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIDIgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgbWFyZ2luIGluIElFIDguXG4gKi9cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMWVtIDQwcHg7XG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICovXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAvKiAxICovXG4gIGhlaWdodDogMDtcbiAgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgLyogMiAqL1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGAgaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cbmJ1dHRvbixcbmlucHV0LFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250OiBpbmhlcml0O1xuICAvKiAxICovXG4gIG1hcmdpbjogMDtcbiAgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvbnQgd2VpZ2h0IHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxuICovXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4vKipcbiAqIFNob3cgdGhlIG92ZXJmbG93IGluIElFLlxuICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cbiAqL1xuYnV0dG9uLFxuaW5wdXQge1xuICAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94LlxuICovXG5idXR0b24sXG5zZWxlY3Qge1xuICAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vKipcbiAqIDEuIFByZXZlbnQgYSBXZWJLaXQgYnVnIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYCBhbmQgYHZpZGVvYFxuICogICAgY29udHJvbHMgaW4gQW5kcm9pZCA0LlxuICogMi4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqL1xuYnV0dG9uLFxuaHRtbCBbdHlwZT1cImJ1dHRvblwiXSxcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICAvKiAyICovXG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cbiAqL1xuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJidXR0b25cIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInJlc2V0XCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJzdWJtaXRcIl06Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qKlxuICogUmVzdG9yZSB0aGUgZm9jdXMgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxuICovXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS5cbiAqL1xuZmllbGRzZXQge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICBtYXJnaW46IDAgMnB4O1xuICBwYWRkaW5nOiAwLjM1ZW0gMC42MjVlbSAwLjc1ZW07XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0O1xuICAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLyogMSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIC8qIDEgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFLlxuICovXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIElFIDEwLS5cbiAqIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC0uXG4gKi9cblt0eXBlPVwiY2hlY2tib3hcIl0sXG5bdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLyogMSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiAyICovXG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSBhbmQgU2FmYXJpLlxuICogMi4gQ29ycmVjdCB0aGUgb3V0bGluZSBzdHlsZSBpbiBTYWZhcmkuXG4gKi9cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG4gIC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgYW5kIGNhbmNlbCBidXR0b25zIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIE9TIFguXG4gKi9cblt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgdGV4dCBzdHlsZSBvZiBwbGFjZWhvbGRlcnMgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgb3BhY2l0eTogMC41NDtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICogMi4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGAgaW4gU2FmYXJpLlxuICovXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG4gIC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDtcbiAgLyogMiAqL1xufVxuXG4qLFxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmctdG9wOiA5MHB4O1xuICBmb250LWZhbWlseTogXCJMYXRvXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuYSB7XG4gIGNvbG9yOiAjMTk3NkQyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRyYW5zaXRpb246IGNvbG9yIDAuM3M7XG59XG5cbmE6aG92ZXIsIGE6Zm9jdXMge1xuICBjb2xvcjogIzIxOTZGMztcbn1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbmgxIHNtYWxsLCBoMiBzbWFsbCwgaDMgc21hbGwsIGg0IHNtYWxsLCBoNSBzbWFsbCwgaDYgc21hbGwge1xuICBmb250LXNpemU6IDYwJTtcbn1cblxuaDEsIGgyLCBoMyB7XG4gIG1hcmdpbjogMjBweCAwO1xufVxuXG5oNCwgaDUsIGg2IHtcbiAgbWFyZ2luOiAxMHB4IDA7XG59XG5cbmgxIHtcbiAgZm9udC1zaXplOiAzOHB4O1xufVxuXG5oMiB7XG4gIGZvbnQtc2l6ZTogMzRweDtcbn1cblxuaDMge1xuICBmb250LXNpemU6IDI2cHg7XG59XG5cbmg0IHtcbiAgZm9udC1zaXplOiAyMHB4O1xufVxuXG5oNSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cblxuaDYge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbnAge1xuICBtYXJnaW46IDAgMCAxNXB4IDA7XG59XG5cbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG5cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDExNzBweDtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4uY29udGFpbmVyOmJlZm9yZSwgLmNvbnRhaW5lcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLmNvbnRhaW5lcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4uaGVhZGVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDEwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDE1cHggMDtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMxOTc2RDI7XG4gIGJveC1zaGFkb3c6IDAgMCA2cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLmxvZ28tdGV4dCB7XG4gIG1hcmdpbjogMDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5sb2dvLXRleHQge1xuICAgIGZvbnQtc2l6ZTogMjVweDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmxvZ28tdGV4dCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG59XG5cbi5oZWFkZXItLWxpbmtzIC5idG4ge1xuICBtYXJnaW46IDA7XG4gIG1hcmdpbi10b3A6IDdweDtcbn1cblxuLmhlYWRlci0tbGlua3MgLmJ0bjpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDdweDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5oZWFkZXItLWxpbmtzIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gIH1cbn1cblxuLmZvb3RlciB7XG4gIHBhZGRpbmctdG9wOiAxNXB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5kZW1vIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbn1cblxuLmRlbW8tLWludHJvIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYmJiO1xuICBwYWRkaW5nOiA0cHggMTJweCA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjNzLCBjb2xvciAuM3M7XG59XG5cbi5idG46aG92ZXIsIC5idG46YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcbn1cblxuLmJ0bi13aGl0ZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uaW5zdGFsbCAuYnRuIHtcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBmb250LWZhbWlseTogJ0N1dGl2ZSBNb25vJywgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYmJiO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4iLCIvLyAtLS0tLSBNaXhpbnMgLS0tLS1cbkBtaXhpbiBjbGVhcmZpeCgpIHtcbiAgJjpiZWZvcmUsXG4gICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICB9XG4gICY6YWZ0ZXIge1xuICAgIGNsZWFyOiBib3RoO1xuICB9XG59XG5cblxuLy8gLS0tLS0gQmFzZSBzdHlsZXMgLS0tLS1cblxuKixcbio6YmVmb3JlLFxuKjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbmJvZHkge1xuICBwYWRkaW5nLXRvcDogOTBweDtcbiAgZm9udC1mYW1pbHk6IFwiTGF0b1wiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbmEge1xuICBjb2xvcjogIzE5NzZEMjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzO1xuXG4gICY6aG92ZXIsICY6Zm9jdXMge1xuICAgIGNvbG9yOiAjMjE5NkYzO1xuICB9XG59XG5cbi8vIFR5cGVcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xuICBmb250LXdlaWdodDogMzAwO1xuXG4gIHNtYWxsIHtcbiAgICBmb250LXNpemU6IDYwJTtcbiAgfVxufVxuaDEsIGgyLCBoMyB7XG4gIG1hcmdpbjogMjBweCAwO1xufVxuaDQsIGg1LCBoNiB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5oMSB7IGZvbnQtc2l6ZTogMzhweDsgfVxuaDIgeyBmb250LXNpemU6IDM0cHg7IH1cbmgzIHsgZm9udC1zaXplOiAyNnB4OyB9XG5oNCB7IGZvbnQtc2l6ZTogMjBweDsgfVxuaDUgeyBmb250LXNpemU6IDE2cHg7IH1cbmg2IHsgZm9udC1zaXplOiAxNHB4OyB9XG5cbnAge1xuICBtYXJnaW46IDAgMCAxNXB4IDA7XG59XG5cbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG5cblxuXG4vLyAtLS0tLSBMYXlvdXQgLS0tLS1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6IDExNzBweDtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuICBAaW5jbHVkZSBjbGVhcmZpeCgpOyAgXG59XG5cblxuLy8gLS0tLS0gSGVhZGVyIGFuZCBmb290ZXIgLS0tLS1cbi5oZWFkZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgei1pbmRleDogMTAwO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMTVweCAwO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE5NzZEMjtcbiAgYm94LXNoYWRvdzogMCAwIDZweCA2cHggcmdiYSgwLDAsMCwwLjEpO1xufVxuXG4gIC5sb2dvLXRleHQge1xuICAgIG1hcmdpbjogMDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICAgZm9udC1zaXplOiAyNXB4O1xuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gIH1cblxuICAuaGVhZGVyLS1saW5rcyB7XG5cbiAgICAuYnRuIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1hcmdpbi10b3A6IDdweDtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDdweDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxuICB9XG5cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTVweDtcbiAgcGFkZGluZy1ib3R0b206IDE1cHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5cbi8vIC0tLS0tIERlbW8gLS0tLS1cbi5kZW1vIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogNDBweDtcbn1cblxuLmRlbW8tLWludHJvIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYmJiO1xuICBwYWRkaW5nOiA0cHggMTJweCA2cHggMTJweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgLjNzLCBjb2xvciAuM3M7XG5cbiAgJjpob3ZlciwgJjphY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7XG4gIH1cbn1cblxuLmJ0bi13aGl0ZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uaW5zdGFsbCAuYnRuIHtcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gIG92ZXJmbG93OiBhdXRvO1xuICBmb250LWZhbWlseTogJ0N1dGl2ZSBNb25vJywgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1xuICBib3JkZXI6IDFweCBzb2xpZCAjYmJiO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4iXX0= */
603 |
--------------------------------------------------------------------------------
/assets/styles/site.scss:
--------------------------------------------------------------------------------
1 | // Demo site styles
2 | @import "site/normalize.scss";
3 | @import "site/site.scss";
4 |
--------------------------------------------------------------------------------
/assets/styles/site/_normalize.scss:
--------------------------------------------------------------------------------
1 | /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
2 |
3 | /**
4 | * 1. Change the default font family in all browsers (opinionated).
5 | * 2. Prevent adjustments of font size after orientation changes in IE and iOS.
6 | */
7 |
8 | html {
9 | font-family: sans-serif; /* 1 */
10 | -ms-text-size-adjust: 100%; /* 2 */
11 | -webkit-text-size-adjust: 100%; /* 2 */
12 | }
13 |
14 | /**
15 | * Remove the margin in all browsers (opinionated).
16 | */
17 |
18 | body {
19 | margin: 0;
20 | }
21 |
22 | /* HTML5 display definitions
23 | ========================================================================== */
24 |
25 | /**
26 | * Add the correct display in IE 9-.
27 | * 1. Add the correct display in Edge, IE, and Firefox.
28 | * 2. Add the correct display in IE.
29 | */
30 |
31 | article,
32 | aside,
33 | details, /* 1 */
34 | figcaption,
35 | figure,
36 | footer,
37 | header,
38 | main, /* 2 */
39 | menu,
40 | nav,
41 | section,
42 | summary { /* 1 */
43 | display: block;
44 | }
45 |
46 | /**
47 | * Add the correct display in IE 9-.
48 | */
49 |
50 | audio,
51 | canvas,
52 | progress,
53 | video {
54 | display: inline-block;
55 | }
56 |
57 | /**
58 | * Add the correct display in iOS 4-7.
59 | */
60 |
61 | audio:not([controls]) {
62 | display: none;
63 | height: 0;
64 | }
65 |
66 | /**
67 | * Add the correct vertical alignment in Chrome, Firefox, and Opera.
68 | */
69 |
70 | progress {
71 | vertical-align: baseline;
72 | }
73 |
74 | /**
75 | * Add the correct display in IE 10-.
76 | * 1. Add the correct display in IE.
77 | */
78 |
79 | template, /* 1 */
80 | [hidden] {
81 | display: none;
82 | }
83 |
84 | /* Links
85 | ========================================================================== */
86 |
87 | /**
88 | * 1. Remove the gray background on active links in IE 10.
89 | * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
90 | */
91 |
92 | a {
93 | background-color: transparent; /* 1 */
94 | -webkit-text-decoration-skip: objects; /* 2 */
95 | }
96 |
97 | /**
98 | * Remove the outline on focused links when they are also active or hovered
99 | * in all browsers (opinionated).
100 | */
101 |
102 | a:active,
103 | a:hover {
104 | outline-width: 0;
105 | }
106 |
107 | /* Text-level semantics
108 | ========================================================================== */
109 |
110 | /**
111 | * 1. Remove the bottom border in Firefox 39-.
112 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
113 | */
114 |
115 | abbr[title] {
116 | border-bottom: none; /* 1 */
117 | text-decoration: underline; /* 2 */
118 | text-decoration: underline dotted; /* 2 */
119 | }
120 |
121 | /**
122 | * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
123 | */
124 |
125 | b,
126 | strong {
127 | font-weight: inherit;
128 | }
129 |
130 | /**
131 | * Add the correct font weight in Chrome, Edge, and Safari.
132 | */
133 |
134 | b,
135 | strong {
136 | font-weight: bolder;
137 | }
138 |
139 | /**
140 | * Add the correct font style in Android 4.3-.
141 | */
142 |
143 | dfn {
144 | font-style: italic;
145 | }
146 |
147 | /**
148 | * Correct the font size and margin on `h1` elements within `section` and
149 | * `article` contexts in Chrome, Firefox, and Safari.
150 | */
151 |
152 | h1 {
153 | font-size: 2em;
154 | margin: 0.67em 0;
155 | }
156 |
157 | /**
158 | * Add the correct background and color in IE 9-.
159 | */
160 |
161 | mark {
162 | background-color: #ff0;
163 | color: #000;
164 | }
165 |
166 | /**
167 | * Add the correct font size in all browsers.
168 | */
169 |
170 | small {
171 | font-size: 80%;
172 | }
173 |
174 | /**
175 | * Prevent `sub` and `sup` elements from affecting the line height in
176 | * all browsers.
177 | */
178 |
179 | sub,
180 | sup {
181 | font-size: 75%;
182 | line-height: 0;
183 | position: relative;
184 | vertical-align: baseline;
185 | }
186 |
187 | sub {
188 | bottom: -0.25em;
189 | }
190 |
191 | sup {
192 | top: -0.5em;
193 | }
194 |
195 | /* Embedded content
196 | ========================================================================== */
197 |
198 | /**
199 | * Remove the border on images inside links in IE 10-.
200 | */
201 |
202 | img {
203 | border-style: none;
204 | }
205 |
206 | /**
207 | * Hide the overflow in IE.
208 | */
209 |
210 | svg:not(:root) {
211 | overflow: hidden;
212 | }
213 |
214 | /* Grouping content
215 | ========================================================================== */
216 |
217 | /**
218 | * 1. Correct the inheritance and scaling of font size in all browsers.
219 | * 2. Correct the odd `em` font sizing in all browsers.
220 | */
221 |
222 | code,
223 | kbd,
224 | pre,
225 | samp {
226 | font-family: monospace, monospace; /* 1 */
227 | font-size: 1em; /* 2 */
228 | }
229 |
230 | /**
231 | * Add the correct margin in IE 8.
232 | */
233 |
234 | figure {
235 | margin: 1em 40px;
236 | }
237 |
238 | /**
239 | * 1. Add the correct box sizing in Firefox.
240 | * 2. Show the overflow in Edge and IE.
241 | */
242 |
243 | hr {
244 | box-sizing: content-box; /* 1 */
245 | height: 0; /* 1 */
246 | overflow: visible; /* 2 */
247 | }
248 |
249 | /* Forms
250 | ========================================================================== */
251 |
252 | /**
253 | * 1. Change font properties to `inherit` in all browsers (opinionated).
254 | * 2. Remove the margin in Firefox and Safari.
255 | */
256 |
257 | button,
258 | input,
259 | select,
260 | textarea {
261 | font: inherit; /* 1 */
262 | margin: 0; /* 2 */
263 | }
264 |
265 | /**
266 | * Restore the font weight unset by the previous rule.
267 | */
268 |
269 | optgroup {
270 | font-weight: bold;
271 | }
272 |
273 | /**
274 | * Show the overflow in IE.
275 | * 1. Show the overflow in Edge.
276 | */
277 |
278 | button,
279 | input { /* 1 */
280 | overflow: visible;
281 | }
282 |
283 | /**
284 | * Remove the inheritance of text transform in Edge, Firefox, and IE.
285 | * 1. Remove the inheritance of text transform in Firefox.
286 | */
287 |
288 | button,
289 | select { /* 1 */
290 | text-transform: none;
291 | }
292 |
293 | /**
294 | * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
295 | * controls in Android 4.
296 | * 2. Correct the inability to style clickable types in iOS and Safari.
297 | */
298 |
299 | button,
300 | html [type="button"], /* 1 */
301 | [type="reset"],
302 | [type="submit"] {
303 | -webkit-appearance: button; /* 2 */
304 | }
305 |
306 | /**
307 | * Remove the inner border and padding in Firefox.
308 | */
309 |
310 | button::-moz-focus-inner,
311 | [type="button"]::-moz-focus-inner,
312 | [type="reset"]::-moz-focus-inner,
313 | [type="submit"]::-moz-focus-inner {
314 | border-style: none;
315 | padding: 0;
316 | }
317 |
318 | /**
319 | * Restore the focus styles unset by the previous rule.
320 | */
321 |
322 | button:-moz-focusring,
323 | [type="button"]:-moz-focusring,
324 | [type="reset"]:-moz-focusring,
325 | [type="submit"]:-moz-focusring {
326 | outline: 1px dotted ButtonText;
327 | }
328 |
329 | /**
330 | * Change the border, margin, and padding in all browsers (opinionated).
331 | */
332 |
333 | fieldset {
334 | border: 1px solid #c0c0c0;
335 | margin: 0 2px;
336 | padding: 0.35em 0.625em 0.75em;
337 | }
338 |
339 | /**
340 | * 1. Correct the text wrapping in Edge and IE.
341 | * 2. Correct the color inheritance from `fieldset` elements in IE.
342 | * 3. Remove the padding so developers are not caught out when they zero out
343 | * `fieldset` elements in all browsers.
344 | */
345 |
346 | legend {
347 | box-sizing: border-box; /* 1 */
348 | color: inherit; /* 2 */
349 | display: table; /* 1 */
350 | max-width: 100%; /* 1 */
351 | padding: 0; /* 3 */
352 | white-space: normal; /* 1 */
353 | }
354 |
355 | /**
356 | * Remove the default vertical scrollbar in IE.
357 | */
358 |
359 | textarea {
360 | overflow: auto;
361 | }
362 |
363 | /**
364 | * 1. Add the correct box sizing in IE 10-.
365 | * 2. Remove the padding in IE 10-.
366 | */
367 |
368 | [type="checkbox"],
369 | [type="radio"] {
370 | box-sizing: border-box; /* 1 */
371 | padding: 0; /* 2 */
372 | }
373 |
374 | /**
375 | * Correct the cursor style of increment and decrement buttons in Chrome.
376 | */
377 |
378 | [type="number"]::-webkit-inner-spin-button,
379 | [type="number"]::-webkit-outer-spin-button {
380 | height: auto;
381 | }
382 |
383 | /**
384 | * 1. Correct the odd appearance in Chrome and Safari.
385 | * 2. Correct the outline style in Safari.
386 | */
387 |
388 | [type="search"] {
389 | -webkit-appearance: textfield; /* 1 */
390 | outline-offset: -2px; /* 2 */
391 | }
392 |
393 | /**
394 | * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.
395 | */
396 |
397 | [type="search"]::-webkit-search-cancel-button,
398 | [type="search"]::-webkit-search-decoration {
399 | -webkit-appearance: none;
400 | }
401 |
402 | /**
403 | * Correct the text style of placeholders in Chrome, Edge, and Safari.
404 | */
405 |
406 | ::-webkit-input-placeholder {
407 | color: inherit;
408 | opacity: 0.54;
409 | }
410 |
411 | /**
412 | * 1. Correct the inability to style clickable types in iOS and Safari.
413 | * 2. Change font properties to `inherit` in Safari.
414 | */
415 |
416 | ::-webkit-file-upload-button {
417 | -webkit-appearance: button; /* 1 */
418 | font: inherit; /* 2 */
419 | }
420 |
--------------------------------------------------------------------------------
/assets/styles/site/_site.scss:
--------------------------------------------------------------------------------
1 | // ----- Mixins -----
2 | @mixin clearfix() {
3 | &:before,
4 | &:after {
5 | content: " ";
6 | display: table;
7 | }
8 | &:after {
9 | clear: both;
10 | }
11 | }
12 |
13 |
14 | // ----- Base styles -----
15 |
16 | *,
17 | *:before,
18 | *:after {
19 | box-sizing: border-box;
20 | }
21 |
22 | html {
23 | font-size: 10px;
24 | }
25 |
26 | body {
27 | padding-top: 90px;
28 | font-family: "Lato", "Helvetica Neue", Helvetica, Arial, sans-serif;
29 | font-size: 18px;
30 | font-weight: 300;
31 | line-height: 1.4;
32 | color: #333;
33 | background-color: #fff;
34 | }
35 |
36 | a {
37 | color: #1976D2;
38 | text-decoration: none;
39 | transition: color 0.3s;
40 |
41 | &:hover, &:focus {
42 | color: #2196F3;
43 | }
44 | }
45 |
46 | // Type
47 | h1, h2, h3, h4, h5, h6 {
48 | font-weight: 300;
49 |
50 | small {
51 | font-size: 60%;
52 | }
53 | }
54 | h1, h2, h3 {
55 | margin: 20px 0;
56 | }
57 | h4, h5, h6 {
58 | margin: 10px 0;
59 | }
60 |
61 | h1 { font-size: 38px; }
62 | h2 { font-size: 34px; }
63 | h3 { font-size: 26px; }
64 | h4 { font-size: 20px; }
65 | h5 { font-size: 16px; }
66 | h6 { font-size: 14px; }
67 |
68 | p {
69 | margin: 0 0 15px 0;
70 | }
71 |
72 | strong {
73 | font-weight: 400;
74 | }
75 |
76 |
77 |
78 | // ----- Layout -----
79 | .container {
80 | max-width: 1170px;
81 | margin-right: auto;
82 | margin-left: auto;
83 | padding-left: 15px;
84 | padding-right: 15px;
85 | @include clearfix();
86 | }
87 |
88 |
89 | // ----- Header and footer -----
90 | .header {
91 | position: fixed;
92 | top: 0;
93 | z-index: 100;
94 | width: 100%;
95 | padding: 15px 0;
96 | color: #fff;
97 | background-color: #1976D2;
98 | box-shadow: 0 0 6px 6px rgba(0,0,0,0.1);
99 | }
100 |
101 | .logo-text {
102 | margin: 0;
103 |
104 | @media (max-width: 767px) {
105 | font-size: 25px;
106 | }
107 | @media (min-width: 768px) {
108 | display: inline-block;
109 | }
110 | }
111 |
112 | .header--links {
113 |
114 | .btn {
115 | margin: 0;
116 | margin-top: 7px;
117 |
118 | &:last-child {
119 | margin-left: 7px;
120 | }
121 | }
122 |
123 | @media (min-width: 768px) {
124 | float: right;
125 | }
126 | }
127 |
128 | .footer {
129 | padding-top: 15px;
130 | padding-bottom: 15px;
131 | font-size: 12px;
132 | text-align: center;
133 | }
134 |
135 |
136 | // ----- Demo -----
137 | .demo {
138 | margin-top: 20px;
139 | margin-bottom: 40px;
140 | }
141 |
142 | .demo--intro {
143 | border-bottom: 1px solid #ddd;
144 | }
145 |
146 | .btn {
147 | display: inline-block;
148 | text-align: center;
149 | vertical-align: middle;
150 | cursor: pointer;
151 | border: 1px solid #bbb;
152 | padding: 4px 12px 6px 12px;
153 | font-size: 18px;
154 | background-color: #fff;
155 | border-radius: 4px;
156 | transition: background-color .3s, color .3s;
157 |
158 | &:hover, &:active {
159 | background-color: #f3f3f3;
160 | }
161 | }
162 |
163 | .btn-white {
164 | color: #fff;
165 | border-color: #fff;
166 | background-color: transparent;
167 | }
168 |
169 | .install .btn {
170 | margin-right: 15px;
171 | margin-bottom: 15px;
172 | }
173 |
174 | pre {
175 | display: block;
176 | padding: 10px 15px;
177 | margin: 0 0 20px 0;
178 | overflow: auto;
179 | font-family: 'Cutive Mono', monospace;
180 | font-size: 14px;
181 | word-break: break-all;
182 | word-wrap: break-word;
183 | background-color: #f3f3f3;
184 | border: 1px solid #bbb;
185 | border-radius: 4px;
186 | }
187 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | const gulp = require('gulp');
2 | const gulpLoadPlugins = require('gulp-load-plugins');
3 | const browserSync = require('browser-sync');
4 |
5 | const $ = gulpLoadPlugins();
6 | const reload = browserSync.reload;
7 |
8 | gulp.task('styles', () => {
9 | return gulp.src('assets/styles/*.scss')
10 | .pipe($.plumber())
11 | .pipe($.sourcemaps.init())
12 | .pipe($.sass.sync({
13 | outputStyle: 'expanded',
14 | precision: 10,
15 | includePaths: ['.']
16 | }).on('error', $.sass.logError))
17 | .pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']}))
18 | .pipe($.sourcemaps.write())
19 | .pipe(gulp.dest('assets/styles'))
20 | .pipe(reload({stream: true}));
21 | });
22 |
23 | gulp.task('serve', ['styles'], () => {
24 | browserSync({
25 | notify: false,
26 | port: 9000,
27 | server: {
28 | baseDir: ['']
29 | }
30 | });
31 |
32 | gulp.watch([
33 | 'assets/*.html',
34 | 'assets/styles/**/*',
35 | 'assets/scripts/**/*'
36 | ]).on('change', reload);
37 |
38 | gulp.watch('assets/styles/**/*.scss', ['styles']);
39 | });
40 |
41 | gulp.task('default', ['serve']);
42 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Angled edges (SASS mixin)
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
27 |
28 |
29 |
Add a consistent angled edge to a full width element.
30 |
This technique uses CSS clip-path to clip the image but has a fallback using pseudo elements for older browsers.
31 | It is only intended for use on full width elements as it uses the vw unit to calulate the angle.
32 |
33 |
34 |
35 |
36 |
Examples
37 |
38 |
Top left
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Bottom left
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
Top and bottom
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
Backgound Colour
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
80 |
81 |
82 |
83 |
Usage
84 |
Once you have downloaded the code, run the commands below to view the demo site.
85 |
86 | $ npm install
87 | $ gulp serve
88 |
89 |
90 |
You can also import angled-edges.scss into your own project directly and use the classes already setup or use the mixin in your own classes.
91 |
92 |
93 |
94 |
95 |
96 |
101 |
102 |
103 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angled-edges",
3 | "description": "Add a consistent angled edge to a full width element.",
4 | "version": "1.0.0",
5 | "main": "assets/styles/angled-edges.scss",
6 | "dependencies": {},
7 | "scripts": {
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/NigelOToole/angled-edges.git"
13 | },
14 | "keywords": [
15 | "sass",
16 | "mixin",
17 | "angled",
18 | "clip-path",
19 | "css"
20 | ],
21 | "author": "Nigel O Toole (http://www.purestructure.com)",
22 | "license": "MIT",
23 | "bugs": {
24 | "url": "https://github.com/NigelOToole/angled-edges/issues"
25 | },
26 | "homepage": "https://github.com/NigelOToole/angled-edges#readme",
27 | "engines": {
28 | "node": ">=4"
29 | },
30 | "devDependencies": {
31 | "browser-sync": "^2.2.1",
32 | "gulp": "^3.9.0",
33 | "gulp-autoprefixer": "^3.0.1",
34 | "gulp-load-plugins": "^0.10.0",
35 | "gulp-plumber": "^1.0.1",
36 | "gulp-sass": "^2.0.0",
37 | "gulp-sourcemaps": "^1.5.0"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------