From 2084d7b1ed9704ca5de5e9491a1e84c11ad5d7ed Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Sun, 16 Jan 2022 18:44:09 +0100 Subject: [PATCH 1/3] [mod] simple theme: change stylelint configuration * disable declaration-empty-line-before https://stylelint.io/user-guide/rules/list/declaration-empty-line-before/ this change allows to mix CSS declarations and LESS mixins without empty lines: #something { display: flex; .ltr-left(60rem); // no mandatory empty line before this one } * disable no-invalid-position-at-import-rule https://stylelint.io/user-guide/rules/list/no-invalid-position-at-import-rule/ this change allows to declare some mixins and then import another .less file: for example: .ltr-left(@offset) { left: @offset; } @import "style.less"; --- searx/static/themes/simple/.stylelintrc.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/searx/static/themes/simple/.stylelintrc.json b/searx/static/themes/simple/.stylelintrc.json index 40db42c66..be082eeb4 100644 --- a/searx/static/themes/simple/.stylelintrc.json +++ b/searx/static/themes/simple/.stylelintrc.json @@ -1,3 +1,7 @@ { - "extends": "stylelint-config-standard" + "extends": "stylelint-config-standard", + "rules": { + "declaration-empty-line-before": null, + "no-invalid-position-at-import-rule": null + } } From d000288ad0c41d9d6f3fdc66b0dcbe3e5b0c9876 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Thu, 13 Jan 2022 21:36:08 +0100 Subject: [PATCH 2/3] [enh] simple theme: RTL support * mirror all inline SVGs so that direction SVGs display correctly on RTL * set the bold list element in info box to RTL so the colon gets displayed on the right side * set correct .ltr function for the left border on the search button in #q * move text to the right in autocomplete * move search form in lign with result article on RTL * add the correct padding for img thumbnails in categories like music on RTL * apply RTL to result table for map results * align text in tables part of /preferences on RTL * move burger menu on index page to the left on RTL * fix positioning of drop down arrow on select boxes on RTL * align result URL on the right (written LTR) * align vim hotkeys help on the left since it is not translated * image detail: * labels (author, format, URL, etc...) are written on the right, values are on the left. * URL are written LTR and overflow on the right --- searx/static/themes/simple/gruntfile.js | 2 +- .../themes/simple/src/less/autocomplete.less | 5 +- .../static/themes/simple/src/less/detail.less | 31 ++-- .../static/themes/simple/src/less/index.less | 2 +- .../themes/simple/src/less/preferences.less | 25 ++-- .../static/themes/simple/src/less/search.less | 34 +++-- .../themes/simple/src/less/style-ltr.less | 69 +++++++++ .../themes/simple/src/less/style-rtl.less | 134 +++++++++++++++++- .../static/themes/simple/src/less/style.less | 70 +++++---- .../themes/simple/src/less/toolkit.less | 13 +- 10 files changed, 311 insertions(+), 74 deletions(-) create mode 100644 searx/static/themes/simple/src/less/style-ltr.less diff --git a/searx/static/themes/simple/gruntfile.js b/searx/static/themes/simple/gruntfile.js index abb2dc44d..824ab66d0 100644 --- a/searx/static/themes/simple/gruntfile.js +++ b/searx/static/themes/simple/gruntfile.js @@ -127,7 +127,7 @@ module.exports = function (grunt) { }, files: [ { - src: ['src/less/style.less'], + src: ['src/less/style-ltr.less'], dest: 'css/searxng.min.css', nonull: true, filter: file_exists, diff --git a/searx/static/themes/simple/src/less/autocomplete.less b/searx/static/themes/simple/src/less/autocomplete.less index 5f5745388..a1a74480b 100644 --- a/searx/static/themes/simple/src/less/autocomplete.less +++ b/searx/static/themes/simple/src/less/autocomplete.less @@ -4,7 +4,8 @@ position: absolute; max-height: 0; overflow-y: hidden; - text-align: left; + .ltr-text-align-left(); + .rounded-corners; &:active, @@ -24,7 +25,7 @@ > li { cursor: pointer; - padding: 8px 0 8px 8px; + padding: 0.5rem; &.active, &:active, diff --git a/searx/static/themes/simple/src/less/detail.less b/searx/static/themes/simple/src/less/detail.less index ab15be1a3..5e3cfaca6 100644 --- a/searx/static/themes/simple/src/less/detail.less +++ b/searx/static/themes/simple/src/less/detail.less @@ -3,8 +3,8 @@ } #main_results #results.only_template_images.image-detail-open #backToTop { - left: 56.75rem !important; - right: inherit; + .ltr-left(56.75rem) !important; + .ltr-right(inherit); } article.result-images .detail { @@ -15,8 +15,8 @@ article.result-images .detail { display: flex; flex-direction: column; position: fixed; - left: 60rem; - right: 0; + .ltr-left(60rem); + .ltr-right(0); top: @search-height; transition: top 0.064s ease-in 0s; bottom: 0; @@ -76,7 +76,7 @@ article.result-images .detail { h4, p, a { - text-align: left; + .ltr-text-align-left(); } p.result-content { @@ -113,20 +113,23 @@ article.result-images .detail { a.result-detail-close { top: 1rem; - left: 1rem; + .ltr-left(1rem); padding: 0.4rem; } a.result-detail-previous { top: 1rem; - right: 6rem; + .ltr-right(6rem); // center the icon by moving it slightly on the left - padding: 0.4rem 0.5rem 0.4rem 0.3rem; + padding-top: 0.4rem; + .ltr-padding-right(0.5rem); + padding-bottom: 0.4rem; + .ltr-padding-left(0.3rem); } a.result-detail-next { top: 1rem; - right: 2rem; + .ltr-right(2rem); padding: 0.4rem; } @@ -186,7 +189,7 @@ article.result-images .detail { .loader { position: absolute; top: 1rem; - right: 50%; + .ltr-right(50%); border-top: 0.5em solid var(--color-result-detail-loader-border); border-right: 0.5em solid var(--color-result-detail-loader-border); border-bottom: 0.5em solid var(--color-result-detail-loader-border); @@ -205,7 +208,7 @@ article.result-images .detail { @media screen and (max-width: @tablet) { #results.image-detail-open article.result-images[data-vim-selected] .detail { top: 0; - left: 0; + .ltr-left(0); a.result-images-source { display: flex; @@ -219,7 +222,7 @@ article.result-images .detail { } a.result-detail-next { - right: 1rem; + .ltr-right(1rem); } } } @@ -227,7 +230,7 @@ article.result-images .detail { @media screen and (max-width: @phone) { #results.image-detail-open article.result-images[data-vim-selected] .detail { top: 0; - left: 0; + .ltr-left(0); padding: 1rem; a.result-images-source img { @@ -238,7 +241,7 @@ article.result-images .detail { .result-images-labels p span { width: inherit; - margin-right: 1rem; + .ltr-margin-right(1rem); } } } diff --git a/searx/static/themes/simple/src/less/index.less b/searx/static/themes/simple/src/less/index.less index 9a244da00..3f1084099 100644 --- a/searx/static/themes/simple/src/less/index.less +++ b/searx/static/themes/simple/src/less/index.less @@ -2,7 +2,7 @@ margin-top: 26vh; #linkto_preferences { - right: 1.8rem; + .ltr-right(1.8rem); } } diff --git a/searx/static/themes/simple/src/less/preferences.less b/searx/static/themes/simple/src/less/preferences.less index 5fdd4bfaa..1d6f62a13 100644 --- a/searx/static/themes/simple/src/less/preferences.less +++ b/searx/static/themes/simple/src/less/preferences.less @@ -1,6 +1,6 @@ #tab-contentquery table td, #tab-contentquery table th { - text-align: left !important; + .ltr-text-align-right() !important; height: 3rem; } @@ -18,20 +18,23 @@ margin: 0; padding: 5px 0 0 0; display: block; - float: left; + .ltr-float-left(); width: 300px; } .value { margin: 0; padding: 0; - float: left; + .ltr-float-left(); width: 15em; select, input[type="text"] { font-size: inherit !important; - margin: 0 1rem 0 0; + margin-top: 0; + .ltr-margin-right(1rem); + margin-bottom: 0; + .ltr-margin-left(0); } select { @@ -63,7 +66,7 @@ .description { margin: 0; padding: 5px 0 0 0; - float: left; + .ltr-float-right(); width: 50%; color: var(--color-settings-engine-description-font); font-size: 90%; @@ -82,7 +85,7 @@ th, td { - text-align: left; + .ltr-text-align-left(); font-family: monospace; font-size: 1rem; padding: 0.5em; @@ -106,7 +109,7 @@ } .category { - margin-right: 0.5rem; + .ltr-margin-right(0.5rem); label { border: 2px solid transparent; @@ -121,7 +124,7 @@ .name, .shortcut { - text-align: left; + .ltr-text-align-left(); } .preferences_back { @@ -153,7 +156,7 @@ th.name { .engine-tooltip { margin-top: 1.8rem; - left: calc((100% - 85em) / 2 + 10em); + .ltr-left(calc((100% - 85em) / 2 + 10em)); max-width: 40rem; .engine-description { @@ -163,7 +166,7 @@ } .engine-group { - text-align: left; + .ltr-text-align-left(); font-weight: normal; background: var(--color-settings-engine-group-background); } @@ -175,6 +178,6 @@ } .engine-tooltip { - left: 10em !important; + .ltr-left(10em) !important; } } diff --git a/searx/static/themes/simple/src/less/search.less b/searx/static/themes/simple/src/less/search.less index 675f26f2f..282a0980b 100644 --- a/searx/static/themes/simple/src/less/search.less +++ b/searx/static/themes/simple/src/less/search.less @@ -8,7 +8,9 @@ } #search_header { - padding: 1.5em 2em 0 @results-offset - 3rem; + padding-top: 1.5em; + .ltr-padding-right(2em); + .ltr-padding-left(@results-offset - 3rem); margin: 0; background: var(--color-header-background); border-bottom: 1px solid var(--color-header-border); @@ -24,7 +26,7 @@ .category { display: inline-block; position: relative; - margin-right: 1rem; + .ltr-margin-right(1rem); padding: 0; input { @@ -127,11 +129,11 @@ #q { outline: medium none; - padding-left: 12px; - padding-right: 0 !important; - border-right: none; + .ltr-padding-left(12px); + .ltr-padding-right(0) !important; + .ltr-border-right(none); width: @search-width; - border-radius: 10px 0 0 10px; + .ltr-rounded-left-corners(); } #q::-ms-clear, @@ -140,8 +142,8 @@ } #send_search { - border-left: none; - border-radius: 0 10px 10px 0; + .ltr-border-left(none); + .ltr-rounded-right-corners(); &:hover { cursor: pointer; @@ -153,12 +155,15 @@ .no-js #clear_search, .no-js #send_search { width: auto !important; - border-left: 1px solid var(--color-search-border); + .ltr-border-left(1px solid var(--color-search-border)); padding: 10px; } .search_filters { - margin: 0.6rem 0 0 @results-offset + 0.6rem; + margin-top: 0.6rem; + .ltr-margin-right(0); + margin-bottom: 0; + .ltr-margin-left(@results-offset + 0.6rem); select { background-color: inherit; @@ -177,7 +182,10 @@ } .search_filters { - margin: 0.6rem 0 0 @results-tablet-offset + 3rem; + margin-top: 0.6rem; + .ltr-margin-right(0); + margin-bottom: 0; + .ltr-margin-left(@results-tablet-offset + 3rem); } #categories { @@ -204,7 +212,7 @@ #categories { width: 100%; - text-align: left; + .ltr-text-align-left(); overflow-x: scroll; overflow-y: hidden; -webkit-overflow-scrolling: touch; @@ -243,7 +251,7 @@ #main_results #q:placeholder-shown ~ #send_search { margin-right: 2.6rem; - transition: margin-right 0.1s; + transition: margin-right 0.1s; // FIX RTL } .search_filters { diff --git a/searx/static/themes/simple/src/less/style-ltr.less b/searx/static/themes/simple/src/less/style-ltr.less new file mode 100644 index 000000000..c20d65bbf --- /dev/null +++ b/searx/static/themes/simple/src/less/style-ltr.less @@ -0,0 +1,69 @@ +.ltr-left(@offset) { + left: @offset; +} + +.ltr-right(@offset) { + right: @offset; +} + +.ltr-margin-right(@offset) { + margin-right: @offset; +} + +.ltr-margin-left(@offset) { + margin-left: @offset; +} + +.ltr-border-right(@offset) { + border-right: @offset; +} + +.ltr-border-left(@offset) { + border-left: @offset; +} + +.ltr-padding-right(@offset) { + padding-right: @offset; +} + +.ltr-padding-left(@offset) { + padding-left: @offset; +} + +.ltr-float-left() { + float: left; +} + +.ltr-float-right() { + float: right; +} + +.ltr-text-align-right() { + text-align: right; +} + +.ltr-rounded-left-corners(@radius: 10px) { + border-radius: @radius 0 0 @radius; +} + +.ltr-rounded-right-corners(@radius: 10px) { + border-radius: 0 @radius @radius 0; +} + +.ltr-text-align-left() { + text-align: left; +} + +.ltr-border-left-width(@offset) { + border-left-width: @offset; +} + +.ltr-border-right-width(@offset) { + border-right-width: @offset; +} + +.ltr-transform() { + transform: scale(1, 1); +} + +@import "style.less"; diff --git a/searx/static/themes/simple/src/less/style-rtl.less b/searx/static/themes/simple/src/less/style-rtl.less index 21c05424f..92eda0c10 100644 --- a/searx/static/themes/simple/src/less/style-rtl.less +++ b/searx/static/themes/simple/src/less/style-rtl.less @@ -1,6 +1,134 @@ +.ltr-left(@offset) { + right: @offset; +} + +.ltr-right(@offset) { + left: @offset; +} + +.ltr-margin-right(@offset) { + margin-left: @offset; +} + +.ltr-margin-left(@offset) { + margin-right: @offset; +} + +.ltr-border-right(@offset) { + border-left: @offset; +} + +.ltr-border-left(@offset) { + border-right: @offset; +} + +.ltr-padding-right(@offset) { + padding-left: @offset; +} + +.ltr-padding-left(@offset) { + padding-right: @offset; +} + +.ltr-float-left() { + float: right; +} + +.ltr-float-right() { + float: left; +} + +.ltr-text-align-right() { + text-align: left; +} + +.ltr-rounded-left-corners(@radius: 10px) { + border-radius: 0 @radius @radius 0; +} + +.ltr-rounded-right-corners(@radius: 10px) { + border-radius: @radius 0 0 @radius; +} + +.ltr-text-align-left() { + text-align: right; +} + +.ltr-border-left-width(@offset) { + border-right-width: @offset; +} + +.ltr-border-right-width(@offset) { + border-left-width: @offset; +} + +.ltr-transform() { + transform: scale(-1, 1); +} + @import "style.less"; -#search_submit { - left: 1px; - right: auto; +#q, +#sidebar .infobox dt bdi { + direction: rtl; +} + +// URL are displayed LTR but align on the right +#urls { + direction: initial; + text-align: right; + + .result .url_wrapper { + justify-content: end; + } +} + +// Image detail +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p { + direction: rtl; + + &.result-url { + // Display URL using the LTR direction + direction: ltr; + + span { + // And put the label on the right + direction: rtl; + float: right; + } + } +} + +// select HTML element +@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))) { + select { + border-width: 0 0 0 2rem; + background-position-x: -2rem; + } +} + +// vim hotkey helps is not translated +#vim-hotkeys-help table { + direction: ltr; + text-align: left; +} + +// Logo on the right +#main_preferences h1, +#main_stats h1 { + background-position-x: 100%; +} + +// patch of searx/static/themes/__common__/less/stats.less +.bar-chart-serie1, +.bar-chart-serie2 { + float: right; +} + +.engine-stats .engine-name, +.engine-stats .engine-score, +.engine-stats .result-count, +.engine-stats .response-time, +.engine-stats .engine-reliability { + text-align: right; } diff --git a/searx/static/themes/simple/src/less/style.less b/searx/static/themes/simple/src/less/style.less index bb983838b..babe886e8 100644 --- a/searx/static/themes/simple/src/less/style.less +++ b/searx/static/themes/simple/src/less/style.less @@ -33,6 +33,7 @@ vertical-align: bottom; line-height: 1; text-decoration: inherit; + .ltr-transform(); } .ion-icon-small { @@ -139,8 +140,8 @@ a { article[data-vim-selected] { background: var(--color-result-vim-selected); - border-left: 0.2rem solid var(--color-result-vim-arrow); - .rounded-right-corners; + .ltr-border-left(0.2rem solid var(--color-result-vim-arrow)); + .ltr-rounded-right-corners(); } article.result-images[data-vim-selected] { @@ -166,7 +167,7 @@ article[data-vim-selected].category-social { .result { margin: @results-margin 0; padding: @result-padding; - border-left: 0.2rem solid transparent; + .ltr-border-left(0.2rem solid transparent); h3 { font-size: 1.2rem; @@ -264,15 +265,17 @@ article[data-vim-selected].category-social { img { &.thumbnail { - float: left; - padding: 0.6rem 1rem 0 0; + .ltr-float-left(); + padding-top: 0.6rem; + .ltr-padding-right(1rem); width: 20rem; height: unset; // remove heigth value that was needed for lazy loading } &.image { - float: left; - padding: 0.6rem 1rem 0 0; + .ltr-float-left(); + padding-top: 0.6rem; + .ltr-padding-right(1rem); width: 7rem; max-height: 7rem; object-fit: scale-down; @@ -308,12 +311,15 @@ article[data-vim-selected].category-social { } .engines { - float: right; + .ltr-float-right(); color: var(--color-result-engines-font); span { font-size: smaller; - margin: 0 0.5em 0 0; + margin-top: 0; + margin-bottom: 0; + .ltr-margin-right(0.5rem); + .ltr-margin-left(0); } } @@ -356,9 +362,12 @@ article[data-vim-selected].category-social { display: block; position: absolute; bottom: 0; - right: 0; + .ltr-right(0); padding: 4px; - margin: 0 0 4px 4px; + margin-top: 0; + .ltr-margin-right(0); + margin-bottom: 4px; + .ltr-margin-left(4px); // color: @color-result-image-span-font; background-color: var(--color-result-image-span-background-hover); font-size: 0.7em; @@ -367,7 +376,7 @@ article[data-vim-selected].category-social { .result-map { img.image { - float: right !important; + .ltr-float-right() !important; height: 100px !important; width: auto !important; } @@ -382,12 +391,12 @@ article[data-vim-selected].category-social { font-weight: inherit; width: 17rem; vertical-align: top; - text-align: left; + .ltr-text-align-left(); } td { vertical-align: top; - text-align: left; + .ltr-text-align-left(); } } } @@ -397,7 +406,10 @@ article[data-vim-selected].category-social { } #results { - margin: 1rem 2rem 0 @results-offset; + margin-top: 1rem; + .ltr-margin-right(2rem); + margin-bottom: 0; + .ltr-margin-left(@results-offset); display: grid; grid-template-columns: @results-width 25rem; grid-template-rows: min-content min-content 1fr min-content; @@ -533,7 +545,10 @@ article[data-vim-selected].category-social { dt { display: inline; - margin: 0.5em 0.25em 0.5em 0; + margin-top: 0.5em; + .ltr-margin-right(0.25em); + margin-bottom: 0.5em; + .ltr-margin-left(0); padding: 0; font-weight: bold; } @@ -571,7 +586,7 @@ article[data-vim-selected].category-social { #linkto_preferences { position: absolute; - right: 10px; + .ltr-right(10px); top: 2.2rem; padding: 0; border: 0; @@ -608,7 +623,7 @@ article[data-vim-selected].category-social { background: var(--color-backtotop-background); position: fixed; bottom: 8rem; - left: @results-width + @results-offset + (0.5 * @results-gap - 1.2em); + .ltr-left(@results-width + @results-offset + (0.5 * @results-gap - 1.2em)); transition: opacity 0.5s; opacity: 0; .rounded-corners; @@ -647,9 +662,12 @@ article[data-vim-selected].category-social { clear: both; img { - float: left; + .ltr-float-left(); max-width: 10em; - margin: 0.5em 0.5em 0.5em 0; + margin-top: 0.5em; + .ltr-margin-right(0.5em); + margin-bottom: 0.5em; + .ltr-margin-left(0); } } } @@ -690,7 +708,7 @@ article[data-vim-selected].category-social { } .engines { - float: right; + .ltr-float-right(); padding: 0 0 3px 0; } } @@ -750,12 +768,12 @@ article[data-vim-selected].category-social { } #backToTop { - left: auto; - right: 1rem; + .ltr-left(auto); + .ltr-right(1rem); } #pagination { - margin-right: 4rem; + .ltr-margin-right(4rem); } } @@ -767,12 +785,12 @@ article[data-vim-selected].category-social { #linkto_preferences { top: 0.8rem; - right: 0.7rem; + .ltr-right(0.7rem); } #main_index #linkto_preferences { top: 0.5rem; - right: 0.5rem; + .ltr-right(0.5rem); } #results { diff --git a/searx/static/themes/simple/src/less/toolkit.less b/searx/static/themes/simple/src/less/toolkit.less index 76db36853..ed1e1affa 100644 --- a/searx/static/themes/simple/src/less/toolkit.less +++ b/searx/static/themes/simple/src/less/toolkit.less @@ -125,11 +125,11 @@ div.selectable_url { padding: 1rem; margin: 0 0 1em 0; border: 1px solid var(--color-toolkit-dialog-border); - text-align: left; + .ltr-text-align-left(); .rounded-corners; .close { - float: right; + .ltr-float-right(); position: relative; top: -3px; color: inherit; @@ -156,6 +156,10 @@ div.selectable_url { td { padding: 0 1em 0 0; + padding-top: 0; + .ltr-padding-right(1rem); + padding-bottom: 0; + .ltr-padding-left(0); } h4 { @@ -301,7 +305,10 @@ html body .tabs > input:checked { /* -- select -- */ select { height: 2.4rem; - margin: 0 1rem 0 0; + margin-top: 0; + .ltr-margin-right(1rem); + margin-bottom: 0; + .ltr-margin-left(0); padding: 0.2rem !important; color: var(--color-search-font); font-size: 0.9rem; From 468619abcb677703d057506b00529aa94852a855 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Sun, 16 Jan 2022 18:52:46 +0100 Subject: [PATCH 3/3] [build] /static --- .../oscar/css/logicodev-dark.min.css.map | Bin 11613 -> 11613 bytes .../themes/oscar/css/logicodev.min.css.map | Bin 10142 -> 10142 bytes .../themes/simple/css/searxng-rtl.min.css | Bin 56465 -> 58197 bytes .../themes/simple/css/searxng-rtl.min.css.map | Bin 90829 -> 95103 bytes .../static/themes/simple/css/searxng.min.css | Bin 56426 -> 57169 bytes .../themes/simple/css/searxng.min.css.map | Bin 90695 -> 93496 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/searx/static/themes/oscar/css/logicodev-dark.min.css.map b/searx/static/themes/oscar/css/logicodev-dark.min.css.map index 32293f3a43cc80ffe3356a30a41c213dc1fbcf2d..9a15089f6d9a69b4395886a9403ef5e1f8c54934 100644 GIT binary patch delta 66 zcmcZ`bvJ54<>U@Vfr-w-6OXA(Ja%aEYQ_r_^A#pBvP?E$V%=QL)F;U3x0y?1A`_$k W<~d?Bco>~Gn<_Uj1F3Cl%h>>SvKQO{ delta 60 zcmcZ`bvJ54<>VM9v5B2OCsqnfyv;e;fQf5z6XS)=)l7YYjLw_6L?$u;sX1aZco>s5 Qn<_UjGbV4|rna070Ot}GD*ylh diff --git a/searx/static/themes/oscar/css/logicodev.min.css.map b/searx/static/themes/oscar/css/logicodev.min.css.map index 52840b8ad15eb62d21541dd672c80de04cba5e78..c28e2c7b3d2f4b40a16c03301b904198075a4d1e 100644 GIT binary patch delta 54 zcmV-60LlNJPo7VZd6S0%50OI?k;Wvk#=!xRc@~lZ1e3r41+$+5<{$xLlZGR10b{fE MBYXn^Lz8kREL61=YXATM delta 45 zcmV+|0Mh@SPo7VZd6R$w7O{x<0g-tRlWYMAv!4RyAOS;@h9hnPWV7`nd; zB#@$}i3tsRnt--pY3oA+G==Pud(L;x{mwUcCYL>HtDeQ0SRqpS2VnA@eQ-Qh1g$Z-P?h^I)PDB@JZgIt{)(;b zk0zx=LecwqY$PLM?#Yge1d*)ekhp=dp}9hAZXAJ|Z-4u^%$Hl~QR}bIPT%!zj{Zdu z+Lm)A$fLGG?wR>XL5Efpb`Gyes9(|f&9gf|?&!`lJ2^>r*H%3~dIcG zYFO3E$cCORtYNX?X5n>vuU65L2Evk#qgE9-X_9gl&@9?oTNvrVzZ7{X2$LV1gbaJV ztjLwI@h;k0vwJM|*n}oGLStwr`Lo*^#|jIt!A9l~y!lyig)XP?u+2y3PH95$&6s}n zz|j(q-CFB}R^YU@bbJqF$D<$~E+uu7JXcJ^gD5lA0Hc{s+A;Yt)5zJ0nG?U!{0ApG zJ?tzk)BD+CbUNMqRO*W`I8y=H=_0r_T}nV=AMIiD%v0+@2dceb7$j~w_aRwOVm7)qvcveQJ- zHS@TE5;C$423O~5;oy8Z{4v)K=-l)0%IwY^KGFIG#bgQ+^DA(-U>DpREP?mVl|$!( zpUEW9;k%70M*rKTqYH)H)8J||3AT`0#`8Wz!QJoTV7pWSieX91?dB;~_n_+L`+oZ$ETqv+%<@*Ue_5Nh$t_lE4Fz zpt#9KC*@*y)Y}Z$zTEk{Ar2l~EhWFNb$iNK57H1e=sntbFGjVVxi>}s-?$&57mjiN z4mUa&@S93Pj!VcVD0-g}H&VU?_Qey*a6&!W3P>ilj!dbuaRg zs`Oi7_BW3O`UE7KLn`(OR@(bVkd#cyX!wI66DxgbzSq#PtmBBRa|!DnPn5ZMty&hO z?zZw=sEUz|)>){}OiH?I%Swp$sfL7EefYC`tjf7cn8xZM~;4}r=&0Yh^0YTQSZ>r3jSi&aNENSSb%wt7+(xxS-rQMKj MeTec@2kB?=U)--?*#H0l delta 1093 zcmaJ=T}TvB6lU5#e|A^Jzs$&8G%3Mtc5^M(K*1sw|6l4MLf3Y6hun11% z^(bK?mKtREvwE#i5t2<)dr4zaLrY3fs8HykBBJixyJfxfFmun`bIy0p`OY`~DOux) z%)8qPNn9+f=R`t-RS9`khg{&woxta2!&j>xv^f)jfNR8o_}pX$KIcZjMxK{=y!oTs zDc%A50q3zK?kowBb9yfyR{0w-Pq=5jRL6Pv?Gcsh$?Nd!9Td8?F5moRZY zucjL&cY-6+& zuvxEyVo<CopoKfA`8jI0j#$%f3g06Na(az9=`&Q)v zN|%YR{!L9Por?WyC#98w-60SMB=qWmwaTGzEClj<3t_D%POUStc*W$!!n0l3qyU0p%#P0KGp(ONNB&D`RC%;fR8kf)PpZ%@M*XjY93ugp^s&XAkv+|Bs7&p zL&I?u{D=vLBV*x^)vLwQ*axpi6JcvbgNDZDD8%*g(~5XP?w?JQ$^m(@pz)dh=SNQ8 zaA0u>lLeBn33s^d?#cKaum<6gX_zaQO(^Hw*vsnhrw-K9JY@P5aAkU((0+EtOwR5Z z7W$WzDifU^sb`l|5f%bzFiA@xCeqIr1a?yO>Kh$|_b)IhWDu9FIyIma7ArVVnqq82 zv@e(f5c7*AGA$v_<`FB&?*duNR;tFE%eSeKykerVJhd{%=&Kwy;f%Am%2Vp%#2S)p O#A8w^NHDPXJ^KsRNTo0U diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css.map b/searx/static/themes/simple/css/searxng-rtl.min.css.map index 55efb8fda71cf0f718e1bbfdd243a466b8fa0bd7..55c49cf87c362514abd50a88f61482fdeefbe02c 100644 GIT binary patch delta 7723 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 A*Z=?k diff --git a/searx/static/themes/simple/css/searxng.min.css b/searx/static/themes/simple/css/searxng.min.css index 5334189c19e38011f67c5373215eab2d25dfba8d..75acb5377bc70bf43bc0c5d423a30bbe318af10f 100644 GIT binary patch delta 1085 zcmaF0gZbh<<_%}P9IOixQ&KYX(sfJn3#<&_yrRtXj1nuuqSRctP*Q$LNq#Ppnw-?M z606N;ygHdEHzmY(Jrzu03dm(Mh595nu_!$=PZ!A}P!YI4pnQloD#HvVSoKVS9-bVV zFFpBKF5l({c?CkwVAJ$WkOKl@Bv>ta;Gil5o2+L%`N5>f$@XpRn~yf`6`jm~Onmc< z=?RQxWVzE|a^XCY$@6EhO+G(^eY48USSEh3bF9lVQ%W+dObt{gZwwZmY%q^=^Xl0d z>{?(;4E0Qr;t}F}BP0<>2q-KL;eUlmIkWM%G5x0^2PJQlRqrv-27%v2K(d->)6?hAWo=T62i%C zrDq1R$pGXgj&&?RQ;`Im)=y-e{9;SR;M1& diff --git a/searx/static/themes/simple/css/searxng.min.css.map b/searx/static/themes/simple/css/searxng.min.css.map index 44ba4349dfff29df1bb616dace70877c04972bd6..d20e75a2d84f7870d71eae6949cad98da7a6ee55 100644 GIT binary patch delta 6719 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 delta 3691 zcma)7eN0=|71we21_KG-fe=H0kl45ngMmN;JU@S68)HL0A*95?#u$tt#t@QrTh~Ob zwkR6wS$a2V-Iug=UACptQ~J8L>Qbp|r)kTQW&0c`2owqVy>IQi~d|HD2NJT+IXduLSn}-2q?jMTNi@$9;ShB}1J_M%>&D~J3 zGUPNZ+IVWr|EQXzMIPDpRjBZ@H-{=rogAWs_jcdbC-$>i(Ob9u)PDJn@dgwwk51cC zWfDf^>n%l_3TCEKpzTZY2f`WMCdVT)m}sjnXW`Vu?B0})6;S2^ZBeabR4+gLy?qT8AsHJ*Y|a z!6uR@-|0#Kezqew!%c(WiSFl0(qSEWmJ9jjTFZS=IMOy2d(=<=(;J{by2Fww+=?9Yo8Z*7# zQ)m(Acm-%DeWotTjv>56mDV|+VQ+~-5xe2-j@YD5uLrlqyCi(2C#mRqAHlc+pp_53IOT>%?!t8$M5AAnBp2T;1P(0gXf3_)_4t zOSxjJ&mkWh8q+nUr;LyH8V9uE^R7|Syc?+ae^sl8pDGNrjig~2NATisfKq7f>w&o= zH4hmlw+Dwt?v}DjakPBKIV?BM@2I4!gU-phebtobc2$ElUBs97&CuIW;# zCuyC;J46XXv2dSZrnry2^2YI`y=XdGD}Q(Ye`s40lc~M$Z=b~H4?e38Oo!8*n!`sA zJyRH1o=T0NUzoxhhtA;74(DZY^j>^(pafSBe~V9$dPOIwee^>MgT&)eG#YF*P4>!9 zj=<@dEnUX;7#<$GOt+#|M&2)#Ow3{(eoioTguO#}_{b$b?pp7ea}*Dj$&ZYmg`Lcs znl$sF;iDz7&<~Hp6jVLAXYubx`>3v_K|c%!OcA<<4yv2Nw_f7Jz+-{pz{*M6LYjr` zC-J4nc9#V9oTTHRF>`i>rWVHH-cr0akRfMIbcgZq`^{u^6f*M6ld<{5u;KCXI59h+ zLjLw!c95mFC-Mrq4T7OH5uT%eg8cC{cQx+6^IFSY6|*P($p=0z%*c<0 zr;^`xf$R9c;aP4eB%VG^bXfQGqO2(q*eb1u~ci27LZ*HhD1z z{+x2av50S$lGRq&POjuaEUn*_2RF9N1rw2IyhU@$w3YgN7y*6i#@xm3o-TlMn>Hj) znv3E6%&FLXFp1aimJ;J;=uf|vk#n12k{HGy120b&DZ^Xff-WsBC0S)~Z-YmrsvNFD z>E}@iyjm|;LIdDCcgvK%DrnSYscDmVHPn*x)$lYGRgmlbu$6df;8!_XD+B_wP(~WJ z!G(ryL#x?J`C{Rm=}&|gmtx7qmieiv#c}MdOhc z&Anw|g%c!otyN7h)J5kO<`c0J-ERJE5xP_;B zQYO;_xw#X9fShlD5<+%?(8&12$i*hW@Wp(LnotpT z!zkpf>5^I_RAn2CYQFc3@B-jZg9RBZCFRu?xS}ILBQz_&5a1t~$_pK^nzdO&t!6El zEeUcg3u>_T`?*=WcmdG-uksvv`qFruPHJlo>{5QS7c9EQ4VDz{;(RO`G9(kh_~Jq^ z5soL7x_)>gi(HC9Hitn1Y@(~RFb0e#BY1a#;=SB@VB!N^?|s7b0%(i);{`Kt)I%D&@}t0NXClqn}eFq2WE zb~Ct?oaZe}uQ`U7{C)-+^{KtU)>IE^HA5F!j)Ia}nS!~K3&bL*Actn4CABrwiB+DP IfgkDq2NvK{{r~^~