ghost 4.27.1 → 4.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/content/themes/casper/assets/built/screen.css +1 -1
  2. package/content/themes/casper/assets/built/screen.css.map +1 -1
  3. package/content/themes/casper/assets/css/screen.css +1 -17
  4. package/content/themes/casper/package.json +1 -1
  5. package/content/themes/casper/partials/post-card.hbs +1 -1
  6. package/core/boot.js +3 -5
  7. package/core/built/assets/{ghost-dark-ae67fe157509b6e82c607ba560fc52e9.css → ghost-dark-1594d07a0716e0253a78234c8e42d765.css} +1 -1
  8. package/core/built/assets/{ghost.min-2d534cce15c43c646814b26f4beefb78.js → ghost.min-884660873d56fcc3d2a3b9fe94c9f022.js} +79 -79
  9. package/core/built/assets/{ghost.min-b1e58e098721e467388682a85a7c187d.css → ghost.min-c21fea11c3f431994a8ee7c47a8ed145.css} +1 -1
  10. package/core/built/assets/icons/audio-file.svg +5 -0
  11. package/core/built/assets/icons/file-download.svg +1 -0
  12. package/core/built/assets/icons/file-upload.svg +1 -0
  13. package/core/built/assets/icons/film-camera.svg +4 -0
  14. package/core/built/assets/icons/mute.svg +3 -0
  15. package/core/built/assets/icons/pause.svg +4 -0
  16. package/core/built/assets/icons/play.svg +3 -0
  17. package/core/built/assets/icons/unmute.svg +3 -0
  18. package/core/built/assets/{vendor.min-e433aa7d5620e7837f30e170cd43f84e.js → vendor.min-a2fd1e62ce6da8911fee8e812d8c6ceb.js} +240 -128
  19. package/core/frontend/apps/amp/lib/views/amp.hbs +94 -2
  20. package/core/frontend/services/theme-engine/i18n/i18n.js +11 -12
  21. package/core/frontend/services/theme-engine/i18n/index.js +1 -2
  22. package/core/frontend/services/theme-engine/i18n/theme-i18n.js +5 -4
  23. package/core/frontend/src/cards/css/audio.css +95 -30
  24. package/core/frontend/src/cards/css/before-after.css +47 -0
  25. package/core/frontend/src/cards/css/bookmark.css +6 -5
  26. package/core/frontend/src/cards/css/button.css +8 -7
  27. package/core/frontend/src/cards/css/callout.css +4 -4
  28. package/core/frontend/src/cards/css/file.css +126 -0
  29. package/core/frontend/src/cards/css/nft.css +9 -13
  30. package/core/frontend/src/cards/css/product.css +81 -52
  31. package/core/frontend/src/cards/css/toggle.css +31 -22
  32. package/core/frontend/src/cards/css/video.css +340 -0
  33. package/core/frontend/src/cards/js/audio.js +127 -128
  34. package/core/frontend/src/cards/js/before-after.js +41 -0
  35. package/core/frontend/src/cards/js/gallery.js +10 -8
  36. package/core/frontend/src/cards/js/toggle.js +16 -14
  37. package/core/frontend/src/cards/js/video.js +232 -0
  38. package/core/frontend/web/middleware/error-handler.js +2 -2
  39. package/core/frontend/web/site.js +2 -1
  40. package/core/server/api/canary/oembed.js +1 -2
  41. package/core/server/data/db/state-manager.js +5 -8
  42. package/core/server/lib/image/cached-image-size-from-url.js +3 -4
  43. package/core/server/lib/image/image-utils.js +2 -2
  44. package/core/server/lib/image/index.js +1 -2
  45. package/core/server/run-update-check.js +1 -13
  46. package/core/server/services/email-analytics/index.js +2 -4
  47. package/core/server/services/email-analytics/jobs/fetch-latest.js +2 -21
  48. package/core/server/services/integrations/integrations-service.js +2 -2
  49. package/core/server/services/invites/index.js +0 -2
  50. package/core/server/services/invites/invites.js +3 -3
  51. package/core/server/services/jobs/job-service.js +1 -1
  52. package/core/server/services/mega/post-email-serializer.js +3 -1
  53. package/core/server/services/mega/template.js +15 -11
  54. package/core/server/services/members/api.js +0 -1
  55. package/core/server/services/members/config.js +4 -7
  56. package/core/server/services/members/service.js +1 -4
  57. package/core/server/services/notifications/index.js +0 -2
  58. package/core/server/services/notifications/notifications.js +4 -5
  59. package/core/server/services/stripe/index.js +0 -2
  60. package/core/server/services/twitter-embed.js +2 -1
  61. package/core/server/web/admin/app.js +4 -2
  62. package/core/server/web/admin/views/default-prod.html +4 -4
  63. package/core/server/web/admin/views/default.html +4 -4
  64. package/core/server/web/api/app.js +3 -2
  65. package/core/server/web/api/canary/admin/app.js +4 -2
  66. package/core/server/web/api/canary/content/app.js +4 -2
  67. package/core/server/web/api/v2/admin/app.js +4 -2
  68. package/core/server/web/api/v2/content/app.js +4 -2
  69. package/core/server/web/api/v3/admin/app.js +4 -2
  70. package/core/server/web/api/v3/content/app.js +4 -2
  71. package/core/server/web/members/app.js +6 -4
  72. package/core/server/web/shared/middleware/index.js +0 -4
  73. package/core/shared/labs.js +9 -8
  74. package/package.json +28 -23
  75. package/yarn.lock +2589 -1988
  76. package/core/server/web/shared/middleware/error-handler.js +0 -224
@@ -388,7 +388,7 @@
388
388
  background: rgba(255,255,255,0.6);
389
389
  font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;
390
390
  text-decoration: none;
391
- border-radius: 5px;
391
+ border-radius: 3px;
392
392
  box-shadow: 0 2px 6px -2px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.4);
393
393
  overflow: hidden;
394
394
  }
@@ -478,6 +478,44 @@
478
478
  margin-top: 0.8rem;
479
479
  }
480
480
 
481
+ .kg-product-card-container {
482
+ background: transparent;
483
+ padding: 20px;
484
+ width: 100%;
485
+ border-radius: 5px;
486
+ box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);
487
+ }
488
+
489
+ .kg-product-card-description p {
490
+ margin-top: 1.5em;
491
+ }
492
+
493
+ .kg-product-card-description ul {
494
+ margin-left: 24px;
495
+ }
496
+
497
+ .kg-product-card-title {
498
+ font-size: 1.9rem;
499
+ font-weight: 700;
500
+ }
501
+
502
+ .kg-product-card-rating-star {
503
+ height: 28px;
504
+ width: 20px;
505
+ margin-right: 2px;
506
+ }
507
+
508
+ .kg-product-card-rating-star svg {
509
+ width: 16px;
510
+ height: 16px;
511
+ fill: currentColor;
512
+ opacity: 0.15;
513
+ }
514
+
515
+ .kg-product-card-rating-active.kg-product-card-rating-star svg {
516
+ opacity: 1;
517
+ }
518
+
481
519
  .kg-nft-card-container {
482
520
  position: relative;
483
521
  display: flex;
@@ -494,7 +532,7 @@
494
532
  background: #fff;
495
533
  border-radius: 5px;
496
534
  transition: none;
497
- margin: 0 auto;
535
+ margin: 0 auto;
498
536
  }
499
537
 
500
538
  .kg-nft-metadata {
@@ -636,6 +674,60 @@
636
674
  font-size: 1.25em;
637
675
  }
638
676
 
677
+ .kg-audio-card {
678
+ display: flex;
679
+ width: 100%;
680
+ box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);
681
+ }
682
+
683
+ .kg-audio-thumbnail {
684
+ display: flex;
685
+ justify-content: center;
686
+ align-items: center;
687
+ width: 80px;
688
+ min-width: 80px;
689
+ height: 80px;
690
+ background: transparent;
691
+ object-fit: cover;
692
+ aspect-ratio: 1/1;
693
+ border-radius: 3px 0 0 3px;
694
+ }
695
+
696
+ .kg-audio-thumbnail.placeholder {
697
+ background: var(--ghost-accent-color);
698
+ }
699
+
700
+ .kg-audio-thumbnail.placeholder svg {
701
+ width: 24px;
702
+ height: 24px;
703
+ fill: white;
704
+ }
705
+
706
+ .kg-audio-player-container {
707
+ position: relative;
708
+ display: flex;
709
+ flex-direction: column;
710
+ justify-content: space-between;
711
+ width: 100%;
712
+ --seek-before-width: 0%;
713
+ --volume-before-width: 100%;
714
+ --buffered-width: 0%;
715
+ }
716
+
717
+ .kg-audio-title {
718
+ width: 100%;
719
+ padding: 8px 12px 0;
720
+ border: none;
721
+ font-family: inherit;
722
+ font-size: 1.1em;
723
+ font-weight: 700;
724
+ background: transparent;
725
+ }
726
+
727
+ .kg-audio-player {
728
+ display: none;
729
+ }
730
+
639
731
  .kg-width-full.kg-card-hascaption {
640
732
  display: grid;
641
733
  grid-template-columns: inherit;
@@ -1,4 +1,5 @@
1
1
  const errors = require('@tryghost/errors');
2
+ const logging = require('@tryghost/logging');
2
3
  const fs = require('fs-extra');
3
4
  const path = require('path');
4
5
  const MessageFormat = require('intl-messageformat');
@@ -12,17 +13,15 @@ const get = require('lodash/get');
12
13
 
13
14
  class I18n {
14
15
  /**
15
- * @param {objec} [options]
16
+ * @param {object} [options]
16
17
  * @param {string} basePath - the base path to the translations directory
17
18
  * @param {string} [locale] - a locale string
18
19
  * @param {{dot|fulltext}} [stringMode] - which mode our translation keys use
19
- * @param {{object}} [logging] - logging method
20
20
  */
21
21
  constructor(options = {}) {
22
22
  this._basePath = options.basePath || __dirname;
23
23
  this._locale = options.locale || this.defaultLocale();
24
24
  this._stringMode = options.stringMode || 'dot';
25
- this._logging = options.logging || console;
26
25
 
27
26
  this._strings = null;
28
27
  }
@@ -35,8 +34,8 @@ class I18n {
35
34
  }
36
35
 
37
36
  /**
38
- * Need to call init after this
39
- */
37
+ * Need to call init after this
38
+ */
40
39
  get basePath() {
41
40
  return this._basePath;
42
41
  }
@@ -262,34 +261,34 @@ class I18n {
262
261
  }
263
262
 
264
263
  _handleUninitialisedError(key) {
265
- this._logging.warn(`i18n was used before it was initialised with key ${key}`);
264
+ logging.warn(`i18n was used before it was initialised with key ${key}`);
266
265
  this.init();
267
266
  }
268
267
 
269
268
  _handleFormatError(err) {
270
- this._logging.error(err.message);
269
+ logging.error(err.message);
271
270
  }
272
271
 
273
272
  _handleFallbackToDefault() {
274
- this._logging.warn(`i18n is falling back to ${this.defaultLocale()}.json.`);
273
+ logging.warn(`i18n is falling back to ${this.defaultLocale()}.json.`);
275
274
  }
276
275
 
277
276
  _handleMissingFileError(locale) {
278
- this._logging.warn(`i18n was unable to find ${locale}.json.`);
277
+ logging.warn(`i18n was unable to find ${locale}.json.`);
279
278
  }
280
279
  _handleInvalidFileError(locale, err) {
281
- this._logging.error(new errors.IncorrectUsageError({
280
+ logging.error(new errors.IncorrectUsageError({
282
281
  err,
283
282
  message: `i18n was unable to parse ${locale}.json. Please check that it is valid JSON.`
284
283
  }));
285
284
  }
286
285
 
287
286
  _handleEmptyKeyError() {
288
- this._logging.warn('i18n.t() was called without a key');
287
+ logging.warn('i18n.t() was called without a key');
289
288
  }
290
289
 
291
290
  _handleMissingKeyError(key) {
292
- this._logging.error(new errors.IncorrectUsageError({
291
+ logging.error(new errors.IncorrectUsageError({
293
292
  message: `i18n.t() was called with a key that could not be found: ${key}`
294
293
  }));
295
294
  }
@@ -1,7 +1,6 @@
1
1
  const config = require('../../../../shared/config');
2
- const logging = require('@tryghost/logging');
3
2
 
4
3
  const ThemeI18n = require('./theme-i18n');
5
4
 
6
- module.exports = new ThemeI18n({logging, basePath: config.getContentPath('themes')});
5
+ module.exports = new ThemeI18n({basePath: config.getContentPath('themes')});
7
6
  module.exports.ThemeI18n = ThemeI18n;
@@ -1,4 +1,5 @@
1
1
  const errors = require('@tryghost/errors');
2
+ const logging = require('@tryghost/logging');
2
3
  const I18n = require('./i18n');
3
4
 
4
5
  class ThemeI18n extends I18n {
@@ -39,23 +40,23 @@ class ThemeI18n extends I18n {
39
40
  }
40
41
 
41
42
  _handleFallbackToDefault() {
42
- this._logging.warn(`Theme translations falling back to locales/${this.defaultLocale()}.json.`);
43
+ logging.warn(`Theme translations falling back to locales/${this.defaultLocale()}.json.`);
43
44
  }
44
45
 
45
46
  _handleMissingFileError(locale) {
46
47
  if (locale !== this.defaultLocale()) {
47
- this._logging.warn(`Theme translations file locales/${locale}.json not found.`);
48
+ logging.warn(`Theme translations file locales/${locale}.json not found.`);
48
49
  }
49
50
  }
50
51
  _handleInvalidFileError(locale, err) {
51
- this._logging.error(new errors.IncorrectUsageError({
52
+ logging.error(new errors.IncorrectUsageError({
52
53
  err,
53
54
  message: `Theme translations unable to parse locales/${locale}.json. Please check that it is valid JSON.`
54
55
  }));
55
56
  }
56
57
 
57
58
  _handleEmptyKeyError() {
58
- this._logging.warn('Theme translations {{t}} helper called without a translation key.');
59
+ logging.warn('Theme translations {{t}} helper called without a translation key.');
59
60
  }
60
61
 
61
62
  _handleMissingKeyError() {
@@ -2,18 +2,38 @@
2
2
  display: flex;
3
3
  width: 100%;
4
4
  min-height: 96px;
5
+ border-radius: 3px;
5
6
  box-shadow: inset 0 0 0 1px rgba(124, 139, 154, 0.25);
6
7
  }
7
8
 
9
+ .kg-audio-card+.kg-audio-card {
10
+ margin-top: 1em;
11
+ }
12
+
8
13
  .kg-audio-thumbnail {
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: center;
9
17
  width: 80px;
18
+ min-width: 80px;
10
19
  margin: 8px;
20
+ background: transparent;
11
21
  object-fit: cover;
12
22
  aspect-ratio: 1/1;
13
- border-radius: 3px;
23
+ border-radius: 2px;
14
24
  }
15
25
 
16
- .kg-player-container {
26
+ .kg-audio-thumbnail.placeholder {
27
+ background: var(--ghost-accent-color);
28
+ }
29
+
30
+ .kg-audio-thumbnail.placeholder svg {
31
+ width: 24px;
32
+ height: 24px;
33
+ fill: white;
34
+ }
35
+
36
+ .kg-audio-player-container {
17
37
  position: relative;
18
38
  display: flex;
19
39
  flex-direction: column;
@@ -27,15 +47,16 @@
27
47
  .kg-audio-title {
28
48
  width: 100%;
29
49
  margin: 8px 0 0 0;
30
- padding: 8px 12px 0;
50
+ padding: 8px 12px;
31
51
  border: none;
32
52
  font-family: inherit;
33
- font-size: 1em;
53
+ font-size: 1.15em;
34
54
  font-weight: 700;
55
+ line-height: 1.15em;
35
56
  background: transparent;
36
57
  }
37
58
 
38
- .kg-player {
59
+ .kg-audio-player {
39
60
  display: flex;
40
61
  flex-grow: 1;
41
62
  align-items: center;
@@ -49,14 +70,17 @@
49
70
  font-size: .85em;
50
71
  font-weight: 500;
51
72
  line-height: 1.4em;
73
+ white-space: nowrap;
52
74
  }
53
75
 
54
76
  .kg-audio-time {
77
+ width: 56px;
55
78
  color: #ababab;
56
79
  font-family: inherit;
57
80
  font-size: .85em;
58
81
  font-weight: 500;
59
82
  line-height: 1.4em;
83
+ white-space: nowrap;
60
84
  }
61
85
 
62
86
  .kg-audio-duration {
@@ -68,11 +92,12 @@
68
92
  position: relative;
69
93
  bottom: 1px;
70
94
  padding: 0px 4px 0 0;
95
+ font-size: 0;
71
96
  background: transparent;
72
97
  }
73
98
 
74
99
  .kg-audio-hide {
75
- display: none;
100
+ display: none !important;
76
101
  }
77
102
 
78
103
  .kg-audio-play-icon svg,
@@ -87,8 +112,14 @@
87
112
  margin: 0 4px;
88
113
  }
89
114
 
115
+ @media (max-width: 640px) {
116
+ .kg-audio-seek-slider {
117
+ display: none;
118
+ }
119
+ }
120
+
90
121
  .kg-audio-playback-rate {
91
- width: 37px;
122
+ min-width: 37px;
92
123
  padding: 0 4px;
93
124
  font-family: inherit;
94
125
  font-size: .85em;
@@ -96,16 +127,31 @@
96
127
  line-height: 1.4em;
97
128
  text-align: left;
98
129
  background: transparent;
130
+ white-space: nowrap;
131
+ }
132
+
133
+ @media (max-width: 640px) {
134
+ .kg-audio-playback-rate {
135
+ padding-left: 8px;
136
+ }
99
137
  }
100
138
 
101
139
  .kg-audio-mute-icon,
102
140
  .kg-audio-unmute-icon {
103
141
  position: relative;
104
- bottom: 1px;
142
+ bottom: -1px;
105
143
  padding: 0 4px;
144
+ font-size: 0;
106
145
  background: transparent;
107
146
  }
108
147
 
148
+ @media (max-width: 640px) {
149
+ .kg-audio-mute-icon,
150
+ .kg-audio-unmute-icon {
151
+ margin-left: auto;
152
+ }
153
+ }
154
+
109
155
  .kg-audio-mute-icon svg,
110
156
  .kg-audio-unmute-icon svg {
111
157
  width: 16px;
@@ -117,6 +163,12 @@
117
163
  width: 80px;
118
164
  }
119
165
 
166
+ @media (max-width: 400px) {
167
+ .kg-audio-volume-slider {
168
+ display: none;
169
+ }
170
+ }
171
+
120
172
  .kg-audio-seek-slider::before {
121
173
  content: "";
122
174
  position: absolute;
@@ -142,31 +194,44 @@
142
194
  /* Resetting browser styles
143
195
  /* --------------------------------------------------------------- */
144
196
 
145
- .kg-player-container input[type=range] {
197
+ .kg-audio-player-container input[type=range] {
146
198
  position: relative;
147
199
  -webkit-appearance: none;
148
200
  background: transparent;
149
201
  }
150
202
 
151
- .kg-player-container input[type=range]:focus {
203
+ .kg-audio-player-container input[type=range]:focus {
152
204
  outline: none;
153
205
  }
154
206
 
155
- .kg-player-container input[type=range]::-webkit-slider-thumb {
207
+ .kg-audio-player-container input[type=range]::-webkit-slider-thumb {
156
208
  -webkit-appearance: none;
157
209
  }
158
210
 
159
- .kg-player-container input[type=range]::-ms-track {
211
+ .kg-audio-player-container input[type=range]::-ms-track {
160
212
  cursor: pointer;
161
213
  border-color: transparent;
162
214
  color: transparent;
163
215
  background: transparent;
164
216
  }
165
217
 
218
+ .kg-audio-player-container button {
219
+ display: flex;
220
+ align-items: center;
221
+ border: 0;
222
+ cursor: pointer;
223
+ }
224
+
225
+ .kg-audio-player-container input[type="range"] {
226
+ height: auto;
227
+ padding: 0;
228
+ border: 0;
229
+ }
230
+
166
231
  /* Chrome & Safari styles
167
232
  /* --------------------------------------------------------------- */
168
233
 
169
- .kg-player-container input[type="range"]::-webkit-slider-runnable-track {
234
+ .kg-audio-player-container input[type="range"]::-webkit-slider-runnable-track {
170
235
  width: 100%;
171
236
  height: 4px;
172
237
  cursor: pointer;
@@ -174,11 +239,11 @@
174
239
  border-radius: 2px;
175
240
  }
176
241
 
177
- .kg-player-container input[type="range"]::-webkit-slider-thumb {
242
+ .kg-audio-player-container input[type="range"]::-webkit-slider-thumb {
178
243
  position: relative;
179
244
  box-sizing: content-box;
180
- width: 12px;
181
- height: 12px;
245
+ width: 13px;
246
+ height: 13px;
182
247
  margin: -5px 0 0 0;
183
248
  border: 0;
184
249
  cursor: pointer;
@@ -187,14 +252,14 @@
187
252
  box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
188
253
  }
189
254
 
190
- .kg-player-container input[type="range"]:active::-webkit-slider-thumb {
255
+ .kg-audio-player-container input[type="range"]:active::-webkit-slider-thumb {
191
256
  transform: scale(1.2);
192
257
  }
193
258
 
194
259
  /* Firefox styles
195
260
  /* --------------------------------------------------------------- */
196
261
 
197
- .kg-player-container input[type="range"]::-moz-range-track {
262
+ .kg-audio-player-container input[type="range"]::-moz-range-track {
198
263
  width: 100%;
199
264
  height: 4px;
200
265
  cursor: pointer;
@@ -202,15 +267,15 @@
202
267
  border-radius: 2px;
203
268
  }
204
269
 
205
- .kg-player-container input[type="range"]::-moz-range-progress {
270
+ .kg-audio-player-container input[type="range"]::-moz-range-progress {
206
271
  background: currentColor;
207
272
  border-radius: 2px;
208
273
  }
209
274
 
210
- .kg-player-container input[type="range"]::-moz-range-thumb {
275
+ .kg-audio-player-container input[type="range"]::-moz-range-thumb {
211
276
  box-sizing: content-box;
212
- width: 12px;
213
- height: 12px;
277
+ width: 13px;
278
+ height: 13px;
214
279
  border: 0;
215
280
  cursor: pointer;
216
281
  background: #fff;
@@ -218,14 +283,14 @@
218
283
  box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
219
284
  }
220
285
 
221
- .kg-player-container input[type="range"]:active::-moz-range-thumb {
286
+ .kg-audio-player-container input[type="range"]:active::-moz-range-thumb {
222
287
  transform: scale(1.2);
223
288
  }
224
289
 
225
290
  /* Edge & IE styles
226
291
  /* --------------------------------------------------------------- */
227
292
 
228
- .kg-player-container input[type="range"]::-ms-track {
293
+ .kg-audio-player-container input[type="range"]::-ms-track {
229
294
  width: 100%;
230
295
  height: 3px;
231
296
  border: solid transparent;
@@ -234,18 +299,18 @@
234
299
  background: transparent;
235
300
  }
236
301
 
237
- .kg-player-container input[type="range"]::-ms-fill-lower {
302
+ .kg-audio-player-container input[type="range"]::-ms-fill-lower {
238
303
  background: #fff;
239
304
  }
240
305
 
241
- .kg-player-container input[type="range"]::-ms-fill-upper {
306
+ .kg-audio-player-container input[type="range"]::-ms-fill-upper {
242
307
  background: currentColor;
243
308
  }
244
309
 
245
- .kg-player-container input[type="range"]::-ms-thumb {
310
+ .kg-audio-player-container input[type="range"]::-ms-thumb {
246
311
  box-sizing: content-box;
247
- width: 12px;
248
- height: 12px;
312
+ width: 13px;
313
+ height: 13px;
249
314
  border: 0;
250
315
  cursor: pointer;
251
316
  background: #fff;
@@ -253,6 +318,6 @@
253
318
  box-shadow: 0 0 0 1px rgba(0,0,0,.08), 0 1px 4px rgba(0,0,0,0.24);
254
319
  }
255
320
 
256
- .kg-player-container input[type="range"]:active::-ms-thumb {
321
+ .kg-audio-player-container input[type="range"]:active::-ms-thumb {
257
322
  transform: scale(1.2);
258
323
  }
@@ -0,0 +1,47 @@
1
+ .kg-before-after-card > div {
2
+ position: relative;
3
+ margin: 0 auto;
4
+ }
5
+
6
+ .kg-before-after-card-image-before {
7
+ position: absolute;
8
+ overflow: hidden;
9
+ top: 0;
10
+ left: 0;
11
+ }
12
+
13
+ .kg-before-after-card img {
14
+ max-width: none;
15
+ width: unset;
16
+ }
17
+
18
+ .kg-before-after-card input {
19
+ top:0;
20
+ left: -25px;
21
+ position: absolute;
22
+ -webkit-appearance: none;
23
+ appearance: none;
24
+ width: calc(100% + 50px);
25
+ height: 100%;
26
+ background: rgba(0, 0, 0, 0);
27
+ outline: none;
28
+ margin: 0;
29
+ }
30
+
31
+ .kg-before-after-card input::-webkit-slider-thumb {
32
+ -webkit-appearance: none;
33
+ appearance: none;
34
+ width: 50px;
35
+ height: 50px;
36
+ background: white;
37
+ cursor: pointer;
38
+ border-radius: 25px;
39
+ }
40
+
41
+ .kg-before-after-card input::-moz-range-thumb {
42
+ width: 50px;
43
+ height: 50px;
44
+ background: white;
45
+ cursor: pointer;
46
+ border-radius: 25px;
47
+ }
@@ -4,13 +4,14 @@
4
4
  width: 100%;
5
5
  }
6
6
 
7
- .kg-bookmark-container,
8
- .kg-bookmark-container:hover {
7
+ .kg-bookmark-card a.kg-bookmark-container,
8
+ .kg-bookmark-card a.kg-bookmark-container:hover {
9
9
  display: flex;
10
10
  text-decoration: none;
11
- border-radius: 4px;
12
- box-shadow: inset 0 0 0 1px rgb(124 139 154 / 25%);
11
+ border-radius: 3px;
12
+ border: 1px solid rgb(124 139 154 / 25%);
13
13
  overflow: hidden;
14
+ color: inherit;
14
15
  }
15
16
 
16
17
  .kg-bookmark-content {
@@ -104,5 +105,5 @@
104
105
  position: absolute;
105
106
  top: 0;
106
107
  left: 0;
107
- border-radius: 0 4px 4px 0;
108
+ border-radius: 0 2px 2px 0;
108
109
  }
@@ -10,25 +10,26 @@
10
10
  justify-content: flex-start;
11
11
  }
12
12
 
13
- a.kg-btn {
13
+ .kg-button-card a.kg-btn {
14
14
  display: flex;
15
15
  position: static;
16
16
  align-items: center;
17
- padding: 0 2.0rem;
18
- height: 4.0rem;
19
- line-height: 4.0rem;
20
- font-size: 1.65rem;
17
+ padding: 0 1.2em;
18
+ height: 2.4em;
19
+ line-height: 1em;
20
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
21
+ font-size: 0.95em;
21
22
  font-weight: 600;
22
23
  text-decoration: none;
23
24
  border-radius: 5px;
24
25
  transition: opacity 0.2s ease-in-out;
25
26
  }
26
27
 
27
- a.kg-btn:hover {
28
+ .kg-button-card a.kg-btn:hover {
28
29
  opacity: 0.85;
29
30
  }
30
31
 
31
- a.kg-btn-accent {
32
+ .kg-button-card a.kg-btn-accent {
32
33
  background-color: var(--ghost-accent-color);
33
34
  color: #fff;
34
35
  }
@@ -46,13 +46,13 @@
46
46
  color: #fff;
47
47
  }
48
48
 
49
- .kg-callout-emoji {
49
+ .kg-callout-card div.kg-callout-emoji {
50
50
  padding-right: .8em;
51
- line-height: 1.3em;
52
- font-size: 1.2em;
51
+ line-height: 1.25em;
52
+ font-size: 1.15em;
53
53
  }
54
54
 
55
- .kg-callout-text {
55
+ .kg-callout-card div.kg-callout-text {
56
56
  font-size: .95em;
57
57
  line-height: 1.5em;
58
58
  }