/**
 * CONTENTS
 *
 * #Introduction........Naming conventions used throughout the code.
 *
 * #SETTINGS
 * Variables............Globally-available variables and config.
 *
 * #TOOLS
 * Mixins...............Useful mixins.
 *
 * #GENERIC
 * Demo styles..........Styles for demo only (consider removing these).
 *
 * #BASE
 * Raw styles...........The very basic component wrapper.
 * Modifiers............The basic styles dependant on component placement.
 * Debuggers............The basic styles dependant on component placement.
 *
 * #BUTTONS
 * Base..................Wrapping and constraining every button.
 * Modifiers.............Styles that depends on state and settings.
 * Animations............Main animations of the component.
 * Debuggers.............Styles for development.
 *
 * #LABELS
 * Base..................Wrapping and constraining every label.
 * Modifiers.............Styles that depends on state and settings.
 * Debuggers.............Styles for development.
 *
 * #DEVELOPMENT
 * In development........These styles are in development and not yet finalised
 * Debuggers.............Helper styles and flags for development.
 */

/*------------------------------------*\
    #Introduction
\*------------------------------------*/
/**
 * The code AND the comments use naming conventions to refer to each part of
 * the UI put in place by this component. If you see that somewhere they are
 * not followed please consider a Pull Request. The naming conventions are:
 *
 * "Component" : the widget itself as a whole. This is the last time it will be
 *               called anything different than "component". So, stay away from
 *               "widget", "button" or anything else when referring to the
 *               Component in general.
 *
 * "Main Button" : the button that is always in view. Hovering or clicking on it
 *                 will reveal the child buttons.
 *
 * "Child buttons" : if you've read the previous point you know what they are.
 *                   Did you read the previous point? :)
 *
 * "Label(s)" : the tooltip that fades in when hovering over a button.

/*------------------------------------*\
    #SETTINGS | Variables
\*------------------------------------*/

/**
 * These variables are the default styles that serve as fallback and can be
 * easily customised at compile time.
 * Consider overriding them in your own style sheets rather than editing them
 * here. Refer to the docs for more info.
 */

/* COLORS ----------------------------*/

// the main/primary color
$main-color: #E40A5D !default;
// button colors
$button-text-color: #f1f1f1 !default;
$button-box-shadow: 0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.28) !default;
// labels colors
$label-text-color: rgba(255, 255, 255, 0.8) !default;
// labels background
$label-background-color: rgba(0,0,0, .4);
/* EFFECTS ---------------------------*/

// which effects must be made available in the css
$effects-zoomin: true !default;
$effects-slidein: true !default;
$effects-fountain: true !default;

/* SPEEDS ----------------------------*/

// the speed of the inflation of each button after hovering on the main button
$delay-staggering-inflate: 0.1s !default;
// when hovering on the main button the child buttons slide into view
$slide-speed: .5s !default;
// the labels disappear at this speed on mouse out
$label-hover-off: .5s !default;
// the labels appear at this speed on mouse over
$label-hover-on: .3s !default;

/* SIZES -----------------------------*/

// main button diameter
$main-button-size: 56px !default;
// main button diameter
$child_button_size: 56px !default;
// the distance of the main button from the closest corners of the screen
$border-distance: 25px !default;
// font-size for the icons
$icons-font-size: 18px !default;
// font-size for labels
$labels-font-size: 14px !default;
// font-weight for labels
$labels-font-weight: normal !default;
// top & bottom padding for the labels
$labels-padding-vertical: 4px !default;
// left & right padding for the labels
$labels-padding-horizontal: 10px !default;

/* SPACING ---------------------------*/

// space between buttons
$button-space: 70px !default;
// space between button and label
$button-label-space: 70px !default;

/* OTHER VARIABLES -------------------*/

// how many child buttons does the component have
$number-of-child-buttons: 4 !default;

/*------------------------------------*\
    #BASE | Raw styles
\*------------------------------------*/

/**
 * The very core styling of the button.
 * These styles are shared by every instance of the button.
 * Styles placed here should NOT care about placement in the screen,
 * options chosen by the user or state of the button.
 */

%mfb-component{
  box-sizing: border-box; // A better box-sizing
  margin: $border-distance;
  position: fixed;
  white-space: nowrap;
  z-index: 1040;
  // this padding is really needed  only if the element is an <ul>
  // otherwise it can probably be ditched.
  padding-left: 0;
  list-style: none;

  // make sure that everything inside this component
  // inherits the same box-sizing
  *, *:before, *:after {
    box-sizing: inherit;
  }
}


/*------------------------------------*\
    #BASE | Modifiers
\*------------------------------------*/
/**
 * These styles depends on the placement of the button.
 * Styles can be:
 * 1. Top-left:  modified by the " --tl " suffix.
 * 2. Top-right: modified by the " --tr " suffix.
 * 3. Bottom-left:  modified by the " --bl " suffix.
 * 4. Bottom-right: modified by the " --br " suffix.
 */

.mfb-component--tl{
  @extend %mfb-component;
  left: 0; top: 0;
}
.mfb-component--tr{
  @extend %mfb-component;
  right: 0; top: 0;
}
.mfb-component--bl{
  @extend %mfb-component;
  left: 0; bottom: 0;
}
.mfb-component--br{
  @extend %mfb-component;
  right: 0; bottom: 0;
}


/*------------------------------------*\
    #BUTTONS | Base
\*------------------------------------*/

%mfb-component__button{
  background-color: $main-color;
  display: inline-block;
  position: relative;
  border: none;
  border-radius: 50%;
  box-shadow: $button-box-shadow;
  cursor: pointer;
  outline: none;
  padding: 0;
  position: relative;
  -webkit-user-drag: none;
  color: $button-text-color;
}

/**
 * This is the unordered list for the list items that contain
 * the child buttons.
 *
 */
.mfb-component__list{
  list-style: none;
  margin: 0;
  padding: 0;
  &>li{
    display: block;
    position: absolute;
    top: 0;
    right: ($main-button-size - $child_button_size + 2) / 2;
    padding: 10px + ($main-button-size - $child_button_size) / 2 0;
    margin: -(10px + ($main-button-size - $child_button_size) / 2) 0;
  }
}

/**
 * These are the basic styles for all the icons inside the main button
 */
.mfb-component__icon{
  position: absolute;
  font-size: $icons-font-size;
  text-align: center;
  line-height: $main-button-size;
  width: 100%;
}

.mfb-component__wrap{
  // this double declaration adds some padding to the main button
  // to expand the area that triggers the hover state. The equal, negative
  // margin evens out the distance form the borders so that the button
  // does not shift out of position.
  padding: $border-distance;
  margin: -$border-distance;
}

[data-mfb-toggle="hover"]:hover,
[data-mfb-state="open"]{
  .mfb-component__icon {
    -webkit-transform: scale(1) rotate(0deg);
    transform: scale(1) rotate(0deg);
  }
}


/*------------------------------------*\
    #BUTTONS | Modifiers
\*------------------------------------*/

.mfb-component__button--main{
  @extend %mfb-component__button;
  height: $main-button-size;
  width: $main-button-size;
  z-index: 20;
}
.mfb-component__button--child{
  @extend %mfb-component__button;
  height: $child_button_size;
  width: $child_button_size;
}
// the icons for the main button
.mfb-component__main-icon--active,
.mfb-component__main-icon--resting{
  @extend .mfb-component__icon;
  -webkit-transform: scale(1) rotate(360deg);
          transform: scale(1) rotate(360deg);
  -webkit-transition: -webkit-transform 150ms cubic-bezier(.4,0,1,1);
          transition: transform 150ms cubic-bezier(.4,0,1,1);
}
// the icons for the main button
.mfb-component__child-icon,
.mfb-component__child-icon{
  @extend .mfb-component__icon;
  line-height: $child_button_size;
  font-size: 18 / 56 * $child_button_size;
}
.mfb-component__main-icon--active{
  opacity: 0;
}
[data-mfb-toggle="hover"]:hover,
[data-mfb-state="open"]{
  .mfb-component__main-icon{
    -webkit-transform: scale(1) rotate(0deg);
    transform: scale(1) rotate(0deg);
  }
  .mfb-component__main-icon--resting{
    opacity: 0;
    // don't remove this, needed for ng-mfb downstream repo!
    position: absolute !important;
  }
  .mfb-component__main-icon--active{
    opacity: 1;
  }
}

/*------------------------------------*\
    #BUTTONS | Animations
\*------------------------------------*/

@import "_/_slidein";
@import "_/_slidein-spring";
@import "_/_zoomin";
@import "_/_fountain";

// Ugly work-around for this https://github.com/sass/sass/issues/451
@if $effects-slidein == true {
  @include effects-slidein;
}
@if $effects-slidein == true {
  @include effects-slidein-spring;
}
@if $effects-zoomin == true {
  @include effects-zoomin;
}
@if $effects-fountain == true {
  @include effects-fountain;
}

/*------------------------------------*\
    #LABELS | base
\*------------------------------------*/

/**
 * These are the labels associated to each button,
 * exposed only when hovering the related button.
 * They are called labels but are in fact data-attributes of
 * each button (an anchor tag).
 */

[data-mfb-label]:after {
  content: attr(data-mfb-label);
  opacity: 0;
  transition: all $label-hover-off;
  background: $label-background-color;
  padding: $labels-padding-vertical $labels-padding-horizontal;
  border-radius: 3px;
  color: $label-text-color;
  font-size: $labels-font-size;
  font-weight: $labels-font-weight;
  pointer-events: none;
  line-height: normal;
  position: absolute;
  top: 50%;
  margin-top: - ($labels-padding-vertical + $labels-font-size / 2);
  transition: all $label-hover-off; // the label disappears at this speed
}
[data-mfb-toggle="hover"] [data-mfb-label]:hover:after,
[data-mfb-state="open"] [data-mfb-label]:after{
  content: attr(data-mfb-label);
  opacity: 1;
  transition: all $label-hover-on; // the label appears at this speed
}
/*------------------------------------*\
    #LABELS | Modifiers
\*------------------------------------*/
.mfb-component--br, .mfb-component--tr{
  [data-mfb-label]:after {
    content: attr(data-mfb-label);
    right: $button-label-space;
  }
}
.mfb-component--br .mfb-component__list, .mfb-component--tr .mfb-component__list {
  [data-mfb-label]:after {
    content: attr(data-mfb-label);
    right: $button-label-space - ($main-button-size - $child_button_size) / 2;
  }
}
.mfb-component--tl, .mfb-component--bl{
  [data-mfb-label]:after {
    content: attr(data-mfb-label);
    left: $button-label-space;
  }
}
.mfb-component--tl .mfb-component__list, .mfb-component--bl .mfb-component__list{
  [data-mfb-label]:after {
    content: attr(data-mfb-label);
    left: $button-label-space - ($main-button-size - $child_button_size) / 2;
  }
}
/*------------------------------------*\
    #DEVELOPMENT | In development
\*------------------------------------*/
/**
 * This part is where unfinished code should stay.
 * When a feature is ready(sh) move these styles to their proper place.
 */



/*------------------------------------*\
    #DEVELOPMENT | Debuggers
\*------------------------------------*/

/**
 * These are mainly helpers for development. They do not have to end up
 * in production but it's handy to keep them when developing.
 */


/**
 * Apply this class to the html tag when developing the slide-in button
 */
