/**
  * return all styles from all elements
  */
 public function generate_element_css($demo = false)
 {
     $base = new Essential_Grid_Base();
     $allowed_wrap_styles = Essential_Grid_Item_Element::get_allowed_styles_for_wrap();
     $wait_for_styles = Essential_Grid_Item_Element::get_wait_until_output_styles();
     echo '<!-- ESSENTIAL GRID SKIN CSS -->' . "\n";
     if (!empty($this->layers_css)) {
         foreach ($this->layers_css as $layers_css) {
             if (!empty($layers_css['idle'])) {
                 echo '<style type="text/css">';
                 $css = '';
                 foreach ($layers_css['idle'] as $class => $settings) {
                     $wait = array();
                     $forbidden = array();
                     if (!empty($this->add_css_wrap) && isset($this->add_css_wrap[$class])) {
                         $forbidden = $allowed_wrap_styles;
                     }
                     //write hover only if no tag inside the text exists
                     $d_i = $layers_css['settings'][$class]['important'];
                     //add important or not
                     $position_found = false;
                     if (!empty($settings)) {
                         $settings = $this->clean_up_styles($settings);
                         $css .= '.' . $class . ' {' . "\n";
                         foreach ($settings as $style => $value) {
                             $jump_next = false;
                             foreach ($wait_for_styles as $k => $wf) {
                                 //check if we wait until end to write style, depending on what setting the other styles have
                                 if (in_array($style, $wf['wait'])) {
                                     $wait[$k][] = array($style, $value);
                                     $jump_next = true;
                                 }
                             }
                             if ($jump_next) {
                                 continue;
                             }
                             if (!in_array($style, $forbidden)) {
                                 $css .= '	' . $style . ': ' . stripslashes($value) . $d_i . ';' . "\n";
                             }
                             if ($style == 'position') {
                                 $position_found = true;
                             }
                         }
                         if (!$position_found) {
                             $css .= '	position: relative;' . "\n";
                         }
                         $css .= '	z-index: 2 !important;' . "\n";
                         if (!empty($this->add_css_wrap) && isset($this->add_css_wrap[$class]) && isset($this->add_css_wrap[$class]['a']) && $this->add_css_wrap[$class]['a']['display'] == true) {
                             $css .= '	display: block;' . "\n";
                         }
                         if (!empty($wait)) {
                             foreach ($wait as $wait_for => $wait_styles) {
                                 if (isset($settings[$wait_for])) {
                                     if (is_array($wait_for_styles[$wait_for]['not-if'])) {
                                         $do_continue = false;
                                         foreach ($wait_for_styles[$wait_for]['not-if'] as $wf) {
                                             if (strpos($settings[$wait_for], $wf) !== false) {
                                                 $do_continue = true;
                                                 break;
                                             }
                                         }
                                         if ($do_continue) {
                                             continue;
                                         }
                                     } else {
                                         if ($settings[$wait_for] === $wait_for_styles[$wait_for]['not-if']) {
                                             continue;
                                         }
                                     }
                                     foreach ($wait_styles as $ww) {
                                         if (!in_array($ww[0], $forbidden)) {
                                             $css .= '	' . $ww[0] . ': ' . stripslashes($ww[1]) . $d_i . ';' . "\n";
                                         }
                                     }
                                 }
                             }
                         }
                         $css .= '}' . "\n";
                     }
                 }
                 echo $base->compress_css($css);
                 echo '</style>' . "\n";
             }
             if (!empty($layers_css['hover'])) {
                 echo '<style type="text/css">';
                 $css = '';
                 foreach ($layers_css['hover'] as $class => $settings) {
                     if (!empty($this->add_css_tags) && isset($this->add_css_tags[$class])) {
                         continue;
                     }
                     //write hover only if no tag inside the text exists
                     $wait = array();
                     $d_i = $layers_css['settings'][$class]['important'];
                     //add important or not
                     if (!empty($settings)) {
                         $settings = $this->clean_up_styles($settings);
                         $css .= '.' . $class . ':hover {' . "\n";
                         foreach ($settings as $style => $value) {
                             $jump_next = false;
                             foreach ($wait_for_styles as $k => $wf) {
                                 //check if we wait until end to write style, depending on what setting the other styles have
                                 if (in_array($style, $wf['wait'])) {
                                     $wait[$k][] = array($style, $value);
                                     $jump_next = true;
                                 }
                             }
                             if ($jump_next) {
                                 continue;
                             }
                             $css .= '	' . $style . ': ' . stripslashes($value) . $d_i . ';' . "\n";
                         }
                         if (!empty($wait)) {
                             foreach ($wait as $wait_for => $wait_styles) {
                                 if (isset($settings[$wait_for]) && $settings[$wait_for] !== $wait_for_styles[$wait_for]['not-if']) {
                                     if (is_array($wait_for_styles[$wait_for]['not-if'])) {
                                         $do_continue = false;
                                         foreach ($wait_for_styles[$wait_for]['not-if'] as $wf) {
                                             if (strpos($settings[$wait_for], $wf) !== false) {
                                                 $do_continue = true;
                                                 break;
                                             }
                                         }
                                         if ($do_continue) {
                                             continue;
                                         }
                                     } else {
                                         if ($settings[$wait_for] === $wait_for_styles[$wait_for]['not-if']) {
                                             continue;
                                         }
                                     }
                                     foreach ($wait_styles as $ww) {
                                         $css .= '	' . $ww[0] . ': ' . stripslashes($ww[1]) . $d_i . ';' . "\n";
                                     }
                                 }
                             }
                         }
                         $css .= '}' . "\n";
                     }
                 }
                 echo $base->compress_css($css);
                 echo '</style>' . "\n";
             }
             //check for custom css on tags
             if (!empty($this->add_css_tags)) {
                 $allowed_styles = Essential_Grid_Item_Element::get_allowed_styles_for_tags();
                 foreach ($this->add_css_tags as $class => $tags) {
                     if (!empty($layers_css['idle'][$class])) {
                         // we write the idle styles
                         $d_i = $layers_css['settings'][$class]['important'];
                         //add important or not
                         foreach ($tags as $tag => $do) {
                             echo '<style type="text/css">';
                             $css = '';
                             $css .= '.' . $class . ' ' . $tag . ' {' . "\n";
                             $layers_css['idle'][$class] = $this->clean_up_styles($layers_css['idle'][$class]);
                             foreach ($layers_css['idle'][$class] as $style => $value) {
                                 if (in_array($style, $allowed_styles)) {
                                     $css .= '	' . $style . ': ' . stripslashes($value) . $d_i . ';' . "\n";
                                 }
                             }
                             $css .= '}' . "\n";
                             echo $base->compress_css($css);
                             echo '</style>' . "\n";
                         }
                     }
                     if (!empty($layers_css['hover'][$class])) {
                         // we write the hover styles
                         $d_i = $layers_css['settings'][$class]['important'];
                         //add important or not
                         foreach ($tags as $tag => $do) {
                             echo '<style type="text/css">';
                             $css = '';
                             $css .= '.' . $class . ' ' . $tag . ':hover {' . "\n";
                             $layers_css['hover'][$class] = $this->clean_up_styles($layers_css['hover'][$class]);
                             foreach ($layers_css['hover'][$class] as $style => $value) {
                                 if (in_array($style, $allowed_styles)) {
                                     $css .= '	' . $style . ': ' . stripslashes($value) . $d_i . ';' . "\n";
                                 }
                             }
                             $css .= '}' . "\n";
                             echo $base->compress_css($css);
                             echo '</style>' . "\n";
                         }
                     }
                 }
             }
             //check for custom css on wrappers for example
             if (!empty($this->add_css_wrap)) {
                 $allowed_cat_tag_styles = Essential_Grid_Item_Element::get_allowed_styles_for_cat_tag();
                 foreach ($this->add_css_wrap as $class => $tags) {
                     if (!empty($layers_css['idle'][$class])) {
                         // we write the idle styles
                         $d_i = $layers_css['settings'][$class]['important'];
                         //add important or not
                         foreach ($tags as $tag => $do) {
                             echo '<style type="text/css">';
                             $css = '';
                             $css .= '.' . $class . '-' . $tag . ' {' . "\n";
                             $position_found = false;
                             if (!empty($this->add_css_wrap) && isset($this->add_css_wrap[$class]) && isset($this->add_css_wrap[$class]['a']) && $this->add_css_wrap[$class]['a']['full'] == true) {
                                 // set more styles (used for cat & tag list)
                                 $allowed_styles = array_merge($allowed_cat_tag_styles, $allowed_wrap_styles);
                             } else {
                                 $allowed_styles = $allowed_wrap_styles;
                             }
                             $layers_css['idle'][$class] = $this->clean_up_styles($layers_css['idle'][$class]);
                             foreach ($layers_css['idle'][$class] as $style => $value) {
                                 if (in_array($style, $allowed_styles)) {
                                     $css .= '	' . $style . ': ' . stripslashes($value) . $d_i . ';' . "\n";
                                     if ($style == 'position') {
                                         $position_found = true;
                                     }
                                 }
                             }
                             if (!$position_found) {
                                 $css .= '	position: relative;' . "\n";
                             }
                             $css .= '}' . "\n";
                             echo $base->compress_css($css);
                             echo '</style>' . "\n";
                         }
                     }
                 }
             }
         }
     }
     if (!empty($this->media_css)) {
         foreach ($this->media_css as $skin_id => $media_css) {
             if (!empty($media_css)) {
                 echo '<style type="text/css">';
                 $css = '';
                 $handle = $this->loaded_skins[$skin_id]['handle'];
                 $css .= '.eg-' . esc_attr($handle) . '-wrapper .esg-entry-media-wrapper {' . "\n";
                 $media_css = $this->clean_up_styles($media_css);
                 foreach ($media_css as $style => $value) {
                     $css .= '	' . $style . ': ' . stripslashes($value) . ';' . "\n";
                     // !important;
                 }
                 $css .= '}' . "\n";
                 echo $base->compress_css($css);
                 echo '</style>' . "\n";
             }
         }
     }
     if (!empty($this->cover_css)) {
         foreach ($this->cover_css as $skin_id => $cover_css) {
             if (!empty($cover_css)) {
                 echo '<style type="text/css">';
                 $css = '';
                 $handle = $this->loaded_skins[$skin_id]['handle'];
                 $css .= '.eg-' . esc_attr($handle) . '-container {' . "\n";
                 $cover_css = $this->clean_up_styles($cover_css);
                 foreach ($cover_css as $style => $value) {
                     $css .= '	' . $style . ': ' . stripslashes($value) . ';' . "\n";
                     // !important;
                 }
                 $css .= '}' . "\n";
                 echo $base->compress_css($css);
                 echo '</style>' . "\n";
             }
         }
     }
     if (!empty($this->content_css)) {
         foreach ($this->content_css as $skin_id => $content_css) {
             if (!empty($content_css)) {
                 echo '<style type="text/css">';
                 $css = '';
                 $handle = $this->loaded_skins[$skin_id]['handle'];
                 $css .= '.eg-' . esc_attr($handle) . '-content {' . "\n";
                 $content_css = $this->clean_up_styles($content_css);
                 foreach ($content_css as $style => $value) {
                     $css .= '	' . $style . ': ' . stripslashes($value) . ';' . "\n";
                     // !important
                 }
                 $css .= '}' . "\n";
                 echo $base->compress_css($css);
                 echo '</style>' . "\n";
             }
         }
     }
     if (!empty($this->wrapper_css)) {
         foreach ($this->wrapper_css as $skin_id => $wrapper_css) {
             if (!empty($wrapper_css)) {
                 echo '<style type="text/css">';
                 $css = '';
                 $handle = $this->loaded_skins[$skin_id]['handle'];
                 $css .= '.esg-grid .mainul li.eg-' . esc_attr($handle) . '-wrapper {' . "\n";
                 $wrapper_css = $this->clean_up_styles($wrapper_css);
                 foreach ($wrapper_css as $style => $value) {
                     $css .= '	' . $style . ': ' . stripslashes($value) . ';' . "\n";
                     // !important
                     if ($style == 'overflow') {
                         $css .= '-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC) !important;' . "\n";
                     }
                 }
                 $css .= '}' . "\n";
                 echo $base->compress_css($css);
                 echo '</style>' . "\n";
             }
         }
     }
     echo '<!-- ESSENTIAL GRID END SKIN CSS -->' . "\n\n";
     //check if post has custom settings for all elements
     //if($demo == false)
     //	$this->output_element_css_by_meta();
 }