Page Builder by SiteOrigin - Version 2.6.5

Version Description

  • 23 April 2018 =
  • Don't use mime_content_type for external layouts if it's not available. Just check file extensions.
  • Get correct ID for WooCommerce shop page to allow PB to render correctly.
  • Added image fallback url field for background images in row, cell and widget styles.
  • Temporarily remove Jetpack widgets requiring scripts for admin form, until we can reliably enqueue their scripts.
  • Remove loading indicator and display message when loading widget and style forms fail.
  • Allow setting margins around specific widgets.
Download this release

Release Info

Developer gpriday
Plugin Icon 128x128 Page Builder by SiteOrigin
Version 2.6.5
Comparing to
See all releases

Code changes from version 2.6.4 to 2.6.5

css/admin.css CHANGED
@@ -1598,6 +1598,7 @@
1598
  }
1599
  .so-panels-dialog .so-visual-styles {
1600
  margin: -15px;
 
1601
  /* All the field types */
1602
  }
1603
  .so-panels-dialog .so-visual-styles h3 {
@@ -1757,8 +1758,11 @@
1757
  color: #666;
1758
  text-decoration: none;
1759
  }
1760
- .so-panels-dialog .so-visual-styles .style-field-image .remove-image .remove-image {
1761
- color: #333;
 
 
 
1762
  }
1763
  .so-panels-dialog .so-visual-styles .style-field-checkbox label {
1764
  -webkit-user-select: none;
1598
  }
1599
  .so-panels-dialog .so-visual-styles {
1600
  margin: -15px;
1601
+ height: 100%;
1602
  /* All the field types */
1603
  }
1604
  .so-panels-dialog .so-visual-styles h3 {
1758
  color: #666;
1759
  text-decoration: none;
1760
  }
1761
+ .so-panels-dialog .so-visual-styles .style-field-image .remove-image.hidden {
1762
+ display: none;
1763
+ }
1764
+ .so-panels-dialog .so-visual-styles .style-field-image .image-fallback {
1765
+ margin-top: 4px;
1766
  }
1767
  .so-panels-dialog .so-visual-styles .style-field-checkbox label {
1768
  -webkit-user-select: none;
css/admin.min.css CHANGED
@@ -1 +1 @@
1
- @font-face{font-family:siteorigin-panels-icons;src:url(icons/panels-icons.eot);src:url(icons/panels-icons.eot) format("embedded-opentype"),url(icons/panels-icons.woff) format("woff"),url(icons/panels-icons.ttf) format("truetype"),url(icons/panels-icons.svg) format("svg");font-weight:400;font-style:normal}#so-panels-panels.attached-to-editor{margin-top:20px}#so-panels-panels.attached-to-editor .handlediv,#so-panels-panels.attached-to-editor .hndle{display:none!important}#so-panels-panels.attached-to-editor .inside{margin:0!important;padding:0!important}#so-panels-panels.attached-to-editor .so-toolbar .so-switch-to-standard{display:block}.siteorigin-panels-builder{position:relative}.siteorigin-panels-builder .so-tool-button{padding:6px 7px;text-decoration:none;line-height:1em;float:left;margin-right:2px;display:block;visibility:visible;position:relative;cursor:pointer;border:1px solid #bebebe;background:#eee;background:-o-linear-gradient(#f9f9f9,#eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f9f9f9",endColorstr="#eeeeee",GradientType=0);box-shadow:0 1px 1px rgba(0,0,0,.04),inset 0 1px 0 hsla(0,0%,100%,.5);outline:none;border-radius:2px}.siteorigin-panels-builder .so-tool-button .so-panels-icon{font-size:12px}.siteorigin-panels-builder .so-tool-button span{display:inline-block;color:#666;text-shadow:0 1px 0 #fff;min-width:10px;text-align:center}.siteorigin-panels-builder .so-tool-button:hover{background:#fff}.siteorigin-panels-builder .so-tool-button:hover span{color:#444}.siteorigin-panels-builder .so-builder-toolbar{-ms-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #d0d0d0;background:#f5f5f5;line-height:1em;z-index:101;white-space:nowrap;overflow-x:hidden;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.04);top:0;left:0;width:100%;padding:6px 9px;margin-top:0!important;zoom:1}.siteorigin-panels-builder .so-builder-toolbar:before{content:"";display:block}.siteorigin-panels-builder .so-builder-toolbar:after{content:"";display:table;clear:both}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button{display:inline-block;color:#666;padding:2px 10px 2px 8px}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button .so-button-text{margin:3px 0 2px;font-size:11px}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button .so-panels-icon{float:left;margin:3px 7px 2px 0;font-size:14px;color:#747474}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button:hover,.siteorigin-panels-builder .so-builder-toolbar .so-tool-button:hover .so-panels-icon{color:#444}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button.so-learn{background:#e5e5e5;background:-o-linear-gradient(#f6f6f6,#e5e5e5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f6f6f6",endColorstr="#e5e5e5",GradientType=0)}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button.so-learn:hover{background:#fff}.siteorigin-panels-builder .so-builder-toolbar .so-switch-to-standard{cursor:pointer;float:right;display:none;text-decoration:none;color:#666;padding:5px 6px;border-radius:2px;border:1px solid transparent;font-size:11px}.siteorigin-panels-builder .so-builder-toolbar .so-switch-to-standard:hover{background:#fafafa;border:1px solid #999;color:#444}.siteorigin-panels-builder .so-rows-container{padding:20px 15px 0}.siteorigin-panels-builder .so-rows-container .so-row-color-1.so-row-color{background-color:#cde2ec;border:1px solid #a4cadd}.siteorigin-panels-builder .so-rows-container .so-row-color-1.so-row-color.so-row-color-selected:before{background:#a8cdde}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell .cell-wrapper{background-color:#cde2ec}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell.cell-selected .cell-wrapper{background-color:#99c4d8}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell .resize-handle{background-color:#e7f1f6}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell .resize-handle:hover{background-color:#dcebf2}.siteorigin-panels-builder .so-rows-container .so-row-color-2.so-row-color{background-color:#f2c2be;border:1px solid #e9968f}.siteorigin-panels-builder .so-rows-container .so-row-color-2.so-row-color.so-row-color-selected:before{background:#ea9a93}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell .cell-wrapper{background-color:#f2c2be}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell.cell-selected .cell-wrapper{background-color:#e68a83}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell .resize-handle{background-color:#f8dedc}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell .resize-handle:hover{background-color:#f5d2cf}.siteorigin-panels-builder .so-rows-container .so-row-color-3.so-row-color{background-color:#d5ccdf;border:1px solid #b9aac9}.siteorigin-panels-builder .so-rows-container .so-row-color-3.so-row-color.so-row-color-selected:before{background:#bbadcb}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell .cell-wrapper{background-color:#d5ccdf}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell.cell-selected .cell-wrapper{background-color:#b1a0c3}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell .resize-handle{background-color:#e7e2ed}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell .resize-handle:hover{background-color:#dfd9e7}.siteorigin-panels-builder .so-rows-container .so-row-color-4.so-row-color{background-color:#cae7cd;border:1px solid #a3d6a9}.siteorigin-panels-builder .so-rows-container .so-row-color-4.so-row-color.so-row-color-selected:before{background:#a7d7ac}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell .cell-wrapper{background-color:#cae7cd}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell.cell-selected .cell-wrapper{background-color:#99d19f}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell .resize-handle{background-color:#e3f2e4}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell .resize-handle:hover{background-color:#d8edda}.siteorigin-panels-builder .so-rows-container .so-row-color-5.so-row-color{background-color:#e2dcb1;border:1px solid #d3ca88}.siteorigin-panels-builder .so-rows-container .so-row-color-5.so-row-color.so-row-color-selected:before{background:#d4cb8c}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell .cell-wrapper{background-color:#e2dcb1}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell.cell-selected .cell-wrapper{background-color:#cfc57d}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell .resize-handle{background-color:#ece8cb}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell .resize-handle:hover{background-color:#e8e3c0}.siteorigin-panels-builder .so-rows-container h3.so-row-label{display:inline-block;font-size:1em;font-weight:500;color:#474747;margin:0 0 0 4px;line-height:22px;float:left}.siteorigin-panels-builder .so-rows-container .so-row-toolbar{zoom:1;margin-bottom:4px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar:before{content:"";display:block}.siteorigin-panels-builder .so-rows-container .so-row-toolbar:after{content:"";display:table;clear:both}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button{-ms-box-sizing:border-box;box-sizing:border-box;padding:4px;float:right}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button .so-panels-icon{color:#777;font-size:11px;width:11px;height:11px;display:block}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button:hover .so-panels-icon{color:#555}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button.so-row-move{cursor:move}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper{visibility:hidden;opacity:0;transition:visibility 0s linear 75ms,opacity 75ms linear;z-index:101;right:-10px;top:100%;width:125px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li a.so-row-delete{color:#a00}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li a.so-row-delete:hover{color:#fff;background:#a00}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li.so-row-colors-container{display:flex;justify-content:space-around;padding:5px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li.so-row-colors-container .so-row-color{display:inline-block;cursor:pointer;position:relative;text-align:center;width:14px;height:14px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li.so-row-colors-container .so-row-color.so-row-color-selected:before{content:"";display:block;position:absolute;top:2px;bottom:2px;left:2px;right:2px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper:hover .so-dropdown-links-wrapper{visibility:visible;opacity:1;transition-delay:0s}.siteorigin-panels-builder .so-rows-container .ui-sortable-placeholder{visibility:visible!important;background:#f7f7f7;-ms-box-sizing:border-box;box-sizing:border-box}.siteorigin-panels-builder .so-rows-container .so-row-container{margin-bottom:15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.siteorigin-panels-builder .so-rows-container .so-row-container.ui-sortable-helper{opacity:.9}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells{zoom:1;margin:0 -5px;position:relative}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells:before{content:"";display:block}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells:after{content:"";display:table;clear:both}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .ui-resizable-handle.ui-resizable-w{width:10px;left:-11px;cursor:col-resize;background:rgba(0,150,211,.25);transition:background .25s ease-in-out}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .ui-resizable-handle.ui-resizable-w:hover{background:rgba(0,150,211,.1)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell{-ms-box-sizing:border-box;box-sizing:border-box;float:left;position:relative;padding:0 5px}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell.so-first{margin-left:0}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell.so-last{margin-right:0}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .cell-wrapper{background:#e4eff4;padding:7px 7px 0;height:100%;min-height:63px;transition:background .25s ease-in-out 0s}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell.cell-selected .cell-wrapper{background-size:3px 3px}}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .cell-wrapper{-ms-box-sizing:border-box;box-sizing:border-box}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget{cursor:move;margin-bottom:7px;background:#f9f9fb;border:1px solid hsla(0,0%,100%,.75);max-height:49px;box-shadow:0 1px 1px rgba(0,0,0,.075);-ms-box-sizing:border-box;box-sizing:border-box}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-no-move{cursor:auto}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget:hover{border:1px solid hsla(0,0%,100%,.55);background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .so-widget-wrapper{padding:7px 8px;overflow:hidden;position:relative}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget h4{display:block;cursor:pointer;margin:0 15px 3px 0;font-weight:600;line-height:1.25em;color:#474747;text-shadow:0 1px 0 #fff;white-space:nowrap}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget h4 span{font-weight:400;display:inline-block;color:#999;text-shadow:0 1px 0 #fff;margin-left:12px;margin-right:5px;font-style:italic}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-no-edit h4{cursor:auto}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions{font-size:12px;position:absolute;top:5px;right:7px;cursor:pointer;padding:2px 2px 2px 15px;z-index:10}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions:hover{background:#feffff}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions:hover a{opacity:1}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions a{display:none;margin-right:3px;text-decoration:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions a.widget-delete{color:red}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions a.widget-delete:hover{color:#fff;background:red}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget:hover .title a{display:inline-block;opacity:.5}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.panel-being-dragged .title .actions{display:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget small{display:block;height:16px;overflow:hidden;color:#777}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .form{display:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only:hover{background:#f5f5f5;border:1px solid #a6bac1;box-shadow:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only:hover h4,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only:hover small,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only h4,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only small{opacity:.5}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered{background:#3a7096;border:1px solid #39618c;box-shadow:0 2px 2px rgba(0,0,0,.1)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered h4,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered small,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered span{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.85)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered small{color:#eee}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget-sortable-highlight{border:1px solid rgba(0,0,0,.075);background:rgba(0,0,0,.025);-ms-box-sizing:border-box;box-sizing:border-box;height:49px;margin-bottom:7px;position:relative;box-shadow:inset 2px 2px 2px rgba(0,0,0,.01)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .resize-handle{z-index:100;position:absolute;top:0;width:10px;left:-5px;cursor:col-resize;background:#f6fafb;height:100%;transition:background .25s ease-in-out 0s}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell:first-child .resize-handle{display:none}.siteorigin-panels-builder .so-panels-welcome-message{text-align:center;padding:0 15px 20px;color:#555;line-height:1.8em}.siteorigin-panels-builder .so-panels-welcome-message .so-message-wrapper{padding:15px 10px;background:#f8f8f8;border:1px solid #e0e0e0}.siteorigin-panels-builder .so-panels-welcome-message .so-tool-button{font-size:inherit;display:inline-block;float:none;color:#666;padding:5px 10px;margin:0 3px}.siteorigin-panels-builder .so-panels-welcome-message .so-tool-button .so-panels-icon{color:#777;font-size:.8em}.siteorigin-panels-builder .so-panels-welcome-message .so-tip-wrapper{margin-top:15px;font-size:.95em}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar{padding:10px}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button{padding-right:2px}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button .so-panels-icon{font-size:14px}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button.so-learn,.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button span.so-button-text{display:none}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar .so-switch-to-standard,.siteorigin-panels-builder.so-display-narrow .widgets-container .so-widget .actions{display:none!important}.so-widget.ui-sortable-helper.widget-being-dragged{z-index:500002!important;opacity:.9;pointer-events:none;border:1px solid rgba(0,0,0,.35)!important;cursor:move;margin-bottom:7px;background:#f9f9fb;border:1px solid hsla(0,0%,100%,.75);max-height:49px;box-shadow:0 1px 1px rgba(0,0,0,.075);-ms-box-sizing:border-box;box-sizing:border-box}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-no-move{cursor:auto}.so-widget.ui-sortable-helper.widget-being-dragged:hover{border:1px solid hsla(0,0%,100%,.55);background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1)}.so-widget.ui-sortable-helper.widget-being-dragged .so-widget-wrapper{padding:7px 8px;overflow:hidden;position:relative}.so-widget.ui-sortable-helper.widget-being-dragged h4{display:block;cursor:pointer;margin:0 15px 3px 0;font-weight:600;line-height:1.25em;color:#474747;text-shadow:0 1px 0 #fff;white-space:nowrap}.so-widget.ui-sortable-helper.widget-being-dragged h4 span{font-weight:400;display:inline-block;color:#999;text-shadow:0 1px 0 #fff;margin-left:12px;margin-right:5px;font-style:italic}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-no-edit h4{cursor:auto}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions{font-size:12px;position:absolute;top:5px;right:7px;cursor:pointer;padding:2px 2px 2px 15px;z-index:10}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions:hover{background:#feffff}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions:hover a{opacity:1}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions a{display:none;margin-right:3px;text-decoration:none}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions a.widget-delete{color:red}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions a.widget-delete:hover{color:#fff;background:red}.so-widget.ui-sortable-helper.widget-being-dragged:hover .title a{display:inline-block;opacity:.5}.so-widget.ui-sortable-helper.widget-being-dragged.panel-being-dragged .title .actions{display:none}.so-widget.ui-sortable-helper.widget-being-dragged small{display:block;height:16px;overflow:hidden;color:#777}.so-widget.ui-sortable-helper.widget-being-dragged .form{display:none}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only:hover{background:#f5f5f5;border:1px solid #a6bac1;box-shadow:none}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only:hover h4,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only:hover small,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only h4,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only small{opacity:.5}.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered{background:#3a7096;border:1px solid #39618c;box-shadow:0 2px 2px rgba(0,0,0,.1)}.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered h4,.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered small,.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered span{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.85)}.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered small{color:#eee}.widgets-holder-wrap .widget-inside .siteorigin-panels-builder .so-builder-container{padding-top:0}.widgets-holder-wrap .widget-inside .siteorigin-panels-builder .so-rows-container{padding:10px 0 0}.widgets-holder-wrap .widget-inside .siteorigin-panels-builder .so-builder-toolbar{padding-left:15px;padding-right:15px;margin:0 -15px}.so-panels-dialog .so-content,.so-panels-dialog .so-left-sidebar,.so-panels-dialog .so-overlay,.so-panels-dialog .so-right-sidebar,.so-panels-dialog .so-title-bar,.so-panels-dialog .so-toolbar{z-index:100001;position:fixed;-ms-box-sizing:border-box;box-sizing:border-box;padding:15px}.so-panels-dialog .so-content,.so-panels-dialog .so-left-sidebar,.so-panels-dialog .so-right-sidebar{overflow-y:auto}.so-panels-dialog .so-overlay{top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.so-panels-dialog .so-content{top:80px;left:30px;right:30px;bottom:88px;background-color:#fdfdfd;overflow-x:hidden;box-shadow:inset 0 2px 2px rgba(0,0,0,.03)}.so-panels-dialog .so-content>:first-child{margin-top:0}.so-panels-dialog .so-content>:last-child{margin-bottom:0}.so-panels-dialog .so-content .so-content-tabs>*{display:none}.so-panels-dialog .so-title-bar{left:30px;right:30px;top:30px;height:50px;background-color:#fafafa;border-bottom:1px solid #d8d8d8}.so-panels-dialog .so-title-bar h3.so-title{-ms-box-sizing:border-box;box-sizing:border-box;margin:-3px 150px 0 -3px;padding:5px 6px;display:block}.so-panels-dialog .so-title-bar h3.so-title.so-title-editable:focus,.so-panels-dialog .so-title-bar h3.so-title.so-title-editable:hover{outline:none;background-color:#f0f0f0}.so-panels-dialog .so-title-bar h3.so-title.so-title-editable:focus{margin-top:-4px;margin-left:-4px;border:1px solid #e4e4e4}.so-panels-dialog .so-title-bar input[type=text].so-edit-title{margin-top:-3px;margin-left:-3px;display:none;color:#23282d;font-size:1.3em;font-weight:600;border:none;box-shadow:none;background-color:#f0f0f0;padding:4px 5px}.so-panels-dialog .so-title-bar h3.so-parent-link{cursor:pointer;position:relative;float:left;margin:0 15px 0 0!important;padding:0 27px 0 0!important}.so-panels-dialog .so-title-bar h3.so-parent-link .so-separator{position:absolute;top:-15px;right:0;width:12px;height:50px;display:block;background:url(images/dialog-separator.png) no-repeat}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.so-panels-dialog .so-title-bar h3.so-parent-link .so-separator{background:url(images/dialog-separator@2x.png) no-repeat;background-size:cover}}.so-panels-dialog .so-title-bar a{cursor:pointer;position:absolute;box-sizing:border-box;width:50px;height:50px;display:block;top:0;right:0;transition:all .2s ease 0s;background:#fafafa;border-left:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8}.so-panels-dialog .so-title-bar a:hover{background:#e9e9e9}.so-panels-dialog .so-title-bar a:hover .so-dialog-icon{color:#333}.so-panels-dialog .so-title-bar a .so-dialog-icon{position:absolute;top:50%;left:50%;text-decoration:none;width:20px;height:20px;margin-left:-10px;margin-top:-10px;color:#666;text-align:center}.so-panels-dialog .so-title-bar a .so-dialog-icon:before{font:400 20px/1em dashicons;top:7px;left:13px}.so-panels-dialog .so-title-bar a.so-close{right:0}.so-panels-dialog .so-title-bar a.so-close .so-dialog-icon:before{content:"\f335"}.so-panels-dialog .so-title-bar a.so-next{right:50px}.so-panels-dialog .so-title-bar a.so-next .so-dialog-icon:before{content:"\f345"}.so-panels-dialog .so-title-bar a.so-previous{right:100px}.so-panels-dialog .so-title-bar a.so-previous .so-dialog-icon:before{content:"\f341"}.so-panels-dialog .so-title-bar a.so-nav.so-disabled{cursor:default;pointer-events:none}.so-panels-dialog .so-title-bar a.so-nav.so-disabled .so-dialog-icon{color:#ddd}.so-panels-dialog .so-title-bar.so-has-icon{padding-left:45px}.so-panels-dialog .so-title-bar.so-has-icon .so-panels-icon{position:absolute;top:14.5px;left:14px;font-size:22px;line-height:22px;display:block;width:22px;height:22px;text-align:center;color:#666}.so-panels-dialog .so-toolbar{left:30px;right:30px;bottom:30px;height:58px;background-color:#fafafa;border-top:1px solid #d8d8d8;z-index:100002}.so-panels-dialog .so-toolbar .so-status{float:left;padding-top:6px;padding-bottom:6px;font-style:italic;color:#999;line-height:1em}.so-panels-dialog .so-toolbar .so-status.so-panels-loading{padding-left:26px;background-position:0}.so-panels-dialog .so-toolbar .so-status .dashicons-warning{color:#a00;vertical-align:middle;margin-right:7px;margin-top:-1px}.so-panels-dialog .so-toolbar .so-buttons{float:right}.so-panels-dialog .so-toolbar .so-buttons .action-buttons{position:absolute;left:15px;top:50%;margin-top:-.65em}.so-panels-dialog .so-toolbar .so-buttons .action-buttons a{cursor:pointer;display:inline;padding:.2em .5em;line-height:1em;margin-right:.5em;text-decoration:none}.so-panels-dialog .so-toolbar .so-buttons .action-buttons .so-delete{color:#a00}.so-panels-dialog .so-toolbar .so-buttons .action-buttons .so-delete:hover{background:#a00;color:#fff}.so-panels-dialog .so-toolbar .so-buttons .action-buttons .so-duplicate:hover{text-decoration:underline}.so-panels-dialog .so-left-sidebar,.so-panels-dialog .so-right-sidebar{background-color:#f3f3f3}.so-panels-dialog .so-left-sidebar{display:none;top:30px;left:30px;bottom:30px;width:290px;border-right:1px solid #d8d8d8}.so-panels-dialog .so-left-sidebar h4{margin:0 0 20px;font-size:18px}.so-panels-dialog .so-left-sidebar .so-sidebar-search{width:100%;padding:6px;margin-bottom:20px}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs{list-style:none;margin:0 -15px}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li{margin-bottom:0}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li a{padding:7px 16px;display:block;font-size:14px;text-decoration:none;box-shadow:none!important}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li a:hover{background:#fff}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li.tab-active a{color:#555;font-weight:700;background:#fff}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li.tab-active a:hover{background:#fff}.so-panels-dialog .so-right-sidebar{display:none;top:80px;right:30px;bottom:88px;width:290px;border-left:1px solid #d8d8d8}.so-panels-dialog .so-right-sidebar h3{color:#333}.so-panels-dialog .so-right-sidebar h3:first-child{margin-top:0}.so-panels-dialog .so-sidebar .form-field{margin-bottom:20px}.so-panels-dialog .so-sidebar .form-field label{font-weight:500;font-size:15px;display:block;margin-bottom:10px}.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-content,.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-title-bar,.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-toolbar{left:320px}.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-content{box-shadow:inset 2px 2px 2px rgba(0,0,0,.03)}.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-left-sidebar{display:block}.so-panels-dialog.so-panels-dialog-has-right-sidebar .so-content{right:320px}.so-panels-dialog.so-panels-dialog-has-right-sidebar .so-right-sidebar{display:block}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget{border-radius:2px;border:1px solid #ccc;cursor:pointer;padding:10px;background:#f9f9f9;box-shadow:0 1px 2px rgba(0,0,0,.075),inset 0 1px 0 #fff;margin-bottom:15px}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget:hover{border:1px solid #bbb;background:#fff}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current{border-color:#0074a2;background:#2ea2cc;cursor:auto;box-shadow:0 1px 2px rgba(0,0,0,.15),inset 0 1px 0 hsla(0,0%,100%,.2)}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current h3{color:#fff}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current small{color:#eee}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current:hover{border-color:#0074a2;background:#2ea2cc}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget:last-child{margin-bottom:0}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget h3{margin:0 0 7px;padding:0;height:1.2em;color:#222;font-size:14px}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget small{font-size:11px;line-height:1.25em;display:block;overflow:hidden;color:#888}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list{zoom:1;margin:0 -5px -10px;min-height:10px}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list:before{content:"";display:block}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list:after{content:"";display:table;clear:both}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type{-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;-ms-box-sizing:border-box;box-sizing:border-box;width:25%;padding:0 5px;margin-bottom:10px;float:left}@media (max-width:1280px){.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type{width:33.333%}}@media (max-width:960px){.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type{width:50%}}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type h3{margin:0 0 7px;padding:0;color:#222;font-size:14px}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type small{font-size:11px;min-height:2.5em;line-height:1.25em;display:block;overflow:hidden;color:#888}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type .widget-icon{font-size:20px;width:20px;height:20px;color:#666;float:left;margin:-1px .5em 0 0}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type-wrapper{border:1px solid #ccc;cursor:pointer;padding:10px;background:#f8f8f8;box-shadow:0 1px 2px rgba(0,0,0,.075)}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type-wrapper:hover{border:1px solid #bbb;background:#fff;box-shadow:0 2px 2px rgba(0,0,0,.075)}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form{zoom:1;padding:8px;border:1px solid #ccc;margin-bottom:20px;background:#f3f3f3}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form:before{content:"";display:block}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form:after{content:"";display:table;clear:both}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form button,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form input,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form select,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form span,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form strong{display:inline;margin:1px 5px;outline:none;box-shadow:none}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form button{margin-top:2px}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form label{display:inline}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview{margin:0 -6px;height:360px;position:relative;white-space:nowrap}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell-in,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell-weight{-ms-box-sizing:border-box;box-sizing:border-box}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell{display:inline-block;position:relative;padding:0 6px;cursor:pointer}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in{border:1px solid #bcccd2;min-height:360px;background:#e4eff4;position:relative}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in.cell-selected{background:#cae7f4 url(images/cell-selected.png) repeat;border-color:#9abcc7;box-shadow:0 0 5px rgba(0,0,0,.2)}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input{position:absolute;font-size:17px;font-weight:700;top:50%;left:50%;width:80px;text-align:center;color:#5e6d72;margin:-.95em 0 0 -40px;padding:10px 0;border:1px solid transparent;line-height:1.4em!important;overflow:hidden;cursor:pointer}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input:after,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight:after{content:"%"}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input:hover,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight:hover{background:#f6f6f6;border:1px solid #d0d0d0}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input{background:#f6f6f6;border:1px solid #d0d0d0;box-shadow:none}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .resize-handle{z-index:100;position:absolute;top:0;width:12px;left:-6px;cursor:col-resize;background:#e5f4fb;height:360px;transition:background .15s ease-in-out 0s}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .resize-handle.ui-draggable-dragging,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .resize-handle:hover{background:#b7e0f1}.so-panels-dialog.so-panels-dialog-history .so-left-sidebar{padding:0}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry{padding:10px;background:#f8f8f8;cursor:pointer;border-bottom:1px solid #ccc}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry h3{margin:0 0 .6em;font-size:12px;font-weight:700;color:#444;line-height:1em}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry .timesince{color:#999;font-size:11px;line-height:1em}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry:hover{background:#f0f0f0}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry.so-selected{background:#eee}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry .count{color:#999}.so-panels-dialog.so-panels-dialog-history .so-content{padding:0;overflow-y:hidden}.so-panels-dialog.so-panels-dialog-history .so-content form.history-form{display:none}.so-panels-dialog.so-panels-dialog-history .so-content iframe.siteorigin-panels-history-iframe{width:100%;height:100%}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content{padding-left:10px;padding-right:10px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-error-message{font-size:14px;border:1px solid #ccc;background:#f8f8f8;padding:15px 20px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .export-file-ui{padding:5px 15px;text-align:right}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui{padding:15px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .drag-drop-message{display:none}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui.has-drag-drop .drag-drop-message{display:block}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui p.drag-drop-message{font-size:1em;margin-bottom:0}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .drag-upload-area{display:block;-ms-box-sizing:border-box;box-sizing:border-box;padding:50px 30px;border:4px dashed #e0e0e0;text-align:center;transition:all .25s ease 0s}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .drag-upload-area.file-dragover{background-color:#f2f9fc;border-color:#0074a2}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .progress-bar{display:none;padding:2px;border:2px solid #2181b1;border-radius:2px;margin-top:20px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .progress-bar .progress-percent{height:14px;background-color:#358ebe;border-radius:1px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .file-browse-button{padding:12px 30px;height:auto}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-browse{background:#f3f3f3;border-bottom:1px solid #d0d0d0;margin:-15px -10px 15px;padding:15px;font-weight:700}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items-wrapper{display:flex;flex-flow:row wrap}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-no-results{margin:20px 0;padding:0 5px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{-ms-box-sizing:border-box;box-sizing:border-box;padding:6px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-directory-item-wrapper{display:flex;flex-flow:column nowrap;height:100%;box-sizing:border-box;padding:15px 10px;background:#f7f7f7;border:1px solid #d0d0d0;box-shadow:0 1px 1px rgba(0,0,0,.1)}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-title{font-size:15px;margin:0 0 13px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot{flex:3 auto;margin-bottom:10px;cursor:pointer}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot.so-loading{background-image:url(images/wpspin_light.gif);background-position:50%;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot.so-loading{background-image:url(images/wpspin_light-2x.gif);background-size:16px 16px}}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot img{display:block;width:100%;height:auto}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot .so-screenshot-wrapper{display:block;min-height:40px;background:gray;border:1px solid #d0d0d0}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-description{flex:1 auto;font-size:.9em;color:#666;margin-bottom:10px;max-height:60px;overflow:hidden}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-bottom{flex:1 auto;position:relative;max-height:50px;margin:10px -10px -15px;background:#fcfcfc;border-top:1px solid #d0d0d0}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-bottom .so-title{margin:0;padding:16px 10px;cursor:pointer;overflow:hidden;white-space:nowrap}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-bottom .so-buttons{position:absolute;z-index:2;top:0;bottom:0;right:0;height:100%;visibility:hidden;-ms-box-sizing:border-box;box-sizing:border-box;padding:11px 10px 10px 15px;border-left:1px solid #d0d0d0;background:#f6f6f6;box-shadow:-1px 0 1px rgba(0,0,0,.05)}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item:hover .so-buttons{visibility:visible}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected{background-color:#e5f4fa}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-directory-item-wrapper{background:#deeef4;border-color:#9abcc7}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-bottom{background:#f8fdff;border-color:#bcccd2}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-bottom .so-title{color:#3e484c}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-bottom .so-buttons{background:#eaf2f6;border-color:#bcccd2}@media only screen and (min-width:1680px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:20%}}@media only screen and (max-width:1679px) and (min-width:1280px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:25%}}@media only screen and (max-width:1279px) and (min-width:1140px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:33.333%}}@media only screen and (max-width:1139px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:50%}}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-pages{margin-top:15px;padding:0 5px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-pages .button-disabled{pointer-events:none}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-toolbar .so-buttons select.so-layout-position{vertical-align:baseline}.so-panels-dialog .so-visual-styles{margin:-15px}.so-panels-dialog .so-visual-styles h3{line-height:1em;margin:0;padding:20px 15px;border-bottom:1px solid #ddd}.so-panels-dialog .so-visual-styles .style-section-head{background:#fff;padding:15px 10px;border-bottom:1px solid #ddd;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.so-panels-dialog .so-visual-styles .style-section-head h4{margin:0}.so-panels-dialog .so-visual-styles .style-section-fields{padding:15px;border-bottom:1px solid #ddd;background:#f7f7f7}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper{margin-bottom:20px}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper:last-child{margin-bottom:0}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper>label{font-weight:700;display:block;margin-bottom:3px}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field{zoom:1}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field:before{content:"";display:block}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field:after{content:"";display:table;clear:both}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field input{font-size:12px}.so-panels-dialog .so-visual-styles .style-input-wrapper{zoom:1}.so-panels-dialog .so-visual-styles .style-input-wrapper:before{content:"";display:block}.so-panels-dialog .so-visual-styles .style-input-wrapper:after{content:"";display:table;clear:both}.so-panels-dialog .so-visual-styles .style-input-wrapper input{max-width:100%}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-inputs{overflow:auto;margin:0 -3px 4px}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper{box-sizing:border-box;float:left;width:25%;padding:0 3px}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value{border-width:1px;display:block;max-width:100%}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-top{box-shadow:inset 0 2px 1px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-right{box-shadow:inset -3px 0 2px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-bottom{box-shadow:inset 0 -2px 1px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-left{box-shadow:inset 3px 0 2px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-unit-multiple{width:100%;display:block}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-unit-single{float:right;width:25%}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-value-single{float:left;width:72%}.so-panels-dialog .so-visual-styles .style-field-image .so-image-selector{display:inline-block;background-color:#f7f7f7;border:1px solid #ccc;height:28px;float:left;border-radius:3px;cursor:pointer;box-shadow:inset 0 1px #fff}.so-panels-dialog .so-visual-styles .style-field-image .so-image-selector .current-image{height:28px;width:28px;float:left;background:#fff;border-right:1px solid #ccc;background-size:cover;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px;border-top-left-radius:3px;background-clip:padding-box}.so-panels-dialog .so-visual-styles .style-field-image .so-image-selector .select-image{font-size:12px;line-height:28px;float:left;padding:0 8px;color:#555}.so-panels-dialog .so-visual-styles .style-field-image .remove-image{font-size:12px;margin-top:4px;margin-left:15px;display:inline-block;float:left;color:#666;text-decoration:none}.so-panels-dialog .so-visual-styles .style-field-image .remove-image .remove-image{color:#333}.so-panels-dialog .so-visual-styles .style-field-checkbox label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.so-panels-dialog .so-visual-styles .so-field-code{font-size:12px;font-family:Courier\ 10 Pitch,Courier,monospace}.so-panels-dialog .so-visual-styles .so-description{color:#999;font-size:12px;margin-top:5px;margin-bottom:0;font-style:italic;clear:both}.so-panels-dialog .so-visual-styles.so-cell-styles{margin-top:15px}.so-panels-dialog .so-content .siteorigin-panels-builder .so-builder-toolbar{border:1px solid #dedede}.so-panels-dialog .so-content .siteorigin-panels-builder .so-rows-container{padding:20px 0 0}.so-panels-dialog .so-content .siteorigin-panels-builder .so-panels-welcome-message{padding-left:0;padding-right:0}.so-panels-dialog .so-dropdown-wrapper input[type=button].button-primary{width:125px;height:28px}.so-panels-dialog .so-dropdown-wrapper .so-dropdown-links-wrapper{display:block;z-index:11;bottom:28px;width:125px}.so-panels-dialog .so-dropdown-wrapper .so-dropdown-links-wrapper.hidden{display:none}.wp-customizer .so-panels-dialog .so-content,.wp-customizer .so-panels-dialog .so-left-sidebar,.wp-customizer .so-panels-dialog .so-overlay,.wp-customizer .so-panels-dialog .so-right-sidebar,.wp-customizer .so-panels-dialog .so-title-bar,.wp-customizer .so-panels-dialog .so-toolbar{z-index:500001}.wp-customizer .so-panels-dialog .so-toolbar{z-index:500002}.so-panels-live-editor>div{position:fixed;z-index:99999;-ms-box-sizing:border-box;box-sizing:border-box}.so-panels-live-editor .live-editor-form{display:none}.so-panels-live-editor .live-editor-collapse{position:fixed;top:18px;left:10px;line-height:1em;cursor:pointer;z-index:100000}.so-panels-live-editor .live-editor-collapse .collapse-icon{float:left;margin:-4px 6px 0 0;border-radius:50%;width:20px;height:20px;overflow:hidden;transition:all .25s ease 0s}.so-panels-live-editor .live-editor-collapse .collapse-icon:before{display:block;content:"\f148";background:#eee;font:normal 20px/1 dashicons;speak:none;padding:0;-webkit-font-smoothing:antialiased}.so-panels-live-editor .live-editor-collapse:hover{color:#0073aa}.so-panels-live-editor .live-editor-collapse:hover .collapse-icon{box-shadow:0 0 3px rgba(30,140,190,.8)}.so-panels-live-editor .so-sidebar-tools{background:#eee;border-bottom:1px solid #ddd;border-right:1px solid #d0d0d0;top:0;left:0;height:46px;width:360px}.so-panels-live-editor .so-sidebar-tools .live-editor-close{margin:9px 10px 0 15px;float:right}.so-panels-live-editor .so-sidebar-tools .live-editor-mode{float:right;margin:9px 4px 0 0}.so-panels-live-editor .so-sidebar-tools .live-editor-mode .dashicons{font-size:30px;width:30px;height:30px;cursor:pointer;color:#999}.so-panels-live-editor .so-sidebar-tools .live-editor-mode .dashicons:hover{color:#666}.so-panels-live-editor .so-sidebar-tools .live-editor-mode.so-active .dashicons,.so-panels-live-editor .so-sidebar-tools .live-editor-mode.so-active .dashicons:hover{color:#0073aa}.so-panels-live-editor .so-sidebar{top:46px;left:0;bottom:0;width:360px;overflow-y:auto;background:#f7f7f7;border-right:1px solid #d0d0d0}.so-panels-live-editor .so-sidebar .siteorigin-panels-builder .so-rows-container{padding:10px 10px 0!important}.so-panels-live-editor .so-preview{top:0;right:0;bottom:0;left:360px;background-color:#191e23}.so-panels-live-editor .so-preview form{display:none}.so-panels-live-editor .so-preview iframe{float:left;width:100%;height:100%;margin:0 auto}.so-panels-live-editor .so-preview-overlay{display:none;opacity:.975;top:0;right:0;bottom:0;left:360px;background-color:#f4f4f4;cursor:wait}.so-panels-live-editor .so-preview-overlay .so-loading-container{opacity:.6;position:absolute;top:50%;width:200px;padding:2px;border-radius:5px;left:50%;margin-left:-104px;margin-top:-9px;border:2px solid #aaa}.so-panels-live-editor .so-preview-overlay .so-loading-container .so-loading-bar{width:50%;border-radius:3px;height:10px;background:#aaa}.so-panels-live-editor.so-collapsed .live-editor-collapse .collapse-icon{transform:rotate(180deg)}.so-panels-live-editor.so-collapsed .so-sidebar,.so-panels-live-editor.so-collapsed .so-sidebar-tools{display:none}.so-panels-live-editor.so-collapsed .so-preview,.so-panels-live-editor.so-collapsed .so-preview-overlay{left:0}.so-panels-live-editor.live-editor-mobile-mode .so-preview iframe{max-width:480px;max-height:640px;position:absolute;top:50%;left:50%;margin-left:-240px;margin-top:-320px}@media (max-width:840px){.so-panels-live-editor.live-editor-mobile-mode .so-preview iframe{position:static;margin-left:0;margin-top:0}}@media (max-height:640px){.so-panels-live-editor.live-editor-mobile-mode .so-preview iframe{position:static;margin-left:0;margin-top:0}}.so-panels-live-editor.live-editor-tablet-mode .so-preview iframe{position:absolute;max-width:768px;top:0;left:50%;margin-left:-384px}@media (max-width:1128px){.so-panels-live-editor.live-editor-tablet-mode .so-preview iframe{position:static;margin-left:0;margin-top:0}}.so-panels-loading{background-image:url(images/wpspin_light.gif);background-position:50%;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.so-panels-loading{background-image:url(images/wpspin_light-2x.gif);background-size:16px 16px}}#panels-home-page .switch{margin:0 10px 0 0;float:left;position:relative;display:inline-block;vertical-align:top;width:68px;height:24px;padding:3px;background-color:#fff;border-radius:24px;box-shadow:inset 0 -1px #fff,inset 0 1px 1px rgba(0,0,0,.05);cursor:pointer;background-image:linear-gradient(180deg,#eee,#fff 25px)}#panels-home-page .switch .switch-input{position:absolute;top:0;left:0;opacity:0}#panels-home-page .switch .switch-label{position:relative;display:block;height:inherit;font-size:12px;text-transform:uppercase;background:#eceeef;border-radius:inherit;box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);transition:.15s ease-out;transition-property:opacity background}#panels-home-page .switch .switch-label:after,#panels-home-page .switch .switch-label:before{position:absolute;top:50%;margin-top:-.5em;line-height:1;transition:inherit}#panels-home-page .switch .switch-label:before{content:attr(data-off);right:11px;color:#aaa;text-shadow:0 1px hsla(0,0%,100%,.5)}#panels-home-page .switch .switch-label:after{content:attr(data-on);left:13px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}#panels-home-page .switch .switch-input:checked~.switch-label{background:#47a8d8;box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}#panels-home-page .switch .switch-input:checked~.switch-label:before{opacity:0}#panels-home-page .switch .switch-input:checked~.switch-label:after{opacity:1}#panels-home-page .switch .switch-handle{position:absolute;top:4px;left:4px;width:22px;height:22px;background:#fff;border-radius:12px;box-shadow:1px 1px 5px rgba(0,0,0,.2);background-image:linear-gradient(180deg,#fff 40%,#f0f0f0);transition:left .15s ease-out}#panels-home-page .switch .switch-handle:before{content:"";position:absolute;top:50%;left:50%;margin:-7px 0 0 -7px;width:14px;height:14px;background:#f9f9f9;border-radius:7px;box-shadow:inset 0 1px rgba(0,0,0,.02);background-image:linear-gradient(180deg,#eee,#fff)}#panels-home-page .switch .switch-input:checked~.switch-handle{left:48px;box-shadow:-1px 1px 5px rgba(0,0,0,.2)}#panels-home-page .switch .switch-green>.switch-input:checked~.switch-label{background:#4fb845}#panels-home-page #panels-view-as-page{display:inline-block;margin-left:50px}.siteorigin-panels-builder-form .siteorigin-panels-builder{border:1px solid #d0d0d0;background-color:#fff;margin:10px 0}.siteorigin-panels-builder-form .siteorigin-panels-builder.so-panels-loading{min-height:150px}.siteorigin-page-builder-widget .siteorigin-panels-display-builder{display:inline-block!important}.siteorigin-page-builder-widget .siteorigin-panels-no-builder{display:none!important}.so-panels-contextual-menu{border:1px solid silver;background:#f9f9f9;box-shadow:0 1px 1px rgba(0,0,0,.04);outline:none;border-radius:2px;position:absolute;width:180px;top:20px;left:20px;z-index:999999;display:none;overflow-y:auto}.so-panels-contextual-menu,.so-panels-contextual-menu *{font-size:12px}.so-panels-contextual-menu .so-section{border-bottom:1px solid silver}.so-panels-contextual-menu .so-section:last-child{border-bottom:none}.so-panels-contextual-menu .so-section h5{margin:0 0 5px;padding:8px 10px 5px;border-bottom:1px solid #d0d0d0;background:#f6f6f6}.so-panels-contextual-menu .so-section .so-search-wrapper{margin:-5px 0 5px;border-bottom:1px solid #d0d0d0;background:#f4f4f4}.so-panels-contextual-menu .so-section .so-search-wrapper input[type=text]{box-sizing:border-box;display:block;width:100%;margin:0;border:none;padding:5px 10px;background:#fbfbfb}.so-panels-contextual-menu .so-section .so-search-wrapper input[type=text]:active,.so-panels-contextual-menu .so-section .so-search-wrapper input[type=text]:focus{border:none;box-shadow:none;background:#fff}.so-panels-contextual-menu .so-section ul{margin:5px 0 0;padding:0 0 5px}.so-panels-contextual-menu .so-section ul li{cursor:pointer;margin:0;padding:4px 10px;line-height:1em}.so-panels-contextual-menu .so-section ul li.so-active,.so-panels-contextual-menu .so-section ul li:hover{background:#f0f0f0;color:#444}.so-panels-contextual-menu .so-section ul li.so-confirm{color:#a00}.so-panels-contextual-menu .so-section ul li.so-confirm.so-active,.so-panels-contextual-menu .so-section ul li.so-confirm:hover{background:#a00;color:#fff}.so-panels-contextual-menu .so-section ul li .dashicons{width:12px;height:12px;font-size:12px;margin:0;float:right;line-height:12px}.so-panels-contextual-menu .so-section .so-no-results{padding:0 10px 5px;display:none;font-style:italic}.so-dropdown-wrapper{position:relative;float:right}.so-dropdown-wrapper .so-dropdown-links-wrapper{position:absolute;padding:6px 0 0}.so-dropdown-wrapper .so-dropdown-links-wrapper ul{margin:0;border:1px solid silver;background:#f9f9f9;border-radius:2px;padding:4px 0;box-shadow:0 2px 2px rgba(0,0,0,.1)}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li{margin:0}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li:first-child{border-top-width:1px}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li a{display:block;padding:2px 8px;text-decoration:none;color:#666;font-size:11px;cursor:pointer;outline:0!important;box-shadow:none}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li a:hover{background:#f0f0f0;color:#444}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li a .dashicons{font-size:16px;margin:0;float:right;line-height:16px}.so-dropdown-wrapper .so-dropdown-links-wrapper .so-pointer{width:12px;height:6px;position:absolute;z-index:12;background:url(images/dropdown-pointer.png);background-size:12px 6px;top:1px;right:18px}.so-panels-icon{font-family:siteorigin-panels-icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.so-panels-icon.so-panels-icon-add-row:before{content:"\e900"}.so-panels-icon.so-panels-icon-add-widget:before{content:"\e901"}.so-panels-icon.so-panels-icon-addons:before{content:"\e902"}.so-panels-icon.so-panels-icon-history:before{content:"\e903"}.so-panels-icon.so-panels-icon-layouts:before{content:"\e904"}.so-panels-icon.so-panels-icon-learn:before{content:"\e905"}.so-panels-icon.so-panels-icon-live-editor:before{content:"\e906"}.so-panels-icon.so-panels-icon-move:before{content:"\e907"}.so-panels-icon.so-panels-icon-settings:before{content:"\e908"}#post-status-info.for-siteorigin-panels{margin-top:-21px!important}
1
+ @font-face{font-family:siteorigin-panels-icons;src:url(icons/panels-icons.eot);src:url(icons/panels-icons.eot) format("embedded-opentype"),url(icons/panels-icons.woff) format("woff"),url(icons/panels-icons.ttf) format("truetype"),url(icons/panels-icons.svg) format("svg");font-weight:400;font-style:normal}#so-panels-panels.attached-to-editor{margin-top:20px}#so-panels-panels.attached-to-editor .handlediv,#so-panels-panels.attached-to-editor .hndle{display:none!important}#so-panels-panels.attached-to-editor .inside{margin:0!important;padding:0!important}#so-panels-panels.attached-to-editor .so-toolbar .so-switch-to-standard{display:block}.siteorigin-panels-builder{position:relative}.siteorigin-panels-builder .so-tool-button{padding:6px 7px;text-decoration:none;line-height:1em;float:left;margin-right:2px;display:block;visibility:visible;position:relative;cursor:pointer;border:1px solid #bebebe;background:#eee;background:-o-linear-gradient(#f9f9f9,#eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f9f9f9",endColorstr="#eeeeee",GradientType=0);box-shadow:0 1px 1px rgba(0,0,0,.04),inset 0 1px 0 hsla(0,0%,100%,.5);outline:none;border-radius:2px}.siteorigin-panels-builder .so-tool-button .so-panels-icon{font-size:12px}.siteorigin-panels-builder .so-tool-button span{display:inline-block;color:#666;text-shadow:0 1px 0 #fff;min-width:10px;text-align:center}.siteorigin-panels-builder .so-tool-button:hover{background:#fff}.siteorigin-panels-builder .so-tool-button:hover span{color:#444}.siteorigin-panels-builder .so-builder-toolbar{-ms-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #d0d0d0;background:#f5f5f5;line-height:1em;z-index:101;white-space:nowrap;overflow-x:hidden;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.04);top:0;left:0;width:100%;padding:6px 9px;margin-top:0!important;zoom:1}.siteorigin-panels-builder .so-builder-toolbar:before{content:"";display:block}.siteorigin-panels-builder .so-builder-toolbar:after{content:"";display:table;clear:both}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button{display:inline-block;color:#666;padding:2px 10px 2px 8px}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button .so-button-text{margin:3px 0 2px;font-size:11px}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button .so-panels-icon{float:left;margin:3px 7px 2px 0;font-size:14px;color:#747474}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button:hover,.siteorigin-panels-builder .so-builder-toolbar .so-tool-button:hover .so-panels-icon{color:#444}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button.so-learn{background:#e5e5e5;background:-o-linear-gradient(#f6f6f6,#e5e5e5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#f6f6f6",endColorstr="#e5e5e5",GradientType=0)}.siteorigin-panels-builder .so-builder-toolbar .so-tool-button.so-learn:hover{background:#fff}.siteorigin-panels-builder .so-builder-toolbar .so-switch-to-standard{cursor:pointer;float:right;display:none;text-decoration:none;color:#666;padding:5px 6px;border-radius:2px;border:1px solid transparent;font-size:11px}.siteorigin-panels-builder .so-builder-toolbar .so-switch-to-standard:hover{background:#fafafa;border:1px solid #999;color:#444}.siteorigin-panels-builder .so-rows-container{padding:20px 15px 0}.siteorigin-panels-builder .so-rows-container .so-row-color-1.so-row-color{background-color:#cde2ec;border:1px solid #a4cadd}.siteorigin-panels-builder .so-rows-container .so-row-color-1.so-row-color.so-row-color-selected:before{background:#a8cdde}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell .cell-wrapper{background-color:#cde2ec}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell.cell-selected .cell-wrapper{background-color:#99c4d8}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell .resize-handle{background-color:#e7f1f6}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-1 .so-cells .cell .resize-handle:hover{background-color:#dcebf2}.siteorigin-panels-builder .so-rows-container .so-row-color-2.so-row-color{background-color:#f2c2be;border:1px solid #e9968f}.siteorigin-panels-builder .so-rows-container .so-row-color-2.so-row-color.so-row-color-selected:before{background:#ea9a93}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell .cell-wrapper{background-color:#f2c2be}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell.cell-selected .cell-wrapper{background-color:#e68a83}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell .resize-handle{background-color:#f8dedc}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-2 .so-cells .cell .resize-handle:hover{background-color:#f5d2cf}.siteorigin-panels-builder .so-rows-container .so-row-color-3.so-row-color{background-color:#d5ccdf;border:1px solid #b9aac9}.siteorigin-panels-builder .so-rows-container .so-row-color-3.so-row-color.so-row-color-selected:before{background:#bbadcb}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell .cell-wrapper{background-color:#d5ccdf}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell.cell-selected .cell-wrapper{background-color:#b1a0c3}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell .resize-handle{background-color:#e7e2ed}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-3 .so-cells .cell .resize-handle:hover{background-color:#dfd9e7}.siteorigin-panels-builder .so-rows-container .so-row-color-4.so-row-color{background-color:#cae7cd;border:1px solid #a3d6a9}.siteorigin-panels-builder .so-rows-container .so-row-color-4.so-row-color.so-row-color-selected:before{background:#a7d7ac}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell .cell-wrapper{background-color:#cae7cd}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell.cell-selected .cell-wrapper{background-color:#99d19f}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell .resize-handle{background-color:#e3f2e4}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-4 .so-cells .cell .resize-handle:hover{background-color:#d8edda}.siteorigin-panels-builder .so-rows-container .so-row-color-5.so-row-color{background-color:#e2dcb1;border:1px solid #d3ca88}.siteorigin-panels-builder .so-rows-container .so-row-color-5.so-row-color.so-row-color-selected:before{background:#d4cb8c}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell .cell-wrapper{background-color:#e2dcb1}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell.cell-selected .cell-wrapper{background-color:#cfc57d}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell .resize-handle{background-color:#ece8cb}.siteorigin-panels-builder .so-rows-container .so-row-container.so-row-color-5 .so-cells .cell .resize-handle:hover{background-color:#e8e3c0}.siteorigin-panels-builder .so-rows-container h3.so-row-label{display:inline-block;font-size:1em;font-weight:500;color:#474747;margin:0 0 0 4px;line-height:22px;float:left}.siteorigin-panels-builder .so-rows-container .so-row-toolbar{zoom:1;margin-bottom:4px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar:before{content:"";display:block}.siteorigin-panels-builder .so-rows-container .so-row-toolbar:after{content:"";display:table;clear:both}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button{-ms-box-sizing:border-box;box-sizing:border-box;padding:4px;float:right}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button .so-panels-icon{color:#777;font-size:11px;width:11px;height:11px;display:block}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button:hover .so-panels-icon{color:#555}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-tool-button.so-row-move{cursor:move}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper{visibility:hidden;opacity:0;transition:visibility 0s linear 75ms,opacity 75ms linear;z-index:101;right:-10px;top:100%;width:125px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li a.so-row-delete{color:#a00}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li a.so-row-delete:hover{color:#fff;background:#a00}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li.so-row-colors-container{display:flex;justify-content:space-around;padding:5px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li.so-row-colors-container .so-row-color{display:inline-block;cursor:pointer;position:relative;text-align:center;width:14px;height:14px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper .so-dropdown-links-wrapper ul li.so-row-colors-container .so-row-color.so-row-color-selected:before{content:"";display:block;position:absolute;top:2px;bottom:2px;left:2px;right:2px}.siteorigin-panels-builder .so-rows-container .so-row-toolbar .so-dropdown-wrapper:hover .so-dropdown-links-wrapper{visibility:visible;opacity:1;transition-delay:0s}.siteorigin-panels-builder .so-rows-container .ui-sortable-placeholder{visibility:visible!important;background:#f7f7f7;-ms-box-sizing:border-box;box-sizing:border-box}.siteorigin-panels-builder .so-rows-container .so-row-container{margin-bottom:15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.siteorigin-panels-builder .so-rows-container .so-row-container.ui-sortable-helper{opacity:.9}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells{zoom:1;margin:0 -5px;position:relative}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells:before{content:"";display:block}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells:after{content:"";display:table;clear:both}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .ui-resizable-handle.ui-resizable-w{width:10px;left:-11px;cursor:col-resize;background:rgba(0,150,211,.25);transition:background .25s ease-in-out}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .ui-resizable-handle.ui-resizable-w:hover{background:rgba(0,150,211,.1)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell{-ms-box-sizing:border-box;box-sizing:border-box;float:left;position:relative;padding:0 5px}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell.so-first{margin-left:0}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell.so-last{margin-right:0}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .cell-wrapper{background:#e4eff4;padding:7px 7px 0;height:100%;min-height:63px;transition:background .25s ease-in-out 0s}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell.cell-selected .cell-wrapper{background-size:3px 3px}}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .cell-wrapper{-ms-box-sizing:border-box;box-sizing:border-box}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget{cursor:move;margin-bottom:7px;background:#f9f9fb;border:1px solid hsla(0,0%,100%,.75);max-height:49px;box-shadow:0 1px 1px rgba(0,0,0,.075);-ms-box-sizing:border-box;box-sizing:border-box}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-no-move{cursor:auto}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget:hover{border:1px solid hsla(0,0%,100%,.55);background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .so-widget-wrapper{padding:7px 8px;overflow:hidden;position:relative}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget h4{display:block;cursor:pointer;margin:0 15px 3px 0;font-weight:600;line-height:1.25em;color:#474747;text-shadow:0 1px 0 #fff;white-space:nowrap}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget h4 span{font-weight:400;display:inline-block;color:#999;text-shadow:0 1px 0 #fff;margin-left:12px;margin-right:5px;font-style:italic}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-no-edit h4{cursor:auto}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions{font-size:12px;position:absolute;top:5px;right:7px;cursor:pointer;padding:2px 2px 2px 15px;z-index:10}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions:hover{background:#feffff}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions:hover a{opacity:1}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions a{display:none;margin-right:3px;text-decoration:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions a.widget-delete{color:red}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .title .actions a.widget-delete:hover{color:#fff;background:red}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget:hover .title a{display:inline-block;opacity:.5}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.panel-being-dragged .title .actions{display:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget small{display:block;height:16px;overflow:hidden;color:#777}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget .form{display:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only:hover{background:#f5f5f5;border:1px solid #a6bac1;box-shadow:none}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only:hover h4,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only:hover small,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only h4,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-widget-read-only small{opacity:.5}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered{background:#3a7096;border:1px solid #39618c;box-shadow:0 2px 2px rgba(0,0,0,.1)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered h4,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered small,.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered span{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.85)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget.so-hovered small{color:#eee}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .widgets-container .so-widget-sortable-highlight{border:1px solid rgba(0,0,0,.075);background:rgba(0,0,0,.025);-ms-box-sizing:border-box;box-sizing:border-box;height:49px;margin-bottom:7px;position:relative;box-shadow:inset 2px 2px 2px rgba(0,0,0,.01)}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell .resize-handle{z-index:100;position:absolute;top:0;width:10px;left:-5px;cursor:col-resize;background:#f6fafb;height:100%;transition:background .25s ease-in-out 0s}.siteorigin-panels-builder .so-rows-container .so-row-container .so-cells .cell:first-child .resize-handle{display:none}.siteorigin-panels-builder .so-panels-welcome-message{text-align:center;padding:0 15px 20px;color:#555;line-height:1.8em}.siteorigin-panels-builder .so-panels-welcome-message .so-message-wrapper{padding:15px 10px;background:#f8f8f8;border:1px solid #e0e0e0}.siteorigin-panels-builder .so-panels-welcome-message .so-tool-button{font-size:inherit;display:inline-block;float:none;color:#666;padding:5px 10px;margin:0 3px}.siteorigin-panels-builder .so-panels-welcome-message .so-tool-button .so-panels-icon{color:#777;font-size:.8em}.siteorigin-panels-builder .so-panels-welcome-message .so-tip-wrapper{margin-top:15px;font-size:.95em}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar{padding:10px}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button{padding-right:2px}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button .so-panels-icon{font-size:14px}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button.so-learn,.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar>.so-tool-button span.so-button-text{display:none}.siteorigin-panels-builder.so-display-narrow .so-builder-toolbar .so-switch-to-standard,.siteorigin-panels-builder.so-display-narrow .widgets-container .so-widget .actions{display:none!important}.so-widget.ui-sortable-helper.widget-being-dragged{z-index:500002!important;opacity:.9;pointer-events:none;border:1px solid rgba(0,0,0,.35)!important;cursor:move;margin-bottom:7px;background:#f9f9fb;border:1px solid hsla(0,0%,100%,.75);max-height:49px;box-shadow:0 1px 1px rgba(0,0,0,.075);-ms-box-sizing:border-box;box-sizing:border-box}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-no-move{cursor:auto}.so-widget.ui-sortable-helper.widget-being-dragged:hover{border:1px solid hsla(0,0%,100%,.55);background:#fff;box-shadow:0 0 2px rgba(0,0,0,.1)}.so-widget.ui-sortable-helper.widget-being-dragged .so-widget-wrapper{padding:7px 8px;overflow:hidden;position:relative}.so-widget.ui-sortable-helper.widget-being-dragged h4{display:block;cursor:pointer;margin:0 15px 3px 0;font-weight:600;line-height:1.25em;color:#474747;text-shadow:0 1px 0 #fff;white-space:nowrap}.so-widget.ui-sortable-helper.widget-being-dragged h4 span{font-weight:400;display:inline-block;color:#999;text-shadow:0 1px 0 #fff;margin-left:12px;margin-right:5px;font-style:italic}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-no-edit h4{cursor:auto}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions{font-size:12px;position:absolute;top:5px;right:7px;cursor:pointer;padding:2px 2px 2px 15px;z-index:10}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions:hover{background:#feffff}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions:hover a{opacity:1}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions a{display:none;margin-right:3px;text-decoration:none}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions a.widget-delete{color:red}.so-widget.ui-sortable-helper.widget-being-dragged .title .actions a.widget-delete:hover{color:#fff;background:red}.so-widget.ui-sortable-helper.widget-being-dragged:hover .title a{display:inline-block;opacity:.5}.so-widget.ui-sortable-helper.widget-being-dragged.panel-being-dragged .title .actions{display:none}.so-widget.ui-sortable-helper.widget-being-dragged small{display:block;height:16px;overflow:hidden;color:#777}.so-widget.ui-sortable-helper.widget-being-dragged .form{display:none}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only:hover{background:#f5f5f5;border:1px solid #a6bac1;box-shadow:none}.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only:hover h4,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only:hover small,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only h4,.so-widget.ui-sortable-helper.widget-being-dragged.so-widget-read-only small{opacity:.5}.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered{background:#3a7096;border:1px solid #39618c;box-shadow:0 2px 2px rgba(0,0,0,.1)}.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered h4,.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered small,.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered span{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.85)}.so-widget.ui-sortable-helper.widget-being-dragged.so-hovered small{color:#eee}.widgets-holder-wrap .widget-inside .siteorigin-panels-builder .so-builder-container{padding-top:0}.widgets-holder-wrap .widget-inside .siteorigin-panels-builder .so-rows-container{padding:10px 0 0}.widgets-holder-wrap .widget-inside .siteorigin-panels-builder .so-builder-toolbar{padding-left:15px;padding-right:15px;margin:0 -15px}.so-panels-dialog .so-content,.so-panels-dialog .so-left-sidebar,.so-panels-dialog .so-overlay,.so-panels-dialog .so-right-sidebar,.so-panels-dialog .so-title-bar,.so-panels-dialog .so-toolbar{z-index:100001;position:fixed;-ms-box-sizing:border-box;box-sizing:border-box;padding:15px}.so-panels-dialog .so-content,.so-panels-dialog .so-left-sidebar,.so-panels-dialog .so-right-sidebar{overflow-y:auto}.so-panels-dialog .so-overlay{top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5)}.so-panels-dialog .so-content{top:80px;left:30px;right:30px;bottom:88px;background-color:#fdfdfd;overflow-x:hidden;box-shadow:inset 0 2px 2px rgba(0,0,0,.03)}.so-panels-dialog .so-content>:first-child{margin-top:0}.so-panels-dialog .so-content>:last-child{margin-bottom:0}.so-panels-dialog .so-content .so-content-tabs>*{display:none}.so-panels-dialog .so-title-bar{left:30px;right:30px;top:30px;height:50px;background-color:#fafafa;border-bottom:1px solid #d8d8d8}.so-panels-dialog .so-title-bar h3.so-title{-ms-box-sizing:border-box;box-sizing:border-box;margin:-3px 150px 0 -3px;padding:5px 6px;display:block}.so-panels-dialog .so-title-bar h3.so-title.so-title-editable:focus,.so-panels-dialog .so-title-bar h3.so-title.so-title-editable:hover{outline:none;background-color:#f0f0f0}.so-panels-dialog .so-title-bar h3.so-title.so-title-editable:focus{margin-top:-4px;margin-left:-4px;border:1px solid #e4e4e4}.so-panels-dialog .so-title-bar input[type=text].so-edit-title{margin-top:-3px;margin-left:-3px;display:none;color:#23282d;font-size:1.3em;font-weight:600;border:none;box-shadow:none;background-color:#f0f0f0;padding:4px 5px}.so-panels-dialog .so-title-bar h3.so-parent-link{cursor:pointer;position:relative;float:left;margin:0 15px 0 0!important;padding:0 27px 0 0!important}.so-panels-dialog .so-title-bar h3.so-parent-link .so-separator{position:absolute;top:-15px;right:0;width:12px;height:50px;display:block;background:url(images/dialog-separator.png) no-repeat}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.so-panels-dialog .so-title-bar h3.so-parent-link .so-separator{background:url(images/dialog-separator@2x.png) no-repeat;background-size:cover}}.so-panels-dialog .so-title-bar a{cursor:pointer;position:absolute;box-sizing:border-box;width:50px;height:50px;display:block;top:0;right:0;transition:all .2s ease 0s;background:#fafafa;border-left:1px solid #d8d8d8;border-bottom:1px solid #d8d8d8}.so-panels-dialog .so-title-bar a:hover{background:#e9e9e9}.so-panels-dialog .so-title-bar a:hover .so-dialog-icon{color:#333}.so-panels-dialog .so-title-bar a .so-dialog-icon{position:absolute;top:50%;left:50%;text-decoration:none;width:20px;height:20px;margin-left:-10px;margin-top:-10px;color:#666;text-align:center}.so-panels-dialog .so-title-bar a .so-dialog-icon:before{font:400 20px/1em dashicons;top:7px;left:13px}.so-panels-dialog .so-title-bar a.so-close{right:0}.so-panels-dialog .so-title-bar a.so-close .so-dialog-icon:before{content:"\f335"}.so-panels-dialog .so-title-bar a.so-next{right:50px}.so-panels-dialog .so-title-bar a.so-next .so-dialog-icon:before{content:"\f345"}.so-panels-dialog .so-title-bar a.so-previous{right:100px}.so-panels-dialog .so-title-bar a.so-previous .so-dialog-icon:before{content:"\f341"}.so-panels-dialog .so-title-bar a.so-nav.so-disabled{cursor:default;pointer-events:none}.so-panels-dialog .so-title-bar a.so-nav.so-disabled .so-dialog-icon{color:#ddd}.so-panels-dialog .so-title-bar.so-has-icon{padding-left:45px}.so-panels-dialog .so-title-bar.so-has-icon .so-panels-icon{position:absolute;top:14.5px;left:14px;font-size:22px;line-height:22px;display:block;width:22px;height:22px;text-align:center;color:#666}.so-panels-dialog .so-toolbar{left:30px;right:30px;bottom:30px;height:58px;background-color:#fafafa;border-top:1px solid #d8d8d8;z-index:100002}.so-panels-dialog .so-toolbar .so-status{float:left;padding-top:6px;padding-bottom:6px;font-style:italic;color:#999;line-height:1em}.so-panels-dialog .so-toolbar .so-status.so-panels-loading{padding-left:26px;background-position:0}.so-panels-dialog .so-toolbar .so-status .dashicons-warning{color:#a00;vertical-align:middle;margin-right:7px;margin-top:-1px}.so-panels-dialog .so-toolbar .so-buttons{float:right}.so-panels-dialog .so-toolbar .so-buttons .action-buttons{position:absolute;left:15px;top:50%;margin-top:-.65em}.so-panels-dialog .so-toolbar .so-buttons .action-buttons a{cursor:pointer;display:inline;padding:.2em .5em;line-height:1em;margin-right:.5em;text-decoration:none}.so-panels-dialog .so-toolbar .so-buttons .action-buttons .so-delete{color:#a00}.so-panels-dialog .so-toolbar .so-buttons .action-buttons .so-delete:hover{background:#a00;color:#fff}.so-panels-dialog .so-toolbar .so-buttons .action-buttons .so-duplicate:hover{text-decoration:underline}.so-panels-dialog .so-left-sidebar,.so-panels-dialog .so-right-sidebar{background-color:#f3f3f3}.so-panels-dialog .so-left-sidebar{display:none;top:30px;left:30px;bottom:30px;width:290px;border-right:1px solid #d8d8d8}.so-panels-dialog .so-left-sidebar h4{margin:0 0 20px;font-size:18px}.so-panels-dialog .so-left-sidebar .so-sidebar-search{width:100%;padding:6px;margin-bottom:20px}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs{list-style:none;margin:0 -15px}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li{margin-bottom:0}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li a{padding:7px 16px;display:block;font-size:14px;text-decoration:none;box-shadow:none!important}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li a:hover{background:#fff}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li.tab-active a{color:#555;font-weight:700;background:#fff}.so-panels-dialog .so-left-sidebar .so-sidebar-tabs li.tab-active a:hover{background:#fff}.so-panels-dialog .so-right-sidebar{display:none;top:80px;right:30px;bottom:88px;width:290px;border-left:1px solid #d8d8d8}.so-panels-dialog .so-right-sidebar h3{color:#333}.so-panels-dialog .so-right-sidebar h3:first-child{margin-top:0}.so-panels-dialog .so-sidebar .form-field{margin-bottom:20px}.so-panels-dialog .so-sidebar .form-field label{font-weight:500;font-size:15px;display:block;margin-bottom:10px}.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-content,.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-title-bar,.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-toolbar{left:320px}.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-content{box-shadow:inset 2px 2px 2px rgba(0,0,0,.03)}.so-panels-dialog.so-panels-dialog-has-left-sidebar .so-left-sidebar{display:block}.so-panels-dialog.so-panels-dialog-has-right-sidebar .so-content{right:320px}.so-panels-dialog.so-panels-dialog-has-right-sidebar .so-right-sidebar{display:block}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget{border-radius:2px;border:1px solid #ccc;cursor:pointer;padding:10px;background:#f9f9f9;box-shadow:0 1px 2px rgba(0,0,0,.075),inset 0 1px 0 #fff;margin-bottom:15px}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget:hover{border:1px solid #bbb;background:#fff}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current{border-color:#0074a2;background:#2ea2cc;cursor:auto;box-shadow:0 1px 2px rgba(0,0,0,.15),inset 0 1px 0 hsla(0,0%,100%,.2)}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current h3{color:#fff}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current small{color:#eee}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget.so-current:hover{border-color:#0074a2;background:#2ea2cc}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget:last-child{margin-bottom:0}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget h3{margin:0 0 7px;padding:0;height:1.2em;color:#222;font-size:14px}.so-panels-dialog.so-panels-dialog-edit-widget .so-left-sidebar .so-widgets .so-widget small{font-size:11px;line-height:1.25em;display:block;overflow:hidden;color:#888}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list{zoom:1;margin:0 -5px -10px;min-height:10px}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list:before{content:"";display:block}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list:after{content:"";display:table;clear:both}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type{-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;user-select:none;-ms-box-sizing:border-box;box-sizing:border-box;width:25%;padding:0 5px;margin-bottom:10px;float:left}@media (max-width:1280px){.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type{width:33.333%}}@media (max-width:960px){.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type{width:50%}}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type h3{margin:0 0 7px;padding:0;color:#222;font-size:14px}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type small{font-size:11px;min-height:2.5em;line-height:1.25em;display:block;overflow:hidden;color:#888}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type .widget-icon{font-size:20px;width:20px;height:20px;color:#666;float:left;margin:-1px .5em 0 0}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type-wrapper{border:1px solid #ccc;cursor:pointer;padding:10px;background:#f8f8f8;box-shadow:0 1px 2px rgba(0,0,0,.075)}.so-panels-dialog.so-panels-dialog-add-widget .widget-type-list .widget-type-wrapper:hover{border:1px solid #bbb;background:#fff;box-shadow:0 2px 2px rgba(0,0,0,.075)}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form{zoom:1;padding:8px;border:1px solid #ccc;margin-bottom:20px;background:#f3f3f3}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form:before{content:"";display:block}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form:after{content:"";display:table;clear:both}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form button,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form input,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form select,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form span,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form strong{display:inline;margin:1px 5px;outline:none;box-shadow:none}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form button{margin-top:2px}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-set-form label{display:inline}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview{margin:0 -6px;height:360px;position:relative;white-space:nowrap}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell-in,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell-weight{-ms-box-sizing:border-box;box-sizing:border-box}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell{display:inline-block;position:relative;padding:0 6px;cursor:pointer}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in{border:1px solid #bcccd2;min-height:360px;background:#e4eff4;position:relative}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in.cell-selected{background:#cae7f4 url(images/cell-selected.png) repeat;border-color:#9abcc7;box-shadow:0 0 5px rgba(0,0,0,.2)}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input{position:absolute;font-size:17px;font-weight:700;top:50%;left:50%;width:80px;text-align:center;color:#5e6d72;margin:-.95em 0 0 -40px;padding:10px 0;border:1px solid transparent;line-height:1.4em!important;overflow:hidden;cursor:pointer}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input:after,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight:after{content:"%"}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input:hover,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight:hover{background:#f6f6f6;border:1px solid #d0d0d0}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .preview-cell-in .preview-cell-weight-input{background:#f6f6f6;border:1px solid #d0d0d0;box-shadow:none}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .resize-handle{z-index:100;position:absolute;top:0;width:12px;left:-6px;cursor:col-resize;background:#e5f4fb;height:360px;transition:background .15s ease-in-out 0s}.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .resize-handle.ui-draggable-dragging,.so-panels-dialog.so-panels-dialog-row-edit .so-content .row-preview .preview-cell .resize-handle:hover{background:#b7e0f1}.so-panels-dialog.so-panels-dialog-history .so-left-sidebar{padding:0}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry{padding:10px;background:#f8f8f8;cursor:pointer;border-bottom:1px solid #ccc}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry h3{margin:0 0 .6em;font-size:12px;font-weight:700;color:#444;line-height:1em}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry .timesince{color:#999;font-size:11px;line-height:1em}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry:hover{background:#f0f0f0}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry.so-selected{background:#eee}.so-panels-dialog.so-panels-dialog-history .history-entries .history-entry .count{color:#999}.so-panels-dialog.so-panels-dialog-history .so-content{padding:0;overflow-y:hidden}.so-panels-dialog.so-panels-dialog-history .so-content form.history-form{display:none}.so-panels-dialog.so-panels-dialog-history .so-content iframe.siteorigin-panels-history-iframe{width:100%;height:100%}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content{padding-left:10px;padding-right:10px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-error-message{font-size:14px;border:1px solid #ccc;background:#f8f8f8;padding:15px 20px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .export-file-ui{padding:5px 15px;text-align:right}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui{padding:15px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .drag-drop-message{display:none}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui.has-drag-drop .drag-drop-message{display:block}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui p.drag-drop-message{font-size:1em;margin-bottom:0}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .drag-upload-area{display:block;-ms-box-sizing:border-box;box-sizing:border-box;padding:50px 30px;border:4px dashed #e0e0e0;text-align:center;transition:all .25s ease 0s}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .drag-upload-area.file-dragover{background-color:#f2f9fc;border-color:#0074a2}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .progress-bar{display:none;padding:2px;border:2px solid #2181b1;border-radius:2px;margin-top:20px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .progress-bar .progress-percent{height:14px;background-color:#358ebe;border-radius:1px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .import-upload-ui .file-browse-button{padding:12px 30px;height:auto}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-browse{background:#f3f3f3;border-bottom:1px solid #d0d0d0;margin:-15px -10px 15px;padding:15px;font-weight:700}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items-wrapper{display:flex;flex-flow:row wrap}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-no-results{margin:20px 0;padding:0 5px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{-ms-box-sizing:border-box;box-sizing:border-box;padding:6px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-directory-item-wrapper{display:flex;flex-flow:column nowrap;height:100%;box-sizing:border-box;padding:15px 10px;background:#f7f7f7;border:1px solid #d0d0d0;box-shadow:0 1px 1px rgba(0,0,0,.1)}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-title{font-size:15px;margin:0 0 13px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot{flex:3 auto;margin-bottom:10px;cursor:pointer}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot.so-loading{background-image:url(images/wpspin_light.gif);background-position:50%;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot.so-loading{background-image:url(images/wpspin_light-2x.gif);background-size:16px 16px}}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot img{display:block;width:100%;height:auto}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-screenshot .so-screenshot-wrapper{display:block;min-height:40px;background:gray;border:1px solid #d0d0d0}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-description{flex:1 auto;font-size:.9em;color:#666;margin-bottom:10px;max-height:60px;overflow:hidden}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-bottom{flex:1 auto;position:relative;max-height:50px;margin:10px -10px -15px;background:#fcfcfc;border-top:1px solid #d0d0d0}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-bottom .so-title{margin:0;padding:16px 10px;cursor:pointer;overflow:hidden;white-space:nowrap}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item .so-bottom .so-buttons{position:absolute;z-index:2;top:0;bottom:0;right:0;height:100%;visibility:hidden;-ms-box-sizing:border-box;box-sizing:border-box;padding:11px 10px 10px 15px;border-left:1px solid #d0d0d0;background:#f6f6f6;box-shadow:-1px 0 1px rgba(0,0,0,.05)}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item:hover .so-buttons{visibility:visible}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected{background-color:#e5f4fa}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-directory-item-wrapper{background:#deeef4;border-color:#9abcc7}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-bottom{background:#f8fdff;border-color:#bcccd2}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-bottom .so-title{color:#3e484c}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item.selected .so-bottom .so-buttons{background:#eaf2f6;border-color:#bcccd2}@media only screen and (min-width:1680px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:20%}}@media only screen and (max-width:1679px) and (min-width:1280px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:25%}}@media only screen and (max-width:1279px) and (min-width:1140px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:33.333%}}@media only screen and (max-width:1139px){.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-items .so-directory-item{width:50%}}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-pages{margin-top:15px;padding:0 5px}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-content .so-directory-pages .button-disabled{pointer-events:none}.so-panels-dialog.so-panels-dialog-prebuilt-layouts .so-toolbar .so-buttons select.so-layout-position{vertical-align:baseline}.so-panels-dialog .so-visual-styles{margin:-15px;height:100%}.so-panels-dialog .so-visual-styles h3{line-height:1em;margin:0;padding:20px 15px;border-bottom:1px solid #ddd}.so-panels-dialog .so-visual-styles .style-section-head{background:#fff;padding:15px 10px;border-bottom:1px solid #ddd;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.so-panels-dialog .so-visual-styles .style-section-head h4{margin:0}.so-panels-dialog .so-visual-styles .style-section-fields{padding:15px;border-bottom:1px solid #ddd;background:#f7f7f7}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper{margin-bottom:20px}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper:last-child{margin-bottom:0}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper>label{font-weight:700;display:block;margin-bottom:3px}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field{zoom:1}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field:before{content:"";display:block}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field:after{content:"";display:table;clear:both}.so-panels-dialog .so-visual-styles .style-section-fields .style-field-wrapper .style-field input{font-size:12px}.so-panels-dialog .so-visual-styles .style-input-wrapper{zoom:1}.so-panels-dialog .so-visual-styles .style-input-wrapper:before{content:"";display:block}.so-panels-dialog .so-visual-styles .style-input-wrapper:after{content:"";display:table;clear:both}.so-panels-dialog .so-visual-styles .style-input-wrapper input{max-width:100%}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-inputs{overflow:auto;margin:0 -3px 4px}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper{box-sizing:border-box;float:left;width:25%;padding:0 3px}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value{border-width:1px;display:block;max-width:100%}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-top{box-shadow:inset 0 2px 1px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-right{box-shadow:inset -3px 0 2px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-bottom{box-shadow:inset 0 -2px 1px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-wrapper .measurement-value.measurement-left{box-shadow:inset 3px 0 2px rgba(0,115,170,.35)}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-unit-multiple{width:100%;display:block}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-unit-single{float:right;width:25%}.so-panels-dialog .so-visual-styles .style-field-measurement .measurement-value-single{float:left;width:72%}.so-panels-dialog .so-visual-styles .style-field-image .so-image-selector{display:inline-block;background-color:#f7f7f7;border:1px solid #ccc;height:28px;float:left;border-radius:3px;cursor:pointer;box-shadow:inset 0 1px #fff}.so-panels-dialog .so-visual-styles .style-field-image .so-image-selector .current-image{height:28px;width:28px;float:left;background:#fff;border-right:1px solid #ccc;background-size:cover;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px;border-top-left-radius:3px;background-clip:padding-box}.so-panels-dialog .so-visual-styles .style-field-image .so-image-selector .select-image{font-size:12px;line-height:28px;float:left;padding:0 8px;color:#555}.so-panels-dialog .so-visual-styles .style-field-image .remove-image{font-size:12px;margin-top:4px;margin-left:15px;display:inline-block;float:left;color:#666;text-decoration:none}.so-panels-dialog .so-visual-styles .style-field-image .remove-image.hidden{display:none}.so-panels-dialog .so-visual-styles .style-field-image .image-fallback{margin-top:4px}.so-panels-dialog .so-visual-styles .style-field-checkbox label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.so-panels-dialog .so-visual-styles .so-field-code{font-size:12px;font-family:Courier\ 10 Pitch,Courier,monospace}.so-panels-dialog .so-visual-styles .so-description{color:#999;font-size:12px;margin-top:5px;margin-bottom:0;font-style:italic;clear:both}.so-panels-dialog .so-visual-styles.so-cell-styles{margin-top:15px}.so-panels-dialog .so-content .siteorigin-panels-builder .so-builder-toolbar{border:1px solid #dedede}.so-panels-dialog .so-content .siteorigin-panels-builder .so-rows-container{padding:20px 0 0}.so-panels-dialog .so-content .siteorigin-panels-builder .so-panels-welcome-message{padding-left:0;padding-right:0}.so-panels-dialog .so-dropdown-wrapper input[type=button].button-primary{width:125px;height:28px}.so-panels-dialog .so-dropdown-wrapper .so-dropdown-links-wrapper{display:block;z-index:11;bottom:28px;width:125px}.so-panels-dialog .so-dropdown-wrapper .so-dropdown-links-wrapper.hidden{display:none}.wp-customizer .so-panels-dialog .so-content,.wp-customizer .so-panels-dialog .so-left-sidebar,.wp-customizer .so-panels-dialog .so-overlay,.wp-customizer .so-panels-dialog .so-right-sidebar,.wp-customizer .so-panels-dialog .so-title-bar,.wp-customizer .so-panels-dialog .so-toolbar{z-index:500001}.wp-customizer .so-panels-dialog .so-toolbar{z-index:500002}.so-panels-live-editor>div{position:fixed;z-index:99999;-ms-box-sizing:border-box;box-sizing:border-box}.so-panels-live-editor .live-editor-form{display:none}.so-panels-live-editor .live-editor-collapse{position:fixed;top:18px;left:10px;line-height:1em;cursor:pointer;z-index:100000}.so-panels-live-editor .live-editor-collapse .collapse-icon{float:left;margin:-4px 6px 0 0;border-radius:50%;width:20px;height:20px;overflow:hidden;transition:all .25s ease 0s}.so-panels-live-editor .live-editor-collapse .collapse-icon:before{display:block;content:"\f148";background:#eee;font:normal 20px/1 dashicons;speak:none;padding:0;-webkit-font-smoothing:antialiased}.so-panels-live-editor .live-editor-collapse:hover{color:#0073aa}.so-panels-live-editor .live-editor-collapse:hover .collapse-icon{box-shadow:0 0 3px rgba(30,140,190,.8)}.so-panels-live-editor .so-sidebar-tools{background:#eee;border-bottom:1px solid #ddd;border-right:1px solid #d0d0d0;top:0;left:0;height:46px;width:360px}.so-panels-live-editor .so-sidebar-tools .live-editor-close{margin:9px 10px 0 15px;float:right}.so-panels-live-editor .so-sidebar-tools .live-editor-mode{float:right;margin:9px 4px 0 0}.so-panels-live-editor .so-sidebar-tools .live-editor-mode .dashicons{font-size:30px;width:30px;height:30px;cursor:pointer;color:#999}.so-panels-live-editor .so-sidebar-tools .live-editor-mode .dashicons:hover{color:#666}.so-panels-live-editor .so-sidebar-tools .live-editor-mode.so-active .dashicons,.so-panels-live-editor .so-sidebar-tools .live-editor-mode.so-active .dashicons:hover{color:#0073aa}.so-panels-live-editor .so-sidebar{top:46px;left:0;bottom:0;width:360px;overflow-y:auto;background:#f7f7f7;border-right:1px solid #d0d0d0}.so-panels-live-editor .so-sidebar .siteorigin-panels-builder .so-rows-container{padding:10px 10px 0!important}.so-panels-live-editor .so-preview{top:0;right:0;bottom:0;left:360px;background-color:#191e23}.so-panels-live-editor .so-preview form{display:none}.so-panels-live-editor .so-preview iframe{float:left;width:100%;height:100%;margin:0 auto}.so-panels-live-editor .so-preview-overlay{display:none;opacity:.975;top:0;right:0;bottom:0;left:360px;background-color:#f4f4f4;cursor:wait}.so-panels-live-editor .so-preview-overlay .so-loading-container{opacity:.6;position:absolute;top:50%;width:200px;padding:2px;border-radius:5px;left:50%;margin-left:-104px;margin-top:-9px;border:2px solid #aaa}.so-panels-live-editor .so-preview-overlay .so-loading-container .so-loading-bar{width:50%;border-radius:3px;height:10px;background:#aaa}.so-panels-live-editor.so-collapsed .live-editor-collapse .collapse-icon{transform:rotate(180deg)}.so-panels-live-editor.so-collapsed .so-sidebar,.so-panels-live-editor.so-collapsed .so-sidebar-tools{display:none}.so-panels-live-editor.so-collapsed .so-preview,.so-panels-live-editor.so-collapsed .so-preview-overlay{left:0}.so-panels-live-editor.live-editor-mobile-mode .so-preview iframe{max-width:480px;max-height:640px;position:absolute;top:50%;left:50%;margin-left:-240px;margin-top:-320px}@media (max-width:840px){.so-panels-live-editor.live-editor-mobile-mode .so-preview iframe{position:static;margin-left:0;margin-top:0}}@media (max-height:640px){.so-panels-live-editor.live-editor-mobile-mode .so-preview iframe{position:static;margin-left:0;margin-top:0}}.so-panels-live-editor.live-editor-tablet-mode .so-preview iframe{position:absolute;max-width:768px;top:0;left:50%;margin-left:-384px}@media (max-width:1128px){.so-panels-live-editor.live-editor-tablet-mode .so-preview iframe{position:static;margin-left:0;margin-top:0}}.so-panels-loading{background-image:url(images/wpspin_light.gif);background-position:50%;background-repeat:no-repeat}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.so-panels-loading{background-image:url(images/wpspin_light-2x.gif);background-size:16px 16px}}#panels-home-page .switch{margin:0 10px 0 0;float:left;position:relative;display:inline-block;vertical-align:top;width:68px;height:24px;padding:3px;background-color:#fff;border-radius:24px;box-shadow:inset 0 -1px #fff,inset 0 1px 1px rgba(0,0,0,.05);cursor:pointer;background-image:linear-gradient(180deg,#eee,#fff 25px)}#panels-home-page .switch .switch-input{position:absolute;top:0;left:0;opacity:0}#panels-home-page .switch .switch-label{position:relative;display:block;height:inherit;font-size:12px;text-transform:uppercase;background:#eceeef;border-radius:inherit;box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);transition:.15s ease-out;transition-property:opacity background}#panels-home-page .switch .switch-label:after,#panels-home-page .switch .switch-label:before{position:absolute;top:50%;margin-top:-.5em;line-height:1;transition:inherit}#panels-home-page .switch .switch-label:before{content:attr(data-off);right:11px;color:#aaa;text-shadow:0 1px hsla(0,0%,100%,.5)}#panels-home-page .switch .switch-label:after{content:attr(data-on);left:13px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}#panels-home-page .switch .switch-input:checked~.switch-label{background:#47a8d8;box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}#panels-home-page .switch .switch-input:checked~.switch-label:before{opacity:0}#panels-home-page .switch .switch-input:checked~.switch-label:after{opacity:1}#panels-home-page .switch .switch-handle{position:absolute;top:4px;left:4px;width:22px;height:22px;background:#fff;border-radius:12px;box-shadow:1px 1px 5px rgba(0,0,0,.2);background-image:linear-gradient(180deg,#fff 40%,#f0f0f0);transition:left .15s ease-out}#panels-home-page .switch .switch-handle:before{content:"";position:absolute;top:50%;left:50%;margin:-7px 0 0 -7px;width:14px;height:14px;background:#f9f9f9;border-radius:7px;box-shadow:inset 0 1px rgba(0,0,0,.02);background-image:linear-gradient(180deg,#eee,#fff)}#panels-home-page .switch .switch-input:checked~.switch-handle{left:48px;box-shadow:-1px 1px 5px rgba(0,0,0,.2)}#panels-home-page .switch .switch-green>.switch-input:checked~.switch-label{background:#4fb845}#panels-home-page #panels-view-as-page{display:inline-block;margin-left:50px}.siteorigin-panels-builder-form .siteorigin-panels-builder{border:1px solid #d0d0d0;background-color:#fff;margin:10px 0}.siteorigin-panels-builder-form .siteorigin-panels-builder.so-panels-loading{min-height:150px}.siteorigin-page-builder-widget .siteorigin-panels-display-builder{display:inline-block!important}.siteorigin-page-builder-widget .siteorigin-panels-no-builder{display:none!important}.so-panels-contextual-menu{border:1px solid silver;background:#f9f9f9;box-shadow:0 1px 1px rgba(0,0,0,.04);outline:none;border-radius:2px;position:absolute;width:180px;top:20px;left:20px;z-index:999999;display:none;overflow-y:auto}.so-panels-contextual-menu,.so-panels-contextual-menu *{font-size:12px}.so-panels-contextual-menu .so-section{border-bottom:1px solid silver}.so-panels-contextual-menu .so-section:last-child{border-bottom:none}.so-panels-contextual-menu .so-section h5{margin:0 0 5px;padding:8px 10px 5px;border-bottom:1px solid #d0d0d0;background:#f6f6f6}.so-panels-contextual-menu .so-section .so-search-wrapper{margin:-5px 0 5px;border-bottom:1px solid #d0d0d0;background:#f4f4f4}.so-panels-contextual-menu .so-section .so-search-wrapper input[type=text]{box-sizing:border-box;display:block;width:100%;margin:0;border:none;padding:5px 10px;background:#fbfbfb}.so-panels-contextual-menu .so-section .so-search-wrapper input[type=text]:active,.so-panels-contextual-menu .so-section .so-search-wrapper input[type=text]:focus{border:none;box-shadow:none;background:#fff}.so-panels-contextual-menu .so-section ul{margin:5px 0 0;padding:0 0 5px}.so-panels-contextual-menu .so-section ul li{cursor:pointer;margin:0;padding:4px 10px;line-height:1em}.so-panels-contextual-menu .so-section ul li.so-active,.so-panels-contextual-menu .so-section ul li:hover{background:#f0f0f0;color:#444}.so-panels-contextual-menu .so-section ul li.so-confirm{color:#a00}.so-panels-contextual-menu .so-section ul li.so-confirm.so-active,.so-panels-contextual-menu .so-section ul li.so-confirm:hover{background:#a00;color:#fff}.so-panels-contextual-menu .so-section ul li .dashicons{width:12px;height:12px;font-size:12px;margin:0;float:right;line-height:12px}.so-panels-contextual-menu .so-section .so-no-results{padding:0 10px 5px;display:none;font-style:italic}.so-dropdown-wrapper{position:relative;float:right}.so-dropdown-wrapper .so-dropdown-links-wrapper{position:absolute;padding:6px 0 0}.so-dropdown-wrapper .so-dropdown-links-wrapper ul{margin:0;border:1px solid silver;background:#f9f9f9;border-radius:2px;padding:4px 0;box-shadow:0 2px 2px rgba(0,0,0,.1)}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li{margin:0}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li:first-child{border-top-width:1px}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li a{display:block;padding:2px 8px;text-decoration:none;color:#666;font-size:11px;cursor:pointer;outline:0!important;box-shadow:none}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li a:hover{background:#f0f0f0;color:#444}.so-dropdown-wrapper .so-dropdown-links-wrapper ul li a .dashicons{font-size:16px;margin:0;float:right;line-height:16px}.so-dropdown-wrapper .so-dropdown-links-wrapper .so-pointer{width:12px;height:6px;position:absolute;z-index:12;background:url(images/dropdown-pointer.png);background-size:12px 6px;top:1px;right:18px}.so-panels-icon{font-family:siteorigin-panels-icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.so-panels-icon.so-panels-icon-add-row:before{content:"\e900"}.so-panels-icon.so-panels-icon-add-widget:before{content:"\e901"}.so-panels-icon.so-panels-icon-addons:before{content:"\e902"}.so-panels-icon.so-panels-icon-history:before{content:"\e903"}.so-panels-icon.so-panels-icon-layouts:before{content:"\e904"}.so-panels-icon.so-panels-icon-learn:before{content:"\e905"}.so-panels-icon.so-panels-icon-live-editor:before{content:"\e906"}.so-panels-icon.so-panels-icon-move:before{content:"\e907"}.so-panels-icon.so-panels-icon-settings:before{content:"\e908"}#post-status-info.for-siteorigin-panels{margin-top:-21px!important}
inc/admin-layouts.php CHANGED
@@ -90,17 +90,33 @@ class SiteOrigin_Panels_Admin_Layouts {
90
  }
91
 
92
  foreach ( $files as $file ) {
93
- // get file mime type
94
- $mime_type = mime_content_type( $file );
95
 
96
- // skip non text files.
97
- if ( strpos( $mime_type, 'text/' ) !== 0 ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  continue;
99
  }
100
 
101
  // get file contents
102
  $file_contents = file_get_contents( $file );
103
 
 
 
 
 
 
104
  // json decode
105
  $panels_data = json_decode( $file_contents, true );
106
 
90
  }
91
 
92
  foreach ( $files as $file ) {
 
 
93
 
94
+ if ( function_exists( 'mime_content_type' ) ) {
95
+ // get file mime type
96
+ $mime_type = mime_content_type( $file );
97
+
98
+ // Valid if text files.
99
+ $valid_file_type = strpos( $mime_type, 'text/' ) === 0;
100
+ } else {
101
+ // If `mime_content_type` isn't available, just check file extension.
102
+ $ext = pathinfo( $file, PATHINFO_EXTENSION );
103
+
104
+ // skip files which don't have a `.json` extension.
105
+ $valid_file_type = ! empty( $ext ) && $ext === 'json';
106
+ }
107
+
108
+ if ( ! $valid_file_type ) {
109
  continue;
110
  }
111
 
112
  // get file contents
113
  $file_contents = file_get_contents( $file );
114
 
115
+ // skip if file_get_contents fails
116
+ if ( $file_contents === false ) {
117
+ continue;
118
+ }
119
+
120
  // json decode
121
  $panels_data = json_decode( $file_contents, true );
122
 
inc/admin.php CHANGED
@@ -433,6 +433,9 @@ class SiteOrigin_Panels_Admin {
433
  'prebuiltDefaultScreenshot' => siteorigin_panels_url( 'css/images/prebuilt-default.png' ),
434
  'loadOnAttach' => siteorigin_panels_setting( 'load-on-attach' ),
435
  'siteoriginWidgetRegex' => str_replace( '*+', '*', get_shortcode_regex( array( 'siteorigin_widget' ) ) ),
 
 
 
436
  ) );
437
 
438
  $js_widgets = array();
@@ -700,6 +703,20 @@ class SiteOrigin_Panels_Admin {
700
 
701
  // Other plugins can manipulate the list of widgets. Possibly to add recommended widgets
702
  $widgets = apply_filters( 'siteorigin_panels_widgets', $widgets );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
703
 
704
  // Sort the widgets alphabetically
705
  uasort( $widgets, array( $this, 'widgets_sorter' ) );
@@ -908,7 +925,17 @@ class SiteOrigin_Panels_Admin {
908
  // Add all the information fields
909
  return $form;
910
  }
911
-
 
 
 
 
 
 
 
 
 
 
912
  function is_core_js_widget( $widget ) {
913
  $js_widgets = array(
914
  'WP_Widget_Custom_HTML',
@@ -969,13 +996,21 @@ class SiteOrigin_Panels_Admin {
969
  * Display a widget form with the provided data
970
  */
971
  function action_widget_form() {
972
- if ( empty( $_REQUEST['widget'] ) ) {
973
- wp_die();
974
- }
975
  if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'panels_action' ) ) {
976
- wp_die();
 
 
 
 
977
  }
978
-
 
 
 
 
 
 
 
979
  $request = array_map( 'stripslashes_deep', $_REQUEST );
980
 
981
  $widget_class = $request['widget'];
433
  'prebuiltDefaultScreenshot' => siteorigin_panels_url( 'css/images/prebuilt-default.png' ),
434
  'loadOnAttach' => siteorigin_panels_setting( 'load-on-attach' ),
435
  'siteoriginWidgetRegex' => str_replace( '*+', '*', get_shortcode_regex( array( 'siteorigin_widget' ) ) ),
436
+ 'forms' => array(
437
+ 'loadingFailed' => __( 'Unknown error. Failed to load the form. Please check your internet connection, contact your web site administrator, or try again later.', 'siteorigin-panels' ),
438
+ )
439
  ) );
440
 
441
  $js_widgets = array();
703
 
704
  // Other plugins can manipulate the list of widgets. Possibly to add recommended widgets
705
  $widgets = apply_filters( 'siteorigin_panels_widgets', $widgets );
706
+
707
+ // Exclude these temporarily, as they won't work until we have a reliable way to enqueue their admin form scripts.
708
+ $to_exclude = array(
709
+ 'Jetpack_Gallery_Widget',
710
+ 'WPCOM_Widget_GooglePlus_Badge',
711
+ 'Jetpack_Widget_Social_Icons',
712
+ 'Jetpack_Twitter_Timeline_Widget'
713
+ );
714
+
715
+ foreach ( $to_exclude as $widget_class ) {
716
+ if ( in_array( $widget_class, $widgets ) ) {
717
+ unset( $widgets[ $widget_class ] );
718
+ }
719
+ }
720
 
721
  // Sort the widgets alphabetically
722
  uasort( $widgets, array( $this, 'widgets_sorter' ) );
925
  // Add all the information fields
926
  return $form;
927
  }
928
+
929
+ /**
930
+ * Checks whether a widget is considered to be a JS widget. I.e. it needs to have scripts and/or styles enqueued for
931
+ * it's admin form to work.
932
+ *
933
+ * Can remove the whitelist of core widgets when all widgets are following a similar pattern.
934
+ *
935
+ * @param $widget The widget to be tested.
936
+ *
937
+ * @return bool Whether or not the widget is considered a JS widget.
938
+ */
939
  function is_core_js_widget( $widget ) {
940
  $js_widgets = array(
941
  'WP_Widget_Custom_HTML',
996
  * Display a widget form with the provided data
997
  */
998
  function action_widget_form() {
 
 
 
999
  if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'panels_action' ) ) {
1000
+ wp_die(
1001
+ __( 'The supplied nonce is invalid.', 'siteorigin-panels' ),
1002
+ __( 'Invalid nonce.', 'siteorigin-panels' ),
1003
+ 403
1004
+ );
1005
  }
1006
+ if ( empty( $_REQUEST['widget'] ) ) {
1007
+ wp_die(
1008
+ __( 'Please specify the type of widget form to be rendered.', 'siteorigin-panels' ),
1009
+ __( 'Missing widget type.', 'siteorigin-panels' ),
1010
+ 400
1011
+ );
1012
+ }
1013
+
1014
  $request = array_map( 'stripslashes_deep', $_REQUEST );
1015
 
1016
  $widget_class = $request['widget'];
inc/renderer.php CHANGED
@@ -95,6 +95,35 @@ class SiteOrigin_Panels_Renderer {
95
  str_replace( ',', '.', $calc_width ),
96
  )
97
  ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  }
99
 
100
  if (
@@ -240,6 +269,10 @@ class SiteOrigin_Panels_Renderer {
240
 
241
  if ( empty( $post_id ) ) {
242
  $post_id = get_the_ID();
 
 
 
 
243
  }
244
 
245
  global $siteorigin_panels_current_post;
@@ -409,6 +442,10 @@ class SiteOrigin_Panels_Renderer {
409
 
410
  if ( empty( $post_id ) ) {
411
  $post_id = get_the_ID();
 
 
 
 
412
  }
413
 
414
  $classes = array( 'so-panel' );
95
  str_replace( ',', '.', $calc_width ),
96
  )
97
  ) );
98
+
99
+ // Add in any widget specific CSS
100
+ foreach ( $cell['widgets'] as $wi => $widget ) {
101
+ $widget_style_data = ! empty( $widget['panels_info']['style'] ) ? $widget['panels_info']['style'] : array();
102
+ $widget_css = apply_filters(
103
+ 'siteorigin_panels_css_widget_css',
104
+ array(),
105
+ $widget_style_data,
106
+ $row,
107
+ $ri,
108
+ $cell,
109
+ $ci - 1,
110
+ $widget,
111
+ $wi,
112
+ $panels_data,
113
+ $post_id
114
+ );
115
+
116
+ $css->add_widget_css(
117
+ $post_id,
118
+ $ri,
119
+ $ci,
120
+ $wi,
121
+ '',
122
+ $widget_css,
123
+ 1920,
124
+ true
125
+ );
126
+ }
127
  }
128
 
129
  if (
269
 
270
  if ( empty( $post_id ) ) {
271
  $post_id = get_the_ID();
272
+
273
+ if ( class_exists( 'WooCommerce' ) && is_shop() ) {
274
+ $post_id = wc_get_page_id( 'shop' );
275
+ }
276
  }
277
 
278
  global $siteorigin_panels_current_post;
442
 
443
  if ( empty( $post_id ) ) {
444
  $post_id = get_the_ID();
445
+
446
+ if ( class_exists( 'WooCommerce' ) && is_shop() ) {
447
+ $post_id = wc_get_page_id( 'shop' );
448
+ }
449
  }
450
 
451
  $classes = array( 'so-panel' );
inc/styles-admin.php CHANGED
@@ -1,469 +1,493 @@
1
- <?php
2
-
3
- class SiteOrigin_Panels_Styles_Admin {
4
-
5
- function __construct() {
6
- add_action( 'wp_ajax_so_panels_style_form', array( $this, 'action_style_form' ) );
7
-
8
- add_filter( 'siteorigin_panels_data', array( $this, 'convert_data' ) );
9
- add_filter( 'siteorigin_panels_prebuilt_layout', array( $this, 'convert_data' ) );
10
- }
11
-
12
- public static function single() {
13
- static $single;
14
- return empty( $single ) ? $single = new self() : $single;
15
- }
16
-
17
- /**
18
- * Admin action for handling fetching the style fields
19
- */
20
- function action_style_form() {
21
- $type = $_REQUEST['type'];
22
- if ( ! in_array( $type, array( 'row', 'cell', 'widget' ) ) ) {
23
- exit();
24
- }
25
- if ( empty( $_GET['_panelsnonce'] ) || ! wp_verify_nonce( $_GET['_panelsnonce'], 'panels_action' ) ) {
26
- exit();
27
- }
28
-
29
- $current = isset( $_REQUEST['style'] ) ? $_REQUEST['style'] : array();
30
- $post_id = empty( $_REQUEST['postId'] ) ? 0 : $_REQUEST['postId'];
31
-
32
- $args = ! empty( $_POST['args'] ) ? json_decode( stripslashes( $_POST['args'] ), true ) : array();
33
-
34
- switch ( $type ) {
35
- case 'row':
36
- $this->render_styles_fields( 'row', '<h3>' . __( 'Row Styles', 'siteorigin-panels' ) . '</h3>', '', $current, $post_id, $args );
37
- break;
38
-
39
- case 'cell':
40
- $cell_number = isset( $args['index'] ) ? ' ' . ( intval( $args['index'] ) + 1 ) : '';
41
- $this->render_styles_fields( 'cell', '<h3>' . sprintf( __( 'Cell%s Styles', 'siteorigin-panels' ), $cell_number ) . '</h3>', '', $current, $post_id, $args );
42
- break;
43
-
44
- case 'widget':
45
- $this->render_styles_fields( 'widget', '<h3>' . __( 'Widget Styles', 'siteorigin-panels' ) . '</h3>', '', $current, $post_id, $args );
46
- break;
47
- }
48
-
49
- wp_die();
50
- }
51
-
52
- /**
53
- * Render all the style fields
54
- *
55
- * @param $section
56
- * @param string $before
57
- * @param string $after
58
- * @param array $current
59
- * @param int $post_id
60
- * @param array $args Arguments passed by the builder
61
- *
62
- * @return bool
63
- */
64
- function render_styles_fields( $section, $before = '', $after = '', $current = array(), $post_id = 0, $args = array() ) {
65
- $fields = array();
66
- $fields = apply_filters( 'siteorigin_panels_' . $section . '_style_fields', $fields, $post_id, $args );
67
- $fields = apply_filters( 'siteorigin_panels_general_style_fields', $fields, $post_id, $args );
68
- if ( empty( $fields ) ) {
69
- return false;
70
- }
71
-
72
- $groups = array(
73
- 'attributes' => array(
74
- 'name' => __( 'Attributes', 'siteorigin-panels' ),
75
- 'priority' => 5
76
- ),
77
- 'layout' => array(
78
- 'name' => __( 'Layout', 'siteorigin-panels' ),
79
- 'priority' => 10
80
- ),
81
- 'design' => array(
82
- 'name' => __( 'Design', 'siteorigin-panels' ),
83
- 'priority' => 15
84
- ),
85
- );
86
-
87
- // Check if we need a default group
88
- foreach ( $fields as $field_id => $field ) {
89
- if ( empty( $field['group'] ) || $field['group'] == 'theme' ) {
90
- if ( empty( $groups['theme'] ) ) {
91
- $groups['theme'] = array(
92
- 'name' => __( 'Theme', 'siteorigin-panels' ),
93
- 'priority' => 10
94
- );
95
- }
96
- $fields[ $field_id ]['group'] = 'theme';
97
- }
98
- }
99
- $groups = apply_filters( 'siteorigin_panels_' . $section . '_style_groups', $groups, $post_id, $args );
100
- $groups = apply_filters( 'siteorigin_panels_general_style_groups', $groups, $post_id, $args );
101
-
102
- // Sort the style fields and groups by priority
103
- uasort( $fields, array( $this, 'sort_fields' ) );
104
- uasort( $groups, array( $this, 'sort_fields' ) );
105
-
106
- echo $before;
107
-
108
- $group_counts = array();
109
- foreach ( $fields as $field_id => $field ) {
110
- if ( empty( $group_counts[ $field['group'] ] ) ) {
111
- $group_counts[ $field['group'] ] = 0;
112
- }
113
- $group_counts[ $field['group'] ] ++;
114
- }
115
-
116
- foreach ( $groups as $group_id => $group ) {
117
-
118
- if ( empty( $group_counts[ $group_id ] ) ) {
119
- continue;
120
- }
121
-
122
- ?>
123
- <div class="style-section-wrapper">
124
- <div class="style-section-head">
125
- <h4><?php echo esc_html( $group['name'] ) ?></h4>
126
- </div>
127
- <div class="style-section-fields" style="display: none">
128
- <?php
129
- foreach ( $fields as $field_id => $field ) {
130
- $default = isset( $field[ 'default' ] ) ? $field[ 'default' ] : false;
131
-
132
- if ( $field['group'] == $group_id ) {
133
- ?>
134
- <div class="style-field-wrapper">
135
- <label><?php echo $field['name'] ?></label>
136
- <div
137
- class="style-field style-field-<?php echo sanitize_html_class( $field['type'] ) ?>">
138
- <?php $this->render_style_field( $field, isset( $current[ $field_id ] ) ? $current[ $field_id ] : $default, $field_id ) ?>
139
- </div>
140
- </div>
141
- <?php
142
-
143
- }
144
-
145
- }
146
- ?>
147
- </div>
148
- </div>
149
- <?php
150
- }
151
-
152
- echo $after;
153
- }
154
-
155
- /**
156
- * Generate the style field
157
- *
158
- * @param array $field Everything needed to display the field
159
- * @param $current
160
- * @param $field_id
161
- */
162
- function render_style_field( $field, $current, $field_id ) {
163
- $field_name = 'style[' . $field_id . ']';
164
-
165
- echo '<div class="style-input-wrapper">';
166
- switch ( $field['type'] ) {
167
- case 'measurement' :
168
-
169
- if ( ! empty( $field['multiple'] ) ) {
170
- ?>
171
- <div class="measurement-inputs">
172
- <div class="measurement-wrapper">
173
- <input type="text" class="measurement-value measurement-top"
174
- placeholder="<?php _e( 'Top', 'siteorigin-panels' ) ?>"/>
175
- </div>
176
- <div class="measurement-wrapper">
177
- <input type="text" class="measurement-value measurement-right"
178
- placeholder="<?php _e( 'Right', 'siteorigin-panels' ) ?>"/>
179
- </div>
180
- <div class="measurement-wrapper">
181
- <input type="text" class="measurement-value measurement-bottom"
182
- placeholder="<?php _e( 'Bottom', 'siteorigin-panels' ) ?>"/>
183
- </div>
184
- <div class="measurement-wrapper">
185
- <input type="text" class="measurement-value measurement-left"
186
- placeholder="<?php _e( 'Left', 'siteorigin-panels' ) ?>"/>
187
- </div>
188
- </div>
189
- <?php
190
- } else {
191
- ?><input type="text" class="measurement-value measurement-value-single"/><?php
192
- }
193
-
194
- ?>
195
- <select
196
- class="measurement-unit measurement-unit-<?php echo ! empty( $field['multiple'] ) ? 'multiple' : 'single' ?>">
197
- <?php foreach ( $this->measurements_list() as $measurement ): ?>
198
- <option
199
- value="<?php echo esc_html( $measurement ) ?>"><?php echo esc_html( $measurement ) ?></option>
200
- <?php endforeach ?>
201
- </select>
202
- <input type="hidden" name="<?php echo esc_attr( $field_name ) ?>"
203
- value="<?php echo esc_attr( $current ) ?>"/>
204
- <?php
205
- break;
206
-
207
- case 'color' :
208
- ?>
209
- <input type="text" name="<?php echo esc_attr( $field_name ) ?>"
210
- value="<?php echo esc_attr( $current ) ?>" class="so-wp-color-field"/>
211
- <?php
212
- break;
213
-
214
- case 'image' :
215
- $image = false;
216
- if ( ! empty( $current ) ) {
217
- $image = SiteOrigin_Panels_Styles::get_attachment_image_src( $current, 'thumbnail' );
218
- }
219
-
220
- ?>
221
- <div class="so-image-selector">
222
- <div class="current-image" <?php if ( ! empty( $image ) ) {
223
- echo 'style="background-image: url(' . esc_url( $image[0] ) . ');"';
224
- } ?>>
225
- </div>
226
-
227
- <div class="select-image">
228
- <?php _e( 'Select Image', 'siteorigin-panels' ) ?>
229
- </div>
230
- <input type="hidden" name="<?php echo esc_attr( $field_name ) ?>"
231
- value="<?php echo intval( $current ) ?>"/>
232
- </div>
233
- <a href="#" class="remove-image"><?php _e( 'Remove', 'siteorigin-panels' ) ?></a>
234
- <?php
235
- break;
236
-
237
- case 'url' :
238
- case 'text' :
239
- ?><input type="text" name="<?php echo esc_attr( $field_name ) ?>"
240
- value="<?php echo esc_attr( $current ) ?>" class="widefat" /><?php
241
- break;
242
-
243
- case 'checkbox' :
244
- $current = (bool) $current;
245
- ?>
246
- <label class="so-checkbox-label">
247
- <input type="checkbox" name="<?php echo esc_attr( $field_name ) ?>" <?php checked( $current ) ?> />
248
- <?php echo esc_html( isset( $field['label'] ) ? $field['label'] : __( 'Enabled', 'siteorigin-panels' ) ) ?>
249
- </label>
250
- <?php
251
- break;
252
-
253
- case 'select' :
254
- ?>
255
- <select name="<?php echo esc_attr( $field_name ) ?>">
256
- <?php foreach ( $field['options'] as $k => $v ) : ?>
257
- <option
258
- value="<?php echo esc_attr( $k ) ?>" <?php selected( $current, $k ) ?>><?php echo esc_html( $v ) ?></option>
259
- <?php endforeach; ?>
260
- </select>
261
- <?php
262
- break;
263
-
264
- case 'textarea' :
265
- case 'code' :
266
- ?><textarea type="text" name="<?php echo esc_attr( $field_name ) ?>"
267
- class="widefat <?php if ( $field['type'] == 'code' ) {
268
- echo 'so-field-code';
269
- } ?>" rows="4"><?php echo esc_textarea( $current ) ?></textarea><?php
270
- break;
271
- }
272
-
273
- echo '</div>';
274
-
275
- if ( ! empty( $field['description'] ) ) {
276
- ?><p class="so-description"><?php echo wp_kses_post( $field['description'] ) ?></p><?php
277
- }
278
- }
279
-
280
- /**
281
- * Sanitize the style fields in panels_data
282
- *
283
- * @param $panels_data
284
- *
285
- * @return mixed
286
- */
287
- function sanitize_all( $panels_data ) {
288
- if ( ! empty( $panels_data['widgets'] ) ) {
289
- // Sanitize the widgets
290
- for ( $i = 0; $i < count( $panels_data['widgets'] ); $i ++ ) {
291
- if ( empty( $panels_data['widgets'][ $i ]['panels_info']['style'] ) ) {
292
- continue;
293
- }
294
- $panels_data['widgets'][ $i ]['panels_info']['style'] = $this->sanitize_style_fields( 'widget', $panels_data['widgets'][ $i ]['panels_info']['style'] );
295
- }
296
- }
297
-
298
- if ( ! empty( $panels_data['grids'] ) ) {
299
- // The rows
300
- for ( $i = 0; $i < count( $panels_data['grids'] ); $i ++ ) {
301
- if ( empty( $panels_data['grids'][ $i ]['style'] ) ) {
302
- continue;
303
- }
304
- $panels_data['grids'][ $i ]['style'] = $this->sanitize_style_fields( 'row', $panels_data['grids'][ $i ]['style'] );
305
- }
306
- }
307
-
308
- if ( ! empty( $panels_data['grid_cells'] ) ) {
309
- // And finally, the cells
310
- for ( $i = 0; $i < count( $panels_data['grid_cells'] ); $i ++ ) {
311
- if ( empty( $panels_data['grid_cells'][ $i ]['style'] ) ) {
312
- continue;
313
- }
314
- $panels_data['grid_cells'][ $i ]['style'] = $this->sanitize_style_fields( 'cell', $panels_data['grid_cells'][ $i ]['style'] );
315
- }
316
- }
317
-
318
- return $panels_data;
319
- }
320
-
321
- /**
322
- * Sanitize style fields.
323
- *
324
- * @param $section
325
- * @param $styles
326
- *
327
- * @return Sanitized styles
328
- */
329
- function sanitize_style_fields( $section, $styles ) {
330
- // Use the filter to get the fields for this section.
331
- if ( empty( $fields_cache[ $section ] ) ) {
332
- // This filter doesn't pass in the arguments $post_id and $args
333
- // Plugins looking to extend fields, should always add their fields if these are empty
334
- $fields_cache[ $section ] = array();
335
- $fields_cache[ $section ] = apply_filters( 'siteorigin_panels_' . $section . '_style_fields', $fields_cache[ $section ], false, false );
336
- $fields_cache[ $section ] = apply_filters( 'siteorigin_panels_general_style_fields', $fields_cache[ $section ], false, false );
337
- }
338
- $fields = $fields_cache[ $section ];
339
-
340
- $return = array();
341
- foreach ( $fields as $k => $field ) {
342
- // Skip this if no field type is set
343
- if ( empty( $field['type'] ) ) {
344
- continue;
345
- }
346
-
347
- // Handle the special case of a checkbox
348
- if ( $field['type'] == 'checkbox' ) {
349
- $return[ $k ] = ! empty( $styles[ $k ] ) ? true : '';
350
- continue;
351
- }
352
-
353
- // Ignore this if we don't even have a value for the style
354
- if ( ! isset( $styles[ $k ] ) || $styles[ $k ] == '' ) {
355
- continue;
356
- }
357
-
358
- switch ( $field['type'] ) {
359
- case 'color' :
360
- $color = $styles[ $k ];
361
- if ( preg_match( '|^#([A-Fa-f0-9]{3,8})$|', $color ) ) {
362
- $return[ $k ] = $color;
363
- } else {
364
- $return[ $k ] = '';
365
- }
366
- break;
367
- case 'image' :
368
- $return[ $k ] = ! empty( $styles[ $k ] ) ? sanitize_text_field( $styles[ $k ] ) : false;
369
- break;
370
- case 'url' :
371
- $return[ $k ] = esc_url_raw( $styles[ $k ] );
372
- break;
373
- case 'measurement' :
374
- $measurements = array_map( 'preg_quote', $this->measurements_list() );
375
- if ( ! empty( $field['multiple'] ) ) {
376
- if ( preg_match_all( '/(?:(-?[0-9\.,]+).*?(' . implode( '|', $measurements ) . ')+)/', $styles[ $k ], $match ) ) {
377
- $return[ $k ] = $styles[ $k ];
378
- } else {
379
- $return[ $k ] = '';
380
- }
381
- } else {
382
- if ( preg_match( '/([-?0-9\.,]+).*?(' . implode( '|', $measurements ) . ')/', $styles[ $k ], $match ) ) {
383
- $return[ $k ] = $match[1] . $match[2];
384
- } else {
385
- $return[ $k ] = '';
386
- }
387
- }
388
- break;
389
- case 'select' :
390
- if ( ! empty( $styles[ $k ] ) && in_array( $styles[ $k ], array_keys( $field['options'] ) ) ) {
391
- $return[ $k ] = $styles[ $k ];
392
- }
393
- break;
394
- default:
395
- // Just pass the value through.
396
- $return[ $k ] = $styles[ $k ];
397
- break;
398
-
399
- }
400
- }
401
-
402
- return $return;
403
- }
404
-
405
- /**
406
- * Convert the single string attribute of the grid style into an array.
407
- *
408
- * @param $panels_data
409
- *
410
- * @return mixed
411
- */
412
- function convert_data( $panels_data ) {
413
- if ( empty( $panels_data ) || empty( $panels_data['grids'] ) || ! is_array( $panels_data['grids'] ) ) {
414
- return $panels_data;
415
- }
416
-
417
- foreach( $panels_data['grids'] as & $grid ) {
418
- if ( ! is_array( $grid ) || empty( $grid ) || empty( $grid['style'] ) ) {
419
- continue;
420
- }
421
-
422
- if ( is_string( $grid['style'] ) ) {
423
- $grid['style'] = array(
424
- $grid['style']
425
- );
426
- }
427
- }
428
-
429
- return $panels_data;
430
- }
431
-
432
- /**
433
- * Get list of supported mesurements
434
- *
435
- * @return array
436
- */
437
- function measurements_list() {
438
- $measurements = array(
439
- 'px',
440
- '%',
441
- 'in',
442
- 'cm',
443
- 'mm',
444
- 'em',
445
- 'ex',
446
- 'pt',
447
- 'pc',
448
- 'rem'
449
- );
450
-
451
- // Allow themes and plugins to trim or enhance the list.
452
- return apply_filters( 'siteorigin_panels_style_get_measurements_list', $measurements );
453
- }
454
-
455
- /**
456
- * User sort function to sort by the priority key value.
457
- *
458
- * @param $a
459
- * @param $b
460
- *
461
- * @return int
462
- */
463
- static function sort_fields( $a, $b ) {
464
- return ( ( isset( $a['priority'] ) ? $a['priority'] : 10 ) > ( isset( $b['priority'] ) ? $b['priority'] : 10 ) ) ? 1 : - 1;
465
- }
466
- }
467
-
468
- // Initialise all the default styling
469
- SiteOrigin_Panels_Styles::single();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SiteOrigin_Panels_Styles_Admin {
4
+
5
+ function __construct() {
6
+ add_action( 'wp_ajax_so_panels_style_form', array( $this, 'action_style_form' ) );
7
+
8
+ add_filter( 'siteorigin_panels_data', array( $this, 'convert_data' ) );
9
+ add_filter( 'siteorigin_panels_prebuilt_layout', array( $this, 'convert_data' ) );
10
+ }
11
+
12
+ public static function single() {
13
+ static $single;
14
+ return empty( $single ) ? $single = new self() : $single;
15
+ }
16
+
17
+ /**
18
+ * Admin action for handling fetching the style fields
19
+ */
20
+ function action_style_form() {
21
+ if ( empty( $_REQUEST['_panelsnonce'] ) || ! wp_verify_nonce( $_REQUEST['_panelsnonce'], 'panels_action' ) ) {
22
+ wp_die(
23
+ __( 'The supplied nonce is invalid.', 'siteorigin-panels' ),
24
+ __( 'Invalid nonce.', 'siteorigin-panels' ),
25
+ 403
26
+ );
27
+ }
28
+
29
+ $type = $_REQUEST['type'];
30
+
31
+ if ( ! in_array( $type, array( 'row', 'cell', 'widget' ) ) ) {
32
+ wp_die(
33
+ __( 'Please specify the type of style form to be rendered.', 'siteorigin-panels' ),
34
+ __( 'Missing style form type.', 'siteorigin-panels' ),
35
+ 400
36
+ );
37
+ }
38
+
39
+ $current = isset( $_REQUEST['style'] ) ? $_REQUEST['style'] : array();
40
+ $post_id = empty( $_REQUEST['postId'] ) ? 0 : $_REQUEST['postId'];
41
+
42
+ $args = ! empty( $_POST['args'] ) ? json_decode( stripslashes( $_POST['args'] ), true ) : array();
43
+
44
+ switch ( $type ) {
45
+ case 'row':
46
+ $this->render_styles_fields( 'row', '<h3>' . __( 'Row Styles', 'siteorigin-panels' ) . '</h3>', '', $current, $post_id, $args );
47
+ break;
48
+
49
+ case 'cell':
50
+ $cell_number = isset( $args['index'] ) ? ' ' . ( intval( $args['index'] ) + 1 ) : '';
51
+ $this->render_styles_fields( 'cell', '<h3>' . sprintf( __( 'Cell%s Styles', 'siteorigin-panels' ), $cell_number ) . '</h3>', '', $current, $post_id, $args );
52
+ break;
53
+
54
+ case 'widget':
55
+ $this->render_styles_fields( 'widget', '<h3>' . __( 'Widget Styles', 'siteorigin-panels' ) . '</h3>', '', $current, $post_id, $args );
56
+ break;
57
+ }
58
+
59
+ wp_die();
60
+ }
61
+
62
+ /**
63
+ * Render all the style fields
64
+ *
65
+ * @param $section
66
+ * @param string $before
67
+ * @param string $after
68
+ * @param array $current
69
+ * @param int $post_id
70
+ * @param array $args Arguments passed by the builder
71
+ *
72
+ * @return bool
73
+ */
74
+ function render_styles_fields( $section, $before = '', $after = '', $current = array(), $post_id = 0, $args = array() ) {
75
+ $fields = array();
76
+ $fields = apply_filters( 'siteorigin_panels_' . $section . '_style_fields', $fields, $post_id, $args );
77
+ $fields = apply_filters( 'siteorigin_panels_general_style_fields', $fields, $post_id, $args );
78
+ if ( empty( $fields ) ) {
79
+ return false;
80
+ }
81
+
82
+ $groups = array(
83
+ 'attributes' => array(
84
+ 'name' => __( 'Attributes', 'siteorigin-panels' ),
85
+ 'priority' => 5
86
+ ),
87
+ 'layout' => array(
88
+ 'name' => __( 'Layout', 'siteorigin-panels' ),
89
+ 'priority' => 10
90
+ ),
91
+ 'design' => array(
92
+ 'name' => __( 'Design', 'siteorigin-panels' ),
93
+ 'priority' => 15
94
+ ),
95
+ );
96
+
97
+ // Check if we need a default group
98
+ foreach ( $fields as $field_id => $field ) {
99
+ if ( empty( $field['group'] ) || $field['group'] == 'theme' ) {
100
+ if ( empty( $groups['theme'] ) ) {
101
+ $groups['theme'] = array(
102
+ 'name' => __( 'Theme', 'siteorigin-panels' ),
103
+ 'priority' => 10
104
+ );
105
+ }
106
+ $fields[ $field_id ]['group'] = 'theme';
107
+ }
108
+ }
109
+ $groups = apply_filters( 'siteorigin_panels_' . $section . '_style_groups', $groups, $post_id, $args );
110
+ $groups = apply_filters( 'siteorigin_panels_general_style_groups', $groups, $post_id, $args );
111
+
112
+ // Sort the style fields and groups by priority
113
+ uasort( $fields, array( $this, 'sort_fields' ) );
114
+ uasort( $groups, array( $this, 'sort_fields' ) );
115
+
116
+ echo $before;
117
+
118
+ $group_counts = array();
119
+ foreach ( $fields as $field_id => $field ) {
120
+ if ( empty( $group_counts[ $field['group'] ] ) ) {
121
+ $group_counts[ $field['group'] ] = 0;
122
+ }
123
+ $group_counts[ $field['group'] ] ++;
124
+ }
125
+
126
+ foreach ( $groups as $group_id => $group ) {
127
+
128
+ if ( empty( $group_counts[ $group_id ] ) ) {
129
+ continue;
130
+ }
131
+
132
+ ?>
133
+ <div class="style-section-wrapper">
134
+ <div class="style-section-head">
135
+ <h4><?php echo esc_html( $group['name'] ) ?></h4>
136
+ </div>
137
+ <div class="style-section-fields" style="display: none">
138
+ <?php
139
+ foreach ( $fields as $field_id => $field ) {
140
+ $default = isset( $field[ 'default' ] ) ? $field[ 'default' ] : false;
141
+
142
+ if ( $field['group'] == $group_id ) {
143
+ ?>
144
+ <div class="style-field-wrapper">
145
+ <label><?php echo $field['name'] ?></label>
146
+ <div
147
+ class="style-field style-field-<?php echo sanitize_html_class( $field['type'] ) ?>">
148
+ <?php $this->render_style_field( $field, isset( $current[ $field_id ] ) ? $current[ $field_id ] : $default, $field_id, $current ) ?>
149
+ </div>
150
+ </div>
151
+ <?php
152
+
153
+ }
154
+
155
+ }
156
+ ?>
157
+ </div>
158
+ </div>
159
+ <?php
160
+ }
161
+
162
+ echo $after;
163
+ }
164
+
165
+ /**
166
+ * Generate the style field
167
+ *
168
+ * @param array $field Everything needed to display the field
169
+ * @param $current
170
+ * @param $field_id
171
+ * @param $current_styles
172
+ */
173
+ function render_style_field( $field, $current, $field_id, $current_styles ) {
174
+ $field_name = 'style[' . $field_id . ']';
175
+
176
+ echo '<div class="style-input-wrapper">';
177
+ switch ( $field['type'] ) {
178
+ case 'measurement' :
179
+
180
+ if ( ! empty( $field['multiple'] ) ) {
181
+ ?>
182
+ <div class="measurement-inputs">
183
+ <div class="measurement-wrapper">
184
+ <input type="text" class="measurement-value measurement-top"
185
+ placeholder="<?php _e( 'Top', 'siteorigin-panels' ) ?>"/>
186
+ </div>
187
+ <div class="measurement-wrapper">
188
+ <input type="text" class="measurement-value measurement-right"
189
+ placeholder="<?php _e( 'Right', 'siteorigin-panels' ) ?>"/>
190
+ </div>
191
+ <div class="measurement-wrapper">
192
+ <input type="text" class="measurement-value measurement-bottom"
193
+ placeholder="<?php _e( 'Bottom', 'siteorigin-panels' ) ?>"/>
194
+ </div>
195
+ <div class="measurement-wrapper">
196
+ <input type="text" class="measurement-value measurement-left"
197
+ placeholder="<?php _e( 'Left', 'siteorigin-panels' ) ?>"/>
198
+ </div>
199
+ </div>
200
+ <?php
201
+ } else {
202
+ ?><input type="text" class="measurement-value measurement-value-single"/><?php
203
+ }
204
+
205
+ ?>
206
+ <select
207
+ class="measurement-unit measurement-unit-<?php echo ! empty( $field['multiple'] ) ? 'multiple' : 'single' ?>">
208
+ <?php foreach ( $this->measurements_list() as $measurement ): ?>
209
+ <option
210
+ value="<?php echo esc_html( $measurement ) ?>"><?php echo esc_html( $measurement ) ?></option>
211
+ <?php endforeach ?>
212
+ </select>
213
+ <input type="hidden" name="<?php echo esc_attr( $field_name ) ?>"
214
+ value="<?php echo esc_attr( $current ) ?>"/>
215
+ <?php
216
+ break;
217
+
218
+ case 'color' :
219
+ ?>
220
+ <input type="text" name="<?php echo esc_attr( $field_name ) ?>"
221
+ value="<?php echo esc_attr( $current ) ?>" class="so-wp-color-field"/>
222
+ <?php
223
+ break;
224
+
225
+ case 'image' :
226
+ $image = false;
227
+ if ( ! empty( $current ) ) {
228
+ $image = SiteOrigin_Panels_Styles::get_attachment_image_src( $current, 'thumbnail' );
229
+ }
230
+
231
+ $fallback_url = $current_styles[ $field_id . '_fallback' ];
232
+ $fallback_field_name = 'style[' . $field_id . '_fallback]';
233
+
234
+ ?>
235
+ <div class="so-image-selector">
236
+ <div class="current-image" <?php if ( ! empty( $image ) ) {
237
+ echo 'style="background-image: url(' . esc_url( $image[0] ) . ');"';
238
+ } ?>>
239
+ </div>
240
+
241
+ <div class="select-image">
242
+ <?php _e( 'Select Image', 'siteorigin-panels' ) ?>
243
+ </div>
244
+ <input type="hidden" name="<?php echo esc_attr( $field_name ) ?>"
245
+ value="<?php echo intval( $current ) ?>"/>
246
+ </div>
247
+ <a href="#" class="remove-image<?php if ( empty( $current ) ) echo ' hidden' ?>"><?php _e( 'Remove', 'siteorigin-panels' ) ?></a>
248
+
249
+ <input type="text" value="<?php if ( $fallback_url !== 'false' ) echo esc_url( $fallback_url ) ?>"
250
+ placeholder="<?php esc_attr_e( 'External URL', 'siteorigin-panels' ) ?>"
251
+ name="<?php echo esc_attr( $fallback_field_name ) ?>"
252
+ class="image-fallback widefat" />
253
+ <?php
254
+ break;
255
+
256
+ case 'url' :
257
+ case 'text' :
258
+ ?><input type="text" name="<?php echo esc_attr( $field_name ) ?>"
259
+ value="<?php echo esc_attr( $current ) ?>" class="widefat" /><?php
260
+ break;
261
+
262
+ case 'checkbox' :
263
+ $current = (bool) $current;
264
+ ?>
265
+ <label class="so-checkbox-label">
266
+ <input type="checkbox" name="<?php echo esc_attr( $field_name ) ?>" <?php checked( $current ) ?> />
267
+ <?php echo esc_html( isset( $field['label'] ) ? $field['label'] : __( 'Enabled', 'siteorigin-panels' ) ) ?>
268
+ </label>
269
+ <?php
270
+ break;
271
+
272
+ case 'select' :
273
+ ?>
274
+ <select name="<?php echo esc_attr( $field_name ) ?>">
275
+ <?php foreach ( $field['options'] as $k => $v ) : ?>
276
+ <option
277
+ value="<?php echo esc_attr( $k ) ?>" <?php selected( $current, $k ) ?>><?php echo esc_html( $v ) ?></option>
278
+ <?php endforeach; ?>
279
+ </select>
280
+ <?php
281
+ break;
282
+
283
+ case 'textarea' :
284
+ case 'code' :
285
+ ?><textarea type="text" name="<?php echo esc_attr( $field_name ) ?>"
286
+ class="widefat <?php if ( $field['type'] == 'code' ) {
287
+ echo 'so-field-code';
288
+ } ?>" rows="4"><?php echo esc_textarea( $current ) ?></textarea><?php
289
+ break;
290
+ }
291
+
292
+ echo '</div>';
293
+
294
+ if ( ! empty( $field['description'] ) ) {
295
+ ?><p class="so-description"><?php echo wp_kses_post( $field['description'] ) ?></p><?php
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Sanitize the style fields in panels_data
301
+ *
302
+ * @param $panels_data
303
+ *
304
+ * @return mixed
305
+ */
306
+ function sanitize_all( $panels_data ) {
307
+ if ( ! empty( $panels_data['widgets'] ) ) {
308
+ // Sanitize the widgets
309
+ for ( $i = 0; $i < count( $panels_data['widgets'] ); $i ++ ) {
310
+ if ( empty( $panels_data['widgets'][ $i ]['panels_info']['style'] ) ) {
311
+ continue;
312
+ }
313
+ $panels_data['widgets'][ $i ]['panels_info']['style'] = $this->sanitize_style_fields( 'widget', $panels_data['widgets'][ $i ]['panels_info']['style'] );
314
+ }
315
+ }
316
+
317
+ if ( ! empty( $panels_data['grids'] ) ) {
318
+ // The rows
319
+ for ( $i = 0; $i < count( $panels_data['grids'] ); $i ++ ) {
320
+ if ( empty( $panels_data['grids'][ $i ]['style'] ) ) {
321
+ continue;
322
+ }
323
+ $panels_data['grids'][ $i ]['style'] = $this->sanitize_style_fields( 'row', $panels_data['grids'][ $i ]['style'] );
324
+ }
325
+ }
326
+
327
+ if ( ! empty( $panels_data['grid_cells'] ) ) {
328
+ // And finally, the cells
329
+ for ( $i = 0; $i < count( $panels_data['grid_cells'] ); $i ++ ) {
330
+ if ( empty( $panels_data['grid_cells'][ $i ]['style'] ) ) {
331
+ continue;
332
+ }
333
+ $panels_data['grid_cells'][ $i ]['style'] = $this->sanitize_style_fields( 'cell', $panels_data['grid_cells'][ $i ]['style'] );
334
+ }
335
+ }
336
+
337
+ return $panels_data;
338
+ }
339
+
340
+ /**
341
+ * Sanitize style fields.
342
+ *
343
+ * @param $section
344
+ * @param $styles
345
+ *
346
+ * @return Sanitized styles
347
+ */
348
+ function sanitize_style_fields( $section, $styles ) {
349
+ // Use the filter to get the fields for this section.
350
+ if ( empty( $fields_cache[ $section ] ) ) {
351
+ // This filter doesn't pass in the arguments $post_id and $args
352
+ // Plugins looking to extend fields, should always add their fields if these are empty
353
+ $fields_cache[ $section ] = array();
354
+ $fields_cache[ $section ] = apply_filters( 'siteorigin_panels_' . $section . '_style_fields', $fields_cache[ $section ], false, false );
355
+ $fields_cache[ $section ] = apply_filters( 'siteorigin_panels_general_style_fields', $fields_cache[ $section ], false, false );
356
+ }
357
+ $fields = $fields_cache[ $section ];
358
+
359
+ $return = array();
360
+ foreach ( $fields as $k => $field ) {
361
+ // Skip this if no field type is set
362
+ if ( empty( $field['type'] ) ) {
363
+ continue;
364
+ }
365
+
366
+ // Handle the special case of a checkbox
367
+ if ( $field['type'] == 'checkbox' ) {
368
+ $return[ $k ] = ! empty( $styles[ $k ] ) ? true : '';
369
+ continue;
370
+ }
371
+
372
+ // Ignore this if we don't even have a value for the style, unless 'image' field which might have a fallback.
373
+ if ( ! isset( $styles[ $k ] ) || ( $field['type'] != 'image' && $styles[ $k ] == '' ) ) {
374
+ continue;
375
+ }
376
+
377
+ switch ( $field['type'] ) {
378
+ case 'color' :
379
+ $color = $styles[ $k ];
380
+ if ( preg_match( '|^#([A-Fa-f0-9]{3,8})$|', $color ) ) {
381
+ $return[ $k ] = $color;
382
+ } else {
383
+ $return[ $k ] = '';
384
+ }
385
+ break;
386
+ case 'image' :
387
+ $return[ $k ] = ! empty( $styles[ $k ] ) ? sanitize_text_field( $styles[ $k ] ) : false;
388
+ $fallback_name = $k . '_fallback';
389
+ if ( $styles[ $k ] == '' && $styles[ $fallback_name ] == '' ) {
390
+ continue;
391
+ }
392
+ $return[ $fallback_name ] = ! empty( $styles[ $fallback_name ] ) ? esc_url_raw( $styles[ $fallback_name ] ) : false;
393
+ break;
394
+ case 'url' :
395
+ $return[ $k ] = esc_url_raw( $styles[ $k ] );
396
+ break;
397
+ case 'measurement' :
398
+ $measurements = array_map( 'preg_quote', $this->measurements_list() );
399
+ if ( ! empty( $field['multiple'] ) ) {
400
+ if ( preg_match_all( '/(?:(-?[0-9\.,]+).*?(' . implode( '|', $measurements ) . ')+)/', $styles[ $k ], $match ) ) {
401
+ $return[ $k ] = $styles[ $k ];
402
+ } else {
403
+ $return[ $k ] = '';
404
+ }
405
+ } else {
406
+ if ( preg_match( '/([-?0-9\.,]+).*?(' . implode( '|', $measurements ) . ')/', $styles[ $k ], $match ) ) {
407
+ $return[ $k ] = $match[1] . $match[2];
408
+ } else {
409
+ $return[ $k ] = '';
410
+ }
411
+ }
412
+ break;
413
+ case 'select' :
414
+ if ( ! empty( $styles[ $k ] ) && in_array( $styles[ $k ], array_keys( $field['options'] ) ) ) {
415
+ $return[ $k ] = $styles[ $k ];
416
+ }
417
+ break;
418
+ default:
419
+ // Just pass the value through.
420
+ $return[ $k ] = $styles[ $k ];
421
+ break;
422
+
423
+ }
424
+ }
425
+
426
+ return $return;
427
+ }
428
+
429
+ /**
430
+ * Convert the single string attribute of the grid style into an array.
431
+ *
432
+ * @param $panels_data
433
+ *
434
+ * @return mixed
435
+ */
436
+ function convert_data( $panels_data ) {
437
+ if ( empty( $panels_data ) || empty( $panels_data['grids'] ) || ! is_array( $panels_data['grids'] ) ) {
438
+ return $panels_data;
439
+ }
440
+
441
+ foreach( $panels_data['grids'] as & $grid ) {
442
+ if ( ! is_array( $grid ) || empty( $grid ) || empty( $grid['style'] ) ) {
443
+ continue;
444
+ }
445
+
446
+ if ( is_string( $grid['style'] ) ) {
447
+ $grid['style'] = array(
448
+ $grid['style']
449
+ );
450
+ }
451
+ }
452
+
453
+ return $panels_data;
454
+ }
455
+
456
+ /**
457
+ * Get list of supported mesurements
458
+ *
459
+ * @return array
460
+ */
461
+ function measurements_list() {
462
+ $measurements = array(
463
+ 'px',
464
+ '%',
465
+ 'in',
466
+ 'cm',
467
+ 'mm',
468
+ 'em',
469
+ 'ex',
470
+ 'pt',
471
+ 'pc',
472
+ 'rem'
473
+ );
474
+
475
+ // Allow themes and plugins to trim or enhance the list.
476
+ return apply_filters( 'siteorigin_panels_style_get_measurements_list', $measurements );
477
+ }
478
+
479
+ /**
480
+ * User sort function to sort by the priority key value.
481
+ *
482
+ * @param $a
483
+ * @param $b
484
+ *
485
+ * @return int
486
+ */
487
+ static function sort_fields( $a, $b ) {
488
+ return ( ( isset( $a['priority'] ) ? $a['priority'] : 10 ) > ( isset( $b['priority'] ) ? $b['priority'] : 10 ) ) ? 1 : - 1;
489
+ }
490
+ }
491
+
492
+ // Initialise all the default styling
493
+ SiteOrigin_Panels_Styles::single();
inc/styles.php CHANGED
@@ -1,672 +1,708 @@
1
- <?php
2
-
3
- /**
4
- * Class for handling all the default styling.
5
- *
6
- * Class SiteOrigin_Panels_Default_Styles
7
- */
8
- class SiteOrigin_Panels_Styles {
9
-
10
- public function __construct() {
11
- add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ), 5 );
12
-
13
- // Adding all the fields
14
- add_filter( 'siteorigin_panels_row_style_fields', array( $this, 'row_style_fields' ) );
15
- add_filter( 'siteorigin_panels_cell_style_fields', array( $this, 'cell_style_fields' ) );
16
- add_filter( 'siteorigin_panels_widget_style_fields', array( $this, 'widget_style_fields' ) );
17
-
18
- // Style wrapper attributes
19
- add_filter( 'siteorigin_panels_row_style_attributes', array( $this, 'general_style_attributes' ), 10, 2 );
20
- add_filter( 'siteorigin_panels_row_style_attributes', array( $this, 'row_style_attributes' ), 10, 2 );
21
- add_filter( 'siteorigin_panels_row_style_attributes', array( $this, 'vantage_row_style_attributes' ), 11, 2 );
22
- add_filter( 'siteorigin_panels_cell_style_attributes', array( $this, 'general_style_attributes' ), 10, 2 );
23
- add_filter( 'siteorigin_panels_widget_style_attributes', array( $this, 'general_style_attributes' ), 10, 2 );
24
-
25
- // Style wrapper CSS
26
- add_filter( 'siteorigin_panels_row_style_css', array( $this, 'general_style_css' ), 10, 2 );
27
- add_filter( 'siteorigin_panels_cell_style_css', array( $this, 'general_style_css' ), 10, 2 );
28
- add_filter( 'siteorigin_panels_widget_style_css', array( $this, 'general_style_css' ), 10, 2 );
29
-
30
- add_filter( 'siteorigin_panels_row_style_mobile_css', array( $this, 'general_style_mobile_css' ), 10, 2 );
31
- add_filter( 'siteorigin_panels_cell_style_mobile_css', array( $this, 'general_style_mobile_css' ), 10, 2 );
32
- add_filter( 'siteorigin_panels_widget_style_mobile_css', array( $this, 'general_style_mobile_css' ), 10, 2 );
33
-
34
- // Main filter to add any custom CSS.
35
- add_filter( 'siteorigin_panels_css_object', array( $this, 'filter_css_object' ), 10, 4 );
36
-
37
- // Filtering specific attributes
38
- add_filter( 'siteorigin_panels_css_row_margin_bottom', array( $this, 'filter_row_bottom_margin' ), 10, 2 );
39
- add_filter( 'siteorigin_panels_css_row_gutter', array( $this, 'filter_row_gutter' ), 10, 2 );
40
- }
41
-
42
- public static function single() {
43
- static $single;
44
- return empty( $single ) ? $single = new self() : $single;
45
- }
46
-
47
- static function register_scripts() {
48
- wp_register_script(
49
- 'siteorigin-panels-front-styles',
50
- siteorigin_panels_url( 'js/styling' . SITEORIGIN_PANELS_VERSION_SUFFIX . SITEORIGIN_PANELS_JS_SUFFIX . '.js' ),
51
- array( 'jquery' ),
52
- SITEORIGIN_PANELS_VERSION
53
- );
54
- wp_register_script(
55
- 'siteorigin-parallax',
56
- siteorigin_panels_url( 'js/siteorigin-parallax' . SITEORIGIN_PANELS_JS_SUFFIX . '.js' ),
57
- array( 'jquery' ),
58
- SITEORIGIN_PANELS_VERSION
59
- );
60
- wp_localize_script( 'siteorigin-panels-front-styles', 'panelsStyles', array(
61
- 'fullContainer' => apply_filters( 'siteorigin_panels_full_width_container', siteorigin_panels_setting( 'full-width-container' ) )
62
- ) );
63
- }
64
-
65
- /**
66
- * These are general styles that apply to all elements
67
- *
68
- * @param $label
69
- *
70
- * @return array
71
- */
72
- static function get_general_style_fields( $id, $label ) {
73
- $fields = array();
74
-
75
- // All the attribute fields
76
-
77
- $fields['id'] = array(
78
- 'name' => sprintf( __( '%s ID', 'siteorigin-panels' ), $label ),
79
- 'type' => 'text',
80
- 'group' => 'attributes',
81
- 'description' => sprintf( __( 'A custom ID used for this %s.', 'siteorigin-panels' ), strtolower( $label ) ),
82
- 'priority' => 4,
83
- );
84
-
85
- $fields['class'] = array(
86
- 'name' => sprintf( __( '%s Class', 'siteorigin-panels' ), $label ),
87
- 'type' => 'text',
88
- 'group' => 'attributes',
89
- 'description' => __( 'A CSS class', 'siteorigin-panels' ),
90
- 'priority' => 5,
91
- );
92
-
93
- $fields[ $id . '_css' ] = array(
94
- 'name' => __( 'CSS Styles', 'siteorigin-panels' ),
95
- 'type' => 'code',
96
- 'group' => 'attributes',
97
- 'description' => __( 'One style attribute per line.', 'siteorigin-panels' ),
98
- 'priority' => 10,
99
- );
100
-
101
- $fields[ 'mobile_css' ] = array(
102
- 'name' => __( 'Mobile CSS Styles', 'siteorigin-panels' ),
103
- 'type' => 'code',
104
- 'group' => 'attributes',
105
- 'description' => __( 'CSS applied when in mobile view.', 'siteorigin-panels' ),
106
- 'priority' => 11,
107
- );
108
-
109
- // The layout fields
110
-
111
- $fields['padding'] = array(
112
- 'name' => __( 'Padding', 'siteorigin-panels' ),
113
- 'type' => 'measurement',
114
- 'group' => 'layout',
115
- 'description' => sprintf( __( 'Padding around the entire %s.', 'siteorigin-panels' ), strtolower( $label ) ),
116
- 'priority' => 7,
117
- 'multiple' => true
118
- );
119
-
120
- $fields['mobile_padding'] = array(
121
- 'name' => __( 'Mobile Padding', 'siteorigin-panels' ),
122
- 'type' => 'measurement',
123
- 'group' => 'layout',
124
- 'description' => __( 'Padding when on mobile devices.', 'siteorigin-panels' ),
125
- 'priority' => 8,
126
- 'multiple' => true
127
- );
128
-
129
- // The general design fields
130
-
131
- $fields['background'] = array(
132
- 'name' => __( 'Background Color', 'siteorigin-panels' ),
133
- 'type' => 'color',
134
- 'group' => 'design',
135
- 'description' => sprintf( __( 'Background color of the %s.', 'siteorigin-panels' ), strtolower( $label ) ),
136
- 'priority' => 5,
137
- );
138
-
139
- $fields['background_image_attachment'] = array(
140
- 'name' => __( 'Background Image', 'siteorigin-panels' ),
141
- 'type' => 'image',
142
- 'group' => 'design',
143
- 'description' => sprintf( __( 'Background image of the %s.', 'siteorigin-panels' ), strtolower( $label ) ),
144
- 'priority' => 6,
145
- );
146
-
147
- $fields['background_display'] = array(
148
- 'name' => __( 'Background Image Display', 'siteorigin-panels' ),
149
- 'type' => 'select',
150
- 'group' => 'design',
151
- 'options' => array(
152
- 'tile' => __( 'Tiled Image', 'siteorigin-panels' ),
153
- 'cover' => __( 'Cover', 'siteorigin-panels' ),
154
- 'center' => __( 'Centered, with original size', 'siteorigin-panels' ),
155
- 'fixed' => __( 'Fixed', 'siteorigin-panels' ),
156
- 'parallax' => __( 'Parallax', 'siteorigin-panels' ),
157
- 'parallax-original' => __( 'Parallax (Original Size)', 'siteorigin-panels' ),
158
- ),
159
- 'description' => __( 'How the background image is displayed.', 'siteorigin-panels' ),
160
- 'priority' => 7,
161
- );
162
-
163
- $fields['border_color'] = array(
164
- 'name' => __( 'Border Color', 'siteorigin-panels' ),
165
- 'type' => 'color',
166
- 'group' => 'design',
167
- 'description' => sprintf( __( 'Border color of the %s.', 'siteorigin-panels' ), strtolower( $label ) ),
168
- 'priority' => 10,
169
- );
170
-
171
- return $fields;
172
- }
173
-
174
- /**
175
- * All the row styling fields
176
- *
177
- * @param $fields
178
- *
179
- * @return array
180
- */
181
- static function row_style_fields( $fields ) {
182
- // Add the general fields
183
- $fields = wp_parse_args( $fields, self::get_general_style_fields( 'row', __( 'Row', 'siteorigin-panels' ) ) );
184
-
185
- $fields['cell_class'] = array(
186
- 'name' => __( 'Cell Class', 'siteorigin-panels' ),
187
- 'type' => 'text',
188
- 'group' => 'attributes',
189
- 'description' => __( 'Class added to all cells in this row.', 'siteorigin-panels' ),
190
- 'priority' => 6,
191
- );
192
-
193
- // Add the layout fields
194
-
195
- $fields['bottom_margin'] = array(
196
- 'name' => __( 'Bottom Margin', 'siteorigin-panels' ),
197
- 'type' => 'measurement',
198
- 'group' => 'layout',
199
- 'description' => sprintf( __( 'Space below the row. Default is %spx.', 'siteorigin-panels' ), siteorigin_panels_setting( 'margin-bottom' ) ),
200
- 'priority' => 5,
201
- );
202
-
203
- $fields['gutter'] = array(
204
- 'name' => __( 'Gutter', 'siteorigin-panels' ),
205
- 'type' => 'measurement',
206
- 'group' => 'layout',
207
- 'description' => sprintf( __( 'Amount of space between cells. Default is %spx.', 'siteorigin-panels' ), siteorigin_panels_setting( 'margin-sides' ) ),
208
- 'priority' => 6,
209
- );
210
-
211
- $fields['row_stretch'] = array(
212
- 'name' => __( 'Row Layout', 'siteorigin-panels' ),
213
- 'type' => 'select',
214
- 'group' => 'layout',
215
- 'options' => array(
216
- '' => __( 'Standard', 'siteorigin-panels' ),
217
- 'full' => __( 'Full Width', 'siteorigin-panels' ),
218
- 'full-stretched' => __( 'Full Width Stretched', 'siteorigin-panels' ),
219
- ),
220
- 'priority' => 10,
221
- );
222
-
223
- $fields['collapse_behaviour'] = array(
224
- 'name' => __( 'Collapse Behaviour', 'siteorigin-panels' ),
225
- 'type' => 'select',
226
- 'group' => 'layout',
227
- 'options' => array(
228
- '' => __( 'Standard', 'siteorigin-panels' ),
229
- 'no_collapse' => __( 'No Collapse', 'siteorigin-panels' ),
230
- ),
231
- 'priority' => 15,
232
- );
233
-
234
- $fields['collapse_order'] = array(
235
- 'name' => __( 'Collapse Order', 'siteorigin-panels' ),
236
- 'type' => 'select',
237
- 'group' => 'layout',
238
- 'options' => array(
239
- '' => __( 'Default', 'siteorigin-panels' ),
240
- 'left-top' => __( 'Left on Top', 'siteorigin-panels' ),
241
- 'right-top' => __( 'Right on Top', 'siteorigin-panels' ),
242
- ),
243
- 'priority' => 16,
244
- );
245
-
246
- if ( siteorigin_panels_setting( 'legacy-layout' ) != 'always' ) {
247
- $fields['cell_alignment'] = array(
248
- 'name' => __( 'Cell Vertical Alignment', 'siteorigin-panels' ),
249
- 'type' => 'select',
250
- 'group' => 'layout',
251
- 'options' => array(
252
- 'flex-start' => __( 'Top', 'siteorigin-panels' ),
253
- 'center' => __( 'Center', 'siteorigin-panels' ),
254
- 'flex-end' => __( 'Bottom', 'siteorigin-panels' ),
255
- 'stretch' => __( 'Stretch', 'siteorigin-panels' ),
256
- ),
257
- 'priority' => 17,
258
- );
259
- }
260
-
261
- return $fields;
262
- }
263
-
264
- /**
265
- * All the cell styling fields
266
- *
267
- * @param $fields
268
- *
269
- * @return array
270
- */
271
- static function cell_style_fields( $fields ) {
272
- // Add the general fields
273
- $fields = wp_parse_args( $fields, self::get_general_style_fields( 'cell', __( 'Cell', 'siteorigin-panels' ) ) );
274
-
275
- $fields['vertical_alignment'] = array(
276
- 'name' => __( 'Vertical Alignment', 'siteorigin-panels' ),
277
- 'type' => 'select',
278
- 'group' => 'layout',
279
- 'options' => array(
280
- 'auto' => __( 'Use row setting', 'siteorigin-panels' ),
281
- 'flex-start' => __( 'Top', 'siteorigin-panels' ),
282
- 'center' => __( 'Center', 'siteorigin-panels' ),
283
- 'flex-end' => __( 'Bottom', 'siteorigin-panels' ),
284
- 'stretch' => __( 'Stretch', 'siteorigin-panels' ),
285
- ),
286
- 'priority' => 16,
287
- );
288
-
289
- $fields['font_color'] = array(
290
- 'name' => __( 'Font Color', 'siteorigin-panels' ),
291
- 'type' => 'color',
292
- 'group' => 'design',
293
- 'description' => __( 'Color of text inside this cell.', 'siteorigin-panels' ),
294
- 'priority' => 15,
295
- );
296
-
297
- $fields['link_color'] = array(
298
- 'name' => __( 'Links Color', 'siteorigin-panels' ),
299
- 'type' => 'color',
300
- 'group' => 'design',
301
- 'description' => __( 'Color of links inside this cell.', 'siteorigin-panels' ),
302
- 'priority' => 16,
303
- );
304
-
305
- return $fields;
306
- }
307
-
308
- /**
309
- * @param $fields
310
- *
311
- * @return array
312
- */
313
- static function widget_style_fields( $fields ) {
314
-
315
- // Add the general fields
316
- $fields = wp_parse_args( $fields, self::get_general_style_fields( 'widget', __( 'Widget', 'siteorigin-panels' ) ) );
317
-
318
- // How lets add the design fields
319
-
320
- $fields['font_color'] = array(
321
- 'name' => __( 'Font Color', 'siteorigin-panels' ),
322
- 'type' => 'color',
323
- 'group' => 'design',
324
- 'description' => __( 'Color of text inside this widget.', 'siteorigin-panels' ),
325
- 'priority' => 15,
326
- );
327
-
328
- $fields['link_color'] = array(
329
- 'name' => __( 'Links Color', 'siteorigin-panels' ),
330
- 'type' => 'color',
331
- 'group' => 'design',
332
- 'description' => __( 'Color of links inside this widget.', 'siteorigin-panels' ),
333
- 'priority' => 16,
334
- );
335
-
336
- return $fields;
337
- }
338
-
339
- /**
340
- * Style attributes that apply to rows, cells and widgets
341
- *
342
- * @param $attributes
343
- * @param $style
344
- *
345
- * @return array $attributes
346
- */
347
- static function general_style_attributes( $attributes, $style ){
348
- if ( ! empty( $style['class'] ) ) {
349
- if( ! is_array( $style['class'] ) ) {
350
- $style['class'] = explode( ' ', $style[ 'class' ] );
351
- }
352
- $attributes['class'] = array_merge( $attributes['class'], $style['class'] );
353
- }
354
-
355
- if ( ! empty( $style['background_display'] ) && ! empty( $style['background_image_attachment'] ) ) {
356
-
357
- $url = self::get_attachment_image_src( $style['background_image_attachment'], 'full' );
358
-
359
- if (
360
- ! empty( $url ) &&
361
- ( $style['background_display'] == 'parallax' || $style['background_display'] == 'parallax-original' )
362
- ) {
363
- wp_enqueue_script( 'siteorigin-parallax' );
364
- $parallax_args = array(
365
- 'backgroundUrl' => $url[0],
366
- 'backgroundSize' => array( $url[1], $url[2] ),
367
- 'backgroundSizing' => $style['background_display'] == 'parallax-original' ? 'original' : 'scaled',
368
- 'limitMotion' => siteorigin_panels_setting( 'parallax-motion' ) ? floatval( siteorigin_panels_setting( 'parallax-motion' ) ) : 'auto',
369
- );
370
- $attributes['data-siteorigin-parallax'] = json_encode( $parallax_args );
371
- }
372
- }
373
-
374
- if ( ! empty( $style['id'] ) ) {
375
- $attributes['id'] = sanitize_html_class( $style['id'] );
376
- }
377
-
378
- return $attributes;
379
- }
380
-
381
- static function row_style_attributes( $attributes, $style ) {
382
- if ( ! empty( $style['row_stretch'] ) ) {
383
- $attributes['class'][] = 'siteorigin-panels-stretch';
384
- $attributes['data-stretch-type'] = $style['row_stretch'];
385
- wp_enqueue_script( 'siteorigin-panels-front-styles' );
386
- }
387
-
388
- return $attributes;
389
- }
390
-
391
- static function vantage_row_style_attributes( $attributes, $style ) {
392
- if ( isset( $style['class'] ) && $style['class'] == 'wide-grey' && ! empty( $attributes['style'] ) ) {
393
- $attributes['style'] = preg_replace( '/padding-left: 1000px; padding-right: 1000px;/', '', $attributes['style'] );
394
- }
395
-
396
- return $attributes;
397
- }
398
-
399
- /**
400
- * Get the CSS styles that apply to all rows, cells and widgets
401
- *
402
- * @param $css
403
- * @param $style
404
- *
405
- * @return mixed
406
- */
407
- static function general_style_css( $css, $style ){
408
-
409
- if ( ! empty( $style['background'] ) ) {
410
- $css[ 'background-color' ] = $style['background'];
411
- }
412
-
413
- if ( ! empty( $style['background_display'] ) && ! empty( $style['background_image_attachment'] ) ) {
414
-
415
- $url = self::get_attachment_image_src( $style['background_image_attachment'], 'full' );
416
-
417
- if ( ! empty( $url ) ) {
418
- $css[ 'background-image' ] = 'url(' . $url[0] . ')';
419
-
420
- switch ( $style['background_display'] ) {
421
- case 'parallax':
422
- case 'parallax-original':
423
- $css[ 'background-position' ] = 'center center';
424
- $css[ 'background-repeat' ] = 'no-repeat';
425
- break;
426
- case 'tile':
427
- $css[ 'background-repeat' ] = 'repeat';
428
- break;
429
- case 'cover':
430
- $css[ 'background-position' ] = 'center center';
431
- $css[ 'background-size' ] = 'cover';
432
- break;
433
- case 'center':
434
- $css[ 'background-position' ] = 'center center';
435
- $css[ 'background-repeat' ] = 'no-repeat';
436
- break;
437
- case 'fixed':
438
- $css[ 'background-attachment' ] = 'fixed';
439
- $css[ 'background-position' ] = 'center center';
440
- $css[ 'background-size' ] = 'cover';
441
- break;
442
- }
443
- }
444
- }
445
-
446
- if ( ! empty( $style[ 'border_color' ] ) ) {
447
- $css[ 'border' ] = '1px solid ' . $style['border_color'];
448
- }
449
-
450
- if ( ! empty( $style[ 'font_color' ] ) ) {
451
- $css[ 'color' ] = $style['font_color'];
452
- }
453
-
454
- if( ! empty( $style[ 'padding' ] ) ) {
455
- $css['padding'] = $style[ 'padding' ];
456
- }
457
-
458
- // Find which key the CSS is stored in
459
- foreach( array( 'row_css', 'cell_css', 'widget_css', '' ) as $css_key ) {
460
- if( empty( $css_key ) || ! empty( $style[ $css_key ] ) ) {
461
- break;
462
- }
463
- }
464
- if ( ! empty( $css_key ) && ! empty( $style[ $css_key ] ) ) {
465
- preg_match_all( '/^([A-Za-z0-9\-]+?):(.+?);?$/m', $style[ $css_key ], $matches );
466
-
467
- if ( ! empty( $matches[0] ) ) {
468
- for ( $i = 0; $i < count( $matches[0] ); $i ++ ) {
469
- $css[ $matches[1][ $i ] ] = $matches[2][ $i ];
470
- }
471
- }
472
- }
473
-
474
- return $css;
475
- }
476
-
477
- /**
478
- * Get the mobile styling for rows, cells and widgets
479
- *
480
- * @param $css
481
- * @param $style
482
- *
483
- * @return mixed
484
- */
485
- static function general_style_mobile_css( $css, $style ){
486
- if( ! empty( $style['mobile_padding'] ) ) {
487
- $css['padding'] = $style[ 'mobile_padding' ];
488
- }
489
-
490
- if ( ! empty( $style['background_display'] ) && ! empty( $style['background_image_attachment'] ) && $style['background_display'] == 'fixed' ) {
491
- $css[ 'background-attachment' ] = 'scroll';
492
- }
493
-
494
- if ( ! empty( $style[ 'mobile_css' ] ) ) {
495
- preg_match_all( '/^([A-Za-z0-9\-]+?):(.+?);?$/m', $style[ 'mobile_css' ], $matches );
496
-
497
- if ( ! empty( $matches[0] ) ) {
498
- for ( $i = 0; $i < count( $matches[0] ); $i ++ ) {
499
- $css[ $matches[1][ $i ] ] = $matches[2][ $i ];
500
- }
501
- }
502
- }
503
-
504
- return $css;
505
- }
506
-
507
- /**
508
- * @param SiteOrigin_Panels_Css_Builder $css
509
- * @param $panels_data
510
- * @param $post_id
511
- *
512
- * @return mixed
513
- */
514
- static function filter_css_object( $css, $panels_data, $post_id, $layout ) {
515
- $mobile_width = siteorigin_panels_setting( 'mobile-width' );
516
- if( empty( $layout ) ) {
517
- return $css;
518
- }
519
-
520
- foreach( $layout as $ri => $row ) {
521
- if( empty( $row[ 'style' ] ) ) $row[ 'style' ] = array();
522
-
523
- $standard_css = apply_filters( 'siteorigin_panels_row_style_css', array(), $row['style'] );
524
- $mobile_css = apply_filters( 'siteorigin_panels_row_style_mobile_css', array(), $row['style'] );
525
-
526
- if ( ! empty( $standard_css ) ) {
527
- $css->add_row_css(
528
- $post_id,
529
- $ri,
530
- '> .panel-row-style',
531
- $standard_css
532
- );
533
- }
534
- if ( ! empty( $mobile_css ) ) {
535
- $css->add_row_css(
536
- $post_id,
537
- $ri,
538
- '> .panel-row-style',
539
- $mobile_css,
540
- $mobile_width
541
- );
542
- }
543
-
544
- // Add in flexbox alignment to the main row element
545
- if ( siteorigin_panels_setting( 'legacy-layout' ) != 'always' && ! SiteOrigin_Panels::is_legacy_browser() && ! empty( $row['style']['cell_alignment'] ) ) {
546
- $css->add_row_css(
547
- $post_id,
548
- $ri,
549
- array( '.panel-no-style', '.panel-has-style > .panel-row-style' ),
550
- array(
551
- '-webkit-align-items' => $row['style']['cell_alignment'],
552
- 'align-items' => $row['style']['cell_alignment'],
553
- )
554
- );
555
- }
556
-
557
- // Process the cells if there are any
558
- if( empty( $row[ 'cells' ] ) ) continue;
559
-
560
- foreach( $row[ 'cells' ] as $ci => $cell ) {
561
- if( empty( $cell[ 'style' ] ) ) $cell[ 'style' ] = array();
562
-
563
- $standard_css = apply_filters( 'siteorigin_panels_cell_style_css', array(), $cell['style'] );
564
- $mobile_css = apply_filters( 'siteorigin_panels_cell_style_mobile_css', array(), $cell['style'] );
565
-
566
- if ( ! empty( $standard_css ) ) {
567
- $css->add_cell_css(
568
- $post_id,
569
- $ri,
570
- $ci,
571
- '> .panel-cell-style',
572
- $standard_css
573
- );
574
- }
575
- if ( ! empty( $mobile_css ) ) {
576
- $css->add_cell_css(
577
- $post_id,
578
- $ri,
579
- $ci,
580
- '> .panel-cell-style',
581
- $mobile_css,
582
- $mobile_width
583
- );
584
- }
585
-
586
- if ( ! empty( $cell[ 'style' ]['vertical_alignment'] ) ) {
587
- $css->add_cell_css(
588
- $post_id,
589
- $ri,
590
- $ci,
591
- '',
592
- array(
593
- 'align-self' => $cell[ 'style' ]['vertical_alignment']
594
- )
595
- );
596
- }
597
-
598
- // Process the widgets if there are any
599
- if( empty( $cell[ 'widgets' ] ) ) continue;
600
-
601
- foreach( $cell['widgets'] as $wi => $widget ) {
602
- if ( empty( $widget['panels_info'] ) ) continue;
603
- if ( empty( $widget['panels_info']['style'] ) ) $widget['panels_info']['style'] = array();
604
-
605
- $standard_css = apply_filters( 'siteorigin_panels_widget_style_css', array(), $widget['panels_info']['style'] );
606
- $mobile_css = apply_filters( 'siteorigin_panels_widget_style_mobile_css', array(), $widget['panels_info']['style'] );
607
-
608
- if( ! empty( $standard_css ) ) {
609
- $css->add_widget_css(
610
- $post_id,
611
- $ri,
612
- $ci,
613
- $wi,
614
- '> .panel-widget-style',
615
- $standard_css
616
- );
617
- }
618
-
619
- if( ! empty( $mobile_css ) ) {
620
- $css->add_widget_css(
621
- $post_id,
622
- $ri,
623
- $ci,
624
- $wi,
625
- '> .panel-widget-style',
626
- $mobile_css,
627
- $mobile_width
628
- );
629
- }
630
-
631
- if ( ! empty( $widget['panels_info']['style']['link_color'] ) ) {
632
- $css->add_widget_css( $post_id, $ri, $ci, $wi, ' a', array(
633
- 'color' => $widget['panels_info']['style']['link_color']
634
- ) );
635
- }
636
- }
637
- }
638
- }
639
-
640
- return $css;
641
- }
642
-
643
- static function filter_row_bottom_margin( $margin, $grid ) {
644
- if ( ! empty( $grid['style']['bottom_margin'] ) ) {
645
- $margin = $grid['style']['bottom_margin'];
646
- }
647
-
648
- return $margin;
649
- }
650
-
651
- static function filter_row_gutter( $gutter, $grid ) {
652
- if ( ! empty( $grid['style']['gutter'] ) ) {
653
- $gutter = $grid['style']['gutter'];
654
- }
655
-
656
- return $gutter;
657
- }
658
-
659
- public static function get_attachment_image_src( $image, $size = 'full' ){
660
- if( empty( $image ) ) {
661
- return false;
662
- }
663
- else if( is_numeric( $image ) ) {
664
- return wp_get_attachment_image_src( $image, $size );
665
- }
666
- else if( is_string( $image ) ) {
667
- preg_match( '/(.*?)\#([0-9]+)x([0-9]+)$/', $image, $matches );
668
- return ! empty( $matches ) ? $matches : false;
669
- }
670
- }
671
-
672
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class for handling all the default styling.
5
+ *
6
+ * Class SiteOrigin_Panels_Default_Styles
7
+ */
8
+ class SiteOrigin_Panels_Styles {
9
+
10
+ public function __construct() {
11
+ add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ), 5 );
12
+
13
+ // Adding all the fields
14
+ add_filter( 'siteorigin_panels_row_style_fields', array( $this, 'row_style_fields' ) );
15
+ add_filter( 'siteorigin_panels_cell_style_fields', array( $this, 'cell_style_fields' ) );
16
+ add_filter( 'siteorigin_panels_widget_style_fields', array( $this, 'widget_style_fields' ) );
17
+
18
+ // Style wrapper attributes
19
+ add_filter( 'siteorigin_panels_row_style_attributes', array( $this, 'general_style_attributes' ), 10, 2 );
20
+ add_filter( 'siteorigin_panels_row_style_attributes', array( $this, 'row_style_attributes' ), 10, 2 );
21
+ add_filter( 'siteorigin_panels_row_style_attributes', array( $this, 'vantage_row_style_attributes' ), 11, 2 );
22
+ add_filter( 'siteorigin_panels_cell_style_attributes', array( $this, 'general_style_attributes' ), 10, 2 );
23
+ add_filter( 'siteorigin_panels_widget_style_attributes', array( $this, 'general_style_attributes' ), 10, 2 );
24
+
25
+ // Style wrapper CSS
26
+ add_filter( 'siteorigin_panels_row_style_css', array( $this, 'general_style_css' ), 10, 2 );
27
+ add_filter( 'siteorigin_panels_cell_style_css', array( $this, 'general_style_css' ), 10, 2 );
28
+ add_filter( 'siteorigin_panels_widget_style_css', array( $this, 'general_style_css' ), 10, 2 );
29
+
30
+ add_filter( 'siteorigin_panels_row_style_mobile_css', array( $this, 'general_style_mobile_css' ), 10, 2 );
31
+ add_filter( 'siteorigin_panels_cell_style_mobile_css', array( $this, 'general_style_mobile_css' ), 10, 2 );
32
+ add_filter( 'siteorigin_panels_widget_style_mobile_css', array( $this, 'general_style_mobile_css' ), 10, 2 );
33
+
34
+ // Main filter to add any custom CSS.
35
+ add_filter( 'siteorigin_panels_css_object', array( $this, 'filter_css_object' ), 10, 4 );
36
+
37
+ // Filtering specific attributes
38
+ add_filter( 'siteorigin_panels_css_row_margin_bottom', array( $this, 'filter_row_bottom_margin' ), 10, 2 );
39
+ add_filter( 'siteorigin_panels_css_row_gutter', array( $this, 'filter_row_gutter' ), 10, 2 );
40
+ add_filter( 'siteorigin_panels_css_widget_css', array( $this, 'filter_widget_style_css' ), 10, 2 );
41
+ }
42
+
43
+ public static function single() {
44
+ static $single;
45
+ return empty( $single ) ? $single = new self() : $single;
46
+ }
47
+
48
+ static function register_scripts() {
49
+ wp_register_script(
50
+ 'siteorigin-panels-front-styles',
51
+ siteorigin_panels_url( 'js/styling' . SITEORIGIN_PANELS_VERSION_SUFFIX . SITEORIGIN_PANELS_JS_SUFFIX . '.js' ),
52
+ array( 'jquery' ),
53
+ SITEORIGIN_PANELS_VERSION
54
+ );
55
+ wp_register_script(
56
+ 'siteorigin-parallax',
57
+ siteorigin_panels_url( 'js/siteorigin-parallax' . SITEORIGIN_PANELS_JS_SUFFIX . '.js' ),
58
+ array( 'jquery' ),
59
+ SITEORIGIN_PANELS_VERSION
60
+ );
61
+ wp_localize_script( 'siteorigin-panels-front-styles', 'panelsStyles', array(
62
+ 'fullContainer' => apply_filters( 'siteorigin_panels_full_width_container', siteorigin_panels_setting( 'full-width-container' ) )
63
+ ) );
64
+ }
65
+
66
+ /**
67
+ * These are general styles that apply to all elements
68
+ *
69
+ * @param $label
70
+ *
71
+ * @return array
72
+ */
73
+ static function get_general_style_fields( $id, $label ) {
74
+ $fields = array();
75
+
76
+ // All the attribute fields
77
+
78
+ $fields['id'] = array(
79
+ 'name' => sprintf( __( '%s ID', 'siteorigin-panels' ), $label ),
80
+ 'type' => 'text',
81
+ 'group' => 'attributes',
82
+ 'description' => sprintf( __( 'A custom ID used for this %s.', 'siteorigin-panels' ), strtolower( $label ) ),
83
+ 'priority' => 4,
84
+ );
85
+
86
+ $fields['class'] = array(
87
+ 'name' => sprintf( __( '%s Class', 'siteorigin-panels' ), $label ),
88
+ 'type' => 'text',
89
+ 'group' => 'attributes',
90
+ 'description' => __( 'A CSS class', 'siteorigin-panels' ),
91
+ 'priority' => 5,
92
+ );
93
+
94
+ $fields[ $id . '_css' ] = array(
95
+ 'name' => __( 'CSS Styles', 'siteorigin-panels' ),
96
+ 'type' => 'code',
97
+ 'group' => 'attributes',
98
+ 'description' => __( 'One style attribute per line.', 'siteorigin-panels' ),
99
+ 'priority' => 10,
100
+ );
101
+
102
+ $fields[ 'mobile_css' ] = array(
103
+ 'name' => __( 'Mobile CSS Styles', 'siteorigin-panels' ),
104
+ 'type' => 'code',
105
+ 'group' => 'attributes',
106
+ 'description' => __( 'CSS applied when in mobile view.', 'siteorigin-panels' ),
107
+ 'priority' => 11,
108
+ );
109
+
110
+ // The layout fields
111
+
112
+ $fields['padding'] = array(
113
+ 'name' => __( 'Padding', 'siteorigin-panels' ),
114
+ 'type' => 'measurement',
115
+ 'group' => 'layout',
116
+ 'description' => sprintf( __( 'Padding around the entire %s.', 'siteorigin-panels' ), strtolower( $label ) ),
117
+ 'priority' => 7,
118
+ 'multiple' => true
119
+ );
120
+
121
+ $fields['mobile_padding'] = array(
122
+ 'name' => __( 'Mobile Padding', 'siteorigin-panels' ),
123
+ 'type' => 'measurement',
124
+ 'group' => 'layout',
125
+ 'description' => __( 'Padding when on mobile devices.', 'siteorigin-panels' ),
126
+ 'priority' => 8,
127
+ 'multiple' => true
128
+ );
129
+
130
+ // The general design fields
131
+
132
+ $fields['background'] = array(
133
+ 'name' => __( 'Background Color', 'siteorigin-panels' ),
134
+ 'type' => 'color',
135
+ 'group' => 'design',
136
+ 'description' => sprintf( __( 'Background color of the %s.', 'siteorigin-panels' ), strtolower( $label ) ),
137
+ 'priority' => 5,
138
+ );
139
+
140
+ $fields['background_image_attachment'] = array(
141
+ 'name' => __( 'Background Image', 'siteorigin-panels' ),
142
+ 'type' => 'image',
143
+ 'group' => 'design',
144
+ 'description' => sprintf( __( 'Background image of the %s.', 'siteorigin-panels' ), strtolower( $label ) ),
145
+ 'priority' => 6,
146
+ );
147
+
148
+ $fields['background_display'] = array(
149
+ 'name' => __( 'Background Image Display', 'siteorigin-panels' ),
150
+ 'type' => 'select',
151
+ 'group' => 'design',
152
+ 'options' => array(
153
+ 'tile' => __( 'Tiled Image', 'siteorigin-panels' ),
154
+ 'cover' => __( 'Cover', 'siteorigin-panels' ),
155
+ 'center' => __( 'Centered, with original size', 'siteorigin-panels' ),
156
+ 'fixed' => __( 'Fixed', 'siteorigin-panels' ),
157
+ 'parallax' => __( 'Parallax', 'siteorigin-panels' ),
158
+ 'parallax-original' => __( 'Parallax (Original Size)', 'siteorigin-panels' ),
159
+ ),
160
+ 'description' => __( 'How the background image is displayed.', 'siteorigin-panels' ),
161
+ 'priority' => 7,
162
+ );
163
+
164
+ $fields['border_color'] = array(
165
+ 'name' => __( 'Border Color', 'siteorigin-panels' ),
166
+ 'type' => 'color',
167
+ 'group' => 'design',
168
+ 'description' => sprintf( __( 'Border color of the %s.', 'siteorigin-panels' ), strtolower( $label ) ),
169
+ 'priority' => 10,
170
+ );
171
+
172
+ return $fields;
173
+ }
174
+
175
+ /**
176
+ * All the row styling fields
177
+ *
178
+ * @param $fields
179
+ *
180
+ * @return array
181
+ */
182
+ static function row_style_fields( $fields ) {
183
+ // Add the general fields
184
+ $fields = wp_parse_args( $fields, self::get_general_style_fields( 'row', __( 'Row', 'siteorigin-panels' ) ) );
185
+
186
+ $fields['cell_class'] = array(
187
+ 'name' => __( 'Cell Class', 'siteorigin-panels' ),
188
+ 'type' => 'text',
189
+ 'group' => 'attributes',
190
+ 'description' => __( 'Class added to all cells in this row.', 'siteorigin-panels' ),
191
+ 'priority' => 6,
192
+ );
193
+
194
+ // Add the layout fields
195
+
196
+ $fields['bottom_margin'] = array(
197
+ 'name' => __( 'Bottom Margin', 'siteorigin-panels' ),
198
+ 'type' => 'measurement',
199
+ 'group' => 'layout',
200
+ 'description' => sprintf( __( 'Space below the row. Default is %spx.', 'siteorigin-panels' ), siteorigin_panels_setting( 'margin-bottom' ) ),
201
+ 'priority' => 5,
202
+ );
203
+
204
+ $fields['gutter'] = array(
205
+ 'name' => __( 'Gutter', 'siteorigin-panels' ),
206
+ 'type' => 'measurement',
207
+ 'group' => 'layout',
208
+ 'description' => sprintf( __( 'Amount of space between cells. Default is %spx.', 'siteorigin-panels' ), siteorigin_panels_setting( 'margin-sides' ) ),
209
+ 'priority' => 6,
210
+ );
211
+
212
+ $fields['row_stretch'] = array(
213
+ 'name' => __( 'Row Layout', 'siteorigin-panels' ),
214
+ 'type' => 'select',
215
+ 'group' => 'layout',
216
+ 'options' => array(
217
+ '' => __( 'Standard', 'siteorigin-panels' ),
218
+ 'full' => __( 'Full Width', 'siteorigin-panels' ),
219
+ 'full-stretched' => __( 'Full Width Stretched', 'siteorigin-panels' ),
220
+ ),
221
+ 'priority' => 10,
222
+ );
223
+
224
+ $fields['collapse_behaviour'] = array(
225
+ 'name' => __( 'Collapse Behaviour', 'siteorigin-panels' ),
226
+ 'type' => 'select',
227
+ 'group' => 'layout',
228
+ 'options' => array(
229
+ '' => __( 'Standard', 'siteorigin-panels' ),
230
+ 'no_collapse' => __( 'No Collapse', 'siteorigin-panels' ),
231
+ ),
232
+ 'priority' => 15,
233
+ );
234
+
235
+ $fields['collapse_order'] = array(
236
+ 'name' => __( 'Collapse Order', 'siteorigin-panels' ),
237
+ 'type' => 'select',
238
+ 'group' => 'layout',
239
+ 'options' => array(
240
+ '' => __( 'Default', 'siteorigin-panels' ),
241
+ 'left-top' => __( 'Left on Top', 'siteorigin-panels' ),
242
+ 'right-top' => __( 'Right on Top', 'siteorigin-panels' ),
243
+ ),
244
+ 'priority' => 16,
245
+ );
246
+
247
+ if ( siteorigin_panels_setting( 'legacy-layout' ) != 'always' ) {
248
+ $fields['cell_alignment'] = array(
249
+ 'name' => __( 'Cell Vertical Alignment', 'siteorigin-panels' ),
250
+ 'type' => 'select',
251
+ 'group' => 'layout',
252
+ 'options' => array(
253
+ 'flex-start' => __( 'Top', 'siteorigin-panels' ),
254
+ 'center' => __( 'Center', 'siteorigin-panels' ),
255
+ 'flex-end' => __( 'Bottom', 'siteorigin-panels' ),
256
+ 'stretch' => __( 'Stretch', 'siteorigin-panels' ),
257
+ ),
258
+ 'priority' => 17,
259
+ );
260
+ }
261
+
262
+ return $fields;
263
+ }
264
+
265
+ /**
266
+ * All the cell styling fields
267
+ *
268
+ * @param $fields
269
+ *
270
+ * @return array
271
+ */
272
+ static function cell_style_fields( $fields ) {
273
+ // Add the general fields
274
+ $fields = wp_parse_args( $fields, self::get_general_style_fields( 'cell', __( 'Cell', 'siteorigin-panels' ) ) );
275
+
276
+ $fields['vertical_alignment'] = array(
277
+ 'name' => __( 'Vertical Alignment', 'siteorigin-panels' ),
278
+ 'type' => 'select',
279
+ 'group' => 'layout',
280
+ 'options' => array(
281
+ 'auto' => __( 'Use row setting', 'siteorigin-panels' ),
282
+ 'flex-start' => __( 'Top', 'siteorigin-panels' ),
283
+ 'center' => __( 'Center', 'siteorigin-panels' ),
284
+ 'flex-end' => __( 'Bottom', 'siteorigin-panels' ),
285
+ 'stretch' => __( 'Stretch', 'siteorigin-panels' ),
286
+ ),
287
+ 'priority' => 16,
288
+ );
289
+
290
+ $fields['font_color'] = array(
291
+ 'name' => __( 'Font Color', 'siteorigin-panels' ),
292
+ 'type' => 'color',
293
+ 'group' => 'design',
294
+ 'description' => __( 'Color of text inside this cell.', 'siteorigin-panels' ),
295
+ 'priority' => 15,
296
+ );
297
+
298
+ $fields['link_color'] = array(
299
+ 'name' => __( 'Links Color', 'siteorigin-panels' ),
300
+ 'type' => 'color',
301
+ 'group' => 'design',
302
+ 'description' => __( 'Color of links inside this cell.', 'siteorigin-panels' ),
303
+ 'priority' => 16,
304
+ );
305
+
306
+ return $fields;
307
+ }
308
+
309