From 096ffd0659ea93a1de0009e37e49f71d576d2de6 Mon Sep 17 00:00:00 2001 From: Thomas Pointhuber Date: Sun, 18 Jan 2015 12:00:38 +0100 Subject: [PATCH] [enh] add new bootstrap-themes to oscar-template --- Makefile | 3 + searx/static/css/bootstrap.min.css | Bin 113911 -> 114586 bytes searx/static/css/bootstrap.readable.min.css | Bin 0 -> 117064 bytes searx/static/css/bootstrap.simplex.min.css | Bin 0 -> 118181 bytes searx/static/css/bootstrap.yeti.min.css | Bin 0 -> 119610 bytes .../less/bootstrap/bootstrap_readable.less | 55 ++ .../less/bootstrap/bootstrap_simplex.less | 55 ++ .../static/less/bootstrap/bootstrap_yeti.less | 55 ++ .../bootstrap/theme_readable/bootswatch.less | 187 ++++ .../bootstrap/theme_readable/variables.less | 856 ++++++++++++++++++ .../bootstrap/theme_simplex/bootswatch.less | 142 +++ .../bootstrap/theme_simplex/variables.less | 856 ++++++++++++++++++ .../less/bootstrap/theme_yeti/bootswatch.less | 437 +++++++++ .../less/bootstrap/theme_yeti/variables.less | 856 ++++++++++++++++++ searx/templates/oscar/base.html | 6 +- searx/templates/oscar/preferences.html | 23 + searx/webapp.py | 14 + 17 files changed, 3544 insertions(+), 1 deletion(-) create mode 100644 searx/static/css/bootstrap.readable.min.css create mode 100644 searx/static/css/bootstrap.simplex.min.css create mode 100644 searx/static/css/bootstrap.yeti.min.css create mode 100644 searx/static/less/bootstrap/bootstrap_readable.less create mode 100644 searx/static/less/bootstrap/bootstrap_simplex.less create mode 100644 searx/static/less/bootstrap/bootstrap_yeti.less create mode 100644 searx/static/less/bootstrap/theme_readable/bootswatch.less create mode 100644 searx/static/less/bootstrap/theme_readable/variables.less create mode 100644 searx/static/less/bootstrap/theme_simplex/bootswatch.less create mode 100644 searx/static/less/bootstrap/theme_simplex/variables.less create mode 100644 searx/static/less/bootstrap/theme_yeti/bootswatch.less create mode 100644 searx/static/less/bootstrap/theme_yeti/variables.less diff --git a/Makefile b/Makefile index 7c055ffae..8d13b9890 100644 --- a/Makefile +++ b/Makefile @@ -48,6 +48,9 @@ styles: @lessc -x searx/static/themes/default/less/style.less > searx/static/themes/default/css/style.css @lessc -x searx/static/themes/courgette/less/style.less > searx/static/themes/courgette/css/style.css @lessc -x searx/static/less/bootstrap/bootstrap.less > searx/static/css/bootstrap.min.css + @lessc -x searx/static/less/bootstrap/bootstrap_simplex.less > searx/static/css/bootstrap.simplex.min.css + @lessc -x searx/static/less/bootstrap/bootstrap_yeti.less > searx/static/css/bootstrap.yeti.min.css + @lessc -x searx/static/less/bootstrap/bootstrap_readable.less > searx/static/css/bootstrap.readable.min.css @lessc -x searx/static/themes/oscar/less/oscar/oscar.less > searx/static/themes/oscar/css/oscar.min.css grunt: diff --git a/searx/static/css/bootstrap.min.css b/searx/static/css/bootstrap.min.css index fb0e84ae429d9fe45130887dafe747f77cfa7f31..691604be6ac3671e5df785c4720f3adeba26acf2 100644 GIT binary patch delta 6707 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 delta 5892 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 LxJ{HEdH??bE9F*< literal 0 HcmV?d00001 diff --git a/searx/static/css/bootstrap.simplex.min.css b/searx/static/css/bootstrap.simplex.min.css new file mode 100644 index 0000000000000000000000000000000000000000..2a34b36ff883497ac4b78c890b552d671a094452 GIT binary patch literal 118181 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 Hlkxun?}+Yk literal 0 HcmV?d00001 diff --git a/searx/static/less/bootstrap/bootstrap_readable.less b/searx/static/less/bootstrap/bootstrap_readable.less new file mode 100644 index 000000000..cb504f3e3 --- /dev/null +++ b/searx/static/less/bootstrap/bootstrap_readable.less @@ -0,0 +1,55 @@ +// Core variables and mixins +@import "variables.less"; +@import "theme_readable/variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; + +// own additions +@import "typeahead.less"; +@import "theme_readable/bootswatch.less"; diff --git a/searx/static/less/bootstrap/bootstrap_simplex.less b/searx/static/less/bootstrap/bootstrap_simplex.less new file mode 100644 index 000000000..4390b668d --- /dev/null +++ b/searx/static/less/bootstrap/bootstrap_simplex.less @@ -0,0 +1,55 @@ +// Core variables and mixins +@import "variables.less"; +@import "theme_simplex/variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; + +// own additions +@import "typeahead.less"; +@import "theme_simplex/bootswatch.less"; diff --git a/searx/static/less/bootstrap/bootstrap_yeti.less b/searx/static/less/bootstrap/bootstrap_yeti.less new file mode 100644 index 000000000..1fe014cd2 --- /dev/null +++ b/searx/static/less/bootstrap/bootstrap_yeti.less @@ -0,0 +1,55 @@ +// Core variables and mixins +@import "variables.less"; +@import "theme_yeti/variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; + +// own additions +@import "typeahead.less"; +@import "theme_yeti/bootswatch.less"; diff --git a/searx/static/less/bootstrap/theme_readable/bootswatch.less b/searx/static/less/bootstrap/theme_readable/bootswatch.less new file mode 100644 index 000000000..6404ff231 --- /dev/null +++ b/searx/static/less/bootstrap/theme_readable/bootswatch.less @@ -0,0 +1,187 @@ +// Readable 3.3.1 +// Bootswatch +// ----------------------------------------------------- + +@import url("//fonts.googleapis.com/css?family=Raleway:400,700"); + +// Navbar ===================================================================== + +.navbar { + font-family: @headings-font-family; + + &-nav, + &-form { + margin-left: 0; + margin-right: 0; + } + + &-nav > li > a { + padding: @padding-base-vertical @padding-base-horizontal; + margin: 12px 6px; + border: 1px solid transparent; + border-radius: @border-radius-base; + + &:hover { + border: 1px solid #ddd; + } + } + + &-nav > .active > a, + &-nav > .active > a:hover { + border: 1px solid #ddd; + } + + &-default .navbar-nav > .active > a:hover { + color: @navbar-default-link-hover-color; + } + + &-inverse .navbar-nav > .active > a:hover { + color: @navbar-inverse-link-hover-color; + } + + &-brand { + padding-top: 20px; + } +} + +@media (max-width: @grid-float-breakpoint) { + .navbar { + .navbar-nav > li > a { + margin: 0; + } + } +} + +// Buttons ==================================================================== + +.btn { + font-family: @headings-font-family; +} + +// Typography ================================================================= + +// Tables ===================================================================== + +// Forms ====================================================================== + +legend { + font-family: @headings-font-family; +} + +.input-group-addon { + font-family: @font-family-sans-serif; +} + +// Navs ======================================================================= + +.nav { + .open > a, + .open > a:hover, + .open > a:focus { + border: 1px solid #ddd; + } +} + +.pagination { + + font-family: @headings-font-family; + + &-lg > li > a, + &-lg > li > span { + padding: 14px 24px; + } +} + +.pager { + + font-family: @headings-font-family; + + a { + color: @text-color; + } + + a:hover { + border-color: transparent; + color: #fff; + } + + .disabled a { + border-color: @pager-border; + } +} + +// Indicators ================================================================= + +.close { + color: #fff; + text-decoration: none; + text-shadow: none; + opacity: 0.4; + + &:hover, + &:focus { + color: #fff; + opacity: 1; + } +} + +.alert { + .alert-link { + color: @alert-success-text; + text-decoration: underline; + } +} + +.label { + font-family: @headings-font-family; + font-weight: normal; + + &-default { + border: 1px solid #ddd; + color: @text-color; + } + +} + +.badge { + padding: 1px 7px 5px; + vertical-align: 2px; + font-family: @headings-font-family; + font-weight: normal; +} + +// Progress bars ============================================================== + +// Containers ================================================================= + +.panel { + .box-shadow(none); + + &-default { + .close { + color: @text-color; + } + } + + &-primary, + &-success, + &-warning, + &-danger, + &-info { + .panel-heading { + color: #fff; + } + + .panel-body { + border: 1px solid #ddd; + border-top-width: 0; + border-radius: 0 0 @border-radius-base @border-radius-base; + } + } +} + +.modal { + .close { + color: @text-color; + } +} diff --git a/searx/static/less/bootstrap/theme_readable/variables.less b/searx/static/less/bootstrap/theme_readable/variables.less new file mode 100644 index 000000000..071cdec93 --- /dev/null +++ b/searx/static/less/bootstrap/theme_readable/variables.less @@ -0,0 +1,856 @@ +// Readable 3.3.1 +// Variables +// -------------------------------------------------- + + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +@gray-base: #000; +@gray-darker: lighten(@gray-base, 13.5%); // #222 +@gray-dark: lighten(@gray-base, 20%); // #333 +@gray: lighten(@gray-base, 33.5%); // #555 +@gray-light: lighten(@gray-base, 70%); // #999 +@gray-lighter: lighten(@gray-base, 93.5%); // #eee + +@brand-primary: #4582EC; +@brand-success: #3FAD46; +@brand-info: #5bc0de; +@brand-warning: #f0ad4e; +@brand-danger: #d9534f; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for ``. +@body-bg: #fff; +//** Global text color on ``. +@text-color: @gray-dark; + +//** Global textual link color. +@link-color: @brand-primary; +//** Link hover color set via `darken()` function. +@link-hover-color: darken(@link-color, 20%); +//** Link hover decoration. +@link-hover-decoration: underline; + + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +@font-family-sans-serif: "Raleway", "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-serif: Georgia, "Times New Roman", Times, serif; +//** Default monospace fonts for ``, ``, and `
`.
+@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base:        @font-family-serif;
+
+@font-size-base:          16px;
+@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5:            @font-size-base;
+@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base:        1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the ``.
+@headings-font-family:    @font-family-sans-serif;
+@headings-font-weight:    bold;
+@headings-line-height:    1.1;
+@headings-color:          inherit;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path:          "../fonts/";
+//** File name for all font files.
+@icon-font-name:          "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id:        "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical:     8px;
+@padding-base-horizontal:   12px;
+
+@padding-large-vertical:    14px;
+@padding-large-horizontal:  16px;
+
+@padding-small-vertical:    5px;
+@padding-small-horizontal:  10px;
+
+@padding-xs-vertical:       1px;
+@padding-xs-horizontal:     5px;
+
+@line-height-large:         1.33;
+@line-height-small:         1.5;
+
+@border-radius-base:        4px;
+@border-radius-large:       6px;
+@border-radius-small:       3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color:    #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg:       @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base:          4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large:         5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ``s.
+@table-cell-padding:            8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding:  5px;
+
+//** Default background color used for all tables.
+@table-bg:                      transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent:               #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover:                #f5f5f5;
+@table-bg-active:               @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color:            #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight:                normal;
+
+@btn-default-color:              @text-color;
+@btn-default-bg:                 #fff;
+@btn-default-border:             #ddd;
+
+@btn-primary-color:              #fff;
+@btn-primary-bg:                 @brand-primary;
+@btn-primary-border:             @btn-primary-bg;
+
+@btn-success-color:              #fff;
+@btn-success-bg:                 @brand-success;
+@btn-success-border:             @btn-success-bg;
+
+@btn-info-color:                 #fff;
+@btn-info-bg:                    @brand-info;
+@btn-info-border:                @btn-info-bg;
+
+@btn-warning-color:              #fff;
+@btn-warning-bg:                 @brand-warning;
+@btn-warning-border:             @btn-warning-bg;
+
+@btn-danger-color:               #fff;
+@btn-danger-bg:                  @brand-danger;
+@btn-danger-border:              @btn-danger-bg;
+
+@btn-link-disabled-color:        @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+@input-bg:                       #fff;
+//** `` background color
+@input-bg-disabled:              @gray-lighter;
+
+//** Text color for ``s
+@input-color:                    @text-color;
+//** `` border color
+@input-border:                   #ddd;
+
+// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
+//** Default `.form-control` border radius
+@input-border-radius:            @border-radius-base;
+//** Large `.form-control` border radius
+@input-border-radius-large:      @border-radius-large;
+//** Small `.form-control` border radius
+@input-border-radius-small:      @border-radius-small;
+
+//** Border color for inputs on focus
+@input-border-focus:             #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder:        @gray-light;
+
+//** Default `.form-control` height
+@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color:                   @text-color;
+@legend-border-color:            #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg:           @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+//** Disabled cursor for form controls and buttons.
+@cursor-disabled:                not-allowed;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg:                    #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border:                rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border:       #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg:            #e5e5e5;
+
+//** Dropdown link text color.
+@dropdown-link-color:            @gray-dark;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color:      #fff;
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg:         @component-active-bg;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color:     #fff;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg:        @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color:   @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color:          @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color:           #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar:            1000;
+@zindex-dropdown:          1000;
+@zindex-popover:           1060;
+@zindex-tooltip:           1070;
+@zindex-navbar-fixed:      1030;
+@zindex-modal:             1040;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs:                  480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min:              @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone:               @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm:                  768px;
+@screen-sm-min:              @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet:              @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md:                  992px;
+@screen-md-min:              @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop:             @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg:                  1200px;
+@screen-lg-min:              @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop:          @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max:              (@screen-sm-min - 1);
+@screen-sm-max:              (@screen-md-min - 1);
+@screen-md-max:              (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns:              12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width:         30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint:     @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet:             (720px + @grid-gutter-width);
+//** For `@screen-sm-min` and up.
+@container-sm:                 @container-tablet;
+
+// Medium screen / desktop
+@container-desktop:            (940px + @grid-gutter-width);
+//** For `@screen-md-min` and up.
+@container-md:                 @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop:      (1140px + @grid-gutter-width);
+//** For `@screen-lg-min` and up.
+@container-lg:                 @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height:                    65px;
+@navbar-margin-bottom:             @line-height-computed;
+@navbar-border-radius:             @border-radius-base;
+@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
+@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height:       340px;
+
+@navbar-default-color:             @text-color;
+@navbar-default-bg:                @body-bg;
+@navbar-default-border:            #ddd;
+
+// Navbar links
+@navbar-default-link-color:                @link-color;
+@navbar-default-link-hover-color:          @link-color;
+@navbar-default-link-hover-bg:             transparent;
+@navbar-default-link-active-color:         @navbar-default-link-color;
+@navbar-default-link-active-bg:            transparent;
+@navbar-default-link-disabled-color:       #333;
+@navbar-default-link-disabled-bg:          transparent;
+
+// Navbar brand label
+@navbar-default-brand-color:               @navbar-default-link-color;
+@navbar-default-brand-hover-color:         @navbar-default-link-hover-color;
+@navbar-default-brand-hover-bg:            transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg:           #ddd;
+@navbar-default-toggle-icon-bar-bg:        #ccc;
+@navbar-default-toggle-border-color:       #ddd;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color:                      @text-color;
+@navbar-inverse-bg:                         @body-bg;
+@navbar-inverse-border:                     #ddd;
+
+// Inverted navbar links
+@navbar-inverse-link-color:                 @text-color;
+@navbar-inverse-link-hover-color:           @text-color;
+@navbar-inverse-link-hover-bg:              transparent;
+@navbar-inverse-link-active-color:          @text-color;
+@navbar-inverse-link-active-bg:             transparent;
+@navbar-inverse-link-disabled-color:        #ccc;
+@navbar-inverse-link-disabled-bg:           transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color:                @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color:          @navbar-inverse-link-hover-color;
+@navbar-inverse-brand-hover-bg:             transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg:            #ddd;
+@navbar-inverse-toggle-icon-bar-bg:         #ccc;
+@navbar-inverse-toggle-border-color:        #ddd;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding:                          10px 15px;
+@nav-link-hover-bg:                         @gray-lighter;
+
+@nav-disabled-link-color:                   @gray-light;
+@nav-disabled-link-hover-color:             @gray-light;
+
+//== Tabs
+@nav-tabs-border-color:                     #ddd;
+
+@nav-tabs-link-hover-border-color:          @gray-lighter;
+
+@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-color:          @gray;
+@nav-tabs-active-link-hover-border-color:   #ddd;
+
+@nav-tabs-justified-link-border-color:            #ddd;
+@nav-tabs-justified-active-link-border-color:     @body-bg;
+
+//== Pills
+@nav-pills-border-radius:                   @border-radius-base;
+@nav-pills-active-link-hover-bg:            @component-active-bg;
+@nav-pills-active-link-hover-color:         @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color:                     @text-color;
+@pagination-bg:                        #fff;
+@pagination-border:                    #ddd;
+
+@pagination-hover-color:               #fff;
+@pagination-hover-bg:                  @brand-primary;
+@pagination-hover-border:              @brand-primary;
+
+@pagination-active-color:              #fff;
+@pagination-active-bg:                 @brand-primary;
+@pagination-active-border:             @brand-primary;
+
+@pagination-disabled-color:            @gray-light;
+@pagination-disabled-bg:               #fff;
+@pagination-disabled-border:           #ddd;
+
+
+//== Pager
+//
+//##
+
+@pager-bg:                             @pagination-bg;
+@pager-border:                         @pagination-border;
+@pager-border-radius:                  15px;
+
+@pager-hover-bg:                       @pagination-hover-bg;
+
+@pager-active-bg:                      @pagination-active-bg;
+@pager-active-color:                   @pagination-active-color;
+
+@pager-disabled-color:                 @gray-light;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding:              30px;
+@jumbotron-color:                inherit;
+@jumbotron-bg:                   darken(@body-bg, 3%);
+@jumbotron-heading-color:        inherit;
+@jumbotron-font-size:            ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text:             @brand-success;
+@state-success-bg:               #dff0d8;
+@state-success-border:           @brand-success;
+
+@state-info-text:                @brand-info;
+@state-info-bg:                  #d9edf7;
+@state-info-border:              @brand-info;
+
+@state-warning-text:             @brand-warning;
+@state-warning-bg:               #fcf8e3;
+@state-warning-border:           @brand-warning;
+
+@state-danger-text:              @brand-danger;
+@state-danger-bg:                #f2dede;
+@state-danger-border:            @brand-danger;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width:           200px;
+//** Tooltip text color
+@tooltip-color:               #fff;
+//** Tooltip background color
+@tooltip-bg:                  rgba(0,0,0,.9);
+@tooltip-opacity:             .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width:         5px;
+//** Tooltip arrow color
+@tooltip-arrow-color:         @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg:                          #fff;
+//** Popover maximum width
+@popover-max-width:                   276px;
+//** Popover border color
+@popover-border-color:                rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color:       #ccc;
+
+//** Popover title background color
+@popover-title-bg:                    darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width:                 10px;
+//** Popover arrow color
+@popover-arrow-color:                 @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width:           (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg:            @btn-default-bg;
+//** Primary label background color
+@label-primary-bg:            @brand-primary;
+//** Success label background color
+@label-success-bg:            @brand-success;
+//** Info label background color
+@label-info-bg:               @brand-info;
+//** Warning label background color
+@label-warning-bg:            @brand-warning;
+//** Danger label background color
+@label-danger-bg:             @brand-danger;
+
+//** Default label text color
+@label-color:                 #fff;
+//** Default text color of a linked label
+@label-link-hover-color:      #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding:         20px;
+
+//** Padding applied to the modal title
+@modal-title-padding:         15px;
+//** Modal title line-height
+@modal-title-line-height:     @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg:                             #fff;
+//** Modal content border color
+@modal-content-border-color:                   rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color:          #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg:           #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity:      .5;
+//** Modal header border color
+@modal-header-border-color:   #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color:   @modal-header-border-color;
+
+@modal-lg:                    900px;
+@modal-md:                    600px;
+@modal-sm:                    300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding:               15px;
+@alert-border-radius:         @border-radius-base;
+@alert-link-font-weight:      bold;
+
+@alert-success-bg:            @state-success-border;
+@alert-success-text:          #fff;
+@alert-success-border:        @state-success-border;
+
+@alert-info-bg:               @state-info-border;
+@alert-info-text:             #fff;
+@alert-info-border:           @state-info-border;
+
+@alert-warning-bg:            @state-warning-border;
+@alert-warning-text:          #fff;
+@alert-warning-border:        @state-warning-border;
+
+@alert-danger-bg:             @state-danger-border;
+@alert-danger-text:           #fff;
+@alert-danger-border:         @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg:                 #f5f5f5;
+//** Progress bar text color
+@progress-bar-color:          #fff;
+//** Variable for setting rounded corners on progress bar.
+@progress-border-radius:      @border-radius-base;
+
+//** Default progress bar color
+@progress-bar-bg:             @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg:     @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg:     @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg:      @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg:        @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg:                 #fff;
+//** `.list-group-item` border color
+@list-group-border:             #ddd;
+//** List group border radius
+@list-group-border-radius:      @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg:           #f5f5f5;
+//** Text color of active list items
+@list-group-active-color:       @component-active-color;
+//** Background color of active list items
+@list-group-active-bg:          @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border:      @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color:      @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg:         @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color:         #555;
+@list-group-link-hover-color:   @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg:                    #fff;
+@panel-body-padding:          15px;
+@panel-heading-padding:       10px 15px;
+@panel-footer-padding:        @panel-heading-padding;
+@panel-border-radius:         @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border:          #ddd;
+@panel-footer-bg:             #fff;
+
+@panel-default-text:          @gray-dark;
+@panel-default-border:        #ddd;
+@panel-default-heading-bg:    #f5f5f5;
+
+@panel-primary-text:          #fff;
+@panel-primary-border:        transparent;
+@panel-primary-heading-bg:    @brand-primary;
+
+@panel-success-text:          @state-success-text;
+@panel-success-border:        transparent;
+@panel-success-heading-bg:    @state-success-border;
+
+@panel-info-text:             @state-info-text;
+@panel-info-border:           transparent;
+@panel-info-heading-bg:       @state-info-border;
+
+@panel-warning-text:          @state-warning-text;
+@panel-warning-border:        transparent;
+@panel-warning-heading-bg:    @state-warning-border;
+
+@panel-danger-text:           @state-danger-text;
+@panel-danger-border:         transparent;
+@panel-danger-heading-bg:     @state-danger-border;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding:           4px;
+//** Thumbnail background color
+@thumbnail-bg:                @body-bg;
+//** Thumbnail border color
+@thumbnail-border:            #ddd;
+//** Thumbnail border radius
+@thumbnail-border-radius:     @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color:     @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding:   9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg:                     darken(@body-bg, 3%);
+@well-border:                 darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color:                 #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color:      #fff;
+@badge-bg:                    @brand-primary;
+
+//** Badge text color in active nav link
+@badge-active-color:          @link-color;
+//** Badge background color in active nav link
+@badge-active-bg:             #fff;
+
+@badge-font-weight:           bold;
+@badge-line-height:           1;
+@badge-border-radius:         10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical:   8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg:                 #f5f5f5;
+//** Breadcrumb text color
+@breadcrumb-color:              #ccc;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color:       @gray-light;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator:          "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color:                      #fff;
+@carousel-control-width:                      15%;
+@carousel-control-opacity:                    .5;
+@carousel-control-font-size:                  20px;
+
+@carousel-indicator-active-bg:                #fff;
+@carousel-indicator-border-color:             #fff;
+
+@carousel-caption-color:                      #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight:           bold;
+@close-color:                 #fff;
+@close-text-shadow:           0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color:                  #c7254e;
+@code-bg:                     #f9f2f4;
+
+@kbd-color:                   #fff;
+@kbd-bg:                      #333;
+
+@pre-bg:                      #f5f5f5;
+@pre-color:                   @gray-dark;
+@pre-border-color:            #ccc;
+@pre-scrollable-max-height:   340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted:                  @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color:           @gray-light;
+//** Headings small color
+@headings-small-color:        @gray-light;
+//** Blockquote small color
+@blockquote-small-color:      @text-color;
+//** Blockquote font size
+@blockquote-font-size:        (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color:     @brand-primary;
+//** Page header border color
+@page-header-border-color:    #ddd;
+//** Width of horizontal description list titles
+@dl-horizontal-offset:        @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border:                   @gray-lighter;
diff --git a/searx/static/less/bootstrap/theme_simplex/bootswatch.less b/searx/static/less/bootstrap/theme_simplex/bootswatch.less
new file mode 100644
index 000000000..b0e4323d4
--- /dev/null
+++ b/searx/static/less/bootstrap/theme_simplex/bootswatch.less
@@ -0,0 +1,142 @@
+// Simplex 3.3.1
+// Bootswatch
+// -----------------------------------------------------
+
+@import url("//fonts.googleapis.com/css?family=Open+Sans:400,700");
+
+.btn-shadow(@color) {
+  #gradient > .vertical-three-colors(lighten(@color, 3%), @color, 6%, darken(@color, 3%));
+  filter: none;
+  border: 1px solid darken(@color, 10%);
+}
+
+// Navbar =====================================================================
+
+.navbar {
+
+  &-inverse {
+
+    .badge {
+      background-color: #fff;
+      color: @brand-primary;
+    }
+  }
+}
+
+// Buttons ====================================================================
+
+.btn {
+  font-family: @headings-font-family;
+}
+
+.btn-default,
+.btn-default:hover {
+  .btn-shadow(@btn-default-bg);
+}
+
+.btn-primary,
+.btn-primary:hover {
+  .btn-shadow(@btn-primary-bg);
+}
+
+.btn-success,
+.btn-success:hover {
+  .btn-shadow(@btn-success-bg);
+}
+
+.btn-info,
+.btn-info:hover {
+  .btn-shadow(@btn-info-bg);
+}
+
+.btn-warning,
+.btn-warning:hover {
+  .btn-shadow(@btn-warning-bg);
+}
+
+.btn-danger,
+.btn-danger:hover {
+  .btn-shadow(@btn-danger-bg);
+}
+
+// Typography =================================================================
+
+body {
+  font-weight: 200;
+}
+
+// Tables =====================================================================
+
+th {
+  color: @headings-color;
+}
+
+// Forms ======================================================================
+
+legend {
+  color: @headings-color;
+}
+
+label {
+  font-weight: normal;
+}
+
+.has-warning {
+  .help-block,
+  .control-label {
+    color: @brand-danger;
+  }
+
+  .form-control,
+  .form-control:focus {
+    border-color: @brand-danger;
+  }
+}
+
+.has-error {
+  .help-block,
+  .control-label {
+    color: @brand-primary;
+  }
+
+  .form-control,
+  .form-control:focus {
+    border-color: @brand-primary;
+  }
+}
+
+.has-success {
+  .help-block,
+  .control-label {
+    color: @brand-success;
+  }
+
+  .form-control,
+  .form-control:focus {
+    border-color: @brand-success;
+  }
+}
+
+// Navs =======================================================================
+
+.pager {
+  a {
+    color: @headings-color;
+  }
+
+  a:hover,
+  .active > a, {
+    border-color: @brand-primary;
+    color: #fff;
+  }
+
+  .disabled > a {
+    border-color: @pager-border;
+  }
+}
+
+// Indicators =================================================================
+
+// Progress bars ==============================================================
+
+// Containers =================================================================
\ No newline at end of file
diff --git a/searx/static/less/bootstrap/theme_simplex/variables.less b/searx/static/less/bootstrap/theme_simplex/variables.less
new file mode 100644
index 000000000..d3477b349
--- /dev/null
+++ b/searx/static/less/bootstrap/theme_simplex/variables.less
@@ -0,0 +1,856 @@
+// Simplex 3.3.1
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-base:              #000;
+@gray-darker:            lighten(@gray-base, 13.5%); // #222
+@gray-dark:              #444;
+@gray:                   #777;
+@gray-light:             #808080;
+@gray-lighter:           #ddd;
+
+@brand-primary:         #D9230F;
+@brand-success:         #469408;
+@brand-info:            #029ACF;
+@brand-warning:         #9B479F;
+@brand-danger:          #D9831F;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for ``.
+@body-bg:               #FCFCFC;
+//** Global text color on ``.
+@text-color:            @gray;
+
+//** Global textual link color.
+@link-color:            @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color:      darken(@link-color, 15%);
+//** Link hover decoration.
+@link-hover-decoration: underline;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-sans-serif:  "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+@font-family-serif:       Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for ``, ``, and `
`.
+@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base:        @font-family-sans-serif;
+
+@font-size-base:          13px;
+@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5:            @font-size-base;
+@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base:        1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the ``.
+@headings-font-family:    @font-family-sans-serif;
+@headings-font-weight:    300;
+@headings-line-height:    1.1;
+@headings-color:          @gray-dark;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path:          "../fonts/";
+//** File name for all font files.
+@icon-font-name:          "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id:        "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical:     8px;
+@padding-base-horizontal:   12px;
+
+@padding-large-vertical:    14px;
+@padding-large-horizontal:  16px;
+
+@padding-small-vertical:    5px;
+@padding-small-horizontal:  10px;
+
+@padding-xs-vertical:       1px;
+@padding-xs-horizontal:     5px;
+
+@line-height-large:         1.33;
+@line-height-small:         1.5;
+
+@border-radius-base:        4px;
+@border-radius-large:       6px;
+@border-radius-small:       3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color:    #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg:       @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base:          4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large:         5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ``s.
+@table-cell-padding:            8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding:  5px;
+
+//** Default background color used for all tables.
+@table-bg:                      transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent:               #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover:                #f5f5f5;
+@table-bg-active:               @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color:            #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight:                normal;
+
+@btn-default-color:              #fff;
+@btn-default-bg:                 #474949;
+@btn-default-border:             @btn-default-bg;
+
+@btn-primary-color:              @btn-default-color;
+@btn-primary-bg:                 @brand-primary;
+@btn-primary-border:             @btn-primary-bg;
+
+@btn-success-color:              @btn-default-color;
+@btn-success-bg:                 @brand-success;
+@btn-success-border:             @btn-success-bg;
+
+@btn-info-color:                 @btn-default-color;
+@btn-info-bg:                    @brand-info;
+@btn-info-border:                @btn-info-bg;
+
+@btn-warning-color:              @btn-default-color;
+@btn-warning-bg:                 @brand-warning;
+@btn-warning-border:             @btn-warning-bg;
+
+@btn-danger-color:               @btn-default-color;
+@btn-danger-bg:                  @brand-danger;
+@btn-danger-border:              @btn-danger-bg;
+
+@btn-link-disabled-color:        @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+@input-bg:                       #fff;
+//** `` background color
+@input-bg-disabled:              @gray-lighter;
+
+//** Text color for ``s
+@input-color:                    @text-color;
+//** `` border color
+@input-border:                   #ddd;
+
+// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
+//** Default `.form-control` border radius
+@input-border-radius:            @border-radius-base;
+//** Large `.form-control` border radius
+@input-border-radius-large:      @border-radius-large;
+//** Small `.form-control` border radius
+@input-border-radius-small:      @border-radius-small;
+
+//** Border color for inputs on focus
+@input-border-focus:             #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder:        @gray-lighter;
+
+//** Default `.form-control` height
+@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color:                   @text-color;
+@legend-border-color:            #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg:           @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+//** Disabled cursor for form controls and buttons.
+@cursor-disabled:                not-allowed;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg:                    #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border:                rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border:       #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg:            #e5e5e5;
+
+//** Dropdown link text color.
+@dropdown-link-color:            @gray-dark;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color:      #fff;
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg:         @component-active-bg;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color:     #fff;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg:        @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color:   @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color:          @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color:           #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar:            1000;
+@zindex-dropdown:          1000;
+@zindex-popover:           1060;
+@zindex-tooltip:           1070;
+@zindex-navbar-fixed:      1030;
+@zindex-modal:             1040;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs:                  480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min:              @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone:               @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm:                  768px;
+@screen-sm-min:              @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet:              @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md:                  992px;
+@screen-md-min:              @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop:             @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg:                  1200px;
+@screen-lg-min:              @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop:          @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max:              (@screen-sm-min - 1);
+@screen-sm-max:              (@screen-md-min - 1);
+@screen-md-max:              (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns:              12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width:         30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint:     @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet:             (720px + @grid-gutter-width);
+//** For `@screen-sm-min` and up.
+@container-sm:                 @container-tablet;
+
+// Medium screen / desktop
+@container-desktop:            (940px + @grid-gutter-width);
+//** For `@screen-md-min` and up.
+@container-md:                 @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop:      (1140px + @grid-gutter-width);
+//** For `@screen-lg-min` and up.
+@container-lg:                 @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height:                    40px;
+@navbar-margin-bottom:             @line-height-computed;
+@navbar-border-radius:             @border-radius-base;
+@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
+@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height:       340px;
+
+@navbar-default-color:             @gray;
+@navbar-default-bg:                #fff;
+@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
+
+// Navbar links
+@navbar-default-link-color:                @gray;
+@navbar-default-link-hover-color:          @brand-primary;
+@navbar-default-link-hover-bg:             transparent;
+@navbar-default-link-active-color:         @navbar-default-link-hover-color;
+@navbar-default-link-active-bg:            transparent;
+@navbar-default-link-disabled-color:       #444;
+@navbar-default-link-disabled-bg:          transparent;
+
+// Navbar brand label
+@navbar-default-brand-color:               @navbar-default-link-color;
+@navbar-default-brand-hover-color:         @navbar-default-link-hover-color;
+@navbar-default-brand-hover-bg:            transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg:           #ddd;
+@navbar-default-toggle-icon-bar-bg:        #ccc;
+@navbar-default-toggle-border-color:       #ddd;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color:                      lighten(@brand-primary, 40%);
+@navbar-inverse-bg:                         @brand-primary;
+@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color:                 lighten(@brand-primary, 40%);
+@navbar-inverse-link-hover-color:           #fff;
+@navbar-inverse-link-hover-bg:              transparent;
+@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg:             transparent;
+@navbar-inverse-link-disabled-color:        #ccc;
+@navbar-inverse-link-disabled-bg:           transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color:                @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color:          #fff;
+@navbar-inverse-brand-hover-bg:             transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg:            darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-toggle-icon-bar-bg:         #fff;
+@navbar-inverse-toggle-border-color:        darken(@navbar-inverse-bg, 10%);
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding:                          10px 15px;
+@nav-link-hover-bg:                         @gray-lighter;
+
+@nav-disabled-link-color:                   @gray-light;
+@nav-disabled-link-hover-color:             @gray-light;
+
+//== Tabs
+@nav-tabs-border-color:                     #ddd;
+
+@nav-tabs-link-hover-border-color:          @gray-lighter;
+
+@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-color:          @gray;
+@nav-tabs-active-link-hover-border-color:   #ddd;
+
+@nav-tabs-justified-link-border-color:            #ddd;
+@nav-tabs-justified-active-link-border-color:     @body-bg;
+
+//== Pills
+@nav-pills-border-radius:                   @border-radius-base;
+@nav-pills-active-link-hover-bg:            @component-active-bg;
+@nav-pills-active-link-hover-color:         @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color:                     @headings-color;
+@pagination-bg:                        #fff;
+@pagination-border:                    #ddd;
+
+@pagination-hover-color:               #fff;
+@pagination-hover-bg:                  @brand-primary;
+@pagination-hover-border:              @brand-primary;
+
+@pagination-active-color:              #fff;
+@pagination-active-bg:                 @brand-primary;
+@pagination-active-border:             @brand-primary;
+
+@pagination-disabled-color:            @gray-lighter;
+@pagination-disabled-bg:               #fff;
+@pagination-disabled-border:           #ddd;
+
+
+//== Pager
+//
+//##
+
+@pager-bg:                             @pagination-bg;
+@pager-border:                         @pagination-border;
+@pager-border-radius:                  15px;
+
+@pager-hover-bg:                       @brand-primary;
+
+@pager-active-bg:                      @brand-primary;
+@pager-active-color:                   #fff;
+
+@pager-disabled-color:                 @gray-lighter;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding:              30px;
+@jumbotron-color:                inherit;
+@jumbotron-bg:                   darken(@body-bg, 3%);
+@jumbotron-heading-color:        inherit;
+@jumbotron-font-size:            ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text:             #468847;
+@state-success-bg:               #dff0d8;
+@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
+
+@state-info-text:                #3a87ad;
+@state-info-bg:                  #d9edf7;
+@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
+
+@state-warning-text:             #c09853;
+@state-warning-bg:               #fcf8e3;
+@state-warning-border:           darken(spin(@state-warning-bg, -10), 3%);
+
+@state-danger-text:              #b94a48;
+@state-danger-bg:                #f2dede;
+@state-danger-border:            darken(spin(@state-danger-bg, -10), 3%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width:           200px;
+//** Tooltip text color
+@tooltip-color:               #fff;
+//** Tooltip background color
+@tooltip-bg:                  rgba(0,0,0,.9);
+@tooltip-opacity:             .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width:         5px;
+//** Tooltip arrow color
+@tooltip-arrow-color:         @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg:                          #fff;
+//** Popover maximum width
+@popover-max-width:                   276px;
+//** Popover border color
+@popover-border-color:                rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color:       #ccc;
+
+//** Popover title background color
+@popover-title-bg:                    darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width:                 10px;
+//** Popover arrow color
+@popover-arrow-color:                 @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width:           (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg:            @btn-default-bg;
+//** Primary label background color
+@label-primary-bg:            @brand-primary;
+//** Success label background color
+@label-success-bg:            @brand-success;
+//** Info label background color
+@label-info-bg:               @brand-info;
+//** Warning label background color
+@label-warning-bg:            @brand-warning;
+//** Danger label background color
+@label-danger-bg:             @brand-danger;
+
+//** Default label text color
+@label-color:                 #fff;
+//** Default text color of a linked label
+@label-link-hover-color:      #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding:         20px;
+
+//** Padding applied to the modal title
+@modal-title-padding:         15px;
+//** Modal title line-height
+@modal-title-line-height:     @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg:                             #fff;
+//** Modal content border color
+@modal-content-border-color:                   rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color:          #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg:           #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity:      .5;
+//** Modal header border color
+@modal-header-border-color:   #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color:   @modal-header-border-color;
+
+@modal-lg:                    900px;
+@modal-md:                    600px;
+@modal-sm:                    300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding:               15px;
+@alert-border-radius:         @border-radius-base;
+@alert-link-font-weight:      bold;
+
+@alert-success-bg:            @state-success-bg;
+@alert-success-text:          @state-success-text;
+@alert-success-border:        @state-success-border;
+
+@alert-info-bg:               @state-info-bg;
+@alert-info-text:             @state-info-text;
+@alert-info-border:           @state-info-border;
+
+@alert-warning-bg:            @state-warning-bg;
+@alert-warning-text:          @state-warning-text;
+@alert-warning-border:        @state-warning-border;
+
+@alert-danger-bg:             @state-danger-bg;
+@alert-danger-text:           @state-danger-text;
+@alert-danger-border:         @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg:                 #f5f5f5;
+//** Progress bar text color
+@progress-bar-color:          #fff;
+//** Variable for setting rounded corners on progress bar.
+@progress-border-radius:      @border-radius-base;
+
+//** Default progress bar color
+@progress-bar-bg:             @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg:     @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg:     @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg:      @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg:        @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg:                 #fff;
+//** `.list-group-item` border color
+@list-group-border:             #ddd;
+//** List group border radius
+@list-group-border-radius:      @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg:           #f5f5f5;
+//** Text color of active list items
+@list-group-active-color:       @component-active-color;
+//** Background color of active list items
+@list-group-active-bg:          @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border:      @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color:      @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg:         @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color:         #555;
+@list-group-link-hover-color:   @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg:                    #fff;
+@panel-body-padding:          15px;
+@panel-heading-padding:       10px 15px;
+@panel-footer-padding:        @panel-heading-padding;
+@panel-border-radius:         @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border:          #ddd;
+@panel-footer-bg:             @body-bg;
+
+@panel-default-text:          @gray-dark;
+@panel-default-border:        #ddd;
+@panel-default-heading-bg:    @panel-footer-bg;
+
+@panel-primary-text:          #fff;
+@panel-primary-border:        @brand-primary;
+@panel-primary-heading-bg:    @brand-primary;
+
+@panel-success-text:          #fff;
+@panel-success-border:        @brand-success;
+@panel-success-heading-bg:    @brand-success;
+
+@panel-info-text:             #fff;
+@panel-info-border:           @brand-info;
+@panel-info-heading-bg:       @brand-info;
+
+@panel-warning-text:          #fff;
+@panel-warning-border:        @brand-warning;
+@panel-warning-heading-bg:    @brand-warning;
+
+@panel-danger-text:           #fff;
+@panel-danger-border:         @brand-danger;
+@panel-danger-heading-bg:     @brand-danger;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding:           4px;
+//** Thumbnail background color
+@thumbnail-bg:                @body-bg;
+//** Thumbnail border color
+@thumbnail-border:            #ddd;
+//** Thumbnail border radius
+@thumbnail-border-radius:     @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color:     @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding:   9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg:                     darken(@body-bg, 3%);
+@well-border:                 darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color:                 #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color:      #fff;
+@badge-bg:                    @link-color;
+
+//** Badge text color in active nav link
+@badge-active-color:          @link-color;
+//** Badge background color in active nav link
+@badge-active-bg:             #fff;
+
+@badge-font-weight:           bold;
+@badge-line-height:           1;
+@badge-border-radius:         10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical:   8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg:                 transparent;
+//** Breadcrumb text color
+@breadcrumb-color:              #ccc;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color:       @gray-light;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator:          "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color:                      #fff;
+@carousel-control-width:                      15%;
+@carousel-control-opacity:                    .5;
+@carousel-control-font-size:                  20px;
+
+@carousel-indicator-active-bg:                #fff;
+@carousel-indicator-border-color:             #fff;
+
+@carousel-caption-color:                      #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight:           bold;
+@close-color:                 #000;
+@close-text-shadow:           0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color:                  #c7254e;
+@code-bg:                     #f9f2f4;
+
+@kbd-color:                   #fff;
+@kbd-bg:                      #333;
+
+@pre-bg:                      #f5f5f5;
+@pre-color:                   @gray-dark;
+@pre-border-color:            #ccc;
+@pre-scrollable-max-height:   340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted:                  @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color:           @gray-light;
+//** Headings small color
+@headings-small-color:        @gray-light;
+//** Blockquote small color
+@blockquote-small-color:      @gray-light;
+//** Blockquote font size
+@blockquote-font-size:        (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color:     @gray-lighter;
+//** Page header border color
+@page-header-border-color:    @gray-lighter;
+//** Width of horizontal description list titles
+@dl-horizontal-offset:        @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border:                   @gray-lighter;
diff --git a/searx/static/less/bootstrap/theme_yeti/bootswatch.less b/searx/static/less/bootstrap/theme_yeti/bootswatch.less
new file mode 100644
index 000000000..44ab1c71a
--- /dev/null
+++ b/searx/static/less/bootstrap/theme_yeti/bootswatch.less
@@ -0,0 +1,437 @@
+// Yeti 3.3.1
+// Bootswatch
+// -----------------------------------------------------
+
+@import url("//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,700italic,400,300,700");
+
+// Navbar =====================================================================
+
+.navbar {
+  border: none;
+  font-size: 13px;
+  font-weight: 300;
+
+  .navbar-toggle:hover .icon-bar {
+    background-color: #b3b3b3;
+  }
+
+  &-collapse {
+    border-top-color: @dropdown-divider-bg;
+    .box-shadow(none);
+  }
+
+  .btn {
+    padding-top: 6px;
+    padding-bottom: 6px;
+  }
+
+  &-form {
+    margin-top: 7px;
+    margin-bottom: 5px;
+
+    .form-control {
+      height: auto;
+      padding: @padding-xs-vertical @padding-xs-horizontal;
+    }
+  }
+
+  .dropdown {
+
+    &-menu {
+      border: none;
+
+      > li > a,
+      > li > a:focus {
+        background-color: transparent;
+        font-size: 13px;
+        font-weight: 300;
+      }
+    }
+
+    &-header {
+      color: rgba(255, 255, 255, 0.5);
+    }
+
+  }
+
+  &-default {
+
+    .dropdown-menu {
+      background-color: @navbar-default-bg;
+
+      > li > a,
+      > li > a:focus {
+        color: @navbar-default-color;
+      }
+
+      > li > a:hover,
+      > .active > a,
+      > .active > a:hover {
+        background-color: @navbar-default-link-hover-bg;
+      }
+    }
+  }
+
+  &-inverse {
+
+    .dropdown-menu {
+      background-color: @navbar-inverse-bg;
+
+      > li > a,
+      > li > a:focus {
+        color: @navbar-inverse-color;
+      }
+
+      > li > a:hover,
+      > .active > a,
+      > .active > a:hover {
+        background-color: @navbar-inverse-link-hover-bg;
+      }
+    }
+  }
+}
+
+// Buttons ====================================================================
+
+.btn {
+  padding: @padding-base-vertical @padding-base-horizontal;
+
+  &-lg {
+    padding: @padding-large-vertical @padding-large-horizontal;
+  }
+
+  &-sm {
+    padding: @padding-small-vertical @padding-small-horizontal;
+  }
+
+  &-xs {
+    padding: @padding-xs-vertical @padding-xs-horizontal;
+  }
+}
+
+.btn-group {
+
+  .btn ~ .dropdown-toggle {
+    padding-left: 16px;
+    padding-right: 16px;
+  }
+
+  .dropdown-menu {
+    border-top-width: 0;
+  }
+
+  &.dropup .dropdown-menu {
+    border-top-width: 1px;
+    border-bottom-width: 0;
+    margin-bottom: 0;
+  }
+
+  .dropdown-toggle {
+
+    &.btn-default ~ .dropdown-menu {
+      background-color: @btn-default-bg;
+      border-color: @btn-default-border;
+
+      > li > a {
+        color: @btn-default-color;
+      }
+
+      > li > a:hover {
+        background-color: darken(@btn-default-bg, 8%);
+      }
+    }
+
+    &.btn-primary ~ .dropdown-menu {
+      background-color: @btn-primary-bg;
+      border-color: @btn-primary-border;
+
+      > li > a {
+        color: @btn-primary-color;
+      }
+
+      > li > a:hover {
+        background-color: darken(@btn-primary-bg, 8%);
+      }
+    }
+
+    &.btn-success ~ .dropdown-menu {
+      background-color: @btn-success-bg;
+      border-color: @btn-success-border;
+
+      > li > a {
+        color: @btn-success-color;
+      }
+
+      > li > a:hover {
+        background-color: darken(@btn-success-bg, 8%);
+      }
+    }
+
+    &.btn-info ~ .dropdown-menu {
+      background-color: @btn-info-bg;
+      border-color: @btn-info-border;
+
+      > li > a {
+        color: @btn-info-color;
+      }
+
+      > li > a:hover {
+        background-color: darken(@btn-info-bg, 8%);
+      }
+    }
+
+    &.btn-warning ~ .dropdown-menu {
+      background-color: @btn-warning-bg;
+      border-color: @btn-warning-border;
+
+      > li > a {
+        color: @btn-warning-color;
+      }
+
+      > li > a:hover {
+        background-color: darken(@btn-warning-bg, 8%);
+      }
+    }
+
+    &.btn-danger ~ .dropdown-menu {
+      background-color: @btn-danger-bg;
+      border-color: @btn-danger-border;
+
+      > li > a {
+        color: @btn-danger-color;
+      }
+
+      > li > a:hover {
+        background-color: darken(@btn-danger-bg, 8%);
+      }
+    }
+  }
+}
+
+// Typography =================================================================
+
+.lead {
+  color: @gray;
+}
+
+cite {
+  font-style: italic;
+}
+
+blockquote {
+  border-left-width: 1px;
+  color: @gray;
+
+  &.pull-right {
+    border-right-width: 1px;
+  }
+
+  small {
+    font-size: @font-size-small;
+    font-weight: 300;
+  }
+}
+
+// Tables =====================================================================
+
+table {
+  font-size: @font-size-small;
+}
+
+// Forms ======================================================================
+
+label,
+.control-label,
+.help-block,
+.checkbox,
+.radio {
+  font-size: @font-size-small;
+  font-weight: normal;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+  margin-top: 1px;
+}
+
+// Navs =======================================================================
+
+.nav {
+  .open > a,
+  .open > a:hover,
+  .open > a:focus {
+    border-color: transparent;
+  }
+}
+
+.nav-tabs {
+  > li > a {
+    background-color: @btn-default-bg;
+    color: @text-color;
+  }
+
+  .caret {
+    border-top-color: @text-color;
+    border-bottom-color: @text-color;
+  }
+}
+
+.nav-pills {
+  font-weight: 300;
+}
+
+.breadcrumb {
+  border: 1px solid @table-border-color;
+  border-radius: 3px;
+  font-size: 10px;
+  font-weight: 300;
+  text-transform: uppercase;
+}
+
+.pagination {
+  font-size: @font-size-small;
+  font-weight: 300;
+  color: @gray-light;
+
+  > li {
+    > a,
+    > span {
+      margin-left: 4px;
+      color: @gray-light;
+    }
+  }
+
+  > .active {
+    > a,
+    > span {
+      color: #fff;
+    }
+  }
+
+  > li,
+  > li:first-child,
+  > li:last-child {
+    > a,
+    > span {
+      border-radius: 3px;
+    }
+  }
+
+  &-lg > li > a {
+    padding-left: 22px;
+    padding-right: 22px;
+  }
+
+  &-sm > li > a {
+    padding: 0 5px;
+  }
+}
+
+.pager {
+  font-size: @font-size-small;
+  font-weight: 300;
+  color: @gray-light;
+}
+
+.list-group {
+  font-size: @font-size-small;
+  font-weight: 300;
+}
+
+// Indicators =================================================================
+
+.close {
+  opacity: 0.4;
+  text-decoration: none;
+  text-shadow: none;
+
+  &:hover,
+  &:focus {
+    opacity: 1;
+  }
+}
+
+.alert {
+  font-size: @font-size-small;
+  font-weight: 300;
+
+  .alert-link {
+    font-weight: normal;
+    color: #fff;
+    text-decoration: underline;
+  }
+}
+
+.label {
+  padding-left: 1em;
+  padding-right: 1em;
+  border-radius: 0;
+  font-weight: 300;
+
+  &-default {
+    background-color: @btn-default-bg;
+    color: @btn-default-color;
+  }
+}
+
+.badge {
+  font-weight: 300;
+}
+
+// Progress bars ==============================================================
+
+.progress {
+  height: 22px;
+  padding: 2px;
+  background-color: #f6f6f6;
+  border: 1px solid #ccc;
+  .box-shadow(none);
+}
+
+// Containers =================================================================
+
+.dropdown {
+
+  &-menu {
+    padding: 0;
+    margin-top: 0;
+    font-size: @font-size-small;
+
+    > li > a {
+      padding: 12px 15px;
+    }
+  }
+
+  &-header {
+    padding-left: 15px;
+    padding-right: 15px;
+    font-size: 9px;
+    text-transform: uppercase;
+  }
+}
+
+.popover {
+  color: #fff;
+  font-size: 12px;
+  font-weight: 300;
+}
+
+.panel {
+  &-heading,
+  &-footer {
+    border-top-right-radius: 0;
+    border-top-left-radius: 0;
+  }
+
+  &-default {
+    .close {
+      color: @text-color;
+    }
+  }
+}
+
+.modal {
+  .close {
+    color: @text-color;
+  }
+}
diff --git a/searx/static/less/bootstrap/theme_yeti/variables.less b/searx/static/less/bootstrap/theme_yeti/variables.less
new file mode 100644
index 000000000..af51f2f42
--- /dev/null
+++ b/searx/static/less/bootstrap/theme_yeti/variables.less
@@ -0,0 +1,856 @@
+// Yeti 3.3.1
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-base:              #000;
+@gray-darker:            lighten(@gray-base, 13.5%); // #222
+@gray-dark:              lighten(@gray-base, 20%);   // #333
+@gray:                   #6f6f6f; // #555
+@gray-light:             lighten(@gray-base, 60%);   // #999
+@gray-lighter:           lighten(@gray-base, 93.5%); // #eee
+
+@brand-primary:         #008cba;
+@brand-success:         #43ac6a;
+@brand-info:            #5bc0de;
+@brand-warning:         #E99002;
+@brand-danger:          #F04124;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for ``.
+@body-bg:               #fff;
+//** Global text color on ``.
+@text-color:            @gray-darker;
+
+//** Global textual link color.
+@link-color:            @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color:      darken(@link-color, 15%);
+//** Link hover decoration.
+@link-hover-decoration: underline;
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-sans-serif:  "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+@font-family-serif:       Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for ``, ``, and `
`.
+@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base:        @font-family-sans-serif;
+
+@font-size-base:          15px;
+@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small:         12px; // ~12px
+
+@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5:            @font-size-base;
+@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base:        1.4;
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the ``.
+@headings-font-family:    @font-family-base;
+@headings-font-weight:    300;
+@headings-line-height:    1.1;
+@headings-color:          inherit;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path:          "../fonts/";
+//** File name for all font files.
+@icon-font-name:          "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id:        "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical:     8px;
+@padding-base-horizontal:   12px;
+
+@padding-large-vertical:    16px;
+@padding-large-horizontal:  20px;
+
+@padding-small-vertical:    8px;
+@padding-small-horizontal:  12px;
+
+@padding-xs-vertical:       4px;
+@padding-xs-horizontal:     6px;
+
+@line-height-large:         1.33;
+@line-height-small:         1.5;
+
+@border-radius-base:        0;
+@border-radius-large:       0;
+@border-radius-small:       0;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color:    #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg:       @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base:          4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large:         5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ``s.
+@table-cell-padding:            8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding:  5px;
+
+//** Default background color used for all tables.
+@table-bg:                      transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent:               #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover:                #f5f5f5;
+@table-bg-active:               @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color:            #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight:                normal;
+
+@btn-default-color:              @gray-dark;
+@btn-default-bg:                 #e7e7e7;
+@btn-default-border:             #ccc;
+
+@btn-primary-color:              #fff;
+@btn-primary-bg:                 @brand-primary;
+@btn-primary-border:             darken(@btn-primary-bg, 5%);
+
+@btn-success-color:              #fff;
+@btn-success-bg:                 @brand-success;
+@btn-success-border:             darken(@btn-success-bg, 5%);
+
+@btn-info-color:                 #fff;
+@btn-info-bg:                    @brand-info;
+@btn-info-border:                darken(@btn-info-bg, 5%);
+
+@btn-warning-color:              #fff;
+@btn-warning-bg:                 @brand-warning;
+@btn-warning-border:             darken(@btn-warning-bg, 5%);
+
+@btn-danger-color:               #fff;
+@btn-danger-bg:                  @brand-danger;
+@btn-danger-border:              darken(@btn-danger-bg, 5%);
+
+@btn-link-disabled-color:        @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+@input-bg:                       #fff;
+//** `` background color
+@input-bg-disabled:              @gray-lighter;
+
+//** Text color for ``s
+@input-color:                    @gray;
+//** `` border color
+@input-border:                   #ccc;
+
+// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
+//** Default `.form-control` border radius
+@input-border-radius:            @border-radius-base;
+//** Large `.form-control` border radius
+@input-border-radius-large:      @border-radius-large;
+//** Small `.form-control` border radius
+@input-border-radius-small:      @border-radius-small;
+
+//** Border color for inputs on focus
+@input-border-focus:             #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder:        @gray-light;
+
+//** Default `.form-control` height
+@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color:                   @gray-dark;
+@legend-border-color:            #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg:           @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+//** Disabled cursor for form controls and buttons.
+@cursor-disabled:                not-allowed;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg:                    #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border:                rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border:       #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg:            rgba(0,0,0,.2);
+
+//** Dropdown link text color.
+@dropdown-link-color:            #555;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color:      darken(@gray-dark, 5%);
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg:         #eee;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color:     @component-active-color;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg:        @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color:   @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color:          @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color:           #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar:            1000;
+@zindex-dropdown:          1000;
+@zindex-popover:           1060;
+@zindex-tooltip:           1070;
+@zindex-navbar-fixed:      1030;
+@zindex-modal:             1040;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs:                  480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min:              @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone:               @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm:                  768px;
+@screen-sm-min:              @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet:              @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md:                  992px;
+@screen-md-min:              @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop:             @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg:                  1200px;
+@screen-lg-min:              @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop:          @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max:              (@screen-sm-min - 1);
+@screen-sm-max:              (@screen-md-min - 1);
+@screen-md-max:              (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns:              12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width:         30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint:     @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet:             (720px + @grid-gutter-width);
+//** For `@screen-sm-min` and up.
+@container-sm:                 @container-tablet;
+
+// Medium screen / desktop
+@container-desktop:            (940px + @grid-gutter-width);
+//** For `@screen-md-min` and up.
+@container-md:                 @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop:      (1140px + @grid-gutter-width);
+//** For `@screen-lg-min` and up.
+@container-lg:                 @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height:                    45px;
+@navbar-margin-bottom:             @line-height-computed;
+@navbar-border-radius:             @border-radius-base;
+@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
+@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height:       340px;
+
+@navbar-default-color:             #fff;
+@navbar-default-bg:                @gray-dark;
+@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
+
+// Navbar links
+@navbar-default-link-color:                #fff;
+@navbar-default-link-hover-color:          #fff;
+@navbar-default-link-hover-bg:             #272727;
+@navbar-default-link-active-color:         #fff;
+@navbar-default-link-active-bg:            #272727;
+@navbar-default-link-disabled-color:       #ccc;
+@navbar-default-link-disabled-bg:          transparent;
+
+// Navbar brand label
+@navbar-default-brand-color:               @navbar-default-link-color;
+@navbar-default-brand-hover-color:         @navbar-default-brand-color;
+@navbar-default-brand-hover-bg:            transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg:           transparent;
+@navbar-default-toggle-icon-bar-bg:        #fff;
+@navbar-default-toggle-border-color:       transparent;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color:                      #fff;
+@navbar-inverse-bg:                         @brand-primary;
+@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color:                 #fff;
+@navbar-inverse-link-hover-color:           #fff;
+@navbar-inverse-link-hover-bg:              darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-active-color:          #fff;
+@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color:        #444;
+@navbar-inverse-link-disabled-bg:           transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color:                @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color:          #fff;
+@navbar-inverse-brand-hover-bg:             transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg:            transparent;
+@navbar-inverse-toggle-icon-bar-bg:         #fff;
+@navbar-inverse-toggle-border-color:        transparent;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding:                          10px 15px;
+@nav-link-hover-bg:                         @gray-lighter;
+
+@nav-disabled-link-color:                   @gray-light;
+@nav-disabled-link-hover-color:             @gray-light;
+
+//== Tabs
+@nav-tabs-border-color:                     @table-border-color;
+
+@nav-tabs-link-hover-border-color:          @gray-lighter;
+
+@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-color:          @gray;
+@nav-tabs-active-link-hover-border-color:   @table-border-color;
+
+@nav-tabs-justified-link-border-color:            @table-border-color;
+@nav-tabs-justified-active-link-border-color:     @body-bg;
+
+//== Pills
+@nav-pills-border-radius:                   @border-radius-base;
+@nav-pills-active-link-hover-bg:            @component-active-bg;
+@nav-pills-active-link-hover-color:         @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color:                     @link-color;
+@pagination-bg:                        transparent;
+@pagination-border:                    transparent;
+
+@pagination-hover-color:               @link-hover-color;
+@pagination-hover-bg:                  @gray-lighter;
+@pagination-hover-border:              transparent;
+
+@pagination-active-color:              #fff;
+@pagination-active-bg:                 @brand-primary;
+@pagination-active-border:             transparent;
+
+@pagination-disabled-color:            @gray-light;
+@pagination-disabled-bg:               #fff;
+@pagination-disabled-border:           transparent;
+
+
+//== Pager
+//
+//##
+
+@pager-bg:                             @pagination-bg;
+@pager-border:                         @pagination-border;
+@pager-border-radius:                  3px;
+
+@pager-hover-bg:                       @pagination-hover-bg;
+
+@pager-active-bg:                      @pagination-active-bg;
+@pager-active-color:                   @pagination-active-color;
+
+@pager-disabled-color:                 @gray-light;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding:              30px;
+@jumbotron-color:                inherit;
+@jumbotron-bg:                   #fafafa;
+@jumbotron-heading-color:        inherit;
+@jumbotron-font-size:            ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text:             @brand-success;
+@state-success-bg:               #dff0d8;
+@state-success-border:           darken(@state-success-text, 5%);
+
+@state-info-text:                @brand-info;
+@state-info-bg:                  #d9edf7;
+@state-info-border:              darken(@state-info-text, 7%);
+
+@state-warning-text:             @brand-warning;
+@state-warning-bg:               #fcf8e3;
+@state-warning-border:           darken(@state-warning-text, 5%);
+
+@state-danger-text:              @brand-danger;
+@state-danger-bg:                #f2dede;
+@state-danger-border:            darken(@state-danger-text, 5%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width:           200px;
+//** Tooltip text color
+@tooltip-color:               #fff;
+//** Tooltip background color
+@tooltip-bg:                  @gray-dark;
+@tooltip-opacity:             .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width:         5px;
+//** Tooltip arrow color
+@tooltip-arrow-color:         @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg:                          @gray-dark;
+//** Popover maximum width
+@popover-max-width:                   276px;
+//** Popover border color
+@popover-border-color:                transparent;
+//** Popover fallback border color
+@popover-fallback-border-color:       @gray-dark;
+
+//** Popover title background color
+@popover-title-bg:                    @popover-bg;
+
+//** Popover arrow width
+@popover-arrow-width:                 10px;
+//** Popover arrow color
+@popover-arrow-color:                 @popover-bg;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width:           (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg:            @gray-light;
+//** Primary label background color
+@label-primary-bg:            @brand-primary;
+//** Success label background color
+@label-success-bg:            @brand-success;
+//** Info label background color
+@label-info-bg:               @brand-info;
+//** Warning label background color
+@label-warning-bg:            @brand-warning;
+//** Danger label background color
+@label-danger-bg:             @brand-danger;
+
+//** Default label text color
+@label-color:                 #fff;
+//** Default text color of a linked label
+@label-link-hover-color:      #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding:         20px;
+
+//** Padding applied to the modal title
+@modal-title-padding:         15px;
+//** Modal title line-height
+@modal-title-line-height:     @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg:                             #fff;
+//** Modal content border color
+@modal-content-border-color:                   rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color:          #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg:           #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity:      .5;
+//** Modal header border color
+@modal-header-border-color:   #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color:   @modal-header-border-color;
+
+@modal-lg:                    900px;
+@modal-md:                    600px;
+@modal-sm:                    300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding:               15px;
+@alert-border-radius:         @border-radius-base;
+@alert-link-font-weight:      bold;
+
+@alert-success-bg:            @brand-success;
+@alert-success-text:          #fff;
+@alert-success-border:        @state-success-border;
+
+@alert-info-bg:               @brand-info;
+@alert-info-text:             #fff;
+@alert-info-border:           @state-info-border;
+
+@alert-warning-bg:            @brand-warning;
+@alert-warning-text:          #fff;
+@alert-warning-border:        @state-warning-border;
+
+@alert-danger-bg:             @brand-danger;
+@alert-danger-text:           #fff;
+@alert-danger-border:         @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg:                 #f5f5f5;
+//** Progress bar text color
+@progress-bar-color:          #fff;
+//** Variable for setting rounded corners on progress bar.
+@progress-border-radius:      @border-radius-base;
+
+//** Default progress bar color
+@progress-bar-bg:             @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg:     @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg:     @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg:      @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg:        @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg:                 #fff;
+//** `.list-group-item` border color
+@list-group-border:             @table-border-color;
+//** List group border radius
+@list-group-border-radius:      @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg:           #f5f5f5;
+//** Text color of active list items
+@list-group-active-color:       @component-active-color;
+//** Background color of active list items
+@list-group-active-bg:          @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border:      @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color:      @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg:         @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color:         #555;
+@list-group-link-hover-color:   @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg:                    #fff;
+@panel-body-padding:          15px;
+@panel-heading-padding:       10px 15px;
+@panel-footer-padding:        @panel-heading-padding;
+@panel-border-radius:         @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border:          @table-border-color;
+@panel-footer-bg:             #f5f5f5;
+
+@panel-default-text:          @gray-dark;
+@panel-default-border:        @table-border-color;
+@panel-default-heading-bg:    #f5f5f5;
+
+@panel-primary-text:          #fff;
+@panel-primary-border:        @brand-primary;
+@panel-primary-heading-bg:    @brand-primary;
+
+@panel-success-text:          #fff;
+@panel-success-border:        @state-success-border;
+@panel-success-heading-bg:    @brand-success;
+
+@panel-info-text:             #fff;
+@panel-info-border:           @state-info-border;
+@panel-info-heading-bg:       @brand-info;
+
+@panel-warning-text:          #fff;
+@panel-warning-border:        @state-warning-border;
+@panel-warning-heading-bg:    @brand-warning;
+
+@panel-danger-text:           #fff;
+@panel-danger-border:         @state-danger-border;
+@panel-danger-heading-bg:     @brand-danger;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding:           4px;
+//** Thumbnail background color
+@thumbnail-bg:                @body-bg;
+//** Thumbnail border color
+@thumbnail-border:            @table-border-color;
+//** Thumbnail border radius
+@thumbnail-border-radius:     @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color:     @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding:   9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg:                     @jumbotron-bg;
+@well-border:                 darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color:                 #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color:      #fff;
+@badge-bg:                    @btn-primary-bg;
+
+//** Badge text color in active nav link
+@badge-active-color:          @link-color;
+//** Badge background color in active nav link
+@badge-active-bg:             #fff;
+
+@badge-font-weight:           bold;
+@badge-line-height:           1;
+@badge-border-radius:         10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical:   8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg:                 #f5f5f5;
+//** Breadcrumb text color
+@breadcrumb-color:              @gray-light;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color:       @gray-dark;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator:          "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color:                      #fff;
+@carousel-control-width:                      15%;
+@carousel-control-opacity:                    .5;
+@carousel-control-font-size:                  20px;
+
+@carousel-indicator-active-bg:                #fff;
+@carousel-indicator-border-color:             #fff;
+
+@carousel-caption-color:                      #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight:           bold;
+@close-color:                 #fff;
+@close-text-shadow:           0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color:                  #c7254e;
+@code-bg:                     #f9f2f4;
+
+@kbd-color:                   #fff;
+@kbd-bg:                      #333;
+
+@pre-bg:                      #f5f5f5;
+@pre-color:                   @gray-dark;
+@pre-border-color:            #ccc;
+@pre-scrollable-max-height:   340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted:                  @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color:           @gray-light;
+//** Headings small color
+@headings-small-color:        @gray-light;
+//** Blockquote small color
+@blockquote-small-color:      @gray;
+//** Blockquote font size
+@blockquote-font-size:        (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color:     @table-border-color;
+//** Page header border color
+@page-header-border-color:    @table-border-color;
+//** Width of horizontal description list titles
+@dl-horizontal-offset:        @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border:                   @table-border-color;
diff --git a/searx/templates/oscar/base.html b/searx/templates/oscar/base.html
index 42cd4e9a7..c39de0460 100644
--- a/searx/templates/oscar/base.html
+++ b/searx/templates/oscar/base.html
@@ -10,7 +10,11 @@
     {% block meta %}{% endblock %}
     {% block title %}{% endblock %}searx
     
-    
+    {% if bootstrap_theme == 'default' %}
+        
+    {% else %}
+        
+    {% endif %}
       
     
 
diff --git a/searx/templates/oscar/preferences.html b/searx/templates/oscar/preferences.html
index 1a885f6cc..352c7d551 100644
--- a/searx/templates/oscar/preferences.html
+++ b/searx/templates/oscar/preferences.html
@@ -9,6 +9,7 @@
     
     
 
@@ -96,6 +97,28 @@
             
             
         
+        
+        
+ + +
+
+
+ +
+ +
+ {{ _('Change style of this layout') }} +
+
+
+
diff --git a/searx/webapp.py b/searx/webapp.py index e25156f40..483b367d9 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -261,6 +261,9 @@ def render(template_name, override_theme=None, **kwargs): if 'autocomplete' not in kwargs: kwargs['autocomplete'] = autocomplete + + if 'bootstrap_theme' not in kwargs: + kwargs['bootstrap_theme'] = request.cookies.get('bootstrap_theme', 'default') kwargs['searx_version'] = VERSION_STRING @@ -464,6 +467,7 @@ def preferences(): Settings that are going to be saved as cookies.""" lang = None image_proxy = request.cookies.get('image_proxy', settings['server'].get('image_proxy')) + bootstrap_themes = ['default', 'simplex', 'yeti', 'readable'] if request.cookies.get('language')\ and request.cookies['language'] in (x[0] for x in language_codes): @@ -478,6 +482,7 @@ def preferences(): locale = None autocomplete = '' method = 'POST' + bootstrap_theme = None for pd_name, pd in request.form.items(): if pd_name.startswith('category_'): category = pd_name[9:] @@ -502,6 +507,11 @@ def preferences(): blocked_engines.append(engine_name) elif pd_name == 'theme': theme = pd if pd in themes else default_theme + elif pd_name == 'bootstrap_theme': + if pd in bootstrap_themes: + bootstrap_theme = pd + else: + bootstrap_theme = 'default' resp = make_response(redirect(url_for('index'))) @@ -543,6 +553,9 @@ def preferences(): resp.set_cookie('theme', theme, max_age=cookie_max_age) + if bootstrap_theme: + resp.set_cookie('bootstrap_theme', bootstrap_theme, max_age=cookie_max_age) + return resp return render('preferences.html', locales=settings['locales'], @@ -555,6 +568,7 @@ def preferences(): autocomplete_backends=autocomplete_backends, shortcuts={y: x for x, y in engine_shortcuts.items()}, themes=themes, + bootstrap_themes=bootstrap_themes, theme=get_current_theme_name())