Brizy – Page Builder - Version 1.0.127

Version Description

  • 2020-07-30 =
  • New: Introduced working in Draft
  • New: Links to Support and Docs in left sidebar
  • New: Brizy Sync functionality for blocks and layouts
  • New: You can Clear or Save an entire layout
  • New: Absolute and Fixed positions for elements
  • Improved: Increased the size limit of Image population to 5000px
  • Improved: Enabled shape option on responsive for all Sections
  • Improved: Updated Google Fonts list
  • Improved: Added Animation options on all elements
  • Improved: Re-written =
Download this release

Release Info

Developer themefusecom
Plugin Icon 128x128 Brizy – Page Builder
Version 1.0.127
Comparing to
See all releases

Code changes from version 1.0.126 to 1.0.127

Files changed (113) hide show
  1. README.md +33 -6
  2. admin/abstract-widget.php +2 -2
  3. admin/blocks/api.php +407 -113
  4. admin/blocks/main.php +17 -16
  5. admin/blocks/manager.php +202 -0
  6. admin/cloud-deprecated.php +237 -0
  7. admin/cloud.php +371 -0
  8. admin/cloud/abstract-bridge.php +21 -0
  9. admin/cloud/api.php +213 -0
  10. admin/cloud/block-bridge.php +135 -0
  11. admin/cloud/bridge-interface.php +26 -0
  12. admin/cloud/client.php +733 -0
  13. admin/cloud/cron.php +61 -0
  14. admin/cloud/font-bridge.php +103 -0
  15. admin/cloud/layout-bridge.php +137 -0
  16. admin/cloud/media-bridge.php +78 -0
  17. admin/cloud/popup-bridge.php +96 -0
  18. admin/cloud/proxy.php +59 -0
  19. admin/cloud/screenshot-bridge.php +47 -0
  20. admin/cloud/sync-aware.php +130 -0
  21. admin/dashboard-widget.php +1 -1
  22. admin/entity/abstract-manager.php +124 -0
  23. admin/entity/manager-interface.php +11 -0
  24. admin/fonts/api.php +7 -6
  25. admin/fonts/handler.php +5 -4
  26. admin/fonts/manager.php +76 -4
  27. admin/form-entries.php +98 -4
  28. admin/layouts/api.php +285 -0
  29. admin/layouts/main.php +77 -0
  30. admin/layouts/manager.php +199 -0
  31. admin/main.php +56 -21
  32. admin/migrations.php +1 -1
  33. admin/migrations/global-blocks-to-custom-post-migration.php +0 -1
  34. admin/migrations/globals-to-data-migration.php +5 -2
  35. admin/migrations/screenshot-migration.php +86 -0
  36. admin/migrations/shortcodes-mobile-one-migration.php +5 -0
  37. admin/optimize-images.php +43 -26
  38. admin/popups/main.php +12 -13
  39. admin/post/brizy-posts-monitor.php +1 -0
  40. admin/post/revision-manager.php +24 -12
  41. admin/rule.php +53 -18
  42. admin/rules/api.php +418 -23
  43. admin/rules/manager.php +1 -1
  44. admin/rules/template-rule-validator.php +4 -3
  45. admin/settings.php +5 -5
  46. admin/static/css/style.css +81 -11
  47. admin/static/js/cloud.js +36 -0
  48. admin/static/js/featured-image.js +34 -5
  49. admin/static/js/rules.js +359 -176
  50. admin/templates.php +215 -80
  51. admin/views/cloud/cloud-base.html.twig +6 -0
  52. admin/views/cloud/cloud-login.html.twig +32 -0
  53. admin/views/cloud/cloud-projects.html.twig +40 -0
  54. admin/views/cloud/cloud.html.twig +7 -0
  55. admin/views/featured-image.html.twig +58 -41
  56. admin/views/optimizer/optimizer-settings.html.twig +1 -1
  57. brizy.php +25 -9
  58. compatibilities/autoptimize.php +1 -1
  59. compatibilities/fast-velocity-minify.php +3 -2
  60. compatibilities/gutenberg.php +1 -17
  61. compatibilities/init.php +8 -4
  62. compatibilities/lite-speed.php +7 -10
  63. compatibilities/phastpress.php +1 -1
  64. compatibilities/seo-press.php +2 -9
  65. compatibilities/sg-optimizer.php +1 -1
  66. compatibilities/tp-add-on-language-by-get-parameter.php +21 -0
  67. compatibilities/webcraftic-clearfy.php +1 -1
  68. compatibilities/wordpress-mu-domain-mapping.php +1 -1
  69. compatibilities/wpml.php +10 -24
  70. compatibilities/yoast-seo.php +45 -1
  71. config.php +19 -1
  72. content/placeholder-extractor.php +1 -1
  73. content/placeholders/permalink.php +1 -3
  74. editor.php +88 -32
  75. editor/accounts/api.php +11 -10
  76. editor/api.php +222 -263
  77. editor/api/client.php +5 -4
  78. editor/asset/attachment-aware.php +32 -0
  79. editor/asset/cleaner.php +46 -0
  80. editor/asset/media-asset-processor.php +12 -9
  81. editor/asset/optimize/bunny-cdn-optimizer.php +132 -0
  82. editor/asset/optimize/optimizer.php +7 -5
  83. editor/asset/optimize/shortpixel-optimizer.php +11 -0
  84. editor/asset/static-file.php +1 -1
  85. editor/asset/svg-asset-processor.php +4 -3
  86. editor/block-position.php +50 -18
  87. editor/block-screenshot-api.php +24 -156
  88. editor/block.php +239 -39
  89. editor/constants.php +1 -4
  90. editor/crop-cache-media.php +7 -31
  91. editor/editor/editor.php +887 -804
  92. editor/entity.php +44 -2
  93. editor/forms/abstract-integration.php +4 -1
  94. editor/forms/api.php +31 -30
  95. editor/forms/form.php +7 -6
  96. editor/forms/smtp-integration.php +11 -9
  97. editor/forms/wordpress-integration.php +4 -3
  98. editor/layout.php +248 -0
  99. editor/popup.php +267 -0
  100. editor/post.php +91 -47
  101. editor/post3.php +1 -1
  102. editor/project.php +91 -19
  103. editor/rest-extend.php +26 -1
  104. editor/screenshot/manager.php +144 -0
  105. editor/synchronizable.php +139 -0
  106. editor/url-builder.php +33 -2
  107. editor/user.php +45 -117
  108. maintenance-mode.php +29 -8
  109. public/asset-proxy.php +11 -11
  110. public/attachment-proxy.php +5 -5
  111. public/block-screenshot-proxy.php +24 -46
  112. public/crop-proxy.php +22 -13
  113. public/editor-build/144-wp/editor/css/editor.css +0 -5927
README.md CHANGED
@@ -1,9 +1,9 @@
1
  # Brizy - Page Builder
2
  Contributors: themefuse<br>
3
  Requires at least: 4.5<br>
4
- Tested up to: 5.3.2<br>
5
  Requires PHP: 5.6<br>
6
- Stable tag: 1.0.126<br>
7
  License: GPLv3<br>
8
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
9
 
@@ -118,11 +118,38 @@ $bodyHtml = apply_filters( 'brizy_content', $html->get_body(), Brizy_Editor_Proj
118
 
119
  ## Changelog
120
 
121
- ### 1.0.126 - 2020-06-03 ###
122
- * Fix: Security fixes
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
  ### 1.0.125 - 2020-06-02 ###
125
- * Fix: Security fixes
126
 
127
  ### 1.0.124 - 2020-04-25 ###
128
  * New: Switched Nucleo icons for Font Awesome
@@ -146,7 +173,7 @@ $bodyHtml = apply_filters( 'brizy_content', $html->get_body(), Brizy_Editor_Proj
146
  * Fixed: Added backward compatibility with old PRO plugins
147
 
148
  ### 1.0.120 - 2020-03-26 ###
149
- * FIxed: Failed to enqueue script Select2
150
 
151
  ### 1.0.119 - 2020-03-25 ###
152
  * Fixed: Tooltip position
1
  # Brizy - Page Builder
2
  Contributors: themefuse<br>
3
  Requires at least: 4.5<br>
4
+ Tested up to: 5.4.2<br>
5
  Requires PHP: 5.6<br>
6
+ Stable tag: 1.0.127<br>
7
  License: GPLv3<br>
8
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
9
 
118
 
119
  ## Changelog
120
 
121
+ ### 1.0.127 - 2020-07-30 ###
122
+ * New: Introduced working in Draft
123
+ * New: Links to Support and Docs in left sidebar
124
+ * New: Brizy Sync functionality for blocks and layouts
125
+ * New: You can Clear or Save an entire layout
126
+ * New: Absolute and Fixed positions for elements
127
+ * Improved: Increased the size limit of Image population to 5000px
128
+ * Improved: Enabled shape option on responsive for all Sections
129
+ * Improved: Updated Google Fonts list
130
+ * Improved: Added Animation options on all elements
131
+ * Improved: Re-written ## Changelog extended the Image element (added fixed px size)
132
+ * Improved: Plugin loading
133
+ * Improved: Sent post directly in the get_the_content post content element
134
+ * Improved: Increased the size limit of Image population to 5000px
135
+ * Improved: Enabled shape option on responsive for all Sections
136
+ * Fixed: Section tag name
137
+ * Fixed: Global block toolbar icon
138
+ * Fixed: Removed content editable attribute on texts at preview
139
+ * Fixed: Toolbar positioning inside popups
140
+ * Fixed: TextEditor at undo / redo
141
+ * Fixed: Background video loop
142
+ * Fixed: Form select responsive width at preview
143
+ * Fixed: Section padding resize width
144
+ * Fixed: Ignore empty data values when updating global blocks
145
+ * Fixed: Changed the update global blocks to allow to update blocks without sending the data
146
+ * Fixed: Revision for compile page on preview
147
+ * Fixed: Compatibility with TranslatePress (Language by GET parameter)
148
+ * Fixed: Compatibility with LiteSpeed plugin
149
+ * Fixed: Missing translation ready strings
150
 
151
  ### 1.0.125 - 2020-06-02 ###
152
+ * Fixed: Security fixes
153
 
154
  ### 1.0.124 - 2020-04-25 ###
155
  * New: Switched Nucleo icons for Font Awesome
173
  * Fixed: Added backward compatibility with old PRO plugins
174
 
175
  ### 1.0.120 - 2020-03-26 ###
176
+ * Fixed: Failed to enqueue script Select2
177
 
178
  ### 1.0.119 - 2020-03-25 ###
179
  * Fixed: Tooltip position
admin/abstract-widget.php CHANGED
@@ -27,6 +27,6 @@ abstract class Brizy_Admin_AbstractWidget {
27
  throw new Exception( 'You should return an Id for the widget' );
28
  }
29
 
30
- return Brizy_Editor::get()->get_slug() . '_' . $id;
31
  }
32
- }
27
  throw new Exception( 'You should return an Id for the widget' );
28
  }
29
 
30
+ return Brizy_Editor::get_slug() . '_' . $id;
31
  }
32
+ }
admin/blocks/api.php CHANGED
@@ -11,18 +11,18 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
11
 
12
  const nonce = 'brizy-api';
13
 
14
- const GET_GLOBAL_BLOCKS_ACTION = 'brizy-get-global-blocks';
15
- const GET_SAVED_BLOCKS_ACTION = 'brizy-get-saved-blocks';
16
-
17
- const CREATE_GLOBAL_BLOCK_ACTION = 'brizy-create-global-block';
18
- const CREATE_SAVED_BLOCK_ACTION = 'brizy-create-saved-block';
19
-
20
- const UPDATE_GLOBAL_BLOCK_ACTION = 'brizy-update-global-block';
21
- const UPDATE_SAVED_BLOCK_ACTION = 'brizy-saved-global-block';
22
- const DELETE_GLOBAL_BLOCK_ACTION = 'brizy-delete-global-block';
23
-
24
- const DELETE_SAVED_BLOCK_ACTION = 'brizy-delete-saved-block';
25
- const UPDATE_BLOCK_POSITIONS_ACTION = 'brizy-update-block-positions';
26
 
27
  /**
28
  * @var Brizy_Admin_Rules_Manager
@@ -58,38 +58,30 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
58
  }
59
 
60
  protected function initializeApiActions() {
61
- add_action( 'wp_ajax_' . self::GET_GLOBAL_BLOCKS_ACTION, array( $this, 'actionGetGlobalBlocks' ) );
62
- add_action( 'wp_ajax_' . self::GET_SAVED_BLOCKS_ACTION, array( $this, 'actionGetSavedBlocks' ) );
63
- add_action( 'wp_ajax_' . self::CREATE_GLOBAL_BLOCK_ACTION, array( $this, 'actionCreateGlobalBlock' ) );
64
- add_action( 'wp_ajax_' . self::UPDATE_GLOBAL_BLOCK_ACTION, array( $this, 'actionUpdateGlobalBlock' ) );
65
- add_action( 'wp_ajax_' . self::UPDATE_SAVED_BLOCK_ACTION, array( $this, 'actionUpdateSavedBlock' ) );
66
- add_action( 'wp_ajax_' . self::DELETE_GLOBAL_BLOCK_ACTION, array( $this, 'actionDeleteGlobalBlock' ) );
67
- add_action( 'wp_ajax_' . self::CREATE_SAVED_BLOCK_ACTION, array( $this, 'actionCreateSavedBlock' ) );
68
- add_action( 'wp_ajax_' . self::DELETE_SAVED_BLOCK_ACTION, array( $this, 'actionDeleteSavedBlock' ) );
69
- add_action( 'wp_ajax_' . self::UPDATE_BLOCK_POSITIONS_ACTION, array( $this, 'actionUpdateBlockPositions' ) );
 
 
 
 
 
70
  }
71
 
72
  public function actionGetGlobalBlocks() {
73
  $this->verifyNonce( self::nonce );
74
 
75
  try {
76
- $blocks = Brizy_Editor_Block::getBlocksByType( Brizy_Admin_Blocks_Main::CP_GLOBAL );
77
-
78
- $this->success( $blocks );
79
-
80
- } catch ( Exception $exception ) {
81
- $this->error( 400, $exception->getMessage() );
82
- }
83
- }
84
-
85
- public function actionGetSavedBlocks() {
86
- $this->verifyNonce( self::nonce );
87
-
88
- try {
89
- $blocks = Brizy_Editor_Block::getBlocksByType( Brizy_Admin_Blocks_Main::CP_SAVED );
90
-
91
- $this->success( $blocks );
92
-
93
  } catch ( Exception $exception ) {
94
  $this->error( 400, $exception->getMessage() );
95
  }
@@ -105,12 +97,25 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
105
  if ( ! $this->param( 'data' ) ) {
106
  $this->error( 400, 'Invalid data' );
107
  }
 
 
 
 
108
 
109
  try {
110
  $editorData = stripslashes( $this->param( 'data' ) );
111
  $position = stripslashes( $this->param( 'position' ) );
 
 
 
 
 
 
112
 
113
- $block = $this->createBlock( $this->param( 'uid' ), 'publish', Brizy_Admin_Blocks_Main::CP_GLOBAL );
 
 
 
114
  $block->set_editor_data( $editorData );
115
  $block->set_needs_compile( true );
116
 
@@ -119,13 +124,14 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
119
  }
120
 
121
  // rules
122
- $rulesData = stripslashes( $this->param( 'rules' ) );
123
- $rules = $this->ruleManager->createRulesFromJson( $rulesData, Brizy_Admin_Blocks_Main::CP_GLOBAL );
124
-
125
- $this->ruleManager->addRules( $block->getWpPostId(), $rules );
126
 
127
  $block->save();
128
 
 
129
  do_action( 'brizy_global_data_updated' );
130
 
131
  $this->success( $block->createResponse() );
@@ -135,32 +141,73 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
135
  }
136
  }
137
 
138
- public function actionCreateSavedBlock() {
139
  $this->verifyNonce( self::nonce );
140
 
141
- if ( ! $this->param( 'uid' ) ) {
142
- $this->error( 400, 'Invalid uid' );
143
- }
144
 
145
- if ( ! $this->param( 'data' ) ) {
146
- $this->error( 400, 'Invalid data' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  }
148
 
 
 
 
 
 
 
149
 
150
- try {
151
- $data = stripslashes( $this->param( 'data' ) );
152
- $block = $this->createBlock( $this->param( 'uid' ), 'publish', Brizy_Admin_Blocks_Main::CP_SAVED );
153
- $block->set_editor_data( $data );
154
- $block->set_needs_compile( true );
155
- $block->save();
156
 
157
- do_action( 'brizy_global_data_updated' );
 
 
 
158
 
159
- $this->success( $block->createResponse() );
 
 
160
 
161
- } catch ( Exception $exception ) {
162
- $this->error( 400, $exception->getMessage() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
 
164
  }
165
 
166
  public function actionUpdateGlobalBlock() {
@@ -176,37 +223,252 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
176
  $this->error( '400', 'Invalid data' );
177
  }
178
 
 
 
 
 
179
  if ( $this->param( 'dataVersion' ) === null ) {
180
  $this->error( '400', 'Invalid data version' );
181
  }
182
 
 
183
 
184
- $block = $this->getBlock( $this->param( 'uid' ), Brizy_Admin_Blocks_Main::CP_GLOBAL );
 
 
 
 
 
 
 
 
 
185
  /**
186
  * @var Brizy_Editor_Block $block ;
187
  */
 
188
  $block->set_editor_data( stripslashes( $this->param( 'data' ) ) );
189
- $block->setDataVersion( $this->param( 'dataVersion' ) );
190
- $position = stripslashes( $this->param( 'position' ) );
191
-
192
- if ( $position ) {
193
- $block->setPosition( Brizy_Editor_BlockPosition::createFromSerializedData( get_object_vars( json_decode( $position ) ) ) );
194
- }
195
-
196
- // rules
197
- $rulesData = stripslashes( $this->param( 'rules' ) );
198
- $rules = $this->ruleManager->createRulesFromJson( $rulesData, Brizy_Admin_Blocks_Main::CP_GLOBAL );
199
-
200
- $this->ruleManager->setRules( $block->getWpPostId(), $rules );
201
 
202
  if ( (int) $this->param( 'is_autosave' ) ) {
203
  $block->save( 1 );
204
  } else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  $block->save( 0 );
 
 
206
  do_action( 'brizy_global_data_updated' );
207
  }
208
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  $this->success( $block->createResponse() );
 
210
  } catch ( Exception $exception ) {
211
  $this->error( 400, $exception->getMessage() );
212
  }
@@ -228,7 +490,16 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
228
  $this->error( '400', 'Invalid data version' );
229
  }
230
 
231
- $block = $this->getBlock( $this->param( 'uid' ), Brizy_Admin_Blocks_Main::CP_SAVED );
 
 
 
 
 
 
 
 
 
232
 
233
  if ( ! $block instanceof Brizy_Editor_Block ) {
234
  $this->error( '404', 'Block not found' );
@@ -236,48 +507,49 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
236
 
237
  $block->set_editor_data( stripslashes( $this->param( 'data' ) ) );
238
  $block->setDataVersion( $this->param( 'dataVersion' ) );
 
 
239
 
240
  if ( (int) $this->param( 'is_autosave' ) ) {
241
  $block->save( 1 );
242
  } else {
243
  $block->save();
 
244
  do_action( 'brizy_global_data_updated' );
245
  }
246
 
247
- $this->success( $block->createResponse() );
 
 
248
  } catch ( Exception $exception ) {
249
  $this->error( 400, $exception->getMessage() );
250
  }
251
  }
252
 
253
- public function actionDeleteGlobalBlock() {
254
  $this->verifyNonce( self::nonce );
255
 
256
  if ( ! $this->param( 'uid' ) ) {
257
  $this->error( '400', 'Invalid uid' );
258
  }
259
 
260
- if ( $this->deleteBlock( $this->param( 'uid' ), Brizy_Admin_Blocks_Main::CP_GLOBAL ) ) {
261
- do_action( 'brizy_global_data_updated' );
262
- $this->success( null );
263
- }
264
-
265
- $this->error( '404', 'Block not found' );
266
- }
267
-
268
- public function actionDeleteSavedBlock() {
269
- $this->verifyNonce( self::nonce );
270
 
271
- if ( ! $this->param( 'uid' ) ) {
272
- $this->error( '400', 'Invalid uid' );
273
- }
274
 
275
- if ( $this->deleteBlock( $this->param( 'uid' ), Brizy_Admin_Blocks_Main::CP_SAVED ) ) {
276
- do_action( 'brizy_global_data_updated' );
277
- $this->success( null );
 
 
 
 
 
278
  }
279
 
280
- $this->error( '404', 'Block not found' );
281
  }
282
 
283
  public function actionUpdateBlockPositions() {
@@ -286,24 +558,44 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
286
 
287
  $this->verifyNonce( self::nonce );
288
 
289
- if ( $this->param( 'dataVersion' ) === null ) {
290
- $this->error( '400', 'Invalid data version' );
291
- }
292
 
293
- $positions = file_get_contents( "php://input" );
294
- $positionObject = json_decode( $positions );
 
 
 
295
 
296
- $wpdb->query( 'START TRANSACTION ' );
297
 
298
  try {
299
 
300
- foreach ( get_object_vars( $positionObject ) as $uid => $position ) {
 
 
 
 
 
 
 
301
 
302
- $positionObj = new Brizy_Editor_BlockPosition( $position->align, $position->index );
 
 
 
 
 
 
303
 
304
- $block = $this->getBlock( $uid, Brizy_Admin_Blocks_Main::CP_GLOBAL );
305
  $block->setPosition( $positionObj );
306
- $block->save();
 
 
 
 
 
 
 
307
  }
308
 
309
  do_action( 'brizy_global_data_updated' );
@@ -312,11 +604,10 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
312
 
313
  } catch ( Exception $e ) {
314
  $wpdb->query( 'ROLLBACK' );
315
-
316
  $this->error( '400', 'Unable to save block positions' );
317
  }
318
 
319
- $this->success( json_encode( $positionObject ) );
320
  }
321
 
322
 
@@ -371,7 +662,11 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
371
  private function getBlock( $id, $postType ) {
372
  $postId = $this->getBlockIdByUidAndBlockType( $id, $postType );
373
 
374
- return Brizy_Editor_Block::get( $postId );
 
 
 
 
375
  }
376
 
377
  /**
@@ -379,7 +674,7 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
379
  * @param $status
380
  * @param $type
381
  *
382
- * @return Brizy_Editor_Block|null
383
  * @throws Brizy_Editor_Exceptions_NotFound
384
  */
385
  private function createBlock( $uid, $status, $type ) {
@@ -403,19 +698,18 @@ class Brizy_Admin_Blocks_Api extends Brizy_Admin_AbstractApi {
403
  throw new Exception( 'Unable to create block' );
404
  }
405
 
406
-
407
  /**
408
  * @param $postUid
409
  * @param $postType
410
  *
411
  * @return false|WP_Post|null
412
  */
413
- private function deleteBlock( $postUid, $postType ) {
414
 
415
- $postId = $this->getBlockIdByUidAndBlockType( $postUid, $postType );
416
-
417
- return wp_delete_post( $postId );
418
- }
419
 
 
420
 
421
- }
 
 
11
 
12
  const nonce = 'brizy-api';
13
 
14
+ const GET_SAVED_BLOCK_ACTION = '-get-saved-block';
15
+ const GET_GLOBAL_BLOCKS_ACTION = '-get-global-blocks';
16
+ const GET_SAVED_BLOCKS_ACTION = '-get-saved-blocks';
17
+ const CREATE_GLOBAL_BLOCK_ACTION = '-create-global-block';
18
+ const CREATE_GLOBAL_BLOCKS_ACTION = '-create-global-blocks';
19
+ const CREATE_SAVED_BLOCK_ACTION = '-create-saved-block';
20
+ const UPDATE_GLOBAL_BLOCK_ACTION = '-update-global-block';
21
+ const UPDATE_GLOBAL_BLOCKS_ACTION = '-update-global-blocks';
22
+ const UPDATE_SAVED_BLOCK_ACTION = '-saved-global-block';
23
+ const DELETE_GLOBAL_BLOCK_ACTION = '-delete-global-block';
24
+ const DELETE_SAVED_BLOCK_ACTION = '-delete-saved-block';
25
+ const UPDATE_POSITIONS_ACTION = '-update-block-positions';
26
 
27
  /**
28
  * @var Brizy_Admin_Rules_Manager
58
  }
59
 
60
  protected function initializeApiActions() {
61
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
62
+ add_action( $pref . self::GET_GLOBAL_BLOCKS_ACTION, array( $this, 'actionGetGlobalBlocks' ) );
63
+ add_action( $pref . self::CREATE_GLOBAL_BLOCK_ACTION, array( $this, 'actionCreateGlobalBlock' ) );
64
+ add_action( $pref . self::CREATE_GLOBAL_BLOCKS_ACTION, array( $this, 'actionCreateGlobalBlocks' ) );
65
+ add_action( $pref . self::UPDATE_GLOBAL_BLOCK_ACTION, array( $this, 'actionUpdateGlobalBlock' ) );
66
+ add_action( $pref . self::UPDATE_GLOBAL_BLOCKS_ACTION, array( $this, 'actionUpdateGlobalBlocks' ) );
67
+ add_action( $pref . self::DELETE_GLOBAL_BLOCK_ACTION, array( $this, 'actionDeleteGlobalBlock' ) );
68
+
69
+ add_action( $pref . self::GET_SAVED_BLOCKS_ACTION, array( $this, 'actionGetSavedBlocks' ) );
70
+ add_action( $pref . self::GET_SAVED_BLOCK_ACTION, array( $this, 'actionGetSavedBlockByUid' ) );
71
+ add_action( $pref . self::UPDATE_SAVED_BLOCK_ACTION, array( $this, 'actionUpdateSavedBlock' ) );
72
+ add_action( $pref . self::CREATE_SAVED_BLOCK_ACTION, array( $this, 'actionCreateSavedBlock' ) );
73
+ add_action( $pref . self::DELETE_SAVED_BLOCK_ACTION, array( $this, 'actionDeleteSavedBlock' ) );
74
+ add_action( $pref . self::UPDATE_POSITIONS_ACTION, array( $this, 'actionUpdateBlockPositions' ) );
75
  }
76
 
77
  public function actionGetGlobalBlocks() {
78
  $this->verifyNonce( self::nonce );
79
 
80
  try {
81
+ $fields = $this->param( 'fields' ) ? $this->param( 'fields' ) : [];
82
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
83
+ $blocks = $bockManager->getEntities( [] );
84
+ $this->success( $bockManager->createResponseForEntities( $blocks, $fields ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  } catch ( Exception $exception ) {
86
  $this->error( 400, $exception->getMessage() );
87
  }
97
  if ( ! $this->param( 'data' ) ) {
98
  $this->error( 400, 'Invalid data' );
99
  }
100
+ if ( ! $this->param( 'meta' ) ) {
101
+ $this->error( 400, 'Invalid meta data' );
102
+ }
103
+
104
 
105
  try {
106
  $editorData = stripslashes( $this->param( 'data' ) );
107
  $position = stripslashes( $this->param( 'position' ) );
108
+ $status = stripslashes( $this->param( 'status' ) );
109
+ $rulesData = stripslashes( $this->param( 'rules' ) );
110
+
111
+ if ( ! in_array( $status, [ 'publish', 'draft' ] ) ) {
112
+ $this->error( 400, "Invalid status" );
113
+ }
114
 
115
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
116
+
117
+ $block = $bockManager->createEntity( $this->param( 'uid' ), $status );
118
+ $block->setMeta( stripslashes( $this->param( 'meta' ) ) );
119
  $block->set_editor_data( $editorData );
120
  $block->set_needs_compile( true );
121
 
124
  }
125
 
126
  // rules
127
+ if ( $rulesData ) {
128
+ $rules = $this->ruleManager->createRulesFromJson( $rulesData, Brizy_Admin_Blocks_Main::CP_GLOBAL );
129
+ $this->ruleManager->addRules( $block->getWpPostId(), $rules );
130
+ }
131
 
132
  $block->save();
133
 
134
+ do_action( 'brizy_global_block_created', $block );
135
  do_action( 'brizy_global_data_updated' );
136
 
137
  $this->success( $block->createResponse() );
141
  }
142
  }
143
 
144
+ public function actionCreateGlobalBlocks() {
145
  $this->verifyNonce( self::nonce );
146
 
147
+ $blocks = [];
 
 
148
 
149
+ // validation sections
150
+ foreach ( $this->param( 'uid' ) as $i => $uid ) {
151
+ $status = stripslashes( $this->param( 'status' )[ $i ] );
152
+
153
+ if ( ! $this->param( 'uid' )[ $i ] ) {
154
+ $this->error( 400, 'Invalid uid' );
155
+ }
156
+
157
+ if ( ! $this->param( 'data' )[ $i ] ) {
158
+ $this->error( 400, 'Invalid data' );
159
+ }
160
+ if ( ! $this->param( 'meta' )[ $i ] ) {
161
+ $this->error( 400, 'Invalid meta data' );
162
+ }
163
+
164
+ if ( ! in_array( $status, [ 'publish', 'draft' ] ) ) {
165
+ $this->error( 400, "Invalid status for block" );
166
+ }
167
  }
168
 
169
+ foreach ( $this->param( 'uid' ) as $i => $uid ) {
170
+ try {
171
+ $editorData = stripslashes( $this->param( 'data' )[ $i ] );
172
+ $position = stripslashes( $this->param( 'position' )[ $i ] );
173
+ $status = stripslashes( $this->param( 'status' )[ $i ] );
174
+ $rulesData = stripslashes( $this->param( 'rules' )[ $i ] );
175
 
176
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
 
 
 
 
 
177
 
178
+ $block = $bockManager->createEntity( $this->param( 'uid' )[ $i ], $status );
179
+ $block->setMeta( stripslashes( $this->param( 'meta' )[ $i ] ) );
180
+ $block->set_editor_data( $editorData );
181
+ $block->set_needs_compile( true );
182
 
183
+ if ( $position ) {
184
+ $block->setPosition( Brizy_Editor_BlockPosition::createFromSerializedData( get_object_vars( json_decode( $position ) ) ) );
185
+ }
186
 
187
+ // rules
188
+ if ( $rulesData ) {
189
+ $rules = $this->ruleManager->createRulesFromJson( $rulesData, Brizy_Admin_Blocks_Main::CP_GLOBAL );
190
+ $this->ruleManager->addRules( $block->getWpPostId(), $rules );
191
+ }
192
+
193
+ $block->save();
194
+
195
+ $blocks[] = $block;
196
+
197
+ do_action( 'brizy_global_block_created', $block );
198
+
199
+ } catch ( Exception $exception ) {
200
+ $this->error( 400, $exception->getMessage() );
201
+ }
202
+ }
203
+
204
+ do_action( 'brizy_global_data_updated' );
205
+
206
+ $response = [];
207
+ foreach ( $blocks as $block ) {
208
+ $response[] = $block->createResponse();
209
  }
210
+ $this->success( $response );
211
  }
212
 
213
  public function actionUpdateGlobalBlock() {
223
  $this->error( '400', 'Invalid data' );
224
  }
225
 
226
+ if ( ! $this->param( 'meta' ) ) {
227
+ $this->error( 400, 'Invalid meta data' );
228
+ }
229
+
230
  if ( $this->param( 'dataVersion' ) === null ) {
231
  $this->error( '400', 'Invalid data version' );
232
  }
233
 
234
+ $status = stripslashes( $this->param( 'status' ) );
235
 
236
+ if ( ! in_array( $status, [ 'publish', 'draft' ] ) ) {
237
+ $this->error( 400, "Invalid post type" );
238
+ }
239
+
240
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
241
+ $block = $bockManager->getEntity( $this->param( 'uid' ) );
242
+
243
+ if ( ! $block ) {
244
+ $this->error( 400, "Global block not found" );
245
+ }
246
  /**
247
  * @var Brizy_Editor_Block $block ;
248
  */
249
+ $block->setMeta( stripslashes( $this->param( 'meta' ) ) );
250
  $block->set_editor_data( stripslashes( $this->param( 'data' ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
251
 
252
  if ( (int) $this->param( 'is_autosave' ) ) {
253
  $block->save( 1 );
254
  } else {
255
+
256
+ $block->setDataVersion( $this->param( 'dataVersion' ) );
257
+ $block->getWpPost()->post_status = $status;
258
+
259
+ // position
260
+ $position = stripslashes( $this->param( 'position' ) );
261
+ if ( $position ) {
262
+ $block->setPosition( Brizy_Editor_BlockPosition::createFromSerializedData( get_object_vars( json_decode( $position ) ) ) );
263
+ }
264
+
265
+ // rules
266
+ $rulesData = stripslashes( $this->param( 'rules' ) );
267
+ if ( $rulesData ) {
268
+ $rules = $this->ruleManager->createRulesFromJson( $rulesData, Brizy_Admin_Blocks_Main::CP_GLOBAL );
269
+ $this->ruleManager->setRules( $block->getWpPostId(), $rules );
270
+ }
271
+
272
  $block->save( 0 );
273
+
274
+ do_action( 'brizy_global_block_updated', $block );
275
  do_action( 'brizy_global_data_updated' );
276
  }
277
 
278
+ Brizy_Editor_Block::cleanClassCache();
279
+
280
+ $this->success( Brizy_Editor_Block::get( $block->getWpPostId() )->createResponse() );
281
+ } catch ( Exception $exception ) {
282
+ $this->error( 400, $exception->getMessage() );
283
+ }
284
+ }
285
+
286
+ public function actionUpdateGlobalBlocks() {
287
+ //$this->verifyNonce( self::nonce );
288
+ try {
289
+
290
+ foreach ( $this->param( 'uid' ) as $i => $uid ) {
291
+
292
+ if ( ! $this->param( 'uid' )[ $i ] ) {
293
+ $this->error( '400', 'Invalid uid' );
294
+ }
295
+
296
+ // if ( ! $this->param( 'data' )[ $i ] ) {
297
+ // $this->error( '400', 'Invalid data' );
298
+ // }
299
+
300
+ if ( ! $this->param( 'meta' )[ $i ] ) {
301
+ $this->error( 400, 'Invalid meta data' );
302
+ }
303
+
304
+ if ( $this->param( 'dataVersion' )[ $i ] === null ) {
305
+ $this->error( '400', 'Invalid data version' );
306
+ }
307
+
308
+ $status = stripslashes( $this->param( 'status' )[ $i ] );
309
+
310
+ if ( ! in_array( $status, [ 'publish', 'draft' ] ) ) {
311
+ $this->error( 400, "Invalid post type" );
312
+ }
313
+ }
314
+
315
+
316
+ $blocks = [];
317
+
318
+ foreach ( $this->param( 'uid' ) as $i => $uid ) {
319
+ $status = stripslashes( $this->param( 'status' )[ $i ] );
320
+
321
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
322
+ $block = $bockManager->getEntity( $this->param( 'uid' )[ $i ] );
323
+
324
+ if ( ! $block ) {
325
+ $this->error( 400, "Global block not found" );
326
+ }
327
+ /**
328
+ * @var Brizy_Editor_Block $block ;
329
+ */
330
+ $block->setMeta( stripslashes( $this->param( 'meta' )[ $i ] ) );
331
+
332
+ if(isset($this->param( 'data' )[ $i ]) && !empty($this->param( 'data' )[ $i ]))
333
+ {
334
+ $block->set_editor_data( stripslashes( $this->param( 'data' )[ $i ] ) );
335
+ }
336
+
337
+ if ( (int) $this->param( 'is_autosave' )[ $i ] ) {
338
+ $block->save( 1 );
339
+ } else {
340
+
341
+ $block->setDataVersion( $this->param( 'dataVersion' )[ $i ] );
342
+ $block->getWpPost()->post_status = $status;
343
+
344
+ // position
345
+ $position = stripslashes( $this->param( 'position' )[ $i ] );
346
+ if ( $position ) {
347
+ $block->setPosition( Brizy_Editor_BlockPosition::createFromSerializedData( get_object_vars( json_decode( $position ) ) ) );
348
+ }
349
+
350
+ // rules
351
+ $rulesData = stripslashes( $this->param( 'rules' )[ $i ] );
352
+ if ( $rulesData ) {
353
+ $rules = $this->ruleManager->createRulesFromJson( $rulesData, Brizy_Admin_Blocks_Main::CP_GLOBAL );
354
+ $this->ruleManager->setRules( $block->getWpPostId(), $rules );
355
+ }
356
+
357
+ $block->save( 0 );
358
+
359
+ do_action( 'brizy_global_block_updated', $block );
360
+ $blocks[] = $block;
361
+ }
362
+
363
+ }
364
+ do_action( 'brizy_global_data_updated' );
365
+ Brizy_Editor_Block::cleanClassCache();
366
+
367
+ $response = [];
368
+ foreach ( $blocks as $block ) {
369
+ $response[] = Brizy_Editor_Block::get( $block->getWpPostId() )->createResponse();
370
+ }
371
+ $this->success( $response );
372
+
373
+
374
+ } catch ( Exception $exception ) {
375
+ $this->error( 400, $exception->getMessage() );
376
+ }
377
+ }
378
+
379
+ public function actionDeleteGlobalBlock() {
380
+ $this->verifyNonce( self::nonce );
381
+
382
+ if ( ! $this->param( 'uid' ) ) {
383
+ $this->error( '400', 'Invalid uid' );
384
+ }
385
+
386
+ $block = $this->getBlock( $this->param( 'uid' ), Brizy_Admin_Blocks_Main::CP_GLOBAL );
387
+
388
+ if ( $block ) {
389
+ do_action( 'brizy_global_block_deleted', $block );
390
+ do_action( 'brizy_global_data_deleted' );
391
+ $this->deleteBlock( $block, Brizy_Admin_Blocks_Main::CP_GLOBAL );
392
+ $this->success( null );
393
+ }
394
+
395
+ $this->error( '404', 'Block not found' );
396
+ }
397
+
398
+ public function actionGetSavedBlocks() {
399
+ $this->verifyNonce( self::nonce );
400
+
401
+ try {
402
+ $fields = $this->param( 'fields' ) ? $this->param( 'fields' ) : [];
403
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_SAVED );
404
+ $blocks = $bockManager->getEntities( [] );
405
+ $blocks = apply_filters( 'brizy_get_saved_blocks', $bockManager->createResponseForEntities( $blocks, $fields ), $fields, $bockManager );
406
+ $this->success( $blocks );
407
+ } catch ( Exception $exception ) {
408
+ $this->error( 400, $exception->getMessage() );
409
+ }
410
+ }
411
+
412
+ public function actionGetSavedBlockByUid() {
413
+ $this->verifyNonce( self::nonce );
414
+
415
+ if ( ! $this->param( 'uid' ) ) {
416
+ $this->error( 400, 'Invalid uid' );
417
+ }
418
+
419
+ $fields = $this->param( 'fields' ) ? $this->param( 'fields' ) : [];
420
+
421
+ try {
422
+
423
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_SAVED );
424
+ $block = $bockManager->getEntity( $this->param( 'uid' ) );
425
+
426
+ $block = apply_filters( 'brizy_get_saved_block', $block, $this->param( 'uid' ), $bockManager );
427
+
428
+ if ( ! $block ) {
429
+ $this->error( 404, 'Block not found' );
430
+ }
431
+
432
+ $this->success( $block->createResponse( $fields ) );
433
+ } catch ( Exception $exception ) {
434
+ $this->error( 400, $exception->getMessage() );
435
+ }
436
+ }
437
+
438
+ public function actionCreateSavedBlock() {
439
+ $this->verifyNonce( self::nonce );
440
+
441
+ if ( ! $this->param( 'uid' ) ) {
442
+ $this->error( 400, 'Invalid uid' );
443
+ }
444
+
445
+ if ( ! $this->param( 'data' ) ) {
446
+ $this->error( 400, 'Invalid data' );
447
+ }
448
+
449
+ if ( ! $this->param( 'meta' ) ) {
450
+ $this->error( 400, 'Invalid meta data' );
451
+ }
452
+
453
+ if ( ! $this->param( 'media' ) ) {
454
+ $this->error( 400, 'Invalid media data provided' );
455
+ }
456
+
457
+ try {
458
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_SAVED );
459
+ $block = $bockManager->createEntity( $this->param( 'uid' ) );
460
+ $block->setMedia( stripslashes( $this->param( 'media' ) ) );
461
+ $block->setMeta( stripslashes( $this->param( 'meta' ) ) );
462
+ $block->set_editor_data( stripslashes( $this->param( 'data' ) ) );
463
+ $block->set_needs_compile( true );
464
+ $block->setCloudUpdateRequired( true );
465
+ $block->save();
466
+
467
+ do_action( 'brizy_saved_block_created', $block );
468
+ do_action( 'brizy_global_data_updated' );
469
+
470
  $this->success( $block->createResponse() );
471
+
472
  } catch ( Exception $exception ) {
473
  $this->error( 400, $exception->getMessage() );
474
  }
490
  $this->error( '400', 'Invalid data version' );
491
  }
492
 
493
+ if ( ! $this->param( 'meta' ) ) {
494
+ $this->error( 400, 'Invalid meta data' );
495
+ }
496
+
497
+ if ( ! $this->param( 'media' ) ) {
498
+ $this->error( 400, 'Invalid media data provided' );
499
+ }
500
+
501
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_SAVED );
502
+ $block = $bockManager->getEntity( $this->param( 'uid' ) );
503
 
504
  if ( ! $block instanceof Brizy_Editor_Block ) {
505
  $this->error( '404', 'Block not found' );
507
 
508
  $block->set_editor_data( stripslashes( $this->param( 'data' ) ) );
509
  $block->setDataVersion( $this->param( 'dataVersion' ) );
510
+ $block->setMedia( stripslashes( $this->param( 'media' ) ) );
511
+ $block->setMeta( stripslashes( $this->param( 'meta' ) ) );
512
 
513
  if ( (int) $this->param( 'is_autosave' ) ) {
514
  $block->save( 1 );
515
  } else {
516
  $block->save();
517
+ do_action( 'brizy_saved_block_updated', $block );
518
  do_action( 'brizy_global_data_updated' );
519
  }
520
 
521
+ Brizy_Editor_Block::cleanClassCache();
522
+
523
+ $this->success( Brizy_Editor_Block::get( $block->getWpPostId() )->createResponse() );
524
  } catch ( Exception $exception ) {
525
  $this->error( 400, $exception->getMessage() );
526
  }
527
  }
528
 
529
+ public function actionDeleteSavedBlock() {
530
  $this->verifyNonce( self::nonce );
531
 
532
  if ( ! $this->param( 'uid' ) ) {
533
  $this->error( '400', 'Invalid uid' );
534
  }
535
 
536
+ try {
537
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_SAVED );
538
+ $block = $bockManager->getEntity( $this->param( 'uid' ) );
 
 
 
 
 
 
 
539
 
540
+ do_action( 'brizy_saved_block_delete', $this->param( 'uid' ) );
 
 
541
 
542
+ if ( $block ) {
543
+ do_action( 'brizy_global_data_deleted' );
544
+ $bockManager->deleteEntity( $block );
545
+ } else {
546
+ $this->error( '404', 'Block not found' );
547
+ }
548
+ } catch ( Exception $e ) {
549
+ $this->error( '500', 'Unable to delete block' );
550
  }
551
 
552
+ $this->success( null );
553
  }
554
 
555
  public function actionUpdateBlockPositions() {
558
 
559
  $this->verifyNonce( self::nonce );
560
 
561
+ $data = file_get_contents( "php://input" );
 
 
562
 
563
+ $dataObject = json_decode( $data );
564
+
565
+ if ( ! $dataObject ) {
566
+ $this->error( 400, 'Invalid position data provided' );
567
+ }
568
 
569
+ $wpdb->query( 'START TRANSACTION' );
570
 
571
  try {
572
 
573
+ foreach ( get_object_vars( $dataObject ) as $uid => $position ) {
574
+
575
+ if ( ! ( isset( $position->top ) && isset( $position->bottom ) && isset( $position->align ) ) ) {
576
+ throw new Exception();
577
+ }
578
+
579
+ $positionObj = new Brizy_Editor_BlockPosition( $position->top, $position->bottom, $position->align );
580
+
581
 
582
+ $bockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
583
+
584
+ $block = $bockManager->getEntity( $uid );
585
+
586
+ if ( ! $block ) {
587
+ throw new Exception();
588
+ }
589
 
 
590
  $block->setPosition( $positionObj );
591
+
592
+ if ( $this->param( 'is_autosave' ) == 1 ) {
593
+ $block->save( 1 );
594
+ } else {
595
+ $block->saveStorage();
596
+ }
597
+
598
+ do_action( 'brizy_global_block_updated', $block );
599
  }
600
 
601
  do_action( 'brizy_global_data_updated' );
604
 
605
  } catch ( Exception $e ) {
606
  $wpdb->query( 'ROLLBACK' );
 
607
  $this->error( '400', 'Unable to save block positions' );
608
  }
609
 
610
+ $this->success( json_encode( $dataObject ) );
611
  }
612
 
613
 
662
  private function getBlock( $id, $postType ) {
663
  $postId = $this->getBlockIdByUidAndBlockType( $id, $postType );
664
 
665
+ if ( $postId ) {
666
+ return Brizy_Editor_Block::get( $postId );
667
+ }
668
+
669
+ return null;
670
  }
671
 
672
  /**
674
  * @param $status
675
  * @param $type
676
  *
677
+ * @return Brizy_Editor_Block
678
  * @throws Brizy_Editor_Exceptions_NotFound
679
  */
680
  private function createBlock( $uid, $status, $type ) {
698
  throw new Exception( 'Unable to create block' );
699
  }
700
 
 
701
  /**
702
  * @param $postUid
703
  * @param $postType
704
  *
705
  * @return false|WP_Post|null
706
  */
707
+ private function deleteBlock( Brizy_Editor_Entity $block, $postType ) {
708
 
709
+ if ( $postType === Brizy_Admin_Blocks_Main::CP_SAVED ) {
 
 
 
710
 
711
+ }
712
 
713
+ return wp_delete_post( $block->getWpPostId() );
714
+ }
715
+ }
admin/blocks/main.php CHANGED
@@ -37,15 +37,6 @@ class Brizy_Admin_Blocks_Main {
37
  add_filter( 'brizy_global_data', array( $this, 'populateGlobalData' ) );
38
  }
39
 
40
- static public function registerSupportedPostType() {
41
- add_filter( 'brizy_supported_post_types', function ( $posts ) {
42
- $posts[] = self::CP_SAVED;
43
- $posts[] = self::CP_GLOBAL;
44
-
45
- return $posts;
46
- } );
47
- }
48
-
49
  /**
50
  * Populated the global data for compiler
51
  *
@@ -71,7 +62,12 @@ class Brizy_Admin_Blocks_Main {
71
  foreach ( $blocks as $block ) {
72
  $brizy_editor_block = Brizy_Editor_Block::get( $block );
73
  $uid = $brizy_editor_block->getUid();
74
- $globalData->globalBlocks[ $uid ] = json_decode( $brizy_editor_block->get_editor_data() );
 
 
 
 
 
75
  }
76
 
77
  $blocks = get_posts( array(
@@ -84,20 +80,20 @@ class Brizy_Admin_Blocks_Main {
84
 
85
  foreach ( $blocks as $block ) {
86
  $brizy_editor_block = Brizy_Editor_Block::get( $block );
87
- $globalData->savedBlocks[] = json_decode( $brizy_editor_block->get_editor_data() );
 
 
 
 
88
  }
89
 
90
  return $globalData;
91
  }
92
 
93
- /**
94
- *
95
- */
96
  public function initializeActions() {
97
  Brizy_Admin_Blocks_Api::_init();
98
  }
99
 
100
-
101
  static public function registerCustomPosts() {
102
 
103
  $labels = array(
@@ -143,7 +139,12 @@ class Brizy_Admin_Blocks_Main {
143
  'supports' => array( 'title', 'revisions', 'page-attributes' )
144
  )
145
  );
146
- }
147
 
 
 
 
148
 
 
 
 
149
  }
37
  add_filter( 'brizy_global_data', array( $this, 'populateGlobalData' ) );
38
  }
39
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * Populated the global data for compiler
42
  *
62
  foreach ( $blocks as $block ) {
63
  $brizy_editor_block = Brizy_Editor_Block::get( $block );
64
  $uid = $brizy_editor_block->getUid();
65
+ $block_data = $brizy_editor_block->convertToOptionValue();
66
+ $globalData->globalBlocks[ $uid ] = array(
67
+ 'data' => json_decode( $brizy_editor_block->get_editor_data() ),
68
+ 'position' => $block_data['position'],
69
+ 'rules' => $block_data['rules']
70
+ );
71
  }
72
 
73
  $blocks = get_posts( array(
80
 
81
  foreach ( $blocks as $block ) {
82
  $brizy_editor_block = Brizy_Editor_Block::get( $block );
83
+ $block_data = $brizy_editor_block->convertToOptionValue();
84
+ $globalData->savedBlocks[] = array(
85
+ 'data' => json_decode( $brizy_editor_block->get_editor_data() ),
86
+ 'rules' => $block_data['rules']
87
+ );
88
  }
89
 
90
  return $globalData;
91
  }
92
 
 
 
 
93
  public function initializeActions() {
94
  Brizy_Admin_Blocks_Api::_init();
95
  }
96
 
 
97
  static public function registerCustomPosts() {
98
 
99
  $labels = array(
139
  'supports' => array( 'title', 'revisions', 'page-attributes' )
140
  )
141
  );
 
142
 
143
+ add_filter( 'brizy_supported_post_types', function ( $posts ) {
144
+ $posts[] = self::CP_SAVED;
145
+ $posts[] = self::CP_GLOBAL;
146
 
147
+ return $posts;
148
+ } );
149
+ }
150
  }
admin/blocks/manager.php ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Brizy_Admin_Blocks_Manager extends Brizy_Admin_Entity_AbstractManager {
5
+
6
+ /**
7
+ * @var
8
+ */
9
+ private $blockType;
10
+
11
+ /**
12
+ * Brizy_Admin_Blocks_Manager constructor.
13
+ *
14
+ * @param $type
15
+ *
16
+ * @throws Exception
17
+ */
18
+ public function __construct( $type ) {
19
+ if ( ! in_array( $type, [ Brizy_Admin_Blocks_Main::CP_GLOBAL, Brizy_Admin_Blocks_Main::CP_SAVED ] ) ) {
20
+ throw new Exception();
21
+ }
22
+
23
+ $this->blockType = $type;
24
+ }
25
+
26
+ /**
27
+ * @param $args
28
+ *
29
+ * @return Brizy_Editor_Block[]
30
+ * @throws Exception
31
+ */
32
+ public function getEntities( $args ) {
33
+ return $this->getEntitiesByType( $this->blockType, $args );
34
+ }
35
+
36
+ /**
37
+ * @param $uid
38
+ *
39
+ * @return Brizy_Editor_Block
40
+ * @throws Exception
41
+ */
42
+ public function getEntity( $uid ) {
43
+ return $this->getEntityUidAndType( $uid, $this->blockType );
44
+ }
45
+
46
+ /**
47
+ * @param $uid
48
+ * @param string $status
49
+ *
50
+ * @return mixed|null+
51
+ */
52
+ public function createEntity( $uid, $status = 'publish' ) {
53
+ return $this->createEntityByType( $uid, $this->blockType, $status );
54
+ }
55
+
56
+ /**
57
+ * @param $post
58
+ * @param null $uid
59
+ *
60
+ * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed$uid
61
+ * @throws Exception
62
+ */
63
+ protected function convertWpPostToEntity( $post, $uid = null ) {
64
+ return Brizy_Editor_Block::get( $post, $uid );
65
+ }
66
+
67
+ //=====================================================================
68
+ //=====================================================================
69
+ //=====================================================================
70
+ //=====================================================================
71
+ //=====================================================================
72
+ //=====================================================================
73
+
74
+
75
+ /**
76
+ * @param $type
77
+ * @param $arags
78
+ * @param array $fields
79
+ *
80
+ * @return array
81
+ * @throws Brizy_Editor_Exceptions_NotFound
82
+ */
83
+ public function getAllBlocks( $type, $arags, $fields = array() ) {
84
+
85
+ $blocks = $this->getLocalBlocks( $type, $arags, $fields );
86
+
87
+ try {
88
+ $versions = $this->cloud->getCloudEditorVersions();
89
+
90
+ if ( $this->cloud && $type == Brizy_Admin_Blocks_Main::CP_SAVED && $versions['sync'] == BRIZY_SYNC_VERSION ) {
91
+
92
+ $cloudBlocks = $this->cloud->getBlocks( array( 'fields' => $fields ) );
93
+
94
+ foreach ( (array) $cloudBlocks as $cblock ) {
95
+ $existingBlock = false;
96
+ foreach ( $blocks as $block ) {
97
+ if ( $cblock->uid == $block['uid'] ) {
98
+ $existingBlock = true;
99
+ }
100
+ }
101
+
102
+ if ( ! $existingBlock ) {
103
+
104
+ $localBlock = $this->getLocalBlock( Brizy_Admin_Blocks_Main::CP_SAVED, $cblock->uid );
105
+
106
+ if ( in_array( 'synchronized', $fields ) ) {
107
+ if ( $localBlock ) {
108
+ $cblock->synchronized = $localBlock->isSynchronized( $this->cloud->getBrizyProject()->getCloudAccountId() );
109
+ } else {
110
+ $cblock->synchronized = false;
111
+ }
112
+ }
113
+
114
+ if ( in_array( 'isCloudEntity', $fields ) ) {
115
+ $cblock->isCloudEntity = true;
116
+ }
117
+
118
+ if ( in_array( 'synchronizable', $fields ) ) {
119
+ $cblock->synchronizable = true;
120
+ }
121
+
122
+ $blocks[] = (array) $cblock;
123
+ }
124
+ }
125
+
126
+ }
127
+ } catch ( Exception $e ) {
128
+ // do nothing...
129
+ }
130
+
131
+ return $blocks;
132
+ }
133
+
134
+ public function getBlockByUid( $type, $uid ) {
135
+ $block = $this->getLocalBlock( $type, $uid );
136
+ $versions = $this->cloud->getCloudEditorVersions();
137
+
138
+ if ( ! $block && $this->cloud && $type == Brizy_Admin_Blocks_Main::CP_SAVED && $versions['sync'] == BRIZY_SYNC_VERSION ) {
139
+ $bridge = new Brizy_Admin_Cloud_BlockBridge( $this->cloud );
140
+ $bridge->import( $uid );
141
+
142
+ $block = $this->getLocalBlock( $type, $uid );
143
+ }
144
+
145
+ return $block;
146
+ }
147
+
148
+ /**
149
+ * @param $type
150
+ * @param array $arags
151
+ * @param array $fields
152
+ *
153
+ * @return array
154
+ * @throws Brizy_Editor_Exceptions_NotFound
155
+ */
156
+ public function getLocalBlocks( $type, $arags = array(), $fields = array() ) {
157
+ $filterArgs = array(
158
+ 'post_type' => $type,
159
+ 'posts_per_page' => - 1,
160
+ 'post_status' => 'any',
161
+ 'orderby' => 'ID',
162
+ 'order' => 'ASC',
163
+ );
164
+ $filterArgs = array_merge( $filterArgs, $arags );
165
+
166
+ $wpBlocks = get_posts( $filterArgs );
167
+ $blocks = array();
168
+
169
+ foreach ( $wpBlocks as $wpPost ) {
170
+ $blocks[] = Brizy_Editor_Block::get( $wpPost )->createResponse( $fields );
171
+ }
172
+
173
+ return $blocks;
174
+ }
175
+
176
+ /**
177
+ * @param $type
178
+ * @param $uid
179
+ *
180
+ * @return array|null
181
+ * @throws Brizy_Editor_Exceptions_NotFound
182
+ */
183
+ public function getLocalBlock( $type, $uid ) {
184
+ $blocks = get_posts( array(
185
+ 'post_type' => $type,
186
+ 'post_status' => 'publish',
187
+ 'meta_key' => 'brizy_post_uid',
188
+ 'meta_value' => $uid,
189
+ 'numberposts' => - 1,
190
+ 'orderby' => 'ID',
191
+ 'order' => 'DESC',
192
+ ) );
193
+
194
+ if ( isset( $blocks[0] ) ) {
195
+ $block = \Brizy_Editor_Block::get( $blocks[0] )->createResponse();
196
+ } else {
197
+ $block = null;
198
+ }
199
+
200
+ return $block;
201
+ }
202
+ }
admin/cloud-deprecated.php ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Admin_Cloud {
4
+
5
+ // const PAGE_KEY = 'brizy-cloud';
6
+ // const GET_CLOUD_PROJECTS_ACTION = 'brizy-cloud-projects';
7
+ //
8
+ // static private $subpageId = null;
9
+ //
10
+ // /**
11
+ // * @var Brizy_TwigEngine
12
+ // */
13
+ // private $twig;
14
+
15
+ /**
16
+ * @var Brizy_Editor_Project
17
+ */
18
+ private $project;
19
+
20
+ /**
21
+ * @var Brizy_Admin_Cloud_Client
22
+ */
23
+ private $cloudClient;
24
+
25
+
26
+ /**
27
+ * @return Brizy_Admin_Cloud
28
+ * @throws Exception
29
+ */
30
+ public static function _init() {
31
+
32
+ static $instance;
33
+
34
+ return $instance ? $instance : $instance = new self( Brizy_Editor_Project::get() );
35
+ }
36
+
37
+ /**
38
+ * Brizy_Admin_Cloud constructor.
39
+ *
40
+ * @param Brizy_Editor_Project $project
41
+ *
42
+ * @throws Exception
43
+ */
44
+ private function __construct( Brizy_Editor_Project $project ) {
45
+
46
+ $this->project = $project;
47
+ $this->cloudClient = new Brizy_Admin_Cloud_Client( $project, new WP_Http() );
48
+
49
+ add_action( 'wp_loaded', array( $this, 'initializeActions' ) );
50
+ // add_action( 'wp_ajax_' . self::GET_CLOUD_PROJECTS_ACTION, array( $this, 'actionGetProjects' ) );
51
+ // add_action( 'admin_enqueue_scripts', array( $this, 'registersCloudAssets' ) );
52
+ // add_action( 'admin_menu', array( $this, 'actionRegisterCloutLoginPage' ), 11 );
53
+ //
54
+ // if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
55
+ // add_action( 'admin_init', array( $this, 'handleSubmit' ), 10 );
56
+ // }
57
+ //
58
+ // if ( isset( $_REQUEST['brizy-cloud-logout'] ) ) {
59
+ // add_action( 'admin_init', array( $this, 'handleLogout' ), 10 );
60
+ // }
61
+ //
62
+ // $this->twig = Brizy_TwigEngine::instance( BRIZY_PLUGIN_PATH . "/admin/views/cloud/" );
63
+ }
64
+
65
+ public function initializeActions() {
66
+ Brizy_Admin_Cloud_Api::_init( $this->project );
67
+ }
68
+
69
+ // public function registersCloudAssets() {
70
+ // $current_screen = get_current_screen();
71
+ // if ( $current_screen->id == self::$subpageId ) {
72
+ // wp_enqueue_script(
73
+ // Brizy_Editor::get()->get_slug() . '-cloud-js',
74
+ // Brizy_Editor::get()->get_url( 'admin/static/js/cloud.js' ),
75
+ // array( 'jquery' ),
76
+ // true
77
+ // );
78
+ // }
79
+ // }
80
+ //
81
+ // public function actionGetProjects() {
82
+ // $projects = $this->cloudClient->getProjects( array( 'container' => isset( $_REQUEST['container'] ) ? (int) $_REQUEST['container'] : null ) );
83
+ // wp_send_json_success( $projects );
84
+ // exit;
85
+ // }
86
+ //
87
+ // public function actionRegisterCloutLoginPage() {
88
+ // self::$subpageId = add_submenu_page( Brizy_Admin_Settings::menu_slug(),
89
+ // __( 'Cloud' ),
90
+ // __( 'Cloud' ),
91
+ // 'manage_options',
92
+ // self::menu_slug(),
93
+ // array( $this, 'render' )
94
+ // );
95
+ // }
96
+
97
+ // public function render() {
98
+ //
99
+ // $token = $this->project->getMetaValue( 'brizy-cloud-token' );
100
+ //
101
+ // if ( ! $token ) {
102
+ // $this->handleLoginPage();
103
+ // } else {
104
+ // $this->handleProjectPage();
105
+ // }
106
+ // }
107
+
108
+ // private function handleLoginPage() {
109
+ // $context = array(
110
+ // 'nonce' => wp_nonce_field( 'validate-cloud', '_wpnonce', true, false ),
111
+ // 'username' => '',
112
+ // 'password' => ''
113
+ // );
114
+ //
115
+ // echo $this->twig->render( 'cloud-login.html.twig', $context );
116
+ // }
117
+
118
+ // private function handleProjectPage() {
119
+ // $pageUrl = menu_page_url( self::menu_slug(), false );
120
+ // $containers = $this->cloudClient->getContainers();
121
+ // $project = $this->cloudClient->getProject( $this->project->getMetaValue( 'brizy-cloud-project' ) );
122
+ // $usedContainer = isset( $_REQUEST['container'] ) ? (int) $_REQUEST['container'] : ( isset( $containers[0] ) ? $containers[0]->id : null );
123
+ // $projects = $this->cloudClient->getProjects( array( 'container' => $usedContainer ) );
124
+ // $context = array(
125
+ // 'nonce' => wp_nonce_field( 'validate-cloud', '_wpnonce', true, false ),
126
+ // 'logoutUrl' => add_query_arg( array( 'brizy-cloud-logout' => 1 ), menu_page_url( self::menu_slug(), false ) ),
127
+ // 'containers' => $containers,
128
+ // 'selectedContainer' => is_object( $project ) ? $project->container : ( isset( $containers[0] ) ? array( 'container' => $containers[0]->id ) : null ),
129
+ // 'projects' => $projects,
130
+ // 'pageUrl' => $pageUrl,
131
+ // 'projectObject' => $project
132
+ // );
133
+ //
134
+ // echo $this->twig->render( 'cloud-projects.html.twig', $context );
135
+ // }
136
+
137
+ // public function handleSubmit() {
138
+ // if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'validate-cloud' ) ) {
139
+ // return;
140
+ // }
141
+ // $pageUrl = menu_page_url( self::menu_slug(), false );
142
+ //
143
+ // if ( isset( $_REQUEST['brizy-cloud-login'] ) ) {
144
+ // $this->handleLogin();
145
+ // }
146
+ //
147
+ // if ( isset( $_REQUEST['brizy-cloud-logout'] ) ) {
148
+ // $this->handleLogout();
149
+ // }
150
+ //
151
+ // if ( isset( $_REQUEST['brizy-cloud-use-container'] ) ) {
152
+ // $this->handleUseContainer();
153
+ // }
154
+ //
155
+ // wp_redirect( $pageUrl );
156
+ // exit;
157
+ // }
158
+ //
159
+ // public function handleLogin() {
160
+ // if ( ! isset( $_REQUEST['cloud-username'] ) || ! isset( $_REQUEST['cloud-password'] ) ) {
161
+ // Brizy_Admin_Flash::instance()->add_error( __( 'Please provide the username and password.' ) );
162
+ //
163
+ // return;
164
+ // }
165
+ //
166
+ // try {
167
+ // $token = $this->cloudClient->signIn( $_REQUEST['cloud-username'], $_REQUEST['cloud-password'] );
168
+ //
169
+ // if ( ! $token ) {
170
+ // Brizy_Admin_Flash::instance()->add_error( __( 'Unable to obtain authorization data. Please check your credentials.' ) );
171
+ // } else {
172
+ // $this->project->setCloudToken( $token );
173
+ //
174
+ // $containers = $this->cloudClient->getContainers();
175
+ //
176
+ // if ( isset( $containers[0] ) ) {
177
+ // $this->project->setCloudContainer( $containers[0]->id );
178
+ // }
179
+ //
180
+ // $this->project->save();
181
+ //
182
+ //
183
+ // }
184
+ //
185
+ // } catch ( Exception $e ) {
186
+ // Brizy_Logger::instance()->error( 'Unable to obtain cloud token', $e );
187
+ // Brizy_Admin_Flash::instance()->add_error( __( 'Unable to obtain authorization data. Please check your credentials.' ) );
188
+ // }
189
+ //
190
+ // $pageUrl = menu_page_url( self::menu_slug(), false );
191
+ // wp_redirect( $pageUrl );
192
+ // exit;
193
+ // }
194
+ //
195
+ // public function handleLogout() {
196
+ // $this->project->setCloudToken( null );
197
+ // $this->project->setCloudContainer( null );
198
+ // $this->project->save();
199
+ // }
200
+ //
201
+ // public function handleUseContainer() {
202
+ // if ( ! isset( $_REQUEST['brizy-cloud-use-container'] ) || $_REQUEST['brizy-cloud-use-container'] == '' ) {
203
+ // Brizy_Admin_Flash::instance()->add_error( __( 'Please provide the container id' ) );
204
+ //
205
+ // return;
206
+ // }
207
+ //
208
+ // $projectId = $_REQUEST['brizy-cloud-use-container'];
209
+ //
210
+ // if ( $projectId ) {
211
+ // $this->project->setCloudContainer( $projectId );
212
+ // Brizy_Admin_Flash::instance()->add_success( __( 'Success' ) );
213
+ // } else {
214
+ // $this->project->removeMetaValue( 'cloudContainer' );
215
+ // }
216
+ //
217
+ // $this->project->save();
218
+ //
219
+ // $pageUrl = menu_page_url( self::menu_slug(), false );
220
+ // wp_redirect( $pageUrl );
221
+ // exit;
222
+ // }
223
+ //
224
+ // /**
225
+ // * @return string
226
+ // */
227
+ // public function menu_slug() {
228
+ // return self::PAGE_KEY;
229
+ // }
230
+ //
231
+ // /**
232
+ // * @return bool
233
+ // */
234
+ // public function isLoggedIn() {
235
+ // return ! ! $this->project->getCloudToken();
236
+ // }
237
+ }
admin/cloud.php ADDED
@@ -0,0 +1,371 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Admin_Cloud {
4
+
5
+ /**
6
+ * @var self
7
+ */
8
+ static $instance;
9
+
10
+ /**
11
+ * @var Brizy_Editor_Project
12
+ */
13
+ private $project;
14
+
15
+ /**
16
+ * @var Brizy_Admin_Cloud_Client
17
+ */
18
+ private $cloudClient;
19
+
20
+ /**
21
+ * @var Brizy_Admin_Cloud_BlockBridge
22
+ */
23
+ private $blockBridge;
24
+
25
+ /**
26
+ * @var Brizy_Admin_Cloud_LayoutBridge
27
+ */
28
+ private $layoutBridge;
29
+
30
+ /**
31
+ * @param Brizy_Editor_Project|null $project
32
+ * @param Brizy_Admin_Cloud_Client|null $cloudClient
33
+ *
34
+ * @return Brizy_Admin_Cloud
35
+ * @throws Exception
36
+ */
37
+ public static function _init( Brizy_Editor_Project $project = null, Brizy_Admin_Cloud_Client $cloudClient = null ) {
38
+
39
+ if ( ! $project ) {
40
+ $project = Brizy_Editor_Project::get();
41
+ }
42
+
43
+ if ( ! $cloudClient ) {
44
+ $cloudClient = new Brizy_Admin_Cloud_Client( Brizy_Editor_Project::get(), new WP_Http() );
45
+ }
46
+
47
+
48
+ return self::$instance ? self::$instance : ( self::$instance = new self( $project, $cloudClient ) );
49
+ }
50
+
51
+ /**
52
+ * Brizy_Admin_Cloud constructor.
53
+ *
54
+ * @param Brizy_Editor_Project $project
55
+ * @param Brizy_Admin_Cloud_Client $client
56
+ */
57
+ private function __construct( Brizy_Editor_Project $project, Brizy_Admin_Cloud_Client $client ) {
58
+
59
+ $this->setProject( $project );
60
+ $this->setCloudClient( $client );
61
+
62
+ $this->blockBridge = new Brizy_Admin_Cloud_BlockBridge( $client );
63
+ $this->layoutBridge = new Brizy_Admin_Cloud_LayoutBridge( $client );
64
+
65
+ add_action( 'wp_loaded', array( $this, 'initializeActions' ) );
66
+ }
67
+
68
+ /**
69
+ * @param Brizy_Editor_Project $project
70
+ *
71
+ * @return Brizy_Admin_Cloud
72
+ */
73
+ public function setProject( Brizy_Editor_Project $project ): Brizy_Admin_Cloud {
74
+ $this->project = $project;
75
+
76
+ return $this;
77
+ }
78
+
79
+ /**
80
+ * @param Brizy_Admin_Cloud_Client $cloudClient
81
+ *
82
+ * @return Brizy_Admin_Cloud
83
+ */
84
+ public function setCloudClient( Brizy_Admin_Cloud_Client $cloudClient ): Brizy_Admin_Cloud {
85
+ $this->cloudClient = $cloudClient;
86
+
87
+ return $this;
88
+ }
89
+
90
+ /**
91
+ * @param Brizy_Admin_Cloud_BlockBridge $blockBridge
92
+ *
93
+ * @return Brizy_Admin_Cloud
94
+ */
95
+ public function setBlockBridge( Brizy_Admin_Cloud_BlockBridge $blockBridge ): Brizy_Admin_Cloud {
96
+ $this->blockBridge = $blockBridge;
97
+
98
+ return $this;
99
+ }
100
+
101
+ /**
102
+ * @param Brizy_Admin_Cloud_LayoutBridge $layoutBridge
103
+ *
104
+ * @return Brizy_Admin_Cloud
105
+ */
106
+ public function setLayoutBridge( Brizy_Admin_Cloud_LayoutBridge $layoutBridge ): Brizy_Admin_Cloud {
107
+ $this->layoutBridge = $layoutBridge;
108
+
109
+ return $this;
110
+ }
111
+
112
+ public function initializeActions() {
113
+ Brizy_Admin_Cloud_Api::_init( $this->project );
114
+
115
+ if ( wp_doing_ajax() && $this->project->getCloudToken() && $this->project->getCloudContainer() ) {
116
+ $versions = $this->cloudClient->getCloudEditorVersions();
117
+ if ( $versions['sync'] == BRIZY_SYNC_VERSION ) {
118
+ self::registerCloudFilters();
119
+ }
120
+ }
121
+ }
122
+
123
+ static public function registerCloudFilters() {
124
+ add_filter( 'brizy_get_saved_block', [ self::$instance, 'onGetSavedBlock' ], 10, 3 );
125
+ add_filter( 'brizy_get_saved_blocks', [ self::$instance, 'onGetSavedBlocks' ], 10, 3 );
126
+ add_action( 'brizy_saved_block_delete', [ self::$instance, 'onDeleteSavedBlock' ] );
127
+
128
+ add_filter( 'brizy_get_layout', [ self::$instance, 'onGetLayout' ], 10, 3 );
129
+ add_filter( 'brizy_get_layouts', [ self::$instance, 'onGetLayouts' ], 10, 3 );
130
+ add_action( 'brizy_layout_delete', [ self::$instance, 'onDeleteLayout' ] );
131
+ }
132
+
133
+ static public function unRegisterCloudFilters() {
134
+ remove_filter( 'brizy_get_saved_block', [ self::$instance, 'onGetSavedBlock' ] );
135
+ remove_filter( 'brizy_get_saved_blocks', [ self::$instance, 'onGetSavedBlocks' ] );
136
+ remove_action( 'brizy_saved_block_delete', [ self::$instance, 'onDeleteSavedBlock' ] );
137
+
138
+ remove_filter( 'brizy_get_layout', [ self::$instance, 'onGetLayout' ] );
139
+ remove_filter( 'brizy_get_layouts', [ self::$instance, 'onGetLayouts' ] );
140
+ remove_action( 'brizy_layout_delete', [ self::$instance, 'onDeleteLayout' ] );
141
+ }
142
+
143
+ /**
144
+ * @param Brizy_Editor_Entity[] $blocks
145
+ * @param string[] $fields
146
+ * @param Brizy_Admin_Blocks_Manager $manager
147
+ */
148
+ public function onGetSavedBlocks( $blocks, $fields, $manager ) {
149
+
150
+ if ( ! is_array( $blocks ) ) {
151
+ $blocks = [];
152
+ }
153
+
154
+ try {
155
+ $cloudBlocks = $this->cloudClient->getBlocks( array( 'fields' => $fields ) );
156
+
157
+ // remove all local block that came from cloud and are deleted from cloud
158
+ foreach ( $blocks as $i => $block ) {
159
+ $existingBlock = false;
160
+ foreach ( (array) $cloudBlocks as $cblock ) {
161
+ if ( $cblock->uid == $block['uid'] ) {
162
+ $existingBlock = true;
163
+ break;
164
+ }
165
+ }
166
+
167
+ if ( ! $existingBlock &&
168
+ ( $localBlock = $manager->getEntity( $block['uid'] ) ) &&
169
+ $localBlock->isSynchronized( $this->cloudClient->getBrizyProject()->getCloudAccountId() ) ) {
170
+ // delete this block as this block does not exist anymore in cloud
171
+ $manager->trashEntity( $localBlock );
172
+
173
+ unset( $blocks[ $i ] );
174
+ }
175
+ }
176
+
177
+ $blocks = array_values( $blocks );
178
+
179
+ // remove cloud blocks that are already saved localy
180
+ foreach ( (array) $cloudBlocks as $cblock ) {
181
+ $existingBlock = false;
182
+ foreach ( $blocks as $block ) {
183
+ if ( $cblock->uid == $block['uid'] ) {
184
+ $existingBlock = true;
185
+ break;
186
+ }
187
+ }
188
+
189
+ if ( ! $existingBlock ) {
190
+
191
+ if ( in_array( 'synchronized', $fields ) ) {
192
+ $localBlock = $manager->getEntity( $cblock->uid );
193
+ if ( $localBlock ) {
194
+ $cblock->synchronized = $localBlock->isSynchronized( $this->cloudClient->getBrizyProject()->getCloudAccountId() );
195
+ } else {
196
+ $cblock->synchronized = false;
197
+ }
198
+ }
199
+
200
+ if ( in_array( 'isCloudEntity', $fields ) ) {
201
+ $cblock->isCloudEntity = true;
202
+ }
203
+
204
+ if ( in_array( 'synchronizable', $fields ) ) {
205
+ $cblock->synchronizable = true;
206
+ }
207
+
208
+ $blocks[] = (array) $cblock;
209
+ }
210
+ }
211
+
212
+ } catch ( Exception $e ) {
213
+ // do nothing...
214
+ }
215
+
216
+ return $blocks;
217
+ }
218
+
219
+ /**
220
+ * @param Brizy_Editor_Entity $block
221
+ * @param string $uid
222
+ * @param Brizy_Admin_Blocks_Manager $manager
223
+ *
224
+ * @throws Exception
225
+ */
226
+ public function onGetSavedBlock( $block, $uid, $manager ) {
227
+ try {
228
+ if ( ! $block ) {
229
+ $this->blockBridge->import( $uid );
230
+ $block = $manager->getEntity( $uid );
231
+ }
232
+ } catch ( Exception $e ) {
233
+
234
+ }
235
+
236
+ return $block;
237
+ }
238
+
239
+ /**
240
+ * @param $blockUid
241
+ */
242
+ public function onDeleteSavedBlock( $blockUid ) {
243
+ try {
244
+ $blocks = $this->cloudClient->getBlocks( [ 'uid' => $blockUid ] );
245
+
246
+ if ( isset( $blocks[0] ) ) {
247
+ $block = (array) $blocks[0];
248
+ $this->cloudClient->deleteBlock( $block['id'] );
249
+ }
250
+
251
+ } catch ( Exception $e ) {
252
+
253
+ }
254
+ }
255
+
256
+ /**
257
+ * @param Brizy_Editor_Entity[] $layouts
258
+ * @param string[] $fields
259
+ * @param Brizy_Admin_Layouts_Manager $manager
260
+ */
261
+ public function onGetLayouts( $layouts, $fields, $manager ) {
262
+
263
+ if ( ! is_array( $layouts ) ) {
264
+ $layouts = [];
265
+ }
266
+
267
+ try {
268
+ $cloudLayouts = $this->cloudClient->getLayouts( array( 'fields' => $fields ) );
269
+
270
+ // remove all local block that came from cloud and are deleted from cloud
271
+ foreach ( $layouts as $i => $block ) {
272
+ $existingBlock = false;
273
+ foreach ( (array) $cloudLayouts as $cblock ) {
274
+ if ( $cblock->uid == $block['uid'] ) {
275
+ $existingBlock = true;
276
+ break;
277
+ }
278
+ }
279
+
280
+ if ( ! $existingBlock &&
281
+ ( $localLayout = $manager->getEntity( $block['uid'] ) ) &&
282
+ $localLayout->isSynchronized( $this->cloudClient->getBrizyProject()->getCloudAccountId() ) ) {
283
+ // delete this block as this block does not exist anymore in cloud
284
+ $manager->deleteEntity( $localLayout );
285
+
286
+ unset( $layouts[ $i ] );
287
+ }
288
+ }
289
+
290
+ $layouts = array_values( $layouts );
291
+
292
+ foreach ( (array) $cloudLayouts as $aLayout ) {
293
+ $existingLayout = false;
294
+ foreach ( $layouts as $block ) {
295
+ if ( $aLayout->uid == $block['uid'] ) {
296
+ $existingLayout = true;
297
+ break;
298
+ }
299
+ }
300
+
301
+ if ( ! $existingLayout ) {
302
+
303
+ $localLayout = $manager->getEntity( $aLayout->uid );
304
+
305
+ if ( in_array( 'synchronized', $fields ) ) {
306
+ if ( $localLayout ) {
307
+ $aLayout->synchronized = $localLayout->isSynchronized( $this->cloudClient->getBrizyProject()->getCloudAccountId() );
308
+ } else {
309
+ $aLayout->synchronized = false;
310
+ }
311
+ }
312
+
313
+ if ( in_array( 'isCloudEntity', $fields ) ) {
314
+ $aLayout->isCloudEntity = true;
315
+ }
316
+
317
+ if ( in_array( 'synchronizable', $fields ) ) {
318
+ $aLayout->synchronizable = true;
319
+ }
320
+
321
+ $layouts[] = (array) $aLayout;
322
+ }
323
+ }
324
+
325
+ } catch ( Exception $e ) {
326
+ // do nothing...
327
+ }
328
+
329
+ return $layouts;
330
+ }
331
+
332
+
333
+ /**
334
+ * @param Brizy_Editor_Entity $block
335
+ * @param string $uid
336
+ * @param Brizy_Admin_Layouts_Manager $manager
337
+ *
338
+ * @throws Exception
339
+ */
340
+ public function onGetLayout( $block, $uid, $manager ) {
341
+ try {
342
+ if ( ! $block ) {
343
+ $this->layoutBridge->import( $uid );
344
+ $block = $manager->getEntity( $uid );
345
+ }
346
+ } catch ( Exception $e ) {
347
+
348
+ }
349
+
350
+ return $block;
351
+ }
352
+
353
+ /**
354
+ * @param $blockUid
355
+ */
356
+ public function onDeleteLayout( $blockUid ) {
357
+ try {
358
+ $blocks = $this->cloudClient->getLayouts( [ 'uid' => $blockUid ] );
359
+
360
+ if ( isset( $blocks[0] ) ) {
361
+ $block = (array) $blocks[0];
362
+ $this->cloudClient->deleteLayout( $block['id'] );
363
+ }
364
+
365
+ } catch ( Exception $e ) {
366
+
367
+ }
368
+ }
369
+
370
+
371
+ }
admin/cloud/abstract-bridge.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_AbstractUploader
5
+ */
6
+ abstract class Brizy_Admin_Cloud_AbstractBridge implements Brizy_Admin_Cloud_BridgeInterface {
7
+
8
+ /**
9
+ * @var Brizy_Admin_Cloud_Client
10
+ */
11
+ protected $client;
12
+
13
+ /**
14
+ * Brizy_Admin_Cloud_AbstractUploader constructor.
15
+ *
16
+ * @param Brizy_Admin_Cloud_Client $client
17
+ */
18
+ public function __construct( Brizy_Admin_Cloud_Client $client ) {
19
+ $this->client = $client;
20
+ }
21
+ }
admin/cloud/api.php ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Created by PhpStorm.
4
+ * User: alex
5
+ * Date: 7/18/18
6
+ * Time: 10:48 AM
7
+ */
8
+
9
+
10
+ class Brizy_Admin_Cloud_Api extends Brizy_Admin_AbstractApi {
11
+
12
+ use Brizy_Admin_Cloud_SyncAware;
13
+
14
+ const nonce = 'brizy-api';
15
+
16
+ const AJAX_SIGNIN_ACTION = '-cloud-signin';
17
+ const AJAX_SIGNUP_ACTION = '-cloud-signup';
18
+ const AJAX_SIGNOUT_ACTION = '-cloud-signout';
19
+ const AJAX_RESET_PASSWORD_ACTION = '-cloud-resetpassword';
20
+ const AJAX_TRIGGER_SYNC_ACTION = '-cloud-sync';
21
+ const AJAX_SYNC_ALLOWED = '-cloud-sync-allowed';
22
+
23
+ /**
24
+ * @var Brizy_Editor_Project
25
+ */
26
+ private $project;
27
+
28
+ /**
29
+ * @var Brizy_Admin_Cloud_Client
30
+ */
31
+ private $cloudClient;
32
+
33
+ /**
34
+ * Brizy_Admin_Cloud_Api constructor.
35
+ *
36
+ * @param Brizy_Editor_Project $project
37
+ */
38
+ public function __construct( Brizy_Editor_Project $project ) {
39
+
40
+ $this->project = $project;
41
+ $this->setClient( new Brizy_Admin_Cloud_Client( $project, new WP_Http() ) );
42
+ parent::__construct();
43
+ }
44
+
45
+ /**
46
+ * @param Brizy_Editor_Project $project
47
+ *
48
+ * @return Brizy_Admin_Cloud_Api
49
+ * @throws Exception
50
+ */
51
+ public static function _init( Brizy_Editor_Project $project ) {
52
+ static $instance;
53
+
54
+ if ( ! $instance ) {
55
+ $instance = new self( $project );
56
+ }
57
+
58
+ return $instance;
59
+ }
60
+
61
+
62
+ protected function initializeApiActions() {
63
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
64
+ add_action( $pref . self::AJAX_SIGNIN_ACTION, array( $this, 'actionSignIn' ) );
65
+ add_action( $pref . self::AJAX_SIGNUP_ACTION, array( $this, 'actionSignUp' ) );
66
+ add_action( $pref . self::AJAX_SIGNOUT_ACTION, array( $this, 'actionSignOut' ) );
67
+ add_action( $pref . self::AJAX_RESET_PASSWORD_ACTION, array( $this, 'actionResetPassword' ) );
68
+ add_action( $pref . self::AJAX_TRIGGER_SYNC_ACTION, array( $this, 'actionSync' ) );
69
+ add_action( $pref . self::AJAX_SYNC_ALLOWED, array( $this, 'actionSyncAllowed' ) );
70
+ }
71
+
72
+ public function actionSignIn() {
73
+
74
+ $this->verifyNonce( self::nonce );
75
+
76
+ $data = file_get_contents( "php://input" );
77
+
78
+ if ( ( $data = json_decode( $data ) ) === false ) {
79
+ $this->error( 400, 'Bad request' );
80
+ }
81
+
82
+ if ( $token = $this->getClient()->signIn( $data->email, $data->password ) ) {
83
+
84
+ // this is important when you delete block from cloud the local blocks
85
+ // will be deleted based on this valued
86
+ $this->project->setCloudAccountId( $token );
87
+ $this->project->setCloudToken( $token );
88
+
89
+ $containers = $this->getClient()->getContainers();
90
+
91
+ if ( isset( $containers[0] ) ) {
92
+ $this->project->setCloudContainer( $containers[0]->id );
93
+ } else {
94
+ $this->error( 400, 'SingIn failed. Invalid container.' );
95
+ }
96
+
97
+ $this->project->saveStorage();
98
+
99
+ $this->success( [] );
100
+ } else {
101
+ $this->error( 400, 'SingIn failed' );
102
+ }
103
+ }
104
+
105
+ public function actionSignUp() {
106
+
107
+ $this->verifyNonce( self::nonce );
108
+
109
+ $data = file_get_contents( "php://input" );
110
+
111
+ if ( ( $data = json_decode( $data ) ) === false ) {
112
+ $this->error( 400, 'Bad request' );
113
+ }
114
+
115
+ if ( $token = $this->getClient()->signUp( $data->firstName, $data->lastName, $data->email, $data->password, $data->confirmPassword ) ) {
116
+
117
+ // this is important when you delete block from cloud the local blocks
118
+ // will be deleted based on this valued
119
+ $this->project->setCloudAccountId( $token );
120
+ $this->project->setCloudToken( $token );
121
+
122
+ $containers = $this->getClient()->getContainers();
123
+
124
+ if ( isset( $containers[0] ) ) {
125
+ $this->project->setCloudContainer( $containers[0]->id );
126
+ } else {
127
+ $this->error( 400, 'Unable to obtain the container.' );
128
+ }
129
+
130
+ $this->project->saveStorage();
131
+ $this->success( [] );
132
+ } else {
133
+ $this->error( 400, 'Sing Up failed' );
134
+ }
135
+ }
136
+
137
+ public function actionSignOut() {
138
+
139
+ $this->verifyNonce( self::nonce );
140
+
141
+ // clear version in case something gets wonrg.
142
+ Brizy_Admin_Cloud_Client::clearVersionCache();
143
+
144
+ // this is important when you delete block from cloud the local blocks
145
+ // will be deleted based on this valued
146
+ $this->project->setCloudAccountId( null );
147
+ $this->project->setCloudToken( null );
148
+ $this->project->saveStorage();
149
+
150
+ wp_clear_scheduled_hook( Brizy_Admin_Cloud_Cron::BRIZY_CLOUD_CRON_KEY );
151
+
152
+ $this->success( [] );
153
+ }
154
+
155
+ public function actionResetPassword() {
156
+
157
+ $this->verifyNonce( self::nonce );
158
+
159
+ $data = file_get_contents( "php://input" );
160
+
161
+ if ( ( $data = json_decode( $data ) ) === false ) {
162
+ $this->error( 400, 'Bad request' );
163
+ }
164
+
165
+ if ( ! $data->email ) {
166
+ $this->error( 400, 'Invalid email' );
167
+ }
168
+
169
+ if ( $token = $this->getClient()->resetPassword( $data->email ) ) {
170
+ $this->success( [] );
171
+ } else {
172
+ $this->error( 400, 'Reset password failed' );
173
+ }
174
+ }
175
+
176
+ public function actionSync() {
177
+ try {
178
+
179
+ if ( ! $this->project->getCloudToken() ) {
180
+ $this->error( 400, 'Unauthorized' );
181
+ }
182
+
183
+ $merged = array_merge( $this->syncLayouts( true ), $this->syncBlocks( true ) );
184
+
185
+ return $this->success( [ 'synchronized' => count( $merged ) ] );
186
+ } catch ( Exception $e ) {
187
+ Brizy_Logger::instance()->critical( 'Sync failed', [ $e ] );
188
+ $this->error( 500, 'Sync failed' );
189
+
190
+ }
191
+ }
192
+
193
+ public function actionSyncAllowed() {
194
+
195
+ try {
196
+ $versions = $this->getClient()->getCloudEditorVersions();
197
+ $response = [];
198
+ $response['isSyncAllowed'] = $versions['sync'] == BRIZY_SYNC_VERSION;
199
+
200
+ return $this->success( $response );
201
+ } catch ( Exception $e ) {
202
+ Brizy_Logger::instance()->critical( 'Sync failed', [ $e ] );
203
+ $this->error( 400, 'Sync unauthorized.' );
204
+ }
205
+ }
206
+
207
+ /**
208
+ * @return null
209
+ */
210
+ protected function getRequestNonce() {
211
+ return $this->param( 'hash' );
212
+ }
213
+ }
admin/cloud/block-bridge.php ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_BlockUploader
5
+ */
6
+ class Brizy_Admin_Cloud_BlockBridge extends Brizy_Admin_Cloud_AbstractBridge {
7
+
8
+ use Brizy_Editor_Asset_AttachmentAware;
9
+
10
+ /**
11
+ * @param Brizy_Editor_Block $block
12
+ *
13
+ * @return mixed|void
14
+ * @throws Exception
15
+ */
16
+ public function export( $block ) {
17
+
18
+ $media = json_decode( $block->getMedia() );
19
+
20
+ if ( ! $media || ! isset( $media->fonts ) ) {
21
+ throw new Exception( 'No fonts property in media object' );
22
+ }
23
+
24
+ if ( ! $media || ! isset( $media->images ) ) {
25
+ throw new Exception( 'No images property in media object' );
26
+ }
27
+
28
+ $bridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
29
+ foreach ( $media->images as $uid ) {
30
+ $bridge->export( $uid );
31
+ }
32
+
33
+ $bridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
34
+ foreach ( $media->fonts as $fontUid ) {
35
+ $bridge->export( $fontUid );
36
+ }
37
+
38
+ $bridge = new Brizy_Admin_Cloud_ScreenshotBridge( $this->client );
39
+ $bridge->export( $block );
40
+
41
+ $cloudBlockObject = $this->client->createOrUpdateBlock( $block );
42
+
43
+ if ( $cloudBlockObject ) {
44
+ $block->setSynchronized( $this->client->getBrizyProject()->getCloudAccountId(), $cloudBlockObject->uid );
45
+ }
46
+
47
+ $block->saveStorage();
48
+ }
49
+
50
+ /**
51
+ * @param $blockId
52
+ *
53
+ * @return mixed|void
54
+ * @throws Exception
55
+ */
56
+ public function import( $blockId ) {
57
+ global $wpdb;
58
+
59
+ $blocks = $this->client->getBlocks( [ 'uid' => $blockId ] );
60
+
61
+ if ( ! isset( $blocks[0] ) ) {
62
+ return;
63
+ }
64
+
65
+ $block = (array) $blocks[0];
66
+
67
+ try {
68
+
69
+ // create local block
70
+ $wpdb->query( 'START TRANSACTION ' );
71
+ $name = md5( time() );
72
+ $post = wp_insert_post( array(
73
+ 'post_title' => $name,
74
+ 'post_name' => $name,
75
+ 'post_status' => 'publish',
76
+ 'post_type' => Brizy_Admin_Blocks_Main::CP_SAVED
77
+ ) );
78
+
79
+ if ( $post ) {
80
+ $brizyPost = Brizy_Editor_Block::get( $post, $block['uid'] );
81
+ if ( isset( $block['media'] ) ) {
82
+ $brizyPost->setMedia( $block['media'] );
83
+ }
84
+ if ( isset( $block['meta'] ) ) {
85
+ $brizyPost->setMeta( $block['meta'] );
86
+ }
87
+ $brizyPost->set_editor_data( $block['data'] );
88
+ $brizyPost->set_uses_editor( true );
89
+ $brizyPost->set_needs_compile( true );
90
+ $brizyPost->setDataVersion( 1 );
91
+ $brizyPost->setSynchronized( $this->client->getBrizyProject()->getCloudAccountId(), $block['id'] );
92
+ $brizyPost->save();
93
+
94
+
95
+ // import fonts
96
+ if ( isset( $block['media'] ) ) {
97
+ $blockMedia = json_decode( $block['media'] );
98
+
99
+ $fontBridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
100
+ if ( isset( $blockMedia->fonts ) ) {
101
+ foreach ( $blockMedia->fonts as $cloudFontUid ) {
102
+ $fontBridge->import( $cloudFontUid );
103
+ }
104
+ }
105
+
106
+ $mediaBridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
107
+ $mediaBridge->setBlockId( $post );
108
+ if ( isset( $blockMedia->images ) ) {
109
+ foreach ( $blockMedia->images as $mediaUid ) {
110
+ $mediaBridge->import( $mediaUid );
111
+ }
112
+ }
113
+ }
114
+ }
115
+
116
+
117
+ $wpdb->query( 'COMMIT' );
118
+ } catch ( Exception $e ) {
119
+ $wpdb->query( 'ROLLBACK' );
120
+ Brizy_Logger::instance()->critical( 'Importing block ' . $blockId . ' failed', [ $e ] );
121
+ }
122
+ }
123
+
124
+ /**
125
+ * @param Brizy_Editor_Block $block
126
+ *
127
+ * @return mixed|void
128
+ * @throws Exception
129
+ */
130
+ public function delete( $block ) {
131
+ if ( $block->getCloudId() ) {
132
+ $this->client->deleteBlock( $block->getCloudId() );
133
+ }
134
+ }
135
+ }
admin/cloud/bridge-interface.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Interface Brizy_Admin_Cloud_UploaderInterface
5
+ */
6
+ interface Brizy_Admin_Cloud_BridgeInterface {
7
+
8
+ /**
9
+ * @return mixed
10
+ */
11
+ public function export( $entity );
12
+
13
+ /**
14
+ * @param $entity
15
+ *
16
+ * @return mixed
17
+ */
18
+ public function import( $entity );
19
+
20
+ /**
21
+ * @param $entity
22
+ *
23
+ * @return mixed
24
+ */
25
+ public function delete( $entity );
26
+ }
admin/cloud/client.php ADDED
@@ -0,0 +1,733 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Brizy_Admin_Cloud_Client extends WP_Http {
5
+
6
+ use Brizy_Editor_Asset_AttachmentAware;
7
+
8
+ const TRANSIENT_KEY = 'brizy_cloud_editor_versions';
9
+
10
+ /**
11
+ * @var Brizy_Editor_Project
12
+ */
13
+ private $brizyProject;
14
+
15
+ /**
16
+ * @var WP_Http
17
+ */
18
+ private $http;
19
+
20
+
21
+ /**
22
+ * @var integer
23
+ */
24
+ private $library;
25
+
26
+ /**
27
+ * Brizy_Admin_Cloud_Client constructor.
28
+ *
29
+ * @param Brizy_Editor_Project $project
30
+ * @param WP_Http $http
31
+ */
32
+ public function __construct( Brizy_Editor_Project $project, WP_Http $http ) {
33
+ $this->brizyProject = $project;
34
+ $this->http = $http;
35
+
36
+ add_action( 'brizy-updated', [ 'Brizy_Admin_Cloud_Client', 'clearVersionCache' ] );
37
+ do_action( 'brizy-activated', [ 'Brizy_Admin_Cloud_Client', 'clearVersionCache' ] );
38
+ }
39
+
40
+ public static function clearVersionCache() {
41
+ delete_transient( self::TRANSIENT_KEY );
42
+ }
43
+
44
+ /**
45
+ * @return Brizy_Editor_Project
46
+ */
47
+ public function getBrizyProject() {
48
+ return $this->brizyProject;
49
+ }
50
+
51
+ /**
52
+ * @param Brizy_Editor_Project $brizyProject
53
+ *
54
+ * @return Brizy_Admin_Cloud_Client
55
+ */
56
+ public function setBrizyProject( $brizyProject ) {
57
+ $this->brizyProject = $brizyProject;
58
+
59
+ return $this;
60
+ }
61
+
62
+ /**
63
+ * @return WP_Http
64
+ */
65
+ public function getHttp() {
66
+ return $this->http;
67
+ }
68
+
69
+ /**
70
+ * @param WP_Http $http
71
+ *
72
+ * @return Brizy_Admin_Cloud_Client
73
+ */
74
+ public function setHttp( $http ) {
75
+ $this->http = $http;
76
+
77
+ return $this;
78
+ }
79
+
80
+ /**
81
+ * @param $uid
82
+ *
83
+ * @return string
84
+ */
85
+ public function getScreenshotUrl( $uid ) {
86
+ $url = Brizy_Config::getEditorBaseUrls() . Brizy_Config::CLOUD_SCREENSHOT;
87
+
88
+ return sprintf( $url, $uid );
89
+ }
90
+
91
+ /**
92
+ * @param $screenUid
93
+ * @param $filePath
94
+ *
95
+ * @return bool
96
+ */
97
+ public function createScreenshot( $screenUid, $filePath ) {
98
+ $data = array(
99
+ 'uid' => $screenUid,
100
+ 'attachment' => base64_encode( file_get_contents( $filePath ) )
101
+ );
102
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_SCREENSHOTS, array(
103
+ 'headers' => $this->getHeaders(),
104
+ 'body' => $data
105
+ ) );
106
+
107
+ $code = wp_remote_retrieve_response_code( $response );
108
+
109
+ if ( $code >= 200 && $code <= 300 ) {
110
+ return true;
111
+ }
112
+
113
+ return false;
114
+ }
115
+
116
+ private function getHeaders( $aditional = null ) {
117
+
118
+ $values = $this->getCloudEditorVersions();
119
+
120
+ return array_merge( array(
121
+ //'X-AUTH-APP-TOKEN' => Brizy_Config::CLOUD_APP_KEY,
122
+ 'X-AUTH-USER-TOKEN' => $this->brizyProject->getMetaValue( 'brizy-cloud-token' ),
123
+ 'X-EDITOR-VERSION' => $values['editor'],
124
+ 'X-SYNC-VERSION' => BRIZY_SYNC_VERSION
125
+ ), is_array( $aditional ) ? $aditional : array() );
126
+ }
127
+
128
+ private function getHeadersWithoutAuthorization( $aditional = null ) {
129
+ return array_merge( array(
130
+ //'X-AUTH-APP-TOKEN' => Brizy_Config::CLOUD_APP_KEY,
131
+ 'X-SYNC-VERSION' => BRIZY_SYNC_VERSION
132
+ ), is_array( $aditional ) ? $aditional : array() );
133
+ }
134
+
135
+ public function getLibraries() {
136
+ $response = $this->http->get( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_LIBRARY, array( 'headers' => $this->getHeaders() ) );
137
+
138
+ $code = wp_remote_retrieve_response_code( $response );
139
+
140
+ if ( $code == 200 ) {
141
+
142
+ $body = wp_remote_retrieve_body( $response );
143
+
144
+ $libraries = json_decode( $body );
145
+
146
+ if ( count( $libraries ) == 0 ) {
147
+ throw new Exception( 'No libraries provided' );
148
+ }
149
+
150
+
151
+ return $libraries;
152
+ }
153
+
154
+ return null;
155
+ }
156
+
157
+ /**
158
+ * @param $email
159
+ * @param $password
160
+ *
161
+ * @return array|bool|WP_Error
162
+ */
163
+ public function signIn( $email, $password ) {
164
+
165
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_SIGNIN, array(
166
+ 'headers' => $this->getHeadersWithoutAuthorization( array(
167
+ 'Content-type' => 'application/x-www-form-urlencoded'
168
+ ) ),
169
+ 'body' => array(
170
+ 'email' => $email,
171
+ 'password' => $password
172
+ ),
173
+ 'timeout'=>30
174
+ ) );
175
+
176
+ $code = wp_remote_retrieve_response_code( $response );
177
+
178
+ if ( $code == 200 ) {
179
+
180
+ $jsonResponse = json_decode( $response['body'] );
181
+
182
+ // update cloud editor versions
183
+ $this->getCloudEditorVersions( true );
184
+
185
+ return $jsonResponse->token;
186
+ }
187
+
188
+ return false;
189
+ }
190
+
191
+
192
+ /**
193
+ * @param string $firstName
194
+ * @param string $lastName
195
+ * @param string $email
196
+ * @param string $password
197
+ * @param string $confirmPassword
198
+ *
199
+ * @return bool
200
+ */
201
+ public function signUp( $firstName, $lastName, $email, $password, $confirmPassword ) {
202
+
203
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_SIGNUP, array(
204
+ 'headers' => $this->getHeadersWithoutAuthorization( array(
205
+ 'Content-type' => 'application/x-www-form-urlencoded'
206
+ ) ),
207
+ 'body' => array(
208
+ 'first_name' => $firstName,
209
+ 'last_name' => $lastName,
210
+ 'email' => $email,
211
+ 'new_password' => $password,
212
+ 'confirm_password' => $confirmPassword,
213
+ )
214
+ ) );
215
+
216
+ $code = wp_remote_retrieve_response_code( $response );
217
+
218
+ if ( $code == 200 ) {
219
+
220
+ $jsonResponse = json_decode( $response['body'] );
221
+
222
+ return $jsonResponse->token;
223
+ }
224
+
225
+ return false;
226
+ }
227
+
228
+ /**
229
+ * @param $email
230
+ *
231
+ * @return bool
232
+ */
233
+ public function resetPassword( $email ) {
234
+
235
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_RESET_PASSWORD, array(
236
+ 'headers' => $this->getHeaders( array(
237
+ 'Content-type' => 'application/x-www-form-urlencoded'
238
+ ) ),
239
+ 'body' => array(
240
+ 'email' => $email,
241
+ )
242
+ ) );
243
+
244
+ $code = wp_remote_retrieve_response_code( $response );
245
+
246
+ return $code >= 200 && $code < 300;
247
+ }
248
+
249
+ public function getCloudEditorVersions( $ignoreCache = false ) {
250
+
251
+ $value = get_transient( 'brizy_cloud_editor_versions' );
252
+
253
+ if ( $value && ! $ignoreCache ) {
254
+ return $value;
255
+ }
256
+
257
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_EDITOR_VERSIONS;
258
+
259
+ $response = $this->http->get( $url );
260
+
261
+ $code = wp_remote_retrieve_response_code( $response );
262
+
263
+ if ( $code == 200 ) {
264
+ $value = (array) json_decode( $response['body'] );
265
+ set_transient( 'brizy_cloud_editor_versions', $value, 3600 );
266
+ } else {
267
+ throw new Exception( wp_remote_retrieve_response_message( $response ) );
268
+ }
269
+
270
+ return $value;
271
+ }
272
+
273
+ public function getContainers() {
274
+ return $this->getCloudEntity( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_CONTAINERS, [] );
275
+ }
276
+
277
+ public function getProjects( $filters ) {
278
+ return $this->getCloudEntity( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_PROJECTS, $filters );
279
+ }
280
+
281
+ public function getProject( $id ) {
282
+
283
+ $url = sprintf( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_PROJECTS . "/%d", (int) $id );
284
+ $response = $this->http->get( $url, array( 'headers' => $this->getHeaders() ) );
285
+
286
+ $code = wp_remote_retrieve_response_code( $response );
287
+ if ( $code == 200 ) {
288
+ return json_decode( $response['body'] );
289
+ }
290
+
291
+ return null;
292
+ }
293
+
294
+ public function createProject( $container, $name ) {
295
+
296
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_PROJECTS, array(
297
+ 'headers' => $this->getHeaders(),
298
+ 'body' => array(
299
+ 'name' => $name,
300
+ 'container' => $container,
301
+ 'globals' => null,
302
+ 'site_id' => null
303
+ )
304
+ ) );
305
+
306
+ $code = wp_remote_retrieve_response_code( $response );
307
+ if ( $code == 200 ) {
308
+ return json_decode( $response['body'] );
309
+ }
310
+
311
+ return false;
312
+ }
313
+
314
+ public function getBlocks( $filters = array() ) {
315
+ return $this->getCloudEntityByContainer( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_SAVEDBLOCKS, $filters );
316
+ }
317
+
318
+ /**
319
+ * @param Brizy_Editor_Block $block
320
+ *
321
+ * @return bool
322
+ * @throws Exception
323
+ */
324
+ public function createOrUpdateBlock( Brizy_Editor_Block $block ) {
325
+
326
+ $cloudBlockData = array(
327
+ 'container' => $this->brizyProject->getCloudContainer(),
328
+ 'meta' => $block->getMeta(),
329
+ 'media' => $block->getMedia(),
330
+ 'data' => $block->get_editor_data(),
331
+ 'uid' => $block->getUid(),
332
+ 'dataVersion' => 1
333
+ );
334
+
335
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_SAVEDBLOCKS;
336
+
337
+ if ( ! $block->getCloudId() ) {
338
+ $response = $this->http->post( $url, array(
339
+ 'headers' => $this->getHeaders(),
340
+ 'body' => $cloudBlockData
341
+ ) );
342
+ } else {
343
+ $response = $this->http->request( $url, array(
344
+ 'method' => 'PUT',
345
+ 'headers' => $this->getHeaders(),
346
+ 'body' => $cloudBlockData,
347
+ ) );
348
+ }
349
+
350
+ $code = wp_remote_retrieve_response_code( $response );
351
+
352
+ if ( $code >= 400 ) {
353
+ // update cloud editor versions
354
+ $this->getCloudEditorVersions( true );
355
+ Brizy_Logger::instance()->critical( 'Cloud api exception', [ $response ] );
356
+ throw new Exception( wp_remote_retrieve_response_message( $response ) );
357
+ }
358
+
359
+ return json_decode( wp_remote_retrieve_body( $response ) );
360
+ }
361
+
362
+ /**
363
+ * @param $blockId
364
+ *
365
+ * @return bool
366
+ * @throws Exception
367
+ */
368
+ public function deleteBlock( $blockId ) {
369
+ $query = http_build_query( [ 'container' => $this->brizyProject->getCloudContainer() ] );
370
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_SAVEDBLOCKS . "/" . $blockId . "?" . $query;
371
+ $response = $this->http->request( $url, array( 'method' => 'DELETE', 'headers' => $this->getHeaders() ) );
372
+ $code = wp_remote_retrieve_response_code( $response );
373
+
374
+ if ( $code >= 400 ) {
375
+ throw new Exception( 'Invalid code return by cloud api' );
376
+ }
377
+
378
+ return $code == 200;
379
+ }
380
+
381
+
382
+ /**
383
+ * @param $filters
384
+ *
385
+ * @return array|mixed|object|null
386
+ */
387
+ public function getPopups( $filters = array() ) {
388
+ return $this->getCloudEntityByContainer( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_POPUPS, $filters );
389
+ }
390
+
391
+ /**
392
+ * @param Brizy_Editor_Popup $popup
393
+ *
394
+ * @return bool
395
+ * @throws Exception
396
+ */
397
+ public function createOrUpdatePopup( Brizy_Editor_Popup $popup ) {
398
+
399
+ $cloudBlockData = array(
400
+ 'container' => $this->brizyProject->getCloudContainer(),
401
+ 'meta' => $popup->getMeta(),
402
+ 'data' => $popup->get_editor_data(),
403
+ 'is_autosave' => 0,
404
+ 'uid' => $popup->getUid(),
405
+ 'dataVersion' => 1
406
+
407
+ );
408
+
409
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_POPUPS;
410
+
411
+ if ( $popup->getCloudId() ) {
412
+ $response = $this->http->request( $url, array(
413
+ 'method' => 'PUT',
414
+ 'headers' => $this->getHeaders(),
415
+ 'body' => $cloudBlockData
416
+ ) );
417
+ } else {
418
+ $response = $this->http->post( $url, array( 'headers' => $this->getHeaders(), 'body' => $cloudBlockData ) );
419
+ }
420
+
421
+ $code = wp_remote_retrieve_response_code( $response );
422
+
423
+ if ( $code >= 400 ) {
424
+ $this->getCloudEditorVersions( true );
425
+ Brizy_Logger::instance()->critical( 'Cloud api exception', [ $response ] );
426
+ throw new Exception( 'Invalid code return by cloud api' );
427
+ }
428
+
429
+ return json_decode( wp_remote_retrieve_body( $response ) );
430
+ }
431
+
432
+ /**
433
+ * @param $popupId
434
+ *
435
+ * @return bool
436
+ * @throws Exception
437
+ */
438
+ public function deletePopup( $popupId ) {
439
+ $query = http_build_query( [ 'container' => $this->brizyProject->getCloudContainer() ] );
440
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_POPUPS . "/" . $popupId . "?" . $query;
441
+ $response = $this->http->request( $url, array( 'method' => 'DELETE', 'headers' => $this->getHeaders() ) );
442
+ $code = wp_remote_retrieve_response_code( $response );
443
+
444
+ if ( $code >= 400 ) {
445
+ throw new Exception( 'Invalid code return by cloud api' );
446
+ }
447
+
448
+ return $code == 200;
449
+ }
450
+
451
+
452
+ /**
453
+ * @param $filters
454
+ *
455
+ * @return array|mixed|object|null
456
+ */
457
+ public function getLayouts( $filters = array() ) {
458
+ return $this->getCloudEntityByContainer( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_LAYOUTS, $filters );
459
+ }
460
+
461
+
462
+ /**
463
+ * @param Brizy_Editor_Layout $layout
464
+ *
465
+ * @return bool
466
+ * @throws Exception
467
+ */
468
+ public function createOrUpdateLayout( Brizy_Editor_Layout $layout ) {
469
+
470
+ $cloudBlockData = array(
471
+ 'container' => $this->brizyProject->getCloudContainer(),
472
+ 'meta' => $layout->getMeta(),
473
+ 'media' => $layout->getMedia(),
474
+ 'data' => $layout->get_editor_data(),
475
+ 'uid' => $layout->getUid(),
476
+ 'dataVersion' => 1
477
+ );
478
+
479
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_LAYOUTS;
480
+
481
+
482
+ if ( ! $layout->getCloudId() ) {
483
+ $response = $this->http->post( $url, array(
484
+ 'headers' => $this->getHeaders(),
485
+ 'body' => $cloudBlockData
486
+ ) );
487
+ } else {
488
+ $response = $this->http->request( $url, array(
489
+ 'method' => 'PUT',
490
+ 'headers' => $this->getHeaders(),
491
+ 'body' => $cloudBlockData,
492
+ ) );
493
+ }
494
+
495
+ $code = wp_remote_retrieve_response_code( $response );
496
+
497
+ if ( $code >= 400 ) {
498
+ $this->getCloudEditorVersions( true );
499
+ Brizy_Logger::instance()->critical( 'Cloud api exception', [ $response ] );
500
+ throw new Exception( 'Invalid code return by cloud api' );
501
+ }
502
+
503
+ return json_decode( wp_remote_retrieve_body( $response ) );
504
+ }
505
+
506
+ /**
507
+ * @param $layoutId
508
+ *
509
+ * @return bool
510
+ * @throws Exception
511
+ */
512
+ public function deleteLayout( $layoutId ) {
513
+ $query = http_build_query( [ 'container' => $this->brizyProject->getCloudContainer() ] );
514
+ $url = Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_LAYOUTS . "/" . $layoutId . "?" . $query;
515
+ $response = $this->http->request( $url, array( 'method' => 'DELETE', 'headers' => $this->getHeaders() ) );
516
+ $code = wp_remote_retrieve_response_code( $response );
517
+
518
+ if ( $code >= 400 ) {
519
+ throw new Exception( 'Invalid code return by cloud api' );
520
+ }
521
+
522
+ return $code == 200;
523
+ }
524
+
525
+
526
+ /**
527
+ * @param $uid
528
+ *
529
+ * @return bool
530
+ * @throws Exception
531
+ */
532
+ public function isMediaUploaded( $uid ) {
533
+ $cloud_entity_by_container = $this->getCloudEntity( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_MEDIA, [ 'name' => $uid ] );
534
+
535
+ return is_array( $cloud_entity_by_container ) && count( $cloud_entity_by_container ) > 0;
536
+ }
537
+
538
+ /**
539
+ * @param $file
540
+ *
541
+ * @return bool
542
+ * @throws Exception
543
+ */
544
+ public function uploadMedia( $uid, $file ) {
545
+
546
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_MEDIA, array(
547
+ 'headers' => $this->getHeaders(),
548
+ 'body' => array(
549
+ 'attachment' => base64_encode( file_get_contents( $file ) ),
550
+ 'name' => $uid,
551
+ 'filename' => basename( $file )
552
+ )
553
+ ) );
554
+
555
+ $code = wp_remote_retrieve_response_code( $response );
556
+
557
+ if ( $code >= 400 ) {
558
+ throw new Exception( 'Invalid code return by cloud api' );
559
+ }
560
+
561
+ return true;
562
+ }
563
+
564
+
565
+ /**
566
+ * @param $font
567
+ *
568
+ * Ex:
569
+ * [
570
+ * 'id' => 'askdalskdlaksd',
571
+ * 'family' => 'proxima-nova',
572
+ * 'type' => 'uploaded',
573
+ * 'weights' => [
574
+ * '400' => [
575
+ * 'ttf' => codecept_data_dir( 'fonts/pn-regular-webfont.ttf' ),
576
+ * 'eot' => codecept_data_dir( 'fonts/pn-regular-webfont.eot' ),
577
+ * 'woff' => codecept_data_dir( 'fonts/pn-regular-webfont.woff' ),
578
+ * 'woff2' => codecept_data_dir( 'fonts/pn-regular-webfont.woff2' ),
579
+ * ],
580
+ * '500' => [
581
+ * 'eot' => codecept_data_dir( 'fonts/pn-medium-webfont.eot' ),
582
+ * 'woff' => codecept_data_dir( 'fonts/pn-medium-webfont.woff' ),
583
+ * 'woff2' => codecept_data_dir( 'fonts/pn-medium-webfont.woff2' ),
584
+ * ],
585
+ * '700' => [
586
+ * 'eot' => codecept_data_dir( 'fonts/pn-bold-webfont.eot' ),
587
+ * 'woff' => codecept_data_dir( 'fonts/pn-bold-webfont.woff' ),
588
+ * 'woff2' => codecept_data_dir( 'fonts/pn-bold-webfont.woff2' ),
589
+ * ],
590
+ * ]
591
+ * ];
592
+ *
593
+ * @return bool
594
+ * @throws Exception
595
+ */
596
+ public function createFont( $font ) {
597
+
598
+ $params = array(
599
+ 'container' => $this->brizyProject->getCloudContainer(),
600
+ 'uid' => $font['id'],
601
+ 'family' => $font['family'],
602
+ );
603
+
604
+ // prepare font data
605
+ foreach ( $font['weights'] as $weigth => $files ) {
606
+ foreach ( $files as $type => $file ) {
607
+ $params["files[$weigth][$type]"] = new CURLFile( $file );
608
+ }
609
+ }
610
+ unset( $font['weights'] );
611
+
612
+ $file_upload_request = function ( $handle_or_parameters, $request = '', $url = '' ) use ( $params ) {
613
+ $this->updateWPHTTPRequest( $handle_or_parameters, $params );
614
+ };
615
+ // handle cURL requests
616
+ add_action( 'http_api_curl', $file_upload_request, 10 );
617
+ // handle fsockopen
618
+ add_action( 'requests-fsockopen.before_send', $file_upload_request, 10, 3 );
619
+
620
+ $response = $this->http->post( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_FONTS, array(
621
+ 'headers' => $this->getHeaders( [ 'Content-Type' => 'multipart/form-data' ] ),
622
+ 'body' => $params,
623
+ 'timeout' => 40
624
+ ) );
625
+
626
+ remove_action( 'http_api_curl', $file_upload_request );
627
+ remove_action( 'requests-fsockopen.before_send', $file_upload_request );
628
+
629
+ $code = wp_remote_retrieve_response_code( $response );
630
+
631
+ if ( $code >= 400 ) {
632
+ throw new Exception( 'Invalid code return by cloud api' );
633
+ }
634
+
635
+ return json_decode( wp_remote_retrieve_body( $response ) );
636
+ }
637
+
638
+ public function getFont( $uid ) {
639
+ $response = $this->getCloudEntity( Brizy_Config::CLOUD_ENDPOINT . Brizy_Config::CLOUD_FONTS . "/{$uid}" );
640
+
641
+ if ( is_array( $response ) ) {
642
+ return $response;
643
+ }
644
+
645
+ return null;
646
+ }
647
+
648
+
649
+ /**
650
+ * @param $endpoint
651
+ * @param $filters
652
+ *
653
+ * @return array|mixed|object|null
654
+ */
655
+ private function getCloudEntity( $endpoint, $filters = array() ) {
656
+
657
+ $http_build_query = http_build_query( $filters );
658
+
659
+ if ( $http_build_query ) {
660
+ $http_build_query = '?' . $http_build_query;
661
+ }
662
+
663
+ $url = $endpoint . $http_build_query;
664
+ $response = $this->http->get( $url, array( 'headers' => $this->getHeaders() ) );
665
+
666
+ $code = wp_remote_retrieve_response_code( $response );
667
+ if ( $code == 200 ) {
668
+ return (array) json_decode( $response['body'] );
669
+ }
670
+
671
+ return null;
672
+ }
673
+
674
+ /**
675
+ * @param $endpoint
676
+ * @param $filters
677
+ *
678
+ * @return array|mixed|object|null
679
+ */
680
+ private function getCloudEntityByContainer( $endpoint, $filters = array() ) {
681
+
682
+ $filters = array_merge( $filters, [ 'container' => $this->brizyProject->getCloudContainer() ] );
683
+
684
+ return $this->getCloudEntity( $endpoint, $filters );
685
+ }
686
+
687
+ private function updateWPHTTPRequest( &$handle_or_parameters, $form_body_arguments ) {
688
+ if ( function_exists( 'curl_init' ) && function_exists( 'curl_exec' ) ) {
689
+ curl_setopt( $handle_or_parameters, CURLOPT_POSTFIELDS, $form_body_arguments );
690
+ } elseif ( function_exists( 'fsockopen' ) ) {
691
+ $form_fields = [];
692
+ $form_files = [];
693
+ foreach ( $form_body_arguments as $name => $value ) {
694
+ if ( file_exists( $value ) ) {
695
+ // Not great for large files since it dumps into memory but works well for small files
696
+ $form_files[ $name ] = file_get_contents( $value );
697
+ } else {
698
+ $form_fields[ $name ] = $value;
699
+ }
700
+ }
701
+
702
+ function build_data_files( $boundary, $fields, $files ) {
703
+ $data = '';
704
+ $eol = "\r\n";
705
+
706
+ $delimiter = '-------------' . $boundary;
707
+
708
+ foreach ( $fields as $name => $content ) {
709
+ $data .= "--" . $delimiter . $eol
710
+ . 'Content-Disposition: form-data; name="' . $name . "\"" . $eol . $eol
711
+ . $content . $eol;
712
+ }
713
+
714
+ foreach ( $files as $name => $content ) {
715
+ $data .= "--" . $delimiter . $eol
716
+ . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
717
+ //. 'Content-Type: image/png'.$eol
718
+ . 'Content-Transfer-Encoding: binary' . $eol;
719
+
720
+ $data .= $eol;
721
+ $data .= $content . $eol;
722
+ }
723
+ $data .= "--" . $delimiter . "--" . $eol;
724
+
725
+ return $data;
726
+ }
727
+
728
+ $boundary = uniqid();
729
+ $handle_or_parameters = build_data_files( $boundary, $form_fields, $form_files );
730
+ }
731
+ }
732
+
733
+ }
admin/cloud/cron.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Admin_Cloud_Cron {
4
+
5
+ use Brizy_Admin_Cloud_SyncAware;
6
+
7
+ const BRIZY_CLOUD_CRON_KEY = 'brizy-cloud-synchronize';
8
+
9
+
10
+ public static function _init() {
11
+ static $instance;
12
+
13
+ if ( ! $instance ) {
14
+ $instance = new self( new Brizy_Admin_Cloud_Client( Brizy_Editor_Project::get(), new WP_Http() ) );
15
+ }
16
+
17
+ return $instance;
18
+ }
19
+
20
+ /**
21
+ * Brizy_Admin_Cloud_Cron constructor.
22
+ */
23
+ public function __construct( Brizy_Admin_Cloud_Client $client ) {
24
+
25
+ $this->setClient( $client );
26
+
27
+ add_action( self::BRIZY_CLOUD_CRON_KEY, array( $this, 'syncBlocksAction' ) );
28
+ add_action( self::BRIZY_CLOUD_CRON_KEY, array( $this, 'syncLayoutsAction' ) );
29
+
30
+ add_filter( 'cron_schedules', array( $this, 'addBrizyCloudCronSchedules' ) );
31
+
32
+
33
+ if ( ! wp_next_scheduled( self::BRIZY_CLOUD_CRON_KEY ) ) {
34
+ $interval = is_user_logged_in() ? '5minute' : 'hourly';
35
+
36
+ if ( is_user_logged_in() ) {
37
+ wp_schedule_event( time(), $interval, self::BRIZY_CLOUD_CRON_KEY );
38
+ }
39
+ }
40
+ }
41
+
42
+ public function syncLayoutsAction() {
43
+ Brizy_Logger::instance()->debug('Sync layouts cron called');
44
+ return $this->syncLayouts();
45
+ }
46
+
47
+ public function syncBlocksAction() {
48
+ Brizy_Logger::instance()->debug('Sync blocks cron called');
49
+ return $this->syncBlocks();
50
+ }
51
+
52
+ public function addBrizyCloudCronSchedules( $schedules ) {
53
+ // Adds once weekly to the existing schedules.
54
+ $schedules['5minute'] = array(
55
+ 'interval' => 300,
56
+ 'display' => __( 'Once in 5 minutes' )
57
+ );
58
+
59
+ return $schedules;
60
+ }
61
+ }
admin/cloud/font-bridge.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_FontBridge
5
+ */
6
+ class Brizy_Admin_Cloud_FontBridge extends Brizy_Admin_Cloud_AbstractBridge {
7
+
8
+ /**
9
+ * @var Brizy_Admin_Fonts_Manager
10
+ */
11
+ private $fontManager;
12
+
13
+ /**
14
+ * Brizy_Admin_Cloud_FontBridge constructor.
15
+ *
16
+ * @param Brizy_Admin_Cloud_Client $client
17
+ */
18
+ public function __construct( Brizy_Admin_Cloud_Client $client ) {
19
+ parent::__construct( $client );
20
+
21
+ $this->fontManager = new Brizy_Admin_Fonts_Manager();
22
+ }
23
+
24
+ /**
25
+ * @param $fontUid
26
+ *
27
+ * @return mixed|void
28
+ * @throws Exception
29
+ */
30
+ public function export( $fontUid ) {
31
+
32
+ $fontData = $this->fontManager->getFontForExport( $fontUid );
33
+
34
+ if ( ! $fontData ) {
35
+ throw new \Exception( "Unable to find font {$fontUid}" );
36
+ }
37
+
38
+ if ( ! $this->client->getFont( $fontUid ) ) {
39
+ $this->client->createFont( $fontData );
40
+ }
41
+ }
42
+
43
+ /**
44
+ * @param $fontUid
45
+ *
46
+ * @return mixed|void
47
+ * @throws Exception
48
+ */
49
+ public function import( $fontUid ) {
50
+
51
+ if ( $font = $this->fontManager->getFont( $fontUid ) ) {
52
+ return $font;
53
+ }
54
+
55
+ $font = $this->client->getFont( $fontUid );
56
+
57
+ $family = $font['family'];
58
+ $weights = $font['files'];
59
+
60
+ $newWeights = array();
61
+
62
+ foreach ( $weights as $weight => $weightType ) {
63
+ foreach ( $weightType as $type => $fileUrl ) {
64
+ $newWeights[ $weight ][ $type ] = $this->downloadFileToTemporaryFile( $fileUrl );
65
+ }
66
+ }
67
+
68
+ return $this->fontManager->createFont( $fontUid, $family, $newWeights, 'uploaded' );
69
+ }
70
+
71
+ private function downloadFileToTemporaryFile( $url ) {
72
+ $filePath = tempnam( sys_get_temp_dir(), basename( $url ) );
73
+ $content = file_get_contents( $url );
74
+ $result = file_put_contents( $filePath, $content );
75
+
76
+ if ( $result === false ) {
77
+ Brizy_Logger::instance()->critical( 'Filed to write font content',
78
+ [
79
+ 'url' => $url,
80
+ 'filePath' => $filePath
81
+ ] );
82
+ throw new Exception( 'Filed to write font content' );
83
+ }
84
+
85
+ return array(
86
+ 'name' => basename( $url ),
87
+ 'type' => mime_content_type( $filePath ),
88
+ 'tmp_name' => $filePath,
89
+ 'error' => 0,
90
+ 'size' => filesize( $filePath )
91
+ );
92
+ }
93
+
94
+ /**
95
+ * @param $fontUid
96
+ *
97
+ * @return mixed|void
98
+ * @throws Exception
99
+ */
100
+ public function delete( $fontUid ) {
101
+ throw new Exception( 'Not implemented' );
102
+ }
103
+ }
admin/cloud/layout-bridge.php ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_BlockUploader
5
+ */
6
+ class Brizy_Admin_Cloud_LayoutBridge extends Brizy_Admin_Cloud_AbstractBridge {
7
+
8
+
9
+ /**
10
+ * @param Brizy_Editor_Block $layout
11
+ *
12
+ * @return mixed|void
13
+ * @throws Exception
14
+ */
15
+ public function export( $layout ) {
16
+
17
+ // check if the assets are uploaded in cloud
18
+ // upload them if needed
19
+ // create the block in cloud
20
+
21
+ $media = json_decode( $layout->getMedia() );
22
+
23
+ if ( ! $media || ! isset( $media->fonts ) ) {
24
+ throw new Exception( 'No fonts property in media object' );
25
+ }
26
+
27
+ if ( ! $media || ! isset( $media->images ) ) {
28
+ throw new Exception( 'No images property in media object' );
29
+ }
30
+
31
+ $bridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
32
+ foreach ( $media->images as $uid ) {
33
+ $bridge->export( $uid );
34
+ }
35
+
36
+ $bridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
37
+ foreach ( $media->fonts as $fontUid ) {
38
+ $bridge->export( $fontUid );
39
+ }
40
+
41
+ $bridge = new Brizy_Admin_Cloud_ScreenshotBridge( $this->client );
42
+ $bridge->export( $layout );
43
+
44
+ $layoutObject = $this->client->createOrUpdateLayout( $layout );
45
+
46
+ $layout->setSynchronized( $this->client->getBrizyProject()->getCloudAccountId(), $layoutObject->uid );
47
+
48
+ $layout->saveStorage();
49
+ }
50
+
51
+ /**
52
+ * @param $layoutId
53
+ *
54
+ * @return mixed|void
55
+ * @throws Exception
56
+ */
57
+ public function import( $layoutId ) {
58
+ global $wpdb;
59
+
60
+ $layouts = $this->client->getLayouts( [ 'uid' => $layoutId ] );
61
+
62
+ if ( ! isset( $layouts[0] ) ) {
63
+ return;
64
+ }
65
+
66
+ try {
67
+ $wpdb->query( 'START TRANSACTION ' );
68
+
69
+ $layout = (array) $layouts[0];
70
+
71
+ $name = md5( time() );
72
+ $post = wp_insert_post( array(
73
+ 'post_title' => $name,
74
+ 'post_name' => $name,
75
+ 'post_status' => 'publish',
76
+ 'post_type' => Brizy_Admin_Layouts_Main::CP_LAYOUT
77
+ ) );
78
+
79
+ if ( $post ) {
80
+ $brizyPost = Brizy_Editor_Layout::get( $post, $layout['uid'] );
81
+
82
+ if ( isset( $layout['media'] ) ) {
83
+ $brizyPost->setMedia( $layout['media'] );
84
+ }
85
+ if ( isset( $layout['meta'] ) ) {
86
+ $brizyPost->setMeta( $layout['meta'] );
87
+ }
88
+ $brizyPost->set_editor_data( $layout['data'] );
89
+ $brizyPost->set_uses_editor( true );
90
+ $brizyPost->set_needs_compile( true );
91
+ $brizyPost->saveStorage();
92
+ $brizyPost->setDataVersion( 1 );
93
+ $brizyPost->setSynchronized( $this->client->getBrizyProject()->getCloudAccountId(), $layout['uid'] );
94
+ $brizyPost->save();
95
+
96
+
97
+ // import fonts
98
+ if ( isset( $layout['media'] ) ) {
99
+ $blockMedia = json_decode( $layout['media'] );
100
+
101
+ $fontBridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
102
+ if ( isset( $blockMedia->fonts ) ) {
103
+ foreach ( $blockMedia->fonts as $cloudFontUid ) {
104
+ $fontBridge->import( $cloudFontUid );
105
+ }
106
+ }
107
+
108
+ $mediaBridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
109
+ $mediaBridge->setBlockId( $post );
110
+ if ( isset( $blockMedia->images ) ) {
111
+ foreach ( $blockMedia->images as $mediaUid ) {
112
+ $mediaBridge->import( $mediaUid );
113
+ }
114
+ }
115
+ }
116
+
117
+ }
118
+ $wpdb->query( 'COMMIT' );
119
+ } catch ( Exception $e ) {
120
+ $wpdb->query( 'ROLLBACK' );
121
+ Brizy_Logger::instance()->critical( 'Importing layout ' . $layoutId . ' failed', [ $e ] );
122
+ }
123
+ }
124
+
125
+ /**
126
+ * @param Brizy_Editor_Block $layout
127
+ *
128
+ * @return mixed|void
129
+ * @throws Exception
130
+ */
131
+ public function delete( $layout ) {
132
+
133
+ if ( $layout->getCloudId() ) {
134
+ $this->client->deleteLayout( $layout->getCloudId() );
135
+ }
136
+ }
137
+ }
admin/cloud/media-bridge.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_BlockUploader
5
+ */
6
+ class Brizy_Admin_Cloud_MediaBridge extends Brizy_Admin_Cloud_AbstractBridge {
7
+
8
+ use Brizy_Editor_Asset_AttachmentAware;
9
+
10
+ /**
11
+ * This is the block id for which we are importing the media
12
+ * If this is not set the import will fail.
13
+ *
14
+ * @var int
15
+ */
16
+ private $blockId;
17
+
18
+ /**
19
+ * @param $mediaUid
20
+ *
21
+ * @return mixed|void
22
+ * @throws Exception
23
+ */
24
+ public function export( $mediaUid ) {
25
+
26
+ $mediaId = (int) $this->getAttachmentByMediaName( $mediaUid );
27
+
28
+ if ( ! $mediaId ) {
29
+ throw new Exception( "Unable to find media {$mediaUid}" );
30
+ }
31
+
32
+ if ( $this->client->isMediaUploaded( $mediaUid ) ) {
33
+ return true;
34
+ }
35
+
36
+ $filePath = get_attached_file( $mediaId );
37
+ $this->client->uploadMedia( $mediaUid, $filePath );
38
+ }
39
+
40
+ /**
41
+ * @param $mediaUid
42
+ *
43
+ * @return mixed|void
44
+ * @throws Exception
45
+ */
46
+ public function import( $mediaUid ) {
47
+
48
+ if ( ! $this->blockId ) {
49
+ throw new Exception( 'The block id is not set.' );
50
+ }
51
+
52
+ $media_cacher = new Brizy_Editor_CropCacheMedia( $this->client->getBrizyProject(), $this->blockId );
53
+ $media_cacher->download_original_image( $mediaUid, false );
54
+ }
55
+
56
+ /**
57
+ * @param $layoutId
58
+ *
59
+ * @return mixed|void
60
+ * @throws Exception
61
+ */
62
+ public function delete( $layoutId ) {
63
+ throw new Exception( 'Not implemented' );
64
+ }
65
+
66
+ /**
67
+ * @param int $blockId
68
+ *
69
+ * @return Brizy_Admin_Cloud_MediaBridge
70
+ */
71
+ public function setBlockId( $blockId ): Brizy_Admin_Cloud_MediaBridge {
72
+ $this->blockId = (int) $blockId;
73
+
74
+ return $this;
75
+ }
76
+
77
+
78
+ }
admin/cloud/popup-bridge.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_BlockUploader
5
+ */
6
+ class Brizy_Admin_Cloud_PopupBridge extends Brizy_Admin_Cloud_AbstractBridge {
7
+
8
+
9
+ /**
10
+ * @param Brizy_Editor_Block $layout
11
+ *
12
+ * @return mixed|void
13
+ * @throws Exception
14
+ */
15
+ public function export( $layout ) {
16
+
17
+ // check if the assets are uploaded in cloud
18
+ // upload them if needed
19
+ // create the block in cloud
20
+
21
+ $media = json_decode( $layout->getMedia() );
22
+
23
+ if ( ! $media || ! isset( $media->fonts ) ) {
24
+ throw new Exception( 'No fonts property in media object' );
25
+ }
26
+
27
+ if ( ! $media || ! isset( $media->images ) ) {
28
+ throw new Exception( 'No images property in media object' );
29
+ }
30
+
31
+ $bridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
32
+ foreach ( $media->images as $uid ) {
33
+ $bridge->export( $uid );
34
+ }
35
+
36
+ $bridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
37
+ foreach ( $media->fonts as $fontUid ) {
38
+ $bridge->export( $fontUid );
39
+ }
40
+
41
+ $this->client->createOrUpdatePopup( $layout );
42
+ }
43
+
44
+ /**
45
+ * @param $popupId
46
+ *
47
+ * @return mixed|void
48
+ * @throws Exception
49
+ */
50
+ public function import( $popupId ) {
51
+ global $wpdb;
52
+
53
+ $popups = $this->client->getPopups( [ 'uid' => $popupId ] );
54
+
55
+ if ( ! isset( $popups[0] ) ) {
56
+ return;
57
+ }
58
+
59
+ $popup = $popups[0];
60
+ try {
61
+ $wpdb->query( 'START TRANSACTION ' );
62
+ $name = md5( time() );
63
+ $post = wp_insert_post( array(
64
+ 'post_title' => $name,
65
+ 'post_name' => $name,
66
+ 'post_status' => 'publish',
67
+ 'post_type' => Brizy_Admin_Popups_Main::CP_POPUP
68
+ ) );
69
+
70
+ if ( $post ) {
71
+ $brizyPost = Brizy_Editor_Popup::get( $post, $popup['uid'] );
72
+ $brizyPost->setMeta( $popup['meta'] );
73
+ $brizyPost->setCloudId( $popup['id'] );
74
+ $brizyPost->set_editor_data( $popup['data'] );
75
+ $brizyPost->set_uses_editor( true );
76
+ $brizyPost->set_needs_compile( true );
77
+ $brizyPost->setDataVersion( 1 );
78
+ $brizyPost->save();
79
+ }
80
+ $wpdb->query( 'COMMIT' );
81
+ } catch ( Exception $e ) {
82
+ $wpdb->query( 'ROLLBACK' );
83
+ Brizy_Logger::instance()->critical( 'Importing layout ' . $popupId . ' failed', [ $e ] );
84
+ }
85
+ }
86
+
87
+ /**
88
+ * @param Brizy_Editor_Block $layout
89
+ *
90
+ * @return mixed|void
91
+ * @throws Exception
92
+ */
93
+ public function delete( $layout ) {
94
+ $this->client->deletePopup( $layout->getCloudId() );
95
+ }
96
+ }
admin/cloud/proxy.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Brizy_Admin_Cloud_Proxy {
5
+
6
+ const ACTION = 'brizy_cloud_proxy';
7
+
8
+ /**
9
+ * Brizy_Admin_Cloud_Proxy constructor.
10
+ */
11
+ public function __construct() {
12
+ add_action( 'wp_ajax_' . self::ACTION, array( $this, 'handleRequest' ) );
13
+ }
14
+
15
+ /**
16
+ * @throws Exception
17
+ */
18
+ public function handleRequest() {
19
+
20
+ $vars = $_GET;
21
+
22
+ $project = Brizy_Editor_Project::get();
23
+
24
+ // redirect the request
25
+ $token = $project->getMetaValue( 'brizy-cloud-token' );
26
+ $cloudProjectId = $project->getMetaValue( 'brizy-cloud-project' );
27
+
28
+ if ( ! isset( $vars['endpoint'] ) ) {
29
+ wp_send_json_error( null, 400 );
30
+ exit;
31
+ }
32
+
33
+ if ( ! $token || ! $cloudProjectId || ! isset( $vars['endpoint'] ) ) {
34
+ wp_send_json_error( null, 401 );
35
+ exit;
36
+ }
37
+
38
+ $http = new WP_Http();
39
+ $url = Brizy_Config::CLOUD_ENDPOINT . "/api/" . $vars['endpoint'];
40
+ $response = $http->request( $url, array(
41
+ 'headers' => array(
42
+ 'X-AUTH-APP-TOKEN' => Brizy_Config::CLOUD_APP_KEY,
43
+ 'X-AUTH-USER-TOKEN' => $token
44
+ ),
45
+ 'body' => $_REQUEST['request'],
46
+ 'method' => $_SERVER['REQUEST_METHOD'],
47
+ ) );
48
+
49
+ $status = wp_remote_retrieve_response_code( $response );
50
+
51
+ if ( $response instanceof WP_Error ) {
52
+ wp_send_json_error( wp_remote_retrieve_response_message( $response ), $status );
53
+ exit;
54
+ }
55
+
56
+ wp_send_json_success( wp_remote_retrieve_body( $response ), $status );
57
+ exit;
58
+ }
59
+ }
admin/cloud/screenshot-bridge.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Brizy_Admin_Cloud_BlockUploader
5
+ */
6
+ class Brizy_Admin_Cloud_ScreenshotBridge extends Brizy_Admin_Cloud_AbstractBridge {
7
+
8
+ use Brizy_Editor_Asset_AttachmentAware;
9
+
10
+ /**
11
+ * @param Brizy_Editor_Block $block
12
+ *
13
+ * @return mixed|void
14
+ * @throws Exception
15
+ */
16
+ public function export( $block ) {
17
+ $meta = json_decode( $block->getMeta() );
18
+ $screenUid = $meta->_thumbnailSrc;
19
+
20
+ $manager = new Brizy_Editor_Screenshot_Manager( new Brizy_Editor_UrlBuilder( $this->client->getBrizyProject() ) );
21
+ $screenPath = $manager->getScreenshot( $screenUid );
22
+
23
+ if ( $screenPath ) {
24
+ $this->client->createScreenshot( $screenUid, $screenPath );
25
+ }
26
+ }
27
+
28
+ /**
29
+ * @param Brizy_Editor_Block $block
30
+ *
31
+ * @return mixed|void
32
+ * @throws Exception
33
+ */
34
+ public function import( $block ) {
35
+ throw new Exception('Import screenshots not implemented yet');
36
+ }
37
+
38
+ /**
39
+ * @param Brizy_Editor_Block $layout
40
+ *
41
+ * @return mixed|void
42
+ * @throws Exception
43
+ */
44
+ public function delete( $layout ) {
45
+ $this->client->deleteBlock( $layout->getCloudId() );
46
+ }
47
+ }
admin/cloud/sync-aware.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ trait Brizy_Admin_Cloud_SyncAware {
5
+
6
+ /**
7
+ * @var Brizy_Admin_Cloud_Client
8
+ */
9
+ protected $client;
10
+
11
+ /**
12
+ * @return Brizy_Admin_Cloud_Client
13
+ */
14
+ public function getClient() {
15
+ return $this->client;
16
+ }
17
+
18
+ /**
19
+ * @param Brizy_Admin_Cloud_Client $client
20
+ *
21
+ * @return Brizy_Admin_Cloud_SyncAware
22
+ */
23
+ public function setClient( $client ) {
24
+ $this->client = $client;
25
+
26
+ return $this;
27
+ }
28
+
29
+ protected function syncLayouts( $throwException = false ) {
30
+ $layoutIds = $this->getLayoutsForSync();
31
+ $synchronized = [];
32
+ foreach ( $layoutIds as $lId ) {
33
+ try {
34
+ if ( $this->syncLayout( $lId->ID ) ) {
35
+ $synchronized[] = $lId->ID;
36
+ }
37
+ } catch ( Exception $e ) {
38
+ Brizy_Logger::instance()->critical( 'Failed to sync layout',
39
+ [
40
+ 'blockId' => $lId->ID
41
+ ] );
42
+
43
+ if ( $throwException ) {
44
+ throw $e;
45
+ }
46
+ }
47
+ }
48
+
49
+ return $synchronized;
50
+ }
51
+
52
+ protected function syncBlocks( $throwException = false ) {
53
+ $postIds = $this->getBlocksForSync();
54
+ $synchronized = [];
55
+ foreach ( $postIds as $block ) {
56
+ try {
57
+ if ( $this->syncBlock( $block->ID ) ) {
58
+ $synchronized[] = $block->ID;
59
+ }
60
+ } catch ( Exception $e ) {
61
+ Brizy_Logger::instance()->critical( 'Failed to sync block',
62
+ [
63
+ 'blockId' => $block->ID
64
+ ] );
65
+
66
+ if ( $throwException ) {
67
+ throw $e;
68
+ }
69
+ }
70
+ }
71
+
72
+ return $synchronized;
73
+ }
74
+
75
+ protected function syncBlock( $blockId ) {
76
+
77
+ $brizyBlock = Brizy_Editor_Block::get( $blockId );
78
+
79
+ if ( $brizyBlock && $brizyBlock->isSavedBlock() ) {
80
+ $updater = new Brizy_Admin_Cloud_BlockBridge( $this->client );
81
+ $updater->export( $brizyBlock );
82
+ return true;
83
+ }
84
+
85
+ }
86
+
87
+ protected function syncLayout( $layoutId ) {
88
+
89
+ $brizyLayout = Brizy_Editor_Layout::get( $layoutId );
90
+
91
+ if ( $brizyLayout ) {
92
+ $updater = new Brizy_Admin_Cloud_LayoutBridge( $this->client );
93
+ $updater->export( $brizyLayout );
94
+ return true;
95
+ }
96
+ }
97
+
98
+ protected function getLayoutsForSync() {
99
+ global $wpdb;
100
+
101
+ $meta_key = 'brizy-cloud-update-required';
102
+ $savedBlockType = Brizy_Admin_Layouts_Main::CP_LAYOUT;
103
+
104
+ $postIds = $wpdb->get_results(
105
+ "SELECT ID FROM {$wpdb->posts} p
106
+ JOIN {$wpdb->postmeta} pm ON pm.post_id=p.ID and pm.meta_key='{$meta_key}' and pm.meta_value=1
107
+ WHERE p.post_type='{$savedBlockType}'
108
+ LIMIT 1" );
109
+
110
+ return $postIds;
111
+ }
112
+
113
+
114
+ protected function getBlocksForSync() {
115
+ global $wpdb;
116
+
117
+ $meta_key = 'brizy-cloud-update-required';
118
+ $savedBlockType = Brizy_Admin_Blocks_Main::CP_SAVED;
119
+
120
+ $postIds = $wpdb->get_results(
121
+ "SELECT ID FROM {$wpdb->posts} p
122
+ JOIN {$wpdb->postmeta} pm ON pm.post_id=p.ID and pm.meta_key='{$meta_key}' and pm.meta_value=1
123
+ WHERE p.post_type='{$savedBlockType}'
124
+ LIMIT 1
125
+ "
126
+ );
127
+
128
+ return $postIds;
129
+ }
130
+ }
admin/dashboard-widget.php CHANGED
@@ -128,7 +128,7 @@ class Brizy_Admin_DashboardWidget extends Brizy_Admin_AbstractWidget {
128
  }
129
 
130
  $brizy_posts[] = [
131
- 'edit_url' => add_query_arg( [ Brizy_Editor_Constants::EDIT_KEY => '' ], get_permalink( $apost ) ),
132
  'title' => get_the_title( $apost ),
133
  'date' => get_the_modified_date( '', $apost )
134
  ];
128
  }
129
 
130
  $brizy_posts[] = [
131
+ 'edit_url' => add_query_arg( [ Brizy_Editor::prefix('-edit') => '' ], get_permalink( $apost ) ),
132
  'title' => get_the_title( $apost ),
133
  'date' => get_the_modified_date( '', $apost )
134
  ];
admin/entity/abstract-manager.php ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class Brizy_Admin_Entity_AbstractManager implements Brizy_Admin_Entity_ManagerInterface {
4
+
5
+ /**
6
+ * Convert WP_Post to a Block/Layout or something else
7
+ *
8
+ * @param $post
9
+ *
10
+ * @param null $uid
11
+ *
12
+ * @return mixed
13
+ */
14
+ abstract protected function convertWpPostToEntity( $post, $uid = null );
15
+
16
+ /**
17
+ * @param $type
18
+ * @param $uid
19
+ *
20
+ * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed|null
21
+ * @throws Exception
22
+ * @todo: refactor this as a single sql query
23
+ *
24
+ */
25
+ protected function getEntityUidAndType( $uid, $type ) {
26
+ $entities = get_posts( array(
27
+ 'post_type' => $type,
28
+ 'post_status' => 'any',
29
+ 'meta_key' => 'brizy_post_uid',
30
+ 'meta_value' => $uid,
31
+ 'numberposts' => - 1,
32
+ 'orderby' => 'ID',
33
+ 'order' => 'DESC',
34
+ ) );
35
+
36
+ if ( isset( $entities[0] ) ) {
37
+ $block = $this->convertWpPostToEntity( $entities[0] );
38
+ } else {
39
+ $block = null;
40
+ }
41
+
42
+ return $block;
43
+ }
44
+
45
+ /**
46
+ * @param $type
47
+ * @param array $args
48
+ *
49
+ * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed|null
50
+ * @todo: refactor this as a single sql query
51
+ */
52
+ protected function getEntitiesByType( $type, $args = array() ) {
53
+
54
+ $filterArgs = array(
55
+ 'post_type' => $type,
56
+ 'posts_per_page' => - 1,
57
+ 'post_status' => 'publish',
58
+ 'orderby' => 'ID',
59
+ 'order' => 'ASC',
60
+ );
61
+ $filterArgs = array_merge( $filterArgs, $args );
62
+
63
+ $posts = get_posts( $filterArgs );
64
+
65
+ $entities = [];
66
+ foreach ( $posts as $apost ) {
67
+ $entities[] = $this->convertWpPostToEntity( $apost );
68
+ }
69
+
70
+ return $entities;
71
+ }
72
+
73
+ protected function createEntityByType( $uid, $type, $status = 'publish' ) {
74
+ $name = md5( time() );
75
+ $apost = wp_insert_post( array(
76
+ 'post_title' => $name,
77
+ 'post_name' => $name,
78
+ 'post_status' => $status,
79
+ 'post_type' => $type
80
+ ) );
81
+
82
+ if ( $apost ) {
83
+ $brizyPost = $this->convertWpPostToEntity( $apost, $uid );
84
+ $brizyPost->set_uses_editor( true );
85
+ $brizyPost->set_needs_compile( true );
86
+ $brizyPost->setDataVersion( 1 );
87
+
88
+ return $brizyPost;
89
+ }
90
+
91
+ return null;
92
+ }
93
+
94
+ /**
95
+ * @param Brizy_Editor_Entity $entity
96
+ */
97
+ public function deleteEntity( Brizy_Editor_Entity $entity ) {
98
+ do_action( 'brizy_before_entity_delete', $entity );
99
+ wp_delete_post( $entity->getWpPostId() );
100
+ }
101
+
102
+ /**
103
+ * @param Brizy_Editor_Entity $entity
104
+ */
105
+ public function trashEntity( Brizy_Editor_Entity $entity ) {
106
+ do_action( 'brizy_before_entity_delete', $entity );
107
+ wp_trash_post( $entity->getWpPostId() );
108
+ }
109
+
110
+ /**
111
+ * @param Brizy_Editor_Entity[] $entities
112
+ * @param array $fields
113
+ *
114
+ * @return array
115
+ */
116
+ public function createResponseForEntities( $entities, $fields = [] ) {
117
+ $response = [];
118
+ foreach ( $entities as $entity ) {
119
+ $response[] = $entity->createResponse( $fields );
120
+ }
121
+ return $response;
122
+ }
123
+
124
+ }
admin/entity/manager-interface.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ interface Brizy_Admin_Entity_ManagerInterface {
4
+ public function getEntities( $args );
5
+
6
+ public function getEntity( $args );
7
+
8
+ public function createEntity( $uid, $status='publish' );
9
+
10
+ public function deleteEntity( Brizy_Editor_Entity $entity );
11
+ }
admin/fonts/api.php CHANGED
@@ -11,9 +11,9 @@ class Brizy_Admin_Fonts_Api extends Brizy_Admin_AbstractApi {
11
 
12
  const nonce = 'brizy-api';
13
 
14
- const AJAX_CREATE_FONT_ACTION = 'brizy-create-font';
15
- const AJAX_DELETE_FONT_ACTION = 'brizy-delete-font';
16
- const AJAX_GET_FONTS_ACTION = 'brizy-get-fonts';
17
 
18
  /**
19
  * @var Brizy_Admin_Fonts_Manager
@@ -50,9 +50,10 @@ class Brizy_Admin_Fonts_Api extends Brizy_Admin_AbstractApi {
50
  }
51
 
52
  protected function initializeApiActions() {
53
- add_action( 'wp_ajax_' . self::AJAX_CREATE_FONT_ACTION, array( $this, 'actionCreateFont' ) );
54
- add_action( 'wp_ajax_' . self::AJAX_DELETE_FONT_ACTION, array( $this, 'actionDeleteFont' ) );
55
- add_action( 'wp_ajax_' . self::AJAX_GET_FONTS_ACTION, array( $this, 'actionGetFonts' ) );
 
56
  }
57
 
58
  public function actionGetFonts() {
11
 
12
  const nonce = 'brizy-api';
13
 
14
+ const AJAX_CREATE_FONT_ACTION = '-create-font';
15
+ const AJAX_DELETE_FONT_ACTION = '-delete-font';
16
+ const AJAX_GET_FONTS_ACTION = '-get-fonts';
17
 
18
  /**
19
  * @var Brizy_Admin_Fonts_Manager
50
  }
51
 
52
  protected function initializeApiActions() {
53
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
54
+ add_action( $pref . self::AJAX_CREATE_FONT_ACTION, array( $this, 'actionCreateFont' ) );
55
+ add_action( $pref . self::AJAX_DELETE_FONT_ACTION, array( $this, 'actionDeleteFont' ) );
56
+ add_action( $pref . self::AJAX_GET_FONTS_ACTION, array( $this, 'actionGetFonts' ) );
57
  }
58
 
59
  public function actionGetFonts() {
admin/fonts/handler.php CHANGED
@@ -2,13 +2,13 @@
2
 
3
 
4
  class Brizy_Admin_Fonts_Handler extends Brizy_Public_AbstractProxy {
5
- const ENDPOINT = 'brizy-font';
6
 
7
  /**
8
  * @return array
9
  */
10
  protected function get_endpoint_keys() {
11
- return array( self::ENDPOINT );
12
  }
13
 
14
  /**
@@ -23,13 +23,14 @@ class Brizy_Admin_Fonts_Handler extends Brizy_Public_AbstractProxy {
23
 
24
 
25
  // Check if user is not querying API
26
- if ( ! isset( $vars[ self::ENDPOINT ] ) || ! is_string( $vars[ self::ENDPOINT ] ) ) {
 
27
  return;
28
  }
29
 
30
  session_write_close();
31
 
32
- $fontQueries = $this->explodeFont( $vars[ self::ENDPOINT ] );
33
 
34
  if ( count( $fontQueries ) == 0 ) {
35
  return;
2
 
3
 
4
  class Brizy_Admin_Fonts_Handler extends Brizy_Public_AbstractProxy {
5
+ const ENDPOINT = '-font';
6
 
7
  /**
8
  * @return array
9
  */
10
  protected function get_endpoint_keys() {
11
+ return array( Brizy_Editor::prefix( self::ENDPOINT ) );
12
  }
13
 
14
  /**
23
 
24
 
25
  // Check if user is not querying API
26
+ $ENDPOINT = Brizy_Editor::prefix( self::ENDPOINT );
27
+ if ( ! isset( $vars[ $ENDPOINT ] ) || ! is_string( $vars[ $ENDPOINT ] ) ) {
28
  return;
29
  }
30
 
31
  session_write_close();
32
 
33
+ $fontQueries = $this->explodeFont( $vars[ $ENDPOINT ] );
34
 
35
  if ( count( $fontQueries ) == 0 ) {
36
  return;
admin/fonts/manager.php CHANGED
@@ -36,9 +36,9 @@ class Brizy_Admin_Fonts_Manager {
36
  'id' => get_post_meta( $font->ID, 'brizy_post_uid', true ),
37
  'family' => $font->post_title,
38
  'type' => get_post_meta( $font->ID, 'brizy-font-type', true ),
39
- 'weights' => array_map( function ( $v ) {
40
  return $v['meta_value'];
41
- }, $weights )
42
  );
43
  }
44
 
@@ -73,6 +73,51 @@ class Brizy_Admin_Fonts_Manager {
73
  return $this->getFontReturnData( $font );
74
  }
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  public function getFontByFamily( $uid, $family, $type ) {
77
 
78
  $fonts = get_posts( array(
@@ -91,7 +136,6 @@ class Brizy_Admin_Fonts_Manager {
91
  if ( $uid == get_post_meta( $font->ID, 'brizy_post_uid', true ) ) {
92
  return $this->getFontReturnData( $font );
93
  }
94
-
95
  }
96
 
97
  return null;
@@ -168,7 +212,7 @@ class Brizy_Admin_Fonts_Manager {
168
 
169
  if ( ! $id || is_wp_error( $id ) ) {
170
  Brizy_Logger::instance()->critical( 'Unable to handle font sideload', [ $id ] );
171
- throw new Exception( 'Unable to handle font sideload' );
172
  }
173
 
174
  update_post_meta( $id, 'brizy-font-weight', $weight );
@@ -265,6 +309,34 @@ class Brizy_Admin_Fonts_Manager {
265
  );
266
 
267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  return array(
269
  'id' => get_post_meta( $font->ID, 'brizy_post_uid', true ),
270
  'family' => $font->post_title,
36
  'id' => get_post_meta( $font->ID, 'brizy_post_uid', true ),
37
  'family' => $font->post_title,
38
  'type' => get_post_meta( $font->ID, 'brizy-font-type', true ),
39
+ 'weights' => array_values( array_unique( array_map( function ( $v ) {
40
  return $v['meta_value'];
41
+ }, $weights ) ) )
42
  );
43
  }
44
 
73
  return $this->getFontReturnData( $font );
74
  }
75
 
76
+
77
+ /**
78
+ * @param $uid
79
+ *
80
+ * @return array|null
81
+ */
82
+ public function getFontForExport( $uid ) {
83
+
84
+ global $wpdb;
85
+
86
+ $fonts = get_posts( array(
87
+ 'post_type' => Brizy_Admin_Fonts_Main::CP_FONT,
88
+ 'post_status' => 'publish',
89
+ 'meta_key' => 'brizy_post_uid',
90
+ 'meta_value' => $uid,
91
+ 'numberposts' => - 1,
92
+ 'orderby' => 'ID',
93
+ 'order' => 'DESC',
94
+ ) );
95
+
96
+ if ( isset( $fonts[0] ) ) {
97
+ $font = $fonts[0];
98
+ } else {
99
+ return null;
100
+ }
101
+
102
+ $fontData = $this->getFontReturnData( $font );
103
+
104
+ $files = $wpdb->get_results(
105
+ $wpdb->prepare( "SELECT p.ID FROM {$wpdb->posts} p WHERE p.post_parent=%d", array( $font->ID ) ),
106
+ ARRAY_A );
107
+
108
+ $weightFiles = array();
109
+ foreach ( $files as $fileId ) {
110
+ $weight = get_post_meta( $fileId['ID'], 'brizy-font-weight', true );
111
+ $type = get_post_meta( $fileId['ID'], 'brizy-font-file-type', true );
112
+
113
+ $weightFiles[ $weight ][ $type ] = get_attached_file( $fileId['ID'] );
114
+ }
115
+ $fontData['weights'] = $weightFiles;
116
+
117
+ return $fontData;
118
+
119
+ }
120
+
121
  public function getFontByFamily( $uid, $family, $type ) {
122
 
123
  $fonts = get_posts( array(
136
  if ( $uid == get_post_meta( $font->ID, 'brizy_post_uid', true ) ) {
137
  return $this->getFontReturnData( $font );
138
  }
 
139
  }
140
 
141
  return null;
212
 
213
  if ( ! $id || is_wp_error( $id ) ) {
214
  Brizy_Logger::instance()->critical( 'Unable to handle font sideload', [ $id ] );
215
+ throw new Exception( 'Unable to handle font side load' );
216
  }
217
 
218
  update_post_meta( $id, 'brizy-font-weight', $weight );
309
  );
310
 
311
 
312
+ return array(
313
+ 'id' => get_post_meta( $font->ID, 'brizy_post_uid', true ),
314
+ 'family' => $font->post_title,
315
+ 'type' => get_post_meta( $font->ID, 'brizy-font-type', true ),
316
+ 'weights' => array_map( function ( $v ) {
317
+ return $v['meta_value'];
318
+ }, $weights )
319
+ );
320
+ }
321
+
322
+
323
+ /**
324
+ * @param wpdb $wpdb
325
+ * @param $font
326
+ *
327
+ * @return array
328
+ */
329
+ private function getFontReturnDataForExport( $font ) {
330
+ global $wpdb;
331
+
332
+ $weights = $wpdb->get_results( $wpdb->prepare(
333
+ "SELECT DISTINCT m.meta_value FROM {$wpdb->posts} p
334
+ JOIN {$wpdb->postmeta} m ON m.post_id=p.ID && p.post_parent=%d && m.meta_key='brizy-font-weight'
335
+ ",
336
+ array( $font->ID ) ), ARRAY_A
337
+ );
338
+
339
+
340
  return array(
341
  'id' => get_post_meta( $font->ID, 'brizy_post_uid', true ),
342
  'family' => $font->post_title,
admin/form-entries.php CHANGED
@@ -32,6 +32,7 @@ class Brizy_Admin_FormEntries {
32
  //add_action( 'admin_init', array( $this, 'handleEnableButton' ) );
33
  //add_action( 'admin_footer', array( $this, 'addOnOffOption' ) );
34
  add_action( 'admin_footer', array( $this, 'customStylesForList' ) );
 
35
 
36
  add_filter( 'post_row_actions', array( $this, 'filterRowActions' ), 10, 2 );
37
  add_filter( 'manage_' . self::CP_FORM_ENTRY . '_posts_columns', array( $this, 'replaceTitleColumn' ) );
@@ -70,6 +71,15 @@ class Brizy_Admin_FormEntries {
70
  $post = get_post( $post_ID );
71
  $data = json_decode( $post->post_content );
72
 
 
 
 
 
 
 
 
 
 
73
  echo Brizy_TwigEngine::instance( path_join( BRIZY_PLUGIN_PATH, "admin/views" ) )
74
  ->render( 'form-data.html.twig', array( 'data' => $data ) );
75
  }
@@ -89,7 +99,7 @@ class Brizy_Admin_FormEntries {
89
  */
90
  public function filterRowActions( $actions, $post ) {
91
 
92
- $is_allowed = Brizy_Editor::is_user_allowed();
93
 
94
  if ( ! $is_allowed ) {
95
  return $actions;
@@ -170,16 +180,93 @@ class Brizy_Admin_FormEntries {
170
  $screen = get_current_screen();
171
 
172
  if ( self::CP_FORM_ENTRY == $screen->post_type ) {
 
 
 
 
173
  ?>
174
  <style>
175
  .subsubsub {
176
  display: none;
177
  }
178
  </style>
 
 
 
 
 
 
 
 
 
 
 
 
179
  <?php
180
  }
181
  }
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  /**
184
  * @param $fields
185
  * @param Brizy_Editor_Forms_Form $form
@@ -199,13 +286,20 @@ class Brizy_Admin_FormEntries {
199
  unset( $fields[ $i ] );
200
  $fields = array_values( $fields );
201
  }
 
 
 
 
 
202
  }
203
 
204
  $params = array(
205
  'post_title' => $title,
206
  'post_type' => self::CP_FORM_ENTRY,
207
  'post_status' => 'publish',
208
- 'post_content' => json_encode( array( 'formId' => $form->getId(), 'formData' => $fields ) )
 
 
209
  );
210
 
211
  wp_insert_post( $params );
@@ -238,7 +332,7 @@ class Brizy_Admin_FormEntries {
238
  'public' => false,
239
  'has_archive' => false,
240
  'description' => __( 'Leads', 'brizy' ),
241
- 'publicly_queryable' => Brizy_Editor::is_user_allowed(),
242
  'show_ui' => true,
243
  'show_in_menu' => false, //Brizy_Admin_Settings::menu_slug(),
244
  'query_var' => false,
@@ -257,4 +351,4 @@ class Brizy_Admin_FormEntries {
257
  )
258
  );
259
  }
260
- }
32
  //add_action( 'admin_init', array( $this, 'handleEnableButton' ) );
33
  //add_action( 'admin_footer', array( $this, 'addOnOffOption' ) );
34
  add_action( 'admin_footer', array( $this, 'customStylesForList' ) );
35
+ add_action( 'admin_init', [ $this, 'export_leads' ] );
36
 
37
  add_filter( 'post_row_actions', array( $this, 'filterRowActions' ), 10, 2 );
38
  add_filter( 'manage_' . self::CP_FORM_ENTRY . '_posts_columns', array( $this, 'replaceTitleColumn' ) );
71
  $post = get_post( $post_ID );
72
  $data = json_decode( $post->post_content );
73
 
74
+ // We use html_entity_decode the user can insert text in some languages like German, Hindi, etc.
75
+ // and the function json_encode broke the json or encode the characters like this ud83dude00.
76
+ if ( isset( $data->formData ) ) {
77
+ foreach ( $data->formData as $i => $field ) {
78
+ $data->formData[ $i ]->name = html_entity_decode( $field->name );
79
+ $data->formData[ $i ]->value = html_entity_decode( $field->value );
80
+ }
81
+ }
82
+
83
  echo Brizy_TwigEngine::instance( path_join( BRIZY_PLUGIN_PATH, "admin/views" ) )
84
  ->render( 'form-data.html.twig', array( 'data' => $data ) );
85
  }
99
  */
100
  public function filterRowActions( $actions, $post ) {
101
 
102
+ $is_allowed = Brizy_Editor_User::is_user_allowed();
103
 
104
  if ( ! $is_allowed ) {
105
  return $actions;
180
  $screen = get_current_screen();
181
 
182
  if ( self::CP_FORM_ENTRY == $screen->post_type ) {
183
+
184
+ $disable = get_posts( [ 'post_type' => self::CP_FORM_ENTRY,
185
+ 'posts_per_page' => 1
186
+ ] ) ? '' : ' brz-leads-export-disable';
187
  ?>
188
  <style>
189
  .subsubsub {
190
  display: none;
191
  }
192
  </style>
193
+ <script type="text/javascript">
194
+ jQuery(document).ready(function ($) {
195
+ $($(".wrap h1")[0]).append($('#brz-leads-export-tpl-buttons').html());
196
+ });
197
+ </script>
198
+ <template id="brz-leads-export-tpl-buttons">
199
+ <a class="brz-leads-export add-new-h2<?php echo $disable; ?>"
200
+ href="<?php echo admin_url( 'edit.php?post_type=' . self::CP_FORM_ENTRY . '&brizy-export-leads=' . wp_create_nonce( 'brizy-admin-export-leads' ) ); ?>">
201
+ <?php esc_html_e( 'Export to .csv', 'brizy' ); ?>
202
+ </a>
203
+ </template>
204
+
205
  <?php
206
  }
207
  }
208
 
209
+ public function export_leads() {
210
+
211
+ if ( ! current_user_can( 'manage_options' ) || ! isset( $_GET['brizy-export-leads'] ) || ! wp_verify_nonce( $_GET['brizy-export-leads'], 'brizy-admin-export-leads' ) ) {
212
+ return;
213
+ }
214
+
215
+ $leads = get_posts( [ 'post_type' => self::CP_FORM_ENTRY, 'posts_per_page' => - 1 ] );
216
+
217
+ if ( ! $leads ) {
218
+ return;
219
+ }
220
+
221
+ $cols = [];
222
+ $data = [];
223
+
224
+ foreach ( $leads as $lead ) {
225
+ $lead_fields = json_decode( $lead->post_content, true );
226
+ if ( empty( $lead_fields['formData'] ) ) {
227
+ continue;
228
+ }
229
+
230
+ $data[] = $lead_fields['formData'];
231
+
232
+ foreach ( $lead_fields['formData'] as $field ) {
233
+ if ( ! in_array( $field['label'], $cols ) ) {
234
+ $cols[] = $field['label'];
235
+ }
236
+ }
237
+ }
238
+
239
+ if ( empty( $data ) || empty( $cols ) ) {
240
+ return;
241
+ }
242
+
243
+ header( 'Content-Type: text/csv; charset=utf-8' );
244
+ header( 'Content-Disposition: attachment; filename=leads.csv' );
245
+ header( 'Pragma: no-cache' );
246
+ header( 'Expires: 0' );
247
+
248
+ $fp = fopen( 'php://output', 'wb' );
249
+ fputcsv( $fp, $cols );
250
+
251
+ $cols = array_flip( $cols );
252
+ $range = count( $cols );
253
+
254
+ foreach ( $data as $lines ) {
255
+
256
+ $val = array_fill( 0, $range, '' );
257
+
258
+ foreach ( $lines as $line ) {
259
+ $val[ $cols[ $line['label'] ] ] = $line['value'];
260
+ }
261
+
262
+ fputcsv( $fp, $val );
263
+ }
264
+
265
+ fclose( $fp );
266
+
267
+ die();
268
+ }
269
+
270
  /**
271
  * @param $fields
272
  * @param Brizy_Editor_Forms_Form $form
286
  unset( $fields[ $i ] );
287
  $fields = array_values( $fields );
288
  }
289
+
290
+ // We use htmlentities the user can insert text in some languages like German, Hindi, etc.
291
+ // and the function json_encode broke the json or encode the characters.
292
+ $fields[ $i ]->name = htmlentities( $field->name );
293
+ $fields[ $i ]->value = htmlentities( $field->value );
294
  }
295
 
296
  $params = array(
297
  'post_title' => $title,
298
  'post_type' => self::CP_FORM_ENTRY,
299
  'post_status' => 'publish',
300
+ 'post_content' => json_encode( array( 'formId' => $form->getId(),
301
+ 'formData' => $fields
302
+ ), JSON_UNESCAPED_UNICODE )
303
  );
304
 
305
  wp_insert_post( $params );
332
  'public' => false,
333
  'has_archive' => false,
334
  'description' => __( 'Leads', 'brizy' ),
335
+ 'publicly_queryable' => false,
336
  'show_ui' => true,
337
  'show_in_menu' => false, //Brizy_Admin_Settings::menu_slug(),
338
  'query_var' => false,
351
  )
352
  );
353
  }
354
+ }
admin/layouts/api.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Created by PhpStorm.
4
+ * User: alex
5
+ * Date: 7/18/18
6
+ * Time: 10:48 AM
7
+ */
8
+
9
+
10
+ class Brizy_Admin_Layouts_Api extends Brizy_Admin_AbstractApi {
11
+
12
+ const nonce = 'brizy-api';
13
+
14
+ const GET_LAYOUT_BY_UID_ACTION = '-get-layout-by-uid';
15
+ const GET_LAYOUTS_ACTION = '-get-layouts';
16
+ const CREATE_LAYOUT_ACTION = '-create-layout';
17
+ const UPDATE_LAYOUT_ACTION = '-update-layout';
18
+ const DELETE_LAYOUT_ACTION = '-delete-layout';
19
+
20
+ /**
21
+ * @return Brizy_Admin_Layouts_Api
22
+ */
23
+ public static function _init() {
24
+ static $instance;
25
+
26
+ if ( ! $instance ) {
27
+ $instance = new self();
28
+ }
29
+
30
+ return $instance;
31
+ }
32
+
33
+ protected function getRequestNonce() {
34
+ return $this->param( 'hash' );
35
+ }
36
+
37
+ protected function initializeApiActions() {
38
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
39
+ add_action( $pref . self::GET_LAYOUT_BY_UID_ACTION, array( $this, 'actionGetLayoutByUid' ) );
40
+ add_action( $pref . self::GET_LAYOUTS_ACTION, array( $this, 'actionGetLayouts' ) );
41
+ add_action( $pref . self::CREATE_LAYOUT_ACTION, array( $this, 'actionCreateLayout' ) );
42
+ add_action( $pref . self::UPDATE_LAYOUT_ACTION, array( $this, 'actionUpdateLayout' ) );
43
+ add_action( $pref . self::DELETE_LAYOUT_ACTION, array( $this, 'actionDeleteLayout' ) );
44
+ }
45
+
46
+ public function actionGetLayoutByUid() {
47
+ $this->verifyNonce( self::nonce );
48
+
49
+ try {
50
+ $uid = $this->param( 'uid' );
51
+ if ( ! $uid ) {
52
+ $this->error( 400, 'Invalid layout id' );
53
+ }
54
+
55
+ $fields = $this->param( 'fields' ) ? $this->param( 'fields' ) : [];
56
+
57
+ $layoutManager = new Brizy_Admin_Layouts_Manager();
58
+
59
+ $layout = $layoutManager->getEntity( $this->param( 'uid' ) );
60
+
61
+ $layout = apply_filters( 'brizy_get_layout', $layout, $this->param( 'uid' ), $layoutManager );
62
+
63
+ if ( ! $layout ) {
64
+ $this->error( 404, 'Block not found' );
65
+ }
66
+
67
+ $this->success( $layout->createResponse( $fields ) );
68
+
69
+ } catch ( Exception $exception ) {
70
+ $this->error( 400, $exception->getMessage() );
71
+ }
72
+ }
73
+
74
+ public function actionGetLayouts() {
75
+ $this->verifyNonce( self::nonce );
76
+
77
+ try {
78
+ $layoutManager = new Brizy_Admin_Layouts_Manager();
79
+
80
+ $fields = $this->param( 'fields' ) ? $this->param( 'fields' ) : [];
81
+
82
+ $layouts = $layoutManager->getEntities( array() );
83
+ $layouts = apply_filters( 'brizy_get_layouts', $layoutManager->createResponseForEntities( $layouts, $fields ), $fields, $layoutManager );
84
+ $this->success( $layouts );
85
+
86
+ } catch ( Exception $exception ) {
87
+ $this->error( 400, $exception->getMessage() );
88
+ }
89
+ }
90
+
91
+ public function actionCreateLayout() {
92
+ $this->verifyNonce( self::nonce );
93
+
94
+ if ( ! $this->param( 'uid' ) ) {
95
+ $this->error( 400, 'Invalid uid' );
96
+ }
97
+
98
+ if ( ! $this->param( 'data' ) ) {
99
+ $this->error( 400, 'Invalid data' );
100
+ }
101
+
102
+ if ( ! $this->param( 'meta' ) ) {
103
+ $this->error( 400, 'Invalid meta data' );
104
+ }
105
+
106
+ if ( ! $this->param( 'media' ) ) {
107
+ $this->error( 400, 'Invalid media data provided' );
108
+ }
109
+
110
+ try {
111
+ $editorData = stripslashes( $this->param( 'data' ) );
112
+ $layoutManager = new Brizy_Admin_Layouts_Manager();
113
+ $layout = $layoutManager->createEntity( $this->param( 'uid' ), 'publish' );
114
+
115
+ $layout->setMedia( stripslashes( $this->param( 'media' ) ) );
116
+ $layout->setMeta( stripslashes( $this->param( 'meta' ) ) );
117
+ $layout->set_editor_data( $editorData );
118
+ $layout->set_needs_compile( true );
119
+ $layout->setCloudUpdateRequired( true );
120
+ $layout->setDataVersion( 1 );
121
+ $layout->save();
122
+
123
+ do_action( 'brizy_layout_created', $layout );
124
+ do_action( 'brizy_global_data_updated' );
125
+
126
+ $this->success( $layout->createResponse() );
127
+
128
+ } catch ( Exception $exception ) {
129
+ $this->error( 400, $exception->getMessage() );
130
+ }
131
+ }
132
+
133
+ public function actionUpdateLayout() {
134
+ $this->verifyNonce( self::nonce );
135
+
136
+ try {
137
+
138
+ if ( ! $this->param( 'uid' ) ) {
139
+ $this->error( '400', 'Invalid uid' );
140
+ }
141
+
142
+ if ( ! $this->param( 'data' ) ) {
143
+ $this->error( '400', 'Invalid data' );
144
+ }
145
+
146
+ if ( ! $this->param( 'meta' ) ) {
147
+ $this->error( 400, 'Invalid meta data' );
148
+ }
149
+
150
+ if ( ! $this->param( 'dataVersion' ) ) {
151
+ $this->error( 400, 'Invalid data version' );
152
+ }
153
+ $layoutManager = new Brizy_Admin_Layouts_Manager();
154
+ $layout = $layoutManager->getEntity( $this->param( 'uid' ) );
155
+
156
+ if ( ! $layout ) {
157
+ $this->error( 400, 'Layout not found' );
158
+ }
159
+
160
+ /**
161
+ * @var Brizy_Editor_Layout $layout ;
162
+ */
163
+ $layout->setMeta( stripslashes( $this->param( 'meta' ) ) );
164
+ $layout->set_editor_data( stripslashes( $this->param( 'data' ) ) );
165
+ $layout->setDataVersion( $this->param( 'dataVersion' ) );
166
+
167
+ if ( (int) $this->param( 'is_autosave' ) ) {
168
+ $layout->save( 1 );
169
+ } else {
170
+ $layout->save();
171
+ do_action( 'brizy_layout_updated', $layout );
172
+ do_action( 'brizy_global_data_updated' );
173
+ }
174
+
175
+ $this->success( $layout->createResponse() );
176
+ } catch ( Exception $exception ) {
177
+ $this->error( 400, $exception->getMessage() );
178
+ }
179
+ }
180
+
181
+ public function actionDeleteLayout() {
182
+ $this->verifyNonce( self::nonce );
183
+
184
+ if ( ! $this->param( 'uid' ) ) {
185
+ $this->error( '400', 'Invalid uid' );
186
+ }
187
+ $layoutManager = new Brizy_Admin_Layouts_Manager();
188
+ $layout = $layoutManager->getEntity( $this->param( 'uid' ) );
189
+
190
+ do_action( 'brizy_layout_delete', $this->param( 'uid' ) );
191
+
192
+ if ( $layout ) {
193
+ do_action( 'brizy_layout_deleted', $layout );
194
+ do_action( 'brizy_global_data_deleted' );
195
+
196
+ $layoutManager->deleteEntity( $layout );
197
+ $this->success( null );
198
+ }
199
+
200
+ $this->error( '404', 'Layout not found' );
201
+ }
202
+
203
+ // /**
204
+ // * @param $uid
205
+ // * @param $postType
206
+ // *
207
+ // * @return string|null
208
+ // */
209
+ // private function getLayoutIdByUid( $uid ) {
210
+ // global $wpdb;
211
+ //
212
+ // $prepare = $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} p
213
+ // JOIN {$wpdb->postmeta} pm ON
214
+ // pm.post_id=p.ID and
215
+ // meta_key='brizy_post_uid' and
216
+ // meta_value='%s'
217
+ // ORDER BY p.ID DESC
218
+ // LIMIT 1", array( $uid, ) );
219
+ //
220
+ // return $wpdb->get_var( $prepare );
221
+ // }
222
+ //
223
+ // /**
224
+ // * @param $id
225
+ // * @param $postType
226
+ // *
227
+ // * @return Brizy_Editor_Layout|null
228
+ // * @throws Brizy_Editor_Exceptions_NotFound
229
+ // */
230
+ // private function getLayout( $uid ) {
231
+ //
232
+ // $postId = $this->getLayoutIdByUid( $uid );
233
+ //
234
+ // if ( $postId ) {
235
+ // return Brizy_Editor_Layout::get( $postId );
236
+ // }
237
+ //
238
+ // return null;
239
+ //
240
+ // }
241
+ //
242
+ // /**
243
+ // * @param $uid
244
+ // * @param $status
245
+ // * @param $type
246
+ // *
247
+ // * @return Brizy_Editor_Layout|null
248
+ // * @throws Brizy_Editor_Exceptions_NotFound
249
+ // */
250
+ // private function createLayout( $uid, $status, $type ) {
251
+ // $name = md5( time() );
252
+ // $post = wp_insert_post( array(
253
+ // 'post_title' => $name,
254
+ // 'post_name' => $name,
255
+ // 'post_status' => $status,
256
+ // 'post_type' => $type
257
+ // ) );
258
+ //
259
+ // if ( $post ) {
260
+ // $brizyPost = Brizy_Editor_Layout::get( $post, $uid );
261
+ // $brizyPost->set_uses_editor( true );
262
+ // $brizyPost->set_needs_compile( true );
263
+ // $brizyPost->setDataVersion( 1 );
264
+ //
265
+ // return $brizyPost;
266
+ // }
267
+ //
268
+ // throw new Exception( 'Unable to create layout' );
269
+ // }
270
+ //
271
+ //
272
+ // /***
273
+ // * @param $postUid
274
+ // *
275
+ // * @return false|WP_Post|null
276
+ // */
277
+ // private function deleteLayout( $postUid ) {
278
+ //
279
+ // $postId = $this->getLayoutIdByUid( $postUid );
280
+ //
281
+ // return wp_delete_post( $postId );
282
+ // }
283
+
284
+
285
+ }
admin/layouts/main.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Created by PhpStorm.
5
+ * User: alex
6
+ * Date: 1/11/19
7
+ * Time: 10:59 AM
8
+ */
9
+ class Brizy_Admin_Layouts_Main {
10
+
11
+ const CP_LAYOUT = 'brizy-layout';
12
+
13
+ /**
14
+ * @return Brizy_Admin_Layouts_Main
15
+ */
16
+ public static function _init() {
17
+ static $instance;
18
+
19
+ if ( ! $instance ) {
20
+ $instance = new self();
21
+ $instance->initialize();
22
+ }
23
+
24
+ return $instance;
25
+ }
26
+
27
+ public function initialize() {
28
+ add_action( 'wp_loaded', array( $this, 'initializeActions' ) );
29
+ add_filter( 'brizy_supported_post_types', array( $this, 'populateSupportedPosts' ) );
30
+ }
31
+
32
+ static public function registerCustomPosts() {
33
+
34
+ $labels = array(
35
+ 'name' => _x( 'Layouts', 'post type general name' ),
36
+ );
37
+
38
+ register_post_type( self::CP_LAYOUT,
39
+ array(
40
+ 'labels' => $labels,
41
+ 'public' => false,
42
+ 'has_archive' => false,
43
+ 'description' => __( 'Layout.', 'brizy' ),
44
+ 'publicly_queryable' => false,
45
+ 'show_ui' => false,
46
+ 'show_in_menu' => false,
47
+ 'query_var' => false,
48
+ 'capability_type' => 'page',
49
+ 'hierarchical' => false,
50
+ 'show_in_rest' => false,
51
+ 'exclude_from_search' => true,
52
+ 'supports' => array( 'title', 'revisions', 'page-attributes' )
53
+ )
54
+ );
55
+
56
+ $labels = array(
57
+ 'name' => _x( 'Layouts', 'brizy' ),
58
+ );
59
+
60
+
61
+ }
62
+
63
+ /**
64
+ * @param $types
65
+ *
66
+ * @return array
67
+ */
68
+ public function populateSupportedPosts( $types ) {
69
+ $types[] = self::CP_LAYOUT;
70
+
71
+ return $types;
72
+ }
73
+
74
+ public function initializeActions() {
75
+ Brizy_Admin_Layouts_Api::_init();
76
+ }
77
+ }
admin/layouts/manager.php ADDED
@@ -0,0 +1,199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Admin_Layouts_Manager extends Brizy_Admin_Entity_AbstractManager {
4
+
5
+ /**
6
+ * @var string
7
+ */
8
+ private $blockType;
9
+
10
+ /**
11
+ * Brizy_Admin_Layouts_Manager constructor.
12
+ *
13
+ * @throws Exception
14
+ */
15
+ public function __construct() {
16
+ $this->blockType = Brizy_Admin_Layouts_Main::CP_LAYOUT;
17
+ }
18
+
19
+ /**
20
+ * @param $args
21
+ *
22
+ * @return Brizy_Editor_Layout[]
23
+ * @throws Exception
24
+ */
25
+ public function getEntities( $args ) {
26
+ return $this->getEntitiesByType( $this->blockType, $args );
27
+ }
28
+
29
+ /**
30
+ * @param $uid
31
+ *
32
+ * @return Brizy_Editor_Layout
33
+ * @throws Exception
34
+ */
35
+ public function getEntity( $uid ) {
36
+ return $this->getEntityUidAndType( $uid, $this->blockType );
37
+ }
38
+
39
+ /**
40
+ * @param $uid
41
+ * @param string $status
42
+ *
43
+ * @return mixed|null+
44
+ */
45
+ public function createEntity( $uid, $status = 'publish' ) {
46
+ return $this->createEntityByType( $uid, $this->blockType, $status );
47
+ }
48
+
49
+ /**
50
+ * @param $post
51
+ * @param null $uid
52
+ *
53
+ * @return Brizy_Editor_Layout|Brizy_Editor_Post|mixed$uid
54
+ * @throws Exception
55
+ */
56
+ protected function convertWpPostToEntity( $post, $uid = null ) {
57
+ return Brizy_Editor_Layout::get( $post, $uid );
58
+ }
59
+
60
+ //=====================================================================
61
+ //=====================================================================
62
+ //=====================================================================
63
+ //=====================================================================
64
+ //=====================================================================
65
+ //=====================================================================
66
+
67
+
68
+ // /**
69
+ // * @param $type
70
+ // * @param $arags
71
+ // * @param array $fields
72
+ // *
73
+ // * @return array
74
+ // * @throws Brizy_Editor_Exceptions_NotFound
75
+ // */
76
+ // public function getAllLayouts( $arags, $fields = array() ) {
77
+ // $layouts = [];
78
+ // try {
79
+ // $layouts = $this->getLocalLayouts( $arags, $fields );
80
+ //
81
+ // $versions = $this->cloud->getCloudEditorVersions();
82
+ // $cloudBlocks = $this->cloud->getLayouts( array( 'fields' => array( 'uid', 'meta' ) ) );
83
+ //
84
+ // if ( $this->cloud && $versions['sync'] == BRIZY_SYNC_VERSION ) {
85
+ //
86
+ // foreach ( (array) $cloudBlocks as $cblock ) {
87
+ // $existingBlock = false;
88
+ // foreach ( $layouts as $block ) {
89
+ // if ( $cblock->uid == $block['uid'] ) {
90
+ // $existingBlock = true;
91
+ // }
92
+ // }
93
+ //
94
+ // if ( ! $existingBlock ) {
95
+ // $localLayout = $this->getLayoutByUid( $cblock->uid );
96
+ //
97
+ // if ( $localLayout ) {
98
+ // $cblock->synchronized = $localLayout->isSynchronized( $this->cloud->getBrizyProject()->getCloudAccountId() );
99
+ // } else {
100
+ // $cblock->synchronized = false;
101
+ // }
102
+ //
103
+ // if ( in_array( 'isCloudEntity', $fields ) ) {
104
+ // $cblock->isCloudEntity = true;
105
+ // }
106
+ //
107
+ // if ( in_array( 'synchronizable', $fields ) ) {
108
+ // $cblock->synchronizable = true;
109
+ // }
110
+ //
111
+ // $cblock->synchronizable = true;
112
+ // $layouts[] = (array) $cblock;
113
+ // }
114
+ // }
115
+ // }
116
+ // } catch ( Exception $e ) {
117
+ //
118
+ // }
119
+ //
120
+ // return $layouts;
121
+ // }
122
+
123
+ // /**
124
+ // * @param $uid
125
+ // * @param array $fields
126
+ // *
127
+ // * @return array|mixed|null
128
+ // * @throws Exception
129
+ // */
130
+ // public function getLayoutByUid( $uid, $fields = array() ) {
131
+ //
132
+ // $layout = $this->getLocalLayout( $uid, $fields );
133
+ // $versions = $this->cloud->getCloudEditorVersions();
134
+ //
135
+ // if ( ! $layout && $this->cloud && $versions['sync'] == BRIZY_SYNC_VERSION ) {
136
+ // $bridge = new Brizy_Admin_Cloud_LayoutBridge( $this->cloud );
137
+ // $bridge->import( $uid );
138
+ //
139
+ // $layout = $this->getLocalLayout( $uid, $fields );
140
+ // }
141
+ //
142
+ // return $layout;
143
+ // }
144
+ //
145
+ //
146
+ // /**
147
+ // * @param array $arags
148
+ // * @param array $fields
149
+ // *
150
+ // * @return array
151
+ // * @throws Exception
152
+ // */
153
+ // public function getLocalLayouts( $arags = array(), $fields = array() ) {
154
+ // $filterArgs = array(
155
+ // 'post_type' => Brizy_Admin_Layouts_Main::CP_LAYOUT,
156
+ // 'posts_per_page' => - 1,
157
+ // 'post_status' => 'any',
158
+ // 'orderby' => 'ID',
159
+ // 'order' => 'ASC',
160
+ // );
161
+ // $filterArgs = array_merge( $filterArgs, $arags );
162
+ //
163
+ // $wpBlocks = get_posts( $filterArgs );
164
+ // $layouts = array();
165
+ //
166
+ // foreach ( $wpBlocks as $wpPost ) {
167
+ // $layouts[] = \Brizy_Editor_Layout::get( $wpPost )->createResponse( $fields );
168
+ // }
169
+ //
170
+ // return $layouts;
171
+ // }
172
+
173
+ // /**
174
+ // * @param $uid
175
+ // * @param array $fields
176
+ // *
177
+ // * @return array|mixed|null
178
+ // * @throws Exception
179
+ // */
180
+ // public function getLocalLayout( $uid, $fields = array() ) {
181
+ // $blocks = get_posts( array(
182
+ // 'post_type' => Brizy_Admin_Layouts_Main::CP_LAYOUT,
183
+ // 'post_status' => 'publish',
184
+ // 'meta_key' => 'brizy_post_uid',
185
+ // 'meta_value' => $uid,
186
+ // 'numberposts' => - 1,
187
+ // 'orderby' => 'ID',
188
+ // 'order' => 'DESC',
189
+ // ) );
190
+ //
191
+ // if ( isset( $blocks[0] ) ) {
192
+ // $block = \Brizy_Editor_Layout::get( $blocks[0] )->createResponse( $fields );
193
+ // } else {
194
+ // $block = null;
195
+ // }
196
+ //
197
+ // return $block;
198
+ // }
199
+ }
admin/main.php CHANGED
@@ -21,19 +21,14 @@ class Brizy_Admin_Main {
21
  */
22
  protected function __construct() {
23
 
24
- if ( ! Brizy_Editor::is_user_allowed() ) {
25
  return;
26
  }
27
 
28
- // watch all supported posts and create meta revisions
29
- $metaManager = new Brizy_Admin_Post_RevisionManager();
30
- $metaManager->addMonitor( new Brizy_Admin_Post_BrizyPostsMonitor() );
31
- $metaManager->addMonitor( new Brizy_Admin_Post_ProjectPostMonitor() );
32
-
33
  // enqueue admin scripts
34
  add_action( 'admin_enqueue_scripts', array( $this, 'action_register_static' ) );
35
 
36
- if ( current_user_can( Brizy_Admin_Capabilities::CAP_EDIT_WHOLE_PAGE ) || Brizy_Editor::is_administrator() ) {
37
  add_action( 'admin_post__brizy_admin_editor_enable', array(
38
  $this,
39
  'action_request_enable'
@@ -74,8 +69,39 @@ class Brizy_Admin_Main {
74
  add_filter( 'save_post', array( $this, 'save_focal_point' ), 10, 2 );
75
 
76
  add_filter( 'admin_post_thumbnail_html', array( $this, 'addFocalPoint' ), 10, 3 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  }
78
 
 
79
  public function addFocalPoint( $content, $postId, $thumbId ) {
80
 
81
  if ( ! $thumbId ) {
@@ -177,7 +203,6 @@ class Brizy_Admin_Main {
177
  // }
178
  // }
179
 
180
-
181
  /**
182
  * @param $post_id
183
  * @param $post
@@ -251,33 +276,35 @@ class Brizy_Admin_Main {
251
  */
252
  public function action_register_static() {
253
 
 
 
254
  wp_enqueue_style(
255
- Brizy_Editor::get()->get_slug() . '-admin-css',
256
- Brizy_Editor::get()->get_url( 'admin/static/css/style.css' ),
257
  array(),
258
- Brizy_Editor::get()->get_version()
259
  );
260
 
261
  wp_enqueue_script(
262
- Brizy_Editor::get()->get_slug() . '-admin-js',
263
- Brizy_Editor::get()->get_url( 'admin/static/js/script.js' ),
264
  array( 'jquery', 'underscore' ),
265
- Brizy_Editor::get()->get_version(),
266
  true
267
  );
268
 
269
  wp_enqueue_script(
270
- Brizy_Editor::get()->get_slug() . '-admin-featured-image-js',
271
- Brizy_Editor::get()->get_url( 'admin/static/js/featured-image.js' ),
272
  array( 'jquery', 'underscore' ),
273
- Brizy_Editor::get()->get_version(),
274
  true
275
  );
276
 
277
  $get_post_focal = get_post_meta( get_the_ID(), 'brizy_attachment_focal_point', true );
278
 
279
  wp_localize_script(
280
- Brizy_Editor::get()->get_slug() . '-admin-js',
281
  'Brizy_Admin_Data',
282
  array(
283
  'url' => admin_url( 'admin-ajax.php' ),
@@ -366,7 +393,6 @@ class Brizy_Admin_Main {
366
  }
367
 
368
 
369
-
370
  /**
371
  * @internal
372
  **/
@@ -387,7 +413,7 @@ class Brizy_Admin_Main {
387
  'post' => $p,
388
  'is_using_brizy' => $is_using_brizy,
389
  'url' => add_query_arg(
390
- array( Brizy_Editor_Constants::EDIT_KEY => '' ),
391
  get_permalink( get_the_ID() )
392
  )
393
  ) );
@@ -404,7 +430,7 @@ class Brizy_Admin_Main {
404
  */
405
  public function filter_add_brizy_edit_row_actions( $actions, $post ) {
406
 
407
- $is_allowed = Brizy_Editor::is_user_allowed();
408
 
409
  if ( ! $is_allowed || ! in_array( get_post_type(), Brizy_Editor::get()->supported_post_types() ) ) {
410
  return $actions;
@@ -467,6 +493,8 @@ class Brizy_Admin_Main {
467
  wp_redirect( $_SERVER['HTTP_REFERER'] );
468
  }
469
 
 
 
470
  try {
471
 
472
  $update_post = false;
@@ -581,6 +609,13 @@ class Brizy_Admin_Main {
581
  return $existing;
582
  }
583
 
 
 
 
 
 
 
 
584
  public function handleNewProjectMetaImport( $postMeta, $post_id, $post ) {
585
  if ( $post['post_type'] == Brizy_Editor_Project::BRIZY_PROJECT ) {
586
  return null;
21
  */
22
  protected function __construct() {
23
 
24
+ if ( ! Brizy_Editor_User::is_user_allowed() ) {
25
  return;
26
  }
27
 
 
 
 
 
 
28
  // enqueue admin scripts
29
  add_action( 'admin_enqueue_scripts', array( $this, 'action_register_static' ) );
30
 
31
+ if ( current_user_can( Brizy_Admin_Capabilities::CAP_EDIT_WHOLE_PAGE ) || Brizy_Editor_User::is_administrator() ) {
32
  add_action( 'admin_post__brizy_admin_editor_enable', array(
33
  $this,
34
  'action_request_enable'
69
  add_filter( 'save_post', array( $this, 'save_focal_point' ), 10, 2 );
70
 
71
  add_filter( 'admin_post_thumbnail_html', array( $this, 'addFocalPoint' ), 10, 3 );
72
+ add_filter( 'content_edit_pre', array( $this, 'fixContentForPastBrizyPosts' ), 10, 2 );
73
+ }
74
+
75
+ /**
76
+ * @param $content
77
+ *
78
+ * @return null|string|string[]
79
+ * @throws Exception
80
+ */
81
+ public function fixContentForPastBrizyPosts( $content, $postId ) {
82
+
83
+ $post = get_post( $postId );
84
+
85
+ // do not fix anything for popups/blocksand templates
86
+ if ( in_array( $post->post_type, [
87
+ Brizy_Admin_Templates::CP_TEMPLATE,
88
+ Brizy_Admin_Blocks_Main::CP_GLOBAL,
89
+ Brizy_Admin_Blocks_Main::CP_SAVED,
90
+ Brizy_Admin_Popups_Main::CP_POPUP
91
+ ] ) ) {
92
+ return $content;
93
+ }
94
+
95
+
96
+ $brizyPost = get_post_meta( $postId, Brizy_Editor_Storage_Post::META_KEY, false );
97
+ if ( $brizyPost ) {
98
+ return apply_filters( 'brizy_content', $content, Brizy_Editor_Project::get(), $post, 'body' );
99
+ }
100
+
101
+ return $content;
102
  }
103
 
104
+
105
  public function addFocalPoint( $content, $postId, $thumbId ) {
106
 
107
  if ( ! $thumbId ) {
203
  // }
204
  // }
205
 
 
206
  /**
207
  * @param $post_id
208
  * @param $post
276
  */
277
  public function action_register_static() {
278
 
279
+ $urlBuilder = new Brizy_Editor_UrlBuilder();
280
+
281
  wp_enqueue_style(
282
+ Brizy_Editor::get_slug() . '-admin-css',
283
+ $urlBuilder->plugin_url( 'admin/static/css/style.css' ),
284
  array(),
285
+ BRIZY_VERSION
286
  );
287
 
288
  wp_enqueue_script(
289
+ Brizy_Editor::get_slug() . '-admin-js',
290
+ $urlBuilder->plugin_url( 'admin/static/js/script.js' ),
291
  array( 'jquery', 'underscore' ),
292
+ BRIZY_VERSION,
293
  true
294
  );
295
 
296
  wp_enqueue_script(
297
+ Brizy_Editor::get_slug() . '-admin-featured-image-js',
298
+ $urlBuilder->plugin_url( 'admin/static/js/featured-image.js' ),
299
  array( 'jquery', 'underscore' ),
300
+ BRIZY_VERSION,
301
  true
302
  );
303
 
304
  $get_post_focal = get_post_meta( get_the_ID(), 'brizy_attachment_focal_point', true );
305
 
306
  wp_localize_script(
307
+ Brizy_Editor::get_slug() . '-admin-js',
308
  'Brizy_Admin_Data',
309
  array(
310
  'url' => admin_url( 'admin-ajax.php' ),
393
  }
394
 
395
 
 
396
  /**
397
  * @internal
398
  **/
413
  'post' => $p,
414
  'is_using_brizy' => $is_using_brizy,
415
  'url' => add_query_arg(
416
+ array( Brizy_Editor::prefix('-edit') => '' ),
417
  get_permalink( get_the_ID() )
418
  )
419
  ) );
430
  */
431
  public function filter_add_brizy_edit_row_actions( $actions, $post ) {
432
 
433
+ $is_allowed = Brizy_Editor_User::is_user_allowed();
434
 
435
  if ( ! $is_allowed || ! in_array( get_post_type(), Brizy_Editor::get()->supported_post_types() ) ) {
436
  return $actions;
493
  wp_redirect( $_SERVER['HTTP_REFERER'] );
494
  }
495
 
496
+
497
+
498
  try {
499
 
500
  $update_post = false;
609
  return $existing;
610
  }
611
 
612
+ /**
613
+ * @param $postMeta
614
+ * @param $post_id
615
+ * @param $post
616
+ *
617
+ * @return null
618
+ */
619
  public function handleNewProjectMetaImport( $postMeta, $post_id, $post ) {
620
  if ( $post['post_type'] == Brizy_Editor_Project::BRIZY_PROJECT ) {
621
  return null;
admin/migrations.php CHANGED
@@ -63,6 +63,7 @@ class Brizy_Admin_Migrations {
63
  new Brizy_Admin_Migrations_RulesMigration,
64
  new Brizy_Admin_Migrations_ShortcodesMobileOneMigration,
65
  new Brizy_Admin_Migrations_FixGlobalsToDataMigration,
 
66
  );
67
 
68
  usort( $migrations, function ( $a, $b ) {
@@ -173,7 +174,6 @@ class Brizy_Admin_Migrations {
173
  }
174
  }
175
 
176
-
177
  Brizy_Logger::instance()->debug( 'Migration process successful' );
178
  }
179
  }
63
  new Brizy_Admin_Migrations_RulesMigration,
64
  new Brizy_Admin_Migrations_ShortcodesMobileOneMigration,
65
  new Brizy_Admin_Migrations_FixGlobalsToDataMigration,
66
+ new Brizy_Admin_Migrations_ScreenshotMigration,
67
  );
68
 
69
  usort( $migrations, function ( $a, $b ) {
174
  }
175
  }
176
 
 
177
  Brizy_Logger::instance()->debug( 'Migration process successful' );
178
  }
179
  }
admin/migrations/global-blocks-to-custom-post-migration.php CHANGED
@@ -62,7 +62,6 @@ class Brizy_Admin_Migrations_GlobalBlocksToCustomPostMigration implements Brizy_
62
  $brizyPost->set_needs_compile( true );
63
  $brizyPost->saveStorage();
64
  }
65
-
66
  }
67
  }
68
 
62
  $brizyPost->set_needs_compile( true );
63
  $brizyPost->saveStorage();
64
  }
 
65
  }
66
  }
67
 
admin/migrations/globals-to-data-migration.php CHANGED
@@ -1,5 +1,8 @@
1
  <?php
2
 
 
 
 
3
  class Brizy_Admin_Migrations_GlobalsToDataMigration implements Brizy_Admin_Migrations_MigrationInterface {
4
 
5
  use Brizy_Admin_Migrations_PostsTrait;
@@ -36,8 +39,8 @@ class Brizy_Admin_Migrations_GlobalsToDataMigration implements Brizy_Admin_Migra
36
  $beforeMergeGlobals = json_decode( base64_decode( $globals ) );
37
  $editorBuildPath = Brizy_Editor_UrlBuilder::editor_build_path();
38
 
39
- $context = new \Brizy\DataToProjectContext( $beforeMergeGlobals, $editorBuildPath );
40
- $projectMigration = new \Brizy\DataToProjectTransformer();
41
  $mergedGlobals = $projectMigration->execute( $context );
42
  $storage->set( 'data', base64_encode( json_encode( $mergedGlobals ) ) );
43
  $storage->delete( 'globals' );
1
  <?php
2
 
3
+ use \Brizy\DataToProjectContext;
4
+ use \Brizy\DataToProjectTransformer;
5
+
6
  class Brizy_Admin_Migrations_GlobalsToDataMigration implements Brizy_Admin_Migrations_MigrationInterface {
7
 
8
  use Brizy_Admin_Migrations_PostsTrait;
39
  $beforeMergeGlobals = json_decode( base64_decode( $globals ) );
40
  $editorBuildPath = Brizy_Editor_UrlBuilder::editor_build_path();
41
 
42
+ $context = new DataToProjectContext( $beforeMergeGlobals, $editorBuildPath );
43
+ $projectMigration = new DataToProjectTransformer();
44
  $mergedGlobals = $projectMigration->execute( $context );
45
  $storage->set( 'data', base64_encode( json_encode( $mergedGlobals ) ) );
46
  $storage->delete( 'globals' );
admin/migrations/screenshot-migration.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class Brizy_Admin_Migrations_ScreenshotMigration implements Brizy_Admin_Migrations_MigrationInterface {
5
+
6
+ /**
7
+ * @return int|mixed
8
+ */
9
+ public function getPriority() {
10
+ return 0;
11
+ }
12
+
13
+ /**
14
+ * Return the version
15
+ *
16
+ * @return mixed
17
+ */
18
+ public function getVersion() {
19
+ return '1.0.123';
20
+ }
21
+
22
+ /**
23
+ * Run this method when upgrading.
24
+ *
25
+ * @return mixed
26
+ */
27
+ public function execute() {
28
+ // this is a null migration
29
+
30
+ global $wpdb;
31
+
32
+ try {
33
+
34
+ if ( ! class_exists( 'Brizy\BlockScreenshotContext' ) || ! class_exists( 'Brizy\BlockScreenshotTransformer' ) ) {
35
+ throw new Exception();
36
+ }
37
+
38
+ $entities = $wpdb->get_results(
39
+ "SELECT
40
+ p.id as ID
41
+ FROM {$wpdb->posts} p
42
+ LEFT JOIN {$wpdb->posts} pp ON pp.id=p.post_parent
43
+ WHERE IF(pp.post_type IS NOT NULL,pp.post_type,p.post_type) in ('brizy-global-block','brizy-saved-block')
44
+
45
+ " );
46
+
47
+ foreach ( $entities as $row ) {
48
+ if ( metadata_exists( 'post', $row->ID, Brizy_Editor_Block::BRIZY_META ) ) {
49
+ continue;
50
+ }
51
+ $this->migrateEntity( $row->ID );
52
+ }
53
+
54
+
55
+ } catch ( Exception $e ) {
56
+ Brizy_Logger::instance()->critical( 'Filed migration Brizy_Admin_Migrations_ScreenshotMigration', [ $e ] );
57
+ throw new $e;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * @param $postId
63
+ */
64
+ private function migrateEntity( $postId ) {
65
+ $storage = Brizy_Editor_Storage_Post::instance( $postId );
66
+ $storage_post = $storage->get( Brizy_Editor_Post::BRIZY_POST, true );
67
+
68
+ if ( ! isset( $storage_post['editor_data'] ) ) {
69
+ throw new Exception( 'editor_data not found on block: ' . $postId );
70
+ }
71
+
72
+ if ( ( $dataJson = base64_decode( $storage_post['editor_data'], true ) ) === false ) {
73
+ $dataJson = $storage_post['editor_data'];
74
+ }
75
+
76
+ $dataObject = json_decode( $dataJson );
77
+
78
+ $transformerContext = new \Brizy\BlockScreenshotContext( $dataObject );
79
+ $transformer = new \Brizy\BlockScreenshotTransformer();
80
+ $transformer->execute( $transformerContext );
81
+
82
+
83
+ $metaJson = json_encode( $transformerContext->getMeta() );
84
+ update_metadata( 'post', $postId, Brizy_Editor_Block::BRIZY_META, $metaJson );
85
+ }
86
+ }
admin/migrations/shortcodes-mobile-one-migration.php CHANGED
@@ -90,6 +90,11 @@ class Brizy_Admin_Migrations_ShortcodesMobileOneMigration implements Brizy_Admin
90
 
91
  $instance = Brizy_Editor_Storage_Project::instance( $item->ID );
92
  $storage = $instance->get_storage();
 
 
 
 
 
93
  $json_value = base64_decode($storage['globals']);
94
 
95
  if( !is_null($json_value) ) {
90
 
91
  $instance = Brizy_Editor_Storage_Project::instance( $item->ID );
92
  $storage = $instance->get_storage();
93
+
94
+ if ( ! isset( $storage['globals'] ) ) {
95
+ continue;
96
+ }
97
+
98
  $json_value = base64_decode($storage['globals']);
99
 
100
  if( !is_null($json_value) ) {
admin/optimize-images.php CHANGED
@@ -139,8 +139,24 @@ class Brizy_Admin_OptimizeImages {
139
 
140
  $content = Brizy_SiteUrlReplacer::restoreSiteUrl( $content );
141
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  $content = apply_filters( 'brizy_content', $content, $project, get_post( $postId ) );
143
 
 
 
144
  return $this->extract_media_urls( $urls, $content, $filesystem );
145
  }
146
 
@@ -193,6 +209,7 @@ class Brizy_Admin_OptimizeImages {
193
  private function get_settings_tab( $context ) {
194
  $settings = Brizy_Editor_Project::get()->getImageOptimizerSettings();
195
  $context['submit_label'] = __( 'Save' );
 
196
  $context['settings'] = isset( $settings['shortpixel'] ) ? $settings['shortpixel'] : array(
197
  'API_KEY' => '',
198
  "lossy" => 1
@@ -217,7 +234,8 @@ class Brizy_Admin_OptimizeImages {
217
  $site_url = str_replace( array( 'http://', 'https://', '/', '.' ), array( '', '', '\/', '\.' ), home_url() );
218
 
219
  //preg_match_all( '/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
220
- preg_match_all( '/(http|https):\/\/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
 
221
 
222
  if ( ! isset( $matches[0] ) || count( $matches[0] ) == 0 ) {
223
  return $urls;
@@ -226,9 +244,10 @@ class Brizy_Admin_OptimizeImages {
226
  $time = time();
227
  $t = null;
228
  $attachmentUids = array();
229
- foreach ( $matches[0] as $i => $url ) {
 
230
 
231
- $parsed_url = parse_url( html_entity_decode( $matches[0][ $i ] ) );
232
 
233
  if ( ! isset( $parsed_url['query'] ) ) {
234
  continue;
@@ -236,20 +255,21 @@ class Brizy_Admin_OptimizeImages {
236
 
237
  parse_str( $parsed_url['query'], $params );
238
 
239
- if ( ! isset( $params[ Brizy_Public_CropProxy::ENDPOINT ] ) ) {
240
  continue;
241
  }
242
 
243
- $mediaUid = $params[ Brizy_Public_CropProxy::ENDPOINT ];
244
-
245
- if ( strpos( $mediaUid, 'wp-' ) !== false ) {
246
- $attachmentUids[] = array(
247
- 'url' => $url,
248
- 'parsed_url' => $parsed_url,
249
- 'uid' => $mediaUid,
250
- 'uidQuery' => "'{$mediaUid}'"
251
- );
252
- }
 
253
  }
254
 
255
  if ( count( $attachmentUids ) === 0 ) {
@@ -273,12 +293,13 @@ class Brizy_Admin_OptimizeImages {
273
 
274
  $attachmentUids = array_map( function ( $o ) use ( $attachmentIds ) {
275
  foreach ( $attachmentIds as $row ) {
276
- if ( $row->UID === $o['uid'] ) {
277
- $o['ID'] = $row->ID;
 
278
  }
279
-
280
- return $o;
281
  }
 
 
282
  }, $attachmentUids );
283
 
284
 
@@ -286,20 +307,17 @@ class Brizy_Admin_OptimizeImages {
286
 
287
  $parsed_url = $uidRes['parsed_url'];
288
 
289
- if ( ! isset( $parsed_url['query'] ) || !isset($uidRes['ID']) ) {
290
  continue;
291
  }
292
 
293
- parse_str( $parsed_url['query'], $params );
294
 
295
- if ( ! isset( $params[ Brizy_Public_CropProxy::ENDPOINT ] ) ) {
296
- continue;
297
- }
298
 
299
- $media_url = get_attached_file( $uidRes['ID'] );
300
  $brizy_media = basename( $media_url );
301
 
302
- $wp_imageFullName = sprintf( "%s/assets/images/%s/optimized/%s", $params['brizy_post'], $params['brizy_crop'], $brizy_media );
303
 
304
  if ( ! $filesystem->has( $wp_imageFullName ) ) {
305
  $urls[] = $uidRes['url'] . "&brizy_optimize=1&t=" . $time;
@@ -351,5 +369,4 @@ class Brizy_Admin_OptimizeImages {
351
  return apply_filters( 'brizy_optimizer_tabs', $tabs );
352
  }
353
 
354
-
355
  }
139
 
140
  $content = Brizy_SiteUrlReplacer::restoreSiteUrl( $content );
141
 
142
+ $closure = function ( $processors ) {
143
+ foreach ( $processors as $i => $processor ) {
144
+ if ( $processor instanceof Brizy_Editor_Asset_MediaAssetProcessor ) {
145
+ unset( $processors[ $i ] );
146
+
147
+ return $processors;
148
+ }
149
+ }
150
+
151
+ return $processors;
152
+ };
153
+
154
+ add_filter( 'brizy_content_processors', $closure );
155
+
156
  $content = apply_filters( 'brizy_content', $content, $project, get_post( $postId ) );
157
 
158
+ remove_filter( 'brizy_content_processors', $closure );
159
+
160
  return $this->extract_media_urls( $urls, $content, $filesystem );
161
  }
162
 
209
  private function get_settings_tab( $context ) {
210
  $settings = Brizy_Editor_Project::get()->getImageOptimizerSettings();
211
  $context['submit_label'] = __( 'Save' );
212
+ $context['shortpixel_link'] = apply_filters('brizy_shortpixel_api_key_link','https://shortpixel.com/otp/af/QDDDRHB707903');
213
  $context['settings'] = isset( $settings['shortpixel'] ) ? $settings['shortpixel'] : array(
214
  'API_KEY' => '',
215
  "lossy" => 1
234
  $site_url = str_replace( array( 'http://', 'https://', '/', '.' ), array( '', '', '\/', '\.' ), home_url() );
235
 
236
  //preg_match_all( '/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
237
+ $endpoint = Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT );
238
+ preg_match_all( '/(http|https):\/\/' . $site_url . '\/?(\?' . $endpoint . '=(.[^"\',\s)]*))/im', $content, $matches );
239
 
240
  if ( ! isset( $matches[0] ) || count( $matches[0] ) == 0 ) {
241
  return $urls;
244
  $time = time();
245
  $t = null;
246
  $attachmentUids = array();
247
+ $uniqueUrls = array_unique($matches[0]);
248
+ foreach ( $uniqueUrls as $i => $url ) {
249
 
250
+ $parsed_url = parse_url( html_entity_decode( $url ) );
251
 
252
  if ( ! isset( $parsed_url['query'] ) ) {
253
  continue;
255
 
256
  parse_str( $parsed_url['query'], $params );
257
 
258
+ if ( ! isset( $params[ $endpoint ] ) ) {
259
  continue;
260
  }
261
 
262
+ $mediaUid = $params[ $endpoint ];
263
+
264
+ //if ( strpos( $mediaUid, 'wp-' ) !== false ) {
265
+ $attachmentUids[] = array(
266
+ 'url' => $url,
267
+ 'parsed_url' => $parsed_url,
268
+ 'parsed_query' => $params,
269
+ 'uid' => $mediaUid,
270
+ 'uidQuery' => "'{$mediaUid}'"
271
+ );
272
+ //}
273
  }
274
 
275
  if ( count( $attachmentUids ) === 0 ) {
293
 
294
  $attachmentUids = array_map( function ( $o ) use ( $attachmentIds ) {
295
  foreach ( $attachmentIds as $row ) {
296
+ if ( $row->UID == $o['uid'] ) {
297
+ $o['attachmentID'] = $row->ID;
298
+ return $o;
299
  }
 
 
300
  }
301
+
302
+ return $o;
303
  }, $attachmentUids );
304
 
305
 
307
 
308
  $parsed_url = $uidRes['parsed_url'];
309
 
310
+ if ( ! isset( $parsed_url['query'] ) || ! isset( $uidRes['attachmentID'] ) ) {
311
  continue;
312
  }
313
 
314
+ $params = $uidRes['parsed_query'];
315
 
 
 
 
316
 
317
+ $media_url = get_attached_file( $uidRes['attachmentID'] );
318
  $brizy_media = basename( $media_url );
319
 
320
+ $wp_imageFullName = sprintf( "%s/assets/images/%s/optimized/%s", $params[ Brizy_Editor::prefix( '_post' ) ], $params[ Brizy_Editor::prefix( '_crop' ) ], $brizy_media );
321
 
322
  if ( ! $filesystem->has( $wp_imageFullName ) ) {
323
  $urls[] = $uidRes['url'] . "&brizy_optimize=1&t=" . $time;
369
  return apply_filters( 'brizy_optimizer_tabs', $tabs );
370
  }
371
 
 
372
  }
admin/popups/main.php CHANGED
@@ -26,6 +26,7 @@ class Brizy_Admin_Popups_Main {
26
  }
27
 
28
  public function initialize() {
 
29
  add_filter( 'brizy_content', array( $this, 'insertPopupsHtml' ), - 999999, 4 );
30
  add_action( 'brizy_after_enabled_for_post', array( $this, 'afterBrizyEnabledForPopup' ) );
31
 
@@ -38,14 +39,6 @@ class Brizy_Admin_Popups_Main {
38
  remove_meta_box( 'pageparentdiv', self::CP_POPUP, 'side' );
39
  }
40
 
41
- static public function registerSupportedPostType() {
42
- add_filter( 'brizy_supported_post_types', function ( $posts ) {
43
- $posts[] = self::CP_POPUP;
44
-
45
- return $posts;
46
- } );
47
- }
48
-
49
  static public function registerCustomPosts() {
50
 
51
  $labels = array(
@@ -72,7 +65,7 @@ class Brizy_Admin_Popups_Main {
72
  'public' => false,
73
  'has_archive' => false,
74
  'description' => __( 'Popups', 'brizy' ),
75
- 'publicly_queryable' => Brizy_Editor::is_user_allowed(),
76
  'show_ui' => defined( 'BRIZY_PRO_VERSION' ),
77
  'show_in_menu' => Brizy_Admin_Settings::menu_slug(),
78
  'query_var' => false,
@@ -87,6 +80,12 @@ class Brizy_Admin_Popups_Main {
87
  );
88
 
89
  remove_post_type_support( self::CP_POPUP, 'page-attributes' );
 
 
 
 
 
 
90
  }
91
 
92
  /**
@@ -109,10 +108,11 @@ class Brizy_Admin_Popups_Main {
109
  * @param $content
110
  * @param $project
111
  * @param $wpPost
112
- * @param $context
113
  *
114
- * @return mixed
115
  * @throws Brizy_Editor_Exceptions_NotFound
 
116
  */
117
  public function insertPopupsHtml( $content, $project, $wpPost, $context = 'document' ) {
118
  $popups = $this->getMatchingBrizyPopups();
@@ -214,6 +214,5 @@ class Brizy_Admin_Popups_Main {
214
 
215
  return $resultPopups;
216
  }
 
217
 
218
-
219
- }
26
  }
27
 
28
  public function initialize() {
29
+
30
  add_filter( 'brizy_content', array( $this, 'insertPopupsHtml' ), - 999999, 4 );
31
  add_action( 'brizy_after_enabled_for_post', array( $this, 'afterBrizyEnabledForPopup' ) );
32
 
39
  remove_meta_box( 'pageparentdiv', self::CP_POPUP, 'side' );
40
  }
41
 
 
 
 
 
 
 
 
 
42
  static public function registerCustomPosts() {
43
 
44
  $labels = array(
65
  'public' => false,
66
  'has_archive' => false,
67
  'description' => __( 'Popups', 'brizy' ),
68
+ 'publicly_queryable' => Brizy_Editor_User::is_user_allowed(),
69
  'show_ui' => defined( 'BRIZY_PRO_VERSION' ),
70
  'show_in_menu' => Brizy_Admin_Settings::menu_slug(),
71
  'query_var' => false,
80
  );
81
 
82
  remove_post_type_support( self::CP_POPUP, 'page-attributes' );
83
+
84
+
85
+ add_filter( 'brizy_supported_post_types', function ( $posts ) {
86
+ $posts[] = self::CP_POPUP;
87
+ return $posts;
88
+ } );
89
  }
90
 
91
  /**
108
  * @param $content
109
  * @param $project
110
  * @param $wpPost
111
+ * @param string $context
112
  *
113
+ * @return string|string[]|null
114
  * @throws Brizy_Editor_Exceptions_NotFound
115
+ * @throws Brizy_Editor_Exceptions_ServiceUnavailable
116
  */
117
  public function insertPopupsHtml( $content, $project, $wpPost, $context = 'document' ) {
118
  $popups = $this->getMatchingBrizyPopups();
214
 
215
  return $resultPopups;
216
  }
217
+ }
218
 
 
 
admin/post/brizy-posts-monitor.php CHANGED
@@ -11,6 +11,7 @@ class Brizy_Admin_Post_BrizyPostsMonitor extends Brizy_Admin_Post_AbstractMonito
11
  'brizy-post-compiler-version',
12
  'brizy-post-editor-version',
13
  'brizy_post_uid',
 
14
  'brizy_data_version'
15
  ) );
16
  }
11
  'brizy-post-compiler-version',
12
  'brizy-post-editor-version',
13
  'brizy_post_uid',
14
+ 'brizy-rules',
15
  'brizy_data_version'
16
  ) );
17
  }
admin/post/revision-manager.php CHANGED
@@ -16,8 +16,14 @@ class Brizy_Admin_Post_RevisionManager {
16
  * Brizy_Admin_Post_RevisionManager constructor.
17
  */
18
  public function __construct() {
19
- add_action( 'save_post', array( $this, 'savePost' ), 11, 2 );
20
  add_action( 'wp_restore_post_revision', array( $this, 'restorePostRevisionMeta' ), 11, 2 );
 
 
 
 
 
 
21
  }
22
 
23
  /**
@@ -69,7 +75,7 @@ class Brizy_Admin_Post_RevisionManager {
69
  * @param $postId
70
  * @param $post
71
  */
72
- public function savePost( $postId, $post ) {
73
  $postParentId = wp_is_post_revision( $postId );
74
  $postType = get_post_type( $post->post_parent );
75
 
@@ -110,7 +116,7 @@ class Brizy_Admin_Post_RevisionManager {
110
  $meta_keys_params = rtrim( str_repeat( '%s,', $meta_key_count ), ',' );
111
  $params = array( (int) $revision, (int) $post );
112
 
113
- $this->cleanMetaData($post,$revision,$monitor);
114
 
115
  $query = "INSERT INTO {$tablePostMeta} (post_Id, meta_key, meta_value)
116
  SELECT %d, meta_key, meta_value
@@ -129,12 +135,12 @@ class Brizy_Admin_Post_RevisionManager {
129
 
130
  private function cleanMetaData( $post, $revision, $monitor ) {
131
  global $wpdb;
132
- $params = array( (int) $revision );
133
  $meta_key_count = count( $monitor->getPostMetaKeys() );
134
  $meta_keys_params = rtrim( str_repeat( '%s,', $meta_key_count ), ',' );
135
- $tablePostMeta = "{$wpdb->prefix}postmeta";
136
- $query = "DELETE FROM {$tablePostMeta} WHERE post_id=%d and meta_key IN ({$meta_keys_params})";
137
- $params = array_merge( $params, $monitor->getPostMetaKeys() );
138
  $wpdb->query( $wpdb->prepare( $query, $params ) );
139
  }
140
 
@@ -153,8 +159,6 @@ class Brizy_Admin_Post_RevisionManager {
153
 
154
  $wpdb->query( "START TRANSACTION" );
155
 
156
- $this->cleanMetakeys( $post, $monitor );
157
-
158
  $revisionMetaValues = $this->getRevisionMetaValues( $revision, $monitor );
159
 
160
  if ( $revisionMetaValues === false ) {
@@ -163,14 +167,22 @@ class Brizy_Admin_Post_RevisionManager {
163
 
164
  foreach ( $revisionMetaValues as $meta ) {
165
 
166
- $existingMeta = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$tablePostMeta} WHERE meta_key = %s AND post_id = %d", $meta->meta_key, $post ) );
167
- $existingMetaId = isset( $existingMeta->meta_id ) ? $existingMeta->meta_id : 0;
168
- $res = $wpdb->query( $wpdb->prepare( "REPLACE INTO {$tablePostMeta} VALUES (%d,%d,%s,%s)", $existingMetaId, $post, $meta->meta_key, $meta->meta_value ) );
169
 
170
  if ( $res === false ) {
171
  throw new Exception();
172
  }
173
  }
 
 
 
 
 
 
 
 
 
174
  $wpdb->query( 'COMMIT' );
175
  } catch ( Exception $e ) {
176
  $wpdb->query( 'ROLLBACK' );
16
  * Brizy_Admin_Post_RevisionManager constructor.
17
  */
18
  public function __construct() {
19
+
20
  add_action( 'wp_restore_post_revision', array( $this, 'restorePostRevisionMeta' ), 11, 2 );
21
+
22
+ if ( ! defined( 'WP_POST_REVISIONS' ) || ( defined( 'WP_POST_REVISIONS' ) && WP_POST_REVISIONS !== false ) ) {
23
+ add_action( 'save_post', array( $this, 'savePost' ), 11, 2 );
24
+ }
25
+
26
+
27
  }
28
 
29
  /**
75
  * @param $postId
76
  * @param $post
77
  */
78
+ public function savePost( $postId, $post, $update = false ) {
79
  $postParentId = wp_is_post_revision( $postId );
80
  $postType = get_post_type( $post->post_parent );
81
 
116
  $meta_keys_params = rtrim( str_repeat( '%s,', $meta_key_count ), ',' );
117
  $params = array( (int) $revision, (int) $post );
118
 
119
+ $this->cleanMetaData( $post, $revision, $monitor );
120
 
121
  $query = "INSERT INTO {$tablePostMeta} (post_Id, meta_key, meta_value)
122
  SELECT %d, meta_key, meta_value
135
 
136
  private function cleanMetaData( $post, $revision, $monitor ) {
137
  global $wpdb;
138
+ $params = array( (int) $revision );
139
  $meta_key_count = count( $monitor->getPostMetaKeys() );
140
  $meta_keys_params = rtrim( str_repeat( '%s,', $meta_key_count ), ',' );
141
+ $tablePostMeta = "{$wpdb->prefix}postmeta";
142
+ $query = "DELETE FROM {$tablePostMeta} WHERE post_id=%d and meta_key IN ({$meta_keys_params})";
143
+ $params = array_merge( $params, $monitor->getPostMetaKeys() );
144
  $wpdb->query( $wpdb->prepare( $query, $params ) );
145
  }
146
 
159
 
160
  $wpdb->query( "START TRANSACTION" );
161
 
 
 
162
  $revisionMetaValues = $this->getRevisionMetaValues( $revision, $monitor );
163
 
164
  if ( $revisionMetaValues === false ) {
167
 
168
  foreach ( $revisionMetaValues as $meta ) {
169
 
170
+ $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}postmeta WHERE post_id=%d and meta_key=%s", $post, $meta->meta_key ) );
171
+ $res = $wpdb->query( $wpdb->prepare( "INSERT INTO {$tablePostMeta} (post_id,meta_key,meta_value) VALUES (%d,%s,%s)", $post, $meta->meta_key, $meta->meta_value ) );
 
172
 
173
  if ( $res === false ) {
174
  throw new Exception();
175
  }
176
  }
177
+
178
+ Brizy_Editor_Post::cleanClassCache();
179
+ $brizyPost = Brizy_Editor_Post::get( $post );
180
+
181
+ if ( $brizyPost->uses_editor() ) {
182
+ $brizyPost->set_needs_compile( true );
183
+ $brizyPost->saveStorage();
184
+ }
185
+
186
  $wpdb->query( 'COMMIT' );
187
  } catch ( Exception $e ) {
188
  $wpdb->query( 'ROLLBACK' );
admin/rule.php CHANGED
@@ -10,34 +10,37 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
10
  const ARCHIVE = 4;
11
  const TEMPLATE = 8;
12
  const BRIZY_TEMPLATE = 16;
13
- const ALL_FROM_TAXONOMY = 32;
 
 
 
14
 
15
  /**
16
  * @var int
17
  */
18
- private $id;
19
 
20
  /**
21
  * @var int
22
  */
23
- private $type;
24
 
25
  /**
26
  * @var int
27
  */
28
- private $appliedFor;
29
 
30
  /**
31
  * @var string
32
  */
33
- private $entityType;
34
 
35
  /**
36
  * If null the rule will be applied on all entities
37
  *
38
  * @var int[]
39
  */
40
- private $entityValues = array();
41
 
42
  /**
43
  * @return array|mixed
@@ -98,9 +101,9 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
98
  $entityValues,
99
  );
100
 
101
- // exception for home page that has two behaviors.. as page and as a template
102
  $entity_values = $this->getEntityValues();
103
 
 
104
  if ( $applyFor == self::TEMPLATE &&
105
  $entityType == 'front_page' &&
106
  $this->getAppliedFor() == self::POSTS &&
@@ -111,15 +114,40 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
111
  }
112
 
113
  // check if post is in a term
114
- if ( $applyFor == self::POSTS &&
115
- $this->getAppliedFor() == self::POSTS &&
116
- isset( $entity_values[0] ) && is_array($values = explode( '|', $entity_values[0] )) && count( $values ) > 1
117
- ) {
118
 
119
- // check if the post is in taxonomy with name $values[0] and with id $values[1]
120
- return has_term( $values[1], $values[0], $entityValues[0] );
121
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
 
 
 
 
 
 
 
 
 
 
 
 
123
 
124
  foreach ( $ruleValues as $i => $value ) {
125
 
@@ -135,7 +163,6 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
135
  }
136
 
137
  } else {
138
-
139
  if ( $ruleValues[ $i ] != $checkValues[ $i ] ) {
140
  return false;
141
  }
@@ -154,7 +181,8 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
154
  return $this->getType() == $rule->getType() &&
155
  $this->getAppliedFor() == $rule->getAppliedFor() &&
156
  $this->getEntityType() == $rule->getEntityType() &&
157
- ( count( $rule->getEntityValues() ) == count( $this->getEntityValues() ) && count( array_diff( $rule->getEntityValues(), $this->getEntityValues() ) ) == 0 );
 
158
  }
159
 
160
  /**
@@ -369,6 +397,13 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
369
  );
370
  }
371
 
 
 
 
 
 
 
 
372
 
373
  /**
374
  * @param string $delimited
@@ -383,6 +418,6 @@ class Brizy_Admin_Rule extends Brizy_Admin_Serializable implements Brizy_Admin_R
383
  * @return string
384
  */
385
  private function generateId() {
386
- return md5( implode( '', func_get_args() ) . time() );
387
  }
388
- }
10
  const ARCHIVE = 4;
11
  const TEMPLATE = 8;
12
  const BRIZY_TEMPLATE = 16;
13
+ const POSTS_FROM_TAXONOMY = 32;
14
+ const POSTS_FROM_CHILD_TAXONOMY = 64;
15
+
16
+ const ANY_CHILD_TAXONOMY = 128;
17
 
18
  /**
19
  * @var int
20
  */
21
+ protected $id;
22
 
23
  /**
24
  * @var int
25
  */
26
+ protected $type;
27
 
28
  /**
29
  * @var int
30
  */
31
+ protected $appliedFor;
32
 
33
  /**
34
  * @var string
35
  */
36
+ protected $entityType;
37
 
38
  /**
39
  * If null the rule will be applied on all entities
40
  *
41
  * @var int[]
42
  */
43
+ protected $entityValues = array();
44
 
45
  /**
46
  * @return array|mixed
101
  $entityValues,
102
  );
103
 
 
104
  $entity_values = $this->getEntityValues();
105
 
106
+ // exception for home page that has two behaviors.. as page and as a template
107
  if ( $applyFor == self::TEMPLATE &&
108
  $entityType == 'front_page' &&
109
  $this->getAppliedFor() == self::POSTS &&
114
  }
115
 
116
  // check if post is in a term
117
+ if ( isset($entity_values[0]) && ( $values = explode( '|', $entity_values[0] ) ) && count( $values ) == 3 ) {
 
 
 
118
 
119
+ // POSTS
120
+ if ( $applyFor == self::POSTS && $this->getAppliedFor() == self::POSTS && $values[0] === 'in' ) {
121
+ // check if the post is in taxonomy with name $values[0] and with id $values[1]
122
+ return has_term( $values[2], $values[1], $entityValues[0] );
123
+ }
124
+
125
+ // check if post is in a term
126
+ if ( $applyFor == self::POSTS && $this->getAppliedFor() == self::POSTS && $values[0] === 'child' ) {
127
+ // check if the post is in taxonomy with name $values[0] and with id $values[1]
128
+ $tax = get_term_children( $values[2], $values[1] );
129
+
130
+ foreach ( $tax as $t ) {
131
+ if ( has_term( $t, $values[1], $entityValues[0] ) ) {
132
+ return true;
133
+ }
134
+ }
135
+
136
+ return false;
137
+ }
138
 
139
+ // TAXONOMY
140
+ if ( $applyFor == self::TAXONOMY && $this->getAppliedFor() == self::TAXONOMY && $values[0] === 'in' ) {
141
+ return $entityValues[0] == $values[2];
142
+ }
143
+
144
+ // check if terms is child of a term
145
+ if ( $applyFor == self::TAXONOMY && $this->getAppliedFor() == self::TAXONOMY && $values[0] === 'child' ) {
146
+ $tax = get_term_children( $values[2], $values[1] );
147
+
148
+ return in_array( $entityValues[0], $tax );
149
+ }
150
+ }
151
 
152
  foreach ( $ruleValues as $i => $value ) {
153
 
163
  }
164
 
165
  } else {
 
166
  if ( $ruleValues[ $i ] != $checkValues[ $i ] ) {
167
  return false;
168
  }
181
  return $this->getType() == $rule->getType() &&
182
  $this->getAppliedFor() == $rule->getAppliedFor() &&
183
  $this->getEntityType() == $rule->getEntityType() &&
184
+ ( count( $rule->getEntityValues() ) == count( $this->getEntityValues() ) &&
185
+ count( array_diff( $rule->getEntityValues(), $this->getEntityValues() ) ) == 0 );
186
  }
187
 
188
  /**
397
  );
398
  }
399
 
400
+ /**
401
+ * @return string
402
+ */
403
+ public function serialize() {
404
+ return serialize( $this->convertToOptionValue() );
405
+ }
406
+
407
 
408
  /**
409
  * @param string $delimited
418
  * @return string
419
  */
420
  private function generateId() {
421
+ return md5( implode( '', func_get_args() ) . rand( 1, time() ) );
422
  }
423
+ }
admin/rules/api.php CHANGED
@@ -4,11 +4,17 @@
4
  class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
5
 
6
  const nonce = Brizy_Editor_API::nonce;
7
- const CREATE_RULES_ACTION = 'brizy_add_rules';
8
- const CREATE_RULE_ACTION = 'brizy_add_rule';
9
- const UPDATE_RULES_ACTION = 'brizy_update_rules';
10
- const DELETE_RULE_ACTION = 'brizy_delete_rule';
11
- const LIST_RULE_ACTION = 'brizy_list_rules';
 
 
 
 
 
 
12
  /**
13
  * @var Brizy_Admin_Rules_Manager
14
  */
@@ -44,11 +50,17 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
44
  }
45
 
46
  protected function initializeApiActions() {
47
- add_action( 'wp_ajax_' . self::CREATE_RULE_ACTION, array( $this, 'actionCreateRule' ) );
48
- add_action( 'wp_ajax_' . self::CREATE_RULES_ACTION, array( $this, 'actionCreateRules' ) );
49
- add_action( 'wp_ajax_' . self::UPDATE_RULES_ACTION, array( $this, 'actionUpdateRules' ) );
50
- add_action( 'wp_ajax_' . self::DELETE_RULE_ACTION, array( $this, 'actionDeleteRule' ) );
51
- add_action( 'wp_ajax_' . self::LIST_RULE_ACTION, array( $this, 'actionGetRuleList' ) );
 
 
 
 
 
 
52
  }
53
 
54
  /**
@@ -76,6 +88,37 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
76
  return null;
77
  }
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  public function actionCreateRule() {
80
 
81
  $this->verifyNonce( self::nonce );
@@ -90,7 +133,7 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
90
  $this->error( 400, "Validation" . 'Invalid post' );
91
  }
92
 
93
- if ( ! $dataVersion && $ignoreDataVersion===0 ) {
94
  $this->error( 400, "Validation" . 'Invalid data version' );
95
  }
96
 
@@ -112,7 +155,7 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
112
 
113
  $ruleValidator->validateRuleForPostId( $rule, $postId );
114
 
115
- if ( !$ignoreDataVersion ) {
116
  $post = Brizy_Editor_Entity::get( $postId );
117
  $post->setDataVersion( $dataVersion );
118
  $post->save( 0 );
@@ -143,7 +186,7 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
143
  $this->error( 400, 'Invalid post' );
144
  }
145
 
146
- if ( ! $dataVersion && $ignoreDataVersion===0) {
147
  $this->error( 400, "Validation" . 'Invalid data version' );
148
  }
149
 
@@ -151,6 +194,11 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
151
 
152
  try {
153
  $rules = $this->manager->createRulesFromJson( $rulesData, $postType );
 
 
 
 
 
154
  } catch ( Exception $e ) {
155
  $this->error( 400, $e->getMessage() );
156
  }
@@ -165,7 +213,7 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
165
  try {
166
  $validator->validateRulesForPostId( $rules, $postId );
167
 
168
- if ( !$ignoreDataVersion ) {
169
  $post = Brizy_Editor_Entity::get( $postId );
170
  $post->setDataVersion( $dataVersion );
171
  $post->save( 0 );
@@ -198,11 +246,14 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
198
  $dataVersion = (int) $this->param( 'dataVersion' );
199
  $postType = get_post_type( $postId );
200
 
201
- if ( ! $postId ) {
 
 
 
202
  wp_send_json_error( (object) array( 'message' => 'Invalid template' ), 400 );
203
  }
204
 
205
- if ( ! $dataVersion && $ignoreDataVersion===0) {
206
  $this->error( 400, "Validation" . 'Invalid data version' );
207
  }
208
 
@@ -210,18 +261,23 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
210
 
211
  try {
212
  $rules = $this->manager->createRulesFromJson( $rulesData, $postType );
 
 
 
 
 
213
  } catch ( Exception $e ) {
214
  Brizy_Logger::instance()->error( $e->getMessage(), [ $e ] );
215
  $this->error( 400, $e->getMessage() );
216
  }
217
 
218
- $validator = Brizy_Admin_Rules_ValidatorFactory::getValidator( $postId );
219
- if ( ! $validator ) {
220
- $this->error( 400, 'Unable to get the rule validator for this post type' );
221
- }
222
 
223
  try {
224
- if ( !$ignoreDataVersion ) {
225
  $post = Brizy_Editor_Entity::get( $postId );
226
  $post->setDataVersion( $dataVersion );
227
  $post->save( 0 );
@@ -252,13 +308,13 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
252
  $this->error( 400, 'Invalid request' );
253
  }
254
 
255
- if ( ! $dataVersion && $ignoreDataVersion===0 ) {
256
  $this->error( 400, "Validation" . 'Invalid data version' );
257
  }
258
 
259
  try {
260
 
261
- if ( !$ignoreDataVersion ) {
262
  $post = Brizy_Editor_Entity::get( $postId );
263
  $post->setDataVersion( $dataVersion );
264
  $post->save( 0 );
@@ -273,4 +329,343 @@ class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
273
 
274
  $this->success( null );
275
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
  }
4
  class Brizy_Admin_Rules_Api extends Brizy_Admin_AbstractApi {
5
 
6
  const nonce = Brizy_Editor_API::nonce;
7
+ const CREATE_RULES_ACTION = '_add_rules';
8
+ const CREATE_RULE_ACTION = '_add_rule';
9
+ const UPDATE_RULES_ACTION = '_update_rules';
10
+ const DELETE_RULE_ACTION = '_delete_rule';
11
+ const LIST_RULE_ACTION = '_list_rules';
12
+ const VALIDATE_RULE = '_validate_rule';
13
+ const RULE_GROUP_LIST = '_rule_group_list';
14
+ const RULE_POSTS_GROUP_LIST = '_rule_posts_group_list';
15
+ const RULE_ARCHIVE_GROUP_LIST = '_rule_archive_group_list';
16
+
17
+
18
  /**
19
  * @var Brizy_Admin_Rules_Manager
20
  */
50
  }
51
 
52
  protected function initializeApiActions() {
53
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
54
+
55
+ add_action( $pref . self::CREATE_RULE_ACTION, array( $this, 'actionCreateRule' ) );
56
+ add_action( $pref . self::CREATE_RULES_ACTION, array( $this, 'actionCreateRules' ) );
57
+ add_action( $pref . self::UPDATE_RULES_ACTION, array( $this, 'actionUpdateRules' ) );
58
+ add_action( $pref . self::DELETE_RULE_ACTION, array( $this, 'actionDeleteRule' ) );
59
+ add_action( $pref . self::LIST_RULE_ACTION, array( $this, 'actionGetRuleList' ) );
60
+ add_action( $pref . self::VALIDATE_RULE, array( $this, 'actionValidateRule' ) );
61
+ add_action( $pref . self::RULE_GROUP_LIST, array( $this, 'getGroupList' ) );
62
+ add_action( $pref . self::RULE_POSTS_GROUP_LIST, array( $this, 'getPostsGroupsList' ) );
63
+ add_action( $pref . self::RULE_ARCHIVE_GROUP_LIST, array( $this, 'getArchiveGroupsList' ) );
64
  }
65
 
66
  /**
88
  return null;
89
  }
90
 
91
+ public function actionValidateRule() {
92
+ $this->verifyNonce( self::nonce );
93
+
94
+ $postId = (int) $this->param( 'post' );
95
+
96
+ $postType = get_post_type( $postId );
97
+
98
+ if ( ! $postId ) {
99
+ $this->error( 400, "Validation" . 'Invalid post' );
100
+ }
101
+
102
+ $ruleData = file_get_contents( "php://input" );
103
+
104
+ try {
105
+ $rule = $this->manager->createRuleFromJson( $ruleData, $postType );
106
+ $ruleValidator = Brizy_Admin_Rules_ValidatorFactory::getValidator( $postId );
107
+
108
+ if ( ! $ruleValidator ) {
109
+ $this->error( 400, 'Unable to get the rule validator for this post type' );
110
+ }
111
+
112
+ $ruleValidator->validateRuleForPostId( $rule, $postId );
113
+
114
+ wp_send_json_success( $rule, 200 );
115
+ } catch ( Brizy_Admin_Rules_ValidationException $e ) {
116
+ wp_send_json_error( array( 'message' => $e->getMessage(), 'rule' => $e->getRuleId() ), 400 );
117
+ } catch ( Exception $e ) {
118
+ $this->error( 400, "Validation" . $e->getMessage() );
119
+ }
120
+ }
121
+
122
  public function actionCreateRule() {
123
 
124
  $this->verifyNonce( self::nonce );
133
  $this->error( 400, "Validation" . 'Invalid post' );
134
  }
135
 
136
+ if ( ! $dataVersion && $ignoreDataVersion === 0 ) {
137
  $this->error( 400, "Validation" . 'Invalid data version' );
138
  }
139
 
155
 
156
  $ruleValidator->validateRuleForPostId( $rule, $postId );
157
 
158
+ if ( ! $ignoreDataVersion ) {
159
  $post = Brizy_Editor_Entity::get( $postId );
160
  $post->setDataVersion( $dataVersion );
161
  $post->save( 0 );
186
  $this->error( 400, 'Invalid post' );
187
  }
188
 
189
+ if ( ! $dataVersion && $ignoreDataVersion === 0 ) {
190
  $this->error( 400, "Validation" . 'Invalid data version' );
191
  }
192
 
194
 
195
  try {
196
  $rules = $this->manager->createRulesFromJson( $rulesData, $postType );
197
+
198
+ if ( count( $rules ) == 0 ) {
199
+ $this->error( 400, "No rules found." );
200
+ }
201
+
202
  } catch ( Exception $e ) {
203
  $this->error( 400, $e->getMessage() );
204
  }
213
  try {
214
  $validator->validateRulesForPostId( $rules, $postId );
215
 
216
+ if ( ! $ignoreDataVersion ) {
217
  $post = Brizy_Editor_Entity::get( $postId );
218
  $post->setDataVersion( $dataVersion );
219
  $post->save( 0 );
246
  $dataVersion = (int) $this->param( 'dataVersion' );
247
  $postType = get_post_type( $postId );
248
 
249
+ if ( ! $postId || ! in_array( $postType, [
250
+ Brizy_Admin_Templates::CP_TEMPLATE,
251
+ Brizy_Admin_Popups_Main::CP_POPUP
252
+ ] ) ) {
253
  wp_send_json_error( (object) array( 'message' => 'Invalid template' ), 400 );
254
  }
255
 
256
+ if ( ! $dataVersion && $ignoreDataVersion === 0 ) {
257
  $this->error( 400, "Validation" . 'Invalid data version' );
258
  }
259
 
261
 
262
  try {
263
  $rules = $this->manager->createRulesFromJson( $rulesData, $postType );
264
+
265
+ if ( count( $rules ) == 0 ) {
266
+ $this->error( 400, "No rules found." );
267
+ }
268
+
269
  } catch ( Exception $e ) {
270
  Brizy_Logger::instance()->error( $e->getMessage(), [ $e ] );
271
  $this->error( 400, $e->getMessage() );
272
  }
273
 
274
+ // $validator = Brizy_Admin_Rules_ValidatorFactory::getValidator( $postId );
275
+ // if ( ! $validator ) {
276
+ // $this->error( 400, 'Unable to get the rule validator for this post type' );
277
+ // }
278
 
279
  try {
280
+ if ( ! $ignoreDataVersion ) {
281
  $post = Brizy_Editor_Entity::get( $postId );
282
  $post->setDataVersion( $dataVersion );
283
  $post->save( 0 );
308
  $this->error( 400, 'Invalid request' );
309
  }
310
 
311
+ if ( ! $dataVersion && $ignoreDataVersion === 0 ) {
312
  $this->error( 400, "Validation" . 'Invalid data version' );
313
  }
314
 
315
  try {
316
 
317
+ if ( ! $ignoreDataVersion ) {
318
  $post = Brizy_Editor_Entity::get( $postId );
319
  $post->setDataVersion( $dataVersion );
320
  $post->save( 0 );
329
 
330
  $this->success( null );
331
  }
332
+
333
+ public function getGroupList() {
334
+
335
+ $context = $this->param( 'context' );
336
+ $templateType = $this->param( 'templateType' );
337
+
338
+ $closure = function ( $v ) {
339
+ return array(
340
+ 'title' => $v->label,
341
+ 'value' => $v->name,
342
+ 'groupValue' => $v->groupValue
343
+ );
344
+ };
345
+
346
+ $groups = [];
347
+
348
+ if ( $templateType == 'single' || $templateType == 'single_product' || $context == 'popup-rules' ) {
349
+ $groups[] = array(
350
+ 'title' => 'Pages',
351
+ 'value' => Brizy_Admin_Rule::POSTS,
352
+ 'items' => array_map( $closure, $this->getCustomPostsList( Brizy_Admin_Rule::POSTS, $templateType ) )
353
+ );
354
+ }
355
+
356
+ if ( $templateType == 'archive' || $templateType == 'product_archive' || $context == 'popup-rules' ) {
357
+ $archiveItems = array_map( $closure, $this->getArchivesList( Brizy_Admin_Rule::ARCHIVE, $templateType ) );
358
+ $taxonomyItems = array_map( $closure, $this->getTaxonomyList( Brizy_Admin_Rule::TAXONOMY, $templateType ) );
359
+ $groups[] =
360
+ count( $taxonomyItems ) ? array(
361
+ 'title' => 'Categories',
362
+ 'value' => Brizy_Admin_Rule::TAXONOMY,
363
+ 'items' => $taxonomyItems
364
+ ) : null;
365
+ $groups[] =
366
+ count( $archiveItems ) ? array(
367
+ 'title' => 'Archives',
368
+ 'value' => Brizy_Admin_Rule::ARCHIVE,
369
+ 'items' => $archiveItems
370
+ ) : null;
371
+ }
372
+
373
+ if ( $items = $this->geTemplateList( $context, $templateType ) ) {
374
+ $groups[] = array(
375
+ 'title' => 'Others',
376
+ 'value' => Brizy_Admin_Rule::TEMPLATE,
377
+ 'items' => $items
378
+ );
379
+ }
380
+
381
+ $groups = array_values( array_filter( $groups, function ( $o ) {
382
+ return ! is_null( $o );
383
+ } ) );
384
+ wp_send_json_success( $groups, 200 );
385
+ }
386
+
387
+ public function getPostsGroupsList() {
388
+
389
+ global $wp_post_types;
390
+
391
+ if ( ! ( $post_type = $this->param( 'postType' ) ) ) {
392
+ wp_send_json_error( 'Invalid post type', 400 );
393
+ }
394
+
395
+ if ( ! isset( $wp_post_types[ $post_type ] ) ) {
396
+ wp_send_json_error( 'Post type not found', 400 );
397
+ }
398
+
399
+ $postTypeName = $wp_post_types[ $post_type ]->labels->name;
400
+
401
+ $taxonomies = get_taxonomies( [ 'object_type' => [ $post_type ] ], 'objects' );
402
+
403
+ $groups = array();
404
+
405
+ $closureFromTerm = function ( $v ) {
406
+ return array(
407
+ 'title' => $v->name,
408
+ 'value' => "in|" . $v->taxonomy . "|" . $v->term_id,
409
+ 'groupValue' => $v->taxonomy
410
+ );
411
+ };
412
+ $closureChildTerm = function ( $v ) {
413
+ return array(
414
+ 'title' => $v->name,
415
+ 'value' => "child|" . $v->taxonomy . "|" . $v->term_id,
416
+ 'groupValue' => $v->taxonomy
417
+ );
418
+ };
419
+
420
+ $closureAuthor = function ( $v ) use ( $postTypeName ) {
421
+ return array(
422
+ 'title' => ucfirst( $v->data->user_nicename ) . ' ' . $postTypeName,
423
+ 'value' => 'author|' . $v->ID,
424
+ 'groupValue' => 'author'
425
+ );
426
+ };
427
+
428
+ $closurePost = function ( $v ) {
429
+ return array(
430
+ 'title' => $v->post_title,
431
+ 'value' => $v->ID,
432
+ 'groupValue' => $v->post_type
433
+ );
434
+ };
435
+
436
+ foreach ( $taxonomies as $tax ) {
437
+ $groups[] = array(
438
+ 'title' => __( "From", 'brizy' ) . " " . $tax->labels->singular_name,
439
+ 'value' => Brizy_Admin_Rule::POSTS,
440
+ 'items' => array_map( $closureFromTerm, get_terms( [
441
+ 'taxonomy' => $tax->name,
442
+ 'hide_empty' => false
443
+ ] ) )
444
+ );
445
+
446
+ if ( $tax->hierarchical ) {
447
+ $groups[] = array(
448
+ 'title' => __( "From any child of", 'brizy' ) . " " . $tax->labels->singular_name,
449
+ 'value' => Brizy_Admin_Rule::POSTS,
450
+ 'items' => array_map( $closureChildTerm, get_terms( [
451
+ 'taxonomy' => $tax->name,
452
+ 'hide_empty' => false
453
+ ] ) )
454
+ );
455
+ }
456
+ }
457
+
458
+ $groups[] = array(
459
+ 'title' => 'Specific Post',
460
+ 'value' => Brizy_Admin_Rule::POSTS,
461
+ 'items' => array_map( $closurePost, Brizy_Editor_Post::get_post_list( null, $post_type ) )
462
+ );
463
+
464
+ $groups[] = array(
465
+ 'title' => 'Specific Author',
466
+ 'value' => Brizy_Admin_Rule::POSTS,
467
+ 'items' => array_map( $closureAuthor, get_users() )
468
+ );
469
+
470
+ $groups = array_values( array_filter( $groups, function ( $o ) {
471
+ return ! is_null( $o );
472
+ } ) );
473
+ wp_send_json_success( $groups, 200 );
474
+ }
475
+
476
+ public function getArchiveGroupsList() {
477
+
478
+ if ( ! ( $taxonomy = $this->param( 'taxonomy' ) ) ) {
479
+ wp_send_json_error( 'Invalid taxonomy', 400 );
480
+ }
481
+
482
+ $groups = [];
483
+
484
+ $taxonomies = get_taxonomies( array( 'public' => true, 'show_ui' => true, 'name' => $taxonomy ), 'objects' );
485
+
486
+ $closureSingleTerm = function ( $v ) {
487
+ return array(
488
+ 'title' => $v->name,
489
+ 'value' => $v->term_id,
490
+ 'groupValue' => $v->taxonomy
491
+ );
492
+ };
493
+
494
+ $closureTerm = function ( $v ) {
495
+ return array(
496
+ 'title' => $v->name,
497
+ 'value' => "child|" . $v->taxonomy . "|" . $v->term_id,
498
+ 'groupValue' => $v->taxonomy
499
+ );
500
+ };
501
+
502
+ foreach ( $taxonomies as $tax ) {
503
+ $groups[] = array(
504
+ 'title' => __( "Specific", 'brizy' ) . " " . $tax->labels->singular_name,
505
+ 'value' => Brizy_Admin_Rule::TAXONOMY,
506
+ 'items' => array_map( $closureSingleTerm, get_terms( [
507
+ 'taxonomy' => $tax->name,
508
+ 'hide_empty' => false
509
+ ] ) )
510
+ );
511
+
512
+ if ( $tax->hierarchical ) {
513
+ $groups[] = array(
514
+ 'title' => __( "Any child of", 'brizy' ) . " " . $tax->labels->singular_name,
515
+ 'value' => Brizy_Admin_Rule::TAXONOMY,
516
+ 'items' => array_map( $closureTerm, get_terms( [
517
+ 'taxonomy' => $tax->name,
518
+ 'hide_empty' => false
519
+ ] ) )
520
+ );
521
+ }
522
+ }
523
+
524
+ $groups = array_values( array_filter( $groups, function ( $o ) {
525
+ return ! is_null( $o );
526
+ } ) );
527
+ wp_send_json_success( $groups, 200 );
528
+
529
+ }
530
+
531
+ private function getCustomPostsList( $groupValue, $templateType ) {
532
+ $wp_post_types = get_post_types( [ 'exclude_from_search' => false, 'show_in_nav_menus' => true ], 'objects' );
533
+
534
+ return array_values( array_filter( $wp_post_types, function ( $type ) use ( $groupValue, $templateType ) {
535
+ $type->groupValue = $groupValue;
536
+ if ( $templateType == 'single_product' ) {
537
+ return $type->name == 'product' && $type->public && $type->show_ui;
538
+ } else {
539
+ return $type->name != 'product' && $type->public && $type->show_ui;
540
+ }
541
+ } ) );
542
+ }
543
+
544
+ private function getArchivesList( $groupValue, $templateType ) {
545
+ global $wp_post_types;
546
+
547
+ return array_values( array_filter( $wp_post_types, function ( $type ) use ( $groupValue, $templateType ) {
548
+ $type->groupValue = $groupValue;
549
+ $is_product = $type->name == 'product';
550
+
551
+ if ( $templateType == 'product_archive' ) {
552
+ return $is_product && $type->public && $type->show_ui && $type->has_archive;
553
+ } else {
554
+ return ! $is_product && $type->public && $type->show_ui && $type->has_archive;
555
+ }
556
+ } ) );
557
+ }
558
+
559
+ private function getTaxonomyList( $groupValue, $templateType ) {
560
+ $terms = get_taxonomies( array( 'public' => true, 'show_ui' => true ), 'objects' );
561
+
562
+ return array_values( array_filter( $terms, function ( $term ) use ( $groupValue, $templateType ) {
563
+ $term->groupValue = $groupValue;
564
+ $is_product_term = $term->name == 'product_cat' || $term->name == 'product_tag';
565
+
566
+ if ( $templateType == 'product_archive' ) {
567
+ return $is_product_term;
568
+ } else {
569
+ return ! $is_product_term;
570
+ }
571
+ } ) );
572
+ }
573
+
574
+ public function geTemplateList( $context, $templateType ) {
575
+
576
+ $list = array(
577
+ $templateType === 'single' || $context == 'popup-rules' ? array(
578
+ 'title' => 'Author page',
579
+ 'value' => 'author',
580
+ 'groupValue' => Brizy_Admin_Rule::TEMPLATE
581
+ ) : null,
582
+ $templateType === 'archive' || $context == 'popup-rules' ? array(
583
+ 'title' => 'Search page',
584
+ 'value' => 'search',
585
+ 'groupValue' => Brizy_Admin_Rule::TEMPLATE
586
+ ) : null,
587
+ $templateType === 'single' || $context == 'popup-rules' ? array(
588
+ 'title' => 'Front page',
589
+ 'value' => 'front_page',
590
+ 'groupValue' => Brizy_Admin_Rule::TEMPLATE
591
+ ) : null,
592
+ $templateType === 'archive' || $context == 'popup-rules' ? array(
593
+ 'title' => 'Blog / Posts page',
594
+ 'value' => 'home_page',
595
+ 'groupValue' => Brizy_Admin_Rule::TEMPLATE
596
+ ) : null,
597
+ $templateType === 'single' || $context == 'popup-rules' ? array(
598
+ 'title' => '404 page',
599
+ 'value' => '404',
600
+ 'groupValue' => Brizy_Admin_Rule::TEMPLATE
601
+ ) : null,
602
+ $templateType === 'archive' || $context == 'popup-rules' ? array(
603
+ 'title' => 'Archive page',
604
+ 'value' => '',
605
+ 'groupValue' => Brizy_Admin_Rule::ARCHIVE
606
+ ) : null,
607
+ );
608
+
609
+ if ( ($context !== 'template-rules' && $templateType === 'single') || $context == 'popup-rules' ) {
610
+
611
+ $list[] = array(
612
+ 'title' => 'Brizy Templates',
613
+ 'value' => 'brizy_template',
614
+ 'groupValue' => Brizy_Admin_Rule::BRIZY_TEMPLATE
615
+ );
616
+ }
617
+
618
+ return array_values( array_filter( $list, function ( $o ) {
619
+ return ! is_null( $o );
620
+ } ) );
621
+ }
622
+
623
+ private function get_post_list( $searchTerm, $postType, $excludePostType = array() ) {
624
+
625
+ global $wp_post_types;
626
+
627
+ add_filter( 'posts_where', array( $this, 'brizy_post_title_filter' ), 10, 2 );
628
+
629
+ $post_query = array(
630
+ 'post_type' => $postType,
631
+ 'posts_per_page' => - 1,
632
+ 'post_status' => $postType == 'attachment' ? 'inherit' : array(
633
+ 'publish',
634
+ 'pending',
635
+ 'draft',
636
+ 'future',
637
+ 'private'
638
+ ),
639
+ 'orderby' => 'post_title',
640
+ 'order' => 'ASC'
641
+ );
642
+
643
+ if ( $searchTerm ) {
644
+ $post_query['post_title_term'] = $searchTerm;
645
+ }
646
+
647
+ $posts = new WP_Query( $post_query );
648
+
649
+ $result = array();
650
+
651
+ foreach ( $posts->posts as $post ) {
652
+
653
+ if ( in_array( $post->post_type, $excludePostType ) ) {
654
+ continue;
655
+ }
656
+
657
+ $result[] = (object) array(
658
+ 'ID' => $post->ID,
659
+ 'uid' => $this->create_uid( $post->ID ),
660
+ 'post_type' => $post->post_type,
661
+ 'post_type_label' => $wp_post_types[ $post->post_type ]->label,
662
+ 'title' => apply_filters( 'the_title', $post->post_title ),
663
+ 'post_title' => apply_filters( 'the_title', $post->post_title )
664
+ );
665
+ }
666
+
667
+ remove_filter( 'posts_where', 'brizy_post_title_filter', 10 );
668
+
669
+ return $result;
670
+ }
671
  }
admin/rules/manager.php CHANGED
@@ -197,7 +197,7 @@ class Brizy_Admin_Rules_Manager {
197
  $arrayRules[] = $rule->convertToOptionValue();
198
  }
199
 
200
- update_post_meta( (int) $postId, 'brizy-rules', $arrayRules );
201
  }
202
 
203
  /**
197
  $arrayRules[] = $rule->convertToOptionValue();
198
  }
199
 
200
+ update_metadata( 'post', (int) $postId, 'brizy-rules', $arrayRules );
201
  }
202
 
203
  /**
admin/rules/template-rule-validator.php CHANGED
@@ -10,7 +10,6 @@ class Brizy_Admin_Rules_TemplateRuleValidator extends Brizy_Admin_Rules_Abstract
10
  * @throws Brizy_Admin_Rules_ValidationException
11
  */
12
  public function validateRuleForPostId( Brizy_Admin_Rule $rule, $postId ) {
13
- // TODO: Implement validateRuleForPostId() method.
14
 
15
  $ruleSets = $this->getRulesSetByWPQuery( [ 'post_type' => get_post_type( $postId ) ] );
16
 
@@ -25,9 +24,11 @@ class Brizy_Admin_Rules_TemplateRuleValidator extends Brizy_Admin_Rules_Abstract
25
  * @throws Brizy_Admin_Rules_ValidationException
26
  */
27
  public function validateRulesForPostId( $rules, $postId ) {
28
- // TODO: Implement validateRulesForPostId() method.
29
 
30
- $ruleSets = $this->getRulesSetByWPQuery( [ 'post_type' => get_post_type( $postId ) ] );
 
 
 
31
 
32
  return $this->validateRules( $rules, $ruleSets );
33
  }
10
  * @throws Brizy_Admin_Rules_ValidationException
11
  */
12
  public function validateRuleForPostId( Brizy_Admin_Rule $rule, $postId ) {
 
13
 
14
  $ruleSets = $this->getRulesSetByWPQuery( [ 'post_type' => get_post_type( $postId ) ] );
15
 
24
  * @throws Brizy_Admin_Rules_ValidationException
25
  */
26
  public function validateRulesForPostId( $rules, $postId ) {
 
27
 
28
+ $ruleSets = $this->getRulesSetByWPQuery( [
29
+ 'post_type' => get_post_type( $postId ),
30
+ 'exclude' => [ $postId ]
31
+ ] );
32
 
33
  return $this->validateRules( $rules, $ruleSets );
34
  }
admin/settings.php CHANGED
@@ -81,7 +81,7 @@ class Brizy_Admin_Settings {
81
  */
82
  function actionRegisterSettingsPage() {
83
 
84
- if ( ! Brizy_Editor::is_user_allowed() || is_network_admin() ) {
85
  return;
86
  }
87
 
@@ -92,7 +92,7 @@ class Brizy_Admin_Settings {
92
  array( $this, 'render' ),
93
  __bt( 'brizy-logo', plugins_url( 'static/img/brizy-logo.svg', __FILE__ ) ),
94
  //plugins_url( '/static/img/brizy-logo.svg', __FILE__ ),
95
- 81
96
  );
97
  }
98
 
@@ -176,7 +176,7 @@ class Brizy_Admin_Settings {
176
  ]
177
  ];
178
 
179
- return apply_filters( 'brizy_settings_tabs', $tabs );
180
  }
181
 
182
  private function get_tab_content( $tab ) {
@@ -350,7 +350,7 @@ class Brizy_Admin_Settings {
350
  }
351
 
352
  public function render_tabs() {
353
- $tabs = $this->get_tabs();
354
  foreach ( $tabs as $tab ) {
355
  $is_active_class = $tab['is_selected'] ? 'nav-tab-active' : '';
356
  ?>
@@ -363,7 +363,7 @@ class Brizy_Admin_Settings {
363
  public function render_tab_content() {
364
  $tab = $this->get_selected_tab();
365
 
366
- echo apply_filters( 'brizy_settings_render_tab', $this->get_tab_content( $tab ) );
367
  }
368
 
369
 
81
  */
82
  function actionRegisterSettingsPage() {
83
 
84
+ if ( ! Brizy_Editor_User::is_user_allowed() || is_network_admin() ) {
85
  return;
86
  }
87
 
92
  array( $this, 'render' ),
93
  __bt( 'brizy-logo', plugins_url( 'static/img/brizy-logo.svg', __FILE__ ) ),
94
  //plugins_url( '/static/img/brizy-logo.svg', __FILE__ ),
95
+ '58'
96
  );
97
  }
98
 
176
  ]
177
  ];
178
 
179
+ return apply_filters( 'brizy_settings_tabs', $tabs, $selected_tab );
180
  }
181
 
182
  private function get_tab_content( $tab ) {
350
  }
351
 
352
  public function render_tabs() {
353
+ $tabs = $this->get_tabs();
354
  foreach ( $tabs as $tab ) {
355
  $is_active_class = $tab['is_selected'] ? 'nav-tab-active' : '';
356
  ?>
363
  public function render_tab_content() {
364
  $tab = $this->get_selected_tab();
365
 
366
+ echo apply_filters( 'brizy_settings_render_tab', $this->get_tab_content( $tab ), $tab );
367
  }
368
 
369
 
admin/static/css/style.css CHANGED
@@ -133,6 +133,9 @@
133
  /**
134
  * Style Brizy Templates
135
  */
 
 
 
136
 
137
  .brizy-template-rules input[type="text"],
138
  .brizy-template-rules select {
@@ -158,6 +161,22 @@
158
  margin-top: 10px;
159
  }
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  .brizy-delete-rule {
162
  border: 0;
163
  padding: 0;
@@ -179,8 +198,6 @@
179
  text-overflow: ellipsis;
180
  white-space: nowrap;
181
  line-height: 1;
182
- -moz-appearance: none; /* Firefox */
183
- -webkit-appearance: none; /* Safari and Chrome */
184
  appearance: none;
185
  }
186
 
@@ -211,14 +228,23 @@
211
  vertical-align: middle;
212
  }
213
 
 
 
 
 
214
  .brizy-template-rules .select2-selection__arrow b {
215
- display: none;
216
  }
217
 
218
  .brizy-rule-new-condition .brizy-rule-select2::after {
219
  content: none;
220
  }
221
 
 
 
 
 
 
222
  .brizy-featured-image {
223
 
224
  }
@@ -312,7 +338,7 @@
312
  }
313
 
314
  .brizy-dashboard-widget-footer__go-pro {
315
- display:inline-flex;
316
  fill: #0073aa;
317
  }
318
 
@@ -329,41 +355,51 @@
329
  max-width: 1024px;
330
  /*text-align: left;*/
331
  }
 
332
  .brz-maintenance-table-access-links th,
333
  .brz-maintenance-table-access-links td {
334
  border: 1px solid #ccd0d4;
335
  }
 
336
  .brz-maintenance-table-access-links th:first-child,
337
  .brz-maintenance-table-access-links td:first-child {
338
  width: 35px;
339
  text-align: center;
340
  }
 
341
  .brz-maintenance-table-access-links th:not(:first-child) {
342
  padding-left: 10px;
343
  }
 
344
  .brz-maintenance-delete-links {
345
  padding-left: 10px !important;
346
  }
 
347
  .brz-maintenance-add-link {
348
  margin-top: 15px !important;
349
  }
 
350
  /* Admin notice give us a rating */
351
  .brz-review-notice-container {
352
  display: flex;
353
  align-items: center;
354
  padding-top: 10px;
355
  }
 
356
  .brz-review-notice-container .dashicons {
357
  font-size: 1.4em;
358
  padding-left: 10px;
359
  }
 
360
  .brz-review-notice-container a {
361
  padding-left: 5px;
362
  text-decoration: none;
363
  }
 
364
  .brz-review-notice-container .dashicons:first-child {
365
  padding-left: 0;
366
  }
 
367
  .brz-notice-image {
368
  max-width: 100px;
369
  }
@@ -371,9 +407,11 @@
371
  .brz-notice-content .brz-notice-heading {
372
  padding-bottom: 5px;
373
  }
 
374
  .brz-notice-content {
375
  margin-left: 15px;
376
  }
 
377
  .brz-notice-container {
378
  padding-top: 10px;
379
  padding-bottom: 10px;
@@ -384,27 +422,33 @@
384
 
385
  /* Admin deactivate plugin modal */
386
  .brz-deactivate-modal {
387
- border-radius:3px;
388
  animation: brz-feedback-modal-fadein .5s linear;
389
  }
 
390
  .brz-deactivate-overlay {
391
  animation: brz-feedback-overlay-fadein .5s linear;
392
  }
 
393
  .brz-deactivate-feedback-dialog-logo {
394
  width: 40px;
395
  vertical-align: middle;
396
  }
 
397
  .brz-deactivate-modal .ui-dialog-titlebar {
398
  display: none;
399
  }
 
400
  .brz-deactivate-modal .ui-dialog-content {
401
  padding: 0;
402
  }
 
403
  .brz-deactivate-feedback-dialog-header {
404
  padding: 18px 15px;
405
- box-shadow: 0 0 8px rgba(0,0,0,.1);
406
  text-align: left;
407
  }
 
408
  .brz-deactivate-feedback-dialog-header-title {
409
  font-size: 15px;
410
  text-transform: uppercase;
@@ -412,10 +456,12 @@
412
  padding-left: 5px;
413
  color: #495157;
414
  }
 
415
  .brz-deactivate-feedback-dialog-form {
416
  padding: 30px;
417
  text-align: left;
418
  }
 
419
  .brz-deactivate-feedback-dialog-form-caption {
420
  font-weight: 700;
421
  font-size: 15px;
@@ -423,59 +469,70 @@
423
  line-height: 1.4;
424
  margin-bottom: 30px;
425
  }
 
426
  .brz-deactivate-feedback-dialog-input {
427
  float: left;
428
  margin: 0 15px 0 0;
429
  box-shadow: none;
430
  }
 
431
  .brz-deactivate-feedback-dialog-label {
432
  display: block;
433
  font-size: 13px;
434
  color: #6d7882;
435
  }
 
436
  #brz-deactivate-feedback-dialog .brz-deactivate-feedback-dialog-input {
437
  float: left;
438
  margin: 0 15px 0 0;
439
  box-shadow: none;
440
  }
 
441
  .brz-deactivate-feedback-dialog-input-wrapper {
442
  line-height: 1.3;
443
  overflow: hidden;
444
  margin-bottom: 15px;
445
  }
 
446
  .brz-deactivate-modal .ui-dialog-buttonpane {
447
  border: none;
448
  padding-bottom: 30px;
449
- border-radius:3px;
450
  }
 
451
  .brz-deactivate-modal .ui-dialog-buttonset {
452
- float:none;
453
  }
 
454
  .brz-feedback-submit {
455
  background-color: #05b3e6;
456
  color: #fff;
457
  width: 180px;
458
  height: 38px;
459
- border:none;
460
  }
 
461
  .brz-feedback-submit:hover,
462
  .brz-feedback-submit:focus {
463
  opacity: 0.9;
464
  background-color: #05b3e6;
465
  color: #fff !important;
466
  }
 
467
  .brz-feedback-submit:disabled:hover {
468
  color: #a4afb7 !important;
469
  }
 
470
  .brz-feedback-skip {
471
  font-size: 12px;
472
  color: #a4afb7;
473
  background: none;
474
  float: right;
475
  width: auto;
476
- border:none;
477
  box-shadow: none;
478
  }
 
479
  .brz-feedback-skip:hover,
480
  .brz-feedback-skip:active,
481
  .brz-feedback-skip:focus {
@@ -484,6 +541,7 @@
484
  background: none;
485
  box-shadow: none;
486
  }
 
487
  .brz-feedback-text {
488
  margin: 10px 0 0 30px;
489
  padding: 5px;
@@ -493,11 +551,13 @@
493
  background-color: #fff;
494
  width: 92%;
495
  }
 
496
  .brz-feedback-text-alert {
497
  max-width: fit-content;
498
  color: #b01b1b;
499
  padding: 0;
500
  }
 
501
  @-webkit-keyframes brz-feedback-modal-fadein {
502
  0% {
503
  opacity: 0;
@@ -507,6 +567,7 @@
507
  opacity: 1;
508
  }
509
  }
 
510
  @-webkit-keyframes brz-feedback-overlay-fadein {
511
  0% {
512
  opacity: 0;
@@ -516,6 +577,7 @@
516
  opacity: 0.7;
517
  }
518
  }
 
519
  @-webkit-keyframes brz-rotation {
520
  0% {
521
  -webkit-transform: rotate(0deg);
@@ -527,6 +589,7 @@
527
  transform: rotate(359deg);
528
  }
529
  }
 
530
  @keyframes brz-rotation {
531
  0% {
532
  -webkit-transform: rotate(0deg);
@@ -538,10 +601,17 @@
538
  transform: rotate(359deg);
539
  }
540
  }
 
541
  .brz-loading:before {
542
  display: inline-block;
543
  content: "\f463";
544
  font: 18px dashicons;
545
  animation: brz-rotation 2s linear infinite;
546
- margin-top:10px;
547
  }
 
 
 
 
 
 
133
  /**
134
  * Style Brizy Templates
135
  */
136
+ .brizy-template-rules .error {
137
+ color: red;
138
+ }
139
 
140
  .brizy-template-rules input[type="text"],
141
  .brizy-template-rules select {
161
  margin-top: 10px;
162
  }
163
 
164
+ .brizy-template-rules .rule {
165
+ position: relative;
166
+ }
167
+
168
+ .brizy-template-rules .rule .rule-fields {
169
+ position: relative;
170
+ }
171
+
172
+ .brizy-template-rules .rule .overlay {
173
+ position: absolute;
174
+ top: -10px;
175
+ bottom: -10px;
176
+ left: 0px;
177
+ right: 0px;
178
+ }
179
+
180
  .brizy-delete-rule {
181
  border: 0;
182
  padding: 0;
198
  text-overflow: ellipsis;
199
  white-space: nowrap;
200
  line-height: 1;
 
 
201
  appearance: none;
202
  }
203
 
228
  vertical-align: middle;
229
  }
230
 
231
+ .brizy-template-rules .brizy-template-type label {
232
+ margin-right: 20px;
233
+ }
234
+
235
  .brizy-template-rules .select2-selection__arrow b {
236
+ display: none;
237
  }
238
 
239
  .brizy-rule-new-condition .brizy-rule-select2::after {
240
  content: none;
241
  }
242
 
243
+ .brizy-rule-list-item {
244
+
245
+ }
246
+
247
+
248
  .brizy-featured-image {
249
 
250
  }
338
  }
339
 
340
  .brizy-dashboard-widget-footer__go-pro {
341
+ display: inline-flex;
342
  fill: #0073aa;
343
  }
344
 
355
  max-width: 1024px;
356
  /*text-align: left;*/
357
  }
358
+
359
  .brz-maintenance-table-access-links th,
360
  .brz-maintenance-table-access-links td {
361
  border: 1px solid #ccd0d4;
362
  }
363
+
364
  .brz-maintenance-table-access-links th:first-child,
365
  .brz-maintenance-table-access-links td:first-child {
366
  width: 35px;
367
  text-align: center;
368
  }
369
+
370
  .brz-maintenance-table-access-links th:not(:first-child) {
371
  padding-left: 10px;
372
  }
373
+
374
  .brz-maintenance-delete-links {
375
  padding-left: 10px !important;
376
  }
377
+
378
  .brz-maintenance-add-link {
379
  margin-top: 15px !important;
380
  }
381
+
382
  /* Admin notice give us a rating */
383
  .brz-review-notice-container {
384
  display: flex;
385
  align-items: center;
386
  padding-top: 10px;
387
  }
388
+
389
  .brz-review-notice-container .dashicons {
390
  font-size: 1.4em;
391
  padding-left: 10px;
392
  }
393
+
394
  .brz-review-notice-container a {
395
  padding-left: 5px;
396
  text-decoration: none;
397
  }
398
+
399
  .brz-review-notice-container .dashicons:first-child {
400
  padding-left: 0;
401
  }
402
+
403
  .brz-notice-image {
404
  max-width: 100px;
405
  }
407
  .brz-notice-content .brz-notice-heading {
408
  padding-bottom: 5px;
409
  }
410
+
411
  .brz-notice-content {
412
  margin-left: 15px;
413
  }
414
+
415
  .brz-notice-container {
416
  padding-top: 10px;
417
  padding-bottom: 10px;
422
 
423
  /* Admin deactivate plugin modal */
424
  .brz-deactivate-modal {
425
+ border-radius: 3px;
426
  animation: brz-feedback-modal-fadein .5s linear;
427
  }
428
+
429
  .brz-deactivate-overlay {
430
  animation: brz-feedback-overlay-fadein .5s linear;
431
  }
432
+
433
  .brz-deactivate-feedback-dialog-logo {
434
  width: 40px;
435
  vertical-align: middle;
436
  }
437
+
438
  .brz-deactivate-modal .ui-dialog-titlebar {
439
  display: none;
440
  }
441
+
442
  .brz-deactivate-modal .ui-dialog-content {
443
  padding: 0;
444
  }
445
+
446
  .brz-deactivate-feedback-dialog-header {
447
  padding: 18px 15px;
448
+ box-shadow: 0 0 8px rgba(0, 0, 0, .1);
449
  text-align: left;
450
  }
451
+
452
  .brz-deactivate-feedback-dialog-header-title {
453
  font-size: 15px;
454
  text-transform: uppercase;
456
  padding-left: 5px;
457
  color: #495157;
458
  }
459
+
460
  .brz-deactivate-feedback-dialog-form {
461
  padding: 30px;
462
  text-align: left;
463
  }
464
+
465
  .brz-deactivate-feedback-dialog-form-caption {
466
  font-weight: 700;
467
  font-size: 15px;
469
  line-height: 1.4;
470
  margin-bottom: 30px;
471
  }
472
+
473
  .brz-deactivate-feedback-dialog-input {
474
  float: left;
475
  margin: 0 15px 0 0;
476
  box-shadow: none;
477
  }
478
+
479
  .brz-deactivate-feedback-dialog-label {
480
  display: block;
481
  font-size: 13px;
482
  color: #6d7882;
483
  }
484
+
485
  #brz-deactivate-feedback-dialog .brz-deactivate-feedback-dialog-input {
486
  float: left;
487
  margin: 0 15px 0 0;
488
  box-shadow: none;
489
  }
490
+
491
  .brz-deactivate-feedback-dialog-input-wrapper {
492
  line-height: 1.3;
493
  overflow: hidden;
494
  margin-bottom: 15px;
495
  }
496
+
497
  .brz-deactivate-modal .ui-dialog-buttonpane {
498
  border: none;
499
  padding-bottom: 30px;
500
+ border-radius: 3px;
501
  }
502
+
503
  .brz-deactivate-modal .ui-dialog-buttonset {
504
+ float: none;
505
  }
506
+
507
  .brz-feedback-submit {
508
  background-color: #05b3e6;
509
  color: #fff;
510
  width: 180px;
511
  height: 38px;
512
+ border: none;
513
  }
514
+
515
  .brz-feedback-submit:hover,
516
  .brz-feedback-submit:focus {
517
  opacity: 0.9;
518
  background-color: #05b3e6;
519
  color: #fff !important;
520
  }
521
+
522
  .brz-feedback-submit:disabled:hover {
523
  color: #a4afb7 !important;
524
  }
525
+
526
  .brz-feedback-skip {
527
  font-size: 12px;
528
  color: #a4afb7;
529
  background: none;
530
  float: right;
531
  width: auto;
532
+ border: none;
533
  box-shadow: none;
534
  }
535
+
536
  .brz-feedback-skip:hover,
537
  .brz-feedback-skip:active,
538
  .brz-feedback-skip:focus {
541
  background: none;
542
  box-shadow: none;
543
  }
544
+
545
  .brz-feedback-text {
546
  margin: 10px 0 0 30px;
547
  padding: 5px;
551
  background-color: #fff;
552
  width: 92%;
553
  }
554
+
555
  .brz-feedback-text-alert {
556
  max-width: fit-content;
557
  color: #b01b1b;
558
  padding: 0;
559
  }
560
+
561
  @-webkit-keyframes brz-feedback-modal-fadein {
562
  0% {
563
  opacity: 0;
567
  opacity: 1;
568
  }
569
  }
570
+
571
  @-webkit-keyframes brz-feedback-overlay-fadein {
572
  0% {
573
  opacity: 0;
577
  opacity: 0.7;
578
  }
579
  }
580
+
581
  @-webkit-keyframes brz-rotation {
582
  0% {
583
  -webkit-transform: rotate(0deg);
589
  transform: rotate(359deg);
590
  }
591
  }
592
+
593
  @keyframes brz-rotation {
594
  0% {
595
  -webkit-transform: rotate(0deg);
601
  transform: rotate(359deg);
602
  }
603
  }
604
+
605
  .brz-loading:before {
606
  display: inline-block;
607
  content: "\f463";
608
  font: 18px dashicons;
609
  animation: brz-rotation 2s linear infinite;
610
+ margin-top: 10px;
611
  }
612
+
613
+ .brz-leads-export-disable {
614
+ pointer-events: none;
615
+ cursor: default;
616
+ opacity: 0.5;
617
+ }
admin/static/js/cloud.js ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+
3
+ var BrizyCloud = {
4
+ form: null,
5
+ pageUrl: null,
6
+ init: function (form) {
7
+ BrizyCloud.form = form;
8
+ BrizyCloud.pageUrl = form.attr('action');
9
+ form.find('select[name=brizy-cloud-use-container]').on('change', BrizyCloud.containerChange)
10
+ },
11
+ containerChange: function (e) {
12
+ var value = e.target.value;
13
+ $.ajax({
14
+ url: Brizy_Admin_Data.url,
15
+ data: {action: 'brizy-cloud-projects', container: value}
16
+ }).done(function (response) {
17
+ var select = BrizyCloud.form
18
+ .find('select[name=brizy-cloud-use-project]');
19
+
20
+ select
21
+ .find('option[value!=0]')
22
+ .remove();
23
+
24
+ for (var i = 0; i < response.data.length; i++) {
25
+ select.append('<option value="'+response.data[i].id+'">'+response.data[i].name+'</option>')
26
+ }
27
+ });
28
+ }
29
+ };
30
+
31
+ $(function () {
32
+ BrizyCloud.init($('#cloud-form'));
33
+ });
34
+ });
35
+
36
+
admin/static/js/featured-image.js CHANGED
@@ -15,9 +15,11 @@ jQuery(document).ready(function ($) {
15
  return el(originalElement, origianalProps);
16
  }
17
 
18
- var clickAndMouseMoveHandler = function (e) {
19
 
20
- if (!isDragging && e.type !== 'click') return;
 
 
21
 
22
  var $this = $(e.target);
23
  var imageW = $this.width();
@@ -30,6 +32,12 @@ jQuery(document).ready(function ($) {
30
  isDragging = false;
31
  });
32
 
 
 
 
 
 
 
33
  // Calculate FocusPoint coordinates
34
  var offsetX = e.pageX - $this.offset().left;
35
  var offsetY = e.pageY - $this.offset().top;
@@ -56,10 +64,28 @@ jQuery(document).ready(function ($) {
56
  };
57
 
58
  return el('div', {class: 'brizy-featured-image hide-if-no-js'}, [
59
- el('div', {class: 'wrapper'}, [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  el('img', {
61
  id: 'featured-image-el',
62
- src: origianalProps.media.guid.raw,
63
  width: "100%",
64
  onClick: clickAndMouseMoveHandler,
65
  onMouseMove: clickAndMouseMoveHandler,
@@ -74,7 +100,10 @@ jQuery(document).ready(function ($) {
74
  el('div', {
75
  class: 'focal-point',
76
  id: '_thumbnail_focal_point_div',
77
- style: {left: x + "%", top: y + "%"}
 
 
 
78
  }),
79
  el('div', {class: 'deleteImage'}, [
80
  el('a', {
15
  return el(originalElement, origianalProps);
16
  }
17
 
18
+ var clickAndMouseMoveHandler = function ( e ) {
19
 
20
+ if ( ! isDragging && e.type !== 'click' ) {
21
+ return;
22
+ }
23
 
24
  var $this = $(e.target);
25
  var imageW = $this.width();
32
  isDragging = false;
33
  });
34
 
35
+ if ( window.getSelection ) {
36
+ window.getSelection().removeAllRanges();
37
+ } else if ( document.selection ) {
38
+ document.selection.empty();
39
+ }
40
+
41
  // Calculate FocusPoint coordinates
42
  var offsetX = e.pageX - $this.offset().left;
43
  var offsetY = e.pageY - $this.offset().top;
64
  };
65
 
66
  return el('div', {class: 'brizy-featured-image hide-if-no-js'}, [
67
+ el('input', {
68
+ id: '_thumbnail_focal_point_x',
69
+ name: '_thumbnail_focal_point_x',
70
+ type: 'hidden',
71
+ value: Brizy_Admin_Data.page.focalPoint.x
72
+ }),
73
+ el('input', {
74
+ id: '_thumbnail_focal_point_y',
75
+ name: '_thumbnail_focal_point_y',
76
+ type: 'hidden',
77
+ value: Brizy_Admin_Data.page.focalPoint.y
78
+ }),
79
+ el('div',
80
+ {
81
+ class: 'wrapper',
82
+ onMouseLeave: function () {
83
+ isDragging = false;
84
+ }
85
+ }, [
86
  el('img', {
87
  id: 'featured-image-el',
88
+ src: origianalProps.media.source_url,
89
  width: "100%",
90
  onClick: clickAndMouseMoveHandler,
91
  onMouseMove: clickAndMouseMoveHandler,
100
  el('div', {
101
  class: 'focal-point',
102
  id: '_thumbnail_focal_point_div',
103
+ style: {left: x + "%", top: y + "%"},
104
+ onMouseDown: function () {
105
+ isDragging = true;
106
+ }
107
  }),
108
  el('div', {class: 'deleteImage'}, [
109
  el('a', {
admin/static/js/rules.js CHANGED
@@ -8,75 +8,107 @@ var RULE_TAXONOMY = "2";
8
  var RULE_ARCHIVE = "4";
9
  var RULE_TEMPLATE = "8";
10
  var RULE_BRIZY_TEMPLATE = "16";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  var defaultRule = {
13
  type: RULE_TYPE_INCLUDE,
14
- appliedFor: "1",
15
- entityType: "post",
16
  entityValues: []
17
  };
18
 
19
  var state = {
 
20
  rule: defaultRule,
21
- rules: Brizy_Admin_Rules.rules,
 
 
 
 
 
22
  errors: "",
23
  groups: [],
24
  };
25
 
 
26
 
27
  var apiCache = {
28
  groupList: null,
29
  postGroupListPromise: [],
 
30
  postList: [],
31
  termList: []
32
  };
33
 
34
  var api = {
35
- getGroupList: function () {
36
 
37
- if (apiCache.groupList)
38
- return apiCache.groupList;
 
 
 
 
39
 
40
- return apiCache.groupList = jQuery.getJSON(Brizy_Admin_Rules.url, {
41
  action: "brizy_rule_group_list",
42
  hash: Brizy_Admin_Rules.hash,
43
  version: Brizy_Admin_Data.editorVersion,
44
- context: 'template-rules'
 
45
  })
46
  },
47
 
48
- getPostsGroupList: function (postType) {
49
 
50
- if (apiCache.postGroupListPromise[postType])
51
- return apiCache.postGroupListPromise[postType];
52
 
53
- return apiCache.postGroupListPromise[postType] = jQuery.getJSON(Brizy_Admin_Rules.url, {
54
  action: "brizy_rule_posts_group_list",
55
  postType: postType,
56
  hash: Brizy_Admin_Rules.hash,
57
  version: Brizy_Admin_Data.editorVersion,
58
- context: 'template-rules'
 
59
  })
60
  },
61
 
62
- getPosts: function (postType, filter, exclude) {
63
 
64
- var cachekey = postType + filter;
65
- if (apiCache.postList[cachekey])
66
- return apiCache.postList[cachekey];
67
 
68
- return jQuery.getJSON(Brizy_Admin_Rules.url, {
69
- action: "brizy_get_posts",
70
- excludePostTypes: exclude,
71
- postType: postType,
72
- filterTerm: filter,
73
  hash: Brizy_Admin_Rules.hash,
74
- version: Brizy_Admin_Data.editorVersion
75
- }).done(function (data) {
76
- apiCache.postList[cachekey] = jQuery.Deferred().resolve(data);
77
- });
78
  },
79
 
 
80
  getTerms: function (taxonomy) {
81
  if (apiCache.termList[taxonomy])
82
  return apiCache.termList[taxonomy];
@@ -91,10 +123,10 @@ var api = {
91
  });
92
  },
93
 
94
- createRule: function (rule) {
95
 
96
  var url = new URL(Brizy_Admin_Rules.url);
97
- url.searchParams.append('action', 'brizy_add_rule');
98
  url.searchParams.append('hash', Brizy_Admin_Rules.hash);
99
  url.searchParams.append('post', Brizy_Admin_Rules.id);
100
  url.searchParams.append('version', Brizy_Admin_Data.editorVersion);
@@ -108,27 +140,6 @@ var api = {
108
  contentType: "application/json; charset=utf-8"
109
  });
110
  },
111
-
112
- deleteRule: function (ruleId) {
113
- return jQuery.post(Brizy_Admin_Rules.url, {
114
- action: "brizy_delete_rule",
115
- rule: ruleId,
116
- hash: Brizy_Admin_Rules.hash,
117
- dataVersion: 0,
118
- ignoreDataVersion: 1,
119
- version: Brizy_Admin_Data.editorVersion,
120
- post: Brizy_Admin_Rules.id
121
- });
122
- },
123
-
124
- getRuleList: function () {
125
- return jQuery.post(Brizy_Admin_Rules.url, {
126
- action: "brizy_list_rules",
127
- hash: Brizy_Admin_Rules.hash,
128
- version: Brizy_Admin_Data.editorVersion,
129
- post: Brizy_Admin_Rules.id
130
- });
131
- }
132
  };
133
 
134
  var actions = {
@@ -140,11 +151,17 @@ var actions = {
140
 
141
  updateGroups: function (value) {
142
  return function (state) {
143
- return {groups: value.data};
144
  };
145
  },
146
 
147
  rule: {
 
 
 
 
 
 
148
  setType: function (value) {
149
  return function (state) {
150
  return {type: value};
@@ -169,6 +186,27 @@ var actions = {
169
 
170
  resetRule: function () {
171
  return function (state) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  return {errors: "", rule: defaultRule};
173
  };
174
  },
@@ -177,22 +215,86 @@ var actions = {
177
  return {errors: errors};
178
  };
179
  },
180
- setRuleList: function (rules) {
 
181
  return function (state) {
182
- return {rules: rules};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  };
184
  }
185
  };
186
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  var RuleTypeField = function (params) {
188
  return function (state, action) {
189
  return h(
190
  "span",
191
- {class: "brizy-rule-select"},
 
 
 
192
  h(
193
  "select",
194
  {
195
- disabled: params.disabled,
 
 
 
 
 
 
 
 
 
 
196
  onchange: function (e) {
197
  action.rule.setType(e.target.value);
198
  }
@@ -220,15 +322,14 @@ var RuleTypeField = function (params) {
220
  };
221
  };
222
 
223
- BrzSelect2 = function (params) {
224
 
225
  var oncreate = function (element) {
226
 
227
  var el = jQuery(element);
228
- if (!params.disabled) {
229
- el.select2();
230
- el.on("change", params.onChange);
231
- }
232
  if (typeof params.optionRequest === 'function') {
233
  const optionRequest = params.optionRequest();
234
 
@@ -238,24 +339,21 @@ BrzSelect2 = function (params) {
238
  options.forEach(function (option) {
239
  el.append(option);
240
  });
 
241
  });
242
  } else {
243
  var options = params.convertResponseToOptions(optionRequest);
244
  options.forEach(function (option) {
245
  el.append(option);
246
  });
247
- }
248
- }
249
 
250
- if (!params.disabled) {
251
- el.trigger("change");
252
  }
253
  };
254
 
255
  var onremove = function (element, done) {
256
- if (!params.disabled) {
257
- jQuery(element).select2("destroy");
258
- }
259
  done();
260
  };
261
 
@@ -265,70 +363,69 @@ BrzSelect2 = function (params) {
265
  key: params.id + '|' + params.value,
266
  akey: params.id + '|' + params.value,
267
  style: params.style,
268
- disabled: params.disabled,
269
  oncreate: oncreate,
270
  onremove: onremove,
271
- onchange: params.onChange
 
272
  },
273
  []
274
  );
275
  };
276
 
277
- // var PostSelect2Field = function (params) {
278
- // var convertResponseToOptions = function (response) {
279
- // var options = [new Option("All", null, false, false)];
280
- // response.data.posts.forEach(function (post) {
281
- // var selected = params.value.includes(post.ID + "") || params.value.includes(post.ID);
282
- // options.push(new Option(post.title, post.ID, false, selected));
283
- // });
284
- // return options;
285
- // };
286
- //
287
- // return h(
288
- // BrzSelect2,
289
- // {
290
- // id: params.id,
291
- // value: params.value,
292
- // disabled: params.disabled,
293
- // style: params.style ? params.style : {width: "200px"},
294
- // optionRequest: params.optionRequest,
295
- // convertResponseToOptions: convertResponseToOptions,
296
- // onChange: params.onChange
297
- // },
298
- // []
299
- // );
300
- // };
301
-
302
- var RuleTaxonomySearchField = function (params) {
303
  var convertResponseToOptions = function (response) {
304
- var options = [new Option("All", null, false, false)];
305
- response.data.forEach(function (term) {
306
- var selected = params.rule.entityValues && (params.rule.entityValues.includes(term.term_id + "") || params.rule.entityValues.includes(term.term_id));
307
- options.push(new Option(term.name, term.term_id, false, selected));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
308
  });
309
- return options;
 
310
  };
311
 
 
312
  return h(
313
  BrzSelect2,
314
  {
315
- id: "taxonomies-" + params.taxonomy,
316
  style: params.style ? params.style : {width: "200px"},
 
317
  optionRequest: function () {
318
- return api.getTerms(params.taxonomy);
319
  },
320
  convertResponseToOptions: convertResponseToOptions,
321
  onChange: params.onChange,
322
- disabled: params.disabled
323
  },
324
  []
325
  );
326
  };
327
 
328
- var RulePostsGroupSelectField = function (params) {
329
 
330
  var appliedFor = params.rule.appliedFor;
331
- var entityType = params.rule.entityType;
332
  var value = String(params.rule.entityValues[0] ? params.rule.entityValues[0] : '');
333
 
334
  var convertResponseToOptions = function (response) {
@@ -361,14 +458,14 @@ var RulePostsGroupSelectField = function (params) {
361
  return h(
362
  BrzSelect2,
363
  {
364
- id: "post-groups-" + entityType,
365
  style: params.style ? params.style : {width: "200px"},
 
366
  optionRequest: function () {
367
- return api.getPostsGroupList(entityType);
368
  },
369
  convertResponseToOptions: convertResponseToOptions,
370
  onChange: params.onChange,
371
- disabled: params.disabled
372
  },
373
  []
374
  );
@@ -376,6 +473,7 @@ var RulePostsGroupSelectField = function (params) {
376
 
377
  var RuleApplyGroupField = function (params) {
378
  return function (state, actions) {
 
379
  var appliedFor = params.rule.appliedFor;
380
  var entityType = params.rule.entityType;
381
  var value = appliedFor + "|" + entityType;
@@ -401,25 +499,25 @@ var RuleApplyGroupField = function (params) {
401
  });
402
 
403
  const attributes = {
404
- class: "brizy-rule-select--options",
 
 
405
  onchange: function (e) {
406
- if (!params.disabled) {
407
- var values = e.target.value.split("|");
408
- actions.rule.setAppliedFor(values[0]);
409
- actions.rule.setEntityType(values[1]);
410
- }
 
411
  }
412
  };
413
 
414
- if (params.disabled) {
415
- attributes.disabled = "disabled";
416
- }
417
-
418
  var elements = [
419
- h("span", {class: "brizy-rule-select"}, h("select", attributes, groups))
 
 
420
  ];
421
 
422
-
423
  switch (appliedFor) {
424
  case RULE_POSTS:
425
  elements.push(
@@ -427,16 +525,13 @@ var RuleApplyGroupField = function (params) {
427
  h(RulePostsGroupSelectField, {
428
  id: appliedFor + value,
429
  rule: params.rule,
430
- disabled: params.disabled,
 
431
  onChange: function (e) {
432
- if (!params.disabled) {
433
- var values = e.target.value.split("|");
434
- if (values.length === 1) {
435
- actions.rule.setEntityValues(values);
436
- } else {
437
- actions.rule.setEntityValues([e.target.value]);
438
- }
439
- }
440
  }
441
  })
442
  ]));
@@ -444,18 +539,17 @@ var RuleApplyGroupField = function (params) {
444
  case RULE_TAXONOMY:
445
  elements.push(
446
  h("span", {class: "brizy-rule-select brizy-rule-select2"}, [
447
- h(RuleTaxonomySearchField, {
448
  id: appliedFor + value,
449
  rule: params.rule,
 
450
  taxonomy: entityType,
451
- disabled: params.disabled,
452
  onChange: function (e) {
453
- if (!params.disabled)
454
- actions.rule.setEntityValues(
455
- e.target.value && e.target.value != "null"
456
- ? [e.target.value]
457
- : []
458
- );
459
  }
460
  })
461
  ]));
@@ -469,7 +563,7 @@ var RuleForm = function (params) {
469
  var elements = [
470
  h("h4", {}, "Add New Condition"),
471
  h(RuleTypeField, {value: String(params.rule.type)}),
472
- h(RuleApplyGroupField, {rule: params.rule, groups: params.groups}),
473
  h("input", {
474
  type: "button",
475
  class: "button",
@@ -487,12 +581,16 @@ var RuleForm = function (params) {
487
 
488
  var RuleListItem = function (params) {
489
  return h("div", {class: "rule", key: params.index}, [
490
- h(RuleTypeField, {value: String(params.rule.type), disabled: true}),
491
- h(RuleApplyGroupField, {
492
- rule: params.rule,
493
- groups: params.groups,
494
- disabled: true
495
- }),
 
 
 
 
496
  h("input", {
497
  class: "brizy-delete-rule ",
498
  type: "button",
@@ -516,7 +614,8 @@ var RuleList = function (params) {
516
  index: index,
517
  rule: rule,
518
  groups: params.groups,
519
- onDelete: params.onDelete
 
520
  })
521
  );
522
  });
@@ -524,53 +623,137 @@ var RuleList = function (params) {
524
  return h("div", {}, elements);
525
  };
526
 
527
- var view = function (state, actions) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
528
  return h(
529
  "div",
530
  {
531
  oncreate: function () {
532
- api.getGroupList().done(actions.updateGroups);
533
- }
 
 
 
534
  },
535
  [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
536
  h(RuleList, {
537
- rules: state.rules,
 
538
  groups: state.groups,
539
  onDelete: function (rule) {
540
- api.deleteRule(rule.id).done(function () {
541
- api.getRuleList().done(function (response) {
542
- actions.setRuleList(response.data);
543
- });
544
- });
545
  }
546
  }),
547
- h(RuleForm, {
548
- rule: state.rule,
549
- onChange: actions.ruleChange,
550
- groups: state.groups,
551
- errors: state.errors,
552
- onSubmit: function () {
553
- api
554
- .createRule(state.rule)
555
- .done(function () {
556
- api.getRuleList().done(function (response) {
557
- actions.setRuleList(response.data);
558
- });
559
- actions.resetRule();
560
- })
561
- .fail(function (response) {
562
- if (response.responseJSON && response.responseJSON.data) {
563
- if (response.responseJSON.data.message)
564
- actions.addFormErrors(response.responseJSON.data.message);
565
- else actions.addFormErrors("Failed to add the rule");
 
 
566
  }
567
- });
568
- }
569
- })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  ]
571
  );
572
  };
573
 
574
  jQuery(document).ready(function ($) {
575
- hyperapp.app(state, actions, view, document.getElementById("rules"));
576
  });
 
8
  var RULE_ARCHIVE = "4";
9
  var RULE_TEMPLATE = "8";
10
  var RULE_BRIZY_TEMPLATE = "16";
11
+ var POSTS_FROM_TAXONOMY = "32";
12
+ var POSTS_FROM_CHILD_TAXONOMY = "64";
13
+ var ANY_CHILD_TAXONOMY = "128";
14
+
15
+ var defaultTemplateType = Brizy_Admin_Rules.templateType !== '' ? Brizy_Admin_Rules.templateType : 'single';
16
+ var defaultAppliedFor = null;
17
+ var defaultEntityType = null;
18
+
19
+ switch (defaultTemplateType) {
20
+ case 'archive':
21
+ defaultAppliedFor = RULE_TAXONOMY;
22
+ defaultEntityType = 'category';
23
+ break;
24
+
25
+ default:
26
+ defaultAppliedFor = RULE_POSTS;
27
+ defaultEntityType = 'post';
28
+ break;
29
+ }
30
+
31
 
32
  var defaultRule = {
33
  type: RULE_TYPE_INCLUDE,
34
+ appliedFor: defaultAppliedFor,
35
+ entityType: defaultEntityType,
36
  entityValues: []
37
  };
38
 
39
  var state = {
40
+ templateType: defaultTemplateType,
41
  rule: defaultRule,
42
+ rules: {
43
+ single: [],
44
+ archive: [],
45
+ single_product: [],
46
+ product_archive: [],
47
+ },
48
  errors: "",
49
  groups: [],
50
  };
51
 
52
+ state.rules[state.templateType] = Brizy_Admin_Rules.rules;
53
 
54
  var apiCache = {
55
  groupList: null,
56
  postGroupListPromise: [],
57
+ archiveGroupListPromise: [],
58
  postList: [],
59
  termList: []
60
  };
61
 
62
  var api = {
63
+ getGroupList: function (templateType) {
64
 
65
+ if (!apiCache.groupList) {
66
+ apiCache.groupList = [];
67
+ }
68
+
69
+ if (apiCache.groupList && apiCache.groupList[templateType])
70
+ return apiCache.groupList[templateType];
71
 
72
+ return apiCache.groupList[templateType] = jQuery.getJSON(Brizy_Admin_Rules.url, {
73
  action: "brizy_rule_group_list",
74
  hash: Brizy_Admin_Rules.hash,
75
  version: Brizy_Admin_Data.editorVersion,
76
+ context: 'template-rules',
77
+ templateType: templateType
78
  })
79
  },
80
 
81
+ getPostsGroupList: function (postType, templateType) {
82
 
83
+ if (apiCache.postGroupListPromise[postType + templateType])
84
+ return apiCache.postGroupListPromise[postType + templateType];
85
 
86
+ return apiCache.postGroupListPromise[postType + templateType] = jQuery.getJSON(Brizy_Admin_Rules.url, {
87
  action: "brizy_rule_posts_group_list",
88
  postType: postType,
89
  hash: Brizy_Admin_Rules.hash,
90
  version: Brizy_Admin_Data.editorVersion,
91
+ context: 'template-rules',
92
+ templateType: templateType
93
  })
94
  },
95
 
96
+ getArchiveGroupList: function (taxonomy, templateType) {
97
 
98
+ if (apiCache.archiveGroupListPromise[taxonomy + templateType])
99
+ return apiCache.archiveGroupListPromise[taxonomy + templateType];
 
100
 
101
+ return apiCache.archiveGroupListPromise[taxonomy + templateType] = jQuery.getJSON(Brizy_Admin_Rules.url, {
102
+ action: "brizy_rule_archive_group_list",
103
+ taxonomy: taxonomy,
 
 
104
  hash: Brizy_Admin_Rules.hash,
105
+ version: Brizy_Admin_Data.editorVersion,
106
+ context: 'template-rules',
107
+ templateType: templateType
108
+ })
109
  },
110
 
111
+
112
  getTerms: function (taxonomy) {
113
  if (apiCache.termList[taxonomy])
114
  return apiCache.termList[taxonomy];
123
  });
124
  },
125
 
126
+ validateRule: function (rule) {
127
 
128
  var url = new URL(Brizy_Admin_Rules.url);
129
+ url.searchParams.append('action', 'brizy_validate_rule');
130
  url.searchParams.append('hash', Brizy_Admin_Rules.hash);
131
  url.searchParams.append('post', Brizy_Admin_Rules.id);
132
  url.searchParams.append('version', Brizy_Admin_Data.editorVersion);
140
  contentType: "application/json; charset=utf-8"
141
  });
142
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  };
144
 
145
  var actions = {
151
 
152
  updateGroups: function (value) {
153
  return function (state) {
154
+ return {groups: value};
155
  };
156
  },
157
 
158
  rule: {
159
+ update: function (rule) {
160
+ return function (state) {
161
+ return rule;
162
+ };
163
+ },
164
+
165
  setType: function (value) {
166
  return function (state) {
167
  return {type: value};
186
 
187
  resetRule: function () {
188
  return function (state) {
189
+
190
+ switch (state.templateType) {
191
+ case 'archive':
192
+ defaultAppliedFor = RULE_TAXONOMY;
193
+ defaultEntityType = 'category';
194
+ break;
195
+
196
+ default:
197
+ defaultAppliedFor = RULE_POSTS;
198
+ defaultEntityType = 'post';
199
+ break;
200
+ }
201
+
202
+ var defaultRule = {
203
+ type: RULE_TYPE_INCLUDE,
204
+ appliedFor: defaultAppliedFor,
205
+ entityType: defaultEntityType,
206
+ entityValues: []
207
+ };
208
+
209
+
210
  return {errors: "", rule: defaultRule};
211
  };
212
  },
215
  return {errors: errors};
216
  };
217
  },
218
+
219
+ addRule: function (rule) {
220
  return function (state) {
221
+ return {
222
+ rules: {[state.templateType]: [...state.rules[state.templateType], rule]}
223
+ };
224
+ };
225
+ },
226
+ removeRule: function (rule) {
227
+ return function (state) {
228
+ return {
229
+ rules: {
230
+ [state.templateType]: state.rules[state.templateType].filter(function (arule) {
231
+ return arule != rule;
232
+ })
233
+ }
234
+ };
235
+ };
236
+ },
237
+ setTemplateType: function (type) {
238
+ return function (state) {
239
+ return {
240
+ templateType: type,
241
+ // rules: {
242
+ // single: [],
243
+ // archive: [],
244
+ // single_product: [],
245
+ // product_archive: [],
246
+ // }
247
+ };
248
  };
249
  }
250
  };
251
 
252
+ function arr_diff(a1, a2) {
253
+
254
+ var a = [], diff = [];
255
+
256
+ for (var i = 0; i < a1.length; i++) {
257
+ a[a1[i]] = true;
258
+ }
259
+
260
+ for (var i = 0; i < a2.length; i++) {
261
+ if (a[a2[i]]) {
262
+ delete a[a2[i]];
263
+ } else {
264
+ a[a2[i]] = true;
265
+ }
266
+ }
267
+
268
+ for (var k in a) {
269
+ diff.push(k);
270
+ }
271
+
272
+ return diff;
273
+ }
274
+
275
+
276
  var RuleTypeField = function (params) {
277
  return function (state, action) {
278
  return h(
279
  "span",
280
+ {
281
+ class: "brizy-rule-select",
282
+ },
283
+
284
  h(
285
  "select",
286
  {
287
+ name: params.name,
288
+ style: {width: "100px"},
289
+ oncreate: function (element) {
290
+ var el = jQuery(element);
291
+ el.on("change", params.onChange);
292
+ el.select2();
293
+ },
294
+ onremove: function (element, done) {
295
+ jQuery(element).select2("destroy");
296
+ done();
297
+ },
298
  onchange: function (e) {
299
  action.rule.setType(e.target.value);
300
  }
322
  };
323
  };
324
 
325
+ var BrzSelect2 = function (params) {
326
 
327
  var oncreate = function (element) {
328
 
329
  var el = jQuery(element);
330
+ el.on("change", params.onChange);
331
+ el.select2();
332
+
 
333
  if (typeof params.optionRequest === 'function') {
334
  const optionRequest = params.optionRequest();
335
 
339
  options.forEach(function (option) {
340
  el.append(option);
341
  });
342
+ el.trigger("change");
343
  });
344
  } else {
345
  var options = params.convertResponseToOptions(optionRequest);
346
  options.forEach(function (option) {
347
  el.append(option);
348
  });
 
 
349
 
350
+ el.trigger("change");
351
+ }
352
  }
353
  };
354
 
355
  var onremove = function (element, done) {
356
+ jQuery(element).select2("destroy");
 
 
357
  done();
358
  };
359
 
363
  key: params.id + '|' + params.value,
364
  akey: params.id + '|' + params.value,
365
  style: params.style,
 
366
  oncreate: oncreate,
367
  onremove: onremove,
368
+ onchange: params.onChange,
369
+ name: params.name,
370
  },
371
  []
372
  );
373
  };
374
 
375
+ var RulePostsGroupSelectField = function (params) {
376
+
377
+ var appliedFor = params.rule.appliedFor;
378
+ var entityType = params.rule.entityType;
379
+ var value = String(params.rule.entityValues[0] ? params.rule.entityValues[0] : '');
380
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  var convertResponseToOptions = function (response) {
382
+ var groups = [];
383
+ groups.push(new Option("All", '', false, value === ''));
384
+ response.data.forEach(function (group) {
385
+
386
+ if (group.title === "") {
387
+ group.items.forEach(function (option) {
388
+ var optionValue = String(option.value);
389
+ groups.push(new Option(option.title, optionValue, false, params.rule.entityValues.includes(optionValue)));
390
+ });
391
+ } else {
392
+ var groupElement = document.createElement("OPTGROUP");
393
+ groupElement.label = group.title;
394
+
395
+ if (group.items.length > 0) {
396
+ group.items.forEach(function (option) {
397
+ var optionValue = String(option.value);
398
+ groupElement.appendChild(new Option(option.title, optionValue, false, params.rule.entityValues.includes(optionValue)))
399
+ });
400
+ groups.push(groupElement);
401
+ }
402
+ }
403
  });
404
+
405
+ return groups;
406
  };
407
 
408
+
409
  return h(
410
  BrzSelect2,
411
  {
412
+ id: "post-groups-" + entityType,
413
  style: params.style ? params.style : {width: "200px"},
414
+ name: params.name,
415
  optionRequest: function () {
416
+ return api.getPostsGroupList(entityType, params.type);
417
  },
418
  convertResponseToOptions: convertResponseToOptions,
419
  onChange: params.onChange,
 
420
  },
421
  []
422
  );
423
  };
424
 
425
+ var RuleArchiveGroupSelectField = function (params) {
426
 
427
  var appliedFor = params.rule.appliedFor;
428
+ var taxonomy = params.rule.entityType;
429
  var value = String(params.rule.entityValues[0] ? params.rule.entityValues[0] : '');
430
 
431
  var convertResponseToOptions = function (response) {
458
  return h(
459
  BrzSelect2,
460
  {
461
+ id: "archive-groups-" + params.taxonomy,
462
  style: params.style ? params.style : {width: "200px"},
463
+ name: params.name,
464
  optionRequest: function () {
465
+ return api.getArchiveGroupList(taxonomy, params.type);
466
  },
467
  convertResponseToOptions: convertResponseToOptions,
468
  onChange: params.onChange,
 
469
  },
470
  []
471
  );
473
 
474
  var RuleApplyGroupField = function (params) {
475
  return function (state, actions) {
476
+
477
  var appliedFor = params.rule.appliedFor;
478
  var entityType = params.rule.entityType;
479
  var value = appliedFor + "|" + entityType;
499
  });
500
 
501
  const attributes = {
502
+ name: params.name,
503
+ style: {width: "200px"},
504
+ class: "brizy-rule-select--options[] ",
505
  onchange: function (e) {
506
+ var values = e.target.value.split("|");
507
+ actions.rule.update({
508
+ appliedFor: values[0],
509
+ entityType: values[1],
510
+ entityValues: []
511
+ });
512
  }
513
  };
514
 
 
 
 
 
515
  var elements = [
516
+ h("span", {class: "brizy-rule-select brizy-rule-select2"},
517
+ h("select", attributes, groups)
518
+ )
519
  ];
520
 
 
521
  switch (appliedFor) {
522
  case RULE_POSTS:
523
  elements.push(
525
  h(RulePostsGroupSelectField, {
526
  id: appliedFor + value,
527
  rule: params.rule,
528
+ type: params.type,
529
+ name: params.type ? 'brizy-' + params.type + '-rule-entity-values[]' : '',
530
  onChange: function (e) {
531
+ if (e.target.value)
532
+ actions.rule.update({
533
+ entityValues: [e.target.value],
534
+ });
 
 
 
 
535
  }
536
  })
537
  ]));
539
  case RULE_TAXONOMY:
540
  elements.push(
541
  h("span", {class: "brizy-rule-select brizy-rule-select2"}, [
542
+ h(RuleArchiveGroupSelectField, {
543
  id: appliedFor + value,
544
  rule: params.rule,
545
+ type: params.type,
546
  taxonomy: entityType,
547
+ name: params.type ? 'brizy-' + params.type + '-rule-entity-values[]' : '',
548
  onChange: function (e) {
549
+ if (e.target.value)
550
+ actions.rule.update({
551
+ entityValues: [e.target.value],
552
+ });
 
 
553
  }
554
  })
555
  ]));
563
  var elements = [
564
  h("h4", {}, "Add New Condition"),
565
  h(RuleTypeField, {value: String(params.rule.type)}),
566
+ h(RuleApplyGroupField, {rule: params.rule, groups: params.groups, type: params.type}),
567
  h("input", {
568
  type: "button",
569
  class: "button",
581
 
582
  var RuleListItem = function (params) {
583
  return h("div", {class: "rule", key: params.index}, [
584
+ h("span", {class: 'rule-fields'}, [
585
+ h(RuleTypeField, {value: String(params.rule.type), name: 'brizy-' + params.type + '-rule-type[]'}),
586
+ h(RuleApplyGroupField, {
587
+ rule: params.rule,
588
+ groups: params.groups,
589
+ type: params.type,
590
+ name: 'brizy-' + params.type + '-rule-group[]'
591
+ }),
592
+ h('div', {class: 'overlay'}, [])
593
+ ]),
594
  h("input", {
595
  class: "brizy-delete-rule ",
596
  type: "button",
614
  index: index,
615
  rule: rule,
616
  groups: params.groups,
617
+ onDelete: params.onDelete,
618
+ type: params.type
619
  })
620
  );
621
  });
623
  return h("div", {}, elements);
624
  };
625
 
626
+ var TemplateTypeSelect = function (params) {
627
+ return h(
628
+ "fieldset", {class: 'brizy-template-type'}, [
629
+ h('h4', {}, 'Template Type'),
630
+ h('label', {}, [
631
+ h('input', {
632
+ type: 'radio',
633
+ name: 'brizy-template-type',
634
+ onchange: params.onChange,
635
+ value: 'single',
636
+ checked: 'single' === params.value
637
+ }),
638
+ h('span', {class: "date-time-text format-i18n"}, Brizy_Admin_Rules.labels.single),
639
+ ]),
640
+ h('label', {}, [
641
+ h('input', {
642
+ type: 'radio',
643
+ name: 'brizy-template-type',
644
+ onchange: params.onChange,
645
+ value: 'archive',
646
+ checked: 'archive' === params.value
647
+ }),
648
+ h('span', {class: "date-time-text format-i18n"}, Brizy_Admin_Rules.labels.archive),
649
+ ]),
650
+ ...(Brizy_Admin_Rules.labels.single_product ?
651
+ [h('label', {}, [
652
+ h('input', {
653
+ type: 'radio',
654
+ name: 'brizy-template-type',
655
+ onchange: params.onChange,
656
+ value: 'single_product',
657
+ checked: 'single_product' === params.value
658
+ }),
659
+ h('span', {class: "date-time-text format-i18n"}, Brizy_Admin_Rules.labels.single_product),
660
+ ]), h('label', {}, [
661
+ h('input', {
662
+ type: 'radio',
663
+ name: 'brizy-template-type',
664
+ onchange: params.onChange,
665
+ value: 'product_archive',
666
+ checked: 'product_archive' === params.value
667
+ }),
668
+ h('span', {class: "date-time-text format-i18n"}, Brizy_Admin_Rules.labels.product_archive),
669
+ ])] : []),
670
+ ]
671
+ );
672
+ };
673
+
674
+ var ruleView = function (state, actions) {
675
+
676
  return h(
677
  "div",
678
  {
679
  oncreate: function () {
680
+ if (state.templateType != '')
681
+ api.getGroupList(state.templateType).done(function (response) {
682
+ actions.updateGroups(response.data)
683
+ });
684
+ },
685
  },
686
  [
687
+ h(
688
+ TemplateTypeSelect, {
689
+ value: state.templateType,
690
+ onChange: function (e) {
691
+ const type = e.target.value && e.target.value != "null"
692
+ ? e.target.value
693
+ : null;
694
+
695
+ actions.setTemplateType(type);
696
+ api.getGroupList(type).done(function (response) {
697
+ actions.updateGroups(response.data);
698
+ actions.rule.setAppliedFor(String(response.data[0].value));
699
+ actions.rule.setEntityType(String(response.data[0].items[0].value));
700
+ });
701
+ }
702
+ }, []
703
+ ),
704
  h(RuleList, {
705
+ type: state.templateType,
706
+ rules: state.rules[state.templateType] || [],
707
  groups: state.groups,
708
  onDelete: function (rule) {
709
+ actions.removeRule(rule);
 
 
 
 
710
  }
711
  }),
712
+ state.templateType ? [
713
+ h(RuleForm, {
714
+ type: state.templateType,
715
+ rule: state.rule,
716
+ groups: state.groups,
717
+ errors: state.errors,
718
+ onSubmit: function () {
719
+ var rules = state.rules[state.templateType] || [];
720
+
721
+ try {
722
+ rules.forEach(rule => {
723
+ if (rule.type !== state.rule.type) return;
724
+ if (rule.appliedFor !== state.rule.appliedFor) return;
725
+ if (rule.entityType !== state.rule.entityType) return;
726
+ if (arr_diff(rule.entityValues, state.rule.entityValues).length > 0) return;
727
+ throw 'This rule already exist';
728
+
729
+ });
730
+ } catch (error) {
731
+ actions.addFormErrors('This rule already exist');
732
+ return;
733
  }
734
+
735
+ api
736
+ .validateRule(state.rule)
737
+ .done(function () {
738
+ actions.addRule(state.rule);
739
+ actions.resetRule();
740
+ })
741
+ .fail(function (response) {
742
+ if (response.responseJSON && response.responseJSON.data) {
743
+ if (response.responseJSON.data.message)
744
+ actions.addFormErrors(response.responseJSON.data.message);
745
+ else
746
+ actions.addFormErrors("Failed to add the rule");
747
+ }
748
+ });
749
+ }
750
+ })] :
751
+ [],
752
  ]
753
  );
754
  };
755
 
756
  jQuery(document).ready(function ($) {
757
+ hyperapp.app(state, actions, ruleView, document.getElementById("rules"));
758
  });
759
+
admin/templates.php CHANGED
@@ -3,11 +3,17 @@
3
  class Brizy_Admin_Templates {
4
 
5
  const CP_TEMPLATE = 'brizy_template';
 
6
  const CP_TEMPLATES = 'brizy_templates';
7
  const RULE_LIST_VEIW = 'brizy_rule_list_view';
8
  const RULE_TAXONOMY_LIST = 'brizy_taxonomy_list';
9
  const RULE_CREATE = 'brizy_create';
10
 
 
 
 
 
 
11
  /**
12
  * @var Brizy_Editor_Post
13
  */
@@ -45,7 +51,15 @@ class Brizy_Admin_Templates {
45
  add_filter( 'post_row_actions', array( $this, 'removeRowActions' ), 10, 1 );
46
  add_action( 'admin_init', array( $this, 'addTemplateRoleCaps' ), 10000 );
47
  add_action( 'admin_enqueue_scripts', array( $this, 'action_register_static' ) );
48
- } elseif ( ! defined( 'DOING_AJAX' ) && ! is_admin() ) {
 
 
 
 
 
 
 
 
49
  add_action( 'wp', array( $this, 'templateFrontEnd' ) );
50
  add_action( 'template_include', array( $this, 'templateInclude' ), 20000 );
51
  }
@@ -70,43 +84,59 @@ class Brizy_Admin_Templates {
70
  return;
71
  }
72
 
 
 
73
  // hyperapp.js is also used in PRO
74
  wp_enqueue_script(
75
- Brizy_Editor::get()->get_slug() . '-hyperapp-js',
76
- Brizy_Editor::get()->get_url( 'admin/static/js/hyperapp.js' ),
77
  array( 'jquery', 'underscore' ),
78
- Brizy_Editor::get()->get_version(),
79
  true
80
  );
81
 
82
  wp_enqueue_style(
83
- Brizy_Editor::get()->get_slug() . '-select2',
84
- Brizy_Editor::get()->get_url('vendor/select2/select2/dist/css/select2.min.css'),
85
  array(),
86
  true
87
  );
88
 
89
  wp_enqueue_script(
90
- Brizy_Editor::get()->get_slug() . '-select2',
91
- Brizy_Editor::get()->get_url('vendor/select2/select2/dist/js/select2.full.min.js'),
92
  array( 'jquery' )
93
  );
94
 
95
  wp_enqueue_script(
96
- Brizy_Editor::get()->get_slug() . '-rules',
97
- Brizy_Editor::get()->get_url( 'admin/static/js/rules.js' ),
98
- array( Brizy_Editor::get()->get_slug() . '-hyperapp-js' ),
99
- Brizy_Editor::get()->get_version(),
100
  true
101
  );
 
 
 
 
 
 
 
 
 
 
 
 
102
  wp_localize_script(
103
- Brizy_Editor::get()->get_slug() . '-rules',
104
  'Brizy_Admin_Rules',
105
  array(
106
- 'url' => set_url_scheme( admin_url( 'admin-ajax.php' ) ),
107
- 'rules' => $this->ruleManager->getRules( get_the_ID() ),
108
- 'hash' => wp_create_nonce( Brizy_Admin_Rules_Api::nonce ),
109
- 'id' => get_the_ID(),
 
 
110
  )
111
  );
112
  }
@@ -189,14 +219,6 @@ class Brizy_Admin_Templates {
189
  }
190
  }
191
 
192
- static public function registerSupportedPostType() {
193
- add_filter( 'brizy_supported_post_types', function ( $posts ) {
194
- $posts[] = Brizy_Admin_Templates::CP_TEMPLATE;
195
-
196
- return $posts;
197
- } );
198
- }
199
-
200
  static public function registerCustomPostTemplate() {
201
 
202
  $labels = array(
@@ -222,7 +244,7 @@ class Brizy_Admin_Templates {
222
  'public' => false,
223
  'has_archive' => false,
224
  'description' => __bt( 'brizy', 'Brizy' ) . ' ' . __( 'templates', 'brizy' ) . '.',
225
- 'publicly_queryable' => Brizy_Editor::is_user_allowed(),
226
  'show_ui' => true,
227
  'show_in_menu' => Brizy_Admin_Settings::menu_slug(),
228
  'query_var' => false,
@@ -236,10 +258,16 @@ class Brizy_Admin_Templates {
236
  'supports' => array( 'title', 'revisions', 'page-attributes' )
237
  )
238
  );
 
 
 
 
 
 
239
  }
240
 
241
  public function registerTemplateMetaBox() {
242
- add_meta_box( 'template-rules', __( 'Display Conditions' ), array(
243
  $this,
244
  'templateRulesBox'
245
  ), self::CP_TEMPLATE, 'normal', 'high' );
@@ -289,50 +317,10 @@ class Brizy_Admin_Templates {
289
  exit;
290
  }
291
 
292
- // private function get_post_list( $postType, $excludePostType = array() ) {
293
- //
294
- // global $wp_post_types;
295
- //
296
- // $post_query = array(
297
- // 'post_type' => $postType,
298
- // 'posts_per_page' => - 1,
299
- // 'post_status' => $postType == 'attachment' ? 'inherit' : array(
300
- // 'publish',
301
- // 'pending',
302
- // 'draft',
303
- // 'future',
304
- // 'private'
305
- // ),
306
- // 'orderby' => 'post_title',
307
- // 'order' => 'ASC'
308
- // );
309
- //
310
- // $posts = new WP_Query( $post_query );
311
- //
312
- // $result = array();
313
- //
314
- // foreach ( $posts->posts as $post ) {
315
- //
316
- // if ( in_array( $post->post_type, $excludePostType ) ) {
317
- // continue;
318
- // }
319
- //
320
- // $result[] = (object) array(
321
- // 'ID' => $post->ID,
322
- // 'uid' => $this->create_uid( $post->ID ),
323
- // 'post_type' => $post->post_type,
324
- // 'post_type_label' => $wp_post_types[ $post->post_type ]->label,
325
- // 'title' => apply_filters( 'the_title', $post->post_title )
326
- // );
327
- // }
328
- //
329
- // return $result;
330
- // }
331
-
332
 
333
  /**
334
- * @return Brizy_Editor_Post|null
335
- * @throws Brizy_Editor_Exceptions_NotFound
336
  */
337
  public function getTemplateForCurrentPage() {
338
 
@@ -374,16 +362,18 @@ class Brizy_Admin_Templates {
374
  }
375
 
376
  $templateName = self::getTemplate()->get_template();
 
377
 
378
  if ( ! $templateName || $templateName == 'default' ) {
379
- return path_join( BRIZY_PLUGIN_PATH, 'public/views/templates/' . Brizy_Config::BRIZY_TEMPLATE_FILE_NAME );
380
  }
381
 
382
  if ( in_array( $templateName, array(
383
  Brizy_Config::BRIZY_BLANK_TEMPLATE_FILE_NAME,
384
  Brizy_Config::BRIZY_TEMPLATE_FILE_NAME
385
  ) ) ) {
386
- return Brizy_Editor::get()->get_path( '/public/views/templates/' . $templateName );
 
387
  }
388
 
389
  return $template;
@@ -620,31 +610,77 @@ class Brizy_Admin_Templates {
620
  }
621
 
622
  if ( $rule ) {
623
-
624
  switch ( $rule->getAppliedFor() ) {
625
  case Brizy_Admin_Rule::POSTS :
626
  $args = array(
627
  'post_type' => $rule->getEntityType(),
628
  );
629
 
630
- if ( count( $rule->getEntityValues() ) ) {
 
 
 
631
  $args['post__in'] = $rule->getEntityValues();
632
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
633
  $array = get_posts( $args );
634
 
635
  return array_pop( $array );
636
  break;
637
  case Brizy_Admin_Rule::TAXONOMY :
638
- $args = array(
639
  'taxonomy' => $rule->getEntityType(),
640
  'hide_empty' => false,
641
  );
642
- if ( count( $rule->getEntityValues() ) ) {
643
- $args['term_taxonomy_id'] = $rule->getEntityValues();
 
 
 
 
 
 
 
 
 
644
  }
645
 
646
  $array = get_terms( $args );
647
 
 
 
 
 
 
 
 
 
 
 
 
 
 
648
  return array_pop( $array );
649
  break;
650
  case Brizy_Admin_Rule::ARCHIVE :
@@ -658,7 +694,6 @@ class Brizy_Admin_Templates {
658
 
659
  return array_pop( $authors );
660
  break;
661
-
662
  case '404':
663
  case 'search':
664
  return null;
@@ -667,22 +702,122 @@ class Brizy_Admin_Templates {
667
  $get_option = get_option( 'page_for_posts' );
668
 
669
  if ( $get_option ) {
670
- return get_post( $get_option );
 
 
671
  }
672
  break;
673
  case 'front_page':
674
  $get_option = get_option( 'page_on_front' );
675
 
676
  if ( $get_option ) {
677
- return get_post( $get_option );
 
 
 
678
  }
679
  break;
680
  }
681
-
682
  break;
683
  }
 
 
684
 
 
 
 
685
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  }
687
  }
688
 
3
  class Brizy_Admin_Templates {
4
 
5
  const CP_TEMPLATE = 'brizy_template';
6
+ const TEMPLATE_TYPE_KEY = 'brizy_template_type';
7
  const CP_TEMPLATES = 'brizy_templates';
8
  const RULE_LIST_VEIW = 'brizy_rule_list_view';
9
  const RULE_TAXONOMY_LIST = 'brizy_taxonomy_list';
10
  const RULE_CREATE = 'brizy_create';
11
 
12
+ const TYPE_SINGLE = 'single';
13
+ const TYPE_ARCHIVE = 'archive';
14
+ const TYPE_SINGLE_PRODUCT = 'single_product';
15
+ const TYPE_PRODUCT_ARCHIVE = 'product_archive';
16
+
17
  /**
18
  * @var Brizy_Editor_Post
19
  */
51
  add_filter( 'post_row_actions', array( $this, 'removeRowActions' ), 10, 1 );
52
  add_action( 'admin_init', array( $this, 'addTemplateRoleCaps' ), 10000 );
53
  add_action( 'admin_enqueue_scripts', array( $this, 'action_register_static' ) );
54
+ add_filter( 'save_post', array( $this, 'save_template_rules' ), 10, 2 );
55
+ add_action( 'admin_notices', array( $this, 'save_template_rules_notices' ) );
56
+ } elseif ( ! defined( 'DOING_AJAX' ) &&
57
+ ! is_admin() &&
58
+ ! isset( $_REQUEST[ Brizy_Editor::prefix( '_media' ) ] ) &&
59
+ ! isset( $_REQUEST[ Brizy_Editor::prefix( '_file' ) ] ) &&
60
+ ! isset( $_REQUEST[ Brizy_Editor::prefix( '_attachment' ) ] ) &&
61
+ ! isset( $_REQUEST[ Brizy_Editor::prefix( '_block_screenshot' ) ] ) &&
62
+ ! isset( $_REQUEST[ Brizy_Editor::prefix( '' ) ] ) ) {
63
  add_action( 'wp', array( $this, 'templateFrontEnd' ) );
64
  add_action( 'template_include', array( $this, 'templateInclude' ), 20000 );
65
  }
84
  return;
85
  }
86
 
87
+ $urlBuilder = new Brizy_Editor_UrlBuilder();
88
+
89
  // hyperapp.js is also used in PRO
90
  wp_enqueue_script(
91
+ Brizy_Editor::get_slug() . '-hyperapp-js',
92
+ $urlBuilder->plugin_url( 'admin/static/js/hyperapp.js' ),
93
  array( 'jquery', 'underscore' ),
94
+ BRIZY_VERSION,
95
  true
96
  );
97
 
98
  wp_enqueue_style(
99
+ Brizy_Editor::get_slug() . '-select2',
100
+ $urlBuilder->plugin_url( 'vendor/select2/select2/dist/css/select2.min.css' ),
101
  array(),
102
  true
103
  );
104
 
105
  wp_enqueue_script(
106
+ Brizy_Editor::get_slug() . '-select2',
107
+ $urlBuilder->plugin_url( 'vendor/select2/select2/dist/js/select2.full.min.js' ),
108
  array( 'jquery' )
109
  );
110
 
111
  wp_enqueue_script(
112
+ Brizy_Editor::get_slug() . '-rules',
113
+ $urlBuilder->plugin_url( 'admin/static/js/rules.js' ),
114
+ array( Brizy_Editor::get_slug() . '-hyperapp-js' ),
115
+ BRIZY_VERSION,
116
  true
117
  );
118
+
119
+ $templateGroups = [
120
+ 'single' => __( 'Single', 'brizy' ),
121
+ 'archive' => __( 'Archive', 'brizy' ),
122
+
123
+ ];
124
+
125
+ if ( class_exists( 'WooCommerce' ) ) {
126
+ $templateGroups['single_product'] = __( 'Product', 'brizy' );
127
+ $templateGroups['product_archive'] = __( 'Product Archive', 'brizy' );
128
+ }
129
+
130
  wp_localize_script(
131
+ Brizy_Editor::get_slug() . '-rules',
132
  'Brizy_Admin_Rules',
133
  array(
134
+ 'url' => set_url_scheme( admin_url( 'admin-ajax.php' ) ),
135
+ 'rules' => $this->ruleManager->getRules( get_the_ID() ),
136
+ 'hash' => wp_create_nonce( Brizy_Admin_Rules_Api::nonce ),
137
+ 'id' => get_the_ID(),
138
+ 'templateType' => Brizy_Admin_Templates::getTemplateType( get_the_ID() ),
139
+ 'labels' => $templateGroups,
140
  )
141
  );
142
  }
219
  }
220
  }
221
 
 
 
 
 
 
 
 
 
222
  static public function registerCustomPostTemplate() {
223
 
224
  $labels = array(
244
  'public' => false,
245
  'has_archive' => false,
246
  'description' => __bt( 'brizy', 'Brizy' ) . ' ' . __( 'templates', 'brizy' ) . '.',
247
+ 'publicly_queryable' => Brizy_Editor_User::is_user_allowed(),
248
  'show_ui' => true,
249
  'show_in_menu' => Brizy_Admin_Settings::menu_slug(),
250
  'query_var' => false,
258
  'supports' => array( 'title', 'revisions', 'page-attributes' )
259
  )
260
  );
261
+
262
+ add_filter( 'brizy_supported_post_types', function ( $posts ) {
263
+ $posts[] = self::CP_TEMPLATE;
264
+
265
+ return $posts;
266
+ } );
267
  }
268
 
269
  public function registerTemplateMetaBox() {
270
+ add_meta_box( 'template-rules', __( 'Display Conditions', 'brizy' ), array(
271
  $this,
272
  'templateRulesBox'
273
  ), self::CP_TEMPLATE, 'normal', 'high' );
317
  exit;
318
  }
319
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
 
321
  /**
322
+ * @return Brizy_Editor_Post|mixed|null
323
+ * @throws Exception
324
  */
325
  public function getTemplateForCurrentPage() {
326
 
362
  }
363
 
364
  $templateName = self::getTemplate()->get_template();
365
+ $urlBuilder = new Brizy_Editor_UrlBuilder();
366
 
367
  if ( ! $templateName || $templateName == 'default' ) {
368
+ return $urlBuilder->plugin_path( 'public/views/templates/' . Brizy_Config::BRIZY_TEMPLATE_FILE_NAME );
369
  }
370
 
371
  if ( in_array( $templateName, array(
372
  Brizy_Config::BRIZY_BLANK_TEMPLATE_FILE_NAME,
373
  Brizy_Config::BRIZY_TEMPLATE_FILE_NAME
374
  ) ) ) {
375
+
376
+ return $urlBuilder->plugin_path( '/public/views/templates/' . $templateName );
377
  }
378
 
379
  return $template;
610
  }
611
 
612
  if ( $rule ) {
 
613
  switch ( $rule->getAppliedFor() ) {
614
  case Brizy_Admin_Rule::POSTS :
615
  $args = array(
616
  'post_type' => $rule->getEntityType(),
617
  );
618
 
619
+ $entities = $rule->getEntityValues();
620
+
621
+ // if this is an array with more that one items
622
+ if ( count( $rule->getEntityValues() ) > 1 ) {
623
  $args['post__in'] = $rule->getEntityValues();
624
  }
625
+
626
+ // check if there are complex rules like in category or child of category
627
+ if ( count( $rule->getEntityValues() ) == 1 ) {
628
+
629
+ if ( is_numeric( $entities[0] ) ) {
630
+ $args['post__in'] = $rule->getEntityValues();
631
+ } else {
632
+ $parts = explode( '|', $entities[0] );
633
+
634
+ if ( count( $parts ) > 1 ) {
635
+ $args[ $parts[1] ] = [ $parts[2] ];
636
+ }
637
+ }
638
+ }
639
+
640
+ $args["meta_query"] = array(
641
+ array(
642
+ "key" => "brizy",
643
+ 'compare' => 'NOT EXISTS'
644
+ )
645
+ );
646
+
647
  $array = get_posts( $args );
648
 
649
  return array_pop( $array );
650
  break;
651
  case Brizy_Admin_Rule::TAXONOMY :
652
+ $args = array(
653
  'taxonomy' => $rule->getEntityType(),
654
  'hide_empty' => false,
655
  );
656
+ $entities = $rule->getEntityValues();
657
+ foreach ( $entities as $val ) {
658
+ if ( is_numeric( $val ) ) {
659
+ $args['term_taxonomy_id'][] = $val;
660
+ } else {
661
+ $parts = explode( '|', $entities[0] );
662
+
663
+ if ( count( $parts ) > 1 ) {
664
+ $args['term_taxonomy_id'][] = $parts[2];
665
+ }
666
+ }
667
  }
668
 
669
  $array = get_terms( $args );
670
 
671
+ $term = array_pop( $array );
672
+
673
+ $array = get_posts( [
674
+ 'post_status' => 'publish',
675
+ 'tax_query' => array(
676
+ array(
677
+ 'taxonomy' => $term->taxonomy,
678
+ 'field' => 'term_id',
679
+ 'terms' => $term->term_id,
680
+ )
681
+ )
682
+ ] );
683
+
684
  return array_pop( $array );
685
  break;
686
  case Brizy_Admin_Rule::ARCHIVE :
694
 
695
  return array_pop( $authors );
696
  break;
 
697
  case '404':
698
  case 'search':
699
  return null;
702
  $get_option = get_option( 'page_for_posts' );
703
 
704
  if ( $get_option ) {
705
+ $post = Brizy_Editor_Post::get( $get_option );
706
+
707
+ return $post->uses_editor() ? null : get_post( $get_option );
708
  }
709
  break;
710
  case 'front_page':
711
  $get_option = get_option( 'page_on_front' );
712
 
713
  if ( $get_option ) {
714
+
715
+ $post = Brizy_Editor_Post::get( $get_option );
716
+
717
+ return $post->uses_editor() ? null : get_post( $get_option );
718
  }
719
  break;
720
  }
 
721
  break;
722
  }
723
+ }
724
+ }
725
 
726
+ public function save_template_rules_notices() {
727
+ if ( ! empty( $_SESSION['brizy_rules_admin_notices'] ) ) {
728
+ print $_SESSION['brizy_rules_admin_notices'];
729
  }
730
+ unset ( $_SESSION['brizy_rules_admin_notices'] );
731
+ }
732
+
733
+ public function save_template_rules( $post_id ) {
734
+
735
+
736
+ if ( $parent_id = wp_is_post_revision( $post_id ) ) {
737
+ $post_id = $parent_id;
738
+ }
739
+
740
+ // set template type from $_POST
741
+ $type = null;
742
+ if ( isset( $_POST['brizy-template-type'] ) ) {
743
+ $type = strtolower( $_POST['brizy-template-type'] );
744
+ if ( in_array( $type, [
745
+ self::TYPE_SINGLE,
746
+ self::TYPE_ARCHIVE,
747
+ self::TYPE_PRODUCT_ARCHIVE,
748
+ self::TYPE_SINGLE_PRODUCT
749
+ ] ) ) {
750
+ self::setTemplateType( $post_id, $type );
751
+ }
752
+ } else {
753
+ return;
754
+ }
755
+
756
+ // get rules from $_POST
757
+ $rules = [];
758
+ if ( $type && isset( $_POST[ 'brizy-' . $type . '-rule-type' ] ) && is_array( $_POST[ 'brizy-' . $type . '-rule-type' ] ) ) {
759
+ foreach ( $_POST[ 'brizy-' . $type . '-rule-type' ] as $i => $ruleType ) {
760
+
761
+ // ignore this rule if type is invalid
762
+ if ( ! in_array( (int) $ruleType, [
763
+ Brizy_Admin_Rule::TYPE_EXCLUDE,
764
+ Brizy_Admin_Rule::TYPE_INCLUDE
765
+ ] ) ) {
766
+ continue;
767
+ }
768
+
769
+ $values = explode( "|", $_POST[ 'brizy-' . $type . '-rule-group' ][ $i ] );
770
+ list( $appliedFor, $entityType ) = $values;
771
+
772
+ // ingnore invalid group value
773
+ if ( ! $appliedFor || ! $entityType ) {
774
+ continue;
775
+ }
776
+
777
+ $entityValues = [];
778
+ if ( isset( $_POST[ 'brizy-' . $type . '-rule-entity-values' ][ $i ] ) ) {
779
+ $entityValues = (array) $_POST[ 'brizy-' . $type . '-rule-entity-values' ][ $i ];
780
+ }
781
+
782
+ $rules[] = new Brizy_Admin_Rule( null, $ruleType, $appliedFor, $entityType, $entityValues );
783
+ }
784
+ }
785
+
786
+ try {
787
+ // validate rule
788
+ $ruleValidator = Brizy_Admin_Rules_ValidatorFactory::getValidator( $post_id );
789
+
790
+ if ( ! $ruleValidator ) {
791
+ $_SESSION['brizy_rules_admin_notices'] = '<div class="error"><p>Brizy: Unable to get the rule validator for this post type.</p></div>';
792
+ }
793
+
794
+ $ruleValidator->validateRulesForPostId( $rules, $post_id );
795
+
796
+ $ruleManager = new Brizy_Admin_Rules_Manager();
797
+ $ruleManager->setRules( $post_id, $rules );
798
+
799
+ } catch ( Brizy_Editor_Exceptions_DataVersionMismatch $e ) {
800
+ $_SESSION['brizy_rules_admin_notices'] = '<div class="error"><p>Brizy:Invalid data version.</p></div>';
801
+ } catch ( Exception $e ) {
802
+ $_SESSION['brizy_rules_admin_notices'] = '<div class="error"><p>' . $e->getMessage() . '.</p></div>';
803
+ }
804
+ }
805
+
806
+ /**
807
+ * @param $id
808
+ *
809
+ * @return mixed
810
+ */
811
+ public static function getTemplateType( $id ) {
812
+ return get_post_meta( $id, self::TEMPLATE_TYPE_KEY, true );
813
+ }
814
+
815
+ /**
816
+ * @param $id
817
+ * @param $type
818
+ */
819
+ public static function setTemplateType( $id, $type ) {
820
+ update_post_meta( $id, self::TEMPLATE_TYPE_KEY, $type );
821
  }
822
  }
823
 
admin/views/cloud/cloud-base.html.twig ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <div class="cloud-form">
2
+ <h2>Cloud</h2>
3
+ {% block content %}
4
+
5
+ {% endblock %}
6
+ </div>
admin/views/cloud/cloud-login.html.twig ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "cloud-base.html.twig" %}
2
+
3
+ {% block content %}
4
+ <form method="post">
5
+ {{ nonce | raw }}
6
+
7
+ <table class="form-table">
8
+ <tr>
9
+ <th scope="row">
10
+ <label for="cloud-username">User name</label>
11
+ </th>
12
+ <td>
13
+ <input name="cloud-username" type="text" value="{{ username }}" class="regular-text"
14
+ id="cloud-username"/>
15
+ </td>
16
+ </tr>
17
+ <tr>
18
+ <th scope="row">
19
+ <label for="cloud-password">Password</label>
20
+ </th>
21
+ <td>
22
+ <input name="cloud-password" type="password" value="{{ password }}" class="regular-text"
23
+ id="cloud-password"/>
24
+ </td>
25
+ </tr>
26
+ </table>
27
+ <p class="submit">
28
+ <input type="submit" name="brizy-cloud-login" id="submit" class="button button-primary"
29
+ value="Login">
30
+ </p>
31
+ </form>
32
+ {% endblock %}
admin/views/cloud/cloud-projects.html.twig ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "cloud-base.html.twig" %}
2
+
3
+ {% block content %}
4
+
5
+ <p>
6
+ <a href="{{ logoutUrl }}">Logout</a>
7
+ </p>
8
+ <br>
9
+
10
+ <h3>Project</h3>
11
+ {% if containers|length > 0 %}
12
+ <div class="projects">
13
+ <form method="post" id="cloud-form" action="{{ pageUrl }}">
14
+ {{ nonce | raw }}
15
+ <table class="form-table">
16
+ <tr>
17
+ <th scope="row">
18
+ <label for="project-account">Select Account</label>
19
+ </th>
20
+ <td>
21
+ <select name="brizy-cloud-use-container" id="project-account" class="regular-text">
22
+ {% for container in containers %}
23
+ <option value="{{ container.id }}" {{ container.id==projectObject.container?'selected':'' }}>{{ container.name }}</option>
24
+ {% endfor %}
25
+ </select>
26
+ </td>
27
+ </tr>
28
+ </table>
29
+ <p class="submit">
30
+ <input type="submit" name="brizy-cloud-use-project-submit" id="submit" class="button button-primary"
31
+ value="Save">
32
+ </p>
33
+ </form>
34
+ </div>
35
+ {% else %}
36
+ <div class="no-projects">
37
+ You do not have an account yet.
38
+ </div>
39
+ {% endif %}
40
+ {% endblock %}
admin/views/cloud/cloud.html.twig ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <div class="wrap">
2
+ <h1>Cloud settings</h1>
3
+
4
+
5
+ </div>
6
+
7
+
admin/views/featured-image.html.twig CHANGED
@@ -16,45 +16,62 @@
16
  </div>
17
 
18
  <script>
19
- (function () {
20
- var $focalPointDiv = $('.focal-point');
21
- var $focalPointX = $('#_thumbnail_focal_point_x');
22
- var $focalPointY = $('#_thumbnail_focal_point_y');
23
- var $featuredImageEl = $('#featured-image-el');
24
- var isDragging = false;
25
-
26
- $featuredImageEl.on('mousedown', function () {
27
- isDragging = true;
28
- });
29
-
30
- $featuredImageEl.on('mouseup', function () {
31
- isDragging = false;
32
- });
33
-
34
- $focalPointDiv.on('mouseup', function () {
35
- isDragging = false;
36
- });
37
-
38
- $featuredImageEl.on('click mousemove', function (e) {
39
- if (!isDragging && e.type!=='click') return;
40
-
41
- var $this = $(this);
42
- var imageW = $this.width();
43
- var imageH = $this.height();
44
-
45
- //Calculate FocusPoint coordinates
46
- var offsetX = e.pageX - $this.offset().left;
47
- var offsetY = e.pageY - $this.offset().top;
48
-
49
- //Calculate CSS Percentages
50
- var percentageX = (offsetX / imageW) * 100;
51
- var percentageY = (offsetY / imageH) * 100;
52
-
53
- // Set positioning
54
- $focalPointDiv.css({left: percentageX.toFixed(0) + '% ', top: percentageY.toFixed(0) + '%'});
55
- $focalPointX.val(percentageX.toFixed(0));
56
- $focalPointY.val(percentageY.toFixed(0));
57
- });
58
-
59
- })();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  </script>
16
  </div>
17
 
18
  <script>
19
+ jQuery(document).ready(function ($) {
20
+ (function () {
21
+ var $focalPointDiv = $('.focal-point');
22
+ var $focalPointX = $('#_thumbnail_focal_point_x');
23
+ var $focalPointY = $('#_thumbnail_focal_point_y');
24
+ var $featuredImageEl = $('#featured-image-el');
25
+ var isDragging = false;
26
+
27
+ $('.brizy-featured-image .wrapper').on('mouseleave', function () {
28
+ isDragging = false;
29
+ });
30
+
31
+ $featuredImageEl.on('mousedown', function () {
32
+ isDragging = true;
33
+ });
34
+
35
+ $featuredImageEl.on('mouseup', function () {
36
+ isDragging = false;
37
+ });
38
+
39
+ $focalPointDiv.on('mouseup', function () {
40
+ isDragging = false;
41
+ });
42
+
43
+ $focalPointDiv.on('mousedown', function () {
44
+ isDragging = true;
45
+ });
46
+
47
+ $featuredImageEl.on( 'click mousemove', function ( e ) {
48
+ if ( ! isDragging && e.type!=='click' ) {
49
+ return;
50
+ }
51
+
52
+ if ( window.getSelection ) {
53
+ window.getSelection().removeAllRanges();
54
+ } else if ( document.selection ) {
55
+ document.selection.empty();
56
+ }
57
+
58
+ var $this = $(this);
59
+ var imageW = $this.width();
60
+ var imageH = $this.height();
61
+
62
+ //Calculate FocusPoint coordinates
63
+ var offsetX = e.pageX - $this.offset().left;
64
+ var offsetY = e.pageY - $this.offset().top;
65
+
66
+ //Calculate CSS Percentages
67
+ var percentageX = (offsetX / imageW) * 100;
68
+ var percentageY = (offsetY / imageH) * 100;
69
+
70
+ // Set positioning
71
+ $focalPointDiv.css({left: percentageX.toFixed(0) + '% ', top: percentageY.toFixed(0) + '%'});
72
+ $focalPointX.val(percentageX.toFixed(0));
73
+ $focalPointY.val(percentageY.toFixed(0));
74
+ });
75
+ })();
76
+ });
77
  </script>
admin/views/optimizer/optimizer-settings.html.twig CHANGED
@@ -13,7 +13,7 @@
13
  <input type="text" name="api_key" value="{{ settings['API_KEY'] }}"
14
  style="width: 230px;">
15
  &nbsp;&nbsp;&nbsp;
16
- <a href="https://shortpixel.com/otp/af/QDDDRHB707903"
17
  target="_blank">{{ __('Get an API key','brizy') }}</a>
18
  </td>
19
  </tr>
13
  <input type="text" name="api_key" value="{{ settings['API_KEY'] }}"
14
  style="width: 230px;">
15
  &nbsp;&nbsp;&nbsp;
16
+ <a href="{{ shortpixel_link }}"
17
  target="_blank">{{ __('Get an API key','brizy') }}</a>
18
  </td>
19
  </tr>
brizy.php CHANGED
@@ -5,7 +5,7 @@
5
  * Plugin URI: https://brizy.io/
6
  * Author: Brizy.io
7
  * Author URI: https://brizy.io/
8
- * Version: 1.0.126
9
  * Text Domain: brizy
10
  * License: GPLv3
11
  * Domain Path: /languages
@@ -17,10 +17,12 @@ if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && stripos( $_SERVER['HTTP_X_FO
17
  $_SERVER['HTTPS'] = 'on';
18
  }
19
 
 
20
  define( 'BRIZY_DEVELOPMENT', false );
21
  define( 'BRIZY_LOG', false );
22
- define( 'BRIZY_VERSION', '1.0.126' );
23
- define( 'BRIZY_EDITOR_VERSION', '144-wp' );
 
24
  define( 'BRIZY_FILE', __FILE__ );
25
  define( 'BRIZY_PLUGIN_BASE', plugin_basename( BRIZY_FILE ) );
26
  define( 'BRIZY_PLUGIN_PATH', dirname( BRIZY_FILE ) );
@@ -44,16 +46,26 @@ function brizy_load() {
44
  return;
45
  }
46
 
 
 
 
47
  $instance = Brizy_Editor::get();
 
 
48
  }
49
 
50
  function brizy_notices() {
51
  ?>
52
  <div class="notice notice-error is-dismissible">
53
  <p>
54
- <?php echo __bt( 'brizy', 'Brizy' ) ?> requires PHP version 5.6+, you currently running
55
- PHP <?php echo PHP_VERSION ?>.
56
- <b><?php echo strtoupper( __bt( 'brizy', 'Brizy' ) ) ?> IS NOT RUNNING. </b>
 
 
 
 
 
57
  </p>
58
  </div>
59
  <?php
@@ -63,7 +75,8 @@ function brizy_upgrade_completed( $upgrader_object, $options ) {
63
  if ( $options['action'] == 'update' && $options['type'] == 'plugin' && isset( $options['plugins'] ) ) {
64
  foreach ( $options['plugins'] as $plugin ) {
65
  if ( $plugin == BRIZY_PLUGIN_BASE ) {
66
- add_option('brizy-regenerate-permalinks',1 );
 
67
  }
68
  }
69
  }
@@ -71,12 +84,15 @@ function brizy_upgrade_completed( $upgrader_object, $options ) {
71
 
72
  function brizy_install() {
73
  Brizy_Logger::install();
74
- add_option('brizy-regenerate-permalinks',1 );
 
75
  }
76
 
77
  function brizy_clean() {
78
  Brizy_Logger::clean();
79
- add_option('brizy-regenerate-permalinks',1 );
 
80
  }
81
 
82
  new Brizy_Compatibilities_Init();
 
5
  * Plugin URI: https://brizy.io/
6
  * Author: Brizy.io
7
  * Author URI: https://brizy.io/
8
+ * Version: 1.0.127
9
  * Text Domain: brizy
10
  * License: GPLv3
11
  * Domain Path: /languages
17
  $_SERVER['HTTPS'] = 'on';
18
  }
19
 
20
+
21
  define( 'BRIZY_DEVELOPMENT', false );
22
  define( 'BRIZY_LOG', false );
23
+ define( 'BRIZY_VERSION', '1.0.127' );
24
+ define( 'BRIZY_EDITOR_VERSION', '149-wp' );
25
+ define( 'BRIZY_SYNC_VERSION', '149' );
26
  define( 'BRIZY_FILE', __FILE__ );
27
  define( 'BRIZY_PLUGIN_BASE', plugin_basename( BRIZY_FILE ) );
28
  define( 'BRIZY_PLUGIN_PATH', dirname( BRIZY_FILE ) );
46
  return;
47
  }
48
 
49
+ if (!session_id())
50
+ session_start();
51
+
52
  $instance = Brizy_Editor::get();
53
+
54
+ do_action( 'brizy_plugin_included' );
55
  }
56
 
57
  function brizy_notices() {
58
  ?>
59
  <div class="notice notice-error is-dismissible">
60
  <p>
61
+ <?php
62
+ printf(
63
+ __( '%1$s requires PHP version 5.6+, you currently running PHP %2$s. <b>%3$s IS NOT RUNNING.</b>', 'brizy' ),
64
+ __bt( 'brizy', 'Brizy' ),
65
+ PHP_VERSION,
66
+ strtoupper( __bt( 'brizy', 'Brizy' ) )
67
+ );
68
+ ?>
69
  </p>
70
  </div>
71
  <?php
75
  if ( $options['action'] == 'update' && $options['type'] == 'plugin' && isset( $options['plugins'] ) ) {
76
  foreach ( $options['plugins'] as $plugin ) {
77
  if ( $plugin == BRIZY_PLUGIN_BASE ) {
78
+ add_option( 'brizy-regenerate-permalinks', 1 );
79
+ do_action('brizy-updated');
80
  }
81
  }
82
  }
84
 
85
  function brizy_install() {
86
  Brizy_Logger::install();
87
+ add_option( 'brizy-regenerate-permalinks', 1 );
88
+ do_action('brizy-activated');
89
  }
90
 
91
  function brizy_clean() {
92
  Brizy_Logger::clean();
93
+ add_option( 'brizy-regenerate-permalinks', 1 );
94
+ do_action('brizy-deactivated');
95
  }
96
 
97
  new Brizy_Compatibilities_Init();
98
+
compatibilities/autoptimize.php CHANGED
@@ -12,7 +12,7 @@ class Brizy_Compatibilities_Autoptimize {
12
  * When we are in post build mode with brizy we disable it.
13
  */
14
  public function disable_js_optimize() {
15
- if ( isset( $_GET[ Brizy_Editor_Constants::EDIT_KEY_IFRAME ] ) ) {
16
  add_filter( 'autoptimize_filter_js_noptimize', '__return_true' );
17
  add_filter( 'autoptimize_filter_css_noptimize', '__return_true' );
18
  }
12
  * When we are in post build mode with brizy we disable it.
13
  */
14
  public function disable_js_optimize() {
15
+ if ( isset( $_GET[ Brizy_Editor::prefix('-edit-iframe') ] ) ) {
16
  add_filter( 'autoptimize_filter_js_noptimize', '__return_true' );
17
  add_filter( 'autoptimize_filter_css_noptimize', '__return_true' );
18
  }
compatibilities/fast-velocity-minify.php CHANGED
@@ -1,16 +1,17 @@
1
  <?php
 
2
  /**
3
  * Compatibility with Fast Velocity Minify plugin: https://wordpress.org/plugins/fast-velocity-minify/
4
  */
5
  class Brizy_Compatibilities_FastVelocityMinify {
6
 
7
  public function __construct() {
8
- add_action( 'init', array( $this, 'remove_actions' ), 9 );
9
  }
10
 
11
  public function remove_actions() {
12
 
13
- if ( ! isset( $_GET['brizy-edit'] ) && ! isset( $_GET['brizy-edit-iframe'] ) ) {
14
  return;
15
  }
16
 
1
  <?php
2
+
3
  /**
4
  * Compatibility with Fast Velocity Minify plugin: https://wordpress.org/plugins/fast-velocity-minify/
5
  */
6
  class Brizy_Compatibilities_FastVelocityMinify {
7
 
8
  public function __construct() {
9
+ add_action( 'init', array( $this, 'remove_actions' ), 9 );
10
  }
11
 
12
  public function remove_actions() {
13
 
14
+ if ( ! isset( $_GET[ Brizy_Editor::prefix( '-edit' ) ] ) && ! isset( $_GET[ Brizy_Editor::prefix( '-edit-iframe' ) ] ) ) {
15
  return;
16
  }
17
 
compatibilities/gutenberg.php CHANGED
@@ -7,8 +7,6 @@ class Brizy_Compatibilities_Gutenberg {
7
  add_action( 'admin_print_scripts-edit.php', array( $this, 'add_edit_button_to_gutenberg' ), 12 );
8
  add_action( 'admin_init', array( $this, 'action_disable_gutenberg' ) );
9
  add_action( 'admin_footer', array( $this, 'print_admin_footer_tpls' ) );
10
- add_action( 'rest_api_init', array( $this, 'create_feature_image_focal_point_field' ) );
11
-
12
  }
13
 
14
 
@@ -77,7 +75,7 @@ class Brizy_Compatibilities_Gutenberg {
77
  }
78
 
79
  $continueUrl = add_query_arg(
80
- array( Brizy_Editor_Constants::EDIT_KEY => '' ),
81
  get_permalink( get_the_ID() )
82
  );
83
 
@@ -125,18 +123,4 @@ class Brizy_Compatibilities_Gutenberg {
125
 
126
  }
127
  }
128
-
129
-
130
- public function create_feature_image_focal_point_field() {
131
- register_rest_field( 'page', 'brizy_attachment_focal_point', array(
132
- 'get_callback' => function ( $post, $field_name, $request ) {
133
- return get_post_meta( $post['id'], $field_name, true );
134
- },
135
- 'update_callback' => function ( $meta_value, $post ) {
136
- update_post_meta( $post->ID, 'brizy_attachment_focal_point', $meta_value );
137
- }
138
- )
139
- );
140
-
141
- }
142
  }
7
  add_action( 'admin_print_scripts-edit.php', array( $this, 'add_edit_button_to_gutenberg' ), 12 );
8
  add_action( 'admin_init', array( $this, 'action_disable_gutenberg' ) );
9
  add_action( 'admin_footer', array( $this, 'print_admin_footer_tpls' ) );
 
 
10
  }
11
 
12
 
75
  }
76
 
77
  $continueUrl = add_query_arg(
78
+ array( Brizy_Editor::prefix('-edit') => '' ),
79
  get_permalink( get_the_ID() )
80
  );
81
 
123
 
124
  }
125
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  }
compatibilities/init.php CHANGED
@@ -28,10 +28,6 @@ class Brizy_Compatibilities_Init {
28
  new Brizy_Compatibilities_WPML();
29
  }
30
 
31
- if ( $this->is_plugin_active( 'litespeed-cache/litespeed-cache.php' ) ) {
32
- new Brizy_Compatibilities_LiteSpeed();
33
- }
34
-
35
  if ( function_exists( 'fvm_cachepath' ) ) {
36
  new Brizy_Compatibilities_FastVelocityMinify();
37
  }
@@ -65,6 +61,14 @@ class Brizy_Compatibilities_Init {
65
  new Brizy_Compatibilities_BrokenLinkChecker();
66
  }
67
  }
 
 
 
 
 
 
 
 
68
  }
69
 
70
  private function is_plugin_active( $plugin_file ) {
28
  new Brizy_Compatibilities_WPML();
29
  }
30
 
 
 
 
 
31
  if ( function_exists( 'fvm_cachepath' ) ) {
32
  new Brizy_Compatibilities_FastVelocityMinify();
33
  }
61
  new Brizy_Compatibilities_BrokenLinkChecker();
62
  }
63
  }
64
+
65
+ if ( defined( 'LSCWP_V' ) ) {
66
+ new Brizy_Compatibilities_LiteSpeed();
67
+ }
68
+
69
+ if ( defined( 'TRP_GP_PLUGIN_VERSION' ) ) {
70
+ new Brizy_Compatibilities_TpAddOnLanguageByGetParameter();
71
+ }
72
  }
73
 
74
  private function is_plugin_active( $plugin_file ) {
compatibilities/lite-speed.php CHANGED
@@ -6,15 +6,12 @@
6
  class Brizy_Compatibilities_LiteSpeed {
7
 
8
  public function __construct() {
9
- if ( isset( $_GET['brizy-edit'] ) || isset( $_GET['brizy-edit-iframe'] ) ) {
10
- add_action( 'litespeed_option_html_minify', '__return_false' );
11
- add_action( 'litespeed_option_js_minify', '__return_false' );
12
- add_action( 'litespeed_option_js_inline_minify', '__return_false' );
13
- add_action( 'litespeed_option_js_combine', '__return_false' );
14
- add_action( 'litespeed_option_css_minify', '__return_false' );
15
- add_action( 'litespeed_option_css_inline_minify', '__return_false' );
16
- add_action( 'litespeed_option_css_combine', '__return_false' );
17
- add_action( 'litespeed_option_js_http2', '__return_false' );
18
- }
19
  }
 
 
 
 
 
 
20
  }
6
  class Brizy_Compatibilities_LiteSpeed {
7
 
8
  public function __construct() {
9
+ add_action( 'litespeed_init', [ $this, 'litespeed_init' ] );
 
 
 
 
 
 
 
 
 
10
  }
11
+
12
+ public function litespeed_init() {
13
+ if ( isset( $_GET[ Brizy_Editor::prefix( '-edit' ) ] ) || isset( $_GET[ Brizy_Editor::prefix( '-edit-iframe' ) ] ) ) {
14
+ do_action( 'litespeed_disable_all', 'brizy edit mode' );
15
+ }
16
+ }
17
  }
compatibilities/phastpress.php CHANGED
@@ -10,7 +10,7 @@ class Brizy_Compatibilities_Phastpress {
10
 
11
  public function disable_phastpress() {
12
 
13
- if ( ! isset( $_GET['brizy-edit'] ) && ! isset( $_GET['brizy-edit-iframe'] ) ) {
14
  return;
15
  }
16
 
10
 
11
  public function disable_phastpress() {
12
 
13
+ if ( ! isset( $_GET[Brizy_Editor::prefix('-edit')] ) && ! isset( $_GET[Brizy_Editor::prefix('-edit-iframe')] ) ) {
14
  return;
15
  }
16
 
compatibilities/seo-press.php CHANGED
@@ -7,16 +7,9 @@ class Brizy_Compatibilities_SeoPress {
7
  }
8
 
9
  /**
10
- * Yoast has a feature to add twitter share image.
11
- * If this image or featured image is not added then
12
- * it takes the first image from the post content.
13
- * These action is made in the hook wp_head and we
14
- * haven't replaced the urls yet. Here's why we see:
15
- * <meta name="twitter:image" content="http://@brizy_SITE_URL_PLACEHOLDER@/?
16
  *
17
- * @param $img_url
18
- *
19
- * @return string
20
  */
21
  public function fixRewriteRules( $rules ) {
22
 
7
  }
8
 
9
  /**
10
+ * @param $rules
 
 
 
 
 
11
  *
12
+ * @return array
 
 
13
  */
14
  public function fixRewriteRules( $rules ) {
15
 
compatibilities/sg-optimizer.php CHANGED
@@ -6,7 +6,7 @@ class Brizy_Compatibilities_SgOptimizer {
6
 
7
  public function __construct() {
8
 
9
- if ( isset( $_GET['brizy-edit'] ) || isset( $_GET['brizy-edit-iframe'] ) || isset( $_GET['brizy_post'] ) ) {
10
 
11
  add_filter( 'option_siteground_optimizer_optimize_html', '__return_false' );
12
  add_filter( 'option_siteground_optimizer_optimize_javascript', '__return_false' );
6
 
7
  public function __construct() {
8
 
9
+ if ( isset( $_GET[Brizy_Editor::prefix('-edit')] ) || isset( $_GET[Brizy_Editor::prefix('-edit-iframe')] ) || isset( $_GET[Brizy_Editor::prefix('_post')] ) ) {
10
 
11
  add_filter( 'option_siteground_optimizer_optimize_html', '__return_false' );
12
  add_filter( 'option_siteground_optimizer_optimize_javascript', '__return_false' );
compatibilities/tp-add-on-language-by-get-parameter.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Compatibility with TranslatePress - Language by GET parameter Add-on: https://wordpress.org/plugins/sg-cachepress/
4
+ */
5
+ class Brizy_Compatibilities_TpAddOnLanguageByGetParameter {
6
+
7
+ public function __construct() {
8
+ add_action( 'brizy_content', [ $this, 'brizy_content' ] );
9
+ }
10
+
11
+ public function brizy_content( $content ) {
12
+
13
+ add_filter( 'trp_home_url', [ $this, 'trp_home_url' ], 10, 2 );
14
+
15
+ return $content;
16
+ }
17
+
18
+ public function trp_home_url( $new_url, $abs_home ) {
19
+ return $abs_home;
20
+ }
21
+ }
compatibilities/webcraftic-clearfy.php CHANGED
@@ -15,7 +15,7 @@ class Brizy_Compatibilities_WebcrafticClearfy {
15
  */
16
  public function disable_js_optimize( $is_minify ) {
17
 
18
- if ( isset( $_GET['brizy-edit'] ) || isset( $_GET['brizy-edit-iframe'] ) ) {
19
  return false;
20
  }
21
 
15
  */
16
  public function disable_js_optimize( $is_minify ) {
17
 
18
+ if ( isset( $_GET[Brizy_Editor::prefix('-edit')] ) || isset( $_GET[Brizy_Editor::prefix('-edit-iframe')] ) ) {
19
  return false;
20
  }
21
 
compatibilities/wordpress-mu-domain-mapping.php CHANGED
@@ -10,7 +10,7 @@ class Brizy_Compatibilities_WordpressMuDomainMapping {
10
 
11
  public function remove_redirect_to_mapped_domain() {
12
 
13
- if ( isset( $_GET['brizy-edit'] ) || isset( $_GET['brizy-edit-iframe'] ) ) {
14
  remove_action( 'template_redirect', 'redirect_to_mapped_domain' );
15
  }
16
  }
10
 
11
  public function remove_redirect_to_mapped_domain() {
12
 
13
+ if ( isset( $_GET[Brizy_Editor::prefix('-edit')] ) || isset( $_GET[Brizy_Editor::prefix('-edit-iframe')] ) ) {
14
  remove_action( 'template_redirect', 'redirect_to_mapped_domain' );
15
  }
16
  }
compatibilities/wpml.php CHANGED
@@ -6,8 +6,8 @@
6
  class Brizy_Compatibilities_WPML {
7
 
8
  public function __construct() {
9
- add_action( 'wp_insert_post', array( $this, 'insertNewPost' ), -10000, 3 );
10
- add_action( 'wp_insert_post', array( $this, 'duplicatePosts' ), -10000, 3 );
11
  }
12
 
13
  /**
@@ -18,21 +18,14 @@ class Brizy_Compatibilities_WPML {
18
  *
19
  * @throws Brizy_Editor_Exceptions_NotFound
20
  */
21
- public function duplicatePosts($postId,$post) {
22
  global $wpml_post_translations;
23
  $postType = $post->post_type;
24
 
25
- if(isset($_POST['langs']) ) {
26
  if ( $wpml_post_translations && is_post_type_translated( $postType ) ) {
27
  $currentBrizyPost = Brizy_Editor_Post::get( (int) $postId );
28
- $originalBrizyPost = Brizy_Editor_Post::get( (int) $_POST['post_id'] );
29
- if ( $originalBrizyPost->uses_editor() && ! $currentBrizyPost->uses_editor() ) {
30
- // copy data from original
31
- $data = $originalBrizyPost->storage();
32
- $storage = $data->get('brizy-post');
33
- $currentBrizyPost->loadStorageData( $storage );
34
- $currentBrizyPost->save();
35
- }
36
  }
37
  }
38
 
@@ -46,22 +39,15 @@ class Brizy_Compatibilities_WPML {
46
  *
47
  * @throws Brizy_Editor_Exceptions_NotFound
48
  */
49
- public function insertNewPost($postId,$post) {
50
  global $wpml_post_translations;
51
  $postType = $post->post_type;
52
 
53
- if(isset($_REQUEST['trid']) && isset($_REQUEST['lang']) && isset($_REQUEST['source_lang'])) {
54
  if ( $wpml_post_translations && is_post_type_translated( $postType ) ) {
55
- $originalTranslation = $wpml_post_translations->get_element_id($_REQUEST['source_lang'], $_REQUEST['trid']);
56
- $currentBrizyPost = Brizy_Editor_Post::get( (int) $postId );
57
- $originalBrizyPost = Brizy_Editor_Post::get( (int) $originalTranslation );
58
- if ( $originalTranslation && $originalBrizyPost->uses_editor() && ! $currentBrizyPost->uses_editor() ) {
59
- // copy data from original
60
- $data = $originalBrizyPost->storage();
61
- $storage = $data->get('brizy-post');
62
- $currentBrizyPost->loadStorageData( $storage );
63
- $currentBrizyPost->save();
64
- }
65
  }
66
  }
67
  }
6
  class Brizy_Compatibilities_WPML {
7
 
8
  public function __construct() {
9
+ add_action( 'wp_insert_post', array( $this, 'insertNewPost' ), - 10000, 3 );
10
+ add_action( 'wp_insert_post', array( $this, 'duplicatePosts' ), - 10000, 3 );
11
  }
12
 
13
  /**
18
  *
19
  * @throws Brizy_Editor_Exceptions_NotFound
20
  */
21
+ public function duplicatePosts( $postId, $post ) {
22
  global $wpml_post_translations;
23
  $postType = $post->post_type;
24
 
25
+ if ( isset( $_POST['langs'] ) ) {
26
  if ( $wpml_post_translations && is_post_type_translated( $postType ) ) {
27
  $currentBrizyPost = Brizy_Editor_Post::get( (int) $postId );
28
+ $currentBrizyPost->duplicateTo( (int) $_POST['post_id'] );
 
 
 
 
 
 
 
29
  }
30
  }
31
 
39
  *
40
  * @throws Brizy_Editor_Exceptions_NotFound
41
  */
42
+ public function insertNewPost( $postId, $post ) {
43
  global $wpml_post_translations;
44
  $postType = $post->post_type;
45
 
46
+ if ( isset( $_REQUEST['trid'] ) && isset( $_REQUEST['lang'] ) && isset( $_REQUEST['source_lang'] ) ) {
47
  if ( $wpml_post_translations && is_post_type_translated( $postType ) ) {
48
+ $originalTranslation = $wpml_post_translations->get_element_id( $_REQUEST['source_lang'], $_REQUEST['trid'] );
49
+ $originalBrizyPost = Brizy_Editor_Post::get( (int) $originalTranslation );
50
+ $originalBrizyPost->duplicateTo( (int) $postId );
 
 
 
 
 
 
 
51
  }
52
  }
53
  }
compatibilities/yoast-seo.php CHANGED
@@ -3,6 +3,7 @@
3
  class Brizy_Compatibilities_YoastSeo {
4
 
5
  public function __construct() {
 
6
  add_filter( 'wpseo_twitter_image', array( $this, 'wpseo_twitter_image' ) );
7
  }
8
 
@@ -17,8 +18,51 @@ class Brizy_Compatibilities_YoastSeo {
17
  * @param $img_url
18
  *
19
  * @return string
 
20
  */
21
  public function wpseo_twitter_image( $img_url ) {
22
- return Brizy_SiteUrlReplacer::restoreSiteUrl( $img_url );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  }
24
  }
3
  class Brizy_Compatibilities_YoastSeo {
4
 
5
  public function __construct() {
6
+ add_filter( 'admin_init', array( $this, 'compile_post' ) );
7
  add_filter( 'wpseo_twitter_image', array( $this, 'wpseo_twitter_image' ) );
8
  }
9
 
18
  * @param $img_url
19
  *
20
  * @return string
21
+ * @throws Exception
22
  */
23
  public function wpseo_twitter_image( $img_url ) {
24
+
25
+ try {
26
+ $project = Brizy_Editor_Project::get();
27
+ $context = Brizy_Content_ContextFactory::createContext( $project, null, null, null );
28
+ $urlBuilder = new Brizy_Editor_UrlBuilder( $project, null );
29
+ $media_storage = new Brizy_Editor_Asset_MediaProxyStorage( $urlBuilder );
30
+ $media_processor = new Brizy_Editor_Asset_MediaAssetProcessor( $media_storage );
31
+ $domain_processor = new Brizy_Editor_Asset_DomainProcessor();
32
+ $url = $domain_processor->process( $img_url, $context );
33
+ $url = $media_processor->process( $url, $context );
34
+
35
+ return $url;
36
+ } catch ( Exception $e ) {
37
+ // do nothing... :) :)
38
+ }
39
+
40
+ return $img_url;
41
+ }
42
+
43
+ public function compile_post() {
44
+ global $pagenow;
45
+
46
+ if ( 'post.php' !== $pagenow ) {
47
+ return;
48
+ }
49
+
50
+ try {
51
+ $post = Brizy_Editor_Post::get( $_GET['post'] );
52
+
53
+ if ( ! $post->uses_editor() ) {
54
+ return;
55
+ }
56
+
57
+ $needs_compile = ! $post->isCompiledWithCurrentVersion() || $post->get_needs_compile();
58
+
59
+ if ( $needs_compile ) {
60
+ $post->compile_page();
61
+ $post->saveStorage();
62
+ $post->savePost();
63
+ }
64
+
65
+ } catch ( Exception $e ) {
66
+ }
67
  }
68
  }
config.php CHANGED
@@ -11,6 +11,7 @@ class Brizy_Config {
11
 
12
  // this seems like it's not used any more. Leaving untouched
13
  const GATEWAY_URI = 'https://api.brizy.io';
 
14
 
15
  const BRIZY_BLANK_TEMPLATE_FILE_NAME = 'brizy-blank-template.php';
16
  const BRIZY_TEMPLATE_FILE_NAME = 'brizy-header-footer-template.php';
@@ -31,6 +32,23 @@ class Brizy_Config {
31
  const EDITOR_BUILD_PATH = BRIZY_PLUGIN_PATH . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'editor-build' . DIRECTORY_SEPARATOR . BRIZY_EDITOR_VERSION;
32
  const EDITOR_BUILD_URL = BRIZY_PLUGIN_URL . '/public/editor-build/'.BRIZY_EDITOR_VERSION;
33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  static public function getCompilerUrls() {
35
  return new Brizy_Admin_UrlIterator(
36
  array(
@@ -68,4 +86,4 @@ class Brizy_Config {
68
  }
69
  }
70
 
71
- }
11
 
12
  // this seems like it's not used any more. Leaving untouched
13
  const GATEWAY_URI = 'https://api.brizy.io';
14
+ const CDN = 'http://bzassets.net/upload';
15
 
16
  const BRIZY_BLANK_TEMPLATE_FILE_NAME = 'brizy-blank-template.php';
17
  const BRIZY_TEMPLATE_FILE_NAME = 'brizy-header-footer-template.php';
32
  const EDITOR_BUILD_PATH = BRIZY_PLUGIN_PATH . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'editor-build' . DIRECTORY_SEPARATOR . BRIZY_EDITOR_VERSION;
33
  const EDITOR_BUILD_URL = BRIZY_PLUGIN_URL . '/public/editor-build/'.BRIZY_EDITOR_VERSION;
34
 
35
+ const CLOUD_APP_KEY = 'YTVhMDEwMGUyNGE4OTQ5OWM2NTY3OGM3N2MxNzMzMTBjOWVlNTg0OGM0NWU1NGYzY2QxMGEzOWQ3NWNjMDk3Zg';
36
+ const CLOUD_ENDPOINT = 'https://www.brizy.cloud';
37
+ const CLOUD_EDITOR_VERSIONS = '/api/versions';
38
+ const CLOUD_LIBRARY = '/dev/library';
39
+ const CLOUD_SIGNIN = '/api/sign_ins';
40
+ const CLOUD_SIGNUP = '/api/sign_ups';
41
+ const CLOUD_RESET_PASSWORD = '/api/recover_passwords';
42
+ const CLOUD_MEDIA = '/api/media';
43
+ const CLOUD_CONTAINERS = '/api/containers';
44
+ const CLOUD_PROJECTS = '/api/projects';
45
+ const CLOUD_SAVEDBLOCKS = '/api/saved_blocks';
46
+ const CLOUD_FONTS = '/api/fonts';
47
+ const CLOUD_POPUPS = '/api/saved_popups';
48
+ const CLOUD_LAYOUTS = '/api/layouts';
49
+ const CLOUD_SCREENSHOT = '/screenshot/%s';
50
+ const CLOUD_SCREENSHOTS = '/api/screenshots';
51
+
52
  static public function getCompilerUrls() {
53
  return new Brizy_Admin_UrlIterator(
54
  array(
86
  }
87
  }
88
 
89
+ }
content/placeholder-extractor.php CHANGED
@@ -22,7 +22,7 @@ class Brizy_Content_PlaceholderExtractor
22
 
23
  private static function getPlaceholderRegexExpression()
24
  {
25
- return "/(?<placeholder>{{\s*(?<placeholderName>.+?)(?<attributes>(?:\s+)((?:\w+\s*=\s*'(?:.[^']*|)'\s*)*))?}}(?:(?<content>.*?){{\s*end_(\g{placeholderName})\s*}})?)/ims";;
26
  }
27
 
28
  public static function stripPlaceholders($content)
22
 
23
  private static function getPlaceholderRegexExpression()
24
  {
25
+ return "/(?<placeholder>{{\s*(?<placeholderName>.+?)(?<attributes>(?:\s+)((?:\w+\s*=\s*(?:'|\")(?:.[^\"']*|)(?:'|\")\s*)*))?}}(?:(?<content>.*?){{\s*end_(\g{placeholderName})\s*}})?)/ims";;
26
  }
27
 
28
  public static function stripPlaceholders($content)
content/placeholders/permalink.php CHANGED
@@ -23,12 +23,10 @@ class Brizy_Content_Placeholders_Permalink extends Brizy_Content_Placeholders_Si
23
  */
24
  public function getValue( Brizy_Content_Context $context, Brizy_Content_ContentPlaceholder $contentPlaceholder ) {
25
  $attributes = $contentPlaceholder->getAttributes();
26
- if ( isset( $attributes['post_id'] ) && $attributes['post_id']>0 ) {
27
  return get_permalink( (int) $attributes['post_id'] );
28
  }
29
 
30
  return '';
31
  }
32
-
33
-
34
  }
23
  */
24
  public function getValue( Brizy_Content_Context $context, Brizy_Content_ContentPlaceholder $contentPlaceholder ) {
25
  $attributes = $contentPlaceholder->getAttributes();
26
+ if ( isset( $attributes['post_id'] ) && (int) $attributes['post_id'] > 0 ) {
27
  return get_permalink( (int) $attributes['post_id'] );
28
  }
29
 
30
  return '';
31
  }
 
 
32
  }
editor.php CHANGED
@@ -5,12 +5,19 @@
5
  */
6
  class Brizy_Editor {
7
 
8
- private static $is_allowed_for_current_user;
9
-
10
  private static $settings_key = 'post-types';
11
 
12
  private static $instance;
13
 
 
 
 
 
 
 
 
 
 
14
  public static function get() {
15
 
16
  if ( self::$instance ) {
@@ -23,6 +30,48 @@ class Brizy_Editor {
23
  }
24
 
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * Brizy_Editor constructor.
28
  */
@@ -48,13 +97,15 @@ class Brizy_Editor {
48
  add_action( 'init', array( $this, 'wordpressInit' ), 1000 );
49
  add_action( 'wp_loaded', array( $this, 'wordpressLoaded' ) );
50
  add_action( 'wp', array( $this, 'wordpressObjectCreated' ) );
51
- add_action( 'wp_print_scripts', array($this,'forceJqueryQueue'),99999 );
52
 
53
- if ( current_user_can( Brizy_Admin_Capabilities::CAP_EDIT_WHOLE_PAGE ) || Brizy_Editor::is_administrator() ) {
54
  Brizy_Admin_Rules_Api::_init();
55
  }
56
 
57
- add_filter( "wp_revisions_to_keep", array( $this, 'revisionsToKeep' ), 10, 2 );
 
 
58
 
59
  }
60
 
@@ -72,6 +123,12 @@ class Brizy_Editor {
72
 
73
  public function wordpressInit() {
74
 
 
 
 
 
 
 
75
  Brizy_Admin_Templates::_init();
76
  Brizy_Admin_Popups_Main::_init();
77
  Brizy_Admin_FormEntries::_init();
@@ -81,8 +138,15 @@ class Brizy_Editor {
81
  if ( Brizy_Editor::is_user_allowed() ) {
82
  Brizy_Admin_Svg_Main::_init();
83
  Brizy_Admin_OptimizeImages::_init();
 
 
84
  }
85
 
 
 
 
 
 
86
  $this->loadShortcodes();
87
  $this->initializeAssetLoaders();
88
 
@@ -115,8 +179,7 @@ class Brizy_Editor {
115
  function brizy_add_dashboard_widgets() {
116
  try {
117
 
118
- Brizy_Admin_DashboardWidget::_init();
119
-
120
  } catch ( Exception $e ) {
121
  // ignore this exceptions for now.
122
  }
@@ -155,18 +218,17 @@ class Brizy_Editor {
155
  if ( $post && $post->uses_editor() ) {
156
  $this->handleFrontEndEditor( $post );
157
  }
158
-
159
-
160
  }
161
 
162
  public function revisionsToKeep( $num, $post ) {
163
  try {
 
164
  if ( in_array( $post->post_type, array( Brizy_Editor_Project::BRIZY_PROJECT ) ) ) {
165
- return BRIZY_MAX_REVISIONS_TO_KEEP;
166
  }
167
 
168
  if ( Brizy_Editor_Post::get( $post )->uses_editor() ) {
169
- $num = BRIZY_MAX_REVISIONS_TO_KEEP;
170
  }
171
  } catch ( Exception $e ) {
172
  Brizy_Logger::instance()->debug( $e->getMessage(), array( $e ) );
@@ -182,7 +244,7 @@ class Brizy_Editor {
182
 
183
  $this->registerCustomPostTemplates();
184
 
185
- if(defined('BRIZY_PRO_VERSION')) {
186
  $mainInstance = new BrizyPro_Main();
187
  $mainInstance->registerCustomPosts();
188
  }
@@ -207,18 +269,12 @@ class Brizy_Editor {
207
 
208
  public function registerCustomPostTemplates() {
209
  Brizy_Editor_Project::registerCustomPostType();
210
-
211
- Brizy_Admin_Blocks_Main::registerCustomPosts();
212
- Brizy_Admin_Blocks_Main::registerSupportedPostType();
213
-
214
  Brizy_Admin_Fonts_Main::registerCustomPosts();
215
  Brizy_Admin_FormEntries::registerCustomPost();
216
-
217
- Brizy_Admin_Templates::registerCustomPostTemplate();
218
- Brizy_Admin_Templates::registerSupportedPostType();
219
-
220
  Brizy_Admin_Popups_Main::registerCustomPosts();
221
- Brizy_Admin_Popups_Main::registerSupportedPostType();
 
222
  }
223
 
224
  /**
@@ -226,7 +282,7 @@ class Brizy_Editor {
226
  */
227
  public function handleFrontEndEditor( $post ) {
228
  try {
229
- $main = new Brizy_Public_Main( $post );
230
  $main->initialize_front_end();
231
  } catch ( Exception $e ) {
232
  Brizy_Logger::instance()->exception( $e );
@@ -239,7 +295,7 @@ class Brizy_Editor {
239
  public function handleBackEndEditor( $post ) {
240
 
241
  try {
242
- $main = new Brizy_Public_Main( $post );
243
  $main->initialize_wordpress_editor();
244
  } catch ( Exception $e ) {
245
  Brizy_Logger::instance()->exception( $e );
@@ -304,8 +360,8 @@ class Brizy_Editor {
304
  }
305
 
306
  public function forceJqueryQueue() {
307
- if(!wp_script_is('jquery','enqueued')) {
308
- wp_enqueue_script('jquery');
309
  }
310
  }
311
 
@@ -347,8 +403,8 @@ class Brizy_Editor {
347
  ( isset( $_POST['id'] ) ) {
348
  $pid = (int) $_POST['id'];
349
  } elseif
350
- ( isset( $_REQUEST['brizy_post'] ) ) {
351
- $pid = (int) $_REQUEST['brizy_post'];
352
  } elseif ( $wp_query->is_posts_page ) {
353
  $pid = (int) get_queried_object_id();
354
  } elseif
@@ -361,13 +417,17 @@ class Brizy_Editor {
361
  return $pid;
362
  }
363
 
 
 
 
 
364
  public static function is_administrator() {
365
 
366
  if ( ! is_user_logged_in() ) {
367
  return false;
368
  }
369
 
370
- return is_super_admin();
371
  }
372
 
373
  public static function is_subscriber() {
@@ -414,10 +474,6 @@ class Brizy_Editor {
414
  return BRIZY_VERSION;
415
  }
416
 
417
- public function get_slug() {
418
- return 'brizy';
419
- }
420
-
421
  /**
422
  * @param $wp_post_id
423
  * @param bool $throw
5
  */
6
  class Brizy_Editor {
7
 
 
 
8
  private static $settings_key = 'post-types';
9
 
10
  private static $instance;
11
 
12
+
13
+ /**
14
+ * All plugin ajax actions and enpoints are going to be prefixed with this string.
15
+ * This will not affect the database prefix tables or option keys and post meta keys *
16
+ *
17
+ * @var string
18
+ */
19
+ private static $prefix = null;
20
+
21
  public static function get() {
22
 
23
  if ( self::$instance ) {
30
  }
31
 
32
 
33
+ /**
34
+ * Return the prefix
35
+ *
36
+ * @param string $string
37
+ *
38
+ * @return string
39
+ */
40
+ public static function prefix( $string = null ) {
41
+
42
+ if ( ! self::$prefix ) {
43
+ $savedPrefix = get_option( 'brizy_prefix', null );
44
+
45
+ if ( ! $savedPrefix ) {
46
+ update_option( 'brizy_prefix', 'brizy' );
47
+ $savedPrefix = 'brizy';
48
+ }
49
+
50
+ self::$prefix = $savedPrefix;
51
+ }
52
+
53
+ return self::$prefix . trim( $string );
54
+ }
55
+
56
+ /**
57
+ * Return the prefix
58
+ *
59
+ * @param string $string
60
+ *
61
+ * @return string
62
+ */
63
+ public static function setPrefix( $string ) {
64
+
65
+ if ( $string == '' ) {
66
+ throw new Exception( 'The prefix cannot be empty' );
67
+ }
68
+
69
+ update_option( 'brizy_prefix', $string );
70
+
71
+ return self::$prefix = $string;
72
+ }
73
+
74
+
75
  /**
76
  * Brizy_Editor constructor.
77
  */
97
  add_action( 'init', array( $this, 'wordpressInit' ), 1000 );
98
  add_action( 'wp_loaded', array( $this, 'wordpressLoaded' ) );
99
  add_action( 'wp', array( $this, 'wordpressObjectCreated' ) );
100
+ add_action( 'wp_print_scripts', array( $this, 'forceJqueryQueue' ), 99999 );
101
 
102
+ if ( current_user_can( Brizy_Admin_Capabilities::CAP_EDIT_WHOLE_PAGE ) || Brizy_Editor_User::is_administrator() ) {
103
  Brizy_Admin_Rules_Api::_init();
104
  }
105
 
106
+ if(!defined('WP_POST_REVISIONS') || (defined('WP_POST_REVISIONS') && WP_POST_REVISIONS!==false)) {
107
+ add_filter( "wp_revisions_to_keep", array( $this, 'revisionsToKeep' ), 10, 2 );
108
+ }
109
 
110
  }
111
 
123
 
124
  public function wordpressInit() {
125
 
126
+ // watch all supported posts and create meta revisions
127
+ $metaManager = new Brizy_Admin_Post_RevisionManager();
128
+ $metaManager->addMonitor( new Brizy_Admin_Post_BrizyPostsMonitor() );
129
+ $metaManager->addMonitor( new Brizy_Admin_Post_ProjectPostMonitor() );
130
+
131
+
132
  Brizy_Admin_Templates::_init();
133
  Brizy_Admin_Popups_Main::_init();
134
  Brizy_Admin_FormEntries::_init();
138
  if ( Brizy_Editor::is_user_allowed() ) {
139
  Brizy_Admin_Svg_Main::_init();
140
  Brizy_Admin_OptimizeImages::_init();
141
+ Brizy_Admin_Layouts_Main::_init();
142
+ Brizy_Admin_Cloud::_init();
143
  }
144
 
145
+ if ( ! wp_doing_ajax() && Brizy_Editor_Project::get()->getCloudToken() ) {
146
+ // do not run cron actions on ajax request
147
+ Brizy_Admin_Cloud_Cron::_init();
148
+ }
149
+
150
  $this->loadShortcodes();
151
  $this->initializeAssetLoaders();
152
 
179
  function brizy_add_dashboard_widgets() {
180
  try {
181
 
182
+ Brizy_Admin_DashboardWidget::_init();
 
183
  } catch ( Exception $e ) {
184
  // ignore this exceptions for now.
185
  }
218
  if ( $post && $post->uses_editor() ) {
219
  $this->handleFrontEndEditor( $post );
220
  }
 
 
221
  }
222
 
223
  public function revisionsToKeep( $num, $post ) {
224
  try {
225
+ $revisionCount = apply_filters( 'brizy_revisions_max_count', BRIZY_MAX_REVISIONS_TO_KEEP );
226
  if ( in_array( $post->post_type, array( Brizy_Editor_Project::BRIZY_PROJECT ) ) ) {
227
+ return $revisionCount;
228
  }
229
 
230
  if ( Brizy_Editor_Post::get( $post )->uses_editor() ) {
231
+ $num = $revisionCount;;
232
  }
233
  } catch ( Exception $e ) {
234
  Brizy_Logger::instance()->debug( $e->getMessage(), array( $e ) );
244
 
245
  $this->registerCustomPostTemplates();
246
 
247
+ if ( defined( 'BRIZY_PRO_VERSION' ) && class_exists('BrizyPro_Main') ) {
248
  $mainInstance = new BrizyPro_Main();
249
  $mainInstance->registerCustomPosts();
250
  }
269
 
270
  public function registerCustomPostTemplates() {
271
  Brizy_Editor_Project::registerCustomPostType();
272
+ Brizy_Admin_Layouts_Main::registerCustomPosts();
 
 
 
273
  Brizy_Admin_Fonts_Main::registerCustomPosts();
274
  Brizy_Admin_FormEntries::registerCustomPost();
 
 
 
 
275
  Brizy_Admin_Popups_Main::registerCustomPosts();
276
+ Brizy_Admin_Blocks_Main::registerCustomPosts();
277
+ Brizy_Admin_Templates::registerCustomPostTemplate();
278
  }
279
 
280
  /**
282
  */
283
  public function handleFrontEndEditor( $post ) {
284
  try {
285
+ $main = Brizy_Public_Main::get( $post );
286
  $main->initialize_front_end();
287
  } catch ( Exception $e ) {
288
  Brizy_Logger::instance()->exception( $e );
295
  public function handleBackEndEditor( $post ) {
296
 
297
  try {
298
+ $main = Brizy_Public_Main::get( $post );
299
  $main->initialize_wordpress_editor();
300
  } catch ( Exception $e ) {
301
  Brizy_Logger::instance()->exception( $e );
360
  }
361
 
362
  public function forceJqueryQueue() {
363
+ if ( ! wp_script_is( 'jquery', 'enqueued' ) ) {
364
+ wp_enqueue_script( 'jquery' );
365
  }
366
  }
367
 
403
  ( isset( $_POST['id'] ) ) {
404
  $pid = (int) $_POST['id'];
405
  } elseif
406
+ ( isset( $_REQUEST[ Brizy_Editor::prefix( '_post' ) ] ) ) {
407
+ $pid = (int) $_REQUEST[ Brizy_Editor::prefix( '_post' ) ];
408
  } elseif ( $wp_query->is_posts_page ) {
409
  $pid = (int) get_queried_object_id();
410
  } elseif
417
  return $pid;
418
  }
419
 
420
+ static public function get_slug() {
421
+ return apply_filters( 'brizy-slug', 'brizy' );
422
+ }
423
+
424
  public static function is_administrator() {
425
 
426
  if ( ! is_user_logged_in() ) {
427
  return false;
428
  }
429
 
430
+ return is_admin() || is_super_admin();
431
  }
432
 
433
  public static function is_subscriber() {
474
  return BRIZY_VERSION;
475
  }
476
 
 
 
 
 
477
  /**
478
  * @param $wp_post_id
479
  * @param bool $throw
editor/accounts/api.php CHANGED
@@ -10,11 +10,11 @@
10
  class Brizy_Editor_Accounts_Api extends Brizy_Admin_AbstractApi {
11
 
12
  const nonce = 'brizy-api';
13
- const BRIZY_GET_ACCOUNT = 'brizy_get_account';
14
- const BRIZY_GET_ACCOUNTS = 'brizy_get_accounts';
15
- const BRIZY_ADD_ACCOUNT = 'brizy_add_account';
16
- const BRIZY_UPDATE_ACCOUNT = 'brizy_update_account';
17
- const BRIZY_DELETE_ACCOUNT = 'brizy_delete_account';
18
 
19
  /**
20
  * @var Brizy_Editor_Accounts_ServiceAccountManager
@@ -57,11 +57,12 @@ class Brizy_Editor_Accounts_Api extends Brizy_Admin_AbstractApi {
57
  * Register all api actions
58
  */
59
  protected function initializeApiActions() {
60
- add_action( 'wp_ajax_' . self::BRIZY_GET_ACCOUNT, array( $this, 'actionGetAccount' ) );
61
- add_action( 'wp_ajax_' . self::BRIZY_GET_ACCOUNTS, array( $this, 'actionGetAccounts' ) );
62
- add_action( 'wp_ajax_' . self::BRIZY_ADD_ACCOUNT, array( $this, 'actionAddAccount' ) );
63
- add_action( 'wp_ajax_' . self::BRIZY_UPDATE_ACCOUNT, array( $this, 'actionUpdateAccount' ) );
64
- add_action( 'wp_ajax_' . self::BRIZY_DELETE_ACCOUNT, array( $this, 'actionDeleteAccount' ) );
 
65
  }
66
 
67
 
10
  class Brizy_Editor_Accounts_Api extends Brizy_Admin_AbstractApi {
11
 
12
  const nonce = 'brizy-api';
13
+ const BRIZY_GET_ACCOUNT = '_get_account';
14
+ const BRIZY_GET_ACCOUNTS = '_get_accounts';
15
+ const BRIZY_ADD_ACCOUNT = '_add_account';
16
+ const BRIZY_UPDATE_ACCOUNT = '_update_account';
17
+ const BRIZY_DELETE_ACCOUNT = '_delete_account';
18
 
19
  /**
20
  * @var Brizy_Editor_Accounts_ServiceAccountManager
57
  * Register all api actions
58
  */
59
  protected function initializeApiActions() {
60
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
61
+ add_action( $pref . self::BRIZY_GET_ACCOUNT, array( $this, 'actionGetAccount' ) );
62
+ add_action( $pref . self::BRIZY_GET_ACCOUNTS, array( $this, 'actionGetAccounts' ) );
63
+ add_action( $pref . self::BRIZY_ADD_ACCOUNT, array( $this, 'actionAddAccount' ) );
64
+ add_action( $pref . self::BRIZY_UPDATE_ACCOUNT, array( $this, 'actionUpdateAccount' ) );
65
+ add_action( $pref . self::BRIZY_DELETE_ACCOUNT, array( $this, 'actionDeleteAccount' ) );
66
  }
67
 
68
 
editor/api.php CHANGED
@@ -3,40 +3,36 @@
3
  class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
4
 
5
  const nonce = 'brizy-api';
6
- const AJAX_GET_POST_INFO = 'brizy_get_post_info';
7
- const AJAX_GET = 'brizy_editor_get_items';
8
- const AJAX_UPDATE = 'brizy_update_item';
9
- const AJAX_GET_PROJECT = 'brizy_get_project';
10
- const AJAX_SET_PROJECT = 'brizy_set_project';
11
- const AJAX_LOCK_PROJECT = 'brizy_lock_project';
12
- const AJAX_MEDIA = 'brizy_media';
13
- const AJAX_SIDEBARS = 'brizy_sidebars';
14
- const AJAX_SIDEBAR_CONTENT = 'brizy_sidebar_content';
15
- const AJAX_SHORTCODE_CONTENT = 'brizy_shortcode_content';
16
- const AJAX_GET_POST_OBJECTS = 'brizy_get_posts';
17
- const AJAX_GET_MENU_LIST = 'brizy_get_menu_list';
18
- const AJAX_GET_TERMS = 'brizy_get_terms';
19
- const AJAX_REMOVE_LOCK = 'brizy_remove_lock';
20
- const AJAX_HEARTBEAT = 'brizy_heartbeat';
21
- const AJAX_TAKE_OVER = 'brizy_take_over';
22
- const AJAX_JWT_TOKEN = 'brizy_multipass_create';
23
-
24
- const AJAX_UPDATE_MENU_DATA = 'brizy_update_menu_data';
25
- const AJAX_UPDATE_EDITOR_META_DATA = 'brizy_update_editor_meta_data';
26
- const AJAX_UPDATE_MENU_ITEM_DATA = 'brizy_update_menu_item_data';
27
-
28
- const AJAX_DOWNLOAD_MEDIA = 'brizy_download_media';
29
- const AJAX_MEDIA_METAKEY = 'brizy_get_media_key';
30
- const AJAX_CREATE_ATTACHMENT_UID = 'brizy_create_attachment_uid';
31
-
32
- const AJAX_SET_FEATURED_IMAGE = 'brizy_set_featured_image';
33
- const AJAX_SET_FEATURED_IMAGE_FOCAL_POINT = 'brizy_set_featured_image_focal_point';
34
- const AJAX_REMOVE_FEATURED_IMAGE = 'brizy_remove_featured_image';
35
- const AJAX_TIMESTAMP = 'brizy_timestamp';
36
-
37
-
38
- const RULE_GROUP_LIST = 'brizy_rule_group_list';
39
- const RULE_POSTS_GROUP_LIST = 'brizy_rule_posts_group_list';
40
 
41
  /**
42
  * @var Brizy_Editor_Post
@@ -64,39 +60,35 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
64
  }
65
 
66
  protected function initializeApiActions() {
67
- if ( Brizy_Editor::is_user_allowed() ) {
68
- add_action( 'wp_ajax_' . self::AJAX_REMOVE_LOCK, array( $this, 'removeProjectLock' ) );
69
- add_action( 'wp_ajax_' . self::AJAX_HEARTBEAT, array( $this, 'heartbeat' ) );
70
- add_action( 'wp_ajax_' . self::AJAX_TAKE_OVER, array( $this, 'takeOver' ) );
71
- add_action( 'wp_ajax_' . self::AJAX_GET, array( $this, 'get_item' ) );
72
- add_action( 'wp_ajax_' . self::AJAX_GET_POST_INFO, array( $this, 'get_post_info' ) );
73
- add_action( 'wp_ajax_' . self::AJAX_UPDATE, array( $this, 'update_item' ) );
74
- add_action( 'wp_ajax_' . self::AJAX_GET_PROJECT, array( $this, 'get_project' ) );
75
- add_action( 'wp_ajax_' . self::AJAX_SET_PROJECT, array( $this, 'set_project' ) );
76
- add_action( 'wp_ajax_' . self::AJAX_LOCK_PROJECT, array( $this, 'lock_project' ) );
77
- add_action( 'wp_ajax_' . self::AJAX_SIDEBARS, array( $this, 'get_sidebars' ) );
78
- add_action( 'wp_ajax_' . self::AJAX_SHORTCODE_CONTENT, array( $this, 'shortcode_content' ) );
79
- add_action( 'wp_ajax_' . self::AJAX_GET_POST_OBJECTS, array( $this, 'get_post_objects' ) );
80
- add_action( 'wp_ajax_' . self::AJAX_GET_MENU_LIST, array( $this, 'get_menu_list' ) );
81
- add_action( 'wp_ajax_' . self::AJAX_GET_TERMS, array( $this, 'get_terms' ) );
82
- add_action( 'wp_ajax_' . self::AJAX_DOWNLOAD_MEDIA, array( $this, 'download_media' ) );
83
- add_action( 'wp_ajax_' . self::AJAX_MEDIA_METAKEY, array( $this, 'get_media_key' ) );
84
- add_action( 'wp_ajax_' . self::AJAX_CREATE_ATTACHMENT_UID, array( $this, 'get_attachment_key' ) );
85
- //add_action( 'wp_ajax_' . self::AJAX_JWT_TOKEN, array( $this, 'multipass_create' ) );
86
- add_action( 'wp_ajax_' . self::AJAX_SET_FEATURED_IMAGE, array( $this, 'set_featured_image' ) );
87
- add_action( 'wp_ajax_' . self::AJAX_SET_FEATURED_IMAGE_FOCAL_POINT, array(
88
- $this,
89
- 'set_featured_image_focal_point'
90
- ) );
91
- add_action( 'wp_ajax_' . self::AJAX_TIMESTAMP, array( $this, 'timestamp' ) );
92
- add_action( 'wp_ajax_nopriv_' . self::AJAX_TIMESTAMP, array( $this, 'timestamp' ) );
93
  }
94
 
95
- if ( is_admin() ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
- add_action( 'wp_ajax_' . self::RULE_GROUP_LIST, array( $this, 'getGroupList' ) );
98
- add_action( 'wp_ajax_' . self::RULE_POSTS_GROUP_LIST, array( $this, 'getPostsGroupsList' ) );
99
- }
100
  }
101
 
102
  protected function getRequestNonce() {
@@ -260,7 +252,6 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
260
  try {
261
  $this->verifyNonce( self::nonce );
262
  $data = Brizy_Editor_Project::get()->createResponse();
263
-
264
  $this->success( $data );
265
  } catch ( Exception $exception ) {
266
  Brizy_Logger::instance()->exception( $exception );
@@ -303,7 +294,6 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
303
  do_action( 'brizy_global_data_updated' );
304
  }
305
 
306
-
307
  $this->success( $project->createResponse() );
308
  } catch ( Exception $exception ) {
309
  Brizy_Logger::instance()->exception( $exception );
@@ -318,6 +308,11 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
318
  public function get_item() {
319
  try {
320
  $this->verifyNonce( self::nonce );
 
 
 
 
 
321
  $data = $this->post->createResponse();
322
  $data['is_index'] = true;
323
 
@@ -336,9 +331,9 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
336
  try {
337
  $this->verifyNonce( self::nonce );
338
 
339
- $postId = (int) $this->param( 'post_id' ) ;
340
  $defaultFields = [ 'ID', 'post_title', 'post_content' ];
341
- $post_fields = array_intersect( $this->param( 'fields' ), $defaultFields );
342
 
343
  if ( count( $post_fields ) == 0 ) {
344
  $post_fields = $defaultFields;
@@ -350,7 +345,7 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
350
 
351
  $post = get_post( $postId, ARRAY_A );
352
 
353
- if(!$post) {
354
  $this->error( 404, 'Invalid post id' );
355
  }
356
 
@@ -374,6 +369,11 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
374
  $data = stripslashes( $this->param( 'data' ) );
375
  $atemplate = $this->param( 'template' );
376
  $dataVersion = (int) stripslashes( $this->param( 'dataVersion' ) );
 
 
 
 
 
377
 
378
  if ( $atemplate ) {
379
  $this->post->set_template( $atemplate );
@@ -385,6 +385,8 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
385
  $this->post->set_needs_compile( true );
386
  }
387
 
 
 
388
  if ( (int) $this->param( 'is_autosave' ) == 1 ) {
389
  $this->post->save( 1 );
390
  } else {
@@ -421,6 +423,125 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
421
  }
422
  }
423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  public function get_post_objects() {
425
 
426
  global $wp_post_types;
@@ -436,7 +557,9 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
436
  } ) );
437
  }
438
 
439
- $posts = $this->get_post_list( $searchTerm, $postType, $excludePostType );
 
 
440
 
441
  $this->success( array( 'filter_term' => $searchTerm, 'posts' => $posts ) );
442
  }
@@ -459,68 +582,6 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
459
  $this->success( $items );
460
  }
461
 
462
-
463
- private function get_post_list( $searchTerm, $postType, $excludePostType = array() ) {
464
-
465
- global $wp_post_types;
466
-
467
- add_filter( 'posts_where', array( $this, 'brizy_post_title_filter' ), 10, 2 );
468
-
469
- $post_query = array(
470
- 'post_type' => $postType,
471
- 'posts_per_page' => - 1,
472
- 'post_status' => $postType == 'attachment' ? 'inherit' : array(
473
- 'publish',
474
- 'pending',
475
- 'draft',
476
- 'future',
477
- 'private'
478
- ),
479
- 'orderby' => 'post_title',
480
- 'order' => 'ASC'
481
- );
482
-
483
- if ( $searchTerm ) {
484
- $post_query['post_title_term'] = $searchTerm;
485
- }
486
-
487
- $posts = new WP_Query( $post_query );
488
-
489
- $result = array();
490
-
491
- foreach ( $posts->posts as $post ) {
492
-
493
- if ( in_array( $post->post_type, $excludePostType ) ) {
494
- continue;
495
- }
496
-
497
- $result[] = (object) array(
498
- 'ID' => $post->ID,
499
- 'uid' => $this->create_uid( $post->ID ),
500
- 'post_type' => $post->post_type,
501
- 'post_type_label' => $wp_post_types[ $post->post_type ]->label,
502
- 'title' => apply_filters( 'the_title', $post->post_title ),
503
- 'post_title' => apply_filters( 'the_title', $post->post_title )
504
- );
505
- }
506
-
507
- remove_filter( 'posts_where', 'brizy_post_title_filter', 10 );
508
-
509
- return $result;
510
- }
511
-
512
- private function create_uid( $postId ) {
513
-
514
- $uid = get_post_meta( $postId, 'brizy_post_uid', true );
515
-
516
- if ( ! $uid ) {
517
- $uid = md5( $postId . time() );
518
- update_post_meta( $postId, 'brizy_post_uid', $uid );
519
- }
520
-
521
- return $uid;
522
- }
523
-
524
  public function brizy_post_title_filter( $where, $wp_query = null ) {
525
 
526
  global $wpdb;
@@ -613,7 +674,9 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
613
  $uid = get_post_meta( $attachmentId, 'brizy_post_uid', true );
614
 
615
  if ( ! $uid ) {
616
- $uid = "wp-" . md5( $attachmentId . time() );
 
 
617
  update_post_meta( $attachmentId, 'brizy_post_uid', $uid );
618
  }
619
 
@@ -626,145 +689,39 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
626
  }
627
  }
628
 
629
- public function getGroupList() {
630
-
631
- $context = $_REQUEST['context'];
632
-
633
- $closure = function ( $v ) {
634
- return array(
635
- 'title' => $v->label,
636
- 'value' => $v->name,
637
- 'groupValue' => $v->groupValue
638
- );
639
- };
640
-
641
- $groups = array(
642
- array(
643
- 'title' => 'Pages',
644
- 'value' => Brizy_Admin_Rule::POSTS,
645
- 'items' => array_map( $closure, $this->getCustomPostsList( Brizy_Admin_Rule::POSTS ) )
646
- ),
647
- array(
648
- 'title' => 'Categories',
649
- 'value' => Brizy_Admin_Rule::TAXONOMY,
650
- 'items' => array_map( $closure, $this->getTaxonomyList( Brizy_Admin_Rule::TAXONOMY ) )
651
- ),
652
- array(
653
- 'title' => 'Archives',
654
- 'value' => Brizy_Admin_Rule::ARCHIVE,
655
- 'items' => array_map( $closure, $this->getArchivesList( Brizy_Admin_Rule::ARCHIVE ) )
656
- ),
657
- array(
658
- 'title' => 'Others',
659
- 'value' => Brizy_Admin_Rule::TEMPLATE,
660
- 'items' => $this->geTemplateList( $context )
661
- ),
662
- );
663
-
664
- wp_send_json_success( $groups, 200 );
665
- }
666
-
667
- public function getPostsGroupsList( $groupValue ) {
668
-
669
- global $wp_post_types;
670
-
671
- if ( ! isset( $_REQUEST['postType'] ) ) {
672
- wp_send_json_error( 'Invalid post type', 400 );
673
- }
674
-
675
- $post_type = $_REQUEST['postType'];
676
- if ( ! isset( $wp_post_types[ $post_type ] ) ) {
677
- wp_send_json_error( 'Post type not found', 400 );
678
- }
679
-
680
- $taxonomies = get_taxonomies( [ 'object_type' => [ $post_type ] ], 'objects' );
681
-
682
- $groups = array();
683
 
684
- $closure = function ( $v ) {
685
- return array(
686
- 'title' => $v->name,
687
- 'value' => $v->taxonomy."|".$v->term_id,
688
- 'groupValue' => $v->taxonomy
689
- );
690
- };
691
-
692
- foreach ( $taxonomies as $tax ) {
693
- $groups[] = array(
694
- 'title' => __("From",'brizy')." ".$tax->labels->singular_name,
695
- 'value' => Brizy_Admin_Rule::ALL_FROM_TAXONOMY,
696
- 'items' => array_map( $closure, get_terms( [ 'taxonomy' => $tax->name, 'hide_empty' => false ] ) )
697
- );
698
- }
699
-
700
- $closure = function ( $v ) {
701
- return array(
702
- 'title' => $v->post_title,
703
- 'value' => $v->ID,
704
- 'groupValue' => $v->post_type
705
- );
706
- };
707
-
708
- $groups[] = array(
709
- 'title' => 'Specific Post',
710
- 'value' => Brizy_Admin_Rule::POSTS,
711
- 'items' => array_map( $closure, $this->get_post_list( null, $post_type ) )
712
- );
713
-
714
-
715
- wp_send_json_success( $groups, 200 );
716
- }
717
-
718
- private function getCustomPostsList( $groupValue ) {
719
- global $wp_post_types;
720
-
721
- return array_values( array_filter( $wp_post_types, function ( $type ) use ( $groupValue ) {
722
- $type->groupValue = $groupValue;
723
 
724
- return $type->public && $type->show_ui;
725
- } ) );
726
- }
727
 
728
- private function getArchivesList( $groupValue ) {
729
- global $wp_post_types;
 
730
 
731
- return array_values( array_filter( $wp_post_types, function ( $type ) use ( $groupValue ) {
732
- $type->groupValue = $groupValue;
 
 
 
 
733
 
734
- return $type->public && $type->show_ui && $type->has_archive;
735
- } ) );
736
- }
737
 
738
- private function getTaxonomyList( $groupValue ) {
739
- $terms = get_taxonomies( array( 'public' => true, 'show_ui' => true ), 'objects' );
740
 
741
- return array_values( array_filter( $terms, function ( $term ) use ( $groupValue ) {
742
- $term->groupValue = $groupValue;
743
 
744
- return $term;
745
- } ) );
746
- }
747
 
748
- public function geTemplateList( $context ) {
749
-
750
- $list = array(
751
- array( 'title' => 'Author page', 'value' => 'author', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
752
- array( 'title' => 'Search page', 'value' => 'search', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
753
- array( 'title' => 'Front page', 'value' => 'front_page', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
754
- array( 'title' => 'Blog / Posts page', 'value' => 'home_page', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
755
- array( 'title' => '404 page', 'value' => '404', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
756
- array( 'title' => 'Archive page', 'value' => '', 'groupValue' => Brizy_Admin_Rule::ARCHIVE )
757
- );
758
-
759
- if ( $context != 'template-rules' ) {
760
- $list[] = array(
761
- 'title' => 'Brizy Templates',
762
- 'value' => 'brizy_template',
763
- 'groupValue' => Brizy_Admin_Rule::BRIZY_TEMPLATE
764
- );
765
  }
766
-
767
- return $list;
768
  }
769
 
770
 
@@ -772,7 +729,9 @@ class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
772
  $uid = get_post_meta( $attachmentId, 'brizy_attachment_uid', true );
773
 
774
  if ( ! $uid ) {
775
- $uid = "wp-" . md5( $attachmentId . time() );
 
 
776
  update_post_meta( $attachmentId, 'brizy_attachment_uid', $uid );
777
  }
778
 
3
  class Brizy_Editor_API extends Brizy_Admin_AbstractApi {
4
 
5
  const nonce = 'brizy-api';
6
+ const AJAX_GET_POST_INFO = '_get_post_info';
7
+ const AJAX_GET = '_editor_get_items';
8
+ const AJAX_UPDATE = '_update_item';
9
+ const AJAX_GET_PROJECT = '_get_project';
10
+ const AJAX_SET_PROJECT = '_set_project';
11
+ const AJAX_LOCK_PROJECT = '_lock_project';
12
+ const AJAX_MEDIA = '_media';
13
+ const AJAX_SIDEBARS = '_sidebars';
14
+ const AJAX_SIDEBAR_CONTENT = '_sidebar_content';
15
+ const AJAX_SHORTCODE_CONTENT = '_shortcode_content';
16
+ const AJAX_PLACEHOLDER_CONTENT = '_placeholder_content';
17
+ const AJAX_GET_POST_OBJECTS = '_get_posts';
18
+ const AJAX_GET_MENU_LIST = '_get_menu_list';
19
+ const AJAX_GET_TERMS = '_get_terms';
20
+ const AJAX_REMOVE_LOCK = '_remove_lock';
21
+ const AJAX_HEARTBEAT = '_heartbeat';
22
+ const AJAX_TAKE_OVER = '_take_over';
23
+ const AJAX_JWT_TOKEN = '_multipass_create';
24
+ const AJAX_UPDATE_MENU_DATA = '_update_menu_data';
25
+ const AJAX_UPDATE_EDITOR_META_DATA = '_update_editor_meta_data';
26
+ const AJAX_UPDATE_MENU_ITEM_DATA = '_update_menu_item_data';
27
+ const AJAX_DOWNLOAD_MEDIA = '_download_media';
28
+ const AJAX_MEDIA_METAKEY = '_get_media_key';
29
+ const AJAX_CREATE_ATTACHMENT_UID = '_create_attachment_uid';
30
+ const AJAX_SET_FEATURED_IMAGE = '_set_featured_image';
31
+ const AJAX_SET_IMAGE_FOCAL_PT = '_set_featured_image_focal_point';
32
+ const AJAX_REMOVE_FEATURED_IMAGE = '_remove_featured_image';
33
+ const AJAX_TIMESTAMP = '_timestamp';
34
+ const AJAX_SET_TEMPLATE_TYPE = '_set_template_type';
35
+
 
 
 
 
36
 
37
  /**
38
  * @var Brizy_Editor_Post
60
  }
61
 
62
  protected function initializeApiActions() {
63
+ if ( ! Brizy_Editor_User::is_user_allowed() ) {
64
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  }
66
 
67
+ $p = 'wp_ajax_' . Brizy_Editor::prefix();
68
+ add_action( $p . self::AJAX_REMOVE_LOCK, array( $this, 'removeProjectLock' ) );
69
+ add_action( $p . self::AJAX_HEARTBEAT, array( $this, 'heartbeat' ) );
70
+ add_action( $p . self::AJAX_TAKE_OVER, array( $this, 'takeOver' ) );
71
+ add_action( $p . self::AJAX_GET, array( $this, 'get_item' ) );
72
+ add_action( $p . self::AJAX_GET_POST_INFO, array( $this, 'get_post_info' ) );
73
+ add_action( $p . self::AJAX_UPDATE, array( $this, 'update_item' ) );
74
+ add_action( $p . self::AJAX_GET_PROJECT, array( $this, 'get_project' ) );
75
+ add_action( $p . self::AJAX_SET_PROJECT, array( $this, 'set_project' ) );
76
+ add_action( $p . self::AJAX_LOCK_PROJECT, array( $this, 'lock_project' ) );
77
+ add_action( $p . self::AJAX_SIDEBARS, array( $this, 'get_sidebars' ) );
78
+ add_action( $p . self::AJAX_SHORTCODE_CONTENT, array( $this, 'shortcode_content' ) );
79
+ add_action( $p . self::AJAX_PLACEHOLDER_CONTENT, array( $this, 'placeholder_content' ) );
80
+ add_action( $p . self::AJAX_GET_POST_OBJECTS, array( $this, 'get_post_objects' ) );
81
+ add_action( $p . self::AJAX_GET_MENU_LIST, array( $this, 'get_menu_list' ) );
82
+ add_action( $p . self::AJAX_GET_TERMS, array( $this, 'get_terms' ) );
83
+ add_action( $p . self::AJAX_DOWNLOAD_MEDIA, array( $this, 'download_media' ) );
84
+ add_action( $p . self::AJAX_MEDIA_METAKEY, array( $this, 'get_media_key' ) );
85
+ add_action( $p . self::AJAX_CREATE_ATTACHMENT_UID, array( $this, 'get_attachment_key' ) );
86
+ add_action( $p . self::AJAX_SET_FEATURED_IMAGE, array( $this, 'set_featured_image' ) );
87
+ add_action( $p . self::AJAX_SET_IMAGE_FOCAL_PT, array( $this, 'set_featured_image_focal_point' ) );
88
+ add_action( $p . self::AJAX_TIMESTAMP, array( $this, 'timestamp' ) );
89
+ add_action( $p . self::AJAX_SET_TEMPLATE_TYPE, array( $this, 'setTemplateType' ) );
90
+ add_action( $p . 'nopriv_' . Brizy_Editor::prefix( self::AJAX_TIMESTAMP ), array( $this, 'timestamp' ) );
91
 
 
 
 
92
  }
93
 
94
  protected function getRequestNonce() {
252
  try {
253
  $this->verifyNonce( self::nonce );
254
  $data = Brizy_Editor_Project::get()->createResponse();
 
255
  $this->success( $data );
256
  } catch ( Exception $exception ) {
257
  Brizy_Logger::instance()->exception( $exception );
294
  do_action( 'brizy_global_data_updated' );
295
  }
296
 
 
297
  $this->success( $project->createResponse() );
298
  } catch ( Exception $exception ) {
299
  Brizy_Logger::instance()->exception( $exception );
308
  public function get_item() {
309
  try {
310
  $this->verifyNonce( self::nonce );
311
+
312
+ if ( ! $this->post ) {
313
+ throw new Exception( 'Invalid post provided' );
314
+ }
315
+
316
  $data = $this->post->createResponse();
317
  $data['is_index'] = true;
318
 
331
  try {
332
  $this->verifyNonce( self::nonce );
333
 
334
+ $postId = (int) $this->param( 'post_id' );
335
  $defaultFields = [ 'ID', 'post_title', 'post_content' ];
336
+ $post_fields = array_intersect( (array)$this->param( 'fields' ), $defaultFields );
337
 
338
  if ( count( $post_fields ) == 0 ) {
339
  $post_fields = $defaultFields;
345
 
346
  $post = get_post( $postId, ARRAY_A );
347
 
348
+ if ( ! $post ) {
349
  $this->error( 404, 'Invalid post id' );
350
  }
351
 
369
  $data = stripslashes( $this->param( 'data' ) );
370
  $atemplate = $this->param( 'template' );
371
  $dataVersion = (int) stripslashes( $this->param( 'dataVersion' ) );
372
+ $status = stripslashes( $this->param( 'status' ) );
373
+
374
+ if ( ! in_array( $status, [ 'publish', 'draft','pending','private','future' ] ) ) {
375
+ $this->error( 400, "Invalid post type" );
376
+ }
377
 
378
  if ( $atemplate ) {
379
  $this->post->set_template( $atemplate );
385
  $this->post->set_needs_compile( true );
386
  }
387
 
388
+ $this->post->getWpPost()->post_status = $status;
389
+
390
  if ( (int) $this->param( 'is_autosave' ) == 1 ) {
391
  $this->post->save( 1 );
392
  } else {
423
  }
424
  }
425
 
426
+ public function placeholder_content() {
427
+ try {
428
+ $this->verifyNonce( self::nonce );
429
+ $postId = $this->param( 'post_id' );
430
+ $placeholders = $this->param( 'placeholders' ) ;
431
+
432
+ if ( ! $placeholders ) {
433
+ throw new Exception( 'Placeholder string not provided.', 400 );
434
+ }
435
+
436
+ global $post;
437
+
438
+ $post = $this->getPostSample( $postId );
439
+
440
+ setup_postdata( $post );
441
+
442
+ $contents = [];
443
+ foreach ( $placeholders as $placeholder ) {
444
+ $placeholder = stripslashes($placeholder);
445
+ $contents[] = apply_filters( 'brizy_content', $placeholder, Brizy_Editor_Project::get(), $post );
446
+ }
447
+
448
+ $this->success( array(
449
+ 'placeholders' => $contents
450
+ ) );
451
+
452
+ } catch ( Exception $exception ) {
453
+ Brizy_Logger::instance()->exception( $exception );
454
+ $this->error( $exception->getCode(), $exception->getMessage() );
455
+ }
456
+ }
457
+
458
+ private function getPostSample( $templateId ) {
459
+ $wp_post = get_post( $templateId );
460
+ if ( $wp_post->post_type !== Brizy_Admin_Templates::CP_TEMPLATE ) {
461
+ return $wp_post;
462
+ }
463
+
464
+
465
+ $ruleManager = new Brizy_Admin_Rules_Manager();
466
+ $rules = $ruleManager->getRules( $wp_post->ID );
467
+ $rule = null;
468
+
469
+ // find first include rule
470
+ foreach ( $rules as $rule ) {
471
+ /**
472
+ * @var Brizy_Admin_Rule $rule ;
473
+ */
474
+ if ( $rule->getType() == Brizy_Admin_Rule::TYPE_INCLUDE ) {
475
+ break;
476
+ }
477
+ }
478
+
479
+ if ( $rule ) {
480
+
481
+ switch ( $rule->getAppliedFor() ) {
482
+ case Brizy_Admin_Rule::POSTS :
483
+ $args = array(
484
+ 'post_type' => $rule->getEntityType(),
485
+ );
486
+
487
+ if ( count( $rule->getEntityValues() ) ) {
488
+ $args['post__in'] = $rule->getEntityValues();
489
+ }
490
+ $array = get_posts( $args );
491
+
492
+ return array_pop( $array );
493
+ break;
494
+ case Brizy_Admin_Rule::TAXONOMY :
495
+ $args = array(
496
+ 'taxonomy' => $rule->getEntityType(),
497
+ 'hide_empty' => false,
498
+ );
499
+ if ( count( $rule->getEntityValues() ) ) {
500
+ $args['term_taxonomy_id'] = $rule->getEntityValues();
501
+ }
502
+
503
+ $array = get_terms( $args );
504
+
505
+ return array_pop( $array );
506
+ break;
507
+ case Brizy_Admin_Rule::ARCHIVE :
508
+ return null;
509
+ break;
510
+ case Brizy_Admin_Rule::TEMPLATE :
511
+
512
+ switch ( $rule->getEntityType() ) {
513
+ case 'author':
514
+ $authors = get_users();
515
+
516
+ return array_pop( $authors );
517
+ break;
518
+
519
+ case '404':
520
+ case 'search':
521
+ return null;
522
+ break;
523
+ case 'home_page':
524
+ $get_option = get_option( 'page_for_posts' );
525
+
526
+ if ( $get_option ) {
527
+ return get_post( $get_option );
528
+ }
529
+ break;
530
+ case 'front_page':
531
+ $get_option = get_option( 'page_on_front' );
532
+
533
+ if ( $get_option ) {
534
+ return get_post( $get_option );
535
+ }
536
+ break;
537
+ }
538
+
539
+ break;
540
+ }
541
+
542
+ }
543
+ }
544
+
545
  public function get_post_objects() {
546
 
547
  global $wp_post_types;
557
  } ) );
558
  }
559
 
560
+ add_filter( 'posts_where', array( $this, 'brizy_post_title_filter' ), 10, 2 );
561
+ $posts = Brizy_Editor_Post::get_post_list( $searchTerm, $postType, $excludePostType );
562
+ remove_filter( 'posts_where', array( $this, 'brizy_post_title_filter' ), 10 );
563
 
564
  $this->success( array( 'filter_term' => $searchTerm, 'posts' => $posts ) );
565
  }
582
  $this->success( $items );
583
  }
584
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
585
  public function brizy_post_title_filter( $where, $wp_query = null ) {
586
 
587
  global $wpdb;
674
  $uid = get_post_meta( $attachmentId, 'brizy_post_uid', true );
675
 
676
  if ( ! $uid ) {
677
+ $file = get_attached_file( $attachmentId );
678
+ $path_parts = pathinfo($file);
679
+ $uid = "wp-" . md5( $attachmentId . time() ).'.'.$path_parts['extension'];
680
  update_post_meta( $attachmentId, 'brizy_post_uid', $uid );
681
  }
682
 
689
  }
690
  }
691
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
 
693
+ public function setTemplateType() {
694
+ try {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
695
 
696
+ $this->verifyNonce( self::nonce );
697
+ $templateId = $this->param( 'template_id' );
698
+ $templateType = $this->param( 'template_type' );
699
 
700
+ if ( get_post_type( $templateId ) != Brizy_Admin_Templates::CP_TEMPLATE ) {
701
+ $this->error( 400, 'Invalid template' );
702
+ }
703
 
704
+ $allowedTypes = [
705
+ Brizy_Admin_Templates::TYPE_SINGLE,
706
+ Brizy_Admin_Templates::TYPE_ARCHIVE,
707
+ Brizy_Admin_Templates::TYPE_SINGLE_PRODUCT,
708
+ Brizy_Admin_Templates::TYPE_PRODUCT_ARCHIVE
709
+ ];
710
 
711
+ if ( ! in_array( $templateType, $allowedTypes, true ) ) {
712
+ $this->error( 400, 'Invalid template type' );
713
+ }
714
 
715
+ update_post_meta( $templateId, Brizy_Admin_Templates::TEMPLATE_TYPE_KEY, $templateType );
 
716
 
717
+ $this->success( [] );
 
718
 
719
+ } catch ( Exception $e ) {
720
+ Brizy_Logger::instance()->error( $e->getMessage(), [ $e ] );
721
+ $this->error( 500, $e->getMessage() );
722
 
723
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
724
  }
 
 
725
  }
726
 
727
 
729
  $uid = get_post_meta( $attachmentId, 'brizy_attachment_uid', true );
730
 
731
  if ( ! $uid ) {
732
+ $file = get_attached_file( $attachmentId );
733
+ $path_parts = pathinfo($file);
734
+ $uid = "wp-" . md5( $attachmentId . time() ).'.'.$path_parts['extension'];
735
  update_post_meta( $attachmentId, 'brizy_attachment_uid', $uid );
736
  }
737
 
editor/api/client.php CHANGED
@@ -186,21 +186,22 @@ class Brizy_Editor_API_Client extends Brizy_Editor_Http_Client {
186
  */
187
  public function compile_page( Brizy_Editor_Project $project, $page_data, $config, $compiler_url ) {
188
 
 
189
 
190
  $body = apply_filters( 'brizy_compiler_params', array(
191
- 'page_id' => 1,
192
  'free_version' => BRIZY_EDITOR_VERSION,
193
  'download_url' => 'https://static.brizy.io/builds',
194
  'config_json' => json_encode( $config ),
195
  'pages_json' => json_encode( array(
196
  array(
197
- 'id' => 1,
198
  'data' => $page_data,
199
  'is_index' => true
200
  )
201
  ) ),
202
  'project_json' => json_encode( $project->createResponse() ),
203
- 'global_blocks_json' => json_encode( Brizy_Editor_Block::getBlocksByType( Brizy_Admin_Blocks_Main::CP_GLOBAL ) )
204
  ) );
205
 
206
 
@@ -317,4 +318,4 @@ class Brizy_Editor_API_Client extends Brizy_Editor_Http_Client {
317
  'data' => $project->getDataAsJson()
318
  ) );
319
  }
320
- }
186
  */
187
  public function compile_page( Brizy_Editor_Project $project, $page_data, $config, $compiler_url ) {
188
 
189
+ $blockManager = new Brizy_Admin_Blocks_Manager( Brizy_Admin_Blocks_Main::CP_GLOBAL );
190
 
191
  $body = apply_filters( 'brizy_compiler_params', array(
192
+ 'page_id' => (int)$config['wp']['page'],
193
  'free_version' => BRIZY_EDITOR_VERSION,
194
  'download_url' => 'https://static.brizy.io/builds',
195
  'config_json' => json_encode( $config ),
196
  'pages_json' => json_encode( array(
197
  array(
198
+ 'id' => (int)$config['wp']['page'],
199
  'data' => $page_data,
200
  'is_index' => true
201
  )
202
  ) ),
203
  'project_json' => json_encode( $project->createResponse() ),
204
+ 'global_blocks_json' => json_encode( $blockManager->createResponseForEntities( $blockManager->getEntities( [] ) ) )
205
  ) );
206
 
207
 
318
  'data' => $project->getDataAsJson()
319
  ) );
320
  }
321
+ }
editor/asset/attachment-aware.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ trait Brizy_Editor_Asset_AttachmentAware {
5
+ /**
6
+ * @param $media_name
7
+ *
8
+ * @return null|string
9
+ */
10
+ private function getAttachmentByMediaName( $media_name ) {
11
+
12
+ global $wpdb;
13
+
14
+ $posts_table = $wpdb->posts;
15
+ $meta_table = $wpdb->postmeta;
16
+
17
+ return $wpdb->get_var( $wpdb->prepare(
18
+ "SELECT
19
+ {$posts_table}.ID
20
+ FROM {$posts_table}
21
+ INNER JOIN {$meta_table} ON ( {$posts_table}.ID = {$meta_table}.post_id )
22
+ WHERE
23
+ ( {$meta_table}.meta_key = 'brizy_attachment_uid'
24
+ AND {$meta_table}.meta_value = %s )
25
+ AND {$posts_table}.post_type = 'attachment'
26
+ AND {$posts_table}.post_status = 'inherit'
27
+ GROUP BY {$posts_table}.ID
28
+ ORDER BY {$posts_table}.post_date DESC",
29
+ $media_name
30
+ ) );
31
+ }
32
+ }
editor/asset/cleaner.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Editor_Asset_Cleaner {
4
+ const BRIZY_CLEANER_CRON_KEY = 'brizy-asset-cleaner';
5
+
6
+
7
+ public static function _init() {
8
+ static $instance;
9
+
10
+ if ( ! $instance ) {
11
+ $instance = new self();
12
+ }
13
+ return $instance;
14
+ }
15
+
16
+ /**
17
+ * Brizy_Admin_Cloud_Cron constructor.
18
+ */
19
+ public function __construct() {
20
+
21
+ add_action( self::BRIZY_CLEANER_CRON_KEY, array( $this, 'assetClean' ) );
22
+
23
+ if ( ! wp_next_scheduled( self::BRIZY_CLEANER_CRON_KEY ) ) {
24
+ wp_schedule_event( time(), 'monthly', self::BRIZY_CLEANER_CRON_KEY );
25
+ }
26
+ }
27
+
28
+ public function assetClean() {
29
+ $urlBuilder = new Brizy_Editor_UrlBuilder( Brizy_Editor_Project::get() );
30
+ $uploadsDir = $urlBuilder->upload_path( 'brizy/' );
31
+
32
+ $resizeFolders = glob( $uploadsDir . '*/assets/images/iW*/' );
33
+
34
+ foreach ( $resizeFolders as $folder ) {
35
+ // check if there is an optimized folder
36
+ $optimizedFolderPath = $folder . 'optimized/';
37
+
38
+ if ( file_exists( $optimizedFolderPath ) ) {
39
+ continue;
40
+ }
41
+
42
+ $fs = new WP_Filesystem_Direct(null);
43
+ $fs->delete( $folder, true, 'd' );
44
+ }
45
+ }
46
+ }
editor/asset/media-asset-processor.php CHANGED
@@ -41,12 +41,15 @@ class Brizy_Editor_Asset_MediaAssetProcessor implements Brizy_Editor_Content_Pro
41
  public function process_external_asset_urls( $content, Brizy_Content_Context $context ) {
42
 
43
  $site_url = str_replace( array( 'http://', 'https://' ), '', home_url() );
44
-
45
  $site_url = str_replace( array( '/', '.' ), array( '\/', '\.' ), $site_url );
 
46
  $project = $context->getProject();
47
 
48
- preg_match_all( '/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
49
- preg_match_all( '/(http|https):\/\/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
 
 
 
50
 
51
  if ( ! isset( $matches[0] ) || count( $matches[0] ) == 0 ) {
52
  return $content;
@@ -63,24 +66,24 @@ class Brizy_Editor_Asset_MediaAssetProcessor implements Brizy_Editor_Content_Pro
63
  parse_str( $parsed_url['query'], $params );
64
 
65
 
66
- if ( ! isset( $params[ Brizy_Public_CropProxy::ENDPOINT ] ) ) {
67
  continue;
68
  }
69
 
70
- $post_id = wp_is_post_revision( (int) $params[ Brizy_Public_CropProxy::ENDPOINT_POST ] ) ? wp_get_post_parent_id( (int) $params[ Brizy_Public_CropProxy::ENDPOINT_POST ] ) : (int) $params[ Brizy_Public_CropProxy::ENDPOINT_POST ];
71
  $media_cache = new Brizy_Editor_CropCacheMedia( $project, $post_id );
72
 
73
  $new_url = null;
74
 
75
- $media_path = $this->get_attachment_file_by_uid( $params[ Brizy_Public_CropProxy::ENDPOINT ] );
76
 
77
  if ( ! $media_path ) {
78
- return $content;
79
  }
80
 
81
  try {
82
 
83
- $crop_media_path = $media_cache->crop_media( $media_path, $params[ Brizy_Public_CropProxy::ENDPOINT_FILTER ], false );
84
 
85
  $urlBuilder = new Brizy_Editor_UrlBuilder( $project, $post_id );
86
  $local_media_url = str_replace( $urlBuilder->upload_path(), $urlBuilder->upload_url(), $crop_media_path );
@@ -128,4 +131,4 @@ class Brizy_Editor_Asset_MediaAssetProcessor implements Brizy_Editor_Content_Pro
128
 
129
  return get_attached_file( $attachment );
130
  }
131
- }
41
  public function process_external_asset_urls( $content, Brizy_Content_Context $context ) {
42
 
43
  $site_url = str_replace( array( 'http://', 'https://' ), '', home_url() );
 
44
  $site_url = str_replace( array( '/', '.' ), array( '\/', '\.' ), $site_url );
45
+
46
  $project = $context->getProject();
47
 
48
+ $endpoint = Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT );
49
+ $endpoint_post = Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT_POST );
50
+ $endpoint_filter = Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT_FILTER );
51
+
52
+ preg_match_all( '/(http|https):\/\/' . $site_url . '\/?(\?' . $endpoint . '=(.[^"\',\s)]*))/im', $content, $matches );
53
 
54
  if ( ! isset( $matches[0] ) || count( $matches[0] ) == 0 ) {
55
  return $content;
66
  parse_str( $parsed_url['query'], $params );
67
 
68
 
69
+ if ( ! isset( $params[ $endpoint ] ) ) {
70
  continue;
71
  }
72
 
73
+ $post_id = wp_is_post_revision( (int) $params[ $endpoint_post ] ) ? wp_get_post_parent_id( (int) $params[ $endpoint_post ] ) : (int) $params[ $endpoint_post ];
74
  $media_cache = new Brizy_Editor_CropCacheMedia( $project, $post_id );
75
 
76
  $new_url = null;
77
 
78
+ $media_path = $this->get_attachment_file_by_uid( $params[ $endpoint ] );
79
 
80
  if ( ! $media_path ) {
81
+ continue;
82
  }
83
 
84
  try {
85
 
86
+ $crop_media_path = $media_cache->crop_media( $media_path, $params[ $endpoint_filter ], false );
87
 
88
  $urlBuilder = new Brizy_Editor_UrlBuilder( $project, $post_id );
89
  $local_media_url = str_replace( $urlBuilder->upload_path(), $urlBuilder->upload_url(), $crop_media_path );
131
 
132
  return get_attached_file( $attachment );
133
  }
134
+ }
editor/asset/optimize/bunny-cdn-optimizer.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Editor_Asset_Optimize_BunnyCdnOptimizer implements Brizy_Editor_Asset_Optimize_OptimizerInterface {
4
+
5
+ const ID = 'bunny-cdn';
6
+
7
+ private $proxy = "";
8
+
9
+ /**
10
+ * Brizy_Editor_Asset_Optimize_BunnyCdnOptimizer constructor.
11
+ *
12
+ * @param $settings
13
+ *
14
+ * @throws Exception
15
+ */
16
+ public function __construct( $settings ) {
17
+ $this->proxy = Brizy_Config::CDN;
18
+ }
19
+
20
+ public function validateConfig() {
21
+ return true;
22
+ }
23
+
24
+ /**
25
+ * @param $sourcePath
26
+ * @param $targetPath
27
+ *
28
+ * @return mixed
29
+ */
30
+ public function optimize( $sourcePath, $targetPath ) {
31
+
32
+ $params = array(
33
+ "file" => new CURLFile( $sourcePath )
34
+ );
35
+
36
+ $file_upload_request = function ( $handle_or_parameters, $request = '', $url = '' ) use ( $params ) {
37
+ $this->updateWPHTTPRequest( $handle_or_parameters, $params );
38
+ };
39
+ // handle cURL requests
40
+ add_action( 'http_api_curl', $file_upload_request, 10 );
41
+ // handle fsockopen
42
+ add_action( 'requests-fsockopen.before_send', $file_upload_request, 10, 3 );
43
+ $http = new WP_Http();
44
+
45
+ $response = $http->post( $this->proxy, array(
46
+ 'headers' => [ 'Content-Type' => 'multipart/form-data' ],
47
+ 'body' => $params,
48
+ 'timeout' => 40
49
+ ) );
50
+
51
+ remove_action( 'http_api_curl', $file_upload_request );
52
+ remove_action( 'requests-fsockopen.before_send', $file_upload_request );
53
+
54
+ $body = wp_remote_retrieve_body( $response );
55
+
56
+ $jsonFile = json_decode( $body );
57
+
58
+ if ( $jsonFile && $jsonFile->data ) {
59
+ $file_get_contents = file_get_contents( $jsonFile->data->url );
60
+
61
+ file_put_contents( $targetPath, $file_get_contents );
62
+
63
+ $http = new WP_Http();
64
+
65
+ $response = $http->request( $this->proxy, array(
66
+ 'method' => "DELETE",
67
+ 'headers' => [ 'Content-Type' => 'application/json' ],
68
+ 'body' => json_encode( $jsonFile->data ),
69
+ 'timeout' => 40
70
+ ) );
71
+
72
+ if ( wp_remote_retrieve_response_code( $response ) == 204 ) {
73
+ return true;
74
+ }
75
+ }
76
+ return false;
77
+
78
+ }
79
+
80
+ /**
81
+ * @return string
82
+ */
83
+ public static function getId() {
84
+ return self::ID;
85
+ }
86
+
87
+ private function updateWPHTTPRequest( &$handle_or_parameters, $form_body_arguments ) {
88
+ if ( function_exists( 'curl_init' ) && function_exists( 'curl_exec' ) ) {
89
+ curl_setopt( $handle_or_parameters, CURLOPT_POSTFIELDS, $form_body_arguments );
90
+ } elseif ( function_exists( 'fsockopen' ) ) {
91
+ $form_fields = [];
92
+ $form_files = [];
93
+ foreach ( $form_body_arguments as $name => $value ) {
94
+ if ( file_exists( $value ) ) {
95
+ // Not great for large files since it dumps into memory but works well for small files
96
+ $form_files[ $name ] = file_get_contents( $value );
97
+ } else {
98
+ $form_fields[ $name ] = $value;
99
+ }
100
+ }
101
+
102
+ function build_data_files( $boundary, $fields, $files ) {
103
+ $data = '';
104
+ $eol = "\r\n";
105
+
106
+ $delimiter = '-------------' . $boundary;
107
+
108
+ foreach ( $fields as $name => $content ) {
109
+ $data .= "--" . $delimiter . $eol
110
+ . 'Content-Disposition: form-data; name="' . $name . "\"" . $eol . $eol
111
+ . $content . $eol;
112
+ }
113
+
114
+ foreach ( $files as $name => $content ) {
115
+ $data .= "--" . $delimiter . $eol
116
+ . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
117
+ //. 'Content-Type: image/png'.$eol
118
+ . 'Content-Transfer-Encoding: binary' . $eol;
119
+
120
+ $data .= $eol;
121
+ $data .= $content . $eol;
122
+ }
123
+ $data .= "--" . $delimiter . "--" . $eol;
124
+
125
+ return $data;
126
+ }
127
+
128
+ $boundary = uniqid();
129
+ $handle_or_parameters = build_data_files( $boundary, $form_fields, $form_files );
130
+ }
131
+ }
132
+ }
editor/asset/optimize/optimizer.php CHANGED
@@ -11,7 +11,6 @@ class Brizy_Editor_Asset_Optimize_Optimizer {
11
  * Brizy_Editor_Asset_Optimize_Optimizer constructor.
12
  */
13
  public function __construct() {
14
-
15
  $this->optimizers = array( 'Brizy_Editor_Asset_Optimize_ShortpixelOptimizer' );
16
  }
17
 
@@ -29,11 +28,14 @@ class Brizy_Editor_Asset_Optimize_Optimizer {
29
  /**
30
  * @var Brizy_Editor_Asset_Optimize_OptimizerInterface $optimizer ;
31
  */
32
- if ( $settings = $settings[ $optimizerClass::getId() ] ) {
33
  $optimizer = new $optimizerClass( $settings );
34
-
35
- return $optimizer->optimize( $source, $target );
36
  }
 
 
 
37
  } catch ( Exception $e ) {
38
  Brizy_Logger::instance()->error( $e->getMessage(), [ $e ] );
39
  continue;
@@ -72,4 +74,4 @@ class Brizy_Editor_Asset_Optimize_Optimizer {
72
  return false;
73
  }
74
  }
75
- }
11
  * Brizy_Editor_Asset_Optimize_Optimizer constructor.
12
  */
13
  public function __construct() {
 
14
  $this->optimizers = array( 'Brizy_Editor_Asset_Optimize_ShortpixelOptimizer' );
15
  }
16
 
28
  /**
29
  * @var Brizy_Editor_Asset_Optimize_OptimizerInterface $optimizer ;
30
  */
31
+ if ( $settings = $settings[ $optimizerClass::getId() ] ?? null ) {
32
  $optimizer = new $optimizerClass( $settings );
33
+ } else {
34
+ $optimizer = new $optimizerClass( [] );
35
  }
36
+
37
+ return $optimizer->optimize( $source, $target );
38
+
39
  } catch ( Exception $e ) {
40
  Brizy_Logger::instance()->error( $e->getMessage(), [ $e ] );
41
  continue;
74
  return false;
75
  }
76
  }
77
+ }
editor/asset/optimize/shortpixel-optimizer.php CHANGED
@@ -32,6 +32,12 @@ class Brizy_Editor_Asset_Optimize_ShortpixelOptimizer implements Brizy_Editor_A
32
 
33
  public function validateConfig() {
34
 
 
 
 
 
 
 
35
  $logo_path = str_replace( '/', DIRECTORY_SEPARATOR, BRIZY_PLUGIN_PATH . "/admin/static/img/" );
36
  $source = $logo_path . "brizy.png";
37
 
@@ -52,6 +58,11 @@ class Brizy_Editor_Asset_Optimize_ShortpixelOptimizer implements Brizy_Editor_A
52
  * @return mixed
53
  */
54
  public function optimize( $sourcePath, $targetPath ) {
 
 
 
 
 
55
  ShortPixel\setKey( $this->apiKey );
56
  $result = ShortPixel\fromFile( $sourcePath )->optimize( $this->lossy )->wait( 100 )->toFiles( dirname( $targetPath ) );
57
 
32
 
33
  public function validateConfig() {
34
 
35
+ return false;
36
+
37
+ if ( $this->apiKey == '' || is_null( $this->apiKey ) ) {
38
+ return false;
39
+ }
40
+
41
  $logo_path = str_replace( '/', DIRECTORY_SEPARATOR, BRIZY_PLUGIN_PATH . "/admin/static/img/" );
42
  $source = $logo_path . "brizy.png";
43
 
58
  * @return mixed
59
  */
60
  public function optimize( $sourcePath, $targetPath ) {
61
+
62
+ if ( $this->apiKey == '' || is_null( $this->apiKey ) ) {
63
+ return false;
64
+ }
65
+
66
  ShortPixel\setKey( $this->apiKey );
67
  $result = ShortPixel\fromFile( $sourcePath )->optimize( $this->lossy )->wait( 100 )->toFiles( dirname( $targetPath ) );
68
 
editor/asset/static-file.php CHANGED
@@ -101,7 +101,7 @@ abstract class Brizy_Editor_Asset_StaticFile {
101
  include_once ABSPATH . "/wp-admin/includes/image.php";
102
  }
103
 
104
- $attach_data = wp_generate_attachment_metadata( $attachment_id, $relative_asset_path );
105
  wp_update_attachment_metadata( $attachment_id, $attach_data );
106
 
107
  return $attachment_id;
101
  include_once ABSPATH . "/wp-admin/includes/image.php";
102
  }
103
 
104
+ $attach_data = wp_generate_attachment_metadata( $attachment_id, $absolute_asset_path );
105
  wp_update_attachment_metadata( $attachment_id, $attach_data );
106
 
107
  return $attachment_id;
editor/asset/svg-asset-processor.php CHANGED
@@ -31,7 +31,8 @@ class Brizy_Editor_Asset_SvgAssetProcessor implements Brizy_Editor_Content_Proce
31
  $site_url = str_replace( array( '/', '.' ), array( '\/', '\.' ), $site_url );
32
 
33
  //preg_match_all( '/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
34
- preg_match_all( '/(http|https):\/\/' . $site_url . '\/?(\?brizy_attachment=(.[^"\',\s)]*))/im', $content, $matches );
 
35
 
36
  if ( ! isset( $matches[0] ) || count( $matches[0] ) == 0 ) {
37
  return $content;
@@ -47,11 +48,11 @@ class Brizy_Editor_Asset_SvgAssetProcessor implements Brizy_Editor_Content_Proce
47
 
48
  parse_str( $parsed_url['query'], $params );
49
 
50
- if ( ! isset( $params['brizy_attachment'] ) ) {
51
  continue;
52
  }
53
 
54
- $media_path = $this->get_attachment_file_by_uid( $params['brizy_attachment'] );
55
 
56
  if ( ! $media_path ) {
57
  return $content;
31
  $site_url = str_replace( array( '/', '.' ), array( '\/', '\.' ), $site_url );
32
 
33
  //preg_match_all( '/' . $site_url . '\/?(\?' . Brizy_Public_CropProxy::ENDPOINT . '=(.[^"\',\s)]*))/im', $content, $matches );
34
+ $brizy_attachment = Brizy_Editor::prefix('_attachment');
35
+ preg_match_all( '/(http|https):\/\/' . $site_url . '\/?(\?'.$brizy_attachment.'=(.[^"\',\s)]*))/im', $content, $matches );
36
 
37
  if ( ! isset( $matches[0] ) || count( $matches[0] ) == 0 ) {
38
  return $content;
48
 
49
  parse_str( $parsed_url['query'], $params );
50
 
51
+ if ( ! isset( $params[$brizy_attachment] ) ) {
52
  continue;
53
  }
54
 
55
+ $media_path = $this->get_attachment_file_by_uid( $params[$brizy_attachment] );
56
 
57
  if ( ! $media_path ) {
58
  return $content;
editor/block-position.php CHANGED
@@ -10,17 +10,24 @@ class Brizy_Editor_BlockPosition extends Brizy_Admin_Serializable {
10
  /**
11
  * @var int
12
  */
13
- protected $index;
 
 
 
 
 
14
 
15
  /**
16
  * Brizy_Editor_BlockPosition constructor.
17
  *
18
- * @param string $align
19
- * @param int $index
 
20
  */
21
- public function __construct( $align, $index ) {
22
- $this->align = $align;
23
- $this->index = $index;
 
24
  }
25
 
26
  /**
@@ -44,17 +51,35 @@ class Brizy_Editor_BlockPosition extends Brizy_Admin_Serializable {
44
  /**
45
  * @return int
46
  */
47
- public function getIndex() {
48
- return $this->index;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
  /**
52
- * @param int $index
53
  *
54
  * @return Brizy_Editor_BlockPosition
55
  */
56
- public function setIndex( $index ) {
57
- $this->index = $index;
58
 
59
  return $this;
60
  }
@@ -65,8 +90,9 @@ class Brizy_Editor_BlockPosition extends Brizy_Admin_Serializable {
65
  */
66
  public function serialize() {
67
  $get_object_vars = array(
68
- 'align' => $this->getAlign(),
69
- 'index' => $this->getIndex()
 
70
  );
71
 
72
  return serialize( $get_object_vars );
@@ -74,8 +100,9 @@ class Brizy_Editor_BlockPosition extends Brizy_Admin_Serializable {
74
 
75
  public function jsonSerialize() {
76
  $get_object_vars = array(
77
- 'index' => $this->getIndex(),
78
- 'align' => $this->getAlign()
 
79
  );
80
 
81
  return $get_object_vars;
@@ -83,15 +110,20 @@ class Brizy_Editor_BlockPosition extends Brizy_Admin_Serializable {
83
 
84
  public function convertToOptionValue() {
85
  $get_object_vars = array(
86
- 'align' => $this->getAlign(),
87
- 'index' => $this->getIndex()
 
88
  );
89
 
90
  return $get_object_vars;
91
  }
92
 
93
  static public function createFromSerializedData( $data ) {
94
- $instance = new self( $data['align'], $data['index'] );
 
 
 
 
95
 
96
  return $instance;
97
  }
10
  /**
11
  * @var int
12
  */
13
+ protected $top;
14
+
15
+ /**
16
+ * @var int
17
+ */
18
+ protected $bottom;
19
 
20
  /**
21
  * Brizy_Editor_BlockPosition constructor.
22
  *
23
+ * @param null $top
24
+ * @param null $bottom
25
+ * @param null $align
26
  */
27
+ public function __construct( $top = null, $bottom = null, $align = null ) {
28
+ $this->align = $align;
29
+ $this->top = $top;
30
+ $this->bottom = $bottom;
31
  }
32
 
33
  /**
51
  /**
52
  * @return int
53
  */
54
+ public function getTop() {
55
+ return $this->top;
56
+ }
57
+
58
+ /**
59
+ * @param int $top
60
+ *
61
+ * @return Brizy_Editor_BlockPosition
62
+ */
63
+ public function setTop( $top ) {
64
+ $this->top = (int) $top;
65
+
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * @return int
71
+ */
72
+ public function getBottom() {
73
+ return $this->bottom;
74
  }
75
 
76
  /**
77
+ * @param int $bottom
78
  *
79
  * @return Brizy_Editor_BlockPosition
80
  */
81
+ public function setBottom( $bottom ) {
82
+ $this->bottom = (int) $bottom;
83
 
84
  return $this;
85
  }
90
  */
91
  public function serialize() {
92
  $get_object_vars = array(
93
+ 'align' => $this->getAlign(),
94
+ 'top' => $this->getTop(),
95
+ 'bottom' => $this->getBottom()
96
  );
97
 
98
  return serialize( $get_object_vars );
100
 
101
  public function jsonSerialize() {
102
  $get_object_vars = array(
103
+ 'top' => $this->getTop(),
104
+ 'bottom' => $this->getBottom(),
105
+ 'align' => $this->getAlign()
106
  );
107
 
108
  return $get_object_vars;
110
 
111
  public function convertToOptionValue() {
112
  $get_object_vars = array(
113
+ 'align' => $this->getAlign(),
114
+ 'top' => $this->getTop(),
115
+ 'bottom' => $this->getBottom()
116
  );
117
 
118
  return $get_object_vars;
119
  }
120
 
121
  static public function createFromSerializedData( $data ) {
122
+ $instance = new self(
123
+ isset( $data['top'] ) ? $data['top'] : null,
124
+ isset( $data['bottom'] ) ? $data['bottom'] : null,
125
+ isset( $data['align'] ) ? $data['align'] : null
126
+ );
127
 
128
  return $instance;
129
  }
editor/block-screenshot-api.php CHANGED
@@ -4,30 +4,14 @@ class Brizy_Editor_BlockScreenshotApi extends Brizy_Admin_AbstractApi {
4
 
5
  const nonce = 'brizy-api';
6
 
7
- const AJAX_CREATE_BLOCK_SCREENSHOT = 'brizy_create_block_screenshot';
8
- const AJAX_UPDATE_BLOCK_SCREENSHOT = 'brizy_update_block_screenshot';
9
-
10
- const BLOCK_TYPE_NORMAL = 'normal';
11
- const BLOCK_TYPE_GLOBAL = 'global';
12
- const BLOCK_TYPE_SAVED = 'saved';
13
-
14
- //const BLOCK_TYPES = array( 'global', 'saved' );
15
-
16
- /**
17
- * @var Brizy_Editor_Project
18
- */
19
- private $project;
20
 
21
  /**
22
  * @var Brizy_Editor_Post
23
  */
24
  private $post;
25
 
26
- /**
27
- * @var Brizy_Editor_UrlBuilder
28
- */
29
- private $urlBuilder;
30
-
31
  /**
32
  * @var array
33
  */
@@ -42,7 +26,12 @@ class Brizy_Editor_BlockScreenshotApi extends Brizy_Admin_AbstractApi {
42
  */
43
  public function __construct( $post ) {
44
  $this->post = $post;
45
- $this->blockTypes = array( self::BLOCK_TYPE_NORMAL, self::BLOCK_TYPE_GLOBAL, self::BLOCK_TYPE_SAVED );
 
 
 
 
 
46
  parent::__construct();
47
  }
48
 
@@ -52,10 +41,12 @@ class Brizy_Editor_BlockScreenshotApi extends Brizy_Admin_AbstractApi {
52
 
53
 
54
  protected function initializeApiActions() {
55
- add_action( 'wp_ajax_' . self::AJAX_CREATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
56
- add_action( 'wp_ajax_nopriv_' . self::AJAX_CREATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
57
- add_action( 'wp_ajax_' . self::AJAX_UPDATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
58
- add_action( 'wp_ajax_nopriv_' . self::AJAX_UPDATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
 
 
59
  }
60
 
61
  public function saveBlockScreenShot() {
@@ -72,155 +63,32 @@ class Brizy_Editor_BlockScreenshotApi extends Brizy_Admin_AbstractApi {
72
  }
73
 
74
  // obtain the image content from POST
75
- $imageContent = null;
76
  $fileName = null;
77
  $screenId = null;
78
-
79
-
80
  $base64 = $_REQUEST['ibsf'];
81
  $imageContent = base64_decode( $base64 );
82
 
83
-
84
- if ( false === $imageContent ) {
85
- wp_send_json_error( array(
86
- 'success' => false,
87
- 'message' => esc_html__( 'Invalid image content', 'brizy' )
88
- ), 400 );
89
- }
90
-
91
- $img_type = 'jpeg';
92
-
93
  if ( isset( $_REQUEST['id'] ) ) {
94
  $screenId = $_REQUEST['id'];
95
  } else {
96
  $screenId = \Brizy\Utils\UUId::uuid();
97
  }
98
 
99
- $fileName = $screenId . '.' . $img_type;
100
-
101
- if ( ! $this->saveScreenshot( $_REQUEST['block_type'], $fileName, $imageContent ) ) {
102
  wp_send_json_error( array(
103
- 'message' => esc_html__( 'Unable to store the block thumbnail', 'brizy' )
104
- ), 500 );
105
- }
106
-
107
- wp_send_json_success( array( 'id' => $screenId, 'file_name' => $fileName ) );
108
- }
109
-
110
- protected function getFileExtensionByContent( $content ) {
111
- $tmpfname = tempnam( sys_get_temp_dir(), "blockScreenShot" );
112
-
113
- $handle = fopen( $tmpfname, "w" );
114
- fwrite( $handle, $content );
115
- fclose( $handle );
116
-
117
- $mimeType = wp_get_image_mime( $tmpfname );
118
-
119
- return $this->getExtentsionByMime( $mimeType );
120
- }
121
-
122
- /**
123
- * @param $filename
124
- * @param int $mode
125
- *
126
- * @return mixed|string
127
- */
128
- protected function getExtentsionByMime( $mimeType ) {
129
-
130
- $extensions = array(
131
- 'image/png' => 'png',
132
- 'image/jpeg' => 'jpeg',
133
- 'image/jpg' => 'jpg',
134
- 'image/gif' => 'gif',
135
- );
136
-
137
- if ( isset( $extensions[ $mimeType ] ) ) {
138
- return $extensions[ $mimeType ];
139
- }
140
-
141
- return null;
142
- }
143
-
144
- /**
145
- * @param $type
146
- * @param $blockFileName
147
- * @param $content
148
- *
149
- * @return bool
150
- */
151
- private function saveScreenshot( $type, $blockFileName, $content ) {
152
- try {
153
- $urlBuilder = new Brizy_Editor_UrlBuilder( Brizy_Editor_Project::get(), $this->post ? $this->post->getWpPostId() : null );
154
-
155
- switch ( $type ) {
156
- case self::BLOCK_TYPE_NORMAL:
157
- return $this->storeThumbnail( $content, $urlBuilder->page_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . $blockFileName ) );
158
- case self::BLOCK_TYPE_GLOBAL:
159
- return $this->storeThumbnail( $content, $urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'global' . DIRECTORY_SEPARATOR . $blockFileName ) );
160
- case self::BLOCK_TYPE_SAVED:
161
- return $this->storeThumbnail( $content, $urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'saved' . DIRECTORY_SEPARATOR . $blockFileName ) );
162
- }
163
- } catch ( Exception $e ) {
164
- return false;
165
- }
166
- }
167
-
168
- /**
169
- * @param $content
170
- * @param $filePath
171
- *
172
- * @return bool
173
- */
174
- private function storeThumbnail( $content, $filePath ) {
175
- $store_file = $this->storeFile( $content, $filePath );
176
-
177
- if ( $store_file ) {
178
- $store_file = $this->resizeImage( $filePath );
179
- }
180
-
181
- return $store_file;
182
- }
183
-
184
- /**
185
- * @param $content
186
- * @param $thumbnailFullPath
187
- *
188
- * @return bool
189
- */
190
- private function storeFile( $content, $thumbnailFullPath ) {
191
- $path = dirname( $thumbnailFullPath );
192
-
193
- if ( ! file_exists( $path ) ) {
194
- if ( ! @mkdir( $path, 0755, true ) ) {
195
- return false;
196
- }
197
  }
198
 
199
- return file_put_contents( $thumbnailFullPath, $content ) !== false;
200
- }
201
 
202
-
203
- /**
204
- * @param $thumbnailFullPath
205
- *
206
- * @return bool
207
- */
208
- private function resizeImage( $thumbnailFullPath ) {
209
- try {
210
- $imageEditor = wp_get_image_editor( $thumbnailFullPath );
211
-
212
- if ( $imageEditor instanceof WP_Error ) {
213
- throw new Exception( $imageEditor->get_error_message() );
214
- }
215
-
216
- $imageEditor->resize( 600, 600 );
217
- $result = $imageEditor->save( $thumbnailFullPath );
218
-
219
- return is_array( $result );
220
- } catch ( Exception $e ) {
221
- return false;
222
  }
223
  }
224
 
225
-
226
  }
4
 
5
  const nonce = 'brizy-api';
6
 
7
+ const AJAX_CREATE_BLOCK_SCREENSHOT = '_create_block_screenshot';
8
+ const AJAX_UPDATE_BLOCK_SCREENSHOT = '_update_block_screenshot';
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  /**
11
  * @var Brizy_Editor_Post
12
  */
13
  private $post;
14
 
 
 
 
 
 
15
  /**
16
  * @var array
17
  */
26
  */
27
  public function __construct( $post ) {
28
  $this->post = $post;
29
+ $this->blockTypes = array(
30
+ Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_NORMAL,
31
+ Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_GLOBAL,
32
+ Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_SAVED,
33
+ Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_LAYOUT
34
+ );
35
  parent::__construct();
36
  }
37
 
41
 
42
 
43
  protected function initializeApiActions() {
44
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
45
+ $pref_nopriv = 'wp_ajax_nopriv_' . Brizy_Editor::prefix();
46
+ add_action( $pref . self::AJAX_CREATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
47
+ add_action( $pref . self::AJAX_UPDATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
48
+ add_action( $pref_nopriv . self::AJAX_CREATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
49
+ add_action( $pref_nopriv . self::AJAX_UPDATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
50
  }
51
 
52
  public function saveBlockScreenShot() {
63
  }
64
 
65
  // obtain the image content from POST
 
66
  $fileName = null;
67
  $screenId = null;
68
+ $brizyPost = isset( $_REQUEST['post'] ) ? $_REQUEST['post'] : null;
 
69
  $base64 = $_REQUEST['ibsf'];
70
  $imageContent = base64_decode( $base64 );
71
 
 
 
 
 
 
 
 
 
 
 
72
  if ( isset( $_REQUEST['id'] ) ) {
73
  $screenId = $_REQUEST['id'];
74
  } else {
75
  $screenId = \Brizy\Utils\UUId::uuid();
76
  }
77
 
78
+ if ( false === $imageContent ) {
 
 
79
  wp_send_json_error( array(
80
+ 'success' => false,
81
+ 'message' => esc_html__( 'Invalid image content', 'brizy' )
82
+ ), 400 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  }
84
 
85
+ $manager = new Brizy_Editor_Screenshot_Manager( new Brizy_Editor_UrlBuilder( $brizyPost ) );
86
+ $result = $manager->saveScreenshot( $screenId, $_REQUEST['block_type'], $imageContent, $brizyPost );
87
 
88
+ if ( $result ) {
89
+ $screenPath = $manager->getScreenshot( $screenId, $brizyPost );
90
+ wp_send_json_success( array( 'id' => $screenId, 'file_name' => $screenPath ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  }
92
  }
93
 
 
94
  }
editor/block.php CHANGED
@@ -9,14 +9,44 @@
9
 
10
  class Brizy_Editor_Block extends Brizy_Editor_Post {
11
 
12
- use Brizy_Editor_AutoSaveAware;
13
 
 
 
 
 
 
 
 
 
 
14
  protected $position;
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  static protected $block_instance = null;
17
 
18
  public static function cleanClassCache() {
19
- self::$instance = array();
 
 
 
 
20
  }
21
 
22
  /**
@@ -29,6 +59,7 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
29
  public static function get( $apost, $uid = null ) {
30
 
31
  $wp_post_id = $apost;
 
32
  if ( $apost instanceof WP_Post ) {
33
  $wp_post_id = $apost->ID;
34
  }
@@ -40,26 +71,86 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
40
  return self::$block_instance[ $wp_post_id ] = new self( $wp_post_id, $uid );
41
  }
42
 
43
- public function createResponse() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- $data = array(
46
- 'uid' => $this->getUid(),
47
- 'status' => get_post_status( $this->getWpPostId() ),
48
- 'data' => $this->get_editor_data(),
49
- 'dataVersion' => $this->getCurrentDataVersion(),
50
- );
51
 
 
 
 
52
 
53
- if ( $this->getWpPost()->post_type === Brizy_Admin_Blocks_Main::CP_GLOBAL ) {
54
- $ruleManager = new Brizy_Admin_Rules_Manager();
55
- $data['position'] = $this->getPosition();
56
- $data['rules'] = $ruleManager->getRules( $this->getWpPostId() );
57
  }
58
 
59
- return $data;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  }
61
 
62
 
 
 
 
 
 
 
 
 
 
63
  public function __construct( $wp_post_id, $uid = null ) {
64
 
65
  if ( $uid ) {
@@ -89,44 +180,103 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
89
  return $this;
90
  }
91
 
 
 
 
 
 
 
92
  /**
93
- * @return mixed|string
94
  */
95
- protected function createUid() {
 
 
96
 
97
- $post_parent_id = $this->getWpPostId();
98
- $uid = get_post_meta( $post_parent_id, 'brizy_post_uid', true );
 
 
 
 
99
 
100
- if ( ! $uid && $this->uid ) {
101
- update_post_meta( $post_parent_id, 'brizy_post_uid', $this->uid );
102
- }
 
 
 
 
103
 
104
- if ( ! $this->uid && $uid ) {
105
- $this->uid = $uid;
106
- }
107
 
108
- return $this->uid;
 
 
109
  }
110
 
111
- public function setPosition( $position ) {
112
- $this->position = $position;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
  return $this;
115
  }
116
 
117
- public function getPosition() {
118
- return $this->position;
 
 
 
 
 
 
 
 
 
 
 
119
  }
120
 
121
  public function jsonSerialize() {
122
  $data = get_object_vars( $this );
123
  $data['editor_data'] = base64_decode( $data['editor_data'] );
 
124
 
125
  $ruleManager = new Brizy_Admin_Rules_Manager();
126
 
127
- $data['rules'] = $ruleManager->getRules( $this->getWpPostId() );
128
- $data['position'] = $this->getPosition();
 
 
 
 
 
 
 
 
 
129
 
 
 
 
 
130
  unset( $data['wp_post'] );
131
 
132
  return $data;
@@ -136,18 +286,52 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
136
  parent::loadInstanceData();
137
  $storage = $this->getStorage();
138
  $storage_post = $storage->get( self::BRIZY_POST, false );
139
- if ( isset( $storage_post['position'] ) ) {
140
- $this->position = $storage_post['position'];
 
 
 
 
 
 
141
  }
 
 
 
 
 
 
 
 
 
142
  }
143
 
144
  public function convertToOptionValue() {
 
145
  $data = parent::convertToOptionValue();
146
 
147
- $data['position'] = $this->getPosition();
 
 
 
148
 
149
- $ruleManager = new Brizy_Admin_Rules_Manager();
150
- $data['rules'] = $ruleManager->getRules( $this->getWpPostId() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
 
152
  return $data;
153
  }
@@ -162,7 +346,9 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
162
  * @var Brizy_Editor_Block $autosave ;
163
  */
164
  $autosave = parent::populateAutoSavedData( $autosave );
165
- $autosave->setPosition( $this->getPosition() );
 
 
166
 
167
  return $autosave;
168
  }
@@ -172,7 +358,7 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
172
  * @param array $arags
173
  *
174
  * @return array
175
- * @throws Brizy_Editor_Exceptions_NotFound
176
  */
177
  public static function getBlocksByType( $type, $arags = array() ) {
178
 
@@ -201,9 +387,23 @@ class Brizy_Editor_Block extends Brizy_Editor_Post {
201
 
202
  if ( $autosave !== 1 ) {
203
  $this->savePost();
 
204
  do_action( 'brizy_global_data_updated' );
205
  }
 
 
 
 
 
 
 
 
 
 
 
206
 
 
 
207
  }
208
 
209
- }
9
 
10
  class Brizy_Editor_Block extends Brizy_Editor_Post {
11
 
 
12
 
13
+ use Brizy_Editor_AutoSaveAware, Brizy_Editor_Synchronizable;
14
+
15
+ const BRIZY_META = 'brizy-meta';
16
+ const BRIZY_MEDIA = 'brizy-media';
17
+ const BRIZY_POSITION = 'brizy-position';
18
+
19
+ /**
20
+ * @var Brizy_Editor_BlockPosition
21
+ */
22
  protected $position;
23
 
24
+ /**
25
+ * @var string
26
+ */
27
+ protected $meta;
28
+
29
+ /**
30
+ * @var string
31
+ */
32
+ protected $media;
33
+
34
+ /**
35
+ * @var Brizy_Admin_Rule[]
36
+ */
37
+ protected $rules;
38
+
39
+ /**
40
+ * @var self;
41
+ */
42
  static protected $block_instance = null;
43
 
44
  public static function cleanClassCache() {
45
+ self::$block_instance = array();
46
+ }
47
+
48
+ protected function canBeSynchronized() {
49
+ return $this->isSavedBlock();
50
  }
51
 
52
  /**
59
  public static function get( $apost, $uid = null ) {
60
 
61
  $wp_post_id = $apost;
62
+
63
  if ( $apost instanceof WP_Post ) {
64
  $wp_post_id = $apost->ID;
65
  }
71
  return self::$block_instance[ $wp_post_id ] = new self( $wp_post_id, $uid );
72
  }
73
 
74
+ public function createResponse( $fields = array() ) {
75
+ if ( empty( $fields ) ) {
76
+ $fields = array(
77
+ 'uid',
78
+ 'id',
79
+ 'meta',
80
+ 'data',
81
+ 'status',
82
+ 'position',
83
+ 'rules',
84
+ 'dataVersion',
85
+ 'synchronized',
86
+ 'synchronizable',
87
+ 'isCloudEntity'
88
+ );
89
+ }
90
 
91
+ $global = array();
 
 
 
 
 
92
 
93
+ if ( in_array( 'uid', $fields ) ) {
94
+ $global['uid'] = $this->getUid();
95
+ }
96
 
97
+ if ( in_array( 'status', $fields ) ) {
98
+ $global['status'] = get_post_status( $this->getWpPostId() );
 
 
99
  }
100
 
101
+ if ( in_array( 'dataVersion', $fields ) ) {
102
+ $global['dataVersion'] = $this->getCurrentDataVersion();
103
+ }
104
+
105
+ if ( in_array( 'data', $fields ) ) {
106
+ $global['data'] = $this->get_editor_data();
107
+ }
108
+
109
+ if ( in_array( 'meta', $fields ) ) {
110
+ $global['meta'] = $this->getMeta();
111
+ }
112
+
113
+
114
+ if ( $this->getWpPost()->post_type == Brizy_Admin_Blocks_Main::CP_SAVED ) {
115
+
116
+ if ( in_array( 'isCloudEntity', $fields ) ) {
117
+ $global['isCloudEntity'] = false;
118
+ }
119
+
120
+ if ( in_array( 'synchronized', $fields ) ) {
121
+ $global['synchronized'] = $this->isSynchronized( Brizy_Editor_Project::get()->getCloudAccountId() );
122
+ }
123
+
124
+ if ( in_array( 'synchronizable', $fields ) ) {
125
+ $global['synchronizable'] = $this->isSynchronizable();
126
+ }
127
+
128
+
129
+ }
130
+
131
+ if ( $this->getWpPost()->post_type == Brizy_Admin_Blocks_Main::CP_GLOBAL ) {
132
+ if ( in_array( 'position', $fields ) && $this->getPosition() ) {
133
+ $global['position'] = $this->getPosition()->convertToOptionValue();
134
+ }
135
+ if ( in_array( 'rules', $fields ) ) {
136
+ $ruleManager = new Brizy_Admin_Rules_Manager();
137
+ $global['rules'] = $ruleManager->getRules( $this->getWpPostId() );
138
+ }
139
+ }
140
+
141
+ return $global;
142
  }
143
 
144
 
145
+ /**
146
+ * Brizy_Editor_Block constructor.
147
+ *
148
+ * @param $wp_post_id
149
+ * @param null $uid
150
+ *
151
+ * @throws Brizy_Editor_Exceptions_NotFound
152
+ * @throws Brizy_Editor_Exceptions_UnsupportedPostType
153
+ */
154
  public function __construct( $wp_post_id, $uid = null ) {
155
 
156
  if ( $uid ) {
180
  return $this;
181
  }
182
 
183
+ public function setPosition( $position ) {
184
+ $this->position = $position;
185
+
186
+ return $this;
187
+ }
188
+
189
  /**
190
+ * @return object
191
  */
192
+ public function getPosition() {
193
+ return $this->position;
194
+ }
195
 
196
+ /**
197
+ * @return Brizy_Admin_Rule[]
198
+ */
199
+ public function getRules() {
200
+ return $this->rules;
201
+ }
202
 
203
+ /**
204
+ * @param Brizy_Admin_Rule[] $rules
205
+ *
206
+ * @return Brizy_Editor_Block
207
+ */
208
+ public function setRules( $rules ) {
209
+ $this->rules = $rules;
210
 
211
+ return $this;
212
+ }
 
213
 
214
+
215
+ public function isGlobalBlock() {
216
+ return $this->getWpPost() instanceof WP_Post && $this->getWpPost()->post_type == Brizy_Admin_Blocks_Main::CP_GLOBAL;
217
  }
218
 
219
+ public function isSavedBlock() {
220
+ return $this->getWpPost() instanceof WP_Post && $this->getWpPost()->post_type == Brizy_Admin_Blocks_Main::CP_SAVED;
221
+ }
222
+
223
+
224
+ /**
225
+ * @return array
226
+ */
227
+ public function getMeta() {
228
+ return $this->meta;
229
+ }
230
+
231
+ /**
232
+ * @param string $meta
233
+ *
234
+ * @return Brizy_Editor_Block
235
+ */
236
+ public function setMeta( $meta ) {
237
+ $this->meta = $meta;
238
 
239
  return $this;
240
  }
241
 
242
+ public function getMedia() {
243
+ return $this->media;
244
+ }
245
+
246
+ /**
247
+ * @param string $media
248
+ *
249
+ * @return Brizy_Editor_Block
250
+ */
251
+ public function setMedia( $media ) {
252
+ $this->media = $media;
253
+
254
+ return $this;
255
  }
256
 
257
  public function jsonSerialize() {
258
  $data = get_object_vars( $this );
259
  $data['editor_data'] = base64_decode( $data['editor_data'] );
260
+ $data['rules'] = [];
261
 
262
  $ruleManager = new Brizy_Admin_Rules_Manager();
263
 
264
+ $rules = $ruleManager->getRules( $this->getWpPostId() );
265
+ foreach ( $rules as $rule ) {
266
+ $data['rules'][] = $rule->jsonSerialize();
267
+ }
268
+
269
+
270
+ $data['position'] = null;
271
+
272
+ if ( $this->getPosition() ) {
273
+ $data['position'] = $this->getPosition()->jsonSerialize();
274
+ }
275
 
276
+ $data['meta'] = $this->getMeta();
277
+ $data['media'] = $this->getMedia();
278
+ $data['cloudId'] = $this->getCloudId();
279
+ $data['cloudAccountId'] = $this->getCloudAccountId();
280
  unset( $data['wp_post'] );
281
 
282
  return $data;
286
  parent::loadInstanceData();
287
  $storage = $this->getStorage();
288
  $storage_post = $storage->get( self::BRIZY_POST, false );
289
+
290
+ $this->position = null;
291
+
292
+ $ruleManager = new Brizy_Admin_Rules_Manager();
293
+ $this->setRules( $ruleManager->getRules( $this->getWpPostId() ) );
294
+
295
+ if ( isset( $storage_post['cloudId'] ) ) {
296
+ $this->setCloudId( $storage_post['cloudId'] );
297
  }
298
+
299
+ if ( isset( $storage_post['cloudAccountId'] ) ) {
300
+ $this->setCloudAccountId( $storage_post['cloudAccountId'] );
301
+ }
302
+
303
+ $this->setPosition( Brizy_Editor_BlockPosition::createFromSerializedData( get_metadata( 'post', $this->getWpPostId(), self::BRIZY_POSITION, true ) ) );
304
+
305
+ $this->meta = get_metadata( 'post', $this->getWpPostId(), self::BRIZY_META, true );
306
+ $this->media = get_metadata( 'post', $this->getWpPostId(), self::BRIZY_MEDIA, true );
307
  }
308
 
309
  public function convertToOptionValue() {
310
+
311
  $data = parent::convertToOptionValue();
312
 
313
+ $ruleManager = new Brizy_Admin_Rules_Manager();
314
+
315
+ $data['position'] = null;
316
+ $data['rules'] = [];
317
 
318
+ if ( $this->getPosition() ) {
319
+ $data['position'] = $this->getPosition()->convertToOptionValue();
320
+ }
321
+
322
+ $rules = $ruleManager->getRules( $this->getWpPostId() );
323
+ foreach ( $rules as $rule ) {
324
+ $data['rules'][] = $rule->convertToOptionValue();
325
+ }
326
+
327
+ $data['cloudId'] = $this->getCloudId();
328
+ $data['cloudAccountId'] = $this->getCloudAccountId();
329
+ $data['media'] = $this->getMedia();
330
+
331
+ if ( $this->isSavedBlock() ) {
332
+ $data['synchronized'] = $this->isSynchronized( Brizy_Editor_Project::get()->getCloudAccountId() );
333
+ $data['synchronizable'] = $this->isSynchronizable();
334
+ }
335
 
336
  return $data;
337
  }
346
  * @var Brizy_Editor_Block $autosave ;
347
  */
348
  $autosave = parent::populateAutoSavedData( $autosave );
349
+
350
+ //$autosave->setPosition( $this->getPosition() );
351
+ //$autosave->setRules( $this->getRules() );
352
 
353
  return $autosave;
354
  }
358
  * @param array $arags
359
  *
360
  * @return array
361
+ * @throws Exception
362
  */
363
  public static function getBlocksByType( $type, $arags = array() ) {
364
 
387
 
388
  if ( $autosave !== 1 ) {
389
  $this->savePost();
390
+
391
  do_action( 'brizy_global_data_updated' );
392
  }
393
+ }
394
+
395
+ /**
396
+ * This will take all values from entity and save them to database
397
+ */
398
+ public function saveStorage() {
399
+ parent::saveStorage();
400
+ // save position
401
+ if ( $this->position instanceof Brizy_Editor_BlockPosition ) {
402
+ update_metadata( 'post', $this->getWpPostId(), self::BRIZY_POSITION, $this->position->convertToOptionValue() );
403
+ }
404
 
405
+ update_metadata( 'post', $this->getWpPostId(), self::BRIZY_META, $this->meta );
406
+ update_metadata( 'post', $this->getWpPostId(), self::BRIZY_MEDIA, $this->media );
407
  }
408
 
409
+ }
editor/constants.php CHANGED
@@ -1,9 +1,6 @@
1
  <?php
2
 
 
3
  class Brizy_Editor_Constants {
4
- const BRIZY = 'brizy';
5
- const EDIT_KEY = 'brizy-edit';
6
- const EDIT_KEY_IFRAME = 'brizy-edit-iframe';
7
  const USES_BRIZY = 'brizy-use-brizy';
8
- const CONTENT_META_KEY = 'brizy-content';
9
  }
1
  <?php
2
 
3
+
4
  class Brizy_Editor_Constants {
 
 
 
5
  const USES_BRIZY = 'brizy-use-brizy';
 
6
  }
editor/crop-cache-media.php CHANGED
@@ -2,6 +2,8 @@
2
 
3
  class Brizy_Editor_CropCacheMedia extends Brizy_Editor_Asset_StaticFile {
4
 
 
 
5
  const BASIC_CROP_TYPE = 1;
6
  const ADVANCED_CROP_TYPE = 2;
7
 
@@ -29,11 +31,12 @@ class Brizy_Editor_CropCacheMedia extends Brizy_Editor_Asset_StaticFile {
29
 
30
  /**
31
  * @param $madia_name
 
32
  *
33
- * @return string
34
- * @throws Exception
35
  */
36
- public function download_original_image( $madia_name ) {
37
 
38
  // Check if user is querying API
39
  if ( ! $madia_name ) {
@@ -41,7 +44,7 @@ class Brizy_Editor_CropCacheMedia extends Brizy_Editor_Asset_StaticFile {
41
  throw new InvalidArgumentException( "Invalid media file" );
42
  }
43
 
44
- if ( strpos( $madia_name, "wp-" ) === 0 ) {
45
  Brizy_Logger::instance()->error( 'Invalid try to download wordpress file from application server' );
46
  throw new InvalidArgumentException( "Invalid media file" );
47
  }
@@ -197,32 +200,5 @@ class Brizy_Editor_CropCacheMedia extends Brizy_Editor_Asset_StaticFile {
197
  return $resized_image_path;
198
  }
199
 
200
- /**
201
- * @param $media_name
202
- *
203
- * @return null|string
204
- */
205
- private function getAttachmentByMediaName( $media_name ) {
206
-
207
- global $wpdb;
208
-
209
- $pt = $wpdb->posts;
210
- $mt = $wpdb->postmeta;
211
-
212
- return $wpdb->get_var( $wpdb->prepare(
213
- "SELECT
214
- {$pt}.ID
215
- FROM {$pt}
216
- INNER JOIN {$mt} ON ( {$pt}.ID = {$mt}.post_id )
217
- WHERE
218
- ( {$mt}.meta_key = 'brizy_attachment_uid'
219
- AND {$mt}.meta_value = %s )
220
- AND {$pt}.post_type = 'attachment'
221
- AND {$pt}.post_status = 'inherit'
222
- GROUP BY {$pt}.ID
223
- ORDER BY {$pt}.post_date DESC",
224
- $media_name
225
- ) );
226
 
227
- }
228
  }
2
 
3
  class Brizy_Editor_CropCacheMedia extends Brizy_Editor_Asset_StaticFile {
4
 
5
+ use Brizy_Editor_Asset_AttachmentAware;
6
+
7
  const BASIC_CROP_TYPE = 1;
8
  const ADVANCED_CROP_TYPE = 2;
9
 
31
 
32
  /**
33
  * @param $madia_name
34
+ * @param bool $ignore_wp_media
35
  *
36
+ * @return false|string
37
+ * @throws Brizy_Editor_Exceptions_NotFound
38
  */
39
+ public function download_original_image( $madia_name, $ignore_wp_media=true ) {
40
 
41
  // Check if user is querying API
42
  if ( ! $madia_name ) {
44
  throw new InvalidArgumentException( "Invalid media file" );
45
  }
46
 
47
+ if ( $ignore_wp_media && strpos( $madia_name, "wp-" ) === 0 ) {
48
  Brizy_Logger::instance()->error( 'Invalid try to download wordpress file from application server' );
49
  throw new InvalidArgumentException( "Invalid media file" );
50
  }
200
  return $resized_image_path;
201
  }
202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
 
 
204
  }
editor/editor/editor.php CHANGED
@@ -1,812 +1,895 @@
1
  <?php
2
 
3
- class Brizy_Editor_Editor_Editor {
4
-
5
- /**
6
- * @var self
7
- */
8
- static private $insance;
9
-
10
- /**
11
- * @var array
12
- */
13
- static private $config;
14
-
15
- /**
16
- * @var Brizy_Editor_Post
17
- */
18
- private $post;
19
-
20
- /**
21
- * @var Brizy_Editor_Project
22
- */
23
- private $project;
24
-
25
- /**
26
- * @var Brizy_Editor_UrlBuilder
27
- */
28
- private $urlBuilder;
29
-
30
- /**
31
- * @param Brizy_Editor_Project $project
32
- * @param Brizy_Editor_Post $post
33
- *
34
- * @return Brizy_Editor_Editor_Editor
35
- */
36
- public static function get( Brizy_Editor_Project $project, Brizy_Editor_Post $post ) {
37
-
38
- $postId = $post && $post->getWpPostId() ? $post->getWpPostId() : 0;
39
- if ( isset( self::$insance[ $postId ] ) ) {
40
- return self::$insance[ $postId ];
41
- }
42
-
43
- return self::$insance[ $postId ] = new self( $project, $post );
44
- }
45
-
46
- /**
47
- * Brizy_Editor_Editor_Editor constructor.
48
- *
49
- * @param Brizy_Editor_Project $project
50
- * @param Brizy_Editor_Post $post
51
- */
52
- public function __construct( Brizy_Editor_Project $project, Brizy_Editor_Post $post = null ) {
53
- $this->post = $post;
54
- $this->project = $project;
55
- $this->urlBuilder = new Brizy_Editor_UrlBuilder( $project, $post ? $post->getWpPostId() : null );
56
- }
57
-
58
- private function getMode( $postType ) {
59
- switch ( $postType ) {
60
- case Brizy_Admin_Templates::CP_TEMPLATE:
61
- return 'template';
62
- case Brizy_Admin_Popups_Main::CP_POPUP:
63
- return 'internal_popup';
64
- default:
65
- return 'page';
66
- }
67
- }
68
-
69
- /**
70
- * @throws Exception
71
- */
72
- public function config() {
73
-
74
- $cachePostId = $this->post ? $this->post->getWpPostId() : 0;
75
- if ( isset( self::$config[ $cachePostId ] ) ) {
76
- return self::$config[ $cachePostId ];
77
- }
78
-
79
- global $wp_registered_sidebars;
80
-
81
- $wp_post_id = null;
82
- $preview_post_link = null;
83
- $change_template_url = null;
84
- $templates = null;
85
-
86
- $parent_post_type = get_post_type( $this->post->getWpPostId() );
87
- $wp_post_id = $this->post->getWpPostId();
88
- $preview_post_link = $this->getPreviewUrl( $this->post->getWpPost() );
89
-
90
- $change_template_url = set_url_scheme( admin_url( 'admin-post.php?post=' . $this->post->getWpPostId() . '&action=_brizy_change_template' ) );
91
- $templates = $this->post->get_templates();
92
-
93
- $mode = $this->getMode( $parent_post_type );
94
-
95
-
96
- $heartBeatInterval = (int) apply_filters( 'wp_check_post_lock_window', 150 );
97
- $config = array(
98
- 'user' => array( 'role' => 'admin' ),
99
- 'project' => array(
100
- 'id' => $this->project->getId(),
101
- 'status' => $this->getProjectStatus(),
102
- 'heartBeatInterval' => ( $heartBeatInterval > 10 && $heartBeatInterval < 30 ? $heartBeatInterval : 30 ) * 1000
103
- ),
104
- 'urls' => array(
105
- 'site' => home_url(),
106
- 'api' => home_url( '/wp-json/v1' ),
107
- 'assets' => $this->urlBuilder->editor_build_url(),
108
- 'image' => $this->urlBuilder->external_media_url() . "",
109
- 'blockThumbnails' => $this->urlBuilder->external_asset_url( 'thumbs' ) . "",
110
- 'templateThumbnails' => $this->urlBuilder->external_asset_url( 'thumbs' ) . "",
111
- 'templateIcons' => $this->urlBuilder->proxy_url( 'editor/icons' ),
112
- 'templateFonts' => $this->urlBuilder->external_fonts_url(),
113
- 'editorFonts' => home_url(),
114
- 'pagePreview' => $preview_post_link,
115
- 'about' => __bt( 'about-url', apply_filters( 'brizy_about_url', Brizy_Config::ABOUT_URL ) ),
116
- 'backToDashboard' => get_edit_post_link( $wp_post_id, null ),
117
-
118
- // wp specific
119
- 'changeTemplate' => $change_template_url,
120
- 'upgradeToPro' => __bt( 'upgrade-url', apply_filters( 'brizy_upgrade_to_pro_url', Brizy_Config::UPGRADE_TO_PRO_URL ) ),
121
- 'support' => __bt( 'support-url', apply_filters( 'brizy_support_url', Brizy_Config::SUPPORT_URL ) ),
122
- 'pluginSettings' => admin_url( 'admin.php?page=' . Brizy_Admin_Settings::menu_slug() ),
123
- 'dashboardNavMenu' => admin_url( 'nav-menus.php' ),
124
- 'customFile' => home_url( '?brizy_attachment=' )
125
- ),
126
- 'form' => array(
127
- 'submitUrl' => '{{brizy_dc_ajax_url}}?action=' . Brizy_Editor_Forms_Api::AJAX_SUBMIT_FORM
128
- ),
129
- 'serverTimestamp' => time(),
130
- 'menuData' => $this->get_menu_data(),
131
- 'wp' => array(
132
- 'permalink' => get_permalink( $wp_post_id ),
133
- 'page' => $wp_post_id,
134
- 'ruleMatches' => $this->getTempalteRuleMatches( $mode === 'template', $wp_post_id ),
135
- 'featuredImage' => $this->getThumbnailData( $wp_post_id ),
136
- 'pageAttachments' => array( 'images' => $this->get_page_attachments() ),
137
- 'templates' => $templates,
138
- 'api' => array(
139
- 'hash' => wp_create_nonce( Brizy_Editor_API::nonce ),
140
- 'url' => set_url_scheme( admin_url( 'admin-ajax.php' ) ),
141
-
142
- 'heartBeat' => Brizy_Editor_API::AJAX_HEARTBEAT,
143
- 'takeOver' => Brizy_Editor_API::AJAX_TAKE_OVER,
144
- 'lockProject' => Brizy_Editor_API::AJAX_LOCK_PROJECT,
145
- 'removeLock' => Brizy_Editor_API::AJAX_REMOVE_LOCK,
146
- 'getPage' => Brizy_Editor_API::AJAX_GET,
147
- 'getPostInfo' => Brizy_Editor_API::AJAX_GET_POST_INFO,
148
- 'updatePage' => Brizy_Editor_API::AJAX_UPDATE,
149
-
150
- 'getProject' => Brizy_Editor_API::AJAX_GET_PROJECT,
151
- 'setProject' => Brizy_Editor_API::AJAX_SET_PROJECT,
152
- 'setProjectMeta' => Brizy_Editor_API::AJAX_UPDATE_EDITOR_META_DATA,
153
-
154
- 'getGlobalBlockList' => Brizy_Admin_Blocks_Api::GET_GLOBAL_BLOCKS_ACTION,
155
- 'createGlobalBlock' => Brizy_Admin_Blocks_Api::CREATE_GLOBAL_BLOCK_ACTION,
156
- 'updateGlobalBlock' => Brizy_Admin_Blocks_Api::UPDATE_GLOBAL_BLOCK_ACTION,
157
- 'deleteGlobalBlock' => Brizy_Admin_Blocks_Api::DELETE_GLOBAL_BLOCK_ACTION,
158
- 'getRuleGroupList' => Brizy_Editor_API::RULE_GROUP_LIST,
159
- 'createRule' => Brizy_Admin_Rules_Api::CREATE_RULE_ACTION,
160
- 'createRules' => Brizy_Admin_Rules_Api::CREATE_RULES_ACTION,
161
- 'updateRules' => Brizy_Admin_Rules_Api::UPDATE_RULES_ACTION,
162
- 'deleteRule' => Brizy_Admin_Rules_Api::DELETE_RULE_ACTION,
163
- 'getRuleList' => Brizy_Admin_Rules_Api::LIST_RULE_ACTION,
164
- 'updateBlockPositions' => Brizy_Admin_Blocks_Api::UPDATE_BLOCK_POSITIONS_ACTION,
165
-
166
- 'getSavedBlockList' => Brizy_Admin_Blocks_Api::GET_SAVED_BLOCKS_ACTION,
167
- 'createSavedBlock' => Brizy_Admin_Blocks_Api::CREATE_SAVED_BLOCK_ACTION,
168
- 'updateSavedBlock' => Brizy_Admin_Blocks_Api::UPDATE_SAVED_BLOCK_ACTION,
169
- 'deleteSavedBlock' => Brizy_Admin_Blocks_Api::DELETE_SAVED_BLOCK_ACTION,
170
-
171
- 'media' => Brizy_Editor_API::AJAX_MEDIA,
172
- 'downloadMedia' => Brizy_Editor_API::AJAX_DOWNLOAD_MEDIA,
173
- 'getMediaUid' => Brizy_Editor_API::AJAX_MEDIA_METAKEY,
174
- 'getAttachmentUid' => Brizy_Editor_API::AJAX_CREATE_ATTACHMENT_UID,
175
- 'getServerTimeStamp' => Brizy_Editor_API::AJAX_TIMESTAMP,
176
-
177
-
178
- 'createBlockScreenshot' => Brizy_Editor_BlockScreenshotApi::AJAX_CREATE_BLOCK_SCREENSHOT,
179
- 'updateBlockScreenshot' => Brizy_Editor_BlockScreenshotApi::AJAX_UPDATE_BLOCK_SCREENSHOT,
180
-
181
- 'getSidebars' => Brizy_Editor_API::AJAX_SIDEBARS,
182
- 'shortcodeContent' => Brizy_Editor_API::AJAX_SHORTCODE_CONTENT,
183
- 'getMenus' => Brizy_Editor_API::AJAX_GET_MENU_LIST,
184
- 'getTerms' => Brizy_Editor_API::AJAX_GET_TERMS,
185
-
186
-
187
- 'getPostObjects' => Brizy_Editor_API::AJAX_GET_POST_OBJECTS, // ???
188
-
189
- 'setFeaturedImage' => Brizy_Editor_API::AJAX_SET_FEATURED_IMAGE,
190
- 'setFeaturedImageFocalPoint' => Brizy_Editor_API::AJAX_SET_FEATURED_IMAGE_FOCAL_POINT,
191
- 'removeFeaturedImage' => Brizy_Editor_API::AJAX_REMOVE_FEATURED_IMAGE,
192
-
193
- 'getForm' => Brizy_Editor_Forms_Api::AJAX_GET_FORM,
194
- 'createForm' => Brizy_Editor_Forms_Api::AJAX_CREATE_FORM,
195
- 'updateForm' => Brizy_Editor_Forms_Api::AJAX_UPDATE_FORM,
196
- 'deleteForm' => Brizy_Editor_Forms_Api::AJAX_DELETE_FORM,
197
- 'getIntegration' => Brizy_Editor_Forms_Api::AJAX_GET_INTEGRATION,
198
- 'createIntegration' => Brizy_Editor_Forms_Api::AJAX_CREATE_INTEGRATION,
199
- 'updateIntegration' => Brizy_Editor_Forms_Api::AJAX_UPDATE_INTEGRATION,
200
- 'deleteIntegration' => Brizy_Editor_Forms_Api::AJAX_DELETE_INTEGRATION,
201
-
202
- 'createFont' => Brizy_Admin_Fonts_Api::AJAX_CREATE_FONT_ACTION,
203
- 'deleteFont' => Brizy_Admin_Fonts_Api::AJAX_DELETE_FONT_ACTION,
204
- 'getFonts' => Brizy_Admin_Fonts_Api::AJAX_GET_FONTS_ACTION,
205
-
206
- 'getAccount' => Brizy_Editor_Accounts_Api::BRIZY_GET_ACCOUNT,
207
- 'getAccounts' => Brizy_Editor_Accounts_Api::BRIZY_GET_ACCOUNTS,
208
- 'addAccount' => Brizy_Editor_Accounts_Api::BRIZY_ADD_ACCOUNT,
209
- 'updateAccount' => Brizy_Editor_Accounts_Api::BRIZY_UPDATE_ACCOUNT,
210
- 'deleteAccount' => Brizy_Editor_Accounts_Api::BRIZY_DELETE_ACCOUNT,
211
-
212
- 'validateRecaptchaAccount' => Brizy_Editor_Forms_Api::AJAX_VALIDATE_RECAPTCHA_ACCOUNT,
213
-
214
- ),
215
- 'plugins' => array(
216
- 'dummy' => true,
217
- 'woocommerce' => $this->get_woocomerce_plugin_info(),
218
- ),
219
- 'hasSidebars' => count( $wp_registered_sidebars ) > 0,
220
- 'l10n' => $this->getTexts(),
221
- 'pageData' => apply_filters( 'brizy_page_data', array() ),
222
- 'availableRoles' => $this->roleList()
223
- ),
224
- 'mode' => $mode,
225
- 'applications' => array(
226
- 'form' => array(
227
- 'submitUrl' => '{{brizy_dc_ajax_url}}?action=' . Brizy_Editor_Forms_Api::AJAX_SUBMIT_FORM
228
- ),
229
- ),
230
- 'server' => array(
231
- 'maxUploadSize' => $this->fileUploadMaxSize()
232
- ),
233
- 'branding' => array( 'brizy' => __bt( 'brizy', 'Brizy' ) ),
234
- 'editorVersion' => BRIZY_EDITOR_VERSION
235
- );
236
-
237
- $manager = new Brizy_Editor_Accounts_ServiceAccountManager( Brizy_Editor_Project::get() );
238
-
239
- $config = $this->addRecaptchaAccounts( $manager, $config );
240
-
241
- $config = $this->addSocialAccounts( $manager, $config );
242
-
243
- return self::$config[ $cachePostId ] = apply_filters( 'brizy_editor_config', $config );
244
- }
245
-
246
- /**
247
- * @return object
248
- */
249
- private function get_page_attachments() {
250
- global $wpdb;
251
- $query = $wpdb->prepare(
252
- "SELECT
253
  pm.*
254
  FROM
255
  {$wpdb->prefix}postmeta pm
256
  JOIN {$wpdb->prefix}postmeta pm2 ON pm2.post_id=pm.post_id AND pm2.meta_key='brizy_post_uid' AND pm2.meta_value=%s
257
  WHERE pm.meta_key='brizy_attachment_uid'
258
- GROUP BY pm.post_id", $this->post->getUid() );
259
-
260
- $results = $wpdb->get_results( $query );
261
- $attachment_data = array();
262
- foreach ( $results as $row ) {
263
- $attachment_data[ $row->meta_value ] = true;
264
- }
265
-
266
- return (object) $attachment_data;
267
- }
268
-
269
- /**
270
- * @return array|null
271
- */
272
- private function get_woocomerce_plugin_info() {
273
- if ( function_exists( 'wc' ) && defined( 'WC_PLUGIN_FILE' ) ) {
274
- return array( 'version' => WooCommerce::instance()->version );
275
- }
276
-
277
- return null;
278
- }
279
-
280
- /**
281
- * @param $wp_post_id
282
- *
283
- * @return array|null
284
- */
285
- private function getThumbnailData( $wp_post_id ) {
286
- $post_thumbnail_id = get_post_thumbnail_id( $wp_post_id );
287
- $post_thumbnail = "";
288
-
289
- if ( $post_thumbnail_id ) {
290
- $post_thumbnail_focal_point = get_post_meta( $wp_post_id, 'brizy_attachment_focal_point', true );
291
-
292
- if ( ! is_array( $post_thumbnail_focal_point ) ) {
293
- $post_thumbnail_focal_point = array( 'x' => "", 'y' => "" );
294
- }
295
-
296
- $post_thumbnail = array(
297
- 'id' => $post_thumbnail_id,
298
- 'url' => get_the_post_thumbnail_url( $wp_post_id ),
299
- 'pointX' => isset( $post_thumbnail_focal_point['x'] ) ? $post_thumbnail_focal_point['x'] : "",
300
- 'pointY' => isset( $post_thumbnail_focal_point['y'] ) ? $post_thumbnail_focal_point['y'] : "",
301
- );
302
- }
303
-
304
- return $post_thumbnail;
305
- }
306
-
307
- /**
308
- * @param $wp_post
309
- *
310
- * @return null|string
311
- * @throws Brizy_Editor_Exceptions_NotFound
312
- * @throws Brizy_Editor_Exceptions_UnsupportedPostType
313
- */
314
- private function getPreviewUrl( $wp_post ) {
315
-
316
- if ( $wp_post->post_type == Brizy_Admin_Templates::CP_TEMPLATE ) {
317
-
318
- $ruleManager = new Brizy_Admin_Rules_Manager();
319
- $rules = $ruleManager->getRules( $wp_post->ID );
320
- $rule = null;
321
-
322
-
323
- if ( ! function_exists( 'addQueryStringToUrl' ) ) {
324
- function addQueryStringToUrl( $link, $query ) {
325
- $parsedUrl = parse_url( $link );
326
- $separator = ( ! isset( $parsedUrl['query'] ) || $parsedUrl['query'] == null ) ? '?' : '&';
327
- $link .= $separator . $query;
328
-
329
- return $link;
330
- }
331
- }
332
-
333
-
334
- // find first include rule
335
- foreach ( $rules as $rule ) {
336
- /**
337
- * @var Brizy_Admin_Rule $rule ;
338
- */
339
- if ( $rule->getType() == Brizy_Admin_Rule::TYPE_INCLUDE ) {
340
- break;
341
- }
342
- }
343
-
344
- if ( $rule ) {
345
-
346
- switch ( $rule->getAppliedFor() ) {
347
- case Brizy_Admin_Rule::POSTS :
348
- $args = array(
349
- 'post_type' => $rule->getEntityType(),
350
- );
351
-
352
- if ( count( $rule->getEntityValues() ) ) {
353
- $args['post__in'] = $rule->getEntityValues();
354
- }
355
-
356
- $array = get_posts( $args );
357
-
358
- foreach ( $array as $p ) {
359
-
360
- if ( $p->post_typ == 'attachment' ) {
361
- return addQueryStringToUrl( get_attachment_link( $p->ID ), 'preview=1' );
362
- }
363
-
364
- if ( ! Brizy_Editor::checkIfPostTypeIsSupported( $p->ID, false ) ||
365
- ! Brizy_Editor_Post::get( $p )->uses_editor() ) {
366
- $wp_post = $p;
367
- break;
368
- }
369
-
370
- }
371
- break;
372
- case Brizy_Admin_Rule::TAXONOMY :
373
- $args = array(
374
- 'taxonomy' => $rule->getEntityType(),
375
- 'hide_empty' => false,
376
- );
377
- if ( count( $rule->getEntityValues() ) ) {
378
- $args['term_taxonomy_id'] = $rule->getEntityValues();
379
- }
380
-
381
- $array = get_terms( $args );
382
-
383
- if ( count( $array ) == 0 ) {
384
- break;
385
- }
386
- $term = array_pop( $array );
387
- $link = get_term_link( $term );
388
-
389
- return addQueryStringToUrl( $link, 'preview=1' );
390
- break;
391
- case Brizy_Admin_Rule::ARCHIVE :
392
- if ( $rule->getEntityType() ) {
393
- $link = get_post_type_archive_link( $rule->getEntityType() );
394
-
395
- return addQueryStringToUrl( $link, 'preview=1' );
396
- }
397
-
398
- $link = $this->getOneArchiveLink();
399
-
400
- return addQueryStringToUrl( $link, 'preview=1' );
401
- break;
402
- case Brizy_Admin_Rule::TEMPLATE :
403
-
404
- // array( 'title' => 'Author page', 'value' => 'author', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
405
- // array( 'title' => 'Search page', 'value' => 'search', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
406
- // array( 'title' => 'Home page', 'value' => 'front_page', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
407
- // array( 'title' => '404 page', 'value' => '404', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
408
- // array( 'title' => 'Archive page', 'value' => '', 'groupValue' => Brizy_Admin_Rule::ARCHIVE ),
409
- switch ( $rule->getEntityType() ) {
410
- case 'author':
411
- $authors = get_users();
412
- $author = array_pop( $authors );
413
- $link = get_author_posts_url( $author->ID );
414
-
415
- return addQueryStringToUrl( $link, 'preview=1' );
416
- break;
417
-
418
- case 'search':
419
- return addQueryStringToUrl( get_search_link( 'find-me' ), 'preview=1' );
420
- break;
421
- case '404':
422
- return addQueryStringToUrl( get_home_url( null, (string) time() ), 'preview=1' );
423
- break;
424
- case 'home_page':
425
- $get_option = get_option( 'page_for_posts' );
426
-
427
- if ( $get_option ) {
428
- return addQueryStringToUrl( get_permalink( $get_option ), 'preview=1' );
429
- }
430
- break;
431
- case 'front_page':
432
- return addQueryStringToUrl( home_url(), 'preview=1' );
433
- break;
434
- }
435
-
436
- break;
437
- }
438
-
439
- }
440
- }
441
-
442
- return get_preview_post_link( $wp_post, array(
443
- 'preview_id' => $wp_post->ID,
444
- 'preview_nonce' => wp_create_nonce( 'post_preview_' . $wp_post->ID )
445
- ) );
446
- }
447
-
448
- /**
449
- * @return array
450
- */
451
- private function get_menu_data() {
452
- $menus = wp_get_nav_menus();
453
- $menu_data = array();
454
-
455
- foreach ( $menus as $menu ) {
456
-
457
- $custom_menu_data = get_term_meta( $menu->term_id, 'brizy_data', true );
458
-
459
- $menu_uid = get_term_meta( $menu->term_id, 'brizy_uid', true );
460
- if ( ! $menu_uid ) {
461
- $menu_uid = md5( $menu->term_id . time() );
462
- update_term_meta( $menu->term_id, 'brizy_uid', $menu_uid );
463
- }
464
-
465
- $amenu = array(
466
- 'id' => $menu_uid,
467
- 'name' => $menu->name,
468
- 'items' => array()
469
- );
470
-
471
- $amenu = (object) array_merge( $amenu, get_object_vars( is_object( $custom_menu_data ) ? $custom_menu_data : (object) array() ) );
472
-
473
- $menu_items = wp_get_nav_menu_items( $menu->term_id );
474
-
475
- $menu_items = $this->get_menu_tree( $menu_items );
476
-
477
- if ( count( $menu_items ) > 0 ) {
478
- $amenu->items = $menu_items;
479
- }
480
-
481
- $menu_data[] = $amenu;
482
- }
483
-
484
- return $menu_data;
485
- }
486
-
487
- /**
488
- * @param $items
489
- * @param int $parent
490
- *
491
- * @return array
492
- */
493
- private function get_menu_tree( $items, $parent = 0 ) {
494
- $result_items = array();
495
-
496
- foreach ( $items as $item ) {
497
- if ( (int) $item->menu_item_parent !== $parent ) {
498
- continue;
499
- }
500
-
501
- $menu_uid = get_post_meta( $item->ID, 'brizy_post_uid', true );
502
-
503
- if ( ! $menu_uid ) {
504
- $menu_uid = md5( $item->ID . time() );
505
- update_post_meta( $item->ID, 'brizy_post_uid', $menu_uid );
506
- }
507
-
508
- $megaMenuItems = $this->getMegaMenuItems();
509
-
510
- $menu_data = get_post_meta( $item->ID, 'brizy_data', true );
511
-
512
- $item_value = array(
513
- 'id' => $menu_uid,
514
- 'title' => $item->title,
515
- 'url' => $item->url,
516
- 'megaMenuItems' => $megaMenuItems,
517
- 'description' => $item->post_content,
518
- 'position' => $item->menu_order,
519
- 'attrTitle' => $item->post_excerpt,
520
- 'target' => get_post_meta( $item->ID, '_menu_item_target', true ),
521
- 'classes' => get_post_meta( $item->ID, '_menu_item_classes', true ),
522
- 'xfn' => get_post_meta( $item->ID, '_menu_item_xfn', true ),
523
- );
524
-
525
- $an_item = (object) array(
526
- 'type' => 'MenuItem',
527
- );
528
-
529
- $an_item->value = (object) array_merge( $item_value, get_object_vars( is_object( $menu_data ) ? $menu_data : (object) array() ) );
530
-
531
- $child_items = $this->get_menu_tree( $items, $item->ID );
532
-
533
- $an_item->value->items = array();
534
-
535
- if ( count( $child_items ) > 0 ) {
536
- $an_item->value->items = $child_items;
537
- }
538
-
539
- $result_items[] = $an_item;
540
- }
541
-
542
- return $result_items;
543
- }
544
-
545
- /**
546
- * @return array
547
- */
548
- private function getMegaMenuItems() {
549
-
550
- return array(
551
- (object) ( array(
552
- 'type' => "SectionMegaMenu",
553
- 'value' => (object) array( 'items' => array() )
554
- ) )
555
- );
556
- }
557
-
558
- /**
559
- * @param Brizy_Editor_Accounts_ServiceAccountManager $manager
560
- * @param array $config
561
- *
562
- * @return array
563
- */
564
- private function addRecaptchaAccounts( Brizy_Editor_Accounts_ServiceAccountManager $manager, array $config ) {
565
- $accounts = $manager->getAccountsByGroup( Brizy_Editor_Accounts_AbstractAccount::RECAPTCHA_GROUP );
566
-
567
- if ( isset( $accounts[0] ) && $accounts[0] instanceof Brizy_Editor_Accounts_RecaptchaAccount ) {
568
- $config['applications']['form']['recaptcha']['siteKey'] = $accounts[0]->getSiteKey();
569
- }
570
-
571
- return $config;
572
- }
573
-
574
- /**
575
- * @param Brizy_Editor_Accounts_ServiceAccountManager $manager
576
- * @param array $config
577
- *
578
- * @return array
579
- */
580
- private function addSocialAccounts( Brizy_Editor_Accounts_ServiceAccountManager $manager, array $config ) {
581
- $accounts = $manager->getAccountsByGroup( Brizy_Editor_Accounts_AbstractAccount::SOCIAL_GROUP );
582
-
583
- foreach ( $accounts as $account ) {
584
- if ( isset( $account ) && $account instanceof Brizy_Editor_Accounts_SocialAccount ) {
585
- $config['applications'][ $account->getGroup() ][] = $account->convertToOptionValue();
586
- }
587
- }
588
-
589
- return $config;
590
- }
591
-
592
-
593
- private function fileUploadMaxSize() {
594
- static $max_size = - 1;
595
-
596
- if ( $max_size < 0 ) {
597
- // Start with post_max_size.
598
- $post_max_size = $this->parseSize( ini_get( 'post_max_size' ) );
599
- if ( $post_max_size > 0 ) {
600
- $max_size = number_format( $post_max_size / 1048576, 2, '.', '' );
601
- }
602
-
603
- // If upload_max_size is less, then reduce. Except if upload_max_size is
604
- // zero, which indicates no limit.
605
- $upload_max = $this->parseSize( ini_get( 'upload_max_filesize' ) );
606
- if ( $upload_max > 0 && $upload_max < $max_size ) {
607
- $max_size = number_format( $upload_max / 1048576, 2, '.', '' );
608
- }
609
- }
610
-
611
- return $max_size;
612
- }
613
-
614
- private function parseSize( $size ) {
615
- $unit = preg_replace( '/[^bkmgtpezy]/i', '', $size ); // Remove the non-unit characters from the size.
616
- $size = preg_replace( '/[^0-9\.]/', '', $size ); // Remove the non-numeric characters from the size.
617
- if ( $unit ) {
618
- // Find the position of the unit in the ordered string which is the power of magnitude to multiply a kilobyte by.
619
- return round( $size * pow( 1024, stripos( 'bkmgtpezy', $unit[0] ) ) );
620
- } else {
621
- return round( $size );
622
- }
623
- }
624
-
625
- /**
626
- * @return array
627
- */
628
- private function roleList() {
629
- $editable_roles = wp_roles()->roles;
630
- $editable_roles = apply_filters( 'editable_roles', $editable_roles );
631
- $roles = array();
632
- foreach ( $editable_roles as $role => $details ) {
633
- $sub['role'] = esc_attr( $role );
634
- $sub['name'] = translate_user_role( $details['name'] );
635
- $roles[] = $sub;
636
- }
637
-
638
- return $roles;
639
- }
640
-
641
- private function getOneArchiveLink( $args = '' ) {
642
- global $wpdb, $wp_locale;
643
-
644
- $defaults = array(
645
- 'type' => 'monthly',
646
- 'limit' => '',
647
- 'order' => 'DESC',
648
- 'post_type' => 'post',
649
- 'year' => get_query_var( 'year' ),
650
- 'monthnum' => get_query_var( 'monthnum' ),
651
- 'day' => get_query_var( 'day' ),
652
- 'w' => get_query_var( 'w' ),
653
- );
654
-
655
- $r = wp_parse_args( $args, $defaults );
656
-
657
- $post_type_object = get_post_type_object( $r['post_type'] );
658
- if ( ! is_post_type_viewable( $post_type_object ) ) {
659
- return;
660
- }
661
- $r['post_type'] = $post_type_object->name;
662
-
663
- if ( '' == $r['type'] ) {
664
- $r['type'] = 'monthly';
665
- }
666
-
667
- if ( ! empty( $r['limit'] ) ) {
668
- $r['limit'] = absint( $r['limit'] );
669
- $r['limit'] = ' LIMIT ' . $r['limit'];
670
- }
671
-
672
- $order = strtoupper( $r['order'] );
673
- if ( $order !== 'ASC' ) {
674
- $order = 'DESC';
675
- }
676
-
677
- // this is what will separate dates on weekly archive links
678
- $archive_week_separator = '&#8211;';
679
-
680
- $sql_where = $wpdb->prepare( "WHERE post_type = %s AND post_status = 'publish'", $r['post_type'] );
681
-
682
- /**
683
- * Filters the SQL WHERE clause for retrieving archives.
684
- *
685
- * @param string $sql_where Portion of SQL query containing the WHERE clause.
686
- * @param array $r An array of default arguments.
687
- *
688
- * @since 2.2.0
689
- *
690
- */
691
- $where = apply_filters( 'getarchives_where', $sql_where, $r );
692
-
693
- /**
694
- * Filters the SQL JOIN clause for retrieving archives.
695
- *
696
- * @param string $sql_join Portion of SQL query containing JOIN clause.
697
- * @param array $r An array of default arguments.
698
- *
699
- * @since 2.2.0
700
- *
701
- */
702
- $join = apply_filters( 'getarchives_join', '', $r );
703
-
704
- $output = '';
705
-
706
- $last_changed = wp_cache_get_last_changed( 'posts' );
707
-
708
- $limit = $r['limit'];
709
-
710
- if ( 'monthly' == $r['type'] ) {
711
- $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";
712
- $key = md5( $query );
713
- $key = "wp_get_archives:$key:$last_changed";
714
- if ( ! $results = wp_cache_get( $key, 'posts' ) ) {
715
- $results = $wpdb->get_results( $query );
716
- wp_cache_set( $key, $results, 'posts' );
717
- }
718
- if ( $results ) {
719
- foreach ( (array) $results as $result ) {
720
- $url = get_month_link( $result->year, $result->month );
721
- if ( 'post' !== $r['post_type'] ) {
722
- $url = add_query_arg( 'post_type', $r['post_type'], $url );
723
- }
724
-
725
- return $url;
726
- }
727
- }
728
- }
729
- }
730
-
731
- /**
732
- * @return string
733
- * @throws Exception
734
- */
735
- private function getTexts() {
736
- if ( BRIZY_DEVELOPMENT ) {
737
- $brizy_public_editor_build_texts = '\Brizy_Public_EditorBuild_Dev_Texts';
738
- } else {
739
- $version = '';
740
- foreach ( explode( '-', BRIZY_EDITOR_VERSION ) as $tmp ) {
741
- $version .= ucfirst( $tmp );
742
- }
743
- $brizy_public_editor_build_texts = '\Brizy_Public_EditorBuild_' . $version . '_Texts';
744
- }
745
-
746
- if ( ! class_exists( $brizy_public_editor_build_texts ) ) {
747
- if ( BRIZY_DEVELOPMENT ) {
748
- throw new \Exception( 'You must build the editor first.' );
749
- } else {
750
- throw new \Exception( 'Unable to find class ' . $brizy_public_editor_build_texts );
751
- }
752
- }
753
-
754
- return (object) $brizy_public_editor_build_texts::get_editor_texts();
755
- }
756
-
757
- /**
758
- * @param $isTemplate
759
- * @param $wp_post_id
760
- * @param array $ruleMatches
761
- *
762
- * @return array
763
- * @throws Exception
764
- */
765
- private function getTempalteRuleMatches( $isTemplate, $wp_post_id ) {
766
-
767
- $ruleMatches = array();
768
-
769
- if ( $isTemplate ) {
770
- $rule_manager = new Brizy_Admin_Rules_Manager();
771
- $template_rules = $rule_manager->getRules( $wp_post_id );
772
-
773
- foreach ( $template_rules as $rule ) {
774
- /**
775
- * @var Brizy_Admin_Rule $rule ;
776
- */
777
- $ruleMatches[] = array(
778
- 'type' => $rule->getType(),
779
- 'group' => $rule->getAppliedFor(),
780
- 'entityType' => $rule->getEntityType(),
781
- 'values' => $rule->getEntityValues()
782
- );
783
- }
784
- } else {
785
- $ruleMatches[] = array(
786
- 'type' => Brizy_Admin_Rule::TYPE_INCLUDE,
787
- 'group' => Brizy_Admin_Rule::POSTS,
788
- 'entityType' => $this->post->getWpPost()->post_type,
789
- 'values' => array( $wp_post_id )
790
- );
791
- }
792
-
793
- return $ruleMatches;
794
- }
795
-
796
- /**
797
- * @return array
798
- */
799
- public function getProjectStatus() {
800
- $projectLockedBy = Brizy_Editor::get()->checkIfProjectIsLocked();
801
- $userData = WP_User::get_data_by( 'id', $projectLockedBy );
802
- unset( $userData->user_pass );
803
- unset( $userData->user_registered );
804
- unset( $userData->user_status );
805
- unset( $userData->user_activation_key );
806
-
807
- return [
808
- 'locked' => $projectLockedBy !== false,
809
- 'lockedBy' => $userData,
810
- ];
811
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
812
  }
1
  <?php
2
 
3
+ class Brizy_Editor_Editor_Editor
4
+ {
5
+
6
+ /**
7
+ * @var self
8
+ */
9
+ static private $insance;
10
+
11
+ /**
12
+ * @var array
13
+ */
14
+ static private $config;
15
+
16
+ /**
17
+ * @var Brizy_Editor_Post
18
+ */
19
+ private $post;
20
+
21
+ /**
22
+ * @var Brizy_Editor_Project
23
+ */
24
+ private $project;
25
+
26
+ /**
27
+ * @var Brizy_Editor_UrlBuilder
28
+ */
29
+ private $urlBuilder;
30
+
31
+ /**
32
+ * @param Brizy_Editor_Project $project
33
+ * @param Brizy_Editor_Post $post
34
+ *
35
+ * @return Brizy_Editor_Editor_Editor
36
+ */
37
+ public static function get(Brizy_Editor_Project $project, Brizy_Editor_Post $post)
38
+ {
39
+
40
+ $postId = $post && $post->getWpPostId() ? $post->getWpPostId() : 0;
41
+ if (isset(self::$insance[$postId])) {
42
+ return self::$insance[$postId];
43
+ }
44
+
45
+ return self::$insance[$postId] = new self($project, $post);
46
+ }
47
+
48
+ /**
49
+ * Brizy_Editor_Editor_Editor constructor.
50
+ *
51
+ * @param Brizy_Editor_Project $project
52
+ * @param Brizy_Editor_Post $post
53
+ */
54
+ public function __construct(Brizy_Editor_Project $project, Brizy_Editor_Post $post = null)
55
+ {
56
+ $this->post = $post;
57
+ $this->project = $project;
58
+ $this->urlBuilder = new Brizy_Editor_UrlBuilder($project, $post ? $post->getWpPostId() : null);
59
+ }
60
+
61
+ private function getMode($postType)
62
+ {
63
+ switch ($postType) {
64
+ case Brizy_Admin_Templates::CP_TEMPLATE:
65
+ return 'template';
66
+ case Brizy_Admin_Popups_Main::CP_POPUP:
67
+ return 'internal_popup';
68
+ default:
69
+ return 'page';
70
+ }
71
+ }
72
+
73
+ /**
74
+ * @throws Exception
75
+ */
76
+ public function config()
77
+ {
78
+
79
+ $cachePostId = $this->post ? $this->post->getWpPostId() : 0;
80
+ if (isset(self::$config[$cachePostId])) {
81
+ return self::$config[$cachePostId];
82
+ }
83
+
84
+ global $wp_registered_sidebars;
85
+
86
+ $wp_post_id = null;
87
+ $preview_post_link = null;
88
+ $change_template_url = null;
89
+
90
+ $parent_post_type = get_post_type($this->post->getWpPostId());
91
+ $wp_post_id = $this->post->getWpPostId();
92
+ $preview_post_link = $this->getPreviewUrl($this->post->getWpPost());
93
+
94
+ $change_template_url = set_url_scheme(
95
+ admin_url('admin-post.php?post='.$this->post->getWpPostId().'&action=_brizy_change_template')
96
+ );
97
+ $mode = $this->getMode($parent_post_type);
98
+
99
+
100
+ $heartBeatInterval = (int)apply_filters('wp_check_post_lock_window', 150);
101
+ $config = array(
102
+ 'user' => array(
103
+ 'role' => 'admin',
104
+ 'isAuthorized' => $this->project->getMetaValue('brizy-cloud-token') !== null,
105
+ ),
106
+ 'project' => array(
107
+ 'id' => $this->project->getId(),
108
+ 'status' => $this->getProjectStatus(),
109
+ 'heartBeatInterval' => ($heartBeatInterval > 10 && $heartBeatInterval < 30 ? $heartBeatInterval : 30) * 1000,
110
+ ),
111
+ 'urls' => array(
112
+ 'site' => home_url(),
113
+ 'api' => home_url('/wp-json/v1'),
114
+ 'assets' => $this->urlBuilder->editor_build_url(),
115
+ 'image' => $this->urlBuilder->external_media_url()."",
116
+ 'blockThumbnails' => $this->urlBuilder->external_asset_url('thumbs')."",
117
+ 'templateThumbnails' => $this->urlBuilder->external_asset_url('thumbs')."",
118
+ 'templateIcons' => $this->urlBuilder->proxy_url('editor/icons'),
119
+ 'templateFonts' => $this->urlBuilder->external_fonts_url(),
120
+ 'editorFonts' => home_url(),
121
+ 'pagePreview' => $preview_post_link,
122
+ 'about' => __bt('about-url', apply_filters('brizy_about_url', Brizy_Config::ABOUT_URL)),
123
+ 'backToDashboard' => get_edit_post_link($wp_post_id, null),
124
+
125
+ // wp specific
126
+ 'changeTemplate' => $change_template_url,
127
+ 'upgradeToPro' => __bt(
128
+ 'upgrade-url',
129
+ apply_filters('brizy_upgrade_to_pro_url', Brizy_Config::UPGRADE_TO_PRO_URL)
130
+ ),
131
+ 'support' => __bt(
132
+ 'support-url',
133
+ apply_filters('brizy_support_url', Brizy_Config::SUPPORT_URL)
134
+ ),
135
+ 'pluginSettings' => admin_url('admin.php?page='.Brizy_Admin_Settings::menu_slug()),
136
+ 'dashboardNavMenu' => admin_url('nav-menus.php'),
137
+ 'customFile' => home_url('?'.Brizy_Editor::prefix('_attachment').'='),
138
+ ),
139
+ 'form' => array(
140
+ 'submitUrl' => '{{brizy_dc_ajax_url}}?action='.Brizy_Editor::prefix(
141
+ Brizy_Editor_Forms_Api::AJAX_SUBMIT_FORM
142
+ ),
143
+ ),
144
+ 'serverTimestamp' => time(),
145
+ 'menuData' => $this->get_menu_data(),
146
+ 'wp' => array(
147
+ 'pluginPrefix' => Brizy_Editor::prefix(),
148
+ 'permalink' => get_permalink($wp_post_id),
149
+ 'page' => $wp_post_id,
150
+ 'ruleMatches' => $this->getTemplateRuleMatches($mode === 'template', $wp_post_id),
151
+ 'featuredImage' => $this->getThumbnailData($wp_post_id),
152
+ 'pageAttachments' => array('images' => $this->get_page_attachments()),
153
+ 'templates' => $this->post->get_templates(),
154
+ 'api' => $this->getApiActions(),
155
+ 'plugins' => array(
156
+ 'dummy' => true,
157
+ 'woocommerce' => $this->get_woocomerce_plugin_info(),
158
+ ),
159
+ 'hasSidebars' => count($wp_registered_sidebars) > 0,
160
+ 'l10n' => $this->getTexts(),
161
+ 'pageData' => apply_filters('brizy_page_data', array()),
162
+ 'availableRoles' => $this->roleList(),
163
+ ),
164
+ 'mode' => $mode,
165
+ 'applications' => array(
166
+ 'form' => array(
167
+ 'submitUrl' => '{{brizy_dc_ajax_url}}?action='.Brizy_Editor::prefix(
168
+ Brizy_Editor_Forms_Api::AJAX_SUBMIT_FORM
169
+ ),
170
+ ),
171
+ ),
172
+ 'server' => array(
173
+ 'maxUploadSize' => $this->fileUploadMaxSize(),
174
+ ),
175
+ 'branding' => array('brizy' => __bt('brizy', 'Brizy')),
176
+ 'prefix' => Brizy_Editor::prefix(),
177
+ 'cloud' => $this->getCloudInfo(),
178
+ 'editorVersion' => BRIZY_EDITOR_VERSION,
179
+ );
180
+
181
+ $manager = new Brizy_Editor_Accounts_ServiceAccountManager(Brizy_Editor_Project::get());
182
+
183
+ $config = $this->addRecaptchaAccounts($manager, $config);
184
+ $config = $this->addSocialAccounts($manager, $config);
185
+
186
+ return self::$config[$cachePostId] = apply_filters('brizy_editor_config', $config);
187
+ }
188
+
189
+
190
+ /**
191
+ * @return object
192
+ */
193
+ private function get_page_attachments()
194
+ {
195
+ global $wpdb;
196
+ $query = $wpdb->prepare(
197
+ "SELECT
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  pm.*
199
  FROM
200
  {$wpdb->prefix}postmeta pm
201
  JOIN {$wpdb->prefix}postmeta pm2 ON pm2.post_id=pm.post_id AND pm2.meta_key='brizy_post_uid' AND pm2.meta_value=%s
202
  WHERE pm.meta_key='brizy_attachment_uid'
203
+ GROUP BY pm.post_id",
204
+ $this->post->getUid()
205
+ );
206
+
207
+ $results = $wpdb->get_results($query);
208
+ $attachment_data = array();
209
+ foreach ($results as $row) {
210
+ $attachment_data[$row->meta_value] = true;
211
+ }
212
+
213
+ return (object)$attachment_data;
214
+ }
215
+
216
+ /**
217
+ * @return array|null
218
+ */
219
+ private function get_woocomerce_plugin_info()
220
+ {
221
+ if (function_exists('wc') && defined('WC_PLUGIN_FILE')) {
222
+ return array('version' => WooCommerce::instance()->version);
223
+ }
224
+
225
+ return null;
226
+ }
227
+
228
+ /**
229
+ * @param $wp_post_id
230
+ *
231
+ * @return array|null
232
+ */
233
+ private function getThumbnailData($wp_post_id)
234
+ {
235
+ $post_thumbnail_id = get_post_thumbnail_id($wp_post_id);
236
+ $post_thumbnail = "";
237
+
238
+ if ($post_thumbnail_id) {
239
+ $post_thumbnail_focal_point = get_post_meta($wp_post_id, 'brizy_attachment_focal_point', true);
240
+
241
+ if ( ! is_array($post_thumbnail_focal_point)) {
242
+ $post_thumbnail_focal_point = array('x' => "", 'y' => "");
243
+ }
244
+
245
+ $post_thumbnail = array(
246
+ 'id' => $post_thumbnail_id,
247
+ 'url' => get_the_post_thumbnail_url($wp_post_id),
248
+ 'pointX' => isset($post_thumbnail_focal_point['x']) ? $post_thumbnail_focal_point['x'] : "",
249
+ 'pointY' => isset($post_thumbnail_focal_point['y']) ? $post_thumbnail_focal_point['y'] : "",
250
+ );
251
+ }
252
+
253
+ return $post_thumbnail;
254
+ }
255
+
256
+ /**
257
+ * @param $wp_post
258
+ *
259
+ * @return null|string
260
+ * @throws Brizy_Editor_Exceptions_NotFound
261
+ * @throws Brizy_Editor_Exceptions_UnsupportedPostType
262
+ */
263
+ private function getPreviewUrl($wp_post)
264
+ {
265
+
266
+ if ($wp_post->post_type == Brizy_Admin_Templates::CP_TEMPLATE) {
267
+
268
+ $ruleManager = new Brizy_Admin_Rules_Manager();
269
+ $rules = $ruleManager->getRules($wp_post->ID);
270
+ $rule = null;
271
+
272
+
273
+ if ( ! function_exists('addQueryStringToUrl')) {
274
+ function addQueryStringToUrl($link, $query)
275
+ {
276
+ $parsedUrl = parse_url($link);
277
+ $separator = ( ! isset($parsedUrl['query']) || $parsedUrl['query'] == null) ? '?' : '&';
278
+ $link .= $separator.$query;
279
+
280
+ return $link;
281
+ }
282
+ }
283
+
284
+
285
+ // find first include rule
286
+ foreach ($rules as $rule) {
287
+ /**
288
+ * @var Brizy_Admin_Rule $rule ;
289
+ */
290
+ if ($rule->getType() == Brizy_Admin_Rule::TYPE_INCLUDE) {
291
+ break;
292
+ }
293
+ }
294
+
295
+ if ($rule) {
296
+
297
+ switch ($rule->getAppliedFor()) {
298
+ case Brizy_Admin_Rule::POSTS :
299
+ $args = array(
300
+ 'post_type' => $rule->getEntityType(),
301
+ );
302
+
303
+ if (count($rule->getEntityValues())) {
304
+ $args['post__in'] = $rule->getEntityValues();
305
+ }
306
+
307
+ $array = get_posts($args);
308
+
309
+ foreach ($array as $p) {
310
+
311
+ if ($p->post_type == 'attachment') {
312
+ return addQueryStringToUrl(get_attachment_link($p->ID), 'preview=1');
313
+ }
314
+
315
+ if ( ! Brizy_Editor::checkIfPostTypeIsSupported($p->ID, false) ||
316
+ ! Brizy_Editor_Post::get($p)->uses_editor()) {
317
+ $wp_post = $p;
318
+ break;
319
+ }
320
+
321
+ }
322
+ break;
323
+ case Brizy_Admin_Rule::TAXONOMY :
324
+ $args = array(
325
+ 'taxonomy' => $rule->getEntityType(),
326
+ 'hide_empty' => false,
327
+ );
328
+ if (count($rule->getEntityValues())) {
329
+ $args['term_taxonomy_id'] = $rule->getEntityValues();
330
+ }
331
+
332
+ $array = get_terms($args);
333
+
334
+ if (count($array) == 0) {
335
+ break;
336
+ }
337
+ $term = array_pop($array);
338
+ $link = get_term_link($term);
339
+
340
+ return addQueryStringToUrl($link, 'preview=1');
341
+ break;
342
+ case Brizy_Admin_Rule::ARCHIVE :
343
+ if ($rule->getEntityType()) {
344
+ $link = get_post_type_archive_link($rule->getEntityType());
345
+
346
+ return addQueryStringToUrl($link, 'preview=1');
347
+ }
348
+
349
+ $link = $this->getOneArchiveLink();
350
+
351
+ return addQueryStringToUrl($link, 'preview=1');
352
+ break;
353
+ case Brizy_Admin_Rule::TEMPLATE :
354
+
355
+ // array( 'title' => 'Author page', 'value' => 'author', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
356
+ // array( 'title' => 'Search page', 'value' => 'search', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
357
+ // array( 'title' => 'Home page', 'value' => 'front_page', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
358
+ // array( 'title' => '404 page', 'value' => '404', 'groupValue' => Brizy_Admin_Rule::TEMPLATE ),
359
+ // array( 'title' => 'Archive page', 'value' => '', 'groupValue' => Brizy_Admin_Rule::ARCHIVE ),
360
+ switch ($rule->getEntityType()) {
361
+ case 'author':
362
+ $authors = get_users();
363
+ $author = array_pop($authors);
364
+ $link = get_author_posts_url($author->ID);
365
+
366
+ return addQueryStringToUrl($link, 'preview=1');
367
+ break;
368
+
369
+ case 'search':
370
+ return addQueryStringToUrl(get_search_link('find-me'), 'preview=1');
371
+ break;
372
+ case '404':
373
+ return addQueryStringToUrl(get_home_url(null, (string)time()), 'preview=1');
374
+ break;
375
+ case 'home_page':
376
+ $get_option = get_option('page_for_posts');
377
+
378
+ if ($get_option) {
379
+ return addQueryStringToUrl(get_permalink($get_option), 'preview=1');
380
+ }
381
+ break;
382
+ case 'front_page':
383
+ return addQueryStringToUrl(home_url(), 'preview=1');
384
+ break;
385
+ }
386
+
387
+ break;
388
+ }
389
+
390
+ }
391
+ }
392
+
393
+ return get_preview_post_link(
394
+ $wp_post,
395
+ array(
396
+ 'preview_id' => $wp_post->ID,
397
+ 'preview_nonce' => wp_create_nonce('post_preview_'.$wp_post->ID),
398
+ )
399
+ );
400
+ }
401
+
402
+ /**
403
+ * @return array
404
+ */
405
+ private function get_menu_data()
406
+ {
407
+ $menus = wp_get_nav_menus();
408
+ $menu_data = array();
409
+
410
+ foreach ($menus as $menu) {
411
+
412
+ $custom_menu_data = get_term_meta($menu->term_id, 'brizy_data', true);
413
+
414
+ $menu_uid = get_term_meta($menu->term_id, 'brizy_uid', true);
415
+ if ( ! $menu_uid) {
416
+ $menu_uid = md5($menu->term_id.time());
417
+ update_term_meta($menu->term_id, 'brizy_uid', $menu_uid);
418
+ }
419
+
420
+ $amenu = array(
421
+ 'id' => $menu_uid,
422
+ 'name' => $menu->name,
423
+ 'items' => array(),
424
+ );
425
+
426
+ $amenu = (object)array_merge(
427
+ $amenu,
428
+ get_object_vars(is_object($custom_menu_data) ? $custom_menu_data : (object)array())
429
+ );
430
+
431
+ $menu_items = wp_get_nav_menu_items($menu->term_id);
432
+ _wp_menu_item_classes_by_context( $menu_items );
433
+ $menu_items = $this->get_menu_tree($menu_items);
434
+
435
+ if (count($menu_items) > 0) {
436
+ $amenu->items = $menu_items;
437
+ }
438
+
439
+ $menu_data[] = $amenu;
440
+ }
441
+
442
+ return $menu_data;
443
+ }
444
+
445
+ /**
446
+ * @param $items
447
+ * @param int $parent
448
+ *
449
+ * @return array
450
+ */
451
+ private function get_menu_tree($items, $parent = 0)
452
+ {
453
+ $result_items = array();
454
+
455
+ foreach ($items as $item) {
456
+ if ((int)$item->menu_item_parent !== $parent) {
457
+ continue;
458
+ }
459
+
460
+ $menu_uid = get_post_meta($item->ID, 'brizy_post_uid', true);
461
+
462
+ if ( ! $menu_uid) {
463
+ $menu_uid = md5($item->ID.time());
464
+ update_post_meta($item->ID, 'brizy_post_uid', $menu_uid);
465
+ }
466
+
467
+ $megaMenuItems = $this->getMegaMenuItems();
468
+
469
+ $menu_data = get_post_meta($item->ID, 'brizy_data', true);
470
+
471
+ $item_value = array(
472
+ 'id' => $menu_uid,
473
+ 'title' => $item->title,
474
+ 'url' => $item->url,
475
+ 'megaMenuItems' => $megaMenuItems,
476
+ 'description' => $item->post_content,
477
+ 'position' => $item->menu_order,
478
+ 'attrTitle' => $item->post_excerpt,
479
+ 'current' => count( array_intersect( [
480
+ 'current-menu-parent',
481
+ 'current-menu-item'
482
+ ], $item->classes ) ) > 0,
483
+ 'target' => get_post_meta($item->ID, '_menu_item_target', true),
484
+ 'classes' => array_values( array_filter($item->classes)),
485
+ 'xfn' => get_post_meta($item->ID, '_menu_item_xfn', true),
486
+ );
487
+
488
+ $an_item = (object)array(
489
+ 'type' => 'MenuItem',
490
+ );
491
+
492
+ $an_item->value = (object)array_merge(
493
+ $item_value,
494
+ get_object_vars(is_object($menu_data) ? $menu_data : (object)array())
495
+ );
496
+
497
+ $child_items = $this->get_menu_tree($items, $item->ID);
498
+
499
+ $an_item->value->items = array();
500
+
501
+ if (count($child_items) > 0) {
502
+ $an_item->value->items = $child_items;
503
+ }
504
+
505
+ $result_items[] = $an_item;
506
+ }
507
+
508
+ return $result_items;
509
+ }
510
+
511
+ /**
512
+ * @return array
513
+ */
514
+ private function getMegaMenuItems()
515
+ {
516
+
517
+ return array(
518
+ (object)(array(
519
+ 'type' => "SectionMegaMenu",
520
+ 'value' => (object)array('items' => array()),
521
+ )),
522
+ );
523
+ }
524
+
525
+ /**
526
+ * @param Brizy_Editor_Accounts_ServiceAccountManager $manager
527
+ * @param array $config
528
+ *
529
+ * @return array
530
+ */
531
+ private function addRecaptchaAccounts(Brizy_Editor_Accounts_ServiceAccountManager $manager, array $config)
532
+ {
533
+ $accounts = $manager->getAccountsByGroup(Brizy_Editor_Accounts_AbstractAccount::RECAPTCHA_GROUP);
534
+
535
+ if (isset($accounts[0]) && $accounts[0] instanceof Brizy_Editor_Accounts_RecaptchaAccount) {
536
+ $config['applications']['form']['recaptcha']['siteKey'] = $accounts[0]->getSiteKey();
537
+ }
538
+
539
+ return $config;
540
+ }
541
+
542
+ /**
543
+ * @param Brizy_Editor_Accounts_ServiceAccountManager $manager
544
+ * @param array $config
545
+ *
546
+ * @return array
547
+ */
548
+ private function addSocialAccounts(Brizy_Editor_Accounts_ServiceAccountManager $manager, array $config)
549
+ {
550
+ $accounts = $manager->getAccountsByGroup(Brizy_Editor_Accounts_AbstractAccount::SOCIAL_GROUP);
551
+
552
+ foreach ($accounts as $account) {
553
+ if (isset($account) && $account instanceof Brizy_Editor_Accounts_SocialAccount) {
554
+ $config['applications'][$account->getGroup()][] = $account->convertToOptionValue();
555
+ }
556
+ }
557
+
558
+ return $config;
559
+ }
560
+
561
+
562
+ private function fileUploadMaxSize()
563
+ {
564
+ static $max_size = -1;
565
+
566
+ if ($max_size < 0) {
567
+ // Start with post_max_size.
568
+ $post_max_size = $this->parseSize(ini_get('post_max_size'));
569
+ if ($post_max_size > 0) {
570
+ $max_size = number_format($post_max_size / 1048576, 2, '.', '');
571
+ }
572
+
573
+ // If upload_max_size is less, then reduce. Except if upload_max_size is
574
+ // zero, which indicates no limit.
575
+ $upload_max = $this->parseSize(ini_get('upload_max_filesize'));
576
+ if ($upload_max > 0 && $upload_max < $max_size) {
577
+ $max_size = number_format($upload_max / 1048576, 2, '.', '');
578
+ }
579
+ }
580
+
581
+ return $max_size;
582
+ }
583
+
584
+ private function parseSize($size)
585
+ {
586
+ $unit = preg_replace('/[^bkmgtpezy]/i', '', $size); // Remove the non-unit characters from the size.
587
+ $size = preg_replace('/[^0-9\.]/', '', $size); // Remove the non-numeric characters from the size.
588
+ if ($unit) {
589
+ // Find the position of the unit in the ordered string which is the power of magnitude to multiply a kilobyte by.
590
+ return round($size * pow(1024, stripos('bkmgtpezy', $unit[0])));
591
+ } else {
592
+ return round($size);
593
+ }
594
+ }
595
+
596
+ /**
597
+ * @return array
598
+ */
599
+ private function roleList()
600
+ {
601
+ $editable_roles = wp_roles()->roles;
602
+ $editable_roles = apply_filters('editable_roles', $editable_roles);
603
+ $roles = array();
604
+ foreach ($editable_roles as $role => $details) {
605
+ $sub['role'] = esc_attr($role);
606
+ $sub['name'] = translate_user_role($details['name']);
607
+ $roles[] = $sub;
608
+ }
609
+
610
+ return $roles;
611
+ }
612
+
613
+ private function getOneArchiveLink($args = '')
614
+ {
615
+ global $wpdb, $wp_locale;
616
+
617
+ $defaults = array(
618
+ 'type' => 'monthly',
619
+ 'limit' => '',
620
+ 'order' => 'DESC',
621
+ 'post_type' => 'post',
622
+ 'year' => get_query_var('year'),
623
+ 'monthnum' => get_query_var('monthnum'),
624
+ 'day' => get_query_var('day'),
625
+ 'w' => get_query_var('w'),
626
+ );
627
+
628
+ $r = wp_parse_args($args, $defaults);
629
+
630
+ $post_type_object = get_post_type_object($r['post_type']);
631
+ if ( ! is_post_type_viewable($post_type_object)) {
632
+ return;
633
+ }
634
+ $r['post_type'] = $post_type_object->name;
635
+
636
+ if ('' == $r['type']) {
637
+ $r['type'] = 'monthly';
638
+ }
639
+
640
+ if ( ! empty($r['limit'])) {
641
+ $r['limit'] = absint($r['limit']);
642
+ $r['limit'] = ' LIMIT '.$r['limit'];
643
+ }
644
+
645
+ $order = strtoupper($r['order']);
646
+ if ($order !== 'ASC') {
647
+ $order = 'DESC';
648
+ }
649
+
650
+ // this is what will separate dates on weekly archive links
651
+ $archive_week_separator = '&#8211;';
652
+
653
+ $sql_where = $wpdb->prepare("WHERE post_type = %s AND post_status = 'publish'", $r['post_type']);
654
+
655
+ /**
656
+ * Filters the SQL WHERE clause for retrieving archives.
657
+ *
658
+ * @param string $sql_where Portion of SQL query containing the WHERE clause.
659
+ * @param array $r An array of default arguments.
660
+ *
661
+ * @since 2.2.0
662
+ *
663
+ */
664
+ $where = apply_filters('getarchives_where', $sql_where, $r);
665
+
666
+ /**
667
+ * Filters the SQL JOIN clause for retrieving archives.
668
+ *
669
+ * @param string $sql_join Portion of SQL query containing JOIN clause.
670
+ * @param array $r An array of default arguments.
671
+ *
672
+ * @since 2.2.0
673
+ *
674
+ */
675
+ $join = apply_filters('getarchives_join', '', $r);
676
+
677
+ $output = '';
678
+
679
+ $last_changed = wp_cache_get_last_changed('posts');
680
+
681
+ $limit = $r['limit'];
682
+
683
+ if ('monthly' == $r['type']) {
684
+ $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";
685
+ $key = md5($query);
686
+ $key = "wp_get_archives:$key:$last_changed";
687
+ if ( ! $results = wp_cache_get($key, 'posts')) {
688
+ $results = $wpdb->get_results($query);
689
+ wp_cache_set($key, $results, 'posts');
690
+ }
691
+ if ($results) {
692
+ foreach ((array)$results as $result) {
693
+ $url = get_month_link($result->year, $result->month);
694
+ if ('post' !== $r['post_type']) {
695
+ $url = add_query_arg('post_type', $r['post_type'], $url);
696
+ }
697
+
698
+ return $url;
699
+ }
700
+ }
701
+ }
702
+ }
703
+
704
+ /**
705
+ * @return string
706
+ * @throws Exception
707
+ */
708
+ private function getTexts()
709
+ {
710
+ if (BRIZY_DEVELOPMENT) {
711
+ $brizy_public_editor_build_texts = '\Brizy_Public_EditorBuild_Dev_Texts';
712
+ } else {
713
+ $version = '';
714
+ foreach (explode('-', BRIZY_EDITOR_VERSION) as $tmp) {
715
+ $version .= ucfirst($tmp);
716
+ }
717
+ $brizy_public_editor_build_texts = '\Brizy_Public_EditorBuild_'.$version.'_Texts';
718
+ }
719
+
720
+ if ( ! class_exists($brizy_public_editor_build_texts)) {
721
+ if (BRIZY_DEVELOPMENT) {
722
+ throw new \Exception('You must build the editor first.');
723
+ } else {
724
+ throw new \Exception('Unable to find class '.$brizy_public_editor_build_texts);
725
+ }
726
+ }
727
+
728
+ return (object)$brizy_public_editor_build_texts::get_editor_texts();
729
+ }
730
+
731
+ /**
732
+ * @param $isTemplate
733
+ * @param $wp_post_id
734
+ * @param array $ruleMatches
735
+ *
736
+ * @return array
737
+ * @throws Exception
738
+ */
739
+ private function getTemplateRuleMatches($isTemplate, $wp_post_id)
740
+ {
741
+
742
+ $ruleMatches = array();
743
+
744
+ if ($isTemplate) {
745
+ $rule_manager = new Brizy_Admin_Rules_Manager();
746
+ $template_rules = $rule_manager->getRules($wp_post_id);
747
+
748
+ foreach ($template_rules as $rule) {
749
+ /**
750
+ * @var Brizy_Admin_Rule $rule ;
751
+ */
752
+ $ruleMatches[] = array(
753
+ 'type' => $rule->getType(),
754
+ 'group' => $rule->getAppliedFor(),
755
+ 'entityType' => $rule->getEntityType(),
756
+ 'values' => $rule->getEntityValues(),
757
+ );
758
+ }
759
+ } else {
760
+ $ruleMatches[] = array(
761
+ 'type' => Brizy_Admin_Rule::TYPE_INCLUDE,
762
+ 'group' => Brizy_Admin_Rule::POSTS,
763
+ 'entityType' => $this->post->getWpPost()->post_type,
764
+ 'values' => array($wp_post_id),
765
+ );
766
+ }
767
+
768
+ return $ruleMatches;
769
+ }
770
+
771
+ /**
772
+ * @return array
773
+ */
774
+ public function getProjectStatus()
775
+ {
776
+ $projectLockedBy = Brizy_Editor::get()->checkIfProjectIsLocked();
777
+ $userData = WP_User::get_data_by('id', $projectLockedBy);
778
+ unset($userData->user_pass);
779
+ unset($userData->user_registered);
780
+ unset($userData->user_status);
781
+ unset($userData->user_activation_key);
782
+
783
+ return [
784
+ 'locked' => $projectLockedBy !== false,
785
+ 'lockedBy' => $userData,
786
+ ];
787
+ }
788
+
789
+ /**
790
+ * @return array
791
+ */
792
+ public function getApiActions()
793
+ {
794
+ $pref = Brizy_Editor::prefix();
795
+
796
+ return array(
797
+ 'hash' => wp_create_nonce(Brizy_Editor_API::nonce),
798
+ 'url' => set_url_scheme(admin_url('admin-ajax.php')),
799
+
800
+ 'heartBeat' => $pref.Brizy_Editor_API::AJAX_HEARTBEAT,
801
+ 'takeOver' => $pref.Brizy_Editor_API::AJAX_TAKE_OVER,
802
+ 'lockProject' => $pref.Brizy_Editor_API::AJAX_LOCK_PROJECT,
803
+ 'removeLock' => $pref.Brizy_Editor_API::AJAX_REMOVE_LOCK,
804
+ 'getPage' => $pref.Brizy_Editor_API::AJAX_GET,
805
+ 'getPostInfo' => $pref.Brizy_Editor_API::AJAX_GET_POST_INFO,
806
+ 'updatePage' => $pref.Brizy_Editor_API::AJAX_UPDATE,
807
+ 'getProject' => $pref.Brizy_Editor_API::AJAX_GET_PROJECT,
808
+ 'setProject' => $pref.Brizy_Editor_API::AJAX_SET_PROJECT,
809
+ 'setProjectMeta' => $pref.Brizy_Editor_API::AJAX_UPDATE_EDITOR_META_DATA,
810
+ 'getGlobalBlockList' => $pref.Brizy_Admin_Blocks_Api::GET_GLOBAL_BLOCKS_ACTION,
811
+ 'createGlobalBlock' => $pref.Brizy_Admin_Blocks_Api::CREATE_GLOBAL_BLOCK_ACTION,
812
+ 'createGlobalBlocks' => $pref.Brizy_Admin_Blocks_Api::CREATE_GLOBAL_BLOCKS_ACTION,
813
+ 'updateGlobalBlock' => $pref.Brizy_Admin_Blocks_Api::UPDATE_GLOBAL_BLOCK_ACTION,
814
+ 'updateGlobalBlocks' => $pref.Brizy_Admin_Blocks_Api::UPDATE_GLOBAL_BLOCKS_ACTION,
815
+ 'deleteGlobalBlock' => $pref.Brizy_Admin_Blocks_Api::DELETE_GLOBAL_BLOCK_ACTION,
816
+ 'getRuleGroupList' => $pref.Brizy_Admin_Rules_Api::RULE_GROUP_LIST,
817
+ 'getLayoutByUid' => $pref.Brizy_Admin_Layouts_Api::GET_LAYOUT_BY_UID_ACTION,
818
+ 'getLayoutList' => $pref.Brizy_Admin_Layouts_Api::GET_LAYOUTS_ACTION,
819
+ 'createLayout' => $pref.Brizy_Admin_Layouts_Api::CREATE_LAYOUT_ACTION,
820
+ 'updateLayout' => $pref.Brizy_Admin_Layouts_Api::UPDATE_LAYOUT_ACTION,
821
+ 'deleteLayout' => $pref.Brizy_Admin_Layouts_Api::DELETE_LAYOUT_ACTION,
822
+ 'cloudSignIn' => $pref.Brizy_Admin_Cloud_Api::AJAX_SIGNIN_ACTION,
823
+ 'cloudSignUp' => $pref.Brizy_Admin_Cloud_Api::AJAX_SIGNUP_ACTION,
824
+ 'cloudSignOut' => $pref.Brizy_Admin_Cloud_Api::AJAX_SIGNOUT_ACTION,
825
+ 'cloudSyncAllowed' => $pref.Brizy_Admin_Cloud_Api::AJAX_SYNC_ALLOWED,
826
+ 'cloudResetPassword' => $pref.Brizy_Admin_Cloud_Api::AJAX_RESET_PASSWORD_ACTION,
827
+ 'cloudSync' => $pref.Brizy_Admin_Cloud_Api::AJAX_TRIGGER_SYNC_ACTION,
828
+ 'createRule' => $pref.Brizy_Admin_Rules_Api::CREATE_RULE_ACTION,
829
+ 'createRules' => $pref.Brizy_Admin_Rules_Api::CREATE_RULES_ACTION,
830
+ 'updateRules' => $pref.Brizy_Admin_Rules_Api::UPDATE_RULES_ACTION,
831
+ 'deleteRule' => $pref.Brizy_Admin_Rules_Api::DELETE_RULE_ACTION,
832
+ 'getRuleList' => $pref.Brizy_Admin_Rules_Api::LIST_RULE_ACTION,
833
+ 'updateBlockPositions' => $pref.Brizy_Admin_Blocks_Api::UPDATE_POSITIONS_ACTION,
834
+ 'getSavedBlockByUid' => $pref.Brizy_Admin_Blocks_Api::GET_SAVED_BLOCK_ACTION,
835
+ 'getSavedBlockList' => $pref.Brizy_Admin_Blocks_Api::GET_SAVED_BLOCKS_ACTION,
836
+ 'createSavedBlock' => $pref.Brizy_Admin_Blocks_Api::CREATE_SAVED_BLOCK_ACTION,
837
+ 'updateSavedBlock' => $pref.Brizy_Admin_Blocks_Api::UPDATE_SAVED_BLOCK_ACTION,
838
+ 'deleteSavedBlock' => $pref.Brizy_Admin_Blocks_Api::DELETE_SAVED_BLOCK_ACTION,
839
+ 'media' => $pref.Brizy_Editor_API::AJAX_MEDIA,
840
+ 'downloadMedia' => $pref.Brizy_Editor_API::AJAX_DOWNLOAD_MEDIA,
841
+ 'getMediaUid' => $pref.Brizy_Editor_API::AJAX_MEDIA_METAKEY,
842
+ 'getAttachmentUid' => $pref.Brizy_Editor_API::AJAX_CREATE_ATTACHMENT_UID,
843
+ 'getServerTimeStamp' => $pref.Brizy_Editor_API::AJAX_TIMESTAMP,
844
+ 'createBlockScreenshot' => $pref.Brizy_Editor_BlockScreenshotApi::AJAX_CREATE_BLOCK_SCREENSHOT,
845
+ 'updateBlockScreenshot' => $pref.Brizy_Editor_BlockScreenshotApi::AJAX_UPDATE_BLOCK_SCREENSHOT,
846
+ 'getSidebars' => $pref.Brizy_Editor_API::AJAX_SIDEBARS,
847
+ 'shortcodeContent' => $pref.Brizy_Editor_API::AJAX_SHORTCODE_CONTENT,
848
+ 'placeholderContent' => $pref.Brizy_Editor_API::AJAX_PLACEHOLDER_CONTENT,
849
+ 'getMenus' => $pref.Brizy_Editor_API::AJAX_GET_MENU_LIST,
850
+ 'getTerms' => $pref.Brizy_Editor_API::AJAX_GET_TERMS,
851
+ 'getPostObjects' => $pref.Brizy_Editor_API::AJAX_GET_POST_OBJECTS, // ???
852
+ 'setFeaturedImage' => $pref.Brizy_Editor_API::AJAX_SET_FEATURED_IMAGE,
853
+ 'setFeaturedImageFocalPoint' => $pref.Brizy_Editor_API::AJAX_SET_IMAGE_FOCAL_PT,
854
+ 'removeFeaturedImage' => $pref.Brizy_Editor_API::AJAX_REMOVE_FEATURED_IMAGE,
855
+ 'getForm' => $pref.Brizy_Editor_Forms_Api::AJAX_GET_FORM,
856
+ 'createForm' => $pref.Brizy_Editor_Forms_Api::AJAX_CREATE_FORM,
857
+ 'updateForm' => $pref.Brizy_Editor_Forms_Api::AJAX_UPDATE_FORM,
858
+ 'deleteForm' => $pref.Brizy_Editor_Forms_Api::AJAX_DELETE_FORM,
859
+ 'getIntegration' => $pref.Brizy_Editor_Forms_Api::AJAX_GET_INTEGRATION,
860
+ 'createIntegration' => $pref.Brizy_Editor_Forms_Api::AJAX_CREATE_INTEGRATION,
861
+ 'updateIntegration' => $pref.Brizy_Editor_Forms_Api::AJAX_UPDATE_INTEGRATION,
862
+ 'deleteIntegration' => $pref.Brizy_Editor_Forms_Api::AJAX_DELETE_INTEGRATION,
863
+ 'createFont' => $pref.Brizy_Admin_Fonts_Api::AJAX_CREATE_FONT_ACTION,
864
+ 'deleteFont' => $pref.Brizy_Admin_Fonts_Api::AJAX_DELETE_FONT_ACTION,
865
+ 'getFonts' => $pref.Brizy_Admin_Fonts_Api::AJAX_GET_FONTS_ACTION,
866
+ 'getAccount' => $pref.Brizy_Editor_Accounts_Api::BRIZY_GET_ACCOUNT,
867
+ 'getAccounts' => $pref.Brizy_Editor_Accounts_Api::BRIZY_GET_ACCOUNTS,
868
+ 'addAccount' => $pref.Brizy_Editor_Accounts_Api::BRIZY_ADD_ACCOUNT,
869
+ 'updateAccount' => $pref.Brizy_Editor_Accounts_Api::BRIZY_UPDATE_ACCOUNT,
870
+ 'deleteAccount' => $pref.Brizy_Editor_Accounts_Api::BRIZY_DELETE_ACCOUNT,
871
+ 'validateRecaptchaAccount' => $pref.Brizy_Editor_Forms_Api::AJAX_VALIDATE_RECAPTCHA_ACCOUNT,
872
+ );
873
+ }
874
+
875
+ /**
876
+ * @return array
877
+ * @throws Exception
878
+ */
879
+ public function getCloudInfo(): array
880
+ {
881
+
882
+ // we 'allow' sync if you are not
883
+ $response = array(
884
+ 'isSyncAllowed' => true,
885
+ );
886
+
887
+ if ($this->project->getMetaValue('brizy-cloud-token') !== null) {
888
+ $cloudClient = new Brizy_Admin_Cloud_Client(Brizy_Editor_Project::get(), new WP_Http());
889
+ $versions = $cloudClient->getCloudEditorVersions();
890
+ $response['isSyncAllowed'] = $versions['sync'] == BRIZY_SYNC_VERSION;
891
+ }
892
+
893
+ return $response;
894
+ }
895
  }
editor/entity.php CHANGED
@@ -44,6 +44,7 @@ abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
44
  $type = get_post_type( $postId );
45
 
46
  switch ( $type ) {
 
47
  case 'post':
48
  case Brizy_Admin_Popups_Main::CP_POPUP:
49
  return Brizy_Editor_Post::get( $postId );
@@ -54,6 +55,38 @@ abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
54
  }
55
  }
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  /**
58
  * Will return the key on witch the object data will be saved in storage
59
  *
@@ -69,7 +102,7 @@ abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
69
  /**
70
  * @return mixed
71
  */
72
- abstract public function createResponse();
73
 
74
  /**
75
  * Save post data and and trigger post update
@@ -115,7 +148,7 @@ abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
115
  global $wpdb;
116
  $posts = $wpdb->get_results(
117
  $wpdb->prepare( "SELECT p.ID FROM {$wpdb->postmeta} pm
118
- JOIN {$wpdb->posts} p ON p.ID=pm.post_id and p.post_type <> 'revision' and p.post_type<>'attachment'
119
  WHERE pm.meta_key = %s ", Brizy_Editor_Storage_Post::META_KEY )
120
  );
121
 
@@ -216,7 +249,14 @@ abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
216
  * @return mixed|string
217
  */
218
  protected function createUid() {
 
 
 
219
  if ( $uid = $this->getUid() ) {
 
 
 
 
220
  return $uid;
221
  }
222
 
@@ -230,4 +270,6 @@ abstract class Brizy_Editor_Entity extends Brizy_Admin_Serializable {
230
 
231
  return $this->uid = $uid;
232
  }
 
 
233
  }
44
  $type = get_post_type( $postId );
45
 
46
  switch ( $type ) {
47
+ case 'page':
48
  case 'post':
49
  case Brizy_Admin_Popups_Main::CP_POPUP:
50
  return Brizy_Editor_Post::get( $postId );
55
  }
56
  }
57
 
58
+ /**
59
+ * @param $postId
60
+ *
61
+ * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed
62
+ * @throws Exception
63
+ */
64
+ public function duplicateTo( $postId ) {
65
+ // check post types
66
+ if ( get_post_type( $postId ) !== $this->getWpPost()->post_type ) {
67
+ throw new Exception( 'Cannot duplicate post. Invalid target post type' );
68
+ }
69
+
70
+ if ( ! $this->uses_editor() ) {
71
+ throw new Exception( 'The source post is not using Brizy.' );
72
+ }
73
+
74
+ // copy current date the the new post
75
+ $newPost = self::get( $postId );
76
+
77
+ if ( $newPost->uses_editor() ) {
78
+ throw new Exception( 'Target post is using Brizy.' );
79
+ }
80
+
81
+ $newPost->set_needs_compile( true );
82
+ $newPost->set_uses_editor( true );
83
+ $newPost->setDataVersion( 1 );
84
+ $newPost->createUid();
85
+
86
+ return $newPost;
87
+ }
88
+
89
+
90
  /**
91
  * Will return the key on witch the object data will be saved in storage
92
  *
102
  /**
103
  * @return mixed
104
  */
105
+ abstract public function createResponse($fields = array());
106
 
107
  /**
108
  * Save post data and and trigger post update
148
  global $wpdb;
149
  $posts = $wpdb->get_results(
150
  $wpdb->prepare( "SELECT p.ID FROM {$wpdb->postmeta} pm
151
+ JOIN {$wpdb->posts} p ON p.ID=pm.post_id and p.post_type <> 'revision' and p.post_type<>'attachment' and p.post_status='publish'
152
  WHERE pm.meta_key = %s ", Brizy_Editor_Storage_Post::META_KEY )
153
  );
154
 
249
  * @return mixed|string
250
  */
251
  protected function createUid() {
252
+
253
+ $post_parent_id = $this->getWpPostId();
254
+
255
  if ( $uid = $this->getUid() ) {
256
+ $uid = get_post_meta( $post_parent_id, 'brizy_post_uid', true );
257
+ if ( ! $uid ) {
258
+ update_post_meta( $post_parent_id, 'brizy_post_uid', $this->getUid() );
259
+ }
260
  return $uid;
261
  }
262
 
270
 
271
  return $this->uid = $uid;
272
  }
273
+
274
+
275
  }
editor/forms/abstract-integration.php CHANGED
@@ -111,7 +111,10 @@ abstract class Brizy_Editor_Forms_AbstractIntegration extends Brizy_Admin_Serial
111
 
112
  if ( $instance ) {
113
  $instance->setId( $json_obj->id );
114
- $instance->setCompleted( $json_obj->completed );
 
 
 
115
  }
116
 
117
  add_action( 'wp_mail_failed', array( $instance, 'handleFailToSendMessage' ) );
111
 
112
  if ( $instance ) {
113
  $instance->setId( $json_obj->id );
114
+
115
+ if ( isset( $json_obj->completed ) ) {
116
+ $instance->setCompleted( $json_obj->completed );
117
+ }
118
  }
119
 
120
  add_action( 'wp_mail_failed', array( $instance, 'handleFailToSendMessage' ) );
editor/forms/api.php CHANGED
@@ -8,24 +8,24 @@
8
  */
9
  class Brizy_Editor_Forms_Api {
10
 
11
- const AJAX_GET_FORM = 'brizy_get_form';
12
- const AJAX_CREATE_FORM = 'brizy_create_form';
13
- const AJAX_UPDATE_FORM = 'brizy_update_form';
14
- const AJAX_DELETE_FORM = 'brizy_delete_form';
15
- const AJAX_SUBMIT_FORM = 'brizy_submit_form';
16
 
17
- const AJAX_GET_INTEGRATION = 'brizy_get_integration';
18
- const AJAX_CREATE_INTEGRATION = 'brizy_create_integration';
19
- const AJAX_UPDATE_INTEGRATION = 'brizy_update_integration';
20
- const AJAX_DELETE_INTEGRATION = 'brizy_delete_integration';
21
 
22
- const AJAX_SET_RECAPTCHA_ACCOUNT = 'brizy_set_recaptcha_account';
23
- const AJAX_GET_RECAPTCHA_ACCOUNT = 'brizy_get_recaptcha_account';
24
- const AJAX_DELETE_RECAPTCHA_ACCOUNT = 'brizy_delete_recaptcha_account';
25
- const AJAX_VALIDATE_RECAPTCHA_ACCOUNT = 'brizy_validate_recaptcha_account';
26
 
27
 
28
- const AJAX_AUTHENTICATION_CALLBACK = 'brizy_authentication_callback';
29
 
30
  /**
31
  * @var Brizy_Editor_Post
@@ -52,27 +52,29 @@ class Brizy_Editor_Forms_Api {
52
  }
53
 
54
  private function initialize() {
55
-
56
- if ( Brizy_Editor::is_user_allowed() ) {
57
- add_action( 'wp_ajax_' . self::AJAX_GET_FORM, array( $this, 'get_form' ) );
58
- add_action( 'wp_ajax_' . self::AJAX_CREATE_FORM, array( $this, 'create_form' ) );
59
- add_action( 'wp_ajax_' . self::AJAX_UPDATE_FORM, array( $this, 'update_form' ) );
60
- add_action( 'wp_ajax_' . self::AJAX_DELETE_FORM, array( $this, 'delete_form' ) );
61
-
62
- add_action( 'wp_ajax_' . self::AJAX_CREATE_INTEGRATION, array( $this, 'createIntegration' ) );
63
- add_action( 'wp_ajax_' . self::AJAX_GET_INTEGRATION, array( $this, 'getIntegration' ) );
64
- add_action( 'wp_ajax_' . self::AJAX_UPDATE_INTEGRATION, array( $this, 'updateIntegration' ) );
65
- add_action( 'wp_ajax_' . self::AJAX_DELETE_INTEGRATION, array( $this, 'deleteIntegration' ) );
 
66
  }
67
 
68
  add_filter( 'brizy_form_submit_data', array( $this, 'handleFileTypeFields' ), - 100, 2 );
69
 
70
- add_action( 'wp_ajax_' . self::AJAX_SUBMIT_FORM, array( $this, 'submit_form' ) );
71
- add_action( 'wp_ajax_nopriv_' . self::AJAX_SUBMIT_FORM, array( $this, 'submit_form' ) );
72
  }
73
 
 
74
  protected function error( $code, $message ) {
75
- wp_send_json_error( array( 'code' => $code, 'message' => $message ), $code );
76
  }
77
 
78
  protected function success( $data, $code = 200 ) {
@@ -85,7 +87,6 @@ class Brizy_Editor_Forms_Api {
85
  }
86
  }
87
 
88
-
89
  public function get_form() {
90
  try {
91
  $this->authorize();
@@ -254,7 +255,7 @@ class Brizy_Editor_Forms_Api {
254
  Brizy_Logger::instance()->exception( $e );
255
  $this->error( 500, 'Member was not created.' );
256
  } finally {
257
- if(!$result && $integration->getException()) {
258
  throw new Exception( $integration->getException()->get_error_message() );
259
  }
260
  }
8
  */
9
  class Brizy_Editor_Forms_Api {
10
 
11
+ const AJAX_GET_FORM = '_get_form';
12
+ const AJAX_CREATE_FORM = '_create_form';
13
+ const AJAX_UPDATE_FORM = '_update_form';
14
+ const AJAX_DELETE_FORM = '_delete_form';
15
+ const AJAX_SUBMIT_FORM = '_submit_form';
16
 
17
+ const AJAX_GET_INTEGRATION = '_get_integration';
18
+ const AJAX_CREATE_INTEGRATION = '_create_integration';
19
+ const AJAX_UPDATE_INTEGRATION = '_update_integration';
20
+ const AJAX_DELETE_INTEGRATION = '_delete_integration';
21
 
22
+ const AJAX_SET_RECAPTCHA_ACCOUNT = '_set_recaptcha_account';
23
+ const AJAX_GET_RECAPTCHA_ACCOUNT = '_get_recaptcha_account';
24
+ const AJAX_DELETE_RECAPTCHA_ACCOUNT = '_delete_recaptcha_account';
25
+ const AJAX_VALIDATE_RECAPTCHA_ACCOUNT = '_validate_recaptcha_account';
26
 
27
 
28
+ const AJAX_AUTHENTICATION_CALLBACK = '_authentication_callback';
29
 
30
  /**
31
  * @var Brizy_Editor_Post
52
  }
53
 
54
  private function initialize() {
55
+ $pref = 'wp_ajax_' . Brizy_Editor::prefix();
56
+ $pref_nopriv = 'wp_ajax_nopriv_' . Brizy_Editor::prefix();
57
+ if ( Brizy_Editor_User::is_user_allowed() ) {
58
+
59
+ add_action( $pref . self::AJAX_GET_FORM, array( $this, 'get_form' ) );
60
+ add_action( $pref . self::AJAX_CREATE_FORM, array( $this, 'create_form' ) );
61
+ add_action( $pref . self::AJAX_UPDATE_FORM, array( $this, 'update_form' ) );
62
+ add_action( $pref . self::AJAX_DELETE_FORM, array( $this, 'delete_form' ) );
63
+ add_action( $pref . self::AJAX_CREATE_INTEGRATION, array( $this, 'createIntegration' ) );
64
+ add_action( $pref . self::AJAX_GET_INTEGRATION, array( $this, 'getIntegration' ) );
65
+ add_action( $pref . self::AJAX_UPDATE_INTEGRATION, array( $this, 'updateIntegration' ) );
66
+ add_action( $pref . self::AJAX_DELETE_INTEGRATION, array( $this, 'deleteIntegration' ) );
67
  }
68
 
69
  add_filter( 'brizy_form_submit_data', array( $this, 'handleFileTypeFields' ), - 100, 2 );
70
 
71
+ add_action( $pref . self::AJAX_SUBMIT_FORM, array( $this, 'submit_form' ) );
72
+ add_action( $pref_nopriv . self::AJAX_SUBMIT_FORM, array( $this, 'submit_form' ) );
73
  }
74
 
75
+
76
  protected function error( $code, $message ) {
77
+ wp_send_json_error( array( 'code' => $code, 'message' => $message ), 200 );
78
  }
79
 
80
  protected function success( $data, $code = 200 ) {
87
  }
88
  }
89
 
 
90
  public function get_form() {
91
  try {
92
  $this->authorize();
255
  Brizy_Logger::instance()->exception( $e );
256
  $this->error( 500, 'Member was not created.' );
257
  } finally {
258
+ if ( ! $result && $integration->getException() ) {
259
  throw new Exception( $integration->getException()->get_error_message() );
260
  }
261
  }
editor/forms/form.php CHANGED
@@ -108,7 +108,6 @@ class Brizy_Editor_Forms_Form extends Brizy_Admin_Serializable {
108
  }
109
 
110
 
111
-
112
  /**
113
  * @return Brizy_Editor_Forms_Form
114
  * @throws Exception
@@ -131,11 +130,13 @@ class Brizy_Editor_Forms_Form extends Brizy_Admin_Serializable {
131
 
132
  $formInstance->addIntegration( $an_integration );
133
 
134
- foreach ( (array) $json_obj->integrations as $integration ) {
135
- if ( is_object( $integration ) ) {
136
- $formInstance->addIntegration( Brizy_Editor_Forms_AbstractIntegration::createInstanceFromJson( $integration ) );
137
- }
138
- }
 
 
139
  }
140
 
141
  return $formInstance;
108
  }
109
 
110
 
 
111
  /**
112
  * @return Brizy_Editor_Forms_Form
113
  * @throws Exception
130
 
131
  $formInstance->addIntegration( $an_integration );
132
 
133
+ if ( ! empty( $json_obj->integrations ) ) {
134
+ foreach ( (array) $json_obj->integrations as $integration ) {
135
+ if ( is_object( $integration ) ) {
136
+ $formInstance->addIntegration( Brizy_Editor_Forms_AbstractIntegration::createInstanceFromJson( $integration ) );
137
+ }
138
+ }
139
+ }
140
  }
141
 
142
  return $formInstance;
editor/forms/smtp-integration.php CHANGED
@@ -36,7 +36,7 @@ class Brizy_Editor_Forms_SmtpIntegration extends Brizy_Editor_Forms_WordpressInt
36
  /**
37
  * @var string
38
  */
39
- protected $encryption = true;
40
 
41
  /**
42
  * Brizy_Editor_Forms_WordpressIntegration constructor.
@@ -118,9 +118,8 @@ class Brizy_Editor_Forms_SmtpIntegration extends Brizy_Editor_Forms_WordpressInt
118
  $instance->setPassword( trim( $json_obj->password ) );
119
  }
120
  if ( isset( $json_obj->encryption ) ) {
121
- $instance->setEncryption( (bool) $json_obj->encryption );
122
- } else {
123
- $instance->setEncryption( true );
124
  }
125
  }
126
 
@@ -151,11 +150,8 @@ class Brizy_Editor_Forms_SmtpIntegration extends Brizy_Editor_Forms_WordpressInt
151
  }
152
  if ( isset( $data['encryption'] ) ) {
153
  $instance->setEncryption( $data['encryption'] );
154
- } else {
155
- $instance->setEncryption( true );
156
  }
157
 
158
-
159
  if ( isset( $data['authentication'] ) ) {
160
  $instance->setAuthentication( $data['authentication'] );
161
  }
@@ -214,7 +210,7 @@ class Brizy_Editor_Forms_SmtpIntegration extends Brizy_Editor_Forms_WordpressInt
214
  * @return Brizy_Editor_Forms_SmtpIntegration
215
  */
216
  public function setAuthentication( $authentication ) {
217
- $this->authentication = $authentication;
218
 
219
  return $this;
220
  }
@@ -268,7 +264,13 @@ class Brizy_Editor_Forms_SmtpIntegration extends Brizy_Editor_Forms_WordpressInt
268
  * @return Brizy_Editor_Forms_SmtpIntegration
269
  */
270
  public function setEncryption( $encryption ) {
271
- $this->encryption = (bool) $encryption;
 
 
 
 
 
 
272
 
273
  return $this;
274
  }
36
  /**
37
  * @var string
38
  */
39
+ protected $encryption = 'ssl';
40
 
41
  /**
42
  * Brizy_Editor_Forms_WordpressIntegration constructor.
118
  $instance->setPassword( trim( $json_obj->password ) );
119
  }
120
  if ( isset( $json_obj->encryption ) ) {
121
+
122
+ $instance->setEncryption( $json_obj->encryption );
 
123
  }
124
  }
125
 
150
  }
151
  if ( isset( $data['encryption'] ) ) {
152
  $instance->setEncryption( $data['encryption'] );
 
 
153
  }
154
 
 
155
  if ( isset( $data['authentication'] ) ) {
156
  $instance->setAuthentication( $data['authentication'] );
157
  }
210
  * @return Brizy_Editor_Forms_SmtpIntegration
211
  */
212
  public function setAuthentication( $authentication ) {
213
+ $this->authentication = (bool)$authentication;
214
 
215
  return $this;
216
  }
264
  * @return Brizy_Editor_Forms_SmtpIntegration
265
  */
266
  public function setEncryption( $encryption ) {
267
+
268
+ //this is a hack because we had bool values on this property
269
+ if ( is_bool( $encryption ) ) {
270
+ $this->encryption = $encryption ? 'ssl' : 'tls';
271
+ } else {
272
+ $this->encryption = $encryption;
273
+ }
274
 
275
  return $this;
276
  }
editor/forms/wordpress-integration.php CHANGED
@@ -93,8 +93,9 @@ class Brizy_Editor_Forms_WordpressIntegration extends Brizy_Editor_Forms_Abstrac
93
 
94
  $email_body = $form->getEmailTemplateContent( $fields );
95
 
96
- $headers = apply_filters( 'brizy_form_email_headers', $headers, $fields, $form );
97
- $email_body = apply_filters( 'brizy_form_email_body', $email_body, $fields, $form );
 
98
 
99
  $email_body = $this->insertMetaDataFields( $email_body );
100
 
@@ -104,7 +105,7 @@ class Brizy_Editor_Forms_WordpressIntegration extends Brizy_Editor_Forms_Abstrac
104
 
105
  return wp_mail(
106
  $this->getEmailTo(),
107
- $this->getSubject(),
108
  $email_body,
109
  $headers
110
  );
93
 
94
  $email_body = $form->getEmailTemplateContent( $fields );
95
 
96
+ $headers = apply_filters( 'brizy_form_email_headers', $headers, $fields, $form );
97
+ $email_body = apply_filters( 'brizy_form_email_body', $email_body, $fields, $form );
98
+ $email_subject = apply_filters( 'brizy_form_email_subject', $this->getSubject(), $fields, $form );
99
 
100
  $email_body = $this->insertMetaDataFields( $email_body );
101
 
105
 
106
  return wp_mail(
107
  $this->getEmailTo(),
108
+ $email_subject,
109
  $email_body,
110
  $headers
111
  );
editor/layout.php ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Created by PhpStorm.
4
+ * User: alex
5
+ * Date: 1/18/19
6
+ * Time: 12:20 PM
7
+ */
8
+
9
+
10
+ class Brizy_Editor_Layout extends Brizy_Editor_Post {
11
+
12
+ use Brizy_Editor_Synchronizable;
13
+
14
+ const BRIZY_LAYOUT_META = 'brizy-meta';
15
+ const BRIZY_LAYOUT_MEDIA = 'brizy-media';
16
+
17
+ /**
18
+ * @var string
19
+ */
20
+ protected $meta = '';
21
+
22
+ /**
23
+ * @var string
24
+ */
25
+ protected $media;
26
+
27
+ /**
28
+ * @var Brizy_Editor_Layout
29
+ */
30
+ static protected $layout_instance = null;
31
+
32
+ /**
33
+ * @param $apost
34
+ * @param null $uid
35
+ *
36
+ * @return Brizy_Editor_Layout|Brizy_Editor_Post|mixed
37
+ * @throws Exception
38
+ */
39
+ public static function get( $apost, $uid = null ) {
40
+
41
+ $wp_post_id = $apost;
42
+ if ( $apost instanceof WP_Post ) {
43
+ $wp_post_id = $apost->ID;
44
+ }
45
+
46
+ if ( isset( self::$layout_instance[ $wp_post_id ] ) ) {
47
+ return self::$layout_instance[ $wp_post_id ];
48
+ }
49
+
50
+ return self::$layout_instance[ $wp_post_id ] = new self( $wp_post_id, $uid );
51
+ }
52
+
53
+ protected function canBeSynchronized() {
54
+ return true;
55
+ }
56
+
57
+ public function createResponse( $fields = array() ) {
58
+
59
+
60
+ if ( empty( $fields ) ) {
61
+ $fields = array(
62
+ 'id',
63
+ 'uid',
64
+ 'meta',
65
+ 'data',
66
+ 'status',
67
+ 'dataVersion',
68
+ 'synchronized',
69
+ 'synchronizable',
70
+ 'isCloudEntity'
71
+ );
72
+ }
73
+
74
+ $global = array();
75
+
76
+ if ( in_array( 'uid', $fields ) ) {
77
+ $global['uid'] = $this->getUid();
78
+ }
79
+
80
+ if ( in_array( 'status', $fields ) ) {
81
+ $global['status'] = get_post_status( $this->getWpPostId() );
82
+ }
83
+
84
+ if ( in_array( 'dataVersion', $fields ) ) {
85
+ $global['dataVersion'] = $this->getCurrentDataVersion();
86
+ }
87
+
88
+ if ( in_array( 'data', $fields ) ) {
89
+ $global['data'] = $this->get_editor_data();
90
+ }
91
+
92
+ if ( in_array( 'meta', $fields ) ) {
93
+ $global['meta'] = $this->getMeta();
94
+ }
95
+
96
+ if ( in_array( 'synchronized', $fields ) ) {
97
+ $global['synchronized'] = $this->isSynchronized( Brizy_Editor_Project::get()->getCloudAccountId() );
98
+ }
99
+
100
+ if ( in_array( 'synchronizable', $fields ) ) {
101
+ $global['synchronizable'] = $this->isSynchronizable();
102
+ }
103
+
104
+ if ( in_array( 'isCloudEntity', $fields ) ) {
105
+ $global['isCloudEntity'] = false;
106
+ }
107
+
108
+ return $global;
109
+ }
110
+
111
+ /**
112
+ * Brizy_Editor_Layout constructor.
113
+ *
114
+ * @param $wp_post_id
115
+ * @param null $uid
116
+ *
117
+ * @throws Exception
118
+ */
119
+ public function __construct( $wp_post_id, $uid = null ) {
120
+
121
+ if ( $uid ) {
122
+ $this->uid = $uid;
123
+ }
124
+
125
+ parent::__construct( $wp_post_id );
126
+ }
127
+
128
+ /**
129
+ * @return bool
130
+ */
131
+ public function uses_editor() {
132
+ return true;
133
+ }
134
+
135
+ /**
136
+ * This should always return true
137
+ *
138
+ * @param $val
139
+ *
140
+ * @return $this
141
+ */
142
+ public function set_uses_editor( $val ) {
143
+ $this->uses_editor = true;
144
+
145
+ return $this;
146
+ }
147
+
148
+ /**
149
+ * @return array
150
+ */
151
+ public function getMeta() {
152
+ return $this->meta;
153
+ }
154
+
155
+ /**
156
+ * @param string $meta
157
+ *
158
+ * @return Brizy_Editor_Block
159
+ */
160
+ public function setMeta( $meta ) {
161
+ $this->meta = $meta;
162
+
163
+ return $this;
164
+ }
165
+
166
+ public function getMedia() {
167
+ return $this->media;
168
+ }
169
+
170
+ /**
171
+ * @param string $media
172
+ *
173
+ * @return Brizy_Editor_Block
174
+ */
175
+ public function setMedia( $media ) {
176
+ $this->media = $media;
177
+
178
+ return $this;
179
+ }
180
+
181
+ /**
182
+ * @return mixed
183
+ */
184
+ public function get_template() {
185
+ return get_post_meta( $this->getWpPostId(), '_wp_page_template', true );
186
+ }
187
+
188
+ /**
189
+ * @param string $editor_version
190
+ */
191
+ public function set_editor_version( $editor_version ) {
192
+ $this->editor_version = $editor_version;
193
+ update_metadata( 'post', $this->wp_post_id, self::BRIZY_POST_EDITOR_VERSION, $editor_version );
194
+ }
195
+
196
+
197
+ public function jsonSerialize() {
198
+ $data = get_object_vars( $this );
199
+ $data['editor_data'] = base64_decode( $data['editor_data'] );
200
+ $data['meta'] = $this->getMeta();
201
+ $data['cloudId'] = $this->getCloudId();
202
+ $data['media'] = $this->getMedia();
203
+
204
+ unset( $data['wp_post'] );
205
+
206
+ return $data;
207
+ }
208
+
209
+ public function loadInstanceData() {
210
+ parent::loadInstanceData();
211
+ $storage = $this->getStorage();
212
+ $storage_post = $storage->get( self::BRIZY_POST, false );
213
+
214
+ if ( isset( $storage_post['cloudId'] ) ) {
215
+ $this->cloudId = $storage_post['cloudId'];
216
+ }
217
+
218
+ if ( isset( $storage_post['cloudAccountId'] ) ) {
219
+ $this->setCloudAccountId( $storage_post['cloudAccountId'] );
220
+ }
221
+
222
+
223
+ $this->meta = get_metadata( 'post', $this->getWpPostId(), self::BRIZY_LAYOUT_META, true );
224
+ $this->media = get_metadata( 'post', $this->getWpPostId(), self::BRIZY_LAYOUT_MEDIA, true );
225
+ }
226
+
227
+ public function convertToOptionValue() {
228
+ $data = parent::convertToOptionValue();
229
+
230
+ $data['media'] = $this->getMedia();
231
+ $data['cloudId'] = $this->getCloudId();
232
+ $data['synchronized'] = $this->isSynchronized( Brizy_Editor_Project::get()->getCloudAccountId() );
233
+ $data['synchronizable'] = $this->isSynchronizable();
234
+
235
+ return $data;
236
+ }
237
+
238
+ /**
239
+ * This will take all values from entity and save them to database
240
+ */
241
+ public function saveStorage() {
242
+ parent::saveStorage();
243
+
244
+ update_metadata( 'post', $this->getWpPostId(), self::BRIZY_LAYOUT_META, $this->meta );
245
+ update_metadata( 'post', $this->getWpPostId(), self::BRIZY_LAYOUT_MEDIA, $this->media );
246
+ }
247
+
248
+ }
editor/popup.php ADDED
@@ -0,0 +1,267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Created by PhpStorm.
4
+ * User: alex
5
+ * Date: 1/18/19
6
+ * Time: 12:20 PM
7
+ */
8
+
9
+
10
+ class Brizy_Editor_Popup extends Brizy_Editor_Post {
11
+
12
+ const BRIZY_META = 'brizy-meta';
13
+ const BRIZY_MEDIA = 'brizy-media';
14
+ const BRIZY_CLOUD_CONTAINER = 'brizy-cloud-container';
15
+ const BRIZY_CLOUD_UPDATE_META = 'brizy-cloud-update-required';
16
+
17
+ /**
18
+ * @var string
19
+ */
20
+ protected $meta = '';
21
+
22
+ /**
23
+ * @var string
24
+ */
25
+ protected $media;
26
+
27
+ /**
28
+ * @var array
29
+ */
30
+ protected $cloudId;
31
+
32
+ /**
33
+ * @var Brizy_Editor_Popup
34
+ */
35
+ static protected $popup_instance = null;
36
+
37
+ /**
38
+ * @param $apost
39
+ *
40
+ * @return Brizy_Editor_Popup
41
+ * @throws Brizy_Editor_Exceptions_NotFound
42
+ */
43
+ public static function get( $apost, $uid = null ) {
44
+
45
+ $wp_post_id = $apost;
46
+ if ( $apost instanceof WP_Post ) {
47
+ $wp_post_id = $apost->ID;
48
+ }
49
+
50
+ if ( isset( self::$popup_instance[ $wp_post_id ] ) ) {
51
+ return self::$popup_instance[ $wp_post_id ];
52
+ }
53
+
54
+ return self::$popup_instance[ $wp_post_id ] = new self( $wp_post_id, $uid );
55
+
56
+ }
57
+
58
+ /**
59
+ * @return bool
60
+ * @todo rename this to isGlobal
61
+ *
62
+ */
63
+ public function isGlobalPopup() {
64
+ return $this->getWpPost() instanceof WP_Post && $this->getWpPost()->post_type == Brizy_Admin_Popups_Main::CP_GLOBAL_POPUP;
65
+ }
66
+
67
+ public function isSavedPopup() {
68
+ return $this->getWpPost() instanceof WP_Post && $this->getWpPost()->post_type == Brizy_Admin_Popups_Main::CP_POPUP;
69
+ }
70
+
71
+ /**
72
+ * @return bool
73
+ */
74
+ public function isCloudUpdateRequired() {
75
+
76
+ if ( $this->isGlobalPopup() ) {
77
+ return false;
78
+ }
79
+
80
+ return (bool) get_metadata( 'post', $this->wp_post_id, self::BRIZY_CLOUD_UPDATE_META, true );
81
+ }
82
+
83
+ /**
84
+ * @param bool $cloudUpdateRequired
85
+ *
86
+ * @return Brizy_Editor_Popup
87
+ */
88
+ public function setCloudUpdateRequired( $cloudUpdateRequired ) {
89
+
90
+ if ( $this->isSavedPopup() ) {
91
+ update_metadata( 'post', $this->wp_post_id, self::BRIZY_CLOUD_UPDATE_META, (int) $cloudUpdateRequired );
92
+ }
93
+
94
+ return $this;
95
+ }
96
+
97
+ /**
98
+ * @param string $meta
99
+ */
100
+ public function setContainer( $meta ) {
101
+ $this->meta = $meta;
102
+ update_metadata( 'post', $this->wp_post_id, self::BRIZY_CLOUD_CONTAINER, $meta );
103
+ }
104
+
105
+ public function getContainer() {
106
+ return get_metadata( 'post', $this->wp_post_id, self::BRIZY_CLOUD_CONTAINER, true );
107
+ }
108
+
109
+
110
+ /**
111
+ * @return array
112
+ */
113
+ public function getMeta() {
114
+ return get_metadata( 'post', $this->wp_post_id, self::BRIZY_META, true );
115
+ }
116
+
117
+ /**
118
+ * @param string $meta
119
+ *
120
+ * @return Brizy_Editor_Popup
121
+ */
122
+ public function setMeta( $meta ) {
123
+ $this->meta = $meta;
124
+ update_metadata( 'post', $this->wp_post_id, self::BRIZY_META, $meta );
125
+ }
126
+
127
+ public function getMedia() {
128
+ return get_metadata( 'post', $this->wp_post_id, self::BRIZY_MEDIA, true );
129
+ }
130
+
131
+ /**
132
+ * @param string $media
133
+ *
134
+ * @return Brizy_Editor_Popup
135
+ */
136
+ public function setMedia( $media ) {
137
+ $this->media = $media;
138
+ update_metadata( 'post', $this->wp_post_id, self::BRIZY_MEDIA, $media );
139
+ }
140
+
141
+
142
+ /**
143
+ * @return mixed
144
+ */
145
+ public function get_template() {
146
+ return get_post_meta( $this->getWpPostId(), '_wp_page_template', true );
147
+ }
148
+
149
+
150
+ /**
151
+ * @return array
152
+ */
153
+ public function getCloudId() {
154
+ return $this->cloudId;
155
+ }
156
+
157
+ /**
158
+ * @param array $cloudId
159
+ *
160
+ * @return Brizy_Editor_Popup
161
+ */
162
+ public function setCloudId( $cloudId ) {
163
+ $this->cloudId = $cloudId;
164
+
165
+ return $this;
166
+ }
167
+
168
+
169
+ public function jsonSerialize() {
170
+ $data = get_object_vars( $this );
171
+ $data['editor_data'] = base64_decode( $data['editor_data'] );
172
+
173
+
174
+ $data['cloudId'] = $this->getCloudId();
175
+ $data['meta'] = $this->getMeta();
176
+
177
+ unset( $data['wp_post'] );
178
+
179
+ return $data;
180
+ }
181
+
182
+ /**
183
+ * @param $data
184
+ */
185
+ public function loadInstanceData() {
186
+ parent::loadInstanceData();
187
+
188
+ $storage = $this->getStorage();
189
+ $data = $storage->get( self::BRIZY_POST, false );
190
+
191
+ if ( isset( $data['cloudId'] ) ) {
192
+ $this->cloudId = $data['cloudId'];
193
+ }
194
+ }
195
+
196
+ /**
197
+ * @return array|mixed
198
+ */
199
+ public function convertToOptionValue() {
200
+ $data = parent::convertToOptionValue();
201
+ $data['cloudId'] = $this->getCloudId();
202
+
203
+ return $data;
204
+ }
205
+
206
+
207
+ public function createResponse( $fields = array() ) {
208
+
209
+ $p_id = (int) $this->getWpPostId();
210
+ $the_title = get_the_title( $p_id );
211
+
212
+ if ( empty( $fields ) ) {
213
+ $fields = array(
214
+ 'uid',
215
+ 'meta',
216
+ 'data',
217
+ 'status'
218
+ );
219
+ }
220
+
221
+ $global = array(
222
+ 'data' => $this->get_editor_data(),
223
+ 'uid' => $this->getUid(),
224
+ 'status' => get_post_status( $p_id ),
225
+ 'dataVersion' => $this->getCurrentDataVersion(),
226
+ 'meta' => $this->getMeta()
227
+ );
228
+
229
+ return $global;
230
+ }
231
+
232
+ //
233
+ // /**
234
+ // * @param Brizy_Editor_Popup $post
235
+ // * @param array $fields
236
+ // *
237
+ // * @return array
238
+ // */
239
+ // public static function postData( Brizy_Editor_Popup $post, $fields = array() ) {
240
+ //
241
+ // $p_id = (int) $post->getWpPostId();
242
+ //
243
+ // if ( empty( $fields ) ) {
244
+ // $fields = array( 'uid', 'id', 'meta', 'data', 'status' );
245
+ // }
246
+ //
247
+ // $global = array();
248
+ //
249
+ // if ( in_array( 'uid', $fields ) ) {
250
+ // $global['uid'] = $post->getUid();
251
+ // }
252
+ // if ( in_array( 'status', $fields ) ) {
253
+ // $global['status'] = get_post_status( $p_id );
254
+ // }
255
+ // if ( in_array( 'data', $fields ) ) {
256
+ // $global['data'] = $post->get_editor_data();
257
+ // }
258
+ // if ( in_array( 'meta', $fields ) ) {
259
+ // $global['meta'] = $post->getMeta();
260
+ // }
261
+ //
262
+ //
263
+ // return $global;
264
+ // }
265
+
266
+
267
+ }
editor/post.php CHANGED
@@ -103,22 +103,37 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
103
  }
104
 
105
  return self::$instance[ $wp_post_id ] = new self( $wp_post_id );
106
-
107
  }
108
 
109
  /**
110
- * Clear all cached instances;
 
 
 
111
  */
112
- public static function cleanClassCache() {
113
- self::$instance = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  }
115
 
 
116
  /**
117
- * Mark all brizy post that needs compile
118
  */
119
- public static function markAllForCompilation() {
120
- global $wpdb;
121
- $wpdb->update( $wpdb->postmeta, array( 'meta_value' => 1 ), array( 'meta_key' => self::BRIZY_POST_NEEDS_COMPILE_KEY ) );
122
  }
123
 
124
  /**
@@ -144,7 +159,7 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
144
  parent::unserialize( $data ); // TODO: Change the autogenerated stub
145
  }
146
 
147
- public function createResponse() {
148
 
149
  $p_id = (int) $this->getWpPostId();
150
  $the_title = get_the_title( $p_id );
@@ -194,7 +209,7 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
194
  $post_type = $this->getWpPost()->post_type;
195
  $post_type_object = get_post_type_object( $post_type );
196
  $can_publish = current_user_can( $post_type_object->cap->publish_posts );
197
- $post_status = $can_publish ? 'publish' : 'pending';
198
 
199
  $brizy_compiled_page = $this->get_compiled_page();
200
 
@@ -549,7 +564,7 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
549
  */
550
  public function edit_url() {
551
  return add_query_arg(
552
- array( Brizy_Editor_Constants::EDIT_KEY => '' ),
553
  get_permalink( $this->getWpPostId() )
554
  );
555
  }
@@ -593,12 +608,12 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
593
  $this->set_encoded_compiled_html( $storage_post['compiled_html'] );
594
  }
595
 
596
- $this->set_editor_data( $storage_post['editor_data'] );
597
  $data_needs_compile = isset( $storage_post['needs_compile'] ) ? $storage_post['needs_compile'] : true;
598
- $this->needs_compile = metadata_exists( 'post', $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY ) ? (bool) get_post_meta( $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY, true ) : $data_needs_compile;
599
- $this->editor_version = isset( $storage_post['editor_version'] ) ? $storage_post['editor_version'] : BRIZY_EDITOR_VERSION;
600
- $this->compiler_version = isset( $storage_post['compiler_version'] ) ? $storage_post['compiler_version'] : BRIZY_EDITOR_VERSION;
601
- $this->plugin_version = isset( $storage_post['plugin_version'] ) ? $storage_post['plugin_version'] : BRIZY_VERSION;
 
602
  $this->compiled_html_head = isset( $storage_post['compiled_html_head'] ) ? $storage_post['compiled_html_head'] : null;
603
  $this->compiled_html_body = isset( $storage_post['compiled_html_body'] ) ? $storage_post['compiled_html_body'] : null;
604
  $this->uses_editor = (bool) ( isset( $storage_post[ Brizy_Editor_Constants::USES_BRIZY ] ) ? $storage_post[ Brizy_Editor_Constants::USES_BRIZY ] : false );
@@ -608,7 +623,7 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
608
  if ( ! is_null( $using_editor_old ) ) {
609
  $this->uses_editor = (bool) $using_editor_old;
610
  $storage->delete( Brizy_Editor_Constants::USES_BRIZY );
611
- $this->save();
612
  }
613
  }
614
 
@@ -625,40 +640,69 @@ class Brizy_Editor_Post extends Brizy_Editor_Entity {
625
  return $autosave;
626
  }
627
 
628
- //=================================================================================================================
629
- //=================================================================================================================
630
- //=================================================================================================================
631
- //=================================================================================================================
632
- //=================================================================================================================
633
- //=================================================================================================================
634
- //=================================================================================================================
635
-
636
- //
637
- // /**
638
- // * @var Brizy_Editor_API_Page
639
- // */
640
- // protected $api_page;
641
- //
642
- //
643
- //
644
- //
645
- //
646
- // /**
647
- // * @deprecated;
648
- // */
649
- // public function get_api_page() {
650
- //
651
- // if ( isset( $this->api_page ) ) {
652
- // return $this->api_page;
653
- // }
654
- //
655
- // return null;
656
- // }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
 
658
  /**
 
659
  * @deprecated Use getWpPost();
660
  *
661
- * @return WP_Post
662
  */
663
  public function get_wp_post() {
664
  return $this->getWpPost();
103
  }
104
 
105
  return self::$instance[ $wp_post_id ] = new self( $wp_post_id );
 
106
  }
107
 
108
  /**
109
+ * @param $postId
110
+ *
111
+ * @return Brizy_Editor_Block|Brizy_Editor_Post|mixed
112
+ * @throws Exception
113
  */
114
+ public function duplicateTo( $postId ) {
115
+ $newPost = parent::duplicateTo( $postId );
116
+
117
+ // copy current data to new post
118
+ $newPost->set_template( $this->get_template() );
119
+
120
+ $storage = $this->getStorage();
121
+
122
+ $newStorage = $newPost->getStorage();
123
+ $newStorage->loadStorage( $storage->get_storage() );
124
+ $newPost->loadInstanceData();
125
+ $newPost->saveStorage();
126
+
127
+ return $newPost;
128
+
129
  }
130
 
131
+
132
  /**
133
+ * Clear all cached instances;
134
  */
135
+ public static function cleanClassCache() {
136
+ self::$instance = array();
 
137
  }
138
 
139
  /**
159
  parent::unserialize( $data ); // TODO: Change the autogenerated stub
160
  }
161
 
162
+ public function createResponse($fields = array()) {
163
 
164
  $p_id = (int) $this->getWpPostId();
165
  $the_title = get_the_title( $p_id );
209
  $post_type = $this->getWpPost()->post_type;
210
  $post_type_object = get_post_type_object( $post_type );
211
  $can_publish = current_user_can( $post_type_object->cap->publish_posts );
212
+ $post_status = $this->getWpPost()->post_status;
213
 
214
  $brizy_compiled_page = $this->get_compiled_page();
215
 
564
  */
565
  public function edit_url() {
566
  return add_query_arg(
567
+ array( Brizy_Editor::prefix( '-edit' ) => '' ),
568
  get_permalink( $this->getWpPostId() )
569
  );
570
  }
608
  $this->set_encoded_compiled_html( $storage_post['compiled_html'] );
609
  }
610
 
 
611
  $data_needs_compile = isset( $storage_post['needs_compile'] ) ? $storage_post['needs_compile'] : true;
612
+ $this->set_editor_data( $storage_post['editor_data'] );
613
+ $this->set_needs_compile( metadata_exists( 'post', $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY ) ? (bool) get_post_meta( $this->getWpPostId(), self::BRIZY_POST_NEEDS_COMPILE_KEY, true ) : $data_needs_compile );
614
+ $this->set_editor_version( isset( $storage_post['editor_version'] ) ? $storage_post['editor_version'] : BRIZY_EDITOR_VERSION );
615
+ $this->set_compiler_version( isset( $storage_post['compiler_version'] ) ? $storage_post['compiler_version'] : BRIZY_EDITOR_VERSION );
616
+ $this->set_plugin_version( isset( $storage_post['plugin_version'] ) ? $storage_post['plugin_version'] : BRIZY_VERSION );
617
  $this->compiled_html_head = isset( $storage_post['compiled_html_head'] ) ? $storage_post['compiled_html_head'] : null;
618
  $this->compiled_html_body = isset( $storage_post['compiled_html_body'] ) ? $storage_post['compiled_html_body'] : null;
619
  $this->uses_editor = (bool) ( isset( $storage_post[ Brizy_Editor_Constants::USES_BRIZY ] ) ? $storage_post[ Brizy_Editor_Constants::USES_BRIZY ] : false );
623
  if ( ! is_null( $using_editor_old ) ) {
624
  $this->uses_editor = (bool) $using_editor_old;
625
  $storage->delete( Brizy_Editor_Constants::USES_BRIZY );
626
+ $this->saveStorage();
627
  }
628
  }
629
 
640
  return $autosave;
641
  }
642
 
643
+
644
+ public static function get_post_list( $searchTerm, $postType, $excludePostType = array() ) {
645
+
646
+ global $wp_post_types;
647
+
648
+ $post_query = array(
649
+ 'post_type' => $postType,
650
+ 'posts_per_page' => - 1,
651
+ 'post_status' => $postType == 'attachment' ? 'inherit' : array(
652
+ 'publish',
653
+ 'pending',
654
+ 'draft',
655
+ 'future',
656
+ 'private'
657
+ ),
658
+ 'orderby' => 'post_title',
659
+ 'order' => 'ASC'
660
+ );
661
+
662
+ if ( $searchTerm ) {
663
+ $post_query['post_title_term'] = $searchTerm;
664
+ }
665
+
666
+ $posts = new WP_Query( $post_query );
667
+
668
+ $result = array();
669
+
670
+ foreach ( $posts->posts as $post ) {
671
+
672
+ if ( in_array( $post->post_type, $excludePostType ) ) {
673
+ continue;
674
+ }
675
+
676
+ $result[] = (object) array(
677
+ 'ID' => $post->ID,
678
+ 'uid' => self::create_uid( $post->ID ),
679
+ 'post_type' => $post->post_type,
680
+ 'post_type_label' => $wp_post_types[ $post->post_type ]->label,
681
+ 'title' => apply_filters( 'the_title', $post->post_title ),
682
+ 'post_title' => apply_filters( 'the_title', $post->post_title )
683
+ );
684
+ }
685
+
686
+
687
+ return $result;
688
+ }
689
+
690
+ private static function create_uid( $postId ) {
691
+
692
+ $uid = get_post_meta( $postId, 'brizy_post_uid', true );
693
+
694
+ if ( ! $uid ) {
695
+ $uid = md5( $postId . time() );
696
+ update_post_meta( $postId, 'brizy_post_uid', $uid );
697
+ }
698
+
699
+ return $uid;
700
+ }
701
 
702
  /**
703
+ * @return WP_Post
704
  * @deprecated Use getWpPost();
705
  *
 
706
  */
707
  public function get_wp_post() {
708
  return $this->getWpPost();
editor/post3.php CHANGED
@@ -757,7 +757,7 @@ class Brizy_Editor_Post3 extends Brizy_Admin_Serializable {
757
  */
758
  public function edit_url() {
759
  return add_query_arg(
760
- array( Brizy_Editor_Constants::EDIT_KEY => '' ),
761
  get_permalink( $this->get_parent_id() )
762
  );
763
  }
757
  */
758
  public function edit_url() {
759
  return add_query_arg(
760
+ array( Brizy_Editor::prefix('-edit') => '' ),
761
  get_permalink( $this->get_parent_id() )
762
  );
763
  }
editor/project.php CHANGED
@@ -38,11 +38,15 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
38
  protected $accounts;
39
  protected $license_key;
40
  protected $forms;
 
41
  protected $cloud_token;
 
42
  protected $cloud_project;
43
  protected $image_optimizer_settings;
44
  protected $data;
45
  //---------------------------------------------------------------------------------------------------
 
 
46
 
47
  /**
48
  * Brizy_Editor_Project constructor.
@@ -171,22 +175,25 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
171
  }
172
 
173
  $project_data = array(
174
- 'id' => md5( uniqid( 'Local project', true ) ),
175
- 'title' => 'Brizy Project',
176
- 'name' => uniqid( 'Local project', true ),
177
- 'user' => null,
178
- 'template' => array( 'slug' => 'brizy' ),
179
- 'created' => new DateTime(),
180
- 'updated' => new DateTime(),
181
- 'languages' => array(),
182
- 'pluginVersion' => BRIZY_VERSION,
183
- 'editorVersion' => BRIZY_EDITOR_VERSION,
184
- 'signature' => Brizy_Editor_Signature::get(),
185
- 'accounts' => array(),
186
- 'forms' => array(),
187
- 'data' => base64_encode( file_get_contents( $defaultJsonPath ) ),
188
- 'brizy-license-key' => null,
189
- 'brizy-cloud-token' => null,
 
 
 
190
  'brizy-cloud-project' => null,
191
  'image-optimizer-settings' => array(),
192
  );
@@ -212,7 +219,7 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
212
  /**
213
  * This will be returned by api when project is requested
214
  */
215
- public function createResponse() {
216
  $data = array(
217
  'id' => $this->getId(),
218
  'data' => $this->getDataAsJson(),
@@ -245,6 +252,8 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
245
  'brizy-license-key' => $this->license_key,
246
  'brizy-cloud-token' => $this->cloud_token,
247
  'brizy-cloud-project' => $this->cloud_project,
 
 
248
  'image-optimizer-settings' => $this->image_optimizer_settings,
249
  );
250
  }
@@ -267,6 +276,8 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
267
  $this->license_key = isset( $data['brizy-license-key'] ) ? $data['brizy-license-key'] : null;
268
  $this->cloud_token = isset( $data['brizy-cloud-token'] ) ? $data['brizy-cloud-token'] : null;
269
  $this->cloud_project = isset( $data['brizy-cloud-project'] ) ? $data['brizy-cloud-project'] : null;
 
 
270
  $this->image_optimizer_settings = isset( $data['image-optimizer-settings'] ) ? $data['image-optimizer-settings'] : array();
271
  }
272
 
@@ -279,6 +290,10 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
279
 
280
  parent::save( $autosave );
281
 
 
 
 
 
282
  if ( $autosave == 0 ) {
283
  $this->saveStorage();
284
  } else {
@@ -299,6 +314,10 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
299
  */
300
  public function savePost() {
301
 
 
 
 
 
302
  $post_type = $this->getWpPost()->post_type;
303
  $post_type_object = get_post_type_object( $post_type );
304
  $can_publish = current_user_can( $post_type_object->cap->publish_posts );
@@ -509,6 +528,24 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
509
  $this->cloud_token = $cloud_token;
510
  }
511
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
512
  /**
513
  * @return mixed
514
  */
@@ -522,6 +559,25 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
522
  public function setCloudProject( $cloud_project ) {
523
  $this->cloud_project = $cloud_project;
524
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
525
  //====================================================================================================================================================================================
526
 
527
  /**
@@ -576,7 +632,9 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
576
  * @return Brizy_Editor_Project
577
  */
578
  public function setData( $data ) {
579
- $this->data = $data;
 
 
580
 
581
  return $this;
582
  }
@@ -661,10 +719,17 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
661
  if ( $key == 'brizy-cloud-token' ) {
662
  $this->setCloudToken( $value );
663
  }
 
 
 
664
  if ( $key == 'brizy-cloud-project' ) {
665
  $this->setCloudProject( $value );
666
  }
667
 
 
 
 
 
668
  if ( $key == 'image-optimizer-settings' ) {
669
  $this->setImageOptimizerSettings( $value );
670
  }
@@ -686,6 +751,9 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
686
  if ( $key == 'brizy-license-key' ) {
687
  $this->setLicenseKey( null );
688
  }
 
 
 
689
  if ( $key == 'brizy-cloud-token' ) {
690
  $this->setCloudToken( null );
691
  }
@@ -717,6 +785,11 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
717
  if ( $key == 'brizy-license-key' ) {
718
  return $this->getLicenseKey();
719
  }
 
 
 
 
 
720
  if ( $key == 'brizy-cloud-token' ) {
721
  return $this->getCloudToken();
722
  }
@@ -742,5 +815,4 @@ class Brizy_Editor_Project extends Brizy_Editor_Entity {
742
  }
743
 
744
 
745
-
746
  }
38
  protected $accounts;
39
  protected $license_key;
40
  protected $forms;
41
+ protected $cloud_account_id;
42
  protected $cloud_token;
43
+ protected $cloudContainer;
44
  protected $cloud_project;
45
  protected $image_optimizer_settings;
46
  protected $data;
47
  //---------------------------------------------------------------------------------------------------
48
+ protected $isDataChanged = false;
49
+ //---------------------------------------------------------------------------------------------------
50
 
51
  /**
52
  * Brizy_Editor_Project constructor.
175
  }
176
 
177
  $project_data = array(
178
+ 'id' => md5( uniqid( 'Local project', true ) ),
179
+ 'title' => 'Brizy Project',
180
+ 'name' => uniqid( 'Local project', true ),
181
+ 'user' => null,
182
+ 'template' => array( 'slug' => 'brizy' ),
183
+ 'created' => new DateTime(),
184
+ 'updated' => new DateTime(),
185
+ 'languages' => array(),
186
+ 'pluginVersion' => BRIZY_VERSION,
187
+ 'editorVersion' => BRIZY_EDITOR_VERSION,
188
+ 'signature' => Brizy_Editor_Signature::get(),
189
+ 'accounts' => array(),
190
+ 'forms' => array(),
191
+ 'data' => base64_encode( file_get_contents( $defaultJsonPath ) ),
192
+ 'cloudContainer' => null,
193
+ 'brizy-license-key' => null,
194
+ 'brizy-cloud-token' => null,
195
+ 'brizy-cloud-account-id' => null,
196
+
197
  'brizy-cloud-project' => null,
198
  'image-optimizer-settings' => array(),
199
  );
219
  /**
220
  * This will be returned by api when project is requested
221
  */
222
+ public function createResponse( $fields = array() ) {
223
  $data = array(
224
  'id' => $this->getId(),
225
  'data' => $this->getDataAsJson(),
252
  'brizy-license-key' => $this->license_key,
253
  'brizy-cloud-token' => $this->cloud_token,
254
  'brizy-cloud-project' => $this->cloud_project,
255
+ 'brizy-cloud-account-id' => $this->cloud_account_id,
256
+ 'cloudContainer' => $this->cloudContainer,
257
  'image-optimizer-settings' => $this->image_optimizer_settings,
258
  );
259
  }
276
  $this->license_key = isset( $data['brizy-license-key'] ) ? $data['brizy-license-key'] : null;
277
  $this->cloud_token = isset( $data['brizy-cloud-token'] ) ? $data['brizy-cloud-token'] : null;
278
  $this->cloud_project = isset( $data['brizy-cloud-project'] ) ? $data['brizy-cloud-project'] : null;
279
+ $this->cloud_account_id = isset( $data['brizy-cloud-account-id'] ) ? $data['brizy-cloud-account-id'] : null;
280
+ $this->cloudContainer = isset( $data['cloudContainer'] ) ? $data['cloudContainer'] : null;
281
  $this->image_optimizer_settings = isset( $data['image-optimizer-settings'] ) ? $data['image-optimizer-settings'] : array();
282
  }
283
 
290
 
291
  parent::save( $autosave );
292
 
293
+ if ( ! $this->isDataChanged ) {
294
+ return;
295
+ }
296
+
297
  if ( $autosave == 0 ) {
298
  $this->saveStorage();
299
  } else {
314
  */
315
  public function savePost() {
316
 
317
+ if ( ! $this->isDataChanged ) {
318
+ return;
319
+ }
320
+
321
  $post_type = $this->getWpPost()->post_type;
322
  $post_type_object = get_post_type_object( $post_type );
323
  $can_publish = current_user_can( $post_type_object->cap->publish_posts );
528
  $this->cloud_token = $cloud_token;
529
  }
530
 
531
+ /**
532
+ * @return mixed
533
+ */
534
+ public function getCloudContainer() {
535
+ return $this->cloudContainer;
536
+ }
537
+
538
+ /**
539
+ * @param mixed $cloudContainer
540
+ *
541
+ * @return Brizy_Editor_Project
542
+ */
543
+ public function setCloudContainer( $cloudContainer ) {
544
+ $this->cloudContainer = $cloudContainer;
545
+
546
+ return $this;
547
+ }
548
+
549
  /**
550
  * @return mixed
551
  */
559
  public function setCloudProject( $cloud_project ) {
560
  $this->cloud_project = $cloud_project;
561
  }
562
+
563
+ /**
564
+ * @return mixed
565
+ */
566
+ public function getCloudAccountId() {
567
+ return $this->cloud_account_id;
568
+ }
569
+
570
+ /**
571
+ * @param mixed $cloud_account_id
572
+ *
573
+ * @return Brizy_Editor_Project
574
+ */
575
+ public function setCloudAccountId( $cloud_account_id ) {
576
+ $this->cloud_account_id = $cloud_account_id;
577
+
578
+ return $this;
579
+ }
580
+
581
  //====================================================================================================================================================================================
582
 
583
  /**
632
  * @return Brizy_Editor_Project
633
  */
634
  public function setData( $data ) {
635
+
636
+ $this->isDataChanged = $data !== $this->data;
637
+ $this->data = $data;
638
 
639
  return $this;
640
  }
719
  if ( $key == 'brizy-cloud-token' ) {
720
  $this->setCloudToken( $value );
721
  }
722
+ if ( $key == 'brizy-cloud-account-id' ) {
723
+ $this->setCloudAccountId( $value );
724
+ }
725
  if ( $key == 'brizy-cloud-project' ) {
726
  $this->setCloudProject( $value );
727
  }
728
 
729
+ if ( $key == 'brizy-cloud-container' ) {
730
+ $this->setCloudContainer( $value );
731
+ }
732
+
733
  if ( $key == 'image-optimizer-settings' ) {
734
  $this->setImageOptimizerSettings( $value );
735
  }
751
  if ( $key == 'brizy-license-key' ) {
752
  $this->setLicenseKey( null );
753
  }
754
+ if ( $key == 'brizy-cloud-account-id' ) {
755
+ $this->setCloudAccountId( null );
756
+ }
757
  if ( $key == 'brizy-cloud-token' ) {
758
  $this->setCloudToken( null );
759
  }
785
  if ( $key == 'brizy-license-key' ) {
786
  return $this->getLicenseKey();
787
  }
788
+
789
+ if ( $key == 'brizy-cloud-account-id' ) {
790
+ $this->getCloudAccountId();
791
+ }
792
+
793
  if ( $key == 'brizy-cloud-token' ) {
794
  return $this->getCloudToken();
795
  }
815
  }
816
 
817
 
 
818
  }
editor/rest-extend.php CHANGED
@@ -22,11 +22,13 @@ class Brizy_Editor_RestExtend {
22
  return true;
23
  },
24
  'schema' => array(
25
- 'description' => __( 'Birzy attached media' ),
26
  'type' => 'array'
27
  ),
28
  ) );
29
  } );
 
 
30
  }
31
 
32
  private function get_page_attachments( $uid ) {
@@ -58,4 +60,27 @@ class Brizy_Editor_RestExtend {
58
 
59
  return $attachment_data;
60
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  }
22
  return true;
23
  },
24
  'schema' => array(
25
+ 'description' => __( 'Brizy attached media' ),
26
  'type' => 'array'
27
  ),
28
  ) );
29
  } );
30
+
31
+ add_action( 'rest_api_init', array( $this, 'create_feature_image_focal_point_field' ) );
32
  }
33
 
34
  private function get_page_attachments( $uid ) {
60
 
61
  return $attachment_data;
62
  }
63
+
64
+ public function create_feature_image_focal_point_field() {
65
+
66
+ if ( ! Brizy_Editor_User::is_user_allowed() ) {
67
+ return;
68
+ }
69
+
70
+ $post_types = array_keys( get_post_types( [ 'exclude_from_search' => false, 'show_in_nav_menus' => true ] ) );
71
+
72
+ $post_types = array_filter( $post_types, function( $post_type ) {
73
+ return post_type_supports( $post_type, 'thumbnail' );
74
+ } );
75
+
76
+ register_rest_field( $post_types, 'brizy_attachment_focal_point', array(
77
+ 'get_callback' => function ( $post, $field_name, $request ) {
78
+ return get_post_meta( $post['id'], $field_name, true );
79
+ },
80
+ 'update_callback' => function ( $meta_value, $post ) {
81
+ update_post_meta( $post->ID, 'brizy_attachment_focal_point', $meta_value );
82
+ }
83
+ )
84
+ );
85
+ }
86
  }
editor/screenshot/manager.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Brizy_Editor_Screenshot_Manager {
4
+
5
+ const BLOCK_TYPE_NORMAL = 'normal';
6
+ const BLOCK_TYPE_GLOBAL = 'global';
7
+ const BLOCK_TYPE_SAVED = 'saved';
8
+ const BLOCK_TYPE_LAYOUT = 'layout';
9
+
10
+ /**
11
+ * @var Brizy_Editor_UrlBuilder
12
+ */
13
+ private $urlBuilder;
14
+
15
+ /**
16
+ * Brizy_Editor_Screenshot_Manager constructor.
17
+ *
18
+ * @param Brizy_Editor_UrlBuilder $urlBuilder
19
+ */
20
+ public function __construct( Brizy_Editor_UrlBuilder $urlBuilder ) {
21
+ $this->urlBuilder = $urlBuilder;
22
+ }
23
+
24
+
25
+ /**
26
+ * @param $screenUid
27
+ * @param $blockType
28
+ * @param $imageContent
29
+ * @param $postId
30
+ *
31
+ * @return bool
32
+ */
33
+ public function saveScreenshot( $screenUid, $blockType, $imageContent, $postId ) {
34
+ $path = $this->getScreenshotPath( $screenUid, $blockType, $postId );
35
+
36
+ $extension = 'jpeg';
37
+ $screenFileName = $screenUid . '.' . $extension;
38
+ $screenFullPath = $path . DIRECTORY_SEPARATOR . $screenFileName;
39
+ try {
40
+ return $this->storeThumbnail( $imageContent, $screenFullPath );
41
+ } catch ( Exception $e ) {
42
+ return false;
43
+ }
44
+ }
45
+
46
+ public function getScreenshot( $screenUid, $postId = null ) {
47
+ $types = array( self::BLOCK_TYPE_NORMAL, self::BLOCK_TYPE_GLOBAL, self::BLOCK_TYPE_SAVED, self::BLOCK_TYPE_LAYOUT );
48
+
49
+ foreach ( $types as $type ) {
50
+ $filePath = $this->getScreenshotPath( $screenUid, $type, $postId );
51
+
52
+ $filePath = $filePath . DIRECTORY_SEPARATOR . "{$screenUid}.jpeg";
53
+
54
+ if ( file_exists( $filePath ) ) {
55
+ return $filePath;
56
+ }
57
+ }
58
+
59
+ return null;
60
+ }
61
+
62
+
63
+ private function getScreenshotPath( $screenUID, $blockType, $postID ) {
64
+ $folderPath = null;
65
+
66
+ switch ( $blockType ) {
67
+ case self::BLOCK_TYPE_NORMAL:
68
+ $this->urlBuilder->set_post_id( $postID );
69
+ $folderPath = $this->urlBuilder->page_upload_path( 'blockThumbnails' );
70
+ break;
71
+ case self::BLOCK_TYPE_GLOBAL:
72
+ $folderPath = $this->urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'global' );
73
+ break;
74
+ case self::BLOCK_TYPE_SAVED:
75
+ $folderPath = $this->urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'saved' );
76
+ break;
77
+ case self::BLOCK_TYPE_LAYOUT:
78
+ $folderPath = $this->urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'layout' );
79
+ break;
80
+ default:
81
+ return null;
82
+ }
83
+
84
+ return $folderPath;
85
+ }
86
+
87
+
88
+ /**
89
+ * @param $content
90
+ * @param $filePath
91
+ *
92
+ * @return bool
93
+ */
94
+ private function storeThumbnail( $content, $filePath ) {
95
+ $store_file = $this->storeFile( $content, $filePath );
96
+
97
+ if ( $store_file ) {
98
+ $store_file = $this->resizeImage( $filePath );
99
+ }
100
+
101
+ return $store_file;
102
+ }
103
+
104
+ /**
105
+ * @param $content
106
+ * @param $thumbnailFullPath
107
+ *
108
+ * @return bool
109
+ */
110
+ private function storeFile( $content, $thumbnailFullPath ) {
111
+ $path = dirname( $thumbnailFullPath );
112
+
113
+ if ( ! file_exists( $path ) ) {
114
+ if ( ! @mkdir( $path, 0755, true ) ) {
115
+ return false;
116
+ }
117
+ }
118
+
119
+ return file_put_contents( $thumbnailFullPath, $content ) !== false;
120
+ }
121
+
122
+
123
+ /**
124
+ * @param $thumbnailFullPath
125
+ *
126
+ * @return bool
127
+ */
128
+ private function resizeImage( $thumbnailFullPath ) {
129
+ try {
130
+ $imageEditor = wp_get_image_editor( $thumbnailFullPath );
131
+
132
+ if ( $imageEditor instanceof WP_Error ) {
133
+ throw new Exception( $imageEditor->get_error_message() );
134
+ }
135
+
136
+ $imageEditor->resize( 600, 600 );
137
+ $result = $imageEditor->save( $thumbnailFullPath );
138
+
139
+ return is_array( $result );
140
+ } catch ( Exception $e ) {
141
+ return false;
142
+ }
143
+ }
144
+ }
editor/synchronizable.php ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ trait Brizy_Editor_Synchronizable {
4
+
5
+ /**
6
+ * @var array
7
+ */
8
+ protected $cloudId;
9
+
10
+ /**
11
+ * @var array
12
+ */
13
+ protected $cloudAccountId;
14
+
15
+ /**
16
+ * As our block class has two responsabilities :(
17
+ * we are forced to devine this method to restrict the logic of this
18
+ * trait only to instances that will return true
19
+ *
20
+ * @return mixed
21
+ */
22
+ abstract protected function canBeSynchronized();
23
+
24
+ /**
25
+ * @return array
26
+ */
27
+ public function getCloudId() {
28
+ return $this->cloudId;
29
+ }
30
+
31
+ /**
32
+ * @param array $cloudId
33
+ *
34
+ * @return Brizy_Editor_Synchronizable
35
+ */
36
+ protected function setCloudId( $cloudId ) {
37
+ $this->cloudId = $cloudId;
38
+
39
+ return $this;
40
+ }
41
+
42
+ /**
43
+ * @param string $meta
44
+ *
45
+ * @return Brizy_Editor_Block
46
+ */
47
+ public function setContainer( $container ) {
48
+ update_metadata( 'post', $this->getWpPostId(), 'brizy-cloud-container', $container );
49
+ }
50
+
51
+ public function getContainer() {
52
+ return get_metadata( 'post', $this->getWpPostId(), 'brizy-cloud-container', true );
53
+ }
54
+
55
+
56
+ /**
57
+ * @return array
58
+ */
59
+ protected function getCloudAccountId() {
60
+ return $this->cloudAccountId;
61
+ }
62
+
63
+ /**
64
+ * @param array $cloudAccountId
65
+ *
66
+ * @return Brizy_Editor_Synchronizable
67
+ */
68
+ protected function setCloudAccountId( $cloudAccountId ) {
69
+ $this->cloudAccountId = $cloudAccountId;
70
+
71
+ return $this;
72
+ }
73
+
74
+ /**
75
+ * @return bool
76
+ */
77
+ public function isCloudUpdateRequired() {
78
+
79
+ if ( $this->canBeSynchronized() ) {
80
+ return (bool) get_metadata( 'post', $this->getWpPostId(), 'brizy-cloud-update-required', true );
81
+ }
82
+
83
+ return false;
84
+ }
85
+
86
+ /**
87
+ * @param bool $cloudUpdateRequired
88
+ *
89
+ * @return Brizy_Editor_Block
90
+ */
91
+ public function setCloudUpdateRequired( $cloudUpdateRequired ) {
92
+
93
+ if ( $this->canBeSynchronized() ) {
94
+ update_metadata( 'post', $this->getWpPostId(), 'brizy-cloud-update-required', (int) $cloudUpdateRequired ? true : false );
95
+ }
96
+
97
+ return $this;
98
+ }
99
+
100
+ /**
101
+ * @param $cloudAccountId
102
+ * @param $cloudId
103
+ *
104
+ * @return $this
105
+ */
106
+ public function setSynchronized( $cloudAccountId, $cloudId ) {
107
+ if ( $this->canBeSynchronized() ) {
108
+ $this->setCloudUpdateRequired( false );
109
+ $this->setCloudId( $cloudId );
110
+ $this->setCloudAccountId( $cloudAccountId );
111
+ }
112
+
113
+ return $this;
114
+ }
115
+
116
+ public function isSynchronized( $cloudAccountId ) {
117
+ if ( $this->canBeSynchronized() ) {
118
+ return ! empty( $this->getCloudId() ) && $cloudAccountId === $this->getCloudAccountId();
119
+ }
120
+
121
+ return false;
122
+ }
123
+
124
+ /**
125
+ * There are old blocks that must not be synchronized
126
+ *
127
+ * Only block that have meta key 'brizy-cloud-update-required'
128
+ *
129
+ * @return bool
130
+ */
131
+ public function isSynchronizable() {
132
+ if ( $this->canBeSynchronized() ) {
133
+ return metadata_exists( 'post', $this->getWpPostId(), 'brizy-cloud-update-required' );
134
+ }
135
+
136
+ return false;
137
+ }
138
+
139
+ }
editor/url-builder.php CHANGED
@@ -48,6 +48,37 @@ class Brizy_Editor_UrlBuilder {
48
  return new Brizy_Admin_UrlIterator( $urls );
49
  }
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  /**
52
  * @param $post
53
  */
@@ -65,11 +96,11 @@ class Brizy_Editor_UrlBuilder {
65
  $params = array();
66
 
67
  if ( $this->post_id ) {
68
- $params['brizy_post'] = ( (int) $this->post_id );
69
  }
70
 
71
  // do not move this line
72
- $params['brizy'] = $end_point;
73
 
74
  return add_query_arg( $params, home_url( '/' ) );
75
  }
48
  return new Brizy_Admin_UrlIterator( $urls );
49
  }
50
 
51
+ /**
52
+ * @param string $path
53
+ * @param string $path
54
+ *
55
+ * @return string
56
+ */
57
+ public function plugin_url( $path = '' ) {
58
+
59
+ if ( $path ) {
60
+ $path = '/' . ltrim( $path, '/' );
61
+ }
62
+
63
+ return BRIZY_PLUGIN_URL . $path;
64
+ }
65
+
66
+ /**
67
+ * @param string $path
68
+ * @param string $path
69
+ *
70
+ * @return string
71
+ */
72
+ public function plugin_path( $path = '' ) {
73
+
74
+ if ( $path ) {
75
+ $path = '/' . ltrim( $path, '/' );
76
+ }
77
+
78
+ return BRIZY_PLUGIN_PATH . $path;
79
+ }
80
+
81
+
82
  /**
83
  * @param $post
84
  */
96
  $params = array();
97
 
98
  if ( $this->post_id ) {
99
+ $params[ Brizy_Editor::prefix( '_post' ) ] = ( (int) $this->post_id );
100
  }
101
 
102
  // do not move this line
103
+ $params[ Brizy_Editor::prefix() ] = $end_point;
104
 
105
  return add_query_arg( $params, home_url( '/' ) );
106
  }
editor/user.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  class Brizy_Editor_User {
6
 
7
- const BRIZY_ATTACHMENT_HASH_KEY = 'brizy_attachment_hash';
8
 
9
  private static $instance;
10
 
@@ -44,14 +44,14 @@ class Brizy_Editor_User {
44
 
45
  $this->common_storage = $common_storage;
46
 
47
- $this->platform_user_id = $this->common_storage->get( 'platform_user_id' );
48
- $this->platform_user_email = $this->common_storage->get( 'platform_user_email' );
49
- $this->platform_user_signature = $this->common_storage->get( 'platform_user_signature' );
50
 
51
- $token_data = $this->common_storage->get( 'access-token', false );
52
  if ( $token_data instanceof Brizy_Editor_API_AccessToken ) {
53
  $this->token = $token_data;
54
- $this->common_storage->set( 'access-token', $token_data->convertToOptionValue() );
55
  } elseif ( is_array( $token_data ) ) {
56
  $this->token = Brizy_Editor_API_AccessToken::createFromSerializedData( $token_data );
57
  }
@@ -100,76 +100,6 @@ class Brizy_Editor_User {
100
  }
101
 
102
 
103
- // /**
104
- // * @param null $from_project_id
105
- // * @param bool $is_local
106
- // *
107
- // * @return Brizy_Editor_API_Project
108
- // * @throws Brizy_Editor_API_Exceptions_Exception
109
- // * @throws Brizy_Editor_Http_Exceptions_BadRequest
110
- // * @throws Brizy_Editor_Http_Exceptions_ResponseException
111
- // * @throws Brizy_Editor_Http_Exceptions_ResponseNotFound
112
- // * @throws Brizy_Editor_Http_Exceptions_ResponseUnauthorized
113
- // */
114
- // public function create_project( $from_project_id = null, $is_local = true ) {
115
- // Brizy_Logger::instance()->notice( 'Create new project', array( 'clone_from' => $from_project_id ) );
116
- //
117
- // $project_data = array(
118
- // 'id' => md5( uniqid( 'Local project', true ) ),
119
- // 'title' => 'Local project ',
120
- // 'globals' => '{"project":{},"language":{}}',
121
- // 'name' => uniqid( 'Local project', true ),
122
- // 'user' => null,
123
- // 'template' => array( 'slug' => 'brizy' ),
124
- // 'created' => new DateTime(),
125
- // 'updated' => new DateTime(),
126
- // 'languages' => array(),
127
- // 'version' => BRIZY_EDITOR_VERSION,
128
- // 'signature' => Brizy_Editor_Signature::get(),
129
- // 'cloned_from' => $from_project_id,
130
- // );
131
- //
132
- // $api_project = new Brizy_Editor_API_Project( $project_data );
133
- //
134
- // return $api_project;
135
- // }
136
-
137
- // /**
138
- // * @param Brizy_Editor_API_Project $project
139
- // *
140
- // * @return array|mixed|object
141
- // * @throws Brizy_Editor_API_Exceptions_Exception
142
- // * @throws Brizy_Editor_Http_Exceptions_BadRequest
143
- // * @throws Brizy_Editor_Http_Exceptions_ResponseException
144
- // * @throws Brizy_Editor_Http_Exceptions_ResponseNotFound
145
- // * @throws Brizy_Editor_Http_Exceptions_ResponseUnauthorized
146
- // * @throws Exception
147
- // */
148
- // public function update_project( $project ) {
149
- // Brizy_Logger::instance()->notice( 'Update project', array( $project ) );
150
- //
151
- // $updated_project = $this->get_client()->update_project( $project );
152
- //
153
- // Brizy_Editor_Project::get()->updateProjectData( new Brizy_Editor_API_Project( $updated_project ) );
154
- //
155
- // return $updated_project;
156
- // }
157
-
158
- /**
159
- * @param Brizy_Editor_API_Project $project
160
- *
161
- * @return array|mixed|object
162
- * @throws Brizy_Editor_API_Exceptions_Exception
163
- * @throws Brizy_Editor_Http_Exceptions_BadRequest
164
- * @throws Brizy_Editor_Http_Exceptions_ResponseException
165
- * @throws Brizy_Editor_Http_Exceptions_ResponseNotFound
166
- * @throws Brizy_Editor_Http_Exceptions_ResponseUnauthorized
167
- */
168
- public function get_project( $project ) {
169
- return $this->get_client()->get_project( $project );
170
- }
171
-
172
-
173
  /**
174
  * @param Brizy_Editor_Project $project
175
  * @param Brizy_Editor_Post $post
@@ -196,56 +126,54 @@ class Brizy_Editor_User {
196
 
197
  }
198
 
199
- /**
200
- * @param Brizy_Editor_Project $project
201
- * @param $attachment_id
202
- *
203
- * @return mixed|null
204
- * @throws Brizy_Editor_API_Exceptions_Exception
205
- * @throws Brizy_Editor_Exceptions_NotFound
206
- * @throws Brizy_Editor_Http_Exceptions_BadRequest
207
- * @throws Brizy_Editor_Http_Exceptions_ResponseException
208
- * @throws Brizy_Editor_Http_Exceptions_ResponseNotFound
209
- * @throws Brizy_Editor_Http_Exceptions_ResponseUnauthorized
210
- */
211
- // public function get_media_id( $project, $attachment_id ) {
212
- //
213
- // $brizy_editor_storage_post = Brizy_Editor_Storage_Post::instance( $attachment_id );
214
- // $hash_name = null;
215
- // try {
216
- // $hash_name = $brizy_editor_storage_post->get( self::BRIZY_ATTACHMENT_HASH_KEY );
217
- // } catch ( Brizy_Editor_Exceptions_NotFound $exception ) {
218
- //
219
- // $response = $this
220
- // ->get_client()
221
- // ->add_media( $project->get_id(), $this->image_to_base64( $attachment_id ) );
222
- //
223
- // $brizy_editor_storage_post->set( self::BRIZY_ATTACHMENT_HASH_KEY, $response['name'] );
224
- //
225
- // $hash_name = $response['name'];
226
- // }
227
- //
228
- // return $hash_name;
229
- // }
230
 
231
- protected function get_token() {
232
- return $this->token;
 
 
 
233
  }
234
 
235
- protected function get_client() {
236
- return new Brizy_Editor_API_Client( $this->get_token() );
 
 
 
 
 
 
 
237
  }
238
 
239
- protected function image_to_base64( $attachment_id ) {
240
- $path = get_attached_file( $attachment_id, true );
 
 
 
 
 
 
 
241
 
242
- if ( ! $path ) {
243
- throw new Brizy_Editor_Exceptions_NotFound( "Attachment $attachment_id cannot be found" );
 
 
 
 
244
  }
245
 
246
- $data = file_get_contents( $path );
 
 
247
 
248
- return base64_encode( $data );
 
 
 
 
 
249
  }
250
 
251
  /**
4
 
5
  class Brizy_Editor_User {
6
 
7
+ private static $is_allowed_for_current_user;
8
 
9
  private static $instance;
10
 
44
 
45
  $this->common_storage = $common_storage;
46
 
47
+ $this->platform_user_id = $common_storage->get( 'platform_user_id' );
48
+ $this->platform_user_email = $common_storage->get( 'platform_user_email' );
49
+ $this->platform_user_signature = $common_storage->get( 'platform_user_signature' );
50
 
51
+ $token_data = $common_storage->get( 'access-token', false );
52
  if ( $token_data instanceof Brizy_Editor_API_AccessToken ) {
53
  $this->token = $token_data;
54
+ $common_storage->set( 'access-token', $token_data->convertToOptionValue() );
55
  } elseif ( is_array( $token_data ) ) {
56
  $this->token = Brizy_Editor_API_AccessToken::createFromSerializedData( $token_data );
57
  }
100
  }
101
 
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  /**
104
  * @param Brizy_Editor_Project $project
105
  * @param Brizy_Editor_Post $post
126
 
127
  }
128
 
129
+ public static function is_administrator() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
 
131
+ if ( ! is_user_logged_in() ) {
132
+ return false;
133
+ }
134
+
135
+ return is_admin() || is_super_admin();
136
  }
137
 
138
+ public static function is_subscriber() {
139
+
140
+ if ( ! is_user_logged_in() ) {
141
+ return false;
142
+ }
143
+
144
+ $user = wp_get_current_user();
145
+
146
+ return in_array( 'subscriber', (array) $user->roles );
147
  }
148
 
149
+ public static function is_user_allowed() {
150
+
151
+ if ( ! is_user_logged_in() ) {
152
+ return false;
153
+ }
154
+
155
+ if ( Brizy_Editor_User::is_administrator() ) {
156
+ return true;
157
+ }
158
 
159
+ if ( is_null( self::$is_allowed_for_current_user ) ) {
160
+ self::$is_allowed_for_current_user =
161
+ (
162
+ current_user_can( Brizy_Admin_Capabilities::CAP_EDIT_WHOLE_PAGE ) ||
163
+ current_user_can( Brizy_Admin_Capabilities::CAP_EDIT_CONTENT_ONLY )
164
+ );
165
  }
166
 
167
+ return self::$is_allowed_for_current_user;
168
+ }
169
+
170
 
171
+ protected function get_token() {
172
+ return $this->token;
173
+ }
174
+
175
+ protected function get_client() {
176
+ return new Brizy_Editor_API_Client( $this->get_token() );
177
  }
178
 
179
  /**
maintenance-mode.php CHANGED
@@ -22,22 +22,26 @@ class Brizy_MaintenanceMode {
22
  private function __construct() {
23
  $args = self::get_settings();
24
 
 
 
 
 
25
  if ( 'maintenance' === $args['mode'] ) {
26
  add_action( 'template_redirect', [ $this, '_action_template_redirect' ], 11 );
27
  }
28
 
29
- if ( ( 'maintenance' === $args['mode'] || 'coming_soon' === $args['mode'] ) && ! empty( $args['page'] ) ) {
30
  add_action( 'admin_bar_menu', [ $this, 'action_add_menu_in_admin_bar' ], 301 );
31
  add_action( 'admin_head', [ $this, 'print_style' ] );
32
  add_action( 'wp_head', [ $this, 'print_style' ] );
33
- }
34
 
35
  $this->set_query( $args );
36
  }
37
 
38
  private function set_query( $args ) {
39
 
40
- if ( empty( $args['mode'] ) || current_user_can( 'manage_options' ) || $this->is_login() ) {
41
  return;
42
  }
43
 
@@ -64,10 +68,6 @@ class Brizy_MaintenanceMode {
64
  exit;
65
  }
66
 
67
- if ( empty( $args['page'] ) ) {
68
- return;
69
- }
70
-
71
  $this->send_headers = true;
72
 
73
  $GLOBALS['post'] = get_post( $args['page'] );
@@ -116,7 +116,7 @@ class Brizy_MaintenanceMode {
116
  'parent' => 'brizy-maintenance-on',
117
  'title' => __( 'Edit Page', 'brizy' ),
118
  'href' => add_query_arg(
119
- [ Brizy_Editor_Constants::EDIT_KEY => '' ],
120
  get_permalink( $args['page'] )
121
  ),
122
  ] );
@@ -176,6 +176,27 @@ class Brizy_MaintenanceMode {
176
  'who' => 'logged',
177
  'roles' => [],
178
  'ips' => '',
 
179
  ] );
180
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  }
22
  private function __construct() {
23
  $args = self::get_settings();
24
 
25
+ if ( empty( $args['mode'] ) || empty( $args['page'] ) || $this->is_requested_a_file() ) {
26
+ return;
27
+ }
28
+
29
  if ( 'maintenance' === $args['mode'] ) {
30
  add_action( 'template_redirect', [ $this, '_action_template_redirect' ], 11 );
31
  }
32
 
33
+ if ( is_user_logged_in() ) {
34
  add_action( 'admin_bar_menu', [ $this, 'action_add_menu_in_admin_bar' ], 301 );
35
  add_action( 'admin_head', [ $this, 'print_style' ] );
36
  add_action( 'wp_head', [ $this, 'print_style' ] );
37
+ }
38
 
39
  $this->set_query( $args );
40
  }
41
 
42
  private function set_query( $args ) {
43
 
44
+ if ( current_user_can( 'manage_options' ) || $this->is_login() ) {
45
  return;
46
  }
47
 
68
  exit;
69
  }
70
 
 
 
 
 
71
  $this->send_headers = true;
72
 
73
  $GLOBALS['post'] = get_post( $args['page'] );
116
  'parent' => 'brizy-maintenance-on',
117
  'title' => __( 'Edit Page', 'brizy' ),
118
  'href' => add_query_arg(
119
+ [ Brizy_Editor::prefix('-edit') => '' ],
120
  get_permalink( $args['page'] )
121
  ),
122
  ] );
176
  'who' => 'logged',
177
  'roles' => [],
178
  'ips' => '',
179
+ 'page' => ''
180
  ] );
181
  }
182
+
183
+ private function is_requested_a_file() {
184
+ $out = false;
185
+
186
+ if (
187
+ ! empty( $_GET[ Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT ) ] )
188
+ &&
189
+ ! empty( $_GET[ Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT_FILTER ) ] )
190
+ &&
191
+ ! empty( $_GET[ Brizy_Editor::prefix( Brizy_Public_CropProxy::ENDPOINT_POST ) ] )
192
+ ) {
193
+ $out = true;
194
+ }
195
+
196
+ if ( ! empty( $_GET[ Brizy_Admin_Fonts_Main::CP_FONT ] ) ) {
197
+ $out = true;
198
+ }
199
+
200
+ return $out;
201
+ }
202
  }
public/asset-proxy.php CHANGED
@@ -3,14 +3,13 @@
3
 
4
  class Brizy_Public_AssetProxy extends Brizy_Public_AbstractProxy {
5
 
6
- const ENDPOINT = 'brizy';
7
- const ENDPOINT_POST = 'brizy_post';
8
 
9
  /**
10
  * @return string
11
  */
12
  protected function get_endpoint_keys() {
13
- return array( self::ENDPOINT, self::ENDPOINT_POST );
14
  }
15
 
16
  public function process_query() {
@@ -18,29 +17,30 @@ class Brizy_Public_AssetProxy extends Brizy_Public_AbstractProxy {
18
  $vars = $wp_query->query_vars;
19
 
20
  // Check if user is not querying API
21
- if ( ! isset( $wp_query->query_vars[ self::ENDPOINT ] ) || ! is_string( $wp_query->query_vars[ self::ENDPOINT ] ) ) {
 
22
  return;
23
  }
24
 
25
- if ( ! isset( $vars[ self::ENDPOINT_POST ] ) || ! is_numeric( $vars[ self::ENDPOINT_POST ] ) ) {
26
  return;
27
  }
28
 
29
  session_write_close();
30
 
31
- $brizyPost = Brizy_Editor_Post::get( (int) $vars[ self::ENDPOINT_POST ] );
32
 
33
  if ( $brizyPost->uses_editor() ) {
34
  $this->urlBuilder->set_post_id( $brizyPost->getWpPostId() );
35
  }
36
 
37
- $endpoint_value = $wp_query->query_vars[ self::ENDPOINT ];
38
 
39
  // clean endpoint value
40
  $asset_path = "/" . ltrim( $endpoint_value, "/" );
41
  $asset_url = $this->urlBuilder->external_asset_url( $asset_path );
42
 
43
- $new_path = $this->urlBuilder->page_upload_path( "assets/icons/" . basename( $asset_path ) );
44
 
45
  if ( ! file_exists( $new_path ) ) {
46
  $store_result = $this->store_file( $asset_url, $new_path );
@@ -58,9 +58,9 @@ class Brizy_Public_AssetProxy extends Brizy_Public_AbstractProxy {
58
  $content = file_get_contents( $new_path );
59
 
60
  // send headers
61
- $headers = array();
62
- $headers['Content-Type'] = $this->get_mime( $new_path, 1 );
63
- $headers['Cache-Control'] = 'max-age=600';
64
 
65
  foreach ( $headers as $key => $val ) {
66
  if ( is_array( $val ) ) {
3
 
4
  class Brizy_Public_AssetProxy extends Brizy_Public_AbstractProxy {
5
 
6
+ const ENDPOINT_POST = '_post';
 
7
 
8
  /**
9
  * @return string
10
  */
11
  protected function get_endpoint_keys() {
12
+ return array( Brizy_Editor::prefix(), Brizy_Editor::prefix( self::ENDPOINT_POST ) );
13
  }
14
 
15
  public function process_query() {
17
  $vars = $wp_query->query_vars;
18
 
19
  // Check if user is not querying API
20
+ $endpoint = Brizy_Editor::prefix();
21
+ if ( ! isset( $wp_query->query_vars[ $endpoint ] ) || ! is_string( $wp_query->query_vars[ $endpoint ] ) ) {
22
  return;
23
  }
24
 
25
+ if ( ! isset( $vars[ Brizy_Editor::prefix( self::ENDPOINT_POST ) ] ) || ! is_numeric( $vars[ Brizy_Editor::prefix( self::ENDPOINT_POST ) ] ) ) {
26
  return;
27
  }
28
 
29
  session_write_close();
30
 
31
+ $brizyPost = Brizy_Editor_Post::get( (int) $vars[ Brizy_Editor::prefix( self::ENDPOINT_POST ) ] );
32
 
33
  if ( $brizyPost->uses_editor() ) {
34
  $this->urlBuilder->set_post_id( $brizyPost->getWpPostId() );
35
  }
36
 
37
+ $endpoint_value = $wp_query->query_vars[ $endpoint ];
38
 
39
  // clean endpoint value
40
  $asset_path = "/" . ltrim( $endpoint_value, "/" );
41
  $asset_url = $this->urlBuilder->external_asset_url( $asset_path );
42
 
43
+ $new_path = $this->urlBuilder->page_upload_path( "/assets".str_replace( '/editor', '', $asset_path ) );
44
 
45
  if ( ! file_exists( $new_path ) ) {
46
  $store_result = $this->store_file( $asset_url, $new_path );
58
  $content = file_get_contents( $new_path );
59
 
60
  // send headers
61
+ $headers = array();
62
+ $headers['Content-Type'] = $this->get_mime( $new_path, 1 );
63
+ $headers['Cache-Control'] = 'max-age=600';
64
 
65
  foreach ( $headers as $key => $val ) {
66
  if ( is_array( $val ) ) {
public/attachment-proxy.php CHANGED
@@ -2,13 +2,13 @@
2
 
3
  class Brizy_Public_AttachmentProxy extends Brizy_Public_AbstractProxy {
4
 
5
- const ENDPOINT = 'brizy_attachment';
6
 
7
  /**
8
  * @return string
9
  */
10
  protected function get_endpoint_keys() {
11
- return array( self::ENDPOINT );
12
  }
13
 
14
  /**
@@ -19,14 +19,14 @@ class Brizy_Public_AttachmentProxy extends Brizy_Public_AbstractProxy {
19
  global $wp_query;
20
 
21
  $vars = $wp_query->query_vars;
22
-
23
- if ( isset( $vars[ self::ENDPOINT ] ) && is_string( $vars[ self::ENDPOINT ] ) && ! empty( $vars[ self::ENDPOINT ] ) ) {
24
 
25
  session_write_close();
26
 
27
  try {
28
  // Set artificially high because GD uses uncompressed images in memory.
29
- $attachment = $this->getAttachment( $vars[ self::ENDPOINT ] );
30
 
31
  if ( ! $attachment ) {
32
  status_header( 404 );
2
 
3
  class Brizy_Public_AttachmentProxy extends Brizy_Public_AbstractProxy {
4
 
5
+ const ENDPOINT = '_attachment';
6
 
7
  /**
8
  * @return string
9
  */
10
  protected function get_endpoint_keys() {
11
+ return array( Brizy_Editor::prefix( self::ENDPOINT ) );
12
  }
13
 
14
  /**
19
  global $wp_query;
20
 
21
  $vars = $wp_query->query_vars;
22
+ $ENDPOINT = Brizy_Editor::prefix( self::ENDPOINT );
23
+ if ( isset( $vars[ $ENDPOINT ] ) && is_string( $vars[ $ENDPOINT ] ) && ! empty( $vars[ $ENDPOINT ] ) ) {
24
 
25
  session_write_close();
26
 
27
  try {
28
  // Set artificially high because GD uses uncompressed images in memory.
29
+ $attachment = $this->getAttachment( $vars[ $ENDPOINT ] );
30
 
31
  if ( ! $attachment ) {
32
  status_header( 404 );
public/block-screenshot-proxy.php CHANGED
@@ -3,14 +3,14 @@
3
 
4
  class Brizy_Public_BlockScreenshotProxy extends Brizy_Public_AbstractProxy {
5
 
6
- const ENDPOINT = 'brizy_block_screenshot';
7
- const ENDPOINT_POST = 'brizy_post';
8
 
9
  /**
10
  * @return string
11
  */
12
  protected function get_endpoint_keys() {
13
- return array( self::ENDPOINT, self::ENDPOINT_POST );
14
  }
15
 
16
  public function process_query() {
@@ -18,61 +18,39 @@ class Brizy_Public_BlockScreenshotProxy extends Brizy_Public_AbstractProxy {
18
  $vars = $wp_query->query_vars;
19
 
20
  // Check if user is not querying API
21
- if ( ! isset( $vars[ self::ENDPOINT ] ) || ! is_string( $vars[ self::ENDPOINT ] ) ) {
 
 
22
  return;
23
  }
24
-
25
- session_write_close();
26
-
27
- $blockName = $vars[ self::ENDPOINT ];
28
- $blockPost = isset( $vars[ self::ENDPOINT_POST ] ) ? $vars[ self::ENDPOINT_POST ] : null;
29
-
30
- $types = array( 'normal', 'global', 'saved' );
31
-
32
  $noCacheHeaders = array(
33
  'Cache-Control' => 'max-age=600'
34
  );
 
 
 
 
 
 
35
 
36
- foreach ( $types as $type ) {
37
- $filePath = $this->getBlockScreenshotPath( $blockName, $type, $blockPost );
38
- if ( file_exists( $filePath ) ) {
39
- $this->send_file( $filePath, $noCacheHeaders );
40
 
41
- return;
42
- }
 
43
  }
44
 
45
- return;
46
- }
 
47
 
48
- /**
49
- * @param $blockName
50
- * @param $blockType
51
- * @param $blockPost
52
- *
53
- * @return null
54
- * @throws Brizy_Editor_Exceptions_NotFound
55
- */
56
- private function getBlockScreenshotPath( $blockName, $blockType, $blockPost ) {
57
- $folderPath = null;
58
 
59
- switch ( $blockType ) {
60
- case Brizy_Editor_BlockScreenshotApi::BLOCK_TYPE_NORMAL:
61
- $brizyPost = Brizy_Editor_Post::get( $blockPost );
62
- $this->urlBuilder->set_post_id( $brizyPost->getWpPostId() );
63
- $folderPath = $this->urlBuilder->page_upload_path( 'blockThumbnails' );
64
- break;
65
- case Brizy_Editor_BlockScreenshotApi::BLOCK_TYPE_GLOBAL:
66
- $folderPath = $this->urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'global' );
67
- break;
68
- case Brizy_Editor_BlockScreenshotApi::BLOCK_TYPE_SAVED:
69
- $folderPath = $this->urlBuilder->brizy_upload_path( 'blockThumbnails' . DIRECTORY_SEPARATOR . 'saved' );
70
- break;
71
- default:
72
- return null;
73
  }
74
 
75
- return $folderPath . DIRECTORY_SEPARATOR . "{$blockName}.jpeg";
76
  }
77
-
78
  }
3
 
4
  class Brizy_Public_BlockScreenshotProxy extends Brizy_Public_AbstractProxy {
5
 
6
+ const ENDPOINT = '_block_screenshot';
7
+ const ENDPOINT_POST = '_post';
8
 
9
  /**
10
  * @return string
11
  */
12
  protected function get_endpoint_keys() {
13
+ return array( Brizy_Editor::prefix( self::ENDPOINT), Brizy_Editor::prefix( self::ENDPOINT_POST) );
14
  }
15
 
16
  public function process_query() {
18
  $vars = $wp_query->query_vars;
19
 
20
  // Check if user is not querying API
21
+ $endpoint = Brizy_Editor::prefix( self::ENDPOINT );
22
+ $endpointPost = Brizy_Editor::prefix( self::ENDPOINT_POST );
23
+ if ( ! isset( $vars[ $endpoint ] ) || ! is_string( $vars[ $endpoint ] ) ) {
24
  return;
25
  }
 
 
 
 
 
 
 
 
26
  $noCacheHeaders = array(
27
  'Cache-Control' => 'max-age=600'
28
  );
29
+ session_write_close();
30
+
31
+ $screenUID = $vars[ $endpoint ];
32
+ $postID = isset( $vars[ $endpointPost ] ) ? $vars[ $endpointPost] : null;
33
+
34
+ $manager = new Brizy_Editor_Screenshot_Manager( new Brizy_Editor_UrlBuilder( null ) );
35
 
36
+ $screenPath = $manager->getScreenshot( $screenUID, $postID );
 
 
 
37
 
38
+ if ( $screenPath ) {
39
+ $this->send_file( $screenPath, $noCacheHeaders );
40
+ return;
41
  }
42
 
43
+ // try to get the screenshot from cloud
44
+ $client = new Brizy_Admin_Cloud_Client( Brizy_Editor_Project::get(), new WP_Http() );
45
+ $url = $client->getScreenshotUrl( $screenUID );
46
 
47
+ $result = $manager->saveScreenshot( $screenUID, 'saved', file_get_contents( $url ), null );
 
 
 
 
 
 
 
 
 
48
 
49
+ if ( $result ) {
50
+ $screenPath = $manager->getScreenshot( $screenUID, $postID );
51
+ $this->send_file( $screenPath, $noCacheHeaders );
 
 
 
 
 
 
 
 
 
 
 
52
  }
53
 
54
+ return;
55
  }
 
56
  }
public/crop-proxy.php CHANGED
@@ -2,16 +2,21 @@
2
 
3
  class Brizy_Public_CropProxy extends Brizy_Public_AbstractProxy {
4
 
5
- const ENDPOINT = 'brizy_media';
6
- const ENDPOINT_FILTER = 'brizy_crop';
7
- const ENDPOINT_OPTIMIZE = 'brizy_optimize';
8
- const ENDPOINT_POST = 'brizy_post';
9
 
10
  /**
11
  * @return string
12
  */
13
  protected function get_endpoint_keys() {
14
- return array( self::ENDPOINT, self::ENDPOINT_FILTER, self::ENDPOINT_POST, self::ENDPOINT_OPTIMIZE );
 
 
 
 
 
15
  }
16
 
17
  /**
@@ -23,15 +28,20 @@ class Brizy_Public_CropProxy extends Brizy_Public_AbstractProxy {
23
 
24
  $vars = $wp_query->query_vars;
25
 
26
- if ( ! isset( $vars[ self::ENDPOINT_FILTER ] ) || ! is_string( $vars[ self::ENDPOINT_FILTER ] ) || empty( $vars[ self::ENDPOINT_FILTER ] ) ) {
 
 
 
 
 
27
  return;
28
  }
29
 
30
- if ( ! isset( $vars[ self::ENDPOINT_POST ] ) || ! is_numeric( $vars[ self::ENDPOINT_POST ] ) ) {
31
  return;
32
  }
33
 
34
- if ( isset( $vars[ self::ENDPOINT ] ) && is_string( $vars[ self::ENDPOINT ] ) && ! empty( $vars[ self::ENDPOINT ] ) ) {
35
 
36
  session_write_close();
37
 
@@ -39,9 +49,9 @@ class Brizy_Public_CropProxy extends Brizy_Public_AbstractProxy {
39
  // Set artificially high because GD uses uncompressed images in memory.
40
  wp_raise_memory_limit( 'image' );
41
 
42
- $optimize = (int) ( isset( $vars[ self::ENDPOINT_OPTIMIZE ] ) ? $vars[ self::ENDPOINT_OPTIMIZE ] : false );
43
- $wp_get_post_parent_id = wp_is_post_revision( $vars[ self::ENDPOINT_POST ] ) ? wp_get_post_parent_id( $vars[ self::ENDPOINT_POST ] ) : $vars[ self::ENDPOINT_POST ];
44
- $this->crop_local_asset( $vars[ self::ENDPOINT ], html_entity_decode( $vars[ self::ENDPOINT_FILTER ] ), (int) $wp_get_post_parent_id, $optimize );
45
 
46
  } catch ( Exception $e ) {
47
  Brizy_Logger::instance()->exception( $e );
@@ -75,7 +85,6 @@ class Brizy_Public_CropProxy extends Brizy_Public_AbstractProxy {
75
  $media_url = get_attached_file( $attachment->ID );
76
 
77
  $project = Brizy_Editor_Project::get();
78
- //$brizy_post = Brizy_Editor_Post::get( $post_id );
79
 
80
  $media_cache = new Brizy_Editor_CropCacheMedia( $project, $post_id );
81
  $crop_media_path = $media_cache->crop_media( $media_url, $filter, true, $optimize );
@@ -105,4 +114,4 @@ class Brizy_Public_CropProxy extends Brizy_Public_AbstractProxy {
105
 
106
  return $attachment;
107
  }
108
- }
2
 
3
  class Brizy_Public_CropProxy extends Brizy_Public_AbstractProxy {
4
 
5
+ const ENDPOINT = '_media';
6
+ const ENDPOINT_FILTER = '_crop';
7
+ const ENDPOINT_OPTIMIZE = '_optimize';
8
+ const ENDPOINT_POST = '_post';
9
 
10
  /**
11
  * @return string
12
  */
13
  protected function get_endpoint_keys() {
14
+ return array(
15
+ Brizy_Editor::prefix( self::ENDPOINT ),
16
+ Brizy_Editor::prefix( self::ENDPOINT_FILTER ),
17
+ Brizy_Editor::prefix( self::ENDPOINT_POST ),
18
+ Brizy_Editor::prefix( self::ENDPOINT_OPTIMIZE )
19
+ );
20
  }
21
 
22
  /**
28
 
29
  $vars = $wp_query->query_vars;
30
 
31
+ $endpointKey = Brizy_Editor::prefix( self::ENDPOINT ) ;
32
+ $endpointFilterKey = Brizy_Editor::prefix( self::ENDPOINT_FILTER ) ;
33
+ $endpointPostKey = Brizy_Editor::prefix( self::ENDPOINT_POST ) ;
34
+ $endpointOptimizeKey = Brizy_Editor::prefix( self::ENDPOINT_OPTIMIZE ) ;
35
+
36
+ if ( ! isset( $vars[ $endpointFilterKey ] ) || ! is_string( $vars[ $endpointFilterKey ] ) || empty( $vars[ $endpointFilterKey ] ) ) {
37
  return;
38
  }
39
 
40
+ if ( ! isset( $vars[ $endpointPostKey ] ) || ! is_numeric( $vars[ $endpointPostKey ] ) ) {
41
  return;
42
  }
43
 
44
+ if ( isset( $vars[ $endpointKey ] ) && is_string( $vars[ $endpointKey ] ) && ! empty( $vars[ $endpointKey ] ) ) {
45
 
46
  session_write_close();
47
 
49
  // Set artificially high because GD uses uncompressed images in memory.
50
  wp_raise_memory_limit( 'image' );
51
 
52
+ $optimize = (int) ( isset( $vars[ $endpointOptimizeKey ] ) ? $vars[ $endpointOptimizeKey ] : false );
53
+ $wp_get_post_parent_id = wp_is_post_revision( $vars[ $endpointPostKey ] ) ? wp_get_post_parent_id( $vars[ $endpointPostKey ] ) : $vars[ $endpointPostKey ];
54
+ $this->crop_local_asset( $vars[ $endpointKey ], html_entity_decode( $vars[ $endpointFilterKey ] ), (int) $wp_get_post_parent_id, $optimize );
55
 
56
  } catch ( Exception $e ) {
57
  Brizy_Logger::instance()->exception( $e );
85
  $media_url = get_attached_file( $attachment->ID );
86
 
87
  $project = Brizy_Editor_Project::get();
 
88
 
89
  $media_cache = new Brizy_Editor_CropCacheMedia( $project, $post_id );
90
  $crop_media_path = $media_cache->crop_media( $media_url, $filter, true, $optimize );
114
 
115
  return $attachment;
116
  }
117
+ }
public/editor-build/144-wp/editor/css/editor.css DELETED
@@ -1,8973 +0,0 @@
1
- .brz-ow-hidden{overflow:hidden!important}
2
- .brz-ow-visible{overflow:visible!important}
3
- /*!
4
- * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com
5
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
6
- */@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../fonts/fa-solid-900.eot);src:url(../fonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-solid-900.woff2) format("woff2"),url(../fonts/fa-solid-900.woff) format("woff"),url(../fonts/fa-solid-900.ttf) format("truetype"),url(../fonts/fa-solid-900.svg#fontawesome) format("svg")}
7
- .fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900}
8
- /*!
9
- * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com
10
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
11
- */@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../fonts/fa-brands-400.eot);src:url(../fonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../fonts/fa-brands-400.woff2) format("woff2"),url(../fonts/fa-brands-400.woff) format("woff"),url(../fonts/fa-brands-400.ttf) format("truetype"),url(../fonts/fa-brands-400.svg#fontawesome) format("svg")}
12
- .fab{font-family:'Font Awesome 5 Brands';font-weight:400}
13
- @font-face{font-family:nunito;src:url(../fonts/nunito-regular-webfont.eot);src:url(../fonts/nunito-regular-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/nunito-regular-webfont.woff2) format("woff2"),url(../fonts/nunito-regular-webfont.woff) format("woff");font-weight:400;font-style:normal}
14
- @font-face{font-family:nunito;src:url(../fonts/nunito-italic-webfont.eot);src:url(../fonts/nunito-italic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/nunito-italic-webfont.woff2) format("woff2"),url(../fonts/nunito-italic-webfont.woff) format("woff");font-weight:400;font-style:italic}
15
- @font-face{font-family:nunito;src:url(../fonts/nunito-semibold-webfont.eot);src:url(../fonts/nunito-semibold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/nunito-semibold-webfont.woff2) format("woff2"),url(../fonts/nunito-semibold-webfont.woff) format("woff");font-weight:600;font-style:normal}
16
- @font-face{font-family:nunito;src:url(../fonts/nunito-bold-webfont.eot);src:url(../fonts/nunito-bold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/nunito-bold-webfont.woff2) format("woff2"),url(../fonts/nunito-bold-webfont.woff) format("woff");font-weight:700;font-style:normal}
17
- .brz-ed-sorting{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:move}
18
- .brz-ed-sorting *{pointer-events:none}
19
- .brz-ed-sorting .brz-ed-draggable{display:none}
20
- .brz-ed-sorting .sortable-hovered:not(.brz-ed-border__sortable):not(.brz-ed-container-trigger){position:relative}
21
- .brz-ed-sorting .sortable-hovered.brz-ed-container-trigger{background-color:#03080f}
22
- .brz-ed-sorting .sortable-hovered.brz-ed-container-trigger:after{opacity:1!important;background-color:#fff!important}
23
- .brz-ed-sorting .sortable-chosen:after,.brz-ed-sorting .sortable-chosen:before{display:none}
24
- .brz-ed-sorting .sortable-chosen :not(.brz-ed-border){visibility:hidden!important}
25
- .brz-ed-sorting .sortable-chosen>.brz-ed-border.brz-ed-border--grey>.brz-ed-border__inner{border-color:#879294}
26
- .brz-ed-sorting .sortable-chosen>.brz-ed-border.brz-ed-border--blue>.brz-ed-border__inner{border-color:#3dbfe8}
27
- .brz-ed-sorting .sortable-chosen>.brz-ed-border.brz-ed-border--red>.brz-ed-border__inner{border-color:#ed2164}
28
- .brz-ed-sorting .sortable-chosen>.brz-ed-border>.brz-ed-border__inner{top:-1px;bottom:-1px;visibility:visible!important}
29
- .brz-ed-sorting .sortable-chosen.brz-columns__posts>.brz-ed-border>.brz-ed-border__inner{top:-2px;bottom:-2px}
30
- .brz .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone,.brz-ed-sorting .brz .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-row__container,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone{position:relative}
31
- .brz .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:after,.brz .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:first-child:before,.brz .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.sortable-chosen.brz-wrapper-clone+div:before,.brz-ed-sorting .brz .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:after,.brz-ed-sorting .brz .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:first-child:before,.brz-ed-sorting .brz .sortable-receiver:not(.brz-ed-sortable--empty)>.sortable-chosen.brz-wrapper-clone+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-row__container.sortable-chosen+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-row__container:after,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-row__container:first-child:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone.sortable-chosen+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:after,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:first-child:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper.sortable-chosen+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper:after,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper:first-child:before{content:"";height:2px;position:absolute;left:0;right:0;bottom:-1px;background-color:#879294;opacity:.3}
32
- .brz .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:first-child:before,.brz .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.sortable-chosen.brz-wrapper-clone+div:before,.brz-ed-sorting .brz .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:first-child:before,.brz-ed-sorting .brz .sortable-receiver:not(.brz-ed-sortable--empty)>.sortable-chosen.brz-wrapper-clone+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-row__container.sortable-chosen+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-row__container:first-child:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone.sortable-chosen+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper-clone:first-child:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper.sortable-chosen+div:before,.brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-wrapper:first-child:before{top:-1px;bottom:auto}
33
- .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-columns:not(.brz-columns__posts)>.brz-ed-border.brz-ed-border--grey>.brz-ed-border__inner{border-left-color:#879294;border-right-color:#879294}
34
- .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-columns:not(.brz-columns__posts)>.brz-ed-border.brz-ed-border--blue>.brz-ed-border__inner{border-left-color:#3dbfe8;border-right-color:#3dbfe8}
35
- .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-columns:not(.brz-columns__posts)>.brz-ed-border.brz-ed-border--red>.brz-ed-border__inner{border-left-color:#ed2164;border-right-color:#ed2164}
36
- .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty)>.brz-columns:not(.brz-columns__posts)>.brz-ed-border>.brz-ed-border__inner{top:-1px;bottom:-1px;-webkit-transition:none;transition:none}
37
- .brz-ed-sorting .sortable-receiver:not(.brz-ed-sortable--empty).brz-row{margin-top:5px;margin-bottom:5px}
38
- .brz-ed-sorting .sortable-hovered-top:not(.brz-ed-container-trigger):not(.brz-ed-border__sortable):before{opacity:1!important;-webkit-transform:scaleY(2);transform:scaleY(2);border-radius:4px}
39
- .brz-ed-sorting .sortable-hovered-bottom:not(.brz-ed-container-trigger):not(.brz-ed-border__sortable):after{opacity:1!important;-webkit-transform:scaleY(2);transform:scaleY(2);border-radius:4px}
40
- .brz-ed-sorting .sortable-hovered-left:after,.brz-ed-sorting .sortable-hovered-right:after{top:0;width:2px;height:100%}
41
- .brz-ed-sorting .sortable-hovered-left>.brz-ed-border.brz-ed-border--grey>.brz-ed-border__inner{border-left-color:#879294}
42
- .brz-ed-sorting .sortable-hovered-left>.brz-ed-border.brz-ed-border--blue>.brz-ed-border__inner{border-left-color:#3dbfe8}
43
- .brz-ed-sorting .sortable-hovered-left>.brz-ed-border.brz-ed-border--red>.brz-ed-border__inner{border-left-color:#ed2164}
44
- .brz-ed-sorting .sortable-hovered-left>.brz-ed-border>.brz-ed-border__inner{border-left-width:4px;border-radius:4px;-webkit-transition:none;transition:none;top:-2px!important;bottom:-2px!important;left:-1px!important}
45
- .brz-ed-sorting .sortable-hovered-right>.brz-ed-border.brz-ed-border--grey>.brz-ed-border__inner{border-right-color:#879294}
46
- .brz-ed-sorting .sortable-hovered-right>.brz-ed-border.brz-ed-border--blue>.brz-ed-border__inner{border-right-color:#3dbfe8}
47
- .brz-ed-sorting .sortable-hovered-right>.brz-ed-border.brz-ed-border--red>.brz-ed-border__inner{border-right-color:#ed2164}
48
- .brz-ed-sorting .sortable-hovered-right>.brz-ed-border>.brz-ed-border__inner{border-right-width:4px;border-radius:4px;-webkit-transition:none;transition:none;right:-3px!important;top:-2px!important;bottom:-2px!important}
49
- .sortable-helper{width:30px;height:30px;border-radius:50%;background-color:#3dbfe8;cursor:move}
50
- .sortable-placeholder{outline:1px solid #3dbfe8}
51
- .brz-ed .brz-ed-sortable--empty{position:relative;min-height:125px;width:calc(100% - 20px);height:calc(100% - 20px);margin:10px}
52
- .brz-ed .brz-ed-sortable--empty .brz-ed-border__inner{opacity:.6}
53
- .brz-ed .brz-ed-sortable--empty .brz-ed-border--grey{border-color:#879294}
54
- .brz-ed .brz-ed-sortable--empty .brz-ed-container-trigger{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);margin:0}
55
- .brz{/*!
56
- * animate.css -https://daneden.github.io/animate.css/
57
- * Version - 3.7.2
58
- * Licensed under the MIT license - http://opensource.org/licenses/MIT
59
- *
60
- * Copyright (c) 2019 Daniel Eden
61
- */}
62
- html{-webkit-box-sizing:border-box;box-sizing:border-box}
63
- *,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}
64
- @-ms-viewport{width:device-width}
65
- .brz .brz-figcaption,.brz .brz-figure,.brz .brz-section{display:block}
66
- body{margin:0}
67
- body.brz-ed{background-color:#f3f3f3}
68
- body.brz::after,body.brz::before{display:none}
69
- .brz-iframe{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}
70
- .brz{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
71
- .brz .brz-root__container.brz-reset-all{display:block;overflow:hidden;font-family:inherit}
72
- .brz .brz-hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible;margin:0}
73
- .brz .brz-h1,.brz .brz-h2,.brz .brz-h3,.brz .brz-h4,.brz .brz-h5,.brz .brz-h6{margin-top:0;margin-bottom:0;padding:0}
74
- .brz .brz-p{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}
75
- .brz .brz-span{float:none;margin:0;padding:0;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit}
76
- .brz .brz-dl,.brz .brz-ol,.brz .brz-ul{margin:0;list-style:none;padding:0}
77
- .brz .brz-ol .brz-ol,.brz .brz-ol .brz-ul,.brz .brz-ul .brz-ol,.brz .brz-ul .brz-ul{margin:0}
78
- .brz .brz-dt{font-weight:700}
79
- .brz .brz-dd{margin-bottom:.5rem;margin-left:0}
80
- .brz .brz-blockquote{margin:0 0 1rem}
81
- .brz .brz-dfn{font-style:italic}
82
- .brz .brz-b,.brz .brz-strong{font-weight:700}
83
- .brz .brz-a:not(.brz-btn){color:#3dbfe8;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects;-webkit-box-shadow:none;box-shadow:none}
84
- .brz .brz-a:not(.brz-btn)[href]:hover{color:#1aabd8;-webkit-box-shadow:none;box-shadow:none;cursor:pointer}
85
- .brz .brz-a:not(.brz-btn):active,.brz .brz-a:not(.brz-btn):focus,.brz .brz-a:not(.brz-btn):hover{outline:0}
86
- .brz .brz-a.brz-btn[href]{text-decoration:none}
87
- .brz .brz-figure{margin:0;min-width:auto;min-height:auto}
88
- .brz .brz-img{vertical-align:middle;border-style:none}
89
- .brz svg:not(:root){overflow:hidden}
90
- .brz .brz-button,.brz .brz-input,.brz .brz-label,.brz .brz-textarea{-ms-touch-action:manipulation;touch-action:manipulation}
91
- .brz .brz-table{border-collapse:collapse}
92
- .brz .brz-caption{padding-top:.75rem;padding-bottom:.75rem;color:#828b92;text-align:left;caption-side:bottom}
93
- .brz .brz-th{text-align:left}
94
- .brz .brz-form{margin:0}
95
- .brz .brz-label{display:inline-block;margin-bottom:0;font-weight:400}
96
- .brz .brz-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}
97
- .brz .brz-button,.brz .brz-input,.brz .brz-optgroup,.brz .brz-select,.brz .brz-textarea{padding:0;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}
98
- .brz .brz-button,.brz .brz-input{overflow:visible}
99
- .brz .brz-button,.brz .brz-select{text-transform:none}
100
- .brz .brz-button{-webkit-appearance:button}
101
- .brz .brz-button::-moz-focus-inner{padding:0;border-style:none}
102
- .brz .brz-input[type=checkbox],.brz .brz-input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}
103
- .brz .brz-input[type=number]{-moz-appearance:textfield}
104
- .brz .brz-input[type=date],.brz .brz-input[type=datetime-local],.brz .brz-input[type=month],.brz .brz-input[type=time]{-webkit-appearance:listbox}
105
- .brz .brz-textarea{overflow:auto;resize:vertical}
106
- .brz .brz-fieldset{min-width:0;padding:0;margin:0;border:0}
107
- .brz .brz-iframe,.brz .brz-object{margin-bottom:0;max-width:100%}
108
- .brz .brz-iframe{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}
109
- .brz [hidden]{display:none!important}
110
- .brz .brz-reset-all{-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-item-align:auto;align-self:auto;-webkit-animation-delay:0s;animation-delay:0s;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:0s;animation-duration:0s;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-name:none;animation-name:none;-webkit-animation-play-state:running;animation-play-state:running;-webkit-animation-timing-function:ease;animation-timing-function:ease;azimuth:center;-webkit-backface-visibility:visible;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:transparent;background-image:none;background-origin:padding-box;background-position:0 0;background-repeat:repeat;background-size:auto auto;block-size:auto;border-block-end-color:currentcolor;border-block-end-style:none;border-block-end-width:medium;border-block-start-color:currentcolor;border-block-start-style:none;border-block-start-width:medium;border-bottom-color:currentcolor;border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-style:none;border-bottom-width:medium;border-collapse:separate;border-image-outset:0s;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:currentcolor;border-inline-end-style:none;border-inline-end-width:medium;border-inline-start-color:currentcolor;border-inline-start-style:none;border-inline-start-width:medium;border-left-color:currentcolor;border-left-style:none;border-left-width:medium;border-right-color:currentcolor;border-right-style:none;border-right-width:medium;border-spacing:0;border-top-color:currentcolor;border-top-left-radius:0;border-top-right-radius:0;border-top-style:none;border-top-width:medium;bottom:auto;-webkit-box-decoration-break:slice;box-decoration-break:slice;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-column-break-after:auto;break-after:auto;-webkit-column-break-before:auto;break-before:auto;-webkit-column-break-inside:auto;break-inside:auto;caption-side:top;caret-color:auto;clear:none;clip:auto;-webkit-clip-path:none;clip-path:none;color:initial;-webkit-column-count:auto;-moz-column-count:auto;column-count:auto;-webkit-column-fill:balance;-moz-column-fill:balance;column-fill:balance;-webkit-column-gap:normal;-moz-column-gap:normal;column-gap:normal;-webkit-column-rule-color:currentcolor;-moz-column-rule-color:currentcolor;column-rule-color:currentcolor;-webkit-column-rule-style:none;-moz-column-rule-style:none;column-rule-style:none;-webkit-column-rule-width:medium;-moz-column-rule-width:medium;column-rule-width:medium;-webkit-column-span:none;-moz-column-span:none;column-span:none;-webkit-column-width:auto;-moz-column-width:auto;column-width:auto;content:normal;counter-increment:none;counter-reset:none;cursor:auto;display:inline;empty-cells:show;-webkit-filter:none;filter:none;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:1;flex-shrink:1;-ms-flex-wrap:nowrap;flex-wrap:nowrap;float:none;font-family:initial;-webkit-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-kerning:auto;font-kerning:auto;-webkit-font-language-override:normal;font-language-override:normal;font-size:medium;font-size-adjust:none;font-stretch:normal;font-style:normal;font-synthesis:weight style;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;-webkit-font-variant-ligatures:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-gap:0;grid-column-start:auto;grid-row-end:auto;grid-row-gap:0;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual;image-orientation:0deg;image-rendering:auto;image-resolution:1dppx;ime-mode:auto;inline-size:auto;isolation:auto;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;left:auto;letter-spacing:normal;line-break:auto;line-height:normal;list-style-image:none;list-style-position:outside;list-style-type:disc;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-before:0;margin-block-start:0;margin-bottom:0;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;margin-left:0;margin-right:0;margin-top:0;-webkit-mask-clip:border-box;mask-clip:border-box;-webkit-mask-composite:add;mask-composite:add;-webkit-mask-image:none;mask-image:none;mask-mode:match-source;-webkit-mask-origin:border-box;mask-origin:border-box;-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-repeat:repeat;mask-repeat:repeat;-webkit-mask-size:auto;mask-size:auto;mask-type:luminance;max-height:none;max-width:none;min-block-size:0;min-height:0;min-inline-size:0;min-width:0;mix-blend-mode:normal;-o-object-fit:fill;object-fit:fill;-o-object-position:50% 50%;object-position:50% 50%;offset-block-end:auto;offset-block-start:auto;offset-inline-end:auto;offset-inline-start:auto;opacity:1;-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0;orphans:2;outline-color:initial;outline-offset:0;outline-style:none;outline-width:medium;overflow:visible;overflow-wrap:normal;overflow-x:visible;overflow-y:visible;-webkit-padding-after:0;padding-block-end:0;-webkit-padding-before:0;padding-block-start:0;padding-bottom:0;-webkit-padding-end:0;padding-inline-end:0;-webkit-padding-start:0;padding-inline-start:0;padding-left:0;padding-right:0;padding-top:0;page-break-after:auto;page-break-before:auto;page-break-inside:auto;-webkit-perspective:none;perspective:none;-webkit-perspective-origin:50% 50%;perspective-origin:50% 50%;pointer-events:auto;position:static;quotes:initial;resize:none;right:auto;ruby-align:space-around;ruby-merge:separate;ruby-position:over;scroll-behavior:auto;-ms-scroll-snap-coordinate:none;scroll-snap-coordinate:none;-ms-scroll-snap-destination:0 0;scroll-snap-destination:0 0;-ms-scroll-snap-points-x:none;scroll-snap-points-x:none;-ms-scroll-snap-points-y:none;scroll-snap-points-y:none;-ms-scroll-snap-type:none;scroll-snap-type:none;shape-image-threshold:0;shape-margin:0;shape-outside:none;-moz-tab-size:8;-o-tab-size:8;tab-size:8;table-layout:auto;text-align:initial;-moz-text-align-last:auto;text-align-last:auto;text-combine-upright:none;-webkit-text-decoration-color:currentcolor;text-decoration-color:currentcolor;-webkit-text-decoration-line:none;text-decoration-line:none;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-emphasis-color:currentcolor;text-emphasis-color:currentcolor;-webkit-text-emphasis-position:over;text-emphasis-position:over right;-webkit-text-emphasis-style:none;text-emphasis-style:none;text-indent:0;text-justify:auto;text-orientation:mixed;text-overflow:clip;text-rendering:auto;text-shadow:none;text-transform:none;text-underline-position:auto;top:auto;-ms-touch-action:auto;touch-action:auto;-webkit-transform:none;transform:none;transform-box:border-box;-webkit-transform-origin:50% 50% 0;transform-origin:50% 50% 0;-webkit-transform-style:flat;transform-style:flat;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s;-webkit-transition-property:all;transition-property:all;-webkit-transition-timing-function:ease;transition-timing-function:ease;vertical-align:baseline;visibility:visible;white-space:normal;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:normal;word-wrap:normal;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb;z-index:auto;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none}
111
- .brz .brz-h1,.brz .brz-h2,.brz .brz-h3,.brz .brz-h4,.brz .brz-h5,.brz .brz-h6{font-family:inherit;font-weight:700;line-height:1.2;color:inherit}
112
- .brz .brz-h1{font-size:55px;font-weight:400}
113
- .brz .brz-h2{font-size:40px}
114
- .brz .brz-h3{font-size:32px}
115
- .brz .brz-h4{font-size:26px}
116
- .brz .brz-h5{font-size:19px}
117
- .brz .brz-h6{font-size:14px}
118
- .brz .brz-p{font-size:14px;font-weight:400}
119
- .brz .brz-flex-xs-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
120
- .brz .brz-flex-xs-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
121
- .brz .brz-flex-xs-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
122
- .brz .brz-justify-content-xs-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
123
- .brz .brz-justify-content-xs-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
124
- .brz .brz-justify-content-xs-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
125
- .brz .brz-justify-content-xs-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
126
- .brz .brz-justify-content-xs-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
127
- .brz .brz-align-items-xs-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
128
- .brz .brz-align-items-xs-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
129
- .brz .brz-align-items-xs-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
130
- .brz .brz-align-items-xs-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
131
- .brz .brz-align-items-xs-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
132
- .brz .brz-col-first-xs{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
133
- .brz .brz-col-last-xs{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
134
- .brz .brz-align-self-xs-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
135
- .brz .brz-align-self-xs-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
136
- .brz .brz-align-self-xs-center{-ms-flex-item-align:center!important;align-self:center!important}
137
- .brz .brz-align-self-xs-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
138
- .brz .brz-align-self-xs-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
139
- .brz .brz-flex-xs-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
140
- .brz .brz-flex-xs-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
141
- .brz .brz-align-content-xs-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
142
- .brz .brz-align-content-xs-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
143
- .brz .brz-align-content-xs-center{-ms-flex-line-pack:center!important;align-content:center!important}
144
- .brz .brz-align-content-xs-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
145
- .brz .brz-align-content-xs-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
146
- .brz .brz-align-content-xs-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}
147
- @media (min-width:480px){.brz .brz-flex-ms-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
148
- .brz .brz-flex-ms-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
149
- .brz .brz-flex-ms-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
150
- .brz .brz-justify-content-ms-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
151
- .brz .brz-justify-content-ms-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
152
- .brz .brz-justify-content-ms-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
153
- .brz .brz-justify-content-ms-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
154
- .brz .brz-justify-content-ms-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
155
- .brz .brz-align-items-ms-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
156
- .brz .brz-align-items-ms-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
157
- .brz .brz-align-items-ms-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
158
- .brz .brz-align-items-ms-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
159
- .brz .brz-align-items-ms-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
160
- .brz .brz-col-first-ms{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
161
- .brz .brz-col-last-ms{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
162
- .brz .brz-align-self-ms-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
163
- .brz .brz-align-self-ms-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
164
- .brz .brz-align-self-ms-center{-ms-flex-item-align:center!important;align-self:center!important}
165
- .brz .brz-align-self-ms-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
166
- .brz .brz-align-self-ms-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
167
- .brz .brz-flex-ms-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
168
- .brz .brz-flex-ms-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
169
- .brz .brz-align-content-ms-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
170
- .brz .brz-align-content-ms-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
171
- .brz .brz-align-content-ms-center{-ms-flex-line-pack:center!important;align-content:center!important}
172
- .brz .brz-align-content-ms-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
173
- .brz .brz-align-content-ms-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
174
- .brz .brz-align-content-ms-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:768px){.brz .brz-flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
175
- .brz .brz-flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
176
- .brz .brz-flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
177
- .brz .brz-justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
178
- .brz .brz-justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
179
- .brz .brz-justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
180
- .brz .brz-justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
181
- .brz .brz-justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
182
- .brz .brz-align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
183
- .brz .brz-align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
184
- .brz .brz-align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
185
- .brz .brz-align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
186
- .brz .brz-align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
187
- .brz .brz-col-first-sm{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
188
- .brz .brz-col-last-sm{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
189
- .brz .brz-align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
190
- .brz .brz-align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
191
- .brz .brz-align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}
192
- .brz .brz-align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
193
- .brz .brz-align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
194
- .brz .brz-flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
195
- .brz .brz-flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
196
- .brz .brz-align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
197
- .brz .brz-align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
198
- .brz .brz-align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}
199
- .brz .brz-align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
200
- .brz .brz-align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
201
- .brz .brz-align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:992px){.brz .brz-flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
202
- .brz .brz-flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
203
- .brz .brz-flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
204
- .brz .brz-justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
205
- .brz .brz-justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
206
- .brz .brz-justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
207
- .brz .brz-justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
208
- .brz .brz-justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
209
- .brz .brz-align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
210
- .brz .brz-align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
211
- .brz .brz-align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
212
- .brz .brz-align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
213
- .brz .brz-align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
214
- .brz .brz-col-first-md{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
215
- .brz .brz-col-last-md{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
216
- .brz .brz-align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
217
- .brz .brz-align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
218
- .brz .brz-align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}
219
- .brz .brz-align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
220
- .brz .brz-align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
221
- .brz .brz-flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
222
- .brz .brz-flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
223
- .brz .brz-align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
224
- .brz .brz-align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
225
- .brz .brz-align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}
226
- .brz .brz-align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
227
- .brz .brz-align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
228
- .brz .brz-align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:1200px){.brz .brz-flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
229
- .brz .brz-flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
230
- .brz .brz-flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
231
- .brz .brz-justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
232
- .brz .brz-justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
233
- .brz .brz-justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
234
- .brz .brz-justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
235
- .brz .brz-justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
236
- .brz .brz-align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
237
- .brz .brz-align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
238
- .brz .brz-align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
239
- .brz .brz-align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
240
- .brz .brz-align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
241
- .brz .brz-col-first-lg{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
242
- .brz .brz-col-last-lg{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
243
- .brz .brz-align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
244
- .brz .brz-align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
245
- .brz .brz-align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}
246
- .brz .brz-align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
247
- .brz .brz-align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
248
- .brz .brz-flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
249
- .brz .brz-flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
250
- .brz .brz-align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
251
- .brz .brz-align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
252
- .brz .brz-align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}
253
- .brz .brz-align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
254
- .brz .brz-align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
255
- .brz .brz-align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:1400px){.brz .brz-flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
256
- .brz .brz-flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
257
- .brz .brz-flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
258
- .brz .brz-justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
259
- .brz .brz-justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
260
- .brz .brz-justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
261
- .brz .brz-justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
262
- .brz .brz-justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
263
- .brz .brz-align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
264
- .brz .brz-align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
265
- .brz .brz-align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
266
- .brz .brz-align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
267
- .brz .brz-align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
268
- .brz .brz-col-first-xl{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
269
- .brz .brz-col-last-xl{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
270
- .brz .brz-align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
271
- .brz .brz-align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
272
- .brz .brz-align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}
273
- .brz .brz-align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
274
- .brz .brz-align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
275
- .brz .brz-flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
276
- .brz .brz-flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
277
- .brz .brz-align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
278
- .brz .brz-align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
279
- .brz .brz-align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}
280
- .brz .brz-align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
281
- .brz .brz-align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
282
- .brz .brz-align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}.brz .brz-d-block{display:block!important}
283
- .brz .brz-d-inline-block{display:inline-block!important}
284
- .brz .brz-d-inline{display:inline!important}
285
- .brz .brz-d-none{display:none!important}
286
- .brz .brz-d-table{width:100%;display:table;position:relative}
287
- .brz .brz-d-table-cell{display:table-cell}
288
- .brz .brz-blocked{pointer-events:none}
289
- .brz .brz-d-xs-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
290
- .brz .brz-d-xs-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}
291
- @media (min-width:480px){.brz .brz-d-ms-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
292
- .brz .brz-d-ms-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:768px){.brz .brz-d-sm-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
293
- .brz .brz-d-sm-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:992px){.brz .brz-d-md-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
294
- .brz .brz-d-md-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:1200px){.brz .brz-d-lg-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
295
- .brz .brz-d-lg-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:1400px){.brz .brz-d-xl-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
296
- .brz .brz-d-xl-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}.brz .brz-p-relative{position:relative!important}
297
- .brz .brz-p-absolute{position:absolute!important}
298
- .brz .brz-p-fixed{position:fixed!important}
299
- .brz .brz-invisible{visibility:hidden!important}
300
- .brz .brz-visible{visibility:visible!important}
301
- .brz .brz-hidden-xs-up{display:none!important}
302
- @media (max-width:479px){.brz .brz-hidden-xs-down{display:none!important}}.brz .brz-invisible-xs-up{visibility:hidden!important}
303
- @media (max-width:479px){.brz .brz-invisible-xs-down{visibility:hidden!important}}.brz .brz-invisible-blur-xs-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}
304
- @media (max-width:479px){.brz .brz-invisible-blur-xs-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:480px){.brz .brz-hidden-ms-up{display:none!important}}@media (max-width:767px){.brz .brz-hidden-ms-down{display:none!important}}@media (min-width:480px){.brz .brz-invisible-ms-up{visibility:hidden!important}}@media (max-width:767px){.brz .brz-invisible-ms-down{visibility:hidden!important}}@media (min-width:480px){.brz .brz-invisible-blur-ms-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:767px){.brz .brz-invisible-blur-ms-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:768px){.brz .brz-hidden-sm-up{display:none!important}}@media (max-width:991px){.brz .brz-hidden-sm-down{display:none!important}}@media (min-width:768px){.brz .brz-invisible-sm-up{visibility:hidden!important}}@media (max-width:991px){.brz .brz-invisible-sm-down{visibility:hidden!important}}@media (min-width:768px){.brz .brz-invisible-blur-sm-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:991px){.brz .brz-invisible-blur-sm-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:992px){.brz .brz-hidden-md-up{display:none!important}}@media (max-width:1199px){.brz .brz-hidden-md-down{display:none!important}}@media (min-width:992px){.brz .brz-invisible-md-up{visibility:hidden!important}}@media (max-width:1199px){.brz .brz-invisible-md-down{visibility:hidden!important}}@media (min-width:992px){.brz .brz-invisible-blur-md-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:1199px){.brz .brz-invisible-blur-md-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:1200px){.brz .brz-hidden-lg-up{display:none!important}}@media (max-width:1399px){.brz .brz-hidden-lg-down{display:none!important}}@media (min-width:1200px){.brz .brz-invisible-lg-up{visibility:hidden!important}}@media (max-width:1399px){.brz .brz-invisible-lg-down{visibility:hidden!important}}@media (min-width:1200px){.brz .brz-invisible-blur-lg-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:1399px){.brz .brz-invisible-blur-lg-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:1400px){.brz .brz-hidden-xl-up{display:none!important}}.brz .brz-hidden-xl-down{display:none!important}
305
- @media (min-width:1400px){.brz .brz-invisible-xl-up{visibility:hidden!important}}.brz .brz-invisible-xl-down{visibility:hidden!important}
306
- @media (min-width:1400px){.brz .brz-invisible-blur-xl-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}.brz .brz-invisible-blur-xl-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}
307
- .brz .brz-hidden{display:none!important}
308
- .brz .brz-visible-print-block{display:none!important}
309
- @media print{.brz .brz-visible-print-block{display:block!important}}.brz .brz-visible-print-inline{display:none!important}
310
- @media print{.brz .brz-visible-print-inline{display:inline!important}}.brz .brz-visible-print-inline-block{display:none!important}
311
- @media print{.brz .brz-visible-print-inline-block{display:inline-block!important}}@media print{.brz .brz-hidden-print{display:none!important}}.brz .brz-ow-hidden{overflow:hidden!important}
312
- .brz .brz-ow-visible{overflow:visible!important}
313
- .brz .brz-pointer-events-none{pointer-events:none!important}
314
- .brz .brz-pointer-events-auto{pointer-events:auto!important}
315
- .brz .brz-fw-100{font-weight:100!important}
316
- .brz .brz-fw-200{font-weight:200!important}
317
- .brz .brz-fw-300{font-weight:300!important}
318
- .brz .brz-fw-400{font-weight:400!important}
319
- .brz .brz-fw-500{font-weight:500!important}
320
- .brz .brz-fw-600{font-weight:600!important}
321
- .brz .brz-fw-700{font-weight:700!important}
322
- .brz .brz-fw-800{font-weight:800!important}
323
- .brz .brz-fw-900{font-weight:900!important}
324
- .brz .brz--required{color:#ff0e0e;padding-left:5px}
325
- @-webkit-keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
326
- 40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}
327
- 70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}
328
- 90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{20%,53%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
329
- 40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}
330
- 70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}
331
- 90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.brz .bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}
332
- @-webkit-keyframes flash{50%,from,to{opacity:1}
333
- 25%,75%{opacity:0}}@keyframes flash{50%,from,to{opacity:1}
334
- 25%,75%{opacity:0}}.brz .flash{-webkit-animation-name:flash;animation-name:flash}
335
- @-webkit-keyframes pulse{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}
336
- 50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}
337
- to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}
338
- 50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}
339
- to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.brz .pulse{-webkit-animation-name:pulse;animation-name:pulse}
340
- @-webkit-keyframes rubberBand{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}
341
- 30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}
342
- 40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}
343
- 50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}
344
- 65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}
345
- 75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}
346
- to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}
347
- 30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}
348
- 40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}
349
- 50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}
350
- 65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}
351
- 75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}
352
- to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.brz .rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}
353
- @-webkit-keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
354
- 10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}
355
- 20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
356
- 10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}
357
- 20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.brz .shake{-webkit-animation-name:shake;animation-name:shake}
358
- @-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}
359
- 6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}
360
- 18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}
361
- 31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}
362
- 43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}
363
- 50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}
364
- 6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}
365
- 18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}
366
- 31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}
367
- 43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}
368
- 50%{-webkit-transform:translateX(0);transform:translateX(0)}}.brz .headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}
369
- @-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}
370
- 40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}
371
- 60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}
372
- 80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}
373
- to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}
374
- 40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}
375
- 60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}
376
- 80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}
377
- to{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.brz .swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}
378
- @-webkit-keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}
379
- 10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}
380
- 30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}
381
- 40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}
382
- to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}
383
- 10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}
384
- 30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}
385
- 40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}
386
- to{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.brz .tada{-webkit-animation-name:tada;animation-name:tada}
387
- @-webkit-keyframes wobble{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
388
- 15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}
389
- 30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}
390
- 45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}
391
- 60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}
392
- 75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}
393
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes wobble{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
394
- 15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}
395
- 30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}
396
- 45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}
397
- 60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}
398
- 75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}
399
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .wobble{-webkit-animation-name:wobble;animation-name:wobble}
400
- @-webkit-keyframes jello{11.1%,from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
401
- 22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}
402
- 33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}
403
- 44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}
404
- 55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}
405
- 66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}
406
- 77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}
407
- 88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}@keyframes jello{11.1%,from,to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
408
- 22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}
409
- 33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}
410
- 44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}
411
- 55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}
412
- 66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}
413
- 77.7%{-webkit-transform:skewX(.39062deg) skewY(.39062deg);transform:skewX(.39062deg) skewY(.39062deg)}
414
- 88.8%{-webkit-transform:skewX(-.19531deg) skewY(-.19531deg);transform:skewX(-.19531deg) skewY(-.19531deg)}}.brz .jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}
415
- @-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}
416
- 14%{-webkit-transform:scale(1.3);transform:scale(1.3)}
417
- 28%{-webkit-transform:scale(1);transform:scale(1)}
418
- 42%{-webkit-transform:scale(1.3);transform:scale(1.3)}
419
- 70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}
420
- 14%{-webkit-transform:scale(1.3);transform:scale(1.3)}
421
- 28%{-webkit-transform:scale(1);transform:scale(1)}
422
- 42%{-webkit-transform:scale(1.3);transform:scale(1.3)}
423
- 70%{-webkit-transform:scale(1);transform:scale(1)}}.brz .heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}
424
- @-webkit-keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
425
- 0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}
426
- 20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}
427
- 40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}
428
- 60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}
429
- 80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}
430
- to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{20%,40%,60%,80%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
431
- 0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}
432
- 20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}
433
- 40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}
434
- 60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}
435
- 80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}
436
- to{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.brz .bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceIn;animation-name:bounceIn}
437
- @-webkit-keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
438
- 0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}
439
- 60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}
440
- 75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
441
- 90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}
442
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInDown{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
443
- 0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}
444
- 60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}
445
- 75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
446
- 90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}
447
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}
448
- @-webkit-keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
449
- 0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}
450
- 60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}
451
- 75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}
452
- 90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}
453
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInLeft{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
454
- 0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}
455
- 60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}
456
- 75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}
457
- 90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}
458
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}
459
- @-webkit-keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
460
- from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}
461
- 60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}
462
- 75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}
463
- 90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}
464
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInRight{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
465
- from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}
466
- 60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}
467
- 75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}
468
- 90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}
469
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}
470
- @-webkit-keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
471
- from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}
472
- 60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}
473
- 75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}
474
- 90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}
475
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{60%,75%,90%,from,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}
476
- from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}
477
- 60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}
478
- 75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}
479
- 90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}
480
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}
481
- @-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}
482
- 50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}
483
- to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}
484
- 50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}
485
- to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.brz .bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceOut;animation-name:bounceOut}
486
- @-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}
487
- 40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}
488
- to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}
489
- 40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}
490
- to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.brz .bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}
491
- @-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}
492
- to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}
493
- to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.brz .bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}
494
- @-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}
495
- to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}
496
- to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.brz .bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}
497
- @-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
498
- 40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}
499
- to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
500
- 40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}
501
- to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.brz .bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}
502
- @-webkit-keyframes fadeIn{from{opacity:0}
503
- to{opacity:1}}@keyframes fadeIn{from{opacity:0}
504
- to{opacity:1}}.brz .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}
505
- @-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}
506
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}
507
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}
508
- @-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}
509
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}
510
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}
511
- @-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}
512
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}
513
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}
514
- @-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}
515
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}
516
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}
517
- @-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}
518
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}
519
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}
520
- @-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}
521
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}
522
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}
523
- @-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}
524
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}
525
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}
526
- @-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}
527
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}
528
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}
529
- @-webkit-keyframes fadeOut{from{opacity:1}
530
- to{opacity:0}}@keyframes fadeOut{from{opacity:1}
531
- to{opacity:0}}.brz .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}
532
- @-webkit-keyframes fadeOutDown{from{opacity:1}
533
- to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}
534
- to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.brz .fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}
535
- @-webkit-keyframes fadeOutDownBig{from{opacity:1}
536
- to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}
537
- to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.brz .fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}
538
- @-webkit-keyframes fadeOutLeft{from{opacity:1}
539
- to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}
540
- to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.brz .fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}
541
- @-webkit-keyframes fadeOutLeftBig{from{opacity:1}
542
- to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}
543
- to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.brz .fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}
544
- @-webkit-keyframes fadeOutRight{from{opacity:1}
545
- to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}
546
- to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.brz .fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}
547
- @-webkit-keyframes fadeOutRightBig{from{opacity:1}
548
- to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}
549
- to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.brz .fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}
550
- @-webkit-keyframes fadeOutUp{from{opacity:1}
551
- to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}
552
- to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.brz .fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}
553
- @-webkit-keyframes fadeOutUpBig{from{opacity:1}
554
- to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}
555
- to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.brz .fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}
556
- @-webkit-keyframes flip{from{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,-360deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}
557
- 40%{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}
558
- 50%{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
559
- 80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translate3d(0,0,0) rotate3d(0,1,0,0deg);transform:perspective(400px) scale3d(.95,.95,.95) translate3d(0,0,0) rotate3d(0,1,0,0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
560
- to{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,0deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,-360deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}
561
- 40%{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}
562
- 50%{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
563
- 80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translate3d(0,0,0) rotate3d(0,1,0,0deg);transform:perspective(400px) scale3d(.95,.95,.95) translate3d(0,0,0) rotate3d(0,1,0,0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
564
- to{-webkit-transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,0deg);transform:perspective(400px) scale3d(1,1,1) translate3d(0,0,0) rotate3d(0,1,0,0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.brz .animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}
565
- @-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}
566
- 40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
567
- 60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}
568
- 80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}
569
- to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}
570
- 40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
571
- 60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}
572
- 80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}
573
- to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.brz .flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}
574
- @-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}
575
- 40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
576
- 60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}
577
- 80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}
578
- to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}
579
- 40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
580
- 60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}
581
- 80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}
582
- to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.brz .flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}
583
- @-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}
584
- 30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}
585
- to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}
586
- 30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}
587
- to{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.brz .flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}
588
- @-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}
589
- 30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}
590
- to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}
591
- 30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}
592
- to{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.brz .flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}
593
- @-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}
594
- 60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}
595
- 80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}
596
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}
597
- 60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}
598
- 80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}
599
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}
600
- @-webkit-keyframes lightSpeedOut{from{opacity:1}
601
- to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}
602
- to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.brz .lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}
603
- @-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}
604
- to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}
605
- to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.brz .rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}
606
- @-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}
607
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}
608
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.brz .rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}
609
- @-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}
610
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}
611
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.brz .rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}
612
- @-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}
613
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}
614
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.brz .rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}
615
- @-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}
616
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}
617
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}.brz .rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}
618
- @-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}
619
- to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}
620
- to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.brz .rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}
621
- @-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}
622
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}
623
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.brz .rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}
624
- @-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}
625
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}
626
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.brz .rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}
627
- @-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}
628
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}
629
- to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.brz .rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}
630
- @-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}
631
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}
632
- to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.brz .rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}
633
- @-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}
634
- 20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}
635
- 40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}
636
- to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}
637
- 20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}
638
- 40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}
639
- to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.brz .hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-name:hinge;animation-name:hinge}
640
- @-webkit-keyframes jackInTheBox{from{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}
641
- 50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}
642
- 70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}
643
- to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{from{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}
644
- 50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}
645
- 70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}
646
- to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.brz .jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}
647
- @-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}
648
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}
649
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}
650
- @-webkit-keyframes rollOut{from{opacity:1}
651
- to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}
652
- to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.brz .rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}
653
- @-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}
654
- 50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}
655
- 50%{opacity:1}}.brz .zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}
656
- @-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
657
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
658
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.brz .zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}
659
- @-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
660
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
661
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.brz .zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}
662
- @-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
663
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
664
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.brz .zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}
665
- @-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
666
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
667
- 60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.brz .zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}
668
- @-webkit-keyframes zoomOut{from{opacity:1}
669
- 50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}
670
- to{opacity:0}}@keyframes zoomOut{from{opacity:1}
671
- 50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}
672
- to{opacity:0}}.brz .zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}
673
- @-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
674
- to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
675
- to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.brz .zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}
676
- @-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}
677
- to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}
678
- to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.brz .zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}
679
- @-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}
680
- to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}
681
- to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.brz .zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}
682
- @-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
683
- to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}
684
- to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.brz .zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}
685
- @-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}
686
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}
687
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}
688
- @-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}
689
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}
690
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}
691
- @-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}
692
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}
693
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}
694
- @-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}
695
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}
696
- to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}
697
- @-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
698
- to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
699
- to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.brz .slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}
700
- @-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
701
- to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
702
- to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.brz .slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}
703
- @-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
704
- to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
705
- to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.brz .slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}
706
- @-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
707
- to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
708
- to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.brz .slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}
709
- .brz .animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}
710
- .brz .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}
711
- .brz .animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}
712
- .brz .animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}
713
- .brz .animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}
714
- .brz .animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}
715
- .brz .animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}
716
- .brz .animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s}
717
- .brz .animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s}
718
- .brz .animated.slow{-webkit-animation-duration:2s;animation-duration:2s}
719
- .brz .animated.slower{-webkit-animation-duration:3s;animation-duration:3s}
720
- @media (print),(prefers-reduced-motion:reduce){.brz .animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}}.brz .brz-animated{opacity:0;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}
721
- .brz .brz-animated.brz-animate{opacity:1}
722
- .brz .brz-icon-svg{display:inline-block;width:1em;height:1em;stroke:none;max-width:none;position:relative;fill:currentColor;color:currentColor}
723
- .brz .brz-icon-svg use{fill:inherit}
724
- .brz .brz-icon-svg.grid-16{height:16px;width:16px}
725
- .brz .brz-icon-svg.grid-24{height:24px;width:24px}
726
- .brz .brz-icon-svg.glyph{fill:currentColor;stroke:none}
727
- .brz .brz-icon-svg.outline{stroke:currentColor;fill:none}
728
- .brz .brz-icon-svg.outline.stroke-2{stroke-width:2px}
729
- .brz .brz-section{position:relative;margin:0;padding:0;overflow:visible}
730
- .brz .brz-section__content{position:relative;width:100%}
731
- .brz .brz-section__content>.brz-bg{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit;width:100%;height:100%}
732
- .brz .brz-section__content>.brz-bg>.brz-bg-content{height:100%}
733
- .brz .brz-section__content>.brz-ed-border{width:100%}
734
- .brz .brz-section__items{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}
735
- .brz .brz-section__items .brz-section__content>.brz-bg{width:100%;-webkit-box-flex:1;-ms-flex:1;flex:1}
736
- .brz .brz-section>.brz-slick-slider:not(.slick-initialized)>.brz-section__items:not(:first-child){display:none}
737
- .brz .brz-section>.brz-slick-slider>.slick-list>.slick-track>.slick-slide .brz-section__content>.brz-bg>.brz-bg-content{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
738
- .brz .brz-sec-full-height .brz-container__wrap,.brz .brz-sec-full-height .brz-container__wrap--fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:100vh}
739
- .brz .brz-section__header>.brz-section__menu-item{position:relative;z-index:1055}
740
- .brz .brz-section__header--animated{position:fixed;z-index:1056;top:0;left:0;width:100%;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);opacity:0;-webkit-transition:none;transition:none}
741
- .brz .brz-section__header--animated-opened{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1;-webkit-transition:opacity .2s linear,-webkit-transform .2s linear;transition:opacity .2s linear,-webkit-transform .2s linear;transition:transform .2s linear,opacity .2s linear;transition:transform .2s linear,opacity .2s linear,-webkit-transform .2s linear}
742
- .brz .brz-section__header--animated-closed{-webkit-transition:opacity .2s linear,-webkit-transform .2s linear;transition:opacity .2s linear,-webkit-transform .2s linear;transition:transform .2s linear,opacity .2s linear;transition:transform .2s linear,opacity .2s linear,-webkit-transform .2s linear}
743
- .brz .brz-section__header--fixed{position:relative;z-index:1055}
744
- .brz .brz-section__header--fixed-opened{position:fixed;z-index:1056;top:0;left:0;width:100%}
745
- .brz .brz-popup__inner{height:100%}
746
- .brz .brz-footer>.brz-bg{-ms-flex-wrap:wrap;flex-wrap:wrap;height:100%}
747
- .brz .brz-container,.brz .brz-container__wrap{margin-left:auto;margin-right:auto;width:100%}
748
- .brz .brz-container__wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
749
- .brz .brz-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:left}
750
- .brz .brz-row__container{position:relative;text-align:center;font-size:0}
751
- .brz .brz-row__container .brz-link-container{position:absolute;height:100%;width:100%;top:0;left:0}
752
- .brz .brz-row__bg{margin-left:auto;margin-right:auto;width:100%;font-size:initial}
753
- .brz .brz-columns{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:1px;-ms-flex-preferred-size:100%;flex-basis:100%;will-change:flex,max-width}
754
- .brz .brz-columns>.brz-bg{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0}
755
- .brz .brz-columns .brz-container-link{position:absolute;height:100%;width:100%;top:0;left:0}
756
- .brz .brz-wrapper,.brz .brz-wrapper-clone{border-top:1px solid transparent;border-bottom:1px solid transparent;margin-top:-1px;margin-bottom:-1px}
757
- .brz .brz-wrapper-clone__wrap{height:100%}
758
- .brz .brz-wrapper-clone__wrap>div{-webkit-box-align:center;-ms-flex-align:center;align-items:center}
759
- .brz .brz-wrapper-clone__wrap:after{content:"";display:table}
760
- .brz .brz-wrapper-clone__wrap .brz-flex-xs-wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}
761
- .brz .brz-wrapper-clone__item{position:relative;min-height:1px;-ms-flex-preferred-size:auto;flex-basis:auto}
762
- .brz .brz-bg{position:relative}
763
- .brz .brz-bg-content{position:relative;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}
764
- .brz .brz-bg-media{overflow:hidden}
765
- .brz .brz-bg-color,.brz .brz-bg-image,.brz .brz-bg-map,.brz .brz-bg-media,.brz .brz-bg-video{position:absolute;top:0;left:0;width:100%;height:100%}
766
- .brz .brz-bg-image{background-repeat:no-repeat;background-size:cover}
767
- .brz.brz-is-mobile .brz-bg-media>.brz-bg-image{background-attachment:scroll}
768
- .brz .brz-iframe.brz-bg-map__cover,.brz .brz-iframe.brz-bg-video__cover{position:absolute;top:0;left:0;width:100%;height:100%;border:none;max-width:none;background-repeat:no-repeat;background-size:cover}
769
- .brz .brz-bg-color{opacity:1}
770
- .brz .brz-bg-shape{width:100%;height:100px;position:absolute;left:0;right:0;background-repeat:no-repeat;pointer-events:none}
771
- .brz .brz-bg-shape__top{top:0}
772
- .brz .brz-bg-shape__bottom{bottom:0;-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}
773
- .brz .brz-bg-image-parallax,.brz .brz-ed.brz-ed--desktop .brz-bg-image-parallax,.brz-ed.brz-ed--desktop .brz .brz-bg-image-parallax{width:100%;background-size:cover!important;background-position:50% 50%;left:0;top:-50vh;height:100vh;-webkit-transition:all 0s ease!important;transition:all 0s ease!important;-webkit-transform-origin:center center 0;transform-origin:center center 0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}
774
- @media (max-width:991px){.brz .brz-bg-video .brz-iframe{display:none!important}}.brz .brz-btn{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #ccc;-webkit-transition:background .3s ease,color .3s ease,border-color .3s ease;transition:background .3s ease,color .3s ease,border-color .3s ease;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;color:#fff;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none;background-image:none;white-space:nowrap;font-weight:400;-webkit-backface-visibility:hidden;backface-visibility:hidden;text-decoration:none}
775
- .brz .brz-btn.focus,.brz .brz-btn:focus,.brz .brz-btn:hover{text-decoration:none}
776
- .brz .brz-btn:focus{text-decoration:none}
777
- .brz .brz-btn .brz-span{display:block}
778
- .brz .brz-btn .brz-icon-svg{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}
779
- .brz .buttons{margin:-10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
780
- .brz .buttons .brz-wrapper-clone__item{padding:10px}
781
- .brz .brz-icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;vertical-align:middle;max-width:100%;-webkit-transition:background .3s ease,color .3s ease,border-color .3s ease;transition:background .3s ease,color .3s ease,border-color .3s ease}
782
- .brz .brz-list{margin:-6px;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
783
- .brz .brz-list .brz-list__item{padding:6px}
784
- .brz .brz-countdown{display:-webkit-box;display:-ms-flexbox;display:flex}
785
- .brz .brz-countdown__item{-webkit-box-flex:1;-ms-flex:1 0 25%;flex:1 0 25%;text-align:center;padding-left:15px;padding-right:15px;word-break:break-word;word-wrap:break-word}
786
- .brz .brz-countdown__number{font-size:1em;margin-bottom:15px}
787
- .brz .brz-countdown .brz-ed-box__resizer{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%}
788
- .brz .brz-countdown2{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
789
- .brz .brz-countdown2__item{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;text-align:center;word-break:break-word;word-wrap:break-word;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
790
- .brz .brz-countdown2__item:first-child{margin-left:0!important}
791
- .brz .brz-countdown2__item:last-child{margin-right:0!important}
792
- .brz .brz-countdown2__number{font-size:1em}
793
- .brz .brz-countdown2__label{text-transform:capitalize}
794
- .brz .brz-countdown2 .brz-countdown2-parts{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%}
795
- .brz .brz-countdown2 .brz-countdown2-message{display:none;min-height:55px;width:100%;margin-top:15px;padding:17px 30px;padding-bottom:0;text-align:center}
796
- .brz .brz-countdown2-style1{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
797
- .brz .brz-countdown2-style2 .brz-countdown2__item{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}
798
- .brz .brz-countdown2-style2 .brz-countdown2__label{margin-left:5px}
799
- .brz .brz-countdown2-style3 .brz-countdown2-parts{-webkit-box-align:center;-ms-flex-align:center;align-items:center}
800
- .brz .brz-countdown2-style3 .brz-countdown2__item .brz-countdown2__label{display:none}
801
- .brz .brz-countdown2_custom{height:auto!important;margin:0!important}
802
- .brz .brz-spacer{width:100%}
803
- .brz .brz-icon-text{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;text-align:left;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:nowrap;flex-wrap:nowrap}
804
- .brz .brz-icon-text .brz-text-btn,.brz .brz-icon-text .brz-text__editor{width:100%}
805
- .brz .brz-icon-text .brz-text__editor{white-space:pre-wrap}
806
- .brz .brz-icon-text .brz-wrapper-clone{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}
807
- .brz .brz-icon-text .brz-icon__container{min-width:auto}
808
- .brz .brz-line{position:relative;line-height:1;font-size:0;padding-top:7px;padding-bottom:7px;display:inline-block}
809
- .brz .brz-line .brz-hr{border-right-width:0;border-bottom-width:0;border-left-width:0;background:0 0}
810
- .brz .brz-map{position:relative;width:100%;display:inline-block;vertical-align:middle}
811
- .brz .brz-map::before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none}
812
- .brz .brz-map .brz-map-content{overflow:hidden;position:relative;height:100%;width:100%}
813
- .brz .brz-map .brz-iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}
814
- .brz .brz-video{position:relative;width:100%;display:inline-block;vertical-align:middle}
815
- .brz .brz-video:before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none}
816
- .brz .brz-video .brz-video-content{overflow:hidden;position:relative;width:100%;height:100%}
817
- .brz .brz-video .brz-iframe,.brz .brz-video .brz-video__cover{position:absolute;top:0;left:0;width:100%;height:100%;border:none}
818
- .brz .brz-video .brz-iframe{height:101%;width:101%}
819
- .brz .brz-video .brz-video__cover{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
820
- .brz .brz-video .brz-video__cover:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;margin:0 auto;background-repeat:no-repeat}
821
- .brz .brz-video .brz-video__cover .brz-video__cover-icon{position:relative;z-index:1;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}
822
- .brz .brz-video .brz-video__cover .brz-video__cover-icon .brz-icon-svg{width:100%;left:2px}
823
- .brz .brz-video .brz-video__cover .brz-video__cover-icon a{line-height:0}
824
- .brz .brz-video .brz-video__cover:hover{cursor:pointer}
825
- .brz .brz-video .brz-video__cover:hover .brz-video__cover-icon{-webkit-transform:scale(1.1);transform:scale(1.1)}
826
- .brz .brz-video .brz-shortcode__placeholder{position:absolute;top:0}
827
- .brz .brz-video .brz-video-element{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;z-index:999;min-width:350px}
828
- .brz .brz-video .brz-video-element video{position:absolute;left:0;right:0;bottom:0;top:0;width:100%;height:100%;background:#000;z-index:99}
829
- .brz .brz-video .brz-video-element .brz-video-custom-video-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:20px;padding-right:20px;width:100%;height:50px;z-index:999}
830
- .brz .brz-video .brz-video-element .brz-video-custom-play-pause-btn{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;z-index:3}
831
- .brz .brz-video .brz-video-element .brz-video-custom-current-time{margin-left:25px}
832
- .brz .brz-video .brz-video-element .brz-video-custom-total-time{margin-left:15px}
833
- .brz .brz-video .brz-video-element .brz-video-custom-slider{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}
834
- .brz .brz-video .brz-video-element .brz-video-custom-slider .brz-video-custom-progress{border-radius:inherit;position:absolute;pointer-events:none}
835
- .brz .brz-video .brz-video-element .brz-video-custom-slider:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;margin:0 auto;background-repeat:no-repeat;opacity:.35}
836
- .brz .brz-video .brz-video-element .brz-video-custom-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:3}
837
- .brz .brz-video .brz-video-element .brz-video-custom-controls .brz-video-custom-slider{margin-left:16px;margin-right:16px;border-radius:5px;height:8px;overflow:hidden}
838
- .brz .brz-video .brz-video-element .brz-video-custom-controls .brz-video-custom-slider .brz-video-custom-progress{height:100%}
839
- .brz .brz-video .brz-video-element .brz-video-custom-controls span{cursor:default}
840
- .brz .brz-video .brz-video-element .brz-video-custom-controls:empty{display:none}
841
- .brz .brz-video .brz-video-element .brz-video-custom-volume{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:15px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:3}
842
- .brz .brz-video .brz-video-element .brz-video-custom-volume .brz-video-custom-fullscreen-btn{display:-webkit-box;display:-ms-flexbox;display:flex}
843
- .brz .brz-video .brz-video-element .brz-video-custom-volume .brz-video-custom-fullscreen-icon{margin-right:15px;cursor:pointer}
844
- .brz .brz-video .brz-video-element .brz-video-custom-volume .brz-video-custom-volume-btn{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer}
845
- .brz .brz-video .brz-video-element .brz-video-custom-volume .brz-video-custom-volume-controls{display:-webkit-box;display:-ms-flexbox;display:flex;width:60px;height:8px;margin-left:10px;border-radius:5px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}
846
- .brz .brz-video .brz-video-element .brz-video-custom-volume .brz-video-custom-volume-controls .brz-video-custom-progress{bottom:0;height:100%;width:100%}
847
- .brz .brz-video .brz-video-custom-fullScreen-window-show video{padding-bottom:50px}
848
- .brz .brz-video .brz-video-custom-fullScreen-window-show .brz-video-custom-video-controls{position:absolute;left:0;right:0;bottom:0}
849
- .brz .brz-custom-video{min-width:355px}
850
- .brz .brz-custom-video .brz-video-content{overflow:hidden}
851
- .brz .brz-custom-video .brz-video-content .brz-shortcode__placeholder{border-radius:0!important}
852
- .brz .brz-custom-video .brz-video-content:hover .brz-shortcode__placeholder .brz-icon-svg{cursor:pointer}
853
- .brz .brz-custom-video .brz-video-content .brz-shortcode__placeholder{-webkit-transition:all .6s ease;transition:all .6s ease}
854
- .brz .brz-custom-video .brz-video-content .brz-icon-svg{-webkit-transition:all .6s ease;transition:all .6s ease}
855
- .brz .brz-custom-video .brz-video-content .brz-video__cover-icon{z-index:9999}
856
- .brz .brz-custom-video.brz-video-on-controls-hidden .brz-shortcode__placeholder,.brz .brz-custom-video.brz-video-on-controls-hidden .brz-video__cover,.brz .brz-custom-video.brz-video-on-controls-hidden video{padding-bottom:50px}
857
- .brz .brz-custom-video.brz-video-off-controls-hidden{background:inherit;padding-bottom:0}
858
- .brz .brz-custom-video.brz-video-off-controls-hidden video{padding-bottom:0;background:inherit}
859
- .brz .brz-custom-video.brz-video-off-controls-hidden .brz-shortcode__placeholder{top:0;padding-top:0}
860
- .brz .brz-custom-video.brz-video-off-controls-hidden .brz-video__cover{padding-bottom:0}
861
- .brz .brz-image-fix-1-1{padding-top:100%}
862
- .brz .brz-image-fix-2-1{padding-top:50%}
863
- .brz .brz-image-fix-2-3{padding-top:150%}
864
- .brz .brz-image-fix-3-4{padding-top:125%}
865
- .brz .brz-image-fix-4-3{padding-top:75%}
866
- .brz .brz-image-fix-9-16{padding-top:177.8%}
867
- .brz .brz-image-fix-16-9{padding-top:56.25%}
868
- .brz .brz-video-playlist{position:relative;width:100%;display:inline-block;vertical-align:middle}
869
- .brz .brz-video-playlist:before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none}
870
- .brz .brz-video-playlist .brz-iframe,.brz .brz-video-playlist .brz-video-playlist__cover{position:absolute;top:0;left:0;width:100%;height:100%;border:none}
871
- .brz .brz-video-playlist .brz-video-playlist__cover{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
872
- .brz .brz-video-playlist .brz-video-playlist__cover:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;margin:0 auto;background-size:cover;background-repeat:no-repeat}
873
- .brz .brz-video-playlist .brz-video-playlist__cover .brz-video-playlist__cover-icon{position:relative;width:80px;height:80px;font-size:28px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;z-index:1;color:#fff;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}
874
- .brz .brz-video-playlist .brz-video-playlist__cover .brz-video-playlist__cover-icon .brz-icon-svg{width:100%;left:2px}
875
- .brz .brz-video-playlist .brz-video-playlist__cover .brz-video-playlist__cover-icon a{line-height:0}
876
- .brz .brz-video-playlist .brz-video-playlist__cover:hover{cursor:pointer}
877
- .brz .brz-video-playlist .brz-video-playlist__cover:hover .brz-video-playlist__cover-icon{-webkit-transform:scale(1.1);transform:scale(1.1)}
878
- .brz .brz-video-playlist .brz-video-playlist-main,.brz .brz-video-playlist .brz-video-playlist-video-element{position:relative}
879
- .brz .brz-video-playlist .brz-video-playlist-main .brz-img,.brz .brz-video-playlist .brz-video-playlist-main .brz-shortcode__placeholder,.brz .brz-video-playlist .brz-video-playlist-video-element .brz-img,.brz .brz-video-playlist .brz-video-playlist-video-element .brz-shortcode__placeholder{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%}
880
- .brz .brz-video-playlist .brz-video-playlist-main__cover:after,.brz .brz-video-playlist .brz-video-playlist-video-element:after{content:"";display:block;width:100%;padding-top:56.25%}
881
- .brz .brz-video-playlist .brz-video-playlist-main__content{padding-top:56.25%}
882
- .brz .brz-video-playlist .brz-video-playlist-video-item{cursor:pointer}
883
- .brz .brz-video-playlist .brz-video-playlist-title-video{word-break:break-word}
884
- .brz .brz-video-playlist .brz-video-playlist-title-video .brz-span{display:block}
885
- .brz .brz-video-playlist .brz-video-playlist-title-video .brz-span:last-child{margin-bottom:0}
886
- .brz .brz-video-playlist-horizontal .brz-video-playlist-sidebar{position:absolute;top:0;bottom:0;right:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-height:100%;overflow:auto}
887
- .brz .brz-video-playlist-horizontal .brz-video-playlist-video-item{cursor:pointer;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}
888
- .brz .brz-video-playlist-horizontal .brz-video-playlist-video-item .brz-video-playlist-title-video{margin-left:10px}
889
- .brz .brz-video-playlist-horizontal .brz-video-playlist-video-item .brz-img{-o-object-fit:cover;object-fit:cover}
890
- .brz .brz-video-playlist-horizontal ::-webkit-scrollbar{width:8px;height:95px;cursor:pointer}
891
- .brz .brz-video-playlist-horizontal ::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}
892
- .brz .brz-video-playlist-horizontal ::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3);border-radius:8px}
893
- .brz .brz-video-playlist-vertical .brz-video-playlist-sidebar{white-space:nowrap;overflow:auto}
894
- .brz .brz-video-playlist-vertical .brz-video-playlist-video-item{text-align:center}
895
- .brz .brz-video-playlist-vertical .brz-video-playlist-video-element{margin-left:auto;margin-right:auto}
896
- .brz .brz-video-playlist-vertical ::-webkit-scrollbar{width:6px;height:8px;cursor:pointer}
897
- .brz .brz-video-playlist-vertical ::-webkit-scrollbar-track{background-color:rgba(0,0,0,0)}
898
- .brz .brz-video-playlist-vertical ::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}
899
- .brz .brz-video-playlist-vertical.brz-video-playlist-under{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}
900
- .brz .brz-video-playlist-vertical.brz-video-playlist-under .brz-video-playlist__container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}
901
- @media (max-width:767px){.brz .brz-video-playlist .brz-video-playlist-main{position:fixed;z-index:99999;left:0;right:0;top:0;bottom:0;display:none;width:100%!important;height:100%;background-color:rgba(0,0,0,.3)}
902
- .brz .brz-video-playlist .brz-video-playlist-main__placeholder .brz-video-playlist-main__content,.brz .brz-video-playlist .brz-video-playlist-main__video .brz-video-playlist-main__content{width:100%}
903
- .brz .brz-video-playlist .brz-video-playlist-sidebar{position:static;height:auto!important;width:100%!important}
904
- .brz .brz-video-playlist .brz-video-playlist-modal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.brz .brz-audio{pointer-events:auto;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}
905
- .brz .brz-audio .brz-custom-audio{position:relative;width:100%;height:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:20px;padding-right:20px;z-index:3}
906
- .brz .brz-audio .brz-custom-audio .brz-audio-play-pause-btn{cursor:pointer;z-index:3}
907
- .brz .brz-audio .brz-custom-audio .brz-audio-current-time{margin-left:25px}
908
- .brz .brz-audio .brz-custom-audio .brz-audio-total-time{margin-left:15px}
909
- .brz .brz-audio .brz-custom-audio .brz-audio-slider{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}
910
- .brz .brz-audio .brz-custom-audio .brz-audio-slider .brz-audio-progress{border-radius:inherit;position:absolute;pointer-events:none}
911
- .brz .brz-audio .brz-custom-audio .brz-audio-slider:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;margin:0 auto;background-repeat:no-repeat;opacity:.35}
912
- .brz .brz-audio .brz-custom-audio .brz-audio-controls{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:3}
913
- .brz .brz-audio .brz-custom-audio .brz-audio-controls .brz-audio-slider{margin-left:16px;margin-right:16px;border-radius:5px;height:8px}
914
- .brz .brz-audio .brz-custom-audio .brz-audio-controls .brz-audio-slider .brz-audio-progress{height:100%}
915
- .brz .brz-audio .brz-custom-audio .brz-audio-controls span{cursor:default}
916
- .brz .brz-audio .brz-custom-audio .brz-audio-controls:empty{display:none}
917
- .brz .brz-audio .brz-custom-audio .brz-audio-volume{position:relative;margin-left:15px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:3}
918
- .brz .brz-audio .brz-custom-audio .brz-audio-volume .brz-audio-volume-btn{cursor:pointer}
919
- .brz .brz-audio .brz-custom-audio .brz-audio-volume .brz-audio-volume-controls{width:60px;height:8px;margin-left:10px;border-radius:5px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
920
- .brz .brz-audio .brz-custom-audio .brz-audio-volume .brz-audio-volume-controls .brz-audio-slider{border-radius:3px}
921
- .brz .brz-audio .brz-custom-audio .brz-audio-volume .brz-audio-volume-controls .brz-audio-slider .brz-audio-progress{bottom:0;height:100%;width:100%}
922
- .brz .brz-audio .brz-audio__cover{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border:none}
923
- .brz .brz-audio .brz-audio__cover:before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;margin:0 auto;background-repeat:no-repeat}
924
- .brz .brz-audio .brz-audio__cover .brz-audio__cover-icon{position:relative;z-index:1;color:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease,-webkit-transform .3s ease}
925
- .brz .brz-soundcloud{position:relative;font-size:0}
926
- .brz .brz-soundcloud:before{content:" ";position:absolute;width:100%;height:100%;z-index:3;pointer-events:none}
927
- .brz .brz-soundcloud .brz-soundCloud-content{overflow:hidden;position:relative;height:100%;width:100%}
928
- .brz .brz-soundcloud .brz-soundCloud-content iframe{width:100%}
929
- .brz .brz-soundcloud .brz-soundCloud-content:before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none}
930
- .brz .brz-embed-code{position:relative;display:inline-block;width:100%;min-height:20px;height:auto;word-break:break-all;word-wrap:break-word}
931
- .brz .brz-embed-code::before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none;overflow:hidden}
932
- .brz .brz-embed-code .brz-shortcode__placeholder{height:250px}
933
- .brz .brz-embed-code img{max-width:100%}
934
- .brz .brz-rich-text{-webkit-font-smoothing:antialiased;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}
935
- .brz .brz-rich-text>*{white-space:pre-wrap}
936
- .brz .brz-rich-text em,.brz .brz-rich-text i{font-style:italic}
937
- .brz .brz-rich-text ol li,.brz .brz-rich-text ul li{list-style:none;padding-left:1em}
938
- .brz .brz-rich-text ol li:before,.brz .brz-rich-text ul li:before{margin-left:-1em}
939
- .brz .brz-rich-text ul li:before{position:relative;top:-.1em;line-height:1;content:"\2022";padding-right:.5em}
940
- .brz .brz-rich-text ol{counter-reset:number}
941
- .brz .brz-rich-text ol li{counter-increment:number}
942
- .brz .brz-rich-text ol li:before{content:counter(number);line-height:1;padding-right:.5em}
943
- .brz .brz-rich-text .ql-editor{white-space:pre-wrap}
944
- .brz .brz-rich-text .brz-image-gradient,.brz .brz-rich-text .brz-text-mask{caret-color:#000;color:transparent!important;-webkit-background-clip:text;background-clip:text}
945
- .brz .brz-rich-text h1,.brz .brz-rich-text h2,.brz .brz-rich-text h3,.brz .brz-rich-text h4,.brz .brz-rich-text h5,.brz .brz-rich-text h6{margin-top:0;margin-bottom:0;padding:0;text-transform:initial;text-decoration:initial}
946
- .brz .brz-rich-text h1:before,.brz .brz-rich-text h2:before,.brz .brz-rich-text h3:before,.brz .brz-rich-text h4:before,.brz .brz-rich-text h5:before,.brz .brz-rich-text h6:before{display:none}
947
- .brz .brz-rich-text p,.brz .brz-rich-text span{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0;text-transform:initial;text-decoration:initial}
948
- .brz .brz-rich-text span{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit}
949
- .brz .brz-rich-text p{display:block}
950
- .brz .brz-rich-text a,.brz .brz-rich-text em,.brz .brz-rich-text span{display:inline}
951
- .brz .brz-rich-text dl,.brz .brz-rich-text ol,.brz .brz-rich-text ul{margin:0;list-style:none;padding:0}
952
- .brz .brz-rich-text ol ol,.brz .brz-rich-text ol ul,.brz .brz-rich-text ul ol,.brz .brz-rich-text ul ul{margin:0}
953
- .brz .brz-rich-text a{text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}
954
- .brz .brz-rich-text a[href]:hover{text-decoration:underline}
955
- .brz .brz-rich-text strong{font-weight:700}
956
- .brz .brz-rich-text .link--anchor,.brz .brz-rich-text .link--external,.brz .brz-rich-text .link--popup{text-decoration:none}
957
- .brz .brz-rich-text .link--anchor:hover,.brz .brz-rich-text .link--external:hover,.brz .brz-rich-text .link--popup:hover{text-decoration:underline}
958
- .brz .brz-rich-text .brz-tp__dc-block:after{content:"";display:table;clear:both}
959
- .brz .brz-text__editor{min-width:10px}
960
- .brz .brz-text__editor:empty:before{content:"\00a0\00a0"}
961
- .brz:not(.brz-ed) .brz-population-mask{background-clip:text;color:transparent!important}
962
- .brz .brz-counter{position:relative}
963
- .brz .brz-counter-simple{width:auto!important}
964
- .brz .brz-counter-radial .brz-counter-figures{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
965
- .brz .brz-counter-empty .brz-counter-figures{display:none}
966
- .brz .brz-counter-pie .brz-counter-figures{display:none}
967
- .brz .brz-counter .brz-ed-box__resizer{height:auto}
968
- .brz .brz-counter-chart{text-align:center;margin:0 auto}
969
- .brz .brz-counter-chart svg{width:100%;height:100%;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);background:#9acd32;border-radius:50%}
970
- .brz .brz-counter-chart.brz-counter-chart-radial svg{background:0 0}
971
- .brz .brz-counter-chart.brz-counter-chart-radial .brz-counter-pie-chart{fill:transparent}
972
- .brz .brz-counter-chart.brz-counter-chart-empty svg{background:0 0}
973
- .brz .brz-counter-chart.brz-counter-chart-empty .brz-counter-pie-chart{fill:transparent}
974
- .brz .brz-counter-chart.brz-counter-chart-empty .brz-counter-pie-chart{stroke-width:32}
975
- .brz .brz-counter-chart.brz-counter-chart-pie svg{background:0 0}
976
- .brz .brz-counter-chart.brz-counter-chart-pie .brz-counter-pie-chart{stroke-width:32}
977
- .brz .brz-counter-chart .brz-counter-figures{text-align:center}
978
- .brz .brz-progress-bar__wrapper{overflow:hidden}
979
- .brz .brz-progress-bar .brz-text__editor{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
980
- .brz .brz-progress-bar.brz-without-text .brz-progress-bar__percent{width:100%;text-align:right}
981
- .brz .brz-progress-bar-style1,.brz .brz-progress-bar-style2 .brz-progress-bar-overlay{position:relative}
982
- .brz .brz-progress-bar-style2 .brz-progress-bar__percent{position:relative;display:inline-block;padding:4px 7px;margin-bottom:10px;text-align:center;z-index:99999}
983
- .brz .brz-shortcode__placeholder{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;width:100%;background-color:#373e48;color:#151924}
984
- .brz .brz-shortcode__placeholder .brz-icon-svg{width:calc(16px + (.075 * 100%));height:calc(16px + (.075 * 100%))}
985
- .brz .brz-soundcloud{position:relative;font-size:0}
986
- .brz .brz-soundcloud::before{content:" ";position:absolute;width:100%;height:100%;z-index:3;pointer-events:none}
987
- .brz .brz-soundcloud .brz-soundCloud-content{overflow:hidden;position:relative;height:100%;width:100%}
988
- .brz .brz-soundcloud .brz-soundCloud-content iframe{width:100%}
989
- .brz .brz-soundcloud .brz-soundCloud-content::before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none}
990
- .brz .slick-slider{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}
991
- .brz .slick-slider.slick-dotted{margin:0}
992
- .brz .slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0}
993
- .brz .slick-list:focus{outline:0}
994
- .brz .slick-list.dragging{cursor:pointer;cursor:hand}
995
- .brz .slick-slider .slick-list,.brz .slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
996
- .brz .slick-track{position:relative;left:0;top:0;display:block;margin-left:auto;margin-right:auto}
997
- .slick-loading .brz .slick-track{visibility:hidden}
998
- .brz .slick-track:after,.brz .slick-track:before{content:none}
999
- .brz .slick-slide{min-height:1px;display:none;float:none}
1000
- .brz .slick-slide img{display:block}
1001
- .brz .slick-slide.slick-loading img{display:none}
1002
- .brz .slick-slide.dragging img{pointer-events:none}
1003
- .slick-initialized .brz .slick-slide{display:block}
1004
- .slick-loading .brz .slick-slide{visibility:hidden}
1005
- .slick-vertical .brz .slick-slide{display:block;height:auto;border:1px solid transparent}
1006
- .brz .slick-arrow.slick-hidden{display:none}
1007
- .brz .brz-slick-slider .brz-icon-svg,.brz .brz-slick-slider .brz-rich-text *{-webkit-backface-visibility:hidden;backface-visibility:hidden}
1008
- .brz .brz-slick-slider .brz-bg-media{width:calc(100% + 1px)}
1009
- .brz .brz-slick-slider .brz-bg-color,.brz .brz-slick-slider .brz-bg-content{-webkit-transform:translateZ(0);transform:translateZ(0)}
1010
- .brz .brz-slick-slider .brz-section__content,.brz .brz-slick-slider .brz-section__items,.brz .brz-slick-slider .slick-slide>div{height:100%;outline:0}
1011
- .brz .brz-slick-slider--fade .slick-slide{height:auto;visibility:hidden}
1012
- .brz .brz-slick-slider--fade .slick-slide.slick-active{visibility:visible}
1013
- .brz .slick-initialized .slick-slide{display:block}
1014
- .brz .slick-track{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
1015
- .brz .brz-slick-slider__dots{position:absolute;bottom:50px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);padding:0;list-style:none;margin:0;font-size:0}
1016
- .brz .brz-slick-slider__dots li{display:inline-block;vertical-align:middle;padding-left:5px;padding-right:5px}
1017
- .brz .brz-slick-slider__dots li:first-child{padding-left:0}
1018
- .brz .brz-slick-slider__dots li:last-child{padding-right:0}
1019
- .brz .brz-slick-slider__dots button{cursor:pointer;color:inherit;outline:0;overflow:hidden;padding:0;text-indent:-9999px;border:2px solid currentColor;border-radius:0;background-color:transparent;-webkit-transition:background-color linear .2s,-webkit-transform linear .2s;transition:background-color linear .2s,-webkit-transform linear .2s;transition:transform linear .2s,background-color linear .2s;transition:transform linear .2s,background-color linear .2s,-webkit-transform linear .2s}
1020
- .brz .brz-slick-slider__dots .slick-active button{background-color:currentColor;-webkit-transition:background-color linear .2s,-webkit-transform linear .2s;transition:background-color linear .2s,-webkit-transform linear .2s;transition:transform linear .2s,background-color linear .2s;transition:transform linear .2s,background-color linear .2s,-webkit-transform linear .2s}
1021
- .brz .brz-slick-slider__dots--circle button{width:10px;height:10px;border-radius:10px}
1022
- .brz .brz-slick-slider__dots--diamond button{width:10px;height:10px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}
1023
- .brz .brz-slick-slider__dots--square button{width:10px;height:10px}
1024
- .brz .brz-slick-slider__arrow{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:2;font-size:30px;cursor:pointer;-webkit-transition:opacity linear .2s;transition:opacity linear .2s;color:#000;background-color:transparent;border:none;overflow:auto}
1025
- .brz .brz-slick-slider__arrow:hover{-webkit-transition:opacity linear .2s;transition:opacity linear .2s}
1026
- .brz .brz-slick-slider__arrow .brz-icon-svg{display:block}
1027
- .brz .brz-slick-slider__arrow-prev{-webkit-transform:translateY(-50%) rotate(-180deg);transform:translateY(-50%) rotate(-180deg);left:30px}
1028
- .brz .brz-slick-slider__arrow-next{right:30px}
1029
- .brz .brz-forms{width:100%}
1030
- .brz .brz-forms__fields,.brz .brz-forms__wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
1031
- .brz .brz-forms__wrap{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
1032
- .brz .brz-forms__item{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}
1033
- .brz .brz-forms .brz-input,.brz .brz-forms .brz-textarea{display:block;width:100%;height:auto;background-color:transparent;border:none;outline:0;color:inherit;font-size:inherit;font-family:inherit;letter-spacing:inherit;font-weight:inherit;line-height:inherit;-webkit-box-shadow:none;box-shadow:none}
1034
- .brz .brz-forms .brz-input::-webkit-input-placeholder,.brz .brz-forms .brz-textarea::-webkit-input-placeholder{color:inherit}
1035
- .brz .brz-forms .brz-input::-moz-placeholder,.brz .brz-forms .brz-textarea::-moz-placeholder{color:inherit}
1036
- .brz .brz-forms .brz-input::-ms-input-placeholder,.brz .brz-forms .brz-textarea::-ms-input-placeholder{color:inherit}
1037
- .brz .brz-forms .brz-input::placeholder,.brz .brz-forms .brz-textarea::placeholder{color:inherit}
1038
- .brz .brz-forms .brz-textarea{height:100%;resize:none}
1039
- .brz .brz-forms .brz-label{display:block}
1040
- .brz .brz-forms .brz-forms__field{padding:14px 24px;text-align:left}
1041
- .brz .brz-forms .brz-forms__field-label{border:none;cursor:auto}
1042
- .brz .brz-forms__select{position:relative}
1043
- .brz .brz-forms__select-current{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}
1044
- .brz .brz-forms__select-current .brz-span{width:100%;cursor:pointer}
1045
- .brz .brz-forms__select-list{border:1px solid #dcdee1;border-top-width:0;overflow:hidden;position:absolute;z-index:1041;top:100%;left:0;width:100%;background-color:#fff}
1046
- .brz .brz-forms__select-item{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;border:0;height:52px}
1047
- .brz .brz-forms__select-item:not(:last-child){border-bottom:1px solid #f1f1f2}
1048
- .brz .brz-forms__select-item__input{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:16px;color:rgba(115,119,127,.7);line-height:1;font-family:inherit;font-weight:inherit;padding:14px 24px}
1049
- .brz .brz-forms__select-item__input .brz-input{border-width:0;height:100%;width:100%;color:inherit}
1050
- .brz .brz-forms__select-item__input .brz-input::-webkit-input-placeholder{color:rgba(115,119,127,.7);font-style:italic}
1051
- .brz .brz-forms__select-item__input .brz-input:-moz-placeholder{color:rgba(115,119,127,.7);font-style:italic}
1052
- .brz .brz-forms__select-item__input .brz-input::-moz-placeholder{color:rgba(115,119,127,.7);font-style:italic}
1053
- .brz .brz-forms__select-item__input .brz-input:-ms-input-placeholder{color:rgba(115,119,127,.7);font-style:italic}
1054
- .brz .brz-forms__select-item__input .brz-input.brz-input{cursor:text}
1055
- .brz .brz-forms__select-item__icon{color:rgba(115,119,127,.7);-ms-flex-preferred-size:52px;flex-basis:52px;text-align:center;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer}
1056
- .brz .brz-forms__select--arrow{font-size:14px}
1057
- .brz .brz-forms .brz-control__select{position:relative}
1058
- .brz .brz-forms .brz-control__select-current,.brz .brz-forms .brz-control__select-option{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:inherit;color:inherit}
1059
- .brz .brz-forms .brz-control__select-current{padding:14px 24px;cursor:pointer}
1060
- .brz .brz-forms .brz-control__select-current .brz-control__select-option{border:0;-ms-flex-preferred-size:100%;flex-basis:100%;height:100%}
1061
- .brz .brz-forms .brz-control__select-current .brz-control__select--arrow{font-size:14px}
1062
- .brz .brz-forms .brz-control__select-options{border:1px solid #dcdee1;border-top-width:0;overflow:hidden;position:absolute;z-index:1030;top:100%;left:0;width:100%;background-color:#fff;display:none}
1063
- .brz .brz-forms .brz-control__select-options .brz-control__select-option{padding:14px 24px;font-size:16px;height:52px;line-height:1.5;cursor:pointer}
1064
- .brz .brz-forms .brz-control__select-options .brz-control__select-option:not(:last-child){border-bottom:1px solid #f1f1f2}
1065
- .brz .brz-forms__alert{min-height:55px;width:100%;font-size:12px;line-height:2;letter-spacing:2.5px;font-weight:600;text-transform:uppercase;padding:17px 30px;color:#fff;margin-top:15px}
1066
- .brz .brz-forms__alert--success{background-color:#15d053}
1067
- .brz .brz-forms__alert--error{background-color:red}
1068
- .brz .brz-forms__item--error .brz-control__select-current,.brz .brz-forms__item--error .brz-forms__field{border-color:red!important;border-style:solid!important}
1069
- @media (max-width:767px){.brz .brz-forms__select-item__input{font-size:14px;padding:10px 16px}
1070
- .brz .brz-forms .brz-forms__field{padding:10px 16px}
1071
- .brz .brz-forms .brz-control__select-current{padding:10px 16px}
1072
- .brz .brz-forms .brz-control__select-options .brz-control__select-option{padding:10px 16px;font-size:14px}}.brz .flatpickr-calendar{background:0 0;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}
1073
- .brz .flatpickr-calendar.inline,.brz .flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}
1074
- .brz .flatpickr-calendar.open{display:inline-block;z-index:99999}
1075
- .brz .flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}
1076
- .brz .flatpickr-calendar.inline{display:block;position:relative;top:2px}
1077
- .brz .flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}
1078
- .brz .flatpickr-calendar.static.open{z-index:999;display:block}
1079
- .brz .flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}
1080
- .brz .flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}
1081
- .brz .flatpickr-calendar .hasTime .dayContainer,.brz .flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}
1082
- .brz .flatpickr-calendar .hasWeeks .dayContainer{border-left:0}
1083
- .brz .flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}
1084
- .brz .flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}
1085
- .brz .flatpickr-calendar:after,.brz .flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}
1086
- .brz .flatpickr-calendar.rightMost:after,.brz .flatpickr-calendar.rightMost:before{left:auto;right:22px}
1087
- .brz .flatpickr-calendar:before{border-width:5px;margin:0 -5px}
1088
- .brz .flatpickr-calendar:after{border-width:4px;margin:0 -4px}
1089
- .brz .flatpickr-calendar.arrowTop:after,.brz .flatpickr-calendar.arrowTop:before{bottom:100%}
1090
- .brz .flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}
1091
- .brz .flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}
1092
- .brz .flatpickr-calendar.arrowBottom:after,.brz .flatpickr-calendar.arrowBottom:before{top:100%}
1093
- .brz .flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}
1094
- .brz .flatpickr-calendar.arrowBottom:after{border-top-color:#fff}
1095
- .brz .flatpickr-calendar:focus{outline:0}
1096
- .brz .flatpickr-wrapper{position:relative;display:inline-block}
1097
- .brz .flatpickr-months{display:-webkit-box;display:-ms-flexbox;display:flex}
1098
- .brz .flatpickr-months .flatpickr-month{background:0 0;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-ms-flex:1;flex:1}
1099
- .brz .flatpickr-months .flatpickr-next-month,.brz .flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}
1100
- .brz .flatpickr-months .flatpickr-next-month.flatpickr-disabled,.brz .flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}
1101
- .brz .flatpickr-months .flatpickr-next-month i,.brz .flatpickr-months .flatpickr-prev-month i{position:relative}
1102
- .brz .flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.brz .flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}
1103
- .brz .flatpickr-months .flatpickr-next-month.flatpickr-next-month,.brz .flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}
1104
- .brz .flatpickr-months .flatpickr-next-month:hover,.brz .flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}
1105
- .brz .flatpickr-months .flatpickr-next-month:hover svg,.brz .flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}
1106
- .brz .flatpickr-months .flatpickr-next-month svg,.brz .flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}
1107
- .brz .flatpickr-months .flatpickr-next-month svg path,.brz .flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}
1108
- .brz .numInputWrapper{position:relative;height:auto}
1109
- .brz .numInputWrapper input,.brz .numInputWrapper span{display:inline-block}
1110
- .brz .numInputWrapper input{width:100%}
1111
- .brz .numInputWrapper input::-ms-clear{display:none}
1112
- .brz .numInputWrapper input::-webkit-inner-spin-button,.brz .numInputWrapper input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}
1113
- .brz .numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}
1114
- .brz .numInputWrapper span:hover{background:rgba(0,0,0,.1)}
1115
- .brz .numInputWrapper span:active{background:rgba(0,0,0,.2)}
1116
- .brz .numInputWrapper span:after{display:block;content:"";position:absolute}
1117
- .brz .numInputWrapper span.arrowUp{top:0;border-bottom:0}
1118
- .brz .numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}
1119
- .brz .numInputWrapper span.arrowDown{top:50%}
1120
- .brz .numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}
1121
- .brz .numInputWrapper span svg{width:inherit;height:auto}
1122
- .brz .numInputWrapper span svg path{fill:rgba(0,0,0,.5)}
1123
- .brz .numInputWrapper:hover{background:rgba(0,0,0,.05)}
1124
- .brz .numInputWrapper:hover span{opacity:1}
1125
- .brz .flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}
1126
- .brz .flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}
1127
- .brz .flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}
1128
- .brz .flatpickr-current-month .numInputWrapper{width:6ch;display:inline-block}
1129
- .brz .flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}
1130
- .brz .flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}
1131
- .brz .flatpickr-current-month input.cur-year{background:0 0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}
1132
- .brz .flatpickr-current-month input.cur-year:focus{outline:0}
1133
- .brz .flatpickr-current-month input.cur-year[disabled],.brz .flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:0 0;pointer-events:none}
1134
- .brz .flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:0 0;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:0;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}
1135
- .brz .flatpickr-current-month .flatpickr-monthDropdown-months:active,.brz .flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:0}
1136
- .brz .flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}
1137
- .brz .flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:0;padding:0}
1138
- .brz .flatpickr-weekdays{background:0 0;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:28px}
1139
- .brz .flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1}
1140
- .brz span.flatpickr-weekday{cursor:default;font-size:90%;background:0 0;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:bolder}
1141
- .brz .dayContainer,.brz .flatpickr-weeks{padding:1px 0 0 0}
1142
- .brz .flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;width:307.875px}
1143
- .brz .flatpickr-days:focus{outline:0}
1144
- .brz .dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:flex;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}
1145
- .brz .dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}
1146
- .brz .flatpickr-day{background:0 0;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}
1147
- .brz .flatpickr-day.inRange,.brz .flatpickr-day.nextMonthDay.inRange,.brz .flatpickr-day.nextMonthDay.today.inRange,.brz .flatpickr-day.nextMonthDay:focus,.brz .flatpickr-day.nextMonthDay:hover,.brz .flatpickr-day.prevMonthDay.inRange,.brz .flatpickr-day.prevMonthDay.today.inRange,.brz .flatpickr-day.prevMonthDay:focus,.brz .flatpickr-day.prevMonthDay:hover,.brz .flatpickr-day.today.inRange,.brz .flatpickr-day:focus,.brz .flatpickr-day:hover{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}
1148
- .brz .flatpickr-day.today{border-color:#959ea9}
1149
- .brz .flatpickr-day.today:focus,.brz .flatpickr-day.today:hover{border-color:#959ea9;background:#959ea9;color:#fff}
1150
- .brz .flatpickr-day.endRange,.brz .flatpickr-day.endRange.inRange,.brz .flatpickr-day.endRange.nextMonthDay,.brz .flatpickr-day.endRange.prevMonthDay,.brz .flatpickr-day.endRange:focus,.brz .flatpickr-day.endRange:hover,.brz .flatpickr-day.selected,.brz .flatpickr-day.selected.inRange,.brz .flatpickr-day.selected.nextMonthDay,.brz .flatpickr-day.selected.prevMonthDay,.brz .flatpickr-day.selected:focus,.brz .flatpickr-day.selected:hover,.brz .flatpickr-day.startRange,.brz .flatpickr-day.startRange.inRange,.brz .flatpickr-day.startRange.nextMonthDay,.brz .flatpickr-day.startRange.prevMonthDay,.brz .flatpickr-day.startRange:focus,.brz .flatpickr-day.startRange:hover{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}
1151
- .brz .flatpickr-day.endRange.startRange,.brz .flatpickr-day.selected.startRange,.brz .flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}
1152
- .brz .flatpickr-day.endRange.endRange,.brz .flatpickr-day.selected.endRange,.brz .flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}
1153
- .brz .flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.brz .flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.brz .flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}
1154
- .brz .flatpickr-day.endRange.startRange.endRange,.brz .flatpickr-day.selected.startRange.endRange,.brz .flatpickr-day.startRange.startRange.endRange{border-radius:50px}
1155
- .brz .flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}
1156
- .brz .flatpickr-day.flatpickr-disabled,.brz .flatpickr-day.flatpickr-disabled:hover,.brz .flatpickr-day.nextMonthDay,.brz .flatpickr-day.notAllowed,.brz .flatpickr-day.notAllowed.nextMonthDay,.brz .flatpickr-day.notAllowed.prevMonthDay,.brz .flatpickr-day.prevMonthDay{color:rgba(57,57,57,.3);background:0 0;border-color:transparent;cursor:default}
1157
- .brz .flatpickr-day.flatpickr-disabled,.brz .flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}
1158
- .brz .flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}
1159
- .brz .flatpickr-day.hidden{visibility:hidden}
1160
- .brz .rangeMode .flatpickr-day{margin-top:1px}
1161
- .brz .flatpickr-weekwrapper{float:left}
1162
- .brz .flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}
1163
- .brz .flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}
1164
- .brz .flatpickr-weekwrapper span.flatpickr-day,.brz .flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:0 0;cursor:default;border:none}
1165
- .brz .flatpickr-innerContainer{display:block;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}
1166
- .brz .flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}
1167
- .brz .flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex}
1168
- .brz .flatpickr-time:after{content:"";display:table;clear:both}
1169
- .brz .flatpickr-time .numInputWrapper{-webkit-box-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}
1170
- .brz .flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}
1171
- .brz .flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}
1172
- .brz .flatpickr-time.hasSeconds .numInputWrapper{width:26%}
1173
- .brz .flatpickr-time.time24hr .numInputWrapper{width:49%}
1174
- .brz .flatpickr-time input{background:0 0;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}
1175
- .brz .flatpickr-time input.flatpickr-hour{font-weight:700}
1176
- .brz .flatpickr-time input.flatpickr-minute,.brz .flatpickr-time input.flatpickr-second{font-weight:400}
1177
- .brz .flatpickr-time input:focus{outline:0;border:0}
1178
- .brz .flatpickr-time .flatpickr-am-pm,.brz .flatpickr-time .flatpickr-time-separator{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}
1179
- .brz .flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}
1180
- .brz .flatpickr-time .flatpickr-am-pm:focus,.brz .flatpickr-time .flatpickr-am-pm:hover,.brz .flatpickr-time input:focus,.brz .flatpickr-time input:hover{background:#eee}
1181
- .brz .flatpickr-input[readonly]{cursor:pointer}
1182
- @-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}
1183
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}
1184
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.brz .select2-container{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}
1185
- .brz .select2-container .select2-selection--single{-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:block;height:28px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}
1186
- .brz .select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1187
- .brz .select2-container .select2-selection--single .select2-selection__clear{position:relative}
1188
- .brz .select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}
1189
- .brz .select2-container .select2-selection--multiple{-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:block;min-height:32px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}
1190
- .brz .select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}
1191
- .brz .select2-container .select2-search--inline{float:left}
1192
- .brz .select2-container .select2-search--inline .select2-search__field{-webkit-box-sizing:border-box;box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}
1193
- .brz .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}
1194
- .brz .select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}
1195
- .brz .select2-results{display:block}
1196
- .brz .select2-results__options{list-style:none;margin:0;padding:0}
1197
- .brz .select2-results__option{padding:6px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}
1198
- .brz .select2-results__option[aria-selected]{cursor:pointer}
1199
- .brz .select2-container--open .select2-dropdown{left:0}
1200
- .brz .select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}
1201
- .brz .select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}
1202
- .brz .select2-search--dropdown{display:block;padding:4px}
1203
- .brz .select2-search--dropdown .select2-search__field{padding:4px;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}
1204
- .brz .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}
1205
- .brz .select2-search--dropdown.select2-search--hide{display:none}
1206
- .brz .select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff}
1207
- .brz .select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}
1208
- .brz .select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}
1209
- .brz .select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}
1210
- .brz .select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}
1211
- .brz .select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}
1212
- .brz .select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}
1213
- .brz .select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}
1214
- .brz .select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}
1215
- .brz .select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}
1216
- .brz .select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}
1217
- .brz .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}
1218
- .brz .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}
1219
- .brz .select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}
1220
- .brz .select2-container--default .select2-selection--multiple .select2-selection__rendered{-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}
1221
- .brz .select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}
1222
- .brz .select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px;padding:1px}
1223
- .brz .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}
1224
- .brz .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}
1225
- .brz .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}
1226
- .brz .select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.brz .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right}
1227
- .brz .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}
1228
- .brz .select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}
1229
- .brz .select2-container--default.select2-container--focus .select2-selection--multiple{border:solid #000 1px;outline:0}
1230
- .brz .select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}
1231
- .brz .select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}
1232
- .brz .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.brz .select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}
1233
- .brz .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.brz .select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}
1234
- .brz .select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}
1235
- .brz .select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:textfield}
1236
- .brz .select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}
1237
- .brz .select2-container--default .select2-results__option[role=group]{padding:0}
1238
- .brz .select2-container--default .select2-results__option[aria-disabled=true]{color:#999}
1239
- .brz .select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}
1240
- .brz .select2-container--default .select2-results__option .select2-results__option{padding-left:1em}
1241
- .brz .select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}
1242
- .brz .select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}
1243
- .brz .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}
1244
- .brz .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}
1245
- .brz .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}
1246
- .brz .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}
1247
- .brz .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}
1248
- .brz .select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}
1249
- .brz .select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,#fff),to(#eee));background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x}
1250
- .brz .select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}
1251
- .brz .select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}
1252
- .brz .select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}
1253
- .brz .select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}
1254
- .brz .select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,#eee),to(#ccc));background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x}
1255
- .brz .select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}
1256
- .brz .select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}
1257
- .brz .select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}
1258
- .brz .select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}
1259
- .brz .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}
1260
- .brz .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}
1261
- .brz .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),color-stop(50%,#eee));background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x}
1262
- .brz .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(50%,#eee),to(#fff));background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x}
1263
- .brz .select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}
1264
- .brz .select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}
1265
- .brz .select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}
1266
- .brz .select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}
1267
- .brz .select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}
1268
- .brz .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}
1269
- .brz .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}
1270
- .brz .select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}
1271
- .brz .select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}
1272
- .brz .select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}
1273
- .brz .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}
1274
- .brz .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}
1275
- .brz .select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}
1276
- .brz .select2-container--classic .select2-search--inline .select2-search__field{outline:0;-webkit-box-shadow:none;box-shadow:none}
1277
- .brz .select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}
1278
- .brz .select2-container--classic .select2-dropdown--above{border-bottom:none}
1279
- .brz .select2-container--classic .select2-dropdown--below{border-top:none}
1280
- .brz .select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}
1281
- .brz .select2-container--classic .select2-results__option[role=group]{padding:0}
1282
- .brz .select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}
1283
- .brz .select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}
1284
- .brz .select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}
1285
- .brz .select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
1286
- .brz .ps{overflow:hidden!important;overflow-anchor:none;-ms-overflow-style:none;touch-action:auto;-ms-touch-action:auto}
1287
- .brz .ps__rail-x{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;height:15px;bottom:0;position:absolute}
1288
- .brz .ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;position:absolute}
1289
- .brz .ps--active-x>.ps__rail-x,.brz .ps--active-y>.ps__rail-y{display:block;background-color:transparent}
1290
- .brz .ps--focus>.ps__rail-x,.brz .ps--focus>.ps__rail-y,.brz .ps--scrolling-x>.ps__rail-x,.brz .ps--scrolling-y>.ps__rail-y,.brz .ps:hover>.ps__rail-x,.brz .ps:hover>.ps__rail-y{opacity:.6}
1291
- .brz .ps .ps__rail-x.ps--clicking,.brz .ps .ps__rail-x:focus,.brz .ps .ps__rail-x:hover,.brz .ps .ps__rail-y.ps--clicking,.brz .ps .ps__rail-y:focus,.brz .ps .ps__rail-y:hover{background-color:#eee;opacity:.9}
1292
- .brz .ps__thumb-x{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out;height:6px;bottom:2px;position:absolute}
1293
- .brz .ps__thumb-y{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}
1294
- .brz .ps__rail-x.ps--clicking .ps__thumb-x,.brz .ps__rail-x:focus>.ps__thumb-x,.brz .ps__rail-x:hover>.ps__thumb-x{background-color:#999;height:11px}
1295
- .brz .ps__rail-y.ps--clicking .ps__thumb-y,.brz .ps__rail-y:focus>.ps__thumb-y,.brz .ps__rail-y:hover>.ps__thumb-y{background-color:#999;width:11px}
1296
- @supports (-ms-overflow-style:none){.brz .ps{overflow:auto!important}}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.brz .ps{overflow:auto!important}}.brz .brz-forms2{width:100%}
1297
- .brz .brz-forms2__fields,.brz .brz-forms2__wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
1298
- .brz .brz-forms2__field{outline:0}
1299
- .brz .brz-forms2__wrap{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}
1300
- .brz .brz-forms2__item{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}
1301
- .brz .brz-forms2 .brz-input,.brz .brz-forms2 .brz-textarea{display:block;width:100%;height:auto;max-width:100%;min-height:auto;background-color:transparent;border:none;outline:0;color:inherit;font-size:inherit;font-family:inherit;letter-spacing:inherit;font-weight:inherit;line-height:inherit;-webkit-box-shadow:none;box-shadow:none}
1302
- .brz .brz-forms2 .brz-input::-webkit-input-placeholder,.brz .brz-forms2 .brz-textarea::-webkit-input-placeholder{color:inherit;opacity:.5}
1303
- .brz .brz-forms2 .brz-input::-moz-placeholder,.brz .brz-forms2 .brz-textarea::-moz-placeholder{color:inherit;opacity:.5}
1304
- .brz .brz-forms2 .brz-input::-ms-input-placeholder,.brz .brz-forms2 .brz-textarea::-ms-input-placeholder{color:inherit;opacity:.5}
1305
- .brz .brz-forms2 .brz-input::placeholder,.brz .brz-forms2 .brz-textarea::placeholder{color:inherit;opacity:.5}
1306
- .brz .brz-forms2 .brz-textarea{height:100%;resize:none}
1307
- .brz .brz-forms2 .brz-label{display:block}
1308
- .brz .brz-forms2 .brz-forms2__field{text-align:left}
1309
- .brz .brz-forms2 .brz-forms2__field-label{border:none;cursor:auto}
1310
- .brz .brz-forms2__radio.brz-forms2__field{padding:0;border:none!important;margin-bottom:-20px}
1311
- .brz .brz-forms2__radio-option{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:1.2em}
1312
- .brz .brz-forms2__radio-option .brz-span{margin-left:10px;margin-right:auto}
1313
- .brz .brz-forms2__radio-option input.brz-input{cursor:auto}
1314
- .brz .brz-forms2__checkbox-options,.brz .brz-forms2__radio-options{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}
1315
- .brz .brz-forms2 .brz-control__check-group-icon,.brz .brz-forms2 .brz-control__radio-check{-ms-flex-preferred-size:1em;flex-basis:1em}
1316
- .brz .brz-forms2 .brz-forms2__checkbox-option-name,.brz .brz-forms2 .brz-forms2__radio-option-name{-ms-flex-preferred-size:calc(100% - 1em - 10px);flex-basis:calc(100% - 1em - 10px)}
1317
- .brz .brz-forms2__checkbox.brz-forms2__field{padding:0;border:none!important;margin-bottom:-20px}
1318
- .brz .brz-forms2__checkbox-option{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:1.2em}
1319
- .brz .brz-forms2__checkbox-option .brz-forms2__checkbox-option-name{margin-left:10px;margin-right:auto}
1320
- .brz .brz-forms2__checkbox-option input.brz-input{cursor:auto}
1321
- .brz .brz-forms2__checkbox-option .brz-control__radio-check{border-radius:0}
1322
- .brz .brz-forms2__item-button .brz-btn{outline:0;width:100%}
1323
- .brz .brz-forms2__item-button .brz-icon-svg{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}
1324
- .brz .brz-forms2__alert{min-height:55px;width:100%;font-size:12px;line-height:2;letter-spacing:2.5px;font-weight:600;text-transform:uppercase;padding:17px 30px;color:#fff;margin-top:15px}
1325
- .brz .brz-forms2__alert--success{background-color:#15d053}
1326
- .brz .brz-forms2__alert--error{background-color:red}
1327
- .brz .brz-forms2__item--error .brz-control__check-group,.brz .brz-forms2__item--error .brz-control__radio{color:red!important}
1328
- .brz.brz:not(.brz-ed) .brz-control__check-group .brz-label{font:inherit;display:inherit;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit;width:100%;cursor:pointer}
1329
- .brz.brz:not(.brz-ed) .brz-control__check-group--check{display:none}
1330
- .brz.brz:not(.brz-ed) .brz-control__check-group .brz-input{display:none}
1331
- .brz.brz:not(.brz-ed) .brz-control__check-group .brz-input:checked~.brz-label .brz-control__check-group--check{display:inline-block}
1332
- .brz.brz:not(.brz-ed) .brz-control__check-group .brz-input:checked~.brz-label .brz-control__check-group--uncheck{display:none}
1333
- .brz.brz:not(.brz-ed) .brz-control__radio .brz-label{font:inherit;display:inherit;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit;width:100%;cursor:pointer}
1334
- .brz.brz:not(.brz-ed) .brz-control__radio--check{display:none}
1335
- .brz.brz:not(.brz-ed) .brz-control__radio .brz-input{display:none}
1336
- .brz.brz:not(.brz-ed) .brz-control__radio .brz-input:checked~.brz-label .brz-control__radio--check{display:inline-block}
1337
- .brz.brz:not(.brz-ed) .brz-control__radio .brz-input:checked~.brz-label .brz-control__radio--uncheck{display:none}
1338
- .brz.brz:not(.brz-ed) .brz-forms2__field-select{padding:0}
1339
- .brz.brz:not(.brz-ed) .brz-select{width:100%;visibility:hidden}
1340
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-dropdown{background-color:#fff;border:none;border-radius:0}
1341
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-results__option{padding:12px 24px;font-size:16px;height:48px;line-height:1.5;cursor:pointer;background-color:inherit}
1342
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container{height:100%}
1343
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container,.brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection{outline:0}
1344
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--multiple,.brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--single{height:100%;border:none;background-color:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}
1345
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--multiple .select2-selection__rendered,.brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--single .select2-selection__rendered{color:inherit;line-height:1;padding:0;-webkit-box-flex:1;-ms-flex:1;flex:1}
1346
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--multiple .select2-selection__rendered{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:-2.5px}
1347
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--multiple .select2-selection__choice{margin:2.5px;float:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:none;padding:0 11px}
1348
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection--multiple .select2-selection__choice__remove{display:block;font-size:inherit;font-weight:400;color:inherit;margin-right:0;margin-left:8px}
1349
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection__arrow{top:50%;right:18px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
1350
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-selection__clear{margin-right:14px}
1351
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-search__field{font:inherit;color:inherit;margin:0}
1352
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-search__field::-webkit-input-placeholder{color:inherit}
1353
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-search__field::-moz-placeholder{color:inherit}
1354
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-search__field::-ms-input-placeholder{color:inherit}
1355
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-search__field::placeholder{color:inherit}
1356
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container .select2-search--inline{margin:2.5px;-webkit-box-flex:1;-ms-flex:1;flex:1;float:none}
1357
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--default .select2-results>.select2-results__options{max-height:initial}
1358
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:inherit;color:inherit}
1359
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--default .select2-selection--single .select2-selection__placeholder{color:inherit}
1360
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--default .select2-selection--single .select2-selection__placeholder:empty:before{content:"Fake content";visibility:hidden}
1361
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:currentColor transparent transparent}
1362
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent currentColor}
1363
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-container--open .select2-dropdown{top:1px;max-height:200px;overflow:hidden}
1364
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .select2-dropdown--below{background-color:transparent}
1365
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .ps__thumb-y{background-color:rgba(0,0,0,.2)}
1366
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .ps .ps__rail-x.ps--clicking,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps .ps__rail-x:focus,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps .ps__rail-x:hover,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps .ps__rail-y.ps--clicking,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps .ps__rail-y:focus,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps .ps__rail-y:hover{background-color:transparent}
1367
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .ps__rail-y.ps--clicking .ps__thumb-y,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps__rail-y:focus>.ps__thumb-y,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps__rail-y:hover>.ps__thumb-y{width:6px}
1368
- .brz.brz:not(.brz-ed) .brz-forms2__field-select .ps--focus>.ps__rail-x,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps--focus>.ps__rail-y,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps--scrolling-x>.ps__rail-x,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps--scrolling-y>.ps__rail-y,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps:hover>.ps__rail-x,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps:hover>.ps__rail-y,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps__rail-x,.brz.brz:not(.brz-ed) .brz-forms2__field-select .ps__rail-y{opacity:1}
1369
- .brz.brz:not(.brz-ed) .flatpickr-calendar{font-family:Lato,sans-serif;width:306px}
1370
- .brz.brz:not(.brz-ed) .flatpickr-calendar.hasTime{width:150px}
1371
- .brz.brz:not(.brz-ed) .flatpickr-calendar.open{max-height:600px}
1372
- .brz.brz:not(.brz-ed) .flatpickr-calendar .dayContainer{width:286px;min-width:286px;max-width:286px}
1373
- .brz.brz:not(.brz-ed) .flatpickr-calendar .numInputWrapper:hover{background-color:transparent}
1374
- .brz.brz:not(.brz-ed) .flatpickr-months{padding:10px 10px 0}
1375
- .brz.brz:not(.brz-ed) .flatpickr-innerContainer{padding:0 10px 10px}
1376
- .brz.brz:not(.brz-ed) .flatpickr-next-month,.brz.brz:not(.brz-ed) .flatpickr-prev-month{top:7px}
1377
- .brz.brz:not(.brz-ed) .flatpickr-next-month{right:10px}
1378
- .brz.brz:not(.brz-ed) .flatpickr-prev-month{left:10px}
1379
- .brz.brz:not(.brz-ed) .flatpickr-months .flatpickr-next-month,.brz.brz:not(.brz-ed) .flatpickr-months .flatpickr-prev-month{color:rgba(0,0,0,.5)}
1380
- .brz.brz:not(.brz-ed) .flatpickr-months .flatpickr-next-month:hover,.brz.brz:not(.brz-ed) .flatpickr-months .flatpickr-prev-month:hover{color:#000}
1381
- .brz.brz:not(.brz-ed) .flatpickr-months .flatpickr-next-month svg,.brz.brz:not(.brz-ed) .flatpickr-months .flatpickr-prev-month svg{fill:currentColor}
1382
- .brz.brz:not(.brz-ed) .flatpickr-current-month input.cur-year{font-size:17px;font-weight:700}
1383
- .brz.brz:not(.brz-ed) .flatpickr-current-month .numInputWrapper:hover,.brz.brz:not(.brz-ed) .flatpickr-current-month span.cur-month:hover{background-color:transparent}
1384
- .brz.brz:not(.brz-ed) .flatpickr-weekdays{padding:20px 0 15px;height:auto}
1385
- .brz.brz:not(.brz-ed) .flatpickr-weekday{color:rgba(0,0,0,.8)}
1386
- .brz.brz:not(.brz-ed) .flatpickr-days{width:286px;font-size:13px;font-weight:700}
1387
- .brz.brz:not(.brz-ed) .flatpickr-day{height:36px;max-width:36px;line-height:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
1388
- .brz.brz:not(.brz-ed) .flatpickr-day.today{border-color:#a9a9a9}
1389
- .brz.brz:not(.brz-ed) .flatpickr-day:focus,.brz.brz:not(.brz-ed) .flatpickr-day:hover{color:#fff;border-color:#a9a9a9;background-color:#a9a9a9}
1390
- .brz.brz:not(.brz-ed) .flatpickr-day.selected{border-color:rgba(0,0,0,.9);background-color:rgba(0,0,0,.9)}
1391
- .brz.brz:not(.brz-ed) .flatpickr-time input{font-size:15px;font-weight:700;text-align:left;text-indent:12px}
1392
- .brz.brz:not(.brz-ed) .flatpickr-time .flatpickr-am-pm:focus,.brz.brz:not(.brz-ed) .flatpickr-time .flatpickr-am-pm:hover,.brz.brz:not(.brz-ed) .flatpickr-time input:focus,.brz.brz:not(.brz-ed) .flatpickr-time input:hover{background-color:transparent}
1393
- .brz.brz:not(.brz-ed) .flatpickr-am-pm{font-size:14px;font-weight:700;color:rgba(0,0,0,.7);width:32.66%}
1394
- .brz.brz:not(.brz-ed) .flatpickr-am-pm:focus,.brz.brz:not(.brz-ed) .flatpickr-am-pm:hover{color:#000}
1395
- .brz.brz:not(.brz-ed) .flatpickr-calendar.hasTime .numInputWrapper{width:32.66%}
1396
- .brz.brz:not(.brz-ed) .flatpickr-calendar.hasTime .numInputWrapper span.arrowDown,.brz.brz:not(.brz-ed) .flatpickr-calendar.hasTime .numInputWrapper span.arrowUp{height:10px;top:50%}
1397
- .brz.brz:not(.brz-ed) .flatpickr-calendar.hasTime .numInputWrapper span.arrowUp{margin-top:-10px}
1398
- .brz.brz:not(.brz-ed) .flatpickr-calendar.hasTime .numInputWrapper span.arrowDown{margin-bottom:-10px}
1399
- .brz .brz-input__upload{position:relative}
1400
- .brz .brz-input__upload .brz-label{font:inherit;width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:1.5em;cursor:pointer}
1401
- .brz .brz-input__upload .brz-label .brz-span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
1402
- .brz .brz-input__upload .brz-label .brz-span:empty:before{content:"Hidden Placeholder";visibility:hidden}
1403
- .brz .brz-input__upload .brz-input__upload-delete{cursor:pointer;position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:1.5em}
1404
- .brz .brz-input__upload .brz-input:not(.brz-input__upload-placeholder){display:none}
1405
- .brz .brz-input__upload .brz-button{background-color:#fff;color:#000;border:1px solid #ccc;border-radius:3px;font-size:inherit;font-weight:inherit;font-family:inherit;line-height:1;padding:.5em;position:absolute;top:50%;right:24px;-webkit-transform:translateY(-50%);transform:translateY(-50%);outline:0!important}
1406
- @media (max-width:767px){.brz .brz-forms2__select-item__input{font-size:14px;padding:10px 16px}
1407
- .brz .brz-forms2 .brz-control__select-current{padding:10px 16px}
1408
- .brz .brz-forms2 .brz-control__select-options .brz-control__select-option{padding:10px 16px;font-size:14px}}.brz .brz-tabs{min-width:0}
1409
- .brz .brz-tabs--horizontal{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}
1410
- .brz .brz-tabs--vertical{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}
1411
- .brz .brz-tabs--vertical.brz-tabs--right{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}
1412
- .brz .brz-tabs__nav{overflow:hidden;margin:0;padding:0;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}
1413
- .brz .brz-tabs__nav--horizontal{display:-webkit-box;display:-ms-flexbox;display:flex}
1414
- .brz .brz-tabs__nav--button{padding:10px 15px;cursor:pointer;border-style:solid;background-clip:padding-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}
1415
- .brz .brz-tabs__nav--item{position:relative;list-style:none;margin:0;line-height:unset;z-index:var(--zIndex)}
1416
- .brz .brz-tabs .brz-tabs__nav--style-1 .brz-tabs__nav--active:after,.brz .brz-tabs .brz-tabs__nav--style-1 .brz-tabs__nav--active:before{content:"";position:absolute}
1417
- .brz .brz-tabs__nav--vertical.brz-tabs__nav--left .brz-tabs__nav--active:after,.brz .brz-tabs__nav--vertical.brz-tabs__nav--left .brz-tabs__nav--active:before{height:100vh;right:0}
1418
- .brz .brz-tabs__nav--vertical.brz-tabs__nav--left .brz-tabs__nav--active:before{bottom:100%}
1419
- .brz .brz-tabs__nav--vertical.brz-tabs__nav--right .brz-tabs__nav--active:after,.brz .brz-tabs__nav--vertical.brz-tabs__nav--right .brz-tabs__nav--active:before{height:100vh;left:0}
1420
- .brz .brz-tabs__nav--vertical.brz-tabs__nav--right .brz-tabs__nav--active:before{bottom:100%}
1421
- .brz .brz-tabs__nav--horizontal .brz-tabs__nav--active:after,.brz .brz-tabs__nav--horizontal .brz-tabs__nav--active:before{width:100vw;height:2px;bottom:0}
1422
- .brz .brz-tabs__nav--horizontal .brz-tabs__nav--active:before{left:-100vw}
1423
- .brz .brz-tabs__nav--horizontal .brz-tabs__nav--active:after{right:-100vw}
1424
- .brz .brz-tabs__nav--mobile{display:none}
1425
- .brz .brz-tabs__items{display:none;border-style:solid;background-clip:padding-box;width:100%}
1426
- .brz .brz-tabs__items--active{display:block}
1427
- .brz .brz-tabs__items--active>.brz-tabs__item--content{-webkit-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-fill-mode:both;animation-fill-mode:both}
1428
- .brz .brz-tabs__items--active .brz-bg-content:empty{min-height:50px}
1429
- .brz .brz-tabs__content--vertical{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}
1430
- .brz .brz-tabs__content--vertical .brz-tabs__items{height:100%}
1431
- .brz .brz-tabs__content--vertical.brz-tabs__content--style-1.brz-tabs__content--left .brz-tabs__items--active,.brz .brz-tabs__content--vertical.brz-tabs__content--style-1.brz-tabs__content--left .brz-tabs__items--active:hover{border-left-style:none}
1432
- .brz .brz-tabs__content--vertical.brz-tabs__content--right.brz-tabs__content--style-1 .brz-tabs__items--active,.brz .brz-tabs__content--vertical.brz-tabs__content--right.brz-tabs__content--style-1 .brz-tabs__items--active:hover{border-right-style:none}
1433
- .brz .brz-tabs__content--horizontal.brz-tabs__content--style-1 .brz-tabs__items--active,.brz .brz-tabs__content--horizontal.brz-tabs__content--style-1 .brz-tabs__items--active:hover{border-top-style:none}
1434
- @media (max-width:991px){.brz .brz-tabs__nav{margin:0!important}
1435
- .brz .brz-tabs__nav--mobile{display:block}
1436
- .brz .brz-tabs__nav--mobile>.brz-tabs__nav--button{border-width:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}
1437
- .brz .brz-tabs__nav--desktop{display:none}
1438
- .brz .brz-tabs__items{display:block}
1439
- .brz .brz-tabs__items>.brz-tabs__item--content{display:none}
1440
- .brz .brz-tabs__items:not(:last-child){margin-bottom:3px}
1441
- .brz .brz-tabs__items--active>.brz-tabs__nav--button{border-bottom:solid}
1442
- .brz .brz-tabs__items--active>.brz-tabs__item--content{display:block}
1443
- .brz .brz-tabs__content--vertical .brz-tabs__items{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}
1444
- .brz .brz-tabs__content .brz-tabs__items--active{border-top-style:solid}
1445
- .brz .brz-tabs__content.brz-tabs__content--vertical.brz-tabs__content--left .brz-tabs__items--active,.brz .brz-tabs__content.brz-tabs__content--vertical.brz-tabs__content--left .brz-tabs__items--active:hover{border-left-style:solid}
1446
- .brz .brz-tabs__content.brz-tabs__content--vertical.brz-tabs__content--right .brz-tabs__items--active,.brz .brz-tabs__content.brz-tabs__content--vertical.brz-tabs__content--right .brz-tabs__items--active:hover{border-right-style:solid}
1447
- .brz .brz-tabs__content.brz-tabs__content--horizontal.brz-tabs__content--style-1 .brz-tabs__items--active,.brz .brz-tabs__content.brz-tabs__content--horizontal.brz-tabs__content--style-1 .brz-tabs__items--active:hover{border-top-style:solid}
1448
- .brz .brz-tabs__nav--horizontal.brz-tabs__nav.brz-tabs__nav--style-2{display:none}}.brz .brz-timeline__tab{position:relative;list-style:none;min-width:280px}
1449
- .brz .brz-timeline__tab:after{content:"";position:absolute}
1450
- .brz .brz-timeline__tab:before{content:"";position:absolute}
1451
- .brz .brz-timeline__tab:last-child:after{display:none}
1452
- .brz .brz-timeline__nav--title{position:relative;text-align:center;left:-10px;min-width:116px;max-width:116px;width:116px}
1453
- .brz .brz-timeline__nav--icon{margin-left:20px}
1454
- .brz .brz-timeline__content{border-style:solid;border-radius:5px;-webkit-box-shadow:0 0 20px 0 rgba(52,49,75,.1);box-shadow:0 0 20px 0 rgba(52,49,75,.1);position:relative}
1455
- .brz .brz-timeline__content:before{content:"";position:absolute;top:0;width:15px;height:15px;-webkit-transform:translateY(-50%) rotate(45deg);transform:translateY(-50%) rotate(45deg)}
1456
- .brz .brz-timeline__nav--mobile{display:none}
1457
- .brz .brz-switcher{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}
1458
- .brz .brz-switcher__nav{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition-duration:.3s;transition-duration:.3s;position:relative}
1459
- .brz .brz-switcher__nav:before{content:"";position:absolute;left:calc(50% - 2px);height:calc(100% - 4px);width:calc(50% - 2px);margin:2px;-webkit-transition-duration:.3s;transition-duration:.3s}
1460
- .brz .brz-switcher__nav--item{width:50%;height:100%;max-width:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;white-space:nowrap}
1461
- .brz .brz-switcher__nav--item--active{z-index:1}
1462
- .brz .brz-switcher__nav--active:before{content:"";-webkit-transform:translateX(-100%);transform:translateX(-100%)}
1463
- .brz .brz-switcher__nav--text{position:relative}
1464
- .brz .brz-switcher__content--tab{display:none;width:100%}
1465
- .brz .brz-switcher__content--tab--active{display:block}
1466
- .brz .brz-switcher__nav>.brz-switcher__nav--item>span{cursor:pointer}
1467
- .brz .brz-switcher__nav2{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1468
- .brz .brz-switcher__nav2--control{height:47px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition-duration:.3s;transition-duration:.3s}
1469
- .brz .brz-switcher__nav2--control:before{content:"";position:relative;left:calc(50% + 2px);margin:2px;height:calc(100% - 4px);width:calc(50% - 5px);-webkit-transition-duration:.3s;transition-duration:.3s}
1470
- .brz .brz-switcher__nav2--control--active:before{content:"";-webkit-transform:translateX(calc(-100% - 8px));transform:translateX(calc(-100% - 8px))}
1471
- .brz .brz-switcher__nav2 span{margin:0 20px}
1472
- .brz .brz-switcher--style2>.brz-switcher__nav2>span{cursor:pointer}
1473
- .brz .brz-accordion{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
1474
- .brz .brz-accordion__nav{padding:10px 15px;cursor:pointer;background-clip:padding-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}
1475
- .brz .brz-accordion__nav--icon,.brz .brz-accordion__nav--previewIcon,.brz .brz-accordion__nav--previewIcon--active{margin:auto 0}
1476
- .brz .brz-accordion__item{display:block;width:100%}
1477
- .brz .brz-accordion__item>.brz-accordion__content{display:none;background-clip:padding-box;border-top-color:transparent!important}
1478
- .brz .brz-accordion__item>.brz-accordion__nav>.brz-accordion--icon-wrapper>.brz-accordion__nav--previewIcon--active{display:none}
1479
- .brz .brz-accordion__item--active>.brz-accordion__nav>.brz-accordion--icon-wrapper>.brz-accordion__nav--previewIcon--active{display:block}
1480
- .brz .brz-accordion__item--active>.brz-accordion__nav>.brz-accordion--icon-wrapper>.brz-accordion__nav--previewIcon{display:none}
1481
- .brz .brz-accordion__item--active>.brz-accordion__content{display:block}
1482
- .brz .brz-accordion__item--active>.brz-accordion__content:empty{min-height:50px}
1483
- .brz .brz-accordion__filter-wrapper{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
1484
- .brz .brz-accordion__filter{width:100%;list-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit;padding:0;-ms-flex-wrap:wrap;flex-wrap:wrap}
1485
- .brz .brz-accordion__filter--style-2{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}
1486
- .brz .brz-accordion__filter__item{cursor:pointer}
1487
- .brz .brz-accordion__filter__item:first-child{margin-left:0!important}
1488
- .brz .brz-accordion__filter__item:last-child{margin-right:0!important}
1489
- .brz .brz-accordion__hidden{display:none}
1490
- .brz .brz-image__gallery{width:100%}
1491
- .brz .brz-image__gallery-wrapper .brz-image{display:block}
1492
- .brz .brz-image__gallery-item{-webkit-transition:none!important;transition:none!important}
1493
- .brz .brz-image__gallery--filter-wrapper{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
1494
- .brz .brz-image__gallery-filter{width:100%;list-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0}
1495
- .brz .brz-image__gallery-filter--style-2{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}
1496
- .brz .brz-image__gallery-filter__item{cursor:pointer}
1497
- .brz .brz-image__gallery-filter__item:first-child{margin-left:0!important}
1498
- .brz .brz-image__gallery-filter__item:last-child{margin-right:0!important}
1499
- .brz .brz-popup{position:fixed;width:100%;height:100%;top:0;left:0;z-index:1070}
1500
- .brz .brz-popup__close{position:absolute;z-index:2;top:36px;left:50px;color:#fff;font-size:0;cursor:pointer}
1501
- .brz .brz-popup__close .brz-icon-svg{font-size:26px}
1502
- .brz .brz-popup__inner>.brz-bg-content{max-height:100%;overflow:auto;padding-top:70px;padding-bottom:70px}
1503
- .brz .brz-popup__preview{z-index:-1;visibility:hidden;-webkit-transform:translate(-100%);transform:translate(-100%);opacity:0;-webkit-transition:.3s cubic-bezier(.25,.46,.45,.94) opacity,.3s cubic-bezier(.25,.46,.45,.94) visibility,.3s cubic-bezier(.25,.46,.45,.94) z-index;transition:.3s cubic-bezier(.25,.46,.45,.94) opacity,.3s cubic-bezier(.25,.46,.45,.94) visibility,.3s cubic-bezier(.25,.46,.45,.94) z-index}
1504
- .brz .brz-popup__preview.brz-popup--opened{z-index:1070;visibility:visible;-webkit-transform:translate(0);transform:translate(0);opacity:1;-webkit-transition:.3s cubic-bezier(.25,.46,.45,.94) opacity,.3s cubic-bezier(.25,.46,.45,.94) visibility,.3s cubic-bezier(.25,.46,.45,.94) z-index;transition:.3s cubic-bezier(.25,.46,.45,.94) opacity,.3s cubic-bezier(.25,.46,.45,.94) visibility,.3s cubic-bezier(.25,.46,.45,.94) z-index}
1505
- .brz .brz-popup2{position:fixed;width:100%;height:100%;top:0;left:0;z-index:1060}
1506
- .brz .brz-popup2__close{position:absolute;z-index:2;color:#fff;font-size:0;cursor:pointer}
1507
- .brz .brz-popup2__close .brz-icon-svg{font-size:26px}
1508
- .brz .brz-popup2 .brz-container__wrap{position:relative}
1509
- .brz .brz-popup2 .brz-container__wrap .brz-container{height:100%}
1510
- .brz .brz-popup2__inner{height:100%}
1511
- .brz .brz-popup2__inner>.brz-bg-content{max-height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;overflow-x:hidden;overflow-y:auto}
1512
- .brz .brz-popup2__inner>.brz-bg-content>.brz-container__wrap{max-height:100%;margin:0;padding:0;min-width:300px}
1513
- .brz .brz-popup2__vertical-align{-webkit-transform:rotate(270deg);transform:rotate(270deg)}
1514
- .brz .brz-popup2__preview{z-index:-1;visibility:hidden;-webkit-transform:translate(0,-110%);transform:translate(0,-110%);opacity:0;-webkit-transition:.3s cubic-bezier(.25,.46,.45,.94) opacity;transition:.3s cubic-bezier(.25,.46,.45,.94) opacity}
1515
- .brz .brz-popup2__preview.brz-popup2--opened{z-index:1070;visibility:visible;-webkit-transform:translate(0,0);transform:translate(0,0);opacity:1;-webkit-transition:.3s cubic-bezier(.25,.46,.45,.94) opacity;transition:.3s cubic-bezier(.25,.46,.45,.94) opacity}
1516
- .brz .brz-carousel{display:block;width:100%}
1517
- .brz .brz-carousel__slider:not(.slick-initialized){display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
1518
- .brz .brz-carousel>.slick-slider{overflow:hidden}
1519
- .brz .brz-carousel>.slick-slider .slick-slide{height:auto}
1520
- .brz .brz-carousel>.slick-slider>.slick-list>.slick-track>.slick-slide>div{height:100%}
1521
- .brz .brz-carousel>.slick-slider>.slick-list>.slick-track>.slick-slide>div>.brz-carousel__item,.brz .brz-carousel>.slick-slider>.slick-list>.slick-track>.slick-slide>div>.brz-carousel__item>.brz-columns,.brz .brz-carousel>.slick-slider>.slick-list>.slick-track>.slick-slide>div>.brz-columns{height:100%}
1522
- .brz .brz-carousel>.slick-slider>.brz-slick-slider__arrow{opacity:1}
1523
- .brz .brz-carousel>.slick-slider>.brz-slick-slider__dots{bottom:10px}
1524
- .brz .brz-carousel>.slick-slider .slick-slide{outline:0}
1525
- .brz .brz-carousel>.slick-slider .slick-track{-ms-flex-wrap:nowrap;flex-wrap:nowrap}
1526
- .brz .brz-carousel .brz-icon-svg,.brz .brz-carousel .brz-rich-text *{-webkit-backface-visibility:hidden;backface-visibility:hidden}
1527
- @media (max-width:767px){.brz.brz:not(.brz-ed) .slick-slider *{min-width:0;min-height:0}}.brz .brz-posts{width:100%;display:grid}
1528
- .brz .brz-posts ul.page-numbers{margin:0;list-style:none;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;grid-column:1/-1;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
1529
- .brz .brz-posts ul.page-numbers>li{position:relative;margin-left:4px;margin-right:4px}
1530
- .brz .brz-posts ul.page-numbers>li:first-child{margin-left:0}
1531
- .brz .brz-posts ul.page-numbers>li:last-child{margin-right:0}
1532
- .brz .brz-posts ul.page-numbers .page-numbers{position:relative;display:block;color:inherit;font-size:18px;line-height:1;text-decoration:none;padding:6px 10px;-webkit-transition:.2s linear color;transition:.2s linear color;outline:0}
1533
- .brz .brz-posts ul.page-numbers .page-numbers:before{content:"";width:28px;height:28px;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border:2px solid transparent;-webkit-transition:.2s linear border-color;transition:.2s linear border-color;opacity:.75}
1534
- .brz .brz-posts ul.page-numbers .page-numbers:hover{-webkit-transition:.2s linear color;transition:.2s linear color}
1535
- .brz .brz-posts ul.page-numbers .page-numbers.current:before{border-color:currentColor;-webkit-transition:.2s linear border-color;transition:.2s linear border-color}
1536
- .brz .fb_iframe_widget{min-height:20px}
1537
- .brz .fb-comments,.brz .fb-comments span,.brz .fb-comments span iframe[style],.brz .fb-page,.brz .fb-page span,.brz .fb-page span iframe[style],.brz .fb-post,.brz .fb-video{width:100%!important;min-width:100%!important}
1538
- .brz .brz-fb-embed,.brz .brz-fb-group,.brz .brz-fb-page{position:relative;width:100%}
1539
- .brz .brz-fb-embed::before,.brz .brz-fb-group::before,.brz .brz-fb-page::before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;z-index:2;display:block;pointer-events:none}
1540
- .brz .brz-fb-group{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}
1541
- .brz .brz-fb-comments,.brz .brz-fb-page{width:100%}
1542
- .brz .brz-wp__breadcrumbs{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}
1543
- .brz .brz-wp__breadcrumbs .brz-breadcrumbs{width:100%;padding:0;margin:0;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-wrap:wrap;flex-wrap:wrap;word-break:break-all}
1544
- .brz .brz-wp__breadcrumbs .brz-breadcrumbs .brz-li{list-style:none;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1545
- .brz .brz-wp__breadcrumbs .brz-breadcrumbs .brz-li .brz-a{cursor:pointer}
1546
- .brz .brz-wp__breadcrumbs .brz-breadcrumbs .brz-li .brz-icon-svg{margin-top:1px}
1547
- .brz .brz-wp__breadcrumbs .brz-breadcrumbs .brz-li:last-child .brz-a{margin-right:0}
1548
- .brz .brz-wp__breadcrumbs .brz-breadcrumbs .brz-li:not(:last-child) .brz-a{color:inherit}
1549
- .brz .brz-woosku{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}
1550
- .brz .brz-woostock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}
1551
- .brz .brz-woostock .in-stock{margin:0}
1552
- .brz .brz-wp__postContent>div>:first-child{margin-top:0}
1553
- .brz .brz-wp__postContent>div>:last-child{margin-bottom:0}
1554
- .brz .brz-wp__postinfo{width:auto!important;padding:0;margin:0;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-wrap:wrap;flex-wrap:wrap;word-break:break-all}
1555
- .brz .brz-wp__postinfo__column ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
1556
- .brz .brz-wp__postinfo__column ul .brz-li.brz-li{margin-right:0}
1557
- .brz .brz-wp__postinfo__column ul .brz-li.brz-li:first-child{margin-top:0}
1558
- .brz .brz-wp__postinfo>ul{margin:0;padding:0}
1559
- .brz .brz-wp__postinfo .brz-li{margin-left:0;margin-top:0;list-style:none;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:default}
1560
- .brz .brz-wp__postinfo .brz-li:last-child{margin-right:0!important}
1561
- .brz .brz-wp__postinfo .brz-li .brz-icon-svg{margin-right:.5em}
1562
- .brz .brz-wp__postinfo__disabled-author ul .brz-li:first-child,.brz .brz-wp__postinfo__disabled-comments ul .brz-li:nth-child(4),.brz .brz-wp__postinfo__disabled-date ul .brz-li:nth-child(2),.brz .brz-wp__postinfo__disabled-time ul .brz-li:nth-child(3){display:none}
1563
- .brz .brz-starrating{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1564
- .brz .brz-starrating-container{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1565
- .brz .brz-starrating-color{position:absolute;top:0;left:0;z-index:2;overflow:hidden}
1566
- .brz .brz-starrating-icon-wrap{position:relative}
1567
- .brz .brz-starrating .brz-icon-svg{top:.1em}
1568
- .brz .brz-starrating .brz-icon-svg:last-child{margin-right:0!important}
1569
- .brz .brz-starrating-color-full{width:100%}
1570
- .brz .brz-starrating-color-w1{width:10%}
1571
- .brz .brz-starrating-color-w2{width:20%}
1572
- .brz .brz-starrating-color-w3{width:30%}
1573
- .brz .brz-starrating-color-w4{width:40%}
1574
- .brz .brz-starrating-color-w5{width:50%}
1575
- .brz .brz-starrating-color-w6{width:60%}
1576
- .brz .brz-starrating-color-w7{width:70%}
1577
- .brz .brz-starrating-color-w8{width:80%}
1578
- .brz .brz-starrating-color-w9{width:90%}
1579
- .brz .brz-search-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1580
- .brz .brz-search-container .brz-search-form{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;position:relative;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1581
- .brz .brz-search-container .brz-btn{margin-left:auto;z-index:1}
1582
- .brz .brz-search-container .brz-wrapper-clone__wrap{margin:0}
1583
- .brz .brz-search-container .brz-search{background-color:transparent;width:100%;padding:0 15px;outline:0;border:0;border-radius:0}
1584
- .brz .brz-search-container .brz-search:-webkit-autofill{-webkit-transition:background-color 500000s ease!important;transition:background-color 500000s ease!important}
1585
- .brz .brz-search-container .brz-search::-webkit-input-placeholder{color:inherit}
1586
- .brz .brz-search-container .brz-search::-moz-placeholder{color:inherit}
1587
- .brz .brz-search-container .brz-search::-ms-input-placeholder{color:inherit}
1588
- .brz .brz-search-container .brz-search::placeholder{color:inherit}
1589
- .brz .brz-search-container__minimal{overflow:hidden}
1590
- .brz .brz-search-container__minimal .brz-search-form{padding:0 15px}
1591
- .brz .brz-wooprice{min-height:-webkit-fit-content!important;min-height:-moz-fit-content!important;min-height:fit-content!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}
1592
- .brz .brz-wooprice>div{font-size:0}
1593
- .brz .brz-wooprice>div>.brz-price-none{margin:0;font-size:16px}
1594
- .brz .brz-wooprice .price{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1595
- .brz .brz-wooprice .price del{opacity:1!important}
1596
- .brz .brz-wooprice .price del .woocommerce-Price-amount{color:inherit!important;font-family:inherit!important;font-size:inherit!important;line-height:inherit!important;font-weight:inherit!important;letter-spacing:inherit!important}
1597
- .brz .brz-wooprice .price ins{background:0 0}
1598
- .brz .brz-wooadditional{width:100%}
1599
- .brz .brz-wooadditional *{margin:0;padding:0}
1600
- .brz .brz-wooadditional__attributes{display:-webkit-box;display:-ms-flexbox;display:flex;border-style:solid;border-bottom-style:none}
1601
- .brz .brz-wooadditional__attributes:last-child{border-bottom-style:solid}
1602
- .brz .brz-wooadditional__title::before{display:none}
1603
- .brz .brz-wooadditional__item{width:100%;font-family:inherit;font-size:inherit;line-height:inherit;font-weight:inherit;letter-spacing:inherit;color:inherit}
1604
- .brz .brz-wooadditional .brz-wooadditional__label{border-right-style:solid}
1605
- .brz .brz-comments{width:100%;padding:0;margin:0}
1606
- .brz .brz-comments-parrent{margin-bottom:-20px}
1607
- .brz .brz-comments-parrent>div{width:100%}
1608
- .brz .brz-comments .comments-pagination{margin-bottom:20px}
1609
- .brz .brz-comments .comments-pagination+.brz-comment-respond{margin-top:-10px}
1610
- .brz .brz-comments .brz-li{margin:0;line-height:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1611
- .brz .brz-comments li{margin:0}
1612
- .brz .brz-comments a{text-decoration:none;word-break:normal}
1613
- .brz .brz-comments li.brz-comments{margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
1614
- .brz .brz-comments li.brz-comments+.brz-comment-respond{margin-top:-20px}
1615
- .brz .brz-comments li.brz-comments .brz-comments-children{padding:0}
1616
- .brz .brz-comments li.brz-comments .brz-comments__name *{color:inherit;font-size:inherit}
1617
- .brz .brz-comments li.brz-comments .brz-comments__date{position:relative}
1618
- .brz .brz-comments li.brz-comments .brz-comments__date *{color:#818a91;font-size:inherit}
1619
- .brz .brz-comments li.brz-comments .brz-comments__reply{line-height:inherit}
1620
- .brz .brz-comments li.brz-comments .brz-comments__reply *{font-size:inherit}
1621
- .brz .brz-comments li.brz-comments .brz-comments__reply .comment-reply-link{background-color:transparent;padding:0}
1622
- .brz .brz-comments li.brz-comments .brz-comments__text p{margin:0}
1623
- .brz .brz-comments li.brz-comments .brz-comment-awaiting-moderation,.brz .brz-comments li.brz-comments .brz-comments__text{width:100%;margin-bottom:40px;position:relative}
1624
- .brz .brz-comments li.brz-comments .brz-comment-awaiting-moderation::before,.brz .brz-comments li.brz-comments .brz-comments__text::before{content:"";position:absolute;left:0;bottom:0;height:1px;background-color:rgba(129,138,145,.15);display:block}
1625
- .brz .brz-comments li.brz-comments .brz-comment-awaiting-moderation *,.brz .brz-comments li.brz-comments .brz-comments__text *{margin:10px 0;color:inherit;font-family:inherit;font-size:inherit}
1626
- .brz .brz-comments li.brz-comments .brz-comment-awaiting-moderation a,.brz .brz-comments li.brz-comments .brz-comments__text a{color:#3dbfe8}
1627
- .brz .brz-comments li.brz-comments .brz-comments__text{padding-bottom:30px}
1628
- .brz .brz-comments li.brz-comments .brz-comment-awaiting-moderation{padding-bottom:40px}
1629
- .brz .brz-comments-title{margin:0 0 59px 0;color:#03080f;font-size:23px;letter-spacing:-.12px;color:#03080f}
1630
- .brz .brz-comments-title::before{display:none}
1631
- .brz .brz-comments__skin-skin1 .brz-comments__logo .brz-img{border-radius:50%;-o-object-fit:cover;object-fit:cover}
1632
- .brz .brz-comments__skin-skin1 .brz-comments__right-date{margin-top:-2px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}
1633
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__name{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}
1634
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__date{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;margin-left:auto;padding-right:10px;text-align:right}
1635
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__date * .brz-span{position:relative;right:-2px}
1636
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__reply{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;padding-left:10px;position:relative}
1637
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__reply::before{content:"";width:1px;position:absolute;left:0;top:0;bottom:0;background-color:#818a91;display:block;margin:auto}
1638
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comment-awaiting-moderation{margin-top:7px!important}
1639
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comment-awaiting-moderation,.brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__text{width:100%;margin-top:3px}
1640
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comment-awaiting-moderation::before,.brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__text::before{width:52%}
1641
- .brz .brz-comments__skin-skin2 .brz-comments__logo-img{width:67px;height:67px;border-radius:50%;-o-object-fit:cover;object-fit:cover}
1642
- .brz .brz-comments__skin-skin2 .brz-comments__right-date{margin-top:8px;margin-bottom:33px;padding-bottom:45px;width:calc(100% - 97px);display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}
1643
- .brz .brz-comments__skin-skin2 .brz-comments__right-date::before{content:"";width:100%;height:2px;background-color:rgba(129,138,145,.15);position:absolute;bottom:0;left:0}
1644
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-negative:0;flex-shrink:0}
1645
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date .brz-comments__name{margin-bottom:6px}
1646
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date .brz-comments__date{width:100%}
1647
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date .brz-comments__date *{width:75px;text-align:right;margin:auto}
1648
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date .brz-comments__date * .brz-span{position:relative;right:-2px}
1649
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comment-awaiting-moderation,.brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__text{margin-bottom:0!important;padding-left:20px;padding-bottom:0!important}
1650
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__text{margin-top:-2px;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}
1651
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comment-awaiting-moderation{margin-top:-2px}
1652
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__reply{padding-left:30px;margin-top:1px;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}
1653
- .brz .brz-comments__skin-skin3 .brz-comments__logo{margin-right:25px}
1654
- .brz .brz-comments__skin-skin3 .brz-comments__logo .brz-img{border-radius:50%;-o-object-fit:cover;object-fit:cover}
1655
- .brz .brz-comments__skin-skin3 .brz-comments__right-date{width:calc(100% - 48.5px);margin-top:4px;margin-bottom:15px;padding-bottom:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}
1656
- .brz .brz-comments__skin-skin3 .brz-comments__right-date::before{content:"";width:100%;height:1px;background-color:rgba(129,138,145,.15);position:absolute;bottom:0;left:0}
1657
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__name{padding-right:10px}
1658
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__date{padding-left:10px;position:relative}
1659
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__date::before{content:"";height:14px;width:1px;background-color:#818a91;position:absolute;top:0;bottom:0;left:0;margin:auto;display:block}
1660
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comment-awaiting-moderation,.brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__text{width:100%}
1661
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comment-awaiting-moderation .comment-reply-link,.brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__text .comment-reply-link{font-family:inherit;font-size:inherit}
1662
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comment-awaiting-moderation *,.brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__text *{display:contents}
1663
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comments__text{margin:0!important;padding-bottom:0!important}
1664
- .brz .brz-comments__skin-skin3 .brz-comments__right-date .brz-comment-awaiting-moderation{margin:10px 0 0 0!important;padding-bottom:10px!important}
1665
- .brz .brz-comments__skin-skin4 .brz-comments__right-date{width:100%!important;padding-bottom:20px;margin-bottom:25px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:relative}
1666
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comments__name-date{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:9px}
1667
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comments__name-date .brz-comments__name{margin-bottom:5px}
1668
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comments__logo .brz-img{border-radius:50%;-o-object-fit:cover;object-fit:cover}
1669
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comment-awaiting-moderation,.brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comments__text{width:100%}
1670
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comment-awaiting-moderation *,.brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comments__text *{display:contents}
1671
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comments__text{margin:0!important;padding:0!important}
1672
- .brz .brz-comments__skin-skin4 .brz-comments__right-date .brz-comment-awaiting-moderation{margin:10px 0 0 0!important;padding-bottom:10px!important}
1673
- .brz .brz-comments__skin-skin4 .brz-comments__right-date::before{content:"";height:1px;width:28%;background-color:rgba(129,138,145,.15);position:absolute;left:0;bottom:0}
1674
- .brz .brz-comments__skin-skin1 .brz-comments__logo,.brz .brz-comments__skin-skin2 .brz-comments__logo{margin-right:10px}
1675
- .brz .brz-comments__skin-skin1 .brz-comments__logo .brz-img,.brz .brz-comments__skin-skin2 .brz-comments__logo .brz-img,.brz .brz-comments__skin-skin3 .brz-comments__logo .brz-img,.brz .brz-comments__skin-skin4 .brz-comments__logo .brz-img{position:static!important;margin:0!important}
1676
- .brz .brz-logged-in-as{margin:0;color:#818a91;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:15px;line-height:28px}
1677
- .brz .comment-notes{margin-top:0;margin-bottom:15px;color:#818a91;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:15px;line-height:28px}
1678
- .brz .brz-comment-respond{margin-bottom:20px}
1679
- .brz .brz-comment-respond .brz-comment-reply-title{margin-top:11px;margin-bottom:12px;color:#03080f;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:20px;font-weight:600;letter-spacing:-.1px;line-height:24px}
1680
- .brz .brz-comment-respond .brz-comment-reply-title #cancel-comment-reply-link{padding-left:5px;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:14px}
1681
- .brz .brz-comment-respond textarea[name=comment]{height:160px;border:1px solid #d4d4d4;border-radius:3px;resize:none;outline:0}
1682
- .brz .brz-comment-respond input[name=submit]{border:0;border-radius:3px;padding:1em 2em}
1683
- .brz .brz-comment-form-comment{width:100%;color:#03080f;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:20px;font-weight:600;letter-spacing:-.1px;line-height:24px}
1684
- .brz .brz-comment-form-comment label{margin-bottom:19px;display:block}
1685
- .brz .brz-form-submit{width:100%}
1686
- .brz ul.brz-comments ul.brz-comments{width:80%;margin-left:auto}
1687
- .brz .brz-comment-form-author,.brz .brz-comment-form-email,.brz .brz-comment-form-url{width:32%;margin-top:5px;margin-bottom:7px;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:20px;font-weight:600;letter-spacing:-.1px;line-height:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}
1688
- .brz .brz-comment-form-author .required,.brz .brz-comment-form-email .required,.brz .brz-comment-form-url .required{font-size:18px;margin-left:5px}
1689
- .brz .brz-comment-form-author input[type=text],.brz .brz-comment-form-email input[type=text],.brz .brz-comment-form-url input[type=text]{outline:0;border:1px solid #d4d4d4;border-radius:3px;margin-top:18px;font-size:17px}
1690
- .brz .brz-comment-form-author input[type=text]:focus,.brz .brz-comment-form-email input[type=text]:focus,.brz .brz-comment-form-url input[type=text]:focus{border:1px solid #d4d4d4}
1691
- .brz .comment-form-cookies-consent{width:100%;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
1692
- .brz .comment-form-cookies-consent input[type=checkbox]{height:18px;width:18px;border:1px solid #d4d4d4;border-radius:3px;margin-right:15px;-ms-flex-negative:0;flex-shrink:0}
1693
- .brz .comment-form-cookies-consent label{color:#818a91;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:15px;line-height:20px}
1694
- .brz .brz--comment__form-reply-body{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}
1695
- .brz .brz-form-submit{margin-bottom:0}
1696
- @media only screen and (max-width:768px){.brz .brz-comment-awaiting-moderation{padding-bottom:20px}
1697
- .brz .brz-comments li.brz-comments .brz-comments__text{padding-bottom:10px}
1698
- .brz .brz-comments li.brz-comments .brz-comment-awaiting-moderation{padding-bottom:20px}
1699
- .brz .brz-comments__skin-skin1 .brz-comments__right-date{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}
1700
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__name{width:100%}
1701
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__date{margin-left:0}
1702
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comments__date * .brz-span{display:inline}
1703
- .brz .brz-comments__skin-skin1 .brz-comments__right-date .brz-comment-awaiting-moderation{margin-top:15px!important}
1704
- .brz .brz-comments__skin-skin2 .brz-comments__right-date{-ms-flex-wrap:wrap;flex-wrap:wrap}
1705
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date .brz-comments__date *{width:auto}
1706
- .brz .brz-comments__skin-skin2 .brz-comments__right-date .brz-comments__name-date .brz-comments__date * .brz-span{position:static;display:inline}
1707
- .brz .brz-comments__skin-skin2 .brz-comment-awaiting-moderation,.brz .brz-comments__skin-skin2 .brz-comments__text{width:calc(100% - 65px)!important;padding:40px 0 0 0!important}}@media only screen and (max-width:480px){.brz .brz-comment-form-author,.brz .brz-comment-form-email,.brz .brz-comment-form-url{width:100%}}.brz .brz-image{position:relative;display:inherit;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%;overflow:hidden}
1708
- .brz .brz-image .brz-img{max-width:100%;border-radius:inherit}
1709
- .brz .brz-image .brz-a,.brz .brz-image .brz-picture{outline:0;border-radius:inherit}
1710
- .brz:not(.brz-ed) .brz-image .brz-a,.brz:not(.brz-ed) .brz-image .brz-img,.brz:not(.brz-ed) .brz-image .brz-picture{width:100%;height:auto}
1711
- .brz:not(.brz-ed) .brz-image .brz-img{top:0;left:0;height:100%}
1712
- .brz:not(.brz-ed) .brz-image__lightbox *{cursor:-webkit-zoom-in;cursor:zoom-in}
1713
- .brz:not(.brz-ed) .brz-image:after{content:"";width:100%;height:100%;position:absolute;pointer-events:none;top:0;left:0;border-radius:inherit}
1714
- .brz .mfp-bg{z-index:1100}
1715
- .brz .mfp-wrap{z-index:1101}
1716
- .brz .mfp-figure:after,.brz .mfp-iframe-scaler iframe{-webkit-box-shadow:0 0 40px rgba(0,0,0,.35);box-shadow:0 0 40px rgba(0,0,0,.35)}
1717
- .brz .brz-menu-simple .menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 auto;padding:0}
1718
- .brz .brz-menu-simple .menu .menu-item{position:relative;text-align:left;list-style:none}
1719
- .brz .brz-menu-simple .menu .menu-item a span{display:block}
1720
- .brz .brz-menu-simple .menu .menu-item:hover>.sub-menu{display:block}
1721
- .brz .brz-menu-simple .menu .sub-menu{position:absolute;top:0;left:0;padding:15px 0;text-align:center;text-transform:none;list-style:none;margin:0!important;display:none;width:280px;background-color:#33344b;z-index:110}
1722
- .brz .brz-menu-simple .menu .sub-menu .menu-item{display:block;margin:0;padding:0}
1723
- .brz .brz-menu-simple .menu .sub-menu .sub-menu{left:100%}
1724
- .brz .brz-menu-simple .menu .sub-menu a{display:block;line-height:1.2em;padding:10px 12%;color:#fcfcfc}
1725
- .brz .brz-menu-simple .menu .sub-menu a:hover{background:rgba(36,36,53,.94)}
1726
- .brz .brz-menu-simple .menu>.menu-item{display:inline-block;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;padding-top:5px;padding-bottom:5px}
1727
- .brz .brz-menu-simple .menu>.menu-item>.sub-menu{top:100%}
1728
- .brz .brz-menu-simple .menu>ul{margin:0!important}
1729
- .brz .brz-menu-simple .menu>ul .page_item:not(:first-child){margin-left:15px}
1730
- .brz .brz-menu-simple__toggle .menu{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}
1731
- .brz .brz-menu-simple__icon{display:none;padding:15px;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:0}
1732
- .brz .brz-menu-simple__icon--bars{display:block;height:2px;position:relative;-webkit-transition:background .2s ease-out;transition:background .2s ease-out;width:18px}
1733
- .brz .brz-menu-simple__icon--bars:after,.brz .brz-menu-simple__icon--bars:before{background-color:currentColor;content:"";display:block;height:100%;position:absolute;-webkit-transition:all .2s ease-out;transition:all .2s ease-out;width:100%}
1734
- .brz .brz-menu-simple__icon--bars:before{top:5px}
1735
- .brz .brz-menu-simple__icon--bars:after{top:-5px}
1736
- .brz .brz-menu-simple .brz-input{display:none}
1737
- .brz .brz-menu-simple .brz-input:checked~div .menu{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:100%}
1738
- .brz .brz-menu-simple .brz-input:checked~.brz-menu-simple__icon .brz-menu-simple__icon--bars{background:0 0}
1739
- .brz .brz-menu-simple .brz-input:checked~.brz-menu-simple__icon .brz-menu-simple__icon--bars:before{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}
1740
- .brz .brz-menu-simple .brz-input:checked~.brz-menu-simple__icon .brz-menu-simple__icon--bars:after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}
1741
- .brz .brz-menu-simple .brz-input:checked~.brz-menu-simple__icon:not(.steps) .brz-menu-simple__icon--bars:after,.brz .brz-menu-simple .brz-input:checked~.brz-menu-simple__icon:not(.steps) .brz-menu-simple__icon--bars:before{top:0}
1742
- .brz .brz-menu-simple--cloud a{text-decoration:none}
1743
- @media (max-width:767px){.brz:not(.brz-ed) .brz-menu-simple{width:auto;text-align:center}
1744
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;max-height:0;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-transition:max-height .2s ease-out;transition:max-height .2s ease-out}
1745
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu .sub-menu{position:relative;display:block;width:100%;left:15px;padding:0;background-color:transparent}
1746
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu .sub-menu .menu-item a{padding:5px}
1747
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu .sub-menu .menu-item a:hover{background-color:transparent}
1748
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu .sub-menu .sub-menu{display:block;left:15px}
1749
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu>.menu-item{padding:0}
1750
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .menu>.menu-item>.sub-menu{top:100%;padding:5px 0}
1751
- .brz:not(.brz-ed) .brz-menu-simple__toggle--mobile .brz-menu-simple__icon{display:inline-block}}@media (min-width:768px) and (max-width:991px){.brz:not(.brz-ed) .brz-menu-simple{width:auto;text-align:center}
1752
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;max-height:0;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-transition:max-height .2s ease-out;transition:max-height .2s ease-out}
1753
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu .sub-menu{position:relative;display:block;width:100%;left:15px;padding:0;background-color:transparent}
1754
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu .sub-menu .menu-item a{padding:5px}
1755
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu .sub-menu .menu-item a:hover{background-color:transparent}
1756
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu .sub-menu .sub-menu{display:block;left:15px}
1757
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu>.menu-item{padding:0}
1758
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .menu>.menu-item>.sub-menu{top:100%;padding:5px 0}
1759
- .brz:not(.brz-ed) .brz-menu-simple__toggle--tablet .brz-menu-simple__icon{display:inline-block}}.brz .screen-reader-text{display:none}
1760
- .brz .media-modal *{-webkit-box-sizing:content-box;box-sizing:content-box}
1761
- .brz .media-modal input,.brz .media-modal select,.brz .media-modal textarea{-webkit-box-sizing:border-box;box-sizing:border-box}
1762
- .brz .media-frame,.brz .media-modal{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;outline:0;-webkit-overflow-scrolling:touch}
1763
- .brz .media-frame h1,.brz .media-frame h2,.brz .media-frame h3,.brz .media-frame h4,.brz .media-frame h5,.brz .media-frame h6,.brz .media-frame p,.brz .media-modal h1,.brz .media-modal h2,.brz .media-modal h3,.brz .media-modal h4,.brz .media-modal h5,.brz .media-modal h6,.brz .media-modal p{letter-spacing:0;line-height:normal}
1764
- .brz .media-modal label,.brz .media-modal legend{font-size:13px;text-transform:capitalize;line-height:1.4em;color:#666;font-weight:400}
1765
- .brz .media-frame input,.brz .media-frame textarea{padding:6px 8px}
1766
- .brz .media-frame select,.brz .wp-admin .media-frame select{line-height:28px;margin-top:3px}
1767
- .brz .media-frame a{border-bottom:none;color:#0073aa}
1768
- .brz .media-frame a:active,.brz .media-frame a:hover{color:#00a0d2}
1769
- .brz .media-frame a:focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:0;color:#124964}
1770
- .brz .media-frame a.button{color:#32373c}
1771
- .brz .media-frame a.button:hover{color:#23282d}
1772
- .brz .media-frame a.button-primary,.brz .media-frame a.button-primary:hover{color:#fff}
1773
- .brz .media-frame input[type=email],.brz .media-frame input[type=number],.brz .media-frame input[type=password],.brz .media-frame input[type=search],.brz .media-frame input[type=text],.brz .media-frame input[type=url],.brz .media-frame select,.brz .media-frame textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:normal;font-weight:400;font-style:normal;border:1px solid #ddd;background-color:#fff;min-height:25px;height:auto;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);color:#32373c;outline:0;-webkit-transition:50ms border-color ease-in-out;transition:50ms border-color ease-in-out;letter-spacing:normal}
1774
- .brz .media-frame input[type=email]:focus,.brz .media-frame input[type=number]:focus,.brz .media-frame input[type=password]:focus,.brz .media-frame input[type=search]:focus,.brz .media-frame input[type=text]:focus,.brz .media-frame input[type=url]:focus,.brz .media-frame select:focus,.brz .media-frame textarea:focus{border-color:#5b9dd9}
1775
- .brz .media-frame select{height:24px;padding:2px}
1776
- .brz .media-frame input:disabled,.brz .media-frame input[readonly],.brz .media-frame textarea:disabled,.brz .media-frame textarea[readonly]{background-color:#eee}
1777
- .brz .media-frame input[type=search]{-webkit-appearance:textfield}
1778
- .brz .media-frame ::-webkit-input-placeholder{color:#72777c}
1779
- .brz .media-frame ::-moz-placeholder{color:#72777c;opacity:1}
1780
- .brz .media-frame :-ms-input-placeholder{color:#72777c}
1781
- .brz .media-frame .hidden{display:none}
1782
- .brz .media-frame button{color:inherit;text-shadow:none!important;line-height:normal!important;letter-spacing:normal;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:400;font-style:normal;text-transform:capitalize;margin:0}
1783
- .brz .media-frame button.delete-attachment{height:auto;font-size:12px;line-height:1}
1784
- .brz .media-frame button.media-button-select{color:#fff;margin-top:15px;font-size:13px;line-height:26px;height:28px}
1785
- .brz .media-frame button.browser{color:#555!important;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc}
1786
- .brz .media-frame button.browser:hover{background:#fafafa;border-color:#999;color:#23282d!important}
1787
- .brz .media-attachments-filter-heading:before{display:none}
1788
- .brz .media-modal .media-frame-title h1:before{display:none}
1789
- .brz .media-modal{position:fixed;top:30px;left:78px;right:30px;bottom:60px;z-index:160000}
1790
- .brz .media-frame-title h1{padding:0 16px;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:22px;font-weight:600;font-style:normal;line-height:50px;color:#23282d;text-shadow:none;text-transform:capitalize}
1791
- .brz .media-modal-close{position:absolute;top:0;right:0;width:50px;height:50px;margin:0;padding:0;border:1px solid transparent;background:0 0;color:#666;z-index:1000;cursor:pointer;outline:0;text-align:center;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}
1792
- .brz .media-modal-close:active,.brz .media-modal-close:hover{color:#00a0d2}
1793
- .brz .media-modal-close:focus{color:#00a0d2;border-color:#5b9dd9;-webkit-box-shadow:0 0 3px rgba(0,115,170,.8);box-shadow:0 0 3px rgba(0,115,170,.8)}
1794
- .brz .media-modal-close span.media-modal-icon{background-image:none}
1795
- .brz .media-modal-close .media-modal-icon:before{content:"\f158";font:normal 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
1796
- .brz .media-router>a{position:relative;float:left;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;font-weight:400;color:#0073aa;text-transform:capitalize;text-align:left;text-shadow:none}
1797
- .brz .media-router>a:hover{color:#00a0d2}
1798
- .brz .media-router>a:last-child{border-right:0}
1799
- .brz .media-router>a:active{outline:0}
1800
- .brz .media-router .active,.brz .media-router .active:hover{color:#32373c}
1801
- .brz .media-router .active,.brz .media-router>a.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:none}
1802
- .brz .media-frame .search{padding:4px;font-size:13px;border-radius:0;line-height:normal;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}
1803
- .brz .media-toolbar-primary .search{max-width:100%}
1804
- .brz .media-modal-content .media-frame select.attachment-filters{margin-top:32px;margin-right:2%;width:calc(48% - 12px);padding:2px;line-height:28px;height:28px}
1805
- .brz .thumbnail{display:block;padding:0;margin-bottom:0;line-height:normal;background-color:transparent;border:0;border-radius:0}
1806
- .brz .uploader-inline h2,.brz .uploader-inline h3{font-size:20px;line-height:28px;font-weight:400;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-style:normal;letter-spacing:0;color:#23282d}
1807
- .brz .uploader-inline .has-upload-message .upload-instructions{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;color:#444;font-weight:400}
1808
- .brz .uploader-inline p{font-size:12px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin:.5em 0}
1809
- .brz .media-sidebar .sidebar-title{font-size:20px;margin:0;padding:12px 10px 10px;line-height:28px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}
1810
- .brz .image-details h2,.brz .image-details h3,.brz .media-sidebar h2,.brz .media-sidebar h3{position:relative;font-weight:600;text-transform:uppercase;font-size:12px;line-height:1.4em;color:#666;margin:24px 0 8px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;letter-spacing:normal;font-style:normal;text-shadow:none}
1811
- .brz .attachment-details .setting label,.brz .media-sidebar .setting label{display:block;text-transform:capitalize;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;letter-spacing:normal;font-style:normal;text-shadow:none}
1812
- .brz .attachment-details .setting span,.brz .media-sidebar .setting span{min-width:30%;margin-right:4%;font-size:12px;color:#666;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;letter-spacing:normal;font-style:normal;text-shadow:none;text-align:right;word-wrap:break-word}
1813
- .brz .media-sidebar .setting .name{max-width:80px}
1814
- .brz .attachment-details .setting select,.brz .media-sidebar .setting select{max-width:65%}
1815
- .brz .attachment-details .field input[type=checkbox],.brz .attachment-details .field input[type=radio],.brz .attachment-details .setting input[type=checkbox],.brz .attachment-details .setting input[type=radio],.brz .media-sidebar .field input[type=checkbox],.brz .media-sidebar .field input[type=radio],.brz .media-sidebar .setting input[type=checkbox],.brz .media-sidebar .setting input[type=radio]{float:none;margin:8px 3px 0;padding:0}
1816
- .brz .attachment-details .setting span,.brz .compat-item label span,.brz .media-sidebar .setting span{float:left;min-height:22px;padding-top:8px;line-height:16px;font-weight:400;color:#666}
1817
- .brz .compat-item label span{text-align:right}
1818
- .brz .attachment-details .setting .value,.brz .attachment-details .setting input[type=email],.brz .attachment-details .setting input[type=number],.brz .attachment-details .setting input[type=password],.brz .attachment-details .setting input[type=search],.brz .attachment-details .setting input[type=tel],.brz .attachment-details .setting input[type=text],.brz .attachment-details .setting input[type=url],.brz .attachment-details .setting textarea,.brz .media-sidebar .setting .value,.brz .media-sidebar .setting input[type=email],.brz .media-sidebar .setting input[type=number],.brz .media-sidebar .setting input[type=password],.brz .media-sidebar .setting input[type=search],.brz .media-sidebar .setting input[type=tel],.brz .media-sidebar .setting input[type=text],.brz .media-sidebar .setting input[type=url],.brz .media-sidebar .setting textarea{-webkit-box-sizing:border-box;box-sizing:border-box;margin:1px;width:65%;float:right;border-radius:0}
1819
- .brz .attachment-details .setting .value,.brz .media-sidebar .setting .value{margin:0 1px;text-align:left}
1820
- .brz .attachment-details .setting textarea,.brz .compat-item .field textarea,.brz .media-sidebar .setting textarea{height:62px;resize:vertical}
1821
- .brz .attachment-details select,.brz .media-sidebar select{margin-top:3px}
1822
- .brz .media-frame-title .suggested-dimensions{font-size:14px;float:right;margin-right:20px}
1823
- .brz .media-frame select.attachment-filters{margin-top:11px;margin-right:2%;max-width:calc(48% - 12px)}
1824
- .brz .media-frame select.attachment-filters:last-of-type{margin-right:0}
1825
- .brz .wp-core-ui .attachment{position:relative;float:left;padding:8px;margin:0;color:#444;cursor:pointer;list-style:none;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:25%;-webkit-box-sizing:border-box;box-sizing:border-box}
1826
- .brz .wp-core-ui .attachment.details:focus,.brz .wp-core-ui .attachment:focus,.brz .wp-core-ui .selected.attachment:focus{-webkit-box-shadow:inset 0 0 2px 3px #fff,inset 0 0 0 7px #5b9dd9;box-shadow:inset 0 0 2px 3px #fff,inset 0 0 0 7px #5b9dd9;outline:0}
1827
- .brz .wp-core-ui .selected.attachment{-webkit-box-shadow:inset 0 0 0 5px #fff,inset 0 0 0 7px #ccc;box-shadow:inset 0 0 0 5px #fff,inset 0 0 0 7px #ccc}
1828
- .brz .wp-core-ui .attachment.details{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #0073aa;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #0073aa}
1829
- .brz .wp-core-ui .attachment-preview{position:relative;-webkit-box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#eee;cursor:pointer}
1830
- .brz .wp-core-ui .attachment-preview:before{content:"";display:block;padding-top:100%}
1831
- .brz .wp-core-ui .attachment .icon{margin:0 auto;overflow:hidden}
1832
- .brz .wp-core-ui .attachment .thumbnail{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;opacity:1;-webkit-transition:opacity .1s;transition:opacity .1s}
1833
- .brz .wp-core-ui .attachment .portrait img{max-width:100%}
1834
- .brz .wp-core-ui .attachment .landscape img{max-height:100%}
1835
- .brz .wp-core-ui .attachment .thumbnail:after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}
1836
- .brz .wp-core-ui .attachment .thumbnail img{top:0;left:0}
1837
- .brz .wp-core-ui .attachment .thumbnail .centered{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}
1838
- .brz .wp-core-ui .attachment .thumbnail .centered img{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
1839
- .brz .wp-core-ui .attachments-browser .attachment .thumbnail .centered img.icon{-webkit-transform:translate(-50%,-70%);transform:translate(-50%,-70%)}
1840
- .brz .ie8 .wp-core-ui .attachment img.icon{top:20%;position:relative}
1841
- .brz .wp-core-ui .attachment .filename{position:absolute;left:0;right:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:600;background:rgba(255,255,255,.8);-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}
1842
- .brz .wp-core-ui .attachment .filename div{padding:5px 10px}
1843
- .brz .wp-core-ui .attachment .thumbnail img{position:absolute}
1844
- .brz .wp-core-ui .attachment-close{display:block;position:absolute;top:5px;right:5px;height:22px;width:22px;padding:0;background-color:#fff;background-position:-96px 4px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3);box-shadow:0 0 0 1px rgba(0,0,0,.3);-webkit-transition:none;transition:none}
1845
- .brz .wp-core-ui .attachment-close:focus,.brz .wp-core-ui .attachment-close:hover{background-position:-36px 4px}
1846
- .brz .wp-core-ui .attachment .check{display:none;height:24px;width:24px;padding:0;border:0;position:absolute;z-index:10;top:0;right:0;outline:0;background:#eee;cursor:pointer;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.15);box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.15)}
1847
- .brz .wp-core-ui .attachment .check .media-modal-icon{display:block;background-position:-1px 0;height:15px;width:15px;margin:5px}
1848
- .brz .wp-core-ui .attachment .check:hover .media-modal-icon{background-position:-40px 0}
1849
- .brz .wp-core-ui .attachment.selected .check{display:block}
1850
- .brz .wp-core-ui .attachment.details .check,.brz .wp-core-ui .attachment.selected .check:focus,.brz .wp-core-ui .media-frame.mode-grid .attachment.selected .check{background-color:#0073aa;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #0073aa;box-shadow:0 0 0 1px #fff,0 0 0 2px #0073aa}
1851
- .brz .wp-core-ui .attachment.details .check .media-modal-icon,.brz .wp-core-ui .media-frame.mode-grid .attachment.selected .check .media-modal-icon{background-position:-21px 0}
1852
- .brz .wp-core-ui .attachment.details .check:hover .media-modal-icon,.brz .wp-core-ui .attachment.selected .check:focus .media-modal-icon,.brz .wp-core-ui .media-frame.mode-grid .attachment.selected .check:hover .media-modal-icon{background-position:-60px 0}
1853
- .brz .wp-core-ui .media-frame .attachment .describe{position:relative;display:block;width:100%;margin:0;padding:8px;font-size:12px;border-radius:0}
1854
- .brz .media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}
1855
- .brz .attachments-browser .media-toolbar{right:300px;height:72px}
1856
- .brz .attachments-browser.hide-sidebar .media-toolbar{right:0}
1857
- .brz .attachments-browser .media-toolbar-primary>.media-button,.brz .attachments-browser .media-toolbar-primary>.media-button-group,.brz .attachments-browser .media-toolbar-secondary>.media-button,.brz .attachments-browser .media-toolbar-secondary>.media-button-group{margin:11px 0}
1858
- .brz .attachments-browser .attachments{padding:2px 8px 8px}
1859
- .brz .attachments-browser .attachments,.brz .attachments-browser .uploader-inline{position:absolute;top:72px;left:0;right:300px;bottom:0;overflow:auto;outline:0}
1860
- .brz .attachments-browser .uploader-inline.hidden{display:none}
1861
- .brz .attachments-browser .media-toolbar-primary{max-width:33%}
1862
- .brz .attachments-browser .media-toolbar-secondary{max-width:66%}
1863
- .brz .uploader-inline .close{background-color:transparent;border:0;cursor:pointer;height:48px;outline:0;padding:0;position:absolute;right:2px;text-align:center;top:2px;width:48px;z-index:1}
1864
- .brz .uploader-inline .close:before{font:normal 30px/1 dashicons!important;color:#555d66;display:inline-block;content:"\f335";font-weight:300;margin-top:1px}
1865
- .brz .uploader-inline .close:focus{outline:1px solid #5b9dd9;-webkit-box-shadow:0 0 3px rgba(0,115,170,.8);box-shadow:0 0 3px rgba(0,115,170,.8)}
1866
- .brz .attachments-browser.hide-sidebar .attachments,.brz .attachments-browser.hide-sidebar .uploader-inline{right:0;margin-right:0}
1867
- .brz .attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:18px;font-size:13px;color:#666;margin-right:.5em}
1868
- .brz .attachments-browser .no-media{padding:2em 0 0 2em}
1869
- .brz .media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;border-radius:10px;background:#ddd;background:rgba(0,0,0,.1)}
1870
- .brz .media-progress-bar div{height:10px;min-width:20px;width:0;background:#0073aa;border-radius:10px;-webkit-transition:width .3s;transition:width .3s}
1871
- .brz .media-uploader-status .media-progress-bar{display:none;width:100%}
1872
- .brz .uploading.media-uploader-status .media-progress-bar{display:block}
1873
- .brz .attachment-preview .media-progress-bar{position:absolute;top:50%;left:15%;width:70%;margin:-5px 0 0 0}
1874
- .brz .media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}
1875
- .brz .uploader-inline .media-uploader-status h2,.brz .uploader-inline .media-uploader-status h3{display:none}
1876
- .brz .media-uploader-status .upload-details{display:none;font-size:12px;color:#666}
1877
- .brz .uploading.media-uploader-status .upload-details{display:block}
1878
- .brz .media-uploader-status .upload-detail-separator{padding:0 4px}
1879
- .brz .media-uploader-status .upload-count{color:#444}
1880
- .brz .media-uploader-status .upload-dismiss-errors,.brz .media-uploader-status .upload-errors{display:none}
1881
- .brz .errors.media-uploader-status .upload-dismiss-errors,.brz .errors.media-uploader-status .upload-errors{display:block}
1882
- .brz .media-uploader-status .upload-dismiss-errors{text-decoration:none}
1883
- .brz .media-sidebar .media-uploader-status .upload-dismiss-errors{position:absolute;top:-10px;right:-10px;padding:10px;-webkit-transition:none;transition:none}
1884
- .brz .media-sidebar .media-uploader-status .upload-dismiss-errors:before{content:"\f153";display:block;font:normal 16px/1 dashicons;color:#72777c}
1885
- .brz .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,.brz .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before{color:#c00}
1886
- .brz .upload-errors .upload-error{padding:12px;margin-bottom:12px;background:#fff;border-left:4px solid #dc3232;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}
1887
- .brz .uploader-inline .upload-errors .upload-error{background-color:#fbeaea;-webkit-box-shadow:none;box-shadow:none}
1888
- .brz .upload-errors .upload-error-filename{font-weight:600}
1889
- .brz .upload-errors .upload-error-message{display:block;padding-top:8px;word-wrap:break-word}
1890
- .brz .uploader-window{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,86,132,.9);z-index:250000;display:none;text-align:center;opacity:0;-webkit-transition:opacity 250ms;transition:opacity 250ms}
1891
- .brz .uploader-window-content{position:absolute;top:10px;left:10px;right:10px;bottom:10px;border:1px dashed #fff}
1892
- .brz .uploader-window h1,.brz .uploader-window h3{margin:-.5em 0 0;position:absolute;top:50%;left:0;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:40px;color:#fff;padding:0}
1893
- .brz .uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:0 0;border-color:#fff;display:none}
1894
- .brz .uploader-window .media-progress-bar div{background:#fff}
1895
- .brz .uploading .uploader-window .media-progress-bar{display:block}
1896
- .brz .media-frame .uploader-inline{margin-bottom:20px;padding:0;text-align:center}
1897
- .brz .uploader-inline-content{position:absolute;top:30%;left:0;right:0}
1898
- .brz .uploader-inline-content .upload-ui{margin:2em 0}
1899
- .brz .uploader-inline-content .post-upload-ui{margin-bottom:2em}
1900
- .brz .uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}
1901
- .brz .uploader-inline h2,.brz .uploader-inline h3{font-size:20px;line-height:28px;font-weight:400;margin:0}
1902
- .brz .uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#444;font-weight:400}
1903
- .brz .uploader-inline .drop-instructions{display:none}
1904
- .brz .supports-drag-drop .uploader-inline .drop-instructions{display:block}
1905
- .brz .supports-drag-drop .uploader-inline .drop-instructions:before{display:none}
1906
- .brz .uploader-inline p{font-size:12px;margin:.5em 0}
1907
- .brz .uploader-inline .media-progress-bar{display:none}
1908
- .brz .uploading.uploader-inline .media-progress-bar{display:block}
1909
- .brz .uploader-inline .browser{display:inline-block!important}
1910
- .brz .media-selection{position:absolute;top:0;left:0;right:350px;height:60px;padding:0 0 0 16px;overflow:hidden;white-space:nowrap}
1911
- .brz .media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-right:10px;vertical-align:top}
1912
- .brz .media-selection.editing,.brz .media-selection.empty{display:none}
1913
- .brz .media-selection.one .edit-selection{display:none}
1914
- .brz .media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:20px;font-weight:600}
1915
- .brz .media-selection .button-link{float:left;padding:1px 8px;margin:1px 8px 1px -8px;line-height:16px;border-right:1px solid #ddd;color:#0073aa;text-decoration:none}
1916
- .brz .media-selection .button-link:focus,.brz .media-selection .button-link:hover{color:#00a0d2}
1917
- .brz .media-selection .button-link:last-child{border-right:0;margin-right:0}
1918
- .brz .selection-info .clear-selection{color:#bc0b0b}
1919
- .brz .selection-info .clear-selection:focus,.brz .selection-info .clear-selection:hover{color:#dc3232}
1920
- .brz .media-selection .selection-view{display:inline-block;vertical-align:top}
1921
- .brz .media-selection .attachments{display:inline-block;height:48px;margin:6px;padding:0;overflow:hidden;vertical-align:top}
1922
- .brz .media-selection .attachment{width:40px;padding:0;margin:4px}
1923
- .brz .media-selection .attachment .thumbnail{top:0;right:0;bottom:0;left:0}
1924
- .brz .media-selection .attachment .icon{width:50%}
1925
- .brz .media-selection .attachment-preview{-webkit-box-shadow:none;box-shadow:none;background:0 0}
1926
- .brz .wp-core-ui .media-selection .attachment.details:focus,.brz .wp-core-ui .media-selection .attachment:focus,.brz .wp-core-ui .media-selection .selected.attachment:focus{-webkit-box-shadow:0 0 0 1px #fff,0 0 2px 3px #5b9dd9;box-shadow:0 0 0 1px #fff,0 0 2px 3px #5b9dd9}
1927
- .brz .wp-core-ui .media-selection .selected.attachment{-webkit-box-shadow:none;box-shadow:none}
1928
- .brz .wp-core-ui .media-selection .attachment.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #0073aa;box-shadow:0 0 0 1px #fff,0 0 0 3px #0073aa}
1929
- .brz .media-selection:after{content:"";display:block;position:absolute;top:0;right:0;bottom:0;width:25px;background-image:-webkit-gradient(linear,right top,left top,from(white),to(rgba(255,255,255,0)));background-image:linear-gradient(to left,#fff,rgba(255,255,255,0))}
1930
- .brz .media-selection .attachment .filename{display:none}
1931
- .brz .media-frame .spinner{background-size:20px 20px;float:right;display:inline-block;visibility:hidden;opacity:.7;width:20px;height:20px;margin:0;vertical-align:middle}
1932
- .brz .media-frame .spinner.is-active{visibility:visible}
1933
- .brz .media-toolbar .spinner{margin-top:14px}
1934
- .brz .attachment-details{position:relative;overflow:auto}
1935
- .brz .attachment-details .settings-save-status{float:right;text-transform:none;z-index:10}
1936
- .brz .attachment-details .settings-save-status .spinner{margin-left:5px}
1937
- .brz .attachment-details .settings-save-status .saved{float:right;display:none}
1938
- .brz .attachment-details.save-waiting .settings-save-status .spinner{visibility:visible}
1939
- .brz .attachment-details.save-complete .settings-save-status .saved{display:block}
1940
- .brz .attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:18px;color:#666;border-bottom:1px solid #ddd;padding-bottom:11px}
1941
- .brz .attachment-info .filename{font-weight:600;color:#444;word-wrap:break-word}
1942
- .brz .attachment-info .thumbnail{position:relative;float:left;max-width:120px;max-height:120px;margin-top:5px;margin-right:10px;margin-bottom:5px}
1943
- .brz .uploading .attachment-info .thumbnail{width:120px;height:80px;-webkit-box-shadow:inset 0 0 15px rgba(0,0,0,.1);box-shadow:inset 0 0 15px rgba(0,0,0,.1)}
1944
- .brz .uploading .attachment-info .media-progress-bar{margin-top:35px}
1945
- .brz .attachment-info .thumbnail-image:after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}
1946
- .brz .attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}
1947
- .brz .attachment-info .details{float:left;font-size:12px;max-width:100%}
1948
- .brz .attachment-info .delete-attachment,.brz .attachment-info .edit-attachment,.brz .attachment-info .trash-attachment,.brz .attachment-info .untrash-attachment{display:block;text-decoration:none;white-space:nowrap}
1949
- .brz .attachment-details.needs-refresh .attachment-info .edit-attachment{display:none}
1950
- .brz .attachment-info .edit-attachment{display:block}
1951
- .brz .media-modal .delete-attachment,.brz .media-modal .trash-attachment,.brz .media-modal .untrash-attachment{display:inline;padding:0;color:#bc0b0b}
1952
- .brz .media-modal .delete-attachment:focus,.brz .media-modal .delete-attachment:hover,.brz .media-modal .trash-attachment:focus,.brz .media-modal .trash-attachment:hover,.brz .media-modal .untrash-attachment:focus,.brz .media-modal .untrash-attachment:hover{color:#dc3232}
1953
- .brz .attachment-display-settings{width:100%;float:left;overflow:hidden}
1954
- .brz .attachment-display-settings h4{margin:1.4em 0 .4em}
1955
- .brz .collection-settings{overflow:hidden}
1956
- .brz .collection-settings .setting input[type=checkbox]{float:left;margin-right:8px}
1957
- .brz .collection-settings .setting span{min-width:inherit}
1958
- .brz .media-modal .imgedit-wrap{position:static}
1959
- .brz .media-modal .imgedit-wrap .imgedit-panel-content{padding:16px;position:absolute;top:0;right:282px;bottom:0;left:0;overflow:auto}
1960
- .brz .media-modal .imgedit-wrap .imgedit-settings{background:#f3f3f3;border-left:1px solid #ddd;padding:20px 16px 16px;position:absolute;top:0;right:0;bottom:0;width:250px;overflow:auto}
1961
- .brz .media-modal .imgedit-group{background:0 0;border:none;border-bottom:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none;margin:0 0 16px;padding:0 0 16px;position:relative}
1962
- .brz .media-modal .imgedit-group:last-of-type{border:none;margin:0;padding:0}
1963
- .brz .media-modal .imgedit-group-top{margin:0}
1964
- .brz .media-modal .imgedit-group-top h2,.brz .media-modal .imgedit-group-top h2 .button-link,.brz .media-modal .imgedit-group-top h3{display:inline-block;text-transform:uppercase;font-size:12px;color:#666;margin:3px 0 0}
1965
- .brz .media-modal .imgedit-group-top h2 .button-link,.brz .media-modal .imgedit-group-top h2 a,.brz .media-modal .imgedit-group-top h3 a{text-decoration:none;color:#666}
1966
- .brz .wp-core-ui.media-modal .image-editor .imgedit-help-toggle,.brz .wp-core-ui.media-modal .image-editor .imgedit-help-toggle:active,.brz .wp-core-ui.media-modal .image-editor .imgedit-help-toggle:hover{border:1px solid transparent;margin:0;padding:0;background:0 0;color:#0074a2;font-size:20px;line-height:1;cursor:pointer;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-shadow:none;box-shadow:none}
1967
- .brz .wp-core-ui.media-modal .image-editor .imgedit-help-toggle:focus{color:#0074a2;border-color:#5b9dd9;outline:0;-webkit-box-shadow:0 0 3px rgba(0,115,170,.8);box-shadow:0 0 3px rgba(0,115,170,.8)}
1968
- .brz .wp-core-ui.media-modal .imgedit-group-top .dashicons-arrow-down.imgedit-help-toggle{margin-top:-3px}
1969
- .brz .wp-core-ui.media-modal .image-editor h3 .imgedit-help-toggle{margin-top:-2px}
1970
- .brz .media-modal .imgedit-help-toggled span.dashicons:before{content:"\f142"}
1971
- .brz .media-modal .imgedit-thumbnail-preview{margin:10px 8px 0 0}
1972
- .brz .imgedit-thumbnail-preview-caption{display:block}
1973
- .brz .media-modal .imgedit-wrap div.updated{margin:0 0 16px}
1974
- .brz .embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}
1975
- .brz .media-frame .embed-url input{font-size:18px;padding:12px 14px;width:100%;min-width:200px;-webkit-box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1);box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1)}
1976
- .brz .media-frame .embed-url .spinner{position:absolute;top:32px;right:26px}
1977
- .brz .media-frame .embed-loading .embed-url .spinner{visibility:visible}
1978
- .brz .embed-link-settings,.brz .embed-media-settings{position:absolute;top:70px;left:0;right:0;bottom:0;padding:16px 16px 32px;overflow:auto}
1979
- .brz .media-embed .embed-link-settings{overflow:visible}
1980
- .brz .embed-preview embed,.brz .embed-preview iframe,.brz .embed-preview img,.brz .mejs-container video{max-width:100%;vertical-align:middle}
1981
- .brz .embed-preview a{display:inline-block}
1982
- .brz .embed-preview img{display:block;height:auto}
1983
- .brz .mejs-container:focus{outline:1px solid #5b9dd9;-webkit-box-shadow:0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 2px 1px rgba(30,140,190,.8)}
1984
- .brz .image-details .media-modal{left:140px;right:140px}
1985
- .brz .media-frame-content{outline:0}
1986
- .brz .image-details .media-frame-content,.brz .image-details .media-frame-router,.brz .image-details .media-frame-title{left:0}
1987
- .brz .image-details .embed-media-settings{top:0;overflow:visible;padding:0}
1988
- .brz .image-details .embed-media-settings,.brz .image-details .embed-media-settings div{-webkit-box-sizing:border-box;box-sizing:border-box}
1989
- .brz .image-details .column-settings{background:#f3f3f3;border-right:1px solid #ddd;min-height:100%;width:55%;position:absolute;top:0;left:0}
1990
- .brz .image-details .column-settings h2,.brz .image-details .column-settings h3{margin:20px;padding-top:20px;border-top:1px solid #ddd;color:#23282d}
1991
- .brz .image-details .column-image{width:45%;position:absolute;left:55%;top:0}
1992
- .brz .image-details .image{margin:20px}
1993
- .brz .image-details .image img{max-width:100%;max-height:500px}
1994
- .brz .image-details .advanced-toggle{padding:0;color:#666;text-transform:uppercase;text-decoration:none}
1995
- .brz .image-details .advanced-toggle:active,.brz .image-details .advanced-toggle:hover{color:#666}
1996
- .brz .image-details .advanced-toggle:after{font:normal 20px/1 dashicons;speak:none;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f140";display:inline-block;margin-top:-2px}
1997
- .brz .image-details .advanced-visible .advanced-toggle:after{content:"\f142"}
1998
- .brz .image-details .embed-media-settings .size{margin-bottom:4px}
1999
- .brz .image-details .custom-size span{display:block}
2000
- .brz .image-details .custom-size label{display:block;float:left}
2001
- .brz .image-details .custom-size span small{color:#555d66;font-size:inherit}
2002
- .brz .image-details .custom-size input{width:5em}
2003
- .brz .image-details .custom-size .sep{float:left;margin:26px 6px 0}
2004
- .brz .image-details .custom-size:after{content:"";display:table;clear:both}
2005
- .brz .media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:left}
2006
- .brz .media-embed .thumbnail img{max-height:200px;display:block}
2007
- .brz .media-embed .thumbnail:after{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}
2008
- .brz .media-embed .setting{width:100%;margin:10px 0;float:left;display:block;clear:both}
2009
- .brz .image-details .embed-media-settings .setting{float:none;width:auto}
2010
- .brz .image-details .actions{margin:10px 0}
2011
- .brz .image-details .hidden{display:none}
2012
- .brz .media-embed .setting input[type=text],.brz .media-embed .setting textarea{display:block;width:100%;max-width:400px;margin:1px 0}
2013
- .brz .image-details .embed-media-settings .setting input[type=text],.brz .image-details .embed-media-settings .setting textarea{max-width:inherit;width:70%}
2014
- .brz .image-details .embed-media-settings .custom-size,.brz .image-details .embed-media-settings .link-target,.brz .image-details .embed-media-settings .setting input.link-to-custom{margin-left:27%;width:70%}
2015
- .brz .image-details .embed-media-settings .link-target{margin-top:24px}
2016
- .brz .media-embed .setting input.hidden,.brz .media-embed .setting textarea.hidden{display:none}
2017
- .brz .media-embed .setting span{display:block;width:200px;font-size:13px;line-height:24px;color:#666}
2018
- .brz .image-details .embed-media-settings .setting span{float:left;width:25%;text-align:right;margin:8px 1% 0;line-height:1.1}
2019
- .brz .media-embed .setting .button-group{margin:2px 0}
2020
- .brz .media-embed-sidebar{position:absolute;top:0;left:440px}
2021
- .brz .advanced-section,.brz .link-settings{margin-top:10px}
2022
- .brz .wp-editor-wrap .uploader-editor{background:rgba(150,150,150,.9);position:absolute;top:0;left:0;width:100%;height:100%;z-index:99998;display:none;text-align:center}
2023
- .brz .wp-editor-wrap .uploader-editor-content{border:1px dashed #fff;position:absolute;top:10px;left:10px;right:10px;bottom:10px}
2024
- .brz .wp-editor-wrap .uploader-editor .uploader-editor-title{position:absolute;top:50%;left:0;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:3em;line-height:1.3;font-weight:600;color:#fff;padding:0;margin:0;display:none}
2025
- .brz .wp-editor-wrap .uploader-editor.droppable{background:rgba(0,86,132,.9)}
2026
- .brz .wp-editor-wrap .uploader-editor.droppable .uploader-editor-title{display:block}
2027
- @media only screen and (max-width:900px){.brz .media-frame:not(.hide-menu) .media-frame-content,.brz .media-frame:not(.hide-menu) .media-frame-router,.brz .media-frame:not(.hide-menu) .media-frame-title,.brz .media-frame:not(.hide-menu) .media-frame-toolbar{left:0}
2028
- .brz .media-frame:not(.hide-menu) .media-frame-menu{position:static;width:0}
2029
- .brz .media-frame:not(.hide-menu) .media-menu{width:auto;max-width:80%;overflow:auto;z-index:2000;top:50px;left:-300px;right:auto;bottom:auto;padding:5px 0;border:1px solid #ccc}
2030
- .brz .media-frame:not(.hide-menu) .media-menu.visible{left:0}
2031
- .brz .media-frame:not(.hide-menu) .media-menu>a{padding:12px 16px;font-size:16px}
2032
- .brz .media-frame:not(.hide-menu) .media-menu>a.active{display:none}
2033
- .brz .media-frame:not(.hide-menu) .media-menu .separator{margin:5px 10px}
2034
- .brz .media-frame:not(.hide-menu) .media-frame-title{left:0}
2035
- .brz .media-frame:not(.hide-menu) .media-frame-title .dashicons{display:inline-block;line-height:50px}
2036
- .brz .media-frame:not(.hide-menu) .media-frame-title h1{color:#0073aa;line-height:3;font-size:18px;float:left;cursor:pointer}
2037
- .brz .media-sidebar{width:230px}
2038
- .brz .attachments-browser .attachments,.brz .attachments-browser .media-toolbar,.brz .attachments-browser .uploader-inline{right:262px}
2039
- .brz .attachment-details .setting,.brz .media-sidebar .setting{margin:6px 0}
2040
- .brz .attachment-details .setting input,.brz .attachment-details .setting span,.brz .attachment-details .setting textarea,.brz .compat-item label span,.brz .media-sidebar .setting input,.brz .media-sidebar .setting span,.brz .media-sidebar .setting textarea{float:none}
2041
- .brz .attachment-details .setting span,.brz .compat-item label span,.brz .media-sidebar .setting span{text-align:inherit;min-height:16px;margin:0;padding:8px 2px 0}
2042
- .brz .attachment-details .setting .value,.brz .media-sidebar .setting .value{float:none;width:auto}
2043
- .brz .attachment-details .setting input[type=email],.brz .attachment-details .setting input[type=number],.brz .attachment-details .setting input[type=password],.brz .attachment-details .setting input[type=search],.brz .attachment-details .setting input[type=tel],.brz .attachment-details .setting input[type=text],.brz .attachment-details .setting input[type=url],.brz .attachment-details .setting select,.brz .attachment-details .setting textarea,.brz .media-sidebar .setting input[type=email],.brz .media-sidebar .setting input[type=number],.brz .media-sidebar .setting input[type=password],.brz .media-sidebar .setting input[type=search],.brz .media-sidebar .setting input[type=tel],.brz .media-sidebar .setting input[type=text],.brz .media-sidebar .setting input[type=url],.brz .media-sidebar .setting select,.brz .media-sidebar .setting textarea{float:none;width:98%;max-width:none;height:auto}
2044
- .brz .attachment-details .setting select.columns,.brz .media-sidebar .setting select.columns{width:auto}
2045
- .brz .media-frame .search,.brz .media-frame input,.brz .media-frame textarea{padding:3px 6px}
2046
- .brz .image-details .column-image{width:30%;left:70%}
2047
- .brz .image-details .column-settings{width:70%}
2048
- .brz .image-details .media-modal{left:30px;right:30px}
2049
- .brz .image-details .embed-media-settings .setting{margin:20px}
2050
- .brz .image-details .embed-media-settings .setting span{float:none;text-align:left;width:100%;margin-bottom:4px}
2051
- .brz .image-details .embed-media-settings .setting input.link-to-custom,.brz .image-details .embed-media-settings .setting input[type=text],.brz .image-details .embed-media-settings .setting textarea{width:100%;margin-left:0}
2052
- .brz .image-details .embed-media-settings .custom-size{margin-left:20px}
2053
- .brz .collection-settings .setting input[type=checkbox]{margin-top:0}
2054
- .brz .media-selection{min-width:120px}
2055
- .brz .media-selection:after{background:0 0}
2056
- .brz .media-selection .attachments{display:none}
2057
- .brz .media-modal .attachments-browser .media-toolbar .search{max-width:100%;height:auto;float:right}
2058
- .brz .media-modal .attachments-browser .media-toolbar .attachment-filters{height:auto}
2059
- .brz .media-modal .attachments-browser .media-toolbar .spinner{margin:14px 2px 0}
2060
- .brz .media-frame input[type=email],.brz .media-frame input[type=number],.brz .media-frame input[type=password],.brz .media-frame input[type=search],.brz .media-frame input[type=text],.brz .media-frame input[type=url],.brz .media-frame select,.brz .media-frame textarea{font-size:16px}}@media only screen and (max-width:640px),screen and (max-height:400px){.brz .image-details .media-modal,.brz .media-modal{position:fixed;top:0;left:0;right:0;bottom:0}
2061
- .brz .media-modal-backdrop{position:fixed}
2062
- .brz .media-sidebar{z-index:1900;max-width:70%;bottom:120%;-webkit-box-sizing:border-box;box-sizing:border-box;padding-bottom:0}
2063
- .brz .media-sidebar.visible{bottom:0}
2064
- .brz .attachments-browser .attachments,.brz .attachments-browser .media-toolbar,.brz .attachments-browser .uploader-inline{right:0}
2065
- .brz .image-details .media-frame-title{display:block;top:0;font-size:14px}
2066
- .brz .image-details .column-image,.brz .image-details .column-settings{width:100%;position:relative;left:0}
2067
- .brz .image-details .column-settings{padding:4px 0}
2068
- .brz .media-frame-content .media-toolbar .instructions{display:none}}@media screen and (max-height:400px){.brz .media-menu{padding:0}
2069
- .brz .media-frame-router{top:44px}
2070
- .brz .media-frame-content{top:78px}
2071
- .brz .attachments-browser .attachments{top:40px}
2072
- .brz .embed-link-settings{overflow:visible}}@media only screen and (max-width:480px){.brz .media-modal-close{top:-5px}
2073
- .brz .media-modal .media-frame-title{height:40px}
2074
- .brz .wp-core-ui.wp-customizer .media-button{margin-top:13px}
2075
- .brz .media-frame:not(.hide-menu) .media-frame-title h1,.brz .media-modal .media-frame-title h1{font-size:18px;line-height:40px}
2076
- .brz .media-frame:not(.hide-menu) .media-frame-title .dashicons{line-height:40px}
2077
- .brz .media-frame-router,.brz .media-frame:not(.hide-menu) .media-menu{top:40px}
2078
- .brz .media-frame-content{top:74px}
2079
- .brz .media-frame.hide-router .media-frame-content{top:40px}}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.brz .wp-core-ui .media-modal-icon{background-size:134px 15px}}.brz .media-frame-content[data-columns="1"] .attachment{width:100%}
2080
- .brz .media-frame-content[data-columns="2"] .attachment{width:50%}
2081
- .brz .media-frame-content[data-columns="3"] .attachment{width:33.33%}
2082
- .brz .media-frame-content[data-columns="4"] .attachment{width:25%}
2083
- .brz .media-frame-content[data-columns="5"] .attachment{width:20%}
2084
- .brz .media-frame-content[data-columns="6"] .attachment{width:16.66%}
2085
- .brz .media-frame-content[data-columns="7"] .attachment{width:14.28%}
2086
- .brz .media-frame-content[data-columns="8"] .attachment{width:12.5%}
2087
- .brz .media-frame-content[data-columns="9"] .attachment{width:11.11%}
2088
- .brz .media-frame-content[data-columns="10"] .attachment{width:10%}
2089
- .brz .media-frame-content[data-columns="11"] .attachment{width:9.09%}
2090
- .brz .media-frame-content[data-columns="12"] .attachment{width:8.33%}
2091
- .brz .admin-bar .wp-env .visual-sidebar{top:32px;left:0}
2092
- .brz .admin-bar .wp-env .visual-wrap-block-wrap{margin-left:0;padding-bottom:0}
2093
- .brz .brz-wp__sidebar{width:100%}
2094
- .brz .brz-wp__sidebar .brz-shortcode__placeholder{width:100%;min-height:300px}
2095
- .brz .brz-wp-shortcode{width:100%;min-height:20px}
2096
- .brz .brz-wp-shortcode .woocommerce:empty{width:100%;height:15px}
2097
- .brz .brz-wp-shortcode .woocommerce-product-gallery{opacity:1!important}
2098
- .brz .brz-wp-shortcode .brz-shortcode__placeholder{width:100%;min-height:300px}
2099
- @-webkit-keyframes brz-ed-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}
2100
- 100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes brz-ed-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}
2101
- 100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes brz-ed-fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
2102
- to{opacity:1;-webkit-transform:none;transform:none}}@keyframes brz-ed-fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}
2103
- to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes brz-ed-fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}
2104
- to{opacity:1;-webkit-transform:none;transform:none}}@keyframes brz-ed-fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}
2105
- to{opacity:1;-webkit-transform:none;transform:none}}@-webkit-keyframes brz-ed-fadeIn{from{opacity:0}
2106
- to{opacity:1}}@keyframes brz-ed-fadeIn{from{opacity:0}
2107
- to{opacity:1}}@-webkit-keyframes brz-ed-fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}
2108
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes brz-ed-fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}
2109
- to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes brz-ed-pulsate{0%{-webkit-transform:scale(.1,.1);transform:scale(.1,.1);opacity:0}
2110
- 50%{opacity:1}
2111
- 100%{-webkit-transform:scale(1.2,1.2);transform:scale(1.2,1.2);opacity:0}}@keyframes brz-ed-pulsate{0%{-webkit-transform:scale(.1,.1);transform:scale(.1,.1);opacity:0}
2112
- 50%{opacity:1}
2113
- 100%{-webkit-transform:scale(1.2,1.2);transform:scale(1.2,1.2);opacity:0}}@-webkit-keyframes brz-ed-sk-bounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}
2114
- 50%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes brz-ed-sk-bounce{0%,100%{-webkit-transform:scale(0);transform:scale(0)}
2115
- 50%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes brz-rcSliderTooltipZoomDownIn{0%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0,0);transform:scale(0,0)}
2116
- 100%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1,1);transform:scale(1,1)}}@keyframes brz-rcSliderTooltipZoomDownIn{0%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0,0);transform:scale(0,0)}
2117
- 100%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1,1);transform:scale(1,1)}}@-webkit-keyframes brz-rcSliderTooltipZoomDownOut{0%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1,1);transform:scale(1,1)}
2118
- 100%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0,0);transform:scale(0,0)}}@keyframes brz-rcSliderTooltipZoomDownOut{0%{-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(1,1);transform:scale(1,1)}
2119
- 100%{opacity:0;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:scale(0,0);transform:scale(0,0)}}.brz-ed #brz-ed-root{position:relative;background-color:#f3f3f3}
2120
- .brz-ed #brz-ed-root>.brz-reset-all{overflow:hidden}
2121
- .brz-ed #brz-ed-home-page{width:100%;min-height:100vh;position:absolute}
2122
- .brz-ed .brz-height--100vh,.brz-ed.brz-height--100vh{height:100vh!important}
2123
- .brz-ed .body-without-scroll{overflow:hidden}
2124
- .brz-ed .brz-ed-wrap-block-wrap{width:100%}
2125
- .brz-ed .brz-ed-wrap-block-wrap--first{min-height:400px;height:100vh}
2126
- .brz-ed .btn .brz-span[contenteditable=true]{cursor:text}
2127
- .brz-ed .brz-ed-element-placeholder{position:relative}
2128
- .brz-ed .brz-ed-element-placeholder *{visibility:hidden}
2129
- .brz-ed .brz-ed-element-placeholder:after{position:absolute;top:0;right:0;bottom:0;left:0;content:"";display:block;border:1px dashed #34beea;visibility:visible}
2130
- .brz-ed .brz-ed-bar-wrapper,.brz-ed .brz-ed-fixed,.brz-ed .brz-ed-large-popup,.brz-ed .brz-ed-sidebar-block{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
2131
- .brz-ed .brz-ed-deg90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}
2132
- .brz-ed .brz-ed-deg180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}
2133
- .brz-ed .brz-ed-deg270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}
2134
- html{-webkit-box-sizing:border-box;box-sizing:border-box}
2135
- *,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}
2136
- @-ms-viewport{width:device-width}
2137
- .brz-ed .brz-figcaption,.brz-ed .brz-figure,.brz-ed .brz-section{display:block}
2138
- body{margin:0}
2139
- body.brz-ed{background-color:#f3f3f3}
2140
- body.brz::after,body.brz::before{display:none}
2141
- .brz-iframe{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}
2142
- .brz{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
2143
- .brz .brz-root__container.brz-reset-all{display:block;overflow:hidden;font-family:inherit}
2144
- .brz-ed .brz-hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible;margin:0}
2145
- .brz-ed .brz-h1,.brz-ed .brz-h2,.brz-ed .brz-h3,.brz-ed .brz-h4,.brz-ed .brz-h5,.brz-ed .brz-h6{margin-top:0;margin-bottom:0;padding:0}
2146
- .brz-ed .brz-p{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}
2147
- .brz-ed .brz-span{float:none;margin:0;padding:0;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit}
2148
- .brz-ed .brz-dl,.brz-ed .brz-ol,.brz-ed .brz-ul{margin:0;list-style:none;padding:0}
2149
- .brz-ed .brz-ol .brz-ol,.brz-ed .brz-ol .brz-ul,.brz-ed .brz-ul .brz-ol,.brz-ed .brz-ul .brz-ul{margin:0}
2150
- .brz-ed .brz-dt{font-weight:700}
2151
- .brz-ed .brz-dd{margin-bottom:.5rem;margin-left:0}
2152
- .brz-ed .brz-blockquote{margin:0 0 1rem}
2153
- .brz-ed .brz-dfn{font-style:italic}
2154
- .brz-ed .brz-b,.brz-ed .brz-strong{font-weight:700}
2155
- .brz-ed .brz-a:not(.brz-btn){color:#3dbfe8;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects;-webkit-box-shadow:none;box-shadow:none}
2156
- .brz-ed .brz-a:not(.brz-btn)[href]:hover{color:#1aabd8;-webkit-box-shadow:none;box-shadow:none;cursor:pointer}
2157
- .brz-ed .brz-a:not(.brz-btn):active,.brz-ed .brz-a:not(.brz-btn):focus,.brz-ed .brz-a:not(.brz-btn):hover{outline:0}
2158
- .brz-ed .brz-a.brz-btn[href]{text-decoration:none}
2159
- .brz-ed .brz-figure{margin:0;min-width:auto;min-height:auto}
2160
- .brz-ed .brz-img{vertical-align:middle;border-style:none}
2161
- .brz-ed svg:not(:root){overflow:hidden}
2162
- .brz-ed .brz-button,.brz-ed .brz-input,.brz-ed .brz-label,.brz-ed .brz-textarea{-ms-touch-action:manipulation;touch-action:manipulation}
2163
- .brz-ed .brz-table{border-collapse:collapse}
2164
- .brz-ed .brz-caption{padding-top:.75rem;padding-bottom:.75rem;color:#828b92;text-align:left;caption-side:bottom}
2165
- .brz-ed .brz-th{text-align:left}
2166
- .brz-ed .brz-form{margin:0}
2167
- .brz-ed .brz-label{display:inline-block;margin-bottom:0;font-weight:400}
2168
- .brz-ed .brz-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}
2169
- .brz-ed .brz-button,.brz-ed .brz-input,.brz-ed .brz-optgroup,.brz-ed .brz-select,.brz-ed .brz-textarea{padding:0;margin:0;font-family:inherit;font-size:inherit;line-height:inherit}
2170
- .brz-ed .brz-button,.brz-ed .brz-input{overflow:visible}
2171
- .brz-ed .brz-button,.brz-ed .brz-select{text-transform:none}
2172
- .brz-ed .brz-button{-webkit-appearance:button}
2173
- .brz-ed .brz-button::-moz-focus-inner{padding:0;border-style:none}
2174
- .brz-ed .brz-input[type=checkbox],.brz-ed .brz-input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}
2175
- .brz-ed .brz-input[type=number]{-moz-appearance:textfield}
2176
- .brz-ed .brz-input[type=date],.brz-ed .brz-input[type=datetime-local],.brz-ed .brz-input[type=month],.brz-ed .brz-input[type=time]{-webkit-appearance:listbox}
2177
- .brz-ed .brz-textarea{overflow:auto;resize:vertical}
2178
- .brz-ed .brz-fieldset{min-width:0;padding:0;margin:0;border:0}
2179
- .brz-ed .brz-iframe,.brz-ed .brz-object{margin-bottom:0;max-width:100%}
2180
- .brz-ed .brz-iframe{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}
2181
- .brz-ed [hidden]{display:none!important}
2182
- .brz-ed .brz-reset-all{-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-item-align:auto;align-self:auto;-webkit-animation-delay:0s;animation-delay:0s;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:0s;animation-duration:0s;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-name:none;animation-name:none;-webkit-animation-play-state:running;animation-play-state:running;-webkit-animation-timing-function:ease;animation-timing-function:ease;azimuth:center;-webkit-backface-visibility:visible;backface-visibility:visible;background-attachment:scroll;background-blend-mode:normal;background-clip:border-box;background-color:transparent;background-image:none;background-origin:padding-box;background-position:0 0;background-repeat:repeat;background-size:auto auto;block-size:auto;border-block-end-color:currentcolor;border-block-end-style:none;border-block-end-width:medium;border-block-start-color:currentcolor;border-block-start-style:none;border-block-start-width:medium;border-bottom-color:currentcolor;border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-style:none;border-bottom-width:medium;border-collapse:separate;border-image-outset:0s;border-image-repeat:stretch;border-image-slice:100%;border-image-source:none;border-image-width:1;border-inline-end-color:currentcolor;border-inline-end-style:none;border-inline-end-width:medium;border-inline-start-color:currentcolor;border-inline-start-style:none;border-inline-start-width:medium;border-left-color:currentcolor;border-left-style:none;border-left-width:medium;border-right-color:currentcolor;border-right-style:none;border-right-width:medium;border-spacing:0;border-top-color:currentcolor;border-top-left-radius:0;border-top-right-radius:0;border-top-style:none;border-top-width:medium;bottom:auto;-webkit-box-decoration-break:slice;box-decoration-break:slice;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-column-break-after:auto;break-after:auto;-webkit-column-break-before:auto;break-before:auto;-webkit-column-break-inside:auto;break-inside:auto;caption-side:top;caret-color:auto;clear:none;clip:auto;-webkit-clip-path:none;clip-path:none;color:initial;-webkit-column-count:auto;-moz-column-count:auto;column-count:auto;-webkit-column-fill:balance;-moz-column-fill:balance;column-fill:balance;-webkit-column-gap:normal;-moz-column-gap:normal;column-gap:normal;-webkit-column-rule-color:currentcolor;-moz-column-rule-color:currentcolor;column-rule-color:currentcolor;-webkit-column-rule-style:none;-moz-column-rule-style:none;column-rule-style:none;-webkit-column-rule-width:medium;-moz-column-rule-width:medium;column-rule-width:medium;-webkit-column-span:none;-moz-column-span:none;column-span:none;-webkit-column-width:auto;-moz-column-width:auto;column-width:auto;content:normal;counter-increment:none;counter-reset:none;cursor:auto;display:inline;empty-cells:show;-webkit-filter:none;filter:none;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:1;flex-shrink:1;-ms-flex-wrap:nowrap;flex-wrap:nowrap;float:none;font-family:initial;-webkit-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-kerning:auto;font-kerning:auto;-webkit-font-language-override:normal;font-language-override:normal;font-size:medium;font-size-adjust:none;font-stretch:normal;font-style:normal;font-synthesis:weight style;font-variant:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;-webkit-font-variant-ligatures:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;font-weight:400;grid-auto-columns:auto;grid-auto-flow:row;grid-auto-rows:auto;grid-column-end:auto;grid-column-gap:0;grid-column-start:auto;grid-row-end:auto;grid-row-gap:0;grid-row-start:auto;grid-template-areas:none;grid-template-columns:none;grid-template-rows:none;height:auto;-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual;image-orientation:0deg;image-rendering:auto;image-resolution:1dppx;ime-mode:auto;inline-size:auto;isolation:auto;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;left:auto;letter-spacing:normal;line-break:auto;line-height:normal;list-style-image:none;list-style-position:outside;list-style-type:disc;-webkit-margin-after:0;margin-block-end:0;-webkit-margin-before:0;margin-block-start:0;margin-bottom:0;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;margin-left:0;margin-right:0;margin-top:0;-webkit-mask-clip:border-box;mask-clip:border-box;-webkit-mask-composite:add;mask-composite:add;-webkit-mask-image:none;mask-image:none;mask-mode:match-source;-webkit-mask-origin:border-box;mask-origin:border-box;-webkit-mask-position:0 0;mask-position:0 0;-webkit-mask-repeat:repeat;mask-repeat:repeat;-webkit-mask-size:auto;mask-size:auto;mask-type:luminance;max-height:none;max-width:none;min-block-size:0;min-height:0;min-inline-size:0;min-width:0;mix-blend-mode:normal;-o-object-fit:fill;object-fit:fill;-o-object-position:50% 50%;object-position:50% 50%;offset-block-end:auto;offset-block-start:auto;offset-inline-end:auto;offset-inline-start:auto;opacity:1;-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0;orphans:2;outline-color:initial;outline-offset:0;outline-style:none;outline-width:medium;overflow:visible;overflow-wrap:normal;overflow-x:visible;overflow-y:visible;-webkit-padding-after:0;padding-block-end:0;-webkit-padding-before:0;padding-block-start:0;padding-bottom:0;-webkit-padding-end:0;padding-inline-end:0;-webkit-padding-start:0;padding-inline-start:0;padding-left:0;padding-right:0;padding-top:0;page-break-after:auto;page-break-before:auto;page-break-inside:auto;-webkit-perspective:none;perspective:none;-webkit-perspective-origin:50% 50%;perspective-origin:50% 50%;pointer-events:auto;position:static;quotes:initial;resize:none;right:auto;ruby-align:space-around;ruby-merge:separate;ruby-position:over;scroll-behavior:auto;-ms-scroll-snap-coordinate:none;scroll-snap-coordinate:none;-ms-scroll-snap-destination:0 0;scroll-snap-destination:0 0;-ms-scroll-snap-points-x:none;scroll-snap-points-x:none;-ms-scroll-snap-points-y:none;scroll-snap-points-y:none;-ms-scroll-snap-type:none;scroll-snap-type:none;shape-image-threshold:0;shape-margin:0;shape-outside:none;-moz-tab-size:8;-o-tab-size:8;tab-size:8;table-layout:auto;text-align:initial;-moz-text-align-last:auto;text-align-last:auto;text-combine-upright:none;-webkit-text-decoration-color:currentcolor;text-decoration-color:currentcolor;-webkit-text-decoration-line:none;text-decoration-line:none;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-emphasis-color:currentcolor;text-emphasis-color:currentcolor;-webkit-text-emphasis-position:over;text-emphasis-position:over right;-webkit-text-emphasis-style:none;text-emphasis-style:none;text-indent:0;text-justify:auto;text-orientation:mixed;text-overflow:clip;text-rendering:auto;text-shadow:none;text-transform:none;text-underline-position:auto;top:auto;-ms-touch-action:auto;touch-action:auto;-webkit-transform:none;transform:none;transform-box:border-box;-webkit-transform-origin:50% 50% 0;transform-origin:50% 50% 0;-webkit-transform-style:flat;transform-style:flat;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s;-webkit-transition-property:all;transition-property:all;-webkit-transition-timing-function:ease;transition-timing-function:ease;vertical-align:baseline;visibility:visible;white-space:normal;widows:2;width:auto;will-change:auto;word-break:normal;word-spacing:normal;word-wrap:normal;-webkit-writing-mode:horizontal-tb;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb;z-index:auto;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none}
2183
- .brz-ed .brz-h1,.brz-ed .brz-h2,.brz-ed .brz-h3,.brz-ed .brz-h4,.brz-ed .brz-h5,.brz-ed .brz-h6{font-family:inherit;font-weight:700;line-height:1.2;color:inherit}
2184
- .brz-ed .brz-h1{font-size:55px;font-weight:400}
2185
- .brz-ed .brz-h2{font-size:40px}
2186
- .brz-ed .brz-h3{font-size:32px}
2187
- .brz-ed .brz-h4{font-size:26px}
2188
- .brz-ed .brz-h5{font-size:19px}
2189
- .brz-ed .brz-h6{font-size:14px}
2190
- .brz-ed .brz-p{font-size:14px;font-weight:400}
2191
- .brz-ed .brz-flex-xs-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
2192
- .brz-ed .brz-flex-xs-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
2193
- .brz-ed .brz-flex-xs-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
2194
- .brz-ed .brz-justify-content-xs-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
2195
- .brz-ed .brz-justify-content-xs-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
2196
- .brz-ed .brz-justify-content-xs-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
2197
- .brz-ed .brz-justify-content-xs-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
2198
- .brz-ed .brz-justify-content-xs-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
2199
- .brz-ed .brz-align-items-xs-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
2200
- .brz-ed .brz-align-items-xs-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
2201
- .brz-ed .brz-align-items-xs-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
2202
- .brz-ed .brz-align-items-xs-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
2203
- .brz-ed .brz-align-items-xs-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
2204
- .brz-ed .brz-col-first-xs{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
2205
- .brz-ed .brz-col-last-xs{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
2206
- .brz-ed .brz-align-self-xs-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
2207
- .brz-ed .brz-align-self-xs-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
2208
- .brz-ed .brz-align-self-xs-center{-ms-flex-item-align:center!important;align-self:center!important}
2209
- .brz-ed .brz-align-self-xs-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
2210
- .brz-ed .brz-align-self-xs-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
2211
- .brz-ed .brz-flex-xs-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
2212
- .brz-ed .brz-flex-xs-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
2213
- .brz-ed .brz-align-content-xs-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
2214
- .brz-ed .brz-align-content-xs-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
2215
- .brz-ed .brz-align-content-xs-center{-ms-flex-line-pack:center!important;align-content:center!important}
2216
- .brz-ed .brz-align-content-xs-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
2217
- .brz-ed .brz-align-content-xs-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
2218
- .brz-ed .brz-align-content-xs-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}
2219
- @media (min-width:480px){.brz-ed .brz-flex-ms-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
2220
- .brz-ed .brz-flex-ms-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
2221
- .brz-ed .brz-flex-ms-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
2222
- .brz-ed .brz-justify-content-ms-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
2223
- .brz-ed .brz-justify-content-ms-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
2224
- .brz-ed .brz-justify-content-ms-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
2225
- .brz-ed .brz-justify-content-ms-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
2226
- .brz-ed .brz-justify-content-ms-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
2227
- .brz-ed .brz-align-items-ms-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
2228
- .brz-ed .brz-align-items-ms-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
2229
- .brz-ed .brz-align-items-ms-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
2230
- .brz-ed .brz-align-items-ms-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
2231
- .brz-ed .brz-align-items-ms-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
2232
- .brz-ed .brz-col-first-ms{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
2233
- .brz-ed .brz-col-last-ms{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
2234
- .brz-ed .brz-align-self-ms-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
2235
- .brz-ed .brz-align-self-ms-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
2236
- .brz-ed .brz-align-self-ms-center{-ms-flex-item-align:center!important;align-self:center!important}
2237
- .brz-ed .brz-align-self-ms-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
2238
- .brz-ed .brz-align-self-ms-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
2239
- .brz-ed .brz-flex-ms-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
2240
- .brz-ed .brz-flex-ms-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
2241
- .brz-ed .brz-align-content-ms-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
2242
- .brz-ed .brz-align-content-ms-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
2243
- .brz-ed .brz-align-content-ms-center{-ms-flex-line-pack:center!important;align-content:center!important}
2244
- .brz-ed .brz-align-content-ms-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
2245
- .brz-ed .brz-align-content-ms-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
2246
- .brz-ed .brz-align-content-ms-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:768px){.brz-ed .brz-flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
2247
- .brz-ed .brz-flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
2248
- .brz-ed .brz-flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
2249
- .brz-ed .brz-justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
2250
- .brz-ed .brz-justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
2251
- .brz-ed .brz-justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
2252
- .brz-ed .brz-justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
2253
- .brz-ed .brz-justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
2254
- .brz-ed .brz-align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
2255
- .brz-ed .brz-align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
2256
- .brz-ed .brz-align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
2257
- .brz-ed .brz-align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
2258
- .brz-ed .brz-align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
2259
- .brz-ed .brz-col-first-sm{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
2260
- .brz-ed .brz-col-last-sm{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
2261
- .brz-ed .brz-align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
2262
- .brz-ed .brz-align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
2263
- .brz-ed .brz-align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}
2264
- .brz-ed .brz-align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
2265
- .brz-ed .brz-align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
2266
- .brz-ed .brz-flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
2267
- .brz-ed .brz-flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
2268
- .brz-ed .brz-align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
2269
- .brz-ed .brz-align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
2270
- .brz-ed .brz-align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}
2271
- .brz-ed .brz-align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
2272
- .brz-ed .brz-align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
2273
- .brz-ed .brz-align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:992px){.brz-ed .brz-flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
2274
- .brz-ed .brz-flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
2275
- .brz-ed .brz-flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
2276
- .brz-ed .brz-justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
2277
- .brz-ed .brz-justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
2278
- .brz-ed .brz-justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
2279
- .brz-ed .brz-justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
2280
- .brz-ed .brz-justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
2281
- .brz-ed .brz-align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
2282
- .brz-ed .brz-align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
2283
- .brz-ed .brz-align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
2284
- .brz-ed .brz-align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
2285
- .brz-ed .brz-align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
2286
- .brz-ed .brz-col-first-md{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
2287
- .brz-ed .brz-col-last-md{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
2288
- .brz-ed .brz-align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
2289
- .brz-ed .brz-align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
2290
- .brz-ed .brz-align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}
2291
- .brz-ed .brz-align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
2292
- .brz-ed .brz-align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
2293
- .brz-ed .brz-flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
2294
- .brz-ed .brz-flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
2295
- .brz-ed .brz-align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
2296
- .brz-ed .brz-align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
2297
- .brz-ed .brz-align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}
2298
- .brz-ed .brz-align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
2299
- .brz-ed .brz-align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
2300
- .brz-ed .brz-align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:1200px){.brz-ed .brz-flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
2301
- .brz-ed .brz-flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
2302
- .brz-ed .brz-flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
2303
- .brz-ed .brz-justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
2304
- .brz-ed .brz-justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
2305
- .brz-ed .brz-justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
2306
- .brz-ed .brz-justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
2307
- .brz-ed .brz-justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
2308
- .brz-ed .brz-align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
2309
- .brz-ed .brz-align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
2310
- .brz-ed .brz-align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
2311
- .brz-ed .brz-align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
2312
- .brz-ed .brz-align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
2313
- .brz-ed .brz-col-first-lg{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
2314
- .brz-ed .brz-col-last-lg{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
2315
- .brz-ed .brz-align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
2316
- .brz-ed .brz-align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
2317
- .brz-ed .brz-align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}
2318
- .brz-ed .brz-align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
2319
- .brz-ed .brz-align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
2320
- .brz-ed .brz-flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
2321
- .brz-ed .brz-flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
2322
- .brz-ed .brz-align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
2323
- .brz-ed .brz-align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
2324
- .brz-ed .brz-align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}
2325
- .brz-ed .brz-align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
2326
- .brz-ed .brz-align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
2327
- .brz-ed .brz-align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}@media (min-width:1400px){.brz-ed .brz-flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}
2328
- .brz-ed .brz-flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}
2329
- .brz-ed .brz-flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}
2330
- .brz-ed .brz-justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
2331
- .brz-ed .brz-justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
2332
- .brz-ed .brz-justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
2333
- .brz-ed .brz-justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}
2334
- .brz-ed .brz-justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}
2335
- .brz-ed .brz-align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}
2336
- .brz-ed .brz-align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}
2337
- .brz-ed .brz-align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}
2338
- .brz-ed .brz-align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}
2339
- .brz-ed .brz-align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}
2340
- .brz-ed .brz-col-first-xl{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}
2341
- .brz-ed .brz-col-last-xl{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}
2342
- .brz-ed .brz-align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}
2343
- .brz-ed .brz-align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}
2344
- .brz-ed .brz-align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}
2345
- .brz-ed .brz-align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}
2346
- .brz-ed .brz-align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}
2347
- .brz-ed .brz-flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}
2348
- .brz-ed .brz-flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}
2349
- .brz-ed .brz-align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}
2350
- .brz-ed .brz-align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}
2351
- .brz-ed .brz-align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}
2352
- .brz-ed .brz-align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}
2353
- .brz-ed .brz-align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}
2354
- .brz-ed .brz-align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}}.brz-ed .brz-d-block{display:block!important}
2355
- .brz-ed .brz-d-inline-block{display:inline-block!important}
2356
- .brz-ed .brz-d-inline{display:inline!important}
2357
- .brz-ed .brz-d-none{display:none!important}
2358
- .brz-ed .brz-d-table{width:100%;display:table;position:relative}
2359
- .brz-ed .brz-d-table-cell{display:table-cell}
2360
- .brz-ed .brz-blocked{pointer-events:none}
2361
- .brz-ed .brz-d-xs-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
2362
- .brz-ed .brz-d-xs-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}
2363
- @media (min-width:480px){.brz-ed .brz-d-ms-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
2364
- .brz-ed .brz-d-ms-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:768px){.brz-ed .brz-d-sm-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
2365
- .brz-ed .brz-d-sm-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:992px){.brz-ed .brz-d-md-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
2366
- .brz-ed .brz-d-md-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:1200px){.brz-ed .brz-d-lg-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
2367
- .brz-ed .brz-d-lg-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}@media (min-width:1400px){.brz-ed .brz-d-xl-flex{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:0}
2368
- .brz-ed .brz-d-xl-inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}}.brz-ed .brz-p-relative{position:relative!important}
2369
- .brz-ed .brz-p-absolute{position:absolute!important}
2370
- .brz-ed .brz-p-fixed{position:fixed!important}
2371
- .brz-ed .brz-invisible{visibility:hidden!important}
2372
- .brz-ed .brz-visible{visibility:visible!important}
2373
- .brz-ed .brz-hidden-xs-up{display:none!important}
2374
- @media (max-width:479px){.brz-ed .brz-hidden-xs-down{display:none!important}}.brz-ed .brz-invisible-xs-up{visibility:hidden!important}
2375
- @media (max-width:479px){.brz-ed .brz-invisible-xs-down{visibility:hidden!important}}.brz-ed .brz-invisible-blur-xs-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}
2376
- @media (max-width:479px){.brz-ed .brz-invisible-blur-xs-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:480px){.brz-ed .brz-hidden-ms-up{display:none!important}}@media (max-width:767px){.brz-ed .brz-hidden-ms-down{display:none!important}}@media (min-width:480px){.brz-ed .brz-invisible-ms-up{visibility:hidden!important}}@media (max-width:767px){.brz-ed .brz-invisible-ms-down{visibility:hidden!important}}@media (min-width:480px){.brz-ed .brz-invisible-blur-ms-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:767px){.brz-ed .brz-invisible-blur-ms-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:768px){.brz-ed .brz-hidden-sm-up{display:none!important}}@media (max-width:991px){.brz-ed .brz-hidden-sm-down{display:none!important}}@media (min-width:768px){.brz-ed .brz-invisible-sm-up{visibility:hidden!important}}@media (max-width:991px){.brz-ed .brz-invisible-sm-down{visibility:hidden!important}}@media (min-width:768px){.brz-ed .brz-invisible-blur-sm-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:991px){.brz-ed .brz-invisible-blur-sm-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:992px){.brz-ed .brz-hidden-md-up{display:none!important}}@media (max-width:1199px){.brz-ed .brz-hidden-md-down{display:none!important}}@media (min-width:992px){.brz-ed .brz-invisible-md-up{visibility:hidden!important}}@media (max-width:1199px){.brz-ed .brz-invisible-md-down{visibility:hidden!important}}@media (min-width:992px){.brz-ed .brz-invisible-blur-md-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:1199px){.brz-ed .brz-invisible-blur-md-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:1200px){.brz-ed .brz-hidden-lg-up{display:none!important}}@media (max-width:1399px){.brz-ed .brz-hidden-lg-down{display:none!important}}@media (min-width:1200px){.brz-ed .brz-invisible-lg-up{visibility:hidden!important}}@media (max-width:1399px){.brz-ed .brz-invisible-lg-down{visibility:hidden!important}}@media (min-width:1200px){.brz-ed .brz-invisible-blur-lg-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (max-width:1399px){.brz-ed .brz-invisible-blur-lg-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}@media (min-width:1400px){.brz-ed .brz-hidden-xl-up{display:none!important}}.brz-ed .brz-hidden-xl-down{display:none!important}
2377
- @media (min-width:1400px){.brz-ed .brz-invisible-xl-up{visibility:hidden!important}}.brz-ed .brz-invisible-xl-down{visibility:hidden!important}
2378
- @media (min-width:1400px){.brz-ed .brz-invisible-blur-xl-up .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}}.brz-ed .brz-invisible-blur-xl-down .brz-bg-content{-webkit-filter:blur(3px);filter:blur(3px);opacity:.9}
2379
- .brz-ed .brz-hidden{display:none!important}
2380
- .brz-ed .brz-visible-print-block{display:none!important}
2381
- @media print{.brz-ed .brz-visible-print-block{display:block!important}}.brz-ed .brz-visible-print-inline{display:none!important}
2382
- @media print{.brz-ed .brz-visible-print-inline{display:inline!important}}.brz-ed .brz-visible-print-inline-block{display:none!important}
2383
- @media print{.brz-ed .brz-visible-print-inline-block{display:inline-block!important}}@media print{.brz-ed .brz-hidden-print{display:none!important}}.brz-ed .brz-ow-hidden{overflow:hidden!important}
2384
- .brz-ed .brz-ow-visible{overflow:visible!important}
2385
- .brz-ed .brz-pointer-events-none{pointer-events:none!important}
2386
- .brz-ed .brz-pointer-events-auto{pointer-events:auto!important}
2387
- .brz-ed .brz-fw-100{font-weight:100!important}
2388
- .brz-ed .brz-fw-200{font-weight:200!important}
2389
- .brz-ed .brz-fw-300{font-weight:300!important}
2390
- .brz-ed .brz-fw-400{font-weight:400!important}
2391
- .brz-ed .brz-fw-500{font-weight:500!important}
2392
- .brz-ed .brz-fw-600{font-weight:600!important}
2393
- .brz-ed .brz-fw-700{font-weight:700!important}
2394
- .brz-ed .brz-fw-800{font-weight:800!important}
2395
- .brz-ed .brz-fw-900{font-weight:900!important}
2396
- .brz-ed .brz--required{color:#ff0e0e;padding-left:5px}
2397
- .brz-ed.disable-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
2398
- .brz-ed .brz-ed-popup-image-inner{position:relative;color:#fff;display:inline-block;font-size:0}
2399
- .brz-ed .brz-ed-popup-image-label{margin-bottom:0}
2400
- .brz-ed .brz-ed-popup-image-remove{position:absolute;z-index:2;top:-10px;right:-10px;width:22px;height:22px;font-size:8px;background-color:#34beec;border-radius:50%;-webkit-transition:background .2s linear;transition:background .2s linear;text-align:center;cursor:pointer}
2401
- .brz-ed .brz-ed-popup-image-remove:hover{background-color:#03080f;-webkit-transition:background .2s linear;transition:background .2s linear}
2402
- .brz-ed .brz-ed-popup-image-remove i{line-height:2.75}
2403
- .brz-ed .brz-ed-popup-image-upload{position:absolute;top:4px;left:4px;right:4px;bottom:4px;background:#fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIwIDIwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTE5LDIwSDFjLTAuNTUyLDAtMS0wLjQ0OC0xLTFWMy44OTNjMC0wLjU1MiwwLjQ0OC0wLjksMS0wLjlMMy42ODUsM0M0LjEsMyw0LjQ3MiwyLjYzNiw0LjYyLDIuMjQ4bDAuNTgtMUM1LjIsMS4yNDksNS41NiwwLDYuMjUsMGg3LjVjMC42OSwwLDEuMTUsMS4yNDksMS4xNSwxLjI0OWwwLjQ4LDFjMC4xNDcsMC4zODgsMC41MiwwLjc0NSwwLjkzNSwwLjc0NUgxOWMwLjU1MiwwLDEsMC4zNDgsMSwwLjlWMTlDMjAsMTkuNTUyLDE5LjU1MiwyMCwxOSwyMHogTTE5LDQuNTg2Yy0wLjAwNC0wLjMyOC0wLjI3Mi0wLjU5Mi0wLjYtMC41OTJoLTMuMzk5Yy0wLjE0My0wLjE0My0wLjExNy0wLjIwMi0wLjg4MS0xLjg0N2MwLDAtMC40NDgtMS4xNDctMS0xLjE0N0g3LjExOGMtMC41NTIsMC0xLDEuMTQ3LTEsMS4xNDdDNS4wNTEsMy45MTMsNS4wOCwzLjg2NCw1LDMuOTk0SDEuNjUxYy0wLjMzMSwwLTAuNiwwLjI2OS0wLjYsMC42VjE4LjRjMCwwLjMzMSwwLjI2OSwwLjYsMC42LDAuNkgxOC40YzAuMzMxLDAsMC42LTAuMjY5LDAuNi0wLjZMMTksNC41ODZ6IE0xMi4wMiwxNS42MDNjLTQuMjg3LDEuNjk2LTguMzE5LTIuMzM1LTYuNjI0LTYuNjIyYzAuNDYzLTEuMTcyLDEuNDE0LTIuMTIyLDIuNTg2LTIuNTg2YzQuMjg3LTEuNjk1LDguMzE4LDIuMzM4LDYuNjIyLDYuNjI0QzE0LjE0LDE0LjE5LDEzLjE5LDE1LjE0LDEyLjAyLDE1LjYwM3ogTTEwLjYzMiw3LjA0OWMtMi43MDMtMC40MTQtNC45OTcsMS44OC00LjU4NCw0LjU4NGMwLjI1OCwxLjY4NSwxLjYzNSwzLjA2MSwzLjMxOSwzLjMxOWMyLjcwMywwLjQxNCw0Ljk5Ny0xLjg4LDQuNTg0LTQuNTg0QzEzLjY5NCw4LjY4MywxMi4zMTcsNy4zMDYsMTAuNjMyLDcuMDQ5eiIvPjwvc3ZnPg==) no-repeat 50% 50%;background-size:25px}
2404
- .brz-ed .brz-ed-loading{position:relative;padding:4px;border:2px dashed #ccc;width:117px;height:117px;cursor:pointer;-webkit-transition:all .2s linear;transition:all .2s linear}
2405
- .brz-ed .brz-ed-loading:before{content:'Change Image';font:bold 10px nunito,"Open Sans",Arial,sans-serif;color:#fff;line-height:117px;text-transform:uppercase;position:absolute;z-index:1;top:-2px;left:-2px;width:117px;height:117px;background-color:rgba(0,0,0,.8);text-align:center;visibility:hidden;opacity:0;-webkit-transition:opacity .2s linear,visibility .2s linear;transition:opacity .2s linear,visibility .2s linear}
2406
- .brz-ed .brz-ed-loading:hover{border-color:transparent}
2407
- .brz-ed .brz-ed-loading:hover:before{visibility:visible;opacity:1;-webkit-transition:opacity .2s linear,visibility .2s linear;transition:opacity .2s linear,visibility .2s linear}
2408
- .brz-ed .brz-p-events--none{pointer-events:none!important}
2409
- .brz-ed.brz-ed--desktop .brz-fs-lg-6{font-size:6px!important}
2410
- .brz-ed.brz-ed--desktop .brz-fs-lg-7{font-size:7px!important}
2411
- .brz-ed.brz-ed--desktop .brz-fs-lg-8{font-size:8px!important}
2412
- .brz-ed.brz-ed--desktop .brz-fs-lg-9{font-size:9px!important}
2413
- .brz-ed.brz-ed--desktop .brz-fs-lg-10{font-size:10px!important}
2414
- .brz-ed.brz-ed--desktop .brz-fs-lg-11{font-size:11px!important}
2415
- .brz-ed.brz-ed--desktop .brz-fs-lg-12{font-size:12px!important}
2416
- .brz-ed.brz-ed--desktop .brz-fs-lg-13{font-size:13px!important}
2417
- .brz-ed.brz-ed--desktop .brz-fs-lg-14{font-size:14px!important}
2418
- .brz-ed.brz-ed--desktop .brz-fs-lg-15{font-size:15px!important}
2419
- .brz-ed.brz-ed--desktop .brz-fs-lg-16{font-size:16px!important}
2420
- .brz-ed.brz-ed--desktop .brz-fs-lg-17{font-size:17px!important}
2421
- .brz-ed.brz-ed--desktop .brz-fs-lg-18{font-size:18px!important}
2422
- .brz-ed.brz-ed--desktop .brz-fs-lg-19{font-size:19px!important}
2423
- .brz-ed.brz-ed--desktop .brz-fs-lg-20{font-size:20px!important}
2424
- .brz-ed.brz-ed--desktop .brz-fs-lg-21{font-size:21px!important}
2425
- .brz-ed.brz-ed--desktop .brz-fs-lg-22{font-size:22px!important}
2426
- .brz-ed.brz-ed--desktop .brz-fs-lg-23{font-size:23px!important}
2427
- .brz-ed.brz-ed--desktop .brz-fs-lg-24{font-size:24px!important}
2428
- .brz-ed.brz-ed--desktop .brz-fs-lg-25{font-size:25px!important}
2429
- .brz-ed.brz-ed--desktop .brz-fs-lg-26{font-size:26px!important}
2430
- .brz-ed.brz-ed--desktop .brz-fs-lg-27{font-size:27px!important}
2431
- .brz-ed.brz-ed--desktop .brz-fs-lg-28{font-size:28px!important}
2432
- .brz-ed.brz-ed--desktop .brz-fs-lg-29{font-size:29px!important}
2433
- .brz-ed.brz-ed--desktop .brz-fs-lg-30{font-size:30px!important}
2434
- .brz-ed.brz-ed--desktop .brz-fs-lg-31{font-size:31px!important}
2435
- .brz-ed.brz-ed--desktop .brz-fs-lg-32{font-size:32px!important}
2436
- .brz-ed.brz-ed--desktop .brz-fs-lg-33{font-size:33px!important}
2437
- .brz-ed.brz-ed--desktop .brz-fs-lg-34{font-size:34px!important}
2438
- .brz-ed.brz-ed--desktop .brz-fs-lg-35{font-size:35px!important}
2439
- .brz-ed.brz-ed--desktop .brz-fs-lg-36{font-size:36px!important}
2440
- .brz-ed.brz-ed--desktop .brz-fs-lg-37{font-size:37px!important}
2441
- .brz-ed.brz-ed--desktop .brz-fs-lg-38{font-size:38px!important}
2442
- .brz-ed.brz-ed--desktop .brz-fs-lg-39{font-size:39px!important}
2443
- .brz-ed.brz-ed--desktop .brz-fs-lg-40{font-size:40px!important}
2444
- .brz-ed.brz-ed--desktop .brz-fs-lg-41{font-size:41px!important}
2445
- .brz-ed.brz-ed--desktop .brz-fs-lg-42{font-size:42px!important}
2446
- .brz-ed.brz-ed--desktop .brz-fs-lg-43{font-size:43px!important}
2447
- .brz-ed.brz-ed--desktop .brz-fs-lg-44{font-size:44px!important}
2448
- .brz-ed.brz-ed--desktop .brz-fs-lg-45{font-size:45px!important}
2449
- .brz-ed.brz-ed--desktop .brz-fs-lg-46{font-size:46px!important}
2450
- .brz-ed.brz-ed--desktop .brz-fs-lg-47{font-size:47px!important}
2451
- .brz-ed.brz-ed--desktop .brz-fs-lg-48{font-size:48px!important}
2452
- .brz-ed.brz-ed--desktop .brz-fs-lg-49{font-size:49px!important}
2453
- .brz-ed.brz-ed--desktop .brz-fs-lg-50{font-size:50px!important}
2454
- .brz-ed.brz-ed--desktop .brz-fs-lg-51{font-size:51px!important}
2455
- .brz-ed.brz-ed--desktop .brz-fs-lg-52{font-size:52px!important}
2456
- .brz-ed.brz-ed--desktop .brz-fs-lg-53{font-size:53px!important}
2457
- .brz-ed.brz-ed--desktop .brz-fs-lg-54{font-size:54px!important}
2458
- .brz-ed.brz-ed--desktop .brz-fs-lg-55{font-size:55px!important}
2459
- .brz-ed.brz-ed--desktop .brz-fs-lg-56{font-size:56px!important}
2460
- .brz-ed.brz-ed--desktop .brz-fs-lg-57{font-size:57px!important}
2461
- .brz-ed.brz-ed--desktop .brz-fs-lg-58{font-size:58px!important}
2462
- .brz-ed.brz-ed--desktop .brz-fs-lg-59{font-size:59px!important}
2463
- .brz-ed.brz-ed--desktop .brz-fs-lg-60{font-size:60px!important}
2464
- .brz-ed.brz-ed--desktop .brz-fs-lg-61{font-size:61px!important}
2465
- .brz-ed.brz-ed--desktop .brz-fs-lg-62{font-size:62px!important}
2466
- .brz-ed.brz-ed--desktop .brz-fs-lg-63{font-size:63px!important}
2467
- .brz-ed.brz-ed--desktop .brz-fs-lg-64{font-size:64px!important}
2468
- .brz-ed.brz-ed--desktop .brz-fs-lg-65{font-size:65px!important}
2469
- .brz-ed.brz-ed--desktop .brz-fs-lg-66{font-size:66px!important}
2470
- .brz-ed.brz-ed--desktop .brz-fs-lg-67{font-size:67px!important}
2471
- .brz-ed.brz-ed--desktop .brz-fs-lg-68{font-size:68px!important}
2472
- .brz-ed.brz-ed--desktop .brz-fs-lg-69{font-size:69px!important}
2473
- .brz-ed.brz-ed--desktop .brz-fs-lg-70{font-size:70px!important}
2474
- .brz-ed.brz-ed--desktop .brz-fs-lg-71{font-size:71px!important}
2475
- .brz-ed.brz-ed--desktop .brz-fs-lg-72{font-size:72px!important}
2476
- .brz-ed.brz-ed--desktop .brz-fs-lg-73{font-size:73px!important}
2477
- .brz-ed.brz-ed--desktop .brz-fs-lg-74{font-size:74px!important}
2478
- .brz-ed.brz-ed--desktop .brz-fs-lg-75{font-size:75px!important}
2479
- .brz-ed.brz-ed--desktop .brz-fs-lg-76{font-size:76px!important}
2480
- .brz-ed.brz-ed--desktop .brz-fs-lg-77{font-size:77px!important}
2481
- .brz-ed.brz-ed--desktop .brz-fs-lg-78{font-size:78px!important}
2482
- .brz-ed.brz-ed--desktop .brz-fs-lg-79{font-size:79px!important}
2483
- .brz-ed.brz-ed--desktop .brz-fs-lg-80{font-size:80px!important}
2484
- .brz-ed.brz-ed--desktop .brz-fs-lg-81{font-size:81px!important}
2485
- .brz-ed.brz-ed--desktop .brz-fs-lg-82{font-size:82px!important}
2486
- .brz-ed.brz-ed--desktop .brz-fs-lg-83{font-size:83px!important}
2487
- .brz-ed.brz-ed--desktop .brz-fs-lg-84{font-size:84px!important}
2488
- .brz-ed.brz-ed--desktop .brz-fs-lg-85{font-size:85px!important}
2489
- .brz-ed.brz-ed--desktop .brz-fs-lg-86{font-size:86px!important}
2490
- .brz-ed.brz-ed--desktop .brz-fs-lg-87{font-size:87px!important}
2491
- .brz-ed.brz-ed--desktop .brz-fs-lg-88{font-size:88px!important}
2492
- .brz-ed.brz-ed--desktop .brz-fs-lg-89{font-size:89px!important}
2493
- .brz-ed.brz-ed--desktop .brz-fs-lg-90{font-size:90px!important}
2494
- .brz-ed.brz-ed--desktop .brz-fs-lg-91{font-size:91px!important}
2495
- .brz-ed.brz-ed--desktop .brz-fs-lg-92{font-size:92px!important}
2496
- .brz-ed.brz-ed--desktop .brz-fs-lg-93{font-size:93px!important}
2497
- .brz-ed.brz-ed--desktop .brz-fs-lg-94{font-size:94px!important}
2498
- .brz-ed.brz-ed--desktop .brz-fs-lg-95{font-size:95px!important}
2499
- .brz-ed.brz-ed--desktop .brz-fs-lg-96{font-size:96px!important}
2500
- .brz-ed.brz-ed--desktop .brz-fs-lg-97{font-size:97px!important}
2501
- .brz-ed.brz-ed--desktop .brz-fs-lg-98{font-size:98px!important}
2502
- .brz-ed.brz-ed--desktop .brz-fs-lg-99{font-size:99px!important}
2503
- .brz-ed.brz-ed--desktop .brz-fs-lg-100{font-size:100px!important}
2504
- .brz-ed.brz-ed--desktop .brz-fs-lg-101{font-size:101px!important}
2505
- .brz-ed.brz-ed--desktop .brz-fs-lg-102{font-size:102px!important}
2506
- .brz-ed.brz-ed--desktop .brz-fs-lg-103{font-size:103px!important}
2507
- .brz-ed.brz-ed--desktop .brz-fs-lg-104{font-size:104px!important}
2508
- .brz-ed.brz-ed--desktop .brz-fs-lg-105{font-size:105px!important}
2509
- .brz-ed.brz-ed--desktop .brz-fs-lg-106{font-size:106px!important}
2510
- .brz-ed.brz-ed--desktop .brz-fs-lg-107{font-size:107px!important}
2511
- .brz-ed.brz-ed--desktop .brz-fs-lg-108{font-size:108px!important}
2512
- .brz-ed.brz-ed--desktop .brz-fs-lg-109{font-size:109px!important}
2513
- .brz-ed.brz-ed--desktop .brz-fs-lg-110{font-size:110px!important}
2514
- .brz-ed.brz-ed--desktop .brz-fs-lg-111{font-size:111px!important}
2515
- .brz-ed.brz-ed--desktop .brz-fs-lg-112{font-size:112px!important}
2516
- .brz-ed.brz-ed--desktop .brz-fs-lg-113{font-size:113px!important}
2517
- .brz-ed.brz-ed--desktop .brz-fs-lg-114{font-size:114px!important}
2518
- .brz-ed.brz-ed--desktop .brz-fs-lg-115{font-size:115px!important}
2519
- .brz-ed.brz-ed--desktop .brz-fs-lg-116{font-size:116px!important}
2520
- .brz-ed.brz-ed--desktop .brz-fs-lg-117{font-size:117px!important}
2521
- .brz-ed.brz-ed--desktop .brz-fs-lg-118{font-size:118px!important}
2522
- .brz-ed.brz-ed--desktop .brz-fs-lg-119{font-size:119px!important}
2523
- .brz-ed.brz-ed--desktop .brz-fs-lg-120{font-size:120px!important}
2524
- .brz-ed.brz-ed--desktop .brz-fs-lg-121{font-size:121px!important}
2525
- .brz-ed.brz-ed--desktop .brz-fs-lg-122{font-size:122px!important}
2526
- .brz-ed.brz-ed--desktop .brz-fs-lg-123{font-size:123px!important}
2527
- .brz-ed.brz-ed--desktop .brz-fs-lg-124{font-size:124px!important}
2528
- .brz-ed.brz-ed--desktop .brz-fs-lg-125{font-size:125px!important}
2529
- .brz-ed.brz-ed--desktop .brz-fs-lg-126{font-size:126px!important}
2530
- .brz-ed.brz-ed--desktop .brz-fs-lg-127{font-size:127px!important}
2531
- .brz-ed.brz-ed--desktop .brz-fs-lg-128{font-size:128px!important}
2532
- .brz-ed.brz-ed--desktop .brz-fs-lg-129{font-size:129px!important}
2533
- .brz-ed.brz-ed--desktop .brz-fs-lg-130{font-size:130px!important}
2534
- .brz-ed.brz-ed--desktop .brz-fs-lg-131{font-size:131px!important}
2535
- .brz-ed.brz-ed--desktop .brz-fs-lg-132{font-size:132px!important}
2536
- .brz-ed.brz-ed--desktop .brz-fs-lg-133{font-size:133px!important}
2537
- .brz-ed.brz-ed--desktop .brz-fs-lg-134{font-size:134px!important}
2538
- .brz-ed.brz-ed--desktop .brz-fs-lg-135{font-size:135px!important}
2539
- .brz-ed.brz-ed--desktop .brz-fs-lg-136{font-size:136px!important}
2540
- .brz-ed.brz-ed--desktop .brz-fs-lg-137{font-size:137px!important}
2541
- .brz-ed.brz-ed--desktop .brz-fs-lg-138{font-size:138px!important}
2542
- .brz-ed.brz-ed--desktop .brz-fs-lg-139{font-size:139px!important}
2543
- .brz-ed.brz-ed--desktop .brz-fs-lg-140{font-size:140px!important}
2544
- .brz-ed.brz-ed--desktop .brz-fs-lg-141{font-size:141px!important}
2545
- .brz-ed.brz-ed--desktop .brz-fs-lg-142{font-size:142px!important}
2546
- .brz-ed.brz-ed--desktop .brz-fs-lg-143{font-size:143px!important}
2547
- .brz-ed.brz-ed--desktop .brz-fs-lg-144{font-size:144px!important}
2548
- .brz-ed.brz-ed--desktop .brz-fs-lg-145{font-size:145px!important}
2549
- .brz-ed.brz-ed--desktop .brz-fs-lg-146{font-size:146px!important}
2550
- .brz-ed.brz-ed--desktop .brz-fs-lg-147{font-size:147px!important}
2551
- .brz-ed.brz-ed--desktop .brz-fs-lg-148{font-size:148px!important}
2552
- .brz-ed.brz-ed--desktop .brz-fs-lg-149{font-size:149px!important}
2553
- .brz-ed.brz-ed--desktop .brz-fs-lg-150{font-size:150px!important}
2554
- .brz-ed.brz-ed--desktop .brz-fs-lg-151{font-size:151px!important}
2555
- .brz-ed.brz-ed--desktop .brz-fs-lg-152{font-size:152px!important}
2556
- .brz-ed.brz-ed--desktop .brz-fs-lg-153{font-size:153px!important}
2557
- .brz-ed.brz-ed--desktop .brz-fs-lg-154{font-size:154px!important}
2558
- .brz-ed.brz-ed--desktop .brz-fs-lg-155{font-size:155px!important}
2559
- .brz-ed.brz-ed--desktop .brz-fs-lg-156{font-size:156px!important}
2560
- .brz-ed.brz-ed--desktop .brz-fs-lg-157{font-size:157px!important}
2561
- .brz-ed.brz-ed--desktop .brz-fs-lg-158{font-size:158px!important}
2562
- .brz-ed.brz-ed--desktop .brz-fs-lg-159{font-size:159px!important}
2563
- .brz-ed.brz-ed--desktop .brz-fs-lg-160{font-size:160px!important}
2564
- .brz-ed.brz-ed--desktop .brz-fs-lg-161{font-size:161px!important}
2565
- .brz-ed.brz-ed--desktop .brz-fs-lg-162{font-size:162px!important}
2566
- .brz-ed.brz-ed--desktop .brz-fs-lg-163{font-size:163px!important}
2567
- .brz-ed.brz-ed--desktop .brz-fs-lg-164{font-size:164px!important}
2568
- .brz-ed.brz-ed--desktop .brz-fs-lg-165{font-size:165px!important}
2569
- .brz-ed.brz-ed--desktop .brz-fs-lg-166{font-size:166px!important}
2570
- .brz-ed.brz-ed--desktop .brz-fs-lg-167{font-size:167px!important}
2571
- .brz-ed.brz-ed--desktop .brz-fs-lg-168{font-size:168px!important}
2572
- .brz-ed.brz-ed--desktop .brz-fs-lg-169{font-size:169px!important}
2573
- .brz-ed.brz-ed--desktop .brz-fs-lg-170{font-size:170px!important}
2574
- .brz-ed.brz-ed--desktop .brz-fs-lg-171{font-size:171px!important}
2575
- .brz-ed.brz-ed--desktop .brz-fs-lg-172{font-size:172px!important}
2576
- .brz-ed.brz-ed--desktop .brz-fs-lg-173{font-size:173px!important}
2577
- .brz-ed.brz-ed--desktop .brz-fs-lg-174{font-size:174px!important}
2578
- .brz-ed.brz-ed--desktop .brz-fs-lg-175{font-size:175px!important}
2579
- .brz-ed.brz-ed--desktop .brz-fs-lg-176{font-size:176px!important}
2580
- .brz-ed.brz-ed--desktop .brz-fs-lg-177{font-size:177px!important}
2581
- .brz-ed.brz-ed--desktop .brz-fs-lg-178{font-size:178px!important}
2582
- .brz-ed.brz-ed--desktop .brz-fs-lg-179{font-size:179px!important}
2583
- .brz-ed.brz-ed--desktop .brz-fs-lg-180{font-size:180px!important}
2584
- .brz-ed.brz-ed--desktop .brz-fs-lg-181{font-size:181px!important}
2585
- .brz-ed.brz-ed--desktop .brz-fs-lg-182{font-size:182px!important}
2586
- .brz-ed.brz-ed--desktop .brz-fs-lg-183{font-size:183px!important}
2587
- .brz-ed.brz-ed--desktop .brz-fs-lg-184{font-size:184px!important}
2588
- .brz-ed.brz-ed--desktop .brz-fs-lg-185{font-size:185px!important}
2589
- .brz-ed.brz-ed--desktop .brz-fs-lg-186{font-size:186px!important}
2590
- .brz-ed.brz-ed--desktop .brz-fs-lg-187{font-size:187px!important}
2591
- .brz-ed.brz-ed--desktop .brz-fs-lg-188{font-size:188px!important}
2592
- .brz-ed.brz-ed--desktop .brz-fs-lg-189{font-size:189px!important}
2593
- .brz-ed.brz-ed--desktop .brz-fs-lg-190{font-size:190px!important}
2594
- .brz-ed.brz-ed--desktop .brz-fs-lg-191{font-size:191px!important}
2595
- .brz-ed.brz-ed--desktop .brz-fs-lg-192{font-size:192px!important}
2596
- .brz-ed.brz-ed--desktop .brz-fs-lg-193{font-size:193px!important}
2597
- .brz-ed.brz-ed--desktop .brz-fs-lg-194{font-size:194px!important}
2598
- .brz-ed.brz-ed--desktop .brz-fs-lg-195{font-size:195px!important}
2599
- .brz-ed.brz-ed--desktop .brz-fs-lg-196{font-size:196px!important}
2600
- .brz-ed.brz-ed--desktop .brz-fs-lg-197{font-size:197px!important}
2601
- .brz-ed.brz-ed--desktop .brz-fs-lg-198{font-size:198px!important}
2602
- .brz-ed.brz-ed--desktop .brz-fs-lg-199{font-size:199px!important}
2603
- .brz-ed.brz-ed--desktop .brz-fs-lg-200{font-size:200px!important}
2604
- .brz-ed.brz-ed--desktop .brz-fs-lg-201{font-size:201px!important}
2605
- .brz-ed.brz-ed--desktop .brz-fs-lg-202{font-size:202px!important}
2606
- .brz-ed.brz-ed--desktop .brz-fs-lg-203{font-size:203px!important}
2607
- .brz-ed.brz-ed--desktop .brz-fs-lg-204{font-size:204px!important}
2608
- .brz-ed.brz-ed--desktop .brz-fs-lg-205{font-size:205px!important}
2609
- .brz-ed.brz-ed--desktop .brz-fs-lg-206{font-size:206px!important}
2610
- .brz-ed.brz-ed--desktop .brz-fs-lg-207{font-size:207px!important}
2611
- .brz-ed.brz-ed--desktop .brz-fs-lg-208{font-size:208px!important}
2612
- .brz-ed.brz-ed--desktop .brz-fs-lg-209{font-size:209px!important}
2613
- .brz-ed.brz-ed--desktop .brz-fs-lg-210{font-size:210px!important}
2614
- .brz-ed.brz-ed--desktop .brz-fs-lg-211{font-size:211px!important}
2615
- .brz-ed.brz-ed--desktop .brz-fs-lg-212{font-size:212px!important}
2616
- .brz-ed.brz-ed--desktop .brz-fs-lg-213{font-size:213px!important}
2617
- .brz-ed.brz-ed--desktop .brz-fs-lg-214{font-size:214px!important}
2618
- .brz-ed.brz-ed--desktop .brz-fs-lg-215{font-size:215px!important}
2619
- .brz-ed.brz-ed--desktop .brz-fs-lg-216{font-size:216px!important}
2620
- .brz-ed.brz-ed--desktop .brz-fs-lg-217{font-size:217px!important}
2621
- .brz-ed.brz-ed--desktop .brz-fs-lg-218{font-size:218px!important}
2622
- .brz-ed.brz-ed--desktop .brz-fs-lg-219{font-size:219px!important}
2623
- .brz-ed.brz-ed--desktop .brz-fs-lg-220{font-size:220px!important}
2624
- .brz-ed.brz-ed--desktop .brz-fs-lg-221{font-size:221px!important}
2625
- .brz-ed.brz-ed--desktop .brz-fs-lg-222{font-size:222px!important}
2626
- .brz-ed.brz-ed--desktop .brz-fs-lg-223{font-size:223px!important}
2627
- .brz-ed.brz-ed--desktop .brz-fs-lg-224{font-size:224px!important}
2628
- .brz-ed.brz-ed--desktop .brz-fs-lg-225{font-size:225px!important}
2629
- .brz-ed.brz-ed--desktop .brz-fs-lg-226{font-size:226px!important}
2630
- .brz-ed.brz-ed--desktop .brz-fs-lg-227{font-size:227px!important}
2631
- .brz-ed.brz-ed--desktop .brz-fs-lg-228{font-size:228px!important}
2632
- .brz-ed.brz-ed--desktop .brz-fs-lg-229{font-size:229px!important}
2633
- .brz-ed.brz-ed--desktop .brz-fs-lg-230{font-size:230px!important}
2634
- .brz-ed.brz-ed--desktop .brz-fs-lg-231{font-size:231px!important}
2635
- .brz-ed.brz-ed--desktop .brz-fs-lg-232{font-size:232px!important}
2636
- .brz-ed.brz-ed--desktop .brz-fs-lg-233{font-size:233px!important}
2637
- .brz-ed.brz-ed--desktop .brz-fs-lg-234{font-size:234px!important}
2638
- .brz-ed.brz-ed--desktop .brz-fs-lg-235{font-size:235px!important}
2639
- .brz-ed.brz-ed--desktop .brz-fs-lg-236{font-size:236px!important}
2640
- .brz-ed.brz-ed--desktop .brz-fs-lg-237{font-size:237px!important}
2641
- .brz-ed.brz-ed--desktop .brz-fs-lg-238{font-size:238px!important}
2642
- .brz-ed.brz-ed--desktop .brz-fs-lg-239{font-size:239px!important}
2643
- .brz-ed.brz-ed--desktop .brz-fs-lg-240{font-size:240px!important}
2644
- .brz-ed.brz-ed--desktop .brz-fs-lg-241{font-size:241px!important}
2645
- .brz-ed.brz-ed--desktop .brz-fs-lg-242{font-size:242px!important}
2646
- .brz-ed.brz-ed--desktop .brz-fs-lg-243{font-size:243px!important}
2647
- .brz-ed.brz-ed--desktop .brz-fs-lg-244{font-size:244px!important}
2648
- .brz-ed.brz-ed--desktop .brz-fs-lg-245{font-size:245px!important}
2649
- .brz-ed.brz-ed--desktop .brz-fs-lg-246{font-size:246px!important}
2650
- .brz-ed.brz-ed--desktop .brz-fs-lg-247{font-size:247px!important}
2651
- .brz-ed.brz-ed--desktop .brz-fs-lg-248{font-size:248px!important}
2652
- .brz-ed.brz-ed--desktop .brz-fs-lg-249{font-size:249px!important}
2653
- .brz-ed.brz-ed--desktop .brz-fs-lg-250{font-size:250px!important}
2654
- .brz-ed.brz-ed--desktop .brz-fs-lg-251{font-size:251px!important}
2655
- .brz-ed.brz-ed--desktop .brz-fs-lg-252{font-size:252px!important}
2656
- .brz-ed.brz-ed--desktop .brz-fs-lg-253{font-size:253px!important}
2657
- .brz-ed.brz-ed--desktop .brz-fs-lg-254{font-size:254px!important}
2658
- .brz-ed.brz-ed--desktop .brz-fs-lg-255{font-size:255px!important}
2659
- .brz-ed.brz-ed--desktop .brz-fs-lg-256{font-size:256px!important}
2660
- .brz-ed.brz-ed--desktop .brz-fs-lg-257{font-size:257px!important}
2661
- .brz-ed.brz-ed--desktop .brz-fs-lg-258{font-size:258px!important}
2662
- .brz-ed.brz-ed--desktop .brz-fs-lg-259{font-size:259px!important}
2663
- .brz-ed.brz-ed--desktop .brz-fs-lg-260{font-size:260px!important}
2664
- .brz-ed.brz-ed--desktop .brz-fs-lg-261{font-size:261px!important}
2665
- .brz-ed.brz-ed--desktop .brz-fs-lg-262{font-size:262px!important}
2666
- .brz-ed.brz-ed--desktop .brz-fs-lg-263{font-size:263px!important}
2667
- .brz-ed.brz-ed--desktop .brz-fs-lg-264{font-size:264px!important}
2668
- .brz-ed.brz-ed--desktop .brz-fs-lg-265{font-size:265px!important}
2669
- .brz-ed.brz-ed--desktop .brz-fs-lg-266{font-size:266px!important}
2670
- .brz-ed.brz-ed--desktop .brz-fs-lg-267{font-size:267px!important}
2671
- .brz-ed.brz-ed--desktop .brz-fs-lg-268{font-size:268px!important}
2672
- .brz-ed.brz-ed--desktop .brz-fs-lg-269{font-size:269px!important}
2673
- .brz-ed.brz-ed--desktop .brz-fs-lg-270{font-size:270px!important}
2674
- .brz-ed.brz-ed--desktop .brz-fs-lg-271{font-size:271px!important}
2675
- .brz-ed.brz-ed--desktop .brz-fs-lg-272{font-size:272px!important}
2676
- .brz-ed.brz-ed--desktop .brz-fs-lg-273{font-size:273px!important}
2677
- .brz-ed.brz-ed--desktop .brz-fs-lg-274{font-size:274px!important}
2678
- .brz-ed.brz-ed--desktop .brz-fs-lg-275{font-size:275px!important}
2679
- .brz-ed.brz-ed--desktop .brz-fs-lg-276{font-size:276px!important}
2680
- .brz-ed.brz-ed--desktop .brz-fs-lg-277{font-size:277px!important}
2681
- .brz-ed.brz-ed--desktop .brz-fs-lg-278{font-size:278px!important}
2682
- .brz-ed.brz-ed--desktop .brz-fs-lg-279{font-size:279px!important}
2683
- .brz-ed.brz-ed--desktop .brz-fs-lg-280{font-size:280px!important}
2684
- .brz-ed.brz-ed--desktop .brz-fs-lg-281{font-size:281px!important}
2685
- .brz-ed.brz-ed--desktop .brz-fs-lg-282{font-size:282px!important}
2686
- .brz-ed.brz-ed--desktop .brz-fs-lg-283{font-size:283px!important}
2687
- .brz-ed.brz-ed--desktop .brz-fs-lg-284{font-size:284px!important}
2688
- .brz-ed.brz-ed--desktop .brz-fs-lg-285{font-size:285px!important}
2689
- .brz-ed.brz-ed--desktop .brz-fs-lg-286{font-size:286px!important}
2690
- .brz-ed.brz-ed--desktop .brz-fs-lg-287{font-size:287px!important}
2691
- .brz-ed.brz-ed--desktop .brz-fs-lg-288{font-size:288px!important}
2692
- .brz-ed.brz-ed--desktop .brz-fs-lg-289{font-size:289px!important}
2693
- .brz-ed.brz-ed--desktop .brz-fs-lg-290{font-size:290px!important}
2694
- .brz-ed.brz-ed--desktop .brz-fs-lg-291{font-size:291px!important}
2695
- .brz-ed.brz-ed--desktop .brz-fs-lg-292{font-size:292px!important}
2696
- .brz-ed.brz-ed--desktop .brz-fs-lg-293{font-size:293px!important}
2697
- .brz-ed.brz-ed--desktop .brz-fs-lg-294{font-size:294px!important}
2698
- .brz-ed.brz-ed--desktop .brz-fs-lg-295{font-size:295px!important}
2699
- .brz-ed.brz-ed--desktop .brz-fs-lg-296{font-size:296px!important}
2700
- .brz-ed.brz-ed--desktop .brz-fs-lg-297{font-size:297px!important}
2701
- .brz-ed.brz-ed--desktop .brz-fs-lg-298{font-size:298px!important}
2702
- .brz-ed.brz-ed--desktop .brz-fs-lg-299{font-size:299px!important}
2703
- .brz-ed.brz-ed--desktop .brz-fs-lg-300{font-size:300px!important}
2704
- .brz-ed.brz-ed--desktop .brz-lh-lg-1{line-height:1em!important}
2705
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_1{line-height:1.1em!important}
2706
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_2{line-height:1.2em!important}
2707
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_3{line-height:1.3em!important}
2708
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_4{line-height:1.4em!important}
2709
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_5{line-height:1.5em!important}
2710
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_6{line-height:1.6em!important}
2711
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_7{line-height:1.7em!important}
2712
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_8{line-height:1.8em!important}
2713
- .brz-ed.brz-ed--desktop .brz-lh-lg-1_9{line-height:1.9em!important}
2714
- .brz-ed.brz-ed--desktop .brz-lh-lg-2{line-height:2em!important}
2715
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_1{line-height:2.1em!important}
2716
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_2{line-height:2.2em!important}
2717
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_3{line-height:2.3em!important}
2718
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_4{line-height:2.4em!important}
2719
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_5{line-height:2.5em!important}
2720
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_6{line-height:2.6em!important}
2721
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_7{line-height:2.7em!important}
2722
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_8{line-height:2.8em!important}
2723
- .brz-ed.brz-ed--desktop .brz-lh-lg-2_9{line-height:2.9em!important}
2724
- .brz-ed.brz-ed--desktop .brz-lh-lg-3{line-height:3em!important}
2725
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_1{line-height:3.1em!important}
2726
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_2{line-height:3.2em!important}
2727
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_3{line-height:3.3em!important}
2728
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_4{line-height:3.4em!important}
2729
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_5{line-height:3.5em!important}
2730
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_6{line-height:3.6em!important}
2731
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_7{line-height:3.7em!important}
2732
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_8{line-height:3.8em!important}
2733
- .brz-ed.brz-ed--desktop .brz-lh-lg-3_9{line-height:3.9em!important}
2734
- .brz-ed.brz-ed--desktop .brz-lh-lg-4{line-height:4em!important}
2735
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_1{line-height:4.1em!important}
2736
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_2{line-height:4.2em!important}
2737
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_3{line-height:4.3em!important}
2738
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_4{line-height:4.4em!important}
2739
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_5{line-height:4.5em!important}
2740
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_6{line-height:4.6em!important}
2741
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_7{line-height:4.7em!important}
2742
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_8{line-height:4.8em!important}
2743
- .brz-ed.brz-ed--desktop .brz-lh-lg-4_9{line-height:4.9em!important}
2744
- .brz-ed.brz-ed--desktop .brz-lh-lg-5{line-height:5em!important}
2745
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_1{line-height:5.1em!important}
2746
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_2{line-height:5.2em!important}
2747
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_3{line-height:5.3em!important}
2748
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_4{line-height:5.4em!important}
2749
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_5{line-height:5.5em!important}
2750
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_6{line-height:5.6em!important}
2751
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_7{line-height:5.7em!important}
2752
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_8{line-height:5.8em!important}
2753
- .brz-ed.brz-ed--desktop .brz-lh-lg-5_9{line-height:5.9em!important}
2754
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_20{letter-spacing:-20px!important}
2755
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_20_5{letter-spacing:-20.5px!important}
2756
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_19{letter-spacing:-19px!important}
2757
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_19_5{letter-spacing:-19.5px!important}
2758
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_18{letter-spacing:-18px!important}
2759
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_18_5{letter-spacing:-18.5px!important}
2760
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_17{letter-spacing:-17px!important}
2761
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_17_5{letter-spacing:-17.5px!important}
2762
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_16{letter-spacing:-16px!important}
2763
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_16_5{letter-spacing:-16.5px!important}
2764
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_15{letter-spacing:-15px!important}
2765
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_15_5{letter-spacing:-15.5px!important}
2766
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_14{letter-spacing:-14px!important}
2767
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_14_5{letter-spacing:-14.5px!important}
2768
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_13{letter-spacing:-13px!important}
2769
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_13_5{letter-spacing:-13.5px!important}
2770
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_12{letter-spacing:-12px!important}
2771
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_12_5{letter-spacing:-12.5px!important}
2772
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_11{letter-spacing:-11px!important}
2773
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_11_5{letter-spacing:-11.5px!important}
2774
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_10{letter-spacing:-10px!important}
2775
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_10_5{letter-spacing:-10.5px!important}
2776
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_9{letter-spacing:-9px!important}
2777
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_9_5{letter-spacing:-9.5px!important}
2778
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_8{letter-spacing:-8px!important}
2779
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_8_5{letter-spacing:-8.5px!important}
2780
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_7{letter-spacing:-7px!important}
2781
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_7_5{letter-spacing:-7.5px!important}
2782
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_6{letter-spacing:-6px!important}
2783
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_6_5{letter-spacing:-6.5px!important}
2784
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_5{letter-spacing:-5px!important}
2785
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_5_5{letter-spacing:-5.5px!important}
2786
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_4{letter-spacing:-4px!important}
2787
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_4_5{letter-spacing:-4.5px!important}
2788
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_3{letter-spacing:-3px!important}
2789
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_3_5{letter-spacing:-3.5px!important}
2790
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_2{letter-spacing:-2px!important}
2791
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_2_5{letter-spacing:-2.5px!important}
2792
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_1{letter-spacing:-1px!important}
2793
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_1_5{letter-spacing:-1.5px!important}
2794
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_0{letter-spacing:0!important}
2795
- .brz-ed.brz-ed--desktop .brz-ls-lg-m_0_5{letter-spacing:-.5px!important}
2796
- .brz-ed.brz-ed--desktop .brz-ls-lg-0{letter-spacing:0!important}
2797
- .brz-ed.brz-ed--desktop .brz-ls-lg-0_5{letter-spacing:.5px!important}
2798
- .brz-ed.brz-ed--desktop .brz-ls-lg-1{letter-spacing:1px!important}
2799
- .brz-ed.brz-ed--desktop .brz-ls-lg-1_5{letter-spacing:1.5px!important}
2800
- .brz-ed.brz-ed--desktop .brz-ls-lg-2{letter-spacing:2px!important}
2801
- .brz-ed.brz-ed--desktop .brz-ls-lg-2_5{letter-spacing:2.5px!important}
2802
- .brz-ed.brz-ed--desktop .brz-ls-lg-3{letter-spacing:3px!important}
2803
- .brz-ed.brz-ed--desktop .brz-ls-lg-3_5{letter-spacing:3.5px!important}
2804
- .brz-ed.brz-ed--desktop .brz-ls-lg-4{letter-spacing:4px!important}
2805
- .brz-ed.brz-ed--desktop .brz-ls-lg-4_5{letter-spacing:4.5px!important}
2806
- .brz-ed.brz-ed--desktop .brz-ls-lg-5{letter-spacing:5px!important}
2807
- .brz-ed.brz-ed--desktop .brz-ls-lg-5_5{letter-spacing:5.5px!important}
2808
- .brz-ed.brz-ed--desktop .brz-ls-lg-6{letter-spacing:6px!important}
2809
- .brz-ed.brz-ed--desktop .brz-ls-lg-6_5{letter-spacing:6.5px!important}
2810
- .brz-ed.brz-ed--desktop .brz-ls-lg-7{letter-spacing:7px!important}
2811
- .brz-ed.brz-ed--desktop .brz-ls-lg-7_5{letter-spacing:7.5px!important}
2812
- .brz-ed.brz-ed--desktop .brz-ls-lg-8{letter-spacing:8px!important}
2813
- .brz-ed.brz-ed--desktop .brz-ls-lg-8_5{letter-spacing:8.5px!important}
2814
- .brz-ed.brz-ed--desktop .brz-ls-lg-9{letter-spacing:9px!important}
2815
- .brz-ed.brz-ed--desktop .brz-ls-lg-9_5{letter-spacing:9.5px!important}
2816
- .brz-ed.brz-ed--desktop .brz-ls-lg-10{letter-spacing:10px!important}
2817
- .brz-ed.brz-ed--desktop .brz-ls-lg-10_5{letter-spacing:10.5px!important}
2818
- .brz-ed.brz-ed--desktop .brz-ls-lg-11{letter-spacing:11px!important}
2819
- .brz-ed.brz-ed--desktop .brz-ls-lg-11_5{letter-spacing:11.5px!important}
2820
- .brz-ed.brz-ed--desktop .brz-ls-lg-12{letter-spacing:12px!important}
2821
- .brz-ed.brz-ed--desktop .brz-ls-lg-12_5{letter-spacing:12.5px!important}
2822
- .brz-ed.brz-ed--desktop .brz-ls-lg-13{letter-spacing:13px!important}
2823
- .brz-ed.brz-ed--desktop .brz-ls-lg-13_5{letter-spacing:13.5px!important}
2824
- .brz-ed.brz-ed--desktop .brz-ls-lg-14{letter-spacing:14px!important}
2825
- .brz-ed.brz-ed--desktop .brz-ls-lg-14_5{letter-spacing:14.5px!important}
2826
- .brz-ed.brz-ed--desktop .brz-ls-lg-15{letter-spacing:15px!important}
2827
- .brz-ed.brz-ed--desktop .brz-ls-lg-15_5{letter-spacing:15.5px!important}
2828
- .brz-ed.brz-ed--desktop .brz-ls-lg-16{letter-spacing:16px!important}
2829
- .brz-ed.brz-ed--desktop .brz-ls-lg-16_5{letter-spacing:16.5px!important}
2830
- .brz-ed.brz-ed--desktop .brz-ls-lg-17{letter-spacing:17px!important}
2831
- .brz-ed.brz-ed--desktop .brz-ls-lg-17_5{letter-spacing:17.5px!important}
2832
- .brz-ed.brz-ed--desktop .brz-ls-lg-18{letter-spacing:18px!important}
2833
- .brz-ed.brz-ed--desktop .brz-ls-lg-18_5{letter-spacing:18.5px!important}
2834
- .brz-ed.brz-ed--desktop .brz-ls-lg-19{letter-spacing:19px!important}
2835
- .brz-ed.brz-ed--desktop .brz-ls-lg-19_5{letter-spacing:19.5px!important}
2836
- .brz-ed.brz-ed--desktop .brz-ls-lg-20{letter-spacing:20px!important}
2837
- .brz-ed.brz-ed--desktop .brz-ls-lg-20_5{letter-spacing:20.5px!important}
2838
- .brz-ed.brz-ed--desktop .brz-fw-lg-100{font-weight:100!important}
2839
- .brz-ed.brz-ed--desktop .brz-fw-lg-200{font-weight:200!important}
2840
- .brz-ed.brz-ed--desktop .brz-fw-lg-300{font-weight:300!important}
2841
- .brz-ed.brz-ed--desktop .brz-fw-lg-400{font-weight:400!important}
2842
- .brz-ed.brz-ed--desktop .brz-fw-lg-500{font-weight:500!important}
2843
- .brz-ed.brz-ed--desktop .brz-fw-lg-600{font-weight:600!important}
2844
- .brz-ed.brz-ed--desktop .brz-fw-lg-700{font-weight:700!important}
2845
- .brz-ed.brz-ed--desktop .brz-fw-lg-800{font-weight:800!important}
2846
- .brz-ed.brz-ed--desktop .brz-fw-lg-900{font-weight:900!important}
2847
- .brz-ed.brz-ed--desktop .brz-fw-lg-1000{font-weight:1000!important}
2848
- .brz-ed.brz-ed--desktop .brz-fw-lg-1100{font-weight:1100!important}
2849
- .brz-ed.brz-ed--desktop .brz-fw-lg-1200{font-weight:1200!important}
2850
- .brz-ed.brz-ed--desktop .brz-fw-lg-1300{font-weight:1300!important}
2851
- .brz-ed.brz-ed--desktop .brz-fw-lg-1400{font-weight:1400!important}
2852
- .brz-ed.brz-ed--desktop .brz-fw-lg-1500{font-weight:1500!important}
2853
- .brz-ed.brz-ed--desktop .brz-fw-lg-1600{font-weight:1600!important}
2854
- .brz-ed.brz-ed--desktop .brz-fw-lg-1700{font-weight:1700!important}
2855
- .brz-ed.brz-ed--desktop .brz-fw-lg-1800{font-weight:1800!important}
2856
- .brz-ed.brz-ed--desktop .brz-fw-lg-1900{font-weight:1900!important}
2857
- .brz-ed.brz-ed--desktop .brz-fw-lg-2000{font-weight:2000!important}
2858
- .brz-ed.brz-ed--tablet .brz-fs-sm-6{font-size:6px!important}
2859
- .brz-ed.brz-ed--tablet .brz-fs-sm-7{font-size:7px!important}
2860
- .brz-ed.brz-ed--tablet .brz-fs-sm-8{font-size:8px!important}
2861
- .brz-ed.brz-ed--tablet .brz-fs-sm-9{font-size:9px!important}
2862
- .brz-ed.brz-ed--tablet .brz-fs-sm-10{font-size:10px!important}
2863
- .brz-ed.brz-ed--tablet .brz-fs-sm-11{font-size:11px!important}
2864
- .brz-ed.brz-ed--tablet .brz-fs-sm-12{font-size:12px!important}
2865
- .brz-ed.brz-ed--tablet .brz-fs-sm-13{font-size:13px!important}
2866
- .brz-ed.brz-ed--tablet .brz-fs-sm-14{font-size:14px!important}
2867
- .brz-ed.brz-ed--tablet .brz-fs-sm-15{font-size:15px!important}
2868
- .brz-ed.brz-ed--tablet .brz-fs-sm-16{font-size:16px!important}
2869
- .brz-ed.brz-ed--tablet .brz-fs-sm-17{font-size:17px!important}
2870
- .brz-ed.brz-ed--tablet .brz-fs-sm-18{font-size:18px!important}
2871
- .brz-ed.brz-ed--tablet .brz-fs-sm-19{font-size:19px!important}
2872
- .brz-ed.brz-ed--tablet .brz-fs-sm-20{font-size:20px!important}
2873
- .brz-ed.brz-ed--tablet .brz-fs-sm-21{font-size:21px!important}
2874
- .brz-ed.brz-ed--tablet .brz-fs-sm-22{font-size:22px!important}
2875
- .brz-ed.brz-ed--tablet .brz-fs-sm-23{font-size:23px!important}
2876
- .brz-ed.brz-ed--tablet .brz-fs-sm-24{font-size:24px!important}
2877
- .brz-ed.brz-ed--tablet .brz-fs-sm-25{font-size:25px!important}
2878
- .brz-ed.brz-ed--tablet .brz-fs-sm-26{font-size:26px!important}
2879
- .brz-ed.brz-ed--tablet .brz-fs-sm-27{font-size:27px!important}
2880
- .brz-ed.brz-ed--tablet .brz-fs-sm-28{font-size:28px!important}
2881
- .brz-ed.brz-ed--tablet .brz-fs-sm-29{font-size:29px!important}
2882
- .brz-ed.brz-ed--tablet .brz-fs-sm-30{font-size:30px!important}
2883
- .brz-ed.brz-ed--tablet .brz-fs-sm-31{font-size:31px!important}
2884
- .brz-ed.brz-ed--tablet .brz-fs-sm-32{font-size:32px!important}
2885
- .brz-ed.brz-ed--tablet .brz-fs-sm-33{font-size:33px!important}
2886
- .brz-ed.brz-ed--tablet .brz-fs-sm-34{font-size:34px!important}
2887
- .brz-ed.brz-ed--tablet .brz-fs-sm-35{font-size:35px!important}
2888
- .brz-ed.brz-ed--tablet .brz-fs-sm-36{font-size:36px!important}
2889
- .brz-ed.brz-ed--tablet .brz-fs-sm-37{font-size:37px!important}
2890
- .brz-ed.brz-ed--tablet .brz-fs-sm-38{font-size:38px!important}
2891
- .brz-ed.brz-ed--tablet .brz-fs-sm-39{font-size:39px!important}
2892
- .brz-ed.brz-ed--tablet .brz-fs-sm-40{font-size:40px!important}
2893
- .brz-ed.brz-ed--tablet .brz-fs-sm-41{font-size:41px!important}
2894
- .brz-ed.brz-ed--tablet .brz-fs-sm-42{font-size:42px!important}
2895
- .brz-ed.brz-ed--tablet .brz-fs-sm-43{font-size:43px!important}
2896
- .brz-ed.brz-ed--tablet .brz-fs-sm-44{font-size:44px!important}
2897
- .brz-ed.brz-ed--tablet .brz-fs-sm-45{font-size:45px!important}
2898
- .brz-ed.brz-ed--tablet .brz-fs-sm-46{font-size:46px!important}
2899
- .brz-ed.brz-ed--tablet .brz-fs-sm-47{font-size:47px!important}
2900
- .brz-ed.brz-ed--tablet .brz-fs-sm-48{font-size:48px!important}
2901
- .brz-ed.brz-ed--tablet .brz-fs-sm-49{font-size:49px!important}
2902
- .brz-ed.brz-ed--tablet .brz-fs-sm-50{font-size:50px!important}
2903
- .brz-ed.brz-ed--tablet .brz-fs-sm-51{font-size:51px!important}
2904
- .brz-ed.brz-ed--tablet .brz-fs-sm-52{font-size:52px!important}
2905
- .brz-ed.brz-ed--tablet .brz-fs-sm-53{font-size:53px!important}
2906
- .brz-ed.brz-ed--tablet .brz-fs-sm-54{font-size:54px!important}
2907
- .brz-ed.brz-ed--tablet .brz-fs-sm-55{font-size:55px!important}
2908
- .brz-ed.brz-ed--tablet .brz-fs-sm-56{font-size:56px!important}
2909
- .brz-ed.brz-ed--tablet .brz-fs-sm-57{font-size:57px!important}
2910
- .brz-ed.brz-ed--tablet .brz-fs-sm-58{font-size:58px!important}
2911
- .brz-ed.brz-ed--tablet .brz-fs-sm-59{font-size:59px!important}
2912
- .brz-ed.brz-ed--tablet .brz-fs-sm-60{font-size:60px!important}
2913
- .brz-ed.brz-ed--tablet .brz-fs-sm-61{font-size:61px!important}
2914
- .brz-ed.brz-ed--tablet .brz-fs-sm-62{font-size:62px!important}
2915
- .brz-ed.brz-ed--tablet .brz-fs-sm-63{font-size:63px!important}
2916
- .brz-ed.brz-ed--tablet .brz-fs-sm-64{font-size:64px!important}
2917
- .brz-ed.brz-ed--tablet .brz-fs-sm-65{font-size:65px!important}
2918
- .brz-ed.brz-ed--tablet .brz-fs-sm-66{font-size:66px!important}
2919
- .brz-ed.brz-ed--tablet .brz-fs-sm-67{font-size:67px!important}
2920
- .brz-ed.brz-ed--tablet .brz-fs-sm-68{font-size:68px!important}
2921
- .brz-ed.brz-ed--tablet .brz-fs-sm-69{font-size:69px!important}
2922
- .brz-ed.brz-ed--tablet .brz-fs-sm-70{font-size:70px!important}
2923
- .brz-ed.brz-ed--tablet .brz-fs-sm-71{font-size:71px!important}
2924
- .brz-ed.brz-ed--tablet .brz-fs-sm-72{font-size:72px!important}
2925
- .brz-ed.brz-ed--tablet .brz-fs-sm-73{font-size:73px!important}
2926
- .brz-ed.brz-ed--tablet .brz-fs-sm-74{font-size:74px!important}
2927
- .brz-ed.brz-ed--tablet .brz-fs-sm-75{font-size:75px!important}
2928
- .brz-ed.brz-ed--tablet .brz-fs-sm-76{font-size:76px!important}
2929
- .brz-ed.brz-ed--tablet .brz-fs-sm-77{font-size:77px!important}
2930
- .brz-ed.brz-ed--tablet .brz-fs-sm-78{font-size:78px!important}
2931
- .brz-ed.brz-ed--tablet .brz-fs-sm-79{font-size:79px!important}
2932
- .brz-ed.brz-ed--tablet .brz-fs-sm-80{font-size:80px!important}
2933
- .brz-ed.brz-ed--tablet .brz-fs-sm-81{font-size:81px!important}
2934
- .brz-ed.brz-ed--tablet .brz-fs-sm-82{font-size:82px!important}
2935
- .brz-ed.brz-ed--tablet .brz-fs-sm-83{font-size:83px!important}
2936
- .brz-ed.brz-ed--tablet .brz-fs-sm-84{font-size:84px!important}
2937
- .brz-ed.brz-ed--tablet .brz-fs-sm-85{font-size:85px!important}
2938
- .brz-ed.brz-ed--tablet .brz-fs-sm-86{font-size:86px!important}
2939
- .brz-ed.brz-ed--tablet .brz-fs-sm-87{font-size:87px!important}
2940
- .brz-ed.brz-ed--tablet .brz-fs-sm-88{font-size:88px!important}
2941
- .brz-ed.brz-ed--tablet .brz-fs-sm-89{font-size:89px!important}
2942
- .brz-ed.brz-ed--tablet .brz-fs-sm-90{font-size:90px!important}
2943
- .brz-ed.brz-ed--tablet .brz-fs-sm-91{font-size:91px!important}
2944
- .brz-ed.brz-ed--tablet .brz-fs-sm-92{font-size:92px!important}
2945
- .brz-ed.brz-ed--tablet .brz-fs-sm-93{font-size:93px!important}
2946
- .brz-ed.brz-ed--tablet .brz-fs-sm-94{font-size:94px!important}
2947
- .brz-ed.brz-ed--tablet .brz-fs-sm-95{font-size:95px!important}
2948
- .brz-ed.brz-ed--tablet .brz-fs-sm-96{font-size:96px!important}
2949
- .brz-ed.brz-ed--tablet .brz-fs-sm-97{font-size:97px!important}
2950
- .brz-ed.brz-ed--tablet .brz-fs-sm-98{font-size:98px!important}
2951
- .brz-ed.brz-ed--tablet .brz-fs-sm-99{font-size:99px!important}
2952
- .brz-ed.brz-ed--tablet .brz-fs-sm-100{font-size:100px!important}
2953
- .brz-ed.brz-ed--tablet .brz-fs-sm-101{font-size:101px!important}
2954
- .brz-ed.brz-ed--tablet .brz-fs-sm-102{font-size:102px!important}
2955
- .brz-ed.brz-ed--tablet .brz-fs-sm-103{font-size:103px!important}
2956
- .brz-ed.brz-ed--tablet .brz-fs-sm-104{font-size:104px!important}
2957
- .brz-ed.brz-ed--tablet .brz-fs-sm-105{font-size:105px!important}
2958
- .brz-ed.brz-ed--tablet .brz-fs-sm-106{font-size:106px!important}
2959
- .brz-ed.brz-ed--tablet .brz-fs-sm-107{font-size:107px!important}
2960
- .brz-ed.brz-ed--tablet .brz-fs-sm-108{font-size:108px!important}
2961
- .brz-ed.brz-ed--tablet .brz-fs-sm-109{font-size:109px!important}
2962
- .brz-ed.brz-ed--tablet .brz-fs-sm-110{font-size:110px!important}
2963
- .brz-ed.brz-ed--tablet .brz-fs-sm-111{font-size:111px!important}
2964
- .brz-ed.brz-ed--tablet .brz-fs-sm-112{font-size:112px!important}
2965
- .brz-ed.brz-ed--tablet .brz-fs-sm-113{font-size:113px!important}
2966
- .brz-ed.brz-ed--tablet .brz-fs-sm-114{font-size:114px!important}
2967
- .brz-ed.brz-ed--tablet .brz-fs-sm-115{font-size:115px!important}
2968
- .brz-ed.brz-ed--tablet .brz-fs-sm-116{font-size:116px!important}
2969
- .brz-ed.brz-ed--tablet .brz-fs-sm-117{font-size:117px!important}
2970
- .brz-ed.brz-ed--tablet .brz-fs-sm-118{font-size:118px!important}
2971
- .brz-ed.brz-ed--tablet .brz-fs-sm-119{font-size:119px!important}
2972
- .brz-ed.brz-ed--tablet .brz-fs-sm-120{font-size:120px!important}
2973
- .brz-ed.brz-ed--tablet .brz-fs-sm-121{font-size:121px!important}
2974
- .brz-ed.brz-ed--tablet .brz-fs-sm-122{font-size:122px!important}
2975
- .brz-ed.brz-ed--tablet .brz-fs-sm-123{font-size:123px!important}
2976
- .brz-ed.brz-ed--tablet .brz-fs-sm-124{font-size:124px!important}
2977
- .brz-ed.brz-ed--tablet .brz-fs-sm-125{font-size:125px!important}
2978
- .brz-ed.brz-ed--tablet .brz-fs-sm-126{font-size:126px!important}
2979
- .brz-ed.brz-ed--tablet .brz-fs-sm-127{font-size:127px!important}
2980
- .brz-ed.brz-ed--tablet .brz-fs-sm-128{font-size:128px!important}
2981
- .brz-ed.brz-ed--tablet .brz-fs-sm-129{font-size:129px!important}
2982
- .brz-ed.brz-ed--tablet .brz-fs-sm-130{font-size:130px!important}
2983
- .brz-ed.brz-ed--tablet .brz-fs-sm-131{font-size:131px!important}
2984
- .brz-ed.brz-ed--tablet .brz-fs-sm-132{font-size:132px!important}
2985
- .brz-ed.brz-ed--tablet .brz-fs-sm-133{font-size:133px!important}
2986
- .brz-ed.brz-ed--tablet .brz-fs-sm-134{font-size:134px!important}
2987
- .brz-ed.brz-ed--tablet .brz-fs-sm-135{font-size:135px!important}
2988
- .brz-ed.brz-ed--tablet .brz-fs-sm-136{font-size:136px!important}
2989
- .brz-ed.brz-ed--tablet .brz-fs-sm-137{font-size:137px!important}
2990
- .brz-ed.brz-ed--tablet .brz-fs-sm-138{font-size:138px!important}
2991
- .brz-ed.brz-ed--tablet .brz-fs-sm-139{font-size:139px!important}
2992
- .brz-ed.brz-ed--tablet .brz-fs-sm-140{font-size:140px!important}
2993
- .brz-ed.brz-ed--tablet .brz-fs-sm-141{font-size:141px!important}
2994
- .brz-ed.brz-ed--tablet .brz-fs-sm-142{font-size:142px!important}
2995
- .brz-ed.brz-ed--tablet .brz-fs-sm-143{font-size:143px!important}
2996
- .brz-ed.brz-ed--tablet .brz-fs-sm-144{font-size:144px!important}
2997
- .brz-ed.brz-ed--tablet .brz-fs-sm-145{font-size:145px!important}
2998
- .brz-ed.brz-ed--tablet .brz-fs-sm-146{font-size:146px!important}
2999
- .brz-ed.brz-ed--tablet .brz-fs-sm-147{font-size:147px!important}
3000
- .brz-ed.brz-ed--tablet .brz-fs-sm-148{font-size:148px!important}
3001
- .brz-ed.brz-ed--tablet .brz-fs-sm-149{font-size:149px!important}
3002
- .brz-ed.brz-ed--tablet .brz-fs-sm-150{font-size:150px!important}
3003
- .brz-ed.brz-ed--tablet .brz-fs-sm-151{font-size:151px!important}
3004
- .brz-ed.brz-ed--tablet .brz-fs-sm-152{font-size:152px!important}
3005
- .brz-ed.brz-ed--tablet .brz-fs-sm-153{font-size:153px!important}
3006
- .brz-ed.brz-ed--tablet .brz-fs-sm-154{font-size:154px!important}
3007
- .brz-ed.brz-ed--tablet .brz-fs-sm-155{font-size:155px!important}
3008
- .brz-ed.brz-ed--tablet .brz-fs-sm-156{font-size:156px!important}
3009
- .brz-ed.brz-ed--tablet .brz-fs-sm-157{font-size:157px!important}
3010
- .brz-ed.brz-ed--tablet .brz-fs-sm-158{font-size:158px!important}
3011
- .brz-ed.brz-ed--tablet .brz-fs-sm-159{font-size:159px!important}
3012
- .brz-ed.brz-ed--tablet .brz-fs-sm-160{font-size:160px!important}
3013
- .brz-ed.brz-ed--tablet .brz-fs-sm-161{font-size:161px!important}
3014
- .brz-ed.brz-ed--tablet .brz-fs-sm-162{font-size:162px!important}
3015
- .brz-ed.brz-ed--tablet .brz-fs-sm-163{font-size:163px!important}
3016
- .brz-ed.brz-ed--tablet .brz-fs-sm-164{font-size:164px!important}
3017
- .brz-ed.brz-ed--tablet .brz-fs-sm-165{font-size:165px!important}
3018
- .brz-ed.brz-ed--tablet .brz-fs-sm-166{font-size:166px!important}
3019
- .brz-ed.brz-ed--tablet .brz-fs-sm-167{font-size:167px!important}
3020
- .brz-ed.brz-ed--tablet .brz-fs-sm-168{font-size:168px!important}
3021
- .brz-ed.brz-ed--tablet .brz-fs-sm-169{font-size:169px!important}
3022
- .brz-ed.brz-ed--tablet .brz-fs-sm-170{font-size:170px!important}
3023
- .brz-ed.brz-ed--tablet .brz-fs-sm-171{font-size:171px!important}
3024
- .brz-ed.brz-ed--tablet .brz-fs-sm-172{font-size:172px!important}
3025
- .brz-ed.brz-ed--tablet .brz-fs-sm-173{font-size:173px!important}
3026
- .brz-ed.brz-ed--tablet .brz-fs-sm-174{font-size:174px!important}
3027
- .brz-ed.brz-ed--tablet .brz-fs-sm-175{font-size:175px!important}
3028
- .brz-ed.brz-ed--tablet .brz-fs-sm-176{font-size:176px!important}
3029
- .brz-ed.brz-ed--tablet .brz-fs-sm-177{font-size:177px!important}
3030
- .brz-ed.brz-ed--tablet .brz-fs-sm-178{font-size:178px!important}
3031
- .brz-ed.brz-ed--tablet .brz-fs-sm-179{font-size:179px!important}
3032
- .brz-ed.brz-ed--tablet .brz-fs-sm-180{font-size:180px!important}
3033
- .brz-ed.brz-ed--tablet .brz-fs-sm-181{font-size:181px!important}
3034
- .brz-ed.brz-ed--tablet .brz-fs-sm-182{font-size:182px!important}
3035
- .brz-ed.brz-ed--tablet .brz-fs-sm-183{font-size:183px!important}
3036
- .brz-ed.brz-ed--tablet .brz-fs-sm-184{font-size:184px!important}
3037
- .brz-ed.brz-ed--tablet .brz-fs-sm-185{font-size:185px!important}
3038
- .brz-ed.brz-ed--tablet .brz-fs-sm-186{font-size:186px!important}
3039
- .brz-ed.brz-ed--tablet .brz-fs-sm-187{font-size:187px!important}
3040
- .brz-ed.brz-ed--tablet .brz-fs-sm-188{font-size:188px!important}
3041
- .brz-ed.brz-ed--tablet .brz-fs-sm-189{font-size:189px!important}
3042
- .brz-ed.brz-ed--tablet .brz-fs-sm-190{font-size:190px!important}
3043
- .brz-ed.brz-ed--tablet .brz-fs-sm-191{font-size:191px!important}
3044
- .brz-ed.brz-ed--tablet .brz-fs-sm-192{font-size:192px!important}
3045
- .brz-ed.brz-ed--tablet .brz-fs-sm-193{font-size:193px!important}
3046
- .brz-ed.brz-ed--tablet .brz-fs-sm-194{font-size:194px!important}
3047
- .brz-ed.brz-ed--tablet .brz-fs-sm-195{font-size:195px!important}
3048
- .brz-ed.brz-ed--tablet .brz-fs-sm-196{font-size:196px!important}
3049
- .brz-ed.brz-ed--tablet .brz-fs-sm-197{font-size:197px!important}
3050
- .brz-ed.brz-ed--tablet .brz-fs-sm-198{font-size:198px!important}
3051
- .brz-ed.brz-ed--tablet .brz-fs-sm-199{font-size:199px!important}
3052
- .brz-ed.brz-ed--tablet .brz-fs-sm-200{font-size:200px!important}
3053
- .brz-ed.brz-ed--tablet .brz-fs-sm-201{font-size:201px!important}
3054
- .brz-ed.brz-ed--tablet .brz-fs-sm-202{font-size:202px!important}
3055
- .brz-ed.brz-ed--tablet .brz-fs-sm-203{font-size:203px!important}
3056
- .brz-ed.brz-ed--tablet .brz-fs-sm-204{font-size:204px!important}
3057
- .brz-ed.brz-ed--tablet .brz-fs-sm-205{font-size:205px!important}
3058
- .brz-ed.brz-ed--tablet .brz-fs-sm-206{font-size:206px!important}
3059
- .brz-ed.brz-ed--tablet .brz-fs-sm-207{font-size:207px!important}
3060
- .brz-ed.brz-ed--tablet .brz-fs-sm-208{font-size:208px!important}
3061
- .brz-ed.brz-ed--tablet .brz-fs-sm-209{font-size:209px!important}
3062
- .brz-ed.brz-ed--tablet .brz-fs-sm-210{font-size:210px!important}
3063
- .brz-ed.brz-ed--tablet .brz-fs-sm-211{font-size:211px!important}
3064
- .brz-ed.brz-ed--tablet .brz-fs-sm-212{font-size:212px!important}
3065
- .brz-ed.brz-ed--tablet .brz-fs-sm-213{font-size:213px!important}
3066
- .brz-ed.brz-ed--tablet .brz-fs-sm-214{font-size:214px!important}
3067
- .brz-ed.brz-ed--tablet .brz-fs-sm-215{font-size:215px!important}
3068
- .brz-ed.brz-ed--tablet .brz-fs-sm-216{font-size:216px!important}
3069
- .brz-ed.brz-ed--tablet .brz-fs-sm-217{font-size:217px!important}
3070
- .brz-ed.brz-ed--tablet .brz-fs-sm-218{font-size:218px!important}
3071
- .brz-ed.brz-ed--tablet .brz-fs-sm-219{font-size:219px!important}
3072
- .brz-ed.brz-ed--tablet .brz-fs-sm-220{font-size:220px!important}
3073
- .brz-ed.brz-ed--tablet .brz-fs-sm-221{font-size:221px!important}
3074
- .brz-ed.brz-ed--tablet .brz-fs-sm-222{font-size:222px!important}
3075
- .brz-ed.brz-ed--tablet .brz-fs-sm-223{font-size:223px!important}
3076
- .brz-ed.brz-ed--tablet .brz-fs-sm-224{font-size:224px!important}
3077
- .brz-ed.brz-ed--tablet .brz-fs-sm-225{font-size:225px!important}
3078
- .brz-ed.brz-ed--tablet .brz-fs-sm-226{font-size:226px!important}
3079
- .brz-ed.brz-ed--tablet .brz-fs-sm-227{font-size:227px!important}
3080
- .brz-ed.brz-ed--tablet .brz-fs-sm-228{font-size:228px!important}
3081
- .brz-ed.brz-ed--tablet .brz-fs-sm-229{font-size:229px!important}
3082
- .brz-ed.brz-ed--tablet .brz-fs-sm-230{font-size:230px!important}
3083
- .brz-ed.brz-ed--tablet .brz-fs-sm-231{font-size:231px!important}
3084
- .brz-ed.brz-ed--tablet .brz-fs-sm-232{font-size:232px!important}
3085
- .brz-ed.brz-ed--tablet .brz-fs-sm-233{font-size:233px!important}
3086
- .brz-ed.brz-ed--tablet .brz-fs-sm-234{font-size:234px!important}
3087
- .brz-ed.brz-ed--tablet .brz-fs-sm-235{font-size:235px!important}
3088
- .brz-ed.brz-ed--tablet .brz-fs-sm-236{font-size:236px!important}
3089
- .brz-ed.brz-ed--tablet .brz-fs-sm-237{font-size:237px!important}
3090
- .brz-ed.brz-ed--tablet .brz-fs-sm-238{font-size:238px!important}
3091
- .brz-ed.brz-ed--tablet .brz-fs-sm-239{font-size:239px!important}
3092
- .brz-ed.brz-ed--tablet .brz-fs-sm-240{font-size:240px!important}
3093
- .brz-ed.brz-ed--tablet .brz-fs-sm-241{font-size:241px!important}
3094
- .brz-ed.brz-ed--tablet .brz-fs-sm-242{font-size:242px!important}
3095
- .brz-ed.brz-ed--tablet .brz-fs-sm-243{font-size:243px!important}
3096
- .brz-ed.brz-ed--tablet .brz-fs-sm-244{font-size:244px!important}
3097
- .brz-ed.brz-ed--tablet .brz-fs-sm-245{font-size:245px!important}
3098
- .brz-ed.brz-ed--tablet .brz-fs-sm-246{font-size:246px!important}
3099
- .brz-ed.brz-ed--tablet .brz-fs-sm-247{font-size:247px!important}
3100
- .brz-ed.brz-ed--tablet .brz-fs-sm-248{font-size:248px!important}
3101
- .brz-ed.brz-ed--tablet .brz-fs-sm-249{font-size:249px!important}
3102
- .brz-ed.brz-ed--tablet .brz-fs-sm-250{font-size:250px!important}
3103
- .brz-ed.brz-ed--tablet .brz-fs-sm-251{font-size:251px!important}
3104
- .brz-ed.brz-ed--tablet .brz-fs-sm-252{font-size:252px!important}
3105
- .brz-ed.brz-ed--tablet .brz-fs-sm-253{font-size:253px!important}
3106
- .brz-ed.brz-ed--tablet .brz-fs-sm-254{font-size:254px!important}
3107
- .brz-ed.brz-ed--tablet .brz-fs-sm-255{font-size:255px!important}
3108
- .brz-ed.brz-ed--tablet .brz-fs-sm-256{font-size:256px!important}
3109
- .brz-ed.brz-ed--tablet .brz-fs-sm-257{font-size:257px!important}
3110
- .brz-ed.brz-ed--tablet .brz-fs-sm-258{font-size:258px!important}
3111
- .brz-ed.brz-ed--tablet .brz-fs-sm-259{font-size:259px!important}
3112
- .brz-ed.brz-ed--tablet .brz-fs-sm-260{font-size:260px!important}
3113
- .brz-ed.brz-ed--tablet .brz-fs-sm-261{font-size:261px!important}
3114
- .brz-ed.brz-ed--tablet .brz-fs-sm-262{font-size:262px!important}
3115
- .brz-ed.brz-ed--tablet .brz-fs-sm-263{font-size:263px!important}
3116
- .brz-ed.brz-ed--tablet .brz-fs-sm-264{font-size:264px!important}
3117
- .brz-ed.brz-ed--tablet .brz-fs-sm-265{font-size:265px!important}
3118
- .brz-ed.brz-ed--tablet .brz-fs-sm-266{font-size:266px!important}
3119
- .brz-ed.brz-ed--tablet .brz-fs-sm-267{font-size:267px!important}
3120
- .brz-ed.brz-ed--tablet .brz-fs-sm-268{font-size:268px!important}
3121
- .brz-ed.brz-ed--tablet .brz-fs-sm-269{font-size:269px!important}
3122
- .brz-ed.brz-ed--tablet .brz-fs-sm-270{font-size:270px!important}
3123
- .brz-ed.brz-ed--tablet .brz-fs-sm-271{font-size:271px!important}
3124
- .brz-ed.brz-ed--tablet .brz-fs-sm-272{font-size:272px!important}
3125
- .brz-ed.brz-ed--tablet .brz-fs-sm-273{font-size:273px!important}
3126
- .brz-ed.brz-ed--tablet .brz-fs-sm-274{font-size:274px!important}
3127
- .brz-ed.brz-ed--tablet .brz-fs-sm-275{font-size:275px!important}
3128
- .brz-ed.brz-ed--tablet .brz-fs-sm-276{font-size:276px!important}
3129
- .brz-ed.brz-ed--tablet .brz-fs-sm-277{font-size:277px!important}
3130
- .brz-ed.brz-ed--tablet .brz-fs-sm-278{font-size:278px!important}
3131
- .brz-ed.brz-ed--tablet .brz-fs-sm-279{font-size:279px!important}
3132
- .brz-ed.brz-ed--tablet .brz-fs-sm-280{font-size:280px!important}
3133
- .brz-ed.brz-ed--tablet .brz-fs-sm-281{font-size:281px!important}
3134
- .brz-ed.brz-ed--tablet .brz-fs-sm-282{font-size:282px!important}
3135
- .brz-ed.brz-ed--tablet .brz-fs-sm-283{font-size:283px!important}
3136
- .brz-ed.brz-ed--tablet .brz-fs-sm-284{font-size:284px!important}
3137
- .brz-ed.brz-ed--tablet .brz-fs-sm-285{font-size:285px!important}
3138
- .brz-ed.brz-ed--tablet .brz-fs-sm-286{font-size:286px!important}
3139
- .brz-ed.brz-ed--tablet .brz-fs-sm-287{font-size:287px!important}
3140
- .brz-ed.brz-ed--tablet .brz-fs-sm-288{font-size:288px!important}
3141
- .brz-ed.brz-ed--tablet .brz-fs-sm-289{font-size:289px!important}
3142
- .brz-ed.brz-ed--tablet .brz-fs-sm-290{font-size:290px!important}
3143
- .brz-ed.brz-ed--tablet .brz-fs-sm-291{font-size:291px!important}
3144
- .brz-ed.brz-ed--tablet .brz-fs-sm-292{font-size:292px!important}
3145
- .brz-ed.brz-ed--tablet .brz-fs-sm-293{font-size:293px!important}
3146
- .brz-ed.brz-ed--tablet .brz-fs-sm-294{font-size:294px!important}
3147
- .brz-ed.brz-ed--tablet .brz-fs-sm-295{font-size:295px!important}
3148
- .brz-ed.brz-ed--tablet .brz-fs-sm-296{font-size:296px!important}
3149
- .brz-ed.brz-ed--tablet .brz-fs-sm-297{font-size:297px!important}
3150
- .brz-ed.brz-ed--tablet .brz-fs-sm-298{font-size:298px!important}
3151
- .brz-ed.brz-ed--tablet .brz-fs-sm-299{font-size:299px!important}
3152
- .brz-ed.brz-ed--tablet .brz-fs-sm-300{font-size:300px!important}
3153
- .brz-ed.brz-ed--tablet .brz-lh-sm-1{line-height:1em!important}
3154
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_1{line-height:1.1em!important}
3155
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_2{line-height:1.2em!important}
3156
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_3{line-height:1.3em!important}
3157
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_4{line-height:1.4em!important}
3158
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_5{line-height:1.5em!important}
3159
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_6{line-height:1.6em!important}
3160
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_7{line-height:1.7em!important}
3161
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_8{line-height:1.8em!important}
3162
- .brz-ed.brz-ed--tablet .brz-lh-sm-1_9{line-height:1.9em!important}
3163
- .brz-ed.brz-ed--tablet .brz-lh-sm-2{line-height:2em!important}
3164
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_1{line-height:2.1em!important}
3165
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_2{line-height:2.2em!important}
3166
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_3{line-height:2.3em!important}
3167
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_4{line-height:2.4em!important}
3168
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_5{line-height:2.5em!important}
3169
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_6{line-height:2.6em!important}
3170
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_7{line-height:2.7em!important}
3171
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_8{line-height:2.8em!important}
3172
- .brz-ed.brz-ed--tablet .brz-lh-sm-2_9{line-height:2.9em!important}
3173
- .brz-ed.brz-ed--tablet .brz-lh-sm-3{line-height:3em!important}
3174
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_1{line-height:3.1em!important}
3175
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_2{line-height:3.2em!important}
3176
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_3{line-height:3.3em!important}
3177
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_4{line-height:3.4em!important}
3178
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_5{line-height:3.5em!important}
3179
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_6{line-height:3.6em!important}
3180
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_7{line-height:3.7em!important}
3181
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_8{line-height:3.8em!important}
3182
- .brz-ed.brz-ed--tablet .brz-lh-sm-3_9{line-height:3.9em!important}
3183
- .brz-ed.brz-ed--tablet .brz-lh-sm-4{line-height:4em!important}
3184
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_1{line-height:4.1em!important}
3185
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_2{line-height:4.2em!important}
3186
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_3{line-height:4.3em!important}
3187
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_4{line-height:4.4em!important}
3188
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_5{line-height:4.5em!important}
3189
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_6{line-height:4.6em!important}
3190
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_7{line-height:4.7em!important}
3191
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_8{line-height:4.8em!important}
3192
- .brz-ed.brz-ed--tablet .brz-lh-sm-4_9{line-height:4.9em!important}
3193
- .brz-ed.brz-ed--tablet .brz-lh-sm-5{line-height:5em!important}
3194
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_1{line-height:5.1em!important}
3195
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_2{line-height:5.2em!important}
3196
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_3{line-height:5.3em!important}
3197
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_4{line-height:5.4em!important}
3198
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_5{line-height:5.5em!important}
3199
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_6{line-height:5.6em!important}
3200
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_7{line-height:5.7em!important}
3201
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_8{line-height:5.8em!important}
3202
- .brz-ed.brz-ed--tablet .brz-lh-sm-5_9{line-height:5.9em!important}
3203
- .brz-ed.brz-ed--tablet .brz-fw-sm-100{font-weight:100!important}
3204
- .brz-ed.brz-ed--tablet .brz-fw-sm-200{font-weight:200!important}
3205
- .brz-ed.brz-ed--tablet .brz-fw-sm-300{font-weight:300!important}
3206
- .brz-ed.brz-ed--tablet .brz-fw-sm-400{font-weight:400!important}
3207
- .brz-ed.brz-ed--tablet .brz-fw-sm-500{font-weight:500!important}
3208
- .brz-ed.brz-ed--tablet .brz-fw-sm-600{font-weight:600!important}
3209
- .brz-ed.brz-ed--tablet .brz-fw-sm-700{font-weight:700!important}
3210
- .brz-ed.brz-ed--tablet .brz-fw-sm-800{font-weight:800!important}
3211
- .brz-ed.brz-ed--tablet .brz-fw-sm-900{font-weight:900!important}
3212
- .brz-ed.brz-ed--tablet .brz-fw-sm-1000{font-weight:1000!important}
3213
- .brz-ed.brz-ed--tablet .brz-fw-sm-1100{font-weight:1100!important}
3214
- .brz-ed.brz-ed--tablet .brz-fw-sm-1200{font-weight:1200!important}
3215
- .brz-ed.brz-ed--tablet .brz-fw-sm-1300{font-weight:1300!important}
3216
- .brz-ed.brz-ed--tablet .brz-fw-sm-1400{font-weight:1400!important}
3217
- .brz-ed.brz-ed--tablet .brz-fw-sm-1500{font-weight:1500!important}
3218
- .brz-ed.brz-ed--tablet .brz-fw-sm-1600{font-weight:1600!important}
3219
- .brz-ed.brz-ed--tablet .brz-fw-sm-1700{font-weight:1700!important}
3220
- .brz-ed.brz-ed--tablet .brz-fw-sm-1800{font-weight:1800!important}
3221
- .brz-ed.brz-ed--tablet .brz-fw-sm-1900{font-weight:1900!important}
3222
- .brz-ed.brz-ed--tablet .brz-fw-sm-2000{font-weight:2000!important}
3223
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_20{letter-spacing:-20px!important}
3224
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_20_5{letter-spacing:-20.5px!important}
3225
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_19{letter-spacing:-19px!important}
3226
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_19_5{letter-spacing:-19.5px!important}
3227
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_18{letter-spacing:-18px!important}
3228
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_18_5{letter-spacing:-18.5px!important}
3229
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_17{letter-spacing:-17px!important}
3230
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_17_5{letter-spacing:-17.5px!important}
3231
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_16{letter-spacing:-16px!important}
3232
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_16_5{letter-spacing:-16.5px!important}
3233
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_15{letter-spacing:-15px!important}
3234
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_15_5{letter-spacing:-15.5px!important}
3235
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_14{letter-spacing:-14px!important}
3236
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_14_5{letter-spacing:-14.5px!important}
3237
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_13{letter-spacing:-13px!important}
3238
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_13_5{letter-spacing:-13.5px!important}
3239
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_12{letter-spacing:-12px!important}
3240
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_12_5{letter-spacing:-12.5px!important}
3241
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_11{letter-spacing:-11px!important}
3242
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_11_5{letter-spacing:-11.5px!important}
3243
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_10{letter-spacing:-10px!important}
3244
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_10_5{letter-spacing:-10.5px!important}
3245
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_9{letter-spacing:-9px!important}
3246
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_9_5{letter-spacing:-9.5px!important}
3247
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_8{letter-spacing:-8px!important}
3248
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_8_5{letter-spacing:-8.5px!important}
3249
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_7{letter-spacing:-7px!important}
3250
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_7_5{letter-spacing:-7.5px!important}
3251
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_6{letter-spacing:-6px!important}
3252
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_6_5{letter-spacing:-6.5px!important}
3253
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_5{letter-spacing:-5px!important}
3254
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_5_5{letter-spacing:-5.5px!important}
3255
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_4{letter-spacing:-4px!important}
3256
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_4_5{letter-spacing:-4.5px!important}
3257
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_3{letter-spacing:-3px!important}
3258
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_3_5{letter-spacing:-3.5px!important}
3259
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_2{letter-spacing:-2px!important}
3260
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_2_5{letter-spacing:-2.5px!important}
3261
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_1{letter-spacing:-1px!important}
3262
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_1_5{letter-spacing:-1.5px!important}
3263
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_0{letter-spacing:0!important}
3264
- .brz-ed.brz-ed--tablet .brz-ls-sm-m_0_5{letter-spacing:-.5px!important}
3265
- .brz-ed.brz-ed--tablet .brz-ls-sm-0{letter-spacing:0!important}
3266
- .brz-ed.brz-ed--tablet .brz-ls-sm-0_5{letter-spacing:.5px!important}
3267
- .brz-ed.brz-ed--tablet .brz-ls-sm-1{letter-spacing:1px!important}
3268
- .brz-ed.brz-ed--tablet .brz-ls-sm-1_5{letter-spacing:1.5px!important}
3269
- .brz-ed.brz-ed--tablet .brz-ls-sm-2{letter-spacing:2px!important}
3270
- .brz-ed.brz-ed--tablet .brz-ls-sm-2_5{letter-spacing:2.5px!important}
3271
- .brz-ed.brz-ed--tablet .brz-ls-sm-3{letter-spacing:3px!important}
3272
- .brz-ed.brz-ed--tablet .brz-ls-sm-3_5{letter-spacing:3.5px!important}
3273
- .brz-ed.brz-ed--tablet .brz-ls-sm-4{letter-spacing:4px!important}
3274
- .brz-ed.brz-ed--tablet .brz-ls-sm-4_5{letter-spacing:4.5px!important}
3275
- .brz-ed.brz-ed--tablet .brz-ls-sm-5{letter-spacing:5px!important}
3276
- .brz-ed.brz-ed--tablet .brz-ls-sm-5_5{letter-spacing:5.5px!important}
3277
- .brz-ed.brz-ed--tablet .brz-ls-sm-6{letter-spacing:6px!important}
3278
- .brz-ed.brz-ed--tablet .brz-ls-sm-6_5{letter-spacing:6.5px!important}
3279
- .brz-ed.brz-ed--tablet .brz-ls-sm-7{letter-spacing:7px!important}
3280
- .brz-ed.brz-ed--tablet .brz-ls-sm-7_5{letter-spacing:7.5px!important}
3281
- .brz-ed.brz-ed--tablet .brz-ls-sm-8{letter-spacing:8px!important}
3282
- .brz-ed.brz-ed--tablet .brz-ls-sm-8_5{letter-spacing:8.5px!important}
3283
- .brz-ed.brz-ed--tablet .brz-ls-sm-9{letter-spacing:9px!important}
3284
- .brz-ed.brz-ed--tablet .brz-ls-sm-9_5{letter-spacing:9.5px!important}
3285
- .brz-ed.brz-ed--tablet .brz-ls-sm-10{letter-spacing:10px!important}
3286
- .brz-ed.brz-ed--tablet .brz-ls-sm-10_5{letter-spacing:10.5px!important}
3287
- .brz-ed.brz-ed--tablet .brz-ls-sm-11{letter-spacing:11px!important}
3288
- .brz-ed.brz-ed--tablet .brz-ls-sm-11_5{letter-spacing:11.5px!important}
3289
- .brz-ed.brz-ed--tablet .brz-ls-sm-12{letter-spacing:12px!important}
3290
- .brz-ed.brz-ed--tablet .brz-ls-sm-12_5{letter-spacing:12.5px!important}
3291
- .brz-ed.brz-ed--tablet .brz-ls-sm-13{letter-spacing:13px!important}
3292
- .brz-ed.brz-ed--tablet .brz-ls-sm-13_5{letter-spacing:13.5px!important}
3293
- .brz-ed.brz-ed--tablet .brz-ls-sm-14{letter-spacing:14px!important}
3294
- .brz-ed.brz-ed--tablet .brz-ls-sm-14_5{letter-spacing:14.5px!important}
3295
- .brz-ed.brz-ed--tablet .brz-ls-sm-15{letter-spacing:15px!important}
3296
- .brz-ed.brz-ed--tablet .brz-ls-sm-15_5{letter-spacing:15.5px!important}
3297
- .brz-ed.brz-ed--tablet .brz-ls-sm-16{letter-spacing:16px!important}
3298
- .brz-ed.brz-ed--tablet .brz-ls-sm-16_5{letter-spacing:16.5px!important}
3299
- .brz-ed.brz-ed--tablet .brz-ls-sm-17{letter-spacing:17px!important}
3300
- .brz-ed.brz-ed--tablet .brz-ls-sm-17_5{letter-spacing:17.5px!important}
3301
- .brz-ed.brz-ed--tablet .brz-ls-sm-18{letter-spacing:18px!important}
3302
- .brz-ed.brz-ed--tablet .brz-ls-sm-18_5{letter-spacing:18.5px!important}
3303
- .brz-ed.brz-ed--tablet .brz-ls-sm-19{letter-spacing:19px!important}
3304
- .brz-ed.brz-ed--tablet .brz-ls-sm-19_5{letter-spacing:19.5px!important}
3305
- .brz-ed.brz-ed--tablet .brz-ls-sm-20{letter-spacing:20px!important}
3306
- .brz-ed.brz-ed--tablet .brz-ls-sm-20_5{letter-spacing:20.5px!important}
3307
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-6{font-size:6px!important}
3308
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-7{font-size:7px!important}
3309
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-8{font-size:8px!important}
3310
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-9{font-size:9px!important}
3311
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-10{font-size:10px!important}
3312
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-11{font-size:11px!important}
3313
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-12{font-size:12px!important}
3314
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-13{font-size:13px!important}
3315
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-14{font-size:14px!important}
3316
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-15{font-size:15px!important}
3317
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-16{font-size:16px!important}
3318
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-17{font-size:17px!important}
3319
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-18{font-size:18px!important}
3320
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-19{font-size:19px!important}
3321
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-20{font-size:20px!important}
3322
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-21{font-size:21px!important}
3323
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-22{font-size:22px!important}
3324
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-23{font-size:23px!important}
3325
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-24{font-size:24px!important}
3326
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-25{font-size:25px!important}
3327
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-26{font-size:26px!important}
3328
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-27{font-size:27px!important}
3329
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-28{font-size:28px!important}
3330
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-29{font-size:29px!important}
3331
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-30{font-size:30px!important}
3332
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-31{font-size:31px!important}
3333
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-32{font-size:32px!important}
3334
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-33{font-size:33px!important}
3335
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-34{font-size:34px!important}
3336
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-35{font-size:35px!important}
3337
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-36{font-size:36px!important}
3338
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-37{font-size:37px!important}
3339
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-38{font-size:38px!important}
3340
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-39{font-size:39px!important}
3341
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-40{font-size:40px!important}
3342
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-41{font-size:41px!important}
3343
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-42{font-size:42px!important}
3344
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-43{font-size:43px!important}
3345
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-44{font-size:44px!important}
3346
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-45{font-size:45px!important}
3347
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-46{font-size:46px!important}
3348
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-47{font-size:47px!important}
3349
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-48{font-size:48px!important}
3350
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-49{font-size:49px!important}
3351
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-50{font-size:50px!important}
3352
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-51{font-size:51px!important}
3353
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-52{font-size:52px!important}
3354
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-53{font-size:53px!important}
3355
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-54{font-size:54px!important}
3356
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-55{font-size:55px!important}
3357
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-56{font-size:56px!important}
3358
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-57{font-size:57px!important}
3359
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-58{font-size:58px!important}
3360
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-59{font-size:59px!important}
3361
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-60{font-size:60px!important}
3362
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-61{font-size:61px!important}
3363
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-62{font-size:62px!important}
3364
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-63{font-size:63px!important}
3365
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-64{font-size:64px!important}
3366
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-65{font-size:65px!important}
3367
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-66{font-size:66px!important}
3368
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-67{font-size:67px!important}
3369
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-68{font-size:68px!important}
3370
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-69{font-size:69px!important}
3371
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-70{font-size:70px!important}
3372
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-71{font-size:71px!important}
3373
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-72{font-size:72px!important}
3374
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-73{font-size:73px!important}
3375
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-74{font-size:74px!important}
3376
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-75{font-size:75px!important}
3377
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-76{font-size:76px!important}
3378
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-77{font-size:77px!important}
3379
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-78{font-size:78px!important}
3380
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-79{font-size:79px!important}
3381
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-80{font-size:80px!important}
3382
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-81{font-size:81px!important}
3383
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-82{font-size:82px!important}
3384
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-83{font-size:83px!important}
3385
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-84{font-size:84px!important}
3386
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-85{font-size:85px!important}
3387
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-86{font-size:86px!important}
3388
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-87{font-size:87px!important}
3389
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-88{font-size:88px!important}
3390
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-89{font-size:89px!important}
3391
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-90{font-size:90px!important}
3392
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-91{font-size:91px!important}
3393
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-92{font-size:92px!important}
3394
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-93{font-size:93px!important}
3395
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-94{font-size:94px!important}
3396
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-95{font-size:95px!important}
3397
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-96{font-size:96px!important}
3398
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-97{font-size:97px!important}
3399
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-98{font-size:98px!important}
3400
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-99{font-size:99px!important}
3401
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-100{font-size:100px!important}
3402
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-101{font-size:101px!important}
3403
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-102{font-size:102px!important}
3404
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-103{font-size:103px!important}
3405
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-104{font-size:104px!important}
3406
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-105{font-size:105px!important}
3407
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-106{font-size:106px!important}
3408
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-107{font-size:107px!important}
3409
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-108{font-size:108px!important}
3410
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-109{font-size:109px!important}
3411
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-110{font-size:110px!important}
3412
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-111{font-size:111px!important}
3413
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-112{font-size:112px!important}
3414
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-113{font-size:113px!important}
3415
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-114{font-size:114px!important}
3416
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-115{font-size:115px!important}
3417
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-116{font-size:116px!important}
3418
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-117{font-size:117px!important}
3419
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-118{font-size:118px!important}
3420
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-119{font-size:119px!important}
3421
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-120{font-size:120px!important}
3422
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-121{font-size:121px!important}
3423
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-122{font-size:122px!important}
3424
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-123{font-size:123px!important}
3425
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-124{font-size:124px!important}
3426
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-125{font-size:125px!important}
3427
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-126{font-size:126px!important}
3428
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-127{font-size:127px!important}
3429
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-128{font-size:128px!important}
3430
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-129{font-size:129px!important}
3431
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-130{font-size:130px!important}
3432
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-131{font-size:131px!important}
3433
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-132{font-size:132px!important}
3434
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-133{font-size:133px!important}
3435
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-134{font-size:134px!important}
3436
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-135{font-size:135px!important}
3437
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-136{font-size:136px!important}
3438
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-137{font-size:137px!important}
3439
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-138{font-size:138px!important}
3440
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-139{font-size:139px!important}
3441
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-140{font-size:140px!important}
3442
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-141{font-size:141px!important}
3443
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-142{font-size:142px!important}
3444
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-143{font-size:143px!important}
3445
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-144{font-size:144px!important}
3446
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-145{font-size:145px!important}
3447
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-146{font-size:146px!important}
3448
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-147{font-size:147px!important}
3449
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-148{font-size:148px!important}
3450
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-149{font-size:149px!important}
3451
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-150{font-size:150px!important}
3452
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-151{font-size:151px!important}
3453
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-152{font-size:152px!important}
3454
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-153{font-size:153px!important}
3455
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-154{font-size:154px!important}
3456
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-155{font-size:155px!important}
3457
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-156{font-size:156px!important}
3458
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-157{font-size:157px!important}
3459
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-158{font-size:158px!important}
3460
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-159{font-size:159px!important}
3461
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-160{font-size:160px!important}
3462
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-161{font-size:161px!important}
3463
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-162{font-size:162px!important}
3464
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-163{font-size:163px!important}
3465
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-164{font-size:164px!important}
3466
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-165{font-size:165px!important}
3467
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-166{font-size:166px!important}
3468
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-167{font-size:167px!important}
3469
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-168{font-size:168px!important}
3470
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-169{font-size:169px!important}
3471
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-170{font-size:170px!important}
3472
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-171{font-size:171px!important}
3473
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-172{font-size:172px!important}
3474
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-173{font-size:173px!important}
3475
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-174{font-size:174px!important}
3476
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-175{font-size:175px!important}
3477
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-176{font-size:176px!important}
3478
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-177{font-size:177px!important}
3479
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-178{font-size:178px!important}
3480
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-179{font-size:179px!important}
3481
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-180{font-size:180px!important}
3482
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-181{font-size:181px!important}
3483
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-182{font-size:182px!important}
3484
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-183{font-size:183px!important}
3485
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-184{font-size:184px!important}
3486
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-185{font-size:185px!important}
3487
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-186{font-size:186px!important}
3488
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-187{font-size:187px!important}
3489
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-188{font-size:188px!important}
3490
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-189{font-size:189px!important}
3491
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-190{font-size:190px!important}
3492
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-191{font-size:191px!important}
3493
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-192{font-size:192px!important}
3494
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-193{font-size:193px!important}
3495
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-194{font-size:194px!important}
3496
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-195{font-size:195px!important}
3497
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-196{font-size:196px!important}
3498
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-197{font-size:197px!important}
3499
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-198{font-size:198px!important}
3500
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-199{font-size:199px!important}
3501
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-200{font-size:200px!important}
3502
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-201{font-size:201px!important}
3503
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-202{font-size:202px!important}
3504
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-203{font-size:203px!important}
3505
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-204{font-size:204px!important}
3506
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-205{font-size:205px!important}
3507
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-206{font-size:206px!important}
3508
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-207{font-size:207px!important}
3509
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-208{font-size:208px!important}
3510
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-209{font-size:209px!important}
3511
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-210{font-size:210px!important}
3512
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-211{font-size:211px!important}
3513
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-212{font-size:212px!important}
3514
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-213{font-size:213px!important}
3515
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-214{font-size:214px!important}
3516
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-215{font-size:215px!important}
3517
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-216{font-size:216px!important}
3518
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-217{font-size:217px!important}
3519
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-218{font-size:218px!important}
3520
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-219{font-size:219px!important}
3521
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-220{font-size:220px!important}
3522
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-221{font-size:221px!important}
3523
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-222{font-size:222px!important}
3524
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-223{font-size:223px!important}
3525
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-224{font-size:224px!important}
3526
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-225{font-size:225px!important}
3527
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-226{font-size:226px!important}
3528
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-227{font-size:227px!important}
3529
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-228{font-size:228px!important}
3530
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-229{font-size:229px!important}
3531
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-230{font-size:230px!important}
3532
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-231{font-size:231px!important}
3533
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-232{font-size:232px!important}
3534
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-233{font-size:233px!important}
3535
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-234{font-size:234px!important}
3536
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-235{font-size:235px!important}
3537
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-236{font-size:236px!important}
3538
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-237{font-size:237px!important}
3539
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-238{font-size:238px!important}
3540
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-239{font-size:239px!important}
3541
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-240{font-size:240px!important}
3542
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-241{font-size:241px!important}
3543
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-242{font-size:242px!important}
3544
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-243{font-size:243px!important}
3545
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-244{font-size:244px!important}
3546
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-245{font-size:245px!important}
3547
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-246{font-size:246px!important}
3548
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-247{font-size:247px!important}
3549
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-248{font-size:248px!important}
3550
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-249{font-size:249px!important}
3551
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-250{font-size:250px!important}
3552
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-251{font-size:251px!important}
3553
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-252{font-size:252px!important}
3554
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-253{font-size:253px!important}
3555
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-254{font-size:254px!important}
3556
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-255{font-size:255px!important}
3557
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-256{font-size:256px!important}
3558
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-257{font-size:257px!important}
3559
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-258{font-size:258px!important}
3560
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-259{font-size:259px!important}
3561
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-260{font-size:260px!important}
3562
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-261{font-size:261px!important}
3563
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-262{font-size:262px!important}
3564
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-263{font-size:263px!important}
3565
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-264{font-size:264px!important}
3566
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-265{font-size:265px!important}
3567
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-266{font-size:266px!important}
3568
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-267{font-size:267px!important}
3569
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-268{font-size:268px!important}
3570
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-269{font-size:269px!important}
3571
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-270{font-size:270px!important}
3572
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-271{font-size:271px!important}
3573
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-272{font-size:272px!important}
3574
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-273{font-size:273px!important}
3575
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-274{font-size:274px!important}
3576
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-275{font-size:275px!important}
3577
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-276{font-size:276px!important}
3578
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-277{font-size:277px!important}
3579
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-278{font-size:278px!important}
3580
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-279{font-size:279px!important}
3581
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-280{font-size:280px!important}
3582
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-281{font-size:281px!important}
3583
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-282{font-size:282px!important}
3584
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-283{font-size:283px!important}
3585
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-284{font-size:284px!important}
3586
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-285{font-size:285px!important}
3587
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-286{font-size:286px!important}
3588
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-287{font-size:287px!important}
3589
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-288{font-size:288px!important}
3590
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-289{font-size:289px!important}
3591
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-290{font-size:290px!important}
3592
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-291{font-size:291px!important}
3593
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-292{font-size:292px!important}
3594
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-293{font-size:293px!important}
3595
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-294{font-size:294px!important}
3596
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-295{font-size:295px!important}
3597
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-296{font-size:296px!important}
3598
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-297{font-size:297px!important}
3599
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-298{font-size:298px!important}
3600
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-299{font-size:299px!important}
3601
- .brz-ed.brz-ed--tablet .brz-fs-sm-im-300{font-size:300px!important}
3602
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1{line-height:1em!important}
3603
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_1{line-height:1.1em!important}
3604
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_2{line-height:1.2em!important}
3605
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_3{line-height:1.3em!important}
3606
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_4{line-height:1.4em!important}
3607
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_5{line-height:1.5em!important}
3608
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_6{line-height:1.6em!important}
3609
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_7{line-height:1.7em!important}
3610
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_8{line-height:1.8em!important}
3611
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-1_9{line-height:1.9em!important}
3612
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2{line-height:2em!important}
3613
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_1{line-height:2.1em!important}
3614
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_2{line-height:2.2em!important}
3615
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_3{line-height:2.3em!important}
3616
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_4{line-height:2.4em!important}
3617
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_5{line-height:2.5em!important}
3618
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_6{line-height:2.6em!important}
3619
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_7{line-height:2.7em!important}
3620
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_8{line-height:2.8em!important}
3621
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-2_9{line-height:2.9em!important}
3622
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3{line-height:3em!important}
3623
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_1{line-height:3.1em!important}
3624
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_2{line-height:3.2em!important}
3625
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_3{line-height:3.3em!important}
3626
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_4{line-height:3.4em!important}
3627
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_5{line-height:3.5em!important}
3628
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_6{line-height:3.6em!important}
3629
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_7{line-height:3.7em!important}
3630
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_8{line-height:3.8em!important}
3631
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-3_9{line-height:3.9em!important}
3632
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4{line-height:4em!important}
3633
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_1{line-height:4.1em!important}
3634
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_2{line-height:4.2em!important}
3635
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_3{line-height:4.3em!important}
3636
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_4{line-height:4.4em!important}
3637
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_5{line-height:4.5em!important}
3638
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_6{line-height:4.6em!important}
3639
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_7{line-height:4.7em!important}
3640
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_8{line-height:4.8em!important}
3641
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-4_9{line-height:4.9em!important}
3642
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5{line-height:5em!important}
3643
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_1{line-height:5.1em!important}
3644
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_2{line-height:5.2em!important}
3645
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_3{line-height:5.3em!important}
3646
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_4{line-height:5.4em!important}
3647
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_5{line-height:5.5em!important}
3648
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_6{line-height:5.6em!important}
3649
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_7{line-height:5.7em!important}
3650
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_8{line-height:5.8em!important}
3651
- .brz-ed.brz-ed--tablet .brz-lh-sm-im-5_9{line-height:5.9em!important}
3652
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-100{font-weight:100!important}
3653
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-200{font-weight:200!important}
3654
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-300{font-weight:300!important}
3655
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-400{font-weight:400!important}
3656
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-500{font-weight:500!important}
3657
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-600{font-weight:600!important}
3658
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-700{font-weight:700!important}
3659
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-800{font-weight:800!important}
3660
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-900{font-weight:900!important}
3661
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1000{font-weight:1000!important}
3662
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1100{font-weight:1100!important}
3663
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1200{font-weight:1200!important}
3664
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1300{font-weight:1300!important}
3665
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1400{font-weight:1400!important}
3666
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1500{font-weight:1500!important}
3667
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1600{font-weight:1600!important}
3668
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1700{font-weight:1700!important}
3669
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1800{font-weight:1800!important}
3670
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-1900{font-weight:1900!important}
3671
- .brz-ed.brz-ed--tablet .brz-fw-sm-im-2000{font-weight:2000!important}
3672
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_20{letter-spacing:-20px!important}
3673
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_20_5{letter-spacing:-20.5px!important}
3674
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_19{letter-spacing:-19px!important}
3675
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_19_5{letter-spacing:-19.5px!important}
3676
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_18{letter-spacing:-18px!important}
3677
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_18_5{letter-spacing:-18.5px!important}
3678
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_17{letter-spacing:-17px!important}
3679
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_17_5{letter-spacing:-17.5px!important}
3680
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_16{letter-spacing:-16px!important}
3681
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_16_5{letter-spacing:-16.5px!important}
3682
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_15{letter-spacing:-15px!important}
3683
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_15_5{letter-spacing:-15.5px!important}
3684
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_14{letter-spacing:-14px!important}
3685
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_14_5{letter-spacing:-14.5px!important}
3686
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_13{letter-spacing:-13px!important}
3687
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_13_5{letter-spacing:-13.5px!important}
3688
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_12{letter-spacing:-12px!important}
3689
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_12_5{letter-spacing:-12.5px!important}
3690
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_11{letter-spacing:-11px!important}
3691
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_11_5{letter-spacing:-11.5px!important}
3692
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_10{letter-spacing:-10px!important}
3693
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_10_5{letter-spacing:-10.5px!important}
3694
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_9{letter-spacing:-9px!important}
3695
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_9_5{letter-spacing:-9.5px!important}
3696
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_8{letter-spacing:-8px!important}
3697
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_8_5{letter-spacing:-8.5px!important}
3698
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_7{letter-spacing:-7px!important}
3699
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_7_5{letter-spacing:-7.5px!important}
3700
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_6{letter-spacing:-6px!important}
3701
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_6_5{letter-spacing:-6.5px!important}
3702
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_5{letter-spacing:-5px!important}
3703
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_5_5{letter-spacing:-5.5px!important}
3704
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_4{letter-spacing:-4px!important}
3705
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_4_5{letter-spacing:-4.5px!important}
3706
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_3{letter-spacing:-3px!important}
3707
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_3_5{letter-spacing:-3.5px!important}
3708
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_2{letter-spacing:-2px!important}
3709
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_2_5{letter-spacing:-2.5px!important}
3710
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_1{letter-spacing:-1px!important}
3711
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_1_5{letter-spacing:-1.5px!important}
3712
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_0{letter-spacing:0!important}
3713
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-m_0_5{letter-spacing:-.5px!important}
3714
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-0{letter-spacing:0!important}
3715
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-0_5{letter-spacing:.5px!important}
3716
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-1{letter-spacing:1px!important}
3717
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-1_5{letter-spacing:1.5px!important}
3718
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-2{letter-spacing:2px!important}
3719
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-2_5{letter-spacing:2.5px!important}
3720
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-3{letter-spacing:3px!important}
3721
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-3_5{letter-spacing:3.5px!important}
3722
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-4{letter-spacing:4px!important}
3723
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-4_5{letter-spacing:4.5px!important}
3724
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-5{letter-spacing:5px!important}
3725
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-5_5{letter-spacing:5.5px!important}
3726
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-6{letter-spacing:6px!important}
3727
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-6_5{letter-spacing:6.5px!important}
3728
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-7{letter-spacing:7px!important}
3729
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-7_5{letter-spacing:7.5px!important}
3730
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-8{letter-spacing:8px!important}
3731
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-8_5{letter-spacing:8.5px!important}
3732
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-9{letter-spacing:9px!important}
3733
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-9_5{letter-spacing:9.5px!important}
3734
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-10{letter-spacing:10px!important}
3735
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-10_5{letter-spacing:10.5px!important}
3736
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-11{letter-spacing:11px!important}
3737
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-11_5{letter-spacing:11.5px!important}
3738
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-12{letter-spacing:12px!important}
3739
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-12_5{letter-spacing:12.5px!important}
3740
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-13{letter-spacing:13px!important}
3741
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-13_5{letter-spacing:13.5px!important}
3742
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-14{letter-spacing:14px!important}
3743
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-14_5{letter-spacing:14.5px!important}
3744
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-15{letter-spacing:15px!important}
3745
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-15_5{letter-spacing:15.5px!important}
3746
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-16{letter-spacing:16px!important}
3747
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-16_5{letter-spacing:16.5px!important}
3748
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-17{letter-spacing:17px!important}
3749
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-17_5{letter-spacing:17.5px!important}
3750
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-18{letter-spacing:18px!important}
3751
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-18_5{letter-spacing:18.5px!important}
3752
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-19{letter-spacing:19px!important}
3753
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-19_5{letter-spacing:19.5px!important}
3754
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-20{letter-spacing:20px!important}
3755
- .brz-ed.brz-ed--tablet .brz-ls-sm-im-20_5{letter-spacing:20.5px!important}
3756
- .brz-ed.brz-ed--mobile .brz-fs-xs-6{font-size:6px!important}
3757
- .brz-ed.brz-ed--mobile .brz-fs-xs-7{font-size:7px!important}
3758
- .brz-ed.brz-ed--mobile .brz-fs-xs-8{font-size:8px!important}
3759
- .brz-ed.brz-ed--mobile .brz-fs-xs-9{font-size:9px!important}
3760
- .brz-ed.brz-ed--mobile .brz-fs-xs-10{font-size:10px!important}
3761
- .brz-ed.brz-ed--mobile .brz-fs-xs-11{font-size:11px!important}
3762
- .brz-ed.brz-ed--mobile .brz-fs-xs-12{font-size:12px!important}
3763
- .brz-ed.brz-ed--mobile .brz-fs-xs-13{font-size:13px!important}
3764
- .brz-ed.brz-ed--mobile .brz-fs-xs-14{font-size:14px!important}
3765
- .brz-ed.brz-ed--mobile .brz-fs-xs-15{font-size:15px!important}
3766
- .brz-ed.brz-ed--mobile .brz-fs-xs-16{font-size:16px!important}
3767
- .brz-ed.brz-ed--mobile .brz-fs-xs-17{font-size:17px!important}
3768
- .brz-ed.brz-ed--mobile .brz-fs-xs-18{font-size:18px!important}
3769
- .brz-ed.brz-ed--mobile .brz-fs-xs-19{font-size:19px!important}
3770
- .brz-ed.brz-ed--mobile .brz-fs-xs-20{font-size:20px!important}
3771
- .brz-ed.brz-ed--mobile .brz-fs-xs-21{font-size:21px!important}
3772
- .brz-ed.brz-ed--mobile .brz-fs-xs-22{font-size:22px!important}
3773
- .brz-ed.brz-ed--mobile .brz-fs-xs-23{font-size:23px!important}
3774
- .brz-ed.brz-ed--mobile .brz-fs-xs-24{font-size:24px!important}
3775
- .brz-ed.brz-ed--mobile .brz-fs-xs-25{font-size:25px!important}
3776
- .brz-ed.brz-ed--mobile .brz-fs-xs-26{font-size:26px!important}
3777
- .brz-ed.brz-ed--mobile .brz-fs-xs-27{font-size:27px!important}
3778
- .brz-ed.brz-ed--mobile .brz-fs-xs-28{font-size:28px!important}
3779
- .brz-ed.brz-ed--mobile .brz-fs-xs-29{font-size:29px!important}
3780
- .brz-ed.brz-ed--mobile .brz-fs-xs-30{font-size:30px!important}
3781
- .brz-ed.brz-ed--mobile .brz-fs-xs-31{font-size:31px!important}
3782
- .brz-ed.brz-ed--mobile .brz-fs-xs-32{font-size:32px!important}
3783
- .brz-ed.brz-ed--mobile .brz-fs-xs-33{font-size:33px!important}
3784
- .brz-ed.brz-ed--mobile .brz-fs-xs-34{font-size:34px!important}
3785
- .brz-ed.brz-ed--mobile .brz-fs-xs-35{font-size:35px!important}
3786
- .brz-ed.brz-ed--mobile .brz-fs-xs-36{font-size:36px!important}
3787
- .brz-ed.brz-ed--mobile .brz-fs-xs-37{font-size:37px!important}
3788
- .brz-ed.brz-ed--mobile .brz-fs-xs-38{font-size:38px!important}
3789
- .brz-ed.brz-ed--mobile .brz-fs-xs-39{font-size:39px!important}
3790
- .brz-ed.brz-ed--mobile .brz-fs-xs-40{font-size:40px!important}
3791
- .brz-ed.brz-ed--mobile .brz-fs-xs-41{font-size:41px!important}
3792
- .brz-ed.brz-ed--mobile .brz-fs-xs-42{font-size:42px!important}
3793
- .brz-ed.brz-ed--mobile .brz-fs-xs-43{font-size:43px!important}
3794
- .brz-ed.brz-ed--mobile .brz-fs-xs-44{font-size:44px!important}
3795
- .brz-ed.brz-ed--mobile .brz-fs-xs-45{font-size:45px!important}
3796
- .brz-ed.brz-ed--mobile .brz-fs-xs-46{font-size:46px!important}
3797
- .brz-ed.brz-ed--mobile .brz-fs-xs-47{font-size:47px!important}
3798
- .brz-ed.brz-ed--mobile .brz-fs-xs-48{font-size:48px!important}
3799
- .brz-ed.brz-ed--mobile .brz-fs-xs-49{font-size:49px!important}
3800
- .brz-ed.brz-ed--mobile .brz-fs-xs-50{font-size:50px!important}
3801
- .brz-ed.brz-ed--mobile .brz-fs-xs-51{font-size:51px!important}
3802
- .brz-ed.brz-ed--mobile .brz-fs-xs-52{font-size:52px!important}
3803
- .brz-ed.brz-ed--mobile .brz-fs-xs-53{font-size:53px!important}
3804
- .brz-ed.brz-ed--mobile .brz-fs-xs-54{font-size:54px!important}
3805
- .brz-ed.brz-ed--mobile .brz-fs-xs-55{font-size:55px!important}
3806
- .brz-ed.brz-ed--mobile .brz-fs-xs-56{font-size:56px!important}
3807
- .brz-ed.brz-ed--mobile .brz-fs-xs-57{font-size:57px!important}
3808
- .brz-ed.brz-ed--mobile .brz-fs-xs-58{font-size:58px!important}
3809
- .brz-ed.brz-ed--mobile .brz-fs-xs-59{font-size:59px!important}
3810
- .brz-ed.brz-ed--mobile .brz-fs-xs-60{font-size:60px!important}
3811
- .brz-ed.brz-ed--mobile .brz-fs-xs-61{font-size:61px!important}
3812
- .brz-ed.brz-ed--mobile .brz-fs-xs-62{font-size:62px!important}
3813
- .brz-ed.brz-ed--mobile .brz-fs-xs-63{font-size:63px!important}
3814
- .brz-ed.brz-ed--mobile .brz-fs-xs-64{font-size:64px!important}
3815
- .brz-ed.brz-ed--mobile .brz-fs-xs-65{font-size:65px!important}
3816
- .brz-ed.brz-ed--mobile .brz-fs-xs-66{font-size:66px!important}
3817
- .brz-ed.brz-ed--mobile .brz-fs-xs-67{font-size:67px!important}
3818
- .brz-ed.brz-ed--mobile .brz-fs-xs-68{font-size:68px!important}
3819
- .brz-ed.brz-ed--mobile .brz-fs-xs-69{font-size:69px!important}
3820
- .brz-ed.brz-ed--mobile .brz-fs-xs-70{font-size:70px!important}
3821
- .brz-ed.brz-ed--mobile .brz-fs-xs-71{font-size:71px!important}
3822
- .brz-ed.brz-ed--mobile .brz-fs-xs-72{font-size:72px!important}
3823
- .brz-ed.brz-ed--mobile .brz-fs-xs-73{font-size:73px!important}
3824
- .brz-ed.brz-ed--mobile .brz-fs-xs-74{font-size:74px!important}
3825
- .brz-ed.brz-ed--mobile .brz-fs-xs-75{font-size:75px!important}
3826
- .brz-ed.brz-ed--mobile .brz-fs-xs-76{font-size:76px!important}
3827
- .brz-ed.brz-ed--mobile .brz-fs-xs-77{font-size:77px!important}
3828
- .brz-ed.brz-ed--mobile .brz-fs-xs-78{font-size:78px!important}
3829
- .brz-ed.brz-ed--mobile .brz-fs-xs-79{font-size:79px!important}
3830
- .brz-ed.brz-ed--mobile .brz-fs-xs-80{font-size:80px!important}
3831
- .brz-ed.brz-ed--mobile .brz-fs-xs-81{font-size:81px!important}
3832
- .brz-ed.brz-ed--mobile .brz-fs-xs-82{font-size:82px!important}
3833
- .brz-ed.brz-ed--mobile .brz-fs-xs-83{font-size:83px!important}
3834
- .brz-ed.brz-ed--mobile .brz-fs-xs-84{font-size:84px!important}
3835
- .brz-ed.brz-ed--mobile .brz-fs-xs-85{font-size:85px!important}
3836
- .brz-ed.brz-ed--mobile .brz-fs-xs-86{font-size:86px!important}
3837
- .brz-ed.brz-ed--mobile .brz-fs-xs-87{font-size:87px!important}
3838
- .brz-ed.brz-ed--mobile .brz-fs-xs-88{font-size:88px!important}
3839
- .brz-ed.brz-ed--mobile .brz-fs-xs-89{font-size:89px!important}
3840
- .brz-ed.brz-ed--mobile .brz-fs-xs-90{font-size:90px!important}
3841
- .brz-ed.brz-ed--mobile .brz-fs-xs-91{font-size:91px!important}
3842
- .brz-ed.brz-ed--mobile .brz-fs-xs-92{font-size:92px!important}
3843
- .brz-ed.brz-ed--mobile .brz-fs-xs-93{font-size:93px!important}
3844
- .brz-ed.brz-ed--mobile .brz-fs-xs-94{font-size:94px!important}
3845
- .brz-ed.brz-ed--mobile .brz-fs-xs-95{font-size:95px!important}
3846
- .brz-ed.brz-ed--mobile .brz-fs-xs-96{font-size:96px!important}
3847
- .brz-ed.brz-ed--mobile .brz-fs-xs-97{font-size:97px!important}
3848
- .brz-ed.brz-ed--mobile .brz-fs-xs-98{font-size:98px!important}
3849
- .brz-ed.brz-ed--mobile .brz-fs-xs-99{font-size:99px!important}
3850
- .brz-ed.brz-ed--mobile .brz-fs-xs-100{font-size:100px!important}
3851
- .brz-ed.brz-ed--mobile .brz-fs-xs-101{font-size:101px!important}
3852
- .brz-ed.brz-ed--mobile .brz-fs-xs-102{font-size:102px!important}
3853
- .brz-ed.brz-ed--mobile .brz-fs-xs-103{font-size:103px!important}
3854
- .brz-ed.brz-ed--mobile .brz-fs-xs-104{font-size:104px!important}
3855
- .brz-ed.brz-ed--mobile .brz-fs-xs-105{font-size:105px!important}
3856
- .brz-ed.brz-ed--mobile .brz-fs-xs-106{font-size:106px!important}
3857
- .brz-ed.brz-ed--mobile .brz-fs-xs-107{font-size:107px!important}
3858
- .brz-ed.brz-ed--mobile .brz-fs-xs-108{font-size:108px!important}
3859
- .brz-ed.brz-ed--mobile .brz-fs-xs-109{font-size:109px!important}
3860
- .brz-ed.brz-ed--mobile .brz-fs-xs-110{font-size:110px!important}
3861
- .brz-ed.brz-ed--mobile .brz-fs-xs-111{font-size:111px!important}
3862
- .brz-ed.brz-ed--mobile .brz-fs-xs-112{font-size:112px!important}
3863
- .brz-ed.brz-ed--mobile .brz-fs-xs-113{font-size:113px!important}
3864
- .brz-ed.brz-ed--mobile .brz-fs-xs-114{font-size:114px!important}
3865
- .brz-ed.brz-ed--mobile .brz-fs-xs-115{font-size:115px!important}
3866
- .brz-ed.brz-ed--mobile .brz-fs-xs-116{font-size:116px!important}
3867
- .brz-ed.brz-ed--mobile .brz-fs-xs-117{font-size:117px!important}
3868
- .brz-ed.brz-ed--mobile .brz-fs-xs-118{font-size:118px!important}
3869
- .brz-ed.brz-ed--mobile .brz-fs-xs-119{font-size:119px!important}
3870
- .brz-ed.brz-ed--mobile .brz-fs-xs-120{font-size:120px!important}
3871
- .brz-ed.brz-ed--mobile .brz-fs-xs-121{font-size:121px!important}
3872
- .brz-ed.brz-ed--mobile .brz-fs-xs-122{font-size:122px!important}
3873
- .brz-ed.brz-ed--mobile .brz-fs-xs-123{font-size:123px!important}
3874
- .brz-ed.brz-ed--mobile .brz-fs-xs-124{font-size:124px!important}
3875
- .brz-ed.brz-ed--mobile .brz-fs-xs-125{font-size:125px!important}
3876
- .brz-ed.brz-ed--mobile .brz-fs-xs-126{font-size:126px!important}
3877
- .brz-ed.brz-ed--mobile .brz-fs-xs-127{font-size:127px!important}
3878
- .brz-ed.brz-ed--mobile .brz-fs-xs-128{font-size:128px!important}
3879
- .brz-ed.brz-ed--mobile .brz-fs-xs-129{font-size:129px!important}
3880
- .brz-ed.brz-ed--mobile .brz-fs-xs-130{font-size:130px!important}
3881
- .brz-ed.brz-ed--mobile .brz-fs-xs-131{font-size:131px!important}
3882
- .brz-ed.brz-ed--mobile .brz-fs-xs-132{font-size:132px!important}
3883
- .brz-ed.brz-ed--mobile .brz-fs-xs-133{font-size:133px!important}
3884
- .brz-ed.brz-ed--mobile .brz-fs-xs-134{font-size:134px!important}
3885
- .brz-ed.brz-ed--mobile .brz-fs-xs-135{font-size:135px!important}
3886
- .brz-ed.brz-ed--mobile .brz-fs-xs-136{font-size:136px!important}
3887
- .brz-ed.brz-ed--mobile .brz-fs-xs-137{font-size:137px!important}
3888
- .brz-ed.brz-ed--mobile .brz-fs-xs-138{font-size:138px!important}
3889
- .brz-ed.brz-ed--mobile .brz-fs-xs-139{font-size:139px!important}
3890
- .brz-ed.brz-ed--mobile .brz-fs-xs-140{font-size:140px!important}
3891
- .brz-ed.brz-ed--mobile .brz-fs-xs-141{font-size:141px!important}
3892
- .brz-ed.brz-ed--mobile .brz-fs-xs-142{font-size:142px!important}
3893
- .brz-ed.brz-ed--mobile .brz-fs-xs-143{font-size:143px!important}
3894
- .brz-ed.brz-ed--mobile .brz-fs-xs-144{font-size:144px!important}
3895
- .brz-ed.brz-ed--mobile .brz-fs-xs-145{font-size:145px!important}
3896
- .brz-ed.brz-ed--mobile .brz-fs-xs-146{font-size:146px!important}
3897
- .brz-ed.brz-ed--mobile .brz-fs-xs-147{font-size:147px!important}
3898
- .brz-ed.brz-ed--mobile .brz-fs-xs-148{font-size:148px!important}
3899
- .brz-ed.brz-ed--mobile .brz-fs-xs-149{font-size:149px!important}
3900
- .brz-ed.brz-ed--mobile .brz-fs-xs-150{font-size:150px!important}
3901
- .brz-ed.brz-ed--mobile .brz-fs-xs-151{font-size:151px!important}
3902
- .brz-ed.brz-ed--mobile .brz-fs-xs-152{font-size:152px!important}
3903
- .brz-ed.brz-ed--mobile .brz-fs-xs-153{font-size:153px!important}
3904
- .brz-ed.brz-ed--mobile .brz-fs-xs-154{font-size:154px!important}
3905
- .brz-ed.brz-ed--mobile .brz-fs-xs-155{font-size:155px!important}
3906
- .brz-ed.brz-ed--mobile .brz-fs-xs-156{font-size:156px!important}
3907
- .brz-ed.brz-ed--mobile .brz-fs-xs-157{font-size:157px!important}
3908
- .brz-ed.brz-ed--mobile .brz-fs-xs-158{font-size:158px!important}
3909
- .brz-ed.brz-ed--mobile .brz-fs-xs-159{font-size:159px!important}
3910
- .brz-ed.brz-ed--mobile .brz-fs-xs-160{font-size:160px!important}
3911
- .brz-ed.brz-ed--mobile .brz-fs-xs-161{font-size:161px!important}
3912
- .brz-ed.brz-ed--mobile .brz-fs-xs-162{font-size:162px!important}
3913
- .brz-ed.brz-ed--mobile .brz-fs-xs-163{font-size:163px!important}
3914
- .brz-ed.brz-ed--mobile .brz-fs-xs-164{font-size:164px!important}
3915
- .brz-ed.brz-ed--mobile .brz-fs-xs-165{font-size:165px!important}
3916
- .brz-ed.brz-ed--mobile .brz-fs-xs-166{font-size:166px!important}
3917
- .brz-ed.brz-ed--mobile .brz-fs-xs-167{font-size:167px!important}
3918
- .brz-ed.brz-ed--mobile .brz-fs-xs-168{font-size:168px!important}
3919
- .brz-ed.brz-ed--mobile .brz-fs-xs-169{font-size:169px!important}
3920
- .brz-ed.brz-ed--mobile .brz-fs-xs-170{font-size:170px!important}
3921
- .brz-ed.brz-ed--mobile .brz-fs-xs-171{font-size:171px!important}
3922
- .brz-ed.brz-ed--mobile .brz-fs-xs-172{font-size:172px!important}
3923
- .brz-ed.brz-ed--mobile .brz-fs-xs-173{font-size:173px!important}
3924
- .brz-ed.brz-ed--mobile .brz-fs-xs-174{font-size:174px!important}
3925
- .brz-ed.brz-ed--mobile .brz-fs-xs-175{font-size:175px!important}
3926
- .brz-ed.brz-ed--mobile .brz-fs-xs-176{font-size:176px!important}
3927
- .brz-ed.brz-ed--mobile .brz-fs-xs-177{font-size:177px!important}
3928
- .brz-ed.brz-ed--mobile .brz-fs-xs-178{font-size:178px!important}
3929
- .brz-ed.brz-ed--mobile .brz-fs-xs-179{font-size:179px!important}
3930
- .brz-ed.brz-ed--mobile .brz-fs-xs-180{font-size:180px!important}
3931
- .brz-ed.brz-ed--mobile .brz-fs-xs-181{font-size:181px!important}
3932
- .brz-ed.brz-ed--mobile .brz-fs-xs-182{font-size:182px!important}
3933
- .brz-ed.brz-ed--mobile .brz-fs-xs-183{font-size:183px!important}
3934
- .brz-ed.brz-ed--mobile .brz-fs-xs-184{font-size:184px!important}
3935
- .brz-ed.brz-ed--mobile .brz-fs-xs-185{font-size:185px!important}
3936
- .brz-ed.brz-ed--mobile .brz-fs-xs-186{font-size:186px!important}
3937
- .brz-ed.brz-ed--mobile .brz-fs-xs-187{font-size:187px!important}
3938
- .brz-ed.brz-ed--mobile .brz-fs-xs-188{font-size:188px!important}
3939
- .brz-ed.brz-ed--mobile .brz-fs-xs-189{font-size:189px!important}
3940
- .brz-ed.brz-ed--mobile .brz-fs-xs-190{font-size:190px!important}
3941
- .brz-ed.brz-ed--mobile .brz-fs-xs-191{font-size:191px!important}
3942
- .brz-ed.brz-ed--mobile .brz-fs-xs-192{font-size:192px!important}
3943
- .brz-ed.brz-ed--mobile .brz-fs-xs-193{font-size:193px!important}
3944
- .brz-ed.brz-ed--mobile .brz-fs-xs-194{font-size:194px!important}
3945
- .brz-ed.brz-ed--mobile .brz-fs-xs-195{font-size:195px!important}
3946
- .brz-ed.brz-ed--mobile .brz-fs-xs-196{font-size:196px!important}
3947
- .brz-ed.brz-ed--mobile .brz-fs-xs-197{font-size:197px!important}
3948
- .brz-ed.brz-ed--mobile .brz-fs-xs-198{font-size:198px!important}
3949
- .brz-ed.brz-ed--mobile .brz-fs-xs-199{font-size:199px!important}
3950
- .brz-ed.brz-ed--mobile .brz-fs-xs-200{font-size:200px!important}
3951
- .brz-ed.brz-ed--mobile .brz-fs-xs-201{font-size:201px!important}
3952
- .brz-ed.brz-ed--mobile .brz-fs-xs-202{font-size:202px!important}
3953
- .brz-ed.brz-ed--mobile .brz-fs-xs-203{font-size:203px!important}
3954
- .brz-ed.brz-ed--mobile .brz-fs-xs-204{font-size:204px!important}
3955
- .brz-ed.brz-ed--mobile .brz-fs-xs-205{font-size:205px!important}
3956
- .brz-ed.brz-ed--mobile .brz-fs-xs-206{font-size:206px!important}
3957
- .brz-ed.brz-ed--mobile .brz-fs-xs-207{font-size:207px!important}
3958
- .brz-ed.brz-ed--mobile .brz-fs-xs-208{font-size:208px!important}
3959
- .brz-ed.brz-ed--mobile .brz-fs-xs-209{font-size:209px!important}
3960
- .brz-ed.brz-ed--mobile .brz-fs-xs-210{font-size:210px!important}
3961
- .brz-ed.brz-ed--mobile .brz-fs-xs-211{font-size:211px!important}
3962
- .brz-ed.brz-ed--mobile .brz-fs-xs-212{font-size:212px!important}
3963
- .brz-ed.brz-ed--mobile .brz-fs-xs-213{font-size:213px!important}
3964
- .brz-ed.brz-ed--mobile .brz-fs-xs-214{font-size:214px!important}
3965
- .brz-ed.brz-ed--mobile .brz-fs-xs-215{font-size:215px!important}
3966
- .brz-ed.brz-ed--mobile .brz-fs-xs-216{font-size:216px!important}
3967
- .brz-ed.brz-ed--mobile .brz-fs-xs-217{font-size:217px!important}
3968
- .brz-ed.brz-ed--mobile .brz-fs-xs-218{font-size:218px!important}
3969
- .brz-ed.brz-ed--mobile .brz-fs-xs-219{font-size:219px!important}
3970
- .brz-ed.brz-ed--mobile .brz-fs-xs-220{font-size:220px!important}
3971
- .brz-ed.brz-ed--mobile .brz-fs-xs-221{font-size:221px!important}
3972
- .brz-ed.brz-ed--mobile .brz-fs-xs-222{font-size:222px!important}
3973
- .brz-ed.brz-ed--mobile .brz-fs-xs-223{font-size:223px!important}
3974
- .brz-ed.brz-ed--mobile .brz-fs-xs-224{font-size:224px!important}
3975
- .brz-ed.brz-ed--mobile .brz-fs-xs-225{font-size:225px!important}
3976
- .brz-ed.brz-ed--mobile .brz-fs-xs-226{font-size:226px!important}
3977
- .brz-ed.brz-ed--mobile .brz-fs-xs-227{font-size:227px!important}
3978
- .brz-ed.brz-ed--mobile .brz-fs-xs-228{font-size:228px!important}
3979
- .brz-ed.brz-ed--mobile .brz-fs-xs-229{font-size:229px!important}
3980
- .brz-ed.brz-ed--mobile .brz-fs-xs-230{font-size:230px!important}
3981
- .brz-ed.brz-ed--mobile .brz-fs-xs-231{font-size:231px!important}
3982
- .brz-ed.brz-ed--mobile .brz-fs-xs-232{font-size:232px!important}
3983
- .brz-ed.brz-ed--mobile .brz-fs-xs-233{font-size:233px!important}
3984
- .brz-ed.brz-ed--mobile .brz-fs-xs-234{font-size:234px!important}
3985
- .brz-ed.brz-ed--mobile .brz-fs-xs-235{font-size:235px!important}
3986
- .brz-ed.brz-ed--mobile .brz-fs-xs-236{font-size:236px!important}
3987
- .brz-ed.brz-ed--mobile .brz-fs-xs-237{font-size:237px!important}
3988
- .brz-ed.brz-ed--mobile .brz-fs-xs-238{font-size:238px!important}
3989
- .brz-ed.brz-ed--mobile .brz-fs-xs-239{font-size:239px!important}
3990
- .brz-ed.brz-ed--mobile .brz-fs-xs-240{font-size:240px!important}
3991
- .brz-ed.brz-ed--mobile .brz-fs-xs-241{font-size:241px!important}
3992
- .brz-ed.brz-ed--mobile .brz-fs-xs-242{font-size:242px!important}
3993
- .brz-ed.brz-ed--mobile .brz-fs-xs-243{font-size:243px!important}
3994
- .brz-ed.brz-ed--mobile .brz-fs-xs-244{font-size:244px!important}
3995
- .brz-ed.brz-ed--mobile .brz-fs-xs-245{font-size:245px!important}
3996
- .brz-ed.brz-ed--mobile .brz-fs-xs-246{font-size:246px!important}
3997
- .brz-ed.brz-ed--mobile .brz-fs-xs-247{font-size:247px!important}
3998
- .brz-ed.brz-ed--mobile .brz-fs-xs-248{font-size:248px!important}
3999
- .brz-ed.brz-ed--mobile .brz-fs-xs-249{font-size:249px!important}
4000
- .brz-ed.brz-ed--mobile .brz-fs-xs-250{font-size:250px!important}
4001
- .brz-ed.brz-ed--mobile .brz-fs-xs-251{font-size:251px!important}
4002
- .brz-ed.brz-ed--mobile .brz-fs-xs-252{font-size:252px!important}
4003
- .brz-ed.brz-ed--mobile .brz-fs-xs-253{font-size:253px!important}
4004
- .brz-ed.brz-ed--mobile .brz-fs-xs-254{font-size:254px!important}
4005
- .brz-ed.brz-ed--mobile .brz-fs-xs-255{font-size:255px!important}
4006
- .brz-ed.brz-ed--mobile .brz-fs-xs-256{font-size:256px!important}
4007
- .brz-ed.brz-ed--mobile .brz-fs-xs-257{font-size:257px!important}
4008
- .brz-ed.brz-ed--mobile .brz-fs-xs-258{font-size:258px!important}
4009
- .brz-ed.brz-ed--mobile .brz-fs-xs-259{font-size:259px!important}
4010
- .brz-ed.brz-ed--mobile .brz-fs-xs-260{font-size:260px!important}
4011
- .brz-ed.brz-ed--mobile .brz-fs-xs-261{font-size:261px!important}
4012
- .brz-ed.brz-ed--mobile .brz-fs-xs-262{font-size:262px!important}
4013
- .brz-ed.brz-ed--mobile .brz-fs-xs-263{font-size:263px!important}
4014
- .brz-ed.brz-ed--mobile .brz-fs-xs-264{font-size:264px!important}
4015
- .brz-ed.brz-ed--mobile .brz-fs-xs-265{font-size:265px!important}
4016
- .brz-ed.brz-ed--mobile .brz-fs-xs-266{font-size:266px!important}
4017
- .brz-ed.brz-ed--mobile .brz-fs-xs-267{font-size:267px!important}
4018
- .brz-ed.brz-ed--mobile .brz-fs-xs-268{font-size:268px!important}
4019
- .brz-ed.brz-ed--mobile .brz-fs-xs-269{font-size:269px!important}
4020
- .brz-ed.brz-ed--mobile .brz-fs-xs-270{font-size:270px!important}
4021
- .brz-ed.brz-ed--mobile .brz-fs-xs-271{font-size:271px!important}
4022
- .brz-ed.brz-ed--mobile .brz-fs-xs-272{font-size:272px!important}
4023
- .brz-ed.brz-ed--mobile .brz-fs-xs-273{font-size:273px!important}
4024
- .brz-ed.brz-ed--mobile .brz-fs-xs-274{font-size:274px!important}
4025
- .brz-ed.brz-ed--mobile .brz-fs-xs-275{font-size:275px!important}
4026
- .brz-ed.brz-ed--mobile .brz-fs-xs-276{font-size:276px!important}
4027
- .brz-ed.brz-ed--mobile .brz-fs-xs-277{font-size:277px!important}
4028
- .brz-ed.brz-ed--mobile .brz-fs-xs-278{font-size:278px!important}
4029
- .brz-ed.brz-ed--mobile .brz-fs-xs-279{font-size:279px!important}
4030
- .brz-ed.brz-ed--mobile .brz-fs-xs-280{font-size:280px!important}
4031
- .brz-ed.brz-ed--mobile .brz-fs-xs-281{font-size:281px!important}
4032
- .brz-ed.brz-ed--mobile .brz-fs-xs-282{font-size:282px!important}
4033
- .brz-ed.brz-ed--mobile .brz-fs-xs-283{font-size:283px!important}
4034
- .brz-ed.brz-ed--mobile .brz-fs-xs-284{font-size:284px!important}
4035
- .brz-ed.brz-ed--mobile .brz-fs-xs-285{font-size:285px!important}
4036
- .brz-ed.brz-ed--mobile .brz-fs-xs-286{font-size:286px!important}
4037
- .brz-ed.brz-ed--mobile .brz-fs-xs-287{font-size:287px!important}
4038
- .brz-ed.brz-ed--mobile .brz-fs-xs-288{font-size:288px!important}
4039
- .brz-ed.brz-ed--mobile .brz-fs-xs-289{font-size:289px!important}
4040
- .brz-ed.brz-ed--mobile .brz-fs-xs-290{font-size:290px!important}
4041
- .brz-ed.brz-ed--mobile .brz-fs-xs-291{font-size:291px!important}
4042
- .brz-ed.brz-ed--mobile .brz-fs-xs-292{font-size:292px!important}
4043
- .brz-ed.brz-ed--mobile .brz-fs-xs-293{font-size:293px!important}
4044
- .brz-ed.brz-ed--mobile .brz-fs-xs-294{font-size:294px!important}
4045
- .brz-ed.brz-ed--mobile .brz-fs-xs-295{font-size:295px!important}
4046
- .brz-ed.brz-ed--mobile .brz-fs-xs-296{font-size:296px!important}
4047
- .brz-ed.brz-ed--mobile .brz-fs-xs-297{font-size:297px!important}
4048
- .brz-ed.brz-ed--mobile .brz-fs-xs-298{font-size:298px!important}
4049
- .brz-ed.brz-ed--mobile .brz-fs-xs-299{font-size:299px!important}
4050
- .brz-ed.brz-ed--mobile .brz-fs-xs-300{font-size:300px!important}
4051
- .brz-ed.brz-ed--mobile .brz-lh-xs-1{line-height:1em!important}
4052
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_1{line-height:1.1em!important}
4053
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_2{line-height:1.2em!important}
4054
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_3{line-height:1.3em!important}
4055
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_4{line-height:1.4em!important}
4056
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_5{line-height:1.5em!important}
4057
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_6{line-height:1.6em!important}
4058
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_7{line-height:1.7em!important}
4059
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_8{line-height:1.8em!important}
4060
- .brz-ed.brz-ed--mobile .brz-lh-xs-1_9{line-height:1.9em!important}
4061
- .brz-ed.brz-ed--mobile .brz-lh-xs-2{line-height:2em!important}
4062
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_1{line-height:2.1em!important}
4063
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_2{line-height:2.2em!important}
4064
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_3{line-height:2.3em!important}
4065
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_4{line-height:2.4em!important}
4066
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_5{line-height:2.5em!important}
4067
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_6{line-height:2.6em!important}
4068
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_7{line-height:2.7em!important}
4069
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_8{line-height:2.8em!important}
4070
- .brz-ed.brz-ed--mobile .brz-lh-xs-2_9{line-height:2.9em!important}
4071
- .brz-ed.brz-ed--mobile .brz-lh-xs-3{line-height:3em!important}
4072
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_1{line-height:3.1em!important}
4073
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_2{line-height:3.2em!important}
4074
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_3{line-height:3.3em!important}
4075
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_4{line-height:3.4em!important}
4076
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_5{line-height:3.5em!important}
4077
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_6{line-height:3.6em!important}
4078
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_7{line-height:3.7em!important}
4079
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_8{line-height:3.8em!important}
4080
- .brz-ed.brz-ed--mobile .brz-lh-xs-3_9{line-height:3.9em!important}
4081
- .brz-ed.brz-ed--mobile .brz-lh-xs-4{line-height:4em!important}
4082
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_1{line-height:4.1em!important}
4083
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_2{line-height:4.2em!important}
4084
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_3{line-height:4.3em!important}
4085
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_4{line-height:4.4em!important}
4086
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_5{line-height:4.5em!important}
4087
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_6{line-height:4.6em!important}
4088
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_7{line-height:4.7em!important}
4089
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_8{line-height:4.8em!important}
4090
- .brz-ed.brz-ed--mobile .brz-lh-xs-4_9{line-height:4.9em!important}
4091
- .brz-ed.brz-ed--mobile .brz-lh-xs-5{line-height:5em!important}
4092
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_1{line-height:5.1em!important}
4093
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_2{line-height:5.2em!important}
4094
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_3{line-height:5.3em!important}
4095
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_4{line-height:5.4em!important}
4096
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_5{line-height:5.5em!important}
4097
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_6{line-height:5.6em!important}
4098
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_7{line-height:5.7em!important}
4099
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_8{line-height:5.8em!important}
4100
- .brz-ed.brz-ed--mobile .brz-lh-xs-5_9{line-height:5.9em!important}
4101
- .brz-ed.brz-ed--mobile .brz-fw-xs-100{font-weight:100!important}
4102
- .brz-ed.brz-ed--mobile .brz-fw-xs-200{font-weight:200!important}
4103
- .brz-ed.brz-ed--mobile .brz-fw-xs-300{font-weight:300!important}
4104
- .brz-ed.brz-ed--mobile .brz-fw-xs-400{font-weight:400!important}
4105
- .brz-ed.brz-ed--mobile .brz-fw-xs-500{font-weight:500!important}
4106
- .brz-ed.brz-ed--mobile .brz-fw-xs-600{font-weight:600!important}
4107
- .brz-ed.brz-ed--mobile .brz-fw-xs-700{font-weight:700!important}
4108
- .brz-ed.brz-ed--mobile .brz-fw-xs-800{font-weight:800!important}
4109
- .brz-ed.brz-ed--mobile .brz-fw-xs-900{font-weight:900!important}
4110
- .brz-ed.brz-ed--mobile .brz-fw-xs-1000{font-weight:1000!important}
4111
- .brz-ed.brz-ed--mobile .brz-fw-xs-1100{font-weight:1100!important}
4112
- .brz-ed.brz-ed--mobile .brz-fw-xs-1200{font-weight:1200!important}
4113
- .brz-ed.brz-ed--mobile .brz-fw-xs-1300{font-weight:1300!important}
4114
- .brz-ed.brz-ed--mobile .brz-fw-xs-1400{font-weight:1400!important}
4115
- .brz-ed.brz-ed--mobile .brz-fw-xs-1500{font-weight:1500!important}
4116
- .brz-ed.brz-ed--mobile .brz-fw-xs-1600{font-weight:1600!important}
4117
- .brz-ed.brz-ed--mobile .brz-fw-xs-1700{font-weight:1700!important}
4118
- .brz-ed.brz-ed--mobile .brz-fw-xs-1800{font-weight:1800!important}
4119
- .brz-ed.brz-ed--mobile .brz-fw-xs-1900{font-weight:1900!important}
4120
- .brz-ed.brz-ed--mobile .brz-fw-xs-2000{font-weight:2000!important}
4121
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_20{letter-spacing:-20px!important}
4122
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_20_5{letter-spacing:-20.5px!important}
4123
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_19{letter-spacing:-19px!important}
4124
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_19_5{letter-spacing:-19.5px!important}
4125
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_18{letter-spacing:-18px!important}
4126
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_18_5{letter-spacing:-18.5px!important}
4127
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_17{letter-spacing:-17px!important}
4128
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_17_5{letter-spacing:-17.5px!important}
4129
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_16{letter-spacing:-16px!important}
4130
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_16_5{letter-spacing:-16.5px!important}
4131
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_15{letter-spacing:-15px!important}
4132
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_15_5{letter-spacing:-15.5px!important}
4133
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_14{letter-spacing:-14px!important}
4134
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_14_5{letter-spacing:-14.5px!important}
4135
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_13{letter-spacing:-13px!important}
4136
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_13_5{letter-spacing:-13.5px!important}
4137
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_12{letter-spacing:-12px!important}
4138
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_12_5{letter-spacing:-12.5px!important}
4139
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_11{letter-spacing:-11px!important}
4140
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_11_5{letter-spacing:-11.5px!important}
4141
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_10{letter-spacing:-10px!important}
4142
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_10_5{letter-spacing:-10.5px!important}
4143
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_9{letter-spacing:-9px!important}
4144
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_9_5{letter-spacing:-9.5px!important}
4145
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_8{letter-spacing:-8px!important}
4146
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_8_5{letter-spacing:-8.5px!important}
4147
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_7{letter-spacing:-7px!important}
4148
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_7_5{letter-spacing:-7.5px!important}
4149
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_6{letter-spacing:-6px!important}
4150
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_6_5{letter-spacing:-6.5px!important}
4151
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_5{letter-spacing:-5px!important}
4152
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_5_5{letter-spacing:-5.5px!important}
4153
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_4{letter-spacing:-4px!important}
4154
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_4_5{letter-spacing:-4.5px!important}
4155
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_3{letter-spacing:-3px!important}
4156
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_3_5{letter-spacing:-3.5px!important}
4157
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_2{letter-spacing:-2px!important}
4158
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_2_5{letter-spacing:-2.5px!important}
4159
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_1{letter-spacing:-1px!important}
4160
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_1_5{letter-spacing:-1.5px!important}
4161
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_0{letter-spacing:0!important}
4162
- .brz-ed.brz-ed--mobile .brz-ls-xs-m_0_5{letter-spacing:-.5px!important}
4163
- .brz-ed.brz-ed--mobile .brz-ls-xs-0{letter-spacing:0!important}
4164
- .brz-ed.brz-ed--mobile .brz-ls-xs-0_5{letter-spacing:.5px!important}
4165
- .brz-ed.brz-ed--mobile .brz-ls-xs-1{letter-spacing:1px!important}
4166
- .brz-ed.brz-ed--mobile .brz-ls-xs-1_5{letter-spacing:1.5px!important}
4167
- .brz-ed.brz-ed--mobile .brz-ls-xs-2{letter-spacing:2px!important}
4168
- .brz-ed.brz-ed--mobile .brz-ls-xs-2_5{letter-spacing:2.5px!important}
4169
- .brz-ed.brz-ed--mobile .brz-ls-xs-3{letter-spacing:3px!important}
4170
- .brz-ed.brz-ed--mobile .brz-ls-xs-3_5{letter-spacing:3.5px!important}
4171
- .brz-ed.brz-ed--mobile .brz-ls-xs-4{letter-spacing:4px!important}
4172
- .brz-ed.brz-ed--mobile .brz-ls-xs-4_5{letter-spacing:4.5px!important}
4173
- .brz-ed.brz-ed--mobile .brz-ls-xs-5{letter-spacing:5px!important}
4174
- .brz-ed.brz-ed--mobile .brz-ls-xs-5_5{letter-spacing:5.5px!important}
4175
- .brz-ed.brz-ed--mobile .brz-ls-xs-6{letter-spacing:6px!important}
4176
- .brz-ed.brz-ed--mobile .brz-ls-xs-6_5{letter-spacing:6.5px!important}
4177
- .brz-ed.brz-ed--mobile .brz-ls-xs-7{letter-spacing:7px!important}
4178
- .brz-ed.brz-ed--mobile .brz-ls-xs-7_5{letter-spacing:7.5px!important}
4179
- .brz-ed.brz-ed--mobile .brz-ls-xs-8{letter-spacing:8px!important}
4180
- .brz-ed.brz-ed--mobile .brz-ls-xs-8_5{letter-spacing:8.5px!important}
4181
- .brz-ed.brz-ed--mobile .brz-ls-xs-9{letter-spacing:9px!important}
4182
- .brz-ed.brz-ed--mobile .brz-ls-xs-9_5{letter-spacing:9.5px!important}
4183
- .brz-ed.brz-ed--mobile .brz-ls-xs-10{letter-spacing:10px!important}
4184
- .brz-ed.brz-ed--mobile .brz-ls-xs-10_5{letter-spacing:10.5px!important}
4185
- .brz-ed.brz-ed--mobile .brz-ls-xs-11{letter-spacing:11px!important}
4186
- .brz-ed.brz-ed--mobile .brz-ls-xs-11_5{letter-spacing:11.5px!important}
4187
- .brz-ed.brz-ed--mobile .brz-ls-xs-12{letter-spacing:12px!important}
4188
- .brz-ed.brz-ed--mobile .brz-ls-xs-12_5{letter-spacing:12.5px!important}
4189
- .brz-ed.brz-ed--mobile .brz-ls-xs-13{letter-spacing:13px!important}
4190
- .brz-ed.brz-ed--mobile .brz-ls-xs-13_5{letter-spacing:13.5px!important}
4191
- .brz-ed.brz-ed--mobile .brz-ls-xs-14{letter-spacing:14px!important}
4192
- .brz-ed.brz-ed--mobile .brz-ls-xs-14_5{letter-spacing:14.5px!important}
4193
- .brz-ed.brz-ed--mobile .brz-ls-xs-15{letter-spacing:15px!important}
4194
- .brz-ed.brz-ed--mobile .brz-ls-xs-15_5{letter-spacing:15.5px!important}
4195
- .brz-ed.brz-ed--mobile .brz-ls-xs-16{letter-spacing:16px!important}
4196
- .brz-ed.brz-ed--mobile .brz-ls-xs-16_5{letter-spacing:16.5px!important}
4197
- .brz-ed.brz-ed--mobile .brz-ls-xs-17{letter-spacing:17px!important}
4198
- .brz-ed.brz-ed--mobile .brz-ls-xs-17_5{letter-spacing:17.5px!important}
4199
- .brz-ed.brz-ed--mobile .brz-ls-xs-18{letter-spacing:18px!important}
4200
- .brz-ed.brz-ed--mobile .brz-ls-xs-18_5{letter-spacing:18.5px!important}
4201
- .brz-ed.brz-ed--mobile .brz-ls-xs-19{letter-spacing:19px!important}
4202
- .brz-ed.brz-ed--mobile .brz-ls-xs-19_5{letter-spacing:19.5px!important}
4203
- .brz-ed.brz-ed--mobile .brz-ls-xs-20{letter-spacing:20px!important}
4204
- .brz-ed.brz-ed--mobile .brz-ls-xs-20_5{letter-spacing:20.5px!important}
4205
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-6{font-size:6px!important}
4206
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-7{font-size:7px!important}
4207
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-8{font-size:8px!important}
4208
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-9{font-size:9px!important}
4209
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-10{font-size:10px!important}
4210
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-11{font-size:11px!important}
4211
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-12{font-size:12px!important}
4212
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-13{font-size:13px!important}
4213
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-14{font-size:14px!important}
4214
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-15{font-size:15px!important}
4215
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-16{font-size:16px!important}
4216
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-17{font-size:17px!important}
4217
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-18{font-size:18px!important}
4218
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-19{font-size:19px!important}
4219
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-20{font-size:20px!important}
4220
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-21{font-size:21px!important}
4221
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-22{font-size:22px!important}
4222
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-23{font-size:23px!important}
4223
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-24{font-size:24px!important}
4224
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-25{font-size:25px!important}
4225
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-26{font-size:26px!important}
4226
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-27{font-size:27px!important}
4227
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-28{font-size:28px!important}
4228
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-29{font-size:29px!important}
4229
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-30{font-size:30px!important}
4230
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-31{font-size:31px!important}
4231
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-32{font-size:32px!important}
4232
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-33{font-size:33px!important}
4233
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-34{font-size:34px!important}
4234
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-35{font-size:35px!important}
4235
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-36{font-size:36px!important}
4236
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-37{font-size:37px!important}
4237
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-38{font-size:38px!important}
4238
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-39{font-size:39px!important}
4239
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-40{font-size:40px!important}
4240
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-41{font-size:41px!important}
4241
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-42{font-size:42px!important}
4242
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-43{font-size:43px!important}
4243
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-44{font-size:44px!important}
4244
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-45{font-size:45px!important}
4245
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-46{font-size:46px!important}
4246
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-47{font-size:47px!important}
4247
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-48{font-size:48px!important}
4248
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-49{font-size:49px!important}
4249
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-50{font-size:50px!important}
4250
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-51{font-size:51px!important}
4251
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-52{font-size:52px!important}
4252
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-53{font-size:53px!important}
4253
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-54{font-size:54px!important}
4254
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-55{font-size:55px!important}
4255
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-56{font-size:56px!important}
4256
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-57{font-size:57px!important}
4257
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-58{font-size:58px!important}
4258
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-59{font-size:59px!important}
4259
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-60{font-size:60px!important}
4260
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-61{font-size:61px!important}
4261
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-62{font-size:62px!important}
4262
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-63{font-size:63px!important}
4263
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-64{font-size:64px!important}
4264
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-65{font-size:65px!important}
4265
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-66{font-size:66px!important}
4266
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-67{font-size:67px!important}
4267
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-68{font-size:68px!important}
4268
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-69{font-size:69px!important}
4269
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-70{font-size:70px!important}
4270
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-71{font-size:71px!important}
4271
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-72{font-size:72px!important}
4272
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-73{font-size:73px!important}
4273
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-74{font-size:74px!important}
4274
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-75{font-size:75px!important}
4275
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-76{font-size:76px!important}
4276
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-77{font-size:77px!important}
4277
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-78{font-size:78px!important}
4278
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-79{font-size:79px!important}
4279
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-80{font-size:80px!important}
4280
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-81{font-size:81px!important}
4281
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-82{font-size:82px!important}
4282
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-83{font-size:83px!important}
4283
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-84{font-size:84px!important}
4284
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-85{font-size:85px!important}
4285
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-86{font-size:86px!important}
4286
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-87{font-size:87px!important}
4287
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-88{font-size:88px!important}
4288
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-89{font-size:89px!important}
4289
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-90{font-size:90px!important}
4290
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-91{font-size:91px!important}
4291
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-92{font-size:92px!important}
4292
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-93{font-size:93px!important}
4293
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-94{font-size:94px!important}
4294
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-95{font-size:95px!important}
4295
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-96{font-size:96px!important}
4296
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-97{font-size:97px!important}
4297
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-98{font-size:98px!important}
4298
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-99{font-size:99px!important}
4299
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-100{font-size:100px!important}
4300
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-101{font-size:101px!important}
4301
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-102{font-size:102px!important}
4302
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-103{font-size:103px!important}
4303
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-104{font-size:104px!important}
4304
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-105{font-size:105px!important}
4305
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-106{font-size:106px!important}
4306
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-107{font-size:107px!important}
4307
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-108{font-size:108px!important}
4308
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-109{font-size:109px!important}
4309
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-110{font-size:110px!important}
4310
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-111{font-size:111px!important}
4311
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-112{font-size:112px!important}
4312
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-113{font-size:113px!important}
4313
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-114{font-size:114px!important}
4314
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-115{font-size:115px!important}
4315
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-116{font-size:116px!important}
4316
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-117{font-size:117px!important}
4317
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-118{font-size:118px!important}
4318
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-119{font-size:119px!important}
4319
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-120{font-size:120px!important}
4320
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-121{font-size:121px!important}
4321
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-122{font-size:122px!important}
4322
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-123{font-size:123px!important}
4323
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-124{font-size:124px!important}
4324
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-125{font-size:125px!important}
4325
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-126{font-size:126px!important}
4326
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-127{font-size:127px!important}
4327
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-128{font-size:128px!important}
4328
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-129{font-size:129px!important}
4329
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-130{font-size:130px!important}
4330
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-131{font-size:131px!important}
4331
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-132{font-size:132px!important}
4332
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-133{font-size:133px!important}
4333
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-134{font-size:134px!important}
4334
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-135{font-size:135px!important}
4335
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-136{font-size:136px!important}
4336
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-137{font-size:137px!important}
4337
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-138{font-size:138px!important}
4338
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-139{font-size:139px!important}
4339
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-140{font-size:140px!important}
4340
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-141{font-size:141px!important}
4341
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-142{font-size:142px!important}
4342
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-143{font-size:143px!important}
4343
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-144{font-size:144px!important}
4344
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-145{font-size:145px!important}
4345
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-146{font-size:146px!important}
4346
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-147{font-size:147px!important}
4347
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-148{font-size:148px!important}
4348
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-149{font-size:149px!important}
4349
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-150{font-size:150px!important}
4350
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-151{font-size:151px!important}
4351
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-152{font-size:152px!important}
4352
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-153{font-size:153px!important}
4353
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-154{font-size:154px!important}
4354
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-155{font-size:155px!important}
4355
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-156{font-size:156px!important}
4356
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-157{font-size:157px!important}
4357
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-158{font-size:158px!important}
4358
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-159{font-size:159px!important}
4359
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-160{font-size:160px!important}
4360
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-161{font-size:161px!important}
4361
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-162{font-size:162px!important}
4362
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-163{font-size:163px!important}
4363
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-164{font-size:164px!important}
4364
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-165{font-size:165px!important}
4365
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-166{font-size:166px!important}
4366
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-167{font-size:167px!important}
4367
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-168{font-size:168px!important}
4368
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-169{font-size:169px!important}
4369
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-170{font-size:170px!important}
4370
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-171{font-size:171px!important}
4371
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-172{font-size:172px!important}
4372
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-173{font-size:173px!important}
4373
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-174{font-size:174px!important}
4374
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-175{font-size:175px!important}
4375
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-176{font-size:176px!important}
4376
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-177{font-size:177px!important}
4377
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-178{font-size:178px!important}
4378
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-179{font-size:179px!important}
4379
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-180{font-size:180px!important}
4380
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-181{font-size:181px!important}
4381
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-182{font-size:182px!important}
4382
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-183{font-size:183px!important}
4383
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-184{font-size:184px!important}
4384
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-185{font-size:185px!important}
4385
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-186{font-size:186px!important}
4386
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-187{font-size:187px!important}
4387
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-188{font-size:188px!important}
4388
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-189{font-size:189px!important}
4389
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-190{font-size:190px!important}
4390
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-191{font-size:191px!important}
4391
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-192{font-size:192px!important}
4392
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-193{font-size:193px!important}
4393
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-194{font-size:194px!important}
4394
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-195{font-size:195px!important}
4395
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-196{font-size:196px!important}
4396
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-197{font-size:197px!important}
4397
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-198{font-size:198px!important}
4398
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-199{font-size:199px!important}
4399
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-200{font-size:200px!important}
4400
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-201{font-size:201px!important}
4401
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-202{font-size:202px!important}
4402
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-203{font-size:203px!important}
4403
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-204{font-size:204px!important}
4404
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-205{font-size:205px!important}
4405
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-206{font-size:206px!important}
4406
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-207{font-size:207px!important}
4407
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-208{font-size:208px!important}
4408
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-209{font-size:209px!important}
4409
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-210{font-size:210px!important}
4410
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-211{font-size:211px!important}
4411
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-212{font-size:212px!important}
4412
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-213{font-size:213px!important}
4413
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-214{font-size:214px!important}
4414
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-215{font-size:215px!important}
4415
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-216{font-size:216px!important}
4416
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-217{font-size:217px!important}
4417
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-218{font-size:218px!important}
4418
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-219{font-size:219px!important}
4419
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-220{font-size:220px!important}
4420
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-221{font-size:221px!important}
4421
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-222{font-size:222px!important}
4422
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-223{font-size:223px!important}
4423
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-224{font-size:224px!important}
4424
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-225{font-size:225px!important}
4425
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-226{font-size:226px!important}
4426
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-227{font-size:227px!important}
4427
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-228{font-size:228px!important}
4428
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-229{font-size:229px!important}
4429
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-230{font-size:230px!important}
4430
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-231{font-size:231px!important}
4431
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-232{font-size:232px!important}
4432
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-233{font-size:233px!important}
4433
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-234{font-size:234px!important}
4434
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-235{font-size:235px!important}
4435
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-236{font-size:236px!important}
4436
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-237{font-size:237px!important}
4437
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-238{font-size:238px!important}
4438
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-239{font-size:239px!important}
4439
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-240{font-size:240px!important}
4440
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-241{font-size:241px!important}
4441
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-242{font-size:242px!important}
4442
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-243{font-size:243px!important}
4443
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-244{font-size:244px!important}
4444
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-245{font-size:245px!important}
4445
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-246{font-size:246px!important}
4446
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-247{font-size:247px!important}
4447
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-248{font-size:248px!important}
4448
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-249{font-size:249px!important}
4449
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-250{font-size:250px!important}
4450
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-251{font-size:251px!important}
4451
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-252{font-size:252px!important}
4452
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-253{font-size:253px!important}
4453
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-254{font-size:254px!important}
4454
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-255{font-size:255px!important}
4455
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-256{font-size:256px!important}
4456
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-257{font-size:257px!important}
4457
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-258{font-size:258px!important}
4458
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-259{font-size:259px!important}
4459
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-260{font-size:260px!important}
4460
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-261{font-size:261px!important}
4461
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-262{font-size:262px!important}
4462
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-263{font-size:263px!important}
4463
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-264{font-size:264px!important}
4464
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-265{font-size:265px!important}
4465
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-266{font-size:266px!important}
4466
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-267{font-size:267px!important}
4467
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-268{font-size:268px!important}
4468
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-269{font-size:269px!important}
4469
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-270{font-size:270px!important}
4470
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-271{font-size:271px!important}
4471
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-272{font-size:272px!important}
4472
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-273{font-size:273px!important}
4473
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-274{font-size:274px!important}
4474
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-275{font-size:275px!important}
4475
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-276{font-size:276px!important}
4476
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-277{font-size:277px!important}
4477
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-278{font-size:278px!important}
4478
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-279{font-size:279px!important}
4479
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-280{font-size:280px!important}
4480
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-281{font-size:281px!important}
4481
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-282{font-size:282px!important}
4482
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-283{font-size:283px!important}
4483
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-284{font-size:284px!important}
4484
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-285{font-size:285px!important}
4485
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-286{font-size:286px!important}
4486
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-287{font-size:287px!important}
4487
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-288{font-size:288px!important}
4488
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-289{font-size:289px!important}
4489
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-290{font-size:290px!important}
4490
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-291{font-size:291px!important}
4491
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-292{font-size:292px!important}
4492
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-293{font-size:293px!important}
4493
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-294{font-size:294px!important}
4494
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-295{font-size:295px!important}
4495
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-296{font-size:296px!important}
4496
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-297{font-size:297px!important}
4497
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-298{font-size:298px!important}
4498
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-299{font-size:299px!important}
4499
- .brz-ed.brz-ed--mobile .brz-fs-xs-im-300{font-size:300px!important}
4500
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1{line-height:1em!important}
4501
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_1{line-height:1.1em!important}
4502
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_2{line-height:1.2em!important}
4503
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_3{line-height:1.3em!important}
4504
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_4{line-height:1.4em!important}
4505
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_5{line-height:1.5em!important}
4506
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_6{line-height:1.6em!important}
4507
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_7{line-height:1.7em!important}
4508
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_8{line-height:1.8em!important}
4509
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-1_9{line-height:1.9em!important}
4510
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2{line-height:2em!important}
4511
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_1{line-height:2.1em!important}
4512
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_2{line-height:2.2em!important}
4513
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_3{line-height:2.3em!important}
4514
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_4{line-height:2.4em!important}
4515
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_5{line-height:2.5em!important}
4516
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_6{line-height:2.6em!important}
4517
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_7{line-height:2.7em!important}
4518
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_8{line-height:2.8em!important}
4519
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-2_9{line-height:2.9em!important}
4520
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3{line-height:3em!important}
4521
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_1{line-height:3.1em!important}
4522
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_2{line-height:3.2em!important}
4523
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_3{line-height:3.3em!important}
4524
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_4{line-height:3.4em!important}
4525
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_5{line-height:3.5em!important}
4526
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_6{line-height:3.6em!important}
4527
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_7{line-height:3.7em!important}
4528
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_8{line-height:3.8em!important}
4529
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-3_9{line-height:3.9em!important}
4530
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4{line-height:4em!important}
4531
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_1{line-height:4.1em!important}
4532
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_2{line-height:4.2em!important}
4533
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_3{line-height:4.3em!important}
4534
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_4{line-height:4.4em!important}
4535
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_5{line-height:4.5em!important}
4536
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_6{line-height:4.6em!important}
4537
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_7{line-height:4.7em!important}
4538
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_8{line-height:4.8em!important}
4539
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-4_9{line-height:4.9em!important}
4540
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5{line-height:5em!important}
4541
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_1{line-height:5.1em!important}
4542
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_2{line-height:5.2em!important}
4543
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_3{line-height:5.3em!important}
4544
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_4{line-height:5.4em!important}
4545
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_5{line-height:5.5em!important}
4546
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_6{line-height:5.6em!important}
4547
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_7{line-height:5.7em!important}
4548
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_8{line-height:5.8em!important}
4549
- .brz-ed.brz-ed--mobile .brz-lh-xs-im-5_9{line-height:5.9em!important}
4550
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-100{font-weight:100!important}
4551
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-200{font-weight:200!important}
4552
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-300{font-weight:300!important}
4553
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-400{font-weight:400!important}
4554
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-500{font-weight:500!important}
4555
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-600{font-weight:600!important}
4556
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-700{font-weight:700!important}
4557
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-800{font-weight:800!important}
4558
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-900{font-weight:900!important}
4559
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1000{font-weight:1000!important}
4560
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1100{font-weight:1100!important}
4561
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1200{font-weight:1200!important}
4562
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1300{font-weight:1300!important}
4563
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1400{font-weight:1400!important}
4564
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1500{font-weight:1500!important}
4565
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1600{font-weight:1600!important}
4566
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1700{font-weight:1700!important}
4567
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1800{font-weight:1800!important}
4568
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-1900{font-weight:1900!important}
4569
- .brz-ed.brz-ed--mobile .brz-fw-xs-im-2000{font-weight:2000!important}
4570
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_20{letter-spacing:-20px!important}
4571
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_20_5{letter-spacing:-20.5px!important}
4572
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_19{letter-spacing:-19px!important}
4573
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_19_5{letter-spacing:-19.5px!important}
4574
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_18{letter-spacing:-18px!important}
4575
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_18_5{letter-spacing:-18.5px!important}
4576
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_17{letter-spacing:-17px!important}
4577
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_17_5{letter-spacing:-17.5px!important}
4578
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_16{letter-spacing:-16px!important}
4579
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_16_5{letter-spacing:-16.5px!important}
4580
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_15{letter-spacing:-15px!important}
4581
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_15_5{letter-spacing:-15.5px!important}
4582
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_14{letter-spacing:-14px!important}
4583
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_14_5{letter-spacing:-14.5px!important}
4584
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_13{letter-spacing:-13px!important}
4585
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_13_5{letter-spacing:-13.5px!important}
4586
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_12{letter-spacing:-12px!important}
4587
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_12_5{letter-spacing:-12.5px!important}
4588
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_11{letter-spacing:-11px!important}
4589
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_11_5{letter-spacing:-11.5px!important}
4590
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_10{letter-spacing:-10px!important}
4591
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_10_5{letter-spacing:-10.5px!important}
4592
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_9{letter-spacing:-9px!important}
4593
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_9_5{letter-spacing:-9.5px!important}
4594
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_8{letter-spacing:-8px!important}
4595
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_8_5{letter-spacing:-8.5px!important}
4596
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_7{letter-spacing:-7px!important}
4597
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_7_5{letter-spacing:-7.5px!important}
4598
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_6{letter-spacing:-6px!important}
4599
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_6_5{letter-spacing:-6.5px!important}
4600
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_5{letter-spacing:-5px!important}
4601
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_5_5{letter-spacing:-5.5px!important}
4602
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_4{letter-spacing:-4px!important}
4603
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_4_5{letter-spacing:-4.5px!important}
4604
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_3{letter-spacing:-3px!important}
4605
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_3_5{letter-spacing:-3.5px!important}
4606
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_2{letter-spacing:-2px!important}
4607
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_2_5{letter-spacing:-2.5px!important}
4608
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_1{letter-spacing:-1px!important}
4609
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_1_5{letter-spacing:-1.5px!important}
4610
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_0{letter-spacing:0!important}
4611
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-m_0_5{letter-spacing:-.5px!important}
4612
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-0{letter-spacing:0!important}
4613
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-0_5{letter-spacing:.5px!important}
4614
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-1{letter-spacing:1px!important}
4615
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-1_5{letter-spacing:1.5px!important}
4616
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-2{letter-spacing:2px!important}
4617
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-2_5{letter-spacing:2.5px!important}
4618
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-3{letter-spacing:3px!important}
4619
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-3_5{letter-spacing:3.5px!important}
4620
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-4{letter-spacing:4px!important}
4621
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-4_5{letter-spacing:4.5px!important}
4622
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-5{letter-spacing:5px!important}
4623
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-5_5{letter-spacing:5.5px!important}
4624
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-6{letter-spacing:6px!important}
4625
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-6_5{letter-spacing:6.5px!important}
4626
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-7{letter-spacing:7px!important}
4627
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-7_5{letter-spacing:7.5px!important}
4628
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-8{letter-spacing:8px!important}
4629
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-8_5{letter-spacing:8.5px!important}
4630
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-9{letter-spacing:9px!important}
4631
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-9_5{letter-spacing:9.5px!important}
4632
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-10{letter-spacing:10px!important}
4633
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-10_5{letter-spacing:10.5px!important}
4634
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-11{letter-spacing:11px!important}
4635
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-11_5{letter-spacing:11.5px!important}
4636
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-12{letter-spacing:12px!important}
4637
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-12_5{letter-spacing:12.5px!important}
4638
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-13{letter-spacing:13px!important}
4639
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-13_5{letter-spacing:13.5px!important}
4640
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-14{letter-spacing:14px!important}
4641
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-14_5{letter-spacing:14.5px!important}
4642
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-15{letter-spacing:15px!important}
4643
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-15_5{letter-spacing:15.5px!important}
4644
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-16{letter-spacing:16px!important}
4645
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-16_5{letter-spacing:16.5px!important}
4646
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-17{letter-spacing:17px!important}
4647
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-17_5{letter-spacing:17.5px!important}
4648
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-18{letter-spacing:18px!important}
4649
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-18_5{letter-spacing:18.5px!important}
4650
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-19{letter-spacing:19px!important}
4651
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-19_5{letter-spacing:19.5px!important}
4652
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-20{letter-spacing:20px!important}
4653
- .brz-ed.brz-ed--mobile .brz-ls-xs-im-20_5{letter-spacing:20.5px!important}
4654
- .brz-ed .brz-mt-lg-0{margin-top:0!important}
4655
- .brz-ed .brz-mt-lg-1{margin-top:1px!important}
4656
- .brz-ed .brz-mt-lg-2{margin-top:2px!important}
4657
- .brz-ed .brz-mt-lg-3{margin-top:3px!important}
4658
- .brz-ed .brz-mt-lg-4{margin-top:4px!important}
4659
- .brz-ed .brz-mt-lg-5{margin-top:5px!important}
4660
- .brz-ed .brz-mt-lg-6{margin-top:6px!important}
4661
- .brz-ed .brz-mt-lg-7{margin-top:7px!important}
4662
- .brz-ed .brz-mt-lg-8{margin-top:8px!important}
4663
- .brz-ed .brz-mt-lg-9{margin-top:9px!important}
4664
- .brz-ed .brz-mt-lg-10{margin-top:10px!important}
4665
- .brz-ed .brz-mt-lg-11{margin-top:11px!important}
4666
- .brz-ed .brz-mt-lg-12{margin-top:12px!important}
4667
- .brz-ed .brz-mt-lg-13{margin-top:13px!important}
4668
- .brz-ed .brz-mt-lg-14{margin-top:14px!important}
4669
- .brz-ed .brz-mt-lg-15{margin-top:15px!important}
4670
- .brz-ed .brz-mt-lg-16{margin-top:16px!important}
4671
- .brz-ed .brz-mt-lg-17{margin-top:17px!important}
4672
- .brz-ed .brz-mt-lg-18{margin-top:18px!important}
4673
- .brz-ed .brz-mt-lg-19{margin-top:19px!important}
4674
- .brz-ed .brz-mt-lg-20{margin-top:20px!important}
4675
- .brz-ed .brz-mt-lg-21{margin-top:21px!important}
4676
- .brz-ed .brz-mt-lg-22{margin-top:22px!important}
4677
- .brz-ed .brz-mt-lg-23{margin-top:23px!important}
4678
- .brz-ed .brz-mt-lg-24{margin-top:24px!important}
4679
- .brz-ed .brz-mt-lg-25{margin-top:25px!important}
4680
- .brz-ed .brz-mt-lg-26{margin-top:26px!important}
4681
- .brz-ed .brz-mt-lg-27{margin-top:27px!important}
4682
- .brz-ed .brz-mt-lg-28{margin-top:28px!important}
4683
- .brz-ed .brz-mt-lg-29{margin-top:29px!important}
4684
- .brz-ed .brz-mt-lg-30{margin-top:30px!important}
4685
- .brz-ed .brz-mt-lg-31{margin-top:31px!important}
4686
- .brz-ed .brz-mt-lg-32{margin-top:32px!important}
4687
- .brz-ed .brz-mt-lg-33{margin-top:33px!important}
4688
- .brz-ed .brz-mt-lg-34{margin-top:34px!important}
4689
- .brz-ed .brz-mt-lg-35{margin-top:35px!important}
4690
- .brz-ed .brz-mt-lg-36{margin-top:36px!important}
4691
- .brz-ed .brz-mt-lg-37{margin-top:37px!important}
4692
- .brz-ed .brz-mt-lg-38{margin-top:38px!important}
4693
- .brz-ed .brz-mt-lg-39{margin-top:39px!important}
4694
- .brz-ed .brz-mt-lg-40{margin-top:40px!important}
4695
- .brz-ed .brz-mt-lg-41{margin-top:41px!important}
4696
- .brz-ed .brz-mt-lg-42{margin-top:42px!important}
4697
- .brz-ed .brz-mt-lg-43{margin-top:43px!important}
4698
- .brz-ed .brz-mt-lg-44{margin-top:44px!important}
4699
- .brz-ed .brz-mt-lg-45{margin-top:45px!important}
4700
- .brz-ed .brz-mt-lg-46{margin-top:46px!important}
4701
- .brz-ed .brz-mt-lg-47{margin-top:47px!important}
4702
- .brz-ed .brz-mt-lg-48{margin-top:48px!important}
4703
- .brz-ed .brz-mt-lg-49{margin-top:49px!important}
4704
- .brz-ed .brz-mt-lg-50{margin-top:50px!important}
4705
- .brz-ed .brz-mt-lg-51{margin-top:51px!important}
4706
- .brz-ed .brz-mt-lg-52{margin-top:52px!important}
4707
- .brz-ed .brz-mt-lg-53{margin-top:53px!important}
4708
- .brz-ed .brz-mt-lg-54{margin-top:54px!important}
4709
- .brz-ed .brz-mt-lg-55{margin-top:55px!important}
4710
- .brz-ed .brz-mt-lg-56{margin-top:56px!important}
4711
- .brz-ed .brz-mt-lg-57{margin-top:57px!important}
4712
- .brz-ed .brz-mt-lg-58{margin-top:58px!important}
4713
- .brz-ed .brz-mt-lg-59{margin-top:59px!important}
4714
- .brz-ed .brz-mt-lg-60{margin-top:60px!important}
4715
- .brz-ed .brz-mt-lg-61{margin-top:61px!important}
4716
- .brz-ed .brz-mt-lg-62{margin-top:62px!important}
4717
- .brz-ed .brz-mt-lg-63{margin-top:63px!important}
4718
- .brz-ed .brz-mt-lg-64{margin-top:64px!important}
4719
- .brz-ed .brz-mt-lg-65{margin-top:65px!important}
4720
- .brz-ed .brz-mt-lg-66{margin-top:66px!important}
4721
- .brz-ed .brz-mt-lg-67{margin-top:67px!important}
4722
- .brz-ed .brz-mt-lg-68{margin-top:68px!important}
4723
- .brz-ed .brz-mt-lg-69{margin-top:69px!important}
4724
- .brz-ed .brz-mt-lg-70{margin-top:70px!important}
4725
- .brz-ed .brz-mt-lg-71{margin-top:71px!important}
4726
- .brz-ed .brz-mt-lg-72{margin-top:72px!important}
4727
- .brz-ed .brz-mt-lg-73{margin-top:73px!important}
4728
- .brz-ed .brz-mt-lg-74{margin-top:74px!important}
4729
- .brz-ed .brz-mt-lg-75{margin-top:75px!important}
4730
- .brz-ed .brz-mt-lg-76{margin-top:76px!important}
4731
- .brz-ed .brz-mt-lg-77{margin-top:77px!important}
4732
- .brz-ed .brz-mt-lg-78{margin-top:78px!important}
4733
- .brz-ed .brz-mt-lg-79{margin-top:79px!important}
4734
- .brz-ed .brz-mt-lg-80{margin-top:80px!important}
4735
- .brz-ed .brz-mt-lg-81{margin-top:81px!important}
4736
- .brz-ed .brz-mt-lg-82{margin-top:82px!important}
4737
- .brz-ed .brz-mt-lg-83{margin-top:83px!important}
4738
- .brz-ed .brz-mt-lg-84{margin-top:84px!important}
4739
- .brz-ed .brz-mt-lg-85{margin-top:85px!important}
4740
- .brz-ed .brz-mt-lg-86{margin-top:86px!important}
4741
- .brz-ed .brz-mt-lg-87{margin-top:87px!important}
4742
- .brz-ed .brz-mt-lg-88{margin-top:88px!important}
4743
- .brz-ed .brz-mt-lg-89{margin-top:89px!important}
4744
- .brz-ed .brz-mt-lg-90{margin-top:90px!important}
4745
- .brz-ed .brz-mt-lg-91{margin-top:91px!important}
4746
- .brz-ed .brz-mt-lg-92{margin-top:92px!important}
4747
- .brz-ed .brz-mt-lg-93{margin-top:93px!important}
4748
- .brz-ed .brz-mt-lg-94{margin-top:94px!important}
4749
- .brz-ed .brz-mt-lg-95{margin-top:95px!important}
4750
- .brz-ed .brz-mt-lg-96{margin-top:96px!important}
4751
- .brz-ed .brz-mt-lg-97{margin-top:97px!important}
4752
- .brz-ed .brz-mt-lg-98{margin-top:98px!important}
4753
- .brz-ed .brz-mt-lg-99{margin-top:99px!important}
4754
- .brz-ed .brz-mt-lg-100{margin-top:100px!important}
4755
- .brz-ed .brz-mb-lg-0{margin-bottom:0!important}
4756
- .brz-ed .brz-mb-lg-1{margin-bottom:1px!important}
4757
- .brz-ed .brz-mb-lg-2{margin-bottom:2px!important}
4758
- .brz-ed .brz-mb-lg-3{margin-bottom:3px!important}
4759
- .brz-ed .brz-mb-lg-4{margin-bottom:4px!important}
4760
- .brz-ed .brz-mb-lg-5{margin-bottom:5px!important}
4761
- .brz-ed .brz-mb-lg-6{margin-bottom:6px!important}
4762
- .brz-ed .brz-mb-lg-7{margin-bottom:7px!important}
4763
- .brz-ed .brz-mb-lg-8{margin-bottom:8px!important}
4764
- .brz-ed .brz-mb-lg-9{margin-bottom:9px!important}
4765
- .brz-ed .brz-mb-lg-10{margin-bottom:10px!important}
4766
- .brz-ed .brz-mb-lg-11{margin-bottom:11px!important}
4767
- .brz-ed .brz-mb-lg-12{margin-bottom:12px!important}
4768
- .brz-ed .brz-mb-lg-13{margin-bottom:13px!important}
4769
- .brz-ed .brz-mb-lg-14{margin-bottom:14px!important}
4770
- .brz-ed .brz-mb-lg-15{margin-bottom:15px!important}
4771
- .brz-ed .brz-mb-lg-16{margin-bottom:16px!important}
4772
- .brz-ed .brz-mb-lg-17{margin-bottom:17px!important}
4773
- .brz-ed .brz-mb-lg-18{margin-bottom:18px!important}
4774
- .brz-ed .brz-mb-lg-19{margin-bottom:19px!important}
4775
- .brz-ed .brz-mb-lg-20{margin-bottom:20px!important}
4776
- .brz-ed .brz-mb-lg-21{margin-bottom:21px!important}
4777
- .brz-ed .brz-mb-lg-22{margin-bottom:22px!important}
4778
- .brz-ed .brz-mb-lg-23{margin-bottom:23px!important}
4779
- .brz-ed .brz-mb-lg-24{margin-bottom:24px!important}
4780
- .brz-ed .brz-mb-lg-25{margin-bottom:25px!important}
4781
- .brz-ed .brz-mb-lg-26{margin-bottom:26px!important}
4782
- .brz-ed .brz-mb-lg-27{margin-bottom:27px!important}
4783
- .brz-ed .brz-mb-lg-28{margin-bottom:28px!important}
4784
- .brz-ed .brz-mb-lg-29{margin-bottom:29px!important}
4785
- .brz-ed .brz-mb-lg-30{margin-bottom:30px!important}
4786
- .brz-ed .brz-mb-lg-31{margin-bottom:31px!important}
4787
- .brz-ed .brz-mb-lg-32{margin-bottom:32px!important}
4788
- .brz-ed .brz-mb-lg-33{margin-bottom:33px!important}
4789
- .brz-ed .brz-mb-lg-34{margin-bottom:34px!important}
4790
- .brz-ed .brz-mb-lg-35{margin-bottom:35px!important}
4791
- .brz-ed .brz-mb-lg-36{margin-bottom:36px!important}
4792
- .brz-ed .brz-mb-lg-37{margin-bottom:37px!important}
4793
- .brz-ed .brz-mb-lg-38{margin-bottom:38px!important}
4794
- .brz-ed .brz-mb-lg-39{margin-bottom:39px!important}
4795
- .brz-ed .brz-mb-lg-40{margin-bottom:40px!important}
4796
- .brz-ed .brz-mb-lg-41{margin-bottom:41px!important}
4797
- .brz-ed .brz-mb-lg-42{margin-bottom:42px!important}
4798
- .brz-ed .brz-mb-lg-43{margin-bottom:43px!important}
4799
- .brz-ed .brz-mb-lg-44{margin-bottom:44px!important}
4800
- .brz-ed .brz-mb-lg-45{margin-bottom:45px!important}
4801
- .brz-ed .brz-mb-lg-46{margin-bottom:46px!important}
4802
- .brz-ed .brz-mb-lg-47{margin-bottom:47px!important}
4803
- .brz-ed .brz-mb-lg-48{margin-bottom:48px!important}
4804
- .brz-ed .brz-mb-lg-49{margin-bottom:49px!important}
4805
- .brz-ed .brz-mb-lg-50{margin-bottom:50px!important}
4806
- .brz-ed .brz-mb-lg-51{margin-bottom:51px!important}
4807
- .brz-ed .brz-mb-lg-52{margin-bottom:52px!important}
4808
- .brz-ed .brz-mb-lg-53{margin-bottom:53px!important}
4809
- .brz-ed .brz-mb-lg-54{margin-bottom:54px!important}
4810
- .brz-ed .brz-mb-lg-55{margin-bottom:55px!important}
4811
- .brz-ed .brz-mb-lg-56{margin-bottom:56px!important}
4812
- .brz-ed .brz-mb-lg-57{margin-bottom:57px!important}
4813
- .brz-ed .brz-mb-lg-58{margin-bottom:58px!important}
4814
- .brz-ed .brz-mb-lg-59{margin-bottom:59px!important}
4815
- .brz-ed .brz-mb-lg-60{margin-bottom:60px!important}
4816
- .brz-ed .brz-mb-lg-61{margin-bottom:61px!important}
4817
- .brz-ed .brz-mb-lg-62{margin-bottom:62px!important}
4818
- .brz-ed .brz-mb-lg-63{margin-bottom:63px!important}
4819
- .brz-ed .brz-mb-lg-64{margin-bottom:64px!important}
4820
- .brz-ed .brz-mb-lg-65{margin-bottom:65px!important}
4821
- .brz-ed .brz-mb-lg-66{margin-bottom:66px!important}
4822
- .brz-ed .brz-mb-lg-67{margin-bottom:67px!important}
4823
- .brz-ed .brz-mb-lg-68{margin-bottom:68px!important}
4824
- .brz-ed .brz-mb-lg-69{margin-bottom:69px!important}
4825
- .brz-ed .brz-mb-lg-70{margin-bottom:70px!important}
4826
- .brz-ed .brz-mb-lg-71{margin-bottom:71px!important}
4827
- .brz-ed .brz-mb-lg-72{margin-bottom:72px!important}
4828
- .brz-ed .brz-mb-lg-73{margin-bottom:73px!important}
4829
- .brz-ed .brz-mb-lg-74{margin-bottom:74px!important}
4830
- .brz-ed .brz-mb-lg-75{margin-bottom:75px!important}
4831
- .brz-ed .brz-mb-lg-76{margin-bottom:76px!important}
4832
- .brz-ed .brz-mb-lg-77{margin-bottom:77px!important}
4833
- .brz-ed .brz-mb-lg-78{margin-bottom:78px!important}
4834
- .brz-ed .brz-mb-lg-79{margin-bottom:79px!important}
4835
- .brz-ed .brz-mb-lg-80{margin-bottom:80px!important}
4836
- .brz-ed .brz-mb-lg-81{margin-bottom:81px!important}
4837
- .brz-ed .brz-mb-lg-82{margin-bottom:82px!important}
4838
- .brz-ed .brz-mb-lg-83{margin-bottom:83px!important}
4839
- .brz-ed .brz-mb-lg-84{margin-bottom:84px!important}
4840
- .brz-ed .brz-mb-lg-85{margin-bottom:85px!important}
4841
- .brz-ed .brz-mb-lg-86{margin-bottom:86px!important}
4842
- .brz-ed .brz-mb-lg-87{margin-bottom:87px!important}
4843
- .brz-ed .brz-mb-lg-88{margin-bottom:88px!important}
4844
- .brz-ed .brz-mb-lg-89{margin-bottom:89px!important}
4845
- .brz-ed .brz-mb-lg-90{margin-bottom:90px!important}
4846
- .brz-ed .brz-mb-lg-91{margin-bottom:91px!important}
4847
- .brz-ed .brz-mb-lg-92{margin-bottom:92px!important}
4848
- .brz-ed .brz-mb-lg-93{margin-bottom:93px!important}
4849
- .brz-ed .brz-mb-lg-94{margin-bottom:94px!important}
4850
- .brz-ed .brz-mb-lg-95{margin-bottom:95px!important}
4851
- .brz-ed .brz-mb-lg-96{margin-bottom:96px!important}
4852
- .brz-ed .brz-mb-lg-97{margin-bottom:97px!important}
4853
- .brz-ed .brz-mb-lg-98{margin-bottom:98px!important}
4854
- .brz-ed .brz-mb-lg-99{margin-bottom:99px!important}
4855
- .brz-ed .brz-mb-lg-100{margin-bottom:100px!important}
4856
- .brz-ed.brz-ed--desktop .brz-mt-lg-0{margin-top:0!important}
4857
- .brz-ed.brz-ed--desktop .brz-mt-lg-1{margin-top:1px!important}
4858
- .brz-ed.brz-ed--desktop .brz-mt-lg-2{margin-top:2px!important}
4859
- .brz-ed.brz-ed--desktop .brz-mt-lg-3{margin-top:3px!important}
4860
- .brz-ed.brz-ed--desktop .brz-mt-lg-4{margin-top:4px!important}
4861
- .brz-ed.brz-ed--desktop .brz-mt-lg-5{margin-top:5px!important}
4862
- .brz-ed.brz-ed--desktop .brz-mt-lg-6{margin-top:6px!important}
4863
- .brz-ed.brz-ed--desktop .brz-mt-lg-7{margin-top:7px!important}
4864
- .brz-ed.brz-ed--desktop .brz-mt-lg-8{margin-top:8px!important}
4865
- .brz-ed.brz-ed--desktop .brz-mt-lg-9{margin-top:9px!important}
4866
- .brz-ed.brz-ed--desktop .brz-mt-lg-10{margin-top:10px!important}
4867
- .brz-ed.brz-ed--desktop .brz-mt-lg-11{margin-top:11px!important}
4868
- .brz-ed.brz-ed--desktop .brz-mt-lg-12{margin-top:12px!important}
4869
- .brz-ed.brz-ed--desktop .brz-mt-lg-13{margin-top:13px!important}
4870
- .brz-ed.brz-ed--desktop .brz-mt-lg-14{margin-top:14px!important}
4871
- .brz-ed.brz-ed--desktop .brz-mt-lg-15{margin-top:15px!important}
4872
- .brz-ed.brz-ed--desktop .brz-mt-lg-16{margin-top:16px!important}
4873
- .brz-ed.brz-ed--desktop .brz-mt-lg-17{margin-top:17px!important}
4874
- .brz-ed.brz-ed--desktop .brz-mt-lg-18{margin-top:18px!important}
4875
- .brz-ed.brz-ed--desktop .brz-mt-lg-19{margin-top:19px!important}
4876
- .brz-ed.brz-ed--desktop .brz-mt-lg-20{margin-top:20px!important}
4877
- .brz-ed.brz-ed--desktop .brz-mt-lg-21{margin-top:21px!important}
4878
- .brz-ed.brz-ed--desktop .brz-mt-lg-22{margin-top:22px!important}
4879
- .brz-ed.brz-ed--desktop .brz-mt-lg-23{margin-top:23px!important}
4880
- .brz-ed.brz-ed--desktop .brz-mt-lg-24{margin-top:24px!important}
4881
- .brz-ed.brz-ed--desktop .brz-mt-lg-25{margin-top:25px!important}
4882
- .brz-ed.brz-ed--desktop .brz-mt-lg-26{margin-top:26px!important}
4883
- .brz-ed.brz-ed--desktop .brz-mt-lg-27{margin-top:27px!important}
4884
- .brz-ed.brz-ed--desktop .brz-mt-lg-28{margin-top:28px!important}
4885
- .brz-ed.brz-ed--desktop .brz-mt-lg-29{margin-top:29px!important}
4886
- .brz-ed.brz-ed--desktop .brz-mt-lg-30{margin-top:30px!important}
4887
- .brz-ed.brz-ed--desktop .brz-mt-lg-31{margin-top:31px!important}
4888
- .brz-ed.brz-ed--desktop .brz-mt-lg-32{margin-top:32px!important}
4889
- .brz-ed.brz-ed--desktop .brz-mt-lg-33{margin-top:33px!important}
4890
- .brz-ed.brz-ed--desktop .brz-mt-lg-34{margin-top:34px!important}
4891
- .brz-ed.brz-ed--desktop .brz-mt-lg-35{margin-top:35px!important}
4892
- .brz-ed.brz-ed--desktop .brz-mt-lg-36{margin-top:36px!important}
4893
- .brz-ed.brz-ed--desktop .brz-mt-lg-37{margin-top:37px!important}
4894
- .brz-ed.brz-ed--desktop .brz-mt-lg-38{margin-top:38px!important}
4895
- .brz-ed.brz-ed--desktop .brz-mt-lg-39{margin-top:39px!important}
4896
- .brz-ed.brz-ed--desktop .brz-mt-lg-40{margin-top:40px!important}
4897
- .brz-ed.brz-ed--desktop .brz-mt-lg-41{margin-top:41px!important}
4898
- .brz-ed.brz-ed--desktop .brz-mt-lg-42{margin-top:42px!important}
4899
- .brz-ed.brz-ed--desktop .brz-mt-lg-43{margin-top:43px!important}
4900
- .brz-ed.brz-ed--desktop .brz-mt-lg-44{margin-top:44px!important}
4901
- .brz-ed.brz-ed--desktop .brz-mt-lg-45{margin-top:45px!important}
4902
- .brz-ed.brz-ed--desktop .brz-mt-lg-46{margin-top:46px!important}
4903
- .brz-ed.brz-ed--desktop .brz-mt-lg-47{margin-top:47px!important}
4904
- .brz-ed.brz-ed--desktop .brz-mt-lg-48{margin-top:48px!important}
4905
- .brz-ed.brz-ed--desktop .brz-mt-lg-49{margin-top:49px!important}
4906
- .brz-ed.brz-ed--desktop .brz-mt-lg-50{margin-top:50px!important}
4907
- .brz-ed.brz-ed--desktop .brz-mt-lg-51{margin-top:51px!important}
4908
- .brz-ed.brz-ed--desktop .brz-mt-lg-52{margin-top:52px!important}
4909
- .brz-ed.brz-ed--desktop .brz-mt-lg-53{margin-top:53px!important}
4910
- .brz-ed.brz-ed--desktop .brz-mt-lg-54{margin-top:54px!important}
4911
- .brz-ed.brz-ed--desktop .brz-mt-lg-55{margin-top:55px!important}
4912
- .brz-ed.brz-ed--desktop .brz-mt-lg-56{margin-top:56px!important}
4913
- .brz-ed.brz-ed--desktop .brz-mt-lg-57{margin-top:57px!important}
4914
- .brz-ed.brz-ed--desktop .brz-mt-lg-58{margin-top:58px!important}
4915
- .brz-ed.brz-ed--desktop .brz-mt-lg-59{margin-top:59px!important}
4916
- .brz-ed.brz-ed--desktop .brz-mt-lg-60{margin-top:60px!important}
4917
- .brz-ed.brz-ed--desktop .brz-mt-lg-61{margin-top:61px!important}
4918
- .brz-ed.brz-ed--desktop .brz-mt-lg-62{margin-top:62px!important}
4919
- .brz-ed.brz-ed--desktop .brz-mt-lg-63{margin-top:63px!important}
4920
- .brz-ed.brz-ed--desktop .brz-mt-lg-64{margin-top:64px!important}
4921
- .brz-ed.brz-ed--desktop .brz-mt-lg-65{margin-top:65px!important}
4922
- .brz-ed.brz-ed--desktop .brz-mt-lg-66{margin-top:66px!important}
4923
- .brz-ed.brz-ed--desktop .brz-mt-lg-67{margin-top:67px!important}
4924
- .brz-ed.brz-ed--desktop .brz-mt-lg-68{margin-top:68px!important}
4925
- .brz-ed.brz-ed--desktop .brz-mt-lg-69{margin-top:69px!important}
4926
- .brz-ed.brz-ed--desktop .brz-mt-lg-70{margin-top:70px!important}
4927
- .brz-ed.brz-ed--desktop .brz-mt-lg-71{margin-top:71px!important}
4928
- .brz-ed.brz-ed--desktop .brz-mt-lg-72{margin-top:72px!important}
4929
- .brz-ed.brz-ed--desktop .brz-mt-lg-73{margin-top:73px!important}
4930
- .brz-ed.brz-ed--desktop .brz-mt-lg-74{margin-top:74px!important}
4931
- .brz-ed.brz-ed--desktop .brz-mt-lg-75{margin-top:75px!important}
4932
- .brz-ed.brz-ed--desktop .brz-mt-lg-76{margin-top:76px!important}
4933
- .brz-ed.brz-ed--desktop .brz-mt-lg-77{margin-top:77px!important}
4934
- .brz-ed.brz-ed--desktop .brz-mt-lg-78{margin-top:78px!important}
4935
- .brz-ed.brz-ed--desktop .brz-mt-lg-79{margin-top:79px!important}
4936
- .brz-ed.brz-ed--desktop .brz-mt-lg-80{margin-top:80px!important}
4937
- .brz-ed.brz-ed--desktop .brz-mt-lg-81{margin-top:81px!important}
4938
- .brz-ed.brz-ed--desktop .brz-mt-lg-82{margin-top:82px!important}
4939
- .brz-ed.brz-ed--desktop .brz-mt-lg-83{margin-top:83px!important}
4940
- .brz-ed.brz-ed--desktop .brz-mt-lg-84{margin-top:84px!important}
4941
- .brz-ed.brz-ed--desktop .brz-mt-lg-85{margin-top:85px!important}
4942
- .brz-ed.brz-ed--desktop .brz-mt-lg-86{margin-top:86px!important}
4943
- .brz-ed.brz-ed--desktop .brz-mt-lg-87{margin-top:87px!important}
4944
- .brz-ed.brz-ed--desktop .brz-mt-lg-88{margin-top:88px!important}
4945
- .brz-ed.brz-ed--desktop .brz-mt-lg-89{margin-top:89px!important}
4946
- .brz-ed.brz-ed--desktop .brz-mt-lg-90{margin-top:90px!important}
4947
- .brz-ed.brz-ed--desktop .brz-mt-lg-91{margin-top:91px!important}
4948
- .brz-ed.brz-ed--desktop .brz-mt-lg-92{margin-top:92px!important}
4949
- .brz-ed.brz-ed--desktop .brz-mt-lg-93{margin-top:93px!important}
4950
- .brz-ed.brz-ed--desktop .brz-mt-lg-94{margin-top:94px!important}
4951
- .brz-ed.brz-ed--desktop .brz-mt-lg-95{margin-top:95px!important}
4952
- .brz-ed.brz-ed--desktop .brz-mt-lg-96{margin-top:96px!important}
4953
- .brz-ed.brz-ed--desktop .brz-mt-lg-97{margin-top:97px!important}
4954
- .brz-ed.brz-ed--desktop .brz-mt-lg-98{margin-top:98px!important}
4955
- .brz-ed.brz-ed--desktop .brz-mt-lg-99{margin-top:99px!important}
4956
- .brz-ed.brz-ed--desktop .brz-mt-lg-100{margin-top:100px!important}
4957
- .brz-ed.brz-ed--desktop .brz-mb-lg-0{margin-bottom:0!important}
4958
- .brz-ed.brz-ed--desktop .brz-mb-lg-1{margin-bottom:1px!important}
4959
- .brz-ed.brz-ed--desktop .brz-mb-lg-2{margin-bottom:2px!important}
4960
- .brz-ed.brz-ed--desktop .brz-mb-lg-3{margin-bottom:3px!important}
4961
- .brz-ed.brz-ed--desktop .brz-mb-lg-4{margin-bottom:4px!important}
4962
- .brz-ed.brz-ed--desktop .brz-mb-lg-5{margin-bottom:5px!important}
4963
- .brz-ed.brz-ed--desktop .brz-mb-lg-6{margin-bottom:6px!important}
4964
- .brz-ed.brz-ed--desktop .brz-mb-lg-7{margin-bottom:7px!important}
4965
- .brz-ed.brz-ed--desktop .brz-mb-lg-8{margin-bottom:8px!important}
4966
- .brz-ed.brz-ed--desktop .brz-mb-lg-9{margin-bottom:9px!important}
4967
- .brz-ed.brz-ed--desktop .brz-mb-lg-10{margin-bottom:10px!important}
4968
- .brz-ed.brz-ed--desktop .brz-mb-lg-11{margin-bottom:11px!important}
4969
- .brz-ed.brz-ed--desktop .brz-mb-lg-12{margin-bottom:12px!important}
4970
- .brz-ed.brz-ed--desktop .brz-mb-lg-13{margin-bottom:13px!important}
4971
- .brz-ed.brz-ed--desktop .brz-mb-lg-14{margin-bottom:14px!important}
4972
- .brz-ed.brz-ed--desktop .brz-mb-lg-15{margin-bottom:15px!important}
4973
- .brz-ed.brz-ed--desktop .brz-mb-lg-16{margin-bottom:16px!important}
4974
- .brz-ed.brz-ed--desktop .brz-mb-lg-17{margin-bottom:17px!important}
4975
- .brz-ed.brz-ed--desktop .brz-mb-lg-18{margin-bottom:18px!important}
4976
- .brz-ed.brz-ed--desktop .brz-mb-lg-19{margin-bottom:19px!important}
4977
- .brz-ed.brz-ed--desktop .brz-mb-lg-20{margin-bottom:20px!important}
4978
- .brz-ed.brz-ed--desktop .brz-mb-lg-21{margin-bottom:21px!important}
4979
- .brz-ed.brz-ed--desktop .brz-mb-lg-22{margin-bottom:22px!important}
4980
- .brz-ed.brz-ed--desktop .brz-mb-lg-23{margin-bottom:23px!important}
4981
- .brz-ed.brz-ed--desktop .brz-mb-lg-24{margin-bottom:24px!important}
4982
- .brz-ed.brz-ed--desktop .brz-mb-lg-25{margin-bottom:25px!important}
4983
- .brz-ed.brz-ed--desktop .brz-mb-lg-26{margin-bottom:26px!important}
4984
- .brz-ed.brz-ed--desktop .brz-mb-lg-27{margin-bottom:27px!important}
4985
- .brz-ed.brz-ed--desktop .brz-mb-lg-28{margin-bottom:28px!important}
4986
- .brz-ed.brz-ed--desktop .brz-mb-lg-29{margin-bottom:29px!important}
4987
- .brz-ed.brz-ed--desktop .brz-mb-lg-30{margin-bottom:30px!important}
4988
- .brz-ed.brz-ed--desktop .brz-mb-lg-31{margin-bottom:31px!important}
4989
- .brz-ed.brz-ed--desktop .brz-mb-lg-32{margin-bottom:32px!important}
4990
- .brz-ed.brz-ed--desktop .brz-mb-lg-33{margin-bottom:33px!important}
4991
- .brz-ed.brz-ed--desktop .brz-mb-lg-34{margin-bottom:34px!important}
4992
- .brz-ed.brz-ed--desktop .brz-mb-lg-35{margin-bottom:35px!important}
4993
- .brz-ed.brz-ed--desktop .brz-mb-lg-36{margin-bottom:36px!important}
4994
- .brz-ed.brz-ed--desktop .brz-mb-lg-37{margin-bottom:37px!important}
4995
- .brz-ed.brz-ed--desktop .brz-mb-lg-38{margin-bottom:38px!important}
4996
- .brz-ed.brz-ed--desktop .brz-mb-lg-39{margin-bottom:39px!important}
4997
- .brz-ed.brz-ed--desktop .brz-mb-lg-40{margin-bottom:40px!important}
4998
- .brz-ed.brz-ed--desktop .brz-mb-lg-41{margin-bottom:41px!important}
4999
- .brz-ed.brz-ed--desktop .brz-mb-lg-42{margin-bottom:42px!important}
5000
- .brz-ed.brz-ed--desktop .brz-mb-lg-43{margin-bottom:43px!important}
5001
- .brz-ed.brz-ed--desktop .brz-mb-lg-44{margin-bottom:44px!important}
5002
- .brz-ed.brz-ed--desktop .brz-mb-lg-45{margin-bottom:45px!important}
5003
- .brz-ed.brz-ed--desktop .brz-mb-lg-46{margin-bottom:46px!important}
5004
- .brz-ed.brz-ed--desktop .brz-mb-lg-47{margin-bottom:47px!important}
5005
- .brz-ed.brz-ed--desktop .brz-mb-lg-48{margin-bottom:48px!important}
5006
- .brz-ed.brz-ed--desktop .brz-mb-lg-49{margin-bottom:49px!important}
5007
- .brz-ed.brz-ed--desktop .brz-mb-lg-50{margin-bottom:50px!important}
5008
- .brz-ed.brz-ed--desktop .brz-mb-lg-51{margin-bottom:51px!important}
5009
- .brz-ed.brz-ed--desktop .brz-mb-lg-52{margin-bottom:52px!important}
5010
- .brz-ed.brz-ed--desktop .brz-mb-lg-53{margin-bottom:53px!important}
5011
- .brz-ed.brz-ed--desktop .brz-mb-lg-54{margin-bottom:54px!important}
5012
- .brz-ed.brz-ed--desktop .brz-mb-lg-55{margin-bottom:55px!important}
5013
- .brz-ed.brz-ed--desktop .brz-mb-lg-56{margin-bottom:56px!important}
5014
- .brz-ed.brz-ed--desktop .brz-mb-lg-57{margin-bottom:57px!important}
5015
- .brz-ed.brz-ed--desktop .brz-mb-lg-58{margin-bottom:58px!important}
5016
- .brz-ed.brz-ed--desktop .brz-mb-lg-59{margin-bottom:59px!important}
5017
- .brz-ed.brz-ed--desktop .brz-mb-lg-60{margin-bottom:60px!important}
5018
- .brz-ed.brz-ed--desktop .brz-mb-lg-61{margin-bottom:61px!important}
5019
- .brz-ed.brz-ed--desktop .brz-mb-lg-62{margin-bottom:62px!important}
5020
- .brz-ed.brz-ed--desktop .brz-mb-lg-63{margin-bottom:63px!important}
5021
- .brz-ed.brz-ed--desktop .brz-mb-lg-64{margin-bottom:64px!important}
5022
- .brz-ed.brz-ed--desktop .brz-mb-lg-65{margin-bottom:65px!important}
5023
- .brz-ed.brz-ed--desktop .brz-mb-lg-66{margin-bottom:66px!important}
5024
- .brz-ed.brz-ed--desktop .brz-mb-lg-67{margin-bottom:67px!important}
5025
- .brz-ed.brz-ed--desktop .brz-mb-lg-68{margin-bottom:68px!important}
5026
- .brz-ed.brz-ed--desktop .brz-mb-lg-69{margin-bottom:69px!important}
5027
- .brz-ed.brz-ed--desktop .brz-mb-lg-70{margin-bottom:70px!important}
5028
- .brz-ed.brz-ed--desktop .brz-mb-lg-71{margin-bottom:71px!important}
5029
- .brz-ed.brz-ed--desktop .brz-mb-lg-72{margin-bottom:72px!important}
5030
- .brz-ed.brz-ed--desktop .brz-mb-lg-73{margin-bottom:73px!important}
5031
- .brz-ed.brz-ed--desktop .brz-mb-lg-74{margin-bottom:74px!important}
5032
- .brz-ed.brz-ed--desktop .brz-mb-lg-75{margin-bottom:75px!important}
5033
- .brz-ed.brz-ed--desktop .brz-mb-lg-76{margin-bottom:76px!important}
5034
- .brz-ed.brz-ed--desktop .brz-mb-lg-77{margin-bottom:77px!important}
5035
- .brz-ed.brz-ed--desktop .brz-mb-lg-78{margin-bottom:78px!important}
5036
- .brz-ed.brz-ed--desktop .brz-mb-lg-79{margin-bottom:79px!important}
5037
- .brz-ed.brz-ed--desktop .brz-mb-lg-80{margin-bottom:80px!important}
5038
- .brz-ed.brz-ed--desktop .brz-mb-lg-81{margin-bottom:81px!important}
5039
- .brz-ed.brz-ed--desktop .brz-mb-lg-82{margin-bottom:82px!important}
5040
- .brz-ed.brz-ed--desktop .brz-mb-lg-83{margin-bottom:83px!important}
5041
- .brz-ed.brz-ed--desktop .brz-mb-lg-84{margin-bottom:84px!important}
5042
- .brz-ed.brz-ed--desktop .brz-mb-lg-85{margin-bottom:85px!important}
5043
- .brz-ed.brz-ed--desktop .brz-mb-lg-86{margin-bottom:86px!important}
5044
- .brz-ed.brz-ed--desktop .brz-mb-lg-87{margin-bottom:87px!important}
5045
- .brz-ed.brz-ed--desktop .brz-mb-lg-88{margin-bottom:88px!important}
5046
- .brz-ed.brz-ed--desktop .brz-mb-lg-89{margin-bottom:89px!important}
5047
- .brz-ed.brz-ed--desktop .brz-mb-lg-90{margin-bottom:90px!important}
5048
- .brz-ed.brz-ed--desktop .brz-mb-lg-91{margin-bottom:91px!important}
5049
- .brz-ed.brz-ed--desktop .brz-mb-lg-92{margin-bottom:92px!important}
5050
- .brz-ed.brz-ed--desktop .brz-mb-lg-93{margin-bottom:93px!important}
5051
- .brz-ed.brz-ed--desktop .brz-mb-lg-94{margin-bottom:94px!important}
5052
- .brz-ed.brz-ed--desktop .brz-mb-lg-95{margin-bottom:95px!important}
5053
- .brz-ed.brz-ed--desktop .brz-mb-lg-96{margin-bottom:96px!important}
5054
- .brz-ed.brz-ed--desktop .brz-mb-lg-97{margin-bottom:97px!important}
5055
- .brz-ed.brz-ed--desktop .brz-mb-lg-98{margin-bottom:98px!important}
5056
- .brz-ed.brz-ed--desktop .brz-mb-lg-99{margin-bottom:99px!important}
5057
- .brz-ed.brz-ed--desktop .brz-mb-lg-100{margin-bottom:100px!important}
5058
- .brz-ed.brz-ed--tablet .brz-mt-sm-0{margin-top:0!important}
5059
- .brz-ed.brz-ed--tablet .brz-mt-sm-1{margin-top:1px!important}
5060
- .brz-ed.brz-ed--tablet .brz-mt-sm-2{margin-top:2px!important}
5061
- .brz-ed.brz-ed--tablet .brz-mt-sm-3{margin-top:3px!important}
5062
- .brz-ed.brz-ed--tablet .brz-mt-sm-4{margin-top:4px!important}
5063
- .brz-ed.brz-ed--tablet .brz-mt-sm-5{margin-top:5px!important}
5064
- .brz-ed.brz-ed--tablet .brz-mt-sm-6{margin-top:6px!important}
5065
- .brz-ed.brz-ed--tablet .brz-mt-sm-7{margin-top:7px!important}
5066
- .brz-ed.brz-ed--tablet .brz-mt-sm-8{margin-top:8px!important}
5067
- .brz-ed.brz-ed--tablet .brz-mt-sm-9{margin-top:9px!important}
5068
- .brz-ed.brz-ed--tablet .brz-mt-sm-10{margin-top:10px!important}
5069
- .brz-ed.brz-ed--tablet .brz-mt-sm-11{margin-top:11px!important}
5070
- .brz-ed.brz-ed--tablet .brz-mt-sm-12{margin-top:12px!important}
5071
- .brz-ed.brz-ed--tablet .brz-mt-sm-13{margin-top:13px!important}
5072
- .brz-ed.brz-ed--tablet .brz-mt-sm-14{margin-top:14px!important}
5073
- .brz-ed.brz-ed--tablet .brz-mt-sm-15{margin-top:15px!important}
5074
- .brz-ed.brz-ed--tablet .brz-mt-sm-16{margin-top:16px!important}
5075
- .brz-ed.brz-ed--tablet .brz-mt-sm-17{margin-top:17px!important}
5076
- .brz-ed.brz-ed--tablet .brz-mt-sm-18{margin-top:18px!important}
5077
- .brz-ed.brz-ed--tablet .brz-mt-sm-19{margin-top:19px!important}
5078
- .brz-ed.brz-ed--tablet .brz-mt-sm-20{margin-top:20px!important}
5079
- .brz-ed.brz-ed--tablet .brz-mt-sm-21{margin-top:21px!important}
5080
- .brz-ed.brz-ed--tablet .brz-mt-sm-22{margin-top:22px!important}
5081
- .brz-ed.brz-ed--tablet .brz-mt-sm-23{margin-top:23px!important}
5082
- .brz-ed.brz-ed--tablet .brz-mt-sm-24{margin-top:24px!important}
5083
- .brz-ed.brz-ed--tablet .brz-mt-sm-25{margin-top:25px!important}
5084
- .brz-ed.brz-ed--tablet .brz-mt-sm-26{margin-top:26px!important}
5085
- .brz-ed.brz-ed--tablet .brz-mt-sm-27{margin-top:27px!important}
5086
- .brz-ed.brz-ed--tablet .brz-mt-sm-28{margin-top:28px!important}
5087
- .brz-ed.brz-ed--tablet .brz-mt-sm-29{margin-top:29px!important}
5088
- .brz-ed.brz-ed--tablet .brz-mt-sm-30{margin-top:30px!important}
5089
- .brz-ed.brz-ed--tablet .brz-mt-sm-31{margin-top:31px!important}
5090
- .brz-ed.brz-ed--tablet .brz-mt-sm-32{margin-top:32px!important}
5091
- .brz-ed.brz-ed--tablet .brz-mt-sm-33{margin-top:33px!important}
5092
- .brz-ed.brz-ed--tablet .brz-mt-sm-34{margin-top:34px!important}
5093
- .brz-ed.brz-ed--tablet .brz-mt-sm-35{margin-top:35px!important}
5094
- .brz-ed.brz-ed--tablet .brz-mt-sm-36{margin-top:36px!important}
5095
- .brz-ed.brz-ed--tablet .brz-mt-sm-37{margin-top:37px!important}
5096
- .brz-ed.brz-ed--tablet .brz-mt-sm-38{margin-top:38px!important}
5097
- .brz-ed.brz-ed--tablet .brz-mt-sm-39{margin-top:39px!important}
5098
- .brz-ed.brz-ed--tablet .brz-mt-sm-40{margin-top:40px!important}
5099
- .brz-ed.brz-ed--tablet .brz-mt-sm-41{margin-top:41px!important}
5100
- .brz-ed.brz-ed--tablet .brz-mt-sm-42{margin-top:42px!important}
5101
- .brz-ed.brz-ed--tablet .brz-mt-sm-43{margin-top:43px!important}
5102
- .brz-ed.brz-ed--tablet .brz-mt-sm-44{margin-top:44px!important}
5103
- .brz-ed.brz-ed--tablet .brz-mt-sm-45{margin-top:45px!important}
5104
- .brz-ed.brz-ed--tablet .brz-mt-sm-46{margin-top:46px!important}
5105
- .brz-ed.brz-ed--tablet .brz-mt-sm-47{margin-top:47px!important}
5106
- .brz-ed.brz-ed--tablet .brz-mt-sm-48{margin-top:48px!important}
5107
- .brz-ed.brz-ed--tablet .brz-mt-sm-49{margin-top:49px!important}
5108
- .brz-ed.brz-ed--tablet .brz-mt-sm-50{margin-top:50px!important}
5109
- .brz-ed.brz-ed--tablet .brz-mt-sm-51{margin-top:51px!important}
5110
- .brz-ed.brz-ed--tablet .brz-mt-sm-52{margin-top:52px!important}
5111
- .brz-ed.brz-ed--tablet .brz-mt-sm-53{margin-top:53px!important}
5112
- .brz-ed.brz-ed--tablet .brz-mt-sm-54{margin-top:54px!important}
5113
- .brz-ed.brz-ed--tablet .brz-mt-sm-55{margin-top:55px!important}
5114
- .brz-ed.brz-ed--tablet .brz-mt-sm-56{margin-top:56px!important}
5115
- .brz-ed.brz-ed--tablet .brz-mt-sm-57{margin-top:57px!important}
5116
- .brz-ed.brz-ed--tablet .brz-mt-sm-58{margin-top:58px!important}
5117
- .brz-ed.brz-ed--tablet .brz-mt-sm-59{margin-top:59px!important}
5118
- .brz-ed.brz-ed--tablet .brz-mt-sm-60{margin-top:60px!important}
5119
- .brz-ed.brz-ed--tablet .brz-mt-sm-61{margin-top:61px!important}
5120
- .brz-ed.brz-ed--tablet .brz-mt-sm-62{margin-top:62px!important}
5121
- .brz-ed.brz-ed--tablet .brz-mt-sm-63{margin-top:63px!important}
5122
- .brz-ed.brz-ed--tablet .brz-mt-sm-64{margin-top:64px!important}
5123
- .brz-ed.brz-ed--tablet .brz-mt-sm-65{margin-top:65px!important}
5124
- .brz-ed.brz-ed--tablet .brz-mt-sm-66{margin-top:66px!important}
5125
- .brz-ed.brz-ed--tablet .brz-mt-sm-67{margin-top:67px!important}
5126
- .brz-ed.brz-ed--tablet .brz-mt-sm-68{margin-top:68px!important}
5127
- .brz-ed.brz-ed--tablet .brz-mt-sm-69{margin-top:69px!important}
5128
- .brz-ed.brz-ed--tablet .brz-mt-sm-70{margin-top:70px!important}
5129
- .brz-ed.brz-ed--tablet .brz-mt-sm-71{margin-top:71px!important}
5130
- .brz-ed.brz-ed--tablet .brz-mt-sm-72{margin-top:72px!important}
5131
- .brz-ed.brz-ed--tablet .brz-mt-sm-73{margin-top:73px!important}
5132
- .brz-ed.brz-ed--tablet .brz-mt-sm-74{margin-top:74px!important}
5133
- .brz-ed.brz-ed--tablet .brz-mt-sm-75{margin-top:75px!important}
5134
- .brz-ed.brz-ed--tablet .brz-mt-sm-76{margin-top:76px!important}
5135
- .brz-ed.brz-ed--tablet .brz-mt-sm-77{margin-top:77px!important}
5136
- .brz-ed.brz-ed--tablet .brz-mt-sm-78{margin-top:78px!important}
5137
- .brz-ed.brz-ed--tablet .brz-mt-sm-79{margin-top:79px!important}
5138
- .brz-ed.brz-ed--tablet .brz-mt-sm-80{margin-top:80px!important}
5139
- .brz-ed.brz-ed--tablet .brz-mt-sm-81{margin-top:81px!important}
5140
- .brz-ed.brz-ed--tablet .brz-mt-sm-82{margin-top:82px!important}
5141
- .brz-ed.brz-ed--tablet .brz-mt-sm-83{margin-top:83px!important}
5142
- .brz-ed.brz-ed--tablet .brz-mt-sm-84{margin-top:84px!important}
5143
- .brz-ed.brz-ed--tablet .brz-mt-sm-85{margin-top:85px!important}
5144
- .brz-ed.brz-ed--tablet .brz-mt-sm-86{margin-top:86px!important}
5145
- .brz-ed.brz-ed--tablet .brz-mt-sm-87{margin-top:87px!important}
5146
- .brz-ed.brz-ed--tablet .brz-mt-sm-88{margin-top:88px!important}
5147
- .brz-ed.brz-ed--tablet .brz-mt-sm-89{margin-top:89px!important}
5148
- .brz-ed.brz-ed--tablet .brz-mt-sm-90{margin-top:90px!important}
5149
- .brz-ed.brz-ed--tablet .brz-mt-sm-91{margin-top:91px!important}
5150
- .brz-ed.brz-ed--tablet .brz-mt-sm-92{margin-top:92px!important}
5151
- .brz-ed.brz-ed--tablet .brz-mt-sm-93{margin-top:93px!important}
5152
- .brz-ed.brz-ed--tablet .brz-mt-sm-94{margin-top:94px!important}
5153
- .brz-ed.brz-ed--tablet .brz-mt-sm-95{margin-top:95px!important}
5154
- .brz-ed.brz-ed--tablet .brz-mt-sm-96{margin-top:96px!important}
5155
- .brz-ed.brz-ed--tablet .brz-mt-sm-97{margin-top:97px!important}
5156
- .brz-ed.brz-ed--tablet .brz-mt-sm-98{margin-top:98px!important}
5157
- .brz-ed.brz-ed--tablet .brz-mt-sm-99{margin-top:99px!important}
5158
- .brz-ed.brz-ed--tablet .brz-mt-sm-100{margin-top:100px!important}
5159
- .brz-ed.brz-ed--tablet .brz-mb-sm-0{margin-bottom:0!important}
5160
- .brz-ed.brz-ed--tablet .brz-mb-sm-1{margin-bottom:1px!important}
5161
- .brz-ed.brz-ed--tablet .brz-mb-sm-2{margin-bottom:2px!important}
5162
- .brz-ed.brz-ed--tablet .brz-mb-sm-3{margin-bottom:3px!important}
5163
- .brz-ed.brz-ed--tablet .brz-mb-sm-4{margin-bottom:4px!important}
5164
- .brz-ed.brz-ed--tablet .brz-mb-sm-5{margin-bottom:5px!important}
5165
- .brz-ed.brz-ed--tablet .brz-mb-sm-6{margin-bottom:6px!important}
5166
- .brz-ed.brz-ed--tablet .brz-mb-sm-7{margin-bottom:7px!important}
5167
- .brz-ed.brz-ed--tablet .brz-mb-sm-8{margin-bottom:8px!important}
5168
- .brz-ed.brz-ed--tablet .brz-mb-sm-9{margin-bottom:9px!important}
5169
- .brz-ed.brz-ed--tablet .brz-mb-sm-10{margin-bottom:10px!important}
5170
- .brz-ed.brz-ed--tablet .brz-mb-sm-11{margin-bottom:11px!important}
5171
- .brz-ed.brz-ed--tablet .brz-mb-sm-12{margin-bottom:12px!important}
5172
- .brz-ed.brz-ed--tablet .brz-mb-sm-13{margin-bottom:13px!important}
5173
- .brz-ed.brz-ed--tablet .brz-mb-sm-14{margin-bottom:14px!important}
5174
- .brz-ed.brz-ed--tablet .brz-mb-sm-15{margin-bottom:15px!important}
5175
- .brz-ed.brz-ed--tablet .brz-mb-sm-16{margin-bottom:16px!important}
5176
- .brz-ed.brz-ed--tablet .brz-mb-sm-17{margin-bottom:17px!important}
5177
- .brz-ed.brz-ed--tablet .brz-mb-sm-18{margin-bottom:18px!important}
5178
- .brz-ed.brz-ed--tablet .brz-mb-sm-19{margin-bottom:19px!important}
5179
- .brz-ed.brz-ed--tablet .brz-mb-sm-20{margin-bottom:20px!important}
5180
- .brz-ed.brz-ed--tablet .brz-mb-sm-21{margin-bottom:21px!important}
5181
- .brz-ed.brz-ed--tablet .brz-mb-sm-22{margin-bottom:22px!important}
5182
- .brz-ed.brz-ed--tablet .brz-mb-sm-23{margin-bottom:23px!important}
5183
- .brz-ed.brz-ed--tablet .brz-mb-sm-24{margin-bottom:24px!important}
5184
- .brz-ed.brz-ed--tablet .brz-mb-sm-25{margin-bottom:25px!important}
5185
- .brz-ed.brz-ed--tablet .brz-mb-sm-26{margin-bottom:26px!important}
5186
- .brz-ed.brz-ed--tablet .brz-mb-sm-27{margin-bottom:27px!important}
5187
- .brz-ed.brz-ed--tablet .brz-mb-sm-28{margin-bottom:28px!important}
5188
- .brz-ed.brz-ed--tablet .brz-mb-sm-29{margin-bottom:29px!important}
5189
- .brz-ed.brz-ed--tablet .brz-mb-sm-30{margin-bottom:30px!important}
5190
- .brz-ed.brz-ed--tablet .brz-mb-sm-31{margin-bottom:31px!important}
5191
- .brz-ed.brz-ed--tablet .brz-mb-sm-32{margin-bottom:32px!important}
5192
- .brz-ed.brz-ed--tablet .brz-mb-sm-33{margin-bottom:33px!important}
5193
- .brz-ed.brz-ed--tablet .brz-mb-sm-34{margin-bottom:34px!important}
5194
- .brz-ed.brz-ed--tablet .brz-mb-sm-35{margin-bottom:35px!important}
5195
- .brz-ed.brz-ed--tablet .brz-mb-sm-36{margin-bottom:36px!important}
5196
- .brz-ed.brz-ed--tablet .brz-mb-sm-37{margin-bottom:37px!important}
5197
- .brz-ed.brz-ed--tablet .brz-mb-sm-38{margin-bottom:38px!important}
5198
- .brz-ed.brz-ed--tablet .brz-mb-sm-39{margin-bottom:39px!important}
5199
- .brz-ed.brz-ed--tablet .brz-mb-sm-40{margin-bottom:40px!important}
5200
- .brz-ed.brz-ed--tablet .brz-mb-sm-41{margin-bottom:41px!important}
5201
- .brz-ed.brz-ed--tablet .brz-mb-sm-42{margin-bottom:42px!important}
5202
- .brz-ed.brz-ed--tablet .brz-mb-sm-43{margin-bottom:43px!important}
5203
- .brz-ed.brz-ed--tablet .brz-mb-sm-44{margin-bottom:44px!important}
5204
- .brz-ed.brz-ed--tablet .brz-mb-sm-45{margin-bottom:45px!important}
5205
- .brz-ed.brz-ed--tablet .brz-mb-sm-46{margin-bottom:46px!important}
5206
- .brz-ed.brz-ed--tablet .brz-mb-sm-47{margin-bottom:47px!important}
5207
- .brz-ed.brz-ed--tablet .brz-mb-sm-48{margin-bottom:48px!important}
5208
- .brz-ed.brz-ed--tablet .brz-mb-sm-49{margin-bottom:49px!important}
5209
- .brz-ed.brz-ed--tablet .brz-mb-sm-50{margin-bottom:50px!important}
5210
- .brz-ed.brz-ed--tablet .brz-mb-sm-51{margin-bottom:51px!important}
5211
- .brz-ed.brz-ed--tablet .brz-mb-sm-52{margin-bottom:52px!important}
5212
- .brz-ed.brz-ed--tablet .brz-mb-sm-53{margin-bottom:53px!important}
5213
- .brz-ed.brz-ed--tablet .brz-mb-sm-54{margin-bottom:54px!important}
5214
- .brz-ed.brz-ed--tablet .brz-mb-sm-55{margin-bottom:55px!important}
5215
- .brz-ed.brz-ed--tablet .brz-mb-sm-56{margin-bottom:56px!important}
5216
- .brz-ed.brz-ed--tablet .brz-mb-sm-57{margin-bottom:57px!important}
5217
- .brz-ed.brz-ed--tablet .brz-mb-sm-58{margin-bottom:58px!important}
5218
- .brz-ed.brz-ed--tablet .brz-mb-sm-59{margin-bottom:59px!important}
5219
- .brz-ed.brz-ed--tablet .brz-mb-sm-60{margin-bottom:60px!important}
5220
- .brz-ed.brz-ed--tablet .brz-mb-sm-61{margin-bottom:61px!important}
5221
- .brz-ed.brz-ed--tablet .brz-mb-sm-62{margin-bottom:62px!important}
5222
- .brz-ed.brz-ed--tablet .brz-mb-sm-63{margin-bottom:63px!important}
5223
- .brz-ed.brz-ed--tablet .brz-mb-sm-64{margin-bottom:64px!important}
5224
- .brz-ed.brz-ed--tablet .brz-mb-sm-65{margin-bottom:65px!important}
5225
- .brz-ed.brz-ed--tablet .brz-mb-sm-66{margin-bottom:66px!important}
5226
- .brz-ed.brz-ed--tablet .brz-mb-sm-67{margin-bottom:67px!important}
5227
- .brz-ed.brz-ed--tablet .brz-mb-sm-68{margin-bottom:68px!important}
5228
- .brz-ed.brz-ed--tablet .brz-mb-sm-69{margin-bottom:69px!important}
5229
- .brz-ed.brz-ed--tablet .brz-mb-sm-70{margin-bottom:70px!important}
5230
- .brz-ed.brz-ed--tablet .brz-mb-sm-71{margin-bottom:71px!important}
5231
- .brz-ed.brz-ed--tablet .brz-mb-sm-72{margin-bottom:72px!important}
5232
- .brz-ed.brz-ed--tablet .brz-mb-sm-73{margin-bottom:73px!important}
5233
- .brz-ed.brz-ed--tablet .brz-mb-sm-74{margin-bottom:74px!important}
5234
- .brz-ed.brz-ed--tablet .brz-mb-sm-75{margin-bottom:75px!important}
5235
- .brz-ed.brz-ed--tablet .brz-mb-sm-76{margin-bottom:76px!important}
5236
- .brz-ed.brz-ed--tablet .brz-mb-sm-77{margin-bottom:77px!important}
5237
- .brz-ed.brz-ed--tablet .brz-mb-sm-78{margin-bottom:78px!important}
5238
- .brz-ed.brz-ed--tablet .brz-mb-sm-79{margin-bottom:79px!important}
5239
- .brz-ed.brz-ed--tablet .brz-mb-sm-80{margin-bottom:80px!important}
5240
- .brz-ed.brz-ed--tablet .brz-mb-sm-81{margin-bottom:81px!important}
5241
- .brz-ed.brz-ed--tablet .brz-mb-sm-82{margin-bottom:82px!important}
5242
- .brz-ed.brz-ed--tablet .brz-mb-sm-83{margin-bottom:83px!important}
5243
- .brz-ed.brz-ed--tablet .brz-mb-sm-84{margin-bottom:84px!important}
5244
- .brz-ed.brz-ed--tablet .brz-mb-sm-85{margin-bottom:85px!important}
5245
- .brz-ed.brz-ed--tablet .brz-mb-sm-86{margin-bottom:86px!important}
5246
- .brz-ed.brz-ed--tablet .brz-mb-sm-87{margin-bottom:87px!important}
5247
- .brz-ed.brz-ed--tablet .brz-mb-sm-88{margin-bottom:88px!important}
5248
- .brz-ed.brz-ed--tablet .brz-mb-sm-89{margin-bottom:89px!important}
5249
- .brz-ed.brz-ed--tablet .brz-mb-sm-90{margin-bottom:90px!important}
5250
- .brz-ed.brz-ed--tablet .brz-mb-sm-91{margin-bottom:91px!important}
5251
- .brz-ed.brz-ed--tablet .brz-mb-sm-92{margin-bottom:92px!important}
5252
- .brz-ed.brz-ed--tablet .brz-mb-sm-93{margin-bottom:93px!important}
5253
- .brz-ed.brz-ed--tablet .brz-mb-sm-94{margin-bottom:94px!important}
5254
- .brz-ed.brz-ed--tablet .brz-mb-sm-95{margin-bottom:95px!important}
5255
- .brz-ed.brz-ed--tablet .brz-mb-sm-96{margin-bottom:96px!important}
5256
- .brz-ed.brz-ed--tablet .brz-mb-sm-97{margin-bottom:97px!important}
5257
- .brz-ed.brz-ed--tablet .brz-mb-sm-98{margin-bottom:98px!important}
5258
- .brz-ed.brz-ed--tablet .brz-mb-sm-99{margin-bottom:99px!important}
5259
- .brz-ed.brz-ed--tablet .brz-mb-sm-100{margin-bottom:100px!important}
5260
- .brz-ed.brz-ed--mobile .brz-mt-xs-0{margin-top:0!important}
5261
- .brz-ed.brz-ed--mobile .brz-mt-xs-1{margin-top:1px!important}
5262
- .brz-ed.brz-ed--mobile .brz-mt-xs-2{margin-top:2px!important}
5263
- .brz-ed.brz-ed--mobile .brz-mt-xs-3{margin-top:3px!important}
5264
- .brz-ed.brz-ed--mobile .brz-mt-xs-4{margin-top:4px!important}
5265
- .brz-ed.brz-ed--mobile .brz-mt-xs-5{margin-top:5px!important}
5266
- .brz-ed.brz-ed--mobile .brz-mt-xs-6{margin-top:6px!important}
5267
- .brz-ed.brz-ed--mobile .brz-mt-xs-7{margin-top:7px!important}
5268
- .brz-ed.brz-ed--mobile .brz-mt-xs-8{margin-top:8px!important}
5269
- .brz-ed.brz-ed--mobile .brz-mt-xs-9{margin-top:9px!important}
5270
- .brz-ed.brz-ed--mobile .brz-mt-xs-10{margin-top:10px!important}
5271
- .brz-ed.brz-ed--mobile .brz-mt-xs-11{margin-top:11px!important}
5272
- .brz-ed.brz-ed--mobile .brz-mt-xs-12{margin-top:12px!important}
5273
- .brz-ed.brz-ed--mobile .brz-mt-xs-13{margin-top:13px!important}
5274
- .brz-ed.brz-ed--mobile .brz-mt-xs-14{margin-top:14px!important}
5275
- .brz-ed.brz-ed--mobile .brz-mt-xs-15{margin-top:15px!important}
5276
- .brz-ed.brz-ed--mobile .brz-mt-xs-16{margin-top:16px!important}
5277
- .brz-ed.brz-ed--mobile .brz-mt-xs-17{margin-top:17px!important}
5278
- .brz-ed.brz-ed--mobile .brz-mt-xs-18{margin-top:18px!important}
5279
- .brz-ed.brz-ed--mobile .brz-mt-xs-19{margin-top:19px!important}
5280
- .brz-ed.brz-ed--mobile .brz-mt-xs-20{margin-top:20px!important}
5281
- .brz-ed.brz-ed--mobile .brz-mt-xs-21{margin-top:21px!important}
5282
- .brz-ed.brz-ed--mobile .brz-mt-xs-22{margin-top:22px!important}
5283
- .brz-ed.brz-ed--mobile .brz-mt-xs-23{margin-top:23px!important}
5284
- .brz-ed.brz-ed--mobile .brz-mt-xs-24{margin-top:24px!important}
5285
- .brz-ed.brz-ed--mobile .brz-mt-xs-25{margin-top:25px!important}
5286
- .brz-ed.brz-ed--mobile .brz-mt-xs-26{margin-top:26px!important}
5287
- .brz-ed.brz-ed--mobile .brz-mt-xs-27{margin-top:27px!important}
5288
- .brz-ed.brz-ed--mobile .brz-mt-xs-28{margin-top:28px!important}
5289
- .brz-ed.brz-ed--mobile .brz-mt-xs-29{margin-top:29px!important}
5290
- .brz-ed.brz-ed--mobile .brz-mt-xs-30{margin-top:30px!important}
5291
- .brz-ed.brz-ed--mobile .brz-mt-xs-31{margin-top:31px!important}
5292
- .brz-ed.brz-ed--mobile .brz-mt-xs-32{margin-top:32px!important}
5293
- .brz-ed.brz-ed--mobile .brz-mt-xs-33{margin-top:33px!important}
5294
- .brz-ed.brz-ed--mobile .brz-mt-xs-34{margin-top:34px!important}
5295
- .brz-ed.brz-ed--mobile .brz-mt-xs-35{margin-top:35px!important}
5296
- .brz-ed.brz-ed--mobile .brz-mt-xs-36{margin-top:36px!important}
5297
- .brz-ed.brz-ed--mobile .brz-mt-xs-37{margin-top:37px!important}
5298
- .brz-ed.brz-ed--mobile .brz-mt-xs-38{margin-top:38px!important}
5299
- .brz-ed.brz-ed--mobile .brz-mt-xs-39{margin-top:39px!important}
5300
- .brz-ed.brz-ed--mobile .brz-mt-xs-40{margin-top:40px!important}
5301
- .brz-ed.brz-ed--mobile .brz-mt-xs-41{margin-top:41px!important}
5302
- .brz-ed.brz-ed--mobile .brz-mt-xs-42{margin-top:42px!important}
5303
- .brz-ed.brz-ed--mobile .brz-mt-xs-43{margin-top:43px!important}
5304
- .brz-ed.brz-ed--mobile .brz-mt-xs-44{margin-top:44px!important}
5305
- .brz-ed.brz-ed--mobile .brz-mt-xs-45{margin-top:45px!important}
5306
- .brz-ed.brz-ed--mobile .brz-mt-xs-46{margin-top:46px!important}
5307
- .brz-ed.brz-ed--mobile .brz-mt-xs-47{margin-top:47px!important}
5308
- .brz-ed.brz-ed--mobile .brz-mt-xs-48{margin-top:48px!important}
5309
- .brz-ed.brz-ed--mobile .brz-mt-xs-49{margin-top:49px!important}
5310
- .brz-ed.brz-ed--mobile .brz-mt-xs-50{margin-top:50px!important}
5311
- .brz-ed.brz-ed--mobile .brz-mt-xs-51{margin-top:51px!important}
5312
- .brz-ed.brz-ed--mobile .brz-mt-xs-52{margin-top:52px!important}
5313
- .brz-ed.brz-ed--mobile .brz-mt-xs-53{margin-top:53px!important}
5314
- .brz-ed.brz-ed--mobile .brz-mt-xs-54{margin-top:54px!important}
5315
- .brz-ed.brz-ed--mobile .brz-mt-xs-55{margin-top:55px!important}
5316
- .brz-ed.brz-ed--mobile .brz-mt-xs-56{margin-top:56px!important}
5317
- .brz-ed.brz-ed--mobile .brz-mt-xs-57{margin-top:57px!important}
5318
- .brz-ed.brz-ed--mobile .brz-mt-xs-58{margin-top:58px!important}
5319
- .brz-ed.brz-ed--mobile .brz-mt-xs-59{margin-top:59px!important}
5320
- .brz-ed.brz-ed--mobile .brz-mt-xs-60{margin-top:60px!important}
5321
- .brz-ed.brz-ed--mobile .brz-mt-xs-61{margin-top:61px!important}
5322
- .brz-ed.brz-ed--mobile .brz-mt-xs-62{margin-top:62px!important}
5323
- .brz-ed.brz-ed--mobile .brz-mt-xs-63{margin-top:63px!important}
5324
- .brz-ed.brz-ed--mobile .brz-mt-xs-64{margin-top:64px!important}
5325
- .brz-ed.brz-ed--mobile .brz-mt-xs-65{margin-top:65px!important}
5326
- .brz-ed.brz-ed--mobile .brz-mt-xs-66{margin-top:66px!important}
5327
- .brz-ed.brz-ed--mobile .brz-mt-xs-67{margin-top:67px!important}
5328
- .brz-ed.brz-ed--mobile .brz-mt-xs-68{margin-top:68px!important}
5329
- .brz-ed.brz-ed--mobile .brz-mt-xs-69{margin-top:69px!important}
5330
- .brz-ed.brz-ed--mobile .brz-mt-xs-70{margin-top:70px!important}
5331
- .brz-ed.brz-ed--mobile .brz-mt-xs-71{margin-top:71px!important}
5332
- .brz-ed.brz-ed--mobile .brz-mt-xs-72{margin-top:72px!important}
5333
- .brz-ed.brz-ed--mobile .brz-mt-xs-73{margin-top:73px!important}
5334
- .brz-ed.brz-ed--mobile .brz-mt-xs-74{margin-top:74px!important}
5335
- .brz-ed.brz-ed--mobile .brz-mt-xs-75{margin-top:75px!important}
5336
- .brz-ed.brz-ed--mobile .brz-mt-xs-76{margin-top:76px!important}
5337
- .brz-ed.brz-ed--mobile .brz-mt-xs-77{margin-top:77px!important}
5338
- .brz-ed.brz-ed--mobile .brz-mt-xs-78{margin-top:78px!important}
5339
- .brz-ed.brz-ed--mobile .brz-mt-xs-79{margin-top:79px!important}
5340
- .brz-ed.brz-ed--mobile .brz-mt-xs-80{margin-top:80px!important}
5341
- .brz-ed.brz-ed--mobile .brz-mt-xs-81{margin-top:81px!important}
5342
- .brz-ed.brz-ed--mobile .brz-mt-xs-82{margin-top:82px!important}
5343
- .brz-ed.brz-ed--mobile .brz-mt-xs-83{margin-top:83px!important}
5344
- .brz-ed.brz-ed--mobile .brz-mt-xs-84{margin-top:84px!important}
5345
- .brz-ed.brz-ed--mobile .brz-mt-xs-85{margin-top:85px!important}
5346
- .brz-ed.brz-ed--mobile .brz-mt-xs-86{margin-top:86px!important}
5347
- .brz-ed.brz-ed--mobile .brz-mt-xs-87{margin-top:87px!important}
5348
- .brz-ed.brz-ed--mobile .brz-mt-xs-88{margin-top:88px!important}
5349
- .brz-ed.brz-ed--mobile .brz-mt-xs-89{margin-top:89px!important}
5350
- .brz-ed.brz-ed--mobile .brz-mt-xs-90{margin-top:90px!important}
5351
- .brz-ed.brz-ed--mobile .brz-mt-xs-91{margin-top:91px!important}
5352
- .brz-ed.brz-ed--mobile .brz-mt-xs-92{margin-top:92px!important}
5353
- .brz-ed.brz-ed--mobile .brz-mt-xs-93{margin-top:93px!important}
5354
- .brz-ed.brz-ed--mobile .brz-mt-xs-94{margin-top:94px!important}
5355
- .brz-ed.brz-ed--mobile .brz-mt-xs-95{margin-top:95px!important}
5356
- .brz-ed.brz-ed--mobile .brz-mt-xs-96{margin-top:96px!important}
5357
- .brz-ed.brz-ed--mobile .brz-mt-xs-97{margin-top:97px!important}
5358
- .brz-ed.brz-ed--mobile .brz-mt-xs-98{margin-top:98px!important}
5359
- .brz-ed.brz-ed--mobile .brz-mt-xs-99{margin-top:99px!important}
5360
- .brz-ed.brz-ed--mobile .brz-mt-xs-100{margin-top:100px!important}
5361
- .brz-ed.brz-ed--mobile .brz-mb-xs-0{margin-bottom:0!important}
5362
- .brz-ed.brz-ed--mobile .brz-mb-xs-1{margin-bottom:1px!important}
5363
- .brz-ed.brz-ed--mobile .brz-mb-xs-2{margin-bottom:2px!important}
5364
- .brz-ed.brz-ed--mobile .brz-mb-xs-3{margin-bottom:3px!important}
5365
- .brz-ed.brz-ed--mobile .brz-mb-xs-4{margin-bottom:4px!important}
5366
- .brz-ed.brz-ed--mobile .brz-mb-xs-5{margin-bottom:5px!important}
5367
- .brz-ed.brz-ed--mobile .brz-mb-xs-6{margin-bottom:6px!important}
5368
- .brz-ed.brz-ed--mobile .brz-mb-xs-7{margin-bottom:7px!important}
5369
- .brz-ed.brz-ed--mobile .brz-mb-xs-8{margin-bottom:8px!important}
5370
- .brz-ed.brz-ed--mobile .brz-mb-xs-9{margin-bottom:9px!important}
5371
- .brz-ed.brz-ed--mobile .brz-mb-xs-10{margin-bottom:10px!important}
5372
- .brz-ed.brz-ed--mobile .brz-mb-xs-11{margin-bottom:11px!important}
5373
- .brz-ed.brz-ed--mobile .brz-mb-xs-12{margin-bottom:12px!important}
5374
- .brz-ed.brz-ed--mobile .brz-mb-xs-13{margin-bottom:13px!important}
5375
- .brz-ed.brz-ed--mobile .brz-mb-xs-14{margin-bottom:14px!important}
5376
- .brz-ed.brz-ed--mobile .brz-mb-xs-15{margin-bottom:15px!important}
5377
- .brz-ed.brz-ed--mobile .brz-mb-xs-16{margin-bottom:16px!important}
5378
- .brz-ed.brz-ed--mobile .brz-mb-xs-17{margin-bottom:17px!important}
5379
- .brz-ed.brz-ed--mobile .brz-mb-xs-18{margin-bottom:18px!important}
5380
- .brz-ed.brz-ed--mobile .brz-mb-xs-19{margin-bottom:19px!important}
5381
- .brz-ed.brz-ed--mobile .brz-mb-xs-20{margin-bottom:20px!important}
5382
- .brz-ed.brz-ed--mobile .brz-mb-xs-21{margin-bottom:21px!important}
5383
- .brz-ed.brz-ed--mobile .brz-mb-xs-22{margin-bottom:22px!important}
5384
- .brz-ed.brz-ed--mobile .brz-mb-xs-23{margin-bottom:23px!important}
5385
- .brz-ed.brz-ed--mobile .brz-mb-xs-24{margin-bottom:24px!important}
5386
- .brz-ed.brz-ed--mobile .brz-mb-xs-25{margin-bottom:25px!important}
5387
- .brz-ed.brz-ed--mobile .brz-mb-xs-26{margin-bottom:26px!important}
5388
- .brz-ed.brz-ed--mobile .brz-mb-xs-27{margin-bottom:27px!important}
5389
- .brz-ed.brz-ed--mobile .brz-mb-xs-28{margin-bottom:28px!important}
5390
- .brz-ed.brz-ed--mobile .brz-mb-xs-29{margin-bottom:29px!important}
5391
- .brz-ed.brz-ed--mobile .brz-mb-xs-30{margin-bottom:30px!important}
5392
- .brz-ed.brz-ed--mobile .brz-mb-xs-31{margin-bottom:31px!important}
5393
- .brz-ed.brz-ed--mobile .brz-mb-xs-32{margin-bottom:32px!important}
5394
- .brz-ed.brz-ed--mobile .brz-mb-xs-33{margin-bottom:33px!important}
5395
- .brz-ed.brz-ed--mobile .brz-mb-xs-34{margin-bottom:34px!important}
5396
- .brz-ed.brz-ed--mobile .brz-mb-xs-35{margin-bottom:35px!important}
5397
- .brz-ed.brz-ed--mobile .brz-mb-xs-36{margin-bottom:36px!important}
5398
- .brz-ed.brz-ed--mobile .brz-mb-xs-37{margin-bottom:37px!important}
5399
- .brz-ed.brz-ed--mobile .brz-mb-xs-38{margin-bottom:38px!important}
5400
- .brz-ed.brz-ed--mobile .brz-mb-xs-39{margin-bottom:39px!important}
5401
- .brz-ed.brz-ed--mobile .brz-mb-xs-40{margin-bottom:40px!important}
5402
- .brz-ed.brz-ed--mobile .brz-mb-xs-41{margin-bottom:41px!important}
5403
- .brz-ed.brz-ed--mobile .brz-mb-xs-42{margin-bottom:42px!important}
5404
- .brz-ed.brz-ed--mobile .brz-mb-xs-43{margin-bottom:43px!important}
5405
- .brz-ed.brz-ed--mobile .brz-mb-xs-44{margin-bottom:44px!important}
5406
- .brz-ed.brz-ed--mobile .brz-mb-xs-45{margin-bottom:45px!important}
5407
- .brz-ed.brz-ed--mobile .brz-mb-xs-46{margin-bottom:46px!important}
5408
- .brz-ed.brz-ed--mobile .brz-mb-xs-47{margin-bottom:47px!important}
5409
- .brz-ed.brz-ed--mobile .brz-mb-xs-48{margin-bottom:48px!important}
5410
- .brz-ed.brz-ed--mobile .brz-mb-xs-49{margin-bottom:49px!important}
5411
- .brz-ed.brz-ed--mobile .brz-mb-xs-50{margin-bottom:50px!important}
5412
- .brz-ed.brz-ed--mobile .brz-mb-xs-51{margin-bottom:51px!important}
5413
- .brz-ed.brz-ed--mobile .brz-mb-xs-52{margin-bottom:52px!important}
5414
- .brz-ed.brz-ed--mobile .brz-mb-xs-53{margin-bottom:53px!important}
5415
- .brz-ed.brz-ed--mobile .brz-mb-xs-54{margin-bottom:54px!important}
5416
- .brz-ed.brz-ed--mobile .brz-mb-xs-55{margin-bottom:55px!important}
5417
- .brz-ed.brz-ed--mobile .brz-mb-xs-56{margin-bottom:56px!important}
5418
- .brz-ed.brz-ed--mobile .brz-mb-xs-57{margin-bottom:57px!important}
5419
- .brz-ed.brz-ed--mobile .brz-mb-xs-58{margin-bottom:58px!important}
5420
- .brz-ed.brz-ed--mobile .brz-mb-xs-59{margin-bottom:59px!important}
5421
- .brz-ed.brz-ed--mobile .brz-mb-xs-60{margin-bottom:60px!important}
5422
- .brz-ed.brz-ed--mobile .brz-mb-xs-61{margin-bottom:61px!important}
5423
- .brz-ed.brz-ed--mobile .brz-mb-xs-62{margin-bottom:62px!important}
5424
- .brz-ed.brz-ed--mobile .brz-mb-xs-63{margin-bottom:63px!important}
5425
- .brz-ed.brz-ed--mobile .brz-mb-xs-64{margin-bottom:64px!important}
5426
- .brz-ed.brz-ed--mobile .brz-mb-xs-65{margin-bottom:65px!important}
5427
- .brz-ed.brz-ed--mobile .brz-mb-xs-66{margin-bottom:66px!important}
5428
- .brz-ed.brz-ed--mobile .brz-mb-xs-67{margin-bottom:67px!important}
5429
- .brz-ed.brz-ed--mobile .brz-mb-xs-68{margin-bottom:68px!important}
5430
- .brz-ed.brz-ed--mobile .brz-mb-xs-69{margin-bottom:69px!important}
5431
- .brz-ed.brz-ed--mobile .brz-mb-xs-70{margin-bottom:70px!important}
5432
- .brz-ed.brz-ed--mobile .brz-mb-xs-71{margin-bottom:71px!important}
5433
- .brz-ed.brz-ed--mobile .brz-mb-xs-72{margin-bottom:72px!important}
5434
- .brz-ed.brz-ed--mobile .brz-mb-xs-73{margin-bottom:73px!important}
5435
- .brz-ed.brz-ed--mobile .brz-mb-xs-74{margin-bottom:74px!important}
5436
- .brz-ed.brz-ed--mobile .brz-mb-xs-75{margin-bottom:75px!important}
5437
- .brz-ed.brz-ed--mobile .brz-mb-xs-76{margin-bottom:76px!important}
5438
- .brz-ed.brz-ed--mobile .brz-mb-xs-77{margin-bottom:77px!important}
5439
- .brz-ed.brz-ed--mobile .brz-mb-xs-78{margin-bottom:78px!important}
5440
- .brz-ed.brz-ed--mobile .brz-mb-xs-79{margin-bottom:79px!important}
5441
- .brz-ed.brz-ed--mobile .brz-mb-xs-80{margin-bottom:80px!important}
5442
- .brz-ed.brz-ed--mobile .brz-mb-xs-81{margin-bottom:81px!important}
5443
- .brz-ed.brz-ed--mobile .brz-mb-xs-82{margin-bottom:82px!important}
5444
- .brz-ed.brz-ed--mobile .brz-mb-xs-83{margin-bottom:83px!important}
5445
- .brz-ed.brz-ed--mobile .brz-mb-xs-84{margin-bottom:84px!important}
5446
- .brz-ed.brz-ed--mobile .brz-mb-xs-85{margin-bottom:85px!important}
5447
- .brz-ed.brz-ed--mobile .brz-mb-xs-86{margin-bottom:86px!important}
5448
- .brz-ed.brz-ed--mobile .brz-mb-xs-87{margin-bottom:87px!important}
5449
- .brz-ed.brz-ed--mobile .brz-mb-xs-88{margin-bottom:88px!important}
5450
- .brz-ed.brz-ed--mobile .brz-mb-xs-89{margin-bottom:89px!important}
5451
- .brz-ed.brz-ed--mobile .brz-mb-xs-90{margin-bottom:90px!important}
5452
- .brz-ed.brz-ed--mobile .brz-mb-xs-91{margin-bottom:91px!important}
5453
- .brz-ed.brz-ed--mobile .brz-mb-xs-92{margin-bottom:92px!important}
5454
- .brz-ed.brz-ed--mobile .brz-mb-xs-93{margin-bottom:93px!important}
5455
- .brz-ed.brz-ed--mobile .brz-mb-xs-94{margin-bottom:94px!important}
5456
- .brz-ed.brz-ed--mobile .brz-mb-xs-95{margin-bottom:95px!important}
5457
- .brz-ed.brz-ed--mobile .brz-mb-xs-96{margin-bottom:96px!important}
5458
- .brz-ed.brz-ed--mobile .brz-mb-xs-97{margin-bottom:97px!important}
5459
- .brz-ed.brz-ed--mobile .brz-mb-xs-98{margin-bottom:98px!important}
5460
- .brz-ed.brz-ed--mobile .brz-mb-xs-99{margin-bottom:99px!important}
5461
- .brz-ed.brz-ed--mobile .brz-mb-xs-100{margin-bottom:100px!important}
5462
- .brz-ed .brz-text-lg-left{text-align:left!important;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
5463
- .brz-ed .brz-text-lg-right{text-align:right!important;-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
5464
- .brz-ed .brz-text-lg-center{text-align:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
5465
- .brz-ed .brz-text-lg-justify{text-align:justify!important}
5466
- .brz-ed.brz-ed--desktop .brz-text-lg-left{text-align:left!important;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
5467
- .brz-ed.brz-ed--desktop .brz-text-lg-right{text-align:right!important;-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
5468
- .brz-ed.brz-ed--desktop .brz-text-lg-center{text-align:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
5469
- .brz-ed.brz-ed--desktop .brz-text-lg-justify{text-align:justify!important}
5470
- .brz-ed.brz-ed--tablet .brz-text-sm-left{text-align:left!important;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
5471
- .brz-ed.brz-ed--tablet .brz-text-sm-right{text-align:right!important;-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
5472
- .brz-ed.brz-ed--tablet .brz-text-sm-center{text-align:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
5473
- .brz-ed.brz-ed--tablet .brz-text-sm-justify{text-align:justify!important}
5474
- .brz-ed.brz-ed--mobile .brz-text-xs-left{text-align:left!important;-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}
5475
- .brz-ed.brz-ed--mobile .brz-text-xs-right{text-align:right!important;-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}
5476
- .brz-ed.brz-ed--mobile .brz-text-xs-center{text-align:center!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}
5477
- .brz-ed.brz-ed--mobile .brz-text-xs-justify{text-align:justify!important}
5478
- .brz-ed .brz-ed-arrow{position:absolute;top:-6px;height:12px;left:50%;margin-left:-6px}
5479
- .brz-ed .brz-ed-arrow:after{content:"";display:block;border-bottom:6px solid rgba(3,8,15,.92);border-left:6px solid transparent;border-right:6px solid transparent}
5480
- .brz-ed .brz-ed-arrow--top,.brz-ed .brz-ed-arrow--top-center,.brz-ed .brz-ed-arrow--top-end,.brz-ed .brz-ed-arrow--top-left,.brz-ed .brz-ed-arrow--top-right,.brz-ed .brz-ed-arrow--top-start{top:auto;bottom:-12px}
5481
- .brz-ed .brz-ed-arrow--top-center:after,.brz-ed .brz-ed-arrow--top-end:after,.brz-ed .brz-ed-arrow--top-left:after,.brz-ed .brz-ed-arrow--top-right:after,.brz-ed .brz-ed-arrow--top-start:after,.brz-ed .brz-ed-arrow--top:after{border-top:6px solid rgba(3,8,15,.92);border-bottom:6px solid transparent}
5482
- .brz-ed .brz-ed-arrow--left,.brz-ed .brz-ed-arrow--left-end,.brz-ed .brz-ed-arrow--left-start{left:unset;right:-6px;-webkit-transform:rotate(90deg);transform:rotate(90deg)}
5483
- .brz-ed .brz-ed-arrow--right,.brz-ed .brz-ed-arrow--right-end,.brz-ed .brz-ed-arrow--right-start{left:-6px;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}
5484
- .brz-ed .brz-ed-animated{-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-fill-mode:both;animation-fill-mode:both}
5485
- .brz-ed .brz-ed-animated--fadeInDown{-webkit-animation-name:brz-ed-fadeInDown;animation-name:brz-ed-fadeInDown}
5486
- .brz-ed .brz-ed-animated--fadeInUp{-webkit-animation-name:brz-ed-fadeInUp;animation-name:brz-ed-fadeInUp}
5487
- .brz-ed .brz-ed-animated--fadeIn{-webkit-animation-name:brz-ed-fadeIn;animation-name:brz-ed-fadeIn}
5488
- .brz-ed .brz-ed-animated--fadeInLeft{-webkit-animation-name:brz-ed-fadeInLeft;animation-name:brz-ed-fadeInLeft}
5489
- .brz-ed .brz-ed-animated--spin{-webkit-animation-name:brz-ed-spin;animation-name:brz-ed-spin;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}
5490
- .brz-ed .brz-ed-fade-enter{opacity:.01}
5491
- .brz-ed .brz-ed-fade-enter.brz-ed-fade-enter-active{opacity:1;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}
5492
- .brz-ed .brz-ed-fade-exit{opacity:1}
5493
- .brz-ed .brz-ed-fade-exit.brz-ed-fade-exit-active{opacity:.01;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}
5494
- .brz-ed .brz-animated{-webkit-animation-fill-mode:none;animation-fill-mode:none}
5495
- .brz-ed .brz-ed-btn{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid transparent;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;white-space:nowrap;-webkit-transition:all .3s ease;transition:all .3s ease;text-decoration:none;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:14px;padding:12px 18px;line-height:1;outline:0}
5496
- .brz-ed .brz-ed-btn:active{outline:0;background-image:none}
5497
- .brz-ed .brz-ed-btn:focus{outline:0}
5498
- .brz-ed .brz-ed-btn-icon .brz-icon-svg{margin-left:10px;vertical-align:middle}
5499
- .brz-ed .brz-ed-btn-icon span{display:inline-block;vertical-align:middle}
5500
- .brz-ed .brz-ed-btn-icon--left .brz-icon-svg{margin-left:0;margin-right:10px}
5501
- .brz-ed .brz-ed-btn--loading{pointer-events:none!important;-webkit-transition:none;transition:none}
5502
- .brz-ed .brz-ed-btn--loading .brz-icon-svg{margin:0;-webkit-animation-name:spin;animation-name:spin;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}
5503
- .brz-ed .brz-ed-btn--disabled{pointer-events:none!important;color:#fff!important;background-color:rgba(41,46,55,.5)!important;border-color:transparent!important}
5504
- .brz-ed .brz-ed-btn-rounded{border-radius:3px}
5505
- .brz-ed .brz-ed-btn-round{border-radius:100px}
5506
- .brz-ed .brz-ed-btn-sm{padding:11px 17px;font-size:14px}
5507
- .brz-ed .brz-ed-btn-sm.brz-ed-btn-icon .brz-icon-svg{font-size:12px}
5508
- .brz-ed .brz-ed-btn-sm.brz-ed-btn--loading{font-size:16px;padding-top:10px;padding-bottom:10px}
5509
- .brz-ed .brz-ed-btn-xs{font-size:10px;padding:9px 18px}
5510
- .brz-ed .brz-ed-btn-xs-2{font-size:13px;padding:6px 18px;line-height:1.1}
5511
- .brz-ed .brz-ed-btn-full{width:100%}
5512
- .brz-ed .brz-ed-btn-width-1{min-width:130px}
5513
- .brz-ed .brz-ed-btn-width-2{min-width:176px}
5514
- .brz-ed .brz-ed-btn-width-3{min-width:102px}
5515
- .brz-ed .brz-ed-btn-default{border-color:transparent;background-color:transparent;color:#626b70}
5516
- .brz-ed .brz-ed-btn-default:hover{border-color:transparent;background-color:transparent}
5517
- .brz-ed .brz-ed-btn-dark{border-color:#3b474b;background-color:#3b474b;color:#fff}
5518
- .brz-ed .brz-ed-btn-dark:hover{border-color:#283337;background-color:#283337}
5519
- .brz-ed .brz-ed-btn-dark-outline{color:#3b474b;border-color:#3b474b;background-color:#fff}
5520
- .brz-ed .brz-ed-btn-dark-outline:hover{background-color:#3b474b;color:#fff!important}
5521
- .brz-ed .brz-ed-btn-teal{border-color:#3dbfe8!important;background-color:#3dbfe8!important;color:#fff!important}
5522
- .brz-ed .brz-ed-btn-teal:hover{border-color:#35a9d6!important;background-color:#35a9d6!important}
5523
- .brz-ed .brz-ed-btn-teal-outline{color:#34beea;border-color:#34beea;background-color:transparent}
5524
- .brz-ed .brz-ed-btn-teal-outline:focus,.brz-ed .brz-ed-btn-teal-outline:hover{background-color:#34beea;color:#fff!important}
5525
- .brz-ed .brz-ed-btn-blue{border-color:#0085ba!important;background-color:#0085ba!important;color:#fff!important}
5526
- .brz-ed .brz-ed-btn-blue:hover{border-color:#0092cc!important;background-color:#0092cc!important}
5527
- .brz-ed .brz-ed-btn-green{border-color:#8dc63f;background-color:#8dc63f;color:#fff!important}
5528
- .brz-ed .brz-ed-btn-green:focus,.brz-ed .brz-ed-btn-green:hover{border-color:#8dc63f;background-color:#8dc63f}
5529
- .brz-ed .brz-ed-btn-green-outline{color:#8dc63f;border-color:#8dc63f;background-color:transparent}
5530
- .brz-ed .brz-ed-btn-green-outline:hover{background-color:#8dc63f;color:#fff!important}
5531
- .brz-ed .brz-ed-btn-gray{border-color:transparent;background-color:rgba(41,46,55,.5);color:#fff!important}
5532
- .brz-ed .brz-ed-btn-gray:focus,.brz-ed .brz-ed-btn-gray:hover{border-color:transparent;background-color:rgba(41,46,55,.5)}
5533
- .brz-ed .brz-ed-btn-gray-outline{color:rgba(41,46,55,.5);border-color:rgba(41,46,55,.5);background-color:transparent}
5534
- .brz-ed .brz-ed-btn-gray-outline:hover{background-color:rgba(41,46,55,.5);color:#fff!important}
5535
- .brz-ed .brz-ed-btn-red{border-color:#ed2164;background-color:#ed2164;color:#fff!important}
5536
- .brz-ed .brz-ed-btn-red:focus,.brz-ed .brz-ed-btn-red:hover{border-color:transparent;background-color:#df3c3c}
5537
- .brz-ed .brz-ed-btn-red-outline{color:#df3c3c;border-color:#df3c3c;background-color:transparent}
5538
- .brz-ed .brz-ed-btn-red-outline:hover{background-color:#df3c3c;color:#fff!important}
5539
- .brz-ed .brz-ed-btn-pro{border-color:transparent;background-color:#d62c64;color:#fff;font-size:14px;font-weight:600}
5540
- .brz-ed .brz-ed-btn-pro:focus,.brz-ed .brz-ed-btn-pro:hover{border-color:transparent;background-color:rgba(214,44,100,.8)}
5541
- .brz-ed .brz-ed-btn-teal--hover:hover{border-color:#3dbfe8!important;background-color:#3dbfe8!important}
5542
- .brz-ed .brz-ed-btn-red--hover:hover{border-color:#ed2164!important;background-color:#ed2164!important}
5543
- .brz-ed .brz-ed-alert{font:600 14px/18px nunito,"Open Sans",Arial,sans-serif;background-color:#f2f2f2;padding:12px 15px;margin:0 0 20px}
5544
- .brz-ed .brz-ed-alert-error{border-left:4px solid #df3c3c;color:#df3c3c;background-color:rgba(223,60,60,.1)}
5545
- .brz-ed .brz-ed-alert-error .brz-span{color:#df3c3c!important}
5546
- .brz-ed .brz-ed-alert-success{border-left:4px solid #6ab504;color:#6ab504;background-color:#eff5e8}
5547
- .brz-ed .brz-ed-alert-success .brz-span{color:#6ab504!important}
5548
- .brz-ed .brz-ed-alert-info{border-left:4px solid #47a9c8;color:#656b6f;background-color:#eff9fd}
5549
- .brz-ed .brz-ed-alert-info .popup-icon-info{float:left;margin:0 15px 5px 0;color:#47a9c8;border-color:#47a9c8}
5550
- .brz-ed .brz-ed-alert-info .brz-span{color:#47a9c8!important}
5551
- .brz-ed .popup-icon-info{font-family:nunito,"Open Sans",Arial,sans-serif;display:inline-block;border:2px solid #ccc;color:#ccc;width:32px;height:32px;text-align:center;line-height:32px;font-size:18px;border-radius:50%;margin-bottom:10px}
5552
- .brz-ed .brz-ed-alert-pro{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;color:#d62c64;background-color:#e0e1e2;padding:21px 36px}
5553
- .brz-ed .brz-ed-rotate--180{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}
5554
- .brz-ed .brz-ed-rotate--90{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}
5555
- .brz-ed .brz-ed-badge{font-family:nunito,"Open Sans",Arial,sans-serif;font-size:9px;font-weight:600;color:#fff;background-color:#3dbfe8;border-radius:4px;text-transform:uppercase;display:inline-block;line-height:1;padding:4px 5px}
5556
- .brz-ed .brz-ed-badge--pro{background-color:#d62c64}
5557
- .brz-ed .brz-ed-badge__delete{width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:12px;border-radius:28px;background-color:#fff;color:#03080f;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,.25);box-shadow:0 0 2px 0 rgba(0,0,0,.25);cursor:pointer;-webkit-transition:.2s linear opacity,.2s linear color;transition:.2s linear opacity,.2s linear color}
5558
- .brz-ed .brz-ed-badge__delete:hover{color:#ed2164;-webkit-transition:.2s linear color;transition:.2s linear color}
5559
- .brz-ed .brz--space-right{margin-right:5px}
5560
- .brz-ed .brz-icon-svg{display:inline-block;width:1em;height:1em;stroke:none;max-width:none;position:relative;fill:currentColor;color:currentColor}
5561
- .brz-ed .brz-icon-svg use{fill:inherit}
5562
- .brz-ed .brz-icon-svg.grid-16{height:16px;width:16px}
5563
- .brz-ed .brz-icon-svg.grid-24{height:24px;width:24px}
5564
- .brz-ed .brz-icon-svg.glyph{fill:currentColor;stroke:none}
5565
- .brz-ed .brz-icon-svg.outline{stroke:currentColor;fill:none}
5566
- .brz-ed .brz-icon-svg.outline.stroke-2{stroke-width:2px}
5567
- .brz-ed .brz-control__select{font-family:nunito,"Open Sans",Arial,sans-serif;position:relative;width:112px}
5568
- .brz-ed .brz-control__select .brz-ed-scroll-pane .brz-ed-tall-thumb{width:8px;background-color:transparent;border-radius:4px}
5569
- .brz-ed .brz-control__select .brz-ed-scroll-pane .brz-ed-tall-thumb:after{content:"";display:block;position:absolute;left:3px;top:0;bottom:0;width:3px;min-height:3px;background-color:#7b7b7b;border-radius:2px}
5570
- .brz-ed .brz-control__select .brz-ed-scroll-pane .brz-ed-wide-thumb{height:3px;background-color:#7b7b7b;border-radius:2px;top:3px}
5571
- .brz-ed .brz-control__select .brz-ed-scroll-pane .brz-ed-tall-track{border-radius:0 4px 4px 0}
5572
- .brz-ed .brz-control__select.opened .brz-control__select-options{visibility:visible;opacity:1}
5573
- .brz-ed .brz-control__select .brz-ed-scroll-pane-content{border-right:none!important}
5574
- .brz-ed .brz-control__select--top-left .brz-control__select-options,.brz-ed .brz-control__select--top-right .brz-control__select-options{bottom:100%;margin-bottom:3px}
5575
- .brz-ed .brz-control__select--bottom-left .brz-control__select-options,.brz-ed .brz-control__select--bottom-right .brz-control__select-options{margin-top:3px}
5576
- .brz-ed .brz-control__select--bottom-left .brz-control__select-options,.brz-ed .brz-control__select--top-left .brz-control__select-options{left:0}
5577
- .brz-ed .brz-control__select--bottom-right .brz-control__select-options,.brz-ed .brz-control__select--top-right .brz-control__select-options{right:0}
5578
- .brz-ed .brz-control__select--active .brz-control__select-current{color:#3dbfe8}
5579
- .brz-ed .brz-control__select__auto{width:auto}
5580
- .brz-ed .brz-control__select-current{line-height:30px;height:30px;border-radius:4px;overflow:hidden}
5581
- .brz-ed .brz-control__select-current .brz-control__select-option{border-bottom-color:transparent!important;padding-right:20px;text-overflow:ellipsis;overflow:hidden}
5582
- .brz-ed .brz-icon-svg.brz-control__select--arrow{position:absolute;top:50%;right:12px;margin-top:-.5em;font-size:8px}
5583
- .brz-ed .brz-control__select-current__icon{width:auto;height:auto;font-size:0;line-height:1;cursor:pointer}
5584
- .brz-ed .brz-control__select-current__icon .brz-icon-svg{font-size:14px}
5585
- .brz-ed .brz-control__select-options{position:absolute;z-index:12;min-width:100%;border-radius:4px;-webkit-box-shadow:0 2px 13px 0 rgba(0,0,0,.1);box-shadow:0 2px 13px 0 rgba(0,0,0,.1);overflow:hidden;visibility:hidden;opacity:0}
5586
- .brz-ed .brz-control__select-options .brz-control__select-option.active,.brz-ed .brz-control__select-options .brz-control__select-option:hover{-webkit-transition:color .15s linear;transition:color .15s linear;color:#3dbfe8}
5587
- .brz-ed .brz-control__select-optgroup-label,.brz-ed .brz-control__select-option{position:relative;cursor:pointer;padding-left:10px;padding-right:10px;font-size:13px;letter-spacing:.25px;border-bottom:1px solid rgba(255,255,255,.07);line-height:30px;height:30px;-webkit-transition:color .15s linear;transition:color .15s linear;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
5588
- .brz-ed .brz-control__select-optgroup-label:last-child,.brz-ed .brz-control__select-option:last-child{border-bottom-color:transparent!important}
5589
- .brz-ed .brz-control__select-optgroup-label--icon .brz-control__select-option .brz-icon-svg,.brz-ed .brz-control__select-option--icon .brz-control__select-option .brz-icon-svg{width:100%}
5590
- .brz-ed .brz-control__select-optgroup-label--icon--bottom .brz-control__select-option__bg,.brz-ed .brz-control__select-option--icon--bottom .brz-control__select-option__bg{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}
5591
- .brz-ed .brz-control__select-optgroup-label{cursor:auto}
5592
- .brz-ed .brz-control__select-optgroup .brz-control__select-option{padding-left:20px;border-bottom-color:rgba(255,255,255,.07)!important}
5593
- .brz-ed .brz-control__select-optgroup:last-child .brz-control__select-option:last-child{border-bottom-color:transparent!important}
5594
- .brz-ed .brz-control__select--dark .brz-control__select-current,.brz-ed .brz-control__select--dark .brz-control__select-options{background-color:#383e48}
5595
- .brz-ed .brz-control__select--dark .brz-control__select-current{color:rgba(255,255,255,.85)}
5596
- .brz-ed .brz-control__select--dark .brz-control__select-current:hover{background-color:#383e48}
5597
- .brz-ed .brz-control__select--dark.brz-control__select--active .brz-control__select-current{color:#3dbfe8}
5598
- .brz-ed .brz-control__select--dark .brz-control__select-option{color:rgba(255,255,255,.85)}
5599
- .brz-ed .brz-control__select--dark .brz-control__select-current__icon{background-color:transparent}
5600
- .brz-ed .brz-control__select--dark .brz-control__select-current__icon:hover{background-color:transparent}
5601
- .brz-ed .brz-control__select--dark .brz-control__select-optgroup-label{color:#828b92}
5602
- .brz-ed .brz-control__select--light .brz-control__select-current,.brz-ed .brz-control__select--light .brz-control__select-options{background-color:#f2f2f2}
5603
- .brz-ed .brz-control__select--light .brz-control__select-current__icon{background-color:transparent}
5604
- .brz-ed .brz-control__select--light .brz-control__select-current__icon:hover{background-color:transparent}
5605
- .brz-ed .brz-control__select--light .brz-control__select-current{color:#656b6f}
5606
- .brz-ed .brz-control__select--light .brz-control__select-current:hover{background-color:#f2f2f2}
5607
- .brz-ed .brz-control__select--light .brz-control__select-option{color:#656b6f;border-bottom-color:#e6e6e6}
5608
- .brz-ed .brz-control__select--white .brz-control__select-current,.brz-ed .brz-control__select--white .brz-control__select-options{background-color:#fff}
5609
- .brz-ed .brz-control__select--white .brz-control__select-options{-webkit-box-shadow:0 1px 10px 0 rgba(18,34,35,.1);box-shadow:0 1px 10px 0 rgba(18,34,35,.1)}
5610
- .brz-ed .brz-control__select--white .brz-control__select-current__icon{background-color:transparent}
5611
- .brz-ed .brz-control__select--white .brz-control__select-current__icon:hover{background-color:transparent}
5612
- .brz-ed .brz-control__select--white .brz-control__select-current{color:#383e48}
5613
- .brz-ed .brz-control__select--white .brz-control__select-current:hover{background-color:#fff}
5614
- .brz-ed .brz-control__select--white .brz-control__select-option{color:#383e48;border-bottom-color:rgba(71,76,84,.07)}
5615
- .brz-ed .brz-control__select--small .brz-control__select{width:62px}
5616
- .brz-ed .brz-control__select--medium .brz-control__select-current,.brz-ed .brz-control__select--medium .brz-control__select-option{line-height:37px;height:37px}
5617
- .brz-ed .brz-control__select--medium .brz-control__select-option{font-size:14px;padding-left:15px;padding-right:15px}
5618
- .brz-ed .brz-control__select--medium .brz-control__select--arrow{font-size:10px;right:14px}
5619
- .brz-ed .brz-control__select--full-width{width:100%}
5620
- .brz-ed .brz-ed-popup-control__select--light .brz-control__select-current,.brz-ed .brz-ed-popup-control__select--light .brz-control__select-options{background-color:#fff}
5621
- .brz-ed .brz-ed-popup-control__select--light .brz-control__select-current{color:#3dbfe8}
5622
- .brz-ed .brz-ed-popup-control__select--light .brz-control__select-current:hover{background-color:#fff}
5623
- .brz-ed .brz-ed-popup-control__select--light .brz-control__select-current .brz-control__select-option{color:#3dbfe8}
5624
- .brz-ed .brz-ed-popup-control__select--light .brz-control__select-option{color:#292e37}
5625
- .brz-ed .brz-ed-popup-control-select-light{-webkit-box-shadow:0 0 10px -2px rgba(0,0,0,.2);box-shadow:0 0 10px -2px rgba(0,0,0,.2);border-radius:4px}
5626
- .brz-ed .brz-ed-popup-control-select-light.opened .brz-control__select-current{border-bottom-left-radius:0;border-bottom-right-radius:0}
5627
- .brz-ed .brz-ed-popup-control-select-light.opened .brz-control__select-current .brz-control__select-option{border-bottom:1px solid #f4f4f4!important}
5628
- .brz-ed .brz-ed-popup-control-select-light.opened .brz-control__select-options{-webkit-box-shadow:0 5px 10px -2px rgba(0,0,0,.2);box-shadow:0 5px 10px -2px rgba(0,0,0,.2);border-radius:0 0 4px 4px}
5629
- .brz-ed .brz-ed-popup-control-select-light.brz-control__select{width:300px}
5630
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-current{background-color:#fff;height:40px;color:#3dbfe8;font-size:14px;font-family:nunito,"Open Sans",Arial,sans-serif;font-weight:400}
5631
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-current:after{border-style:solid;border-width:6px 4px 0;border-color:#3dbfe8 transparent}
5632
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-current .brz-control__select-option{border-bottom:0;color:#3dbfe8}
5633
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-current .brz-control__select-option:hover{background-color:#fff;color:#3dbfe8}
5634
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-options{background-color:#fff;top:100%;border-top-left-radius:0;border-top-right-radius:0}
5635
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-option{font-size:14px;height:40px;line-height:41px;font-family:nunito,"Open Sans",Arial,sans-serif;padding-left:15px;padding-right:15px;letter-spacing:.1px;color:rgba(41,46,55,.8);border-bottom:0}
5636
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-option:not(:first-child){border-top:1px solid #f4f4f4}
5637
- .brz-ed .brz-ed-popup-control-select-light .brz-control__select-option.active,.brz-ed .brz-ed-popup-control-select-light .brz-control__select-option:hover{background-color:#fbfbfb;color:#292e37}
5638
- .brz-ed .brz-ed-popup-control-select-light .brz-ed-scroll-pane .brz-ed-tall-thumb{width:5px;background-color:#d4d5d7;border-radius:2.5px}
5639
- .brz-ed .brz-ed-popup-control-select-light .brz-ed-scroll-pane .brz-ed-tall-thumb:after{opacity:0}
5640
- .brz-ed .brz-ed-popup-control-select-light .brz-ed-scroll-pane .brz-ed-tall-track{width:5px;right:4px}
5641
- .brz-ed .brz-control__select-population .brz-control__select-current{color:#fff;font-size:0;-webkit-transition:.2s linear color;transition:.2s linear color}
5642
- .brz-ed .brz-control__select-population .brz-control__select-current:hover{color:#3dbfe8!important;-webkit-transition:.2s linear color;transition:.2s linear color}
5643
- .brz-ed .brz-control__select-population.brz-control__select--active .brz-control__select-current{color:#fff}
5644
- .brz-ed .brz-control__select-population.opened .brz-control__select-current{color:#3dbfe8}
5645
- .brz-ed .brz-control__select-population .brz-control__select-options{width:120px}
5646
- .brz-ed .brz-control__portal-select{position:static}
5647
- .brz-ed .brz-control__portal-select .brz-control__select-options{z-index:1110;opacity:1;visibility:visible;min-width:auto}
5648
- .brz-ed .brz-ed-control__switch-label{position:relative;display:inline-block;vertical-align:middle;width:50px;height:28px;border-radius:18px;cursor:pointer;margin:0;line-height:1}
5649
- .brz-ed .brz-ed-control__switch-arrows{position:relative;display:block;height:inherit;font-size:18px;text-transform:uppercase;background:#383e48;border-radius:inherit;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.38) inset;box-shadow:0 1px 1px 0 rgba(0,0,0,.38) inset}
5650
- .brz-ed .brz-ed-control__switch--check,.brz-ed .brz-ed-control__switch--un-check{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin:0;-webkit-transition:inherit;transition:inherit;color:rgba(18,20,25,.7)}
5651
- .brz-ed .brz-ed-control__switch--check{left:5px;opacity:0}
5652
- .brz-ed .brz-ed-control__switch--un-check{right:5px}
5653
- .brz-ed .brz-ed-control__switch--handle{width:20px;height:20px;position:absolute;top:50%;left:4px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#fff;border-radius:50%;-webkit-box-shadow:0 0 10px 1px rgba(255,255,255,.35);box-shadow:0 0 10px 1px rgba(255,255,255,.35);-webkit-transition:left .15s ease-out;transition:left .15s ease-out}
5654
- .brz-ed .brz-ed-control__switch--handle:after,.brz-ed .brz-ed-control__switch--handle:before{content:"";position:absolute;width:7px;border-top:1px solid #34beea;top:7px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}
5655
- .brz-ed .brz-ed-control__switch--handle:before{top:10px}
5656
- .brz-ed .brz-ed-control__switch--handle:after{height:7px;border-bottom:1px solid #34beea}
5657
- .brz-ed .brz-ed-control__switch-input{position:absolute;top:0;left:0;opacity:0}
5658
- .brz-ed .brz-ed-control__switch-input:checked~.brz-ed-control__switch-arrows{background:#3dbfe8}
5659
- .brz-ed .brz-ed-control__switch-input:checked~.brz-ed-control__switch-arrows .brz-ed-control__switch--check{opacity:1}
5660
- .brz-ed .brz-ed-control__switch-input:checked~.brz-ed-control__switch-arrows .brz-ed-control__switch--un-check{opacity:0}
5661
- .brz-ed .brz-ed-control__switch-input:checked~.brz-ed-control__switch--handle{left:25px}
5662
- .brz-ed .brz-ed-control__switch--light .brz-ed-control__switch-arrows{background:#c7c9cd}
5663
- .brz-ed .brz-ed-control__switch--light .brz-ed-control__switch--handle:after{border-top-color:#bfbfbf;border-bottom-color:#bfbfbf}
5664
- .brz-ed .brz-ed-control__switch--light .brz-ed-control__switch--handle:before{border-top-color:#bfbfbf}
5665
- .brz-ed .brz-ed-control__switch2-label{position:relative;display:inline-block;vertical-align:middle;width:50px;height:28px;border-radius:18px;cursor:pointer;margin:0;line-height:1}
5666
- .brz-ed .brz-ed-control__switch2-arrows{position:relative;display:block;height:inherit;font-size:18px;text-transform:uppercase;background:#383e48;border-radius:inherit;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.38) inset;box-shadow:0 1px 1px 0 rgba(0,0,0,.38) inset}
5667
- .brz-ed .brz-ed-control__switch2--check,.brz-ed .brz-ed-control__switch2--un-check{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin:0;-webkit-transition:inherit;transition:inherit;color:rgba(18,20,25,.7)}
5668
- .brz-ed .brz-ed-control__switch2--check{left:5px;opacity:0}
5669
- .brz-ed .brz-ed-control__switch2--un-check{right:5px}
5670
- .brz-ed .brz-ed-control__switch2--handle{width:20px;height:20px;position:absolute;top:50%;left:4px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#fff;border-radius:50%;-webkit-box-shadow:0 0 10px 1px rgba(255,255,255,.35);box-shadow:0 0 10px 1px rgba(255,255,255,.35);-webkit-transition:left .15s ease-out;transition:left .15s ease-out}
5671
- .brz-ed .brz-ed-control__switch2--handle:after,.brz-ed .brz-ed-control__switch2--handle:before{content:"";position:absolute;width:7px;border-top:1px solid #34beea;top:7px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}
5672
- .brz-ed .brz-ed-control__switch2--handle:before{top:10px}
5673
- .brz-ed .brz-ed-control__switch2--handle:after{height:7px;border-bottom:1px solid #34beea}
5674
- .brz-ed .brz-ed-control__switch2--on .brz-ed-control__switch2-arrows{background:#3dbfe8}
5675
- .brz-ed .brz-ed-control__switch2--on .brz-ed-control__switch2-arrows .brz-ed-control__switch2--check{opacity:1}
5676
- .brz-ed .brz-ed-control__switch2--on .brz-ed-control__switch2-arrows .brz-ed-control__switch2--un-check{opacity:0}
5677
- .brz-ed .brz-ed-control__switch2--on .brz-ed-control__switch2-arrows .brz-ed-control__switch2--handle{left:25px}
5678
- .brz-ed .brz-ed-control__switch2--light .brz-ed-control__switch2-arrows{background:#c7c9cd}
5679
- .brz-ed .brz-ed-control__switch2--light .brz-ed-control__switch2--handle:after{border-top-color:#bfbfbf;border-bottom-color:#bfbfbf}
5680
- .brz-ed .brz-ed-control__switch2--light .brz-ed-control__switch2--handle:before{border-top-color:#bfbfbf}
5681
- .brz-ed .brz-ed-control__slider .brz-ed-control__slider--value{position:relative;cursor:pointer}
5682
- .brz-ed .brz-ed-control__slider .ui-slider-vertical{width:4px;height:63px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border:none;cursor:pointer}
5683
- .brz-ed .brz-ed-control__slider .ui-slider-vertical:after,.brz-ed .brz-ed-control__slider .ui-slider-vertical:before{content:"";position:absolute;left:0;display:block;width:4px;height:8px}
5684
- .brz-ed .brz-ed-control__slider .ui-slider-vertical:before{bottom:-8px}
5685
- .brz-ed .brz-ed-control__slider .ui-slider-vertical:after{top:-8px}
5686
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal{display:block;width:calc(100% - 18px);height:4px;background-color:#3dbfe8;border-radius:4px;max-width:100%;padding:0;top:0;left:9px}
5687
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal:after,.brz-ed .brz-ed-control__slider .ui-slider-horizontal:before{content:"";position:absolute;top:0;width:13px;height:4px;border-radius:4px;background-color:#3dbfe8}
5688
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal:before{left:-9px}
5689
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal:after{right:-9px}
5690
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal .ui-slider-handle{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-left:-9px}
5691
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal .ui-slider-handle:after,.brz-ed .brz-ed-control__slider .ui-slider-horizontal .ui-slider-handle:before{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}
5692
- .brz-ed .brz-ed-control__slider .ui-slider-horizontal .ui-slider-handle:after{top:6px}
5693
- .brz-ed .brz-ed-control__slider .ui-slider-handle{position:absolute;display:block;outline:0;width:18px;height:18px;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin-bottom:-9px;cursor:pointer;background:#fff;border-radius:50%!important;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.45);box-shadow:0 2px 2px rgba(0,0,0,.45);z-index:1}
5694
- .brz-ed .brz-ed-control__slider .ui-slider-handle:after,.brz-ed .brz-ed-control__slider .ui-slider-handle:before{content:"";position:absolute;width:7px;border-top:1px solid #3dbfe8;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
5695
- .brz-ed .brz-ed-control__slider .ui-slider-handle:after{height:7px;border-bottom:1px solid #3dbfe8}
5696
- .brz-ed .brz-ed-control__slider .ui-state-default,.brz-ed .brz-ed-control__slider .ui-widget-content{border:0}
5697
- .brz-ed .brz-ed-option__slider--brightness .brz-icon-svg,.brz-ed .brz-ed-option__slider--contrast .brz-icon-svg,.brz-ed .brz-ed-option__slider--hue .brz-icon-svg,.brz-ed .brz-ed-option__slider--saturation .brz-icon-svg{color:#fff}
5698
- .brz-ed .brz-ed-option__slider--hue .rc-slider-rail{background-image:-webkit-gradient(linear,right top,left top,color-stop(0,#e1451d),color-stop(17%,#fdff47),color-stop(50%,#86f9fe),color-stop(65%,#2900f8),color-stop(74%,#6e00f8),color-stop(83%,#e33df9),to(#e14423));background-image:linear-gradient(to left,#e1451d 0,#fdff47 17%,#86f9fe 50%,#2900f8 65%,#6e00f8 74%,#e33df9 83%,#e14423 100%)}
5699
- .brz-ed .brz-ed-option__slider--saturation .rc-slider-rail{background-image:-webkit-gradient(linear,left top,right top,color-stop(30%,#40444d),to(#0fe6a2));background-image:linear-gradient(to right,#40444d 30%,#0fe6a2 100%)}
5700
- .brz-ed .brz-ed-option__slider--brightness .rc-slider-rail{background-image:-webkit-gradient(linear,left top,right top,from(#40444d),to(#f8f9fc));background-image:linear-gradient(to right,#40444d 0,#f8f9fc 100%)}
5701
- .brz-ed .brz-ed-option__slider--contrast .rc-slider-rail{background-color:#454a50}
5702
- .brz-ed .rc-slider{position:relative;height:14px;padding:5px 0;width:calc(100% - 18px);margin-left:9px;border-radius:4px;-ms-touch-action:none;touch-action:none;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
5703
- .brz-ed .rc-slider *{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
5704
- .brz-ed .rc-slider-rail{position:relative;display:block;width:calc(100% + 18px);height:4px;background-color:#3dbfe8;border-radius:4px;left:-9px}
5705
- .brz-ed .rc-slider-track{display:none}
5706
- .brz-ed .rc-slider-handle{position:absolute;display:inline-block;outline:0;width:18px;height:18px;top:50%;left:50%;margin-top:-9px;margin-left:-9px;cursor:pointer;background:#fff;border-radius:50%;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.45);box-shadow:0 2px 2px rgba(0,0,0,.45);z-index:1}
5707
- .brz-ed .rc-slider-handle:after,.brz-ed .rc-slider-handle:before{content:"";position:absolute;width:7px;border-top:1px solid #3dbfe8;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}
5708
- .brz-ed .rc-slider-handle:before{top:6px}
5709
- .brz-ed .rc-slider-handle:after{height:4px;border-bottom:1px solid #3dbfe8;top:9px}
5710
- .brz-ed .rc-slider-handle:hover{border-color:#57c5f7}
5711
- .brz-ed .rc-slider-handle:active{border-color:#57c5f7;-webkit-box-shadow:0 0 5px #57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}
5712
- .brz-ed .rc-slider-handle:focus{border-color:#57c5f7;-webkit-box-shadow:0 0 0 5px #96dbfa;box-shadow:0 0 0 5px #96dbfa;outline:0}
5713
- .brz-ed .rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}
5714
- .brz-ed .rc-slider-mark-text{position:absolute;display:inline-block;vertical-align:middle;text-align:center;cursor:pointer;color:#999}
5715
- .brz-ed .rc-slider-mark-text-active{color:#666}
5716
- .brz-ed .rc-slider-step{position:absolute;width:100%;height:4px;background:0 0}
5717
- .brz-ed .rc-slider-dot{position:absolute;bottom:-2px;margin-left:-4px;width:8px;height:8px;border:2px solid #e9e9e9;background-color:#fff;cursor:pointer;border-radius:50%;vertical-align:middle}
5718
- .brz-ed .rc-slider-dot-active{border-color:#96dbfa}
5719
- .brz-ed .rc-slider-disabled{background-color:#e9e9e9}
5720
- .brz-ed .rc-slider-disabled .rc-slider-track{background-color:#ccc}
5721
- .brz-ed .rc-slider-disabled .rc-slider-dot,.brz-ed .rc-slider-disabled .rc-slider-handle{border-color:#ccc;-webkit-box-shadow:none;box-shadow:none;background-color:#fff;cursor:not-allowed}
5722
- .brz-ed .rc-slider-disabled .rc-slider-dot,.brz-ed .rc-slider-disabled .rc-slider-mark-text{cursor:not-allowed!important}
5723
- .brz-ed .rc-slider-vertical{width:14px;height:100px;padding:0 5px}
5724
- .brz-ed .rc-slider-vertical .rc-slider-rail{height:100%;width:4px}
5725
- .brz-ed .rc-slider-vertical .rc-slider-track{left:5px;bottom:0;width:4px}
5726
- .brz-ed .rc-slider-vertical .rc-slider-handle{margin-left:-5px;margin-bottom:-7px;-ms-touch-action:pan-y;touch-action:pan-y}
5727
- .brz-ed .rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}
5728
- .brz-ed .rc-slider-vertical .rc-slider-step{height:100%;width:4px}
5729
- .brz-ed .rc-slider-vertical .rc-slider-dot{left:2px;margin-bottom:-4px}
5730
- .brz-ed .rc-slider-vertical .rc-slider-dot:first-child{margin-bottom:-4px}
5731
- .brz-ed .rc-slider-vertical .rc-slider-dot:last-child{margin-bottom:-4px}
5732
- .brz-ed .rc-slider-tooltip-zoom-down-appear,.brz-ed .rc-slider-tooltip-zoom-down-enter{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;display:block!important;-webkit-animation-play-state:paused;animation-play-state:paused}
5733
- .brz-ed .rc-slider-tooltip-zoom-down-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;display:block!important;-webkit-animation-play-state:paused;animation-play-state:paused}
5734
- .brz-ed .rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active,.brz-ed .rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active{-webkit-animation-name:brz-rcSliderTooltipZoomDownIn;animation-name:brz-rcSliderTooltipZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}
5735
- .brz-ed .rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{-webkit-animation-name:brz-rcSliderTooltipZoomDownOut;animation-name:brz-rcSliderTooltipZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running}
5736
- .brz-ed .rc-slider-tooltip-zoom-down-appear,.brz-ed .rc-slider-tooltip-zoom-down-enter{-webkit-transform:scale(0,0);transform:scale(0,0);-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}
5737
- .brz-ed .rc-slider-tooltip-zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}
5738
- .brz-ed .rc-slider-tooltip{position:absolute;left:-9999px;top:-9999px;visibility:visible;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
5739
- .brz-ed .rc-slider-tooltip *{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
5740
- .brz-ed .rc-slider-tooltip-hidden{display:none}
5741
- .brz-ed .rc-slider-tooltip-placement-top{padding:4px 0 8px}
5742
- .brz-ed .rc-slider-tooltip-inner{padding:6px 2px;min-width:24px;height:24px;font-size:12px;line-height:1;color:#fff;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;-webkit-box-shadow:0 0 4px #d9d9d9;box-shadow:0 0 4px #d9d9d9}
5743
- .brz-ed .rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}
5744
- .brz-ed .rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c}
5745
- .brz-ed input.brz-ed-control--slider2{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;border:none;background:0 0;outline:0;width:100%}
5746
- .brz-ed input.brz-ed-control--slider2::-moz-range-track{height:4px;background-color:#3dbfe8;border-radius:4px;display:flex;align-items:center}
5747
- .brz-ed input.brz-ed-control--slider2::-webkit-slider-runnable-track{height:4px;background-color:#3dbfe8;border-radius:4px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}
5748
- .brz-ed input.brz-ed-control--slider2::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;border:none;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.45);box-shadow:0 2px 2px rgba(0,0,0,.45);background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='7' width='7'%3E%3Cline x1='0' y1='0' x2='7' y2='0' style='stroke:%233dbfe8;stroke-width:1' shape-rendering='crispEdges' /%3E%3Cline x1='0' y1='50%25' x2='7' y2='50%25' style='stroke:%233dbfe8;stroke-width:1' shape-rendering='crispEdges' /%3E%3Cline x1='0' y1='99%25' x2='7' y2='99%25' style='stroke:%233dbfe8;stroke-width:1' shape-rendering='crispEdges' /%3E%3C/svg%3E");background-size:7px;background-repeat:no-repeat;background-position:center}
5749
- .brz-ed input.brz-ed-control--slider2::-moz-range-thumb{-moz-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;border:none;box-shadow:0 2px 2px rgba(0,0,0,.45);background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='7' width='7'%3E%3Cline x1='0' y1='0' x2='7' y2='0' style='stroke:%233dbfe8;stroke-width:1' shape-rendering='crispEdges' /%3E%3Cline x1='0' y1='50%25' x2='7' y2='50%25' style='stroke:%233dbfe8;stroke-width:1' shape-rendering='crispEdges' /%3E%3Cline x1='0' y1='99%25' x2='7' y2='99%25' style='stroke:%233dbfe8;stroke-width:1' shape-rendering='crispEdges' /%3E%3C/svg%3E");background-size:7px;background-repeat:no-repeat;background-position:center}
5750
- .brz-ed .brz-ed__control--number-slider{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}
5751
- .brz-ed .brz-ed__control--number-slider .brz-ed__control--number-unit{margin-left:15px;-webkit-box-flex:0;-ms-flex:none;flex:none;width:45px}
5752
- .brz-ed .brz-ed-control__stepper{position:relative;width:62px;height:30px;border-radius:4px;overflow:hidden;background:#383e48;color:rgba(255,255,255,.85);text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
5753
- .brz-ed .brz-ed-control__stepper--arrows,.brz-ed .brz-ed-control__stepper--value{position:relative;min-width:0}
5754
- .brz-ed .brz-ed-control__stepper--value{font-family:nunito,"Open Sans",Arial,sans-serif;font-size:13px;letter-spacing:.25px;line-height:1;width:65%;-ms-flex-preferred-size:65%;flex-basis:65%;padding-top:2px;max-width:100%}
5755
- .brz-ed .brz-ed-control__stepper--value .brz-ed-control__input,.brz-ed .brz-ed-control__stepper--value .brz-ed-option__input__population{max-width:100%;padding:0 0 0 5px;margin:0;width:100%;text-align:center;text-indent:0}
5756
- .brz-ed .brz-ed-control__stepper--arrows{width:35%;-ms-flex-preferred-size:35%;flex-basis:35%;height:30px}
5757
- .brz-ed .brz-ed-control__stepper--down,.brz-ed .brz-ed-control__stepper--up{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:15px;line-height:15px;font-size:8px;position:absolute;right:0;cursor:pointer;color:rgba(255,255,255,.85);-webkit-transition:color .2s linear;transition:color .2s linear}
5758
- .brz-ed .brz-ed-control__stepper--down .brz-icon-svg,.brz-ed .brz-ed-control__stepper--up .brz-icon-svg{position:absolute;right:10px;top:auto}
5759
- .brz-ed .brz-ed-control__stepper--down:hover,.brz-ed .brz-ed-control__stepper--up:hover{color:#3dbfe8}
5760
- .brz-ed .brz-ed-control__stepper--up{top:0}
5761
- .brz-ed .brz-ed-control__stepper--up .brz-icon-svg{bottom:1px}
5762
- .brz-ed .brz-ed-control__stepper--down{bottom:0}
5763
- .brz-ed .brz-ed-control__stepper--down .brz-icon-svg{top:1px}
5764
- .brz-ed .brz-ed-control-radio-option{color:#626b70;-webkit-transition:.2s linear color;transition:.2s linear color}
5765
- .brz-ed .brz-ed-control-radio-option--active{color:#3dbfe8;-webkit-transition:.2s linear color;transition:.2s linear color}
5766
- .brz-ed .brz-ed-control-radio-option:hover{color:#3dbfe8;-webkit-transition:.2s linear color;transition:.2s linear color}
5767
- .brz-ed .brz-ed-control__tabs .brz-ed-control__tab{margin:0}
5768
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left){display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:17px;padding-right:17px;border-bottom:1px solid rgba(255,255,255,.1);color:#828b92;font-family:nunito,"Open Sans",Arial,sans-serif;font-size:13px;float:none}
5769
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab{cursor:pointer;-webkit-transition:color .2s linear;transition:color .2s linear;border-bottom:2px solid transparent;height:34px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 0 -1px;padding-top:2px;width:auto}
5770
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab.active,.brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab:hover{color:#3dbfe8;-webkit-transition:color .2s linear;transition:color .2s linear}
5771
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab.active{border-bottom-color:#3dbfe8}
5772
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab:not(:last-child){margin-right:15px}
5773
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab__icon{height:42px}
5774
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab__icon .brz-icon-svg{font-size:16px;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}
5775
- .brz-ed .brz-ed-control__tabs:not(.brz-ed-control__tabs__left) .brz-ed-control__tab__icon .brz-icon-svg+.brz-span:not(:empty){margin-left:10px}
5776
- .brz-ed .brz-ed-control__tabs__left{position:absolute;z-index:0;left:-38px;top:34px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}
5777
- .brz-ed .brz-ed-control__tabs__left .brz-ed-control__tab{width:30px;height:35px;background-color:rgba(139,147,154,.92);-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5);border-top-left-radius:7px;border-bottom-left-radius:7px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:11px;color:#fff;font-size:13px;cursor:pointer;margin:0 0 1px;position:relative;left:8px}
5778
- .brz-ed .brz-ed-control__tabs__left .brz-ed-control__tab.active{color:#3dbfe8;background-color:rgba(3,8,15,.92)}
5779
- .brz-ed .brz-ed-control__tabs__editor.brz-ed-control__tabs__editor{width:144px;margin-left:10px;margin-right:10px;padding:0}
5780
- .brz-ed .brz-ed-control__tabs__editor.brz-ed-control__tabs__editor+.brz-ed-control__tab__content{margin-bottom:-9px}
5781
- .brz-ed .brz-ed-input__search{position:absolute;border:none;background:0 0;color:rgba(255,255,255,.6);outline:0;font-size:13px;text-indent:10px;padding:0 35px 0 0;width:100%}
5782
- .brz-ed .brz-ed-input__search:active,.brz-ed .brz-ed-input__search:focus{background:0 0;color:rgba(255,255,255,.6)}
5783
- .brz-ed .brz-ed-input__search::-webkit-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em;letter-spacing:.25px}
5784
- .brz-ed .brz-ed-input__search--auto-complete{color:#fff}
5785
- .brz-ed .brz-ed-input__search__icon{position:absolute;right:10px;top:50%;color:#818487;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:color .2s ease-in;transition:color .2s ease-in;cursor:pointer;font-size:16px;height:16px;line-height:1}
5786
- .brz-ed .brz-ed-input__search__icon.active{color:#3dbfe8}
5787
- .brz-ed .brz-ed-control__number-unit{margin-left:15px;-webkit-box-flex:0;-ms-flex:none;flex:none;width:45px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
5788
- .brz-ed .brz-ed-control__number-unit__input{position:relative;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;min-width:35%}
5789
- .brz-ed .brz-ed-control__number-unit__input .brz-invisible{line-height:1.4em;padding-right:5px}
5790
- .brz-ed .brz-ed-control__number-unit__input input{background-color:transparent;color:#828b92;font-size:13px;font-weight:400;border:none;outline:0;padding:2px 0;line-height:1;-moz-appearance:textfield;top:0;left:0;-webkit-transition:.2s linear color;transition:.2s linear color;border-bottom:1px solid rgba(255,255,255,.1);position:absolute;width:100%}
5791
- .brz-ed .brz-ed-control__number-unit__input input:active,.brz-ed .brz-ed-control__number-unit__input input:focus{background-color:transparent;color:#fff;-webkit-transition:.2s linear color;transition:.2s linear color;-webkit-box-shadow:none;box-shadow:none;border-color:transparent;outline:0}
5792
- .brz-ed .brz-ed-control__number-unit__input input::-webkit-inner-spin-button,.brz-ed .brz-ed-control__number-unit__input input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
5793
- .brz-ed .brz-ed-control__number-unit__unit{-webkit-box-flex:0;-ms-flex:none;flex:none;margin-left:5px;color:#828b92}
5794
- .brz-ed .brz-ed-control__number-unit__unit--active{color:#3dbfe8}
5795
- .brz-ed .brz-ed-control-multiPicker--body{margin-top:20px}
5796
- .brz-ed .brz-ed-sidebar-row .brz-ed-options--multi-picker{display:block}
5797
- .brz-ed .brz-ed-control__select-single .brz-ed-control__multiSelect--value-container{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0 10px;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer}
5798
- .brz-ed .brz-ed-control__select-single .brz-ed-control__multiSelect--value-container input{padding:0}
5799
- .brz-ed .brz-ed-control__select-single .brz-ed-control__multiSelect--tag{-webkit-box-shadow:none;box-shadow:none;background:0 0;margin:0 10px 0 0;padding:0}
5800
- .brz-ed .brz-ed-control__select-single .brz-ed-control__multiSelect--tag>.brz-icon-svg{display:none}
5801
- .brz-ed .brz-ed-control__multiSelect{font-family:nunito,"Open Sans",Arial,sans-serif}
5802
- .brz-ed .brz-ed-control__multiSelect--size-short{width:62px}
5803
- .brz-ed .brz-ed-control__multiSelect--size-medium{width:112px}
5804
- .brz-ed .brz-ed-control__multiSelect--size-large{width:136px}
5805
- .brz-ed .brz-ed-control__multiSelect--size-full{width:100%}
5806
- .brz-ed .brz-ed-control__multiSelect--value-container{border-radius:4px;font-size:13px;letter-spacing:.25px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start;background-color:#383e48;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:2px;min-height:30px;position:relative;color:#fff}
5807
- .brz-ed .brz-ed-control__multiSelect--value-container input{color:#fff}
5808
- .brz-ed .brz-ed-control__multiSelect--value-container .brz-control__select--arrow{position:static;-webkit-box-flex:0;-ms-flex:none;flex:none;top:unset;margin:0}
5809
- .brz-ed .brz-ed-control__multiSelect--value{font:inherit;letter-spacing:inherit;outline:0;border:none;background:0 0;padding-left:10px;padding-right:10px;height:26px;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}
5810
- .brz-ed .brz-ed-control__multiSelect--tag{border-radius:4px;font-size:13px;letter-spacing:.25px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:20px;padding:5px;line-height:1;color:#fff;margin:2px;background-color:#49515f;-webkit-box-shadow:1px 1px 0 rgba(0,0,0,.04);box-shadow:1px 1px 0 rgba(0,0,0,.04);overflow:hidden;text-overflow:ellipsis}
5811
- .brz-ed .brz-ed-control__multiSelect--tag--value{text-overflow:ellipsis;white-space:nowrap;max-width:100%;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
5812
- .brz-ed .brz-ed-control__multiSelect--tag>.brz-icon-svg{cursor:pointer;font-size:10px;margin-left:4px;-webkit-transition:.2s color linear;transition:.2s color linear;-webkit-box-flex:0;-ms-flex:none;flex:none}
5813
- .brz-ed .brz-ed-control__multiSelect--tag .brz-icon-svg:hover{color:#3dbfe8;-webkit-transition:.2s color linear;transition:.2s color linear}
5814
- .brz-ed .brz-ed-control__multiSelect__menu-container{position:relative}
5815
- .brz-ed .brz-ed-control__multiSelect__menu{font-family:nunito,"Open Sans",Arial,sans-serif;z-index:1110;-webkit-box-shadow:0 1px 10px 0 rgba(18,34,35,.1);box-shadow:0 1px 10px 0 rgba(18,34,35,.1);margin-top:3px;border-radius:4px;background:#383e48;min-width:100%;-webkit-transform:none!important;transform:none!important}
5816
- .brz-ed .brz-ed-control__multiSelect__option{cursor:pointer;padding-left:10px;padding-right:10px;font-size:13px;letter-spacing:.25px;line-height:30px;height:30px;-webkit-transition:color .15s linear;transition:color .15s linear;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-bottom:1px solid rgba(255,255,255,.07);color:rgba(255,255,255,.85);margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
5817
- .brz-ed .brz-ed-control__multiSelect__option:last-child{border-bottom-color:transparent}
5818
- .brz-ed .brz-ed-control__multiSelect__option--active,.brz-ed .brz-ed-control__multiSelect__option:hover{-webkit-transition:color .15s linear;transition:color .15s linear;color:#3dbfe8}
5819
- .brz-ed .brz-ed-control__multiSelect__scroll-thumb{width:3px!important;background-color:#7b7b7b;border-radius:2px;right:-3px}
5820
- .brz-ed .brz-ed-control__radio-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}
5821
- .brz-ed .brz-ed-control__radio-group--active{color:#3dbfe8}
5822
- .brz-ed .brz-ed-tooltip__content{position:relative;z-index:1}
5823
- .brz-ed .brz-ed-tooltip__overlay{position:absolute;top:0;left:0;z-index:1100}
5824
- .brz-ed .brz-ed-tooltip--auto{width:auto}
5825
- .brz-ed .brz-ed-tooltip--small{width:171px}
5826
- .brz-ed .brz-ed-tooltip--medium{width:255px}
5827
- .brz-ed .brz-ed-tooltip--big{width:305px}
5828
- .brz-ed .brz-ed-popover__inner.brz-ed-tooltip--large,.brz-ed .brz-ed-tooltip--large{width:385px}
5829
- .brz-ed .brz-ed-tooltip__static{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}
5830
- .brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--top-center{top:auto;bottom:calc(100% + 9px);left:auto}
5831
- .brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--bottom-center{top:calc(100% + 9px);left:auto}
5832
- .brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--bottom-right,.brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--top-right{left:auto;right:-15px}
5833
- .brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--bottom-left,.brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--top-left{left:-15px}
5834
- .brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--top-left,.brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--top-right{top:auto;bottom:calc(100% + 9px)}
5835
- .brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--bottom-left,.brz-ed .brz-ed-tooltip__static .brz-ed-tooltip--bottom-right{top:calc(100% + 9px)}
5836
- .brz-ed .brz-ed-tooltip--delay-1{-webkit-animation-delay:.6s;animation-delay:.6s}
5837
- .brz-ed .brz-ed-tooltip--delay-2{-webkit-animation-delay:1s;animation-delay:1s}
5838
- .brz-ed .brz-ed-tooltip-content__pro{font-family:nunito,"Open Sans",Arial,sans-serif;font-weight:600;color:rgba(255,255,255,.8);padding:18px 18px 18px 22px;font-size:13px;line-height:18px;text-align:left}
5839
- .brz-ed .brz-ed-tooltip-content__pro-title{margin-bottom:17px}
5840
- .brz-ed .brz-ed-tooltip-content__pro-body .brz-icon-svg{font-size:10px;margin-right:8px}
5841
- .brz-ed .brz-ed-tooltip-content__pro .brz-p{font-size:inherit;font-weight:600}
5842
- .brz-ed .brz-ed-control__focal-point{position:relative;text-align:center}
5843
- .brz-ed .brz-ed-control__focal-point:after{display:inline-block;height:100%;vertical-align:middle;content:""}
5844
- .brz-ed .brz-ed-control__focal-point__setter{text-align:center;display:inline-block;vertical-align:middle;position:relative;width:100%}
5845
- .brz-ed .brz-ed-control__focal-point__setter:before{content:"";position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.3)}
5846
- .brz-ed .brz-ed-control__focal-point__setter .brz-img{max-width:140px;max-height:140px;height:100%}
5847
- .brz-ed .brz-ed-control__focal-point__point{position:absolute;z-index:10;width:18px;height:18px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#2eb0d8;border:2px solid #fff;border-radius:18px;cursor:pointer}
5848
- .brz-ed .brz-ed-control__focal-point__upload{width:140px;height:93px;border:1px dashed #444952;background-color:#2d323b;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;font-size:24px;color:rgba(94,100,111,.6);-webkit-transition:all .2s linear;transition:all .2s linear}
5849
- .brz-ed .brz-ed-control__focal-point__upload:hover{border-color:#5e6470;color:#5e646f}
5850
- .brz-ed .brz-ed-control__focal-point__upload .brz-icon-svg{font-size:inherit!important}
5851
- .brz-ed .brz-ed-control__focal-point__upload--loading{cursor:progress}
5852
- .brz-ed .brz-ed-control__focal-point__delete{position:absolute;right:-4px;top:-4px;z-index:11;font-size:16px;width:16px;height:16px;background-color:#2d323b;border-radius:50%;color:#fff;cursor:pointer}
5853
- .brz-ed .brz-ed-control__focal-point__delete .brz-icon-svg{font-size:inherit!important}
5854
- .brz-ed .brz-ed-control__focal-point__label--disable .brz-ed-control__focal-point__upload{cursor:no-drop}
5855
- .brz-ed .brz-ed-control__icon-setter{position:relative}
5856
- .brz-ed .brz-ed-control__icon-setter__box{width:48px;height:48px;border:1px dashed #444952;background-color:#2d323b;font-size:16px;color:rgba(94,100,111,.6);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;-webkit-transition:all .2s linear;transition:all .2s linear}
5857
- .brz-ed .brz-ed-control__icon-setter__box:hover{border-color:#5e6470;color:#5e646f}
5858
- .brz-ed .brz-ed-control__icon-setter--active{color:#fff;display:inline-block;font-size:0}
5859
- .brz-ed .brz-ed-control__input,.brz-ed .brz-ed-option__input__population{font-family:nunito,"Open Sans",Arial,sans-serif;font-size:13px;font-style:normal;font-weight:400;letter-spacing:0;background:#383e48 none;color:#fff;width:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:30px;text-indent:5px;padding:0 5px;border-radius:4px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none;text-align:left;margin-left:auto;-moz-appearance:textfield}
5860
- .brz-ed .brz-ed-control__input:active,.brz-ed .brz-ed-control__input:focus,.brz-ed .brz-ed-option__input__population:active,.brz-ed .brz-ed-option__input__population:focus{background-color:#383e48;color:#fff;outline:0}
5861
- .brz-ed .brz-ed-control__input::-webkit-inner-spin-button,.brz-ed .brz-ed-control__input::-webkit-outer-spin-button,.brz-ed .brz-ed-option__input__population::-webkit-inner-spin-button,.brz-ed .brz-ed-option__input__population::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
5862
- .brz-ed .brz-ed-control__input::-webkit-input-placeholder,.brz-ed .brz-ed-option__input__population::-webkit-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5863
- .brz-ed .brz-ed-control__input:-moz-placeholder,.brz-ed .brz-ed-option__input__population:-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5864
- .brz-ed .brz-ed-control__input::-moz-placeholder,.brz-ed .brz-ed-option__input__population::-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5865
- .brz-ed .brz-ed-control__input:-ms-input-placeholder,.brz-ed .brz-ed-option__input__population:-ms-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5866
- .brz-ed .brz-ed-control__input--large{max-width:136px}
5867
- .brz-ed .brz-ed-control__input--medium{max-width:112px}
5868
- .brz-ed .brz-ed-control__input--small{max-width:62px}
5869
- .brz-ed .brz-ed-control__input--auto{max-width:100%}
5870
- .brz-ed .brz-ed-control__input2 input{font-family:nunito,"Open Sans",Arial,sans-serif;font-size:13px;font-style:normal;font-weight:400;letter-spacing:0;background:#383e48 none;color:#fff;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;height:30px;text-indent:5px;padding:0 5px;border-radius:4px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none;text-align:left;margin-left:auto;width:100%}
5871
- .brz-ed .brz-ed-control__input2 input:active,.brz-ed .brz-ed-control__input2 input:focus{background-color:#383e48;color:#fff}
5872
- .brz-ed .brz-ed-control__input2 input::-webkit-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5873
- .brz-ed .brz-ed-control__input2 input:-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5874
- .brz-ed .brz-ed-control__input2 input::-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5875
- .brz-ed .brz-ed-control__input2 input:-ms-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5876
- .brz-ed .brz-ed-control__input2--large input{max-width:136px}
5877
- .brz-ed .brz-ed-control__input2--medium input{max-width:112px}
5878
- .brz-ed .brz-ed-control__input2--short input{max-width:62px}
5879
- .brz-ed .brz-ed-control__textarea{font-family:nunito,"Open Sans",Arial,sans-serif;font-size:13px;letter-spacing:.25px;line-height:22px;background-color:#383e48;color:#fff;width:auto;height:auto;padding:5px 10px;border-radius:4px;border:0;outline:0;resize:none;height:136px;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}
5880
- .brz-ed .brz-ed-control__textarea,.brz-ed .brz-ed-control__textarea:active,.brz-ed .brz-ed-control__textarea:focus,.brz-ed .brz-ed-control__textarea:hover{outline:0}
5881
- .brz-ed .brz-ed-control__textarea--auto{width:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}
5882
- .brz-ed .brz-ed-control__textarea--short{width:62px}
5883
- .brz-ed .brz-ed-control__textarea--large{width:136px}
5884
- .brz-ed .brz-ed-control__textarea--medium{width:112px}
5885
- .brz-ed .brz-ed-control__textarea::-webkit-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5886
- .brz-ed .brz-ed-control__textarea:-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5887
- .brz-ed .brz-ed-control__textarea::-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5888
- .brz-ed .brz-ed-control__textarea:-ms-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5889
- .brz-ed .brz-ed-control__textarea2{font-family:nunito,"Open Sans",Arial,sans-serif;font-size:13px;letter-spacing:.25px;line-height:22px;background-color:#383e48;color:#fff;width:auto;height:auto;padding:5px 10px;border-radius:4px;border:0;outline:0;resize:none}
5890
- .brz-ed .brz-ed-control__textarea2,.brz-ed .brz-ed-control__textarea2:active,.brz-ed .brz-ed-control__textarea2:focus,.brz-ed .brz-ed-control__textarea2:hover{outline:0}
5891
- .brz-ed .brz-ed-control__textarea2--auto{width:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}
5892
- .brz-ed .brz-ed-control__textarea2--short{width:62px}
5893
- .brz-ed .brz-ed-control__textarea2--large{width:136px}
5894
- .brz-ed .brz-ed-control__textarea2--medium{width:112px}
5895
- .brz-ed .brz-ed-control__textarea2::-webkit-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5896
- .brz-ed .brz-ed-control__textarea2:-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5897
- .brz-ed .brz-ed-control__textarea2::-moz-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5898
- .brz-ed .brz-ed-control__textarea2:-ms-input-placeholder{color:rgba(234,241,255,.2);font-style:italic;font-size:1em}
5899
- .brz-ed .brz-ed-control__color-palette{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-top:0;border-bottom:0}
5900
- .brz-ed .brz-ed-control__color-palette__item{width:18px;height:18px;border-radius:2px;margin-left:2px;cursor:pointer;border:1px solid #3a3d43}
5901
- .brz-ed .brz-ed-control__color-palette__item:first-child{margin-left:0}
5902
- .brz-ed .brz-ed-control__color-palette__item.active{border:2px solid #fff}
5903
- .brz-ed .brz-ed-control__color-palette__icon{cursor:pointer;font-size:14px;margin-left:5px;display:-webkit-box;display:-ms-flexbox;display:flex;color:#828b92;-webkit-transition:color .2s linear;transition:color .2s linear}
5904
- .brz-ed .brz-ed-control__color-palette__icon:hover{color:#3dbfe8}
5905
- .brz-ed .brz-ed-control__color-palette-editor{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}
5906
- .brz-ed .brz-ed-control__color-palette-editor__item{width:23px;height:23px;border:1px solid #1e232a;border-radius:2px;margin-left:3px;cursor:pointer;-webkit-transition:border .2s linear;transition:border .2s linear}
5907
- .brz-ed .brz-ed-control__color-palette-editor__item.active,.brz-ed .brz-ed-control__color-palette-editor__item:hover{border:2px solid #3dbfe8}
5908
- .brz-ed .brz-ed-control__color-palette-editor__item:first-child{margin-left:0}
5909
- .brz-ed .brz-ed-sidebar-control__color-palette2-editor{margin-bottom:32px!important}
5910
- .brz-ed .color-picker-body{margin-bottom:2px;display:-webkit-box;display:-ms-flexbox;display:flex}
5911
- .brz-ed .color-picker-body .color-picker-saturation{width:153px;height:153px;position:relative;cursor:move}
5912
- .brz-ed .color-picker-body .color-picker-saturation>div{border-radius:3px 3px 4px 4px}
5913
- .brz-ed .color-picker-body .color-picker-saturation .color-picker-saturation-body{position:absolute;top:0;right:0;bottom:0;left:0}
5914
- .brz-ed .color-picker-body .color-picker-saturation .color-picker-saturation-body .saturation-black{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:3px;background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}
5915
- .brz-ed .color-picker-body .color-picker-saturation .color-picker-saturation-body .saturation-white{position:absolute;top:0;right:0;bottom:0;left:0;border-bottom-left-radius:4px;border-top-left-radius:3px;background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}
5916
- .brz-ed .color-picker-body .color-picker-saturation .color-picker-saturation-body .color-picker-pointer{width:16px;height:16px;-webkit-transform:translate(-8px,-8px);transform:translate(-8px,-8px);cursor:move}
5917
- .brz-ed .color-picker-body .color-picker-saturation .color-picker-saturation-body .saturation-pointer{position:absolute;cursor:move}
5918
- .brz-ed .color-picker-body .color-picker-saturation .color-picker-saturation-body .saturation-circle{width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;cursor:move;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}
5919
- .brz-ed .color-picker-body .color-picker-alpha,.brz-ed .color-picker-body .color-picker-hue{position:relative;height:153px;width:12px;margin-left:10px;cursor:ns-resize}
5920
- .brz-ed .color-picker-body .color-picker-alpha .hue-vertical,.brz-ed .color-picker-body .color-picker-hue .hue-vertical{border-radius:3px}
5921
- .brz-ed .color-picker-body .color-picker-hue .hue{position:absolute;top:0;right:0;bottom:0;left:0}
5922
- .brz-ed .color-picker-body .color-picker-hue .hue-container{padding:0 2px;position:relative;height:100%}
5923
- .brz-ed .color-picker-body .color-picker-hue .hue-pointer{position:absolute}
5924
- .brz-ed .color-picker-body .color-picker-hue .color-picker-pointer{-webkit-transform:translate(-1px,-7px);transform:translate(-1px,-7px)}
5925
- .brz-ed .color-picker-body .color-picker-hue .hue-slider{margin-top:1px;width:4px;border-radius:1px;height:8px;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);background:#fff;-webkit-transform:translateX(-2px);transform:translateX(-2px)}
5926
- .brz-ed .color-picker-body .color-picker-hue .hue-horizontal{background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}
5927
- .brz-ed .color-picker-body .color-picker-hue .hue-vertical{background:-webkit-gradient(linear,left bottom,left top,from(red),color-stop(17%,#ff0),color-stop(33%,