Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms - Version 1.21.0

Version Description

  • New Heading, Paragraph, Media and Separator fields and form importer in Tools Import screen.
Download this release

Release Info

Developer happyforms
Plugin Icon 128x128 Form builder to get in touch with visitors, grow your email list and collect payments — Happyforms
Version 1.21.0
Comparing to
See all releases

Code changes from version 1.20.2 to 1.21.0

Files changed (42) hide show
  1. bundles/css/frontend.css +1 -1
  2. core/assets/css/customize.css +49 -10
  3. core/assets/css/preview.css +10 -0
  4. core/assets/js/customize/media.js +149 -0
  5. core/assets/js/parts/part-divider.js +17 -0
  6. core/assets/js/parts/part-layout_title.js +71 -0
  7. core/assets/js/parts/part-media.js +42 -0
  8. core/assets/js/parts/part-placeholder.js +108 -0
  9. core/classes/class-form-part-library.php +33 -27
  10. core/classes/class-form-styles.php +17 -1
  11. core/classes/class-happyforms-core.php +1 -0
  12. core/classes/class-import-controller.php +138 -0
  13. core/classes/class-wp-customize-form-manager.php +3 -2
  14. core/classes/parts/class-part-divider.php +169 -0
  15. core/classes/parts/class-part-layout-drawer-group.php +13 -0
  16. core/classes/parts/class-part-layout-title.php +177 -0
  17. core/classes/parts/class-part-media.php +228 -0
  18. core/classes/parts/class-part-placeholder.php +210 -0
  19. core/helpers/helper-form-templates.php +17 -0
  20. core/helpers/helper-misc.php +18 -0
  21. core/templates/customize-header-actions.php +1 -1
  22. core/templates/parts/customize-divider.php +30 -0
  23. core/templates/parts/customize-layout_title.php +46 -0
  24. core/templates/parts/customize-media.php +123 -0
  25. core/templates/parts/customize-placeholder.php +56 -0
  26. core/templates/parts/frontend-divider.php +5 -0
  27. core/templates/parts/frontend-layout_title.php +5 -0
  28. core/templates/parts/frontend-media.php +45 -0
  29. core/templates/parts/frontend-placeholder.php +26 -0
  30. core/templates/single-form.php +1 -0
  31. happyforms.php +2 -2
  32. inc/assets/css/frontend/color.css +32 -1
  33. inc/assets/css/frontend/layout.css +39 -0
  34. inc/assets/js/customize.js +11 -7
  35. inc/classes/class-happyforms.php +12 -33
  36. inc/classes/class-importer-xml.php +243 -0
  37. inc/classes/parts/class-part-divider-dummy.php +0 -12
  38. inc/classes/parts/class-part-layout-title-dummy.php +0 -12
  39. inc/classes/parts/class-part-media-dummy.php +0 -12
  40. inc/classes/parts/class-part-placeholder-dummy.php +0 -12
  41. languages/happyforms.pot +310 -205
  42. readme.txt +11 -1
bundles/css/frontend.css CHANGED
@@ -1 +1 @@
1
- :root{--happyforms-color-primary:#000;--happyforms-color-success-notice:#ebf9f0;--happyforms-color-success-notice-text:#1eb452;--happyforms-color-error:#f23000;--happyforms-color-error-notice:#ffeeea;--happyforms-color-error-notice-text:#f23000;--happyforms-color-notice-text:#454545;--happyforms-color-part-title:#000;--happyforms-color-part-value:#000;--happyforms-color-part-placeholder:#888888;--happyforms-color-part-description:#454545;--happyforms-color-part-border:#dbdbdb;--happyforms-color-part-border-focus:#7aa4ff;--happyforms-color-part-background:#fff;--happyforms-color-part-background-focus:#fff;--happyforms-color-submit-background:#000000;--happyforms-color-submit-background-hover:#000000;--happyforms-color-submit-border:transparent;--happyforms-color-submit-text:#fff;--happyforms-color-submit-text-hover:#fff;--happyforms-color-table-row-odd:#fcfcfc;--happyforms-color-table-row-even:#efefef;--happyforms-color-table-row-odd-text:#000;--happyforms-color-table-row-even-text:#000;--happyforms-color-choice-checkmark-bg:#fff;--happyforms-color-choice-checkmark-bg-focus:#000;--happyforms-color-choice-checkmark-color:#fff;--happyforms-color-dropdown-bg-color:#fff;--happyforms-color-dropdown-item-bg:#fff;--happyforms-color-dropdown-item-text:#000;--happyforms-color-dropdown-item-bg-hover:#f4f4f5;--happyforms-color-dropdown-item-text-hover:#000;--happyforms-form-title-font-size:32px;--happyforms-form-font-weight:normal;--happyforms-part-title-font-size:16px;--happyforms-part-description-font-size:12px;--happyforms-part-value-font-size:16px;--happyforms-submit-button-font-size:16px;--happyforms-transition-duration:0.25s}.happyforms-form.happyforms-styles form{font-weight:400;font-weight:var(--happyforms-form-font-weight);transition:opacity .25s ease-in-out;transition:opacity var(--happyforms-transition-duration) ease-in-out}.happyforms-styles h3.happyforms-form__title{font-weight:400;font-size:32px;font-size:var(--happyforms-form-title-font-size);color:#000;color:var(--happyforms-color-primary)}.happyforms-styles .happyforms-part__label{line-height:1;font-weight:400;font-size:16px;font-size:var(--happyforms-part-title-font-size);background-color:transparent;overflow-wrap:anywhere}.happyforms-styles .happyforms-part__label .happyforms-optional,.happyforms-styles .happyforms-part__label .label{font-weight:400;font-style:normal;font-size:16px;font-size:var(--happyforms-part-title-font-size);color:#000;color:var(--happyforms-color-part-title);background-color:transparent}.happyforms-styles .happyforms-part__description{line-height:1.4;font-size:14px;font-size:var(--happyforms-part-description-font-size);color:#454545;color:var(--happyforms-color-part-description);overflow-wrap:anywhere}.happyforms-styles .happyforms-part input[type=email],.happyforms-styles .happyforms-part input[type=number],.happyforms-styles .happyforms-part input[type=password],.happyforms-styles .happyforms-part input[type=range],.happyforms-styles .happyforms-part input[type=tel],.happyforms-styles .happyforms-part input[type=text],.happyforms-styles .happyforms-part select.happyforms-select,.happyforms-styles .happyforms-part textarea{margin:0;padding:10px;border-width:1px;border-style:solid;border-color:#dbdbdb!important;border-color:var(--happyforms-color-part-border)!important;border-radius:6px;border-radius:6px!important;box-shadow:none;box-sizing:border-box;font-style:normal;font-size:16px;font-size:var(--happyforms-part-value-font-size);background-color:#fff!important;background-color:var(--happyforms-color-part-background)!important;color:#000;color:var(--happyforms-color-part-value);transition-property:none;transition-duration:.1s;transition-duration:var(--happyforms-transition-duration);transition-timing-function:ease-in}.happyforms-styles .happyforms-part input[type=email],.happyforms-styles .happyforms-part input[type=number],.happyforms-styles .happyforms-part input[type=password],.happyforms-styles .happyforms-part input[type=range],.happyforms-styles .happyforms-part input[type=tel],.happyforms-styles .happyforms-part input[type=text],.happyforms-styles .happyforms-part select.happyforms-select{height:auto!important}.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=range],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=tel],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-border-off .happyforms-part select.happyforms-select,.happyforms-styles.happyforms-form--part-border-off .happyforms-part textarea{border-color:transparent!important}.happyforms-styles .happyforms-part input[type=email]:focus,.happyforms-styles .happyforms-part input[type=number]:focus,.happyforms-styles .happyforms-part input[type=password]:focus,.happyforms-styles .happyforms-part input[type=tel]:focus,.happyforms-styles .happyforms-part input[type=text]:focus,.happyforms-styles .happyforms-part select.happyforms-select:focus,.happyforms-styles .happyforms-part textarea:focus{outline:0;border-color:#7aa4ff!important;border-color:var(--happyforms-color-part-border-focus)!important;color:#000;color:var(--happyforms-color-part-value);background-color:#fff!important;background-color:var(--happyforms-color-part-background-focus)!important;box-shadow:inset 0 0 0 1px #7aa4ff;box-shadow:inset 0 0 0 1px var(--happyforms-color-part-border-focus)}.happyforms-styles .happyforms-part select:focus{outline:0}.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=email]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=number]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=password]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=tel]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=text]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part select.happyforms-select:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part textarea:focus{border-color:transparent!important}.happyforms-styles .happyforms-part.happyforms-part--error input[type=email],.happyforms-styles .happyforms-part.happyforms-part--error input[type=number],.happyforms-styles .happyforms-part.happyforms-part--error input[type=password],.happyforms-styles .happyforms-part.happyforms-part--error input[type=range],.happyforms-styles .happyforms-part.happyforms-part--error input[type=tel],.happyforms-styles .happyforms-part.happyforms-part--error input[type=text],.happyforms-styles .happyforms-part.happyforms-part--error textarea{border-color:#f23000;border-color:var(--happyforms-color-error)}.happyforms-styles .happyforms-part.display-type--block .happyforms-part__el{width:100%}.happyforms-styles .happyforms-part ::-webkit-input-placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part ::-moz-placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part ::-ms-placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part ::placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part-el-wrap{position:relative}.happyforms-styles .happyforms-part-wrap{position:relative}.happyforms-styles .happyforms-part .option-label{border-radius:6px;line-height:1.3125;line-height:calc(var(--happyforms-part-value-font-size) * 1.3125);font-size:16px;font-size:var(--happyforms-part-value-font-size);overflow-wrap:anywhere}.happyforms-styles .happyforms-part .happyforms-part-option:last-of-type .option-label{margin-bottom:0}.happyforms-styles .option-label input[type=text]{position:relative;top:0;padding-top:1px;padding-bottom:1px;border:0;border-radius:0!important}.happyforms-styles .option-label input[type=text]:focus{border-top:0;border-right:0;border-left:0;box-shadow:none}.happyforms-styles .option-label input{top:3px}.happyforms-styles .happyforms-part--checkbox .happyforms-part-option,.happyforms-styles .happyforms-part--radio .happyforms-part-option{margin-bottom:10px}.happyforms-styles .happyforms-part--checkbox label.option-label,.happyforms-styles .happyforms-part--radio label.option-label{margin-bottom:0}.happyforms-part .option-label .happyforms-remaining-choice,.happyforms-styles .happyforms-part .option-label .label{font-weight:400;font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#000;color:var(--happyforms-color-part-description)}.happyforms-styles .happyforms-part .option-label input:checked+.checkmark{background-color:#000;background-color:var(--happyforms-color-choice-checkmark-bg-focus)}.happyforms-styles .happyforms-part-option__description{font-size:var(--happyforms-part-description-font-size);color:#000;color:var(--happyforms-color-part-description)}.happyforms-styles .happyforms-part .happyforms-part-option label.heading-label{font-weight:400;font-style:normal;font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#000;color:var(--happyforms-color-part-title)}.happyforms-styles .happyforms-part .checkmark{z-index:5;display:flex;align-items:center;justify-content:center;width:21px;min-width:21px;height:21px;margin:calc((var(--happyforms-part-value-font-size) * 1.3125 - 21px)/ 2) 0;border-radius:50%;border:1px solid;border-color:#dbdbdb;border-color:var(--happyforms-color-part-border);font-weight:700;font-size:14px;font-size:var(--happyforms-part-description-font-size);background-color:#fff;background-color:var(--happyforms-color-choice-checkmark-bg);color:#000;color:var(--happyforms-color-choice-checkmark-bg-focus)}.happyforms-styles .happyforms-part .checkmark svg{display:none;width:10px}.happyforms-styles .happyforms-part--checkbox .checkmark,.happyforms-styles .happyforms-part--legal .checkmark,.happyforms-styles .happyforms-part--table.happyforms-selection--multiple .checkmark{border-radius:6px}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--checkbox .checkmark,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--legal .checkmark,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--table.happyforms-selection--multiple .checkmark{border-radius:0}.happyforms-styles .happyforms-part .option-label input:checked+.checkmark{background-color:#000;background-color:var(--happyforms-color-choice-checkmark-bg-focus)}.happyforms-styles .happyforms-part .option-label input:focus+.checkmark{border-color:#7aa4ff;border-color:var(--happyforms-color-part-border-focus);box-shadow:inset 0 0 0 1px #7aa4ff;box-shadow:inset 0 0 0 1px var(--happyforms-color-part-border-focus)}.happyforms-styles .happyforms-part input:checked+.checkmark svg{display:block;color:#fff;color:var(--happyforms-color-choice-checkmark-color)}.happyforms-radio-circle{display:none;width:7px;height:7px;border-radius:50%;background-color:#fff;background-color:var(--happyforms-color-choice-checkmark-color)}.happyforms-styles .happyforms-part--poll input:checked+.checkmark .happyforms-radio-circle,.happyforms-styles .happyforms-part--radio input:checked+.checkmark .happyforms-radio-circle,.happyforms-styles .happyforms-part--table:not(.happyforms-selection--multiple) input:checked+.checkmark .happyforms-radio-circle{display:block}.happyforms-styles .happyforms-part input:checked+.checkmark svg{display:block;color:#fff;color:var(--happyforms-color-choice-checkmark-color)}.happyforms-styles .happyforms-part__select-bg{padding:1px 0 2px;border:1px solid;border-radius:6px;border-color:#dbdbdb;border-color:var(--happyforms-color-part-border);background-color:#fff;background-color:var(--happyforms-color-part-background)}.happyforms-styles .happyforms-part__select-wrap:after{border-top:6px solid #000;border-top-color:var(--happyforms-color-part-value)}.happyforms-styles .happyforms-part select.happyforms-select:invalid{color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part select.happyforms-select:focus{outline-width:1px;outline-color:#000;outline-color:var(--happyforms-color-part-value)}.happyforms-styles .happyforms-part-date__time-input .happyforms-spinner-arrow{border-top:6px solid #000;border-top:6px solid var(--happyforms-color-part-value);background-position:left top;background-size:cover}.happyforms-styles button[type=submit].happyforms-button--submit,.happyforms-styles button[type=submit][disabled].happyforms-button--submit{-webkit-appearance:none;height:auto;padding:15px 30px;border-radius:4px!important;border:1px solid transparent!important;border-color:var(--happyforms-color-submit-border)!important;font-weight:400;font-style:normal;font-size:16px;font-size:var(--happyforms-submit-button-font-size);color:#fff;color:var(--happyforms-color-submit-text);background-color:#000;background-color:var(--happyforms-color-submit-background);background:#000;background:var(--happyforms-color-submit-background);text-transform:none;transition-property:all;transition-duration:.25s;transition-duration:var(--happyforms-transition-duration);transition-timing-function:ease-in;white-space:normal;overflow-wrap:anywhere}.happyforms-styles button[type=submit]:not(:hover):not(:active):not(.has-background){background-color:#000;background-color:var(--happyforms-color-submit-background);background:#000;background:var(--happyforms-color-submit-background);color:#fff;color:var(--happyforms-color-submit-text)}.happyforms-styles button[type=submit].happyforms-button--submit:focus,.happyforms-styles button[type=submit].happyforms-button--submit:hover{cursor:pointer;border-radius:4px;border-color:transparent!important;border-color:var(--happyforms-color-submit-border)!important;background-color:#000;background-color:var(--happyforms-color-submit-background-hover);background:#000;background:var(--happyforms-color-submit-background-hover);text-transform:none;text-decoration:none;color:#fff;color:var(--happyforms-color-submit-text-hover)}.happyforms-styles button[type=submit][disabled].happyforms-button--submit:focus,.happyforms-styles button[type=submit][disabled].happyforms-button--submit:hover{cursor:default;background-color:#407fff;background-color:var(--happyforms-color-submit-background);background:#407fff;background:var(--happyforms-color-submit-background);color:#fff;color:var(--happyforms-color-submit-text)}.happyforms-styles .happyforms-visuallyhidden{position:absolute;border:0;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.happyforms-styles .happyforms-message-notices .happyforms-message-notice{padding:20px 15px;border-radius:6px;background-color:transparent;color:#454545}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-message-notices .happyforms-message-notice{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-message-notices .happyforms-message-notice{padding:20px 25px;border-radius:25px}.happyforms-styles .happyforms-message-notices .success{background-color:#ebf9f0;background-color:var(--happyforms-color-success-notice)}.happyforms-styles .happyforms-message-notices .success h2{color:#1eb452!important;color:var(--happyforms-color-success-notice-text)!important}.happyforms-styles .happyforms-message-notices .error{background-color:#ffeeea;background-color:var(--happyforms-color-error-notice)}.happyforms-styles .happyforms-message-notices .error h2{color:#f23000!important;color:var(--happyforms-color-error-notice-text)!important}.happyforms-styles .happyforms-message-notices h2{margin-top:0!important;margin-bottom:0!important;padding-top:0!important;padding-bottom:0!important;font-weight:400!important;font-size:16px!important}.happyforms-styles .happyforms-message-notices h2:before{display:none}.happyforms-styles .happyforms-message-notices h2 span{display:block;font-weight:400;font-size:14px}.happyforms-styles .happyforms-form__part .happyforms-message-notices h2{font-weight:400!important;font-size:16px!important;font-size:var(--happyforms-part-value-font-size)!important}.happyforms-styles .happyforms-form__part .happyforms-message-notice.error h2{color:#f23000;color:var(--happyforms-color-error)}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part .happyforms-part__select-bg,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=tel],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part textarea,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{border-radius:0!important}.happyforms-styles.happyforms-form--part-border-radius-square .option-label{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=tel],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part textarea,.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{border-radius:25px!important;padding-left:25px;padding-right:25px}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part textarea{padding:15px}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part .happyforms-part__select-bg{border-radius:25px;padding-left:15px}.happyforms-styles.happyforms-form--part-border-radius-pill .option-label{border-radius:25px}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::-webkit-input-placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::-moz-placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::-ms-placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-webkit-input-placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-moz-placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-ms-placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part--label-inside label .label{font-weight:700;font-size:14px;color:#000;color:var(--happyforms-color-part-title)}.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part textarea,.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{border-top-color:transparent!important;border-left-color:transparent!important;border-right-color:transparent!important;box-shadow:none!important}.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part textarea{transition-duration:0s}.happyforms-styles .happyforms-part input[type=email],.happyforms-styles .happyforms-part input[type=number],.happyforms-styles .happyforms-part input[type=password],.happyforms-styles .happyforms-part input[type=text],.happyforms-styles .happyforms-part textarea{transition:border-color .4s;transition:border-color var(--happyforms-transition-duration)}.happyforms-styles .happyforms-part--label-as_placeholder label{color:#888;color:var(--happyforms-color-part-placeholder);transition-duration:.4s;transition-duration:var(--happyforms-transition-duration)}.happyforms-styles .happyforms-part--label-as_placeholder .happyforms-part__label .label{color:#888;color:var(--happyforms-color-part-placeholder)}.happyforms-styles .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container label .label,.happyforms-styles .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container label .label,.happyforms-styles .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label .label,.happyforms-styles .happyforms-part--select.happyforms-part--filled.happyforms-part--label-as_placeholder .label{font-weight:700;font-size:14px;color:#000;color:var(--happyforms-color-part-value)}.happyforms-styles.happyforms-form--submit-button-border-hide button[type=submit].happyforms-button--submit{border-width:0!important}.happyforms-styles.happyforms-form--submit-button-border-radius-square button[type=submit].happyforms-button--submit,.happyforms-styles.happyforms-form--submit-button-border-radius-square button[type=submit].happyforms-button--submit:hover{border-radius:0!important}.happyforms-styles.happyforms-form--submit-button-border-radius-pill button[type=submit].happyforms-button--submit,.happyforms-styles.happyforms-form--submit-button-border-radius-pill button[type=submit].happyforms-button--submit:hover{border-radius:60px!important}.happyforms-styles.happyforms-form--submit-button-bold .happyforms-part--submit button[type=submit]{font-weight:700}.happyforms-styles.happyforms-form--submit-button-disable-transitions button[type=submit]{transition-duration:0s!important}.happyforms-styles.happyforms-form--submit-button-padding-narrow button[type=submit].happyforms-button--submit{padding:10px 20px}.happyforms-styles.happyforms-form--submit-button-padding-wide button[type=submit].happyforms-button--submit{padding:20px 50px}.happyforms-styles.happyforms-form--submit-button-fullwidth button[type=submit].happyforms-button--submit{padding-left:0;padding-right:0;margin-right:0}.happyforms-styles.happyforms-form--part-title-font-weight-bold .happyforms-part__label .label{font-weight:700}.happyforms-styles .happyforms-custom-select input[readonly=readonly]{cursor:pointer}.happyforms-styles .happyforms-custom-select-dropdown{background-color:#fff;background-color:var(--happyforms-color-dropdown-bg-color);border:1px solid #dbdbdb;border:1px solid var(--happyforms-color-part-border);border-radius:6px}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-custom-select-dropdown{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-custom-select-dropdown{border-radius:25px}.happyforms-styles .happyforms-custom-select-dropdown li{transition:background-color .2s ease-in;color:#000;color:var(--happyforms-color-dropdown-item-text);background-color:#fff;background-color:var(--happyforms-color-dropdown-item-bg);font-size:16px;font-size:var(--happyforms-part-value-font-size)}.happyforms-styles .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder{color:#888;color:var(--happyforms-color-part-placeholder)}.happyforms-styles .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item.active,.happyforms-styles .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item:hover{color:#000;color:var(--happyforms-color-dropdown-item-text-hover);background-color:#f4f4f5;background-color:var(--happyforms-color-dropdown-item-bg-hover)}.happyforms-styles .happyforms-part-preview .happyforms-part__label .label{font-weight:700;color:#000;color:var(--happyforms-color-table-row-odd-text)}.happyforms-styles .happyforms-part-preview .happyforms-part__el-preview{font-size:16px;font-size:var(--happyforms-part-value-font-size)}.happyforms-styles .happyforms-part-preview{background-color:#fcfcfc;background-color:var(--happyforms-color-table-row-odd)}.happyforms-styles .happyforms-part-preview:nth-child(2n){background-color:#efefef;background-color:var(--happyforms-color-table-row-even)}.happyforms-styles .happyforms-part-preview:nth-child(2n) .happyforms-part__label .label{color:#000;color:var(--happyforms-color-table-row-even-text)}.happyforms-styles .happyforms-form-preview>p{font-size:16px;font-size:var(--happyforms-part-value-font-size)}.happyforms-part-error-notice p{font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#f23000;color:var(--happyforms-color-error)}.happyforms-part-error-notice p svg{color:#f23000;color:var(--happyforms-color-error)}.happyforms-styles .happyforms-input-group__suffix a.happyforms-plain-button,.happyforms-styles .happyforms-input-group__suffix button.happyforms-plain-button{font-size:16px;font-size:var(--happyforms-part-value-font-size);color:var(--happyforms-color-part-value)}.happyforms-styles .happyforms-input-group__prefix,.happyforms-styles .happyforms-input-group__suffix{font-size:16px;font-size:var(--happyforms-part-value-font-size);background:#e8e8e8}.happyforms-styles.happyforms-form .happyforms-part .happyforms-input{position:relative;flex:1;width:100%}.happyforms-styles.happyforms-styles.happyforms-form--part-border-radius-square button.happyforms-pair-group__button{border-radius:0}.happyforms-styles.happyforms-styles.happyforms-form--part-border-radius-pill button.happyforms-pair-group__button{border-radius:25px}.happyforms-styles button.happyforms-pair-group__button:hover{background-color:#000;background-color:var(--happyforms-color-submit-background-hover)}.happyforms-styles.happyforms-form .happyforms-part .happyforms-input-group.with-prefix .happyforms-input>input{padding-left:10px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.happyforms-styles.happyforms-form .happyforms-part .happyforms-input-group.with-suffix .happyforms-input>input{padding-right:10px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-input-group__prefix{border-top-left-radius:0;border-bottom-left-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-input-group__prefix{border-top-left-radius:25px;border-bottom-left-radius:25px}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-input-group__suffix{border-top-right-radius:0;border-bottom-right-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-input-group__suffix{border-top-right-radius:25px;border-bottom-right-radius:25px}.happyforms-part__char-counter{font-size:14px;font-size:var(--happyforms-part-description-font-size);color:#454545;color:var(--happyforms-color-part-description)}.happyforms-styles .happyforms-part--rich_text div.mce-toolbar-grp{border-radius:6px;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#fff;border-color:#dbdbdb!important;border-color:var(--happyforms-color-part-border)!important}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--rich_text div.mce-toolbar-grp{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--rich_text div.mce-toolbar-grp{border-radius:25px;border-bottom-left-radius:0;border-bottom-right-radius:0}.happyforms-styles div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link{border-color:#7aa4ff!important;border-color:var(--happyforms-color-part-border-focus)!important}.happyforms-styles .happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-down:before{border-top-color:#7aa4ff;border-top-color:var(--happyforms-color-part-border-focus)}.happyforms-styles div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-input input::placeholder{color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn,.happyforms-styles .happyforms-part--rich_text .qt-dfw,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary{padding:2px;background-color:#fff;border-color:#fff}.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:active,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-styles .happyforms-part--rich_text .qt-dfw.active,.happyforms-styles .happyforms-part--rich_text .qt-dfw.active:hover,.happyforms-styles .happyforms-part--rich_text .qt-dfw:focus,.happyforms-styles .happyforms-part--rich_text .qt-dfw:hover,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover{border-color:transparent;border-radius:6px;background-color:#efefef}.happyforms-styles .happyforms-editor-toolbar-link svg,.happyforms-styles .happyforms-part--rich_text .mce-btn svg{fill:#000}.happyforms-styles .happyforms-part--rich_text .happyforms-visual-editor{padding-bottom:1.5px;border:0}.happyforms-styles .happyforms-part--rich_text .mce-edit-area{border-bottom-width:1.5px;border:1px solid #dbdbdb!important;border-radius:6px;border-top-left-radius:0;border-top-right-radius:0;transition:border-color .25s;transition:border-color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--rich_text .mce-edit-area{border-radius:0}.happyforms-styles .happyforms-part--rich_text.focus .mce-edit-area{border-color:#7aa4ff!important;border-color:var(--happyforms-color-part-border-focus)!important;box-shadow:inset 0 0 0 1px #7aa4ff;box-shadow:inset 0 0 0 1px var(--happyforms-color-part-border-focus)}.happyforms-styles .happyforms-part--rich_text .mce-edit-area{background-color:#fff!important;background-color:var(--happyforms-color-part-background)!important}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-edit-area{border-bottom-left-radius:25px;border-bottom-right-radius:25px}.happyforms-styles .happyforms-part--rich_text.focus .mce-edit-area{background-color:#fff!important;background-color:var(--happyforms-color-part-background-focus)!important}.happyforms-styles .happyforms-part--rich_text .mce-statusbar{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.happyforms-styles .happyforms-part--rich_text .mce-statusbar .mce-path:first-child{display:none}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--rich_text .mce-statusbar{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-statusbar{border-bottom-left-radius:25px;border-bottom-right-radius:25px}.happyforms-styles.happyforms-form--part-border-off .happyforms-part--rich_text .happyforms-visual-editor{padding-bottom:1px}.happyforms-part--email_integration .option-label .label p,.happyforms-part--legal .option-label .label p,.happyforms-part--mailchimp .option-label .label p,.happyforms-part--signature .option-label .label p{margin-top:0}.happyforms-part--email_integration .option-label .label p:last-child,.happyforms-part--legal .option-label .label p:last-child,.happyforms-part--mailchimp .option-label .label p:last-child,.happyforms-part--signature .option-label .label p:last-child{margin-bottom:0}.happyforms-styles button.happyforms-text-button{-webkit-appearance:none;height:auto;font-weight:400;font-style:normal;font-size:16px;background-color:#000;background-color:var(--happyforms-color-submit-background);background:#000;background:var(--happyforms-color-submit-background);text-transform:none;transition-property:all;transition-duration:.25s;transition-duration:var(--happyforms-transition-duration);transition-timing-function:ease-in;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;text-shadow:none;text-decoration:none;letter-spacing:0;white-space:normal;overflow-wrap:anywhere;outline:0}.happyforms-styles button.happyforms-text-button{background-color:transparent!important;padding:0;font-size:var(--happyforms-part-value-font-size);color:#000!important;color:var(--happyforms-color-part-value)!important;border:0 solid transparent!important;width:auto!important;border-width:0!important;font-weight:400!important;text-decoration:underline;display:inline-block;cursor:pointer}:root{--happyforms-form-width:100%}.happyforms-flex{display:flex;flex-flow:row wrap;align-items:flex-start;max-width:100%}.happyforms-form--hide-title .happyforms-flex{padding-top:0}.happyforms-form{max-width:100%;max-width:var(--happyforms-form-width);margin:0 auto;border-style:solid;border-width:0}.happyforms-form form{margin:0;padding:0;background-color:transparent}.happyforms-form.happyforms-form--padding-narrow{padding:1%}.happyforms-form.happyforms-form--padding-wide{padding:3.5%}.happyforms-form form.happyforms-form--submitting{opacity:.5}.happyforms-form--direction-rtl{direction:rtl}.happyforms-flex>input[type=checkbox]{display:none!important}h3.happyforms-form__title{margin:0;padding:0}.happyforms-form--hide-title h3.happyforms-form__title{display:none}.happyforms-form--title-text-align-right h3.happyforms-form__title{text-align:right}.happyforms-form--title-text-align-center h3.happyforms-form__title{text-align:center}.happyforms-form__part{position:relative;display:block;box-sizing:border-box;width:100%;margin-bottom:15px;padding:5px 1%}.happyforms-form__part:last-child{margin-bottom:0}@media screen and (min-width:800px){.happyforms-part--width-half{width:50%}.happyforms-part--width-third{width:33.333%}.happyforms-part--width-quarter{width:25%}}.happyforms-part--width-half,.happyforms-part--width-third{align-self:flex-start}.happyforms-part--width-auto{align-self:flex-start;flex-grow:1;width:auto;max-width:75%}.happyforms-part--width-auto+.happyforms-part--recaptcha,.happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-part--width-auto+.happyforms-part--submit{align-self:center;width:auto!important;margin-bottom:0!important;padding-top:5px;padding-bottom:0}.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-part--width-auto+.happyforms-part--recaptcha{top:-13px}.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--submit{top:-10px}.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha{top:3px}.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--submit{top:-25px}.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha{top:-23px}.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit{top:-45px}.happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{width:100%;padding:17px 50px}.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--submit{left:-1.5%;padding-left:0;padding-right:0}.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--submit{left:-3.5%;padding-left:0}.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--submit{left:-1%;padding-left:0}.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{padding-top:8px;padding-bottom:9px;border-top-left-radius:0;border-bottom-left-radius:0}.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-wide .happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{padding-top:13px;padding-bottom:15px}.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-narrow .happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{padding-top:3px;padding-bottom:4px}.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-as_placeholder+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-as_placeholder+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-inside+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-inside+.happyforms-part--submit button[type=submit]{padding-top:16px;padding-bottom:18px}.happyforms-part__label{display:inline-block;margin-bottom:15px}.happyforms-part__label .happyforms-optional,.happyforms-part__label .happyforms-required,.happyforms-part__label .label{padding:0;white-space:normal}.happyforms-form__part[data-happyforms-required] .happyforms-part__label .happyforms-optional{display:none}.happyforms-form__part .happyforms-part__label .happyforms-required{display:none}.happyforms-form__part[data-happyforms-required] .happyforms-part__label .happyforms-required{display:inline-block}.happyforms-part__description{display:block;margin:-3px 0 10px}.happyforms-part--focus-reveal-description .happyforms-part__description{display:none}.happyforms-form__part.focus .happyforms-part__description,.happyforms-part--focus-reveal-description input:focus+.happyforms-part__description,.happyforms-part--focus-reveal-description textarea:focus+.happyforms-part__description{display:block}.happyforms-form--part-description-text-align-center .happyforms-part__description{text-align:center}.happyforms-form--part-description-text-align-right .happyforms-part__description{text-align:right}.happyforms-part input[type=email],.happyforms-part input[type=number],.happyforms-part input[type=password],.happyforms-part input[type=range],.happyforms-part input[type=tel],.happyforms-part input[type=text],.happyforms-part textarea,.happyforms-part.happyforms-part select.happyforms-select{width:100%;box-sizing:border-box;max-width:none}.happyforms-part.happyforms-part select.happyforms-select{appearance:none!important;-moz-appearance:none!important;-webkit-appearance:none!important;background-image:none!important}.happyforms-part textarea{height:auto}.happyforms-form--part-value-text-align-center .happyforms-part input[type=email],.happyforms-form--part-value-text-align-center .happyforms-part input[type=number],.happyforms-form--part-value-text-align-center .happyforms-part input[type=password],.happyforms-form--part-value-text-align-center .happyforms-part input[type=tel],.happyforms-form--part-value-text-align-center .happyforms-part input[type=text],.happyforms-form--part-value-text-align-center .happyforms-part textarea,.happyforms-form--part-value-text-align-center .happyforms-part--choice .option-label{text-align:center}.happyforms-form--part-value-text-align-center .happyforms-part--choice .happyforms-part__el{justify-content:center}.happyforms-form--part-value-text-align-right .happyforms-part input[type=email],.happyforms-form--part-value-text-align-right .happyforms-part input[type=number],.happyforms-form--part-value-text-align-right .happyforms-part input[type=password],.happyforms-form--part-value-text-align-right .happyforms-part input[type=tel],.happyforms-form--part-value-text-align-right .happyforms-part input[type=text],.happyforms-form--part-value-text-align-right .happyforms-part textarea,.happyforms-form--part-value-text-align-right .happyforms-part--choice .option-label{text-align:right}.happyforms-form--part-value-text-align-right .happyforms-part--choice .happyforms-part__el{justify-content:flex-end}.happyforms-part.happyforms-part--error input[type=email],.happyforms-part.happyforms-part--error input[type=number],.happyforms-part.happyforms-part--error input[type=password],.happyforms-part.happyforms-part--error input[type=range],.happyforms-part.happyforms-part--error input[type=tel],.happyforms-part.happyforms-part--error input[type=text],.happyforms-part.happyforms-part--error textarea{border-color:#ff7550}.happyforms-part.display-type--block .happyforms-part__el{width:100%}.happyforms-part-el-wrap{position:relative}.happyforms-part-wrap{position:relative}.happyforms-part--label-below .happyforms-part-wrap{display:flex;flex-flow:row wrap-reverse;align-content:flex-end}.happyforms-part--label-below .happyforms-part__label{order:2;margin-top:10px;margin-bottom:5px}.happyforms-part--label-below .happyforms-part__description{order:1;margin-top:0}.happyforms-part--label-below.happyforms-part--date .happyforms-part__el{width:100%;order:2}.happyforms-part--date .happyforms-part__description{width:100%}.happyforms-part--label-left .happyforms-part__description{width:100%}.happyforms-part--label-left .happyforms-part-wrap{display:flex;flex-flow:row;flex-wrap:wrap}@media screen and (min-width:800px){.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__label-container{float:none;width:25%;margin-bottom:0;align-self:flex-start}}.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__el{width:75%}.happyforms-part--label-left.happyforms-part--date .happyforms-custom-select{width:100%}@media screen and (max-width:800px){.happyforms-part--label-left .happyforms-part-wrap{flex-flow:column}.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__label{align-self:flex-start}.happyforms-part--label-left .happyforms-custom-select,.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__el{width:100%}}.happyforms-part--label-hidden .happyforms-part-wrap .happyforms-part__label{display:none!important}.happyforms-part .option-label{display:flex;align-items:center;position:relative;cursor:pointer;padding:0 5px 5px 0}.happyforms-part--choice .option-label{margin-right:20px}.happyforms-part--choice.happyforms-part-options-width--full .option-label{margin-right:0}.happyforms-styles .happyforms-part .happyforms-part-option .option-label{align-items:flex-start}.happyforms-styles .happyforms-part .happyforms-part-option.disabled-option .option-label,.happyforms-styles .happyforms-part .happyforms-table__cell.disabled-option .option-label{cursor:default}@media screen and (max-width:800px){.happyforms-part--choice .option-label{margin-right:0}}.happyforms-part--choice .option-label input:focus{outline:0}.happyforms-part .option-label .label-wrap{position:relative;display:inline-block;padding:0 10px;white-space:normal;color:inherit}.happyforms-form--direction-rtl .happyforms-part--choice .option-label .label{margin-right:0}.happyforms-part-option:last-of-type{margin-bottom:0!important}.happyforms-part-option__description{display:block;width:auto;max-width:400px;margin-top:0;margin-left:31px;flex-basis:100%;font-weight:400;font-weight:var(--happyforms-form-font-weight);line-height:1.4}.happyforms-part--choice.display-type--block .happyforms-part-option__description{max-width:none}.happyforms-part.display-type--block .option-label{display:flex;margin-right:0;flex-wrap:wrap}.happyforms-part .happyforms-part-option.option-heading{width:100%}.happyforms-part--choice .happyforms-part__el{display:flex;flex-flow:row wrap}@media screen and (max-width:800px){.happyforms-part--choice .happyforms-part__el{flex-flow:column wrap}}.happyforms-part--choice{margin-bottom:0}.happyforms-part--choice.display-type--block{margin-bottom:15px}.happyforms-part--choice.happyforms-part-options-width--full .happyforms-part__option{width:100%}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__el,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__el,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__el{margin:0 -1%}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option{padding:0 1%}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option label,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option label,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option label{margin-right:0}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option{width:50%}.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option{width:33.333%}.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option{width:25%}.happyforms-part--choice .happyforms-part__el .happyforms-part__description{flex:0 1 100%;width:100%;margin-top:-5px;margin-bottom:20px}.happyforms-part--choice.display-type--block .happyforms-part__el .happyforms-part__description{flex:0;width:auto;margin-top:5px;margin-bottom:0}@media screen and (max-width:800px){.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option{width:100%}}.happyforms-part--choice.display-type--block .happyforms-part__el{display:flex!important;flex-flow:column wrap}.happyforms-part .checkmark svg{display:none}.happyforms-part--legal .option-label p:last-child{margin-bottom:0}.happyforms-part--label-below .happyforms-custom-select,.happyforms-part--label-below .happyforms-part__el,.happyforms-part--label-below input,.happyforms-part--label-below textarea{order:3}.happyforms-part--label-below .happyforms-custom-select,.happyforms-part--label-below .happyforms-part__el{width:100%}.happyforms-form--part-title-text-align-center .happyforms-part__label{text-align:center}.happyforms-form--part-title-text-align-center .happyforms-part--label-above .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-as_placeholder .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-below .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-inside .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-show .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-above .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-as_placeholder .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-show .happyforms-part__label{width:100%}.happyforms-form--part-title-text-align-right .happyforms-part--label-as_placeholder .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-inside .happyforms-part__label{width:calc(100% - 20px)}.happyforms-form--part-title-text-align-right.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder .happyforms-part__label{width:calc(100% - 30px)}.happyforms-form--part-title-text-align-center .happyforms-part--label-left .happyforms-part__label{align-self:flex-start}.happyforms-form--part-title-text-align-right .happyforms-part__label{text-align:right}.happyforms-form--part-title-text-align-right .happyforms-part--label-left .happyforms-part__label{align-self:flex-start;margin-bottom:10px;padding-right:15px}.happyforms-part--label-hidden .happyforms-part-wrap>.happyforms-part__label{display:none!important}.happyforms-part__select-wrap{position:relative;flex:1;padding:0 0 0 2%}.happyforms-part__select-wrap{height:100%}.happyforms-part__select-bg{padding:1px 0 2px;border:1px solid;border-color:#dbdbdb}.happyforms-part__select-wrap:first-of-type{padding-left:0!important}.happyforms-part__select-wrap:after{content:'';position:absolute;top:44%;right:15px;z-index:1;display:block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid}.happyforms-part select:focus{outline-width:1px;outline-color:#000}.happyforms-part__select-wrap:last-child{padding-right:0}.happyforms-part--submit{display:flex;flex-flow:row wrap;align-items:center;width:100%;margin-bottom:0;padding-top:10px}.happyforms-message-notices{padding:0 1%;margin:0 0 25px 0}form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice{width:100%;box-sizing:border-box}form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a{border:0}.happyforms-flex>.happyforms-message-notices p:last-child{margin-bottom:0}.happyforms-form__part .happyforms-message-notice.error h2{color:#ff7550}.happyforms-form__title+.happyforms-message-notices{margin-top:25px}.happyforms-part--label-inside .happyforms-part__label-container{position:absolute;top:8px;left:10px;z-index:2;width:98%}.happyforms-part--label-as_placeholder input,.happyforms-part--label-as_placeholder textarea,.happyforms-part--label-inside input,.happyforms-part--label-inside textarea{padding-top:30px!important;padding-bottom:7px!important}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder input,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder textarea,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-inside input,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-inside textarea{padding-top:22px!important;padding-bottom:5px!important}.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder input,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder textarea,.happyforms-form--part-inner-padding-wide .happyforms-part--label-inside input,.happyforms-form--part-inner-padding-wide .happyforms-part--label-inside textarea{padding-top:30px!important;padding-bottom:10px!important}.happyforms-part input[type=email],.happyforms-part input[type=number],.happyforms-part input[type=password],.happyforms-part input[type=text],.happyforms-part textarea{margin-bottom:0;transition:border-color .4s;transition:border-color var(--happyforms-transition-duration)}.happyforms-part--label-below .happyforms-part__label-container{width:100%}.happyforms-part--label-as_placeholder label{transition-duration:.4s}.happyforms-part--label-as_placeholder ::-webkit-input-placeholder{opacity:0}.happyforms-part--label-as_placeholder ::-moz-placeholder{opacity:0}.happyforms-part--label-as_placeholder ::-ms-placeholder{opacity:0}.happyforms-part--label-as_placeholder ::placeholder{opacity:0}.happyforms-part--label-as_placeholder label{position:absolute;left:11px;top:23px;z-index:5;transition-property:top}.happyforms-form--direction-rtl .happyforms-part--label-as_placeholder label{left:auto;right:11px}.happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,.happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,.happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,.happyforms-part--select.happyforms-part--label-as_placeholder.happyforms-part--filled label{top:8px}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder label{top:19px;left:5px}.happyforms-form--direction-rtl.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder label{right:5px;left:auto}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label{top:7px}.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder label{top:25px;left:15px}.happyforms-form--direction-rtl.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder label{right:15px;left:auto}.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label{top:12px}.happyforms-form--part-outer-padding-narrow .happyforms-form__part{margin-bottom:5px;padding:0 .5%}.happyforms-form--part-outer-padding-narrow .happyforms-message-notices{padding-left:.5%;padding-right:.5%}.happyforms-form--part-outer-padding-narrow .happyforms-part__select-wrap{padding:0}.happyforms-form--part-outer-padding-narrow .happyforms-part-option{margin-right:-5px}.happyforms-form--part-outer-padding-narrow .happyforms-part.display-type--block .happyforms-part-option{margin-right:0;margin-bottom:5px}.happyforms-form--part-outer-padding-narrow .happyforms-part--choice .option-label{margin-right:15px}.happyforms-form--part-outer-padding-wide .happyforms-form__part{padding:20px 3%}.happyforms-form--part-outer-padding-wide .happyforms-message-notices{padding-left:3%;padding-right:3%}.happyforms-form--part-outer-padding-wide .happyforms-part .happyforms-part-option{margin-right:15px}.happyforms-form--part-outer-padding-wide .happyforms-part.display-type--block .happyforms-part-option{margin-right:0;margin-bottom:35px}.happyforms-form--part-inner-padding-narrow .happyforms-part .option-label,.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=email],.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=number],.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=tel],.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=text],.happyforms-form--part-inner-padding-narrow .happyforms-part textarea,.happyforms-form--part-inner-padding-narrow .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{padding:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--placeholder .happyforms-part__el{padding:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--legal label{margin-left:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part__label{margin-bottom:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-below .happyforms-part__label{margin-top:5px}.happyforms-form--part-inner-padding-wide .happyforms-part .option-label,.happyforms-form--part-inner-padding-wide .happyforms-part input[type=email],.happyforms-form--part-inner-padding-wide .happyforms-part input[type=number],.happyforms-form--part-inner-padding-wide .happyforms-part input[type=tel],.happyforms-form--part-inner-padding-wide .happyforms-part input[type=text],.happyforms-form--part-inner-padding-wide .happyforms-part textarea,.happyforms-form--part-inner-padding-wide .happyforms-part--placeholder .happyforms-part__el,.happyforms-form--part-inner-padding-wide .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{padding:15px}.happyforms-form--part-inner-padding-wide .happyforms-part--legal .option-label{padding-left:0}.happyforms-form--part-inner-padding-wide .happyforms-part--legal .option-label .label{padding-left:20px}.happyforms-form--part-inner-padding-wide .happyforms-part .happyforms-part__select-wrap:after{top:45%}.happyforms-form--part-hide-labels .happyforms-part__label{display:none}.happyforms-form--submit-button-fullwidth button[type=submit].happyforms-button--submit{width:100%}button[type=submit][disabled].happyforms-button--submit{cursor:default}.happyforms-form--submit-button-align-center .happyforms-part--submit{text-align:center}.happyforms-form--submit-button-align-right .happyforms-part--submit{text-align:right}.happyforms-part--rating .happyforms-visuallyhidden,.ui-helper-hidden-accessible{position:absolute;border:0;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.widget button[type=submit].happyforms-button--submit,.widget button[type=submit][disabled].happyforms-button--submit,.widget button[type=submit][disabled].happyforms-button--submit:hover{width:100%}.happyforms-custom-select input[readonly=readonly]{cursor:pointer}.happyforms-custom-select-dropdown{display:none;position:absolute;top:calc(100% + 2px);left:0;z-index:10;list-style:none;margin:0!important;padding:5px 0!important;text-align:left;background-color:#fff;border:1px solid #dbdbdb;white-space:nowrap;width:100%;max-height:250px;overflow-y:scroll}.happyforms-custom-select .happyforms-part__select-wrap input[data-searchable=false]{cursor:pointer}.happyforms-part__select-wrap{cursor:pointer}.happyforms-custom-select-dropdown.active{display:block!important}.happyforms-custom-select-dropdown li{cursor:pointer;display:flex;align-items:center;margin:0;padding:5px 10px;min-height:35px;color:#000;background-color:#fff;white-space:normal;overflow-wrap:anywhere}.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder{color:#888}.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__not-found{display:none;cursor:default}.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item.active,.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item:hover{color:#000;background-color:#dbdbdb}.happyforms-part--with-autocomplete .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder,.happyforms-part-date--required .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder,.happyforms-part-select--required .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder{display:none}.happyforms-part-preview .happyforms-part__label{cursor:default;margin-bottom:10px}.happyforms-part-preview .happyforms-part__label .label{font-weight:700}.happyforms-form-preview .happyforms-part--submit{margin-top:30px}.happyforms-part--submit *{margin-right:20px}.happyforms-form--submit-button-align-center .happyforms-part--submit,.happyforms-form--submit-button-fullwidth .happyforms-part--submit{flex-flow:column wrap;align-items:center}.happyforms-form--submit-button-align-center .happyforms-part--submit a,.happyforms-form--submit-button-fullwidth .happyforms-part--submit a{order:2;margin-top:10px;margin-right:0}.happyforms-form--submit-button-align-right .happyforms-part--submit{justify-content:flex-end}.happyforms-form--submit-button-align-center .happyforms-part--submit input,.happyforms-form--submit-button-align-right .happyforms-part--submit input{margin-right:0}.happyforms-form--submit-button-align-right .happyforms-part--submit input+a{margin-left:20px;margin-right:0}@media screen and (max-width:800px){.happyforms-form-preview .happyforms-part--submit{flex-flow:column wrap}.happyforms-form-preview .happyforms-part--submit input{margin-right:0}}.happyforms-hide{display:none}.happyforms-part-preview{margin-bottom:0;padding:10px 1%;margin:0}.happyforms-part-preview{background-color:#fcfcfc}.happyforms-part-preview+.happyforms-part--recaptcha{margin-top:20px}.happyforms-part-preview:nth-child(2n){background-color:#efefef}.happyforms-part-preview:nth-child(2n) .happyforms-part__label .label{color:#000}.happyforms-form-preview>p{padding:45px 1% 10px}.happyforms-part__char-counter{display:none;margin-top:5px;pointer-events:none}.happyforms-part .happyforms-remaining-choice,.happyforms-part__char-counter .counter-label{text-transform:lowercase}.happyforms-part--checkbox .option-label .label-wrap,.happyforms-part--radio .option-label .label-wrap{padding-right:5px;flex:1}.happyforms-custom-select-dropdown .happyforms-remaining-choice{padding-left:5px}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#eee;clip:auto!important;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.happyforms-part-error-notice,.happyforms-part-error-notice p{margin:0;padding:0}.happyforms-part-error-notice{margin:10px 0 0}.happyforms-part-error-notice p{display:flex;flex-flow:row nowrap;align-items:center;-moz-user-select:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;line-height:1.2}.happyforms-part-error-notice p svg{content:'';display:inline-block;width:17px;height:17px;margin:0 8px 0 0}.happyforms-input-group{display:flex;align-items:stretch;flex-flow:row wrap}.happyforms-form .happyforms-part .happyforms-input{position:relative;flex:1;width:100%;display:flex;align-items:stretch}.happyforms-form .happyforms-part .happyforms-input-group.with-prefix .happyforms-input>input{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.happyforms-form .happyforms-part .happyforms-input-group.with-suffix .happyforms-input>input{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.happyforms-input-group__prefix,.happyforms-input-group__suffix{display:flex;align-items:center;max-height:100%;padding:10px 15px;font-weight:400;border:1px solid #dbdbdb;border:1px solid var(--happyforms-color-part-border)!important;background:#e8e8e8;text-shadow:none}.happyforms-input-group__prefix{border-right:0!important;border-top-left-radius:6px;border-bottom-left-radius:6px}.happyforms-input-group__suffix{border-left:0!important;border-top-right-radius:6px;border-bottom-right-radius:6px}.happyforms-input-group__prefix span,.happyforms-input-group__suffix span{word-break:break-word}.happyforms-input-group__suffix.happyforms-input-group__suffix--button{position:relative;padding:0!important}.happyforms-input-group__suffix a.happyforms-plain-button,.happyforms-input-group__suffix button.happyforms-plain-button{outline:0;margin:0;padding:10px 15px;line-height:1;font-weight:400;box-shadow:none;border:0;background-color:transparent;text-transform:none}.happyforms-input-group input{width:100%}.happyforms-part--choice .happyforms-part-option--other input[type=text]{display:none;margin-top:10px!important}.happyforms-part--choice .happyforms-part-option--other input[type=text].hf-show{display:block}.happyforms-part--select .happyforms-part-option--other input[type=text]{display:none;margin-top:10px}.happyforms-part--select .happyforms-part-option--other input[type=text].hf-show{display:block}.happyforms-part--rich_text div.mce-toolbar-grp{position:relative;left:-1px;width:calc(100% - 2px);border:1px solid #dbdbdb!important;border-bottom:0!important}.happyforms-part--rich_text div.mce-panel{background:0 0!important}.happyforms-part--rich_text.focus div.mce-toolbar-grp{left:0}.happyforms-part--rich_text div.mce-toolbar-grp>div{padding:0 2px}.happyforms-part--rich_text.focus div.mce-toolbar-grp>div{padding:0 1px}.happyforms-part--rich_text .mce-top-part::before{box-shadow:none}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link{background-color:#fff;border-width:1px;box-shadow:none;border-radius:6px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up:before{top:-11px;left:50%;border-width:0 11px 11px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-10px;border-width:9px 9px 0}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;left:50%;border-top-color:#fff}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-left:before{left:18px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-left.mce-arrow-down:after{left:19px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up.mce-arrow-right:before{left:auto;right:18px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up:after{left:calc(50% + 0px);top:-10px;border-bottom-color:#fff;border-width:0 10px 10px 10px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up.mce-arrow-left:after{left:19px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-right:after{left:auto;right:19px}.happyforms-editor-toolbar-link .mce-toolbar .mce-btn-group .mce-btn button,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn button{cursor:pointer!important;padding:0!important;background-color:transparent}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-input input{margin:0;padding:5px;border:0;background-color:#fff}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-preview{margin:7px 6px}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-input input::placeholder{color:#888}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn,div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn.mce-primary{border-color:transparent}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn:active,div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn:hover{border-color:transparent!important;border-radius:6px;background-color:#efefef!important}.happyforms-part--rich_text .mce-panel{z-index:1!important}.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn,.happyforms-part--rich_text .qt-dfw,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary{padding:2px;background-color:transparent}.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:active,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-part--rich_text .qt-dfw.active,.happyforms-part--rich_text .qt-dfw.active:hover,.happyforms-part--rich_text .qt-dfw:focus,.happyforms-part--rich_text .qt-dfw:hover,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover{background:0 0;box-shadow:none;color:inherit}.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:focus,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover{box-shadow:none}.happyforms-part--rich_text .mce-btn svg{fill:currentColor}.happyforms-editor-toolbar-link svg{fill:#000}.happyforms-part--rich_text .mce-edit-area,.happyforms-part--rich_text .mce-statusbar .mce-container-body,.happyforms-part--rich_text div.mce-statusbar{border-width:0!important}.happyforms-part--rich_text div.mce-toolbar-grp{background-color:#fff!important}.happyforms-part--rich_text .mce-tinymce.mce-container{border:0;border-width:0!important;box-shadow:none}.happyforms-part--rich_text.focus .mce-tinymce.mce-container{overflow:hidden}.happyforms-part--rich_text .mce-statusbar{position:absolute;left:2px;bottom:2px;width:calc(100% - 4px);background-color:transparent!important}.happyforms-part--rich_text .happyforms-visual-editor{position:relative;overflow:hidden;padding:1px 1px 0;border:1px solid}.happyforms-part--rich_text.focus .happyforms-visual-editor{outline:0}.happyforms-form--part-border-off .happyforms-part--rich_text .happyforms-visual-editor{border-color:transparent}.happyforms-form--part-borders-bottom-only .happyforms-part--rich_text.focus .happyforms-visual-editor{border-bottom-width:1px}.happyforms-form--part-border-off .happyforms-part--rich_text .mce-statusbar .mce-container-body,.happyforms-form--part-border-off .happyforms-part--rich_text div.mce-toolbar-grp{border:0}.happyforms-form--part-borders-bottom-only .happyforms-part--rich_text .happyforms-visual-editor{box-shadow:none;border-top-color:transparent;border-left-color:transparent;border-right-color:transparent}.happyforms-form--part-borders-bottom-only .happyforms-part--rich_text .mce-statusbar .mce-container-body{border-left:0;border-right:0}.happyforms-form--part-border-radius-square .happyforms-part--rich_text .happyforms-visual-editor,.happyforms-form--part-border-radius-square .happyforms-part--rich_text .mce-tinymce.mce-container{border-radius:0!important}.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .happyforms-visual-editor,.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-tinymce.mce-container{border-radius:25px!important}.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-toolbar .mce-btn-group.mce-first{margin-left:10px}.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-container-body .mce-resizehandle{right:10px;bottom:3px}.happyforms-form--part-inner-padding-narrow .happyforms-part--rich_text .mce-content-body{margin-top:0;margin-bottom:0}.happyforms-part--rich_text .mce-edit-area{position:relative;left:-1px;padding:0;overflow:hidden}.happyforms-part--rich_text.focus .mce-edit-area{left:0}.happyforms-form--part-inner-padding-wide .happyforms-part--rich_text.focus .mce-edit-area{width:calc(100% - 10px)}.happyforms-part--rich_text.focus .mce-edit-area iframe{margin-left:-1px}.happyforms-part--rich_text .mce-edit-area iframe{position:relative;top:-5px}.happyforms-form--part-inner-padding-wide .happyforms-part--rich_text .mce-edit-area{padding:0 5px 5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--rich_text .mce-edit-area iframe{top:-10px;left:-5px}.happyforms-part--rich_text .mce-container-body .mce-resizehandle{right:-1px;bottom:-1px;overflow-y:hidden;resize:horizontal}.happyforms-part--rich_text .mce-container-body .mce-resizehandle .mce-i-resize:before{resize:horizontal;overflow-y:scroll;color:transparent}
1
+ :root{--happyforms-color-primary:#000;--happyforms-color-success-notice:#ebf9f0;--happyforms-color-success-notice-text:#1eb452;--happyforms-color-error:#f23000;--happyforms-color-error-notice:#ffeeea;--happyforms-color-error-notice-text:#f23000;--happyforms-color-notice-text:#454545;--happyforms-color-part-title:#000;--happyforms-color-part-value:#000;--happyforms-color-part-placeholder:#888888;--happyforms-color-part-description:#454545;--happyforms-color-part-border:#dbdbdb;--happyforms-color-part-border-focus:#7aa4ff;--happyforms-color-part-background:#fff;--happyforms-color-part-background-focus:#fff;--happyforms-color-submit-background:#000000;--happyforms-color-submit-background-hover:#000000;--happyforms-color-submit-border:transparent;--happyforms-color-submit-text:#fff;--happyforms-color-submit-text-hover:#fff;--happyforms-color-table-row-odd:#fcfcfc;--happyforms-color-table-row-even:#efefef;--happyforms-color-table-row-odd-text:#000;--happyforms-color-table-row-even-text:#000;--happyforms-color-choice-checkmark-bg:#fff;--happyforms-color-choice-checkmark-bg-focus:#000;--happyforms-color-choice-checkmark-color:#fff;--happyforms-color-dropdown-bg-color:#fff;--happyforms-color-dropdown-item-bg:#fff;--happyforms-color-dropdown-item-text:#000;--happyforms-color-dropdown-item-bg-hover:#f4f4f5;--happyforms-color-dropdown-item-text-hover:#000;--happyforms-color-divider-hr:#ccc;--happyforms-form-title-font-size:32px;--happyforms-form-font-weight:normal;--happyforms-part-title-font-size:16px;--happyforms-part-description-font-size:12px;--happyforms-part-value-font-size:16px;--happyforms-submit-button-font-size:16px;--happyforms-transition-duration:0.25s}.happyforms-form.happyforms-styles form{font-weight:400;font-weight:var(--happyforms-form-font-weight);transition:opacity .25s ease-in-out;transition:opacity var(--happyforms-transition-duration) ease-in-out}.happyforms-styles h3.happyforms-form__title{font-weight:400;font-size:32px;font-size:var(--happyforms-form-title-font-size);color:#000;color:var(--happyforms-color-primary)}.happyforms-styles .happyforms-part__label{line-height:1;font-weight:400;font-size:16px;font-size:var(--happyforms-part-title-font-size);background-color:transparent;overflow-wrap:anywhere}.happyforms-styles .happyforms-part__label .happyforms-optional,.happyforms-styles .happyforms-part__label .label{font-weight:400;font-style:normal;font-size:16px;font-size:var(--happyforms-part-title-font-size);color:#000;color:var(--happyforms-color-part-title);background-color:transparent}.happyforms-styles .happyforms-part__description{line-height:1.4;font-size:14px;font-size:var(--happyforms-part-description-font-size);color:#454545;color:var(--happyforms-color-part-description);overflow-wrap:anywhere}.happyforms-styles .happyforms-part input[type=email],.happyforms-styles .happyforms-part input[type=number],.happyforms-styles .happyforms-part input[type=password],.happyforms-styles .happyforms-part input[type=range],.happyforms-styles .happyforms-part input[type=tel],.happyforms-styles .happyforms-part input[type=text],.happyforms-styles .happyforms-part select.happyforms-select,.happyforms-styles .happyforms-part textarea{margin:0;padding:10px;border-width:1px;border-style:solid;border-color:#dbdbdb!important;border-color:var(--happyforms-color-part-border)!important;border-radius:6px;border-radius:6px!important;box-shadow:none;box-sizing:border-box;font-style:normal;font-size:16px;font-size:var(--happyforms-part-value-font-size);background-color:#fff!important;background-color:var(--happyforms-color-part-background)!important;color:#000;color:var(--happyforms-color-part-value);transition-property:none;transition-duration:.1s;transition-duration:var(--happyforms-transition-duration);transition-timing-function:ease-in}.happyforms-styles .happyforms-part input[type=email],.happyforms-styles .happyforms-part input[type=number],.happyforms-styles .happyforms-part input[type=password],.happyforms-styles .happyforms-part input[type=range],.happyforms-styles .happyforms-part input[type=tel],.happyforms-styles .happyforms-part input[type=text],.happyforms-styles .happyforms-part select.happyforms-select{height:auto!important}.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=range],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=tel],.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-border-off .happyforms-part select.happyforms-select,.happyforms-styles.happyforms-form--part-border-off .happyforms-part textarea{border-color:transparent!important}.happyforms-styles .happyforms-part input[type=email]:focus,.happyforms-styles .happyforms-part input[type=number]:focus,.happyforms-styles .happyforms-part input[type=password]:focus,.happyforms-styles .happyforms-part input[type=tel]:focus,.happyforms-styles .happyforms-part input[type=text]:focus,.happyforms-styles .happyforms-part select.happyforms-select:focus,.happyforms-styles .happyforms-part textarea:focus{outline:0;border-color:#7aa4ff!important;border-color:var(--happyforms-color-part-border-focus)!important;color:#000;color:var(--happyforms-color-part-value);background-color:#fff!important;background-color:var(--happyforms-color-part-background-focus)!important;box-shadow:inset 0 0 0 1px #7aa4ff;box-shadow:inset 0 0 0 1px var(--happyforms-color-part-border-focus)}.happyforms-styles .happyforms-part select:focus{outline:0}.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=email]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=number]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=password]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=tel]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part input[type=text]:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part select.happyforms-select:focus,.happyforms-styles.happyforms-form--part-border-off .happyforms-part textarea:focus{border-color:transparent!important}.happyforms-styles .happyforms-part.happyforms-part--error input[type=email],.happyforms-styles .happyforms-part.happyforms-part--error input[type=number],.happyforms-styles .happyforms-part.happyforms-part--error input[type=password],.happyforms-styles .happyforms-part.happyforms-part--error input[type=range],.happyforms-styles .happyforms-part.happyforms-part--error input[type=tel],.happyforms-styles .happyforms-part.happyforms-part--error input[type=text],.happyforms-styles .happyforms-part.happyforms-part--error textarea{border-color:#f23000;border-color:var(--happyforms-color-error)}.happyforms-styles .happyforms-part.display-type--block .happyforms-part__el{width:100%}.happyforms-styles .happyforms-part ::-webkit-input-placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part ::-moz-placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part ::-ms-placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part ::placeholder{font-weight:400;font-style:normal;color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part-el-wrap{position:relative}.happyforms-styles .happyforms-part-wrap{position:relative}.happyforms-styles .happyforms-part .option-label{border-radius:6px;line-height:1.3125;line-height:calc(var(--happyforms-part-value-font-size) * 1.3125);font-size:16px;font-size:var(--happyforms-part-value-font-size);overflow-wrap:anywhere}.happyforms-styles .happyforms-part .happyforms-part-option:last-of-type .option-label{margin-bottom:0}.happyforms-styles .option-label input[type=text]{position:relative;top:0;padding-top:1px;padding-bottom:1px;border:0;border-radius:0!important}.happyforms-styles .option-label input[type=text]:focus{border-top:0;border-right:0;border-left:0;box-shadow:none}.happyforms-styles .option-label input{top:3px}.happyforms-styles .happyforms-part--checkbox .happyforms-part-option,.happyforms-styles .happyforms-part--radio .happyforms-part-option{margin-bottom:10px}.happyforms-styles .happyforms-part--checkbox label.option-label,.happyforms-styles .happyforms-part--radio label.option-label{margin-bottom:0}.happyforms-part .option-label .happyforms-remaining-choice,.happyforms-styles .happyforms-part .option-label .label{font-weight:400;font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#000;color:var(--happyforms-color-part-description)}.happyforms-styles .happyforms-part .option-label input:checked+.checkmark{background-color:#000;background-color:var(--happyforms-color-choice-checkmark-bg-focus)}.happyforms-styles .happyforms-part-option__description{font-size:var(--happyforms-part-description-font-size);color:#000;color:var(--happyforms-color-part-description)}.happyforms-styles .happyforms-part .happyforms-part-option label.heading-label{font-weight:400;font-style:normal;font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#000;color:var(--happyforms-color-part-title)}.happyforms-styles .happyforms-part .checkmark{z-index:5;display:flex;align-items:center;justify-content:center;width:21px;min-width:21px;height:21px;margin:calc((var(--happyforms-part-value-font-size) * 1.3125 - 21px)/ 2) 0;border-radius:50%;border:1px solid;border-color:#dbdbdb;border-color:var(--happyforms-color-part-border);font-weight:700;font-size:14px;font-size:var(--happyforms-part-description-font-size);background-color:#fff;background-color:var(--happyforms-color-choice-checkmark-bg);color:#000;color:var(--happyforms-color-choice-checkmark-bg-focus)}.happyforms-styles .happyforms-part .checkmark svg{display:none;width:10px}.happyforms-styles .happyforms-part--checkbox .checkmark,.happyforms-styles .happyforms-part--legal .checkmark,.happyforms-styles .happyforms-part--table.happyforms-selection--multiple .checkmark{border-radius:6px}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--checkbox .checkmark,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--legal .checkmark,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--table.happyforms-selection--multiple .checkmark{border-radius:0}.happyforms-styles .happyforms-part .option-label input:checked+.checkmark{background-color:#000;background-color:var(--happyforms-color-choice-checkmark-bg-focus)}.happyforms-styles .happyforms-part .option-label input:focus+.checkmark{border-color:#7aa4ff;border-color:var(--happyforms-color-part-border-focus);box-shadow:inset 0 0 0 1px #7aa4ff;box-shadow:inset 0 0 0 1px var(--happyforms-color-part-border-focus)}.happyforms-styles .happyforms-part input:checked+.checkmark svg{display:block;color:#fff;color:var(--happyforms-color-choice-checkmark-color)}.happyforms-radio-circle{display:none;width:7px;height:7px;border-radius:50%;background-color:#fff;background-color:var(--happyforms-color-choice-checkmark-color)}.happyforms-styles .happyforms-part--poll input:checked+.checkmark .happyforms-radio-circle,.happyforms-styles .happyforms-part--radio input:checked+.checkmark .happyforms-radio-circle,.happyforms-styles .happyforms-part--table:not(.happyforms-selection--multiple) input:checked+.checkmark .happyforms-radio-circle{display:block}.happyforms-styles .happyforms-part input:checked+.checkmark svg{display:block;color:#fff;color:var(--happyforms-color-choice-checkmark-color)}.happyforms-styles .happyforms-part__select-bg{padding:1px 0 2px;border:1px solid;border-radius:6px;border-color:#dbdbdb;border-color:var(--happyforms-color-part-border);background-color:#fff;background-color:var(--happyforms-color-part-background)}.happyforms-styles .happyforms-part__select-wrap:after{border-top:6px solid #000;border-top-color:var(--happyforms-color-part-value)}.happyforms-styles .happyforms-part select.happyforms-select:invalid{color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part select.happyforms-select:focus{outline-width:1px;outline-color:#000;outline-color:var(--happyforms-color-part-value)}.happyforms-styles .happyforms-part-date__time-input .happyforms-spinner-arrow{border-top:6px solid #000;border-top:6px solid var(--happyforms-color-part-value);background-position:left top;background-size:cover}.happyforms-styles button[type=submit].happyforms-button--submit,.happyforms-styles button[type=submit][disabled].happyforms-button--submit{-webkit-appearance:none;height:auto;padding:15px 30px;border-radius:4px!important;border:1px solid transparent!important;border-color:var(--happyforms-color-submit-border)!important;font-weight:400;font-style:normal;font-size:16px;font-size:var(--happyforms-submit-button-font-size);color:#fff;color:var(--happyforms-color-submit-text);background-color:#000;background-color:var(--happyforms-color-submit-background);background:#000;background:var(--happyforms-color-submit-background);text-transform:none;transition-property:all;transition-duration:.25s;transition-duration:var(--happyforms-transition-duration);transition-timing-function:ease-in;white-space:normal;overflow-wrap:anywhere}.happyforms-styles button[type=submit]:not(:hover):not(:active):not(.has-background){background-color:#000;background-color:var(--happyforms-color-submit-background);background:#000;background:var(--happyforms-color-submit-background);color:#fff;color:var(--happyforms-color-submit-text)}.happyforms-styles button[type=submit].happyforms-button--submit:focus,.happyforms-styles button[type=submit].happyforms-button--submit:hover{cursor:pointer;border-radius:4px;border-color:transparent!important;border-color:var(--happyforms-color-submit-border)!important;background-color:#000;background-color:var(--happyforms-color-submit-background-hover);background:#000;background:var(--happyforms-color-submit-background-hover);text-transform:none;text-decoration:none;color:#fff;color:var(--happyforms-color-submit-text-hover)}.happyforms-styles button[type=submit][disabled].happyforms-button--submit:focus,.happyforms-styles button[type=submit][disabled].happyforms-button--submit:hover{cursor:default;background-color:#407fff;background-color:var(--happyforms-color-submit-background);background:#407fff;background:var(--happyforms-color-submit-background);color:#fff;color:var(--happyforms-color-submit-text)}.happyforms-styles .happyforms-visuallyhidden{position:absolute;border:0;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.happyforms-styles .happyforms-message-notices .happyforms-message-notice{padding:20px 15px;border-radius:6px;background-color:transparent;color:#454545}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-message-notices .happyforms-message-notice{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-message-notices .happyforms-message-notice{padding:20px 25px;border-radius:25px}.happyforms-styles .happyforms-message-notices .success{background-color:#ebf9f0;background-color:var(--happyforms-color-success-notice)}.happyforms-styles .happyforms-message-notices .success h2{color:#1eb452!important;color:var(--happyforms-color-success-notice-text)!important}.happyforms-styles .happyforms-message-notices .error{background-color:#ffeeea;background-color:var(--happyforms-color-error-notice)}.happyforms-styles .happyforms-message-notices .error h2{color:#f23000!important;color:var(--happyforms-color-error-notice-text)!important}.happyforms-styles .happyforms-message-notices h2{margin-top:0!important;margin-bottom:0!important;padding-top:0!important;padding-bottom:0!important;font-weight:400!important;font-size:16px!important}.happyforms-styles .happyforms-message-notices h2:before{display:none}.happyforms-styles .happyforms-message-notices h2 span{display:block;font-weight:400;font-size:14px}.happyforms-styles .happyforms-form__part .happyforms-message-notices h2{font-weight:400!important;font-size:16px!important;font-size:var(--happyforms-part-value-font-size)!important}.happyforms-styles .happyforms-form__part .happyforms-message-notice.error h2{color:#f23000;color:var(--happyforms-color-error)}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part .happyforms-part__select-bg,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=tel],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part textarea,.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{border-radius:0!important}.happyforms-styles.happyforms-form--part-border-radius-square .option-label{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=tel],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part textarea,.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{border-radius:25px!important;padding-left:25px;padding-right:25px}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part textarea{padding:15px}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part .happyforms-part__select-bg{border-radius:25px;padding-left:15px}.happyforms-styles.happyforms-form--part-border-radius-pill .option-label{border-radius:25px}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::-webkit-input-placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::-moz-placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::-ms-placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part ::placeholder{color:transparent!important;transition:color .25s;transition:color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-webkit-input-placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-moz-placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::-ms-placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles.happyforms-form--part-placeholder-toggle .happyforms-part input:focus::placeholder{color:#888!important;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part--label-inside label .label{font-weight:700;font-size:14px;color:#000;color:var(--happyforms-color-part-title)}.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part textarea,.happyforms-styles.happyforms-form--part-borders-bottom-only .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{border-top-color:transparent!important;border-left-color:transparent!important;border-right-color:transparent!important;box-shadow:none!important}.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=email],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=number],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=password],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part input[type=text],.happyforms-styles.happyforms-form--part-disable-transitions .happyforms-part textarea{transition-duration:0s}.happyforms-styles .happyforms-part input[type=email],.happyforms-styles .happyforms-part input[type=number],.happyforms-styles .happyforms-part input[type=password],.happyforms-styles .happyforms-part input[type=text],.happyforms-styles .happyforms-part textarea{transition:border-color .4s;transition:border-color var(--happyforms-transition-duration)}.happyforms-styles .happyforms-part--label-as_placeholder label{color:#888;color:var(--happyforms-color-part-placeholder);transition-duration:.4s;transition-duration:var(--happyforms-transition-duration)}.happyforms-styles .happyforms-part--label-as_placeholder .happyforms-part__label .label{color:#888;color:var(--happyforms-color-part-placeholder)}.happyforms-styles .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container label .label,.happyforms-styles .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container label .label,.happyforms-styles .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label .label,.happyforms-styles .happyforms-part--select.happyforms-part--filled.happyforms-part--label-as_placeholder .label{font-weight:700;font-size:14px;color:#000;color:var(--happyforms-color-part-value)}.happyforms-styles.happyforms-form--submit-button-border-hide button[type=submit].happyforms-button--submit{border-width:0!important}.happyforms-styles.happyforms-form--submit-button-border-radius-square button[type=submit].happyforms-button--submit,.happyforms-styles.happyforms-form--submit-button-border-radius-square button[type=submit].happyforms-button--submit:hover{border-radius:0!important}.happyforms-styles.happyforms-form--submit-button-border-radius-pill button[type=submit].happyforms-button--submit,.happyforms-styles.happyforms-form--submit-button-border-radius-pill button[type=submit].happyforms-button--submit:hover{border-radius:60px!important}.happyforms-styles.happyforms-form--submit-button-bold .happyforms-part--submit button[type=submit]{font-weight:700}.happyforms-styles.happyforms-form--submit-button-disable-transitions button[type=submit]{transition-duration:0s!important}.happyforms-styles.happyforms-form--submit-button-padding-narrow button[type=submit].happyforms-button--submit{padding:10px 20px}.happyforms-styles.happyforms-form--submit-button-padding-wide button[type=submit].happyforms-button--submit{padding:20px 50px}.happyforms-styles.happyforms-form--submit-button-fullwidth button[type=submit].happyforms-button--submit{padding-left:0;padding-right:0;margin-right:0}.happyforms-styles.happyforms-form--part-title-font-weight-bold .happyforms-part__label .label{font-weight:700}.happyforms-styles .happyforms-custom-select input[readonly=readonly]{cursor:pointer}.happyforms-styles .happyforms-custom-select-dropdown{background-color:#fff;background-color:var(--happyforms-color-dropdown-bg-color);border:1px solid #dbdbdb;border:1px solid var(--happyforms-color-part-border);border-radius:6px}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-custom-select-dropdown{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-custom-select-dropdown{border-radius:25px}.happyforms-styles .happyforms-custom-select-dropdown li{transition:background-color .2s ease-in;color:#000;color:var(--happyforms-color-dropdown-item-text);background-color:#fff;background-color:var(--happyforms-color-dropdown-item-bg);font-size:16px;font-size:var(--happyforms-part-value-font-size)}.happyforms-styles .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder{color:#888;color:var(--happyforms-color-part-placeholder)}.happyforms-styles .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item.active,.happyforms-styles .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item:hover{color:#000;color:var(--happyforms-color-dropdown-item-text-hover);background-color:#f4f4f5;background-color:var(--happyforms-color-dropdown-item-bg-hover)}.happyforms-styles .happyforms-part-preview .happyforms-part__label .label{font-weight:700;color:#000;color:var(--happyforms-color-table-row-odd-text)}.happyforms-styles .happyforms-part-preview .happyforms-part__el-preview{font-size:16px;font-size:var(--happyforms-part-value-font-size)}.happyforms-styles .happyforms-part-preview{background-color:#fcfcfc;background-color:var(--happyforms-color-table-row-odd)}.happyforms-styles .happyforms-part-preview:nth-child(2n){background-color:#efefef;background-color:var(--happyforms-color-table-row-even)}.happyforms-styles .happyforms-part-preview:nth-child(2n) .happyforms-part__label .label{color:#000;color:var(--happyforms-color-table-row-even-text)}.happyforms-styles .happyforms-form-preview>p{font-size:16px;font-size:var(--happyforms-part-value-font-size)}.happyforms-part-error-notice p{font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#f23000;color:var(--happyforms-color-error)}.happyforms-part-error-notice p svg{color:#f23000;color:var(--happyforms-color-error)}.happyforms-styles .happyforms-input-group__suffix a.happyforms-plain-button,.happyforms-styles .happyforms-input-group__suffix button.happyforms-plain-button{font-size:16px;font-size:var(--happyforms-part-value-font-size);color:var(--happyforms-color-part-value)}.happyforms-styles .happyforms-input-group__prefix,.happyforms-styles .happyforms-input-group__suffix{font-size:16px;font-size:var(--happyforms-part-value-font-size);background:#e8e8e8}.happyforms-styles.happyforms-form .happyforms-part .happyforms-input{position:relative;flex:1;width:100%}.happyforms-styles.happyforms-styles.happyforms-form--part-border-radius-square button.happyforms-pair-group__button{border-radius:0}.happyforms-styles.happyforms-styles.happyforms-form--part-border-radius-pill button.happyforms-pair-group__button{border-radius:25px}.happyforms-styles button.happyforms-pair-group__button:hover{background-color:#000;background-color:var(--happyforms-color-submit-background-hover)}.happyforms-styles.happyforms-form .happyforms-part .happyforms-input-group.with-prefix .happyforms-input>input{padding-left:10px;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.happyforms-styles.happyforms-form .happyforms-part .happyforms-input-group.with-suffix .happyforms-input>input{padding-right:10px;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-input-group__prefix{border-top-left-radius:0;border-bottom-left-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-input-group__prefix{border-top-left-radius:25px;border-bottom-left-radius:25px}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-input-group__suffix{border-top-right-radius:0;border-bottom-right-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-input-group__suffix{border-top-right-radius:25px;border-bottom-right-radius:25px}.happyforms-part__char-counter{font-size:14px;font-size:var(--happyforms-part-description-font-size);color:#454545;color:var(--happyforms-color-part-description)}.happyforms-styles .happyforms-part--rich_text div.mce-toolbar-grp{border-radius:6px;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#fff;border-color:#dbdbdb!important;border-color:var(--happyforms-color-part-border)!important}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--rich_text div.mce-toolbar-grp{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--rich_text div.mce-toolbar-grp{border-radius:25px;border-bottom-left-radius:0;border-bottom-right-radius:0}.happyforms-styles div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link{border-color:#7aa4ff!important;border-color:var(--happyforms-color-part-border-focus)!important}.happyforms-styles .happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-down:before{border-top-color:#7aa4ff;border-top-color:var(--happyforms-color-part-border-focus)}.happyforms-styles div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-input input::placeholder{color:#888;color:var(--happyforms-color-part-placeholder)!important}.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn,.happyforms-styles .happyforms-part--rich_text .qt-dfw,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary{padding:2px;background-color:#fff;border-color:#fff}.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-styles .happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:active,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-styles .happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-styles .happyforms-part--rich_text .qt-dfw.active,.happyforms-styles .happyforms-part--rich_text .qt-dfw.active:hover,.happyforms-styles .happyforms-part--rich_text .qt-dfw:focus,.happyforms-styles .happyforms-part--rich_text .qt-dfw:hover,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.happyforms-styles .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover{border-color:transparent;border-radius:6px;background-color:#efefef}.happyforms-styles .happyforms-editor-toolbar-link svg,.happyforms-styles .happyforms-part--rich_text .mce-btn svg{fill:#000}.happyforms-styles .happyforms-part--rich_text .happyforms-visual-editor{padding-bottom:1.5px;border:0}.happyforms-styles .happyforms-part--rich_text .mce-edit-area{border-bottom-width:1.5px;border:1px solid #dbdbdb!important;border-radius:6px;border-top-left-radius:0;border-top-right-radius:0;transition:border-color .25s;transition:border-color var(--happyforms-transition-duration)}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--rich_text .mce-edit-area{border-radius:0}.happyforms-styles .happyforms-part--rich_text.focus .mce-edit-area{border-color:#7aa4ff!important;border-color:var(--happyforms-color-part-border-focus)!important;box-shadow:inset 0 0 0 1px #7aa4ff;box-shadow:inset 0 0 0 1px var(--happyforms-color-part-border-focus)}.happyforms-styles .happyforms-part--rich_text .mce-edit-area{background-color:#fff!important;background-color:var(--happyforms-color-part-background)!important}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-edit-area{border-bottom-left-radius:25px;border-bottom-right-radius:25px}.happyforms-styles .happyforms-part--rich_text.focus .mce-edit-area{background-color:#fff!important;background-color:var(--happyforms-color-part-background-focus)!important}.happyforms-styles .happyforms-part--rich_text .mce-statusbar{border-bottom-left-radius:6px;border-bottom-right-radius:6px}.happyforms-styles .happyforms-part--rich_text .mce-statusbar .mce-path:first-child{display:none}.happyforms-styles.happyforms-form--part-border-radius-square .happyforms-part--rich_text .mce-statusbar{border-radius:0}.happyforms-styles.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-statusbar{border-bottom-left-radius:25px;border-bottom-right-radius:25px}.happyforms-styles.happyforms-form--part-border-off .happyforms-part--rich_text .happyforms-visual-editor{padding-bottom:1px}.happyforms-part--email_integration .option-label .label p,.happyforms-part--legal .option-label .label p,.happyforms-part--mailchimp .option-label .label p,.happyforms-part--signature .option-label .label p{margin-top:0}.happyforms-part--email_integration .option-label .label p:last-child,.happyforms-part--legal .option-label .label p:last-child,.happyforms-part--mailchimp .option-label .label p:last-child,.happyforms-part--signature .option-label .label p:last-child{margin-bottom:0}.happyforms-styles button.happyforms-text-button{-webkit-appearance:none;height:auto;font-weight:400;font-style:normal;font-size:16px;background-color:#000;background-color:var(--happyforms-color-submit-background);background:#000;background:var(--happyforms-color-submit-background);text-transform:none;transition-property:all;transition-duration:.25s;transition-duration:var(--happyforms-transition-duration);transition-timing-function:ease-in;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;text-shadow:none;text-decoration:none;letter-spacing:0;white-space:normal;overflow-wrap:anywhere;outline:0}.happyforms-styles button.happyforms-text-button{background-color:transparent!important;padding:0;font-size:var(--happyforms-part-value-font-size);color:#000!important;color:var(--happyforms-color-part-value)!important;border:0 solid transparent!important;width:auto!important;border-width:0!important;font-weight:400!important;text-decoration:underline;display:inline-block;cursor:pointer}.happyforms-styles .happyforms-part--placeholder p{font-size:16px;font-size:var(--happyforms-part-value-font-size);color:#000;overflow-wrap:anywhere}.happyforms-styles .happyforms-part--divider hr{border-style:solid;border-width:1px 0 0 0;border-color:#ccc;border-color:var(--happyforms-color-divider-hr)}.happyforms-part--divider hr{margin:0}.happyforms-styles .happyforms-layout-title{font-weight:400;color:#000;color:var(--happyforms-color-primary)}.happyforms-styles .happyforms-part--media img{margin:0;padding:0;border:0}:root{--happyforms-form-width:100%}.happyforms-flex{display:flex;flex-flow:row wrap;align-items:flex-start;max-width:100%}.happyforms-form--hide-title .happyforms-flex{padding-top:0}.happyforms-form{max-width:100%;max-width:var(--happyforms-form-width);margin:0 auto;border-style:solid;border-width:0}.happyforms-form form{margin:0;padding:0;background-color:transparent}.happyforms-form.happyforms-form--padding-narrow{padding:1%}.happyforms-form.happyforms-form--padding-wide{padding:3.5%}.happyforms-form form.happyforms-form--submitting{opacity:.5}.happyforms-form--direction-rtl{direction:rtl}.happyforms-flex>input[type=checkbox]{display:none!important}h3.happyforms-form__title{margin:0;padding:0}.happyforms-form--hide-title h3.happyforms-form__title{display:none}.happyforms-form--title-text-align-right h3.happyforms-form__title{text-align:right}.happyforms-form--title-text-align-center h3.happyforms-form__title{text-align:center}.happyforms-form__part{position:relative;display:block;box-sizing:border-box;width:100%;margin-bottom:15px;padding:5px 1%}.happyforms-form__part:last-child{margin-bottom:0}@media screen and (min-width:800px){.happyforms-part--width-half{width:50%}.happyforms-part--width-third{width:33.333%}.happyforms-part--width-quarter{width:25%}}.happyforms-part--width-half,.happyforms-part--width-third{align-self:flex-start}.happyforms-part--width-auto{align-self:flex-start;flex-grow:1;width:auto;max-width:75%}.happyforms-part--width-auto+.happyforms-part--recaptcha,.happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-part--width-auto+.happyforms-part--submit{align-self:center;width:auto!important;margin-bottom:0!important;padding-top:5px;padding-bottom:0}.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-part--width-auto+.happyforms-part--recaptcha{top:-13px}.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--submit{top:-10px}.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha{top:3px}.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--submit{top:-25px}.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha{top:-23px}.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit{top:-45px}.happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{width:100%;padding:17px 50px}.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--submit{left:-1.5%;padding-left:0;padding-right:0}.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-wide .happyforms-part--width-auto+.happyforms-part--submit{left:-3.5%;padding-left:0}.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit,.happyforms-form--submit-part-of-input.happyforms-form--part-outer-padding-narrow .happyforms-part--width-auto+.happyforms-part--submit{left:-1%;padding-left:0}.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{padding-top:8px;padding-bottom:9px;border-top-left-radius:0;border-bottom-left-radius:0}.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-wide .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-wide .happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{padding-top:13px;padding-bottom:15px}.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-narrow .happyforms-part--width-auto+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input.happyforms-form--part-inner-padding-narrow .happyforms-part--width-auto+.happyforms-part--submit button[type=submit]{padding-top:3px;padding-bottom:4px}.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-as_placeholder+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-as_placeholder+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-inside+.happyforms-part--recaptcha+.happyforms-part--submit button[type=submit],.happyforms-form--submit-part-of-input .happyforms-part--width-auto.happyforms-part--label-inside+.happyforms-part--submit button[type=submit]{padding-top:16px;padding-bottom:18px}.happyforms-part__label{display:inline-block;margin-bottom:15px}.happyforms-part__label .happyforms-optional,.happyforms-part__label .happyforms-required,.happyforms-part__label .label{padding:0;white-space:normal}.happyforms-form__part[data-happyforms-required] .happyforms-part__label .happyforms-optional{display:none}.happyforms-form__part .happyforms-part__label .happyforms-required{display:none}.happyforms-form__part[data-happyforms-required] .happyforms-part__label .happyforms-required{display:inline-block}.happyforms-part__description{display:block;margin:-3px 0 10px}.happyforms-part--focus-reveal-description .happyforms-part__description{display:none}.happyforms-form__part.focus .happyforms-part__description,.happyforms-part--focus-reveal-description input:focus+.happyforms-part__description,.happyforms-part--focus-reveal-description textarea:focus+.happyforms-part__description{display:block}.happyforms-form--part-description-text-align-center .happyforms-part__description{text-align:center}.happyforms-form--part-description-text-align-right .happyforms-part__description{text-align:right}.happyforms-part input[type=email],.happyforms-part input[type=number],.happyforms-part input[type=password],.happyforms-part input[type=range],.happyforms-part input[type=tel],.happyforms-part input[type=text],.happyforms-part textarea,.happyforms-part.happyforms-part select.happyforms-select{width:100%;box-sizing:border-box;max-width:none}.happyforms-part.happyforms-part select.happyforms-select{appearance:none!important;-moz-appearance:none!important;-webkit-appearance:none!important;background-image:none!important}.happyforms-part textarea{height:auto}.happyforms-form--part-value-text-align-center .happyforms-part input[type=email],.happyforms-form--part-value-text-align-center .happyforms-part input[type=number],.happyforms-form--part-value-text-align-center .happyforms-part input[type=password],.happyforms-form--part-value-text-align-center .happyforms-part input[type=tel],.happyforms-form--part-value-text-align-center .happyforms-part input[type=text],.happyforms-form--part-value-text-align-center .happyforms-part textarea,.happyforms-form--part-value-text-align-center .happyforms-part--choice .option-label{text-align:center}.happyforms-form--part-value-text-align-center .happyforms-part--choice .happyforms-part__el{justify-content:center}.happyforms-form--part-value-text-align-right .happyforms-part input[type=email],.happyforms-form--part-value-text-align-right .happyforms-part input[type=number],.happyforms-form--part-value-text-align-right .happyforms-part input[type=password],.happyforms-form--part-value-text-align-right .happyforms-part input[type=tel],.happyforms-form--part-value-text-align-right .happyforms-part input[type=text],.happyforms-form--part-value-text-align-right .happyforms-part textarea,.happyforms-form--part-value-text-align-right .happyforms-part--choice .option-label{text-align:right}.happyforms-form--part-value-text-align-right .happyforms-part--choice .happyforms-part__el{justify-content:flex-end}.happyforms-part.happyforms-part--error input[type=email],.happyforms-part.happyforms-part--error input[type=number],.happyforms-part.happyforms-part--error input[type=password],.happyforms-part.happyforms-part--error input[type=range],.happyforms-part.happyforms-part--error input[type=tel],.happyforms-part.happyforms-part--error input[type=text],.happyforms-part.happyforms-part--error textarea{border-color:#ff7550}.happyforms-part.display-type--block .happyforms-part__el{width:100%}.happyforms-part-el-wrap{position:relative}.happyforms-part-wrap{position:relative}.happyforms-part--label-below .happyforms-part-wrap{display:flex;flex-flow:row wrap-reverse;align-content:flex-end}.happyforms-part--label-below .happyforms-part__label{order:2;margin-top:10px;margin-bottom:5px}.happyforms-part--label-below .happyforms-part__description{order:1;margin-top:0}.happyforms-part--label-below.happyforms-part--date .happyforms-part__el{width:100%;order:2}.happyforms-part--date .happyforms-part__description{width:100%}.happyforms-part--label-left .happyforms-part__description{width:100%}.happyforms-part--label-left .happyforms-part-wrap{display:flex;flex-flow:row;flex-wrap:wrap}@media screen and (min-width:800px){.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__label-container{float:none;width:25%;margin-bottom:0;align-self:flex-start}}.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__el{width:75%}.happyforms-part--label-left.happyforms-part--date .happyforms-custom-select{width:100%}@media screen and (max-width:800px){.happyforms-part--label-left .happyforms-part-wrap{flex-flow:column}.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__label{align-self:flex-start}.happyforms-part--label-left .happyforms-custom-select,.happyforms-part--label-left .happyforms-part-wrap>.happyforms-part__el{width:100%}}.happyforms-part--label-hidden .happyforms-part-wrap .happyforms-part__label{display:none!important}.happyforms-part .option-label{display:flex;align-items:center;position:relative;cursor:pointer;padding:0 5px 5px 0}.happyforms-part--choice .option-label{margin-right:20px}.happyforms-part--choice.happyforms-part-options-width--full .option-label{margin-right:0}.happyforms-styles .happyforms-part .happyforms-part-option .option-label{align-items:flex-start}.happyforms-styles .happyforms-part .happyforms-part-option.disabled-option .option-label,.happyforms-styles .happyforms-part .happyforms-table__cell.disabled-option .option-label{cursor:default}@media screen and (max-width:800px){.happyforms-part--choice .option-label{margin-right:0}}.happyforms-part--choice .option-label input:focus{outline:0}.happyforms-part .option-label .label-wrap{position:relative;display:inline-block;padding:0 10px;white-space:normal;color:inherit}.happyforms-form--direction-rtl .happyforms-part--choice .option-label .label{margin-right:0}.happyforms-part-option:last-of-type{margin-bottom:0!important}.happyforms-part-option__description{display:block;width:auto;max-width:400px;margin-top:0;margin-left:31px;flex-basis:100%;font-weight:400;font-weight:var(--happyforms-form-font-weight);line-height:1.4}.happyforms-part--choice.display-type--block .happyforms-part-option__description{max-width:none}.happyforms-part.display-type--block .option-label{display:flex;margin-right:0;flex-wrap:wrap}.happyforms-part .happyforms-part-option.option-heading{width:100%}.happyforms-part--choice .happyforms-part__el{display:flex;flex-flow:row wrap}@media screen and (max-width:800px){.happyforms-part--choice .happyforms-part__el{flex-flow:column wrap}}.happyforms-part--choice{margin-bottom:0}.happyforms-part--choice.display-type--block{margin-bottom:15px}.happyforms-part--choice.happyforms-part-options-width--full .happyforms-part__option{width:100%}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__el,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__el,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__el{margin:0 -1%}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option{padding:0 1%}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option label,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option label,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option label{margin-right:0}.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option{width:50%}.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option{width:33.333%}.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option{width:25%}.happyforms-part--choice .happyforms-part__el .happyforms-part__description{flex:0 1 100%;width:100%;margin-top:-5px;margin-bottom:20px}.happyforms-part--choice.display-type--block .happyforms-part__el .happyforms-part__description{flex:0;width:auto;margin-top:5px;margin-bottom:0}@media screen and (max-width:800px){.happyforms-part--choice.happyforms-part-options-width--half .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--quarter .happyforms-part__option,.happyforms-part--choice.happyforms-part-options-width--third .happyforms-part__option{width:100%}}.happyforms-part--choice.display-type--block .happyforms-part__el{display:flex!important;flex-flow:column wrap}.happyforms-part .checkmark svg{display:none}.happyforms-part--legal .option-label p:last-child{margin-bottom:0}.happyforms-part--label-below .happyforms-custom-select,.happyforms-part--label-below .happyforms-part__el,.happyforms-part--label-below input,.happyforms-part--label-below textarea{order:3}.happyforms-part--label-below .happyforms-custom-select,.happyforms-part--label-below .happyforms-part__el{width:100%}.happyforms-form--part-title-text-align-center .happyforms-part__label{text-align:center}.happyforms-form--part-title-text-align-center .happyforms-part--label-above .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-as_placeholder .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-below .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-inside .happyforms-part__label,.happyforms-form--part-title-text-align-center .happyforms-part--label-show .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-above .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-as_placeholder .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-show .happyforms-part__label{width:100%}.happyforms-form--part-title-text-align-right .happyforms-part--label-as_placeholder .happyforms-part__label,.happyforms-form--part-title-text-align-right .happyforms-part--label-inside .happyforms-part__label{width:calc(100% - 20px)}.happyforms-form--part-title-text-align-right.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder .happyforms-part__label{width:calc(100% - 30px)}.happyforms-form--part-title-text-align-center .happyforms-part--label-left .happyforms-part__label{align-self:flex-start}.happyforms-form--part-title-text-align-right .happyforms-part__label{text-align:right}.happyforms-form--part-title-text-align-right .happyforms-part--label-left .happyforms-part__label{align-self:flex-start;margin-bottom:10px;padding-right:15px}.happyforms-part--label-hidden .happyforms-part-wrap>.happyforms-part__label{display:none!important}.happyforms-part__select-wrap{position:relative;flex:1;padding:0 0 0 2%}.happyforms-part__select-wrap{height:100%}.happyforms-part__select-bg{padding:1px 0 2px;border:1px solid;border-color:#dbdbdb}.happyforms-part__select-wrap:first-of-type{padding-left:0!important}.happyforms-part__select-wrap:after{content:'';position:absolute;top:44%;right:15px;z-index:1;display:block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid}.happyforms-part select:focus{outline-width:1px;outline-color:#000}.happyforms-part__select-wrap:last-child{padding-right:0}.happyforms-part--submit{display:flex;flex-flow:row wrap;align-items:center;width:100%;margin-bottom:0;padding-top:10px}.happyforms-message-notices{padding:0 1%;margin:0 0 25px 0}form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice{width:100%;box-sizing:border-box}form .happyforms-flex>.happyforms-message-notices .happyforms-message-notice a{border:0}.happyforms-flex>.happyforms-message-notices p:last-child{margin-bottom:0}.happyforms-form__part .happyforms-message-notice.error h2{color:#ff7550}.happyforms-form__title+.happyforms-message-notices{margin-top:25px}.happyforms-part--label-inside .happyforms-part__label-container{position:absolute;top:8px;left:10px;z-index:2;width:98%}.happyforms-part--label-as_placeholder input,.happyforms-part--label-as_placeholder textarea,.happyforms-part--label-inside input,.happyforms-part--label-inside textarea{padding-top:30px!important;padding-bottom:7px!important}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder input,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder textarea,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-inside input,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-inside textarea{padding-top:22px!important;padding-bottom:5px!important}.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder input,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder textarea,.happyforms-form--part-inner-padding-wide .happyforms-part--label-inside input,.happyforms-form--part-inner-padding-wide .happyforms-part--label-inside textarea{padding-top:30px!important;padding-bottom:10px!important}.happyforms-part input[type=email],.happyforms-part input[type=number],.happyforms-part input[type=password],.happyforms-part input[type=text],.happyforms-part textarea{margin-bottom:0;transition:border-color .4s;transition:border-color var(--happyforms-transition-duration)}.happyforms-part--label-below .happyforms-part__label-container{width:100%}.happyforms-part--label-as_placeholder label{transition-duration:.4s}.happyforms-part--label-as_placeholder ::-webkit-input-placeholder{opacity:0}.happyforms-part--label-as_placeholder ::-moz-placeholder{opacity:0}.happyforms-part--label-as_placeholder ::-ms-placeholder{opacity:0}.happyforms-part--label-as_placeholder ::placeholder{opacity:0}.happyforms-part--label-as_placeholder label{position:absolute;left:11px;top:23px;z-index:5;transition-property:top}.happyforms-form--direction-rtl .happyforms-part--label-as_placeholder label{left:auto;right:11px}.happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,.happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,.happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,.happyforms-part--select.happyforms-part--label-as_placeholder.happyforms-part--filled label{top:8px}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder label{top:19px;left:5px}.happyforms-form--direction-rtl.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder label{right:5px;left:auto}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,.happyforms-form--part-inner-padding-narrow .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label{top:7px}.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder label{top:25px;left:15px}.happyforms-form--direction-rtl.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder label{right:15px;left:auto}.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder input:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder textarea:focus~.happyforms-part__label-container>label,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled .happyforms-part__label-container label,.happyforms-form--part-inner-padding-wide .happyforms-part--label-as_placeholder.happyforms-part--filled textarea~label{top:12px}.happyforms-form--part-outer-padding-narrow .happyforms-form__part{margin-bottom:5px;padding:0 .5%}.happyforms-form--part-outer-padding-narrow .happyforms-message-notices{padding-left:.5%;padding-right:.5%}.happyforms-form--part-outer-padding-narrow .happyforms-part__select-wrap{padding:0}.happyforms-form--part-outer-padding-narrow .happyforms-part-option{margin-right:-5px}.happyforms-form--part-outer-padding-narrow .happyforms-part.display-type--block .happyforms-part-option{margin-right:0;margin-bottom:5px}.happyforms-form--part-outer-padding-narrow .happyforms-part--choice .option-label{margin-right:15px}.happyforms-form--part-outer-padding-wide .happyforms-form__part{padding:20px 3%}.happyforms-form--part-outer-padding-wide .happyforms-message-notices{padding-left:3%;padding-right:3%}.happyforms-form--part-outer-padding-wide .happyforms-part .happyforms-part-option{margin-right:15px}.happyforms-form--part-outer-padding-wide .happyforms-part.display-type--block .happyforms-part-option{margin-right:0;margin-bottom:35px}.happyforms-form--part-inner-padding-narrow .happyforms-part .option-label,.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=email],.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=number],.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=tel],.happyforms-form--part-inner-padding-narrow .happyforms-part input[type=text],.happyforms-form--part-inner-padding-narrow .happyforms-part textarea,.happyforms-form--part-inner-padding-narrow .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{padding:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--placeholder .happyforms-part__el{padding:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--legal label{margin-left:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part__label{margin-bottom:5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--label-below .happyforms-part__label{margin-top:5px}.happyforms-form--part-inner-padding-wide .happyforms-part .option-label,.happyforms-form--part-inner-padding-wide .happyforms-part input[type=email],.happyforms-form--part-inner-padding-wide .happyforms-part input[type=number],.happyforms-form--part-inner-padding-wide .happyforms-part input[type=tel],.happyforms-form--part-inner-padding-wide .happyforms-part input[type=text],.happyforms-form--part-inner-padding-wide .happyforms-part textarea,.happyforms-form--part-inner-padding-wide .happyforms-part--placeholder .happyforms-part__el,.happyforms-form--part-inner-padding-wide .happyforms-part:not(.happyforms-part--phone) select.happyforms-select{padding:15px}.happyforms-form--part-inner-padding-wide .happyforms-part--legal .option-label{padding-left:0}.happyforms-form--part-inner-padding-wide .happyforms-part--legal .option-label .label{padding-left:20px}.happyforms-form--part-inner-padding-wide .happyforms-part .happyforms-part__select-wrap:after{top:45%}.happyforms-form--part-hide-labels .happyforms-part__label{display:none}.happyforms-form--submit-button-fullwidth button[type=submit].happyforms-button--submit{width:100%}button[type=submit][disabled].happyforms-button--submit{cursor:default}.happyforms-form--submit-button-align-center .happyforms-part--submit{text-align:center}.happyforms-form--submit-button-align-right .happyforms-part--submit{text-align:right}.happyforms-part--rating .happyforms-visuallyhidden,.ui-helper-hidden-accessible{position:absolute;border:0;clip:rect(0 0 0 0);width:1px;height:1px;margin:-1px;padding:0;overflow:hidden}.widget button[type=submit].happyforms-button--submit,.widget button[type=submit][disabled].happyforms-button--submit,.widget button[type=submit][disabled].happyforms-button--submit:hover{width:100%}.happyforms-custom-select input[readonly=readonly]{cursor:pointer}.happyforms-custom-select-dropdown{display:none;position:absolute;top:calc(100% + 2px);left:0;z-index:10;list-style:none;margin:0!important;padding:5px 0!important;text-align:left;background-color:#fff;border:1px solid #dbdbdb;white-space:nowrap;width:100%;max-height:250px;overflow-y:scroll}.happyforms-custom-select .happyforms-part__select-wrap input[data-searchable=false]{cursor:pointer}.happyforms-part__select-wrap{cursor:pointer}.happyforms-custom-select-dropdown.active{display:block!important}.happyforms-custom-select-dropdown li{cursor:pointer;display:flex;align-items:center;margin:0;padding:5px 10px;min-height:35px;color:#000;background-color:#fff;white-space:normal;overflow-wrap:anywhere}.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder{color:#888}.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__not-found{display:none;cursor:default}.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item.active,.happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__item:hover{color:#000;background-color:#dbdbdb}.happyforms-part--with-autocomplete .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder,.happyforms-part-date--required .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder,.happyforms-part-select--required .happyforms-custom-select-dropdown li.happyforms-custom-select-dropdown__placeholder{display:none}.happyforms-part-preview .happyforms-part__label{cursor:default;margin-bottom:10px}.happyforms-part-preview .happyforms-part__label .label{font-weight:700}.happyforms-form-preview .happyforms-part--submit{margin-top:30px}.happyforms-part--submit *{margin-right:20px}.happyforms-form--submit-button-align-center .happyforms-part--submit,.happyforms-form--submit-button-fullwidth .happyforms-part--submit{flex-flow:column wrap;align-items:center}.happyforms-form--submit-button-align-center .happyforms-part--submit a,.happyforms-form--submit-button-fullwidth .happyforms-part--submit a{order:2;margin-top:10px;margin-right:0}.happyforms-form--submit-button-align-right .happyforms-part--submit{justify-content:flex-end}.happyforms-form--submit-button-align-center .happyforms-part--submit input,.happyforms-form--submit-button-align-right .happyforms-part--submit input{margin-right:0}.happyforms-form--submit-button-align-right .happyforms-part--submit input+a{margin-left:20px;margin-right:0}@media screen and (max-width:800px){.happyforms-form-preview .happyforms-part--submit{flex-flow:column wrap}.happyforms-form-preview .happyforms-part--submit input{margin-right:0}}.happyforms-hide{display:none}.happyforms-part-preview{margin-bottom:0;padding:10px 1%;margin:0}.happyforms-part-preview{background-color:#fcfcfc}.happyforms-part-preview+.happyforms-part--recaptcha{margin-top:20px}.happyforms-part-preview:nth-child(2n){background-color:#efefef}.happyforms-part-preview:nth-child(2n) .happyforms-part__label .label{color:#000}.happyforms-form-preview>p{padding:45px 1% 10px}.happyforms-part__char-counter{display:none;margin-top:5px;pointer-events:none}.happyforms-part .happyforms-remaining-choice,.happyforms-part__char-counter .counter-label{text-transform:lowercase}.happyforms-part--checkbox .option-label .label-wrap,.happyforms-part--radio .option-label .label-wrap{padding-right:5px;flex:1}.happyforms-custom-select-dropdown .happyforms-remaining-choice{padding-left:5px}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#eee;clip:auto!important;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.happyforms-part-error-notice,.happyforms-part-error-notice p{margin:0;padding:0}.happyforms-part-error-notice{margin:10px 0 0}.happyforms-part-error-notice p{display:flex;flex-flow:row nowrap;align-items:center;-moz-user-select:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;line-height:1.2}.happyforms-part-error-notice p svg{content:'';display:inline-block;width:17px;height:17px;margin:0 8px 0 0}.happyforms-input-group{display:flex;align-items:stretch;flex-flow:row wrap}.happyforms-form .happyforms-part .happyforms-input{position:relative;flex:1;width:100%;display:flex;align-items:stretch}.happyforms-form .happyforms-part .happyforms-input-group.with-prefix .happyforms-input>input{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.happyforms-form .happyforms-part .happyforms-input-group.with-suffix .happyforms-input>input{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.happyforms-input-group__prefix,.happyforms-input-group__suffix{display:flex;align-items:center;max-height:100%;padding:10px 15px;font-weight:400;border:1px solid #dbdbdb;border:1px solid var(--happyforms-color-part-border)!important;background:#e8e8e8;text-shadow:none}.happyforms-input-group__prefix{border-right:0!important;border-top-left-radius:6px;border-bottom-left-radius:6px}.happyforms-input-group__suffix{border-left:0!important;border-top-right-radius:6px;border-bottom-right-radius:6px}.happyforms-input-group__prefix span,.happyforms-input-group__suffix span{word-break:break-word}.happyforms-input-group__suffix.happyforms-input-group__suffix--button{position:relative;padding:0!important}.happyforms-input-group__suffix a.happyforms-plain-button,.happyforms-input-group__suffix button.happyforms-plain-button{outline:0;margin:0;padding:10px 15px;line-height:1;font-weight:400;box-shadow:none;border:0;background-color:transparent;text-transform:none}.happyforms-input-group input{width:100%}.happyforms-part--choice .happyforms-part-option--other input[type=text]{display:none;margin-top:10px!important}.happyforms-part--choice .happyforms-part-option--other input[type=text].hf-show{display:block}.happyforms-part--select .happyforms-part-option--other input[type=text]{display:none;margin-top:10px}.happyforms-part--select .happyforms-part-option--other input[type=text].hf-show{display:block}.happyforms-part--rich_text div.mce-toolbar-grp{position:relative;left:-1px;width:calc(100% - 2px);border:1px solid #dbdbdb!important;border-bottom:0!important}.happyforms-part--rich_text div.mce-panel{background:0 0!important}.happyforms-part--rich_text.focus div.mce-toolbar-grp{left:0}.happyforms-part--rich_text div.mce-toolbar-grp>div{padding:0 2px}.happyforms-part--rich_text.focus div.mce-toolbar-grp>div{padding:0 1px}.happyforms-part--rich_text .mce-top-part::before{box-shadow:none}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link{background-color:#fff;border-width:1px;box-shadow:none;border-radius:6px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up:before{top:-11px;left:50%;border-width:0 11px 11px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-10px;border-width:9px 9px 0}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;left:50%;border-top-color:#fff}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-left:before{left:18px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-left.mce-arrow-down:after{left:19px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up.mce-arrow-right:before{left:auto;right:18px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up:after{left:calc(50% + 0px);top:-10px;border-bottom-color:#fff;border-width:0 10px 10px 10px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-up.mce-arrow-left:after{left:19px}.happyforms-editor-toolbar-link.mce-inline-toolbar-grp.mce-arrow-right:after{left:auto;right:19px}.happyforms-editor-toolbar-link .mce-toolbar .mce-btn-group .mce-btn button,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn button{cursor:pointer!important;padding:0!important;background-color:transparent}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-input input{margin:0;padding:5px;border:0;background-color:#fff}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-preview{margin:7px 6px}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link div.wp-link-input input::placeholder{color:#888}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn,div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn.mce-primary{border-color:transparent}div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn:active,div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn:hover{border-color:transparent!important;border-radius:6px;background-color:#efefef!important}.happyforms-part--rich_text .mce-panel{z-index:1!important}.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn,.happyforms-part--rich_text .qt-dfw,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary{padding:2px;background-color:transparent}.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-part--rich_text .mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:active,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:focus,.happyforms-part--rich_text .mce-toolbar .mce-btn-group .mce-btn:hover,.happyforms-part--rich_text .qt-dfw.active,.happyforms-part--rich_text .qt-dfw.active:hover,.happyforms-part--rich_text .qt-dfw:focus,.happyforms-part--rich_text .qt-dfw:hover,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover{background:0 0;box-shadow:none;color:inherit}.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:focus,.mce-inline-toolbar-grp .mce-toolbar .mce-btn-group .mce-btn:hover{box-shadow:none}.happyforms-part--rich_text .mce-btn svg{fill:currentColor}.happyforms-editor-toolbar-link svg{fill:#000}.happyforms-part--rich_text .mce-edit-area,.happyforms-part--rich_text .mce-statusbar .mce-container-body,.happyforms-part--rich_text div.mce-statusbar{border-width:0!important}.happyforms-part--rich_text div.mce-toolbar-grp{background-color:#fff!important}.happyforms-part--rich_text .mce-tinymce.mce-container{border:0;border-width:0!important;box-shadow:none}.happyforms-part--rich_text.focus .mce-tinymce.mce-container{overflow:hidden}.happyforms-part--rich_text .mce-statusbar{position:absolute;left:2px;bottom:2px;width:calc(100% - 4px);background-color:transparent!important}.happyforms-part--rich_text .happyforms-visual-editor{position:relative;overflow:hidden;padding:1px 1px 0;border:1px solid}.happyforms-part--rich_text.focus .happyforms-visual-editor{outline:0}.happyforms-form--part-border-off .happyforms-part--rich_text .happyforms-visual-editor{border-color:transparent}.happyforms-form--part-borders-bottom-only .happyforms-part--rich_text.focus .happyforms-visual-editor{border-bottom-width:1px}.happyforms-form--part-border-off .happyforms-part--rich_text .mce-statusbar .mce-container-body,.happyforms-form--part-border-off .happyforms-part--rich_text div.mce-toolbar-grp{border:0}.happyforms-form--part-borders-bottom-only .happyforms-part--rich_text .happyforms-visual-editor{box-shadow:none;border-top-color:transparent;border-left-color:transparent;border-right-color:transparent}.happyforms-form--part-borders-bottom-only .happyforms-part--rich_text .mce-statusbar .mce-container-body{border-left:0;border-right:0}.happyforms-form--part-border-radius-square .happyforms-part--rich_text .happyforms-visual-editor,.happyforms-form--part-border-radius-square .happyforms-part--rich_text .mce-tinymce.mce-container{border-radius:0!important}.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .happyforms-visual-editor,.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-tinymce.mce-container{border-radius:25px!important}.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-toolbar .mce-btn-group.mce-first{margin-left:10px}.happyforms-form--part-border-radius-pill .happyforms-part--rich_text .mce-container-body .mce-resizehandle{right:10px;bottom:3px}.happyforms-form--part-inner-padding-narrow .happyforms-part--rich_text .mce-content-body{margin-top:0;margin-bottom:0}.happyforms-part--rich_text .mce-edit-area{position:relative;left:-1px;padding:0;overflow:hidden}.happyforms-part--rich_text.focus .mce-edit-area{left:0}.happyforms-form--part-inner-padding-wide .happyforms-part--rich_text.focus .mce-edit-area{width:calc(100% - 10px)}.happyforms-part--rich_text.focus .mce-edit-area iframe{margin-left:-1px}.happyforms-part--rich_text .mce-edit-area iframe{position:relative;top:-5px}.happyforms-form--part-inner-padding-wide .happyforms-part--rich_text .mce-edit-area{padding:0 5px 5px}.happyforms-form--part-inner-padding-narrow .happyforms-part--rich_text .mce-edit-area iframe{top:-10px;left:-5px}.happyforms-part--rich_text .mce-container-body .mce-resizehandle{right:-1px;bottom:-1px;overflow-y:hidden;resize:horizontal}.happyforms-part--rich_text .mce-container-body .mce-resizehandle .mce-i-resize:before{resize:horizontal;overflow-y:scroll;color:transparent}.happyforms-styles .happyforms-layout-title{overflow-wrap:break-word}.happyforms-part--media .happyforms-optional,.happyforms-part--placeholder .happyforms-optional{display:none!important}.happyforms-form--part-value-text-align-center .happyforms-part--placeholder p{text-align:center}.happyforms-form--part-value-text-align-right .happyforms-part--placeholder p{text-align:right}.happyforms-part--placeholder p:first-child{margin-top:0}.happyforms-part--placeholder p:last-of-type,.happyforms-part--toggletip .happyforms-toggletip-text p:last-of-type{margin-bottom:0;padding-bottom:0}.happyforms-part--divider hr{margin:0}.happyforms-part--media img{margin:0;max-width:100%}
core/assets/css/customize.css CHANGED
@@ -1184,10 +1184,6 @@ ul.happyforms-parts-list li[data-part-type="narrative_dummy"] .happyforms-parts-
1184
  background-image: url(../svg/icons/story.svg);
1185
  }
1186
 
1187
- ul.happyforms-parts-list li[data-part-type="placeholder_dummy"] .happyforms-parts-list-item-title:before {
1188
- background-image: url(../svg/icons/paragraph.svg);
1189
- }
1190
-
1191
  ul.happyforms-parts-list li[data-part-type="optin_dummy"] .happyforms-parts-list-item-title:before {
1192
  background-image: url(../svg/icons/opt-in-choice.svg);
1193
  }
@@ -1200,16 +1196,20 @@ ul.happyforms-parts-list li[data-part-type="signature_dummy"] .happyforms-parts-
1200
  background-image: url(../svg/icons/signature.svg);
1201
  }
1202
 
1203
- ul.happyforms-parts-list li[data-part-type="divider_dummy"] .happyforms-parts-list-item-title:before {
1204
- background-image: url(../svg/icons/separator.svg);
1205
  }
1206
 
1207
- ul.happyforms-parts-list li[data-part-type="layout_title_dummy"] .happyforms-parts-list-item-title:before {
1208
- background-image: url(../svg/icons/heading.svg);
1209
  }
1210
 
1211
- ul.happyforms-parts-list li[data-part-type="media_dummy"] .happyforms-parts-list-item-title:before {
1212
- background-image: url(../svg/icons/media.svg);
 
 
 
 
1213
  }
1214
 
1215
  ul.happyforms-parts-list li[data-part-type="scrollable_terms_dummy"] .happyforms-parts-list-item-title:before {
@@ -1874,3 +1874,42 @@ ul.happyforms-parts-list li[data-part-type="poll"] {
1874
  #customize-control-no_results_label {
1875
  display: none;
1876
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1184
  background-image: url(../svg/icons/story.svg);
1185
  }
1186
 
 
 
 
 
1187
  ul.happyforms-parts-list li[data-part-type="optin_dummy"] .happyforms-parts-list-item-title:before {
1188
  background-image: url(../svg/icons/opt-in-choice.svg);
1189
  }
1196
  background-image: url(../svg/icons/signature.svg);
1197
  }
1198
 
1199
+ ul.happyforms-parts-list li[data-part-type="layout_title"] .happyforms-parts-list-item-title:before {
1200
+ background-image: url(../svg/icons/heading.svg);
1201
  }
1202
 
1203
+ ul.happyforms-parts-list li[data-part-type="placeholder"] .happyforms-parts-list-item-title:before {
1204
+ background-image: url(../svg/icons/paragraph.svg);
1205
  }
1206
 
1207
+ ul.happyforms-parts-list li[data-part-type="media"] .happyforms-parts-list-item-title:before {
1208
+ background-image: url(../svg/icons/media.svg);
1209
+ }
1210
+
1211
+ ul.happyforms-parts-list li[data-part-type="divider"] .happyforms-parts-list-item-title:before {
1212
+ background-image: url(../svg/icons/separator.svg);
1213
  }
1214
 
1215
  ul.happyforms-parts-list li[data-part-type="scrollable_terms_dummy"] .happyforms-parts-list-item-title:before {
1874
  #customize-control-no_results_label {
1875
  display: none;
1876
  }
1877
+
1878
+ /**
1879
+ *
1880
+ * Uploader
1881
+ *
1882
+ */
1883
+ img.happyforms-upload-preview {
1884
+ display: none;
1885
+ width: auto;
1886
+ height: auto;
1887
+ max-width: 100%;
1888
+ max-height: 120px;
1889
+ }
1890
+
1891
+ .happyforms-upload-preview {
1892
+ display: none;
1893
+ }
1894
+
1895
+ .happyforms-upload-preview.show {
1896
+ display: block;
1897
+ }
1898
+
1899
+ .wp-core-ui .happyforms-media-upload button.button-add-media,
1900
+ .wp-core-ui .happyforms-media-upload button.happyforms-change-button {
1901
+ display: none;
1902
+ }
1903
+
1904
+ .wp-core-ui .happyforms-media-upload button.button-add-media.show,
1905
+ .wp-core-ui .happyforms-media-upload button.happyforms-change-button.show {
1906
+ display: inline-block;
1907
+ }
1908
+
1909
+ .happyforms-widget[data-part-type="media"] .happyforms-upload-actions button {
1910
+ width: 100%;
1911
+ }
1912
+
1913
+ .happyforms-part-widget[data-part-type="placeholder"] .wp-switch-editor {
1914
+ display: none;
1915
+ }
core/assets/css/preview.css CHANGED
@@ -109,3 +109,13 @@ h3.happyforms-form__title:empty:before {
109
  content: "Add title";
110
  opacity: .5;
111
  }
 
 
 
 
 
 
 
 
 
 
109
  content: "Add title";
110
  opacity: .5;
111
  }
112
+
113
+ .happyforms-part--layout_title h1.happyforms-layout-title:empty:before,
114
+ .happyforms-part--layout_title h2.happyforms-layout-title:empty:before,
115
+ .happyforms-part--layout_title h3.happyforms-layout-title:empty:before,
116
+ .happyforms-part--layout_title h4.happyforms-layout-title:empty:before,
117
+ .happyforms-part--layout_title h5.happyforms-layout-title:empty:before,
118
+ .happyforms-part--layout_title h6.happyforms-layout-title:empty:before {
119
+ content: "Heading";
120
+ opacity: .5;
121
+ }
core/assets/js/customize/media.js ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $, Backbone ) {
2
+
3
+ var HappyFormsMediaHandle = function( el, model, options ) {
4
+ this.el = el;
5
+ this.$el = $( this.el );
6
+ this.model = model;
7
+ this.mediaFileFrame = false;
8
+ this.mediaTypes = [ 'image' ];
9
+
10
+ if ( options && options.mediaTypes ) {
11
+ this.mediaTypes = options.mediaTypes;
12
+ }
13
+
14
+ this.$uploadButton = $( '.happyforms-upload-button', this.$el );
15
+ this.$changeButton = $( '.happyforms-change-button', this.$el );
16
+ this.$removeButton = $( '.happyforms-remove-button', this.$el );
17
+ this.$previewImage = $( 'img', this.$el );
18
+ this.$previewVideo = $( '.wp-video', this.$el );
19
+ this.$previewAudio = $( '.wp-audio', this.$el );
20
+ this.$hiddenField = $( 'input[type=hidden]', this.$el );
21
+
22
+ this.modelAttribute = this.$uploadButton.attr( 'data-upload-target' );
23
+
24
+ this.$uploadButton.on( 'click', this.onUploadButtonClick.bind( this ) );
25
+ this.$changeButton.on( 'click', this.onChangeButtonClick.bind( this ) );
26
+ this.$removeButton.on( 'click', this.onRemoveButtonClick.bind( this ) );
27
+ };
28
+
29
+ HappyFormsMediaHandle.prototype.onUploadButtonClick = function( e ) {
30
+ e.preventDefault();
31
+
32
+ this.openOverlay();
33
+ }
34
+
35
+ HappyFormsMediaHandle.prototype.onChangeButtonClick = function( e ) {
36
+ e.preventDefault();
37
+
38
+ this.openOverlay();
39
+ }
40
+
41
+ HappyFormsMediaHandle.prototype.onRemoveButtonClick = function( e ) {
42
+ e.preventDefault();
43
+
44
+ this.removeMedia();
45
+ }
46
+
47
+ HappyFormsMediaHandle.prototype.openOverlay = function() {
48
+ var self = this;
49
+
50
+ wp.media.model.settings.post_id = this.model.id;
51
+
52
+ if ( this.mediaFileFrame ) {
53
+ this.mediaFileFrame.open();
54
+
55
+ return;
56
+ }
57
+
58
+ this.mediaFileFrame = wp.media.frames.wp_upload_file_frame = wp.media( {
59
+ title: self.$el.attr( 'data-overlay-title' ),
60
+ button: {
61
+ text: self.$el.attr( 'data-overlay-button-text' )
62
+ },
63
+ multiple: false
64
+ } );
65
+
66
+ this.mediaFileFrame.on( 'select', function() {
67
+ var attachment = self.mediaFileFrame.state().get( 'selection' ).first().toJSON();
68
+ var previewURL = attachment.url;
69
+
70
+ if ( -1 === self.mediaTypes.indexOf( attachment.type ) ) {
71
+ return;
72
+ }
73
+
74
+ switch ( attachment.type ) {
75
+ case 'image':
76
+ $( '.happyforms-upload-preview', self.$el ).removeClass( 'show' );
77
+ self.$previewImage.attr( 'src', previewURL ).addClass( 'show' );
78
+ break;
79
+
80
+ case 'video':
81
+ $( '.happyforms-upload-preview', self.$el ).removeClass( 'show' );
82
+
83
+ var videoPlayer;
84
+ var $video = $( '<video />', {
85
+ src: attachment.url,
86
+ type: attachment.mime,
87
+ preload: 'metadata',
88
+ poster: ( attachment.image.src !== attachment.icon ) ? attachment.image.src : '',
89
+ } );
90
+
91
+ if ( attachment.width ) {
92
+ $video.attr( 'width', attachment.width );
93
+ }
94
+
95
+ if ( attachment.height ) {
96
+ $video.attr( 'height', attachment.height );
97
+ }
98
+
99
+ self.$previewVideo.html( $video );
100
+ self.$previewVideo.addClass( 'show' );
101
+ videoPlayer = new MediaElementPlayer( $video[0], window._wpmejsSettings );
102
+ break;
103
+
104
+ case 'audio':
105
+ $( '.happyforms-upload-preview', self.$el ).removeClass( 'show' );
106
+
107
+ var audioPlayer;
108
+ var $audio = $( '<audio />', {
109
+ src: attachment.url,
110
+ type: attachment.mime,
111
+ preload: 'none',
112
+ } );
113
+
114
+ $audio.attr( 'width', '100%' );
115
+
116
+ self.$previewAudio.html( $audio );
117
+ self.$previewAudio.addClass( 'show' );
118
+ audioPlayer = new MediaElementPlayer( $audio[0], window._wpmejsSettings );
119
+ break;
120
+ }
121
+
122
+ self.$hiddenField.val( attachment.id );
123
+
124
+ self.model.set( self.modelAttribute, attachment.id );
125
+
126
+ self.$uploadButton.removeClass( 'show' );
127
+ self.$removeButton.addClass( 'show' );
128
+ self.$changeButton.addClass( 'show' );
129
+ } );
130
+
131
+ this.mediaFileFrame.open();
132
+ }
133
+
134
+ HappyFormsMediaHandle.prototype.removeMedia = function() {
135
+ this.$removeButton.removeClass( 'show' );
136
+ this.$changeButton.removeClass( 'show' );
137
+ this.$uploadButton.addClass( 'show' );
138
+ this.$previewImage.removeClass( 'show' ).attr( 'src', '' );
139
+
140
+ this.model.set( this.modelAttribute, '' );
141
+ }
142
+
143
+ $.fn.happyFormsMediaHandle = function( model, options ) {
144
+ this.each(function() {
145
+ $.data( this, 'HappyFormsMediaHandle', new HappyFormsMediaHandle( this, model, options ) );
146
+ } );
147
+ }
148
+
149
+ } ( jQuery, Backbone ) );
core/assets/js/parts/part-divider.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $, _, Backbone, api, settings ) {
2
+
3
+ happyForms.classes.models.parts.divider = happyForms.classes.models.Part.extend( {
4
+ defaults: function() {
5
+ return _.extend(
6
+ {},
7
+ settings.formParts.divider.defaults,
8
+ _.result( happyForms.classes.models.Part.prototype, 'defaults' ),
9
+ );
10
+ },
11
+ } );
12
+
13
+ happyForms.classes.views.parts.divider = happyForms.classes.views.Part.extend( {
14
+ template: '#customize-happyforms-divider-template',
15
+ } );
16
+
17
+ } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/assets/js/parts/part-layout_title.js ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $, _, Backbone, api, settings ) {
2
+
3
+ happyForms.classes.models.parts.layout_title = happyForms.classes.models.Part.extend( {
4
+ defaults: function() {
5
+ return _.extend(
6
+ {},
7
+ settings.formParts.layout_title.defaults,
8
+ _.result( happyForms.classes.models.Part.prototype, 'defaults' ),
9
+ );
10
+ },
11
+ } );
12
+
13
+ happyForms.classes.views.parts.layout_title = happyForms.classes.views.Part.extend( {
14
+ template: '#customize-happyforms-layout_title-template',
15
+
16
+ initialize: function() {
17
+ happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
18
+
19
+ this.listenTo( this.model, 'change:label', this.onLabelChange );
20
+ this.listenTo( this.model, 'change:level', this.onHeadingLevel );
21
+ },
22
+
23
+ onLabelChange: function( model, value ) {
24
+ var data = {
25
+ id: this.model.id,
26
+ callback: 'onLayoutTitlePartLabelChange',
27
+ };
28
+
29
+ happyForms.previewSend( 'happyforms-part-dom-update', data );
30
+ },
31
+
32
+ onHeadingLevel: function( model, value ) {
33
+ var data = {
34
+ id: this.model.id,
35
+ callback: 'onHeadingLevelChange',
36
+ };
37
+
38
+ happyForms.previewSend( 'happyforms-part-dom-update', data );
39
+ }
40
+
41
+ } );
42
+
43
+ var Previewer = happyForms.previewer;
44
+
45
+ happyForms.previewer = _.extend( {}, Previewer, {
46
+ onLayoutTitlePartLabelChange: function( id, html ) {
47
+ var part = happyForms.form.get( 'parts' ).get( id );
48
+ var $part = this.$( html );
49
+ var $label = this.$( '.happyforms-layout-title', $part );
50
+
51
+ $label.text( part.get( 'label' ) );
52
+ },
53
+
54
+ onHeadingLevelChange: function( id, html ) {
55
+ var part = happyForms.form.get( 'parts' ).get( id );
56
+ var $part = this.$( html );
57
+ var $headinglevel = part.get( 'level' );
58
+ var $label = this.$( '.happyforms-layout-title', $part );
59
+
60
+ $label.replaceWith( function() {
61
+ return $( '<' + $headinglevel + '/>', {
62
+ html: this.innerHTML,
63
+ class: $( this ).attr( 'class' )
64
+ } );
65
+ } );
66
+
67
+ },
68
+
69
+ } );
70
+
71
+ } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/assets/js/parts/part-media.js ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $, _, Backbone, api, settings ) {
2
+
3
+ happyForms.classes.models.parts.media = happyForms.classes.models.Part.extend( {
4
+ defaults: function() {
5
+ return _.extend(
6
+ {},
7
+ settings.formParts.media.defaults,
8
+ _.result( happyForms.classes.models.Part.prototype, 'defaults' ),
9
+ );
10
+ },
11
+ } );
12
+
13
+ happyForms.classes.views.parts.media = happyForms.classes.views.Part.extend( {
14
+ template: '#happyforms-customize-media-template',
15
+
16
+ initialize: function() {
17
+ happyForms.classes.views.Part.prototype.initialize.apply( this, arguments );
18
+
19
+ this.listenTo( this.model, 'change:attachment', this.onAttachmentChange );
20
+ },
21
+
22
+ ready: function() {
23
+ happyForms.classes.views.Part.prototype.ready.apply( this, arguments );
24
+
25
+ $( '.happyforms-media-upload', this.$el ).happyFormsMediaHandle( this.model, {
26
+ 'mediaTypes': [ 'image', 'audio', 'video' ]
27
+ } );
28
+ },
29
+
30
+ onAttachmentChange: function( model, value ) {
31
+ model.fetchHtml( function( response ) {
32
+ var data = {
33
+ id: model.get( 'id' ),
34
+ html: response,
35
+ };
36
+
37
+ happyForms.previewSend( 'happyforms-form-part-refresh', data );
38
+ } );
39
+ }
40
+ } );
41
+
42
+ } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/assets/js/parts/part-placeholder.js ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $, _, Backbone, api, settings ) {
2
+
3
+ happyForms.classes.models.parts.placeholder = happyForms.classes.models.Part.extend( {
4
+ defaults: function() {
5
+ return _.extend(
6
+ {},
7
+ settings.formParts.placeholder.defaults,
8
+ _.result( happyForms.classes.models.Part.prototype, 'defaults' ),
9
+ );
10
+ },
11
+ } );
12
+
13
+ happyForms.classes.views.parts.placeholder = happyForms.classes.views.Part.extend( {
14
+ template: '#happyforms-customize-placeholder-template',
15
+ editorId: null,
16
+
17
+ events: _.extend( {}, happyForms.classes.views.Part.prototype.events, {
18
+ 'sort-stop': 'onSortStop',
19
+ } ),
20
+
21
+ ready: function() {
22
+ happyForms.classes.views.Part.prototype.ready.apply( this, arguments );
23
+
24
+ this.listenTo( this, 'refresh', this.onRefresh );
25
+
26
+ this.initEditor();
27
+ },
28
+
29
+ initEditor: function() {
30
+ var $textarea = $( 'textarea.wp-editor-area', this.$el );
31
+
32
+ this.editorId = $textarea.attr( 'id' );
33
+ this.editorSettings = {
34
+ tinymce: {
35
+ toolbar1: 'bold,italic,strikethrough,link',
36
+ plugins : 'charmap compat3x paste directionality hr image lists wordpress wpautoresize wpemoji wplink wptextpattern wpview',
37
+ setup: this.onEditorInit.bind( this )
38
+ },
39
+ quicktags: {
40
+ buttons: {}
41
+ },
42
+ mediaButtons: false
43
+ };
44
+
45
+ wp.editor.initialize( this.editorId, this.editorSettings );
46
+ },
47
+
48
+ removeEditor: function() {
49
+ wp.editor.remove( this.editorId );
50
+ this.editorId = null;
51
+ },
52
+
53
+ onSortStop: function() {
54
+ this.removeEditor();
55
+ this.initEditor();
56
+ },
57
+
58
+ onRefresh: function() {
59
+ this.removeEditor();
60
+ this.initEditor();
61
+ },
62
+
63
+ /**
64
+ * Triggere previewer event on each `keyup` and `change` event in the WP editor.
65
+ *
66
+ * @since 1.0.0.
67
+ *
68
+ * @param {object} editor TinyMCE editor JS object.
69
+ *
70
+ * @return void
71
+ */
72
+ onEditorInit: function( editor ) {
73
+ editor.on( 'keyup change', function() {
74
+ this.model.set( 'placeholder_text', editor.getContent() );
75
+
76
+ var data = {
77
+ id: this.model.get('id'),
78
+ callback: 'onPlaceholderTextChangeCallBack',
79
+ };
80
+
81
+ happyForms.previewSend('happyforms-part-dom-update', data);
82
+ }.bind( this ) );
83
+ },
84
+
85
+ /**
86
+ * Add a special treatment for removing WP editor when the part is removed.
87
+ *
88
+ * @since 1.0.0.
89
+ *
90
+ * @return void
91
+ */
92
+ remove: function() {
93
+ wp.editor.remove( this.editorId );
94
+
95
+ happyForms.classes.views.Part.prototype.remove.apply( this, arguments );
96
+ }
97
+ } );
98
+
99
+ happyForms.previewer = _.extend( happyForms.previewer, {
100
+ onPlaceholderTextChangeCallBack: function( id, html, options ) {
101
+ var part = this.getPartModel( id );
102
+ var $part = this.getPartElement( html );
103
+
104
+ $( '.happyforms-part__el', $part ).html( part.get( 'placeholder_text' ) );
105
+ },
106
+ } );
107
+
108
+ } ) ( jQuery, _, Backbone, wp.customize, _happyFormsSettings );
core/classes/class-form-part-library.php CHANGED
@@ -7,13 +7,18 @@ class HappyForms_Form_Part_Library {
7
  private $parts = array();
8
 
9
  private $standard_parts = array(
10
- 'HappyForms_Part_SingleLineText' => 'class-part-single-line-text',
11
- 'HappyForms_Part_MultiLineText' => 'class-part-multi-line-text',
12
- 'HappyForms_Part_Email' => 'class-part-email',
13
- 'HappyForms_Part_Radio' => 'class-part-radio',
14
- 'HappyForms_Part_Checkbox' => 'class-part-checkbox',
15
- 'HappyForms_Part_Select' => 'class-part-select',
16
- 'HappyForms_Part_Number' => 'class-part-number',
 
 
 
 
 
17
  );
18
 
19
  public static function instance() {
@@ -29,9 +34,12 @@ class HappyForms_Form_Part_Library {
29
  public function __construct() {
30
  require_once( happyforms_get_core_folder() . '/classes/class-form-part.php' );
31
 
32
- foreach ( $this->standard_parts as $part_class => $part_file ) {
33
- require_once( happyforms_get_core_folder() . "/classes/parts/{$part_file}.php" );
34
- $this->register_part( $part_class );
 
 
 
35
  }
36
  }
37
 
@@ -58,26 +66,24 @@ class HappyForms_Form_Part_Library {
58
  *
59
  * @return void
60
  */
61
- public function register_part( $part, $index = -1 ) {
62
- $key = $part instanceof HappyForms_Form_Part ? $this->hash_object( $part ) : $part;
63
- $value = $part instanceof HappyForms_Form_Part ? $part : new $part();
64
-
65
- if ( -1 === $index ) {
66
- $this->parts[$key] = $value;
67
- } else {
68
- $this->parts = array_merge(
69
- array_slice( $this->parts, 0, $index ),
70
- array( $key => $value ),
71
- array_slice( $this->parts, $index )
72
- );
73
  }
74
- }
75
 
76
- public function deregister_part( $part ) {
77
- $key = $part instanceof HappyForms_Form_Part ? $this->hash_object( $part ) : $part;
78
 
79
- if ( isset( $this->parts[$key] ) ) {
80
- unset( $this->parts[$key] );
 
 
 
 
 
 
81
  }
82
  }
83
 
7
  private $parts = array();
8
 
9
  private $standard_parts = array(
10
+ 1 => array( 'HappyForms_Part_SingleLineText', 'class-part-single-line-text' ),
11
+ 2 => array( 'HappyForms_Part_MultiLineText', 'class-part-multi-line-text' ),
12
+ 3 => array( 'HappyForms_Part_Email', 'class-part-email' ),
13
+ 5 => array( 'HappyForms_Part_Radio', 'class-part-radio' ),
14
+ 6 => array( 'HappyForms_Part_Checkbox', 'class-part-checkbox' ),
15
+ 8 => array( 'HappyForms_Part_Select', 'class-part-select' ),
16
+ 9 => array( 'HappyForms_Part_Number', 'class-part-number' ),
17
+ 100 => array( 'HappyForms_Part_LayoutDrawerGroup', 'class-part-layout-drawer-group' ),
18
+ 101 => array( 'HappyForms_Part_LayoutTitle', 'class-part-layout-title' ),
19
+ 102 => array( 'HappyForms_Part_Placeholder', 'class-part-placeholder' ),
20
+ 103 => array( 'HappyForms_Part_Media', 'class-part-media' ),
21
+ 105 => array( 'HappyForms_Part_Divider', 'class-part-divider' ),
22
  );
23
 
24
  public static function instance() {
34
  public function __construct() {
35
  require_once( happyforms_get_core_folder() . '/classes/class-form-part.php' );
36
 
37
+ foreach ( $this->standard_parts as $index => $part ) {
38
+ list( $class, $file ) = $part;
39
+
40
+ require_once( happyforms_get_core_folder() . "/classes/parts/{$file}.php" );
41
+
42
+ $this->register_part( $class, $index );
43
  }
44
  }
45
 
66
  *
67
  * @return void
68
  */
69
+ public function register_part( $part_class, $index = -1 ) {
70
+ $part = new $part_class();
71
+
72
+ if ( isset( $this->parts[$index] ) ) {
73
+ $existing_part_class = get_class( $this->parts[$index] );
74
+ throw new Exception( __( "{$existing_part_class} already registered at index {$index}", 'happyforms' ) );
 
 
 
 
 
 
75
  }
 
76
 
77
+ $this->parts[$index] = $part;
 
78
 
79
+ ksort( $this->parts, SORT_NUMERIC );
80
+ }
81
+
82
+ public function deregister_part( $type ) {
83
+ foreach ( $this->parts as $index => $part ) {
84
+ if ( $type === $part->type ) {
85
+ unset( $this->parts[$index] );
86
+ }
87
  }
88
  }
89
 
core/classes/class-form-styles.php CHANGED
@@ -487,7 +487,13 @@ class HappyForms_Form_Styles {
487
  'mode' => 'css',
488
  'target' => 'value',
489
  'sanitize' => ''
490
- )
 
 
 
 
 
 
491
  );
492
 
493
  $fields = apply_filters( 'happyforms_style_fields', $fields );
@@ -752,6 +758,16 @@ class HappyForms_Form_Styles {
752
  'label' => __( 'Even row secondary', 'happyforms' ),
753
  'field' => 'color_table_row_even_text',
754
  ),
 
 
 
 
 
 
 
 
 
 
755
  5800 => array(
756
  'type' => 'divider',
757
  'label' => __( 'Submit button', 'happyforms' ),
487
  'mode' => 'css',
488
  'target' => 'value',
489
  'sanitize' => ''
490
+ ),
491
+ 'color_divider_hr' => array(
492
+ 'default' => '#cccccc',
493
+ 'sanitize' => 'sanitize_text_field',
494
+ 'target' => 'css_var',
495
+ 'variable' => '--happyforms-color-divider-hr',
496
+ ),
497
  );
498
 
499
  $fields = apply_filters( 'happyforms_style_fields', $fields );
758
  'label' => __( 'Even row secondary', 'happyforms' ),
759
  'field' => 'color_table_row_even_text',
760
  ),
761
+ 5794 => array(
762
+ 'type' => 'divider',
763
+ 'label' => __( 'Separators', 'happyforms' ),
764
+ 'id' => 'dividers',
765
+ ),
766
+ 5795 => array(
767
+ 'type' => 'color',
768
+ 'label' => __( 'Color', 'happyforms' ),
769
+ 'field' => 'color_divider_hr',
770
+ ),
771
  5800 => array(
772
  'type' => 'divider',
773
  'label' => __( 'Submit button', 'happyforms' ),
core/classes/class-happyforms-core.php CHANGED
@@ -60,6 +60,7 @@ class HappyForms_Core {
60
  if ( is_admin() ) {
61
  require_once( happyforms_get_core_folder() . '/classes/class-admin-notices.php' );
62
  require_once( happyforms_get_core_folder() . '/classes/class-dashboard-modals.php' );
 
63
  }
64
 
65
  require_once( happyforms_get_core_folder() . '/classes/class-validation-messages.php' );
60
  if ( is_admin() ) {
61
  require_once( happyforms_get_core_folder() . '/classes/class-admin-notices.php' );
62
  require_once( happyforms_get_core_folder() . '/classes/class-dashboard-modals.php' );
63
+ require_once( happyforms_get_core_folder() . '/classes/class-import-controller.php' );
64
  }
65
 
66
  require_once( happyforms_get_core_folder() . '/classes/class-validation-messages.php' );
core/classes/class-import-controller.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! class_exists( 'WP_Importer' ) ) {
4
+ $class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
5
+ if ( file_exists( $class_wp_importer ) ) {
6
+ require $class_wp_importer;
7
+ }
8
+ }
9
+
10
+
11
+ class HappyForms_Import_Controller extends WP_Importer {
12
+
13
+ var $file_id;
14
+
15
+ private static $instance;
16
+
17
+ public static function instance() {
18
+ if ( is_null( self::$instance ) ) {
19
+ self::$instance = new self();
20
+ }
21
+
22
+ self::$instance->hook();
23
+
24
+ return self::$instance;
25
+ }
26
+
27
+ public function hook() {
28
+ add_action( 'admin_init', array( $this, 'register_importer' ) );
29
+ }
30
+
31
+
32
+ public function register_importer() {
33
+ if ( ! defined( 'WP_LOAD_IMPORTERS' ) || ! current_user_can( 'manage_options' ) ) {
34
+ return;
35
+ }
36
+
37
+ $importer_description = __( 'Import forms from a forms export file.', 'happyforms' );
38
+ $importer_description = apply_filters( 'happyforms_importer_description', $importer_description );
39
+
40
+ register_importer(
41
+ 'happyforms',
42
+ __( 'Forms', 'happyforms' ),
43
+ $importer_description,
44
+ array( $this, 'dispatch' )
45
+ );
46
+ }
47
+
48
+ public function dispatch() {
49
+ $this->header();
50
+
51
+ if ( ! isset( $_FILES['import']['name'] ) ) {
52
+ $this->upload_form();
53
+ } else {
54
+ if ( $this->handle_upload() ) {
55
+ check_admin_referer( 'import-upload' );
56
+ require_once( happyforms_get_include_folder() . '/classes/class-importer-xml.php' );
57
+
58
+ $file = get_attached_file( $this->id );
59
+ $importer = new HappyForms_Importer_XML();
60
+ $result = $importer->import( $file );
61
+
62
+ $messages = [];
63
+
64
+ if ( is_wp_error( $result ) ) {
65
+ $messages = $result->get_error_messages();
66
+ } else {
67
+ $messages = $importer->get_success_messages();
68
+ }
69
+
70
+ if ( ! empty( $messages ) ) {
71
+ $this->print_messages( $messages );
72
+ }
73
+
74
+ wp_import_cleanup( $this->id );
75
+ }
76
+ }
77
+
78
+ $this->footer();
79
+ }
80
+
81
+ function header() {
82
+ echo '<div class="wrap">';
83
+ echo '<h2>' . __( 'Import Forms', 'happyforms' ) . '</h2>';
84
+ }
85
+
86
+ function footer() {
87
+ echo '</div>';
88
+ }
89
+
90
+ function upload_form() {
91
+ echo '<div class="narrow">';
92
+ echo '<p>' . __( 'Choose a forms export (.xml) file to upload, then click Upload file and import.', 'happyforms' ) . '</p>';
93
+ wp_import_upload_form( 'admin.php?import=happyforms' );
94
+ echo '</div>';
95
+ }
96
+
97
+ public function handle_upload() {
98
+ $file = wp_import_handle_upload();
99
+
100
+ if ( isset( $file['error'] ) ) {
101
+ echo '<p><strong>' . __( 'Sorry, there has been an error.', 'happyforms' ) . '</strong><br />';
102
+ echo esc_html( $file['error'] ) . '</p>';
103
+
104
+ return false;
105
+ } else if ( ! file_exists( $file['file'] ) ) {
106
+ echo '<p><strong>' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '</strong><br />';
107
+ printf( __( 'The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem.', 'happyforms' ), esc_html( $file['file'] ) );
108
+ echo '</p>';
109
+
110
+ return false;
111
+ }
112
+
113
+ $this->id = (int) $file['id'];
114
+
115
+ return true;
116
+ }
117
+
118
+ private function print_messages( $messages ) {
119
+ $output = array_map( function( $message ) {
120
+ return "<p>$message</p>";
121
+ }, $messages );
122
+
123
+ $output = implode( '', $output );
124
+
125
+ echo $output;
126
+ }
127
+
128
+ }
129
+
130
+ if ( ! function_exists( 'happyforms_get_import_controller' ) ):
131
+
132
+ function happyforms_get_import_controller() {
133
+ return HappyForms_Import_Controller::instance();
134
+ }
135
+
136
+ endif;
137
+
138
+ happyforms_get_import_controller();
core/classes/class-wp-customize-form-manager.php CHANGED
@@ -315,12 +315,13 @@ class HappyForms_WP_Customize_Form_Manager {
315
  $customize_deps, happyforms_get_version(), true
316
  );
317
 
318
- $data = array(
319
  'form' => $this->get_current_form(),
320
  'formParts' => $this->library->get_parts(),
321
  'baseUrl' => get_home_url( null, '/' ),
322
  'unlabeledFieldLabel' => happyforms_get_part_label( array( 'label' => '' ) ),
323
- );
 
324
 
325
  wp_localize_script( 'happyforms-customize', '_happyFormsSettings', $data );
326
  wp_enqueue_script( 'happyforms-customize' );
315
  $customize_deps, happyforms_get_version(), true
316
  );
317
 
318
+ $data = apply_filters( 'happyforms_customize_settings', array(
319
  'form' => $this->get_current_form(),
320
  'formParts' => $this->library->get_parts(),
321
  'baseUrl' => get_home_url( null, '/' ),
322
  'unlabeledFieldLabel' => happyforms_get_part_label( array( 'label' => '' ) ),
323
+ 'abandonAlertMessage' => __( 'The changes you made will be lost if you navigate away from this page.', 'happyforms' ),
324
+ ) );
325
 
326
  wp_localize_script( 'happyforms-customize', '_happyFormsSettings', $data );
327
  wp_enqueue_script( 'happyforms-customize' );
core/classes/parts/class-part-divider.php ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Part_Divider extends HappyForms_Form_Part {
4
+
5
+ public $type = 'divider';
6
+
7
+ public function __construct() {
8
+ $this->label = __( 'Separator', 'happyforms' );
9
+ $this->description = __( 'For adding a horizontal rule to visually separate fields.', 'happyforms' );
10
+
11
+ add_filter( 'happyforms_message_part_visible', array( $this, 'message_part_visible' ), 10, 2 );
12
+ add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 3 );
13
+ add_filter( 'happyforms_email_part_label', array( $this, 'email_part_label' ), 10, 4 );
14
+ add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 4 );
15
+ add_filter( 'happyforms_csv_part_visible', array( $this, 'csv_part_visible' ), 10, 2 );
16
+ }
17
+
18
+ /**
19
+ * Get all part meta fields defaults.
20
+ *
21
+ * @since 1.0.0.
22
+ *
23
+ * @return array
24
+ */
25
+ public function get_customize_fields() {
26
+ $fields = array(
27
+ 'type' => array(
28
+ 'default' => $this->type,
29
+ 'sanitize' => 'sanitize_text_field',
30
+ ),
31
+ 'label' => array(
32
+ 'default' => __( '', 'happyforms' ),
33
+ 'sanitize' => 'sanitize_text_field',
34
+ ),
35
+ 'width' => array(
36
+ 'default' => 'full',
37
+ 'sanitize' => 'sanitize_key'
38
+ ),
39
+ 'css_class' => array(
40
+ 'default' => '',
41
+ 'sanitize' => 'sanitize_text_field'
42
+ ),
43
+ 'required' => array(
44
+ 'default' => 0,
45
+ 'sanitize' => 'happyforms_sanitize_checkbox',
46
+ ),
47
+ );
48
+
49
+ return happyforms_get_part_customize_fields( $fields, $this->type );
50
+ }
51
+
52
+ /**
53
+ * Get template for part item in customize pane.
54
+ *
55
+ * @since 1.0.0.
56
+ *
57
+ * @return string
58
+ */
59
+ public function customize_templates() {
60
+ $template_path = happyforms_get_core_folder() . '/templates/parts/customize-divider.php';
61
+ $template_path = happyforms_get_part_customize_template_path( $template_path, $this->type );
62
+
63
+ require_once( $template_path );
64
+ }
65
+
66
+ /**
67
+ * Get front end part template with parsed data.
68
+ *
69
+ * @since 1.0.0.
70
+ *
71
+ * @param array $part_data Form part data.
72
+ * @param array $form_data Form (post) data.
73
+ *
74
+ * @return string Markup for the form part.
75
+ */
76
+ public function frontend_template( $part_data = array(), $form_data = array() ) {
77
+ $part = wp_parse_args( $part_data, $this->get_customize_defaults() );
78
+ $form = $form_data;
79
+
80
+ include( happyforms_get_core_folder() . '/templates/parts/frontend-divider.php' );
81
+ }
82
+
83
+ /**
84
+ * Sanitize submitted value before storing it.
85
+ *
86
+ * @since 1.0.0.
87
+ *
88
+ * @param array $part_data Form part data.
89
+ *
90
+ * @return string
91
+ */
92
+ public function sanitize_value( $part_data = array(), $form_data = array(), $request = array() ) {
93
+ $sanitized_value = $this->get_default_value( $part_data );
94
+
95
+ return $sanitized_value;
96
+ }
97
+
98
+ /**
99
+ * Validate value before submitting it. If it fails validation, return WP_Error object, showing respective error message.
100
+ *
101
+ * @since 1.0.0.
102
+ *
103
+ * @param array $part Form part data.
104
+ * @param string $value Submitted value.
105
+ *
106
+ * @return string|object
107
+ */
108
+ public function validate_value( $value, $part = array(), $form = array() ) {
109
+ return $value;
110
+ }
111
+
112
+ /**
113
+ * Enqueue scripts in customizer area.
114
+ *
115
+ * @since 1.0.0.
116
+ *
117
+ * @param array List of dependencies.
118
+ *
119
+ * @return void
120
+ */
121
+ public function customize_enqueue_scripts( $deps = array() ) {
122
+ wp_enqueue_script(
123
+ 'part-divider',
124
+ happyforms_get_plugin_url() . 'core/assets/js/parts/part-divider.js',
125
+ $deps, happyforms_get_version(), true
126
+ );
127
+ }
128
+
129
+ public function message_part_visible( $visible, $part ) {
130
+ if ( $this->type === $part['type'] ) {
131
+ $visible = false;
132
+ }
133
+
134
+ return $visible;
135
+ }
136
+
137
+ public function email_part_visible( $visible, $part, $form ) {
138
+ if ( $this->type === $part['type'] ) {
139
+ $visible = true;
140
+ }
141
+
142
+ return $visible;
143
+ }
144
+
145
+ public function email_part_value( $value, $message, $part, $form ) {
146
+ if ( $this->type === $part['type'] ) {
147
+ $value = '<hr>';
148
+ }
149
+
150
+ return $value;
151
+ }
152
+
153
+ public function email_part_label( $label, $message, $part, $form ) {
154
+ if ( $this->type === $part['type'] ) {
155
+ $label = '';
156
+ }
157
+
158
+ return $label;
159
+ }
160
+
161
+ public function csv_part_visible( $visible, $part ) {
162
+ if ( $this->type === $part['type'] ) {
163
+ $visible = false;
164
+ }
165
+
166
+ return $visible;
167
+ }
168
+
169
+ }
core/classes/parts/class-part-layout-drawer-group.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Part_LayoutDrawerGroup extends HappyForms_Form_Part {
4
+
5
+ public $type = 'layout_drawer_group';
6
+ public $group = 'drawer_group';
7
+
8
+ public function __construct() {
9
+ $this->label = __( 'Design', 'happyforms' );
10
+ $this->description = '';
11
+ }
12
+
13
+ }
core/classes/parts/class-part-layout-title.php ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Part_LayoutTitle extends HappyForms_Form_Part {
4
+
5
+ public $type = 'layout_title';
6
+
7
+ public function __construct() {
8
+ $this->label = __( 'Heading', 'happyforms' );
9
+ $this->description = __( 'For adding titles to visually separate fields.', 'happyforms' );
10
+
11
+ add_filter( 'happyforms_message_part_visible', array( $this, 'message_part_visible' ), 10, 2 );
12
+ add_filter( 'happyforms_csv_part_visible', array( $this, 'csv_part_visible' ), 10, 2 );
13
+ add_filter( 'happyforms_email_part_label', array( $this, 'email_part_label' ), 10, 4 );
14
+ add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 5 );
15
+ add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 3 );
16
+ }
17
+
18
+ /**
19
+ * Get all part meta fields defaults.
20
+ *
21
+ * @since 1.0.0.
22
+ *
23
+ * @return array
24
+ */
25
+ public function get_customize_fields() {
26
+ $fields = array(
27
+ 'type' => array(
28
+ 'default' => $this->type,
29
+ 'sanitize' => 'sanitize_text_field',
30
+ ),
31
+ 'label' => array(
32
+ 'default' => __( '', 'happyforms' ),
33
+ 'sanitize' => 'sanitize_text_field',
34
+ ),
35
+ 'width' => array(
36
+ 'default' => 'full',
37
+ 'sanitize' => 'sanitize_key'
38
+ ),
39
+ 'level' => array(
40
+ 'default' => 'h3',
41
+ 'sanitize' => 'sanitize_text_field'
42
+ ),
43
+ 'css_class' => array(
44
+ 'default' => '',
45
+ 'sanitize' => 'sanitize_text_field'
46
+ ),
47
+ 'required' => array(
48
+ 'default' => 0,
49
+ 'sanitize' => 'happyforms_sanitize_checkbox',
50
+ ),
51
+ );
52
+
53
+ return happyforms_get_part_customize_fields( $fields, $this->type );
54
+ }
55
+
56
+ /**
57
+ * Get template for part item in customize pane.
58
+ *
59
+ * @since 1.0.0.
60
+ *
61
+ * @return string
62
+ */
63
+ public function customize_templates() {
64
+ $template_path = happyforms_get_core_folder() . '/templates/parts/customize-layout_title.php';
65
+ $template_path = happyforms_get_part_customize_template_path( $template_path, $this->type );
66
+
67
+ require_once( $template_path );
68
+ }
69
+
70
+ /**
71
+ * Get front end part template with parsed data.
72
+ *
73
+ * @since 1.0.0.
74
+ *
75
+ * @param array $part_data Form part data.
76
+ * @param array $form_data Form (post) data.
77
+ *
78
+ * @return string Markup for the form part.
79
+ */
80
+ public function frontend_template( $part_data = array(), $form_data = array() ) {
81
+ $part = wp_parse_args( $part_data, $this->get_customize_defaults() );
82
+ $form = $form_data;
83
+
84
+ include( happyforms_get_core_folder() . '/templates/parts/frontend-layout_title.php' );
85
+ }
86
+
87
+ /**
88
+ * Sanitize submitted value before storing it.
89
+ *
90
+ * @since 1.0.0.
91
+ *
92
+ * @param array $part_data Form part data.
93
+ *
94
+ * @return string
95
+ */
96
+ public function sanitize_value( $part_data = array(), $form_data = array(), $request = array() ) {
97
+ $sanitized_value = $this->get_default_value( $part_data );
98
+
99
+ return $sanitized_value;
100
+ }
101
+
102
+ /**
103
+ * Validate value before submitting it. If it fails validation, return WP_Error object, showing respective error message.
104
+ *
105
+ * @since 1.0.0.
106
+ *
107
+ * @param array $part Form part data.
108
+ * @param string $value Submitted value.
109
+ *
110
+ * @return string|object
111
+ */
112
+ public function validate_value( $value, $part = array(), $form = array() ) {
113
+ return $value;
114
+ }
115
+
116
+ /**
117
+ * Enqueue scripts in customizer area.
118
+ *
119
+ * @since 1.0.0.
120
+ *
121
+ * @param array List of dependencies.
122
+ *
123
+ * @return void
124
+ */
125
+ public function customize_enqueue_scripts( $deps = array() ) {
126
+ wp_enqueue_script(
127
+ 'part-layout_title',
128
+ happyforms_get_plugin_url() . 'core/assets/js/parts/part-layout_title.js',
129
+ $deps, happyforms_get_version(), true
130
+ );
131
+ }
132
+
133
+ public function message_part_visible( $visible, $part ) {
134
+ if ( $this->type === $part['type'] ) {
135
+ $visible = false;
136
+ }
137
+
138
+ return $visible;
139
+ }
140
+
141
+ public function csv_part_visible( $visible, $part ) {
142
+ if ( $this->type === $part['type'] ) {
143
+ $visible = false;
144
+ }
145
+
146
+ return $visible;
147
+ }
148
+
149
+ public function email_part_label( $label, $message, $part, $form ) {
150
+ if ( $this->type === $part['type'] ) {
151
+ if ( '' === $part['label'] ) {
152
+ $label = '';
153
+ }
154
+ }
155
+
156
+ return $label;
157
+ }
158
+
159
+ public function email_part_visible( $visible, $part, $form ) {
160
+ if ( $this->type === $part['type'] ) {
161
+ $visible = true;
162
+ }
163
+
164
+ return $visible;
165
+ }
166
+
167
+ public function email_part_value( $value, $message, $part, $form, $context ) {
168
+ if ( $this->type !== $part['type'] ) {
169
+ return $value;
170
+ }
171
+
172
+ $value = '';
173
+
174
+ return $value;
175
+ }
176
+
177
+ }
core/classes/parts/class-part-media.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Part_Media extends HappyForms_Form_Part {
4
+
5
+ public $type = 'media';
6
+
7
+ public function __construct() {
8
+ $this->label = __( 'Media', 'happyforms' );
9
+ $this->description = __( 'For adding a single image, video, animated gif or audio clip.', 'happyforms' );
10
+
11
+ add_filter( 'happyforms_message_part_visible', array( $this, 'message_part_visible' ), 10, 2 );
12
+ add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 3 );
13
+ add_filter( 'happyforms_email_part_label', array( $this, 'email_part_label' ), 10, 4 );
14
+ add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 4 );
15
+ add_filter( 'happyforms_csv_part_visible', array( $this, 'csv_part_visible' ), 10, 2 );
16
+ }
17
+
18
+ /**
19
+ * Get all part meta fields defaults.
20
+ *
21
+ * @since 1.0.0.
22
+ *
23
+ * @return array
24
+ */
25
+ public function get_customize_fields() {
26
+ $fields = array(
27
+ 'type' => array(
28
+ 'default' => $this->type,
29
+ 'sanitize' => 'sanitize_text_field',
30
+ ),
31
+ 'label' => array(
32
+ 'default' => __( '', 'happyforms' ),
33
+ 'sanitize' => 'sanitize_text_field',
34
+ ),
35
+ 'label_placement' => array(
36
+ 'default' => 'show',
37
+ 'sanitize' => 'sanitize_text_field'
38
+ ),
39
+ 'description' => array(
40
+ 'default' => '',
41
+ 'sanitize' => 'sanitize_text_field'
42
+ ),
43
+ 'width' => array(
44
+ 'default' => 'full',
45
+ 'sanitize' => 'sanitize_key'
46
+ ),
47
+ 'css_class' => array(
48
+ 'default' => '',
49
+ 'sanitize' => 'sanitize_text_field'
50
+ ),
51
+ 'attachment' => array(
52
+ 'default' => 0,
53
+ 'sanitize' => 'intval',
54
+ ),
55
+ 'required' => array(
56
+ 'default' => 0,
57
+ 'sanitize' => 'intval',
58
+ ),
59
+ );
60
+
61
+ return happyforms_get_part_customize_fields( $fields, $this->type );
62
+ }
63
+
64
+ /**
65
+ * Get template for part item in customize pane.
66
+ *
67
+ * @since 1.0.0.
68
+ *
69
+ * @return string
70
+ */
71
+ public function customize_templates() {
72
+ $template_path = happyforms_get_core_folder() . '/templates/parts/customize-media.php';
73
+ $template_path = happyforms_get_part_customize_template_path( $template_path, $this->type );
74
+
75
+ require_once( $template_path );
76
+ }
77
+
78
+ /**
79
+ * Get front end part template with parsed data.
80
+ *
81
+ * @since 1.0.0.
82
+ *
83
+ * @param array $part_data Form part data.
84
+ * @param array $form_data Form (post) data.
85
+ *
86
+ * @return string Markup for the form part.
87
+ */
88
+ public function frontend_template( $part_data = array(), $form_data = array() ) {
89
+ $part = wp_parse_args( $part_data, $this->get_customize_defaults() );
90
+ $form = $form_data;
91
+
92
+ include( happyforms_get_core_folder() . '/templates/parts/frontend-media.php' );
93
+ }
94
+
95
+ /**
96
+ * Get all possible messages definitions.
97
+ *
98
+ * @since 1.0.0.
99
+ *
100
+ * @return array Associative array, specifying message type and copy.
101
+ */
102
+ public function get_message_definitions() {
103
+ return array();
104
+ }
105
+
106
+ /**
107
+ * Sanitize submitted value before storing it.
108
+ *
109
+ * @since 1.0.0.
110
+ *
111
+ * @param array $part_data Form part data.
112
+ *
113
+ * @return string
114
+ */
115
+ public function sanitize_value( $part_data = array(), $form_data = array(), $request = array() ) {
116
+ $sanitized_value = $this->get_default_value( $part_data );
117
+ $part_name = happyforms_get_part_name( $part_data, $form_data );
118
+
119
+ if ( isset( $request[$part_name] ) ) {
120
+ $sanitized_value = sanitize_text_field( $request[$part_name] );
121
+ }
122
+
123
+ return $sanitized_value;
124
+ }
125
+
126
+ /**
127
+ * Validate value before submitting it.
128
+ *
129
+ * @since 1.0.0.
130
+ *
131
+ * @param array $part Form part data.
132
+ * @param string $value Submitted value.
133
+ *
134
+ * @return string
135
+ */
136
+ public function validate_value( $value, $part = array(), $form = array() ) {
137
+ $validated_value = esc_attr( $value );
138
+
139
+ return $validated_value;
140
+ }
141
+
142
+ public function message_part_visible( $visible, $part ) {
143
+ if ( $this->type === $part['type'] ) {
144
+ $visible = false;
145
+ }
146
+
147
+ return $visible;
148
+ }
149
+
150
+ public function email_part_visible( $visible, $part, $form ) {
151
+ if ( $this->type === $part['type'] ) {
152
+ $visible = true;
153
+ }
154
+
155
+ return $visible;
156
+ }
157
+
158
+ public function csv_part_visible( $visible, $part ) {
159
+ if ( $this->type === $part['type'] ) {
160
+ $visible = false;
161
+ }
162
+
163
+ return $visible;
164
+ }
165
+
166
+ public function email_part_value( $value, $message, $part, $form ) {
167
+ if ( $this->type !== $part['type'] ) {
168
+ return $value;
169
+ }
170
+
171
+ if ( 0 === $part['attachment'] ) {
172
+ return $value;
173
+ }
174
+
175
+ $attachment = get_posts( array(
176
+ 'post_type' => 'attachment',
177
+ 'p' => $part['attachment'],
178
+ ) );
179
+
180
+ if ( ! empty( $attachment ) ) {
181
+ $attachment = $attachment[0];
182
+ $src = wp_get_attachment_url( $attachment->ID );
183
+ $filename = basename( $src );
184
+
185
+ $value = "<a href={$src}>{$filename}</a>";
186
+ }
187
+
188
+
189
+ return $value;
190
+ }
191
+
192
+ public function email_part_label( $label, $message, $part, $form ) {
193
+ if ( $this->type === $part['type'] ) {
194
+ if ( '' === $part['label'] ) {
195
+ $label = '';
196
+ }
197
+ }
198
+
199
+ return $label;
200
+ }
201
+
202
+ /**
203
+ * Enqueue scripts in customizer area.
204
+ *
205
+ * @since 1.0.0.
206
+ *
207
+ * @param array List of dependencies.
208
+ *
209
+ * @return void
210
+ */
211
+ public function customize_enqueue_scripts( $deps = array() ) {
212
+ wp_enqueue_media();
213
+
214
+ wp_enqueue_script(
215
+ 'happyforms-media-handle',
216
+ happyforms_get_plugin_url() . 'core/assets/js/customize/media.js',
217
+ array( 'happyforms-customize' ),
218
+ happyforms_get_version(),
219
+ true
220
+ );
221
+
222
+ wp_enqueue_script(
223
+ 'part-media',
224
+ happyforms_get_plugin_url() . 'core/assets/js/parts/part-media.js',
225
+ $deps, happyforms_get_version(), true
226
+ );
227
+ }
228
+ }
core/classes/parts/class-part-placeholder.php ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Part_Placeholder extends HappyForms_Form_Part {
4
+
5
+ public $type = 'placeholder';
6
+
7
+ public function __construct() {
8
+ $this->label = __( 'Paragraph', 'happyforms' );
9
+ $this->description = __( 'For adding helper text, notes and formatted messages.', 'happyforms' );
10
+
11
+ add_filter( 'happyforms_message_part_visible', array( $this, 'message_part_visible' ), 10, 2 );
12
+ add_filter( 'happyforms_email_part_visible', array( $this, 'email_part_visible' ), 10, 4 );
13
+ add_filter( 'happyforms_email_part_label', array( $this, 'email_part_label' ), 10, 4 );
14
+ add_filter( 'happyforms_email_part_value', array( $this, 'email_part_value' ), 10, 5 );
15
+ add_filter( 'happyforms_csv_part_visible', array( $this, 'csv_part_visible' ), 10, 2 );
16
+ }
17
+
18
+ /**
19
+ * Get all part meta fields defaults.
20
+ *
21
+ * @since 1.0.0.
22
+ *
23
+ * @return array
24
+ */
25
+ public function get_customize_fields() {
26
+ $fields = array(
27
+ 'type' => array(
28
+ 'default' => $this->type,
29
+ 'sanitize' => 'sanitize_text_field',
30
+ ),
31
+ 'label' => array(
32
+ 'default' => __( '', 'happyforms' ),
33
+ 'sanitize' => 'sanitize_text_field',
34
+ ),
35
+ 'label_placement' => array(
36
+ 'default' => 'show',
37
+ 'sanitize' => 'sanitize_text_field'
38
+ ),
39
+ 'description' => array(
40
+ 'default' => '',
41
+ 'sanitize' => 'sanitize_text_field'
42
+ ),
43
+ 'description_mode' => array(
44
+ 'default' => '',
45
+ 'sanitize' => 'sanitize_text_field'
46
+ ),
47
+ 'width' => array(
48
+ 'default' => 'full',
49
+ 'sanitize' => 'sanitize_key'
50
+ ),
51
+ 'css_class' => array(
52
+ 'default' => '',
53
+ 'sanitize' => 'sanitize_text_field'
54
+ ),
55
+ 'placeholder_text' => array(
56
+ 'default' => '',
57
+ 'sanitize' => 'esc_html'
58
+ ),
59
+ 'required' => array(
60
+ 'default' => 0,
61
+ 'sanitize' => 'happyforms_sanitize_checkbox'
62
+ )
63
+ );
64
+
65
+ return happyforms_get_part_customize_fields( $fields, $this->type );
66
+ }
67
+
68
+ /**
69
+ * Get template for part item in customize pane.
70
+ *
71
+ * @since 1.0.0.
72
+ *
73
+ * @return string
74
+ */
75
+ public function customize_templates() {
76
+ $template_path = happyforms_get_core_folder() . '/templates/parts/customize-placeholder.php';
77
+ $template_path = happyforms_get_part_customize_template_path( $template_path, $this->type );
78
+
79
+ require_once( $template_path );
80
+ }
81
+
82
+ /**
83
+ * Get front end part template with parsed data.
84
+ *
85
+ * @since 1.0.0.
86
+ *
87
+ * @param array $part_data Form part data.
88
+ * @param array $form_data Form (post) data.
89
+ *
90
+ * @return string Markup for the form part.
91
+ */
92
+ public function frontend_template( $part_data = array(), $form_data = array() ) {
93
+ $part = wp_parse_args( $part_data, $this->get_customize_defaults() );
94
+ $form = $form_data;
95
+
96
+ include( happyforms_get_core_folder() . '/templates/parts/frontend-placeholder.php' );
97
+ }
98
+
99
+ /**
100
+ * Get all possible messages definitions.
101
+ *
102
+ * @since 1.0.0.
103
+ *
104
+ * @return array Associative array, specifying message type and copy.
105
+ */
106
+ public function get_message_definitions() {
107
+ return array();
108
+ }
109
+
110
+ /**
111
+ * Sanitize submitted value before storing it.
112
+ *
113
+ * @since 1.0.0.
114
+ *
115
+ * @param array $part_data Form part data.
116
+ *
117
+ * @return string
118
+ */
119
+ public function sanitize_value( $part_data = array(), $form_data = array(), $request = array() ) {
120
+ $sanitized_value = $this->get_default_value( $part_data );
121
+ $part_name = happyforms_get_part_name( $part_data, $form_data );
122
+
123
+ if ( isset( $request[$part_name] ) ) {
124
+ $sanitized_value = sanitize_text_field( $request[$part_name] );
125
+ }
126
+
127
+ return $sanitized_value;
128
+ }
129
+
130
+ /**
131
+ * Validate value before submitting it.
132
+ *
133
+ * @since 1.0.0.
134
+ *
135
+ * @param array $part Form part data.
136
+ * @param string $value Submitted value.
137
+ *
138
+ * @return string
139
+ */
140
+ public function validate_value( $value, $part = array(), $form = array() ) {
141
+ $validated_value = esc_attr( $value );
142
+
143
+ return $validated_value;
144
+ }
145
+
146
+ public function message_part_visible( $visible, $part ) {
147
+ if ( $this->type === $part['type'] ) {
148
+ $visible = false;
149
+ }
150
+
151
+ return $visible;
152
+ }
153
+
154
+ public function email_part_label( $label, $message, $part, $form ) {
155
+ if ( $this->type === $part['type'] ) {
156
+ if ( '' === $part['label'] ) {
157
+ $label = '';
158
+ }
159
+ }
160
+
161
+ return $label;
162
+ }
163
+
164
+ public function email_part_visible( $visible, $part, $form, $response ) {
165
+ if ( $this->type === $part['type'] ) {
166
+ $value = happyforms_get_email_part_value( $response, $part, $form );
167
+
168
+ if ( '' === $value ) {
169
+ $visible = false;
170
+ }
171
+ }
172
+
173
+ return $visible;
174
+ }
175
+
176
+ public function email_part_value( $value, $message, $part, $form, $context ) {
177
+ if ( $this->type !== $part['type'] ) {
178
+ return $value;
179
+ }
180
+
181
+ $value = wp_specialchars_decode( $part['placeholder_text'] );
182
+
183
+ return $value;
184
+ }
185
+
186
+ public function csv_part_visible( $visible, $part ) {
187
+ if ( $this->type === $part['type'] ) {
188
+ $visible = false;
189
+ }
190
+
191
+ return $visible;
192
+ }
193
+
194
+ /**
195
+ * Enqueue scripts in customizer area.
196
+ *
197
+ * @since 1.0.0.
198
+ *
199
+ * @param array List of dependencies.
200
+ *
201
+ * @return void
202
+ */
203
+ public function customize_enqueue_scripts( $deps = array() ) {
204
+ wp_enqueue_script(
205
+ 'part-placeholder',
206
+ happyforms_get_plugin_url() . 'core/assets/js/parts/part-placeholder.js',
207
+ $deps, happyforms_get_version(), true
208
+ );
209
+ }
210
+ }
core/helpers/helper-form-templates.php CHANGED
@@ -50,6 +50,23 @@ function happyforms_client_referer_field() {
50
 
51
  endif;
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  if ( ! function_exists( 'happyforms_honeypot' ) ) :
54
 
55
  function happyforms_honeypot( $form ) {
50
 
51
  endif;
52
 
53
+ if ( ! function_exists( 'happyforms_referer_field' ) ):
54
+ /**
55
+ * Output a form's action attribute.
56
+ *
57
+ * @since 1.0
58
+ *
59
+ * @return void
60
+ */
61
+ function happyforms_current_post_id() {
62
+ $post_id = is_singular() ? get_the_ID() : '';
63
+ ?>
64
+ <input type="hidden" name="current_post_id" value="<?php echo $post_id; ?>">
65
+ <?php
66
+ }
67
+
68
+ endif;
69
+
70
  if ( ! function_exists( 'happyforms_honeypot' ) ) :
71
 
72
  function happyforms_honeypot( $form ) {
core/helpers/helper-misc.php CHANGED
@@ -1174,3 +1174,21 @@ function happyforms_the_external_link_icon( $echo = true ) {
1174
  }
1175
 
1176
  endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1174
  }
1175
 
1176
  endif;
1177
+
1178
+ if ( ! function_exists( 'happyforms_is_form_edit_screen' ) ) :
1179
+
1180
+ function happyforms_is_form_edit_screen() {
1181
+ global $pagenow;
1182
+
1183
+ if ( 'customize.php' === $pagenow &&
1184
+ isset( $_REQUEST['happyforms'] ) &&
1185
+ ! empty( $_REQUEST['happyforms'] ) &&
1186
+ isset( $_REQUEST['form_id'] ) ) {
1187
+
1188
+ return true;
1189
+ }
1190
+
1191
+ return false;
1192
+ }
1193
+
1194
+ endif;
core/templates/customize-header-actions.php CHANGED
@@ -18,7 +18,7 @@
18
  %>
19
  <button id="happyforms-save-button" class="button-primary button" aria-label="<%= saveLabel %>" aria-expanded="false" disabled="disabled" data-text-saved="<%= savedLabel %>" data-text-default="<%= saveLabel %>"><%= saveLabel %></button>
20
  </div>
21
- <a href="<?php echo esc_url( $wp_customize->get_return_url() ); ?>" id="happyforms-close-link" data-message="<?php _e( 'The changes you made will be lost if you navigate away from this page.', 'happyforms' ); ?>">
22
  <span class="screen-reader-text"><?php _e( 'Close', 'happyforms' ); ?></span>
23
  </a>
24
 
18
  %>
19
  <button id="happyforms-save-button" class="button-primary button" aria-label="<%= saveLabel %>" aria-expanded="false" disabled="disabled" data-text-saved="<%= savedLabel %>" data-text-default="<%= saveLabel %>"><%= saveLabel %></button>
20
  </div>
21
+ <a href="<?php echo esc_url( $wp_customize->get_return_url() ); ?>" id="happyforms-close-link">
22
  <span class="screen-reader-text"><?php _e( 'Close', 'happyforms' ); ?></span>
23
  </a>
24
 
core/templates/parts/customize-divider.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/template" id="customize-happyforms-divider-template">
2
+ <div class="happyforms-widget happyforms-part-widget" data-part-id="<%= instance.id %>">
3
+ <div class="happyforms-widget-top happyforms-part-widget-top">
4
+ <div class="happyforms-part-widget-title-action">
5
+ <button type="button" class="happyforms-widget-action">
6
+ <span class="toggle-indicator"></span>
7
+ </button>
8
+ </div>
9
+ <div class="happyforms-widget-title">
10
+ <h3><%= settings.label %><span class="in-widget-title"<% if (!instance.label) { %> style="display: none"<% } %>>: <span><%= (instance.label) ? instance.label : '' %></span></span></h3>
11
+ </div>
12
+ </div>
13
+ <div class="happyforms-widget-content">
14
+ <div class="happyforms-widget-form">
15
+ <?php happyforms_customize_part_width_control(); ?>
16
+
17
+ <p>
18
+ <label for="<%= instance.id %>_css_class"><?php _e( 'Additional CSS class(es)', 'happyforms' ); ?></label>
19
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%- instance.css_class %>" data-bind="css_class" />
20
+ </p>
21
+ </div>
22
+
23
+ <div class="happyforms-widget-actions">
24
+ <a href="#" class="happyforms-form-part-remove"><?php _e( 'Delete', 'happyforms' ); ?></a> |
25
+ <a href="#" class="happyforms-form-part-duplicate"><?php _e( 'Duplicate', 'happyforms' ); ?></a>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </script>
core/templates/parts/customize-layout_title.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/template" id="customize-happyforms-layout_title-template">
2
+ <div class="happyforms-widget happyforms-part-widget" data-part-id="<%= instance.id %>">
3
+ <div class="happyforms-widget-top happyforms-part-widget-top">
4
+ <div class="happyforms-part-widget-title-action">
5
+ <button type="button" class="happyforms-widget-action">
6
+ <span class="toggle-indicator"></span>
7
+ </button>
8
+ </div>
9
+ <div class="happyforms-widget-title">
10
+ <h3><%= settings.label %><span class="in-widget-title"<% if (!instance.label) { %> style="display: none"<% } %>>: <span><%= (instance.label) ? instance.label : '' %></span></span></h3>
11
+ </div>
12
+ </div>
13
+ <div class="happyforms-widget-content">
14
+ <div class="happyforms-widget-form">
15
+ <p>
16
+ <label for="<%= instance.id %>_title"><?php _e( 'Heading', 'happyforms' ); ?></label>
17
+ <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%- instance.label %>" data-bind="label" />
18
+ </p>
19
+ <p>
20
+ <label for="<%= instance.id %>_level"><?php _e( 'Heading level', 'happyforms' ); ?></label>
21
+ <span class="happyforms-buttongroup">
22
+ <?php for ( $i = 1; $i <= 6; $i++ ): ?>
23
+ <label for="<%= instance.id %>-level-h<?php echo $i; ?>">
24
+ <input type="radio" id="<%= instance.id %>-level-h<?php echo $i; ?>" value="h<?php echo $i; ?>" name="<%= instance.id %>-level" data-bind="level" <%= ( instance.level == 'h<?php echo $i; ?>' ) ? 'checked' : '' %> />
25
+ <span><?php _e( 'H' . $i, 'happyforms' ); ?></span>
26
+ </label>
27
+ <?php endfor; ?>
28
+ </span>
29
+ </p>
30
+
31
+ <?php happyforms_customize_part_width_control(); ?>
32
+
33
+ <p>
34
+ <label for="<%= instance.id %>_css_class"><?php _e( 'Additional CSS class(es)', 'happyforms' ); ?></label>
35
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%- instance.css_class %>" data-bind="css_class" />
36
+ </p>
37
+ </div>
38
+
39
+ <div class="happyforms-widget-actions">
40
+ <a href="#" class="happyforms-form-part-remove"><?php _e( 'Delete', 'happyforms' ); ?></a> |
41
+ <a href="#" class="happyforms-form-part-duplicate"><?php _e( 'Duplicate', 'happyforms' ); ?></a>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </script>
core/templates/parts/customize-media.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/template" id="happyforms-customize-media-template">
2
+ <?php include( happyforms_get_core_folder() . '/templates/customize-form-part-header.php' ); ?>
3
+ <% if ( instance.label ) { %>
4
+ <p class="label-field-group">
5
+ <label for="<%= instance.id %>_title"><?php _e( 'Label', 'happyforms' ); ?></label>
6
+ <div class="label-group">
7
+ <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%- instance.label %>" data-bind="label" />
8
+ <div class="happyforms-buttongroup">
9
+ <label for="<%= instance.id %>-label_placement-show">
10
+ <input type="radio" id="<%= instance.id %>-label_placement-show" value="show" name="<%= instance.id %>-label_placement" data-bind="label_placement" <%= ( instance.label_placement == 'show' ) ? 'checked' : '' %> />
11
+ <span><?php _e( 'Show', 'happyforms' ); ?></span>
12
+ </label>
13
+ <label for="<%= instance.id %>-label_placement-hidden">
14
+ <input type="radio" id="<%= instance.id %>-label_placement-hidden" value="hidden" name="<%= instance.id %>-label_placement" data-bind="label_placement" <%= ( instance.label_placement == 'hidden' ) ? 'checked' : '' %> />
15
+ <span><?php _e( 'Hide', 'happyforms' ); ?></span>
16
+ </label>
17
+ </div>
18
+ </div>
19
+ </p>
20
+ <% } %>
21
+
22
+ <?php do_action( 'happyforms_part_customize_placeholder_before_options' ); ?>
23
+
24
+ <div class="happyforms-media-upload" data-overlay-title="<?php _e( 'Select media', 'happyforms' ); ?>" data-overlay-button-text="<?php _e( 'Select Media', 'happyforms' ); ?>">
25
+ <p><% if ( instance.label ) { %><label><?php _e( 'Media', 'happyforms' ); ?></label><% } %></p>
26
+ <div class="attachment-media-view">
27
+ <%
28
+ let attachmentJSON = {};
29
+
30
+ wp.media.attachment( instance.attachment ).fetch().then( function( data ) {
31
+ attachmentJSON = wp.media.attachment( instance.attachment ).toJSON();
32
+
33
+ switch ( attachmentJSON.type ) {
34
+ case 'image':
35
+ var image = document.getElementById( instance.id + '-image-preview' );
36
+ image.src = attachmentJSON.url;
37
+ image.classList.add( 'show' );
38
+ break;
39
+
40
+ case 'video':
41
+ var videoPlayer;
42
+ var videoHolder = document.getElementById( instance.id + '-video-preview' );
43
+ var video = document.createElement( 'video' );
44
+
45
+ video.src = attachmentJSON.url;
46
+ video.type = attachmentJSON.mime;
47
+ video.preload = 'metadata';
48
+
49
+ if ( attachmentJSON.image.src !== attachmentJSON.icon ) {
50
+ video.poster = attachmentJSON.image.src;
51
+ }
52
+
53
+ video.width = attachmentJSON.width;
54
+ video.height = attachmentJSON.height;
55
+
56
+ videoHolder.appendChild( video );
57
+ videoHolder.classList.add( 'show' );
58
+
59
+ videoPlayer = new MediaElementPlayer( video, window._wpmejsSettings );
60
+ break;
61
+
62
+ case 'audio':
63
+ var audioPlayer;
64
+ var audioHolder = document.getElementById( instance.id + '-audio-preview' );
65
+ var audio = document.createElement( 'audio' );
66
+
67
+ audio.src = attachmentJSON.url;
68
+ audio.type = attachmentJSON.mime;
69
+ audio.preload = 'none';
70
+ audio.width = '100%';
71
+ audio.controls = 'true';
72
+ audio.classList.add( 'wp-audio-shortcode' );
73
+
74
+ audioHolder.appendChild( audio );
75
+ audioHolder.classList.add( 'show' );
76
+
77
+ audioPlayer = new MediaElementPlayer( audio, window._wpmejsSettings );
78
+ break;
79
+
80
+ default:
81
+ break;
82
+ }
83
+ } );
84
+ %>
85
+
86
+ <img id="<%= instance.id %>-image-preview" src="" data-preview-target="<%= instance.id %>" class="happyforms-upload-preview">
87
+
88
+ <div class="wp-media-wrapper wp-video happyforms-upload-preview" id="<%= instance.id %>-video-preview">
89
+ </div>
90
+
91
+ <div class="wp-media-wrapper wp-audio happyforms-upload-preview" id="<%= instance.id %>-audio-preview">
92
+ </div>
93
+
94
+ <button type="button" class="upload-button happyforms-upload-button button-add-media<%= ( ! instance.attachment ) ? ' show' : '' %>" data-upload-target="attachment"><?php _e( 'Select media', 'happyforms' ); ?></button>
95
+ <input type="hidden" data-bind="attachment" value="<%= instance.attachment %>">
96
+
97
+ <div class="actions happyforms-upload-actions">
98
+ <button type="button" class="button happyforms-change-button upload-button<%= ( 0 != instance.attachment ) ? ' show' : '' %>"><?php _e( 'Replace Media', 'happyforms' ); ?></button>
99
+ </div>
100
+ </div>
101
+ </div>
102
+
103
+ <?php do_action( 'happyforms_part_customize_placeholder_after_options' ); ?>
104
+
105
+ <?php do_action( 'happyforms_part_customize_placeholder_before_advanced_options' ); ?>
106
+
107
+ <?php happyforms_customize_part_width_control(); ?>
108
+
109
+ <?php do_action( 'happyforms_part_customize_placeholder_after_advanced_options' ); ?>
110
+
111
+ <p>
112
+ <label for="<%= instance.id %>_css_class"><?php _e( 'Additional CSS class(es)', 'happyforms' ); ?></label>
113
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%- instance.css_class %>" data-bind="css_class" />
114
+ </p>
115
+
116
+ <div class="happyforms-part-logic-wrap">
117
+ <div class="happyforms-logic-view">
118
+ <?php happyforms_customize_part_logic(); ?>
119
+ </div>
120
+ </div>
121
+
122
+ <?php happyforms_customize_part_footer(); ?>
123
+ </script>
core/templates/parts/customize-placeholder.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/template" id="happyforms-customize-placeholder-template">
2
+ <?php include( happyforms_get_core_folder() . '/templates/customize-form-part-header.php' ); ?>
3
+
4
+ <% if ( instance.label ) { %>
5
+ <p class="label-field-group">
6
+ <label for="<%= instance.id %>_title"><?php _e( 'Label', 'happyforms' ); ?></label>
7
+ <div class="label-group">
8
+ <input type="text" id="<%= instance.id %>_title" class="widefat title" value="<%- instance.label %>" data-bind="label" />
9
+ <div class="happyforms-buttongroup">
10
+ <label for="<%= instance.id %>-label_placement-show">
11
+ <input type="radio" id="<%= instance.id %>-label_placement-show" value="show" name="<%= instance.id %>-label_placement" data-bind="label_placement" <%= ( instance.label_placement == 'show' ) ? 'checked' : '' %> />
12
+ <span><?php _e( 'Show', 'happyforms' ); ?></span>
13
+ </label>
14
+ <label for="<%= instance.id %>-label_placement-hidden">
15
+ <input type="radio" id="<%= instance.id %>-label_placement-hidden" value="hidden" name="<%= instance.id %>-label_placement" data-bind="label_placement" <%= ( instance.label_placement == 'hidden' ) ? 'checked' : '' %> />
16
+ <span><?php _e( 'Hide', 'happyforms' ); ?></span>
17
+ </label>
18
+ </div>
19
+ </div>
20
+ </p>
21
+ <% } %>
22
+
23
+ <% if ( instance.description ) { %>
24
+ <p>
25
+ <label for="<%= instance.id %>_description"><?php _e( 'Hint', 'happyforms' ); ?></label>
26
+ <textarea id="<%= instance.id %>_description" data-bind="description"><%= instance.description %></textarea>
27
+ </p>
28
+ <% } %>
29
+
30
+ <?php do_action( 'happyforms_part_customize_placeholder_before_options' ); ?>
31
+ <p>
32
+ <label for="<%= instance.id %>_placeholder_text"><?php _e( 'Text', 'happyforms' ); ?></label>
33
+ <textarea id="<%= instance.id %>_placeholder_text" class="wp-editor-area" name="placeholder_text" data-bind="placeholder_text"><%= instance.placeholder_text %></textarea>
34
+ </p>
35
+
36
+ <?php do_action( 'happyforms_part_customize_placeholder_after_options' ); ?>
37
+
38
+ <?php do_action( 'happyforms_part_customize_placeholder_before_advanced_options' ); ?>
39
+
40
+ <?php happyforms_customize_part_width_control(); ?>
41
+
42
+ <?php do_action( 'happyforms_part_customize_placeholder_after_advanced_options' ); ?>
43
+
44
+ <p>
45
+ <label for="<%= instance.id %>_css_class"><?php _e( 'Additional CSS class(es)', 'happyforms' ); ?></label>
46
+ <input type="text" id="<%= instance.id %>_css_class" class="widefat title" value="<%- instance.css_class %>" data-bind="css_class" />
47
+ </p>
48
+
49
+ <div class="happyforms-part-logic-wrap">
50
+ <div class="happyforms-logic-view">
51
+ <?php happyforms_customize_part_logic(); ?>
52
+ </div>
53
+ </div>
54
+
55
+ <?php happyforms_customize_part_footer(); ?>
56
+ </script>
core/templates/parts/frontend-divider.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
2
+ <div class="happyforms-part-wrap">
3
+ <hr />
4
+ </div>
5
+ </div>
core/templates/parts/frontend-layout_title.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
2
+ <div class="happyforms-part-wrap">
3
+ <<?php echo $part['level']; ?> class="happyforms-layout-title"><?php echo $part['label']; ?></<?php echo $part['level']; ?>>
4
+ </div>
5
+ </div>
core/templates/parts/frontend-media.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
2
+ <div class="happyforms-part-wrap">
3
+ <?php
4
+ if ( ! empty( $part['label'] ) ) {
5
+ happyforms_the_part_label( $part, $form );
6
+ }
7
+ ?>
8
+
9
+ <?php happyforms_print_part_description( $part ); ?>
10
+
11
+ <div class="happyforms-part__el">
12
+ <?php
13
+ if ( 0 != $part['attachment'] ) {
14
+ $attachment = get_posts( array(
15
+ 'post_type' => 'attachment',
16
+ 'p' => $part['attachment'],
17
+ ) );
18
+
19
+ if ( ! empty( $attachment ) ) {
20
+ $attachment = $attachment[0];
21
+ $src = wp_get_attachment_url( $attachment->ID );
22
+ $html = '';
23
+
24
+ if ( wp_attachment_is( 'video', $attachment ) || wp_attachment_is( 'audio', $attachment ) ) {
25
+ global $wp_embed;
26
+
27
+ $html = do_shortcode( $wp_embed->run_shortcode( "[embed]{$src}[/embed]" ) );
28
+ } else {
29
+ $html = sprintf(
30
+ '<img src="%s" alt="%s">',
31
+ $src,
32
+ $attachment->post_content
33
+ );
34
+ }
35
+
36
+ echo $html;
37
+ }
38
+ }
39
+ ?>
40
+
41
+ <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
42
+
43
+ </div>
44
+ </div>
45
+ </div>
core/templates/parts/frontend-placeholder.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="<?php happyforms_the_part_class( $part, $form ); ?>" id="<?php happyforms_the_part_id( $part, $form ); ?>-part" <?php happyforms_the_part_data_attributes( $part, $form ); ?>>
2
+ <div class="happyforms-part-wrap">
3
+ <?php
4
+ if ( ! empty( $part['label'] ) ) {
5
+ happyforms_the_part_label( $part, $form );
6
+ }
7
+ ?>
8
+
9
+ <?php happyforms_print_part_description( $part ); ?>
10
+
11
+ <div class="happyforms-part__el">
12
+ <?php do_action( 'happyforms_part_input_before', $part, $form ); ?>
13
+
14
+ <?php
15
+ $placeholder_text = $part['placeholder_text'];
16
+ $placeholder_text = html_entity_decode( $placeholder_text );
17
+ $placeholder_text = wp_unslash( $placeholder_text );
18
+ $placeholder_text = do_shortcode( $placeholder_text );
19
+
20
+ echo $placeholder_text;
21
+ ?>
22
+
23
+ <?php do_action( 'happyforms_part_input_after', $part, $form ); ?>
24
+ </div>
25
+ </div>
26
+ </div>
core/templates/single-form.php CHANGED
@@ -7,6 +7,7 @@
7
 
8
  <?php happyforms_action_field(); ?>
9
  <?php happyforms_client_referer_field( $form['ID'] ); ?>
 
10
  <?php happyforms_form_field( $form['ID'] ); ?>
11
  <?php happyforms_step_field( $form ); ?>
12
 
7
 
8
  <?php happyforms_action_field(); ?>
9
  <?php happyforms_client_referer_field( $form['ID'] ); ?>
10
+ <?php happyforms_current_post_id(); ?>
11
  <?php happyforms_form_field( $form['ID'] ); ?>
12
  <?php happyforms_step_field( $form ); ?>
13
 
happyforms.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: https://happyforms.io
6
  * Description: Form builder to get in touch with visitors, grow your email list and collect payments.
7
  * Author: Happyforms
8
- * Version: 1.20.2
9
  * Author URI: https://happyforms.io
10
  * Upgrade URI: https://happyforms.io/upgrade
11
  */
@@ -22,7 +22,7 @@ if ( defined( 'HAPPYFORMS_UPGRADE_VERSION' ) ) {
22
  /**
23
  * The current version of the plugin.
24
  */
25
- define( 'HAPPYFORMS_VERSION', '1.20.2' );
26
 
27
  if ( ! function_exists( 'happyforms_get_version' ) ):
28
 
5
  * Plugin URI: https://happyforms.io
6
  * Description: Form builder to get in touch with visitors, grow your email list and collect payments.
7
  * Author: Happyforms
8
+ * Version: 1.21.0
9
  * Author URI: https://happyforms.io
10
  * Upgrade URI: https://happyforms.io/upgrade
11
  */
22
  /**
23
  * The current version of the plugin.
24
  */
25
+ define( 'HAPPYFORMS_VERSION', '1.21.0' );
26
 
27
  if ( ! function_exists( 'happyforms_get_version' ) ):
28
 
inc/assets/css/frontend/color.css CHANGED
@@ -32,6 +32,7 @@
32
  --happyforms-color-dropdown-item-text: #000;
33
  --happyforms-color-dropdown-item-bg-hover: #f4f4f5;
34
  --happyforms-color-dropdown-item-text-hover: #000;
 
35
  /* font */
36
  --happyforms-form-title-font-size: 32px;
37
  --happyforms-form-font-weight: normal;
@@ -1086,4 +1087,34 @@
1086
  text-decoration: underline;
1087
  display: inline-block;
1088
  cursor: pointer;
1089
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  --happyforms-color-dropdown-item-text: #000;
33
  --happyforms-color-dropdown-item-bg-hover: #f4f4f5;
34
  --happyforms-color-dropdown-item-text-hover: #000;
35
+ --happyforms-color-divider-hr: #ccc;
36
  /* font */
37
  --happyforms-form-title-font-size: 32px;
38
  --happyforms-form-font-weight: normal;
1087
  text-decoration: underline;
1088
  display: inline-block;
1089
  cursor: pointer;
1090
+ }
1091
+
1092
+ .happyforms-styles .happyforms-part--placeholder p {
1093
+ font-size: 16px;
1094
+ font-size: var(--happyforms-part-value-font-size);
1095
+ color: #000;
1096
+ overflow-wrap: anywhere;
1097
+ }
1098
+
1099
+ .happyforms-styles .happyforms-part--divider hr {
1100
+ border-style: solid;
1101
+ border-width: 1px 0 0 0;
1102
+ border-color: #ccc;
1103
+ border-color: var(--happyforms-color-divider-hr);
1104
+ }
1105
+
1106
+ .happyforms-part--divider hr {
1107
+ margin: 0;
1108
+ }
1109
+
1110
+ .happyforms-styles .happyforms-layout-title {
1111
+ font-weight: normal;
1112
+ color: #000;
1113
+ color: var(--happyforms-color-primary);
1114
+ }
1115
+
1116
+ .happyforms-styles .happyforms-part--media img {
1117
+ margin: 0;
1118
+ padding: 0;
1119
+ border: 0;
1120
+ }
inc/assets/css/frontend/layout.css CHANGED
@@ -1579,3 +1579,42 @@ div.mce-inline-toolbar-grp.happyforms-editor-toolbar-link .mce-btn:active {
1579
  overflow-y: scroll;
1580
  color: transparent;
1581
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1579
  overflow-y: scroll;
1580
  color: transparent;
1581
  }
1582
+
1583
+ .happyforms-styles .happyforms-layout-title {
1584
+ overflow-wrap: break-word;
1585
+ }
1586
+
1587
+ /* parts - placeholder */
1588
+ .happyforms-part--placeholder .happyforms-optional,
1589
+ .happyforms-part--media .happyforms-optional {
1590
+ display: none !important;
1591
+ }
1592
+
1593
+ .happyforms-form--part-value-text-align-center .happyforms-part--placeholder p {
1594
+ text-align: center;
1595
+ }
1596
+
1597
+ .happyforms-form--part-value-text-align-right .happyforms-part--placeholder p {
1598
+ text-align: right;
1599
+ }
1600
+
1601
+ .happyforms-part--placeholder p:first-child {
1602
+ margin-top: 0;
1603
+ }
1604
+
1605
+ .happyforms-part--placeholder p:last-of-type,
1606
+ .happyforms-part--toggletip .happyforms-toggletip-text p:last-of-type {
1607
+ margin-bottom: 0;
1608
+ padding-bottom: 0;
1609
+ }
1610
+
1611
+ /* parts - divider */
1612
+ .happyforms-part--divider hr {
1613
+ margin: 0;
1614
+ }
1615
+
1616
+ /* parts - media */
1617
+ .happyforms-part--media img {
1618
+ margin: 0;
1619
+ max-width: 100%;
1620
+ }
inc/assets/js/customize.js CHANGED
@@ -502,16 +502,14 @@
502
 
503
  onCloseClick: function( e ) {
504
  if ( this.isDirty() ) {
505
- var message = $( e.currentTarget ).data( 'message' );
506
-
507
- if ( ! confirm( message ) ) {
508
  e.preventDefault();
509
  e.stopPropagation();
510
 
511
  return false;
512
- } else {
513
- $( window ).unbind( 'beforeunload' );
514
  }
 
 
515
  }
516
  },
517
 
@@ -860,6 +858,8 @@
860
  this.model.get( 'parts' ).reset( _.map( ids, function( id ) {
861
  return this.model.get( 'parts' ).get( id );
862
  }, this ) );
 
 
863
  },
864
 
865
  onPartViewsSorted: function( partViews ) {
@@ -963,7 +963,11 @@
963
 
964
  var $li = $( e.currentTarget );
965
 
966
- if ( $li.hasClass( 'happyforms-parts-list-item--dummy' ) || $li.hasClass( 'happyforms-parts-list-item--group' ) ) {
 
 
 
 
967
  this.openUpgradeModal( e );
968
  return;
969
  }
@@ -997,7 +1001,7 @@
997
  } );
998
 
999
  var has_design_parts = false;
1000
- var design_parts = [ 'layout_title_dummy', 'placeholder_dummy', 'media_dummy', 'divider_dummy', 'page_break_dummy' ];
1001
 
1002
  results.forEach( function( part ) {
1003
  var type = part.get( 'type' );
502
 
503
  onCloseClick: function( e ) {
504
  if ( this.isDirty() ) {
505
+ if ( ! confirm( settings.abandonAlertMessage ) ) {
 
 
506
  e.preventDefault();
507
  e.stopPropagation();
508
 
509
  return false;
 
 
510
  }
511
+
512
+ $( window ).unbind( 'beforeunload' );
513
  }
514
  },
515
 
858
  this.model.get( 'parts' ).reset( _.map( ids, function( id ) {
859
  return this.model.get( 'parts' ).get( id );
860
  }, this ) );
861
+
862
+ ui.item.trigger( 'sort-stop' );
863
  },
864
 
865
  onPartViewsSorted: function( partViews ) {
963
 
964
  var $li = $( e.currentTarget );
965
 
966
+ if ( $li.hasClass( 'happyforms-parts-list-item--group' ) ) {
967
+ return;
968
+ }
969
+
970
+ if ( $li.hasClass( 'happyforms-parts-list-item--dummy' ) ) {
971
  this.openUpgradeModal( e );
972
  return;
973
  }
1001
  } );
1002
 
1003
  var has_design_parts = false;
1004
+ var design_parts = [ 'page_break_dummy' ];
1005
 
1006
  results.forEach( function( part ) {
1007
  var type = part.get( 'type' );
inc/classes/class-happyforms.php CHANGED
@@ -38,55 +38,40 @@ class HappyForms extends HappyForms_Core {
38
  $part_library = happyforms_get_part_library();
39
 
40
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-website-url-dummy.php' );
41
- $part_library->register_part( 'HappyForms_Part_WebsiteUrl_Dummy', 3 );
42
 
43
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-attachment-dummy.php' );
44
- $part_library->register_part( 'HappyForms_Part_Attachment_Dummy', 6 );
45
 
46
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-phone-dummy.php' );
47
- $part_library->register_part( 'HappyForms_Part_Phone_Dummy', 11 );
48
 
49
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-date-dummy.php' );
50
- $part_library->register_part( 'HappyForms_Part_Date_Dummy', 12 );
51
 
52
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-scale-dummy.php' );
53
- $part_library->register_part( 'HappyForms_Part_Scale_Dummy', 14 );
54
 
55
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-signature-dummy.php' );
56
- $part_library->register_part( 'HappyForms_Part_Signature_Dummy', 19 );
57
 
58
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-rating-dummy.php' );
59
- $part_library->register_part( 'HappyForms_Part_Rating_Dummy', 20 );
60
 
61
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-optin-dummy.php' );
62
- $part_library->register_part( 'HappyForms_Part_OptIn_Dummy', 22 );
63
 
64
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-scrollable-terms-dummy.php' );
65
- $part_library->register_part( 'HappyForms_Part_ScrollableTerms_Dummy', 23 );
66
 
67
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-payments-dummy.php' );
68
- $part_library->register_part( 'HappyForms_Part_Payments_Dummy', 24 );
69
-
70
- require_once( happyforms_get_include_folder() . '/classes/parts/class-part-layout-drawer-group.php' );
71
- $part_library->register_part( 'HappyForms_Part_LayoutDrawerGroup', 25 );
72
-
73
- require_once( happyforms_get_include_folder() . '/classes/parts/class-part-layout-title-dummy.php' );
74
- $part_library->register_part( 'HappyForms_Part_LayoutTitle_Dummy', 26 );
75
-
76
- require_once( happyforms_get_include_folder() . '/classes/parts/class-part-placeholder-dummy.php' );
77
- $part_library->register_part( 'HappyForms_Part_Placeholder_Dummy', 27 );
78
-
79
- require_once( happyforms_get_include_folder() . '/classes/parts/class-part-media-dummy.php' );
80
- $part_library->register_part( 'HappyForms_Part_Media_Dummy', 28 );
81
 
82
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-toggletip-dummy.php' );
83
- $part_library->register_part( 'HappyForms_Part_Toggletip_Dummy', 29 );
84
-
85
- require_once( happyforms_get_include_folder() . '/classes/parts/class-part-divider-dummy.php' );
86
- $part_library->register_part( 'HappyForms_Part_Divider_Dummy', 30 );
87
 
88
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-page-break-dummy.php' );
89
- $part_library->register_part( 'HappyForms_Part_PageBreak_Dummy', 31 );
90
 
91
  require_once( happyforms_get_include_folder() . '/classes/class-answer-limiter-dummy.php' );
92
  }
@@ -189,12 +174,6 @@ class HappyForms extends HappyForms_Core {
189
  'label' => __( 'Rating', 'happyforms' ),
190
  ),
191
 
192
- 5793 => array(
193
- 'type' => 'panel_dummy',
194
- 'dummy_id' => 'separators',
195
- 'label' => __( 'Separators', 'happyforms' ),
196
- ),
197
-
198
  8560 => array(
199
  'type' => 'panel_dummy',
200
  'dummy_id' => 'multistep',
38
  $part_library = happyforms_get_part_library();
39
 
40
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-website-url-dummy.php' );
41
+ $part_library->register_part( 'HappyForms_Part_WebsiteUrl_Dummy', 4 );
42
 
43
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-attachment-dummy.php' );
44
+ $part_library->register_part( 'HappyForms_Part_Attachment_Dummy', 7 );
45
 
46
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-phone-dummy.php' );
47
+ $part_library->register_part( 'HappyForms_Part_Phone_Dummy', 10 );
48
 
49
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-date-dummy.php' );
50
+ $part_library->register_part( 'HappyForms_Part_Date_Dummy', 11 );
51
 
52
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-scale-dummy.php' );
53
+ $part_library->register_part( 'HappyForms_Part_Scale_Dummy', 12 );
54
 
55
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-signature-dummy.php' );
56
+ $part_library->register_part( 'HappyForms_Part_Signature_Dummy', 13 );
57
 
58
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-rating-dummy.php' );
59
+ $part_library->register_part( 'HappyForms_Part_Rating_Dummy', 14 );
60
 
61
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-optin-dummy.php' );
62
+ $part_library->register_part( 'HappyForms_Part_OptIn_Dummy', 15 );
63
 
64
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-scrollable-terms-dummy.php' );
65
+ $part_library->register_part( 'HappyForms_Part_ScrollableTerms_Dummy', 16 );
66
 
67
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-payments-dummy.php' );
68
+ $part_library->register_part( 'HappyForms_Part_Payments_Dummy', 17 );
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-toggletip-dummy.php' );
71
+ $part_library->register_part( 'HappyForms_Part_Toggletip_Dummy', 104 );
 
 
 
72
 
73
  require_once( happyforms_get_include_folder() . '/classes/parts/class-part-page-break-dummy.php' );
74
+ $part_library->register_part( 'HappyForms_Part_PageBreak_Dummy', 106 );
75
 
76
  require_once( happyforms_get_include_folder() . '/classes/class-answer-limiter-dummy.php' );
77
  }
174
  'label' => __( 'Rating', 'happyforms' ),
175
  ),
176
 
 
 
 
 
 
 
177
  8560 => array(
178
  'type' => 'panel_dummy',
179
  'dummy_id' => 'multistep',
inc/classes/class-importer-xml.php ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class HappyForms_Importer_XML {
4
+
5
+ private $entity_id = false;
6
+ private $form_id = false;
7
+ private $process_tags = false;
8
+ private $meta_key = false;
9
+ private $cdata = '';
10
+ private $error = false;
11
+ private $counters = array();
12
+ private $excluded_meta = [
13
+ '_happyforms_count_submissions_unread',
14
+ '_happyforms_count_submissions_read',
15
+ '_happyforms_count_submissions_spam',
16
+ '_happyforms_count_submissions_trash',
17
+ '_happyforms_count_submissions_total',
18
+ ];
19
+
20
+ public function import( $path ) {
21
+ if ( ! is_file( $path ) ) {
22
+ return new WP_Error( 'Invalid file.' );
23
+ }
24
+
25
+ $stream = fopen( $path, 'r' );
26
+ $parser = xml_parser_create( 'UTF-8' );
27
+
28
+ xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );
29
+ xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 );
30
+ xml_set_object( $parser, $this );
31
+ xml_set_character_data_handler( $parser, 'cdata' );
32
+ xml_set_element_handler( $parser, 'tag_open', 'tag_close' );
33
+
34
+ while( ( $data = fread( $stream, 16384 ) ) ) {
35
+ if ( ! xml_parse( $parser, $data ) ) {
36
+ $this->error_parse( $parser );
37
+ }
38
+
39
+ if ( $this->error ) {
40
+ return $this->error;
41
+ }
42
+ }
43
+
44
+ xml_parse( $parser, '', true );
45
+ xml_parser_free( $parser );
46
+ fclose( $stream );
47
+
48
+ return true;
49
+ }
50
+
51
+ public function tag_open( $parse, $tag, $attr ) {
52
+ switch( $tag ) {
53
+ case 'hf:form':
54
+ $this->process_tags = true;
55
+
56
+ $this->create_post( 'happyform' );
57
+ $this->form_id = $this->entity_id;
58
+ break;
59
+
60
+ case 'hf:response':
61
+ case 'hf:poll':
62
+ $this->process_tags = false;
63
+ break;
64
+
65
+ case 'hf:meta':
66
+ $this->meta_key = (
67
+ isset( $attr['name'] ) ?
68
+ $attr['name'] : false
69
+ );
70
+ break;
71
+ default:
72
+ break;
73
+ }
74
+ }
75
+
76
+ function cdata( $parser, $cdata ) {
77
+ $this->cdata .= $cdata;
78
+ }
79
+
80
+ public function tag_close( $parse, $tag ) {
81
+ if ( $this->process_tags ) {
82
+ switch( $tag ) {
83
+ case 'hf:post_title':
84
+ $this->update_post_title();
85
+ break;
86
+ case 'hf:post_name':
87
+ $this->update_post_name();
88
+ break;
89
+ case 'hf:post_status':
90
+ $this->update_post_status();
91
+ break;
92
+ case 'hf:meta':
93
+ $this->update_post_meta();
94
+ break;
95
+ }
96
+ }
97
+
98
+ $this->cdata = '';
99
+ }
100
+
101
+ public function create_post( $post_type ) {
102
+ $this->entity_id = wp_insert_post( array(
103
+ 'post_type' => $post_type,
104
+ 'post_status' => 'publish',
105
+ ) );
106
+
107
+ if ( ! $this->entity_id ) {
108
+ $this->error_insert( $post_type );
109
+ }
110
+
111
+ $this->increment_counter( $post_type );
112
+ }
113
+
114
+ public function update_post_title() {
115
+ $this->entity_id = wp_update_post( array(
116
+ 'ID' => $this->entity_id,
117
+ 'post_title' => $this->cdata,
118
+ ) );
119
+ }
120
+
121
+ public function update_post_name() {
122
+ $post_name = $this->cdata;
123
+ $post_name = explode( '-', $post_name );
124
+ $post_name[0] = $this->form_id;
125
+ $post_name = implode( '-', $post_name );
126
+
127
+ $this->entity_id = wp_update_post( array(
128
+ 'ID' => $this->entity_id,
129
+ 'post_name' => $post_name,
130
+ ) );
131
+ }
132
+
133
+ public function update_post_status() {
134
+ $this->entity_id = wp_update_post( array(
135
+ 'ID' => $this->entity_id,
136
+ 'post_status' => $this->cdata,
137
+ ) );
138
+ }
139
+
140
+ public function update_post_meta() {
141
+ if ( in_array( $this->meta_key, $this->excluded_meta ) ) {
142
+ return;
143
+ }
144
+
145
+ $meta_value = maybe_unserialize( $this->cdata );
146
+
147
+ if ( '_happyforms_form_id' === $this->meta_key ) {
148
+ $meta_value = $this->form_id;
149
+ }
150
+
151
+ update_post_meta( $this->entity_id, $this->meta_key, $meta_value );
152
+ }
153
+
154
+ public function get_entity_label( $post_type, $count ) {
155
+ $label = '';
156
+
157
+ switch ( $post_type ) {
158
+ case 'happyform':
159
+ $label = __( 'form', 'happyforms' );
160
+
161
+ if ( $count > 1 ) {
162
+ $label = __( 'forms', 'happyforms' );
163
+ }
164
+
165
+ break;
166
+
167
+ case 'happyforms-message':
168
+ $label = __( 'submission', 'happyforms' );
169
+
170
+ if ( $count > 1 ) {
171
+ $label = __( 'submissions', 'happyforms' );
172
+ }
173
+
174
+ break;
175
+
176
+ case 'happyforms-poll':
177
+ $label = __( 'poll', 'happyforms' );
178
+
179
+ if ( $count > 1 ) {
180
+ $label = __( 'polls', 'happyforms' );
181
+ }
182
+
183
+ break;
184
+ }
185
+
186
+ return $label;
187
+ }
188
+
189
+ public function increment_counter( $post_type ) {
190
+ $this->counters[$post_type] = (
191
+ isset( $this->counters[$post_type] ) ?
192
+ $this->counters[$post_type] + 1 : 1
193
+ );
194
+ }
195
+
196
+ public function get_success_messages() {
197
+ $messages = array();
198
+
199
+ foreach( $this->counters as $post_type => $count ) {
200
+ $label = $this->get_entity_label( $post_type, $count );
201
+ $message = sprintf(
202
+ __( '%s %s imported successfully.', 'happyforms' ),
203
+ $count, $label
204
+ );
205
+ $messages[] = $message;
206
+ }
207
+
208
+ $messages[] = __( 'All done!', 'happyforms' );
209
+
210
+ return $messages;
211
+ }
212
+
213
+ public function error_parse( $parser ) {
214
+ $current_line = xml_get_current_line_number( $parser );
215
+ $current_column = xml_get_current_column_number( $parser );
216
+ $error_code = xml_get_error_code( $parser );
217
+ $error_string = xml_error_string( $error_code );
218
+ $code = 'import-parse';
219
+ $message = __( 'An error occured while parsing import file.', 'happyforms' );
220
+
221
+ $this->add_error( $code, $message );
222
+ }
223
+
224
+ public function error_insert( $post_type ) {
225
+ $code = 'import-insert';
226
+ $label = $this->get_entity_label( $post_type );
227
+ $message = sprintf(
228
+ __( 'An error occured while importing %s.', 'happyforms' ),
229
+ $label
230
+ );
231
+
232
+ $this->add_error( $code, $message );
233
+ }
234
+
235
+ private function add_error( $code, $message, $data = array() ) {
236
+ if ( ! is_wp_error( $this->error ) ) {
237
+ $this->error = new WP_Error();
238
+ }
239
+
240
+ $this->error->add( $code, $message, $data );
241
+ }
242
+
243
+ }
inc/classes/parts/class-part-divider-dummy.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- class HappyForms_Part_Divider_Dummy extends HappyForms_Form_Part {
4
-
5
- public $type = 'divider_dummy';
6
-
7
- public function __construct() {
8
- $this->label = __( 'Separator', 'happyforms' );
9
- $this->description = __( 'For adding a horizontal rule to visually separate fields.', 'happyforms' );
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
inc/classes/parts/class-part-layout-title-dummy.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- class HappyForms_Part_LayoutTitle_Dummy extends HappyForms_Form_Part {
4
-
5
- public $type = 'layout_title_dummy';
6
-
7
- public function __construct() {
8
- $this->label = __( 'Heading', 'happyforms' );
9
- $this->description = __( 'For adding titles to visually separate fields.', 'happyforms' );
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
inc/classes/parts/class-part-media-dummy.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- class HappyForms_Part_Media_Dummy extends HappyForms_Form_Part {
4
-
5
- public $type = 'media_dummy';
6
-
7
- public function __construct() {
8
- $this->label = __( 'Media', 'happyforms' );
9
- $this->description = __( 'For adding a single image, video, animated gif or audio clip.', 'happyforms' );
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
inc/classes/parts/class-part-placeholder-dummy.php DELETED
@@ -1,12 +0,0 @@
1
- <?php
2
-
3
- class HappyForms_Part_Placeholder_Dummy extends HappyForms_Form_Part {
4
-
5
- public $type = 'placeholder_dummy';
6
-
7
- public function __construct() {
8
- $this->label = __( 'Paragraph', 'happyforms' );
9
- $this->description = __( 'For adding helper text, notes and formatted messages.', 'happyforms' );
10
- }
11
-
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
languages/happyforms.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Happyforms (free) plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Happyforms (free) 1.20.2\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/happyforms/\n"
7
  "Last-Translator: The Theme Foundry\n"
8
  "Language-Team: The Theme Foundry\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2022-11-08T10:01:51+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: happyforms\n"
@@ -33,9 +33,10 @@ msgstr ""
33
 
34
  #: core/classes/class-block.php:52
35
  #: core/classes/class-form-controller.php:73
36
- #: core/classes/class-happyforms-core.php:186
37
  #: core/classes/class-happyforms-core.php:187
 
38
  #: core/classes/class-happyforms-widget.php:13
 
39
  #: core/helpers/helper-misc.php:1068
40
  msgid "Forms"
41
  msgstr ""
@@ -83,6 +84,8 @@ msgstr ""
83
 
84
  #: core/classes/class-form-admin.php:454
85
  #: core/templates/customize-form-item.php:27
 
 
86
  #: inc/templates/customize-form-part-choice-footer.php:3
87
  #: inc/templates/customize-form-part-footer.php:4
88
  msgid "Duplicate"
@@ -106,8 +109,8 @@ msgid "Form"
106
  msgstr ""
107
 
108
  #: core/classes/class-form-controller.php:75
109
- #: core/classes/class-happyforms-core.php:202
110
  #: core/classes/class-happyforms-core.php:203
 
111
  msgid "Add New"
112
  msgstr ""
113
 
@@ -143,8 +146,8 @@ msgstr ""
143
 
144
  #: core/classes/class-form-controller.php:84
145
  #: core/classes/class-form-controller.php:85
146
- #: core/classes/class-happyforms-core.php:194
147
  #: core/classes/class-happyforms-core.php:195
 
148
  msgid "All Forms"
149
  msgstr ""
150
 
@@ -169,7 +172,7 @@ msgid "Email me a copy of each submission"
169
  msgstr ""
170
 
171
  #: core/classes/class-form-email.php:126
172
- #: inc/classes/class-happyforms.php:163
173
  msgid "To email address"
174
  msgstr ""
175
 
@@ -354,7 +357,7 @@ msgstr ""
354
  msgid "Remaining submissions"
355
  msgstr ""
356
 
357
- #: core/classes/class-form-part-library.php:233
358
  msgid "Missing validation callback for field %s"
359
  msgstr ""
360
 
@@ -437,8 +440,10 @@ msgstr ""
437
  #: core/classes/class-form-styles.php:253
438
  #: core/templates/parts/customize-checkbox.php:10
439
  #: core/templates/parts/customize-email.php:10
 
440
  #: core/templates/parts/customize-multi-line-text.php:10
441
  #: core/templates/parts/customize-number.php:10
 
442
  #: core/templates/parts/customize-radio.php:10
443
  #: core/templates/parts/customize-select.php:10
444
  #: core/templates/parts/customize-single-line-text.php:10
@@ -450,8 +455,10 @@ msgstr ""
450
  #: core/classes/class-form-styles.php:254
451
  #: core/templates/parts/customize-checkbox.php:14
452
  #: core/templates/parts/customize-email.php:14
 
453
  #: core/templates/parts/customize-multi-line-text.php:14
454
  #: core/templates/parts/customize-number.php:14
 
455
  #: core/templates/parts/customize-radio.php:14
456
  #: core/templates/parts/customize-select.php:14
457
  #: core/templates/parts/customize-single-line-text.php:14
@@ -532,162 +539,164 @@ msgstr ""
532
  msgid "Full width"
533
  msgstr ""
534
 
535
- #: core/classes/class-form-styles.php:502
536
  msgid "General"
537
  msgstr ""
538
 
539
- #: core/classes/class-form-styles.php:507
540
- #: core/classes/class-form-styles.php:772
541
  #: core/templates/partials/customize-field-width.php:2
542
  msgid "Width"
543
  msgstr ""
544
 
545
- #: core/classes/class-form-styles.php:512
546
- #: core/classes/class-form-styles.php:777
547
  msgid "Padding"
548
  msgstr ""
549
 
550
- #: core/classes/class-form-styles.php:517
551
  msgid "Direction"
552
  msgstr ""
553
 
554
- #: core/classes/class-form-styles.php:523
555
- #: core/classes/class-form-styles.php:608
556
- #: core/classes/class-form-styles.php:678
557
- #: core/classes/class-form-styles.php:803
558
  msgid "Colors"
559
  msgstr ""
560
 
561
- #: core/classes/class-form-styles.php:527
562
  msgid "Primary"
563
  msgstr ""
564
 
565
- #: core/classes/class-form-styles.php:532
566
  msgid "Success message background"
567
  msgstr ""
568
 
569
- #: core/classes/class-form-styles.php:537
570
  msgid "Success message text"
571
  msgstr ""
572
 
573
- #: core/classes/class-form-styles.php:542
574
  msgid "Validation message text"
575
  msgstr ""
576
 
577
- #: core/classes/class-form-styles.php:547
578
  msgid "Error message background"
579
  msgstr ""
580
 
581
- #: core/classes/class-form-styles.php:552
582
  msgid "Error message text"
583
  msgstr ""
584
 
585
- #: core/classes/class-form-styles.php:557
586
  #: inc/classes/parts/class-part-title-dummy.php:8
587
  msgid "Title"
588
  msgstr ""
589
 
590
- #: core/classes/class-form-styles.php:562
591
  msgid "Display"
592
  msgstr ""
593
 
594
- #: core/classes/class-form-styles.php:567
595
- #: core/classes/class-form-styles.php:792
596
  msgid "Alignment"
597
  msgstr ""
598
 
599
- #: core/classes/class-form-styles.php:572
600
- #: core/classes/class-form-styles.php:782
601
  msgid "Font size"
602
  msgstr ""
603
 
604
- #: core/classes/class-form-styles.php:577
605
  msgid "Field borders & spacing"
606
  msgstr ""
607
 
608
- #: core/classes/class-form-styles.php:582
609
- #: core/classes/class-form-styles.php:612
610
- #: core/classes/class-form-styles.php:762
611
- #: core/classes/class-form-styles.php:817
612
  msgid "Border"
613
  msgstr ""
614
 
615
- #: core/classes/class-form-styles.php:587
616
  msgid "Border location"
617
  msgstr ""
618
 
619
- #: core/classes/class-form-styles.php:592
620
- #: core/classes/class-form-styles.php:767
621
  msgid "Border radius"
622
  msgstr ""
623
 
624
- #: core/classes/class-form-styles.php:597
625
  msgid "Outer spacing"
626
  msgstr ""
627
 
628
- #: core/classes/class-form-styles.php:602
629
  msgid "Inner spacing"
630
  msgstr ""
631
 
632
- #: core/classes/class-form-styles.php:617
633
  msgid "Border on focus"
634
  msgstr ""
635
 
636
- #: core/classes/class-form-styles.php:622
637
- #: core/classes/class-form-styles.php:712
638
- #: core/classes/class-form-styles.php:807
639
  msgid "Background"
640
  msgstr ""
641
 
642
- #: core/classes/class-form-styles.php:627
643
- #: core/classes/class-form-styles.php:722
644
- #: core/classes/class-form-styles.php:812
645
  msgid "Background on focus"
646
  msgstr ""
647
 
648
- #: core/classes/class-form-styles.php:632
649
  msgid "Field labels & text"
650
  msgstr ""
651
 
652
- #: core/classes/class-form-styles.php:637
653
  msgid "Toggle placeholder on field focus"
654
  msgstr ""
655
 
656
- #: core/classes/class-form-styles.php:642
657
  msgid "Label alignment"
658
  msgstr ""
659
 
660
- #: core/classes/class-form-styles.php:647
661
  msgid "Label font size"
662
  msgstr ""
663
 
664
- #: core/classes/class-form-styles.php:652
665
  msgid "Label font weight"
666
  msgstr ""
667
 
668
- #: core/classes/class-form-styles.php:657
669
  msgid "Hint alignment"
670
  msgstr ""
671
 
672
- #: core/classes/class-form-styles.php:662
673
  msgid "Hint font size"
674
  msgstr ""
675
 
676
- #: core/classes/class-form-styles.php:667
677
  msgid "Placeholder &amp; value alignment"
678
  msgstr ""
679
 
680
- #: core/classes/class-form-styles.php:672
681
  msgid "Value font size"
682
  msgstr ""
683
 
684
- #: core/classes/class-form-styles.php:682
685
  #: core/templates/parts/customize-checkbox.php:4
686
  #: core/templates/parts/customize-checkbox.php:139
687
  #: core/templates/parts/customize-checkbox.php:187
688
  #: core/templates/parts/customize-email.php:4
 
689
  #: core/templates/parts/customize-multi-line-text.php:4
690
  #: core/templates/parts/customize-number.php:4
 
691
  #: core/templates/parts/customize-radio.php:4
692
  #: core/templates/parts/customize-radio.php:125
693
  #: core/templates/parts/customize-radio.php:174
@@ -698,11 +707,11 @@ msgstr ""
698
  msgid "Label"
699
  msgstr ""
700
 
701
- #: core/classes/class-form-styles.php:687
702
  msgid "Value"
703
  msgstr ""
704
 
705
- #: core/classes/class-form-styles.php:692
706
  #: core/templates/parts/customize-email.php:20
707
  #: core/templates/parts/customize-multi-line-text.php:20
708
  #: core/templates/parts/customize-number.php:20
@@ -711,12 +720,13 @@ msgstr ""
711
  msgid "Placeholder"
712
  msgstr ""
713
 
714
- #: core/classes/class-form-styles.php:697
715
  #: core/templates/parts/customize-checkbox.php:20
716
  #: core/templates/parts/customize-checkbox.php:145
717
  #: core/templates/parts/customize-email.php:28
718
  #: core/templates/parts/customize-multi-line-text.php:28
719
  #: core/templates/parts/customize-number.php:28
 
720
  #: core/templates/parts/customize-radio.php:20
721
  #: core/templates/parts/customize-radio.php:131
722
  #: core/templates/parts/customize-select.php:24
@@ -724,102 +734,111 @@ msgstr ""
724
  msgid "Hint"
725
  msgstr ""
726
 
727
- #: core/classes/class-form-styles.php:702
728
  msgid "Address dropdowns"
729
  msgstr ""
730
 
731
- #: core/classes/class-form-styles.php:708
732
  msgid "Items"
733
  msgstr ""
734
 
735
- #: core/classes/class-form-styles.php:717
736
- #: core/classes/class-form-styles.php:822
737
  #: core/classes/parts/class-part-single-line-text.php:8
 
738
  msgid "Text"
739
  msgstr ""
740
 
741
- #: core/classes/class-form-styles.php:727
742
  msgid "Text focused"
743
  msgstr ""
744
 
745
- #: core/classes/class-form-styles.php:732
746
  msgid "Tables"
747
  msgstr ""
748
 
749
- #: core/classes/class-form-styles.php:737
750
  msgid "Odd row primary"
751
  msgstr ""
752
 
753
- #: core/classes/class-form-styles.php:742
754
  msgid "Odd row secondary"
755
  msgstr ""
756
 
757
- #: core/classes/class-form-styles.php:747
758
  msgid "Even row primary"
759
  msgstr ""
760
 
761
- #: core/classes/class-form-styles.php:752
762
  msgid "Even row secondary"
763
  msgstr ""
764
 
765
- #: core/classes/class-form-styles.php:757
 
 
 
 
 
 
 
 
766
  msgid "Submit button"
767
  msgstr ""
768
 
769
- #: core/classes/class-form-styles.php:787
770
  msgid "Font weight"
771
  msgstr ""
772
 
773
- #: core/classes/class-form-styles.php:797
774
  msgid "Make button a field of last input"
775
  msgstr ""
776
 
777
- #: core/classes/class-form-styles.php:827
778
  msgid "Text on focus"
779
  msgstr ""
780
 
781
- #: core/classes/class-form-styles.php:839
782
  msgid "Add your own CSS code here to customize the appearance of your form."
783
  msgstr ""
784
 
785
- #: core/classes/class-form-styles.php:841
786
  msgid "For each rule you add, we'll prepend your form's HTML ID. This makes sure all styles added will only apply to this form. For example %s becomes %s."
787
  msgstr ""
788
 
789
- #: core/classes/class-form-styles.php:849
790
  msgid "The edit field automatically highlights code syntax. You can disable this in your <a href=\"%s\" class=\"%s\" target=\"_blank\">user profile</a> to work in plain text mode."
791
  msgstr ""
792
 
793
- #: core/classes/class-form-styles.php:857
794
- #: core/classes/class-form-styles.php:867
795
  msgid "Additional CSS"
796
  msgstr ""
797
 
798
- #: core/classes/class-happyforms-core.php:210
799
  #: core/classes/class-happyforms-core.php:211
 
800
  #: inc/classes/class-message-controller.php:572
801
  msgid "Submissions"
802
  msgstr ""
803
 
804
- #: core/classes/class-happyforms-core.php:219
805
  #: core/classes/class-happyforms-core.php:220
 
806
  #: integrations/templates/admin-coupons.php:2
807
  msgid "Coupons"
808
  msgstr ""
809
 
810
- #: core/classes/class-happyforms-core.php:228
811
  #: core/classes/class-happyforms-core.php:229
 
812
  #: integrations/templates/admin-integrations.php:3
813
  msgid "Integrations"
814
  msgstr ""
815
 
816
- #: core/classes/class-happyforms-core.php:237
817
  #: core/classes/class-happyforms-core.php:238
 
818
  #: core/assets/jsx/build/admin/block.js:173
819
  msgid "Settings"
820
  msgstr ""
821
 
822
- #: core/classes/class-happyforms-core.php:479
823
  msgid "Add Form"
824
  msgstr ""
825
 
@@ -831,6 +850,26 @@ msgstr ""
831
  msgid "Form:"
832
  msgstr ""
833
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
834
  #: core/classes/class-validation-messages.php:72
835
  msgid "Field is answered incorrectly"
836
  msgstr ""
@@ -879,6 +918,10 @@ msgstr ""
879
  msgid "Form updated."
880
  msgstr ""
881
 
 
 
 
 
882
  #: core/classes/parts/class-part-checkbox.php:10
883
  msgid "Checkbox"
884
  msgstr ""
@@ -893,6 +936,14 @@ msgstr ""
893
  msgid "Other"
894
  msgstr ""
895
 
 
 
 
 
 
 
 
 
896
  #: core/classes/parts/class-part-email.php:8
897
  msgid "Email"
898
  msgstr ""
@@ -901,6 +952,32 @@ msgstr ""
901
  msgid "For formatted email addresses. The '@' symbol is required."
902
  msgstr ""
903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
904
  #: core/classes/parts/class-part-multi-line-text.php:8
905
  msgid "Long Text"
906
  msgstr ""
@@ -917,6 +994,14 @@ msgstr ""
917
  msgid "For numeric fields."
918
  msgstr ""
919
 
 
 
 
 
 
 
 
 
920
  #: core/classes/parts/class-part-radio.php:12
921
  msgid "Radio"
922
  msgstr ""
@@ -971,60 +1056,60 @@ msgstr ""
971
  msgid "I agree to allow this site to store and process the personal information submitted."
972
  msgstr ""
973
 
974
- #: core/helpers/helper-form-templates.php:62
975
  msgid "Leave this field blank"
976
  msgstr ""
977
 
978
- #: core/helpers/helper-form-templates.php:471
979
  #: core/helpers/helper-misc.php:18
980
  msgid "(no title)"
981
  msgstr ""
982
 
983
- #: core/helpers/helper-form-templates.php:998
984
  msgid "January"
985
  msgstr ""
986
 
987
- #: core/helpers/helper-form-templates.php:999
988
  msgid "February"
989
  msgstr ""
990
 
991
- #: core/helpers/helper-form-templates.php:1000
992
  msgid "March"
993
  msgstr ""
994
 
995
- #: core/helpers/helper-form-templates.php:1001
996
  msgid "April"
997
  msgstr ""
998
 
999
- #: core/helpers/helper-form-templates.php:1002
1000
  msgid "May"
1001
  msgstr ""
1002
 
1003
- #: core/helpers/helper-form-templates.php:1003
1004
  msgid "June"
1005
  msgstr ""
1006
 
1007
- #: core/helpers/helper-form-templates.php:1004
1008
  msgid "July"
1009
  msgstr ""
1010
 
1011
- #: core/helpers/helper-form-templates.php:1005
1012
  msgid "August"
1013
  msgstr ""
1014
 
1015
- #: core/helpers/helper-form-templates.php:1006
1016
  msgid "September"
1017
  msgstr ""
1018
 
1019
- #: core/helpers/helper-form-templates.php:1007
1020
  msgid "October"
1021
  msgstr ""
1022
 
1023
- #: core/helpers/helper-form-templates.php:1008
1024
  msgid "November"
1025
  msgstr ""
1026
 
1027
- #: core/helpers/helper-form-templates.php:1009
1028
  msgid "December"
1029
  msgstr ""
1030
 
@@ -2613,6 +2698,8 @@ msgid "Style"
2613
  msgstr ""
2614
 
2615
  #: core/templates/customize-form-item.php:33
 
 
2616
  #: inc/templates/customize-form-part-choice-footer.php:2
2617
  #: inc/templates/customize-form-part-footer.php:3
2618
  msgid "Delete"
@@ -2676,10 +2763,6 @@ msgstr ""
2676
  msgid "Updated"
2677
  msgstr ""
2678
 
2679
- #: core/templates/customize-header-actions.php:21
2680
- msgid "The changes you made will be lost if you navigate away from this page."
2681
- msgstr ""
2682
-
2683
  #: core/templates/customize-header-actions.php:22
2684
  msgid "Close"
2685
  msgstr ""
@@ -2817,9 +2900,13 @@ msgid "Require an answer"
2817
  msgstr ""
2818
 
2819
  #: core/templates/parts/customize-checkbox.php:111
 
2820
  #: core/templates/parts/customize-email.php:57
 
 
2821
  #: core/templates/parts/customize-multi-line-text.php:70
2822
  #: core/templates/parts/customize-number.php:83
 
2823
  #: core/templates/parts/customize-radio.php:95
2824
  #: core/templates/parts/customize-select.php:86
2825
  #: core/templates/parts/customize-single-line-text.php:56
@@ -2844,13 +2931,6 @@ msgstr ""
2844
  msgid "Make this choice default"
2845
  msgstr ""
2846
 
2847
- #: core/templates/parts/customize-checkbox.php:180
2848
- #: core/templates/parts/customize-radio.php:167
2849
- #: core/templates/parts/customize-select.php:151
2850
- #: inc/classes/parts/class-part-layout-title-dummy.php:8
2851
- msgid "Heading"
2852
- msgstr ""
2853
-
2854
  #: core/templates/parts/customize-email.php:24
2855
  #: core/templates/parts/customize-multi-line-text.php:24
2856
  #: core/templates/parts/customize-number.php:24
@@ -2870,6 +2950,27 @@ msgstr ""
2870
  msgid "Suffix"
2871
  msgstr ""
2872
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2873
  #: core/templates/parts/customize-multi-line-text.php:40
2874
  msgid "Limit words/characters"
2875
  msgstr ""
@@ -2920,254 +3021,290 @@ msgstr ""
2920
  msgid "Max times the same answer can be submitted"
2921
  msgstr ""
2922
 
2923
- #: inc/classes/class-happyforms.php:98
2924
  msgid "Upgrade"
2925
  msgstr ""
2926
 
2927
- #: inc/classes/class-happyforms.php:106
2928
  msgid "Redirect to this page address (URL) after submission"
2929
  msgstr ""
2930
 
2931
- #: inc/classes/class-happyforms.php:107
2932
  msgid "Search or type URL"
2933
  msgstr ""
2934
 
2935
- #: inc/classes/class-happyforms.php:113
2936
  msgid "Shuffle order of fields"
2937
  msgstr ""
2938
 
2939
- #: inc/classes/class-happyforms.php:119
2940
  msgid "Use reCAPTCHA"
2941
  msgstr ""
2942
 
2943
- #: inc/classes/class-happyforms.php:125
2944
  msgid "Let submitters save a draft for set number of days"
2945
  msgstr ""
2946
 
2947
- #: inc/classes/class-happyforms.php:131
2948
  msgid "Require submitters to review a submission"
2949
  msgstr ""
2950
 
2951
- #: inc/classes/class-happyforms.php:137
2952
  msgid "Max number of submissions"
2953
  msgstr ""
2954
 
2955
- #: inc/classes/class-happyforms.php:143
2956
  msgid "Erase submitter's personal data after set number of days"
2957
  msgstr ""
2958
 
2959
- #: inc/classes/class-happyforms.php:149
2960
  msgid "Show an error message if field contains words in Disallowed Comment Keys"
2961
  msgstr ""
2962
 
2963
- #: inc/classes/class-happyforms.php:169
2964
  msgid "Send abandonment email"
2965
  msgstr ""
2966
 
2967
- #: inc/classes/class-happyforms.php:183
2968
  msgid "Checkboxes & Radios"
2969
  msgstr ""
2970
 
2971
- #: inc/classes/class-happyforms.php:189
2972
  msgid "Rating"
2973
  msgstr ""
2974
 
2975
- #: inc/classes/class-happyforms.php:195
2976
- msgid "Separators"
2977
- msgstr ""
2978
-
2979
- #: inc/classes/class-happyforms.php:201
2980
  msgid "Multi Step"
2981
  msgstr ""
2982
 
2983
- #: inc/classes/class-happyforms.php:215
2984
  msgid "Form redirected after submission"
2985
  msgstr ""
2986
 
2987
- #: inc/classes/class-happyforms.php:220
2988
  msgid "Form has reached its reply limit"
2989
  msgstr ""
2990
 
2991
- #: inc/classes/class-happyforms.php:225
2992
  msgid "Submitter has returned to a draft"
2993
  msgstr ""
2994
 
2995
- #: inc/classes/class-happyforms.php:230
2996
  msgid "Submitter is viewing review page"
2997
  msgstr ""
2998
 
2999
- #: inc/classes/class-happyforms.php:235
3000
  msgid "Payment completed"
3001
  msgstr ""
3002
 
3003
- #: inc/classes/class-happyforms.php:240
3004
  msgid "Payment failed"
3005
  msgstr ""
3006
 
3007
- #: inc/classes/class-happyforms.php:245
3008
  msgid "Payment cancelled"
3009
  msgstr ""
3010
 
3011
- #: inc/classes/class-happyforms.php:250
3012
  msgid "Previous page"
3013
  msgstr ""
3014
 
3015
- #: inc/classes/class-happyforms.php:255
3016
  msgid "Redirect to page"
3017
  msgstr ""
3018
 
3019
- #: inc/classes/class-happyforms.php:260
3020
  msgid "Print user submission"
3021
  msgstr ""
3022
 
3023
- #: inc/classes/class-happyforms.php:265
3024
  msgid "Edit reply"
3025
  msgstr ""
3026
 
3027
- #: inc/classes/class-happyforms.php:270
3028
  msgid "Clear saved draft reply"
3029
  msgstr ""
3030
 
3031
- #: inc/classes/class-happyforms.php:275
3032
  msgid "Save draft reply"
3033
  msgstr ""
3034
 
3035
- #: inc/classes/class-happyforms.php:280
3036
  msgid "Upload files"
3037
  msgstr ""
3038
 
3039
- #: inc/classes/class-happyforms.php:285
3040
  msgid "Remove uploaded file"
3041
  msgstr ""
3042
 
3043
- #: inc/classes/class-happyforms.php:290
3044
  msgid "Review reply"
3045
  msgstr ""
3046
 
3047
- #: inc/classes/class-happyforms.php:295
3048
  msgid "Start drawing signature"
3049
  msgstr ""
3050
 
3051
- #: inc/classes/class-happyforms.php:300
3052
  msgid "Start over drawing signature"
3053
  msgstr ""
3054
 
3055
- #: inc/classes/class-happyforms.php:305
3056
  msgid "Clear drawn signature"
3057
  msgstr ""
3058
 
3059
- #: inc/classes/class-happyforms.php:310
3060
  msgid "Done drawing signature"
3061
  msgstr ""
3062
 
3063
- #: inc/classes/class-happyforms.php:315
3064
  msgid "Field answer reached its limit"
3065
  msgstr ""
3066
 
3067
- #: inc/classes/class-happyforms.php:320
3068
  msgid "Coupon code invalid"
3069
  msgstr ""
3070
 
3071
- #: inc/classes/class-happyforms.php:325
3072
  msgid "Required file isn't uploaded"
3073
  msgstr ""
3074
 
3075
- #: inc/classes/class-happyforms.php:330
3076
  msgid "Required terms haven't been scrolled"
3077
  msgstr ""
3078
 
3079
- #: inc/classes/class-happyforms.php:335
3080
  msgid "Field contains disallowed word"
3081
  msgstr ""
3082
 
3083
- #: inc/classes/class-happyforms.php:340
3084
  msgid "Disallowed IP address or browser"
3085
  msgstr ""
3086
 
3087
- #: inc/classes/class-happyforms.php:345
3088
  msgid "This file's size is too big"
3089
  msgstr ""
3090
 
3091
- #: inc/classes/class-happyforms.php:350
3092
  msgid "This file's type not allowed"
3093
  msgstr ""
3094
 
3095
- #: inc/classes/class-happyforms.php:355
3096
  msgid "A file with this name has already been uploaded"
3097
  msgstr ""
3098
 
3099
- #: inc/classes/class-happyforms.php:360
3100
  msgid "User uploaded too few files"
3101
  msgstr ""
3102
 
3103
- #: inc/classes/class-happyforms.php:365
3104
  msgid "Price is too low"
3105
  msgstr ""
3106
 
3107
- #: inc/classes/class-happyforms.php:370
3108
  msgid "Phone field country code label"
3109
  msgstr ""
3110
 
3111
- #: inc/classes/class-happyforms.php:375
3112
  msgid "Phone field number label"
3113
  msgstr ""
3114
 
3115
- #: inc/classes/class-happyforms.php:380
3116
  msgid "Total files uploaded"
3117
  msgstr ""
3118
 
3119
- #: inc/classes/class-happyforms.php:385
3120
  msgid "Payment method"
3121
  msgstr ""
3122
 
3123
- #: inc/classes/class-happyforms.php:390
3124
  msgid "Pay what you want"
3125
  msgstr ""
3126
 
3127
- #: inc/classes/class-happyforms.php:395
3128
  msgid "Submitter will be redirected to PayPal"
3129
  msgstr ""
3130
 
3131
- #: inc/classes/class-happyforms.php:400
3132
  msgid "PayPal payment"
3133
  msgstr ""
3134
 
3135
- #: inc/classes/class-happyforms.php:405
3136
  msgid "Stripe is processing payment"
3137
  msgstr ""
3138
 
3139
- #: inc/classes/class-happyforms.php:410
3140
  msgid "Stripe payment"
3141
  msgstr ""
3142
 
3143
- #: inc/classes/class-happyforms.php:415
3144
  msgid "Stripe card field"
3145
  msgstr ""
3146
 
3147
- #: inc/classes/class-happyforms.php:420
3148
  msgid "Card number"
3149
  msgstr ""
3150
 
3151
- #: inc/classes/class-happyforms.php:425
3152
  msgid "Card expiration"
3153
  msgstr ""
3154
 
3155
- #: inc/classes/class-happyforms.php:430
3156
  msgid "Card security code"
3157
  msgstr ""
3158
 
3159
- #: inc/classes/class-happyforms.php:435
3160
  msgid "Coupon field label"
3161
  msgstr ""
3162
 
3163
- #: inc/classes/class-happyforms.php:440
3164
  msgid "Apply coupon button label"
3165
  msgstr ""
3166
 
3167
- #: inc/classes/class-happyforms.php:445
3168
  msgid "Current page"
3169
  msgstr ""
3170
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3171
  #: inc/classes/class-message-admin.php:59
3172
  #: inc/classes/class-message-controller.php:573
3173
  msgid "Submission"
@@ -3222,30 +3359,6 @@ msgstr ""
3222
  msgid "For formatted day, month, year and or time fields."
3223
  msgstr ""
3224
 
3225
- #: inc/classes/parts/class-part-divider-dummy.php:8
3226
- msgid "Separator"
3227
- msgstr ""
3228
-
3229
- #: inc/classes/parts/class-part-divider-dummy.php:9
3230
- msgid "For adding a horizontal rule to visually separate fields."
3231
- msgstr ""
3232
-
3233
- #: inc/classes/parts/class-part-layout-drawer-group.php:9
3234
- msgid "Design"
3235
- msgstr ""
3236
-
3237
- #: inc/classes/parts/class-part-layout-title-dummy.php:9
3238
- msgid "For adding titles to visually separate fields."
3239
- msgstr ""
3240
-
3241
- #: inc/classes/parts/class-part-media-dummy.php:8
3242
- msgid "Media"
3243
- msgstr ""
3244
-
3245
- #: inc/classes/parts/class-part-media-dummy.php:9
3246
- msgid "For adding a single image, video, animated gif or audio clip."
3247
- msgstr ""
3248
-
3249
  #: inc/classes/parts/class-part-optin-dummy.php:8
3250
  msgid "Opt-In Choice"
3251
  msgstr ""
@@ -3278,14 +3391,6 @@ msgstr ""
3278
  msgid "For collecting a local or international phone number."
3279
  msgstr ""
3280
 
3281
- #: inc/classes/parts/class-part-placeholder-dummy.php:8
3282
- msgid "Paragraph"
3283
- msgstr ""
3284
-
3285
- #: inc/classes/parts/class-part-placeholder-dummy.php:9
3286
- msgid "For adding helper text, notes and formatted messages."
3287
- msgstr ""
3288
-
3289
  #: inc/classes/parts/class-part-rating-dummy.php:8
3290
  msgid "Rate"
3291
  msgstr ""
2
  # This file is distributed under the same license as the Happyforms (free) plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Happyforms (free) 1.21.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/happyforms/\n"
7
  "Last-Translator: The Theme Foundry\n"
8
  "Language-Team: The Theme Foundry\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2022-11-30T10:37:54+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: happyforms\n"
33
 
34
  #: core/classes/class-block.php:52
35
  #: core/classes/class-form-controller.php:73
 
36
  #: core/classes/class-happyforms-core.php:187
37
+ #: core/classes/class-happyforms-core.php:188
38
  #: core/classes/class-happyforms-widget.php:13
39
+ #: core/classes/class-import-controller.php:42
40
  #: core/helpers/helper-misc.php:1068
41
  msgid "Forms"
42
  msgstr ""
84
 
85
  #: core/classes/class-form-admin.php:454
86
  #: core/templates/customize-form-item.php:27
87
+ #: core/templates/parts/customize-divider.php:25
88
+ #: core/templates/parts/customize-layout_title.php:41
89
  #: inc/templates/customize-form-part-choice-footer.php:3
90
  #: inc/templates/customize-form-part-footer.php:4
91
  msgid "Duplicate"
109
  msgstr ""
110
 
111
  #: core/classes/class-form-controller.php:75
 
112
  #: core/classes/class-happyforms-core.php:203
113
+ #: core/classes/class-happyforms-core.php:204
114
  msgid "Add New"
115
  msgstr ""
116
 
146
 
147
  #: core/classes/class-form-controller.php:84
148
  #: core/classes/class-form-controller.php:85
 
149
  #: core/classes/class-happyforms-core.php:195
150
+ #: core/classes/class-happyforms-core.php:196
151
  msgid "All Forms"
152
  msgstr ""
153
 
172
  msgstr ""
173
 
174
  #: core/classes/class-form-email.php:126
175
+ #: inc/classes/class-happyforms.php:148
176
  msgid "To email address"
177
  msgstr ""
178
 
357
  msgid "Remaining submissions"
358
  msgstr ""
359
 
360
+ #: core/classes/class-form-part-library.php:239
361
  msgid "Missing validation callback for field %s"
362
  msgstr ""
363
 
440
  #: core/classes/class-form-styles.php:253
441
  #: core/templates/parts/customize-checkbox.php:10
442
  #: core/templates/parts/customize-email.php:10
443
+ #: core/templates/parts/customize-media.php:11
444
  #: core/templates/parts/customize-multi-line-text.php:10
445
  #: core/templates/parts/customize-number.php:10
446
+ #: core/templates/parts/customize-placeholder.php:12
447
  #: core/templates/parts/customize-radio.php:10
448
  #: core/templates/parts/customize-select.php:10
449
  #: core/templates/parts/customize-single-line-text.php:10
455
  #: core/classes/class-form-styles.php:254
456
  #: core/templates/parts/customize-checkbox.php:14
457
  #: core/templates/parts/customize-email.php:14
458
+ #: core/templates/parts/customize-media.php:15
459
  #: core/templates/parts/customize-multi-line-text.php:14
460
  #: core/templates/parts/customize-number.php:14
461
+ #: core/templates/parts/customize-placeholder.php:16
462
  #: core/templates/parts/customize-radio.php:14
463
  #: core/templates/parts/customize-select.php:14
464
  #: core/templates/parts/customize-single-line-text.php:14
539
  msgid "Full width"
540
  msgstr ""
541
 
542
+ #: core/classes/class-form-styles.php:508
543
  msgid "General"
544
  msgstr ""
545
 
546
+ #: core/classes/class-form-styles.php:513
547
+ #: core/classes/class-form-styles.php:788
548
  #: core/templates/partials/customize-field-width.php:2
549
  msgid "Width"
550
  msgstr ""
551
 
552
+ #: core/classes/class-form-styles.php:518
553
+ #: core/classes/class-form-styles.php:793
554
  msgid "Padding"
555
  msgstr ""
556
 
557
+ #: core/classes/class-form-styles.php:523
558
  msgid "Direction"
559
  msgstr ""
560
 
561
+ #: core/classes/class-form-styles.php:529
562
+ #: core/classes/class-form-styles.php:614
563
+ #: core/classes/class-form-styles.php:684
564
+ #: core/classes/class-form-styles.php:819
565
  msgid "Colors"
566
  msgstr ""
567
 
568
+ #: core/classes/class-form-styles.php:533
569
  msgid "Primary"
570
  msgstr ""
571
 
572
+ #: core/classes/class-form-styles.php:538
573
  msgid "Success message background"
574
  msgstr ""
575
 
576
+ #: core/classes/class-form-styles.php:543
577
  msgid "Success message text"
578
  msgstr ""
579
 
580
+ #: core/classes/class-form-styles.php:548
581
  msgid "Validation message text"
582
  msgstr ""
583
 
584
+ #: core/classes/class-form-styles.php:553
585
  msgid "Error message background"
586
  msgstr ""
587
 
588
+ #: core/classes/class-form-styles.php:558
589
  msgid "Error message text"
590
  msgstr ""
591
 
592
+ #: core/classes/class-form-styles.php:563
593
  #: inc/classes/parts/class-part-title-dummy.php:8
594
  msgid "Title"
595
  msgstr ""
596
 
597
+ #: core/classes/class-form-styles.php:568
598
  msgid "Display"
599
  msgstr ""
600
 
601
+ #: core/classes/class-form-styles.php:573
602
+ #: core/classes/class-form-styles.php:808
603
  msgid "Alignment"
604
  msgstr ""
605
 
606
+ #: core/classes/class-form-styles.php:578
607
+ #: core/classes/class-form-styles.php:798
608
  msgid "Font size"
609
  msgstr ""
610
 
611
+ #: core/classes/class-form-styles.php:583
612
  msgid "Field borders & spacing"
613
  msgstr ""
614
 
615
+ #: core/classes/class-form-styles.php:588
616
+ #: core/classes/class-form-styles.php:618
617
+ #: core/classes/class-form-styles.php:778
618
+ #: core/classes/class-form-styles.php:833
619
  msgid "Border"
620
  msgstr ""
621
 
622
+ #: core/classes/class-form-styles.php:593
623
  msgid "Border location"
624
  msgstr ""
625
 
626
+ #: core/classes/class-form-styles.php:598
627
+ #: core/classes/class-form-styles.php:783
628
  msgid "Border radius"
629
  msgstr ""
630
 
631
+ #: core/classes/class-form-styles.php:603
632
  msgid "Outer spacing"
633
  msgstr ""
634
 
635
+ #: core/classes/class-form-styles.php:608
636
  msgid "Inner spacing"
637
  msgstr ""
638
 
639
+ #: core/classes/class-form-styles.php:623
640
  msgid "Border on focus"
641
  msgstr ""
642
 
643
+ #: core/classes/class-form-styles.php:628
644
+ #: core/classes/class-form-styles.php:718
645
+ #: core/classes/class-form-styles.php:823
646
  msgid "Background"
647
  msgstr ""
648
 
649
+ #: core/classes/class-form-styles.php:633
650
+ #: core/classes/class-form-styles.php:728
651
+ #: core/classes/class-form-styles.php:828
652
  msgid "Background on focus"
653
  msgstr ""
654
 
655
+ #: core/classes/class-form-styles.php:638
656
  msgid "Field labels & text"
657
  msgstr ""
658
 
659
+ #: core/classes/class-form-styles.php:643
660
  msgid "Toggle placeholder on field focus"
661
  msgstr ""
662
 
663
+ #: core/classes/class-form-styles.php:648
664
  msgid "Label alignment"
665
  msgstr ""
666
 
667
+ #: core/classes/class-form-styles.php:653
668
  msgid "Label font size"
669
  msgstr ""
670
 
671
+ #: core/classes/class-form-styles.php:658
672
  msgid "Label font weight"
673
  msgstr ""
674
 
675
+ #: core/classes/class-form-styles.php:663
676
  msgid "Hint alignment"
677
  msgstr ""
678
 
679
+ #: core/classes/class-form-styles.php:668
680
  msgid "Hint font size"
681
  msgstr ""
682
 
683
+ #: core/classes/class-form-styles.php:673
684
  msgid "Placeholder &amp; value alignment"
685
  msgstr ""
686
 
687
+ #: core/classes/class-form-styles.php:678
688
  msgid "Value font size"
689
  msgstr ""
690
 
691
+ #: core/classes/class-form-styles.php:688
692
  #: core/templates/parts/customize-checkbox.php:4
693
  #: core/templates/parts/customize-checkbox.php:139
694
  #: core/templates/parts/customize-checkbox.php:187
695
  #: core/templates/parts/customize-email.php:4
696
+ #: core/templates/parts/customize-media.php:5
697
  #: core/templates/parts/customize-multi-line-text.php:4
698
  #: core/templates/parts/customize-number.php:4
699
+ #: core/templates/parts/customize-placeholder.php:6
700
  #: core/templates/parts/customize-radio.php:4
701
  #: core/templates/parts/customize-radio.php:125
702
  #: core/templates/parts/customize-radio.php:174
707
  msgid "Label"
708
  msgstr ""
709
 
710
+ #: core/classes/class-form-styles.php:693
711
  msgid "Value"
712
  msgstr ""
713
 
714
+ #: core/classes/class-form-styles.php:698
715
  #: core/templates/parts/customize-email.php:20
716
  #: core/templates/parts/customize-multi-line-text.php:20
717
  #: core/templates/parts/customize-number.php:20
720
  msgid "Placeholder"
721
  msgstr ""
722
 
723
+ #: core/classes/class-form-styles.php:703
724
  #: core/templates/parts/customize-checkbox.php:20
725
  #: core/templates/parts/customize-checkbox.php:145
726
  #: core/templates/parts/customize-email.php:28
727
  #: core/templates/parts/customize-multi-line-text.php:28
728
  #: core/templates/parts/customize-number.php:28
729
+ #: core/templates/parts/customize-placeholder.php:25
730
  #: core/templates/parts/customize-radio.php:20
731
  #: core/templates/parts/customize-radio.php:131
732
  #: core/templates/parts/customize-select.php:24
734
  msgid "Hint"
735
  msgstr ""
736
 
737
+ #: core/classes/class-form-styles.php:708
738
  msgid "Address dropdowns"
739
  msgstr ""
740
 
741
+ #: core/classes/class-form-styles.php:714
742
  msgid "Items"
743
  msgstr ""
744
 
745
+ #: core/classes/class-form-styles.php:723
746
+ #: core/classes/class-form-styles.php:838
747
  #: core/classes/parts/class-part-single-line-text.php:8
748
+ #: core/templates/parts/customize-placeholder.php:32
749
  msgid "Text"
750
  msgstr ""
751
 
752
+ #: core/classes/class-form-styles.php:733
753
  msgid "Text focused"
754
  msgstr ""
755
 
756
+ #: core/classes/class-form-styles.php:738
757
  msgid "Tables"
758
  msgstr ""
759
 
760
+ #: core/classes/class-form-styles.php:743
761
  msgid "Odd row primary"
762
  msgstr ""
763
 
764
+ #: core/classes/class-form-styles.php:748
765
  msgid "Odd row secondary"
766
  msgstr ""
767
 
768
+ #: core/classes/class-form-styles.php:753
769
  msgid "Even row primary"
770
  msgstr ""
771
 
772
+ #: core/classes/class-form-styles.php:758
773
  msgid "Even row secondary"
774
  msgstr ""
775
 
776
+ #: core/classes/class-form-styles.php:763
777
+ msgid "Separators"
778
+ msgstr ""
779
+
780
+ #: core/classes/class-form-styles.php:768
781
+ msgid "Color"
782
+ msgstr ""
783
+
784
+ #: core/classes/class-form-styles.php:773
785
  msgid "Submit button"
786
  msgstr ""
787
 
788
+ #: core/classes/class-form-styles.php:803
789
  msgid "Font weight"
790
  msgstr ""
791
 
792
+ #: core/classes/class-form-styles.php:813
793
  msgid "Make button a field of last input"
794
  msgstr ""
795
 
796
+ #: core/classes/class-form-styles.php:843
797
  msgid "Text on focus"
798
  msgstr ""
799
 
800
+ #: core/classes/class-form-styles.php:855
801
  msgid "Add your own CSS code here to customize the appearance of your form."
802
  msgstr ""
803
 
804
+ #: core/classes/class-form-styles.php:857
805
  msgid "For each rule you add, we'll prepend your form's HTML ID. This makes sure all styles added will only apply to this form. For example %s becomes %s."
806
  msgstr ""
807
 
808
+ #: core/classes/class-form-styles.php:865
809
  msgid "The edit field automatically highlights code syntax. You can disable this in your <a href=\"%s\" class=\"%s\" target=\"_blank\">user profile</a> to work in plain text mode."
810
  msgstr ""
811
 
812
+ #: core/classes/class-form-styles.php:873
813
+ #: core/classes/class-form-styles.php:883
814
  msgid "Additional CSS"
815
  msgstr ""
816
 
 
817
  #: core/classes/class-happyforms-core.php:211
818
+ #: core/classes/class-happyforms-core.php:212
819
  #: inc/classes/class-message-controller.php:572
820
  msgid "Submissions"
821
  msgstr ""
822
 
 
823
  #: core/classes/class-happyforms-core.php:220
824
+ #: core/classes/class-happyforms-core.php:221
825
  #: integrations/templates/admin-coupons.php:2
826
  msgid "Coupons"
827
  msgstr ""
828
 
 
829
  #: core/classes/class-happyforms-core.php:229
830
+ #: core/classes/class-happyforms-core.php:230
831
  #: integrations/templates/admin-integrations.php:3
832
  msgid "Integrations"
833
  msgstr ""
834
 
 
835
  #: core/classes/class-happyforms-core.php:238
836
+ #: core/classes/class-happyforms-core.php:239
837
  #: core/assets/jsx/build/admin/block.js:173
838
  msgid "Settings"
839
  msgstr ""
840
 
841
+ #: core/classes/class-happyforms-core.php:480
842
  msgid "Add Form"
843
  msgstr ""
844
 
850
  msgid "Form:"
851
  msgstr ""
852
 
853
+ #: core/classes/class-import-controller.php:37
854
+ msgid "Import forms from a forms export file."
855
+ msgstr ""
856
+
857
+ #: core/classes/class-import-controller.php:83
858
+ msgid "Import Forms"
859
+ msgstr ""
860
+
861
+ #: core/classes/class-import-controller.php:92
862
+ msgid "Choose a forms export (.xml) file to upload, then click Upload file and import."
863
+ msgstr ""
864
+
865
+ #: core/classes/class-import-controller.php:101
866
+ msgid "Sorry, there has been an error."
867
+ msgstr ""
868
+
869
+ #: core/classes/class-import-controller.php:107
870
+ msgid "The export file could not be found at <code>%s</code>. It is likely that this was caused by a permissions problem."
871
+ msgstr ""
872
+
873
  #: core/classes/class-validation-messages.php:72
874
  msgid "Field is answered incorrectly"
875
  msgstr ""
918
  msgid "Form updated."
919
  msgstr ""
920
 
921
+ #: core/classes/class-wp-customize-form-manager.php:323
922
+ msgid "The changes you made will be lost if you navigate away from this page."
923
+ msgstr ""
924
+
925
  #: core/classes/parts/class-part-checkbox.php:10
926
  msgid "Checkbox"
927
  msgstr ""
936
  msgid "Other"
937
  msgstr ""
938
 
939
+ #: core/classes/parts/class-part-divider.php:8
940
+ msgid "Separator"
941
+ msgstr ""
942
+
943
+ #: core/classes/parts/class-part-divider.php:9
944
+ msgid "For adding a horizontal rule to visually separate fields."
945
+ msgstr ""
946
+
947
  #: core/classes/parts/class-part-email.php:8
948
  msgid "Email"
949
  msgstr ""
952
  msgid "For formatted email addresses. The '@' symbol is required."
953
  msgstr ""
954
 
955
+ #: core/classes/parts/class-part-layout-drawer-group.php:9
956
+ #: inc/classes/parts/class-part-layout-drawer-group.php:9
957
+ msgid "Design"
958
+ msgstr ""
959
+
960
+ #: core/classes/parts/class-part-layout-title.php:8
961
+ #: core/templates/parts/customize-checkbox.php:180
962
+ #: core/templates/parts/customize-layout_title.php:16
963
+ #: core/templates/parts/customize-radio.php:167
964
+ #: core/templates/parts/customize-select.php:151
965
+ msgid "Heading"
966
+ msgstr ""
967
+
968
+ #: core/classes/parts/class-part-layout-title.php:9
969
+ msgid "For adding titles to visually separate fields."
970
+ msgstr ""
971
+
972
+ #: core/classes/parts/class-part-media.php:8
973
+ #: core/templates/parts/customize-media.php:25
974
+ msgid "Media"
975
+ msgstr ""
976
+
977
+ #: core/classes/parts/class-part-media.php:9
978
+ msgid "For adding a single image, video, animated gif or audio clip."
979
+ msgstr ""
980
+
981
  #: core/classes/parts/class-part-multi-line-text.php:8
982
  msgid "Long Text"
983
  msgstr ""
994
  msgid "For numeric fields."
995
  msgstr ""
996
 
997
+ #: core/classes/parts/class-part-placeholder.php:8
998
+ msgid "Paragraph"
999
+ msgstr ""
1000
+
1001
+ #: core/classes/parts/class-part-placeholder.php:9
1002
+ msgid "For adding helper text, notes and formatted messages."
1003
+ msgstr ""
1004
+
1005
  #: core/classes/parts/class-part-radio.php:12
1006
  msgid "Radio"
1007
  msgstr ""
1056
  msgid "I agree to allow this site to store and process the personal information submitted."
1057
  msgstr ""
1058
 
1059
+ #: core/helpers/helper-form-templates.php:79
1060
  msgid "Leave this field blank"
1061
  msgstr ""
1062
 
1063
+ #: core/helpers/helper-form-templates.php:488
1064
  #: core/helpers/helper-misc.php:18
1065
  msgid "(no title)"
1066
  msgstr ""
1067
 
1068
+ #: core/helpers/helper-form-templates.php:1015
1069
  msgid "January"
1070
  msgstr ""
1071
 
1072
+ #: core/helpers/helper-form-templates.php:1016
1073
  msgid "February"
1074
  msgstr ""
1075
 
1076
+ #: core/helpers/helper-form-templates.php:1017
1077
  msgid "March"
1078
  msgstr ""
1079
 
1080
+ #: core/helpers/helper-form-templates.php:1018
1081
  msgid "April"
1082
  msgstr ""
1083
 
1084
+ #: core/helpers/helper-form-templates.php:1019
1085
  msgid "May"
1086
  msgstr ""
1087
 
1088
+ #: core/helpers/helper-form-templates.php:1020
1089
  msgid "June"
1090
  msgstr ""
1091
 
1092
+ #: core/helpers/helper-form-templates.php:1021
1093
  msgid "July"
1094
  msgstr ""
1095
 
1096
+ #: core/helpers/helper-form-templates.php:1022
1097
  msgid "August"
1098
  msgstr ""
1099
 
1100
+ #: core/helpers/helper-form-templates.php:1023
1101
  msgid "September"
1102
  msgstr ""
1103
 
1104
+ #: core/helpers/helper-form-templates.php:1024
1105
  msgid "October"
1106
  msgstr ""
1107
 
1108
+ #: core/helpers/helper-form-templates.php:1025
1109
  msgid "November"
1110
  msgstr ""
1111
 
1112
+ #: core/helpers/helper-form-templates.php:1026
1113
  msgid "December"
1114
  msgstr ""
1115
 
2698
  msgstr ""
2699
 
2700
  #: core/templates/customize-form-item.php:33
2701
+ #: core/templates/parts/customize-divider.php:24
2702
+ #: core/templates/parts/customize-layout_title.php:40
2703
  #: inc/templates/customize-form-part-choice-footer.php:2
2704
  #: inc/templates/customize-form-part-footer.php:3
2705
  msgid "Delete"
2763
  msgid "Updated"
2764
  msgstr ""
2765
 
 
 
 
 
2766
  #: core/templates/customize-header-actions.php:22
2767
  msgid "Close"
2768
  msgstr ""
2900
  msgstr ""
2901
 
2902
  #: core/templates/parts/customize-checkbox.php:111
2903
+ #: core/templates/parts/customize-divider.php:18
2904
  #: core/templates/parts/customize-email.php:57
2905
+ #: core/templates/parts/customize-layout_title.php:34
2906
+ #: core/templates/parts/customize-media.php:112
2907
  #: core/templates/parts/customize-multi-line-text.php:70
2908
  #: core/templates/parts/customize-number.php:83
2909
+ #: core/templates/parts/customize-placeholder.php:45
2910
  #: core/templates/parts/customize-radio.php:95
2911
  #: core/templates/parts/customize-select.php:86
2912
  #: core/templates/parts/customize-single-line-text.php:56
2931
  msgid "Make this choice default"
2932
  msgstr ""
2933
 
 
 
 
 
 
 
 
2934
  #: core/templates/parts/customize-email.php:24
2935
  #: core/templates/parts/customize-multi-line-text.php:24
2936
  #: core/templates/parts/customize-number.php:24
2950
  msgid "Suffix"
2951
  msgstr ""
2952
 
2953
+ #: core/templates/parts/customize-layout_title.php:20
2954
+ msgid "Heading level"
2955
+ msgstr ""
2956
+
2957
+ #: core/templates/parts/customize-layout_title.php:25
2958
+ msgid "H"
2959
+ msgstr ""
2960
+
2961
+ #: core/templates/parts/customize-media.php:24
2962
+ #: core/templates/parts/customize-media.php:94
2963
+ msgid "Select media"
2964
+ msgstr ""
2965
+
2966
+ #: core/templates/parts/customize-media.php:24
2967
+ msgid "Select Media"
2968
+ msgstr ""
2969
+
2970
+ #: core/templates/parts/customize-media.php:98
2971
+ msgid "Replace Media"
2972
+ msgstr ""
2973
+
2974
  #: core/templates/parts/customize-multi-line-text.php:40
2975
  msgid "Limit words/characters"
2976
  msgstr ""
3021
  msgid "Max times the same answer can be submitted"
3022
  msgstr ""
3023
 
3024
+ #: inc/classes/class-happyforms.php:83
3025
  msgid "Upgrade"
3026
  msgstr ""
3027
 
3028
+ #: inc/classes/class-happyforms.php:91
3029
  msgid "Redirect to this page address (URL) after submission"
3030
  msgstr ""
3031
 
3032
+ #: inc/classes/class-happyforms.php:92
3033
  msgid "Search or type URL"
3034
  msgstr ""
3035
 
3036
+ #: inc/classes/class-happyforms.php:98
3037
  msgid "Shuffle order of fields"
3038
  msgstr ""
3039
 
3040
+ #: inc/classes/class-happyforms.php:104
3041
  msgid "Use reCAPTCHA"
3042
  msgstr ""
3043
 
3044
+ #: inc/classes/class-happyforms.php:110
3045
  msgid "Let submitters save a draft for set number of days"
3046
  msgstr ""
3047
 
3048
+ #: inc/classes/class-happyforms.php:116
3049
  msgid "Require submitters to review a submission"
3050
  msgstr ""
3051
 
3052
+ #: inc/classes/class-happyforms.php:122
3053
  msgid "Max number of submissions"
3054
  msgstr ""
3055
 
3056
+ #: inc/classes/class-happyforms.php:128
3057
  msgid "Erase submitter's personal data after set number of days"
3058
  msgstr ""
3059
 
3060
+ #: inc/classes/class-happyforms.php:134
3061
  msgid "Show an error message if field contains words in Disallowed Comment Keys"
3062
  msgstr ""
3063
 
3064
+ #: inc/classes/class-happyforms.php:154
3065
  msgid "Send abandonment email"
3066
  msgstr ""
3067
 
3068
+ #: inc/classes/class-happyforms.php:168
3069
  msgid "Checkboxes & Radios"
3070
  msgstr ""
3071
 
3072
+ #: inc/classes/class-happyforms.php:174
3073
  msgid "Rating"
3074
  msgstr ""
3075
 
3076
+ #: inc/classes/class-happyforms.php:180
 
 
 
 
3077
  msgid "Multi Step"
3078
  msgstr ""
3079
 
3080
+ #: inc/classes/class-happyforms.php:194
3081
  msgid "Form redirected after submission"
3082
  msgstr ""
3083
 
3084
+ #: inc/classes/class-happyforms.php:199
3085
  msgid "Form has reached its reply limit"
3086
  msgstr ""
3087
 
3088
+ #: inc/classes/class-happyforms.php:204
3089
  msgid "Submitter has returned to a draft"
3090
  msgstr ""
3091
 
3092
+ #: inc/classes/class-happyforms.php:209
3093
  msgid "Submitter is viewing review page"
3094
  msgstr ""
3095
 
3096
+ #: inc/classes/class-happyforms.php:214
3097
  msgid "Payment completed"
3098
  msgstr ""
3099
 
3100
+ #: inc/classes/class-happyforms.php:219
3101
  msgid "Payment failed"
3102
  msgstr ""
3103
 
3104
+ #: inc/classes/class-happyforms.php:224
3105
  msgid "Payment cancelled"
3106
  msgstr ""
3107
 
3108
+ #: inc/classes/class-happyforms.php:229
3109
  msgid "Previous page"
3110
  msgstr ""
3111
 
3112
+ #: inc/classes/class-happyforms.php:234
3113
  msgid "Redirect to page"
3114
  msgstr ""
3115
 
3116
+ #: inc/classes/class-happyforms.php:239
3117
  msgid "Print user submission"
3118
  msgstr ""
3119
 
3120
+ #: inc/classes/class-happyforms.php:244
3121
  msgid "Edit reply"
3122
  msgstr ""
3123
 
3124
+ #: inc/classes/class-happyforms.php:249
3125
  msgid "Clear saved draft reply"
3126
  msgstr ""
3127
 
3128
+ #: inc/classes/class-happyforms.php:254
3129
  msgid "Save draft reply"
3130
  msgstr ""
3131
 
3132
+ #: inc/classes/class-happyforms.php:259
3133
  msgid "Upload files"
3134
  msgstr ""
3135
 
3136
+ #: inc/classes/class-happyforms.php:264
3137
  msgid "Remove uploaded file"
3138
  msgstr ""
3139
 
3140
+ #: inc/classes/class-happyforms.php:269
3141
  msgid "Review reply"
3142
  msgstr ""
3143
 
3144
+ #: inc/classes/class-happyforms.php:274
3145
  msgid "Start drawing signature"
3146
  msgstr ""
3147
 
3148
+ #: inc/classes/class-happyforms.php:279
3149
  msgid "Start over drawing signature"
3150
  msgstr ""
3151
 
3152
+ #: inc/classes/class-happyforms.php:284
3153
  msgid "Clear drawn signature"
3154
  msgstr ""
3155
 
3156
+ #: inc/classes/class-happyforms.php:289
3157
  msgid "Done drawing signature"
3158
  msgstr ""
3159
 
3160
+ #: inc/classes/class-happyforms.php:294
3161
  msgid "Field answer reached its limit"
3162
  msgstr ""
3163
 
3164
+ #: inc/classes/class-happyforms.php:299
3165
  msgid "Coupon code invalid"
3166
  msgstr ""
3167
 
3168
+ #: inc/classes/class-happyforms.php:304
3169
  msgid "Required file isn't uploaded"
3170
  msgstr ""
3171
 
3172
+ #: inc/classes/class-happyforms.php:309
3173
  msgid "Required terms haven't been scrolled"
3174
  msgstr ""
3175
 
3176
+ #: inc/classes/class-happyforms.php:314
3177
  msgid "Field contains disallowed word"
3178
  msgstr ""
3179
 
3180
+ #: inc/classes/class-happyforms.php:319
3181
  msgid "Disallowed IP address or browser"
3182
  msgstr ""
3183
 
3184
+ #: inc/classes/class-happyforms.php:324
3185
  msgid "This file's size is too big"
3186
  msgstr ""
3187
 
3188
+ #: inc/classes/class-happyforms.php:329
3189
  msgid "This file's type not allowed"
3190
  msgstr ""
3191
 
3192
+ #: inc/classes/class-happyforms.php:334
3193
  msgid "A file with this name has already been uploaded"
3194
  msgstr ""
3195
 
3196
+ #: inc/classes/class-happyforms.php:339
3197
  msgid "User uploaded too few files"
3198
  msgstr ""
3199
 
3200
+ #: inc/classes/class-happyforms.php:344
3201
  msgid "Price is too low"
3202
  msgstr ""
3203
 
3204
+ #: inc/classes/class-happyforms.php:349
3205
  msgid "Phone field country code label"
3206
  msgstr ""
3207
 
3208
+ #: inc/classes/class-happyforms.php:354
3209
  msgid "Phone field number label"
3210
  msgstr ""
3211
 
3212
+ #: inc/classes/class-happyforms.php:359
3213
  msgid "Total files uploaded"
3214
  msgstr ""
3215
 
3216
+ #: inc/classes/class-happyforms.php:364
3217
  msgid "Payment method"
3218
  msgstr ""
3219
 
3220
+ #: inc/classes/class-happyforms.php:369
3221
  msgid "Pay what you want"
3222
  msgstr ""
3223
 
3224
+ #: inc/classes/class-happyforms.php:374
3225
  msgid "Submitter will be redirected to PayPal"
3226
  msgstr ""
3227
 
3228
+ #: inc/classes/class-happyforms.php:379
3229
  msgid "PayPal payment"
3230
  msgstr ""
3231
 
3232
+ #: inc/classes/class-happyforms.php:384
3233
  msgid "Stripe is processing payment"
3234
  msgstr ""
3235
 
3236
+ #: inc/classes/class-happyforms.php:389
3237
  msgid "Stripe payment"
3238
  msgstr ""
3239
 
3240
+ #: inc/classes/class-happyforms.php:394
3241
  msgid "Stripe card field"
3242
  msgstr ""
3243
 
3244
+ #: inc/classes/class-happyforms.php:399
3245
  msgid "Card number"
3246
  msgstr ""
3247
 
3248
+ #: inc/classes/class-happyforms.php:404
3249
  msgid "Card expiration"
3250
  msgstr ""
3251
 
3252
+ #: inc/classes/class-happyforms.php:409
3253
  msgid "Card security code"
3254
  msgstr ""
3255
 
3256
+ #: inc/classes/class-happyforms.php:414
3257
  msgid "Coupon field label"
3258
  msgstr ""
3259
 
3260
+ #: inc/classes/class-happyforms.php:419
3261
  msgid "Apply coupon button label"
3262
  msgstr ""
3263
 
3264
+ #: inc/classes/class-happyforms.php:424
3265
  msgid "Current page"
3266
  msgstr ""
3267
 
3268
+ #: inc/classes/class-importer-xml.php:159
3269
+ msgid "form"
3270
+ msgstr ""
3271
+
3272
+ #: inc/classes/class-importer-xml.php:162
3273
+ msgid "forms"
3274
+ msgstr ""
3275
+
3276
+ #: inc/classes/class-importer-xml.php:168
3277
+ msgid "submission"
3278
+ msgstr ""
3279
+
3280
+ #: inc/classes/class-importer-xml.php:171
3281
+ msgid "submissions"
3282
+ msgstr ""
3283
+
3284
+ #: inc/classes/class-importer-xml.php:177
3285
+ msgid "poll"
3286
+ msgstr ""
3287
+
3288
+ #: inc/classes/class-importer-xml.php:180
3289
+ msgid "polls"
3290
+ msgstr ""
3291
+
3292
+ #: inc/classes/class-importer-xml.php:202
3293
+ msgid "%s %s imported successfully."
3294
+ msgstr ""
3295
+
3296
+ #: inc/classes/class-importer-xml.php:208
3297
+ msgid "All done!"
3298
+ msgstr ""
3299
+
3300
+ #: inc/classes/class-importer-xml.php:219
3301
+ msgid "An error occured while parsing import file."
3302
+ msgstr ""
3303
+
3304
+ #: inc/classes/class-importer-xml.php:228
3305
+ msgid "An error occured while importing %s."
3306
+ msgstr ""
3307
+
3308
  #: inc/classes/class-message-admin.php:59
3309
  #: inc/classes/class-message-controller.php:573
3310
  msgid "Submission"
3359
  msgid "For formatted day, month, year and or time fields."
3360
  msgstr ""
3361
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3362
  #: inc/classes/parts/class-part-optin-dummy.php:8
3363
  msgid "Opt-In Choice"
3364
  msgstr ""
3391
  msgid "For collecting a local or international phone number."
3392
  msgstr ""
3393
 
 
 
 
 
 
 
 
 
3394
  #: inc/classes/parts/class-part-rating-dummy.php:8
3395
  msgid "Rate"
3396
  msgstr ""
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: contact form, contact form plugin, forms, form builder, custom form, intak
5
  Requires at least: 5.0
6
  Tested up to: 6.1
7
  Requires PHP: 7.0
8
- Stable tag: 1.20.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -160,6 +160,13 @@ And so you know, we don't outsource support. You can expect plain-talkin' help f
160
 
161
  == Changelog ==
162
 
 
 
 
 
 
 
 
163
  = November 8, 2022 =
164
 
165
  Version 1.20.2 changelog:
@@ -1479,6 +1486,9 @@ Version 1.0.0 changelog:
1479
 
1480
  == Upgrade Notice ==
1481
 
 
 
 
1482
  = 1.20.2 =
1483
  * Fixed Messages tab's "Submit form" control realtime preview updates.
1484
 
5
  Requires at least: 5.0
6
  Tested up to: 6.1
7
  Requires PHP: 7.0
8
+ Stable tag: 1.21.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
160
 
161
  == Changelog ==
162
 
163
+ = November 30, 2022 =
164
+
165
+ Version 1.21.0 changelog:
166
+
167
+ * Added: New Heading, Paragraph, Media and Separator fields offer more powerful layout possibilities.
168
+ * Changed: Form importer has been moved to Tools → Import screen for better consistency with core tooling.
169
+
170
  = November 8, 2022 =
171
 
172
  Version 1.20.2 changelog:
1486
 
1487
  == Upgrade Notice ==
1488
 
1489
+ = 1.21.0 =
1490
+ * New Heading, Paragraph, Media and Separator fields and form importer in Tools → Import screen.
1491
+
1492
  = 1.20.2 =
1493
  * Fixed Messages tab's "Submit form" control realtime preview updates.
1494