@hulkapps/app-manager-vue 2.0.4 → 2.0.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hulkapps/app-manager-vue",
3
- "version": "2.0.4",
3
+ "version": "2.0.5",
4
4
  "description": "Vue SDK to render app manager contents",
5
5
  "main": "dist/app-manager-vue.ssr.js",
6
6
  "browser": "dist/app-manager-vue.esm.js",
@@ -22,7 +22,8 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "axios": "^0.26.1",
25
- "change-case": "^4.1.2"
25
+ "change-case": "^4.1.2",
26
+ "vue-carousel": "^0.18.0"
26
27
  },
27
28
  "devDependencies": {
28
29
  "@babel/core": "^7.14.6",
@@ -0,0 +1,551 @@
1
+ <template>
2
+ <PPage
3
+ class="app-manager-plan-page custom-title"
4
+ title="Choose plan"
5
+ :subtitle = "subtitleContent"
6
+ >
7
+
8
+ <PStack slot="primaryAction">
9
+ <PStackItem style="margin-top: 20px">
10
+ <PButtonGroup class="btn-group" segmented>
11
+ <PButton v-if="monthlyPlan.length && yearlyPlan.length" :style="selectedPlan === 'monthly' ? monthlySelectedStyle : monthlyStyle " @click="selectPlan('monthly')">
12
+ <p style="font-size: 17px; font-weight: 500" slot="default">{{('Monthly')}}</p>
13
+ </PButton>
14
+
15
+ <PButton v-if="yearlyPlan.length && monthlyPlan.length" :style="selectedPlan === 'annually' ? yearlySelectedStyle : yearlyStyle " @click="selectPlan('annually')" :primary="selectedPlan === 'annually' " >
16
+ <YearlyPlanPromotion />
17
+ </PButton>
18
+ </PButtonGroup>
19
+ </PStackItem>
20
+ </PStack>
21
+ <hr style="width: 100%; margin-right: auto;margin-left: auto;margin-bottom: 20px;" />
22
+ <!--=======================================================-->
23
+
24
+ <PLayout class="custom-plan">
25
+ <PLayoutSection>
26
+ <template style="margin-bottom: 20px;">
27
+ <template>
28
+ <PDataTable class="plan-table">
29
+ <template slot="head">
30
+ <PDataTableRow v-if="selectedPlan === 'monthly'" style="box-shadow: none!important;">
31
+ <PDataTableCol style="opacity: 0;visibility: hidden;border: 0 !important;" class="plan-heading">
32
+ <b>{{('features')}}</b>
33
+ </PDataTableCol>
34
+ <template v-for="(plan, key) in monthlyPlan" >
35
+ <PDataTableCol :class="{'first-column': key === 0, 'plan-heading': true, 'last-column': (key+1) === monthlyPlan.length}" :style="activePlanStyle(plan)">
36
+ <b style="font-size: 16px">{{(plan.name)}}</b>
37
+ <div v-if="plan.discount && plan.discount > 0" >
38
+ <p style="display: flex;margin-top: 10px">
39
+ <PHeading style="font-size: 25px;font-weight: 700;">${{parseFloat(calculateDiscountedPrice(plan)).toFixed(2)}}</PHeading>
40
+ <b style="margin-top: 5px;font-size: 17px">/{{("mo")}}</b>
41
+ </p>
42
+ <p style="display: flex;margin-top: 7px">
43
+ <PHeading style="font-size: 18px;font-weight: 500; text-decoration:line-through;">${{parseFloat(plan.price).toFixed(2)}}</PHeading>
44
+ <b style="margin-top: 3px;font-size: 14px">/{{("mo")}}</b>
45
+ </p>
46
+ </div>
47
+ <div v-else>
48
+ <p style="display: flex;margin-top: 10px">
49
+ <PHeading style="font-size: 25px;font-weight: 700;">${{parseFloat(plan.price).toFixed(2)}}</PHeading>
50
+ <b style="margin-top: 5px;font-size: 17px">/{{("mo")}}</b>
51
+ </p>
52
+ </div>
53
+ </PDataTableCol>
54
+ </template>
55
+ </PDataTableRow>
56
+ <PDataTableRow v-else>
57
+ <PDataTableCol style="opacity: 0;visibility: hidden; border: 0 !important;" class="plan-heading">
58
+ <b>{{('features')}}</b>
59
+ </PDataTableCol>
60
+ <template v-for="(plan,key) in yearlyPlan">
61
+ <PDataTableCol :class="{'first-column': key === 0, 'plan-heading': true, 'last-column': (key+1) === yearlyPlan.length}" :style="activePlanStyle(plan)">
62
+ <b style="font-size: 16px">{{(plan.name)}}</b>
63
+ <div v-if="plan.discount && plan.discount > 0" >
64
+ <p style="display: flex;margin-top: 10px">
65
+ <PHeading style="font-size: 25px;font-weight: 700;">${{parseFloat(calculateDiscountedPrice(plan)).toFixed(2)}}</PHeading>
66
+ <b style="margin-top: 5px;font-size: 17px">/{{("year")}}</b>
67
+ </p>
68
+ <p style="display: flex;margin-top: 7px">
69
+ <PHeading style="font-size: 18px;font-weight: 500; text-decoration:line-through;">${{parseFloat(plan.price).toFixed(2)}}</PHeading>
70
+ <b style="margin-top: 3px;font-size: 14px">/{{("year")}}</b>
71
+ </p>
72
+ </div>
73
+ <div v-else>
74
+ <p style="display: flex;margin-top: 10px">
75
+ <PHeading style="font-size: 25px;font-weight: 700;">${{parseFloat(plan.price).toFixed(2)}}</PHeading>
76
+ <b style="margin-top: 5px;font-size: 17px">/{{("year")}}</b>
77
+ </p>
78
+ </div>
79
+ </PDataTableCol>
80
+ </template>
81
+ </PDataTableRow>
82
+ </template>
83
+ <template slot="body">
84
+ <template v-for="(featureGroup, groupKey) in featuresByGroup">
85
+ <PDataTableRow v-if="groupKey !== 'null'" class="app-manager-group-row">
86
+ <PDataTableCol :colspan="selectedPlan === 'monthly' ? monthlyPlan.length + 1 : yearlyPlan.length + 1" class="app-manager-group-cell">{{ (groupKey) }}</PDataTableCol>
87
+ </PDataTableRow>
88
+ <PDataTableRow v-for="(feature, rIndex) in featureGroup" :key="`row-${rIndex + groupKey}`">
89
+ <PDataTableCol>{{ (feature.name) }}</PDataTableCol>
90
+ <PDataTableCol v-for="(plan, cIndex) in selectedPlan === 'monthly' ? monthlyPlan : yearlyPlan" :key="`cell-${cIndex}-row-${rIndex}`" :style="activePlanStyle(plan)">
91
+ <template v-if="plan.features">
92
+ <template v-if="feature.value_type === 'boolean'">
93
+ <PIcon v-if="plan.features[feature.uuid]" color="success"
94
+ source="TickMinor"/>
95
+ <PIcon v-else color="subdued" source="MinusMinor"/>
96
+ </template>
97
+ <template v-else>
98
+ <span v-if="plan.features[feature.uuid]">{{ format(plan.features[feature.uuid]) }}</span>
99
+ <PIcon v-else color="subdued" source="MinusMinor"/>
100
+ </template>
101
+ </template>
102
+ <template v-else>
103
+ <PIcon color="subdued" source="MinusMinor"/>
104
+ </template>
105
+ </PDataTableCol>
106
+ </PDataTableRow>
107
+ </template>
108
+ <PDataTableRow v-if="plans.length" class="row-alignment" >
109
+ <PDataTableCol></PDataTableCol>
110
+ <PDataTableCol v-for="(plan, cIndex) in selectedPlan === 'monthly' ? monthlyPlan : yearlyPlan" :key="`cell-${cIndex}-row-plan`" style="max-width: 0">
111
+ <PButton v-if="isCurrentPlan(plan)" :disabled="isCurrentPlan(plan)"
112
+ full-width
113
+ :pressed="isCurrentPlan(plan)">
114
+ {{ ('Current Plan') }}
115
+ </PButton>
116
+ <PButton v-else-if="!plan.store_base_plan || plan.shopify_plans.includes(shop.shopify_plan)"
117
+ full-width
118
+ @click="plan ? getPlanUrl(plan):'javascript:void'"
119
+ :primary="true" >
120
+ {{ ('Choose Plan') }}
121
+ </PButton>
122
+ <PButton v-else :disabled="true"
123
+ full-width
124
+ :pressed="true">
125
+ {{ ('Not applicable') }}
126
+ </PButton>
127
+ <PTextContainer v-if="plan.store_base_plan && shop.plan && plan.shopify_plans.includes(shop.shopify_plan) && !isCurrentPlan(plan)" class="footer-note-container">
128
+ <PTextStyle class="text-break" v-if="plan.store_base_plan && !plan.shopify_plans.includes(shop.shopify_plan) && !(isCurrentPlan(plan)) && !isSamePlanInOtherInterval(plan)">Note: On account of your recent Shopify plan upgrade, you should consider upgrading your current app plan</PTextStyle>
129
+ </PTextContainer>
130
+ </PDataTableCol>
131
+ </PDataTableRow>
132
+ </template>
133
+ </PDataTable>
134
+ </template>
135
+ </template>
136
+ <PStack v-if="onboard && !shop.has_plan" class="choose-plan-btn" alignment="center" distribution="center" vertical>
137
+ <PStackItem fill>
138
+ <PButton plain @click="activePlan">{{ ('I will choose the plan later') }}</PButton>
139
+ </PStackItem>
140
+ </PStack>
141
+ </PLayoutSection>
142
+ <PlanBanners />
143
+ </PLayout>
144
+ <!--====================================================================-->
145
+ </PPage>
146
+ </template>
147
+
148
+ <script>
149
+
150
+ import axios from "axios";
151
+ import PlanBanners from "./PlanBanners";
152
+ import YearlyPlanPromotion from "./YearlyPlanPromotion";
153
+ import PPage from "../polaris-vue/src/components/PPage/PPage";
154
+ import PStack from "../polaris-vue/src/components/PStack/PStack";
155
+ import PStackItem from "../polaris-vue/src/components/PStack/components/PStackItem/PStackItem";
156
+ import {PButton} from "../polaris-vue/src/components/PButton";
157
+ import {PButtonGroup} from "../polaris-vue/src/components/PButtonGroup";
158
+ import {PHeading} from "../polaris-vue/src/components/PHeading";
159
+ import {PLayout} from "../polaris-vue/src/components/PLayout";
160
+ import {PLayoutSection} from "../polaris-vue/src/components/PLayout/components/PLayoutSection";
161
+ import {PTextContainer} from "../polaris-vue/src/components/PTextContainer";
162
+ import {PDataTable} from "../polaris-vue/src/components/PDataTable";
163
+ import {PDataTableCol} from "../polaris-vue/src/components/PDataTable/components/PDataTableCol";
164
+ import {PDataTableRow} from "../polaris-vue/src/components/PDataTable/components/PDataTableRow";
165
+ import {PIcon} from "../polaris-vue/src/components/PIcon";
166
+ import {PTextStyle} from "../polaris-vue/src/components/PTextStyle";
167
+
168
+ export default {
169
+ name: "AppManagerGroupPlan",
170
+ components: { YearlyPlanPromotion, PlanBanners, PPage, PStack, PStackItem, PButton, PButtonGroup, PHeading, PLayout, PLayoutSection, PTextContainer, PDataTable, PDataTableCol, PDataTableRow, PIcon, PTextStyle },
171
+ props: ['shop_domain'],
172
+ data() {
173
+ return {
174
+ plan: {},
175
+ plans: [],
176
+ features: [],
177
+ featuresByGroup: [],
178
+ shopify_plan: '',
179
+ default_plan_id: null,
180
+ onboard: true,
181
+ subtitleContent: '',
182
+ checkList: [
183
+ "60 days free trial",
184
+ ],
185
+ selectedPlan:'monthly',
186
+ monthlySelectedStyle:{
187
+ height: '60px',
188
+ backgroundColor:'#257f60',
189
+ color:'#fff',
190
+ position:'relative',
191
+ right:'-5px',
192
+ borderRadius:'8px',
193
+ zIndex: 1,
194
+ },
195
+ yearlySelectedStyle:{
196
+ height: '60px',
197
+ backgroundColor:'#257f60',
198
+ position:'relative',
199
+ left:'-5px',
200
+ borderRadius:'8px'
201
+ },
202
+ monthlyStyle:{
203
+ height: '55px',
204
+ backgroundColor:'#f0f8f5',
205
+ boxShadow: 'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px',
206
+ border:'none',
207
+ borderRadius:'8px',
208
+ ZIndex: 11,
209
+ },
210
+ yearlyStyle:{
211
+ color:'#258060',
212
+ height: '55px',
213
+ backgroundColor:'#f0f8f5',
214
+ boxShadow: 'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px',
215
+ border:'none',
216
+ borderRadius:'8px'
217
+ },
218
+ }
219
+ },
220
+ computed: {
221
+ shop() {
222
+ return {
223
+ "name": this.shop_domain,
224
+ "shopify_plan": this.shopify_plan,
225
+ "has_plan": !!this.plan,
226
+ "plan": this.plan,
227
+ "default_plan_id": this.default_plan_id,
228
+ };
229
+ },
230
+ headings() {
231
+ let headings = [('Plans & Features')];
232
+ this.plans.forEach(plan => {
233
+
234
+ let heading = (plan.name);
235
+ if (plan.price > 0) heading += ` ($${plan.price}/mo)`;
236
+ headings.push(heading);
237
+ });
238
+ return headings;
239
+ },
240
+ monthlyPlan() {
241
+ const plans = [];
242
+ for(let planKey in this.plans) {
243
+ if(this.plans[planKey].interval === 'EVERY_30_DAYS') {
244
+ plans.push(this.plans[planKey]);
245
+ }
246
+ }
247
+ return plans;
248
+ },
249
+ yearlyPlan() {
250
+ const plans = [];
251
+ for(let planKey in this.plans) {
252
+ if(this.plans[planKey].interval === 'ANNUAL') {
253
+ plans.push(this.plans[planKey]);
254
+ }
255
+ }
256
+ return plans;
257
+ }
258
+ },
259
+ methods: {
260
+
261
+ activePlanStyle(plan) {
262
+ return [plan.shopify_plans.includes(this.shop.shopify_plan) || !plan.store_base_plan ? {backgroundColor: '#f0f8f5', color: '#257f60'} : {}];
263
+ },
264
+ isCurrentPlan(plan) {
265
+ return this.shop.plan && (plan.id === this.shop.plan.id || (!plan.is_custom && plan.base_plan === this.shop.plan.id));
266
+ },
267
+ isSamePlanInOtherInterval(plan) {
268
+ return this.shop.plan && (plan.shopify_plans === this.shop.plan.shopify_plans)
269
+ },
270
+ format(feature) {
271
+ if (['double', 'integer'].includes(feature?.value_type)) {
272
+ if (feature.format === 'percentage') {
273
+ return `${feature.value}%`
274
+ } else if (feature.format === 'count') {
275
+ return (feature.value < 0 ? (`Unlimited`) : feature.value)
276
+ } else return feature.value
277
+ }
278
+ else if(feature?.value_type === 'array') {
279
+ return JSON.parse(feature.value).join(',')
280
+ }
281
+ else if(feature?.value_type === 'string') {
282
+ return feature.value
283
+ }
284
+ },
285
+ calculateDiscountedPrice(plan) {
286
+ if (plan.discount_type === 'percentage') {
287
+ return plan.price - (plan.price * plan.discount)/100
288
+ }
289
+ else if (plan.discount_type === 'amount') {
290
+ return plan.price - plan.discount
291
+ }
292
+ },
293
+ async getPlanUrl(plan) {
294
+ let shopName = this.shop.name;
295
+ const response = await axios.get(`${this.app_manager_config.baseUrl}/api/app-manager/plan/process/${plan.id}?shop=${shopName}`).catch(error => {
296
+ console.error(error)
297
+ });
298
+ let redirectUrl = response.data.redirect_url;
299
+ if (redirectUrl) {
300
+ window.top.location.href = redirectUrl;
301
+ }
302
+ },
303
+ async activePlan() {
304
+ const response = await this.activeWithoutPlan()
305
+ if (response.data.status === true && this.onboard) {
306
+ // Create the event
307
+ this.$emit('handlePlanSelect', {chose_later: true})
308
+ this.onboard = false;
309
+ }
310
+ },
311
+ async activeWithoutPlan() {
312
+ return await axios.post(`${this.app_manager_config.baseUrl}/api/app-manager/active-without-plan`, {
313
+ shop_domain: this.shop.name,
314
+ plan_id: this.shop.default_plan_id
315
+ }).catch(error => {
316
+ console.error(error)
317
+ });
318
+ },
319
+ async selectPlan(value){
320
+ this.selectedPlan= value;
321
+ },
322
+ headerClasses(firstColumn) {
323
+ return {
324
+ 'Polaris-DataTable__Cell': true,
325
+ 'Polaris-DataTable__Cell--header': true,
326
+ 'Polaris-DataTable__Cell--verticalAlignMiddle': true,
327
+ 'Polaris-DataTable__Cell--firstColumn': Boolean(firstColumn),
328
+ };
329
+ },
330
+ groupBy(objectArray, property) {
331
+ return objectArray.reduce((acc, obj) => {
332
+ const key = obj[property];
333
+ if (!acc[key]) {
334
+ acc[key] = [];
335
+ }
336
+ // Add object to list for given key's value
337
+ acc[key].push(obj);
338
+ return acc;
339
+ }, {});
340
+ }
341
+ },
342
+ async mounted() {
343
+
344
+ const featuresData = await axios.get(`${this.app_manager_config.baseUrl}/api/app-manager/plan-features`).catch(error => {
345
+ console.error(error)
346
+ });
347
+ this.features = featuresData.data.features;
348
+ this.features = this.features.sort((featureA, featureB) => parseInt(featureA.display_order) - parseInt(featureB.display_order))
349
+ this.features = this.features.sort((featureA, featureB) => parseInt(featureA.group_order) - parseInt(featureB.group_order))
350
+ this.featuresByGroup = this.groupBy(this.features, 'group')
351
+ const plansData = await axios.get(`${this.app_manager_config.baseUrl}/api/app-manager/plans`, { params: { 'shop_domain': this.shop_domain } }).catch(error => {
352
+ console.error(error)
353
+ });
354
+ this.plans = plansData.data.plans;
355
+ this.plans = this.plans.sort((planA, planB) => parseFloat(planA.price) - parseFloat(planB.price));
356
+ if (this.plans && this.plans[0].store_base_plan) {
357
+ this.subtitleContent = 'App plans are based on your existing shopify plan';
358
+ }
359
+ this.shopify_plan = plansData.data.shopify_plan;
360
+ this.plan = plansData.data.plan;
361
+ if (this.plan?.interval === 'ANNUAL') {
362
+ this.selectedPlan = 'annually'
363
+ }
364
+ this.default_plan_id = plansData.data.default_plan_id;
365
+ this.onboard = !this.plan
366
+ }
367
+ }
368
+ </script>
369
+
370
+ <style lang="scss">
371
+
372
+ @import url('https://fonts.googleapis.com/css2?family=Satisfy&display=swap');
373
+
374
+ .app-manager-plan-page .plan-table td:last-child>*[data-v-7d902277],
375
+ .app-manager-plan-page .plan-table td:last-child>*[data-v-5a078dbb] {
376
+ float:none;
377
+ }
378
+ .app-manager-plan-page .active {
379
+ background: #f0f8f5;
380
+ }
381
+ .app-manager-plan-page .plan-table td:last-child>*[data-v-0d1b0d63] {
382
+ float:none;
383
+ }
384
+ .app-manager-plan-page .plan-table td {
385
+ border: 0.01px solid #ececee !important;
386
+ border-collapse: collapse !important;
387
+ }
388
+ .app-manager-plan-page .plan-table .Polaris-DataTable__ScrollContainer{
389
+ border-radius:12px;
390
+ overflow: visible;
391
+ }
392
+ .app-manager-plan-page .plan-table table {
393
+ border-collapse: collapse !important;
394
+ }
395
+ .app-manager-plan-page .custom-plan table {
396
+ border-collapse: collapse !important;
397
+ }
398
+ .app-manager-plan-page .custom-plan table thead .first-column {
399
+ border-radius: 12px 0 0 0;
400
+ border-top: 0px !important;
401
+ border-left: 0px !important;
402
+ }
403
+ .app-manager-plan-page .custom-plan table thead .plan-heading.last-column {
404
+ text-align: left !important;
405
+ border-radius: 0 12px 0 0;
406
+ border-top: 0px !important;
407
+ }
408
+ .app-manager-plan-page .custom-plan table thead .plan-heading {
409
+ background-color: rgb(255, 255, 255);
410
+ box-shadow: rgb(23 24 24 / 5%) 1px 0px 8px, rgb(0 0 0 / 15%) 0px 0px 2px;
411
+ }
412
+ .app-manager-plan-page .custom-plan table tbody tr:first-child {
413
+ background-color: #fff;
414
+ box-shadow: 0 0 5px rgb(23 24 24 / 5%), 0 1px 2px rgb(0 0 0 / 15%);
415
+ border-radius: 12px 0 0 0;
416
+ overflow: hidden;
417
+ }
418
+ .app-manager-plan-page .custom-plan table tbody tr:not(:first-child :last-child ) {
419
+ background-color: #fff;
420
+ overflow: hidden;
421
+ }
422
+ .app-manager-plan-page .custom-plan table tbody tr:not(:first-child :last-child) {
423
+ background-color: #fff;
424
+ box-shadow: 0 0 5px rgb(23 24 24 / 5%), 0 1px 2px rgb(0 0 0 / 15%);
425
+ overflow: hidden;
426
+ }
427
+ .app-manager-plan-page .custom-plan table tbody tr:not( :nth-last-child(2) ) {
428
+ background-color: #fff;
429
+ overflow: hidden;
430
+ }
431
+ .app-manager-plan-page .custom-plan table tbody tr:not( :nth-last-child(2) ) {
432
+ border-bottom: 0;
433
+ }
434
+ .app-manager-plan-page .custom-plan table tbody tr:last-child {
435
+ border-bottom: 0;
436
+ background-color: transparent !important;
437
+ box-shadow: none !important;
438
+ }
439
+ .app-manager-plan-page .custom-plan table tbody tr:not(:last-child) {
440
+ pointer-events: none;
441
+ }
442
+ .app-manager-plan-page .custom-plan table thead tr td{
443
+ pointer-events: none;
444
+ }
445
+ .app-manager-plan-page .custom-plan table tbody tr:first-child td:first-child {
446
+ overflow: hidden;
447
+ border-radius: 12px 0 0 0;
448
+ }
449
+ .app-manager-plan-page .custom-plan table tbody tr:nth-last-child(2) {
450
+ overflow: hidden;
451
+ border-bottom-right-radius: 12px;
452
+ border-bottom-left-radius: 12px;
453
+ }
454
+ .app-manager-plan-page .custom-plan table tbody tr:nth-last-child(2) td:first-child {
455
+ overflow: hidden;
456
+ border-bottom: 0px !important;
457
+ border-radius: 0 0 0 12px;
458
+ }
459
+ .app-manager-plan-page .custom-plan table tbody tr:nth-last-child(2) td:last-child {
460
+ overflow: hidden;
461
+ border-radius: 0 0 12px;
462
+ }
463
+ .app-manager-plan-page .custom-plan table tbody tr td:first-child {
464
+ border-left: 0px !important;
465
+ border-top: 0px !important;
466
+ padding-left: 20px;
467
+ }
468
+ .app-manager-plan-page .custom-plan table tbody tr td:last-child {
469
+ border-right: 0px !important;
470
+ border-bottom: 0px !important;
471
+ text-align: center !important;
472
+ }
473
+ .app-manager-plan-page .custom-plan table thead tr td:last-child {
474
+ border-right: 0px !important;
475
+ border-bottom: 0px !important;
476
+ text-align: center !important;
477
+ }
478
+ .app-manager-plan-page .custom-plan table tbody td:not(:first-child) {
479
+ text-align: center !important;
480
+ }
481
+ .app-manager-plan-page .custom-plan table tbody tr:last-child td:last-child {
482
+ background: transparent;
483
+ border-radius: 0 0 12px 0;
484
+ }
485
+ .app-manager-plan-page .custom-plan table tbody tr:last-child td {
486
+ border: 0 !important;
487
+ background: transparent;
488
+ }
489
+ .app-manager-plan-page .custom-plan table tbody tr:last-child td:hover {
490
+ border: 0 !important;
491
+ background: transparent;
492
+ }
493
+ .app-manager-plan-page .custom-plan tbody tr:last-child td.Polaris-DataTable__Cell--verticalAlignTop{
494
+ background: transparent !important;
495
+ }
496
+ .app-manager-plan-page .custom-plan table tbody tr:last-child {
497
+ background: transparent;
498
+ opacity:1.0;
499
+ }
500
+ .app-manager-plan-page .custom-plan table tbody tr:last-child td:first-child{
501
+ visibility: hidden;
502
+ }
503
+ .app-manager-plan-page .plan-heading {
504
+ padding-top: 30px;
505
+ }
506
+ .app-manager-plan-page .custom-plan .Polaris-Layout__Section{
507
+ max-width: calc(100% - 2rem) !important;
508
+ }
509
+ .app-manager-plan-page .later-link {
510
+ text-align: center;
511
+ clear: both;
512
+ padding-top: 15px;
513
+ }
514
+ .app-manager-plan-page .plan-badge ul {
515
+ text-align: center;
516
+ padding-top: 2rem;
517
+ border-top: 0.1rem solid #e1e3e5;
518
+ }
519
+ .app-manager-plan-page .plan-badge ul li {
520
+ list-style: none;
521
+ display: inline-block;
522
+ padding-right: 25px;
523
+ }
524
+ .app-manager-plan-page .plan-badge ul li img {
525
+ max-width: 133px;
526
+ }
527
+ .app-manager-plan-page .btn-group .Polaris-ButtonGroup__Item{
528
+ margin-left: 0px !important;
529
+ z-index: unset !important;
530
+ }
531
+ .app-manager-plan-page.custom-title .Polaris-HorizontalDivider{
532
+ background-color: #e2e3e4;
533
+ }
534
+ /*.app-manager-plan-page .annual_heading{
535
+ margin-top: 2px !important;
536
+ color: #E2C138;
537
+ border: 2px dotted #E2C138;
538
+ padding: 5px;
539
+ font-size: 16px !important;
540
+ font-weight: normal !important;
541
+ font-family: 'Satisfy', cursive;
542
+ }*/
543
+ .app-manager-plan-page .Polaris-Page__Content hr{
544
+ border: 1px solid #e2e3e4;
545
+ }
546
+
547
+ .app-manager-plan-page .app-manager-group-row {
548
+ background: transparent !important;
549
+ padding: 16px 16px 16px 20px !important;
550
+ }
551
+ </style>