diff --git a/app/client/stylesheets/paper.import.less b/app/client/stylesheets/paper.import.less deleted file mode 100644 index 01388d3..0000000 --- a/app/client/stylesheets/paper.import.less +++ /dev/null @@ -1,574 +0,0 @@ -// Paper 3.3.4 -// Bootswatch -// ----------------------------------------------------- - -@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); - -// Navbar ===================================================================== - -.navbar { - border: none; - .box-shadow(0 1px 2px rgba(0,0,0,.3)); - - &-brand { - font-size: 24px; - } - - &-inverse { - .form-control { - color: #fff; - .placeholder(@navbar-inverse-link-color); - - &[type=text] { - .box-shadow(inset 0 -1px 0 @navbar-inverse-link-color); - - &:focus { - .box-shadow(inset 0 -2px 0 #fff); - } - } - } - } -} - -// Buttons ==================================================================== - -#btn(@class,@bg) { - .btn-@{class} { - background-size: 200%; - background-position: 50%; - - &:hover, - &:active:hover, - &:focus { - background-color: darken(@bg, 6%); - } - - &:active { - background-color: darken(@bg, 6%); - #gradient > .radial(darken(@bg, 6%) 10%, @bg 11%); - background-size: 1000%; - .box-shadow(2px 2px 2px rgba(0,0,0,.3)); - } - } -} - -#btn(default,@btn-default-bg); -#btn(primary,@btn-primary-bg); -#btn(success,@btn-success-bg); -#btn(info,@btn-info-bg); -#btn(warning,@btn-warning-bg); -#btn(danger,@btn-danger-bg); - -.btn { - text-transform: uppercase; - border-right: none; - border-bottom: none; - .box-shadow(1px 1px 2px rgba(0,0,0,.3)); - .transition(all 0.2s); - - &-link { - .box-shadow(none); - - &:hover, - &:focus { - color: @brand-primary; - text-decoration: none; - } - } - - &-default.disabled { - border: 1px solid @btn-default-border; - } -} - -.btn-group { - .btn + .btn, - .btn + .btn-group, - .btn-group + .btn, - .btn-group + .btn-group { - margin-left: 0; - } - - &-vertical { - > .btn + .btn, - > .btn + .btn-group, - > .btn-group + .btn, - > .btn-group + .btn-group { - margin-top: 0; - } - } -} - -// Typography ================================================================= - -body { - -webkit-font-smoothing: antialiased; - letter-spacing: .1px; - text-rendering: optimizeLegibility; -} - -p { - margin: 0 0 1em; -} - -input, -button { - -webkit-font-smoothing: antialiased; - letter-spacing: .1px; - text-rendering: optimizeLegibility; -} - -a { - .transition(all 0.2s); -} - -// Tables ===================================================================== - -.table-hover { - > tbody > tr:hover, - > tbody > tr:hover > th, - > tbody > tr:hover > td { - .transition(all 0.2s); - } -} - -// Forms ====================================================================== - -label { - font-weight: normal; -} - -textarea, -textarea.form-control, -input.form-control, -input[type=text], -input[type=password], -input[type=email], -input[type=number], -[type=text].form-control, -[type=password].form-control, -[type=email].form-control, -[type=tel].form-control, -[contenteditable].form-control { - padding: 0; - border: none; - border-radius: 0; - -webkit-appearance: none; - .box-shadow(inset 0 -1px 0 #ddd); - font-size: 16px; - - &:focus { - .box-shadow(inset 0 -2px 0 @brand-primary); - } - - &[disabled], - &[readonly] { - .box-shadow(none); - border-bottom: 1px dotted #ddd; - } - - &.input { - &-sm { - font-size: @font-size-small; - } - - &-lg { - font-size: @font-size-large; - } - } -} - -select, -select.form-control { - border: 0; - border-radius: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - padding-left: 0; - padding-right: 0\9; // remove padding for < ie9 since default arrow can't be removed - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=); - background-size: 13px; - background-repeat: no-repeat; - background-position: right center; - .box-shadow(inset 0 -1px 0 #ddd); - font-size: 16px; - line-height: 1.5; - - &::-ms-expand { - display: none; - } - - &.input { - &-sm { - font-size: @font-size-small; - } - - &-lg { - font-size: @font-size-large; - } - } - - &:focus { - .box-shadow(inset 0 -2px 0 @brand-primary); - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=); - } - - &[multiple] { - background: none; - } -} - -.radio, -.radio-inline, -.checkbox, -.checkbox-inline { - label { - padding-left: 25px; - } - - input[type="radio"], - input[type="checkbox"] { - margin-left: -25px; - } -} - -input[type="radio"], -.radio input[type="radio"], -.radio-inline input[type="radio"] { - position: relative; - margin-top: 5px; - margin-right: 4px; - vertical-align: -4px; - border: none; - background-color: transparent; - -webkit-appearance: none; - appearance: none; - cursor: pointer; - - &:focus { - outline: none; - } - - &:before, - &:after { - content: ""; - display: block; - width: 18px; - height: 18px; - margin-top: -3px; - border-radius: 50%; - .transition(240ms); - } - - &:before { - position: absolute; - left: 0; - top: 0; - background-color: @brand-primary; - .scale(0); - } - - &:after { - border: 2px solid @gray; - } - - &:checked:before { - .scale(0.5); - } - - &:disabled:checked:before { - background-color: @gray-light; - } - - &:checked:after { - border-color: @brand-primary; - } - - &:disabled:after, - &:disabled:checked:after { - border-color: @gray-light; - } -} - -input[type="checkbox"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: relative; - vertical-align: -4px; - border: none; - -webkit-appearance: none; - appearance: none; - cursor: pointer; - - &:focus { - outline: none; - } - - &:after { - content: ""; - display: block; - width: 18px; - height: 18px; - margin-top: -2px; - margin-right: 5px; - border: 2px solid @gray; - border-radius: 2px; - .transition(240ms); - } - - &:checked:before { - content: ""; - position: absolute; - top: 0; - left: 6px; - display: table; - width: 6px; - height: 12px; - border: 2px solid #fff; - border-top-width: 0; - border-left-width: 0; - .rotate(45deg); - } - - &:checked:after { - background-color: @brand-primary; - border-color: @brand-primary; - } - - &:disabled:after { - border-color: @gray-light; - } - - &:disabled:checked:after { - background-color: @gray-light; - border-color: transparent; - } -} - -.has-warning { - input:not([type=checkbox]), - .form-control, - input:not([type=checkbox]):focus, - .form-control:focus { - .box-shadow(inset 0 -2px 0 @brand-warning); - } -} - -.has-error { - input:not([type=checkbox]), - .form-control, - input:not([type=checkbox]):focus, - .form-control:focus { - .box-shadow(inset 0 -2px 0 @brand-danger); - } -} - -.has-success { - input:not([type=checkbox]), - .form-control, - input:not([type=checkbox]):focus, - .form-control:focus { - .box-shadow(inset 0 -2px 0 @brand-success); - } -} - -// Navs ======================================================================= - -.nav-tabs { - > li > a, - > li > a:focus { - margin-right: 0; - background-color: transparent; - border: none; - color: @navbar-default-link-color; - .box-shadow(inset 0 -1px 0 #ddd); - .transition(all 0.2s); - - &:hover { - background-color: transparent; - .box-shadow(inset 0 -2px 0 @brand-primary); - color: @brand-primary; - } - } - - & > li.active > a, - & > li.active > a:focus { - border: none; - .box-shadow(inset 0 -2px 0 @brand-primary); - color: @brand-primary; - - &:hover { - border: none; - color: @brand-primary; - } - } - - & > li.disabled > a { - .box-shadow(inset 0 -1px 0 #ddd); - } - - &.nav-justified { - - & > li > a, - & > li > a:hover, - & > li > a:focus, - & > .active > a, - & > .active > a:hover, - & > .active > a:focus { - border: none; - } - } - - .dropdown-menu { - margin-top: 0; - } -} - -.dropdown-menu { - margin-top: 0; - border: none; - .box-shadow(0 1px 4px rgba(0,0,0,.3)); -} - -// Indicators ================================================================= - -.alert { - border: none; - color: #fff; - - &-success { - background-color: @brand-success; - } - - &-info { - background-color: @brand-info; - } - - &-warning { - background-color: @brand-warning; - } - - &-danger { - background-color: @brand-danger; - } - - a:not(.close), - .alert-link { - color: #fff; - font-weight: bold; - } - - .close { - color: #fff; - } -} - -.badge { - padding: 3px 6px 5px; -} - -.progress { - position: relative; - z-index: 1; - height: 6px; - border-radius: 0; - - .box-shadow(none); - - &-bar { - .box-shadow(none); - - &:last-child { - border-radius: 0 3px 3px 0; - } - - &:last-child { - &:before { - display: block; - content: ""; - position: absolute; - width: 100%; - height: 100%; - left: 0; - right: 0; - z-index: -1; - background-color: lighten(@progress-bar-bg, 35%); - } - } - - &-success:last-child.progress-bar:before { - background-color: lighten(@brand-success, 35%); - } - - &-info:last-child.progress-bar:before { - background-color: lighten(@brand-info, 45%); - } - &-warning:last-child.progress-bar:before { - background-color: lighten(@brand-warning, 35%); - } - - &-danger:last-child.progress-bar:before { - background-color: lighten(@brand-danger, 25%); - } - } -} - -// Progress bars ============================================================== - -// Containers ================================================================= - -.close { - font-size: 34px; - font-weight: 300; - line-height: 24px; - opacity: 0.6; - - &:hover { - opacity: 1; - } -} - -.list-group { - - &-item { - padding: 15px; - } - - &-item-text { - color: @gray-light; - } -} - -.well { - border-radius: 0; - .box-shadow(none); -} - -.panel { - border: none; - border-radius: 2px; - .box-shadow(0 1px 4px rgba(0,0,0,.3)); - - &-heading { - border-bottom: none; - } - - &-footer { - border-top: none; - } -} - -.popover { - border: none; - .box-shadow(0 1px 4px rgba(0,0,0,.3)); -} - -.carousel { - &-caption { - h1, h2, h3, h4, h5, h6 { - color: inherit; - } - } -} - diff --git a/app/client/stylesheets/paper.variables.import.less b/app/client/stylesheets/paper.variables.import.less deleted file mode 100644 index 41d2d41..0000000 --- a/app/client/stylesheets/paper.variables.import.less +++ /dev/null @@ -1,861 +0,0 @@ -// Paper 3.3.4 -// Variables -// -------------------------------------------------- - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -@gray-base: #000; -@gray-darker: lighten(@gray-base, 13.5%); // #222 -@gray-dark: #212121; -@gray: #666; -@gray-light: #bbb; -@gray-lighter: lighten(@gray-base, 93.5%); // #eee - -@brand-primary: #2196F3; -@brand-success: #4CAF50; -@brand-info: #9C27B0; -@brand-warning: #ff9800; -@brand-danger: #e51c23; - - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -@body-bg: #fff; -//** Global text color on ``. -@text-color: @gray-darker; //@gray @patte - -//** Global textual link color. -@link-color: @brand-primary; -//** Link hover color set via `darken()` function. -@link-hover-color: darken(@link-color, 15%); -//** Link hover decoration. -@link-hover-decoration: underline; - - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -@font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; -@font-family-serif: Georgia, "Times New Roman", Times, serif; -//** Default monospace fonts for ``, ``, and `
`.
-@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
-@font-family-base:        @font-family-sans-serif;
-
-@font-size-base:          16px; //13px @patte
-@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
-@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
-
-@font-size-h1:            56px;
-@font-size-h2:            45px;
-@font-size-h3:            34px;
-@font-size-h4:            24px;
-@font-size-h5:            20px;
-@font-size-h6:            14px;
-
-//** Unit-less `line-height` for use in components like buttons.
-@line-height-base:        1.846; // 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:    400;
-@headings-line-height:    1.1;
-@headings-color:          #444;
-
-
-//== 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:   16px;
-
-@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:        3px;
-@border-radius-large:       3px;
-@border-radius-small:       3px;
-
-//** Global color for active items (e.g., navs or dropdowns).
-@component-active-color:    #fff;
-//** Global background color for active items (e.g., navs or dropdowns).
-@component-active-bg:       @brand-primary;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-@caret-width-base:          4px;
-//** Carets increase slightly in size for larger components.
-@caret-width-large:         5px;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ``s.
-@table-cell-padding:            8px;
-//** Padding for cells in `.table-condensed`.
-@table-condensed-cell-padding:  5px;
-
-//** Default background color used for all tables.
-@table-bg:                      transparent;
-//** Background color used for `.table-striped`.
-@table-bg-accent:               #f9f9f9;
-//** Background color used for `.table-hover`.
-@table-bg-hover:                #f5f5f5;
-@table-bg-active:               @table-bg-hover;
-
-//** Border color for table and cell borders.
-@table-border-color:            #ddd;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-@btn-font-weight:                normal;
-
-@btn-default-color:              @text-color;
-@btn-default-bg:                 #fff;
-@btn-default-border:             #eee;
-
-@btn-primary-color:              #fff;
-@btn-primary-bg:                 @brand-primary;
-@btn-primary-border:             transparent;
-
-@btn-success-color:              #fff;
-@btn-success-bg:                 @brand-success;
-@btn-success-border:             transparent;
-
-@btn-info-color:                 #fff;
-@btn-info-bg:                    @brand-info;
-@btn-info-border:                transparent;
-
-@btn-warning-color:              #fff;
-@btn-warning-bg:                 @brand-warning;
-@btn-warning-border:             transparent;
-
-@btn-danger-color:               #fff;
-@btn-danger-bg:                  @brand-danger;
-@btn-danger-border:              transparent;
-
-@btn-link-disabled-color:        @gray-light;
-
-
-//== Forms
-//
-//##
-
-//** `` background color
-@input-bg:                       transparent;
-//** `` background color
-@input-bg-disabled:              transparent;
-
-//** Text color for ``s
-@input-color:                    @gray;
-//** `` border color
-@input-border:                   transparent;
-
-// 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:        @gray-light;
-
-//** Default `.form-control` height
-@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
-//** Large `.form-control` height
-@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
-//** Small `.form-control` height
-@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
-
-//** `.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:           transparent;
-//** 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:            @text-color;
-//** Hover color for dropdown links.
-@dropdown-link-hover-color:      darken(@gray-dark, 5%);
-//** Hover background for dropdown links.
-@dropdown-link-hover-bg:         @gray-lighter;
-
-//** 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:           @gray-light;
-
-
-//-- 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:                    64px;
-@navbar-margin-bottom:             @line-height-computed;
-@navbar-border-radius:             @border-radius-base;
-@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
-@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
-@navbar-collapse-max-height:       340px;
-
-@navbar-default-color:             @gray-light;
-@navbar-default-bg:                #fff;
-@navbar-default-border:            transparent;
-
-// Navbar links
-@navbar-default-link-color:                @gray;
-@navbar-default-link-hover-color:          @gray-dark;
-@navbar-default-link-hover-bg:             transparent;
-@navbar-default-link-active-color:         @gray-dark;
-@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:         @navbar-default-link-hover-color;
-@navbar-default-brand-hover-bg:            transparent;
-
-// Navbar toggle
-@navbar-default-toggle-hover-bg:           transparent;
-@navbar-default-toggle-icon-bar-bg:        rgba(0,0,0,0.5);
-@navbar-default-toggle-border-color:       transparent;
-
-
-// Inverted navbar
-// Reset inverted navbar basics
-@navbar-inverse-color:                      @gray-light;
-@navbar-inverse-bg:                         @brand-primary;
-@navbar-inverse-border:                     transparent;
-
-// Inverted navbar links
-@navbar-inverse-link-color:                 lighten(@brand-primary, 30%);
-@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:            transparent;
-@navbar-inverse-toggle-icon-bar-bg:         rgba(0,0,0,0.5);
-@navbar-inverse-toggle-border-color:        transparent;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-@nav-link-padding:                          10px 15px;
-@nav-link-hover-bg:                         @gray-lighter;
-
-@nav-disabled-link-color:                   @gray-light;
-@nav-disabled-link-hover-color:             @gray-light;
-
-//== Tabs
-@nav-tabs-border-color:                     transparent;
-
-@nav-tabs-link-hover-border-color:          @gray-lighter;
-
-@nav-tabs-active-link-hover-bg:             transparent;
-@nav-tabs-active-link-hover-color:          @gray;
-@nav-tabs-active-link-hover-border-color:   transparent;
-
-@nav-tabs-justified-link-border-color:            @nav-tabs-border-color;
-@nav-tabs-justified-active-link-border-color:     @body-bg;
-
-//== Pills
-@nav-pills-border-radius:                   @border-radius-base;
-@nav-pills-active-link-hover-bg:            @component-active-bg;
-@nav-pills-active-link-hover-color:         @component-active-color;
-
-
-//== Pagination
-//
-//##
-
-@pagination-color:                     @link-color;
-@pagination-bg:                        #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:                   #f9f9f9;
-@jumbotron-heading-color:        @headings-color;
-@jumbotron-font-size:            ceil((@font-size-base * 1.5));
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-@state-success-text:             @brand-success;
-@state-success-bg:               #dff0d8;
-@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
-
-@state-info-text:                @brand-info;
-@state-info-bg:                  #e1bee7;
-@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
-
-@state-warning-text:             @brand-warning;
-@state-warning-bg:               #ffe0b2;
-@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
-
-@state-danger-text:              @brand-danger;
-@state-danger-bg:                #f9bdbb;
-@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:                  #727272;
-@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:                transparent;
-//** Popover fallback border color
-@popover-fallback-border-color:       transparent;
-
-//** 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, 7.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:                   transparent;
-//** 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:   transparent;
-//** 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:          #fff;
-@panel-success-border:        @state-success-border;
-@panel-success-heading-bg:    @brand-success;
-
-@panel-info-text:             #fff;
-@panel-info-border:           @state-info-border;
-@panel-info-heading-bg:       @brand-info;
-
-@panel-warning-text:          #fff;
-@panel-warning-border:        @state-warning-border;
-@panel-warning-heading-bg:    @brand-warning;
-
-@panel-danger-text:           #fff;
-@panel-danger-border:         @state-danger-border;
-@panel-danger-heading-bg:     @brand-danger;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-@thumbnail-padding:           4px;
-//** Thumbnail background color
-@thumbnail-bg:                @body-bg;
-//** Thumbnail border color
-@thumbnail-border:            #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:                     #f9f9f9;
-@well-border:                 transparent;
-
-
-//== 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:           normal;
-@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:           normal;
-@close-color:                 #000;
-@close-text-shadow:           none;
-
-
-//== 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/app/lib/collections/questions.coffee b/app/lib/collections/questions.coffee
index b01b7a5..cd7d5d0 100644
--- a/app/lib/collections/questions.coffee
+++ b/app/lib/collections/questions.coffee
@@ -1,284 +1,320 @@
 class @Question
   constructor: (doc) ->
     _.extend this, doc
 
   getSchemaDict: ->
     s = _.pickDeep @, 'type', 'label', 'optional', 'min', 'max', 'decimal', 'options', 'options.label', 'options.value'
     switch @type
       when "text"
         s.type = String
         s.autoform = 
           type: "textarea"
       when "number"
         s.type = Number
       when "boolean"
         s.type = Boolean
         s.autoform = 
           type: "boolean-radios"
       when "date"
         s.type = Date
         s.autoform = 
           type: "bootstrap-datepicker"
       when "dateTime"
         s.type = Date
         s.autoform = 
           type: "bootstrap-datetimepicker"
       when "multipleChoice"
         s.autoform = 
           options: @choices
         if @mode is "checkbox"
           s.type = [Number]
           if @orientation is 'inline'
             s.autoform.type = "select-checkbox-inline"
           else #if @orientation is 'vertical'
             s.autoform.type = "select-checkbox"
         else #if @mode is "radio"
           s.type = Number
           if @orientation is 'inline'
             s.autoform.type = "select-radio-inline"
           else #if @orientation is 'vertical'
             s.autoform.type = "select-radio"
       when "table"
         s.type = Number
       when "description"
         s.type = String
         s.label = ' ' 
         s.autoform = 
           type: "description"
     delete s.options
     s
 
 
   getMetaSchemaDict: ->
     schema = {}
 
     noWhitespaceRegex = /^\S*$/ #don't match if contains whitespace
     if @type isnt "description"
       _.extend schema, 
         code:
           label: "Code"
           type: String
           optional: false
           regEx: noWhitespaceRegex
         optional:
           label: "Optional"
           type: Boolean
         label:
           label: if (@type is "table" or @type is 'table_polar') then "Title" else "Question"
           type: String
           optional: (@type is "table" or @type is 'table_polar')
           autoform:
             type: "textarea"
 
     _.extend schema, 
       type:
         label: "Type"
         type: String
         autoform:
           type: "select"
           options: ->
             [
               {label: "Text", value: "text"},
               {label: "Number", value: "number"},
               {label: "Boolean", value: "boolean"},
               {label: "Date", value: "date"},
               {label: "Date & Time", value: "dateTime"},
               {label: "Multiple Choice", value: "multipleChoice"},
               {label: "Table Multiple Choice", value: "table"},
               {label: "Table Polar", value: "table_polar"},
               {label: "Description (no question)", value: "description"},
             ]
       break:
         label: "insert pagebreak after this item"
         type: Boolean
 
     if @type is "multipleChoice" or @type is "table" or @type is "table_polar"
       _.extend schema, 
         mode:
           label: "Mode"
           type: String
           autoform:
             type: "select-radio-inline"
             options: [
               label: "single selection (radios)"
               value: "radio"
             ,
               label: "multiple selection (checkboxes)"
               value: "checkbox"
             ]
 
     if @type is "multipleChoice"
       _.extend schema, 
         orientation:
           label: "Orientation"
           type: String
           autoform:
             type: "select-radio-inline"
             options: [
               label: "inline"
               value: "inline"
             ,
               label: "vertical"
               value: "vertical"
             ]
 
     if @type is "description"
       _.extend schema, 
         label:
           label: "Text (markdown)"
           type: String
           autoform:
             type: "textarea"
             rows: 10
 
     if @type is "number"
       _.extend schema, 
         min:
           type: Number
           optional: true
           decimal: true
         max:
           type: Number
           optional: true
           decimal: true
         decimal:
           type: Boolean
 
     if @type is "multipleChoice" or @type is "table" or @type is "table_polar"
       _.extend schema, 
         choices:
           type: [Object]
           label: "Choices"
           minCount: 1
         'choices.$.label':
           type: String
           optional: true
         'choices.$.variable':
           type: String
           regEx: noWhitespaceRegex
+          custom: ->
+            console.log "> #{@value} #{@key} <"
+            console.log "----"
+            digitRegex = /(\d+)/g
+            matches = digitRegex.exec(@key)
+            if matches.length > 0
+              index = parseInt(matches[0])-1
+              while index >= 0
+                v = @field("choices.#{index}.variable").value
+                console.log v
+                if v.valueOf() is @value.valueOf()
+                  return "notUnique"
+                index -= 1
+            return
         'choices.$.value':
           type: String
           regEx: noWhitespaceRegex
 
     if @type is "table"
       _.extend schema, 
         subquestions:
           type: [Object]
           label: "Subquestions"
           minCount: 1
         'subquestions.$.label':
           type: String
           autoform:
             type: "textarea"
         'subquestions.$.code':
           type: String
           regEx: noWhitespaceRegex
+          custom: ->
+            digitRegex = /(\d+)/g
+            matches = digitRegex.exec(@key)
+            if matches.length > 0
+              index = parseInt(matches[0])-1
+              while index >= 0
+                v = @field("subquestions.#{index}.code").value
+                if v.valueOf() is @value.valueOf()
+                  return "notUnique"
+                index -= 1
+            return
 
     if @type is "table_polar"
       _.extend schema, 
         subquestions:
           type: [Object]
           label: "Subquestions"
           minCount: 1
         'subquestions.$.minLabel':
           label: "min label"
           type: String
         'subquestions.$.maxLabel':
           label: "max label"
           type: String
         'subquestions.$.code':
           type: String
           regEx: noWhitespaceRegex
+          custom: ->
+            digitRegex = /(\d+)/g
+            matches = digitRegex.exec(@key)
+            if matches.length > 0
+              index = parseInt(matches[0])-1
+              while index >= 0
+                v = @field("subquestions.#{index}.code").value
+                if v.valueOf() is @value.valueOf()
+                  return "notUnique"
+                index -= 1
+            return
 
 
     schema
     
 
 @Questions = new Meteor.Collection("questions",
   transform: (doc) ->
     new Question(doc)
 )
 
 Questions.before.insert BeforeInsertTimestampHook
 Questions.before.update BeforeUpdateTimestampHook
 
 #TODO check if allowed
 #TODO check consistency
 Questions.allow
   insert: (userId, doc) ->
     true
   update: (userId, doc, fieldNames, modifier) ->
     true
   remove: (userId, doc) ->
     true
 
 Meteor.methods
   insertQuestion: (question) ->
     check(question.questionnaireId, String)
     questionnaire = Questionnaires.findOne
       _id:  question.questionnaireId
 
     check(question.type, String)
     if question.type isnt 'table' and question.type isnt 'table_polar'
       check(question.label, String)
 
     numQuestions = Questions.find
       questionnaireId: questionnaire._id
     .count()
     nextIndex = numQuestions+1
     if (question.index? and question.index > nextIndex) or !question.index?
       question.index = nextIndex 
 
     #TODO filter question atters
     _id = Questions.insert question
     _id
 
   removeQuestion: (_id) ->
     check(_id, String)
     question = Questions.findOne _id
     questionnaire = Questionnaires.findOne
       _id:  question.questionnaireId
 
     Questions.remove _id
 
     Questions.update
       questionnaireId: questionnaire._id
       index: { $gt: question.index }
     ,
       $inc: { index: -1 }
     ,
       multi: true
 
 
   moveQuestion: (questionnaireId, oldIndex, newIndex) ->
     check(questionnaireId, String)
     check(oldIndex, Match.Integer)
     check(newIndex, Match.Integer)
 
     questionnaire = Questionnaires.findOne
       _id:  questionnaireId
 
     question = Questions.findOne
       questionnaireId: questionnaireId
       index: oldIndex
     throw new Meteor.Error(403, "question with index #{oldIndex} not found.") unless question?
 
     Questions.update
       questionnaireId: questionnaireId
       index: { $gt: oldIndex }
     ,
       $inc: { index: -1 }
     ,
       multi: true
     Questions.update
       questionnaireId: questionnaireId
       index: { $gte: newIndex }
     ,
       $inc: { index: 1 }
     ,
       multi: true
     Questions.update
       _id: question._id
     ,
       $set: { index: newIndex}
     null
diff --git a/app/lib/simple_schema.coffee b/app/lib/simple_schema.coffee
new file mode 100644
index 0000000..f3e3427
--- /dev/null
+++ b/app/lib/simple_schema.coffee
@@ -0,0 +1 @@
+SimpleSchema.messages({notUnique: "[label] must be unique"})