ghost 4.20.2 → 4.22.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 (85) hide show
  1. package/.eslintrc.js +1 -1
  2. package/Gruntfile.js +1 -0
  3. package/content/themes/casper/assets/built/screen.css +1 -1
  4. package/content/themes/casper/assets/built/screen.css.map +1 -1
  5. package/content/themes/casper/assets/css/screen.css +263 -50
  6. package/content/themes/casper/default.hbs +12 -3
  7. package/content/themes/casper/index.hbs +25 -23
  8. package/content/themes/casper/package.json +91 -2
  9. package/content/themes/casper/partials/post-card.hbs +1 -1
  10. package/content/themes/casper/post.hbs +18 -14
  11. package/content/themes/casper/yarn.lock +245 -192
  12. package/core/boot.js +5 -0
  13. package/core/bridge.js +14 -0
  14. package/core/built/assets/{chunk.3.777d43e2ce954ba8b2f5.js → chunk.3.1148677ff3b78e5aeaee.js} +60 -60
  15. package/core/built/assets/{ghost-dark-20e2892d4f30d0d1183c9ac725ea37d0.css → ghost-dark-684ad238e1a858c7cb5be6988de7c6f5.css} +1 -1
  16. package/core/built/assets/{ghost.min-57e46fd3b1145ecf2cbd185a13611f3b.css → ghost.min-66e08535f8bb797a8c40e0a2b31f1e9e.css} +1 -1
  17. package/core/built/assets/{ghost.min-07b6a50c54b3e2e190332c28c7255d2f.js → ghost.min-efbfb823467b66f4acc66537d033aa55.js} +1770 -1906
  18. package/core/built/assets/{vendor.min-af502ac4142871500fc424f6a5a254ec.js → vendor.min-7c8fdd90f7ecd2e94328a07ea3b64608.js} +985 -956
  19. package/core/frontend/apps/amp/lib/helpers/amp_content.js +16 -4
  20. package/core/frontend/helpers/asset.js +9 -1
  21. package/core/frontend/helpers/ghost_head.js +13 -1
  22. package/core/frontend/meta/title.js +15 -5
  23. package/core/frontend/services/card-assets/index.js +16 -0
  24. package/core/frontend/services/card-assets/service.js +101 -0
  25. package/core/frontend/services/routing/router-manager.js +5 -3
  26. package/core/frontend/services/theme-engine/config/defaults.json +4 -1
  27. package/core/frontend/services/theme-engine/config/index.js +1 -1
  28. package/core/frontend/src/cards/css/bookmark.css +83 -0
  29. package/core/frontend/src/cards/css/gallery.css +36 -0
  30. package/core/frontend/src/cards/js/gallery.js +8 -0
  31. package/core/frontend/web/middleware/serve-public-file.js +10 -1
  32. package/core/frontend/web/site.js +10 -9
  33. package/core/server/adapters/storage/LocalImagesStorage.js +50 -0
  34. package/core/server/adapters/storage/LocalMediaStorage.js +23 -0
  35. package/core/server/adapters/storage/{LocalFileStorage.js → LocalStorageBase.js} +36 -48
  36. package/core/server/adapters/storage/index.js +1 -1
  37. package/core/server/adapters/storage/utils.js +2 -2
  38. package/core/server/api/canary/index.js +4 -0
  39. package/core/server/api/canary/media.js +22 -0
  40. package/core/server/api/canary/members.js +6 -103
  41. package/core/server/api/canary/membersStripeConnect.js +0 -10
  42. package/core/server/api/canary/redirects.js +1 -6
  43. package/core/server/api/canary/utils/serializers/input/pages.js +8 -0
  44. package/core/server/api/canary/utils/serializers/output/images.js +4 -0
  45. package/core/server/api/canary/utils/serializers/output/index.js +4 -0
  46. package/core/server/api/canary/utils/serializers/output/media.js +28 -0
  47. package/core/server/api/canary/utils/validators/input/index.js +4 -0
  48. package/core/server/api/canary/utils/validators/input/media.js +7 -0
  49. package/core/server/api/v2/redirects.js +1 -6
  50. package/core/server/api/v2/utils/serializers/output/images.js +4 -0
  51. package/core/server/api/v3/members.js +5 -1
  52. package/core/server/api/v3/redirects.js +1 -6
  53. package/core/server/api/v3/utils/serializers/output/images.js +4 -0
  54. package/core/server/data/migrations/utils.js +55 -16
  55. package/core/server/data/migrations/versions/4.22/01-add-is-launch-complete-setting.js +8 -0
  56. package/core/server/data/migrations/versions/4.22/02-update-launch-complete-setting-from-user-data.js +39 -0
  57. package/core/server/data/schema/default-settings.json +8 -0
  58. package/core/server/frontend/ghost.min.css +1 -1
  59. package/core/server/lib/image/blog-icon.js +2 -4
  60. package/core/server/lib/image/image-size.js +1 -1
  61. package/core/server/services/limits.js +3 -6
  62. package/core/server/services/mega/template.js +4 -0
  63. package/core/server/services/members/api.js +1 -1
  64. package/core/server/services/members/emails/signup.js +2 -2
  65. package/core/server/services/members/stripe-connect.js +14 -0
  66. package/core/server/services/offers/service.js +1 -31
  67. package/core/server/services/redirects/api.js +270 -0
  68. package/core/server/services/redirects/index.js +27 -12
  69. package/core/server/services/themes/ThemeStorage.js +5 -5
  70. package/core/server/web/admin/views/default-prod.html +4 -4
  71. package/core/server/web/admin/views/default.html +4 -4
  72. package/core/server/web/api/canary/admin/routes.js +13 -4
  73. package/core/server/web/api/middleware/upload.js +117 -10
  74. package/core/server/web/members/app.js +1 -1
  75. package/core/server/web/shared/middlewares/index.js +0 -4
  76. package/core/shared/config/defaults.json +3 -1
  77. package/core/shared/config/helpers.js +2 -0
  78. package/core/shared/config/overrides.json +8 -0
  79. package/core/shared/labs.js +5 -3
  80. package/package.json +35 -34
  81. package/yarn.lock +997 -1016
  82. package/core/built/assets/img/themes/Editorial-a25a4a34c04dedd858bd5e05ef388b1c.jpg +0 -0
  83. package/core/built/assets/img/themes/Massively-06edf00108429f7fb8e65f190fba34fe.jpg +0 -0
  84. package/core/server/services/redirects/settings.js +0 -234
  85. package/core/server/web/shared/middlewares/custom-redirects.js +0 -128
@@ -161,6 +161,10 @@ production stylesheet in assets/built/screen.css
161
161
  background: var(--ghost-accent-color);
162
162
  }
163
163
 
164
+ .site-header-content.large {
165
+ padding-top: 28vmin;
166
+ padding-bottom: 28vmin;
167
+ }
164
168
 
165
169
 
166
170
  /* 5. Site Navigation
@@ -301,12 +305,12 @@ production stylesheet in assets/built/screen.css
301
305
  a.gh-head-button {
302
306
  display: block;
303
307
  padding: 8px 15px;
304
- color: var(--color-darkgrey);
308
+ color: var(--button-text-color, var(--color-darkgrey));
305
309
  font-weight: 500;
306
310
  letter-spacing: -0.015em;
307
311
  font-size: 1.5rem;
308
312
  line-height: 1em;
309
- background: #fff;
313
+ background: var(--button-bg-color, #fff);
310
314
  border-radius: 30px;
311
315
  }
312
316
 
@@ -422,7 +426,7 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
422
426
  justify-content: space-between;
423
427
  user-select: none;
424
428
  }
425
- .home-template #gh-head .gh-head-brand {
429
+ .home-template #gh-head.has-cover .gh-head-brand {
426
430
  justify-content: flex-end;
427
431
  }
428
432
  #gh-head .gh-head-menu {
@@ -489,7 +493,7 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
489
493
  }
490
494
  }
491
495
 
492
- .home-template .gh-head {
496
+ .home-template .gh-head.has-cover {
493
497
  position: absolute;
494
498
  top: 0;
495
499
  right: 0;
@@ -505,10 +509,10 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
505
509
  background: var(--ghost-accent-color);
506
510
  }
507
511
 
508
- .home-template .gh-head-logo {
512
+ .home-template .gh-head.has-cover .gh-head-logo {
509
513
  display: none;
510
514
  }
511
- .home-template .gh-head-menu {
515
+ .home-template .gh-head.has-cover .gh-head-menu {
512
516
  margin-left: -2.5vmin;
513
517
  }
514
518
 
@@ -524,6 +528,12 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
524
528
  padding: 4vmin 0;
525
529
  }
526
530
 
531
+ .post-feed.list {
532
+ row-gap: 6vmin;
533
+ max-width: 940px;
534
+ margin: 2vmin auto 0;
535
+ }
536
+
527
537
  @media (max-width: 1000px) {
528
538
  .post-feed {
529
539
  grid-template-columns: 1fr 1fr;
@@ -602,6 +612,10 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
602
612
  margin-top: 0;
603
613
  }
604
614
 
615
+ .has-serif-title .post-card-title {
616
+ font-family: var(--font-serif);
617
+ }
618
+
605
619
  .post-card-content {
606
620
  flex-grow: 1;
607
621
  display: flex;
@@ -611,6 +625,11 @@ body:not(.gh-head-open) .gh-burger:hover .gh-burger-inner::after {
611
625
  .post-card-excerpt {
612
626
  max-width: 56em;
613
627
  color: color-mod(var(--color-midgrey) l(-8%));
628
+ font-family: var(--font-serif);
629
+ }
630
+
631
+ .has-sans-body .post-card-excerpt {
632
+ font-family: var(--font-sans-serif);
614
633
  }
615
634
 
616
635
  .post-card-excerpt p {
@@ -741,6 +760,15 @@ make sure this only happens on large viewports / desktop-ish devices.
741
760
  border-top: 0;
742
761
  }
743
762
 
763
+ .post-feed.list .post-card-large {
764
+ grid-template-columns: 3fr 5fr;
765
+ min-height: auto;
766
+ }
767
+
768
+ .post-feed.list .post-card-large.no-image {
769
+ grid-template-columns: 1fr;
770
+ }
771
+
744
772
  .post-card-large:not(.no-image) .post-card-header {
745
773
  margin-top: 0;
746
774
  }
@@ -752,6 +780,18 @@ make sure this only happens on large viewports / desktop-ish devices.
752
780
  min-height: 380px;
753
781
  }
754
782
 
783
+ .post-feed.list .post-card-large .post-card-image-link {
784
+ grid-column: 1 / span 1;
785
+ height: max-content;
786
+ min-height: auto;
787
+ }
788
+
789
+ .post-feed.list .post-card-large .post-card-image-link::after {
790
+ content: "";
791
+ display: block;
792
+ padding-bottom: 60%;
793
+ }
794
+
755
795
  .post-card-large .post-card-image {
756
796
  position: absolute;
757
797
  width: 100%;
@@ -762,13 +802,21 @@ make sure this only happens on large viewports / desktop-ish devices.
762
802
  justify-content: center;
763
803
  }
764
804
 
805
+ .post-feed.list .post-card-large .post-card-content {
806
+ justify-content: flex-start;
807
+ margin-top: -6px;
808
+ }
809
+
765
810
  .post-card-large .post-card-title {
766
811
  margin-top: 0;
767
812
  font-size: 3.2rem;
768
813
  }
769
814
 
815
+ .post-feed.list .post-card-large .post-card-title {
816
+ font-size: 2.4rem;
817
+ }
818
+
770
819
  .post-card-large .post-card-excerpt p {
771
- margin-bottom: 1.5em;
772
820
  font-size: 1.7rem;
773
821
  line-height: 1.55em;
774
822
  -webkit-line-clamp: 8;
@@ -820,6 +868,10 @@ make sure this only happens on large viewports / desktop-ish devices.
820
868
  color: color-mod(var(--color-darkgrey) l(-5%));
821
869
  }
822
870
 
871
+ .has-serif-title .article-title {
872
+ font-family: var(--font-serif);
873
+ }
874
+
823
875
  .article-excerpt {
824
876
  margin: 0 0 1rem;
825
877
  font-size: 2rem;
@@ -833,6 +885,14 @@ make sure this only happens on large viewports / desktop-ish devices.
833
885
  margin: 6vmin 0 0;
834
886
  }
835
887
 
888
+ .image-full .article-image {
889
+ grid-column: full-start / full-end;
890
+ }
891
+
892
+ .image-small .article-image {
893
+ grid-column: main-start / main-end;
894
+ }
895
+
836
896
  .gh-canvas .article-image img {
837
897
  display: block;
838
898
  margin-left: auto;
@@ -908,6 +968,10 @@ headings, text, images and lists. We deal with cards lower down. */
908
968
  color: var(--color-darkgrey);
909
969
  }
910
970
 
971
+ .has-serif-title .gh-content > [id] {
972
+ font-family: var(--font-serif);
973
+ }
974
+
911
975
  /* Add back a top margin to all headings, unless a heading
912
976
  is the very first element in the post content */
913
977
  .gh-content > [id]:not(:first-child) {
@@ -948,6 +1012,14 @@ is the very first element in the post content */
948
1012
  line-height: 1.6em;
949
1013
  }
950
1014
 
1015
+ .has-sans-body .gh-content > blockquote,
1016
+ .has-sans-body .gh-content > ol,
1017
+ .has-sans-body .gh-content > ul,
1018
+ .has-sans-body .gh-content > dl,
1019
+ .has-sans-body .gh-content > p {
1020
+ font-family: var(--font-sans);
1021
+ }
1022
+
951
1023
  .gh-content > ul,
952
1024
  .gh-content > ol,
953
1025
  .gh-content > dl {
@@ -1398,18 +1470,28 @@ Ghost editor. */
1398
1470
 
1399
1471
  .footer-cta {
1400
1472
  position: relative;
1473
+ margin-bottom: -40px;
1401
1474
  padding: 9vmin 4vmin 10vmin;
1402
1475
  color: #fff;
1403
1476
  text-align: center;
1404
1477
  background: var(--color-darkgrey);
1405
1478
  }
1406
1479
 
1480
+ .footer-cta.cta-alt {
1481
+ padding: 2vmin 4vmin 12vmin;
1482
+ background: transparent;
1483
+ }
1484
+
1407
1485
  /* Increases the default h2 size by 15%, for small and large screens */
1408
1486
  .footer-cta h2 {
1409
1487
  margin: 0 0 30px;
1410
1488
  font-size: 3.2rem;
1411
1489
  }
1412
1490
 
1491
+ .footer-cta.cta-alt h2 {
1492
+ color: var(--color-darkgrey);
1493
+ }
1494
+
1413
1495
  @media (max-width: 600px) {
1414
1496
  .footer-cta h2 {
1415
1497
  font-size: 2.65rem;
@@ -1430,9 +1512,13 @@ Ghost editor. */
1430
1512
  border-radius: 8px;
1431
1513
  }
1432
1514
 
1515
+ .footer-cta.cta-alt .footer-cta-button {
1516
+ border: 1px solid var(--color-lightgrey);
1517
+ }
1518
+
1433
1519
  .footer-cta-button span {
1434
1520
  display: inline-block;
1435
- padding: 10px 20px;
1521
+ padding: 10px 15px;
1436
1522
  color: #fff;
1437
1523
  font-weight: 500;
1438
1524
  background: var(--ghost-accent-color);
@@ -1446,7 +1532,7 @@ Ghost editor. */
1446
1532
  .read-more-wrap {
1447
1533
  width: 100%;
1448
1534
  padding: 4vmin;
1449
- margin: 0 auto -40px;
1535
+ margin: 40px auto -40px;
1450
1536
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1451
1537
  background: color-mod(var(--color-darkgrey) l(-5%));
1452
1538
  }
@@ -1846,20 +1932,20 @@ html.dark-mode .gh-content :not(pre) > code {
1846
1932
  color: var(--color-wash);
1847
1933
  }
1848
1934
 
1849
- html.dark-mode .post-full-content a {
1935
+ html.dark-mode .gh-content a {
1850
1936
  color: #fff;
1851
1937
  box-shadow: inset 0 -1px 0 #fff;
1852
1938
  }
1853
1939
 
1854
- html.dark-mode .post-full-content strong {
1940
+ html.dark-mode .gh-content strong {
1855
1941
  color: #fff;
1856
1942
  }
1857
1943
 
1858
- html.dark-mode .post-full-content em {
1944
+ html.dark-mode .gh-content em {
1859
1945
  color: #fff;
1860
1946
  }
1861
1947
 
1862
- html.dark-mode .post-full-content code {
1948
+ html.dark-mode .gh-content code {
1863
1949
  color: #fff;
1864
1950
  background: #000;
1865
1951
  }
@@ -1868,40 +1954,40 @@ html.dark-mode hr {
1868
1954
  border-top-color: color-mod(var(--color-darkmode) l(+8%));
1869
1955
  }
1870
1956
 
1871
- html.dark-mode .post-full-content hr:after {
1957
+ html.dark-mode .gh-content hr:after {
1872
1958
  background: color-mod(var(--color-darkmode) l(+8%));
1873
1959
  box-shadow: var(--color-darkmode) 0 0 0 5px;
1874
1960
  }
1875
1961
 
1876
- html.dark-mode .gh-content figcaption {
1962
+ html.dark-mode figcaption {
1877
1963
  color: rgba(255, 255, 255, 0.6);
1878
1964
  }
1879
1965
 
1880
- html.dark-mode .post-full-content table td:first-child {
1966
+ html.dark-mode .gh-content table td:first-child {
1881
1967
  background-image: linear-gradient(to right, var(--color-darkmode) 50%, color-mod(var(--color-darkmode) a(0%)) 100%);
1882
1968
  }
1883
1969
 
1884
- html.dark-mode .post-full-content table td:last-child {
1970
+ html.dark-mode .gh-content table td:last-child {
1885
1971
  background-image: linear-gradient(to left, var(--color-darkmode) 50%, color-mod(var(--color-darkmode) a(0%)) 100%);
1886
1972
  }
1887
1973
 
1888
- html.dark-mode .post-full-content table th {
1974
+ html.dark-mode .gh-content table th {
1889
1975
  color: rgba(255, 255, 255, 0.85);
1890
1976
  background-color: color-mod(var(--color-darkmode) l(+8%));
1891
1977
  }
1892
1978
 
1893
- html.dark-mode .post-full-content table th,
1894
- html.dark-mode .post-full-content table td {
1979
+ html.dark-mode .gh-content table th,
1980
+ html.dark-mode .gh-content table td {
1895
1981
  border: color-mod(var(--color-darkmode) l(+8%)) 1px solid;
1896
1982
  }
1897
1983
 
1898
- html.dark-mode .post-full-content .kg-bookmark-container,
1899
- html.dark-mode .post-full-content .kg-bookmark-container:hover {
1984
+ html.dark-mode .gh-content .kg-bookmark-container,
1985
+ html.dark-mode .gh-content .kg-bookmark-container:hover {
1900
1986
  color: rgba(255, 255, 255, 0.75);
1901
1987
  box-shadow: 0 0 1px rgba(255,255,255,0.9);
1902
1988
  }
1903
1989
 
1904
- html.dark-mode .post-full-content input {
1990
+ html.dark-mode .gh-content input {
1905
1991
  color: color-mod(var(--color-midgrey) l(-30%));
1906
1992
  }
1907
1993
 
@@ -1922,40 +2008,167 @@ html.dark-mode .site-archive-header .no-image {
1922
2008
  background: var(--color-darkmode);
1923
2009
  }
1924
2010
 
1925
- html.dark-mode .subscribe-form {
1926
- border: none;
1927
- background: linear-gradient(color-mod(var(--color-darkmode) l(-6%)), color-mod(var(--color-darkmode) l(-3%)));
1928
- }
2011
+ @media (prefers-color-scheme: dark) {
2012
+ html.auto-color body {
2013
+ color: rgba(255, 255, 255, 0.75);
2014
+ background: var(--color-darkmode);
2015
+ }
1929
2016
 
1930
- html.dark-mode .subscribe-form-title {
1931
- color: rgba(255, 255, 255, 0.9);
1932
- }
2017
+ html.auto-color img {
2018
+ opacity: 0.9;
2019
+ }
1933
2020
 
1934
- html.dark-mode .subscribe-form p {
1935
- color: rgba(255, 255, 255, 0.7);
1936
- }
2021
+ html.auto-color .post-card,
2022
+ html.auto-color .post-card:hover {
2023
+ border-bottom-color: color-mod(var(--color-darkmode) l(+8%));
2024
+ }
1937
2025
 
1938
- html.dark-mode .subscribe-email {
1939
- border-color: color-mod(var(--color-darkmode) l(+6%));
1940
- color: rgba(255, 255, 255, 0.9);
1941
- background: color-mod(var(--color-darkmode) l(+3%));
1942
- }
2026
+ html.auto-color .post-card-byline-content a {
2027
+ color: rgba(255, 255, 255, 0.75);
2028
+ }
1943
2029
 
1944
- html.dark-mode .subscribe-email:focus {
1945
- border-color: color-mod(var(--color-darkmode) l(+25%));
1946
- }
2030
+ html.auto-color .post-card-byline-content a:hover {
2031
+ color: #fff;
2032
+ }
1947
2033
 
1948
- html.dark-mode .subscribe-form button {
1949
- opacity: 0.9;
1950
- }
2034
+ html.auto-color .post-card-image {
2035
+ background: var(--color-darkmode);
2036
+ }
1951
2037
 
1952
- html.dark-mode .subscribe-form .invalid .message-error,
1953
- html.dark-mode .subscribe-form .error .message-error {
1954
- color: color-mod(var(--color-red) l(+5%) s(-5%));
1955
- }
2038
+ html.auto-color .post-card-title {
2039
+ color: rgba(255, 255, 255, 0.85);
2040
+ }
2041
+
2042
+ html.auto-color .post-card-excerpt {
2043
+ color: color-mod(var(--color-midgrey) l(+10%));
2044
+ }
2045
+
2046
+ html.auto-color .post-full-content {
2047
+ background: var(--color-darkmode);
2048
+ }
2049
+
2050
+ html.auto-color .article-title {
2051
+ color: rgba(255, 255, 255, 0.9);
2052
+ }
2053
+
2054
+ html.auto-color .article-excerpt {
2055
+ color: color-mod(var(--color-midgrey) l(+10%));
2056
+ }
2057
+
2058
+ html.auto-color .post-full-image {
2059
+ background-color: color-mod(var(--color-darkmode) l(+8%));
2060
+ }
2061
+
2062
+ html.auto-color .article-byline {
2063
+ border-top-color: color-mod(var(--color-darkmode) l(+15%));
2064
+ }
2065
+
2066
+ html.auto-color .article-byline-meta h4 a {
2067
+ color: rgba(255, 255, 255, 0.75);
2068
+ }
2069
+
2070
+ html.auto-color .article-byline-meta h4 a:hover {
2071
+ color: #fff;
2072
+ }
2073
+
2074
+ html.auto-color .no-image .author-social-link a {
2075
+ color: rgba(255, 255, 255, 0.75);
2076
+ }
2077
+
2078
+ html.auto-color .gh-content h1,
2079
+ html.auto-color .gh-content h2,
2080
+ html.auto-color .gh-content h3,
2081
+ html.auto-color .gh-content h4,
2082
+ html.auto-color .gh-content h5,
2083
+ html.auto-color .gh-content h6 {
2084
+ color: rgba(255, 255, 255, 0.9);
2085
+ }
2086
+
2087
+ html.auto-color .gh-content pre {
2088
+ background: color-mod(var(--color-darkgrey) l(-8%));
2089
+ }
2090
+
2091
+ html.auto-color .gh-content :not(pre) > code {
2092
+ background: color-mod(var(--color-darkgrey) l(+6%));
2093
+ border-color: color-mod(var(--color-darkmode) l(+8%));
2094
+ color: var(--color-wash);
2095
+ }
2096
+
2097
+ html.auto-color .gh-content a {
2098
+ color: #fff;
2099
+ box-shadow: inset 0 -1px 0 #fff;
2100
+ }
2101
+
2102
+ html.auto-color .gh-content strong {
2103
+ color: #fff;
2104
+ }
1956
2105
 
1957
- html.dark-mode .subscribe-form .success .message-success {
1958
- color: color-mod(var(--color-green) l(+5%) s(-5%));
2106
+ html.auto-color .gh-content em {
2107
+ color: #fff;
2108
+ }
2109
+
2110
+ html.auto-color .gh-content code {
2111
+ color: #fff;
2112
+ background: #000;
2113
+ }
2114
+
2115
+ html.auto-color hr {
2116
+ border-top-color: color-mod(var(--color-darkmode) l(+8%));
2117
+ }
2118
+
2119
+ html.auto-color .gh-content hr:after {
2120
+ background: color-mod(var(--color-darkmode) l(+8%));
2121
+ box-shadow: var(--color-darkmode) 0 0 0 5px;
2122
+ }
2123
+
2124
+ html.auto-color figcaption {
2125
+ color: rgba(255, 255, 255, 0.6);
2126
+ }
2127
+
2128
+ html.auto-color .gh-content table td:first-child {
2129
+ background-image: linear-gradient(to right, var(--color-darkmode) 50%, color-mod(var(--color-darkmode) a(0%)) 100%);
2130
+ }
2131
+
2132
+ html.auto-color .gh-content table td:last-child {
2133
+ background-image: linear-gradient(to left, var(--color-darkmode) 50%, color-mod(var(--color-darkmode) a(0%)) 100%);
2134
+ }
2135
+
2136
+ html.auto-color .gh-content table th {
2137
+ color: rgba(255, 255, 255, 0.85);
2138
+ background-color: color-mod(var(--color-darkmode) l(+8%));
2139
+ }
2140
+
2141
+ html.auto-color .gh-content table th,
2142
+ html.auto-color .gh-content table td {
2143
+ border: color-mod(var(--color-darkmode) l(+8%)) 1px solid;
2144
+ }
2145
+
2146
+ html.auto-color .gh-content .kg-bookmark-container,
2147
+ html.auto-color .gh-content .kg-bookmark-container:hover {
2148
+ color: rgba(255, 255, 255, 0.75);
2149
+ box-shadow: 0 0 1px rgba(255,255,255,0.9);
2150
+ }
2151
+
2152
+ html.auto-color .gh-content input {
2153
+ color: color-mod(var(--color-midgrey) l(-30%));
2154
+ }
2155
+
2156
+ html.auto-color .kg-bookmark-title {
2157
+ color: #fff;
2158
+ }
2159
+
2160
+ html.auto-color .kg-bookmark-description {
2161
+ color: rgba(255, 255, 255, 0.75);
2162
+ }
2163
+
2164
+ html.auto-color .kg-bookmark-metadata {
2165
+ color: rgba(255, 255, 255, 0.75);
2166
+ }
2167
+
2168
+ html.auto-color .site-archive-header .no-image {
2169
+ color: rgba(255, 255, 255, 0.9);
2170
+ background: var(--color-darkmode);
2171
+ }
1959
2172
  }
1960
2173
 
1961
2174
  /*
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html lang="{{@site.locale}}">
2
+ <html lang="{{@site.locale}}"{{#match @custom.color_scheme "Dark"}} class="dark-mode"{{/match}}{{#match @custom.color_scheme "Auto"}} class="auto-color"{{/match}}>
3
3
  <head>
4
4
 
5
5
  {{!-- Basic meta - advanced meta is output with {ghost_head} below --}}
@@ -9,6 +9,15 @@
9
9
  <meta name="HandheldFriendly" content="True" />
10
10
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
11
11
 
12
+ <style>
13
+ :root {
14
+ {{#if @custom.header_button_background}}
15
+ --button-bg-color: {{@custom.header_button_background}};
16
+ {{/if}}
17
+ --button-text-color: {{#match @custom.header_button_text_color "Light"}}#fff{{else}}var(--color-darkgrey){{/match}};
18
+ }
19
+ </style>
20
+
12
21
  {{!-- Theme assets - use the {asset} helper to reference styles & scripts,
13
22
  this will take care of caching and cache-busting automatically --}}
14
23
  <link rel="stylesheet" type="text/css" href="{{asset "built/screen.css"}}" />
@@ -18,10 +27,10 @@
18
27
  {{ghost_head}}
19
28
 
20
29
  </head>
21
- <body class="{{body_class}}">
30
+ <body class="{{body_class}}{{#match @custom.title_font "=" "Elegant serif"}} has-serif-title{{/match}}{{#match @custom.body_font "=" "Modern sans-serif"}} has-sans-body{{/match}}">
22
31
  <div class="viewport">
23
32
 
24
- <header id="gh-head" class="gh-head {{#if @site.cover_image}}has-cover{{/if}}">
33
+ <header id="gh-head" class="gh-head{{#match @custom.publication_cover_style "!=" "None"}} has-cover{{/match}}">
25
34
  <nav class="gh-head-inner inner gh-container">
26
35
 
27
36
  <div class="gh-head-brand">
@@ -2,35 +2,37 @@
2
2
  {{!-- The tag above means: insert everything in this file
3
3
  into the {body} of the default.hbs template --}}
4
4
 
5
- <div class="site-header-content">
6
- {{#if @site.cover_image}}
7
- {{!-- This is a responsive image, it loads different sizes depending on device
8
- https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
9
- <img class="site-header-cover"
10
- srcset="{{img_url @site.cover_image size="s"}} 300w,
11
- {{img_url @site.cover_image size="m"}} 600w,
12
- {{img_url @site.cover_image size="l"}} 1000w,
13
- {{img_url @site.cover_image size="xl"}} 2000w"
14
- sizes="100vw"
15
- src="{{img_url @site.cover_image size="xl"}}"
16
- alt=""
17
- />
18
- {{/if}}
19
- <h1 class="site-title">
20
- {{#if @site.logo}}
21
- <img class="site-logo" src="{{img_url @site.logo size="m"}}" alt="{{@site.title}}" />
22
- {{else}}
23
- {{@site.title}}
5
+ {{#match @custom.publication_cover_style "!=" "None"}}
6
+ <div class="site-header-content{{#match @custom.publication_cover_style "Large"}} large{{/match}}">
7
+ {{#if @site.cover_image}}
8
+ {{!-- This is a responsive image, it loads different sizes depending on device
9
+ https://medium.freecodecamp.org/a-guide-to-responsive-images-with-ready-to-use-templates-c400bd65c433 --}}
10
+ <img class="site-header-cover"
11
+ srcset="{{img_url @site.cover_image size="s"}} 300w,
12
+ {{img_url @site.cover_image size="m"}} 600w,
13
+ {{img_url @site.cover_image size="l"}} 1000w,
14
+ {{img_url @site.cover_image size="xl"}} 2000w"
15
+ sizes="100vw"
16
+ src="{{img_url @site.cover_image size="xl"}}"
17
+ alt=""
18
+ />
24
19
  {{/if}}
25
- </h1>
26
- <p>{{@site.description}}</p>
27
- </div>
20
+ <h1 class="site-title">
21
+ {{#if @site.logo}}
22
+ <img class="site-logo" src="{{img_url @site.logo size="m"}}" alt="{{@site.title}}" />
23
+ {{else}}
24
+ {{@site.title}}
25
+ {{/if}}
26
+ </h1>
27
+ <p>{{@site.description}}</p>
28
+ </div>
29
+ {{/match}}
28
30
 
29
31
  {{!-- The main content area --}}
30
32
  <main id="site-main" class="site-main outer">
31
33
  <div class="inner posts">
32
34
 
33
- <div class="post-feed">
35
+ <div class="post-feed{{#match @custom.feed_layout "List"}} list{{/match}}">
34
36
  {{#foreach posts}}
35
37
 
36
38
  {{!-- The tag below includes the markup for each post - partials/post-card.hbs --}}