diff --git a/openlibrary/templates/covers/add.html b/openlibrary/templates/covers/add.html
index fb60091105b..d1c878af339 100644
--- a/openlibrary/templates/covers/add.html
+++ b/openlibrary/templates/covers/add.html
@@ -14,6 +14,7 @@
$ guideline = _("Cover Guidelines")
+$:macros.icon("triangle-alert", size="sm")
$if status:
$if status.code == 1: $_("Please provide a valid image.")
$elif status.code == 2: $_("Please provide an image URL.")
diff --git a/openlibrary/templates/covers/manage.html b/openlibrary/templates/covers/manage.html
index cd9fd8e73b1..43b349932dd 100644
--- a/openlibrary/templates/covers/manage.html
+++ b/openlibrary/templates/covers/manage.html
@@ -37,7 +37,7 @@
-
+ $:macros.icon("trash", size="lg")
diff --git a/openlibrary/templates/covers/saved.html b/openlibrary/templates/covers/saved.html
index 85d3ed7cee5..c08982a07d3 100644
--- a/openlibrary/templates/covers/saved.html
+++ b/openlibrary/templates/covers/saved.html
@@ -10,7 +10,7 @@
- $_("Saved!")
+ $:macros.icon("circle-check", extra_class="saved__icon")$_("Saved!")
$if showinfo:
$_("Notes:")
diff --git a/openlibrary/templates/lib/not_logged.html b/openlibrary/templates/lib/not_logged.html
index a2708efc2c3..b1ddefe6407 100644
--- a/openlibrary/templates/lib/not_logged.html
+++ b/openlibrary/templates/lib/not_logged.html
@@ -1,3 +1,4 @@
+ $:macros.icon("info", extra_class="noLogin__icon")
$:_('You are not logged in. Open Library will record your IP address and include it in this page\'s publicly accessible edit history. If you create an account, your IP address is concealed and you can more easily keep track of all your edits and additions.')
diff --git a/openlibrary/templates/lists/home.html b/openlibrary/templates/lists/home.html
index 19c8686c52c..9aed1e2fc5b 100644
--- a/openlibrary/templates/lists/home.html
+++ b/openlibrary/templates/lists/home.html
@@ -9,6 +9,7 @@ $_('Lists')
+ $:macros.icon("heart", extra_class="lists-page-cta__icon")
$_('Create a list of any Subjects, Authors, Works or specific Editions.')
$:_('Once you\'ve made a list, you can watch for updates or export all the editions in a list as HTML, BibTeX or JSON. See all your lists and any activity using the "Lists" link on your Account page.')
$_('Enjoy!')
diff --git a/openlibrary/templates/login.html b/openlibrary/templates/login.html
index a3ec09ca6a5..656e3701a94 100644
--- a/openlibrary/templates/login.html
+++ b/openlibrary/templates/login.html
@@ -12,6 +12,7 @@
+ $:macros.icon("info", size="sm")
$_("This is a development instance, the default credentials are automatically filled.")
$_("email:") openlibrary@example.com $_("password:") admin123
@@ -49,6 +50,7 @@ $_("Log In")
+ $:macros.icon("triangle-alert", size="sm")
$:form.note
diff --git a/openlibrary/templates/search/authors.html b/openlibrary/templates/search/authors.html
index f05dc8e3f47..7e4531fac7c 100644
--- a/openlibrary/templates/search/authors.html
+++ b/openlibrary/templates/search/authors.html
@@ -31,7 +31,7 @@ $_("Search Authors")
$ user_can_merge = ctx.user and ctx.user.is_librarian_or_higher()
$if results.num_found >= 2 and user_can_merge:
$ keys = ','.join(doc['key'].split("/")[-1] for doc in results.docs)
- $_('Is the same author listed twice?') $_('Merge authors')
+ $:macros.icon("git-merge", size="sm") $_('Is the same author listed twice?') $_('Merge authors')
$else:
diff --git a/openlibrary/templates/search/work_search_facets.html b/openlibrary/templates/search/work_search_facets.html
index df6d56ef569..303b595b96f 100644
--- a/openlibrary/templates/search/work_search_facets.html
+++ b/openlibrary/templates/search/work_search_facets.html
@@ -29,11 +29,12 @@
$def facet(header, label, counts):
- $ magic_wand_markup = ''
- $if header == 'author_key' and len(counts) > 1 and show_merge_authors:
- $ keys = ','.join(k for k, display, count in counts)
- $ magic_wand_markup = ' %s' % (keys, _('Merge duplicate authors from this search'), _("Merge duplicates"))
- $(label)$:(magic_wand_markup)
+ $ show_merge_wand = header == 'author_key' and len(counts) > 1 and show_merge_authors
+ $(label)
+ $if show_merge_wand:
+ $ keys = ','.join(k for k, display, count in counts)
+ $:macros.icon("git-merge", size="sm")$_("Merge duplicates")
+
$ num = 0
$for k, display, count in counts:
$ num = num + 1
diff --git a/openlibrary/templates/site/body.html b/openlibrary/templates/site/body.html
index 6e7025095cf..01403c458ab 100644
--- a/openlibrary/templates/site/body.html
+++ b/openlibrary/templates/site/body.html
@@ -27,7 +27,8 @@
$#print errors (hidden by default as styles are loaded via JS)
$for flash in get_flash_messages():
- $flash.message
+ $ flash_icon = {'error': 'triangle-alert', 'info': 'info', 'note': 'info'}.get(flash.type, 'circle-check')
+ $:macros.icon(flash_icon, size="sm")$flash.message
$# Announcement banner will only be rendered if announcement and storage_key variables are set.
$# Be sure to escape any single quotes inside of the announcement HTML string.
diff --git a/openlibrary/templates/type/author/edit.html b/openlibrary/templates/type/author/edit.html
index 6ae5d1b4e6c..d8ead333033 100644
--- a/openlibrary/templates/type/author/edit.html
+++ b/openlibrary/templates/type/author/edit.html
@@ -102,7 +102,7 @@ $_("Edit Author")
-
+
diff --git a/openlibrary/templates/type/author/view.html b/openlibrary/templates/type/author/view.html
index dcce7676d91..a13109c612a 100644
--- a/openlibrary/templates/type/author/view.html
+++ b/openlibrary/templates/type/author/view.html
@@ -75,7 +75,7 @@
- $_('Merging Authors...')
+ $:macros.icon("git-merge", size="sm")$_('Merging Authors...')

$_('Duplicates')
@@ -89,12 +89,12 @@
- $_('Success!')
+ $:macros.icon("circle-check", size="sm")$_('Success!')
$:_('OK. The merge is in motion. It will take a few minutes to finish the update.')
- $_('Argh!')
+ $:macros.icon("triangle-alert", size="sm")$_('Argh!')
$_("That merge didn't work. It's our fault, and we've made a note of it.")
diff --git a/static/css/base/headings.css b/static/css/base/headings.css
index fc22dd705a3..a1929792026 100644
--- a/static/css/base/headings.css
+++ b/static/css/base/headings.css
@@ -107,10 +107,10 @@ h4.facetHead span.merge {
font-size: var(--font-size-label-small);
font-weight: normal !important;
text-transform: none !important;
- /* Not tokenized: must exceed the 16px icon width to avoid text overlap */
- padding-left: 22px;
- background: url(/static/images/icons/icon_merge-sm.png) no-repeat 0 0;
- min-height: 16px;
+}
+
+h4.facetHead span.merge .ol-icon {
+ margin-right: var(--spacing-inline-xs);
}
h5 {
diff --git a/static/css/components/buttonCta.css b/static/css/components/buttonCta.css
index 5d2efd9234c..aae6d966865 100644
--- a/static/css/components/buttonCta.css
+++ b/static/css/components/buttonCta.css
@@ -33,16 +33,6 @@ a.cta-btn .btn-icon {
flex-shrink: 0;
}
-/* stylelint-disable selector-max-specificity */
-.cta-btn .btn-icon.read-aloud,
-a.cta-btn .btn-icon.read-aloud {
- background-image: url(/static/images/icons/read%20aloud.svg);
- background-repeat: no-repeat;
- background-size: contain;
- background-position: center;
-}
-/* stylelint-enable selector-max-specificity */
-
.cta-btn .btn-label,
a.cta-btn .btn-label {
padding: var(--spacing-inset-sm);
@@ -93,13 +83,14 @@ a.cta-btn--primary:disabled {
.cta-btn--external,
a.cta-btn--external {
- background-image: url(/static/images/icons/octicon-link-external-24.svg);
- background-repeat: no-repeat;
- background-size: 20px;
- background-position: center right 8px;
justify-content: center;
}
+.cta-btn--external .cta-btn__external-icon,
+a.cta-btn--external .cta-btn__external-icon {
+ margin-left: var(--spacing-inline-xs);
+}
+
.cta-btn--unavailable,
a.cta-btn--unavailable {
background-color: var(--color-primary);
diff --git a/static/css/components/buttonsAndLinks.css b/static/css/components/buttonsAndLinks.css
index 2983090b2a8..74a669e734a 100644
--- a/static/css/components/buttonsAndLinks.css
+++ b/static/css/components/buttonsAndLinks.css
@@ -84,17 +84,3 @@ button.plain {
button.plain:hover {
color: var(--color-success-fg);
}
-button.addAnother {
- width: 32px;
- height: 32px;
- border: none;
- vertical-align: middle;
- cursor: pointer;
- background-image: url(/static/images/icons/icon_add.png);
- background-position: 0 0;
- background-color: transparent;
- display: none;
-}
-button.addAnother:hover {
- background-position: -32px 0;
-}
diff --git a/static/css/components/flash-messages.css b/static/css/components/flash-messages.css
index 16f11cf0de3..fb5930c7a3e 100644
--- a/static/css/components/flash-messages.css
+++ b/static/css/components/flash-messages.css
@@ -10,15 +10,10 @@
}
.flash-messages span {
- display: block;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-inline-sm);
background-color: var(--light-yellow);
- background-position: 10px 50%;
- background-repeat: no-repeat;
- padding: var(--spacing-inset-md) 52px;
+ padding: var(--spacing-inset-md);
text-align: left;
- background-image: url(/static/images/icons/icon_check.png);
-}
-
-.flash-messages .error span {
- background-image: url(/static/images/icons/icon_alert.png);
}
diff --git a/static/css/components/generic-dropper.css b/static/css/components/generic-dropper.css
index a42859da35d..5caf4455af5 100644
--- a/static/css/components/generic-dropper.css
+++ b/static/css/components/generic-dropper.css
@@ -195,24 +195,7 @@
.dropper-menu .btn-icon {
display: inline-block;
- filter: invert(1);
margin-right: var(--spacing-inline-sm);
width: 1.25em;
height: 1.25em;
}
-
-/* icons */
-.dropper-menu .listen {
- background-image: url(/static/images/icons/icon_listen.png);
-}
-
-.dropper-menu .map {
- background-image: url(/static/images/icons/icon_map.png);
-}
-
-.dropper-menu .listen,
-.dropper-menu .map {
- background-repeat: no-repeat;
- background-size: contain;
- background-position: center;
-}
diff --git a/static/css/components/lists-page-cta.css b/static/css/components/lists-page-cta.css
index d65d6557bd8..e6a0f5d0923 100644
--- a/static/css/components/lists-page-cta.css
+++ b/static/css/components/lists-page-cta.css
@@ -1,8 +1,13 @@
.lists-page-cta {
- background-repeat: no-repeat;
- background-image: url(/static/images/icons/icon_fav-big.png);
- padding-top: 70px;
- background-position: center 0;
+ position: relative;
+}
+
+.lists-page-cta .lists-page-cta__icon {
+ display: block;
+ width: 52px;
+ height: 52px;
+ margin: 0 auto var(--spacing-stack-sm);
+ color: var(--red);
}
.lists-page-cta h2 {
font-size: 1.5em;
@@ -18,8 +23,14 @@
/* @width-breakpoint-desktop */
@media all and (min-width: 960px) {
.lists-page-cta {
- background-position: 35px 35px;
padding-left: 130px;
padding-right: 60px;
}
+
+ .lists-page-cta .lists-page-cta__icon {
+ position: absolute;
+ top: 35px;
+ left: 35px;
+ margin: 0;
+ }
}
diff --git a/static/css/components/read-panel.css b/static/css/components/read-panel.css
index 92e80d9737d..fde6302bc9c 100644
--- a/static/css/components/read-panel.css
+++ b/static/css/components/read-panel.css
@@ -68,8 +68,14 @@
/* Setting pseudo-element content to book icon; mask is used to allow for a 'fill' color */
content: "";
- -webkit-mask: url(/static/images/icons/open-book.svg);
- mask: url(/static/images/icons/open-book.svg);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
-webkit-mask-size: cover;
mask-size: cover;
background-color: var(--color-primary);
diff --git a/static/css/components/search-result-item.css b/static/css/components/search-result-item.css
index 3c3388be5d5..e2cbbee6d8d 100644
--- a/static/css/components/search-result-item.css
+++ b/static/css/components/search-result-item.css
@@ -35,8 +35,14 @@
/* Setting pseudo-element content to book icon; mask is used to allow for a 'fill' color */
content: "";
- -webkit-mask: url(/static/images/icons/open-book.svg);
- mask: url(/static/images/icons/open-book.svg);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
-webkit-mask-size: cover;
mask-size: cover;
background-color: var(--color-primary);
diff --git a/static/css/components/team.css b/static/css/components/team.css
index 937e9339015..187aff5be5f 100644
--- a/static/css/components/team.css
+++ b/static/css/components/team.css
@@ -130,9 +130,7 @@
}
.links__site,
.links__book {
+ width: 35px;
height: 35px;
-}
-.links__site {
- filter: invert(32%) sepia(89%) saturate(5319%) hue-rotate(186deg)
- brightness(96%) contrast(97%);
+ color: var(--color-primary);
}
diff --git a/static/css/components/ui-dialog.css b/static/css/components/ui-dialog.css
index 61a170aff3b..fe0b65ac925 100644
--- a/static/css/components/ui-dialog.css
+++ b/static/css/components/ui-dialog.css
@@ -36,8 +36,29 @@
.ui-dialog .ui-dialog-content p {
min-height: 28px;
padding: 6px 33px 0;
- background: url(/static/images/icons/icon_alert.png) no-repeat 0 0;
margin: 0;
+ position: relative;
+}
+/* jQuery UI generates this markup, so the alert glyph has no template to
+ live in; a masked pseudo-element stands in for $:macros.icon(). */
+.ui-dialog .ui-dialog-content p::before {
+ content: "";
+ position: absolute;
+ top: 4px;
+ left: 2px;
+ width: 24px;
+ height: 24px;
+ background-color: var(--color-text);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/%3E%3Cpathd="M12 9v4"/%3E%3Cpathd="M12 17h.01"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/%3E%3Cpathd="M12 9v4"/%3E%3Cpathd="M12 17h.01"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
}
.ui-dialog .ui-dialog-buttonpane {
text-align: center;
diff --git a/static/css/legacy.css b/static/css/legacy.css
index a9c2d51e581..2dea3adc596 100644
--- a/static/css/legacy.css
+++ b/static/css/legacy.css
@@ -396,18 +396,12 @@ p.alert {
font-size: 0.875em;
color: var(--brown);
background-color: var(--light-yellow);
- background-position: 10px 50%;
- background-repeat: no-repeat;
margin: var(--spacing-stack-sm) auto 0;
- padding: var(--spacing-inset-md) 52px;
-}
-
-p.info {
- background-image: url(/static/images/icons/icon_info.png);
+ padding: var(--spacing-inset-md);
}
-p.thanks {
- background-image: url(/static/images/icons/icon_check.png);
+p.alert .ol-icon {
+ margin-right: var(--spacing-inline-xs);
}
input[type="text"],
@@ -536,37 +530,26 @@ div.note {
/* openlibrary/templates/lib/not_logged.html */
div#noLogin {
margin-top: var(--spacing-stack-sm);
- background: var(--light-yellow) url(/static/images/icons/icon_info.png)
- no-repeat 10px 50%;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 44px;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-inline-sm);
+ background: var(--light-yellow);
+ padding: var(--spacing-inset-sm);
}
/* openlibrary/templates/type/author/view.html */
div#preMerge {
- min-height: 32px;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 52px;
- background: transparent url(/static/images/icons/icon_merge.png) no-repeat
- 10px 10px;
+ padding: var(--spacing-inset-sm);
}
/* openlibrary/templates/type/author/view.html */
div#postMerge {
- min-height: 32px;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 52px;
- background: transparent url(/static/images/icons/icon_check.png) no-repeat
- 10px 10px;
+ padding: var(--spacing-inset-sm);
}
/* openlibrary/templates/type/author/view.html */
div#errorMerge {
- min-height: 32px;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 52px;
- background: transparent url(/static/images/icons/icon_alert.png) no-repeat
- 10px 10px;
+ padding: var(--spacing-inset-sm);
}
/* FORMS */
@@ -767,27 +750,6 @@ div#revertNotice {
}
/* MESSAGING */
-div.alert span,
-div.verify span {
- margin: 0 auto;
- min-height: 25px;
- padding: var(--spacing-inset-xs) 0 var(--spacing-inset-xs) 32px;
-}
-
-div.alert,
-div.verify {
- font: 1.25em var(--font-family-body);
-}
-
-/* openlibrary/templates/account/verify/failed.html */
-div.alert span {
- background: url(/static/images/icons/icon_alert.png) no-repeat;
-}
-
-div.verify span {
- background: url(/static/images/icons/icon_check.png) no-repeat;
-}
-
/* openlibrary/templates/account/email/forgot-ia.html */
.defaultstyling {
font-family: var(--font-family-body);
@@ -1555,7 +1517,6 @@ div.popAlert {
width: 550px;
padding: var(--spacing-inset-sm) var(--spacing-inset-md);
margin-bottom: var(--spacing-stack-md);
- background: url(/static/images/icons/icon_alert.png) no-repeat;
font-size: 1.25em;
color: var(--red);
text-align: center;
@@ -1619,9 +1580,8 @@ div.popAlert {
/* openlibrary/templates/search/authors.html */
div.mergeThis {
display: inline;
- padding: var(--spacing-inset-md) 0 0 45px;
+ padding: var(--spacing-inset-md) 0 0;
margin-left: 15px;
- background: url(/static/images/icons/icon_merge.png) no-repeat 0 0;
}
/* openlibrary/templates/recentchanges/default/view.html */
diff --git a/static/css/page-form.css b/static/css/page-form.css
index ba38b198f90..fc530b31c37 100644
--- a/static/css/page-form.css
+++ b/static/css/page-form.css
@@ -35,8 +35,28 @@ div#revertLink,
.column {
min-height: 90px;
margin: 10px;
- background-image: url(/static/images/back_sortable.png);
- background-repeat: no-repeat;
+ position: relative;
+}
+/* Portlets are injected over this area, so the drag affordance has no
+ markup of its own; a masked pseudo-element stands in for the sprite. */
+.column::before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ width: 24px;
+ height: 24px;
+ background-color: var(--color-text-secondary);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Ccirclecx="9"cy="12"r="1"/%3E%3Ccirclecx="9"cy="5"r="1"/%3E%3Ccirclecx="9"cy="19"r="1"/%3E%3Ccirclecx="15"cy="12"r="1"/%3E%3Ccirclecx="15"cy="5"r="1"/%3E%3Ccirclecx="15"cy="19"r="1"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Ccirclecx="9"cy="12"r="1"/%3E%3Ccirclecx="9"cy="5"r="1"/%3E%3Ccirclecx="9"cy="19"r="1"/%3E%3Ccirclecx="15"cy="12"r="1"/%3E%3Ccirclecx="15"cy="5"r="1"/%3E%3Ccirclecx="15"cy="19"r="1"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
}
.trashCan {
position: absolute;
@@ -44,9 +64,10 @@ div#revertLink,
right: 32px;
width: 32px;
height: 42px;
- background-image: url(/static/images/back_sort-trash.png);
- background-repeat: no-repeat;
- background-position: 0 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-text-secondary);
cursor: pointer;
}
.trashPosition {
@@ -54,7 +75,7 @@ div#revertLink,
height: 90px;
}
.trashPosition:hover .trashCan {
- background-position: -32px 0;
+ color: var(--red);
}
.trash {
height: 90px;
@@ -100,14 +121,18 @@ div#revertLink,
text-decoration: none;
}
.saved {
- background: url(/static/images/icons/icon_saved.png) no-repeat;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-inline-sm);
font-size: 1.5em;
font-weight: 700;
color: var(--black);
- padding: var(--spacing-inset-xs) 0 0 40px;
min-height: 30px;
margin: var(--spacing-stack-lg) 0 var(--spacing-stack-md);
}
+.saved .saved__icon {
+ color: var(--color-success-fg);
+}
.saved-image-container {
display: flex;
}
diff --git a/static/css/page-plain.css b/static/css/page-plain.css
index 6f6e4e2e46e..ff692594b28 100644
--- a/static/css/page-plain.css
+++ b/static/css/page-plain.css
@@ -70,26 +70,6 @@ div.nav {
font-size: 1.125em;
}
-div.message {
- padding: var(--spacing-inset-lg) var(--spacing-inset-lg)
- var(--spacing-inset-lg) 55px;
- margin-bottom: 50px;
- background: var(--light-yellow) url(/static/images/icons/icon_lock-msg.png)
- no-repeat 15px 50%;
-}
-div.message h2 {
- font-weight: normal;
- font-size: 18px;
- color: var(--black);
- margin: 0;
- padding: 0;
-}
-div.message p {
- font-size: 0.75em;
- padding: 0;
- margin: 0;
-}
-
ul.link {
margin-bottom: 50px;
}
@@ -111,24 +91,6 @@ ul.link li {
p.help {
font-size: var(--font-size-label-large);
}
-div.alert {
- background: var(--light-yellow) url(/static/images/icons/icon_alert-gold.png)
- no-repeat 15px 50% !important;
- margin-bottom: var(--spacing-stack-sm);
- margin-top: 20px;
-}
-div.stop {
- background: var(--light-yellow) url(/static/images/icons/icon_stop.png)
- no-repeat 15px 50% !important;
- margin-bottom: 45px;
- margin-top: 20px;
-}
-div.info {
- background: var(--light-yellow) url(/static/images/icons/icon_info.png)
- no-repeat 17px 50% !important;
- margin-bottom: 45px;
- margin-top: 20px;
-}
h1 {
font-size: 1.5em;
margin: 0 0 var(--spacing-stack-md);
diff --git a/static/icons/src/lucide/book-open.svg b/static/icons/src/lucide/book-open.svg
new file mode 100644
index 00000000000..cb150d286c4
--- /dev/null
+++ b/static/icons/src/lucide/book-open.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/circle-help.svg b/static/icons/src/lucide/circle-help.svg
new file mode 100644
index 00000000000..7eb6a60cc72
--- /dev/null
+++ b/static/icons/src/lucide/circle-help.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/git-merge.svg b/static/icons/src/lucide/git-merge.svg
new file mode 100644
index 00000000000..d880fdfce61
--- /dev/null
+++ b/static/icons/src/lucide/git-merge.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/grip-vertical.svg b/static/icons/src/lucide/grip-vertical.svg
new file mode 100644
index 00000000000..3ae3918a7ab
--- /dev/null
+++ b/static/icons/src/lucide/grip-vertical.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/headphones.svg b/static/icons/src/lucide/headphones.svg
new file mode 100644
index 00000000000..1a5ead33d5c
--- /dev/null
+++ b/static/icons/src/lucide/headphones.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/heart.svg b/static/icons/src/lucide/heart.svg
new file mode 100644
index 00000000000..c6993192756
--- /dev/null
+++ b/static/icons/src/lucide/heart.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/info.svg b/static/icons/src/lucide/info.svg
new file mode 100644
index 00000000000..ba4ac9b4fb6
--- /dev/null
+++ b/static/icons/src/lucide/info.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/map-pin.svg b/static/icons/src/lucide/map-pin.svg
new file mode 100644
index 00000000000..e06167c2c43
--- /dev/null
+++ b/static/icons/src/lucide/map-pin.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/square-arrow-out-up-right.svg b/static/icons/src/lucide/square-arrow-out-up-right.svg
new file mode 100644
index 00000000000..3ff2ee3cace
--- /dev/null
+++ b/static/icons/src/lucide/square-arrow-out-up-right.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/triangle-alert.svg b/static/icons/src/lucide/triangle-alert.svg
new file mode 100644
index 00000000000..f78657a19fd
--- /dev/null
+++ b/static/icons/src/lucide/triangle-alert.svg
@@ -0,0 +1 @@
+
diff --git a/openlibrary/templates/lib/not_logged.html b/openlibrary/templates/lib/not_logged.html index a2708efc2c3..b1ddefe6407 100644 --- a/openlibrary/templates/lib/not_logged.html +++ b/openlibrary/templates/lib/not_logged.html @@ -1,3 +1,4 @@
$:_('You are not logged in. Open Library will record your IP address and include it in this page\'s publicly accessible edit history. If you create an account, your IP address is concealed and you can more easily keep track of all your edits and additions.')
$_('Lists')
$_('Create a list of any Subjects, Authors, Works or specific Editions.')
$:_('Once you\'ve made a list, you can watch for updates or export all the editions in a list as HTML, BibTeX or JSON. See all your lists and any activity using the "Lists" link on your Account page.') $_('Enjoy!') diff --git a/openlibrary/templates/login.html b/openlibrary/templates/login.html index a3ec09ca6a5..656e3701a94 100644 --- a/openlibrary/templates/login.html +++ b/openlibrary/templates/login.html @@ -12,6 +12,7 @@
$_("email:") openlibrary@example.com $_("password:") admin123 @@ -49,6 +50,7 @@
$_("Log In")
$_("Search Authors")
$ user_can_merge = ctx.user and ctx.user.is_librarian_or_higher() $if results.num_found >= 2 and user_can_merge: $ keys = ','.join(doc['key'].split("/")[-1] for doc in results.docs) -$(label)$:(magic_wand_markup)
+ $ show_merge_wand = header == 'author_key' and len(counts) > 1 and show_merge_authors +$(label) + $if show_merge_wand: + $ keys = ','.join(k for k, display, count in counts) + $:macros.icon("git-merge", size="sm")$_("Merge duplicates") +
$ num = 0 $for k, display, count in counts: $ num = num + 1 diff --git a/openlibrary/templates/site/body.html b/openlibrary/templates/site/body.html index 6e7025095cf..01403c458ab 100644 --- a/openlibrary/templates/site/body.html +++ b/openlibrary/templates/site/body.html @@ -27,7 +27,8 @@ $#print errors (hidden by default as styles are loaded via JS)$_("Edit Author")
- $_('Merging Authors...')
+ $:macros.icon("git-merge", size="sm")$_('Merging Authors...')

$_('Duplicates')
@@ -89,12 +89,12 @@
- $_('Success!')
+ $:macros.icon("circle-check", size="sm")$_('Success!')
$:_('OK. The merge is in motion. It will take a few minutes to finish the update.')
- $_('Argh!')
+ $:macros.icon("triangle-alert", size="sm")$_('Argh!')
$_("That merge didn't work. It's our fault, and we've made a note of it.")
diff --git a/static/css/base/headings.css b/static/css/base/headings.css
index fc22dd705a3..a1929792026 100644
--- a/static/css/base/headings.css
+++ b/static/css/base/headings.css
@@ -107,10 +107,10 @@ h4.facetHead span.merge {
font-size: var(--font-size-label-small);
font-weight: normal !important;
text-transform: none !important;
- /* Not tokenized: must exceed the 16px icon width to avoid text overlap */
- padding-left: 22px;
- background: url(/static/images/icons/icon_merge-sm.png) no-repeat 0 0;
- min-height: 16px;
+}
+
+h4.facetHead span.merge .ol-icon {
+ margin-right: var(--spacing-inline-xs);
}
h5 {
diff --git a/static/css/components/buttonCta.css b/static/css/components/buttonCta.css
index 5d2efd9234c..aae6d966865 100644
--- a/static/css/components/buttonCta.css
+++ b/static/css/components/buttonCta.css
@@ -33,16 +33,6 @@ a.cta-btn .btn-icon {
flex-shrink: 0;
}
-/* stylelint-disable selector-max-specificity */
-.cta-btn .btn-icon.read-aloud,
-a.cta-btn .btn-icon.read-aloud {
- background-image: url(/static/images/icons/read%20aloud.svg);
- background-repeat: no-repeat;
- background-size: contain;
- background-position: center;
-}
-/* stylelint-enable selector-max-specificity */
-
.cta-btn .btn-label,
a.cta-btn .btn-label {
padding: var(--spacing-inset-sm);
@@ -93,13 +83,14 @@ a.cta-btn--primary:disabled {
.cta-btn--external,
a.cta-btn--external {
- background-image: url(/static/images/icons/octicon-link-external-24.svg);
- background-repeat: no-repeat;
- background-size: 20px;
- background-position: center right 8px;
justify-content: center;
}
+.cta-btn--external .cta-btn__external-icon,
+a.cta-btn--external .cta-btn__external-icon {
+ margin-left: var(--spacing-inline-xs);
+}
+
.cta-btn--unavailable,
a.cta-btn--unavailable {
background-color: var(--color-primary);
diff --git a/static/css/components/buttonsAndLinks.css b/static/css/components/buttonsAndLinks.css
index 2983090b2a8..74a669e734a 100644
--- a/static/css/components/buttonsAndLinks.css
+++ b/static/css/components/buttonsAndLinks.css
@@ -84,17 +84,3 @@ button.plain {
button.plain:hover {
color: var(--color-success-fg);
}
-button.addAnother {
- width: 32px;
- height: 32px;
- border: none;
- vertical-align: middle;
- cursor: pointer;
- background-image: url(/static/images/icons/icon_add.png);
- background-position: 0 0;
- background-color: transparent;
- display: none;
-}
-button.addAnother:hover {
- background-position: -32px 0;
-}
diff --git a/static/css/components/flash-messages.css b/static/css/components/flash-messages.css
index 16f11cf0de3..fb5930c7a3e 100644
--- a/static/css/components/flash-messages.css
+++ b/static/css/components/flash-messages.css
@@ -10,15 +10,10 @@
}
.flash-messages span {
- display: block;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-inline-sm);
background-color: var(--light-yellow);
- background-position: 10px 50%;
- background-repeat: no-repeat;
- padding: var(--spacing-inset-md) 52px;
+ padding: var(--spacing-inset-md);
text-align: left;
- background-image: url(/static/images/icons/icon_check.png);
-}
-
-.flash-messages .error span {
- background-image: url(/static/images/icons/icon_alert.png);
}
diff --git a/static/css/components/generic-dropper.css b/static/css/components/generic-dropper.css
index a42859da35d..5caf4455af5 100644
--- a/static/css/components/generic-dropper.css
+++ b/static/css/components/generic-dropper.css
@@ -195,24 +195,7 @@
.dropper-menu .btn-icon {
display: inline-block;
- filter: invert(1);
margin-right: var(--spacing-inline-sm);
width: 1.25em;
height: 1.25em;
}
-
-/* icons */
-.dropper-menu .listen {
- background-image: url(/static/images/icons/icon_listen.png);
-}
-
-.dropper-menu .map {
- background-image: url(/static/images/icons/icon_map.png);
-}
-
-.dropper-menu .listen,
-.dropper-menu .map {
- background-repeat: no-repeat;
- background-size: contain;
- background-position: center;
-}
diff --git a/static/css/components/lists-page-cta.css b/static/css/components/lists-page-cta.css
index d65d6557bd8..e6a0f5d0923 100644
--- a/static/css/components/lists-page-cta.css
+++ b/static/css/components/lists-page-cta.css
@@ -1,8 +1,13 @@
.lists-page-cta {
- background-repeat: no-repeat;
- background-image: url(/static/images/icons/icon_fav-big.png);
- padding-top: 70px;
- background-position: center 0;
+ position: relative;
+}
+
+.lists-page-cta .lists-page-cta__icon {
+ display: block;
+ width: 52px;
+ height: 52px;
+ margin: 0 auto var(--spacing-stack-sm);
+ color: var(--red);
}
.lists-page-cta h2 {
font-size: 1.5em;
@@ -18,8 +23,14 @@
/* @width-breakpoint-desktop */
@media all and (min-width: 960px) {
.lists-page-cta {
- background-position: 35px 35px;
padding-left: 130px;
padding-right: 60px;
}
+
+ .lists-page-cta .lists-page-cta__icon {
+ position: absolute;
+ top: 35px;
+ left: 35px;
+ margin: 0;
+ }
}
diff --git a/static/css/components/read-panel.css b/static/css/components/read-panel.css
index 92e80d9737d..fde6302bc9c 100644
--- a/static/css/components/read-panel.css
+++ b/static/css/components/read-panel.css
@@ -68,8 +68,14 @@
/* Setting pseudo-element content to book icon; mask is used to allow for a 'fill' color */
content: "";
- -webkit-mask: url(/static/images/icons/open-book.svg);
- mask: url(/static/images/icons/open-book.svg);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
-webkit-mask-size: cover;
mask-size: cover;
background-color: var(--color-primary);
diff --git a/static/css/components/search-result-item.css b/static/css/components/search-result-item.css
index 3c3388be5d5..e2cbbee6d8d 100644
--- a/static/css/components/search-result-item.css
+++ b/static/css/components/search-result-item.css
@@ -35,8 +35,14 @@
/* Setting pseudo-element content to book icon; mask is used to allow for a 'fill' color */
content: "";
- -webkit-mask: url(/static/images/icons/open-book.svg);
- mask: url(/static/images/icons/open-book.svg);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="M12 5v16"/%3E%3Cpathd="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"/%3E%3C/svg%3E
+ );
-webkit-mask-size: cover;
mask-size: cover;
background-color: var(--color-primary);
diff --git a/static/css/components/team.css b/static/css/components/team.css
index 937e9339015..187aff5be5f 100644
--- a/static/css/components/team.css
+++ b/static/css/components/team.css
@@ -130,9 +130,7 @@
}
.links__site,
.links__book {
+ width: 35px;
height: 35px;
-}
-.links__site {
- filter: invert(32%) sepia(89%) saturate(5319%) hue-rotate(186deg)
- brightness(96%) contrast(97%);
+ color: var(--color-primary);
}
diff --git a/static/css/components/ui-dialog.css b/static/css/components/ui-dialog.css
index 61a170aff3b..fe0b65ac925 100644
--- a/static/css/components/ui-dialog.css
+++ b/static/css/components/ui-dialog.css
@@ -36,8 +36,29 @@
.ui-dialog .ui-dialog-content p {
min-height: 28px;
padding: 6px 33px 0;
- background: url(/static/images/icons/icon_alert.png) no-repeat 0 0;
margin: 0;
+ position: relative;
+}
+/* jQuery UI generates this markup, so the alert glyph has no template to
+ live in; a masked pseudo-element stands in for $:macros.icon(). */
+.ui-dialog .ui-dialog-content p::before {
+ content: "";
+ position: absolute;
+ top: 4px;
+ left: 2px;
+ width: 24px;
+ height: 24px;
+ background-color: var(--color-text);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/%3E%3Cpathd="M12 9v4"/%3E%3Cpathd="M12 17h.01"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Cpathd="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/%3E%3Cpathd="M12 9v4"/%3E%3Cpathd="M12 17h.01"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
}
.ui-dialog .ui-dialog-buttonpane {
text-align: center;
diff --git a/static/css/legacy.css b/static/css/legacy.css
index a9c2d51e581..2dea3adc596 100644
--- a/static/css/legacy.css
+++ b/static/css/legacy.css
@@ -396,18 +396,12 @@ p.alert {
font-size: 0.875em;
color: var(--brown);
background-color: var(--light-yellow);
- background-position: 10px 50%;
- background-repeat: no-repeat;
margin: var(--spacing-stack-sm) auto 0;
- padding: var(--spacing-inset-md) 52px;
-}
-
-p.info {
- background-image: url(/static/images/icons/icon_info.png);
+ padding: var(--spacing-inset-md);
}
-p.thanks {
- background-image: url(/static/images/icons/icon_check.png);
+p.alert .ol-icon {
+ margin-right: var(--spacing-inline-xs);
}
input[type="text"],
@@ -536,37 +530,26 @@ div.note {
/* openlibrary/templates/lib/not_logged.html */
div#noLogin {
margin-top: var(--spacing-stack-sm);
- background: var(--light-yellow) url(/static/images/icons/icon_info.png)
- no-repeat 10px 50%;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 44px;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-inline-sm);
+ background: var(--light-yellow);
+ padding: var(--spacing-inset-sm);
}
/* openlibrary/templates/type/author/view.html */
div#preMerge {
- min-height: 32px;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 52px;
- background: transparent url(/static/images/icons/icon_merge.png) no-repeat
- 10px 10px;
+ padding: var(--spacing-inset-sm);
}
/* openlibrary/templates/type/author/view.html */
div#postMerge {
- min-height: 32px;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 52px;
- background: transparent url(/static/images/icons/icon_check.png) no-repeat
- 10px 10px;
+ padding: var(--spacing-inset-sm);
}
/* openlibrary/templates/type/author/view.html */
div#errorMerge {
- min-height: 32px;
- padding: var(--spacing-inset-sm) var(--spacing-inset-sm)
- var(--spacing-inset-sm) 52px;
- background: transparent url(/static/images/icons/icon_alert.png) no-repeat
- 10px 10px;
+ padding: var(--spacing-inset-sm);
}
/* FORMS */
@@ -767,27 +750,6 @@ div#revertNotice {
}
/* MESSAGING */
-div.alert span,
-div.verify span {
- margin: 0 auto;
- min-height: 25px;
- padding: var(--spacing-inset-xs) 0 var(--spacing-inset-xs) 32px;
-}
-
-div.alert,
-div.verify {
- font: 1.25em var(--font-family-body);
-}
-
-/* openlibrary/templates/account/verify/failed.html */
-div.alert span {
- background: url(/static/images/icons/icon_alert.png) no-repeat;
-}
-
-div.verify span {
- background: url(/static/images/icons/icon_check.png) no-repeat;
-}
-
/* openlibrary/templates/account/email/forgot-ia.html */
.defaultstyling {
font-family: var(--font-family-body);
@@ -1555,7 +1517,6 @@ div.popAlert {
width: 550px;
padding: var(--spacing-inset-sm) var(--spacing-inset-md);
margin-bottom: var(--spacing-stack-md);
- background: url(/static/images/icons/icon_alert.png) no-repeat;
font-size: 1.25em;
color: var(--red);
text-align: center;
@@ -1619,9 +1580,8 @@ div.popAlert {
/* openlibrary/templates/search/authors.html */
div.mergeThis {
display: inline;
- padding: var(--spacing-inset-md) 0 0 45px;
+ padding: var(--spacing-inset-md) 0 0;
margin-left: 15px;
- background: url(/static/images/icons/icon_merge.png) no-repeat 0 0;
}
/* openlibrary/templates/recentchanges/default/view.html */
diff --git a/static/css/page-form.css b/static/css/page-form.css
index ba38b198f90..fc530b31c37 100644
--- a/static/css/page-form.css
+++ b/static/css/page-form.css
@@ -35,8 +35,28 @@ div#revertLink,
.column {
min-height: 90px;
margin: 10px;
- background-image: url(/static/images/back_sortable.png);
- background-repeat: no-repeat;
+ position: relative;
+}
+/* Portlets are injected over this area, so the drag affordance has no
+ markup of its own; a masked pseudo-element stands in for the sprite. */
+.column::before {
+ content: "";
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ width: 24px;
+ height: 24px;
+ background-color: var(--color-text-secondary);
+ -webkit-mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Ccirclecx="9"cy="12"r="1"/%3E%3Ccirclecx="9"cy="5"r="1"/%3E%3Ccirclecx="9"cy="19"r="1"/%3E%3Ccirclecx="15"cy="12"r="1"/%3E%3Ccirclecx="15"cy="5"r="1"/%3E%3Ccirclecx="15"cy="19"r="1"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
+ mask: url(
+ data:image/svg + xml,
+ %3Csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"%3E%3Ccirclecx="9"cy="12"r="1"/%3E%3Ccirclecx="9"cy="5"r="1"/%3E%3Ccirclecx="9"cy="19"r="1"/%3E%3Ccirclecx="15"cy="12"r="1"/%3E%3Ccirclecx="15"cy="5"r="1"/%3E%3Ccirclecx="15"cy="19"r="1"/%3E%3C/svg%3E
+ )
+ no-repeat center / contain;
}
.trashCan {
position: absolute;
@@ -44,9 +64,10 @@ div#revertLink,
right: 32px;
width: 32px;
height: 42px;
- background-image: url(/static/images/back_sort-trash.png);
- background-repeat: no-repeat;
- background-position: 0 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--color-text-secondary);
cursor: pointer;
}
.trashPosition {
@@ -54,7 +75,7 @@ div#revertLink,
height: 90px;
}
.trashPosition:hover .trashCan {
- background-position: -32px 0;
+ color: var(--red);
}
.trash {
height: 90px;
@@ -100,14 +121,18 @@ div#revertLink,
text-decoration: none;
}
.saved {
- background: url(/static/images/icons/icon_saved.png) no-repeat;
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-inline-sm);
font-size: 1.5em;
font-weight: 700;
color: var(--black);
- padding: var(--spacing-inset-xs) 0 0 40px;
min-height: 30px;
margin: var(--spacing-stack-lg) 0 var(--spacing-stack-md);
}
+.saved .saved__icon {
+ color: var(--color-success-fg);
+}
.saved-image-container {
display: flex;
}
diff --git a/static/css/page-plain.css b/static/css/page-plain.css
index 6f6e4e2e46e..ff692594b28 100644
--- a/static/css/page-plain.css
+++ b/static/css/page-plain.css
@@ -70,26 +70,6 @@ div.nav {
font-size: 1.125em;
}
-div.message {
- padding: var(--spacing-inset-lg) var(--spacing-inset-lg)
- var(--spacing-inset-lg) 55px;
- margin-bottom: 50px;
- background: var(--light-yellow) url(/static/images/icons/icon_lock-msg.png)
- no-repeat 15px 50%;
-}
-div.message h2 {
- font-weight: normal;
- font-size: 18px;
- color: var(--black);
- margin: 0;
- padding: 0;
-}
-div.message p {
- font-size: 0.75em;
- padding: 0;
- margin: 0;
-}
-
ul.link {
margin-bottom: 50px;
}
@@ -111,24 +91,6 @@ ul.link li {
p.help {
font-size: var(--font-size-label-large);
}
-div.alert {
- background: var(--light-yellow) url(/static/images/icons/icon_alert-gold.png)
- no-repeat 15px 50% !important;
- margin-bottom: var(--spacing-stack-sm);
- margin-top: 20px;
-}
-div.stop {
- background: var(--light-yellow) url(/static/images/icons/icon_stop.png)
- no-repeat 15px 50% !important;
- margin-bottom: 45px;
- margin-top: 20px;
-}
-div.info {
- background: var(--light-yellow) url(/static/images/icons/icon_info.png)
- no-repeat 17px 50% !important;
- margin-bottom: 45px;
- margin-top: 20px;
-}
h1 {
font-size: 1.5em;
margin: 0 0 var(--spacing-stack-md);
diff --git a/static/icons/src/lucide/book-open.svg b/static/icons/src/lucide/book-open.svg
new file mode 100644
index 00000000000..cb150d286c4
--- /dev/null
+++ b/static/icons/src/lucide/book-open.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/circle-help.svg b/static/icons/src/lucide/circle-help.svg
new file mode 100644
index 00000000000..7eb6a60cc72
--- /dev/null
+++ b/static/icons/src/lucide/circle-help.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/git-merge.svg b/static/icons/src/lucide/git-merge.svg
new file mode 100644
index 00000000000..d880fdfce61
--- /dev/null
+++ b/static/icons/src/lucide/git-merge.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/grip-vertical.svg b/static/icons/src/lucide/grip-vertical.svg
new file mode 100644
index 00000000000..3ae3918a7ab
--- /dev/null
+++ b/static/icons/src/lucide/grip-vertical.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/headphones.svg b/static/icons/src/lucide/headphones.svg
new file mode 100644
index 00000000000..1a5ead33d5c
--- /dev/null
+++ b/static/icons/src/lucide/headphones.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/heart.svg b/static/icons/src/lucide/heart.svg
new file mode 100644
index 00000000000..c6993192756
--- /dev/null
+++ b/static/icons/src/lucide/heart.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/info.svg b/static/icons/src/lucide/info.svg
new file mode 100644
index 00000000000..ba4ac9b4fb6
--- /dev/null
+++ b/static/icons/src/lucide/info.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/map-pin.svg b/static/icons/src/lucide/map-pin.svg
new file mode 100644
index 00000000000..e06167c2c43
--- /dev/null
+++ b/static/icons/src/lucide/map-pin.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/square-arrow-out-up-right.svg b/static/icons/src/lucide/square-arrow-out-up-right.svg
new file mode 100644
index 00000000000..3ff2ee3cace
--- /dev/null
+++ b/static/icons/src/lucide/square-arrow-out-up-right.svg
@@ -0,0 +1 @@
+
diff --git a/static/icons/src/lucide/triangle-alert.svg b/static/icons/src/lucide/triangle-alert.svg
new file mode 100644
index 00000000000..f78657a19fd
--- /dev/null
+++ b/static/icons/src/lucide/triangle-alert.svg
@@ -0,0 +1 @@
+
$_('Merging Authors...')
+$:macros.icon("git-merge", size="sm")$_('Merging Authors...')
![]()
$_('Duplicates')
@@ -89,12 +89,12 @@
$_('Success!')
+$:macros.icon("circle-check", size="sm")$_('Success!')
$:_('OK. The merge is in motion. It will take a few minutes to finish the update.')
$_('Argh!')
+$:macros.icon("triangle-alert", size="sm")$_('Argh!')
$_("That merge didn't work. It's our fault, and we've made a note of it.")