`, and ``.
-@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
-@font-family-base: @font-family-sans-serif;
-
-@font-size-base: 14px;
-@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
-@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
-
-@font-size-h1: floor((@font-size-base * 2.6)); // ~36px
-@font-size-h2: floor((@font-size-base * 2.15)); // ~30px
-@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
-@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
-@font-size-h5: @font-size-base;
-@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
-
-//** Unit-less `line-height` for use in components like buttons.
-@line-height-base: 1.428571429; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
-
-//** By default, this inherits from the ``.
-@headings-font-family: inherit;
-@headings-font-weight: 500;
-@headings-line-height: 1.1;
-@headings-color: inherit;
-
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-@icon-font-path: "../fonts/";
-//** File name for all font files.
-@icon-font-name: "glyphicons-halflings-regular";
-//** Element ID within SVG icon file.
-@icon-font-svg-id: "glyphicons_halflingsregular";
-
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
-
-@padding-base-vertical: 6px;
-@padding-base-horizontal: 12px;
-
-@padding-large-vertical: 10px;
-@padding-large-horizontal: 16px;
-
-@padding-small-vertical: 5px;
-@padding-small-horizontal: 10px;
-
-@padding-xs-vertical: 1px;
-@padding-xs-horizontal: 5px;
-
-@line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
-@line-height-small: 1.5;
-
-@border-radius-base: 4px;
-@border-radius-large: 6px;
-@border-radius-small: 3px;
-
-//** Global color for active items (e.g., navs or dropdowns).
-@component-active-color: #fff;
-//** Global background color for active items (e.g., navs or dropdowns).
-@component-active-bg: @brand-primary;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-@caret-width-base: 4px;
-//** Carets increase slightly in size for larger components.
-@caret-width-large: 5px;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ` `s.
-@table-cell-padding: 8px;
-//** Padding for cells in `.table-condensed`.
-@table-condensed-cell-padding: 5px;
-
-//** Default background color used for all tables.
-@table-bg: transparent;
-//** Background color used for `.table-striped`.
-@table-bg-accent: #f9f9f9;
-//** Background color used for `.table-hover`.
-@table-bg-hover: #f5f5f5;
-@table-bg-active: @table-bg-hover;
-
-//** Border color for table and cell borders.
-@table-border-color: #ddd;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-@btn-font-weight: normal;
-
-@btn-default-color: #333;
-@btn-default-bg: #fff;
-@btn-default-border: #ccc;
-
-@btn-primary-color: #fff;
-@btn-primary-bg: @brand-primary;
-@btn-primary-border: darken(@btn-primary-bg, 5%);
-
-@btn-success-color: #fff;
-@btn-success-bg: @brand-success;
-@btn-success-border: darken(@btn-success-bg, 5%);
-
-@btn-info-color: #fff;
-@btn-info-bg: @brand-info;
-@btn-info-border: darken(@btn-info-bg, 5%);
-
-@btn-warning-color: #fff;
-@btn-warning-bg: @brand-warning;
-@btn-warning-border: darken(@btn-warning-bg, 5%);
-
-@btn-danger-color: #fff;
-@btn-danger-bg: @brand-danger;
-@btn-danger-border: darken(@btn-danger-bg, 5%);
-
-@btn-link-disabled-color: @gray-light;
-
-
-//== Forms
-//
-//##
-
-//** ` ` background color
-@input-bg: #fff;
-//** ` ` background color
-@input-bg-disabled: @gray-lighter;
-
-//** Text color for ` `s
-@input-color: @gray;
-//** ` ` border color
-@input-border: #ccc;
-
-// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on ``s in some browsers, due to the limited stylability of ``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));
-@jumbotron-heading-font-size: ceil((@font-size-base * 4.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/less/lib/buttons.less b/less/lib/buttons.less
deleted file mode 100644
index 4177eda46..000000000
--- a/less/lib/buttons.less
+++ /dev/null
@@ -1,130 +0,0 @@
-.btn {
- border: 0;
- .box-shadow(none);
- line-height: 20px;
-
- & .fa {
- font-size: 14px;
- }
-}
-.btn-group .btn + .btn {
- margin-left: 1px;
-}
-.btn-icon {
- padding-left: 9px;
- padding-right: 9px;
-}
-.btn-link {
- color: @fl-body-muted-color;
-
- &:hover,
- &:focus {
- text-decoration: none;
- }
-}
-.btn-primary {
- font-weight: bold;
- & .icon {
- display: none;
- }
-}
-.btn-user {
- & .avatar {
- margin: -2px 5px -2px -5px;
- .avatar-size(24px);
- }
-}
-.btn-more {
- padding: 1px 3px;
- border-radius: 2px;
- line-height: 1;
-}
-.btn-danger {
- .button-variant(#d66, #fdd, #fdd);
-}
-
-// Add to Bootstrap's mixin to make some general changes
-.button-variant(@color; @background; @border) {
- &:hover,
- &:focus,
- &.focus,
- &:active,
- &.active,
- .open > .dropdown-toggle& {
- background-color: darken(@background, 5%);
- }
- &.active {
- .box-shadow(none);
- }
-}
-
-// Little round icon buttons
-.btn-icon.btn-sm {
- border-radius: 16px;
- height: 32px;
- width: 32px;
- text-align: center;
- padding: 7px 0;
-
- & .label, & .icon-caret {
- display: none;
- }
- & .icon {
- font-size: 16px;
- vertical-align: -1px;
- }
-
- @media @phone {
- width: 38px;
- height: 38px;
- border-radius: 38px / 2;
- padding: 10px 0;
-
- & .fa-ellipsis-v {
- font-size: 20px;
- }
- }
-}
-
-// Buttons that blend into the background
-.btn-naked {
- background: transparent;
- &:hover {
- background: @fl-body-control-bg;
- }
-}
-
-.btn-rounded {
- border-radius: 18px;
-}
-
-.back-button {
- & .back {
- z-index: 3 !important; // z-index of an active .btn-group .btn is 2
- border-radius: @border-radius-base !important;
- .transition(border-radius 0.2s);
- }
- & .pin {
- opacity: 0;
- margin-left: -36px !important;
- .transition(~"opacity 0.2s, margin-left 0.2s");
-
- & .fa {
- .rotate(45deg);
- }
- }
- @media @desktop-hd {
- .has-pane.pane-pinned &, .has-pane.pane-showing & {
- & .back {
- border-radius: @border-radius-base 0 0 @border-radius-base !important;
- }
- & .pin {
- opacity: 1;
- margin-left: 1px !important;
- }
- }
- .has-pane.pane-pinned & .pin .fa {
- .rotate(0deg);
- }
- }
-}
diff --git a/less/lib/components.less b/less/lib/components.less
deleted file mode 100644
index cb7402df0..000000000
--- a/less/lib/components.less
+++ /dev/null
@@ -1,33 +0,0 @@
-// ------------------------------------
-// Tooltips
-
-.tooltip-inner {
- padding: 7px 12px;
-}
-
-// ------------------------------------
-// Loading Indicators
-
-.loading-indicator {
- position: relative;
- color: @fl-body-muted-color;
-}
-.loading-indicator-inline {
- display: inline-block;
- width: 25px;
-}
-.loading-indicator-block {
- height: 100px;
-}
-
-hr {
- border-top: 2px solid @fl-body-secondary-color;
-}
-
-mark {
- background: #FFE300;
- color: @fl-body-color;
- padding: 1px;
- border-radius: @border-radius-base;
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
-}
diff --git a/less/lib/dropdowns.less b/less/lib/dropdowns.less
deleted file mode 100644
index 6d28a5dc7..000000000
--- a/less/lib/dropdowns.less
+++ /dev/null
@@ -1,201 +0,0 @@
-.dropdown-menu {
- border: 0;
- padding: 8px 0;
- margin-top: 7px;
- background: @fl-body-bg;
- color: @fl-body-color;
- .box-shadow(0 2px 6px @fl-shadow-color);
-
- & > li > a:hover,
- & > li > a:focus,
- & > .active > a,
- & > .active > a:hover,
- & > .active > a:focus {
- color: @fl-body-color;
- background-color: @fl-body-control-bg;
- }
-
- & > li > a {
- padding: 8px 15px;
- color: @fl-body-color;
-
- &.has-icon {
- padding-left: 40px;
- }
- &.disabled {
- color: #aaa;
- cursor: default;
-
- &:hover, &:focus {
- color: #aaa;
- background: none;
- }
- }
- & .icon {
- float: left;
- margin-left: -25px;
- margin-top: 2px;
- font-size: 14px;
- }
- & .count {
- font-weight: bold;
- font-size: 12px;
- margin-left: 5px;
- }
- }
- & .divider {
- margin: 8px 0;
- background-color: @fl-body-control-bg;
- }
- & .dropdown-header {
- padding: 10px 15px;
- color: @fl-body-heading-color;
- text-transform: uppercase;
- font-size: 12px;
- font-weight: bold;
- margin-top: 8px;
- border-top: 1px solid @fl-body-control-bg;
-
- &:first-child {
- margin-top: -8px;
- border-top: 0;
- }
- }
-}
-@media @tablet, @desktop, @desktop-hd {
- .dropdown-split {
- &.item-count-1 {
- & .btn {
- border-radius: @border-radius-base !important;
- }
- & .dropdown-toggle {
- display: none;
- }
- }
-
- & .dropdown-menu li:first-child {
- &, & + li.divider {
- display: none;
- }
- }
- }
-}
-
-@media @phone {
- .dropdown.open {
- z-index: @zindex-modal;
- }
- .dropdown {
- & .dropdown-menu {
- margin: 0;
- position: fixed;
- left: 0 !important;
- right: 0 !important;
- width: auto !important;
- bottom: 0;
- top: auto;
- padding: 0;
- padding-bottom: 40px !important;
- display: block;
- max-height: 70vh;
- border-radius: 0;
- .box-shadow(0 2px 6px @fl-shadow-color);
- visibility: hidden;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- .translate3d(0, 70vh, 0);
- .transition-transform(~" 0.3s, visibility 0s 0.3s");
-
- & > li > a {
- background: #fff;
- font-size: 16px;
- padding: 15px 20px;
-
- &.has-icon {
- padding-left: 50px;
- }
- & .icon {
- font-size: 16px;
- margin-left: -30px;
- }
- &:hover {
- background: @fl-body-secondary-color;
- }
- }
- & .divider {
- margin: 0;
- }
- & > .active > a {
- &, &:hover {
- background: @fl-body-primary-color !important;
- color: #fff !important;
- }
- }
-
- .open& {
- -webkit-transform: none;
- transform: none;
- visibility: visible;
- transition-delay: 0s;
- }
- }
- & .dropdown-backdrop {
- background: fade(@fl-secondary-color, 90%);
- opacity: 0;
- .transition(~"opacity 0.3s");
- .translate3d(0, 0, 0);
-
- .open& {
- opacity: 1;
- }
- }
- }
-}
-
-// ------------------------------------
-// Mixins
-
-.expand-dropdown() {
- & .dropdown-toggle {
- display: none;
- }
- & .dropdown-menu {
- display: block;
- border: 0;
- width: auto;
- margin: 0;
- padding: 0;
- min-width: 0;
- float: none;
- position: static;
- background: none;
- .box-shadow(none);
- }
-}
-
-.nav-list() {
- & > li > a {
- padding: 8px 0 8px 30px;
- color: @fl-body-muted-color;
-
- &:hover {
- background: none;
- color: @link-hover-color;
- }
-
- & .icon {
- float: left;
- margin-left: -30px;
- margin-top: 1px;
- font-size: 15px;
- }
- }
- & > li.active > a {
- background: none;
- color: @fl-body-primary-color;
- font-weight: bold;
- }
- & > li.divider {
- background: none;
- }
-}
diff --git a/less/lib/font-awesome.less b/less/lib/font-awesome.less
new file mode 100755
index 000000000..7dcc21927
--- /dev/null
+++ b/less/lib/font-awesome.less
@@ -0,0 +1,11 @@
+/*!
+ * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "font-awesome/variables.less";
+@import "font-awesome/mixins.less";
+@import "font-awesome/path.less";
+@import "font-awesome/core.less";
+@import "font-awesome/fixed-width.less";
+@import "font-awesome/icons.less";
diff --git a/less/lib/font-awesome/animated.less b/less/lib/font-awesome/animated.less
deleted file mode 100644
index 66ad52a5b..000000000
--- a/less/lib/font-awesome/animated.less
+++ /dev/null
@@ -1,34 +0,0 @@
-// Animated Icons
-// --------------------------
-
-.@{fa-css-prefix}-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
-}
-
-.@{fa-css-prefix}-pulse {
- -webkit-animation: fa-spin 1s infinite steps(8);
- animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/less/lib/font-awesome/bordered-pulled.less b/less/lib/font-awesome/bordered-pulled.less
deleted file mode 100644
index 0c90eb567..000000000
--- a/less/lib/font-awesome/bordered-pulled.less
+++ /dev/null
@@ -1,16 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.@{fa-css-prefix}-border {
- padding: .2em .25em .15em;
- border: solid .08em @fa-border-color;
- border-radius: .1em;
-}
-
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.@{fa-css-prefix} {
- &.pull-left { margin-right: .3em; }
- &.pull-right { margin-left: .3em; }
-}
diff --git a/less/lib/font-awesome/font-awesome.less b/less/lib/font-awesome/font-awesome.less
deleted file mode 100644
index 1f45c63d1..000000000
--- a/less/lib/font-awesome/font-awesome.less
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
- * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables.less";
-@import "mixins.less";
-@import "path.less";
-@import "core.less";
-@import "larger.less";
-@import "fixed-width.less";
-@import "list.less";
-@import "bordered-pulled.less";
-@import "animated.less";
-@import "rotated-flipped.less";
-@import "stacked.less";
-@import "icons.less";
diff --git a/less/lib/font-awesome/larger.less b/less/lib/font-awesome/larger.less
deleted file mode 100644
index c9d646770..000000000
--- a/less/lib/font-awesome/larger.less
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.@{fa-css-prefix}-lg {
- font-size: (4em / 3);
- line-height: (3em / 4);
- vertical-align: -15%;
-}
-.@{fa-css-prefix}-2x { font-size: 2em; }
-.@{fa-css-prefix}-3x { font-size: 3em; }
-.@{fa-css-prefix}-4x { font-size: 4em; }
-.@{fa-css-prefix}-5x { font-size: 5em; }
diff --git a/less/lib/font-awesome/list.less b/less/lib/font-awesome/list.less
deleted file mode 100644
index 0b440382f..000000000
--- a/less/lib/font-awesome/list.less
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.@{fa-css-prefix}-ul {
- padding-left: 0;
- margin-left: @fa-li-width;
- list-style-type: none;
- > li { position: relative; }
-}
-.@{fa-css-prefix}-li {
- position: absolute;
- left: -@fa-li-width;
- width: @fa-li-width;
- top: (2em / 14);
- text-align: center;
- &.@{fa-css-prefix}-lg {
- left: (-@fa-li-width + (4em / 14));
- }
-}
diff --git a/less/lib/font-awesome/rotated-flipped.less b/less/lib/font-awesome/rotated-flipped.less
deleted file mode 100644
index f6ba81475..000000000
--- a/less/lib/font-awesome/rotated-flipped.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
-.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
-.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
-
-.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
-.@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .@{fa-css-prefix}-rotate-90,
-:root .@{fa-css-prefix}-rotate-180,
-:root .@{fa-css-prefix}-rotate-270,
-:root .@{fa-css-prefix}-flip-horizontal,
-:root .@{fa-css-prefix}-flip-vertical {
- filter: none;
-}
diff --git a/less/lib/font-awesome/stacked.less b/less/lib/font-awesome/stacked.less
deleted file mode 100644
index fc53fb0e7..000000000
--- a/less/lib/font-awesome/stacked.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.@{fa-css-prefix}-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
-}
-.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
-}
-.@{fa-css-prefix}-stack-1x { line-height: inherit; }
-.@{fa-css-prefix}-stack-2x { font-size: 2em; }
-.@{fa-css-prefix}-inverse { color: @fa-inverse; }
diff --git a/less/lib/forms.less b/less/lib/forms.less
deleted file mode 100644
index 9e3607562..000000000
--- a/less/lib/forms.less
+++ /dev/null
@@ -1,117 +0,0 @@
-.form-group {
- margin-bottom: 12px;
-}
-.form-control {
- .box-shadow(none);
- border-width: 2px;
- -webkit-appearance: none;
-
- &:focus,
- &.focus {
- background-color: #fff;
- color: @fl-body-color;
- .box-shadow(none);
- border: 2px solid @fl-body-primary-color;
- }
-}
-legend {
- font-size: 14px;
- border: 0;
- font-weight: bold;
- margin-bottom: 10px;
-}
-
-// Select inputs
-.select-input {
- display: inline-block;
- vertical-align: middle;
-}
-.select-input select {
- display: inline-block;
- width: auto;
- -webkit-appearance: none;
- -moz-appearance: none;
- padding-right: @padding-base-horizontal + 16;
- cursor: pointer;
-}
-.select-input .fa {
- margin-left: -@padding-base-horizontal - 16;
- pointer-events: none;
- color: @fl-body-muted-color;
-}
-
-.checkbox-switch {
- & label {
- padding-left: 65px;
- }
- & .switch-control {
- float: left;
- margin-left: -65px;
- margin-top: -4px;
- }
- & .loading-indicator {
- display: inline-block;
- margin-left: 10px;
- }
-}
-.switch-control, .yesno-control {
- & input[type=checkbox] {
- display: none;
- }
-}
-.switch {
- width: 50px;
- height: 28px;
- padding: 3px;
- position: relative;
- border-radius: 14px;
- background: @fl-body-control-bg;
- .transition(background-color 0.2s);
-
- input:checked + & {
- background: @fl-body-primary-color;
- }
-
- & .loading-indicator {
- opacity: 0;
-
- .loading& {
- opacity: 1;
- }
- }
- &:before, & .loading-indicator {
- position: absolute;
- width: 22px;
- height: 22px;
- padding: 0;
- left: 3px;
- .transition(~"opacity 0.2s, left 0.2s");
-
- input:checked + & {
- left: 25px;
- }
- }
- &:before {
- content: ' ';
- background: @fl-body-bg;
- border-radius: 11px;
- box-shadow: 0 2px 4px @fl-shadow-color;
- }
-}
-.yesno-control {
- cursor: pointer;
- margin: 0;
-}
-.yesno {
- font-size: 14px;
-
- &.yes {
- color: #58A400;
- }
- &.no {
- color: #D0021B;
- }
- &.disabled {
- color: @fl-body-muted-more-color !important;
- }
-}
diff --git a/less/lib/layout.less b/less/lib/layout.less
deleted file mode 100644
index 552896906..000000000
--- a/less/lib/layout.less
+++ /dev/null
@@ -1,452 +0,0 @@
-body {
- background: @fl-body-bg;
- color: @fl-body-color;
- overflow-y: scroll;
-}
-.container-narrow {
- max-width: 600px;
- margin: 0 auto;
-}
-.global-page {
- overflow-x: hidden;
- min-height: 100vh;
-}
-#assets-loading {
- color: @fl-body-muted-color;
- font-size: 16px;
- padding: 20px;
-}
-
-// ------------------------------------
-// Page Toolbar
-
-.toolbar() {
- background: fade(@fl-hdr-bg, 98%);
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: @zindex-navbar-fixed;
- border-bottom: 1px solid @fl-body-control-bg;
- .translate3d(0, 0, 0);
- .transition(~"box-shadow 0.2s, -webkit-transform 0.2s");
-
- @media @phone {
- height: @mobile-header-height;
- }
- @media @tablet, @desktop, @desktop-hd {
- height: @header-height;
- }
-}
-
-// Fix a solid white box to the top of the viewport. This toolbar's contents
-// will differ depending on the device: on phones it will be content
-// controls, whereas on desktops it will be the header. We will overlay
-// these things on top of it later.
-.global-page:before {
- content: " ";
- .toolbar();
- border-bottom: 0;
-
- .scrolled & {
- .box-shadow(0 2px 6px @fl-shadow-color);
- }
-
- // PHONES: Push the toolbar to the right when the drawer is open.
- @media @phone {
- .drawer-open & {
- .translate3d(@drawer-width, 0, 0);
- }
- }
-}
-
-// PHONES: Somewhere on the page there will be a .back-button, a .primary-
-// control, and a .title-control. We will position these on the left, right,
-// and center of the header respectively.
-@media @phone {
- .primary-control, .title-control, .back-control {
- position: fixed;
- z-index: @zindex-navbar-fixed + 1;
- top: 0;
- margin: 0;
- visibility: visible;
- .transition(visibility 0s 0.4s);
-
- & .btn {
- float: none;
- background: transparent !important;
- .box-shadow(~"none !important");
- height: @mobile-header-height;
- width: auto;
- padding: 13px !important;
-
- &:active {
- opacity: 0.5;
- }
- }
- }
- .primary-control, .title-control {
- .drawer-open .global-page & {
- visibility: hidden;
- transition-delay: 0s;
- }
- }
- .primary-control {
- width: auto;
- right: 0;
-
- &.dropdown-split {
- & .btn, & .icon-caret {
- display: none;
- }
- & .dropdown-toggle {
- display: block;
- }
- }
- }
- .primary-control, .back-control {
- & .btn {
- color: @fl-hdr-control-color !important;
-
- & .icon {
- display: block;
- font-size: 20px;
- }
- & .label {
- display: none;
- }
- }
- }
- .title-control {
- width: 200px;
- left: 50%;
- margin-left: -100px;
- text-align: center;
- color: @fl-body-muted-color;
-
- &, & .btn {
- font-size: 16px;
- }
- & .btn {
- color: @fl-hdr-color;
- }
- }
- h3.title-control, h4.title-control {
- line-height: 46px;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .back-control {
- left: 0;
- .transition-transform(0.2s);
-
- .drawer-open .global-page & {
- .translate3d(@drawer-width, 0, 0);
- }
-
- & .pin {
- display: none;
- }
- }
-}
-
-// ------------------------------------
-// Drawer
-
-// This is a mixin which styles components (buttons, inputs, etc.) for use on
-// dark backgrounds.
-.inverted-components() {
- .header-title {
- &, & a {
- color: #fff;
- }
- }
- &, & a, & .btn-link {
- color: #fff;
- }
- & .form-control {
- background: fade(#000, 10%);
- border: 0;
- color: #fff;
- .placeholder(fade(#fff, 50%));
-
- &:focus {
- background: fade(#000, 15%);
- }
- }
- & .btn-default:not(.btn-naked), & .btn-default:hover {
- background: fade(#000, 10%);
- color: #fff;
- }
- & .btn-default.active, .open > .dropdown-toggle.btn-default {
- background: fade(#000, 15%);
- color: #fff;
- }
-}
-
-// On phones, the drawer is displayed in its semantic sense: as a drawer on
-// the left side of the screen. On other devices, the drawer has no specific
-// appearance.
-@media @phone {
- .drawer-open {
- overflow: hidden;
- }
- .global-drawer {
- background: @fl-hdr-bg;
- width: @drawer-width;
- position: fixed;
- left: 0;
- top: 0;
- bottom: 0;
- visibility: hidden;
- .transition(visibility 0s 0.2s);
- .box-shadow(inset -6px 0 6px -6px @fl-shadow-color);
-
- & when (@fl-colored-hdr = true) {
- .inverted-components();
- }
-
- .drawer-open & {
- visibility: visible;
- transition-delay: 0s;
- }
-
- & .dropdown-menu {
- width: @drawer-width !important;
- }
- }
-}
-
-// ------------------------------------
-// Header
-
-.header-controls {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-// On phones, the header is displayed inside of the drawer. We lay its
-// contents out vertically.
-@media @phone {
- .global-header {
- & .container {
- padding: 0;
- }
- & .back-button {
- display: none;
- }
- }
- .header-title {
- border-bottom: 1px solid @fl-drawer-control-bg;
- font-size: 16px;
- font-weight: normal;
- margin: 0;
- line-height: @mobile-header-height;
- white-space: nowrap;
- text-align: center;
- }
- .header-controls {
- & > li {
- padding: 10px 10px 0;
- }
- & .form-control, & .btn-group, & .btn {
- width: 100%;
- text-align: left;
- }
- & .dropdown-menu {
- & .btn-group, & .btn {
- width: auto;
- }
- }
- }
-}
-
-// On other devices, we stick the header up the top of the page, overlaying
-// the page toolbar that we styled earlier. We lay its contents out
-// horizontally.
-@media @tablet, @desktop, @desktop-hd {
- .back-button.back-control {
- display: none;
- }
- .global-header {
- padding: 10px;
- height: @header-height;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: @zindex-navbar-fixed;
- .clearfix();
-
- & when (@fl-colored-hdr = true) {
- .inverted-components();
- }
-
- & .back-button {
- float: left;
- margin-right: 25px;
- }
- }
- .header-controls {
- &, & > li {
- display: inline-block;
- vertical-align: middle;
- }
- }
- .header-primary {
- float: left;
- }
- .header-title {
- float: left;
- vertical-align: top;
- font-size: 18px;
- font-weight: normal;
- margin: 0;
- line-height: 36px;
-
- &, & a {
- color: @fl-hdr-color;
- }
- }
- .header-secondary {
- float: right;
-
- & .search-box {
- margin-right: 10px;
- }
- }
-}
-
-// ------------------------------------
-// Content Area
-
-.global-content {
- border-top: 1px solid @fl-body-control-bg;
-}
-
-// On phones, the content area overlays the drawer, so we must give it a
-// background and min-height so it cannot be seen through. When the drawer is
-// meant to be open, we slide the content to the right to reveal the drawer.
-@media @phone {
- .global-content {
- background: @fl-body-bg;
- position: relative;
- width: 100%;
- min-height: 100vh;
- padding-bottom: 50px;
- margin-top: @mobile-header-height;
- .transition-transform(0.2s);
-
- .drawer-open & {
- .translate3d(@drawer-width, 0, 0);
-
- // Disable all interaction with the content when the drawer is open. When
- // .global-content is touched, the drawer will be closed.
- & * {
- pointer-events: none;
- }
- }
- }
-}
-
-@media @tablet, @desktop, @desktop-hd {
- .global-content {
- margin-top: @header-height;
- }
-}
-
-// ------------------------------------
-// Footer
-
-.footer-controls {
- margin: 0;
- padding: 0;
- list-style: none;
-
- & > li {
- display: inline-block;
- vertical-align: middle;
- }
-}
-
-// On phones, the footer is displayed at the bottom of the drawer. The
-// footer's primary controls don't display, but the secondary ones do.
-// @todo Maybe we should reverse the naming of primary/secondary then?
-@media @phone {
- .global-footer {
- position: fixed;
- left: 15px;
- bottom: 15px;
- width: @drawer-width;
- margin: 0;
- z-index: 1;
-
- & .container {
- padding: 0;
- }
- }
- .footer-primary {
- display: none;
- }
- .footer-secondary {
- float: none;
-
- & > li {
- margin-right: 15px;
- }
- }
-}
-
-// On other devices, we put the footer at the bottom of the page by absolutely
-// positioning it, relative to the page which we pad out at the bottom. We
-// show the primary controls on the left, and the secondary controls on the
-// right.
-@media @tablet, @desktop, @desktop-hd {
- .global-page {
- padding-bottom: 100px;
- position: relative;
- }
- .global-footer {
- position: absolute;
- bottom: 20px;
- left: 0;
- right: 0;
-
- &, & a {
- color: @fl-body-muted-more-color;
- }
- & a {
- &:hover,
- &:focus {
- text-decoration: none;
- color: @link-hover-color;
- }
- }
- }
- .footer-primary {
- display: inline-block;
-
- & > li {
- margin-right: 15px;
- }
- }
- .footer-secondary {
- float: right;
-
- & > li {
- margin-left: 15px;
- }
- }
-}
-
-// ------------------------------------
-// Miscellaneous
-
-// On phones, we disregard "affixed" elements and make them static.
-@media @phone {
- .affix {
- position: static;
- }
-}
diff --git a/less/lib/lib.less b/less/lib/lib.less
new file mode 100755
index 000000000..cb6f59ea8
--- /dev/null
+++ b/less/lib/lib.less
@@ -0,0 +1,30 @@
+@import url(http://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700,600);
+
+@import "font-awesome.less";
+@fa-font-path: "/assets/fonts";
+
+@import "normalize.less";
+@import "print.less";
+@import "scaffolding.less";
+@import "sideNav.less";
+@import "mixins.less";
+
+@import "App.less";
+@import "Alert.less";
+@import "AlertManager.less";
+@import "Avatar.less";
+@import "Badge.less";
+@import "Button.less";
+@import "Checkbox.less";
+@import "Dropdown.less";
+@import "Form.less";
+@import "FormControl.less";
+@import "LoadingIndicator.less";
+@import "Modal.less";
+@import "Navigation.less";
+@import "Search.less";
+@import "Select.less";
+@import "Tooltip.less";
+
+@import "variables.less";
+
diff --git a/less/lib/mixins.less b/less/lib/mixins.less
new file mode 100755
index 000000000..716edaed9
--- /dev/null
+++ b/less/lib/mixins.less
@@ -0,0 +1,5 @@
+@import "mixins/border-radius.less";
+@import "mixins/clearfix.less";
+@import "mixins/light-contents.less";
+@import "mixins/header-background.less";
+@import "mixins/vendor-prefixes.less";
diff --git a/less/lib/bootstrap/mixins/border-radius.less b/less/lib/mixins/border-radius.less
similarity index 100%
rename from less/lib/bootstrap/mixins/border-radius.less
rename to less/lib/mixins/border-radius.less
diff --git a/less/lib/bootstrap/mixins/clearfix.less b/less/lib/mixins/clearfix.less
similarity index 100%
rename from less/lib/bootstrap/mixins/clearfix.less
rename to less/lib/mixins/clearfix.less
diff --git a/less/lib/mixins/header-background.less b/less/lib/mixins/header-background.less
new file mode 100644
index 000000000..e925b7402
--- /dev/null
+++ b/less/lib/mixins/header-background.less
@@ -0,0 +1,18 @@
+.header-background() {
+ background: fade(@header-bg, 98%);
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: @zindex-header;
+ border-bottom: 1px solid @control-bg;
+ .translate3d(0, 0, 0);
+ .transition(~"box-shadow 0.2s, -webkit-transform 0.2s");
+
+ @media @phone {
+ height: @header-height-phone;
+ }
+ @media @tablet-up {
+ height: @header-height;
+ }
+}
diff --git a/less/lib/mixins/light-contents.less b/less/lib/mixins/light-contents.less
new file mode 100644
index 000000000..78477910c
--- /dev/null
+++ b/less/lib/mixins/light-contents.less
@@ -0,0 +1,37 @@
+// This is a mixin which styles components (buttons, inputs, etc.) for use on
+// dark backgrounds.
+.light-contents(@color: #fff, @control-bg: fade(#000, 10%), @control-color: #fff) {
+ &, a, .Button--link, .Search-input {
+ color: @color;
+ }
+ .FormControl {
+ background: @control-bg;
+ border: 0;
+ color: @control-color;
+ .placeholder(fade(@control-color, 80%));
+
+ &:focus {
+ color: @control-color;
+ background: fadein(@control-bg, 5%);
+ }
+ }
+ .Button, .Button:hover {
+ color: @control-color;
+ }
+ .Button {
+ &, &:hover {
+ background: @control-bg;
+ }
+ }
+ .Button--flat {
+ background: transparent;
+ }
+ .Button:active,
+ .Button.active,
+ .Button:focus,
+ .Button.focus,
+ .open > .Dropdown-toggle.Button {
+ background: fadein(@control-bg, 5%);
+ color: @control-color;
+ }
+}
diff --git a/less/lib/bootstrap/mixins/vendor-prefixes.less b/less/lib/mixins/vendor-prefixes.less
similarity index 99%
rename from less/lib/bootstrap/mixins/vendor-prefixes.less
rename to less/lib/mixins/vendor-prefixes.less
index afd3331c3..088986112 100755
--- a/less/lib/bootstrap/mixins/vendor-prefixes.less
+++ b/less/lib/mixins/vendor-prefixes.less
@@ -98,7 +98,7 @@
}
// Placeholder text
-.placeholder(@color: @input-color-placeholder) {
+.placeholder(@color) {
// Firefox
&::-moz-placeholder {
color: @color;
diff --git a/less/lib/modals.less b/less/lib/modals.less
deleted file mode 100644
index 974c49761..000000000
--- a/less/lib/modals.less
+++ /dev/null
@@ -1,156 +0,0 @@
-// ------------------------------------
-// Modals
-
-.modal-backdrop {
- background-color: @fl-secondary-color;
-
- &.in {
- opacity: 0.9;
- }
-}
-.modal-alert {
- text-align: center;
-
- & .alert {
- border-radius: 0;
- }
- & .alert-controls {
- margin: 0;
- display: block;
- }
-}
-.modal-body {
- background-color: @fl-body-secondary-color;
- padding: 25px 30px;
- color: @fl-body-muted-color;
-
- & .form-control {
- background-color: #fff;
- color: @fl-body-color;
-
- &:focus {
- border: 2px solid @fl-body-primary-color;
- }
- }
-
- & .help-text {
- font-size: 14px;
- line-height: 1.5em;
- margin-bottom: 25px;
- }
-
- & :last-child {
- margin-bottom: 0;
- }
-}
-.modal-footer {
- border: 0;
- padding: 20px;
- text-align: center;
- color: @fl-body-muted-color;
-}
-.modal-loading {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: rgba(255, 255, 255, 0.9);
- opacity: 0;
- pointer-events: none;
- border-radius: @border-radius-base;
- .transition(opacity 0.2s);
-
- &.active {
- opacity: 1;
- pointer-events: auto;
- }
-}
-.form-centered {
- text-align: center;
-
- & .form-control, & .btn {
- margin: 0 auto;
- text-align: center;
- height: 50px;
- padding: 15px 20px;
- font-size: 15px;
- }
-}
-
-
-@media @phone {
- .modal.fade {
- opacity: 1;
- }
- .modal {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- overflow: auto;
-
- &.fade {
- .transition-transform(0.3s);
- .translate3d(0, 100vh, 0);
- }
- &.in {
- -webkit-transform: none !important;
- transform: none !important;
- }
- &:before {
- content: " ";
- .toolbar();
- }
- }
- .modal-dialog {
- margin: 0;
- -webkit-transform: none !important;
- transform: none !important;
- }
- .modal-content {
- border-radius: 0;
- border: 0;
- min-height: 100vh;
- padding-top: @mobile-header-height;
- .box-shadow(none);
- }
- .modal-header {
- padding: 0;
- border: 0;
- min-height: 0;
- }
-}
-
-@media @tablet, @desktop, @desktop-hd {
- .modal-dialog {
- margin: 120px auto;
-
- & .close {
- position: absolute;
- right: 10px;
- top: 10px;
- z-index: 1;
- }
- }
- .modal-content {
- border: 0;
- border-radius: @border-radius-base;
- .box-shadow(0 7px 15px @fl-shadow-color);
- overflow: hidden;
- }
- .modal-sm {
- width: 375px;
- }
- .modal-header {
- text-align: center;
- border: 0;
- padding: 25px;
-
- & h3 {
- font-size: 20px;
- margin: 0;
- }
- }
-}
diff --git a/less/lib/bootstrap/normalize.less b/less/lib/normalize.less
similarity index 100%
rename from less/lib/bootstrap/normalize.less
rename to less/lib/normalize.less
diff --git a/less/lib/bootstrap/print.less b/less/lib/print.less
similarity index 63%
rename from less/lib/bootstrap/print.less
rename to less/lib/print.less
index 94ca58f12..e098fe71d 100755
--- a/less/lib/bootstrap/print.less
+++ b/less/lib/print.less
@@ -65,43 +65,4 @@
h3 {
page-break-after: avoid;
}
-
- // Bootstrap specific changes start
- //
- // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
- // Once fixed, we can just straight up remove this.
- select {
- background: #fff !important;
- }
-
- // Bootstrap components
- .navbar {
- display: none;
- }
- .btn,
- .dropup > .btn {
- > .caret {
- border-top-color: #000 !important;
- }
- }
- .label {
- border: 1px solid #000;
- }
-
- .table {
- border-collapse: collapse !important;
-
- td,
- th {
- background-color: #fff !important;
- }
- }
- .table-bordered {
- th,
- td {
- border: 1px solid #ddd !important;
- }
- }
-
- // Bootstrap specific changes end
}
diff --git a/less/lib/scaffolding.less b/less/lib/scaffolding.less
new file mode 100755
index 000000000..c1a7dcbbf
--- /dev/null
+++ b/less/lib/scaffolding.less
@@ -0,0 +1,172 @@
+* {
+ &,
+ &:before,
+ &:after {
+ .box-sizing(border-box);
+ }
+}
+
+body {
+ background: @body-bg;
+ color: @text-color;
+ font-family: "Open Sans", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 1.5;
+ overflow-y: scroll;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ line-height: 1.3;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ cursor: pointer;
+ color: @link-color;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+hr {
+ margin-top: 15px;
+ margin-bottom: 15px;
+ border: 0;
+ border-top: 2px solid @control-bg;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px;
+ .clearfix();
+
+ @media @tablet {
+ width: @screen-tablet;
+ }
+ @media @desktop {
+ width: @screen-desktop;
+ }
+ @media @desktop-hd {
+ width: @screen-desktop-hd;
+ }
+}
+
+.containerNarrow {
+ max-width: 600px;
+ margin: 0 auto;
+}
+
+.global-page {
+ overflow-x: hidden;
+ min-height: 100vh;
+}
+
+mark {
+ background: #FFE300;
+ padding: 1px;
+ border-radius: @border-radius;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ font-size: 14px;
+ font-weight: bold;
+ margin-bottom: 10px;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+
+// Checkboxes and radios
+//
+// Indent the labels to position radios/checkboxes as hanging controls.
+
+// .radio,
+// .checkbox {
+// position: relative;
+// display: block;
+// margin-top: 10px;
+// margin-bottom: 10px;
+
+// label {
+// min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
+// padding-left: 20px;
+// margin-bottom: 0;
+// font-weight: normal;
+// cursor: pointer;
+// }
+// }
+// .radio input[type="radio"],
+// .radio-inline input[type="radio"],
+// .checkbox input[type="checkbox"],
+// .checkbox-inline input[type="checkbox"] {
+// position: absolute;
+// margin-left: -20px;
+// margin-top: 4px \9;
+// }
+
+// .radio + .radio,
+// .checkbox + .checkbox {
+// margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
+// }
+
+// // Radios and checkboxes on same line
+// .radio-inline,
+// .checkbox-inline {
+// position: relative;
+// display: inline-block;
+// padding-left: 20px;
+// margin-bottom: 0;
+// vertical-align: middle;
+// font-weight: normal;
+// cursor: pointer;
+// }
+// .radio-inline + .radio-inline,
+// .checkbox-inline + .checkbox-inline {
+// margin-top: 0;
+// margin-left: 10px; // space out consecutive inline controls
+// }
+
+.fade {
+ opacity: 0;
+ .transition(opacity .15s linear);
+ &.in {
+ opacity: 1;
+ }
+}
+.darkenBackground {
+ background: @shadow-color;
+}
+
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+
+@media @tablet-up {
+ .affix {
+ position: fixed;
+ }
+}
diff --git a/less/lib/search.less b/less/lib/search.less
deleted file mode 100644
index 52130f36b..000000000
--- a/less/lib/search.less
+++ /dev/null
@@ -1,82 +0,0 @@
-@media @tablet, @desktop, @desktop-hd {
- .search-box {
- & input:focus, &.active input, & .search-results {
- width: 400px;
- }
- }
-}
-.search-results {
- max-height: 70vh;
- overflow: auto;
-
- & > li > a {
- white-space: normal;
-
- &:hover {
- background: none;
- }
- }
-
- & mark {
- background: none;
- padding: 0;
- font-weight: bold;
- color: inherit;
- box-shadow: none;
- }
-}
-
-.search-input {
- overflow: hidden;
- color: @fl-body-muted-color;
-
- &:before {
- .fa();
- content: @fa-var-search;
- float: left;
- margin-right: -36px;
- width: 36px;
- font-size: 14px;
- text-align: center;
- position: relative;
- padding: @padding-base-vertical - 1 0;
- line-height: @line-height-base;
- pointer-events: none;
- }
- & input {
- float: left;
- width: 225px;
- padding-left: 36px;
- padding-right: 36px;
- .transition(~"all 0.4s");
-
- .active & {
- background: @fl-body-bg;
- border: 2px solid @fl-body-secondary-color;
-
- &:focus {
- &:extend(.form-control:focus);
- }
- }
- }
- & .btn {
- float: left;
- margin-left: -36px;
- width: 36px !important;
- outline: none;
- }
-}
-
-.discussion-search-result {
- & .excerpt {
- margin-top: 3px;
- color: @fl-body-muted-color;
- font-size: 11px;
- }
-}
-.user-search-result {
- & .avatar {
- .avatar-size(24px);
- margin: -2px 10px -2px 0;
- }
-}
diff --git a/less/lib/side-nav.less b/less/lib/side-nav.less
deleted file mode 100644
index 03948ae71..000000000
--- a/less/lib/side-nav.less
+++ /dev/null
@@ -1,83 +0,0 @@
-.side-nav > ul {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-// On phones, the index sidebar will pretty much take care of itself. The
-// navigation list is a .dropdown-select and will be shown as the title-
-// control; the new discussion button is the primary-control. On anything
-// larger than a phone, however, we need to affix the sidebar and expand the
-// .dropdown-select into a plain list.
-@media @tablet, @desktop, @desktop-hd {
- .side-nav {
- // Expand the dropdown-select component into a normal nav list.
- & .dropdown-select {
- display: block;
-
- .expand-dropdown();
-
- & .dropdown-menu {
- .nav-list();
- }
- }
- }
-}
-
-@media @tablet {
- .side-nav {
- padding: 15px 0;
- white-space: nowrap;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
-
- &:after {
- content: " ";
- position: absolute;
- left: 0;
- right: 0;
- margin-top: 15px;
- border-bottom: 1px solid @fl-body-secondary-color;
- }
-
- & > ul > li, & .dropdown-menu > li {
- display: inline-block;
- margin-right: 20px;
- }
- & .dropdown-menu > li.divider {
- display: none;
- }
-
- & .dropdown-select .dropdown-menu > li > a {
- padding-left: 25px;
-
- & .icon {
- margin-left: -25px;
- }
- }
-
- & .affix {
- position: static;
- }
- }
-}
-
-@media @desktop, @desktop-hd {
- .side-nav {
- float: left;
-
- &, & > ul {
- width: 175px;
- }
- & > ul {
- margin-top: 30px;
-
- &.affix {
- top: 56px;
- }
- & > li {
- margin-bottom: 10px;
- }
- }
- }
-}
diff --git a/less/lib/sideNav.less b/less/lib/sideNav.less
new file mode 100755
index 000000000..b958b1697
--- /dev/null
+++ b/less/lib/sideNav.less
@@ -0,0 +1,120 @@
+.sideNav > ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+// On phones, the index sidebar will pretty much take care of itself. The
+// navigation list is a .dropdown-select and will be shown as the title-
+// control; the new discussion button is the primary-control. On anything
+// larger than a phone, however, we need to affix the sidebar and expand the
+// .dropdown-select into a plain list.
+@media @tablet-up {
+ .sideNav {
+ // Expand the dropdown-select component into a normal nav list.
+ & .Dropdown--select {
+ display: block;
+
+ .Dropdown--expanded();
+
+ & .Dropdown-menu {
+ & > li > a {
+ padding: 8px 0 8px 30px;
+ color: @muted-color;
+
+ &:hover {
+ background: none;
+ color: @link-color;
+ text-decoration: none;
+ }
+
+ & .Button-icon {
+ float: left;
+ margin-left: -30px;
+ margin-top: 1px;
+ font-size: 15px;
+ }
+ }
+ & > li.active > a {
+ background: none;
+ color: @primary-color;
+ font-weight: bold;
+ }
+ & > .Dropdown-separator {
+ background: none;
+ }
+ }
+ }
+ }
+}
+
+@media @tablet {
+ .sideNav {
+ padding: 15px 0;
+ white-space: nowrap;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+
+ &:after {
+ content: " ";
+ position: absolute;
+ left: 0;
+ right: 0;
+ margin-top: 15px;
+ border-bottom: 1px solid @control-bg;
+ }
+
+ > ul > li, .Dropdown-menu > li {
+ display: inline-block;
+ margin-right: 20px;
+ }
+ .Dropdown-separator {
+ display: none;
+ }
+
+ .Dropdown--select .Dropdown-menu > li > a {
+ padding-left: 25px;
+
+ .icon {
+ margin-left: -25px;
+ }
+ }
+
+ .affix {
+ position: static;
+ }
+ }
+}
+
+@media @desktop-up {
+ .sideNav {
+ float: left;
+
+ &, > ul {
+ width: 175px;
+ }
+ > ul {
+ margin-top: 30px;
+
+ &.affix {
+ top: 56px;
+ }
+ > li {
+ margin-bottom: 10px;
+ }
+ }
+ }
+}
+
+@media @phone, @tablet {
+ .sideNavOffset {
+ margin-top: 15px;
+ }
+}
+
+@media @desktop-up {
+ .sideNavOffset {
+ margin-top: 30px;
+ margin-left: 225px;
+ }
+}
diff --git a/less/lib/variables.less b/less/lib/variables.less
old mode 100644
new mode 100755
index c6cca657e..0d72129e7
--- a/less/lib/variables.less
+++ b/less/lib/variables.less
@@ -1,127 +1,129 @@
-@fl-primary-color: #536F90;
-@fl-secondary-color: #536F90;
-@fl-dark-mode: false;
-@fl-colored-hdr: false;
+// ---------------------------------
+// CONFIG
+
+@config-primary-color: #536F90;
+@config-secondary-color: #536F90;
+@config-dark-mode: false;
+@config-colored-header: false;
// ---------------------------------
-// HELPERS
+// COLORS
-@fl-primary-hue: hue(@fl-primary-color);
-@fl-primary-sat: saturation(@fl-primary-color);
+@primary-hue: hue(@primary-color);
+@primary-sat: saturation(@primary-color);
-@fl-secondary-hue: hue(@fl-secondary-color);
-@fl-secondary-sat: saturation(@fl-secondary-color);
+@secondary-hue: hue(@secondary-color);
+@secondary-sat: saturation(@secondary-color);
-// ---------------------------------
-// BODY
+// Derive the primary/secondary colors from the config variables. In dark mode,
+// we make the user-set colors a bit darker, otherwise they will stand out too
+// much.
+.define-colors(@config-dark-mode);
+.define-colors(false) {
+ @primary-color: @config-primary-color;
+ @secondary-color: @config-secondary-color;
-.define-body-variables(@fl-dark-mode);
-.define-body-variables(false) {
- @fl-body-primary-color: @fl-primary-color;
- @fl-body-secondary-color: hsl(@fl-secondary-hue, min(50%, @fl-secondary-sat), 93%);
+ @body-bg: #fff;
+ @text-color: #333;
+ @link-color: saturate(@primary-color, 10%);
+ @heading-color: @text-color;
+ @muted-color: hsl(@secondary-hue, min(25%, @secondary-sat), 63%);
+ @muted-more-color: #bbb;
+ @shadow-color: rgba(0, 0, 0, 0.35);
- @fl-body-bg: #fff;
- @fl-body-color: #333;
- @fl-body-muted-color: hsl(@fl-secondary-hue, min(25%, @fl-secondary-sat), 63%);
- @fl-body-muted-more-color: #bbb;
- @fl-shadow-color: rgba(0, 0, 0, 0.35);
+ @control-bg: hsl(@secondary-hue, min(50%, @secondary-sat), 93%);
+ @control-color: @muted-color;
+ @control-danger-bg: #fdd;
+ @control-danger-color: #d66;
+
+ @overlay-bg: fade(@secondary-color, 90%);
}
-.define-body-variables(true) {
- @fl-body-primary-color: mix(@fl-primary-color, #000, 80%);
- @fl-body-secondary-color: hsl(@fl-secondary-hue, min(20%, @fl-secondary-sat), 13%);
+.define-colors(true) {
+ @primary-color: @config-primary-color;
+ @secondary-color: @config-secondary-color;
- @fl-body-bg: hsl(@fl-secondary-hue, min(20%, @fl-secondary-sat), 10%);
- @fl-body-color: #ccc;
- @fl-body-muted-color: hsl(@fl-secondary-hue, min(20%, @fl-secondary-sat), 35%);
- @fl-body-muted-more-color: hsl(@fl-secondary-hue, min(10%, @fl-secondary-sat), 25%);
- @fl-shadow-color: rgba(0, 0, 0, 0.5);
+ @body-bg: hsl(@secondary-hue, min(20%, @secondary-sat), 10%);
+ @text-color: #ccc;
+ @link-color: saturate(@primary-color, 10%);
+ @heading-color: @text-color;
+ @muted-color: hsl(@secondary-hue, min(20%, @secondary-sat), 35%);
+ @muted-more-color: hsl(@secondary-hue, min(10%, @secondary-sat), 25%);
+ @shadow-color: rgba(0, 0, 0, 0.5);
+
+ @control-bg: hsl(@secondary-hue, min(20%, @secondary-sat), 13%);
+ @control-color: @muted-color;
+ @control-danger-bg: #411;
+ @control-danger-color: #a88;
+
+ @overlay-bg: fade(darken(@body-bg, 5%), 90%);
}
-@fl-body-heading-color: @fl-body-color;
-@fl-body-control-bg: @fl-body-secondary-color;
-@fl-body-control-color: @fl-body-muted-color;
-// ---------------------------------
-// DRAWER
+@hero-bg: @control-bg;
+@hero-color: @control-color;
+@hero-muted-color: @control-color;
-@fl-drawer-bg: @fl-body-primary-color;
-@fl-drawer-color: #fff;
-@fl-drawer-muted-color: fade(#fff, 50%);
-@fl-drawer-control-bg: fade(#000, 10%);
-@fl-drawer-control-color: #fff;
+@alert-bg: yellow;
+@alert-color: black;
-// ---------------------------------
-// HEADER
+@alert-error-bg: red;
+@alert-error-color: #fff;
-.define-hdr-variables(@fl-colored-hdr);
-.define-hdr-variables(false) {
- @fl-hdr-bg: @fl-body-bg;
- @fl-hdr-color: contrast(@fl-hdr-bg, #fff, @fl-body-primary-color);
- @fl-hdr-muted-color: @fl-body-muted-color;
- @fl-hdr-control-bg: @fl-body-control-bg;
- @fl-hdr-control-color: @fl-body-control-color;
-
- @fl-body-hero-bg: @fl-body-control-bg;
- @fl-body-hero-color: @fl-body-control-color;
- @fl-body-hero-muted-color: @fl-body-control-color;
+.define-header(@config-colored-header);
+.define-header(false) {
+ @header-bg: @body-bg;
+ @header-color: @primary-color;
+ @header-control-bg: @control-bg;
+ @header-control-color: @control-color;
}
-.define-hdr-variables(true) {
- @fl-hdr-bg: @fl-drawer-bg;
- @fl-hdr-color: @fl-drawer-color;
- @fl-hdr-muted-color: @fl-drawer-muted-color;
- @fl-hdr-control-bg: @fl-drawer-control-bg;
- @fl-hdr-control-color: @fl-drawer-control-color;
-
- @fl-body-hero-bg: @fl-body-control-bg;
- @fl-body-hero-color: @fl-body-primary-color;
- @fl-body-hero-muted-color: @fl-body-control-color;
+.define-header(true) {
+ @header-bg: @primary-color;
+ @header-color: @body-bg;
+ @header-control-bg: fade(#000, 10%);
+ @header-control-color: @body-bg;
}
// ---------------------------------
// LAYOUT
-@drawer-width: 270px;
-@index-pane-width: 400px;
-@header-height: 56px;
-@mobile-header-height: 46px;
+@drawer-width: 270px;
+@pane-width: 400px;
+@header-height: 56px;
+@header-height-phone: 46px;
+
+@border-radius: 4px;
+
+@zindex-dropdown: 1000;
+@zindex-header: 1010;
+@zindex-composer: 1020;
+@zindex-pane: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+@zindex-alerts: 1060;
+@zindex-tooltip: 1070;
// ---------------------------------
-// BOOTSTRAP
+// BREAKPOINTS
-@container-large-desktop: (1040px + @grid-gutter-width);
+@screen-phone-max: (@screen-tablet - 1);
-@brand-primary: @fl-body-primary-color;
+@screen-tablet: 768px;
+@screen-tablet-max: (@screen-desktop - 1);
-@body-bg: @fl-body-bg;
-@text-color: @fl-body-color;
-@legend-color: @fl-body-color;
-@font-size-base: 13px;
-@headings-line-height: 1.428571429;
+@screen-desktop: 992px;
+@screen-desktop-max: (@screen-desktop-hd - 1);
-@font-family-sans-serif: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+@screen-desktop-hd: 1100px;
-@padding-base-vertical: 8px;
-@padding-base-horizontal: 13px;
+@phone: ~"(max-width: @{screen-phone-max})";
+@tablet: ~"(min-width: @{screen-tablet}) and (max-width: @{screen-tablet-max})";
+@desktop: ~"(min-width: @{screen-desktop}) and (max-width: @{screen-desktop-max})";
+@desktop-hd: ~"(min-width: @{screen-desktop-hd})";
-@btn-default-bg: @fl-body-control-bg;
-@btn-default-color: @fl-body-control-color;
-
-@input-bg: @fl-body-control-bg;
-@input-border: @fl-body-control-bg;
-@input-border-focus: @fl-body-control-bg;
-@input-color: @fl-body-control-color;
-@input-color-placeholder: @fl-body-control-color;
-
-@zindex-composer: @zindex-navbar-fixed + 4;
-@zindex-pane: @zindex-navbar-fixed + 5;
-@zindex-alerts: @zindex-modal + 10;
-
-@link-color: saturate(@fl-primary-color, 10%);
-@link-hover-color: @link-color;
+@tablet-up: ~"(min-width: @{screen-tablet})";
+@desktop-up: ~"(min-width: @{screen-desktop})";
// ---------------------------------
-// MEDIA SHORTCODES
+// COMPONENTS
-@phone: ~"(max-width: @{screen-xs-max})";
-@tablet: ~"(min-width: @{screen-sm-min}) and (max-width: @{screen-sm-max})";
-@desktop: ~"(min-width: @{screen-md-min}) and (max-width: @{screen-md-max})";
-@desktop-hd: ~"(min-width: @{screen-lg-min})";
+@tooltip-bg: rgba(0, 0, 0, 0.9);
+@tooltip-color: #fff;
diff --git a/views/app.blade.php b/views/app.blade.php
index 822e1b341..7e51d9c62 100644
--- a/views/app.blade.php
+++ b/views/app.blade.php
@@ -28,14 +28,18 @@
diff --git a/views/forum.blade.php b/views/forum.blade.php
index 899172890..b88825f7f 100644
--- a/views/forum.blade.php
+++ b/views/forum.blade.php
@@ -9,8 +9,9 @@
* Flarum's JavaScript client mounts various components into key elements in
* this template. They are distinguished by their ID attributes:
*
- * - #page
- * - #page-navigation
+ * - #app
+ * - #app-navigation
+ * - #drawer
* - #header
* - #header-navigation
* - #home-link
@@ -23,38 +24,38 @@
* - #composer
*/
?>
-