/*! gridster.js - v0.5.6 - 2014-09-25
* http://gridster.net/
* Copyright (c) 2014 ducksboard; Licensed MIT */

/* =============================================================================
   NORMALIZATION
========================================================================== */

/* *  {
  margin: 0;
  padding: 0;
} */

article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
[hidden] { display: none; }

ul, ol {
    list-style: none;
}

/* =============================================================================
   COMMONS
========================================================================== */

* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }

@font-face {
    font-family:'Glyphicons Halflings';
    src:url(../../fonts/glyphicons-halflings-regular.eot);
    src:url(../../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),
        url(../../fonts/glyphicons-halflings-regular.woff2) format('woff2'),
        url(../../fonts/glyphicons-halflings-regular.woff) format('woff'),
        url(../../fonts/glyphicons-halflings-regular.ttf) format('truetype'),
        url(../../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')
}

body {
    background-color: #ffffff;
    font-family: 'Helvetica Neue', Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    font-size: x-small;
    color: #666666;
}

.gridster {
    margin-top: 70px;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: auto;
    /*position:relative;*/
    padding: 10px;
    width: 99%;
}

.gridster > * {
    -webkit-transition: height .4s, width .4s;
    -moz-transition: height .4s, width .4s;
    -o-transition: height .4s, width .4s;
    -ms-transition: height .4s, width .4s;
    transition: height .4s, width .4s;
}

.gridster .gs-w {
    background: #FFF;
    cursor: pointer;
    //-webkit-box-shadow: 0 0 5px rgba(0,0,0,0.3);
    //box-shadow: 0 0 5px rgba(0,0,0,0.3);
    z-index: 2;
    position: absolute;
    min-width: 140px;
    min-height: 140px;
}

.ready .gs-w:not(.preview-holder) {
    -webkit-transition: opacity .3s, left .3s, top .3s;
    -moz-transition: opacity .3s, left .3s, top .3s;
    -o-transition: opacity .3s, left .3s, top .3s;
    transition: opacity .3s, left .3s, top .3s;
}

.ready .gs-w:not(.preview-holder),
.ready .resize-preview-holder {
    -webkit-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
    -moz-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
    -o-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
    transition: opacity .3s, left .3s, top .3s, width .3s, height .3s;
}

.gridster .preview-holder {
    z-index: 1;
    position: absolute;
    background-color: #ccc;
    border-color: #fff;
    opacity: 0.3;
}

.gridster .player-revert {
    z-index: 10!important;
    -webkit-transition: left .3s, top .3s!important;
    -moz-transition: left .3s, top .3s!important;
    -o-transition: left .3s, top .3s!important;
    transition:  left .3s, top .3s!important;
}

.gridster .dragging,
.gridster .resizing {
    z-index: 10!important;
    -webkit-transition: all 0s !important;
    -moz-transition: all 0s !important;
    -o-transition: all 0s !important;
    transition: all 0s !important; 
}


.gs-resize-handle {
    position: absolute;
    z-index: 1;
}

.gs-resize-handle-both {
    width: 20px;
    height: 20px;
    bottom: -8px;
    right: -8px;
    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg08IS0tIEdlbmVyYXRvcjogQWRvYmUgRmlyZXdvcmtzIENTNiwgRXhwb3J0IFNWRyBFeHRlbnNpb24gYnkgQWFyb24gQmVhbGwgKGh0dHA6Ly9maXJld29ya3MuYWJlYWxsLmNvbSkgLiBWZXJzaW9uOiAwLjYuMSAgLS0+DTwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DTxzdmcgaWQ9IlVudGl0bGVkLVBhZ2UlMjAxIiB2aWV3Qm94PSIwIDAgNiA2IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDAiIHZlcnNpb249IjEuMSINCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiDQl4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjZweCIgaGVpZ2h0PSI2cHgiDT4NCTxnIG9wYWNpdHk9IjAuMzAyIj4NCQk8cGF0aCBkPSJNIDYgNiBMIDAgNiBMIDAgNC4yIEwgNCA0LjIgTCA0LjIgNC4yIEwgNC4yIDAgTCA2IDAgTCA2IDYgTCA2IDYgWiIgZmlsbD0iIzAwMDAwMCIvPg0JPC9nPg08L3N2Zz4=');
    background-position: top left;
    background-repeat: no-repeat;
    cursor: se-resize;
    z-index: 20;
}

.gs-resize-handle-x {
    top: 0;
    bottom: 13px;
    right: -5px;
    width: 10px;
    cursor: e-resize;
}

.gs-resize-handle-y {
    left: 0;
    right: 13px;
    bottom: -5px;
    height: 10px;
    cursor: s-resize;
}

.gs-w:hover {
    -webkit-box-shadow: 3px 3px 5px rgba(0,0,0,0.3);
    box-shadow: 3px 3px 5px rgba(0,0,0,0.3);    
    z-index: 10;
}

.gs-w:hover .gs-resize-handle,
.resizing .gs-resize-handle {
    opacity: 1;
}

.gs-resize-handle,
.gs-w.dragging .gs-resize-handle {
    opacity: 0;
}

.gs-resize-disabled .gs-resize-handle {
    display: none!important;
}

[data-max-sizex="1"] .gs-resize-handle-x,
[data-max-sizey="1"] .gs-resize-handle-y,
[data-max-sizey="1"][data-max-sizex="1"] .gs-resize-handle {
    display: none !important;
}

/* Uncomment this if you set helper : "clone" in draggable options */
/*.gridster .player {
  opacity:0;
}
*/

.gridster .player {
    -webkit-box-shadow: 3px 3px 5px rgba(0,0,0,0.3);
    box-shadow: 3px 3px 5px rgba(0,0,0,0.3);
}

.gs-w:hover .gs-header {
    opacity: .3;
    //filter: blur(5px);
}

.gs-header {
    color: #555555;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 30px;
    background-color: #eeeeee;
    opacity: 0;
    z-index: 20;
}

.gs-icon {
    display:inline-block;
    font-family:'Glyphicons Halflings';
    font-style:normal;
    font-weight:400;
    font-size: 18px;
    line-height:30px;
    -webkit-font-smoothing:antialiased;
    -moz-osx-font-smoothing:grayscale;
    padding-left: 2px;
    padding-right: 2px;
}

.gs-close-handle:before {
    content:"\e014"
}

.gs-close-handle {
    position: absolute;
    left: 0;
    width: 24px;
    height: 30px;
}

.gs-zoom-handle:before {
    content:"\e164"
}

.gs-zoom-handle {
    position: absolute;
    right: 0;
    width: 24px;
    height: 30px;
}


.overlay_fix {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 100000;
    opacity: 0;
    display: none;
}

.wrapper {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  width: 100%;
  height: 100%;
}

li iframe {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  width: 100%;
  height: 100%;
  border: 0px;
  overflow: hidden;
}

.tt-dropdown-menu {
  width: 355px;
  margin-top: 0px;
  background-color: #fff;
  height: 100%;
}

.typeahead {
  height: 60px;
}

.tt-dataset-widgets {
  width: 355px;
  margin-top: 0px;
  background-color: #fff;
  height: 100%;
}

.tt-input {
  position: absolute;
  top: 0px;
  width: 240px;
  height: 38px; 
  padding: 11px 12px;
  border: 2px solid #ccc;
  outline: none;
}

.tt-hint {
  position: absolute;
  top: 0px;
  width: 240px;
  height: 60px; 
  padding: 0px 12px;
  border: 2px solid #ccc;
  outline: none;
}

.tt-suggestions {
  width: 100%;
  height: 100%;
  background-color: #496274;
  display: block;
}

.tt-suggestion {
  clear: both;
  display: block;
  box-shadow: inset 0 1px #c6d0da;
  font-size: 18px;
  font-weight: bold;
  height: 60px;
  color: #fff;
  background-color: #496274;
  overflow: hidden;
  cursor: pointer;
}

.tt-suggestion > p {
  margin: 0px;
  padding: 0px 60px;
}

.tt-suggestion > p:hover,
.tt-suggestion > p:focus {
}

.tt-suggestion.tt-cursor {
  color: #496274;
  background-color: white;
}

.input-group span.twitter-typeahead {
  display: block !important;
}

.input-group span.twitter-typeahead .tt-dropdown-menu {
  top: 32px !important;
}

.input-group.input-group-lg span.twitter-typeahead .tt-dropdown-menu {
  top: 44px !important;
}

.input-group.input-group-sm span.twitter-typeahead .tt-dropdown-menu {
  top: 28px !important;
}

#the-basics {
  text-align: center;
}
