unified-video-framework 1.4.442 → 1.4.443

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2902,27 +2902,39 @@ export class WebPlayer extends BasePlayer {
2902
2902
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
2903
2903
  z-index: 100;
2904
2904
  pointer-events: none;
2905
+ filter: drop-shadow(0 10px 15px rgba(0,0,0,0.5));
2905
2906
  `;
2906
2907
 
2907
2908
  // 1. Globe Block (Left)
2908
2909
  const globeBlock = document.createElement('div');
2909
2910
  globeBlock.style.cssText = `
2910
- width: ${height * 1.2}px;
2911
+ width: ${height * 1.3}px;
2911
2912
  height: ${height}px;
2912
- background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
2913
+ background: linear-gradient(135deg, #e74c3c 0%, #c0392b 50%, #962d22 100%);
2913
2914
  display: flex;
2914
2915
  align-items: center;
2915
2916
  justify-content: center;
2916
2917
  flex-shrink: 0;
2917
- clip-path: polygon(0% 0%, 75% 0%, 100% 100%, 0% 100%);
2918
- z-index: 20;
2919
- box-shadow: 10px 0 20px rgba(0,0,0,0.4);
2918
+ clip-path: polygon(0% 0%, 78% 0%, 100% 100%, 0% 100%);
2919
+ z-index: 30;
2920
2920
  position: relative;
2921
+ overflow: hidden;
2922
+ `;
2923
+
2924
+ // Glossy Overlay for Globe Block
2925
+ const glossyGlobe = document.createElement('div');
2926
+ glossyGlobe.style.cssText = `
2927
+ position: absolute;
2928
+ top: 0; left: 0; right: 0; height: 40%;
2929
+ background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
2930
+ pointer-events: none;
2921
2931
  `;
2932
+ globeBlock.appendChild(glossyGlobe);
2933
+
2922
2934
  const globe = this.createGlobeElement(true);
2923
- globe.style.width = '45%';
2924
- globe.style.height = '45%';
2925
- globe.style.marginRight = '15%'; // Offset from the angle
2935
+ globe.style.width = '42%';
2936
+ globe.style.height = '42%';
2937
+ globe.style.marginRight = '18%';
2926
2938
  globeBlock.appendChild(globe);
2927
2939
  ticker.appendChild(globeBlock);
2928
2940
 
@@ -2932,7 +2944,7 @@ export class WebPlayer extends BasePlayer {
2932
2944
  flex-grow: 1;
2933
2945
  display: flex;
2934
2946
  flex-direction: column;
2935
- margin-left: -${height * 0.3}px; /* Deeper overlap */
2947
+ margin-left: -${height * 0.35}px;
2936
2948
  z-index: 10;
2937
2949
  `;
2938
2950
 
@@ -2941,13 +2953,23 @@ export class WebPlayer extends BasePlayer {
2941
2953
  topBar.style.cssText = `
2942
2954
  height: 55%;
2943
2955
  background: linear-gradient(90deg, #1e3c72 0%, #2a5298 50%, #1e3c72 100%);
2944
- clip-path: polygon(5% 0, 100% 0, 98% 100%, 0% 100%);
2956
+ clip-path: polygon(4% 0, 100% 0, 98.5% 100%, 0% 100%);
2945
2957
  display: flex;
2946
2958
  align-items: center;
2947
- padding: 0 40px 0 60px;
2959
+ padding: 0 40px 0 65px;
2948
2960
  color: white;
2949
- border-bottom: 3px solid rgba(255,255,255,0.1);
2961
+ position: relative;
2962
+ overflow: hidden;
2963
+ border-bottom: 2px solid rgba(255,255,255,0.15);
2964
+ `;
2965
+
2966
+ const glossyTop = document.createElement('div');
2967
+ glossyTop.style.cssText = `
2968
+ position: absolute;
2969
+ top: 0; left: 0; right: 0; height: 35%;
2970
+ background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
2950
2971
  `;
2972
+ topBar.appendChild(glossyTop);
2951
2973
 
2952
2974
  const breakingText = document.createElement('span');
2953
2975
  breakingText.textContent = 'BREAKING NEWS';
@@ -2955,21 +2977,23 @@ export class WebPlayer extends BasePlayer {
2955
2977
  font-weight: 900;
2956
2978
  font-style: italic;
2957
2979
  font-size: ${height * 0.2}px;
2958
- margin-right: 20px;
2980
+ margin-right: 25px;
2959
2981
  white-space: nowrap;
2960
2982
  color: #fff;
2961
- text-shadow: 0 0 10px rgba(255,255,255,0.5);
2983
+ text-shadow: 0 0 12px rgba(255,255,255,0.6);
2984
+ letter-spacing: 0.5px;
2962
2985
  `;
2963
2986
  topBar.appendChild(breakingText);
2964
2987
 
2965
2988
  const headlineText = document.createElement('span');
2966
2989
  headlineText.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
2967
2990
  headlineText.style.cssText = `
2968
- font-weight: 700;
2969
- font-size: ${height * 0.25}px;
2991
+ font-weight: 800;
2992
+ font-size: ${height * 0.26}px;
2970
2993
  white-space: nowrap;
2971
2994
  overflow: hidden;
2972
2995
  text-overflow: ellipsis;
2996
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
2973
2997
  `;
2974
2998
  topBar.appendChild(headlineText);
2975
2999
  content.appendChild(topBar);
@@ -2978,32 +3002,34 @@ export class WebPlayer extends BasePlayer {
2978
3002
  const bottomBar = document.createElement('div');
2979
3003
  bottomBar.style.cssText = `
2980
3004
  height: 45%;
2981
- background: #0d0d0d;
3005
+ background: linear-gradient(90deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
2982
3006
  display: flex;
2983
3007
  align-items: center;
2984
- clip-path: polygon(2% 0, 100% 0, 100% 100%, 0% 100%);
2985
- border-top: 1px solid rgba(255,255,255,0.05);
3008
+ clip-path: polygon(1.5% 0, 100% 0, 100% 100%, 0% 100%);
3009
+ border-top: 1px solid rgba(255,255,255,0.08);
2986
3010
  `;
2987
3011
 
2988
3012
  const liveBadge = document.createElement('div');
2989
3013
  liveBadge.textContent = 'LIVE';
2990
3014
  liveBadge.style.cssText = `
2991
- background: #f1c40f;
3015
+ background: linear-gradient(180deg, #f1c40f 0%, #d4ac0d 100%);
2992
3016
  color: #000;
2993
3017
  font-weight: 900;
2994
3018
  font-size: ${height * 0.16}px;
2995
- padding: 2px 12px;
2996
- margin-left: 50px;
2997
- clip-path: polygon(0 0, 85% 0, 100% 100%, 0 100%);
3019
+ padding: 2px 14px;
3020
+ margin-left: 55px;
3021
+ clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
3022
+ box-shadow: 2px 2px 5px rgba(0,0,0,0.3);
2998
3023
  `;
2999
3024
  bottomBar.appendChild(liveBadge);
3000
3025
 
3001
- // Scrolling track
3002
3026
  const trackContainer = document.createElement('div');
3003
3027
  trackContainer.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center;`;
3004
3028
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3005
3029
  track.style.fontSize = `${height * 0.18}px`;
3006
3030
  track.style.color = '#fff';
3031
+ track.style.fontWeight = '700';
3032
+ track.style.textShadow = '1px 1px 2px rgba(0,0,0,0.8)';
3007
3033
  trackContainer.appendChild(track);
3008
3034
  bottomBar.appendChild(trackContainer);
3009
3035
 
@@ -3020,7 +3046,6 @@ export class WebPlayer extends BasePlayer {
3020
3046
 
3021
3047
  const height = config.height || 75;
3022
3048
  const bottomOffset = config.bottomOffset || 0;
3023
- const topOffset = config.topOffset || 10;
3024
3049
 
3025
3050
  ticker.style.cssText = `
3026
3051
  position: absolute;
@@ -3033,16 +3058,17 @@ export class WebPlayer extends BasePlayer {
3033
3058
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3034
3059
  z-index: 100;
3035
3060
  pointer-events: none;
3061
+ filter: drop-shadow(0 8px 12px rgba(0,0,0,0.4));
3036
3062
  `;
3037
3063
 
3038
- // Globe icon (floating on left, nested for z-index control)
3064
+ // Globe Wrapper
3039
3065
  const globeWrapper = document.createElement('div');
3040
3066
  globeWrapper.style.cssText = `
3041
- width: ${height * 0.75}px;
3042
- height: ${height * 0.75}px;
3067
+ width: ${height * 0.8}px;
3068
+ height: ${height * 0.8}px;
3043
3069
  position: relative;
3044
- z-index: 30;
3045
- margin-right: 10px;
3070
+ z-index: 40;
3071
+ margin-right: 12px;
3046
3072
  flex-shrink: 0;
3047
3073
  `;
3048
3074
 
@@ -3050,17 +3076,30 @@ export class WebPlayer extends BasePlayer {
3050
3076
  globeContainer.style.cssText = `
3051
3077
  width: 100%;
3052
3078
  height: 100%;
3053
- background: radial-gradient(circle, #e74c3c 0%, #c0392b 100%);
3079
+ background: radial-gradient(circle at 30% 30%, #e74c3c 0%, #c1392b 60%, #962d22 100%);
3054
3080
  border-radius: 50%;
3055
3081
  display: flex;
3056
3082
  align-items: center;
3057
3083
  justify-content: center;
3058
- box-shadow: 0 0 25px rgba(0,0,0,0.6);
3084
+ box-shadow: inset -5px -5px 15px rgba(0,0,0,0.5), 0 0 25px rgba(0,0,0,0.6);
3059
3085
  border: 3px solid #fff;
3086
+ overflow: hidden;
3060
3087
  `;
3088
+
3089
+ const glossyGlobeEffect = document.createElement('div');
3090
+ glossyGlobeEffect.style.cssText = `
3091
+ position: absolute;
3092
+ top: 10%; left: 15%; width: 40%; height: 30%;
3093
+ background: rgba(255,255,255,0.3);
3094
+ border-radius: 50%;
3095
+ filter: blur(4px);
3096
+ pointer-events: none;
3097
+ `;
3098
+ globeContainer.appendChild(glossyGlobeEffect);
3099
+
3061
3100
  const globe = this.createGlobeElement(true);
3062
- globe.style.width = '70%';
3063
- globe.style.height = '70%';
3101
+ globe.style.width = '75%';
3102
+ globe.style.height = '75%';
3064
3103
  globeContainer.appendChild(globe);
3065
3104
  globeWrapper.appendChild(globeContainer);
3066
3105
  ticker.appendChild(globeWrapper);
@@ -3070,72 +3109,88 @@ export class WebPlayer extends BasePlayer {
3070
3109
 
3071
3110
  // Row 1: Yellow/Red Header
3072
3111
  const row1 = document.createElement('div');
3073
- row1.style.cssText = `display: flex; height: 50%;`;
3112
+ row1.style.cssText = `display: flex; height: 50%; position: relative; overflow: hidden;`;
3074
3113
 
3075
3114
  const badge = document.createElement('div');
3076
3115
  badge.textContent = 'BREAKING NEWS';
3077
3116
  badge.style.cssText = `
3078
- background: #f1c40f;
3079
- color: black;
3117
+ background: linear-gradient(180deg, #f1c40f 0%, #d4ac0d 100%);
3118
+ color: #000;
3080
3119
  font-weight: 900;
3081
- padding: 0 25px;
3120
+ padding: 0 30px;
3082
3121
  display: flex;
3083
3122
  align-items: center;
3084
- clip-path: polygon(0 0, 85% 0, 100% 100%, 0 100%);
3123
+ clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
3085
3124
  font-size: ${height * 0.2}px;
3086
3125
  position: relative;
3087
- z-index: 2;
3126
+ z-index: 5;
3127
+ text-shadow: 0 1px 1px rgba(255,255,255,0.3);
3088
3128
  `;
3089
3129
  row1.appendChild(badge);
3090
3130
 
3091
3131
  const headline = document.createElement('div');
3092
3132
  headline.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
3093
3133
  headline.style.cssText = `
3094
- background: linear-gradient(90deg, #e74c3c 0%, #c1392b 100%);
3134
+ background: linear-gradient(90deg, #e74c3c 0%, #c1392b 50%, #e74c3c 100%);
3095
3135
  color: white;
3096
- font-weight: 700;
3097
- padding: 0 40px;
3136
+ font-weight: 800;
3137
+ padding: 0 45px;
3098
3138
  display: flex;
3099
3139
  align-items: center;
3100
3140
  flex-grow: 1;
3101
- margin-left: -20px;
3102
- clip-path: polygon(5% 0, 100% 0, 95% 100%, 0 100%);
3103
- font-size: ${height * 0.22}px;
3104
- border-bottom: 2px solid rgba(255,255,255,0.2);
3141
+ margin-left: -25px;
3142
+ clip-path: polygon(5% 0, 100% 0, 96% 100%, 0 100%);
3143
+ font-size: ${height * 0.23}px;
3144
+ text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
3145
+ border-bottom: 3px solid rgba(255,255,255,0.15);
3146
+ `;
3147
+
3148
+ const glossyHeader = document.createElement('div');
3149
+ glossyHeader.style.cssText = `
3150
+ position: absolute;
3151
+ top: 0; left: 0; right: 0; height: 40%;
3152
+ background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
3105
3153
  `;
3154
+ headline.appendChild(glossyHeader);
3155
+
3106
3156
  row1.appendChild(headline);
3107
3157
  content.appendChild(row1);
3108
3158
 
3109
- // Row 2: Blue Ticker (Semi-transparent)
3159
+ // Row 2: Blue Ticker (Semi-transparent with Pro Blur)
3110
3160
  const row2 = document.createElement('div');
3111
3161
  row2.style.cssText = `
3112
- height: 40%;
3113
- background: rgba(41, 128, 185, 0.9);
3162
+ height: 42%;
3163
+ background: rgba(30, 60, 114, 0.85);
3114
3164
  display: flex;
3115
3165
  align-items: center;
3116
- margin-top: 4px;
3117
- clip-path: polygon(1% 0, 100% 0, 100% 100%, 2% 100%);
3118
- backdrop-filter: blur(5px);
3166
+ margin-top: 5px;
3167
+ clip-path: polygon(1.5% 0, 100% 0, 100% 100%, 2.5% 100%);
3168
+ backdrop-filter: blur(12px);
3169
+ border: 1px solid rgba(255,255,255,0.1);
3170
+ box-shadow: inset 0 0 10px rgba(0,0,0,0.3);
3119
3171
  `;
3120
3172
 
3121
3173
  const live = document.createElement('div');
3122
3174
  live.textContent = 'LIVE';
3123
3175
  live.style.cssText = `
3124
- background: white;
3125
- color: #2980b9;
3126
- font-weight: 900;
3127
- padding: 0 15px;
3128
- margin-left: 30px;
3129
- margin-right: 15px;
3176
+ background: #fff;
3177
+ color: #1e3c72;
3178
+ font-weight: 950;
3179
+ padding: 2px 18px;
3180
+ margin-left: 35px;
3181
+ margin-right: 20px;
3130
3182
  font-size: ${height * 0.16}px;
3131
- box-shadow: 2px 0 5px rgba(0,0,0,0.2);
3183
+ box-shadow: 2px 2px 8px rgba(0,0,0,0.3);
3184
+ letter-spacing: 1px;
3132
3185
  `;
3133
3186
  row2.appendChild(live);
3134
3187
 
3135
3188
  const trackCont = document.createElement('div');
3136
3189
  trackCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
3137
3190
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3138
- track.style.fontSize = `${height * 0.16}px`;
3191
+ track.style.fontSize = `${height * 0.17}px`;
3192
+ track.style.fontWeight = '700';
3193
+ track.style.textShadow = '1px 1px 3px rgba(0,0,0,0.9)';
3139
3194
  trackCont.appendChild(track);
3140
3195
  row2.appendChild(trackCont);
3141
3196
  content.appendChild(row2);
@@ -3243,7 +3298,6 @@ export class WebPlayer extends BasePlayer {
3243
3298
 
3244
3299
  const height = config.height || 65;
3245
3300
  const bottomOffset = config.bottomOffset || 0;
3246
- const topOffset = config.topOffset || 10;
3247
3301
 
3248
3302
  ticker.style.cssText = `
3249
3303
  position: absolute;
@@ -3256,65 +3310,109 @@ export class WebPlayer extends BasePlayer {
3256
3310
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3257
3311
  z-index: 100;
3258
3312
  pointer-events: none;
3313
+ filter: drop-shadow(0 12px 20px rgba(0,0,0,0.6));
3259
3314
  `;
3260
3315
 
3261
- // Large Blue Box
3316
+ // Large Blue Box (Pro Upgrade)
3262
3317
  const newsBox = document.createElement('div');
3263
3318
  newsBox.style.cssText = `
3264
- width: ${height * 1.6}px;
3319
+ width: ${height * 1.8}px;
3265
3320
  height: 100%;
3266
- background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
3321
+ background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #1e3c72 100%);
3267
3322
  display: flex;
3268
3323
  flex-direction: column;
3269
3324
  justify-content: center;
3270
3325
  align-items: center;
3271
3326
  position: relative;
3272
- clip-path: polygon(0 0, 100% 0, 85% 100%, 0 100%);
3327
+ clip-path: polygon(0 0, 100% 0, 82% 100%, 0 100%);
3273
3328
  flex-shrink: 0;
3274
- z-index: 30;
3275
- box-shadow: 5px 0 15px rgba(0,0,0,0.4);
3329
+ z-index: 40;
3330
+ border-right: 2px solid rgba(255,255,255,0.2);
3331
+ `;
3332
+
3333
+ const glossyNews = document.createElement('div');
3334
+ glossyNews.style.cssText = `
3335
+ position: absolute;
3336
+ top: 0; left: 0; right: 0; height: 40%;
3337
+ background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
3276
3338
  `;
3339
+ newsBox.appendChild(glossyNews);
3277
3340
 
3278
3341
  const bt = document.createElement('div');
3279
- bt.style.cssText = `display: flex; gap: 5px; margin-bottom: 2px; width: 100%; justify-content: center; padding-right: 15%;`;
3342
+ bt.style.cssText = `display: flex; gap: 6px; margin-bottom: 2px; width: 100%; justify-content: center; padding-right: 18%; position: relative; z-index: 2;`;
3280
3343
 
3281
3344
  const b1 = document.createElement('span');
3282
3345
  b1.textContent = 'BREAKING';
3283
- b1.style.cssText = `background: #c0392b; font-size: ${height * 0.14}px; font-weight: 900; padding: 2px 6px; border-radius: 2px; color: white;`;
3346
+ b1.style.cssText = `
3347
+ background: #c0392b;
3348
+ font-size: ${height * 0.14}px;
3349
+ font-weight: 900;
3350
+ padding: 2px 8px;
3351
+ border-radius: 2px;
3352
+ color: white;
3353
+ box-shadow: 0 0 10px rgba(192, 57, 43, 0.8);
3354
+ `;
3284
3355
  bt.appendChild(b1);
3285
3356
 
3286
3357
  const b2 = document.createElement('span');
3287
3358
  b2.textContent = 'LIVE';
3288
- b2.style.cssText = `background: #f1c40f; font-size: ${height * 0.14}px; font-weight: 900; padding: 2px 6px; border-radius: 2px; color: black;`;
3359
+ b2.style.cssText = `
3360
+ background: #f1c40f;
3361
+ font-size: ${height * 0.14}px;
3362
+ font-weight: 900;
3363
+ padding: 2px 8px;
3364
+ border-radius: 2px;
3365
+ color: black;
3366
+ box-shadow: 0 0 10px rgba(241, 196, 15, 0.6);
3367
+ `;
3289
3368
  bt.appendChild(b2);
3290
3369
  newsBox.appendChild(bt);
3291
3370
 
3292
3371
  const nt = document.createElement('div');
3293
3372
  nt.textContent = 'NEWS';
3294
- nt.style.cssText = `font-size: ${height * 0.45}px; font-weight: 900; color: white; letter-spacing: 4px; padding-right: 15%; line-height: 1;`;
3373
+ nt.style.cssText = `
3374
+ font-size: ${height * 0.5}px;
3375
+ font-weight: 900;
3376
+ color: white;
3377
+ letter-spacing: 6px;
3378
+ padding-right: 18%;
3379
+ line-height: 1;
3380
+ text-shadow: 3px 3px 6px rgba(0,0,0,0.6);
3381
+ `;
3295
3382
  newsBox.appendChild(nt);
3296
3383
  ticker.appendChild(newsBox);
3297
3384
 
3298
- // Red Scrolling Bar
3385
+ // Red Scrolling Bar (Pro Upgrade)
3299
3386
  const redBar = document.createElement('div');
3300
3387
  redBar.style.cssText = `
3301
3388
  flex-grow: 1;
3302
- height: 50%;
3303
- background: linear-gradient(90deg, #c0392b 0%, #e74c3c 100%);
3304
- margin-left: -${height * 0.2}px;
3389
+ height: 52%;
3390
+ background: linear-gradient(90deg, #c0392b 0%, #e74c3c 50%, #c0392b 100%);
3391
+ margin-left: -${height * 0.3}px;
3305
3392
  display: flex;
3306
3393
  align-items: center;
3307
- padding-left: ${height * 0.3}px;
3308
- padding-right: 20px;
3309
- clip-path: polygon(5% 0, 100% 0, 100% 100%, 0 100%);
3394
+ padding-left: ${height * 0.45}px;
3395
+ padding-right: 30px;
3396
+ clip-path: polygon(6% 0, 100% 0, 100% 100%, 0 100%);
3310
3397
  z-index: 20;
3398
+ border-top: 1px solid rgba(255,255,255,0.1);
3399
+ box-shadow: inset 0 0 15px rgba(0,0,0,0.4);
3311
3400
  `;
3312
3401
 
3402
+ const glossyRed = document.createElement('div');
3403
+ glossyRed.style.cssText = `
3404
+ position: absolute;
3405
+ top: 0; left: 0; right: 0; height: 35%;
3406
+ background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
3407
+ `;
3408
+ redBar.appendChild(glossyRed);
3409
+
3313
3410
  const tCont = document.createElement('div');
3314
3411
  tCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
3315
3412
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3316
- track.style.fontSize = `${height * 0.22}px`;
3317
- track.style.fontWeight = '700';
3413
+ track.style.fontSize = `${height * 0.24}px`;
3414
+ track.style.fontWeight = '800';
3415
+ track.style.textShadow = '2px 2px 4px rgba(0,0,0,0.7)';
3318
3416
  tCont.appendChild(track);
3319
3417
  redBar.appendChild(tCont);
3320
3418
  ticker.appendChild(redBar);