piccle 0.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/NOTES.md +69 -0
  7. data/README.md +175 -0
  8. data/Rakefile +8 -0
  9. data/agpl-3.0.md +660 -0
  10. data/assets/css/default.css +397 -0
  11. data/assets/css/normalize.css +427 -0
  12. data/assets/icons/android-chrome-192x192.png +0 -0
  13. data/assets/icons/android-chrome-512x512.png +0 -0
  14. data/assets/icons/apple-touch-icon.png +0 -0
  15. data/assets/icons/favicon-16x16.png +0 -0
  16. data/assets/icons/favicon-32x32.png +0 -0
  17. data/assets/icons/favicon.ico +0 -0
  18. data/bin/console +14 -0
  19. data/bin/piccle +355 -0
  20. data/bin/setup +8 -0
  21. data/db/migrations/001_create_photos.rb +15 -0
  22. data/db/migrations/002_update_photos.rb +14 -0
  23. data/db/migrations/003_create_keywords_and_join_table.rb +14 -0
  24. data/db/migrations/004_add_focal_length.rb +7 -0
  25. data/db/migrations/005_create_locations.rb +20 -0
  26. data/js-renderer/handlebars.min-v4.7.6.js +29 -0
  27. data/js-renderer/renderer.js +93 -0
  28. data/lib/piccle.rb +52 -0
  29. data/lib/piccle/config.rb +136 -0
  30. data/lib/piccle/database.rb +33 -0
  31. data/lib/piccle/dstk_service.rb +64 -0
  32. data/lib/piccle/extractor.rb +128 -0
  33. data/lib/piccle/js_renderer.rb +37 -0
  34. data/lib/piccle/models/keyword.rb +6 -0
  35. data/lib/piccle/models/location.rb +11 -0
  36. data/lib/piccle/models/photo.rb +211 -0
  37. data/lib/piccle/parser.rb +230 -0
  38. data/lib/piccle/quilt_generator.rb +30 -0
  39. data/lib/piccle/renderer.rb +175 -0
  40. data/lib/piccle/streams.rb +2 -0
  41. data/lib/piccle/streams/base_stream.rb +56 -0
  42. data/lib/piccle/streams/camera_stream.rb +35 -0
  43. data/lib/piccle/streams/date_stream.rb +95 -0
  44. data/lib/piccle/streams/event_stream.rb +73 -0
  45. data/lib/piccle/streams/keyword_stream.rb +24 -0
  46. data/lib/piccle/streams/location_stream.rb +57 -0
  47. data/lib/piccle/template_helpers.rb +79 -0
  48. data/lib/piccle/version.rb +3 -0
  49. data/lib/tasks/development.rake +38 -0
  50. data/piccle.gemspec +43 -0
  51. data/templates/_breadcrumbs.handlebars.slim +16 -0
  52. data/templates/_footer.handlebars.slim +2 -0
  53. data/templates/_header.handlebars.slim +36 -0
  54. data/templates/_navigation.handlebars.slim +16 -0
  55. data/templates/_substream.handlebars.slim +17 -0
  56. data/templates/feed.atom.slim +29 -0
  57. data/templates/index.html.handlebars.slim +36 -0
  58. data/templates/show.html.handlebars.slim +64 -0
  59. metadata +340 -0
@@ -0,0 +1,397 @@
1
+ body {
2
+ color: #212121;
3
+ background-color: #fffdf6;
4
+ font-family: 'Gill Sans', Helvetica, Arial, sans-serif;
5
+ margin: 0 100px;
6
+ -webkit-font-smoothing: antialiased;
7
+ }
8
+
9
+ a {
10
+ color: #7b6240;
11
+ }
12
+
13
+ ul li a {
14
+ transition: opacity ease-in 0.22s;
15
+ color: #444444;
16
+ text-decoration: none;
17
+ }
18
+
19
+ ul:hover a {
20
+ opacity: 0.5;
21
+ }
22
+
23
+ ul:hover a:hover {
24
+ opacity: 1;
25
+ text-decoration: underline;
26
+ }
27
+
28
+
29
+ header, footer {
30
+ max-width: 960px;
31
+ margin-right: auto;
32
+ margin-left: auto;
33
+ text-align: center;
34
+ padding-bottom: 1.5em;
35
+ }
36
+
37
+ header h1 {
38
+ font-family: 'Gill Sans', Optima, sans-serif;
39
+ font-size: 3.1em;
40
+ font-weight: 400;
41
+ text-transform: uppercase;
42
+ letter-spacing: 0.1em;
43
+ }
44
+
45
+ header a {
46
+ text-decoration: none;
47
+ color: #111;
48
+ }
49
+
50
+ header ol {
51
+ list-style-type: none;
52
+ margin-bottom: 0;
53
+ }
54
+
55
+ header ol li {
56
+ display: inline-block;
57
+ margin: inherit 5px;
58
+ text-transform: capitalize;
59
+ }
60
+
61
+ header ol li:after {
62
+ content: ">";
63
+ padding: 0 5px 0 10px;
64
+ }
65
+
66
+ header ol li:last-child:after {
67
+ content: "";
68
+ padding: 0;
69
+ }
70
+
71
+ header ol li a {
72
+ text-decoration: underline;
73
+ }
74
+
75
+ .photos_index main {
76
+ display: flex;
77
+ }
78
+
79
+ nav input, nav label {
80
+ display: none;
81
+ }
82
+
83
+ nav {
84
+ flex: none;
85
+ max-width: 180px;
86
+ margin-right: 30px;
87
+ vertical-align: top;
88
+ }
89
+
90
+ nav h1 {
91
+ font-size: 16px;
92
+ text-transform: uppercase;
93
+ margin-bottom: 8px;
94
+ }
95
+
96
+ nav ul {
97
+ margin-top: 0;
98
+ margin-bottom: 2rem;
99
+ list-style: none;
100
+ padding-left: 20px;
101
+ }
102
+
103
+ nav li {
104
+ margin: 0.95em 0;
105
+ font-size: 0.9em;
106
+ padding-left: 0;
107
+ }
108
+
109
+ nav li a {
110
+ display: block;
111
+ }
112
+
113
+ section h2 {
114
+ font-size: 1em;
115
+ }
116
+
117
+ /* This is both a flexbox item (of the main element) and a Flexbox container itself (for the photos). */
118
+ .photos {
119
+ flex: auto;
120
+ display: grid;
121
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
122
+ grid-gap: 0;
123
+ align-content: start;
124
+ }
125
+
126
+ .photos a img {
127
+ width: 100%;
128
+ height: auto;
129
+ }
130
+
131
+ .event_block {
132
+ max-width: 100%;
133
+ margin: 0;
134
+ vertical-align: middle;
135
+ font-size: 36px;
136
+ font-weight: bold;
137
+ color: #ddd;
138
+ background-color: #222;
139
+ padding: 1rem;
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ overflow: hidden;
144
+ }
145
+
146
+ .event_block a {
147
+ color: #ddd;
148
+ text-decoration: none;
149
+ }
150
+
151
+ .event_block.event_start {
152
+ text-align: right;
153
+ }
154
+
155
+ .event_block.event_end {
156
+ text-align: left;
157
+ }
158
+
159
+ .event_block.event_start:before {
160
+ content: '\27fb';
161
+ padding-right: 1rem;
162
+ }
163
+
164
+ .event_block.event_end:after {
165
+ content: '\27fc';
166
+ padding-left: 1rem;
167
+ }
168
+
169
+ .keywords {
170
+ margin: 72px 72px 18px;
171
+ line-height: 2;
172
+ }
173
+
174
+ .keywords a {
175
+ white-space: nowrap;
176
+ }
177
+
178
+ .keywords a {
179
+ text-decoration: none;
180
+ text-transform: uppercase;
181
+ letter-spacing: 0.1em;
182
+ font-size: 80%;
183
+ color: #7b6240;
184
+ border-radius: 10px;
185
+ border-color: #7b6240;
186
+ border-width: 2px;
187
+ padding: 5px 10px;
188
+ transition: all 0.5s;
189
+ display: inline-block;
190
+ }
191
+
192
+ .keywords a:hover {
193
+ background-color: grey;
194
+ color: white;
195
+ border-radius: 20px;
196
+ }
197
+
198
+ .thumbnail, .stamp {
199
+ line-height: 0;
200
+ vertical-align: bottom;
201
+ }
202
+
203
+ .stamp {
204
+ max-width: 96px;
205
+ max-height: 96px;
206
+ }
207
+
208
+ .stamp.current {
209
+ box-sizing: border-box;
210
+ border: 3px solid #fffdf6;
211
+ opacity: 55%;
212
+ }
213
+
214
+ .navigation_arrow {
215
+ text-decoration: none;
216
+ font-size: 72px;
217
+ padding: 0 15px;
218
+ color: black;
219
+ }
220
+
221
+ .streams {
222
+ border-top: 1px solid #eaeaea;
223
+ }
224
+
225
+ .stream, .stamps {
226
+ display: flex;
227
+ flex-direction: row;
228
+ }
229
+
230
+ .stream {
231
+ justify-content: center;
232
+ padding-top: 1rem;
233
+ padding-bottom: 1rem;
234
+ }
235
+
236
+ .stamps {
237
+ overflow-x: scroll;
238
+ }
239
+
240
+ header {
241
+ border-bottom: 1px solid #eaeaea;
242
+ margin-bottom: 2em;
243
+ padding-top: 1em;
244
+ }
245
+
246
+ footer {
247
+ border-top: 1px solid #eaeaea;
248
+ font-size: 80%;
249
+ color: #444;
250
+ margin-top: 2em;
251
+ padding-top: 2em;
252
+ min-height: 100px;
253
+ font-family: 'Gill Sans', Optima, sans-serif;
254
+ }
255
+
256
+ /* Styles for the photo_show template */
257
+
258
+ body.photo_show {
259
+ margin: 0;
260
+ }
261
+
262
+ .photo_show main h2, .photo_show p.description, .photo_show p.settings, .photo_show p.date, .photo_show ul.location, .photo_show .streams {
263
+ margin-left: 100px;
264
+ margin-right: 100px;
265
+ }
266
+
267
+ .photo_show .streams h2 {
268
+ margin-left: 0;
269
+ margin-right: 0;
270
+ }
271
+
272
+ .photo_show img {
273
+ display: block;
274
+ }
275
+
276
+ ul.location {
277
+ padding-left: 0;
278
+ }
279
+
280
+ ul.location li {
281
+ display: inline-block;
282
+ }
283
+
284
+ ul.location li:after {
285
+ content: ", ";
286
+ }
287
+
288
+ ul.location li:last-of-type:after {
289
+ content: ".";
290
+ }
291
+
292
+ .photo_with_pagination {
293
+ display: flex;
294
+ justify-content: space-between;
295
+ align-items: center;
296
+ }
297
+
298
+ .photo_with_pagination img {
299
+ flex-grow: 2;
300
+ object-fit: contain;
301
+ min-width: 0;
302
+ max-width: 100%;
303
+ }
304
+
305
+ /* --------- Mobile styles ---------- */
306
+ @media(max-width: 688px) {
307
+ body {
308
+ margin: 1rem 0;
309
+ }
310
+
311
+ header {
312
+ margin-bottom: 1rem;
313
+ }
314
+
315
+ header h1 {
316
+ font-size: 2.1em;
317
+ }
318
+
319
+ .photos_index main {
320
+ display: block;
321
+ }
322
+
323
+ nav {
324
+ max-width: initial;
325
+ padding: 0 1rem 1rem;
326
+ margin-bottom: 1rem;
327
+ margin-right: 0;
328
+ border-bottom: 1px solid #eaeaea;
329
+ }
330
+
331
+
332
+ nav section {
333
+ display: none;
334
+ }
335
+
336
+ nav input:checked ~ section {
337
+ display: block;
338
+ }
339
+
340
+ nav label {
341
+ display: block;
342
+ font-size: 110%;
343
+ text-transform: uppercase;
344
+ letter-spacing: 0.09em;
345
+ opacity: 65%;
346
+ margin-bottom: 0.03em;
347
+ }
348
+
349
+ nav label:before {
350
+ content: "\2630 Open ";
351
+ }
352
+
353
+ nav input:checked + label:before {
354
+ content: "\2630 Close ";
355
+ }
356
+
357
+ nav ul {
358
+ display: flex;
359
+ flex-wrap: wrap;
360
+ }
361
+
362
+ nav ul li {
363
+ width: 50%;
364
+ }
365
+
366
+ .photos {
367
+ grid-template-columns: repeat(3, 1fr);
368
+ }
369
+
370
+ .event_block {
371
+ font-size: 18px;
372
+ }
373
+
374
+ .photo_with_pagination .navigation_arrow {
375
+ position: absolute;
376
+ z-index: 1;
377
+ background-color: rgba(0, 0, 0, 0.2);
378
+ color: rgba(255, 255, 255, 0.75);
379
+ border-top-right-radius: 1rem;
380
+ border-bottom-right-radius: 1rem;
381
+ font-weight: lighter;
382
+ }
383
+
384
+ .photo_with_pagination .navigation_arrow:last-child {
385
+ right: 0;
386
+ border-radius: 0;
387
+ border-top-left-radius: 1rem;
388
+ border-bottom-left-radius: 1rem;
389
+ }
390
+
391
+ .photo_show main h2, .photo_show p.description, .photo_show p.settings, .photo_show p.date,
392
+ .photo_show ul.location, .photo_show .keywords, .photo_show .streams {
393
+ margin-left: 1rem;
394
+ margin-right: 1rem;
395
+ }
396
+
397
+ }
@@ -0,0 +1,427 @@
1
+ /*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */
2
+
3
+ /* Document
4
+ ========================================================================== */
5
+
6
+ /**
7
+ * 1. Correct the line height in all browsers.
8
+ * 2. Prevent adjustments of font size after orientation changes in
9
+ * IE on Windows Phone and in iOS.
10
+ */
11
+
12
+ html {
13
+ line-height: 1.15; /* 1 */
14
+ -ms-text-size-adjust: 100%; /* 2 */
15
+ -webkit-text-size-adjust: 100%; /* 2 */
16
+ }
17
+
18
+ /* Sections
19
+ ========================================================================== */
20
+
21
+ /**
22
+ * Add the correct display in IE 9-.
23
+ */
24
+
25
+ article,
26
+ aside,
27
+ footer,
28
+ header,
29
+ nav,
30
+ section {
31
+ display: block;
32
+ }
33
+
34
+ /**
35
+ * Correct the font size and margin on `h1` elements within `section` and
36
+ * `article` contexts in Chrome, Firefox, and Safari.
37
+ */
38
+
39
+ h1 {
40
+ font-size: 2em;
41
+ margin: 0.67em 0;
42
+ }
43
+
44
+ /* Grouping content
45
+ ========================================================================== */
46
+
47
+ /**
48
+ * Add the correct display in IE 9-.
49
+ * 1. Add the correct display in IE.
50
+ */
51
+
52
+ figcaption,
53
+ figure,
54
+ main { /* 1 */
55
+ display: block;
56
+ }
57
+
58
+ /**
59
+ * Add the correct margin in IE 8.
60
+ */
61
+
62
+ figure {
63
+ margin: 1em 40px;
64
+ }
65
+
66
+ /**
67
+ * 1. Add the correct box sizing in Firefox.
68
+ * 2. Show the overflow in Edge and IE.
69
+ */
70
+
71
+ hr {
72
+ box-sizing: content-box; /* 1 */
73
+ height: 0; /* 1 */
74
+ overflow: visible; /* 2 */
75
+ }
76
+
77
+ /**
78
+ * 1. Correct the inheritance and scaling of font size in all browsers.
79
+ * 2. Correct the odd `em` font sizing in all browsers.
80
+ */
81
+
82
+ pre {
83
+ font-family: monospace, monospace; /* 1 */
84
+ font-size: 1em; /* 2 */
85
+ }
86
+
87
+ /* Text-level semantics
88
+ ========================================================================== */
89
+
90
+ /**
91
+ * 1. Remove the gray background on active links in IE 10.
92
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
93
+ */
94
+
95
+ a {
96
+ background-color: transparent; /* 1 */
97
+ -webkit-text-decoration-skip: objects; /* 2 */
98
+ }
99
+
100
+ /**
101
+ * 1. Remove the bottom border in Chrome 57- and Firefox 39-.
102
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
103
+ */
104
+
105
+ abbr[title] {
106
+ border-bottom: none; /* 1 */
107
+ text-decoration: underline; /* 2 */
108
+ text-decoration: underline dotted; /* 2 */
109
+ }
110
+
111
+ /**
112
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
113
+ */
114
+
115
+ b,
116
+ strong {
117
+ font-weight: inherit;
118
+ }
119
+
120
+ /**
121
+ * Add the correct font weight in Chrome, Edge, and Safari.
122
+ */
123
+
124
+ b,
125
+ strong {
126
+ font-weight: bolder;
127
+ }
128
+
129
+ /**
130
+ * 1. Correct the inheritance and scaling of font size in all browsers.
131
+ * 2. Correct the odd `em` font sizing in all browsers.
132
+ */
133
+
134
+ code,
135
+ kbd,
136
+ samp {
137
+ font-family: monospace, monospace; /* 1 */
138
+ font-size: 1em; /* 2 */
139
+ }
140
+
141
+ /**
142
+ * Add the correct font style in Android 4.3-.
143
+ */
144
+
145
+ dfn {
146
+ font-style: italic;
147
+ }
148
+
149
+ /**
150
+ * Add the correct background and color in IE 9-.
151
+ */
152
+
153
+ mark {
154
+ background-color: #ff0;
155
+ color: #000;
156
+ }
157
+
158
+ /**
159
+ * Add the correct font size in all browsers.
160
+ */
161
+
162
+ small {
163
+ font-size: 80%;
164
+ }
165
+
166
+ /**
167
+ * Prevent `sub` and `sup` elements from affecting the line height in
168
+ * all browsers.
169
+ */
170
+
171
+ sub,
172
+ sup {
173
+ font-size: 75%;
174
+ line-height: 0;
175
+ position: relative;
176
+ vertical-align: baseline;
177
+ }
178
+
179
+ sub {
180
+ bottom: -0.25em;
181
+ }
182
+
183
+ sup {
184
+ top: -0.5em;
185
+ }
186
+
187
+ /* Embedded content
188
+ ========================================================================== */
189
+
190
+ /**
191
+ * Add the correct display in IE 9-.
192
+ */
193
+
194
+ audio,
195
+ video {
196
+ display: inline-block;
197
+ }
198
+
199
+ /**
200
+ * Add the correct display in iOS 4-7.
201
+ */
202
+
203
+ audio:not([controls]) {
204
+ display: none;
205
+ height: 0;
206
+ }
207
+
208
+ /**
209
+ * Remove the border on images inside links in IE 10-.
210
+ */
211
+
212
+ img {
213
+ border-style: none;
214
+ }
215
+
216
+ /**
217
+ * Hide the overflow in IE.
218
+ */
219
+
220
+ svg:not(:root) {
221
+ overflow: hidden;
222
+ }
223
+
224
+ /* Forms
225
+ ========================================================================== */
226
+
227
+ /**
228
+ * Remove the margin in Firefox and Safari.
229
+ */
230
+
231
+ button,
232
+ input,
233
+ optgroup,
234
+ select,
235
+ textarea {
236
+ margin: 0;
237
+ }
238
+
239
+ /**
240
+ * Show the overflow in IE.
241
+ * 1. Show the overflow in Edge.
242
+ */
243
+
244
+ button,
245
+ input { /* 1 */
246
+ overflow: visible;
247
+ }
248
+
249
+ /**
250
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
251
+ * 1. Remove the inheritance of text transform in Firefox.
252
+ */
253
+
254
+ button,
255
+ select { /* 1 */
256
+ text-transform: none;
257
+ }
258
+
259
+ /**
260
+ * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
261
+ * controls in Android 4.
262
+ * 2. Correct the inability to style clickable types in iOS and Safari.
263
+ */
264
+
265
+ button,
266
+ html [type="button"], /* 1 */
267
+ [type="reset"],
268
+ [type="submit"] {
269
+ -webkit-appearance: button; /* 2 */
270
+ }
271
+
272
+ /**
273
+ * Remove the inner border and padding in Firefox.
274
+ */
275
+
276
+ button::-moz-focus-inner,
277
+ [type="button"]::-moz-focus-inner,
278
+ [type="reset"]::-moz-focus-inner,
279
+ [type="submit"]::-moz-focus-inner {
280
+ border-style: none;
281
+ padding: 0;
282
+ }
283
+
284
+ /**
285
+ * Restore the focus styles unset by the previous rule.
286
+ */
287
+
288
+ button:-moz-focusring,
289
+ [type="button"]:-moz-focusring,
290
+ [type="reset"]:-moz-focusring,
291
+ [type="submit"]:-moz-focusring {
292
+ outline: 1px dotted ButtonText;
293
+ }
294
+
295
+ /**
296
+ * 1. Correct the text wrapping in Edge and IE.
297
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
298
+ * 3. Remove the padding so developers are not caught out when they zero out
299
+ * `fieldset` elements in all browsers.
300
+ */
301
+
302
+ legend {
303
+ box-sizing: border-box; /* 1 */
304
+ color: inherit; /* 2 */
305
+ display: table; /* 1 */
306
+ max-width: 100%; /* 1 */
307
+ padding: 0; /* 3 */
308
+ white-space: normal; /* 1 */
309
+ }
310
+
311
+ /**
312
+ * 1. Add the correct display in IE 9-.
313
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
314
+ */
315
+
316
+ progress {
317
+ display: inline-block; /* 1 */
318
+ vertical-align: baseline; /* 2 */
319
+ }
320
+
321
+ /**
322
+ * Remove the default vertical scrollbar in IE.
323
+ */
324
+
325
+ textarea {
326
+ overflow: auto;
327
+ }
328
+
329
+ /**
330
+ * 1. Add the correct box sizing in IE 10-.
331
+ * 2. Remove the padding in IE 10-.
332
+ */
333
+
334
+ [type="checkbox"],
335
+ [type="radio"] {
336
+ box-sizing: border-box; /* 1 */
337
+ padding: 0; /* 2 */
338
+ }
339
+
340
+ /**
341
+ * Correct the cursor style of increment and decrement buttons in Chrome.
342
+ */
343
+
344
+ [type="number"]::-webkit-inner-spin-button,
345
+ [type="number"]::-webkit-outer-spin-button {
346
+ height: auto;
347
+ }
348
+
349
+ /**
350
+ * 1. Correct the odd appearance in Chrome and Safari.
351
+ * 2. Correct the outline style in Safari.
352
+ */
353
+
354
+ [type="search"] {
355
+ -webkit-appearance: textfield; /* 1 */
356
+ outline-offset: -2px; /* 2 */
357
+ }
358
+
359
+ /**
360
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
361
+ */
362
+
363
+ [type="search"]::-webkit-search-cancel-button,
364
+ [type="search"]::-webkit-search-decoration {
365
+ -webkit-appearance: none;
366
+ }
367
+
368
+ /**
369
+ * 1. Correct the inability to style clickable types in iOS and Safari.
370
+ * 2. Change font properties to `inherit` in Safari.
371
+ */
372
+
373
+ ::-webkit-file-upload-button {
374
+ -webkit-appearance: button; /* 1 */
375
+ font: inherit; /* 2 */
376
+ }
377
+
378
+ /* Interactive
379
+ ========================================================================== */
380
+
381
+ /*
382
+ * Add the correct display in IE 9-.
383
+ * 1. Add the correct display in Edge, IE, and Firefox.
384
+ */
385
+
386
+ details, /* 1 */
387
+ menu {
388
+ display: block;
389
+ }
390
+
391
+ /*
392
+ * Add the correct display in all browsers.
393
+ */
394
+
395
+ summary {
396
+ display: list-item;
397
+ }
398
+
399
+ /* Scripting
400
+ ========================================================================== */
401
+
402
+ /**
403
+ * Add the correct display in IE 9-.
404
+ */
405
+
406
+ canvas {
407
+ display: inline-block;
408
+ }
409
+
410
+ /**
411
+ * Add the correct display in IE.
412
+ */
413
+
414
+ template {
415
+ display: none;
416
+ }
417
+
418
+ /* Hidden
419
+ ========================================================================== */
420
+
421
+ /**
422
+ * Add the correct display in IE 10-.
423
+ */
424
+
425
+ [hidden] {
426
+ display: none;
427
+ }