From fff7ffd859286caeac359d00ed0a2ecfc3bd2b5e Mon Sep 17 00:00:00 2001 From: Vladyslav Piskunov Date: Sun, 23 Apr 2017 23:05:01 +0100 Subject: [PATCH] Using SCSS/LESS instead of CSS https://github.com/misterGF/CoPilot/issues/19 --- build/webpack.base.conf.js | 6 + index.html | 2 - package.json | 3 + static/bootstrap-less/mixins.less | 36 + static/bootstrap-less/mixins/alerts.less | 14 + .../mixins/background-variant.less | 9 + .../bootstrap-less/mixins/border-radius.less | 21 + static/bootstrap-less/mixins/buttons.less | 68 ++ .../bootstrap-less/mixins/center-block.less | 7 + static/bootstrap-less/mixins/clearfix.less | 22 + static/bootstrap-less/mixins/forms.less | 84 ++ static/bootstrap-less/mixins/gradients.less | 59 ++ .../bootstrap-less/mixins/grid-framework.less | 102 +++ static/bootstrap-less/mixins/grid.less | 134 +++ static/bootstrap-less/mixins/hide-text.less | 21 + static/bootstrap-less/mixins/image.less | 25 + static/bootstrap-less/mixins/labels.less | 12 + static/bootstrap-less/mixins/list-group.less | 30 + static/bootstrap-less/mixins/nav-divider.less | 10 + .../mixins/nav-vertical-align.less | 9 + static/bootstrap-less/mixins/opacity.less | 8 + static/bootstrap-less/mixins/pagination.less | 24 + static/bootstrap-less/mixins/panels.less | 24 + .../bootstrap-less/mixins/progress-bar.less | 10 + .../bootstrap-less/mixins/reset-filter.less | 8 + static/bootstrap-less/mixins/reset-text.less | 18 + static/bootstrap-less/mixins/resize.less | 6 + .../mixins/responsive-visibility.less | 21 + static/bootstrap-less/mixins/size.less | 10 + static/bootstrap-less/mixins/tab-focus.less | 9 + static/bootstrap-less/mixins/table-row.less | 28 + .../bootstrap-less/mixins/text-emphasis.less | 9 + .../bootstrap-less/mixins/text-overflow.less | 8 + .../mixins/vendor-prefixes.less | 254 ++++++ static/bootstrap-less/variables.less | 841 ++++++++++++++++++ static/img/boxed-bg.jpg | Bin 0 -> 123770 bytes static/less/.csslintrc | 23 + static/less/404_500_errors.less | 36 + static/less/AdminLTE.less | 61 ++ static/less/alerts.less | 47 + static/less/bootstrap-social.less | 172 ++++ static/less/boxes.less | 485 ++++++++++ static/less/buttons.less | 168 ++++ static/less/callout.less | 48 + static/less/carousel.less | 18 + static/less/control-sidebar.less | 289 ++++++ static/less/core.less | 174 ++++ static/less/direct-chat.less | 194 ++++ static/less/dropdown.less | 350 ++++++++ static/less/forms.less | 105 +++ static/less/fullcalendar.less | 100 +++ static/less/header.less | 248 ++++++ static/less/info-box.less | 75 ++ static/less/invoice.less | 16 + static/less/labels.less | 28 + static/less/lockscreen.less | 73 ++ static/less/login_and_register.less | 52 ++ static/less/mailbox.less | 88 ++ static/less/miscellaneous.less | 606 +++++++++++++ static/less/mixins.less | 313 +++++++ static/less/modal.less | 80 ++ static/less/navs.less | 226 +++++ static/less/print.less | 54 ++ static/less/products.less | 45 + static/less/profile.less | 31 + static/less/progress-bars.less | 111 +++ static/less/select2.less | 117 +++ static/less/sidebar-mini.less | 141 +++ static/less/sidebar.less | 158 ++++ static/less/skins/_all-skins.less | 13 + static/less/skins/skin-black-light.less | 64 ++ static/less/skins/skin-black.less | 74 ++ static/less/skins/skin-blue-light.less | 61 ++ static/less/skins/skin-blue.less | 58 ++ static/less/skins/skin-green-light.less | 55 ++ static/less/skins/skin-green.less | 55 ++ static/less/skins/skin-purple-light.less | 54 ++ static/less/skins/skin-purple.less | 54 ++ static/less/skins/skin-red-light.less | 54 ++ static/less/skins/skin-red.less | 54 ++ static/less/skins/skin-yellow-light.less | 54 ++ static/less/skins/skin-yellow.less | 54 ++ static/less/small-box.less | 89 ++ static/less/social-widgets.less | 78 ++ static/less/table.less | 71 ++ static/less/timeline.less | 110 +++ static/less/users-list.less | 42 + static/less/variables.less | 123 +++ 88 files changed, 7899 insertions(+), 2 deletions(-) create mode 100755 static/bootstrap-less/mixins.less create mode 100755 static/bootstrap-less/mixins/alerts.less create mode 100755 static/bootstrap-less/mixins/background-variant.less create mode 100755 static/bootstrap-less/mixins/border-radius.less create mode 100755 static/bootstrap-less/mixins/buttons.less create mode 100755 static/bootstrap-less/mixins/center-block.less create mode 100755 static/bootstrap-less/mixins/clearfix.less create mode 100755 static/bootstrap-less/mixins/forms.less create mode 100755 static/bootstrap-less/mixins/gradients.less create mode 100755 static/bootstrap-less/mixins/grid-framework.less create mode 100755 static/bootstrap-less/mixins/grid.less create mode 100755 static/bootstrap-less/mixins/hide-text.less create mode 100755 static/bootstrap-less/mixins/image.less create mode 100755 static/bootstrap-less/mixins/labels.less create mode 100755 static/bootstrap-less/mixins/list-group.less create mode 100755 static/bootstrap-less/mixins/nav-divider.less create mode 100755 static/bootstrap-less/mixins/nav-vertical-align.less create mode 100755 static/bootstrap-less/mixins/opacity.less create mode 100755 static/bootstrap-less/mixins/pagination.less create mode 100755 static/bootstrap-less/mixins/panels.less create mode 100755 static/bootstrap-less/mixins/progress-bar.less create mode 100755 static/bootstrap-less/mixins/reset-filter.less create mode 100755 static/bootstrap-less/mixins/reset-text.less create mode 100755 static/bootstrap-less/mixins/resize.less create mode 100755 static/bootstrap-less/mixins/responsive-visibility.less create mode 100755 static/bootstrap-less/mixins/size.less create mode 100755 static/bootstrap-less/mixins/tab-focus.less create mode 100755 static/bootstrap-less/mixins/table-row.less create mode 100755 static/bootstrap-less/mixins/text-emphasis.less create mode 100755 static/bootstrap-less/mixins/text-overflow.less create mode 100755 static/bootstrap-less/mixins/vendor-prefixes.less create mode 100755 static/bootstrap-less/variables.less create mode 100644 static/img/boxed-bg.jpg create mode 100755 static/less/.csslintrc create mode 100755 static/less/404_500_errors.less create mode 100755 static/less/AdminLTE.less create mode 100755 static/less/alerts.less create mode 100755 static/less/bootstrap-social.less create mode 100755 static/less/boxes.less create mode 100755 static/less/buttons.less create mode 100755 static/less/callout.less create mode 100755 static/less/carousel.less create mode 100755 static/less/control-sidebar.less create mode 100755 static/less/core.less create mode 100755 static/less/direct-chat.less create mode 100755 static/less/dropdown.less create mode 100755 static/less/forms.less create mode 100755 static/less/fullcalendar.less create mode 100755 static/less/header.less create mode 100755 static/less/info-box.less create mode 100755 static/less/invoice.less create mode 100755 static/less/labels.less create mode 100755 static/less/lockscreen.less create mode 100755 static/less/login_and_register.less create mode 100755 static/less/mailbox.less create mode 100755 static/less/miscellaneous.less create mode 100755 static/less/mixins.less create mode 100755 static/less/modal.less create mode 100755 static/less/navs.less create mode 100755 static/less/print.less create mode 100755 static/less/products.less create mode 100755 static/less/profile.less create mode 100755 static/less/progress-bars.less create mode 100755 static/less/select2.less create mode 100755 static/less/sidebar-mini.less create mode 100755 static/less/sidebar.less create mode 100755 static/less/skins/_all-skins.less create mode 100755 static/less/skins/skin-black-light.less create mode 100755 static/less/skins/skin-black.less create mode 100755 static/less/skins/skin-blue-light.less create mode 100755 static/less/skins/skin-blue.less create mode 100755 static/less/skins/skin-green-light.less create mode 100755 static/less/skins/skin-green.less create mode 100755 static/less/skins/skin-purple-light.less create mode 100755 static/less/skins/skin-purple.less create mode 100755 static/less/skins/skin-red-light.less create mode 100755 static/less/skins/skin-red.less create mode 100755 static/less/skins/skin-yellow-light.less create mode 100755 static/less/skins/skin-yellow.less create mode 100755 static/less/small-box.less create mode 100755 static/less/social-widgets.less create mode 100755 static/less/table.less create mode 100755 static/less/timeline.less create mode 100755 static/less/users-list.less create mode 100755 static/less/variables.less diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index dc13c4f9..4ff1c9c6 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -12,6 +12,8 @@ var useCssSourceMap = cssSourceMapDev || cssSourceMapProd module.exports = { entry: { + adminlte: './static/less/AdminLTE.less', + adminltetheme: './static/less/skins/skin-blue.less', // swap for any other skin app: './src/main.js' }, output: { @@ -77,6 +79,10 @@ module.exports = { limit: 10000, name: utils.assetsPath('fonts/[name].[hash:7].[ext]') } + }, + { + test: /\.less$/, + loader: 'autoprefixer!less' } ] }, diff --git a/index.html b/index.html index 4d76b93f..6df584c3 100644 --- a/index.html +++ b/index.html @@ -11,8 +11,6 @@ - - diff --git a/package.json b/package.json index ed2ad05d..ce642820 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ }, "devDependencies": { "autoprefixer": "^6.4.0", + "autoprefixer-loader": "^3.2.0", "babel-core": "^6.0.0", "babel-eslint": "^7.0.0", "babel-loader": "^6.0.0", @@ -71,6 +72,8 @@ "karma-sourcemap-loader": "^0.3.7", "karma-spec-reporter": "0.0.26", "karma-webpack": "^1.7.0", + "less": "^2.7.2", + "less-loader": "^4.0.3", "lolex": "^1.4.0", "mocha": "^3.1.0", "nightwatch": "^0.9.8", diff --git a/static/bootstrap-less/mixins.less b/static/bootstrap-less/mixins.less new file mode 100755 index 00000000..0cdf66e0 --- /dev/null +++ b/static/bootstrap-less/mixins.less @@ -0,0 +1,36 @@ +// Mixins +// -------------------------------------------------- +// Utilities +@import "mixins/hide-text.less"; +@import "mixins/opacity.less"; +@import "mixins/image.less"; +@import "mixins/labels.less"; +@import "mixins/reset-filter.less"; +@import "mixins/resize.less"; +@import "mixins/responsive-visibility.less"; +@import "mixins/size.less"; +@import "mixins/tab-focus.less"; +@import "mixins/reset-text.less"; +@import "mixins/text-emphasis.less"; +@import "mixins/text-overflow.less"; +@import "mixins/vendor-prefixes.less"; +// Components +@import "mixins/alerts.less"; +@import "mixins/buttons.less"; +@import "mixins/panels.less"; +@import "mixins/pagination.less"; +@import "mixins/list-group.less"; +@import "mixins/nav-divider.less"; +@import "mixins/forms.less"; +@import "mixins/progress-bar.less"; +@import "mixins/table-row.less"; +// Skins +@import "mixins/background-variant.less"; +@import "mixins/border-radius.less"; +@import "mixins/gradients.less"; +// Layout +@import "mixins/clearfix.less"; +@import "mixins/center-block.less"; +@import "mixins/nav-vertical-align.less"; +@import "mixins/grid-framework.less"; +@import "mixins/grid.less"; diff --git a/static/bootstrap-less/mixins/alerts.less b/static/bootstrap-less/mixins/alerts.less new file mode 100755 index 00000000..396196f4 --- /dev/null +++ b/static/bootstrap-less/mixins/alerts.less @@ -0,0 +1,14 @@ +// Alerts + +.alert-variant(@background; @border; @text-color) { + background-color: @background; + border-color: @border; + color: @text-color; + + hr { + border-top-color: darken(@border, 5%); + } + .alert-link { + color: darken(@text-color, 10%); + } +} diff --git a/static/bootstrap-less/mixins/background-variant.less b/static/bootstrap-less/mixins/background-variant.less new file mode 100755 index 00000000..a85c22b7 --- /dev/null +++ b/static/bootstrap-less/mixins/background-variant.less @@ -0,0 +1,9 @@ +// Contextual backgrounds + +.bg-variant(@color) { + background-color: @color; + a&:hover, + a&:focus { + background-color: darken(@color, 10%); + } +} diff --git a/static/bootstrap-less/mixins/border-radius.less b/static/bootstrap-less/mixins/border-radius.less new file mode 100755 index 00000000..727cc150 --- /dev/null +++ b/static/bootstrap-less/mixins/border-radius.less @@ -0,0 +1,21 @@ +// Single side border-radius + +.border-top-radius(@radius) { + border-top-right-radius: @radius; + border-top-left-radius: @radius; +} + +.border-right-radius(@radius) { + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; +} + +.border-bottom-radius(@radius) { + border-bottom-right-radius: @radius; + border-bottom-left-radius: @radius; +} + +.border-left-radius(@radius) { + border-bottom-left-radius: @radius; + border-top-left-radius: @radius; +} diff --git a/static/bootstrap-less/mixins/buttons.less b/static/bootstrap-less/mixins/buttons.less new file mode 100755 index 00000000..cd9635a9 --- /dev/null +++ b/static/bootstrap-less/mixins/buttons.less @@ -0,0 +1,68 @@ +// Button variants +// +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons + +.button-variant(@color; @background; @border) { + color: @color; + background-color: @background; + border-color: @border; + + &:focus, + &.focus { + color: @color; + background-color: darken(@background, 10%); + border-color: darken(@border, 25%); + } + &:hover { + color: @color; + background-color: darken(@background, 10%); + border-color: darken(@border, 12%); + } + &:active, + &.active, + .open > .dropdown-toggle& { + color: @color; + background-color: darken(@background, 10%); + border-color: darken(@border, 12%); + + &:hover, + &:focus, + &.focus { + color: @color; + background-color: darken(@background, 17%); + border-color: darken(@border, 25%); + } + } + &:active, + &.active, + .open > .dropdown-toggle& { + background-image: none; + } + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &.focus, + &:active, + &.active { + background-color: @background; + border-color: @border; + } + } + + .badge { + color: @background; + background-color: @color; + } +} + +// Button sizes +.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { + padding: @padding-vertical @padding-horizontal; + font-size: @font-size; + line-height: @line-height; + border-radius: @border-radius; +} diff --git a/static/bootstrap-less/mixins/center-block.less b/static/bootstrap-less/mixins/center-block.less new file mode 100755 index 00000000..d18d6de9 --- /dev/null +++ b/static/bootstrap-less/mixins/center-block.less @@ -0,0 +1,7 @@ +// Center-align a block level element + +.center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} diff --git a/static/bootstrap-less/mixins/clearfix.less b/static/bootstrap-less/mixins/clearfix.less new file mode 100755 index 00000000..3f7a3820 --- /dev/null +++ b/static/bootstrap-less/mixins/clearfix.less @@ -0,0 +1,22 @@ +// Clearfix +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +// +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ + +.clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} diff --git a/static/bootstrap-less/mixins/forms.less b/static/bootstrap-less/mixins/forms.less new file mode 100755 index 00000000..3e864e71 --- /dev/null +++ b/static/bootstrap-less/mixins/forms.less @@ -0,0 +1,84 @@ +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline, + &.radio label, + &.checkbox label, + &.radio-inline label, + &.checkbox-inline label { + color: @text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control { + border-color: @border-color; + .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work + &:focus { + border-color: darken(@border-color, 10%); + @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@border-color, 20%); + .box-shadow(@shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: @text-color; + border-color: @border-color; + background-color: @background-color; + } + // Optional feedback icon + .form-control-feedback { + color: @text-color; + } +} + +// Form control focus state +// +// Generate a customized focus state and for any input with the specified color, +// which defaults to the `@input-border-focus` variable. +// +// We highly encourage you to not customize the default value, but instead use +// this to tweak colors on an as-needed basis. This aesthetic change is based on +// WebKit's default styles, but applicable to a wider range of browsers. Its +// usability and accessibility should be taken into account with any change. +// +// Example usage: change the default blue border and shadow to white for better +// contrast against a dark gray background. +.form-control-focus(@color: @input-border-focus) { + @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); + &:focus { + border-color: @color; + outline: 0; + .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); + } +} + +// Form control sizing +// +// Relative text size, padding, and border-radii changes for form controls. For +// horizontal sizing, wrap controls in the predefined grid classes. `` 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 +// This has no effect on ``s in CSS. +@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: #999; + +//** 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); + +//** `.form-group` margin +@form-group-margin-bottom: 15px; + +@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: #e5e5e5; + +//** Dropdown link text color. +@dropdown-link-color: @gray-dark; +//** Hover color for dropdown links. +@dropdown-link-hover-color: darken(@gray-dark, 5%); +//** Hover background for dropdown links. +@dropdown-link-hover-bg: #f5f5f5; + +//** 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-background: 1040; +@zindex-modal: 1050; + +//== 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: 50px; +@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: #777; +@navbar-default-bg: #f8f8f8; +@navbar-default-border: darken(@navbar-default-bg, 6.5%); + +// Navbar links +@navbar-default-link-color: #777; +@navbar-default-link-hover-color: #333; +@navbar-default-link-hover-bg: transparent; +@navbar-default-link-active-color: #555; +@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%); +@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: darken(@navbar-default-brand-color, 10%); +@navbar-default-brand-hover-bg: transparent; + +// Navbar toggle +@navbar-default-toggle-hover-bg: #ddd; +@navbar-default-toggle-icon-bar-bg: #888; +@navbar-default-toggle-border-color: #ddd; + +// Inverted navbar +// Reset inverted navbar basics +@navbar-inverse-color: lighten(@gray-light, 15%); +@navbar-inverse-bg: #222; +@navbar-inverse-border: darken(@navbar-inverse-bg, 10%); + +// Inverted navbar links +@navbar-inverse-link-color: lighten(@gray-light, 15%); +@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: 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: #333; +@navbar-inverse-toggle-icon-bar-bg: #fff; +@navbar-inverse-toggle-border-color: #333; + +//== 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: @link-color; +@pagination-bg: #fff; +@pagination-border: #ddd; + +@pagination-hover-color: @link-hover-color; +@pagination-hover-bg: @gray-lighter; +@pagination-hover-border: #ddd; + +@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: @pagination-disabled-color; + +//== Jumbotron +// +//## + +@jumbotron-padding: 30px; +@jumbotron-color: inherit; +@jumbotron-bg: @gray-lighter; +@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: #3c763d; +@state-success-bg: #dff0d8; +@state-success-border: darken(spin(@state-success-bg, -10), 5%); + +@state-info-text: #31708f; +@state-info-bg: #d9edf7; +@state-info-border: darken(spin(@state-info-bg, -10), 7%); + +@state-warning-text: #8a6d3b; +@state-warning-bg: #fcf8e3; +@state-warning-border: darken(spin(@state-warning-bg, -10), 5%); + +@state-danger-text: #a94442; +@state-danger-bg: #f2dede; +@state-danger-border: darken(spin(@state-danger-bg, -10), 5%); + +//== Tooltips +// +//## + +//** Tooltip max width +@tooltip-max-width: 200px; +//** Tooltip text color +@tooltip-color: #fff; +//** Tooltip background color +@tooltip-bg: #000; +@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: @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: 15px; + +//** 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: #f5f5f5; + +@panel-default-text: @gray-dark; +@panel-default-border: #ddd; +@panel-default-heading-bg: #f5f5f5; + +@panel-primary-text: #fff; +@panel-primary-border: @brand-primary; +@panel-primary-heading-bg: @brand-primary; + +@panel-success-text: @state-success-text; +@panel-success-border: @state-success-border; +@panel-success-heading-bg: @state-success-bg; + +@panel-info-text: @state-info-text; +@panel-info-border: @state-info-border; +@panel-info-heading-bg: @state-info-bg; + +@panel-warning-text: @state-warning-text; +@panel-warning-border: @state-warning-border; +@panel-warning-heading-bg: @state-warning-bg; + +@panel-danger-text: @state-danger-text; +@panel-danger-border: @state-danger-border; +@panel-danger-heading-bg: @state-danger-bg; + +//== 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: #f5f5f5; +@well-border: darken(@well-bg, 7%); + +//== Badges +// +//## + +@badge-color: #fff; +//** Linked badge text color on hover +@badge-link-hover-color: #fff; +@badge-bg: @gray-light; + +//** 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: #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/static/img/boxed-bg.jpg b/static/img/boxed-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e47586abbea589bcff7d55019346167bc72b6c2e GIT binary patch literal 123770 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 .headline { + float: left; + font-size: 100px; + font-weight: 300; + @media (max-width: @screen-sm-max) { + float: none; + text-align: center; + } + } + //For the message + > .error-content { + margin-left: 190px; + @media (max-width: @screen-sm-max) { + margin-left: 0; + } + > h3 { + font-weight: 300; + font-size: 25px; + @media (max-width: @screen-sm-max) { + text-align: center; + } + } + display: block; + } +} diff --git a/static/less/AdminLTE.less b/static/less/AdminLTE.less new file mode 100755 index 00000000..0b774840 --- /dev/null +++ b/static/less/AdminLTE.less @@ -0,0 +1,61 @@ +/*! + * AdminLTE v2.3.3 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information +!*/ +//google fonts +@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic); +//Bootstrap Variables & Mixins +//The core bootstrap code have not been modified. These files +//are included only for reference. +@import (reference) "../bootstrap-less/mixins.less"; +@import (reference) "../bootstrap-less/variables.less"; +//MISC +//---- +@import "core.less"; +@import "variables.less"; +@import "mixins.less"; +//COMPONENTS +//----------- +@import "header.less"; +@import "sidebar.less"; +@import "sidebar-mini.less"; +@import "control-sidebar.less"; +@import "dropdown.less"; +@import "forms.less"; +@import "progress-bars.less"; +@import "small-box.less"; +@import "boxes.less"; +@import "info-box.less"; +@import "timeline.less"; +@import "buttons.less"; +@import "callout.less"; +@import "alerts.less"; +@import "navs.less"; +@import "products.less"; +@import "table.less"; +@import "labels.less"; +@import "direct-chat.less"; +@import "users-list.less"; +@import "carousel.less"; +@import "modal.less"; +@import "social-widgets.less"; +//PAGES +//------ +@import "mailbox.less"; +@import "lockscreen.less"; +@import "login_and_register.less"; +@import "404_500_errors.less"; +@import "invoice.less"; +@import "profile"; +//Plugins +//-------- +@import "bootstrap-social.less"; +@import "fullcalendar.less"; +@import "select2.less"; +//Miscellaneous +//------------- +@import "miscellaneous.less"; +@import "print.less"; diff --git a/static/less/alerts.less b/static/less/alerts.less new file mode 100755 index 00000000..dc15cb63 --- /dev/null +++ b/static/less/alerts.less @@ -0,0 +1,47 @@ +/* + * Component: alert + * ---------------- + */ + +.alert { + .border-radius(3px); + h4 { + font-weight: 600; + } + .icon { + margin-right: 10px; + } + .close { + color: #000; + .opacity(.2); + &:hover { + .opacity(.5); + } + } + a { + color: #fff; + text-decoration: underline; + } +} + +//Alert Variants +.alert-success { + &:extend(.bg-green); + border-color: darken(@green, 5%); +} + +.alert-danger, +.alert-error { + &:extend(.bg-red); + border-color: darken(@red, 5%); +} + +.alert-warning { + &:extend(.bg-yellow); + border-color: darken(@yellow, 5%); +} + +.alert-info { + &:extend(.bg-aqua); + border-color: darken(@aqua, 5%); +} diff --git a/static/less/bootstrap-social.less b/static/less/bootstrap-social.less new file mode 100755 index 00000000..93cfabd8 --- /dev/null +++ b/static/less/bootstrap-social.less @@ -0,0 +1,172 @@ +/* + * Social Buttons for Bootstrap + * + * Copyright 2013-2015 Panayiotis Lipiridis + * Licensed under the MIT License + * + * https://github.com/lipis/bootstrap-social + */ + +@bs-height-base: (@line-height-computed + @padding-base-vertical * 2); +@bs-height-lg: (floor(@font-size-large * @line-height-base) + @padding-large-vertical * 2); +@bs-height-sm: (floor(@font-size-small * 1.5) + @padding-small-vertical * 2); +@bs-height-xs: (floor(@font-size-small * 1.2) + @padding-small-vertical + 1); + +.btn-social { + position: relative; + padding-left: (@bs-height-base + @padding-base-horizontal); + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: @bs-height-base; + line-height: (@bs-height-base + 2); + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); + } + &.btn-lg { + padding-left: (@bs-height-lg + @padding-large-horizontal); + > :first-child { + line-height: @bs-height-lg; + width: @bs-height-lg; + font-size: 1.8em; + } + } + &.btn-sm { + padding-left: (@bs-height-sm + @padding-small-horizontal); + > :first-child { + line-height: @bs-height-sm; + width: @bs-height-sm; + font-size: 1.4em; + } + } + &.btn-xs { + padding-left: (@bs-height-xs + @padding-small-horizontal); + > :first-child { + line-height: @bs-height-xs; + width: @bs-height-xs; + font-size: 1.2em; + } + } +} + +.btn-social-icon { + .btn-social; + height: (@bs-height-base + 2); + width: (@bs-height-base + 2); + padding: 0; + > :first-child { + border: none; + text-align: center; + width: 100%; + } + &.btn-lg { + height: @bs-height-lg; + width: @bs-height-lg; + padding-left: 0; + padding-right: 0; + } + &.btn-sm { + height: (@bs-height-sm + 2); + width: (@bs-height-sm + 2); + padding-left: 0; + padding-right: 0; + } + &.btn-xs { + height: (@bs-height-xs + 2); + width: (@bs-height-xs + 2); + padding-left: 0; + padding-right: 0; + } +} + +.btn-social(@color-bg, @color: #fff) { + background-color: @color-bg; + .button-variant(@color, @color-bg, rgba(0, 0, 0, .2)); +} + +.btn-adn { + .btn-social(#d87a68); +} + +.btn-bitbucket { + .btn-social(#205081); +} + +.btn-dropbox { + .btn-social(#1087dd); +} + +.btn-facebook { + .btn-social(#3b5998); +} + +.btn-flickr { + .btn-social(#ff0084); +} + +.btn-foursquare { + .btn-social(#f94877); +} + +.btn-github { + .btn-social(#444444); +} + +.btn-google { + .btn-social(#dd4b39); +} + +.btn-instagram { + .btn-social(#3f729b); +} + +.btn-linkedin { + .btn-social(#007bb6); +} + +.btn-microsoft { + .btn-social(#2672ec); +} + +.btn-openid { + .btn-social(#f7931e); +} + +.btn-pinterest { + .btn-social(#cb2027); +} + +.btn-reddit { + .btn-social(#eff7ff, #000); +} + +.btn-soundcloud { + .btn-social(#ff5500); +} + +.btn-tumblr { + .btn-social(#2c4762); +} + +.btn-twitter { + .btn-social(#55acee); +} + +.btn-vimeo { + .btn-social(#1ab7ea); +} + +.btn-vk { + .btn-social(#587ea3); +} + +.btn-yahoo { + .btn-social(#720e9e); +} diff --git a/static/less/boxes.less b/static/less/boxes.less new file mode 100755 index 00000000..c92ef3ba --- /dev/null +++ b/static/less/boxes.less @@ -0,0 +1,485 @@ +/* + * Component: Box + * -------------- + */ +.box { + position: relative; + .border-radius(@box-border-radius); + background: #ffffff; + border-top: 3px solid @box-default-border-top-color; + margin-bottom: 20px; + width: 100%; + box-shadow: @box-boxshadow; + + // Box color variations + &.box-primary { + border-top-color: @light-blue; + } + &.box-info { + border-top-color: @aqua; + } + &.box-danger { + border-top-color: @red; + } + &.box-warning { + border-top-color: @yellow; + } + &.box-success { + border-top-color: @green; + } + &.box-default { + border-top-color: @gray; + } + + // collapsed mode + &.collapsed-box { + .box-body, + .box-footer { + display: none; + } + } + + .nav-stacked { + > li { + border-bottom: 1px solid @box-border-color; + margin: 0; + &:last-of-type { + border-bottom: none; + } + } + } + + // fixed height to 300px + &.height-control { + .box-body { + max-height: 300px; + overflow: auto; + } + } + + .border-right { + border-right: 1px solid @box-border-color; + } + .border-left { + border-left: 1px solid @box-border-color; + } + + //SOLID BOX + //--------- + //use this class to get a colored header and borders + + &.box-solid { + border-top: 0; + > .box-header { + .btn.btn-default { + background: transparent; + } + .btn, + a { + &:hover { + background: rgba(0, 0, 0, 0.1); + } + } + } + + // Box color variations + &.box-default { + .box-solid-variant(@gray, #444); + } + &.box-primary { + .box-solid-variant(@light-blue); + } + &.box-info { + .box-solid-variant(@aqua); + } + &.box-danger { + .box-solid-variant(@red); + } + &.box-warning { + .box-solid-variant(@yellow); + } + &.box-success { + .box-solid-variant(@green); + } + + > .box-header > .box-tools .btn { + border: 0; + box-shadow: none; + } + + // Fix font color for tiles + &[class*='bg'] { + > .box-header { + color: #fff; + } + } + + } + + //BOX GROUP + .box-group { + > .box { + margin-bottom: 5px; + } + } + + // jQuery Knob in a box + .knob-label { + text-align: center; + color: #333; + font-weight: 100; + font-size: 12px; + margin-bottom: 0.3em; + } +} + +.box, +.overlay-wrapper { + // Box overlay for LOADING STATE effect + > .overlay, + > .loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + + .overlay { + z-index: 50; + background: rgba(255, 255, 255, 0.7); + .border-radius(@box-border-radius); + > .fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px; + } + } + + .overlay.dark { + background: rgba(0, 0, 0, 0.5); + } +} + +//Add clearfix to header, body and footer +.box-header, +.box-body, +.box-footer { + .clearfix(); +} + +//Box header +.box-header { + color: #444; + display: block; + padding: @box-padding; + position: relative; + + //Add bottom border + &.with-border { + border-bottom: 1px solid @box-border-color; + .collapsed-box & { + border-bottom: none; + } + } + + //Icons and box title + > .fa, + > .glyphicon, + > .ion, + .box-title { + display: inline-block; + font-size: 18px; + margin: 0; + line-height: 1; + } + > .fa, + > .glyphicon, + > .ion { + margin-right: 5px; + } + > .box-tools { + position: absolute; + right: 10px; + top: 5px; + [data-toggle="tooltip"] { + position: relative; + } + + &.pull-right { + .dropdown-menu { + right: 0; + left: auto; + } + } + } +} + +//Box Tools Buttons +.btn-box-tool { + padding: 5px; + font-size: 12px; + background: transparent; + color: darken(@box-default-border-top-color, 20%); + .open &, + &:hover { + color: darken(@box-default-border-top-color, 40%); + } + &.btn:active { + box-shadow: none; + } +} + +//Box Body +.box-body { + .border-radius(0; 0; @box-border-radius; @box-border-radius); + padding: @box-padding; + .no-header & { + .border-top-radius(@box-border-radius); + } + // Tables within the box body + > .table { + margin-bottom: 0; + } + + // Calendar within the box body + .fc { + margin-top: 5px; + } + + .full-width-chart { + margin: -19px; + } + &.no-padding .full-width-chart { + margin: -9px; + } + + .box-pane { + .border-radius(0; 0; @box-border-radius; 0); + } + .box-pane-right { + .border-radius(0; 0; 0; @box-border-radius); + } +} + +//Box footer +.box-footer { + .border-radius(0; 0; @box-border-radius; @box-border-radius); + border-top: 1px solid @box-border-color; + padding: @box-padding; + background-color: @box-footer-bg; +} + +.chart-legend { + &:extend(.list-unstyled); + margin: 10px 0; + > li { + @media (max-width: @screen-sm-max) { + float: left; + margin-right: 10px; + } + } +} + +//Comment Box +.box-comments { + background: #f7f7f7; + .box-comment { + .clearfix(); + padding: 8px 0; + border-bottom: 1px solid #eee; + &:last-of-type { + border-bottom: 0; + } + &:first-of-type { + padding-top: 0; + } + img { + &:extend(.img-sm); + float: left; + } + } + .comment-text { + margin-left: 40px; + color: #555; + } + .username { + color: #444; + display: block; + font-weight: 600; + } + .text-muted { + font-weight: 400; + font-size: 12px; + } +} + +//Widgets +//----------- + +/* Widget: TODO LIST */ + +.todo-list { + margin: 0; + padding: 0; + list-style: none; + overflow: auto; + // Todo list element + > li { + .border-radius(2px); + padding: 10px; + background: #f4f4f4; + margin-bottom: 2px; + border-left: 2px solid #e6e7e8; + color: #444; + &:last-of-type { + margin-bottom: 0; + } + + > input[type='checkbox'] { + margin: 0 10px 0 5px; + } + + .text { + display: inline-block; + margin-left: 5px; + font-weight: 600; + } + + // Time labels + .label { + margin-left: 10px; + font-size: 9px; + } + + // Tools and options box + .tools { + display: none; + float: right; + color: @red; + // icons + > .fa, > .glyphicon, > .ion { + margin-right: 5px; + cursor: pointer; + } + + } + &:hover .tools { + display: inline-block; + } + + &.done { + color: #999; + .text { + text-decoration: line-through; + font-weight: 500; + } + + .label { + background: @gray !important; + } + } + } + + // Color varaity + .danger { + border-left-color: @red; + } + .warning { + border-left-color: @yellow; + } + .info { + border-left-color: @aqua; + } + .success { + border-left-color: @green; + } + .primary { + border-left-color: @light-blue; + } + + .handle { + display: inline-block; + cursor: move; + margin: 0 5px; + } + +} + +// END TODO WIDGET + +/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/ +.chat { + padding: 5px 20px 5px 10px; + + .item { + .clearfix(); + margin-bottom: 10px; + // The image + > img { + width: 40px; + height: 40px; + border: 2px solid transparent; + .border-radius(50%); + } + + > .online { + border: 2px solid @green; + } + > .offline { + border: 2px solid @red; + } + + // The message body + > .message { + margin-left: 55px; + margin-top: -40px; + > .name { + display: block; + font-weight: 600; + } + } + + // The attachment + > .attachment { + .border-radius(@attachment-border-radius); + background: #f4f4f4; + margin-left: 65px; + margin-right: 15px; + padding: 10px; + > h4 { + margin: 0 0 5px 0; + font-weight: 600; + font-size: 14px; + } + > p, > .filename { + font-weight: 600; + font-size: 13px; + font-style: italic; + margin: 0; + + } + .clearfix(); + } + } + +} + +//END CHAT WIDGET + +//Input in box +.box-input { + max-width: 200px; +} + +//A fix for panels body text color when placed within +// a modal +.modal { + .panel-body { + color: #444; + } +} diff --git a/static/less/buttons.less b/static/less/buttons.less new file mode 100755 index 00000000..7a0aaa69 --- /dev/null +++ b/static/less/buttons.less @@ -0,0 +1,168 @@ +/* + * Component: Button + * ----------------- + */ + +.btn { + .border-radius(@btn-border-radius); + .box-shadow(@btn-boxshadow); + border: 1px solid transparent; + + &.uppercase { + text-transform: uppercase + } + + // Flat buttons + &.btn-flat { + .border-radius(0); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + border-width: 1px; + } + + // Active state + &:active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + } + + &:focus { + outline: none; + } + + // input file btn + &.btn-file { + position: relative; + overflow: hidden; + > input[type='file'] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + font-size: 100px; + text-align: right; + .opacity(0); + outline: none; + background: white; + cursor: inherit; + display: block; + } + } +} + +//Button color variations +.btn-default { + background-color: #f4f4f4; + color: #444; + border-color: #ddd; + &:hover, + &:active, + &.hover { + background-color: darken(#f4f4f4, 5%); + } +} + +.btn-primary { + background-color: @light-blue; + border-color: darken(@light-blue, 5%); + &:hover, &:active, &.hover { + background-color: darken(@light-blue, 5%); + } +} + +.btn-success { + background-color: @green; + border-color: darken(@green, 5%); + &:hover, &:active, &.hover { + background-color: darken(@green, 5%); + } +} + +.btn-info { + background-color: @aqua; + border-color: darken(@aqua, 5%); + &:hover, &:active, &.hover { + background-color: darken(@aqua, 5%); + } +} + +.btn-danger { + background-color: @red; + border-color: darken(@red, 5%); + &:hover, &:active, &.hover { + background-color: darken(@red, 5%); + } +} + +.btn-warning { + background-color: @yellow; + border-color: darken(@yellow, 5%); + &:hover, &:active, &.hover { + background-color: darken(@yellow, 5%); + } +} + +.btn-outline { + border: 1px solid #fff; + background: transparent; + color: #fff; + &:hover, + &:focus, + &:active { + color: rgba(255, 255, 255, .7); + border-color: rgba(255, 255, 255, .7); + } +} + +.btn-link { + .box-shadow(none); +} + +//General .btn with bg class +.btn[class*='bg-']:hover { + .box-shadow(inset 0 0 100px rgba(0, 0, 0, 0.2)); +} + +// Application buttons +.btn-app { + .border-radius(3px); + position: relative; + padding: 15px 5px; + margin: 0 0 10px 10px; + min-width: 80px; + height: 60px; + text-align: center; + color: #666; + border: 1px solid #ddd; + background-color: #f4f4f4; + font-size: 12px; + //Icons within the btn + > .fa, > .glyphicon, > .ion { + font-size: 20px; + display: block; + } + + &:hover { + background: #f4f4f4; + color: #444; + border-color: #aaa; + } + + &:active, &:focus { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + } + + //The badge + > .badge { + position: absolute; + top: -3px; + right: -10px; + font-size: 10px; + font-weight: 400; + } +} diff --git a/static/less/callout.less b/static/less/callout.less new file mode 100755 index 00000000..9f6aaa1a --- /dev/null +++ b/static/less/callout.less @@ -0,0 +1,48 @@ +/* + * Component: Callout + * ------------------ + */ + +// Base styles (regardless of theme) +.callout { + .border-radius(3px); + margin: 0 0 20px 0; + padding: 15px 30px 15px 15px; + border-left: 5px solid #eee; + a { + color: #fff; + text-decoration: underline; + &:hover { + color: #eee; + } + } + h4 { + margin-top: 0; + font-weight: 600; + } + p:last-child { + margin-bottom: 0; + } + code, + .highlight { + background-color: #fff; + } + + // Themes for different contexts + &.callout-danger { + &:extend(.bg-red); + border-color: darken(@red, 10%); + } + &.callout-warning { + &:extend(.bg-yellow); + border-color: darken(@yellow, 10%); + } + &.callout-info { + &:extend(.bg-aqua); + border-color: darken(@aqua, 10%); + } + &.callout-success { + &:extend(.bg-green); + border-color: darken(@green, 10%); + } +} diff --git a/static/less/carousel.less b/static/less/carousel.less new file mode 100755 index 00000000..f069109a --- /dev/null +++ b/static/less/carousel.less @@ -0,0 +1,18 @@ +/* + * Component: Carousel + * ------------------- + */ +.carousel-control { + &.left, + &.right { + background-image: none; + } + > .fa { + font-size: 40px; + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -20px; + } +} diff --git a/static/less/control-sidebar.less b/static/less/control-sidebar.less new file mode 100755 index 00000000..fbb6d1f3 --- /dev/null +++ b/static/less/control-sidebar.less @@ -0,0 +1,289 @@ +/* + * Component: Control sidebar. By default, this is the right sidebar. + */ +//The sidebar's background control class +//This is a hack to make the background visible while scrolling +.control-sidebar-bg { + position: fixed; + z-index: 1000; + bottom: 0; +} + +//Transitions +.control-sidebar-bg, +.control-sidebar { + top: 0; + right: -@control-sidebar-width; + width: @control-sidebar-width; + .transition(right @transition-speed ease-in-out); +} + +//The sidebar +.control-sidebar { + position: absolute; + padding-top: @navbar-height; + z-index: 1010; + //Fix position after header collapse + @media (max-width: @screen-sm) { + padding-top: @navbar-height + 50; + } + //Tab panes + > .tab-content { + padding: 10px 15px; + } + //Open state with slide over content effect + &.control-sidebar-open { + &, + + .control-sidebar-bg { + right: 0; + } + } +} + +//Open without slide over content +.control-sidebar-open { + .control-sidebar-bg, + .control-sidebar { + right: 0; + } + @media (min-width: @screen-sm) { + .content-wrapper, + .right-side, + .main-footer { + margin-right: @control-sidebar-width; + } + } +} + +//Control sidebar tabs +.nav-tabs.control-sidebar-tabs { + > li { + &:first-of-type > a { + &, + &:hover, + &:focus { + border-left-width: 0; + } + } + > a { + .border-radius(0); + + //Hover and active states + &, + &:hover { + border-top: none; + border-right: none; + border-left: 1px solid transparent; + border-bottom: 1px solid transparent; + } + .icon { + font-size: 16px; + } + } + //Active state + &.active { + > a { + &, + &:hover, + &:focus, + &:active { + border-top: none; + border-right: none; + border-bottom: none; + } + } + } + } + //Remove responsiveness on small screens + @media (max-width: @screen-sm) { + display: table; + > li { + display: table-cell; + } + } +} + +//Headings in the sidebar content +.control-sidebar-heading { + font-weight: 400; + font-size: 16px; + padding: 10px 0; + margin-bottom: 10px; +} + +//Subheadings +.control-sidebar-subheading { + display: block; + font-weight: 400; + font-size: 14px; +} + +//Control Sidebar Menu +.control-sidebar-menu { + list-style: none; + padding: 0; + margin: 0 -15px; + > li > a { + .clearfix(); + display: block; + padding: 10px 15px; + > .control-sidebar-subheading { + margin-top: 0; + } + } + .menu-icon { + float: left; + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px; + } + .menu-info { + margin-left: 45px; + margin-top: 3px; + > .control-sidebar-subheading { + margin: 0; + } + > p { + margin: 0; + font-size: 11px; + } + } + .progress { + margin: 0; + } +} + +//Dark skin +.control-sidebar-dark { + color: @sidebar-dark-color; + // Background + &, + + .control-sidebar-bg { + background: @sidebar-dark-bg; + } + // Sidebar tabs + .nav-tabs.control-sidebar-tabs { + border-bottom: darken(@sidebar-dark-bg, 3%); + > li { + > a { + background: darken(@sidebar-dark-bg, 5%); + color: @sidebar-dark-color; + //Hover and active states + &, + &:hover, + &:focus { + border-left-color: darken(@sidebar-dark-bg, 7%); + border-bottom-color: darken(@sidebar-dark-bg, 7%); + } + &:hover, + &:focus, + &:active { + background: darken(@sidebar-dark-bg, 3%); + } + &:hover { + color: #fff; + } + } + //Active state + &.active { + > a { + &, + &:hover, + &:focus, + &:active { + background: @sidebar-dark-bg; + color: #fff; + } + } + } + } + } + //Heading & subheading + .control-sidebar-heading, + .control-sidebar-subheading { + color: #fff; + } + //Sidebar list + .control-sidebar-menu { + > li { + > a { + &:hover { + background: @sidebar-dark-hover-bg; + } + .menu-info { + > p { + color: @sidebar-dark-color; + } + } + } + } + } +} + +//Light skin +.control-sidebar-light { + color: lighten(@sidebar-light-color, 10%); + // Background + &, + + .control-sidebar-bg { + background: @sidebar-light-bg; + border-left: 1px solid @gray; + } + // Sidebar tabs + .nav-tabs.control-sidebar-tabs { + border-bottom: @gray; + > li { + > a { + background: darken(@sidebar-light-bg, 5%); + color: @sidebar-light-color; + //Hover and active states + &, + &:hover, + &:focus { + border-left-color: @gray; + border-bottom-color: @gray; + } + &:hover, + &:focus, + &:active { + background: darken(@sidebar-light-bg, 3%); + } + } + //Active state + &.active { + > a { + &, + &:hover, + &:focus, + &:active { + background: @sidebar-light-bg; + color: #111; + } + } + } + } + } + //Heading & subheading + .control-sidebar-heading, + .control-sidebar-subheading { + color: #111; + } + //Sidebar list + .control-sidebar-menu { + margin-left: -14px; + > li { + > a { + &:hover { + background: @sidebar-light-hover-bg; + } + .menu-info { + > p { + color: lighten(@sidebar-light-color, 10%); + } + } + } + } + } +} diff --git a/static/less/core.less b/static/less/core.less new file mode 100755 index 00000000..e5339890 --- /dev/null +++ b/static/less/core.less @@ -0,0 +1,174 @@ +/* + * Core: General Layout Style + * ------------------------- + */ +html, +body { + min-height: 100%; + .layout-boxed & { + height: 100%; + } +} + +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 400; + overflow-x: hidden; + overflow-y: auto; +} + +/* Layout */ +.wrapper { + .clearfix(); + min-height: 100%; + position: relative; + overflow: hidden; + .layout-boxed & { + max-width: 1250px; + margin: 0 auto; + min-height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + position: relative; + } +} + +.layout-boxed { + background: url('@{boxed-layout-bg-image-path}') repeat fixed; +} + +/* + * Content Wrapper - contains the main content + * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper ``` + */ +.content-wrapper, +.right-side, +.main-footer { + //Using disposable variable to join statements with a comma + @transition-rule: @transition-speed @transition-fn, + margin @transition-speed @transition-fn; + .transition-transform(@transition-rule); + margin-left: @sidebar-width; + z-index: 820; + //Top nav layout + .layout-top-nav & { + margin-left: 0; + } + @media (max-width: @screen-xs-max) { + margin-left: 0; + } + //When opening the sidebar on large screens + .sidebar-collapse & { + @media (min-width: @screen-sm) { + margin-left: 0; + } + } + //When opening the sidebar on small screens + .sidebar-open & { + @media (max-width: @screen-xs-max) { + .translate(@sidebar-width, 0); + } + } +} + +.content-wrapper, +.right-side { + min-height: 100%; + background-color: @body-bg; + z-index: 800; +} + +.main-footer { + background: #fff; + padding: 15px; + color: #444; + border-top: 1px solid @gray; +} + +/* Fixed layout */ +.fixed { + .main-header, + .main-sidebar, + .left-side { + position: fixed; + } + .main-header { + top: 0; + right: 0; + left: 0; + } + .content-wrapper, + .right-side { + padding-top: 50px; + @media (max-width: @screen-header-collapse) { + padding-top: 100px; + } + } + &.layout-boxed { + .wrapper { + max-width: 100%; + } + } +} + +body.hold-transition { + .content-wrapper, + .right-side, + .main-footer, + .main-sidebar, + .left-side, + .main-header > .navbar, + .main-header .logo { + /* Fix for IE */ + .transition(none); + } +} + +/* Content */ +.content { + min-height: 250px; + padding: 15px; + .container-fixed(@grid-gutter-width); +} + +/* H1 - H6 font */ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: 'Source Sans Pro', sans-serif; +} + +/* General Links */ +a { + color: @link-color; +} + +a:hover, +a:active, +a:focus { + outline: none; + text-decoration: none; + color: @link-hover-color; +} + +/* Page Header */ +.page-header { + margin: 10px 0 20px 0; + font-size: 22px; + + > small { + color: #666; + display: block; + margin-top: 5px; + } +} diff --git a/static/less/direct-chat.less b/static/less/direct-chat.less new file mode 100755 index 00000000..f35c07dd --- /dev/null +++ b/static/less/direct-chat.less @@ -0,0 +1,194 @@ +/* + * Component: Direct Chat + * ---------------------- + */ +.direct-chat { + .box-body { + .border-bottom-radius(0); + position: relative; + overflow-x: hidden; + padding: 0; + } + &.chat-pane-open { + .direct-chat-contacts { + .translate(0, 0); + } + } +} + +.direct-chat-messages { + .translate(0, 0); + padding: 10px; + height: 250px; + overflow: auto; +} + +.direct-chat-msg, +.direct-chat-text { + display: block; +} + +.direct-chat-msg { + .clearfix(); + margin-bottom: 10px; +} + +.direct-chat-messages, +.direct-chat-contacts { + .transition-transform(.5s ease-in-out); +} + +.direct-chat-text { + .border-radius(5px); + position: relative; + padding: 5px 10px; + background: @direct-chat-default-msg-bg; + border: 1px solid @direct-chat-default-msg-border-color; + margin: 5px 0 0 50px; + color: @direct-chat-default-font-color; + + //Create the arrow + &:after, + &:before { + position: absolute; + right: 100%; + top: 15px; + border: solid transparent; + border-right-color: @direct-chat-default-msg-border-color; + content: ' '; + height: 0; + width: 0; + pointer-events: none; + } + + &:after { + border-width: 5px; + margin-top: -5px; + } + &:before { + border-width: 6px; + margin-top: -6px; + } + .right & { + margin-right: 50px; + margin-left: 0; + &:after, + &:before { + right: auto; + left: 100%; + border-right-color: transparent; + border-left-color: @direct-chat-default-msg-border-color; + } + } +} + +.direct-chat-img { + .border-radius(50%); + float: left; + width: 40px; + height: 40px; + .right & { + float: right; + } +} + +.direct-chat-info { + display: block; + margin-bottom: 2px; + font-size: 12px; +} + +.direct-chat-name { + font-weight: 600; +} + +.direct-chat-timestamp { + color: #999; +} + +//Direct chat contacts pane +.direct-chat-contacts-open { + .direct-chat-contacts { + .translate(0, 0); + } +} + +.direct-chat-contacts { + .translate(101%, 0); + position: absolute; + top: 0; + bottom: 0; + height: 250px; + width: 100%; + background: #222d32; + color: #fff; + overflow: auto; +} + +//Contacts list -- for displaying contacts in direct chat contacts pane +.contacts-list { + &:extend(.list-unstyled); + > li { + .clearfix(); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + padding: 10px; + margin: 0; + &:last-of-type { + border-bottom: none; + } + } +} + +.contacts-list-img { + .border-radius(50%); + width: 40px; + float: left; +} + +.contacts-list-info { + margin-left: 45px; + color: #fff; +} + +.contacts-list-name, +.contacts-list-status { + display: block; +} + +.contacts-list-name { + font-weight: 600; +} + +.contacts-list-status { + font-size: 12px; +} + +.contacts-list-date { + color: #aaa; + font-weight: normal; +} + +.contacts-list-msg { + color: #999; +} + +//Direct Chat Variants +.direct-chat-danger { + .direct-chat-variant(@red); +} + +.direct-chat-primary { + .direct-chat-variant(@light-blue); +} + +.direct-chat-warning { + .direct-chat-variant(@yellow); +} + +.direct-chat-info { + .direct-chat-variant(@aqua); +} + +.direct-chat-success { + .direct-chat-variant(@green); +} diff --git a/static/less/dropdown.less b/static/less/dropdown.less new file mode 100755 index 00000000..6c0e212d --- /dev/null +++ b/static/less/dropdown.less @@ -0,0 +1,350 @@ +/* + * Component: Dropdown menus + * ------------------------- + */ + +/*Dropdowns in general*/ +.dropdown-menu { + box-shadow: none; + border-color: #eee; + > li > a { + color: #777; + } + > li > a > .glyphicon, + > li > a > .fa, + > li > a > .ion { + margin-right: 10px; + } + > li > a:hover { + background-color: lighten(@gray, 5%); + color: #333; + } + > .divider { + background-color: #eee; + } +} + +//Navbar custom dropdown menu +.navbar-nav > .notifications-menu, +.navbar-nav > .messages-menu, +.navbar-nav > .tasks-menu { + //fix width and padding + > .dropdown-menu { + > li { + position: relative; + } + width: 280px; + //Remove padding and margins + padding: 0 0 0 0; + margin: 0; + top: 100%; + } + //Define header class + > .dropdown-menu > li.header { + .border-radius(4px; 4px; 0; 0); + background-color: #ffffff; + padding: 7px 10px; + border-bottom: 1px solid #f4f4f4; + color: #444444; + font-size: 14px; + } + + //Define footer class + > .dropdown-menu > li.footer > a { + .border-radius(0; 0; 4px; 4px); + font-size: 12px; + background-color: #fff; + padding: 7px 10px; + border-bottom: 1px solid #eeeeee; + color: #444 !important; + @media (max-width: @screen-sm-max) { + background: #fff !important; + color: #444 !important; + } + text-align: center; + //Hover state + &:hover { + text-decoration: none; + font-weight: normal; + } + } + + //Clear inner menu padding and margins + > .dropdown-menu > li .menu { + max-height: 200px; + margin: 0; + padding: 0; + list-style: none; + overflow-x: hidden; + > li > a { + display: block; + white-space: nowrap; /* Prevent text from breaking */ + border-bottom: 1px solid #f4f4f4; + // Hove state + &:hover { + background: #f4f4f4; + text-decoration: none; + } + } + } +} + +//Notifications menu +.navbar-nav > .notifications-menu { + > .dropdown-menu > li .menu { + // Links inside the menu + > li > a { + color: #444444; + overflow: hidden; + text-overflow: ellipsis; + padding: 10px; + // Icons inside the menu + > .glyphicon, + > .fa, + > .ion { + width: 20px; + } + } + + } +} + +//Messages menu +.navbar-nav > .messages-menu { + //Inner menu + > .dropdown-menu > li .menu { + // Messages menu item + > li > a { + margin: 0; + //line-height: 20px; + padding: 10px 10px; + // User image + > div > img { + margin: auto 10px auto auto; + width: 40px; + height: 40px; + } + // Message heading + > h4 { + padding: 0; + margin: 0 0 0 45px; + color: #444444; + font-size: 15px; + position: relative; + // Small for message time display + > small { + color: #999999; + font-size: 10px; + position: absolute; + top: 0; + right: 0; + } + } + + > p { + margin: 0 0 0 45px; + font-size: 12px; + color: #888888; + } + + .clearfix(); + + } + + } +} + +//Tasks menu +.navbar-nav > .tasks-menu { + > .dropdown-menu > li .menu { + > li > a { + padding: 10px; + + > h3 { + font-size: 14px; + padding: 0; + margin: 0 0 10px 0; + color: #666666; + } + + > .progress { + padding: 0; + margin: 0; + } + } + } +} + +//User menu +.navbar-nav > .user-menu { + > .dropdown-menu { + .border-top-radius(0); + padding: 1px 0 0 0; + border-top-width: 0; + width: 280px; + + &, + > .user-body { + .border-bottom-radius(4px); + } + // Header menu + > li.user-header { + height: 175px; + padding: 10px; + text-align: center; + // User image + > img { + z-index: 5; + height: 90px; + width: 90px; + border: 3px solid; + border-color: transparent; + border-color: rgba(255, 255, 255, 0.2); + } + > p { + z-index: 5; + color: #fff; + color: rgba(255, 255, 255, 0.8); + font-size: 17px; + //text-shadow: 2px 2px 3px #333333; + margin-top: 10px; + > small { + display: block; + font-size: 12px; + } + } + } + + // Menu Body + > .user-body { + padding: 15px; + border-bottom: 1px solid #f4f4f4; + border-top: 1px solid #dddddd; + .clearfix(); + a { + color: #444 !important; + @media (max-width: @screen-sm-max) { + background: #fff !important; + color: #444 !important; + } + } + } + + // Menu Footer + > .user-footer { + background-color: #f9f9f9; + padding: 10px; + .clearfix(); + .btn-default { + color: #666666; + &:hover { + @media (max-width: @screen-sm-max) { + background-color: #f9f9f9; + } + } + } + } + } + .user-image { + float: left; + width: 25px; + height: 25px; + border-radius: 50%; + margin-right: 10px; + margin-top: -2px; + @media (max-width: @screen-xs-max) { + float: none; + margin-right: 0; + margin-top: -8px; + line-height: 10px; + } + } +} + +/* Add fade animation to dropdown menus by appending + the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/ +.open:not(.dropup) > .animated-dropdown-menu { + backface-visibility: visible !important; + .animation(flipInX .7s both); + +} + +@keyframes flipInX { + 0% { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transition-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + transform: perspective(400px); + } +} + +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + } +} + +/* Fix dropdown menu in navbars */ +.navbar-custom-menu > .navbar-nav { + > li { + position: relative; + > .dropdown-menu { + position: absolute; + right: 0; + left: auto; + } + } +} + +@media (max-width: @screen-sm-max) { + .navbar-custom-menu > .navbar-nav { + float: right; + > li { + position: static; + > .dropdown-menu { + position: absolute; + right: 5%; + left: auto; + border: 1px solid #ddd; + background: #fff; + } + } + } +} diff --git a/static/less/forms.less b/static/less/forms.less new file mode 100755 index 00000000..abf4013d --- /dev/null +++ b/static/less/forms.less @@ -0,0 +1,105 @@ +/* + * Component: Form + * --------------- + */ +.form-control { + .border-radius(@input-radius); + box-shadow: none; + border-color: @gray; + &:focus { + border-color: @light-blue; + box-shadow: none; + } + &::-moz-placeholder, + &:-ms-input-placeholder, + &::-webkit-input-placeholder { + color: #bbb; + opacity: 1; + } + + &:not(select) { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } +} + +.form-group { + &.has-success { + label { + color: @green; + } + .form-control { + border-color: @green; + box-shadow: none; + } + .help-block { + color: @green; + } + } + + &.has-warning { + label { + color: @yellow; + } + .form-control { + border-color: @yellow; + box-shadow: none; + } + .help-block { + color: @yellow; + } + } + + &.has-error { + label { + color: @red; + } + .form-control { + border-color: @red; + box-shadow: none; + } + .help-block { + color: @red; + } + } +} + +/* Input group */ +.input-group { + .input-group-addon { + .border-radius(@input-radius); + border-color: @gray; + background-color: #fff; + } +} + +/* button groups */ +.btn-group-vertical { + .btn { + &.btn-flat:first-of-type, &.btn-flat:last-of-type { + .border-radius(0); + } + } +} + +.icheck > label { + padding-left: 0; +} + +/* support Font Awesome icons in form-control */ +.form-control-feedback.fa { + line-height: @input-height-base; +} + +.input-lg + .form-control-feedback.fa, +.input-group-lg + .form-control-feedback.fa, +.form-group-lg .form-control + .form-control-feedback.fa { + line-height: @input-height-large; +} + +.input-sm + .form-control-feedback.fa, +.input-group-sm + .form-control-feedback.fa, +.form-group-sm .form-control + .form-control-feedback.fa { + line-height: @input-height-small; +} diff --git a/static/less/fullcalendar.less b/static/less/fullcalendar.less new file mode 100755 index 00000000..f0285145 --- /dev/null +++ b/static/less/fullcalendar.less @@ -0,0 +1,100 @@ +/* + * Plugin: Full Calendar + * --------------------- + */ +//Fullcalendar buttons +.fc-button { + background: #f4f4f4; + background-image: none; + color: #444; + border-color: #ddd; + border-bottom-color: #ddd; + &:hover, + &:active, + &.hover { + background-color: #e9e9e9; + } +} + +// Calendar title +.fc-header-title h2 { + font-size: 15px; + line-height: 1.6em; + color: #666; + margin-left: 10px; +} + +.fc-header-right { + padding-right: 10px; +} + +.fc-header-left { + padding-left: 10px; +} + +// Calendar table header cells +.fc-widget-header { + background: #fafafa; +} + +.fc-grid { + width: 100%; + border: 0; +} + +.fc-widget-header:first-of-type, +.fc-widget-content:first-of-type { + border-left: 0; + border-right: 0; +} + +.fc-widget-header:last-of-type, +.fc-widget-content:last-of-type { + border-right: 0; +} + +.fc-toolbar { + padding: @box-padding; + margin: 0; +} + +.fc-day-number { + font-size: 20px; + font-weight: 300; + padding-right: 10px; +} + +.fc-color-picker { + list-style: none; + margin: 0; + padding: 0; + > li { + float: left; + font-size: 30px; + margin-right: 5px; + line-height: 30px; + .fa { + .transition-transform(linear .3s); + &:hover { + .rotate(30deg); + } + } + } +} + +#add-new-event { + .transition(all linear .3s); +} + +.external-event { + padding: 5px 10px; + font-weight: bold; + margin-bottom: 4px; + box-shadow: @box-boxshadow; + text-shadow: @box-boxshadow; + border-radius: @box-border-radius; + cursor: move; + &:hover { + box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2); + } +} diff --git a/static/less/header.less b/static/less/header.less new file mode 100755 index 00000000..8c16089f --- /dev/null +++ b/static/less/header.less @@ -0,0 +1,248 @@ +/* + * Component: Main Header + * ---------------------- + */ + +.main-header { + position: relative; + max-height: 100px; + z-index: 1030; + //Navbar + > .navbar { + .transition(margin-left @transition-speed @transition-fn); + margin-bottom: 0; + margin-left: @sidebar-width; + border: none; + min-height: @navbar-height; + border-radius: 0; + .layout-top-nav & { + margin-left: 0; + } + } + //Navbar search text input + #navbar-search-input.form-control { + background: rgba(255, 255, 255, .2); + border-color: transparent; + &:focus, + &:active { + border-color: rgba(0, 0, 0, .1); + background: rgba(255, 255, 255, .9); + } + &::-moz-placeholder { + color: #ccc; + opacity: 1; + } + &:-ms-input-placeholder { + color: #ccc; + } + &::-webkit-input-placeholder { + color: #ccc; + } + } + //Navbar Right Menu + .navbar-custom-menu, + .navbar-right { + float: right; + @media (max-width: @screen-sm-max) { + a { + color: inherit; + background: transparent; + } + } + } + .navbar-right { + @media (max-width: @screen-header-collapse) { + float: none; + .navbar-collapse & { + margin: 7.5px -15px; + } + + > li { + color: inherit; + border: 0; + } + } + } + //Navbar toggle button + .sidebar-toggle { + float: left; + background-color: transparent; + background-image: none; + padding: @navbar-padding-vertical @navbar-padding-horizontal; + //Add the fontawesome bars icon + font-family: fontAwesome; + &:before { + content: "\f0c9"; + } + &:hover { + color: #fff; + } + &:focus, + &:active { + background: transparent; + } + } + .sidebar-toggle .icon-bar { + display: none; + } + //Navbar User Menu + .navbar .nav > li.user > a { + > .fa, + > .glyphicon, + > .ion { + margin-right: 5px; + } + } + + //Labels in navbar + .navbar .nav > li > a > .label { + position: absolute; + top: 9px; + right: 7px; + text-align: center; + font-size: 9px; + padding: 2px 3px; + line-height: .9; + } + + //Logo bar + .logo { + .transition(width @transition-speed @transition-fn); + display: block; + float: left; + height: @navbar-height; + font-size: 20px; + line-height: 50px; + text-align: center; + width: @sidebar-width; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 15px; + font-weight: 300; + overflow: hidden; + //Add support to sidebar mini by allowing the user to create + //2 logo designs. mini and lg + .logo-lg { + //should be visibile when sidebar isn't collapsed + display: block; + } + .logo-mini { + display: none; + } + } + //Navbar Brand. Alternative logo with layout-top-nav + .navbar-brand { + color: #fff; + } +} + +// Content Header +.content-header { + position: relative; + padding: 15px 15px 0 15px; + // Header Text + > h1 { + margin: 0; + font-size: 24px; + > small { + font-size: 15px; + display: inline-block; + padding-left: 4px; + font-weight: 300; + } + } + + > .breadcrumb { + float: right; + background: transparent; + margin-top: 0; + margin-bottom: 0; + font-size: 12px; + padding: 7px 5px; + position: absolute; + top: 15px; + right: 10px; + .border-radius(2px); + > li > a { + color: #444; + text-decoration: none; + display: inline-block; + > .fa, > .glyphicon, > .ion { + margin-right: 5px; + } + } + > li + li:before { + content: '>\00a0'; + } + } + + @media (max-width: @screen-sm-max) { + > .breadcrumb { + position: relative; + margin-top: 5px; + top: 0; + right: 0; + float: none; + background: @gray; + padding-left: 10px; + li:before { + color: darken(@gray, 20%); + } + } + } +} + +.navbar-toggle { + color: #fff; + border: 0; + margin: 0; + padding: @navbar-padding-vertical @navbar-padding-horizontal; +} + +//Control navbar scaffolding on x-small screens +@media (max-width: @screen-sm-max) { + .navbar-custom-menu .navbar-nav > li { + float: left; + } + + //Dont't let links get full width + .navbar-custom-menu .navbar-nav { + margin: 0; + float: left; + } + + .navbar-custom-menu .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + } +} + +// Collapse header +@media (max-width: @screen-header-collapse) { + .main-header { + position: relative; + .logo, + .navbar { + width: 100%; + float: none; + } + .navbar { + margin: 0; + } + .navbar-custom-menu { + float: right; + } + } +} + +.navbar-collapse.pull-left { + @media (max-width: @screen-sm-max) { + float: none !important; + + .navbar-custom-menu { + display: block; + position: absolute; + top: 0; + right: 40px; + } + } +} diff --git a/static/less/info-box.less b/static/less/info-box.less new file mode 100755 index 00000000..f8df3a8b --- /dev/null +++ b/static/less/info-box.less @@ -0,0 +1,75 @@ +/* + * Component: Info Box + * ------------------- + */ +.info-box { + display: block; + min-height: 90px; + background: #fff; + width: 100%; + box-shadow: @box-boxshadow; + .border-radius(2px); + margin-bottom: 15px; + small { + font-size: 14px; + } + .progress { + background: rgba(0, 0, 0, .2); + margin: 5px -10px 5px -10px; + height: 2px; + &, + & .progress-bar { + .border-radius(0); + } + .progress-bar { + background: #fff; + } + } +} + +.info-box-icon { + .border-radius(2px; 0; 2px; 0); + display: block; + float: left; + height: 90px; + width: 90px; + text-align: center; + font-size: 45px; + line-height: 90px; + background: rgba(0, 0, 0, 0.2); + > img { + max-width: 100%; + } +} + +.info-box-content { + padding: 5px 10px; + margin-left: 90px; +} + +.info-box-number { + display: block; + font-weight: bold; + font-size: 18px; +} + +.progress-description, +.info-box-text { + display: block; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.info-box-text { + text-transform: uppercase; +} + +.info-box-more { + display: block; +} + +.progress-description { + margin: 0; +} diff --git a/static/less/invoice.less b/static/less/invoice.less new file mode 100755 index 00000000..3d2fcf8d --- /dev/null +++ b/static/less/invoice.less @@ -0,0 +1,16 @@ +/* + * Page: Invoice + * ------------- + */ + +.invoice { + position: relative; + background: #fff; + border: 1px solid #f4f4f4; + padding: 20px; + margin: 10px 25px; +} + +.invoice-title { + margin-top: 0; +} diff --git a/static/less/labels.less b/static/less/labels.less new file mode 100755 index 00000000..902ca003 --- /dev/null +++ b/static/less/labels.less @@ -0,0 +1,28 @@ +/* + * Component: Label + * ---------------- + */ +.label-default { + background-color: @gray; + color: #444; +} + +.label-danger { + &:extend(.bg-red); +} + +.label-info { + &:extend(.bg-aqua); +} + +.label-warning { + &:extend(.bg-yellow); +} + +.label-primary { + &:extend(.bg-light-blue); +} + +.label-success { + &:extend(.bg-green); +} diff --git a/static/less/lockscreen.less b/static/less/lockscreen.less new file mode 100755 index 00000000..df52e3ba --- /dev/null +++ b/static/less/lockscreen.less @@ -0,0 +1,73 @@ +/* + * Page: Lock Screen + * ----------------- + */ +/* ADD THIS CLASS TO THE TAG */ +.lockscreen { + background: @gray; +} + +.lockscreen-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; + a { + color: #444; + } +} + +.lockscreen-wrapper { + max-width: 400px; + margin: 0 auto; + margin-top: 10%; +} + +/* User name [optional] */ +.lockscreen .lockscreen-name { + text-align: center; + font-weight: 600; +} + +/* Will contain the image and the sign in form */ +.lockscreen-item { + .border-radius(4px); + padding: 0; + background: #fff; + position: relative; + margin: 10px auto 30px auto; + width: 290px; +} + +/* User image */ +.lockscreen-image { + .border-radius(50%); + position: absolute; + left: -10px; + top: -25px; + background: #fff; + padding: 5px; + z-index: 10; + > img { + .border-radius(50%); + width: 70px; + height: 70px; + } +} + +/* Contains the password input and the login button */ +.lockscreen-credentials { + margin-left: 70px; + .form-control { + border: 0; + } + .btn { + background-color: #fff; + border: 0; + padding: 0 10px; + } +} + +.lockscreen-footer { + margin-top: 10px; +} diff --git a/static/less/login_and_register.less b/static/less/login_and_register.less new file mode 100755 index 00000000..453043f0 --- /dev/null +++ b/static/less/login_and_register.less @@ -0,0 +1,52 @@ +/* + * Page: Login & Register + * ---------------------- + */ + +.login-logo, +.register-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; + a { + color: #444; + } +} + +.login-page, +.register-page { + background: @gray; +} + +.login-box, +.register-box { + width: 360px; + margin: 7% auto; + @media (max-width: @screen-sm) { + width: 90%; + margin-top: 20px; + } +} + +.login-box-body, +.register-box-body { + background: #fff; + padding: 20px; + border-top: 0; + color: #666; + .form-control-feedback { + color: #777; + } +} + +.login-box-msg, +.register-box-msg { + margin: 0; + text-align: center; + padding: 0 20px 20px 20px; +} + +.social-auth-links { + margin: 10px 0; +} diff --git a/static/less/mailbox.less b/static/less/mailbox.less new file mode 100755 index 00000000..8e7a429f --- /dev/null +++ b/static/less/mailbox.less @@ -0,0 +1,88 @@ +/* + * Page: Mailbox + * ------------- + */ +.mailbox-messages { + > .table { + margin: 0; + } +} + +.mailbox-controls { + padding: 5px; + &.with-border { + border-bottom: 1px solid @box-border-color; + } +} + +.mailbox-read-info { + border-bottom: 1px solid @box-border-color; + padding: 10px; + h3 { + font-size: 20px; + margin: 0; + } + h5 { + margin: 0; + padding: 5px 0 0 0; + } +} + +.mailbox-read-time { + color: #999; + font-size: 13px; +} + +.mailbox-read-message { + padding: 10px; +} + +.mailbox-attachments { + &:extend(.list-unstyled); + li { + float: left; + width: 200px; + border: 1px solid #eee; + margin-bottom: 10px; + margin-right: 10px; + } +} + +.mailbox-attachment-name { + font-weight: bold; + color: #666; +} + +.mailbox-attachment-icon, +.mailbox-attachment-info, +.mailbox-attachment-size { + display: block; +} + +.mailbox-attachment-info { + padding: 10px; + background: #f4f4f4; +} + +.mailbox-attachment-size { + color: #999; + font-size: 12px; +} + +.mailbox-attachment-icon { + text-align: center; + font-size: 65px; + color: #666; + padding: 20px 10px; + &.has-img { + padding: 0; + > img { + max-width: 100%; + height: auto; + } + } +} + +.mailbox-attachment-close { + &:extend(.close); +} diff --git a/static/less/miscellaneous.less b/static/less/miscellaneous.less new file mode 100755 index 00000000..04f0f2d6 --- /dev/null +++ b/static/less/miscellaneous.less @@ -0,0 +1,606 @@ +/* + * General: Miscellaneous + * ---------------------- + */ +// 10px padding and margins +.pad { + padding: 10px; +} + +.margin { + margin: 10px; +} + +.margin-bottom { + margin-bottom: 20px; +} + +.margin-bottom-none { + margin-bottom: 0; +} + +.margin-r-5 { + margin-right: 5px; +} + +// Display inline +.inline { + display: inline; +} + +// Description Blocks +.description-block { + display: block; + margin: 10px 0; + text-align: center; + &.margin-bottom { + margin-bottom: 25px; + } + > .description-header { + margin: 0; + padding: 0; + font-weight: 600; + font-size: 16px; + } + > .description-text { + text-transform: uppercase; + } +} + +// Background colors +.bg-red, +.bg-yellow, +.bg-aqua, +.bg-blue, +.bg-light-blue, +.bg-green, +.bg-navy, +.bg-teal, +.bg-olive, +.bg-lime, +.bg-orange, +.bg-fuchsia, +.bg-purple, +.bg-maroon, +.bg-black, +.bg-red-active, +.bg-yellow-active, +.bg-aqua-active, +.bg-blue-active, +.bg-light-blue-active, +.bg-green-active, +.bg-navy-active, +.bg-teal-active, +.bg-olive-active, +.bg-lime-active, +.bg-orange-active, +.bg-fuchsia-active, +.bg-purple-active, +.bg-maroon-active, +.bg-black-active { + color: #fff !important; +} + +.bg-gray { + color: #000; + background-color: @gray !important; +} + +.bg-gray-light { + background-color: #f7f7f7; +} + +.bg-black { + background-color: @black !important; +} + +.bg-red { + background-color: @red !important; +} + +.bg-yellow { + background-color: @yellow !important; +} + +.bg-aqua { + background-color: @aqua !important; +} + +.bg-blue { + background-color: @blue !important; +} + +.bg-light-blue { + background-color: @light-blue !important; +} + +.bg-green { + background-color: @green !important; +} + +.bg-navy { + background-color: @navy !important; +} + +.bg-teal { + background-color: @teal !important; +} + +.bg-olive { + background-color: @olive !important; +} + +.bg-lime { + background-color: @lime !important; +} + +.bg-orange { + background-color: @orange !important; +} + +.bg-fuchsia { + background-color: @fuchsia !important; +} + +.bg-purple { + background-color: @purple !important; +} + +.bg-maroon { + background-color: @maroon !important; +} + +//Set of Active Background Colors +.bg-gray-active { + color: #000; + background-color: darken(@gray, 10%) !important; +} + +.bg-black-active { + background-color: darken(@black, 10%) !important; +} + +.bg-red-active { + background-color: darken(@red , 6%) !important; +} + +.bg-yellow-active { + background-color: darken(@yellow , 6%) !important; +} + +.bg-aqua-active { + background-color: darken(@aqua , 6%) !important; +} + +.bg-blue-active { + background-color: darken(@blue , 10%) !important; +} + +.bg-light-blue-active { + background-color: darken(@light-blue , 6%) !important; +} + +.bg-green-active { + background-color: darken(@green , 5%) !important; +} + +.bg-navy-active { + background-color: darken(@navy , 2%) !important; +} + +.bg-teal-active { + background-color: darken(@teal , 5%) !important; +} + +.bg-olive-active { + background-color: darken(@olive , 5%) !important; +} + +.bg-lime-active { + background-color: darken(@lime , 5%) !important; +} + +.bg-orange-active { + background-color: darken(@orange , 5%) !important; +} + +.bg-fuchsia-active { + background-color: darken(@fuchsia , 5%) !important; +} + +.bg-purple-active { + background-color: darken(@purple , 5%) !important; +} + +.bg-maroon-active { + background-color: darken(@maroon , 3%) !important; +} + +//Disabled! +[class^="bg-"].disabled { + .opacity(.65); +} + +// Text colors +.text-red { + color: @red !important; +} + +.text-yellow { + color: @yellow !important; +} + +.text-aqua { + color: @aqua !important; +} + +.text-blue { + color: @blue !important; +} + +.text-black { + color: @black !important; +} + +.text-light-blue { + color: @light-blue !important; +} + +.text-green { + color: @green !important; +} + +.text-gray { + color: @gray !important; +} + +.text-navy { + color: @navy !important; +} + +.text-teal { + color: @teal !important; +} + +.text-olive { + color: @olive !important; +} + +.text-lime { + color: @lime !important; +} + +.text-orange { + color: @orange !important; +} + +.text-fuchsia { + color: @fuchsia !important; +} + +.text-purple { + color: @purple !important; +} + +.text-maroon { + color: @maroon !important; +} + +.link-muted { + color: darken(@gray, 30%); + &:hover, + &:focus { + color: darken(@gray, 40%); + } +} + +.link-black { + color: #666; + &:hover, + &:focus { + color: #999; + } +} + +// Hide elements by display none only +.hide { + display: none !important; +} + +// Remove borders +.no-border { + border: 0 !important; +} + +// Remove padding +.no-padding { + padding: 0 !important; +} + +// Remove margins +.no-margin { + margin: 0 !important; +} + +// Remove box shadow +.no-shadow { + box-shadow: none !important; +} + +// Unstyled List +.list-unstyled { + list-style: none; + margin: 0; + padding: 0; +} + +.list-group-unbordered { + > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; + } +} + +// Remove border radius +.flat { + .border-radius(0) !important; +} + +.text-bold { + &, &.table td, &.table th { + font-weight: 700; + } +} + +.text-sm { + font-size: 12px; +} + +// _fix for sparkline tooltip +.jqstooltip { + padding: 5px !important; + width: auto !important; + height: auto !important; +} + +// Gradient Background colors +.bg-teal-gradient { + .gradient(@teal; @teal; lighten(@teal, 16%)) !important; + color: #fff; +} + +.bg-light-blue-gradient { + .gradient(@light-blue; @light-blue; lighten(@light-blue, 12%)) !important; + color: #fff; +} + +.bg-blue-gradient { + .gradient(@blue; @blue; lighten(@blue, 7%)) !important; + color: #fff; +} + +.bg-aqua-gradient { + .gradient(@aqua; @aqua; lighten(@aqua, 7%)) !important; + color: #fff; +} + +.bg-yellow-gradient { + .gradient(@yellow; @yellow; lighten(@yellow, 16%)) !important; + color: #fff; +} + +.bg-purple-gradient { + .gradient(@purple; @purple; lighten(@purple, 16%)) !important; + color: #fff; +} + +.bg-green-gradient { + .gradient(@green; @green; lighten(@green, 7%)) !important; + color: #fff; +} + +.bg-red-gradient { + .gradient(@red; @red; lighten(@red, 10%)) !important; + color: #fff; +} + +.bg-black-gradient { + .gradient(@black; @black; lighten(@black, 10%)) !important; + color: #fff; +} + +.bg-maroon-gradient { + .gradient(@maroon; @maroon; lighten(@maroon, 10%)) !important; + color: #fff; +} + +//Description Block Extension +.description-block { + .description-icon { + font-size: 16px; + } +} + +//Remove top padding +.no-pad-top { + padding-top: 0; +} + +//Make position static +.position-static { + position: static !important; +} + +//List utility classes +.list-header { + font-size: 15px; + padding: 10px 4px; + font-weight: bold; + color: #666; +} + +.list-seperator { + height: 1px; + background: @box-border-color; + margin: 15px 0 9px 0; +} + +.list-link { + > a { + padding: 4px; + color: #777; + &:hover { + color: #222; + } + } +} + +//Light font weight +.font-light { + font-weight: 300; +} + +//User block +.user-block { + .clearfix(); + img { + width: 40px; + height: 40px; + float: left; + } + .username, + .description, + .comment { + display: block; + margin-left: 50px; + } + .username { + font-size: 16px; + font-weight: 600; + } + .description { + color: #999; + font-size: 13px; + } + &.user-block-sm { + img { + &:extend(.img-sm); + } + .username, + .description, + .comment { + margin-left: 40px; + } + .username { + font-size: 14px; + } + } +} + +//Image sizes +.img-sm, +.img-md, +.img-lg { + float: left; +} + +.img-sm { + width: 30px !important; + height: 30px !important; + + .img-push { + margin-left: 40px; + } +} + +.img-md { + width: 60px; + height: 60px; + + .img-push { + margin-left: 70px; + } +} + +.img-lg { + width: 100px; + height: 100px; + + .img-push { + margin-left: 110px; + } +} + +// Image bordered +.img-bordered { + border: 3px solid @gray; + padding: 3px; +} + +.img-bordered-sm { + border: 2px solid @gray; + padding: 2px; +} + +//General attachemnt block +.attachment-block { + border: 1px solid @box-border-color; + padding: 5px; + margin-bottom: 10px; + background: #f7f7f7; + + .attachment-img { + max-width: 100px; + max-height: 100px; + height: auto; + float: left; + } + .attachment-pushed { + margin-left: 110px; + } + .attachment-heading { + margin: 0; + } + .attachment-text { + color: #555; + } +} + +.connectedSortable { + min-height: 100px; +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.sort-highlight { + background: #f4f4f4; + border: 1px dashed #ddd; + margin-bottom: 10px; +} + +.full-opacity-hover { + .opacity(.65); + &:hover { + .opacity(1); + } +} + +// Charts +.chart { + position: relative; + overflow: hidden; + width: 100%; + svg, + canvas { + width: 100% !important; + } +} diff --git a/static/less/mixins.less b/static/less/mixins.less new file mode 100755 index 00000000..b36be56e --- /dev/null +++ b/static/less/mixins.less @@ -0,0 +1,313 @@ +//AdminLTE mixins +//=============== + +//Changes the color and the hovering properties of the navbar +.navbar-variant(@color; @font-color: rgba(255, 255, 255, 0.8); @hover-color: #f6f6f6; @hover-bg: rgba(0, 0, 0, 0.1)) { + background-color: @color; + //Navbar links + .nav > li > a { + color: @font-color; + } + + .nav > li > a:hover, + .nav > li > a:active, + .nav > li > a:focus, + .nav .open > a, + .nav .open > a:hover, + .nav .open > a:focus, + .nav > .active > a { + background: @hover-bg; + color: @hover-color; + } + + //Add color to the sidebar toggle button + .sidebar-toggle { + color: @font-color; + &:hover { + color: @hover-color; + background: @hover-bg; + } + } +} + +//Logo color variation +.logo-variant(@bg-color; @color: #fff; @border-bottom-color: transparent; @border-bottom-width: 0) { + background-color: @bg-color; + color: @color; + border-bottom: @border-bottom-width solid @border-bottom-color; + + &:hover { + background-color: darken(@bg-color, 1%); + } +} + +//Box solid color variantion creator +.box-solid-variant(@color; @text-color: #fff) { + border: 1px solid @color; + > .box-header { + color: @text-color; + background: @color; + background-color: @color; + a, + .btn { + color: @text-color; + } + } +} + +//Direct Chat Variant +.direct-chat-variant(@bg-color; @color: #fff) { + .right > .direct-chat-text { + background: @bg-color; + border-color: @bg-color; + color: @color; + &:after, + &:before { + border-left-color: @bg-color; + } + } +} + +//border radius creator +.border-radius(@radius) { + border-radius: @radius; +} + +//Different radius each side +.border-radius(@top-left; +@top-right +; +@bottom-left +; +@bottom-right +) +{ + border-top-left-radius: @top-left +; + border-top-right-radius: @top-right +; + border-bottom-right-radius: @bottom-right +; + border-bottom-left-radius: @bottom-left +; +} + +//Gradient background +.gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) { + background: @color; + background: -webkit-gradient(linear, + left bottom, + left top, + color-stop(0, @start), + color-stop(1, @stop)); + background: -ms-linear-gradient(bottom, + @start, + @stop); + background: -moz-linear-gradient(center bottom, + @start 0%, + @stop 100%); + background: -o-linear-gradient(@stop, + @start); + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@stop,@start)); +} + +//Added 2.1.0 +//Skins Mixins + +//Dark Sidebar Mixin +.skin-dark-sidebar(@link-hover-border-color) { + // Sidebar background color (Both .wrapper and .left-side are responsible for sidebar bg color) + .wrapper, + .main-sidebar, + .left-side { + background-color: @sidebar-dark-bg; + } + //User Panel (resides in the sidebar) + .user-panel { + > .info, > .info > a { + color: #fff; + } + } + //Sidebar Menu. First level links + .sidebar-menu > li { + //Section Headning + &.header { + color: lighten(@sidebar-dark-bg, 20%); + background: darken(@sidebar-dark-bg, 4%); + } + //links + > a { + border-left: 3px solid transparent; + } + //Hover and active states + &:hover > a, &.active > a { + color: @sidebar-dark-hover-color; + background: @sidebar-dark-hover-bg; + border-left-color: @link-hover-border-color; + } + //First Level Submenu + > .treeview-menu { + margin: 0 1px; + background: @sidebar-dark-submenu-bg; + } + } + //All links within the sidebar menu + .sidebar a { + color: @sidebar-dark-color; + &:hover { + text-decoration: none; + } + } + //All submenus + .treeview-menu { + > li { + > a { + color: @sidebar-dark-submenu-color; + } + &.active > a, > a:hover { + color: @sidebar-dark-submenu-hover-color; + } + } + } + //The sidebar search form + .sidebar-form { + .border-radius(3px); + border: 1px solid lighten(@sidebar-dark-bg, 10%); + margin: 10px 10px; + input[type="text"], .btn { + box-shadow: none; + background-color: lighten(@sidebar-dark-bg, 10%); + border: 1px solid transparent; + height: 35px; + .transition(all @transition-speed @transition-fn); + } + input[type="text"] { + color: #666; + .border-radius(2px, 0, 2px, 0); + &:focus, &:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; + } + &:focus + .input-group-btn .btn { + border-left-color: #fff; + } + } + .btn { + color: #999; + .border-radius(0, 2px, 0, 2px); + } + } +} + +//Light Sidebar Mixin +.skin-light-sidebar(@icon-active-color) { + // Sidebar background color (Both .wrapper and .left-side are responsible for sidebar bg color) + .wrapper, + .main-sidebar, + .left-side { + background-color: @sidebar-light-bg; + } + .content-wrapper, + .main-footer { + border-left: 1px solid @gray; + } + //User Panel (resides in the sidebar) + .user-panel { + > .info, > .info > a { + color: @sidebar-light-color; + } + } + //Sidebar Menu. First level links + .sidebar-menu > li { + .transition(border-left-color .3s ease); + //border-left: 3px solid transparent; + //Section Headning + &.header { + color: lighten(@sidebar-light-color, 25%); + background: @sidebar-light-bg; + } + //links + > a { + border-left: 3px solid transparent; + font-weight: 600; + } + //Hover and active states + &:hover > a, + &.active > a { + color: @sidebar-light-hover-color; + background: @sidebar-light-hover-bg; + } + &:hover > a { + + } + &.active { + border-left-color: @icon-active-color; + > a { + font-weight: 600; + } + } + //First Level Submenu + > .treeview-menu { + background: @sidebar-light-submenu-bg; + } + } + //All links within the sidebar menu + .sidebar a { + color: @sidebar-light-color; + &:hover { + text-decoration: none; + } + } + //All submenus + .treeview-menu { + > li { + > a { + color: @sidebar-light-submenu-color; + } + &.active > a, + > a:hover { + color: @sidebar-light-submenu-hover-color; + } + &.active > a { + font-weight: 600; + } + } + } + //The sidebar search form + .sidebar-form { + .border-radius(3px); + border: 1px solid @gray; //darken(@sidebar-light-bg, 5%); + margin: 10px 10px; + input[type="text"], + .btn { + box-shadow: none; + background-color: #fff; //darken(@sidebar-light-bg, 3%); + border: 1px solid transparent; + height: 35px; + .transition(all @transition-speed @transition-fn); + } + input[type="text"] { + color: #666; + .border-radius(2px, 0, 2px, 0); + &:focus, + &:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; + } + &:focus + .input-group-btn .btn { + border-left-color: #fff; + } + } + .btn { + color: #999; + .border-radius(0, 2px, 0, 2px); + } + } + @media (min-width: @screen-sm-min) { + &.sidebar-mini.sidebar-collapse { + .sidebar-menu > li > .treeview-menu { + border-left: 1px solid @gray; + } + } + } +} diff --git a/static/less/modal.less b/static/less/modal.less new file mode 100755 index 00000000..f42db1cc --- /dev/null +++ b/static/less/modal.less @@ -0,0 +1,80 @@ +/* + * Component: modal + * ---------------- + */ +.modal { + background: rgba(0, 0, 0, .3); +} + +.modal-content { + .border-radius(0); + .box-shadow(0 2px 3px rgba(0, 0, 0, .125)); + border: 0; + @media (min-width: @screen-sm-min) { + .box-shadow(0 2px 3px rgba(0, 0, 0, .125)); + } +} + +.modal-header { + border-bottom-color: @box-border-color; +} + +.modal-footer { + border-top-color: @box-border-color; +} + +//Modal variants +.modal-primary { + .modal-body { + &:extend(.bg-light-blue); + } + .modal-header, + .modal-footer { + &:extend(.bg-light-blue-active); + border-color: darken(@light-blue, 10%); + } +} + +.modal-warning { + .modal-body { + &:extend(.bg-yellow); + } + .modal-header, + .modal-footer { + &:extend(.bg-yellow-active); + border-color: darken(@yellow, 10%); + } +} + +.modal-info { + .modal-body { + &:extend(.bg-aqua); + } + .modal-header, + .modal-footer { + &:extend(.bg-aqua-active); + border-color: darken(@aqua, 10%); + } +} + +.modal-success { + .modal-body { + &:extend(.bg-green); + } + .modal-header, + .modal-footer { + &:extend(.bg-green-active); + border-color: darken(@green, 10%); + } +} + +.modal-danger { + .modal-body { + &:extend(.bg-red); + } + .modal-header, + .modal-footer { + &:extend(.bg-red-active); + border-color: darken(@red, 10%); + } +} diff --git a/static/less/navs.less b/static/less/navs.less new file mode 100755 index 00000000..af0dc6aa --- /dev/null +++ b/static/less/navs.less @@ -0,0 +1,226 @@ +/* + * Component: Nav + * -------------- + */ + +.nav { + > li > a:hover, + > li > a:active, + > li > a:focus { + color: #444; + background: #f7f7f7; + } +} + +/* NAV PILLS */ +.nav-pills { + > li > a { + .border-radius(0); + border-top: 3px solid transparent; + color: #444; + > .fa, + > .glyphicon, + > .ion { + margin-right: 5px; + } + } + > li.active > a, + > li.active > a:hover, + > li.active > a:focus { + border-top-color: @light-blue; + } + > li.active > a { + font-weight: 600; + } +} + +/* NAV STACKED */ +.nav-stacked { + > li > a { + .border-radius(0); + border-top: 0; + border-left: 3px solid transparent; + color: #444; + } + > li.active > a, + > li.active > a:hover { + background: transparent; + color: #444; + border-top: 0; + border-left-color: @light-blue; + } + + > li.header { + border-bottom: 1px solid #ddd; + color: #777; + margin-bottom: 10px; + padding: 5px 10px; + text-transform: uppercase; + } +} + +/* NAV TABS */ +.nav-tabs-custom { + margin-bottom: 20px; + background: #fff; + box-shadow: @box-boxshadow; + border-radius: @box-border-radius; + > .nav-tabs { + margin: 0; + border-bottom-color: #f4f4f4; + .border-top-radius(@box-border-radius); + > li { + border-top: 3px solid transparent; + margin-bottom: -2px; + > a { + color: #444; + .border-radius(0); + &.text-muted { + color: #999; + } + &, + &:hover { + background: transparent; + margin: 0; + } + &:hover { + color: #999; + } + } + &:not(.active) { + > a:hover, + > a:focus, + > a:active { + border-color: transparent; + } + } + margin-right: 5px; + } + + > li.active { + border-top-color: @light-blue; + & > a, + &:hover > a { + background-color: #fff; + color: #444; + } + > a { + border-top-color: transparent; + border-left-color: #f4f4f4; + border-right-color: #f4f4f4; + } + + } + + > li:first-of-type { + margin-left: 0; + &.active { + > a { + border-left-color: transparent; + } + } + } + + //Pulled to the right + &.pull-right { + float: none !important; + > li { + float: right; + } + > li:first-of-type { + margin-right: 0; + > a { + border-left-width: 1px; + } + &.active { + > a { + border-left-color: #f4f4f4; + border-right-color: transparent; + } + } + } + } + + > li.header { + line-height: 35px; + padding: 0 10px; + font-size: 20px; + color: #444; + > .fa, + > .glyphicon, + > .ion { + margin-right: 5px; + } + } + } + + > .tab-content { + background: #fff; + padding: 10px; + .border-bottom-radius(@box-border-radius); + } + + .dropdown.open > a { + &:active, + &:focus { + background: transparent; + color: #999; + } + } + // Tab color variations + &.tab-primary { + > .nav-tabs { + > li.active { + border-top-color: @light-blue; + } + } + } + &.tab-info { + > .nav-tabs { + > li.active { + border-top-color: @aqua; + } + } + } + &.tab-danger { + > .nav-tabs { + > li.active { + border-top-color: @red; + } + } + } + &.tab-warning { + > .nav-tabs { + > li.active { + border-top-color: @yellow; + } + } + } + &.tab-success { + > .nav-tabs { + > li.active { + border-top-color: @green; + } + } + } + &.tab-default { + > .nav-tabs { + > li.active { + border-top-color: @gray; + } + } + } +} + +/* PAGINATION */ +.pagination { + > li > a { + background: #fafafa; + color: #666; + } + &.pagination-flat { + > li > a { + .border-radius(0) !important; + } + } +} diff --git a/static/less/print.less b/static/less/print.less new file mode 100755 index 00000000..52b14f20 --- /dev/null +++ b/static/less/print.less @@ -0,0 +1,54 @@ +/* + * Misc: print + * ----------- + */ +@media print { + //Add to elements that you do not want to show when printing + .no-print { + display: none !important; + } + + //Elements that we want to hide when printing + .main-sidebar, + .left-side, + .main-header, + .content-header { + &:extend(.no-print); + } + + //This is the only element that should appear, so let's remove the margins + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0 !important; + min-height: 0 !important; + .translate(0, 0) !important; + } + + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 0 !important; + } + + //Invoice printing + .invoice { + width: 100%; + border: 0; + margin: 0; + padding: 0; + } + + .invoice-col { + float: left; + width: 33.3333333%; + } + + //Make sure table content displays properly + .table-responsive { + overflow: auto; + > .table tr th, + > .table tr td { + white-space: normal !important; + } + } +} diff --git a/static/less/products.less b/static/less/products.less new file mode 100755 index 00000000..49f30a6b --- /dev/null +++ b/static/less/products.less @@ -0,0 +1,45 @@ +/* + * Component: Products List + * ------------------------ + */ +.products-list { + list-style: none; + margin: 0; + padding: 0; + > .item { + .border-radius(@box-border-radius); + .box-shadow(@box-boxshadow); + .clearfix(); + padding: 10px 0; + background: #fff; + } + .product-img { + float: left; + img { + width: 50px; + height: 50px; + } + } + .product-info { + margin-left: 60px; + } + .product-title { + font-weight: 600; + } + .product-description { + display: block; + color: #999; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +.product-list-in-box > .item { + .box-shadow(none); + .border-radius(0); + border-bottom: 1px solid @box-border-color; + &:last-of-type { + border-bottom-width: 0; + } +} diff --git a/static/less/profile.less b/static/less/profile.less new file mode 100755 index 00000000..3cb8e091 --- /dev/null +++ b/static/less/profile.less @@ -0,0 +1,31 @@ +/* + * Page: Profile + * ------------- + */ + +.profile-user-img { + margin: 0 auto; + width: 100px; + padding: 3px; + border: 3px solid @gray; +} + +.profile-username { + font-size: 21px; + margin-top: 5px; +} + +.post { + border-bottom: 1px solid @gray; + margin-bottom: 15px; + padding-bottom: 15px; + color: #666; + &:last-of-type { + border-bottom: 0; + margin-bottom: 0; + padding-bottom: 0; + } + .user-block { + margin-bottom: 15px; + } +} diff --git a/static/less/progress-bars.less b/static/less/progress-bars.less new file mode 100755 index 00000000..423edc44 --- /dev/null +++ b/static/less/progress-bars.less @@ -0,0 +1,111 @@ +/* + * Component: Progress Bar + * ----------------------- + */ + +//General CSS +.progress, +.progress > .progress-bar { + .box-shadow(none); + &, .progress-bar { + .border-radius(@progress-bar-border-radius); + } +} + +/* size variation */ +.progress.sm, +.progress-sm { + height: 10px; + &, .progress-bar { + .border-radius(@progress-bar-sm-border-radius); + } +} + +.progress.xs, +.progress-xs { + height: 7px; + &, .progress-bar { + .border-radius(@progress-bar-xs-border-radius); + } +} + +.progress.xxs, +.progress-xxs { + height: 3px; + &, .progress-bar { + .border-radius(@progress-bar-xs-border-radius); + } +} + +/* Vertical bars */ +.progress.vertical { + position: relative; + width: 30px; + height: 200px; + display: inline-block; + margin-right: 10px; + > .progress-bar { + width: 100%; + position: absolute; + bottom: 0; + } + + //Sizes + &.sm, + &.progress-sm { + width: 20px; + } + + &.xs, + &.progress-xs { + width: 10px; + } + &.xxs, + &.progress-xxs { + width: 3px; + } +} + +//Progress Groups +.progress-group { + .progress-text { + font-weight: 600; + } + .progress-number { + float: right; + } +} + +/* Remove margins from progress bars when put in a table */ +.table { + tr > td .progress { + margin: 0; + } +} + +// Variations +// ------------------------- +.progress-bar-light-blue, +.progress-bar-primary { + .progress-bar-variant(@light-blue); +} + +.progress-bar-green, +.progress-bar-success { + .progress-bar-variant(@green); +} + +.progress-bar-aqua, +.progress-bar-info { + .progress-bar-variant(@aqua); +} + +.progress-bar-yellow, +.progress-bar-warning { + .progress-bar-variant(@yellow); +} + +.progress-bar-red, +.progress-bar-danger { + .progress-bar-variant(@red); +} diff --git a/static/less/select2.less b/static/less/select2.less new file mode 100755 index 00000000..d144da08 --- /dev/null +++ b/static/less/select2.less @@ -0,0 +1,117 @@ +/* + * Plugin: Select2 + * --------------- + */ + +//Signle select +.select2-container--default, +.select2-selection { + &.select2-container--focus, + &:focus, + &:active { + outline: none; + } + .select2-selection--single { + border: 1px solid @gray; + border-radius: @input-radius; + padding: 6px 12px; + height: 34px; + } +} + +.select2-container--default.select2-container--open { + border-color: @light-blue; +} + +.select2-dropdown { + border: 1px solid @gray; + border-radius: @input-radius; +} + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: @light-blue; + color: white; +} + +.select2-results__option { + padding: 6px 12px; + user-select: none; + -webkit-user-select: none; +} + +.select2-container .select2-selection--single .select2-selection__rendered { + padding-left: 0; + padding-right: 0; + height: auto; + margin-top: -4px; +} + +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 6px; + padding-left: 20px; +} + +.select2-container--default .select2-selection--single .select2-selection__arrow { + height: 28px; + right: 3px; +} + +.select2-container--default .select2-selection--single .select2-selection__arrow b { + margin-top: 0; +} + +.select2-dropdown, +.select2-search--inline { + .select2-search__field { + border: 1px solid @gray; + &:focus { + outline: none; + border: 1px solid @light-blue; + } + } +} + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; +} + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; + &, + &:hover { + color: #444; + } +} + +//Multiple select +.select2-container--default { + .select2-selection--multiple { + border: 1px solid @gray; + border-radius: @input-radius; + &:focus { + border-color: @light-blue; + } + } + &.select2-container--focus .select2-selection--multiple { + border-color: @gray; + } +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: @light-blue; + border-color: darken(@light-blue, 5%); + padding: 1px 10px; + color: #fff; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + margin-right: 5px; + color: rgba(255, 255, 255, .7); + &:hover { + color: #fff; + } +} + +.select2-container .select2-selection--single .select2-selection__rendered { + padding-right: 10px; +} diff --git a/static/less/sidebar-mini.less b/static/less/sidebar-mini.less new file mode 100755 index 00000000..44e53b70 --- /dev/null +++ b/static/less/sidebar-mini.less @@ -0,0 +1,141 @@ +/* + * Component: Sidebar Mini + */ + +//Add sidebar-mini class to the body tag to activate this feature +.sidebar-mini { + //Sidebar mini should work only on devices larger than @screen-sm + @media (min-width: @screen-sm) { + //When the sidebar is collapsed... + &.sidebar-collapse { + + //Apply the new margining to the main content and footer + .content-wrapper, + .right-side, + .main-footer { + margin-left: 50px !important; + z-index: 840; + } + + //Modify the sidebar to shrink instead of disappearing + .main-sidebar { + //Don't go away! Just shrink + .translate(0, 0); + width: 50px !important; + z-index: 850; + } + + .sidebar-menu { + > li { + position: relative; + > a { + margin-right: 0; + } + > a > span { + border-top-right-radius: 4px; + } + + &:not(.treeview) { + > a > span { + border-bottom-right-radius: 4px; + } + } + + > .treeview-menu { + //Add some padding to the treeview menu + padding-top: 5px; + padding-bottom: 5px; + border-bottom-right-radius: 4px; + } + + //Show menu items on hover + &:hover { + > a { + //overflow: visible; + } + > a > span:not(.pull-right), + > .treeview-menu { + display: block !important; + position: absolute; + width: @sidebar-width - 50; + left: 50px; + } + + //position the header & treeview menus + > a > span { + top: 0; + margin-left: -3px; + padding: 12px 5px 12px 20px; + background-color: inherit; + } + > .treeview-menu { + top: 44px; + margin-left: 0; + } + } + } + } + + //Make the sidebar links, menus, labels, badges + //and angle icons disappear + .main-sidebar .user-panel > .info, + .sidebar-form, + .sidebar-menu > li > a > span, + .sidebar-menu > li > .treeview-menu, + .sidebar-menu > li > a > .pull-right, + .sidebar-menu li.header { + display: none !important; + -webkit-transform: translateZ(0); + } + + .main-header { + //Let's make the logo also shrink and the mini logo to appear + .logo { + width: 50px; + > .logo-mini { + display: block; + margin-left: -15px; + margin-right: -15px; + font-size: 18px; + } + > .logo-lg { + display: none; + } + } + + //Since the logo got smaller, we need to fix the navbar's position + .navbar { + margin-left: 50px; + } + } + } + } +} + +//A fix for text overflow while transitioning from sidebar mini to full sidebar +.sidebar-menu, +.main-sidebar .user-panel, +.sidebar-menu > li.header { + white-space: nowrap; + overflow: hidden; +} + +.sidebar-menu:hover { + overflow: visible; +} + +.sidebar-form, +.sidebar-menu > li.header { + overflow: hidden; + text-overflow: clip; +} + +.sidebar-menu li > a { + position: relative; + > .pull-right { + position: absolute; + right: 10px; + top: 50%; + margin-top: -7px; + } +} diff --git a/static/less/sidebar.less b/static/less/sidebar.less new file mode 100755 index 00000000..bcb88832 --- /dev/null +++ b/static/less/sidebar.less @@ -0,0 +1,158 @@ +/* + * Component: Sidebar + * ------------------ + */ +//Main Sidebar +// ``` .left-side has been deprecated as of 2.0.0 in favor of .main-sidebar ``` + +.main-sidebar, +.left-side { + position: absolute; + top: 0; + left: 0; + padding-top: 50px; + min-height: 100%; + width: @sidebar-width; + z-index: 810; + //Using disposable variable to join statements with a comma + @transition-rule: @transition-speed @transition-fn, + width @transition-speed @transition-fn; + .transition-transform(@transition-rule); + @media (max-width: @screen-header-collapse) { + padding-top: 100px; + } + @media (max-width: @screen-xs-max) { + .translate(-@sidebar-width, 0); + } + .sidebar-collapse & { + @media (min-width: @screen-sm) { + .translate(-@sidebar-width, 0); + } + } + .sidebar-open & { + @media (max-width: @screen-xs-max) { + .translate(0, 0); + } + } +} + +.sidebar { + padding-bottom: 10px; +} + +// remove border from form +.sidebar-form { + input:focus { + border-color: transparent; + } +} + +//Sidebar user panel +.user-panel { + position: relative; + width: 100%; + padding: 10px; + overflow: hidden; + .clearfix(); + > .image > img { + width: 100%; + max-width: 45px; + height: auto; + } + > .info { + padding: 5px 5px 5px 15px; + line-height: 1; + position: absolute; + left: 55px; + > p { + font-weight: 600; + margin-bottom: 9px; + } + > a { + text-decoration: none; + padding-right: 5px; + margin-top: 3px; + font-size: 11px; + > .fa, + > .ion, + > .glyphicon { + margin-right: 3px; + } + } + } +} + +// Sidebar menu +.sidebar-menu { + list-style: none; + margin: 0; + padding: 0; + //First Level + > li { + position: relative; + margin: 0; + padding: 0; + > a { + padding: 12px 5px 12px 15px; + display: block; + > .fa, + > .glyphicon, + > .ion { + width: 20px; + } + } + .label, + .badge { + margin-top: 3px; + margin-right: 5px; + } + } + li.header { + padding: 10px 25px 10px 15px; + font-size: 12px; + } + li > a > .fa-angle-left { + width: auto; + height: auto; + padding: 0; + margin-right: 10px; + margin-top: 3px; + } + li.active { + > a > .fa-angle-left { + .rotate(-90deg); + } + > .treeview-menu { + display: block; + } + } + + // Tree view menu + .treeview-menu { + display: none; + list-style: none; + padding: 0; + margin: 0; + padding-left: 5px; + .treeview-menu { + padding-left: 20px; + } + > li { + margin: 0; + > a { + padding: 5px 5px 5px 15px; + display: block; + font-size: 14px; + > .fa, + > .glyphicon, + > .ion { + width: 20px; + } + > .fa-angle-left, + > .fa-angle-down { + width: auto; + } + } + } + } +} diff --git a/static/less/skins/_all-skins.less b/static/less/skins/_all-skins.less new file mode 100755 index 00000000..ec07547f --- /dev/null +++ b/static/less/skins/_all-skins.less @@ -0,0 +1,13 @@ +//All skins in one file +@import "skin-blue.less"; +@import "skin-blue-light.less"; +@import "skin-black.less"; +@import "skin-black-light.less"; +@import "skin-green.less"; +@import "skin-green-light.less"; +@import "skin-red.less"; +@import "skin-red-light.less"; +@import "skin-yellow.less"; +@import "skin-yellow-light.less"; +@import "skin-purple.less"; +@import "skin-purple-light.less"; diff --git a/static/less/skins/skin-black-light.less b/static/less/skins/skin-black-light.less new file mode 100755 index 00000000..b3fe67f2 --- /dev/null +++ b/static/less/skins/skin-black-light.less @@ -0,0 +1,64 @@ +/* + * Skin: Black + * ----------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +/* skin-black navbar */ +.skin-black-light { + //Navbar & Logo + .main-header { + .box-shadow(0px 1px 1px rgba(0, 0, 0, 0.05)); + .navbar-toggle { + color: #333; + } + .navbar-brand { + color: #333; + border-right: 1px solid #eee; + } + > .navbar { + .navbar-variant(#fff; #333; #999; #fff); + > .sidebar-toggle { + color: #333; + border-right: 1px solid #eee; + } + .navbar-nav { + > li > a { + border-right: 1px solid #eee; + } + } + .navbar-custom-menu .navbar-nav, + .navbar-right { + > li { + > a { + border-left: 1px solid #eee; + border-right-width: 0; + } + } + } + } + > .logo { + .logo-variant(#fff; #333); + border-right: 1px solid #eee; + @media (max-width: @screen-header-collapse) { + .logo-variant(#222; #fff); + border-right: none; + } + } + + li.user-header { + background-color: #222; + } + } + + //Content Header + .content-header { + background: transparent; + box-shadow: none; + } + //Create the sidebar skin + .skin-light-sidebar(#fff); +} diff --git a/static/less/skins/skin-black.less b/static/less/skins/skin-black.less new file mode 100755 index 00000000..2feda3e2 --- /dev/null +++ b/static/less/skins/skin-black.less @@ -0,0 +1,74 @@ +/* + * Skin: Black + * ----------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +/* skin-black navbar */ +.skin-black { + //Navbar & Logo + .main-header { + .box-shadow(0px 1px 1px rgba(0, 0, 0, 0.05)); + .navbar-toggle { + color: #333; + } + .navbar-brand { + color: #333; + border-right: 1px solid #eee; + } + > .navbar { + .navbar-variant(#fff; #333; #999; #fff); + > .sidebar-toggle { + color: #333; + border-right: 1px solid #eee; + } + .navbar-nav { + > li > a { + border-right: 1px solid #eee; + } + } + .navbar-custom-menu .navbar-nav, + .navbar-right { + > li { + > a { + border-left: 1px solid #eee; + border-right-width: 0; + } + } + } + } + > .logo { + .logo-variant(#fff; #333); + border-right: 1px solid #eee; + @media (max-width: @screen-header-collapse) { + .logo-variant(#222; #fff); + border-right: none; + } + } + + li.user-header { + background-color: #222; + } + } + + //Content Header + .content-header { + background: transparent; + box-shadow: none; + } + //Create the sidebar skin + .skin-dark-sidebar(#fff); + + .pace { + .pace-progress { + background: #222; + } + .pace-activity { + border-top-color: #222; + border-left-color: #222; + } + } +} diff --git a/static/less/skins/skin-blue-light.less b/static/less/skins/skin-blue-light.less new file mode 100755 index 00000000..cd7341cd --- /dev/null +++ b/static/less/skins/skin-blue-light.less @@ -0,0 +1,61 @@ +/* + * Skin: Blue + * ---------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-blue-light { + //Navbar + .main-header { + .navbar { + .navbar-variant(@light-blue; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@light-blue, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@light-blue, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(@light-blue); + } + + li.user-header { + background-color: @light-blue; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-light-sidebar(@light-blue); + .main-footer { + border-top-color: @gray; + } +} + +.skin-blue.layout-top-nav .main-header > .logo { + .logo-variant(@light-blue); +} diff --git a/static/less/skins/skin-blue.less b/static/less/skins/skin-blue.less new file mode 100755 index 00000000..63fb32ff --- /dev/null +++ b/static/less/skins/skin-blue.less @@ -0,0 +1,58 @@ +/* + * Skin: Blue + * ---------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-blue { + //Navbar + .main-header { + .navbar { + .navbar-variant(@light-blue; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@light-blue, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@light-blue, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(darken(@light-blue, 5%)); + } + + li.user-header { + background-color: @light-blue; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-dark-sidebar(@light-blue); +} + +.skin-blue.layout-top-nav .main-header > .logo { + .logo-variant(@light-blue); +} diff --git a/static/less/skins/skin-green-light.less b/static/less/skins/skin-green-light.less new file mode 100755 index 00000000..2e483849 --- /dev/null +++ b/static/less/skins/skin-green-light.less @@ -0,0 +1,55 @@ +/* + * Skin: Green + * ----------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-green-light { + //Navbar + .main-header { + .navbar { + .navbar-variant(@green; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@green, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@green, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(@green); + } + + li.user-header { + background-color: @green; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-light-sidebar(@green); + +} diff --git a/static/less/skins/skin-green.less b/static/less/skins/skin-green.less new file mode 100755 index 00000000..a729b706 --- /dev/null +++ b/static/less/skins/skin-green.less @@ -0,0 +1,55 @@ +/* + * Skin: Green + * ----------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-green { + //Navbar + .main-header { + .navbar { + .navbar-variant(@green; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@green, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@green, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(darken(@green, 5%)); + } + + li.user-header { + background-color: @green; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-dark-sidebar(@green); + +} diff --git a/static/less/skins/skin-purple-light.less b/static/less/skins/skin-purple-light.less new file mode 100755 index 00000000..42d3fe05 --- /dev/null +++ b/static/less/skins/skin-purple-light.less @@ -0,0 +1,54 @@ +/* + * Skin: Purple + * ------------ + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-purple-light { + //Navbar + .main-header { + .navbar { + .navbar-variant(@purple; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@purple, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@purple, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(@purple); + } + + li.user-header { + background-color: @purple; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-light-sidebar(@purple); +} diff --git a/static/less/skins/skin-purple.less b/static/less/skins/skin-purple.less new file mode 100755 index 00000000..53a38fa4 --- /dev/null +++ b/static/less/skins/skin-purple.less @@ -0,0 +1,54 @@ +/* + * Skin: Purple + * ------------ + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-purple { + //Navbar + .main-header { + .navbar { + .navbar-variant(@purple; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@purple, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@purple, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(darken(@purple, 5%)); + } + + li.user-header { + background-color: @purple; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-dark-sidebar(@purple); +} diff --git a/static/less/skins/skin-red-light.less b/static/less/skins/skin-red-light.less new file mode 100755 index 00000000..792390bc --- /dev/null +++ b/static/less/skins/skin-red-light.less @@ -0,0 +1,54 @@ +/* + * Skin: Red + * --------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-red-light { + //Navbar + .main-header { + .navbar { + .navbar-variant(@red; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@red, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@red, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(@red); + } + + li.user-header { + background-color: @red; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-light-sidebar(@red); +} diff --git a/static/less/skins/skin-red.less b/static/less/skins/skin-red.less new file mode 100755 index 00000000..6ca253d6 --- /dev/null +++ b/static/less/skins/skin-red.less @@ -0,0 +1,54 @@ +/* + * Skin: Red + * --------- + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-red { + //Navbar + .main-header { + .navbar { + .navbar-variant(@red; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@red, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@red, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(darken(@red, 5%)); + } + + li.user-header { + background-color: @red; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-dark-sidebar(@red); +} diff --git a/static/less/skins/skin-yellow-light.less b/static/less/skins/skin-yellow-light.less new file mode 100755 index 00000000..02e46509 --- /dev/null +++ b/static/less/skins/skin-yellow-light.less @@ -0,0 +1,54 @@ +/* + * Skin: Yellow + * ------------ + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-yellow-light { + //Navbar + .main-header { + .navbar { + .navbar-variant(@yellow; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@yellow, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@yellow, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(@yellow); + } + + li.user-header { + background-color: @yellow; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-light-sidebar(@yellow); +} diff --git a/static/less/skins/skin-yellow.less b/static/less/skins/skin-yellow.less new file mode 100755 index 00000000..821723d8 --- /dev/null +++ b/static/less/skins/skin-yellow.less @@ -0,0 +1,54 @@ +/* + * Skin: Yellow + * ------------ + */ +@import "../../bootstrap-less/mixins.less"; +@import "../../bootstrap-less/variables.less"; +@import "../variables.less"; +@import "../mixins.less"; + +.skin-yellow { + //Navbar + .main-header { + .navbar { + .navbar-variant(@yellow; #fff); + .sidebar-toggle { + color: #fff; + &:hover { + background-color: darken(@yellow, 5%); + } + } + @media (max-width: @screen-header-collapse) { + .dropdown-menu { + li { + &.divider { + background-color: rgba(255, 255, 255, 0.1); + } + a { + color: #fff; + &:hover { + background: darken(@yellow, 5%); + } + } + } + } + } + } + //Logo + .logo { + .logo-variant(darken(@yellow, 5%)); + } + + li.user-header { + background-color: @yellow; + } + } + + //Content Header + .content-header { + background: transparent; + } + + //Create the sidebar skin + .skin-dark-sidebar(@yellow); +} diff --git a/static/less/small-box.less b/static/less/small-box.less new file mode 100755 index 00000000..8ad7cc79 --- /dev/null +++ b/static/less/small-box.less @@ -0,0 +1,89 @@ +/* + * Component: Small Box + * -------------------- + */ + +.small-box { + .border-radius(2px); + position: relative; + display: block; + margin-bottom: 20px; + box-shadow: @box-boxshadow; + // content wrapper + > .inner { + padding: 10px; + } + + > .small-box-footer { + position: relative; + text-align: center; + padding: 3px 0; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + z-index: 10; + background: rgba(0, 0, 0, 0.1); + text-decoration: none; + &:hover { + color: #fff; + background: rgba(0, 0, 0, 0.15); + } + } + + h3 { + font-size: 38px; + font-weight: bold; + margin: 0 0 10px 0; + white-space: nowrap; + padding: 0; + + } + + p { + font-size: 15px; + > small { + display: block; + color: #f9f9f9; + font-size: 13px; + margin-top: 5px; + } + } + + h3, p { + z-index: 5; + } + + // the icon + .icon { + .transition(all @transition-speed linear); + position: absolute; + top: -10px; + right: 10px; + z-index: 0; + font-size: 90px; + color: rgba(0, 0, 0, 0.15); + } + + // Small box hover state + &:hover { + text-decoration: none; + color: #f9f9f9; + // Animate icons on small box hover + .icon { + font-size: 95px; + } + } +} + +@media (max-width: @screen-xs-max) { + // No need for icons on very small devices + .small-box { + text-align: center; + .icon { + display: none; + } + p { + font-size: 12px; + } + } +} diff --git a/static/less/social-widgets.less b/static/less/social-widgets.less new file mode 100755 index 00000000..e2861a39 --- /dev/null +++ b/static/less/social-widgets.less @@ -0,0 +1,78 @@ +/* + * Component: Social Widgets + * ------------------------- + */ +//General widget style +.box-widget { + border: none; + position: relative; +} + +//User Widget Style 1 +.widget-user { + //User name container + .widget-user-header { + padding: 20px; + height: 120px; + .border-top-radius(@box-border-radius); + } + //User name + .widget-user-username { + margin-top: 0; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + } + //User single line description + .widget-user-desc { + margin-top: 0; + } + //User image container + .widget-user-image { + position: absolute; + top: 65px; + left: 50%; + margin-left: -45px; + > img { + width: 90px; + height: auto; + border: 3px solid #fff; + } + } + .box-footer { + padding-top: 30px; + } +} + +//User Widget Style 2 +.widget-user-2 { + //User name container + .widget-user-header { + padding: 20px; + .border-top-radius(@box-border-radius); + } + //User name + .widget-user-username { + margin-top: 5px; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; + } + //User single line description + .widget-user-desc { + margin-top: 0; + } + .widget-user-username, + .widget-user-desc { + margin-left: 75px; + } + //User image container + .widget-user-image { + > img { + width: 65px; + height: auto; + float: left; + } + } +} diff --git a/static/less/table.less b/static/less/table.less new file mode 100755 index 00000000..4aa06a4c --- /dev/null +++ b/static/less/table.less @@ -0,0 +1,71 @@ +/* + * Component: Table + * ---------------- + */ + +.table { + //Cells + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border-top: 1px solid @box-border-color; + } + } + } + //thead cells + > thead > tr > th { + border-bottom: 2px solid @box-border-color; + } + //progress bars in tables + tr td .progress { + margin-top: 5px; + } +} + +//Bordered Table +.table-bordered { + border: 1px solid @box-border-color; + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border: 1px solid @box-border-color; + } + } + } + > thead > tr { + > th, + > td { + border-bottom-width: 2px; + } + } +} + +.table.no-border { + &, + td, + th { + border: 0; + } +} + +/* .text-center in tables */ +table.text-center { + &, td, th { + text-align: center; + } +} + +.table.align { + th { + text-align: left; + } + td { + text-align: right; + } +} diff --git a/static/less/timeline.less b/static/less/timeline.less new file mode 100755 index 00000000..333d6485 --- /dev/null +++ b/static/less/timeline.less @@ -0,0 +1,110 @@ +/* + * Component: Timeline + * ------------------- + */ + +.timeline { + position: relative; + margin: 0 0 30px 0; + padding: 0; + list-style: none; + + // The line + &:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + width: 4px; + background: #ddd; + left: 31px; + margin: 0; + .border-radius(2px); + } + + > li { + position: relative; + margin-right: 10px; + margin-bottom: 15px; + .clearfix(); + + // The content + > .timeline-item { + .box-shadow(@box-boxshadow); + .border-radius(@box-border-radius); + margin-top: 0; + background: #fff; + color: #444; + margin-left: 60px; + margin-right: 15px; + padding: 0; + position: relative; + + // The time and header + > .time { + color: #999; + float: right; + padding: 10px; + font-size: 12px; + } + > .timeline-header { + margin: 0; + color: #555; + border-bottom: 1px solid @box-border-color; + padding: 10px; + font-size: 16px; + line-height: 1.1; + > a { + font-weight: 600; + } + } + // Item body and footer + > .timeline-body, > .timeline-footer { + padding: 10px; + } + + } + + // The icons + > .fa, + > .glyphicon, + > .ion { + width: 30px; + height: 30px; + font-size: 15px; + line-height: 30px; + position: absolute; + color: #666; + background: @gray; + border-radius: 50%; + text-align: center; + left: 18px; + top: 0; + } + } + + // Time label + > .time-label { + > span { + font-weight: 600; + padding: 5px; + display: inline-block; + background-color: #fff; + + .border-radius(4px); + } + } +} + +.timeline-inverse { + > li { + > .timeline-item { + background: #f0f0f0; + border: 1px solid #ddd; + .box-shadow(none); + > .timeline-header { + border-bottom-color: #ddd; + } + } + } +} diff --git a/static/less/users-list.less b/static/less/users-list.less new file mode 100755 index 00000000..c5ef2a58 --- /dev/null +++ b/static/less/users-list.less @@ -0,0 +1,42 @@ +/* + * Component: Users List + * --------------------- + */ +.users-list { + &:extend(.list-unstyled); + > li { + width: 25%; + float: left; + padding: 10px; + text-align: center; + img { + .border-radius(50%); + max-width: 100%; + height: auto; + } + > a:hover { + &, + .users-list-name { + color: #999; + } + } + } +} + +.users-list-name, +.users-list-date { + display: block; +} + +.users-list-name { + font-weight: 600; + color: #444; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.users-list-date { + color: #999; + font-size: 12px; +} diff --git a/static/less/variables.less b/static/less/variables.less new file mode 100755 index 00000000..79b10bd1 --- /dev/null +++ b/static/less/variables.less @@ -0,0 +1,123 @@ +//AdminLTE 2 Variables.less +//========================= + +//PATHS +//-------------------------------------------------------- + +@boxed-layout-bg-image-path: "../img/boxed-bg.jpg"; + +//COLORS +//-------------------------------------------------------- +//Primary +@light-blue: #3c8dbc; +//Danger +@red: #dd4b39; +//Success +@green: #00a65a; +//Info +@aqua: #00c0ef; +//Warning +@yellow: #f39c12; +@blue: #0073b7; +@navy: #001F3F; +@teal: #39CCCC; +@olive: #3D9970; +@lime: #01FF70; +@orange: #FF851B; +@fuchsia: #F012BE; +@purple: #605ca8; +@maroon: #D81B60; +@black: #111; +@gray: #d2d6de; + +//LAYOUT +//-------------------------------------------------------- + +//Side bar and logo width +@sidebar-width: 230px; +//Boxed layout maximum width +@boxed-layout-max-width: 1024px; +//When the logo should go to the top of the screen +@screen-header-collapse: @screen-xs-max; + +//Link colors (Aka: tags) +@link-color: @light-blue; +@link-hover-color: lighten(@link-color, 15%); + +//Body background (Affects main content background only) +@body-bg: #ecf0f5; + +//SIDEBAR SKINS +//-------------------------------------------------------- + +//Dark sidebar +@sidebar-dark-bg: #222d32; +@sidebar-dark-hover-bg: darken(@sidebar-dark-bg, 2%); +@sidebar-dark-color: lighten(@sidebar-dark-bg, 60%); +@sidebar-dark-hover-color: #fff; +@sidebar-dark-submenu-bg: lighten(@sidebar-dark-bg, 5%); +@sidebar-dark-submenu-color: lighten(@sidebar-dark-submenu-bg, 40%); +@sidebar-dark-submenu-hover-color: #fff; + +//Light sidebar +@sidebar-light-bg: #f9fafc; +@sidebar-light-hover-bg: lighten(#f0f0f1, 1.5%); +@sidebar-light-color: #444; +@sidebar-light-hover-color: #000; +@sidebar-light-submenu-bg: @sidebar-light-hover-bg; +@sidebar-light-submenu-color: #777; +@sidebar-light-submenu-hover-color: #000; + +//CONTROL SIDEBAR +//-------------------------------------------------------- +@control-sidebar-width: @sidebar-width; + +//BOXES +//-------------------------------------------------------- +@box-border-color: #f4f4f4; +@box-border-radius: 3px; +@box-footer-bg: #fff; +@box-boxshadow: 0 1px 1px rgba(0, 0, 0, .1); +@box-padding: 10px; + +//Box variants +@box-default-border-top-color: #d2d6de; + +//BUTTONS +//-------------------------------------------------------- +@btn-boxshadow: none; + +//PROGRESS BARS +//-------------------------------------------------------- +@progress-bar-border-radius: 1px; +@progress-bar-sm-border-radius: 1px; +@progress-bar-xs-border-radius: 1px; + +//FORMS +//-------------------------------------------------------- +@input-radius: 0; + +//BUTTONS +//-------------------------------------------------------- + +//Border radius for non flat buttons +@btn-border-radius: 3px; + +//DIRECT CHAT +//-------------------------------------------------------- +@direct-chat-height: 250px; +@direct-chat-default-msg-bg: @gray; +@direct-chat-default-font-color: #444; +@direct-chat-default-msg-border-color: @gray; + +//CHAT WIDGET +//-------------------------------------------------------- +@attachment-border-radius: 3px; + +//TRANSITIONS SETTINGS +//-------------------------------------------------------- + +//Transition global options +@transition-speed: .3s; +@transition-fn: ease-in-out; +//cubic-bezier(0.32,1.25,0.375,1.15);