diff --git a/doc/source/topics/settings.rst b/doc/source/topics/settings.rst index df63f8fd64..1ba9269cb4 100755 --- a/doc/source/topics/settings.rst +++ b/doc/source/topics/settings.rst @@ -380,6 +380,19 @@ This example sorts flavors by vcpus in descending order:: 'reverse': True, } +``CUSTOM_THEME_PATH`` +--------------------- + +.. versionadded:: 2015.1(Kilo) + +Default: ``"static/themes/default"`` + +This setting allows Horizon to use a custom theme. The theme folder +should contains one _variables.scss file and one _styles.scss file. +_variables.scss contains all the bootstrap and horizon specific variables +which are used to style the GUI. Whereas _styles.scss contains extra styling. +For example themes, see: /horizon/openstack_dashboard/static/themes/ + ``DROPDOWN_MAX_ITEMS`` ---------------------- diff --git a/openstack_dashboard/local/local_settings.py.example b/openstack_dashboard/local/local_settings.py.example index 9c2c12d7a7..2bcfbf10ae 100644 --- a/openstack_dashboard/local/local_settings.py.example +++ b/openstack_dashboard/local/local_settings.py.example @@ -333,6 +333,10 @@ TIME_ZONE = "UTC" # TROVE_ADD_USER_PERMS = [] # TROVE_ADD_DATABASE_PERMS = [] +# Change this patch to the appropriate static directory containing +# two files: _variables.scss and _styles.scss +#CUSTOM_THEME_PATH = 'static/themes/default' + LOGGING = { 'version': 1, # When set to True this will disable all logging except diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py index 9d0a683647..4db21495c7 100644 --- a/openstack_dashboard/settings.py +++ b/openstack_dashboard/settings.py @@ -259,11 +259,21 @@ SECURITY_GROUP_RULES = { } ADD_INSTALLED_APPS = [] + +# STATIC directory for custom theme, set as default. +# It can be overridden in local_settings.py +CUSTOM_THEME_PATH = 'static/themes/default' + try: from local.local_settings import * # noqa except ImportError: logging.warning("No local_settings file found.") +CUSTOM_THEME = os.path.join(ROOT_PATH, CUSTOM_THEME_PATH) +STATICFILES_DIRS.append( + ('custom', CUSTOM_THEME), +) + if not WEBROOT.endswith('/'): WEBROOT += '/' if LOGIN_URL is None: diff --git a/openstack_dashboard/static/dashboard/dashboard.scss b/openstack_dashboard/static/dashboard/dashboard.scss index 30b28cd873..015861ff49 100644 --- a/openstack_dashboard/static/dashboard/dashboard.scss +++ b/openstack_dashboard/static/dashboard/dashboard.scss @@ -1,2 +1,8 @@ +// Custom Theme Variables +@import "/custom/variables"; + @import "scss/variables"; @import "launch-instance/launch-instance"; + +// Custom Style Variables +@import "/custom/styles"; diff --git a/openstack_dashboard/static/dashboard/scss/horizon.scss b/openstack_dashboard/static/dashboard/scss/horizon.scss index 771b20a824..201e688f4d 100644 --- a/openstack_dashboard/static/dashboard/scss/horizon.scss +++ b/openstack_dashboard/static/dashboard/scss/horizon.scss @@ -2,6 +2,9 @@ @import "/horizon/lib/bootstrap_datepicker/datepicker3.css"; @import "/horizon/lib/rickshaw.css"; +// Custom Theme Variables +@import "/custom/variables"; + // Horizon Variables @import "variables"; @@ -1840,3 +1843,4 @@ textarea.key_text { right: 0px !important; } } + diff --git a/openstack_dashboard/static/themes/blue/_styles.scss b/openstack_dashboard/static/themes/blue/_styles.scss new file mode 100644 index 0000000000..8a380b0183 --- /dev/null +++ b/openstack_dashboard/static/themes/blue/_styles.scss @@ -0,0 +1,20 @@ +// Blue +// ---- + +@mixin btn-shadow($color) { + @include gradient-vertical-three-colors(lighten($color, 3%), $color, 6%, darken($color, 3%)); + filter: none; + border: 1px solid darken($color, 10%); +} + +// Buttons ==================================================================== + +.btn-default, +.btn-default:hover { + @include btn-shadow($btn-default-bg); +} + +.btn-primary, +.btn-primary:hover { + @include btn-shadow($btn-primary-bg); +} diff --git a/openstack_dashboard/static/themes/blue/_variables.scss b/openstack_dashboard/static/themes/blue/_variables.scss new file mode 100644 index 0000000000..634c68f5ac --- /dev/null +++ b/openstack_dashboard/static/themes/blue/_variables.scss @@ -0,0 +1,884 @@ +// Blue Theme + +// Colors + +$gray: #2751DB !default; +$gray-darker: #94A5F2 !default; +$gray-dark: #0C0CED !default; +$gray-light: #C7CFF2 !default; +$gray-lighter: #DCE1F5 !default; + +$brand-primary: #375A7F !default; +$brand-success: #00bc8c !default; +$brand-info: #34DB98 !default; +$brand-warning: #F39C12 !default; +$brand-danger: #E74C3C !default; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +//** Background color for `
`. +$body-bg: $gray-darker !default; +//** Global text color on ``. +$text-color: #0F089C !default; + +//** Global textual link color. +$link-color: desaturate(lighten($brand-success, 10%),10%) !default; +//** Link hover color set via `darken()` function. +$link-hover-color: $link-color !default; + + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +$web-font: "//fonts.googleapis.com/css?family=Lato:400,700,400italic"; + +$font-family-sans-serif: Helvetica, Arial, sans-serif !default; +$font-family-serif: Georgia, "Times New Roman", Times, serif !default; +//** Default monospace fonts for ``, ``, and ``.
+$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default;
+$font-family-base: $font-family-serif !default;
+
+$font-size-base: 15px !default;
+$font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px
+
+$font-size-h1: floor(($font-size-base * 2.6)) !default; // ~36px
+$font-size-h2: floor(($font-size-base * 2.15)) !default; // ~30px
+$font-size-h3: ceil(($font-size-base * 1.7)) !default; // ~24px
+$font-size-h4: ceil(($font-size-base * 1.25)) !default; // ~18px
+$font-size-h5: $font-size-base !default;
+$font-size-h6: ceil(($font-size-base * 0.85)) !default; // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+$line-height-base: 1.428571429 !default; // 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)) !default; // ~20px
+
+//** By default, this inherits from the ``.
+$headings-font-family: $font-family-base !default;
+$headings-font-weight: 400 !default;
+$headings-line-height: 1.1 !default;
+$headings-color: inherit !default;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+//** File name for all font files.
+$icon-font-name: "glyphicons-halflings-regular" !default;
+//** Element ID within SVG icon file.
+$icon-font-svg-id: "glyphicons_halflingsregular" !default;
+
+
+//== 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: 10px !default;
+$padding-base-horizontal: 15px !default;
+
+$padding-large-vertical: 18px !default;
+$padding-large-horizontal: 27px !default;
+
+$padding-small-vertical: 6px !default;
+$padding-small-horizontal: 9px !default;
+
+$padding-xs-vertical: 1px !default;
+$padding-xs-horizontal: 5px !default;
+
+$line-height-large: 1.33 !default;
+$line-height-small: 1.5 !default;
+
+$border-radius-base: 4px !default;
+$border-radius-large: 6px !default;
+$border-radius-small: 3px !default;
+
+//** Global color for active items (e.g., navs or dropdowns).
+$component-active-color: #fff !default;
+//** Global background color for active items (e.g., navs or dropdowns).
+$component-active-bg: $brand-success !default;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+$caret-width-base: 4px !default;
+//** Carets increase slightly in size for larger components.
+$caret-width-large: 5px !default;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for ``s and ` `s.
+$table-cell-padding: 8px !default;
+//** Padding for cells in `.table-condensed`.
+$table-condensed-cell-padding: 5px !default;
+
+//** Default background color used for all tables.
+$table-bg: transparent !default;
+//** Background color used for `.table-striped`.
+$table-bg-accent: $gray-dark !default;
+//** Background color used for `.table-hover`.
+$table-bg-hover: $gray !default;
+$table-bg-active: $table-bg-hover !default;
+
+//** Border color for table and cell borders.
+$table-border-color: $gray !default;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+$btn-font-weight: normal !default;
+
+$btn-default-color: $text-color !default;
+$btn-default-bg: $gray !default;
+$btn-default-border: $btn-default-bg !default;
+
+$btn-primary-color: #fff !default;
+$btn-primary-bg: $brand-primary !default;
+$btn-primary-border: $btn-primary-bg !default;
+
+$btn-success-color: $btn-primary-color !default;
+$btn-success-bg: $brand-success !default;
+$btn-success-border: $btn-success-bg !default;
+
+$btn-info-color: $btn-success-color !default;
+$btn-info-bg: $brand-info !default;
+$btn-info-border: $btn-info-bg !default;
+
+$btn-warning-color: $btn-success-color !default;
+$btn-warning-bg: $brand-warning !default;
+$btn-warning-border: $btn-warning-bg !default;
+
+$btn-danger-color: $btn-success-color !default;
+$btn-danger-bg: $brand-danger !default;
+$btn-danger-border: $btn-danger-bg !default;
+
+$btn-link-disabled-color: $gray-light !default;
+
+
+//== Forms
+//
+//##
+
+//** `` background color
+$input-bg: #fff !default;
+//** `` background color
+$input-bg-disabled: $gray-lighter !default;
+//** Text color for ``s
+$input-color: $gray !default;
+//** `` border color
+$input-border: #f1f1f1 !default;
+//** `` border radius
+$input-border-radius: $border-radius-base !default;
+//** Border color for inputs on focus
+$input-border-focus: #fff !default;
+
+//** Placeholder text color
+$input-color-placeholder: $gray-light !default;
+
+//** Default `.form-control` height
+$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
+//** Large `.form-control` height
+$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
+//** Small `.form-control` height
+$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
+
+$legend-color: $text-color !default;
+$legend-border-color: transparent !default;
+
+//** Background color for textual input addons
+$input-group-addon-bg: $gray-dark !default;
+//** Border color for textual input addons
+$input-group-addon-border-color: transparent !default;
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+$component-offset-horizontal: 180px !default;
+//** Text muted color
+$text-muted: $gray-light !default;
+//** Abbreviations and acronyms border color
+$abbr-border-color: $gray-light !default;
+//** Headings small color
+$headings-small-color: $gray-light !default;
+//** Blockquote small color
+$blockquote-small-color: $gray-light !default;
+//** Blockquote font size
+$blockquote-font-size: ($font-size-base * 1.25) !default;
+//** Blockquote border color
+$blockquote-border-color: $gray !default;
+//** Page header border color
+$page-header-border-color: transparent !default;
+//** Width of horizontal description list titles
+$dl-horizontal-offset: $component-offset-horizontal !default;
+//** Horizontal line color.
+$hr-border: $gray !default;
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+$dropdown-bg: #fff !default;
+//** Dropdown menu `border-color`.
+$dropdown-border: rgba(0,0,0,.15) !default;
+//** Dropdown menu `border-color` **for IE8**.
+$dropdown-fallback-border: #ccc !default;
+//** Divider color for between dropdown items.
+$dropdown-divider-bg: #e5e5e5 !default;
+
+//** Active dropdown menu item background color.
+$dropdown-link-active-bg: $component-active-bg !default;
+//** Dropdown link text color.
+$dropdown-link-color: $brand-primary !default;
+//** Hover color for dropdown links.
+$dropdown-link-hover-color: #fff !default;
+//** Hover background for dropdown links.
+$dropdown-link-hover-bg: $dropdown-link-active-bg !default;
+
+//** Active dropdown menu item text color.
+$dropdown-link-active-color: #fff !default;
+
+//** Disabled dropdown menu item background color.
+$dropdown-link-disabled-color: $text-muted !default;
+
+//** Text color for headers within dropdown menus.
+$dropdown-header-color: $text-muted !default;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+$dropdown-caret-color: #000 !default;
+
+
+//-- 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 !default;
+$zindex-dropdown: 1000 !default;
+$zindex-popover: 1060 !default;
+$zindex-tooltip: 1070 !default;
+$zindex-navbar-fixed: 1030 !default;
+$zindex-modal-background: 1040 !default;
+$zindex-modal: 1050 !default;
+
+
+//== 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 !default;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+$screen-xs-min: $screen-xs !default;
+//** Deprecated `@screen-phone` as of v3.0.1
+$screen-phone: $screen-xs-min !default;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+$screen-sm: 768px !default;
+$screen-sm-min: $screen-sm !default;
+//** Deprecated `@screen-tablet` as of v3.0.1
+$screen-tablet: $screen-sm-min !default;
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+$screen-md: 992px !default;
+$screen-md-min: $screen-md !default;
+//** Deprecated `@screen-desktop` as of v3.0.1
+$screen-desktop: $screen-md-min !default;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+$screen-lg: 1200px !default;
+$screen-lg-min: $screen-lg !default;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+$screen-lg-desktop: $screen-lg-min !default;
+
+// So media queries don't overlap when required, provide a maximum
+$screen-xs-max: ($screen-sm-min - 1) !default;
+$screen-sm-max: ($screen-md-min - 1) !default;
+$screen-md-max: ($screen-lg-min - 1) !default;
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+$grid-columns: 12 !default;
+//** Padding between columns. Gets divided in half for the left and right.
+$grid-gutter-width: 30px !default;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+$grid-float-breakpoint: $screen-sm-min !default;
+//** Point at which the navbar begins collapsing.
+$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+$container-tablet: ((720px + $grid-gutter-width)) !default;
+//** For `@screen-sm-min` and up.
+$container-sm: $container-tablet !default;
+
+// Medium screen / desktop
+$container-desktop: ((940px + $grid-gutter-width)) !default;
+//** For `@screen-md-min` and up.
+$container-md: $container-desktop !default;
+
+// Large screen / wide desktop
+$container-large-desktop: ((1140px + $grid-gutter-width)) !default;
+//** For `@screen-lg-min` and up.
+$container-lg: $container-large-desktop !default;
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+$navbar-height: 60px !default;
+$navbar-margin-bottom: $line-height-computed !default;
+$navbar-border-radius: $border-radius-base !default;
+$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;
+$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
+$navbar-collapse-max-height: 340px !default;
+
+$navbar-default-color: #777 !default;
+$navbar-default-bg: $brand-primary !default;
+$navbar-default-border: transparent !default;
+
+// Navbar links
+$navbar-default-link-color: #fff !default;
+$navbar-default-link-hover-color: $brand-success !default;
+$navbar-default-link-hover-bg: transparent !default;
+$navbar-default-link-active-color: #fff !default;
+$navbar-default-link-active-bg: darken($navbar-default-bg, 10%) !default;
+$navbar-default-link-disabled-color: #ccc !default;
+$navbar-default-link-disabled-bg: transparent !default;
+
+// Navbar brand label
+$navbar-default-brand-color: $navbar-default-link-color !default;
+$navbar-default-brand-hover-color: $navbar-default-link-hover-color !default;
+$navbar-default-brand-hover-bg: transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg: darken($navbar-default-bg, 10%) !default;
+$navbar-default-toggle-icon-bar-bg: #fff !default;
+$navbar-default-toggle-border-color: darken($navbar-default-bg, 10%) !default;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color: #fff !default;
+$navbar-inverse-bg: $brand-success !default;
+$navbar-inverse-border: transparent !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color: $navbar-inverse-color !default;
+$navbar-inverse-link-hover-color: $brand-primary !default;
+$navbar-inverse-link-hover-bg: transparent !default;
+$navbar-inverse-link-active-color: $navbar-inverse-color !default;
+$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 5%) !default;
+$navbar-inverse-link-disabled-color: #aaa !default;
+$navbar-inverse-link-disabled-bg: transparent !default;
+// Navbar brand label
+$navbar-default-brand-color: $navbar-default-link-color !default;
+$navbar-default-brand-hover-color: $navbar-default-link-hover-color !default;
+$navbar-default-brand-hover-bg: transparent !default;
+
+// Navbar toggle
+$navbar-default-toggle-hover-bg: darken($navbar-default-bg, 10%) !default;
+$navbar-default-toggle-icon-bar-bg: #fff !default;
+$navbar-default-toggle-border-color: darken($navbar-default-bg, 10%) !default;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+$navbar-inverse-color: #fff !default;
+$navbar-inverse-bg: $brand-success !default;
+$navbar-inverse-border: transparent !default;
+
+// Inverted navbar links
+$navbar-inverse-link-color: $navbar-inverse-color !default;
+$navbar-inverse-link-hover-color: $brand-primary !default;
+$navbar-inverse-link-hover-bg: transparent !default;
+$navbar-inverse-link-active-color: $navbar-inverse-color !default;
+$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 5%) !default;
+$navbar-inverse-link-disabled-color: #aaa !default;
+$navbar-inverse-link-disabled-bg: transparent !default;
+
+// Inverted navbar brand label
+$navbar-inverse-brand-color: $navbar-inverse-link-color !default;
+$navbar-inverse-brand-hover-color: $navbar-inverse-link-hover-color !default;
+$navbar-inverse-brand-hover-bg: transparent !default;
+
+// Inverted navbar toggle
+$navbar-inverse-toggle-hover-bg: darken($navbar-inverse-bg, 10%) !default;
+$navbar-inverse-toggle-icon-bar-bg: #fff !default;
+$navbar-inverse-toggle-border-color: darken($navbar-inverse-bg, 10%) !default;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+$nav-link-padding: 10px 15px !default;
+$nav-link-hover-bg: $gray-dark !default;
+
+$nav-disabled-link-color: lighten($gray, 10%) !default;
+$nav-disabled-link-hover-color: lighten($gray, 10%) !default;
+
+$nav-open-link-hover-color: #fff !default;
+//== Tabs
+$nav-tabs-border-color: $gray !default;
+
+$nav-tabs-link-hover-border-color: $gray !default;
+
+$nav-tabs-active-link-hover-bg: $body-bg !default;
+$nav-tabs-active-link-hover-color: $brand-success !default;
+$nav-tabs-active-link-hover-border-color: $nav-tabs-link-hover-border-color !default;
+
+$nav-tabs-justified-link-border-color: $gray-lighter !default;
+$nav-tabs-justified-active-link-border-color: $body-bg !default;
+
+//== Pills
+$nav-pills-border-radius: $border-radius-base !default;
+$nav-pills-active-link-hover-bg: $component-active-bg !default;
+$nav-pills-active-link-hover-color: $component-active-color !default;
+
+
+//== Pagination
+//
+//##
+
+$pagination-color: #fff !default;
+$pagination-bg: $brand-success !default;
+$pagination-border: transparent !default;
+
+$pagination-hover-color: #fff !default;
+$pagination-hover-bg: lighten($brand-success, 6%) !default;
+$pagination-hover-border: transparent !default;
+
+$pagination-active-color: #fff !default;
+$pagination-active-bg: lighten($brand-success, 6%) !default;
+$pagination-active-border: transparent !default;
+
+$pagination-disabled-color: #fff !default;
+$pagination-disabled-bg: darken($brand-success, 15%) !default;
+$pagination-disabled-border: transparent !default;
+
+
+//== Pager
+//
+//##
+
+$pager-bg: $pagination-bg !default;
+$pager-border: $pagination-border !default;
+$pager-border-radius: 15px !default;
+
+$pager-hover-bg: $pagination-hover-bg !default;
+
+$pager-active-bg: $pagination-active-bg !default;
+$pager-active-color: $pagination-active-color !default;
+
+$pager-disabled-color: #ddd !default;
+
+
+//== Jumbotron
+//
+//##
+
+$jumbotron-padding: 30px !default;
+$jumbotron-color: inherit !default;
+$jumbotron-bg: $gray-dark !default;
+$jumbotron-heading-color: inherit !default;
+$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default;
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+$state-success-text: #fff !default;
+$state-success-bg: $brand-success !default;
+$state-success-border: $brand-success !default;
+
+$state-info-text: #fff !default;
+$state-info-bg: $brand-info !default;
+$state-info-border: $brand-info !default;
+
+$state-warning-text: #fff !default;
+$state-warning-bg: $brand-warning !default;
+$state-warning-border: $brand-warning !default;
+
+$state-danger-text: #fff !default;
+$state-danger-bg: $brand-danger !default;
+$state-danger-border: $brand-danger !default;
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+$tooltip-max-width: 200px !default;
+//** Tooltip text color
+$tooltip-color: #fff !default;
+//** Tooltip background color
+$tooltip-bg: rgba(0,0,0,.9) !default;
+$tooltip-opacity: .9 !default;
+
+//** Tooltip arrow width
+$tooltip-arrow-width: 5px !default;
+//** Tooltip arrow color
+$tooltip-arrow-color: $tooltip-bg !default;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+$popover-bg: $gray-dark !default;
+//** Popover maximum width
+$popover-max-width: 276px !default;
+//** Popover border color
+$popover-border-color: rgba(0,0,0,.2) !default;
+//** Popover fallback border color
+$popover-fallback-border-color: #999 !default;
+
+//** Popover title background color
+$popover-title-bg: darken($popover-bg, 3%) !default;
+
+//** Popover arrow width
+$popover-arrow-width: 10px !default;
+//** Popover arrow color
+$popover-arrow-color: $popover-bg !default;
+
+//** Popover outer arrow width
+$popover-arrow-outer-width: ($popover-arrow-width + 1) !default;
+//** Popover outer arrow color
+$popover-arrow-outer-color: fadein($popover-border-color, 5%) !default;
+//** Popover outer arrow fallback color
+$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default;
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+$label-default-bg: $gray !default;
+//** Primary label background color
+$label-primary-bg: $brand-primary !default;
+//** Success label background color
+$label-success-bg: $brand-success !default;
+//** Info label background color
+$label-info-bg: $brand-info !default;
+//** Warning label background color
+$label-warning-bg: $brand-warning !default;
+//** Danger label background color
+$label-danger-bg: $brand-danger !default;
+
+//** Default label text color
+$label-color: #fff !default;
+//** Default text color of a linked label
+$label-link-hover-color: #fff !default;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+$modal-inner-padding: 20px !default;
+
+//** Padding applied to the modal title
+$modal-title-padding: 15px !default;
+//** Modal title line-height
+$modal-title-line-height: $line-height-base !default;
+
+//** Background color of modal content area
+$modal-content-bg: $gray-dark !default;
+//** Modal content border color
+$modal-content-border-color: rgba(0,0,0,.2) !default;
+//** Modal content border color **for IE8**
+$modal-content-fallback-border-color: #999 !default;
+
+//** Modal backdrop background color
+$modal-backdrop-bg: #000 !default;
+//** Modal backdrop opacity
+$modal-backdrop-opacity: .7 !default;
+//** Modal header border color
+$modal-header-border-color: $gray !default;
+//** Modal footer border color
+$modal-footer-border-color: $modal-header-border-color !default;
+
+$modal-lg: 900px !default;
+$modal-md: 600px !default;
+$modal-sm: 300px !default;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+$alert-padding: 15px !default;
+$alert-border-radius: $border-radius-base !default;
+$alert-link-font-weight: bold !default;
+
+$alert-success-bg: $state-success-bg !default;
+$alert-success-text: $state-success-text !default;
+$alert-success-border: $state-success-border !default;
+
+$alert-info-bg: $state-info-bg !default;
+$alert-info-text: $state-info-text !default;
+$alert-info-border: $state-info-border !default;
+
+$alert-warning-bg: $state-warning-bg !default;
+$alert-warning-text: $state-warning-text !default;
+$alert-warning-border: $state-warning-border !default;
+
+$alert-danger-bg: $state-danger-bg !default;
+$alert-danger-text: $state-danger-text !default;
+$alert-danger-border: $state-danger-border !default;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+$progress-bg: $gray-lighter !default;
+//** Progress bar text color
+$progress-bar-color: #fff !default;
+
+//** Default progress bar color
+$progress-bar-bg: $brand-primary !default;
+//** Success progress bar color
+$progress-bar-success-bg: $brand-success !default;
+//** Warning progress bar color
+$progress-bar-warning-bg: $brand-warning !default;
+//** Danger progress bar color
+$progress-bar-danger-bg: $brand-danger !default;
+//** Info progress bar color
+$progress-bar-info-bg: $brand-info !default;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+$list-group-bg: $gray-dark !default;
+//** `.list-group-item` border color
+$list-group-border: $gray !default;
+//** List group border radius
+$list-group-border-radius: $border-radius-base !default;
+
+//** Background color of single list items on hover
+$list-group-hover-bg: transparent !default;
+//** Text color of active list items
+$list-group-active-color: $component-active-color !default;
+//** Background color of active list items
+$list-group-active-bg: $component-active-bg !default;
+//** Border color of active list elements
+$list-group-active-border: $list-group-active-bg !default;
+//** Text color for content within active list items
+$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default;
+
+//** Text color of disabled list items
+$list-group-disabled-color: $gray-light !default;
+//** Background color of disabled list items
+$list-group-disabled-bg: $gray-lighter !default;
+//** Text color for content within disabled list items
+$list-group-disabled-text-color: $list-group-disabled-color !default;
+
+$list-group-link-color: $link-color !default;
+$list-group-link-hover-color: $list-group-link-color !default;
+$list-group-link-heading-color: darken($link-color, 5%) !default;
+
+
+//== Panels
+//
+//##
+
+$panel-bg: $gray-dark !default;
+$panel-body-padding: 15px !default;
+$panel-heading-padding: 10px 15px !default;
+$panel-footer-padding: $panel-heading-padding !default;
+$panel-border-radius: $border-radius-base !default;
+
+//** Border color for elements within panels
+$panel-inner-border: $gray !default;
+$panel-footer-bg: $gray !default;
+
+$panel-default-text: $text-color !default;
+$panel-default-border: $gray !default;
+$panel-default-heading-bg: $gray-dark !default;
+
+$panel-primary-text: #fff !default;
+$panel-primary-border: $brand-primary !default;
+$panel-primary-heading-bg: $brand-primary !default;
+
+$panel-success-text: $state-success-text !default;
+$panel-success-border: $state-success-border !default;
+$panel-success-heading-bg: $state-success-bg !default;
+
+$panel-info-text: $state-info-text !default;
+$panel-info-border: $state-info-border !default;
+$panel-info-heading-bg: $state-info-bg !default;
+
+$panel-warning-text: $state-warning-text !default;
+$panel-warning-border: $state-warning-border !default;
+$panel-warning-heading-bg: $state-warning-bg !default;
+
+$panel-danger-text: $state-danger-text !default;
+$panel-danger-border: $state-danger-border !default;
+$panel-danger-heading-bg: $state-danger-bg !default;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+$thumbnail-padding: 2px !default;
+//** Thumbnail background color
+$thumbnail-bg: $body-bg !default;
+//** Thumbnail border color
+$thumbnail-border: $gray !default;
+//** Thumbnail border radius
+$thumbnail-border-radius: $border-radius-base !default;
+
+//** Custom text color for thumbnail captions
+$thumbnail-caption-color: $text-color !default;
+//** Padding around the thumbnail caption
+$thumbnail-caption-padding: 9px !default;
+
+
+//== Wells
+//
+//##
+
+$well-bg: $gray-dark !default;
+$well-border: transparent !default;
+
+
+//== Badges
+//
+//##
+
+$badge-color: #fff !default;
+//** Linked badge text color on hover
+$badge-link-hover-color: #fff !default;
+$badge-bg: $gray !default;
+
+//** Badge text color in active nav link
+$badge-active-color: $brand-primary !default;
+//** Badge background color in active nav link
+$badge-active-bg: #fff !default;
+
+$badge-font-weight: bold !default;
+$badge-line-height: 1 !default;
+$badge-border-radius: 10px !default;
+
+
+//== Breadcrumbs
+//
+//##
+
+$breadcrumb-padding-vertical: 8px !default;
+$breadcrumb-padding-horizontal: 15px !default;
+//** Breadcrumb background color
+$breadcrumb-bg: $gray !default;
+//** Breadcrumb text color
+$breadcrumb-color: $text-color !default;
+//** Text color of current page in the breadcrumb
+$breadcrumb-active-color: $gray-light !default;
+//** Textual separator for between breadcrumb elements
+$breadcrumb-separator: "/" !default;
+
+
+//== Carousel
+//
+//##
+
+$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default;
+
+$carousel-control-color: #fff !default;
+$carousel-control-width: 15% !default;
+$carousel-control-opacity: .5 !default;
+$carousel-control-font-size: 20px !default;
+
+$carousel-indicator-active-bg: #fff !default;
+$carousel-indicator-border-color: #fff !default;
+
+$carousel-caption-color: #fff !default;
+
+//== Close
+//
+//##
+
+$close-font-weight: bold !default;
+$close-color: #fff !default;
+$close-text-shadow: none !default;
+
+
+//== Code
+//
+//##
+
+$code-color: #c7254e !default;
+$code-bg: #f9f2f4 !default;
+
+$kbd-color: #fff !default;
+$kbd-bg: #333 !default;
+
+$pre-bg: $gray-lighter !default;
+$pre-color: $gray-dark !default;
+$pre-border-color: #ccc !default;
+$pre-scrollable-max-height: 340px !default;
+
+// Horizon custom variables
+$sidebar-background-color: $body-bg;
+$border-color: #dddddd;
+
+// Table
+$table-bg-odd: $body-bg;
+$table-stripe-bgcolor: $body-bg;
+$table-border-color: #cccccc;
+
+// Resource Browser
+$rbrowser-body-background-color: $body-bg;
+$rbrowser-header-background-color: $body-bg;
+$rbrowser-footer-background-color: $body-bg;
+
+// Accordion Nav
+$accordionBaseFontColor: #002EFC;
+$accordionBorderColor: #cccccc;
+$accordianBoxShadowColor: #c7c7c7;
+$accordionHighlightColor: #0000FF;
+$accordianHeaderActiveColor: $gray-dark;
+$accordianHeaderBorderColor: $body-bg;
+$accordionItemActiveBgColor: #ffffff;
+$accordionItemFontColor: #002EFC;
+$accordionSubBorderColor: #c0c1c2;
+$accordionSubHeaderFontColor: #002EFC;
diff --git a/openstack_dashboard/static/themes/default/_styles.scss b/openstack_dashboard/static/themes/default/_styles.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/openstack_dashboard/static/themes/default/_variables.scss b/openstack_dashboard/static/themes/default/_variables.scss
new file mode 100644
index 0000000000..e69de29bb2