tf-checkout-react 1.0.101 → 1.0.102

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.
Files changed (81) hide show
  1. package/dist/components/billing-info-container/index.d.ts +3 -1
  2. package/dist/components/common/SnackbarAlert.d.ts +13 -0
  3. package/dist/components/confirmationContainer/index.d.ts +2 -1
  4. package/dist/components/ticketsContainer/index.d.ts +2 -1
  5. package/dist/env.d.ts +1 -0
  6. package/dist/images/done.svg +3 -3
  7. package/dist/tf-checkout-react.cjs.development.js +242 -117
  8. package/dist/tf-checkout-react.cjs.development.js.map +1 -1
  9. package/dist/tf-checkout-react.cjs.production.min.js +1 -1
  10. package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
  11. package/dist/tf-checkout-react.esm.js +243 -118
  12. package/dist/tf-checkout-react.esm.js.map +1 -1
  13. package/dist/tf-checkout-styles.css +1 -1
  14. package/package.json +89 -89
  15. package/src/.DS_Store +0 -0
  16. package/src/.d.ts +2 -2
  17. package/src/api/index.ts +278 -278
  18. package/src/assets/images/done.svg +3 -3
  19. package/src/components/.DS_Store +0 -0
  20. package/src/components/billing-info-container/index.tsx +796 -777
  21. package/src/components/billing-info-container/style.css +105 -105
  22. package/src/components/billing-info-container/utils.ts +224 -224
  23. package/src/components/common/CheckboxField.tsx +41 -41
  24. package/src/components/common/CustomField.tsx +84 -84
  25. package/src/components/common/FormikPhoneNumberField.tsx +51 -51
  26. package/src/components/common/Loader.tsx +9 -9
  27. package/src/components/common/RadioField.tsx +35 -35
  28. package/src/components/common/SelectField.tsx +80 -80
  29. package/src/components/common/SnackbarAlert.tsx +54 -0
  30. package/src/components/common/index.tsx +4 -4
  31. package/src/components/confirmModal/index.tsx +51 -51
  32. package/src/components/confirmModal/style.css +21 -21
  33. package/src/components/confirmationContainer/config.ts +72 -72
  34. package/src/components/confirmationContainer/index.tsx +197 -194
  35. package/src/components/confirmationContainer/social-buttons.tsx +94 -94
  36. package/src/components/confirmationContainer/style.css +202 -202
  37. package/src/components/countdown/index.tsx +89 -89
  38. package/src/components/countdown/style.css +9 -9
  39. package/src/components/index.ts +7 -7
  40. package/src/components/loginModal/index.tsx +209 -209
  41. package/src/components/loginModal/style.css +71 -71
  42. package/src/components/myTicketsContainer/index.tsx +196 -137
  43. package/src/components/myTicketsContainer/row.tsx +41 -41
  44. package/src/components/myTicketsContainer/style.css +39 -39
  45. package/src/components/myTicketsContainer/tableConfig.tsx +34 -34
  46. package/src/components/orderDetailsContainer/index.tsx +249 -249
  47. package/src/components/orderDetailsContainer/style.css +72 -72
  48. package/src/components/orderDetailsContainer/ticketsTable.tsx +124 -124
  49. package/src/components/paymentContainer/index.tsx +284 -284
  50. package/src/components/registerModal/index.tsx +190 -190
  51. package/src/components/stripePayment/index.tsx +253 -253
  52. package/src/components/stripePayment/style.css +59 -59
  53. package/src/components/ticketResale/index.tsx +56 -56
  54. package/src/components/ticketResaleModal/index.tsx +210 -210
  55. package/src/components/ticketResaleModal/style.css +28 -28
  56. package/src/components/ticketsContainer/PromoCodeSection.tsx +99 -99
  57. package/src/components/ticketsContainer/ReferralLogic.tsx +33 -33
  58. package/src/components/ticketsContainer/TicketRow.tsx +83 -83
  59. package/src/components/ticketsContainer/TicketsSection.tsx +81 -81
  60. package/src/components/ticketsContainer/index.tsx +430 -422
  61. package/src/components/ticketsContainer/style.css +181 -181
  62. package/src/components/ticketsContainer/utils.ts +11 -11
  63. package/src/components/timerWidget/index.tsx +70 -70
  64. package/src/components/timerWidget/style.css +26 -26
  65. package/src/components/waitingList/index.tsx +178 -178
  66. package/src/components/waitingList/style.css +26 -26
  67. package/src/env.ts +20 -19
  68. package/src/index.ts +13 -13
  69. package/src/normalizers/index.ts +45 -45
  70. package/src/types/billing-info-data.ts +37 -37
  71. package/src/types/payment-field.ts +7 -7
  72. package/src/types/referral-promotion.ts +7 -7
  73. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +59 -59
  74. package/src/utils/downloadPDF.tsx +30 -30
  75. package/src/utils/formikErrorFocus.ts +24 -24
  76. package/src/utils/getImage.ts +14 -14
  77. package/src/utils/getQueryVariable.ts +13 -13
  78. package/src/utils/index.ts +5 -5
  79. package/src/utils/setConfigs.ts +26 -26
  80. package/src/utils/showZero.tsx +10 -10
  81. package/src/validators/index.ts +20 -20
@@ -1,181 +1,181 @@
1
- body {
2
- margin: 0;
3
- padding: 0;
4
- }
5
- .get-tickets-page {
6
- width: 100%;
7
- }
8
- .event-detail__tier {
9
- padding: 17px 35px 20px;
10
- background-color: #fff;
11
- }
12
- .event-detail__tier-name {
13
- font-family: Inter-Bold;
14
- font-weight: 700;
15
- line-height: 1.3;
16
- text-transform: uppercase;
17
- padding-right: 20%;
18
- color: black;
19
- font-size: 0.85rem;
20
- font-family: 'Bebas Neue';
21
- letter-spacing: 0.2em;
22
- margin-top: 16px;
23
- margin-bottom: 8px;
24
- }
25
- .event-detail__tier-status {
26
- display: flex;
27
- width: 100%;
28
- flex-direction: row;
29
- flex-wrap: wrap;
30
- justify-content: space-between;
31
- align-items: center;
32
- margin-top: 8px;
33
- }
34
- .event-detail__tier-status.ticket-button {
35
- color: #fff;
36
- background-color: #212529;
37
- border-color: #212529;
38
- border-radius: 0;
39
- border: 3px solid black;
40
- letter-spacing: 0.2em;
41
- font-weight: 700;
42
- margin-bottom: 10px;
43
- line-height: 1.5;
44
- cursor: pointer;
45
- width: 200px;
46
- }
47
-
48
- .event-tickets-container {
49
- display: flex;
50
- align-items: center;
51
- justify-content: space-between;
52
- }
53
-
54
- .event-detail__tier-status.ticket-button.true {
55
- background-color: #c1c3c6;
56
- border-color: #afb0b1;
57
- }
58
- .event-detail__tier-price {
59
- font-family: Inter-Bold;
60
- font-size: 1.5rem;
61
- line-height: 1;
62
- color: #000;
63
- text-align: center;
64
- }
65
-
66
- .event-detail__tier-price p {
67
- margin: 0;
68
- }
69
-
70
- .event-detail__tier-price .fees {
71
- font-size: 14px;
72
- text-align: left;
73
- margin-top: 4px;
74
- }
75
-
76
- .event-detail__tier-price .old-price {
77
- margin-bottom: 5px;
78
- color: #f00;
79
- text-decoration: line-through;
80
- font-size: 1.3rem;
81
- }
82
-
83
- .alert-info {
84
- border: 1px solid #fbeed5;
85
- padding: 8px 15px;
86
- background-color: #d9edf7;
87
- border-color: #bce8f1;
88
- color: #3a87ad;
89
- font-size: 1em;
90
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
91
- border-radius: 4px;
92
- margin: 0px 35px;
93
- display: flex;
94
- justify-content: center;
95
- align-items: center;
96
- }
97
- .alert-info svg {
98
- margin-right: 4px;
99
- }
100
-
101
- .event-detail__tier-state {
102
- font-family: Inter-Bold;
103
- font-weight: 300;
104
- font-size: 0.75rem;
105
- line-height: 1;
106
- color: #30bc9d;
107
- text-align: right;
108
- text-transform: uppercase;
109
- }
110
-
111
- .event-detail__tier-state .ticket-not-started-message {
112
- color: #000000;
113
- text-transform: initial;
114
- width: 50px;
115
- text-align: left;
116
- }
117
-
118
- .promo-code-block input {
119
- font-size: 14px;
120
- padding: 1px 8px;
121
- }
122
-
123
- .book-button {
124
- background-color: #212529;
125
- display: block;
126
- text-align: center;
127
- width: 100%;
128
- height: 50px;
129
- font-size: 26px;
130
- color: #fff;
131
- cursor: pointer;
132
- background-color: #212529;
133
- border-color: #212529;
134
- border-radius: 0;
135
- border: 3px solid black;
136
- letter-spacing: 0.2em;
137
- font-weight: 700;
138
- line-height: 1.5;
139
- margin: 25px auto 10px auto;
140
- }
141
- .book-button:hover {
142
- background-color: #505050;
143
- border-color: #505050;
144
- }
145
- .loader-container {
146
- height: 100%;
147
- width: 100%;
148
- display: flex;
149
- justify-content: center;
150
- align-items: center;
151
- }
152
-
153
- .get-tickets-paper::-webkit-scrollbar {
154
- width: 5px;
155
- }
156
- .get-tickets-paper::-webkit-scrollbar-track {
157
- background: #f1f1f1;
158
- }
159
- .get-tickets-paper::-webkit-scrollbar-thumb {
160
- background: #888;
161
- }
162
- .get-tickets-paper::-webkit-scrollbar-thumb:hover {
163
- background: #555;
164
- }
165
- .get-tickets .get-tickets__selectbox {
166
- width: 100%;
167
- }
168
-
169
- .disabled {
170
- user-select: none;
171
- pointer-events: none;
172
- }
173
-
174
- .hidden {
175
- display: none;
176
- }
177
-
178
- .event-closed-message {
179
- font-family: 'Bebas Neue';
180
- letter-spacing: 0.5px;
181
- }
1
+ body {
2
+ margin: 0;
3
+ padding: 0;
4
+ }
5
+ .get-tickets-page {
6
+ width: 100%;
7
+ }
8
+ .event-detail__tier {
9
+ padding: 17px 35px 20px;
10
+ background-color: #fff;
11
+ }
12
+ .event-detail__tier-name {
13
+ font-family: Inter-Bold;
14
+ font-weight: 700;
15
+ line-height: 1.3;
16
+ text-transform: uppercase;
17
+ padding-right: 20%;
18
+ color: black;
19
+ font-size: 0.85rem;
20
+ font-family: 'Bebas Neue';
21
+ letter-spacing: 0.2em;
22
+ margin-top: 16px;
23
+ margin-bottom: 8px;
24
+ }
25
+ .event-detail__tier-status {
26
+ display: flex;
27
+ width: 100%;
28
+ flex-direction: row;
29
+ flex-wrap: wrap;
30
+ justify-content: space-between;
31
+ align-items: center;
32
+ margin-top: 8px;
33
+ }
34
+ .event-detail__tier-status.ticket-button {
35
+ color: #fff;
36
+ background-color: #212529;
37
+ border-color: #212529;
38
+ border-radius: 0;
39
+ border: 3px solid black;
40
+ letter-spacing: 0.2em;
41
+ font-weight: 700;
42
+ margin-bottom: 10px;
43
+ line-height: 1.5;
44
+ cursor: pointer;
45
+ width: 200px;
46
+ }
47
+
48
+ .event-tickets-container {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ }
53
+
54
+ .event-detail__tier-status.ticket-button.true {
55
+ background-color: #c1c3c6;
56
+ border-color: #afb0b1;
57
+ }
58
+ .event-detail__tier-price {
59
+ font-family: Inter-Bold;
60
+ font-size: 1.5rem;
61
+ line-height: 1;
62
+ color: #000;
63
+ text-align: center;
64
+ }
65
+
66
+ .event-detail__tier-price p {
67
+ margin: 0;
68
+ }
69
+
70
+ .event-detail__tier-price .fees {
71
+ font-size: 14px;
72
+ text-align: left;
73
+ margin-top: 4px;
74
+ }
75
+
76
+ .event-detail__tier-price .old-price {
77
+ margin-bottom: 5px;
78
+ color: #f00;
79
+ text-decoration: line-through;
80
+ font-size: 1.3rem;
81
+ }
82
+
83
+ .alert-info {
84
+ border: 1px solid #fbeed5;
85
+ padding: 8px 15px;
86
+ background-color: #d9edf7;
87
+ border-color: #bce8f1;
88
+ color: #3a87ad;
89
+ font-size: 1em;
90
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
91
+ border-radius: 4px;
92
+ margin: 0px 35px;
93
+ display: flex;
94
+ justify-content: center;
95
+ align-items: center;
96
+ }
97
+ .alert-info svg {
98
+ margin-right: 4px;
99
+ }
100
+
101
+ .event-detail__tier-state {
102
+ font-family: Inter-Bold;
103
+ font-weight: 300;
104
+ font-size: 0.75rem;
105
+ line-height: 1;
106
+ color: #30bc9d;
107
+ text-align: right;
108
+ text-transform: uppercase;
109
+ }
110
+
111
+ .event-detail__tier-state .ticket-not-started-message {
112
+ color: #000000;
113
+ text-transform: initial;
114
+ width: 50px;
115
+ text-align: left;
116
+ }
117
+
118
+ .promo-code-block input {
119
+ font-size: 14px;
120
+ padding: 1px 8px;
121
+ }
122
+
123
+ .book-button {
124
+ background-color: #212529;
125
+ display: block;
126
+ text-align: center;
127
+ width: 100%;
128
+ height: 50px;
129
+ font-size: 26px;
130
+ color: #fff;
131
+ cursor: pointer;
132
+ background-color: #212529;
133
+ border-color: #212529;
134
+ border-radius: 0;
135
+ border: 3px solid black;
136
+ letter-spacing: 0.2em;
137
+ font-weight: 700;
138
+ line-height: 1.5;
139
+ margin: 25px auto 10px auto;
140
+ }
141
+ .book-button:hover {
142
+ background-color: #505050;
143
+ border-color: #505050;
144
+ }
145
+ .loader-container {
146
+ height: 100%;
147
+ width: 100%;
148
+ display: flex;
149
+ justify-content: center;
150
+ align-items: center;
151
+ }
152
+
153
+ .get-tickets-paper::-webkit-scrollbar {
154
+ width: 5px;
155
+ }
156
+ .get-tickets-paper::-webkit-scrollbar-track {
157
+ background: #f1f1f1;
158
+ }
159
+ .get-tickets-paper::-webkit-scrollbar-thumb {
160
+ background: #888;
161
+ }
162
+ .get-tickets-paper::-webkit-scrollbar-thumb:hover {
163
+ background: #555;
164
+ }
165
+ .get-tickets .get-tickets__selectbox {
166
+ width: 100%;
167
+ }
168
+
169
+ .disabled {
170
+ user-select: none;
171
+ pointer-events: none;
172
+ }
173
+
174
+ .hidden {
175
+ display: none;
176
+ }
177
+
178
+ .event-closed-message {
179
+ font-family: 'Bebas Neue';
180
+ letter-spacing: 0.5px;
181
+ }
@@ -1,11 +1,11 @@
1
- export const getTicketSelectOptions = (
2
- maxCount: number = 10,
3
- minCount: number = 1,
4
- multiplier: number = 1
5
- ) => {
6
- const options = [{ label: 0, value: 0 }]
7
- for (let i = minCount; i <= Math.min(50, maxCount); i += multiplier) {
8
- options.push({ label: i, value: i })
9
- }
10
- return options
11
- }
1
+ export const getTicketSelectOptions = (
2
+ maxCount: number = 10,
3
+ minCount: number = 1,
4
+ multiplier: number = 1
5
+ ) => {
6
+ const options = [{ label: 0, value: 0 }]
7
+ for (let i = minCount; i <= Math.min(50, maxCount); i += multiplier) {
8
+ options.push({ label: i, value: i })
9
+ }
10
+ return options
11
+ }
@@ -1,70 +1,70 @@
1
- import React, { useState } from 'react'
2
- import Countdown from 'react-countdown'
3
- import { showZero } from '../../utils/showZero'
4
- import './style.css'
5
-
6
- export interface ITimerWidgetPage {
7
- expires_at: number;
8
- buyLoading?: boolean;
9
- onCountdownFinish?: () => void;
10
- }
11
-
12
- export interface IRenderer {
13
- minutes: number;
14
- seconds: number;
15
- completed: number;
16
- handleCountdownFinish: () => void;
17
- }
18
-
19
- const TimerWidget = ({
20
- expires_at,
21
- buyLoading,
22
- onCountdownFinish = () => {},
23
- }: ITimerWidgetPage) => {
24
- const [showTimer, setShowTimer] = useState(true)
25
-
26
- const handleCountdownFinish = () => {
27
- setShowTimer(false)
28
- if (!buyLoading) {
29
- onCountdownFinish()
30
- }
31
- }
32
-
33
- const renderer = ({
34
- minutes,
35
- seconds,
36
- completed,
37
- handleCountdownFinish,
38
- }: IRenderer) => {
39
- if (completed) {
40
- handleCountdownFinish()
41
- return null
42
- }
43
- return (
44
- <span>
45
- {showZero(minutes)}:{showZero(seconds)}
46
- </span>
47
- )
48
- }
49
-
50
- return showTimer && !!expires_at ? (
51
- <div className="timer">
52
- <div className="toast-message">
53
- <p>Please complete your purchase before the timer reaches zero.</p>
54
- <p className="countdown">
55
- <Countdown
56
- date={Date.now() + expires_at * 1000}
57
- renderer={(props: any) =>
58
- renderer({
59
- ...props,
60
- handleCountdownFinish,
61
- })
62
- }
63
- />
64
- </p>
65
- </div>
66
- </div>
67
- ) : null
68
- }
69
-
70
- export default TimerWidget
1
+ import React, { useState } from 'react'
2
+ import Countdown from 'react-countdown'
3
+ import { showZero } from '../../utils/showZero'
4
+ import './style.css'
5
+
6
+ export interface ITimerWidgetPage {
7
+ expires_at: number;
8
+ buyLoading?: boolean;
9
+ onCountdownFinish?: () => void;
10
+ }
11
+
12
+ export interface IRenderer {
13
+ minutes: number;
14
+ seconds: number;
15
+ completed: number;
16
+ handleCountdownFinish: () => void;
17
+ }
18
+
19
+ const TimerWidget = ({
20
+ expires_at,
21
+ buyLoading,
22
+ onCountdownFinish = () => {},
23
+ }: ITimerWidgetPage) => {
24
+ const [showTimer, setShowTimer] = useState(true)
25
+
26
+ const handleCountdownFinish = () => {
27
+ setShowTimer(false)
28
+ if (!buyLoading) {
29
+ onCountdownFinish()
30
+ }
31
+ }
32
+
33
+ const renderer = ({
34
+ minutes,
35
+ seconds,
36
+ completed,
37
+ handleCountdownFinish,
38
+ }: IRenderer) => {
39
+ if (completed) {
40
+ handleCountdownFinish()
41
+ return null
42
+ }
43
+ return (
44
+ <span>
45
+ {showZero(minutes)}:{showZero(seconds)}
46
+ </span>
47
+ )
48
+ }
49
+
50
+ return showTimer && !!expires_at ? (
51
+ <div className="timer">
52
+ <div className="toast-message">
53
+ <p>Please complete your purchase before the timer reaches zero.</p>
54
+ <p className="countdown">
55
+ <Countdown
56
+ date={Date.now() + expires_at * 1000}
57
+ renderer={(props: any) =>
58
+ renderer({
59
+ ...props,
60
+ handleCountdownFinish,
61
+ })
62
+ }
63
+ />
64
+ </p>
65
+ </div>
66
+ </div>
67
+ ) : null
68
+ }
69
+
70
+ export default TimerWidget
@@ -1,26 +1,26 @@
1
- .timer {
2
- position: absolute;
3
- pointer-events: auto;
4
- background-color: #000000;
5
- overflow: hidden;
6
- margin: 0 0 6px;
7
- padding: 15px 15px 15px 50px;
8
- width: 300px;
9
- -moz-border-radius: 3px;
10
- -webkit-border-radius: 3px;
11
- border-radius: 3px;
12
- background-position: 15px center;
13
- background-repeat: no-repeat;
14
- -moz-box-shadow: 0 0 12px #999;
15
- -webkit-box-shadow: 0 0 12px #999;
16
- box-shadow: 0 0 12px #999;
17
- max-width: 300px;
18
- color: #fff;
19
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=);
20
- right: 15px;
21
- }
22
-
23
- .timer .countdown {
24
- font-weight: bold;
25
- margin-top: 10px;
26
- }
1
+ .timer {
2
+ position: absolute;
3
+ pointer-events: auto;
4
+ background-color: #000000;
5
+ overflow: hidden;
6
+ margin: 0 0 6px;
7
+ padding: 15px 15px 15px 50px;
8
+ width: 300px;
9
+ -moz-border-radius: 3px;
10
+ -webkit-border-radius: 3px;
11
+ border-radius: 3px;
12
+ background-position: 15px center;
13
+ background-repeat: no-repeat;
14
+ -moz-box-shadow: 0 0 12px #999;
15
+ -webkit-box-shadow: 0 0 12px #999;
16
+ box-shadow: 0 0 12px #999;
17
+ max-width: 300px;
18
+ color: #fff;
19
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=);
20
+ right: 15px;
21
+ }
22
+
23
+ .timer .countdown {
24
+ font-weight: bold;
25
+ margin-top: 10px;
26
+ }