station 0.0.120 → 0.0.125

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +2 -2
  3. data/lib/nexmo_developer/Gemfile +8 -8
  4. data/lib/nexmo_developer/Gemfile.lock +132 -123
  5. data/lib/nexmo_developer/app/assets/stylesheets/application.css +8 -1
  6. data/lib/nexmo_developer/app/controllers/static_controller.rb +1 -0
  7. data/lib/nexmo_developer/app/presenters/code_snippets_home_presenter.rb +26 -0
  8. data/lib/nexmo_developer/app/presenters/footer.rb +2 -3
  9. data/lib/nexmo_developer/app/presenters/header.rb +0 -31
  10. data/lib/nexmo_developer/app/views/contribute/code-snippets/how-to-update-code-snippets.md +1 -1
  11. data/lib/nexmo_developer/app/views/contribute/code-snippets/sample-code-snippet.md +1 -1
  12. data/lib/nexmo_developer/app/views/layouts/application.html.erb +0 -1
  13. data/lib/nexmo_developer/app/views/layouts/documentation-index.html.erb +0 -1
  14. data/lib/nexmo_developer/app/views/layouts/landing.html.erb +4 -2
  15. data/lib/nexmo_developer/app/views/layouts/page.html.erb +0 -1
  16. data/lib/nexmo_developer/app/views/layouts/partials/_code_snippets_home.html.erb +38 -0
  17. data/lib/nexmo_developer/app/views/layouts/partials/_footer.html.erb +33 -32
  18. data/lib/nexmo_developer/app/views/layouts/partials/_header.html.erb +90 -31
  19. data/lib/nexmo_developer/app/views/layouts/partials/_locale_switcher.html.erb +3 -4
  20. data/lib/nexmo_developer/app/webpacker/javascript/components/concatenation/character_counter.js +5 -3
  21. data/lib/nexmo_developer/app/webpacker/javascript/components/search/Search.vue +80 -19
  22. data/lib/nexmo_developer/app/webpacker/javascript/sidenav/index.js +0 -13
  23. data/lib/nexmo_developer/app/webpacker/javascript/topnav/index.js +33 -0
  24. data/lib/nexmo_developer/app/webpacker/javascript/volta_tabbed_examples/index.js +3 -1
  25. data/lib/nexmo_developer/app/webpacker/packs/application.js +15 -3
  26. data/lib/nexmo_developer/app/webpacker/stylesheets/application.scss +4 -0
  27. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_core.scss +0 -2
  28. data/lib/nexmo_developer/app/webpacker/stylesheets/custom/_landing.scss +500 -0
  29. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_footer.scss +45 -23
  30. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_header.scss +161 -138
  31. data/lib/nexmo_developer/app/webpacker/stylesheets/layout/_search.scss +2 -5
  32. data/lib/nexmo_developer/app/webpacker/stylesheets/objects/_navigation.scss +0 -2
  33. data/lib/nexmo_developer/public/vonage_developer_logo.svg +26 -0
  34. data/lib/nexmo_developer/version.rb +1 -1
  35. data/package.json +32 -31
  36. data/station.gemspec +10 -10
  37. data/yarn.lock +1328 -1181
  38. metadata +61 -56
  39. data/lib/nexmo_developer/app/presenters/topnav.rb +0 -23
  40. data/lib/nexmo_developer/app/presenters/topnav_item.rb +0 -19
@@ -66,16 +66,18 @@ class CharacterCounter {
66
66
  let index = 0;
67
67
  let messages = [];
68
68
  let text = this.text;
69
+ let split = this.getTextSize(text) > maxSize;
69
70
  while(index <= this.text.length) {
70
- let sms = this.getSMS(text, maxSize);
71
+ let sms = this.getSMS(text, maxSize, split);
71
72
  messages.push(sms);
72
73
  text = text.slice(sms.length);
73
74
  index += sms.length + 1;
75
+ split = this.getTextSize(text) + GSM_METADATA_SIZE > maxSize;
74
76
  }
75
77
  return messages;
76
78
  }
77
79
 
78
- getSMS(text, maxSize) {
80
+ getSMS(text, maxSize, lastSplit) {
79
81
  let index = 0, currentSize = 0;
80
82
  const maxSizeWithMeta = maxSize - GSM_METADATA_SIZE;
81
83
 
@@ -83,7 +85,7 @@ class CharacterCounter {
83
85
  currentSize += this.getCharSize(text[index]);
84
86
  index += 1;
85
87
  }
86
- if (this.getTextSize(text.slice(index)) + currentSize <= maxSize && text.length - index <= GSM_METADATA_LENGTH) {
88
+ if (!lastSplit) {
87
89
  index = text.length;
88
90
  }
89
91
  return text.slice(0, index);
@@ -1,27 +1,35 @@
1
1
  <template>
2
- <div>
3
- <div>
4
- <div class="Vlt-composite">
5
- <div class="Vlt-composite__prepend Vlt-composite__prepend--icon">
6
- <svg><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-search"/></svg>
7
- </div>
8
- <div class="Vlt-input Vlt-input--round">
9
- <input
10
- v-model="query"
11
- name="query"
12
- placeholder="Search"
13
- id="searchbox-test"
14
- type="text"
15
- autoComplete="off"
16
- v-on:keydown.esc="onEscDownHandler"
17
- v-on:input="onInputHandler"
18
- ></input>
2
+ <div class="Wrapper">
3
+ <div class="Wrapper-content">
4
+ <svg class="Vlt-icon Vlt-grey Nxd-search-icon">
5
+ <use xlink:href="/symbol/volta-icons.svg#Vlt-icon-search-full" />
6
+ </svg>
7
+
8
+
9
+ <div class="Nxd-search-input">
10
+ <div class="Vlt-composite Vlt-composite--appendedicon">
11
+ <div class="Vlt-composite__prepend Vlt-composite__prepend--icon">
12
+ <svg><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-search"/></svg>
13
+ </div>
14
+ <div class="Vlt-input">
15
+ <input
16
+ v-model="query"
17
+ name="query"
18
+ placeholder="Search"
19
+ id="searchbox-test"
20
+ type="text"
21
+ autoComplete="off"
22
+ v-on:keydown.esc="onEscDownHandler"
23
+ v-on:input="onInputHandler"
24
+ ></input>
25
+ </div>
26
+ <div class="Vlt-composite__append Vlt-composite__append--icon Nxd-search-close">
27
+ <svg><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-cross-bold"/></svg>
28
+ </div>
19
29
  </div>
20
30
  </div>
21
31
  </div>
22
32
 
23
- <svg v-show="query" class="Nxd-search__clear"><use xlink:href="/symbol/volta-icons.svg#Vlt-icon-cross"/></svg>
24
-
25
33
  <div v-show="showResults" class="Nxd-search">
26
34
  <div class="Nxd-search__wrapper">
27
35
  <div v-show="loading" class="spinner">
@@ -76,11 +84,17 @@ export default {
76
84
  mounted: function() {
77
85
  if (document.querySelector('.Nxd-template')) {
78
86
  document.querySelector('.Nxd-template').addEventListener('click', this.onClickOutside.bind(this));
87
+ } else if (document.querySelector('.Adp-landing')) {
88
+ document.querySelector('.Adp-landing .wrapper').addEventListener('click', this.onClickOutside.bind(this));
79
89
  }
90
+ this.$el.querySelector('.Nxd-search-icon').addEventListener('click', this.handleSearchToggle.bind(this));
91
+ this.$el.querySelector('.Nxd-search-close').addEventListener('click', this.handleSearchToggle.bind(this));
80
92
  },
81
93
  onDestroy: function() {
82
94
  if (document.querySelector('.Nxd-template')) {
83
95
  document.querySelector('.Nxd-template').removeEventListener('click', this.onClickOutside.bind(this));
96
+ } else if (document.querySelector('.Adp-landing')) {
97
+ document.querySelector('.Adp-landing .wrapper').removeEventListener('click', this.onClickOutside.bind(this));
84
98
  }
85
99
  },
86
100
  computed: {
@@ -113,6 +127,22 @@ export default {
113
127
  this.expanded = false;
114
128
  }
115
129
  },
130
+
131
+ handleSearchToggle: function(event) {
132
+ event.preventDefault();
133
+ event.stopPropagation();
134
+
135
+ this.toggleSearch();
136
+ },
137
+
138
+ toggleSearch: function(hide) {
139
+ let search = this.$el.querySelector('.Nxd-search-input');
140
+ if (hide === true || search.style.display == 'flex') {
141
+ search.style.display = 'none';
142
+ } else {
143
+ search.style.display = 'flex';
144
+ }
145
+ },
116
146
  onEscDownHandler: function(event) {
117
147
  if (!this.analyticsTriggered && this.query !== '') {
118
148
  this.triggerAnalyticalSearch();
@@ -160,6 +190,7 @@ export default {
160
190
  searchPromise.then((response) => {
161
191
  this.results = response['results'];
162
192
  this.loading = false;
193
+ this.toggleSearch(true);
163
194
  })
164
195
  }
165
196
  },
@@ -179,4 +210,34 @@ export default {
179
210
  }
180
211
  </script>
181
212
  <style scoped>
213
+ .Wrapper {
214
+ top: 55px;
215
+ right: 13px;
216
+ display: flex;
217
+ position: absolute;
218
+ }
219
+ .Wrapper-content {
220
+ display: flex;
221
+ flex-direction: column;
222
+ align-items: flex-end;
223
+ }
224
+ .Nxd-search-input {
225
+ display: none;
226
+ width: 756px;
227
+ padding: 20px 30px;
228
+ background: white;
229
+ height: 87px;
230
+ border-radius: 8px;
231
+ margin-top: 5px;
232
+ z-index: 10;
233
+ }
234
+ .Vlt-composite {
235
+ width: 100%;
236
+ }
237
+ .Nxd-search-icon {
238
+ margin-right: 10px;
239
+ }
240
+ #searchbox-test {
241
+ border: 1px solid white;
242
+ }
182
243
  </style>
@@ -168,7 +168,6 @@ class SidenavItem {
168
168
  export default class Sidenav {
169
169
  constructor(domNode) {
170
170
  this.domNode = document.getElementById('sidenav');
171
- this.mobileTrigger = document.getElementById('Vlt-sidenav-mobile-trigger');
172
171
  this.container = document.getElementById('Vlt-sidenav');
173
172
  this.collapseTrigger = document.getElementById('Vlt-sidenav-collapse-trigger');
174
173
 
@@ -177,15 +176,11 @@ export default class Sidenav {
177
176
  this.setActiveItem();
178
177
  this.expandActiveMenu();
179
178
  this.setupListeners();
180
- } else {
181
- this.mobileTrigger.style.display = 'none';
182
179
  }
183
180
  }
184
181
 
185
182
  setupListeners() {
186
183
  this.domNode.addEventListener('menuClosed', this.closeOpenedMenu.bind(this));
187
- this.mobileTrigger.addEventListener('click', this.mobileHandler.bind(this));
188
- this.mobileTrigger.addEventListener('touchstart', this.mobileHandler.bind(this));
189
184
  this.collapseTrigger.addEventListener('click', this.collapseHandler.bind(this));
190
185
 
191
186
  document.querySelector('body').addEventListener('click', this.closeMobileMenu.bind(this));
@@ -236,14 +231,6 @@ export default class Sidenav {
236
231
  });
237
232
  }
238
233
 
239
- mobileHandler(event) {
240
- if (!this.container.classList.contains('Vlt-sidenav_visible')) {
241
- this.container.classList.add('Vlt-sidenav_visible');
242
- document.body.classList.add('Vlt-body--mobile-menu-open');
243
- event.stopPropagation();
244
- }
245
- }
246
-
247
234
  collapseHandler(event) {
248
235
  event.preventDefault();
249
236
  event.stopPropagation();
@@ -0,0 +1,33 @@
1
+ export default class Topnav {
2
+ constructor() {
3
+ this.domNode = document.getElementById('subnav');
4
+ this.backdrop = this.domNode.querySelector('.Vlt-header__backdrop');
5
+
6
+ this.setupListeners();
7
+ }
8
+
9
+ setupListeners() {
10
+ this.domNode.querySelectorAll('.Vlt-tabs__link-menu').forEach((menu) => {
11
+ menu.addEventListener('click', this.toggleMenu.bind(this));
12
+ });
13
+
14
+ this.domNode.querySelector('.Adp-header__hamburger').addEventListener('click', this.toggleMobileMenu.bind(this));
15
+ }
16
+
17
+ toggleMobileMenu() {
18
+ this.backdrop.classList.toggle('Vlt-header__backdrop-active');
19
+ this.domNode.querySelector('.Adp-header__sub__menu').classList.toggle('Vlt-M-plus');
20
+ }
21
+
22
+ toggleMenu(event) {
23
+ let menu = event.target.closest('.Vlt-tabs__link-menu');
24
+ let active = menu.querySelector('.Vlt-topmenu').classList.contains('Vlt-topmenu-active');
25
+
26
+ this.backdrop.classList.toggle('Vlt-header__backdrop-active', !active);
27
+
28
+ this.domNode.querySelectorAll('.Vlt-topmenu').forEach((elem) => {
29
+ elem.classList.remove('Vlt-topmenu-active');
30
+ });
31
+ menu.querySelector('.Vlt-topmenu').classList.toggle('Vlt-topmenu-active', !active);
32
+ }
33
+ }
@@ -68,6 +68,8 @@ export default class VoltaTabbedExamples {
68
68
  }
69
69
 
70
70
  onTabClick(event) {
71
+ if (document.body.classList.contains('Adp-homepage')) { return; }
72
+
71
73
  const target = $(event.currentTarget);
72
74
  // Prevent nested tabs from changing the url
73
75
  if ($(event.target).parents('.Vlt-tabs').length > 1) { return; }
@@ -118,7 +120,7 @@ export default class VoltaTabbedExamples {
118
120
  if (tabId !== "") {
119
121
  let tab = document.querySelector(`.Vlt-tabs__link${tabId}`);
120
122
  if (tab) {
121
- tab.focus();
123
+ tab.focus({ preventScroll: true });
122
124
  tab.click();
123
125
  }
124
126
  }
@@ -29,8 +29,8 @@ require('@googlemaps/google-maps-services-js');
29
29
  import Volta from "../javascript/volta/volta.js"
30
30
 
31
31
  import Vue from 'vue'
32
-
33
32
  import mermaid from 'mermaid'
33
+ import Glide, { Autoplay, Breakpoints, Controls } from '@glidejs/glide/dist/glide.modular.esm'
34
34
 
35
35
  import { TweenLite, CSSPlugin } from 'gsap'
36
36
  import GithubCards from '../javascript/github_cards'
@@ -45,6 +45,7 @@ import Concatenation from '../javascript/components/concatenation/Concatenation.
45
45
  import APIStatus from '../javascript/api_status'
46
46
  import CodeSnippetEvents from '../javascript/code_snippet_events'
47
47
  import Sidenav from '../javascript/sidenav/index'
48
+ import Topnav from '../javascript/topnav/index'
48
49
  import Careers from '../javascript/careers'
49
50
  import LocaleSwitcher from '../javascript/locale_switcher'
50
51
 
@@ -56,11 +57,11 @@ $(document).ready(function() {
56
57
  new VoltaTabbedExamples
57
58
  new Format
58
59
  APIStatus()
59
- Scroll()
60
60
  CodeSnippetEvents()
61
61
  new Sidenav()
62
62
  new Careers
63
63
  new LocaleSwitcher
64
+ new Topnav
64
65
 
65
66
  if (document.getElementById('jwt-generator-app')) {
66
67
  new Vue({
@@ -140,5 +141,16 @@ $(document).ready(function() {
140
141
  themeCSS: '.actor { fill: #BDD5EA; stroke: #81B1DB; }',
141
142
  htmlLabels: true
142
143
  });
143
- });
144
144
 
145
+ if (document.querySelector('.glide')) {
146
+ document.querySelectorAll('.glide pre').forEach((elem) => {
147
+ //disable copy-to-clipboard for code-snippets in hero
148
+ elem.classList.add('Vlt-prism--copy-disabled')
149
+ })
150
+
151
+ const slider = new Glide('.glide').mount({ Autoplay, Breakpoints, Controls });
152
+
153
+ // Unfortunately, Autoplay doesn't work so we got to trigger it manually.
154
+ setInterval(() => { slider.go('>'); }, 8000);
155
+ }
156
+ });
@@ -27,9 +27,13 @@
27
27
  // this should be imported last
28
28
  @import '~@vonagevolta/volta2/scss/volta-prism';
29
29
 
30
+ @import "@glidejs/glide/src/assets/sass/glide.core";
31
+ @import "@glidejs/glide/src/assets/sass/glide.theme";
32
+
30
33
  /// NDP styles
31
34
  @import "./custom/variables";
32
35
  @import "./custom/core";
36
+ @import "./custom/landing";
33
37
  @import "./custom/typography";
34
38
  @import "./custom/syntax";
35
39
  @import "./custom/mixins";
@@ -33,7 +33,6 @@ em {
33
33
  .Nxd-main {
34
34
  outline: none;
35
35
  height: calc(100vh - 150px);
36
- margin-top: 150px;
37
36
  }
38
37
 
39
38
  @media #{'only screen and (min-width: #{$small-screen} ) and (max-width: #{$big-screen})'} {
@@ -45,7 +44,6 @@ em {
45
44
  }
46
45
 
47
46
  .Nxd-landing-main {
48
- margin-top: 150px;
49
47
  padding: $unit3 $unit4;
50
48
  }
51
49
 
@@ -0,0 +1,500 @@
1
+ .Adp-homepage {
2
+ background: $grey-900;
3
+ .row {
4
+ padding: 20px 95px;
5
+
6
+ @media #{$S-only} {
7
+ padding: 20px 5px;
8
+ }
9
+ }
10
+
11
+ .container {
12
+ margin: 0 auto;
13
+ padding: 0 20px;
14
+
15
+ @media #{$S-only} {
16
+ margin: 24px auto;
17
+ }
18
+ }
19
+
20
+ .Adp-hero-section p > a {
21
+ color: #b77ef9 !important;
22
+ }
23
+
24
+ .Adp-hero-section__get-started {
25
+ margin-right: 24px;
26
+ }
27
+
28
+ .Adp-hero-section__title {
29
+ padding: 31px 0 0 0;
30
+ }
31
+
32
+ .Vlt-btn+.Vlt-btn {
33
+ margin-left: 0px;
34
+ }
35
+
36
+ .Adp-use-cases {
37
+ position: relative;
38
+ -webkit-transform-style: preserve-3d;
39
+ -webkit-backface-visibility: hidden;
40
+
41
+ &__background {
42
+ position: absolute;
43
+ width: 100%;
44
+ height: 285px;
45
+ left: 0px;
46
+ top: 85px;
47
+ background: linear-gradient(90deg, #7FC6F4 4.86%, #D5279B 96.11%);
48
+ mix-blend-mode: hard-light;
49
+ opacity: 0.4;
50
+ }
51
+
52
+ .Vlt-tabs__header {
53
+ border-bottom: 1px solid $grey-700;
54
+ }
55
+
56
+ .Vlt-tabs__link:focus {
57
+ background-color: inherit;
58
+ }
59
+
60
+ .Vlt-tabs__link_active:after {
61
+ background: $white;
62
+ }
63
+
64
+ &__all {
65
+ margin: 20px auto 0;
66
+
67
+ svg, a {
68
+ color: #B77EF9 !important;
69
+ fill: #B77EF9 !important;
70
+ }
71
+ }
72
+
73
+ &__all-mobile {
74
+ width: 100%;
75
+ }
76
+ }
77
+
78
+ .Adp-use-cases__card {
79
+ background: rgba(255, 255, 255, 0.1);
80
+ backdrop-filter: blur(25px);
81
+ border-radius: 16px;
82
+ padding: 24px 24px 0 24px;
83
+ height: 100%;
84
+
85
+ .Vlt-card__content {
86
+ min-height: 257px;
87
+ display: flex;
88
+ flex-direction: column;
89
+ justify-content: space-between;
90
+ height: 100%;
91
+
92
+ @media #{$M-plus} {
93
+ min-height: 288px;
94
+ }
95
+ }
96
+
97
+ p {
98
+ margin-bottom: 0px;
99
+ }
100
+
101
+ &-title {
102
+ padding: 0 0 14px 0;
103
+ display: flex;
104
+ }
105
+
106
+ &-blurb {
107
+ padding: 0 0 14px 0;
108
+ display: flex;
109
+ }
110
+
111
+ &-tags {
112
+ padding: 0 0 16px 0;
113
+ display: flex;
114
+ flex-wrap: wrap;
115
+
116
+ p {
117
+ color: $grey-300;
118
+
119
+ &:nth-of-type(1) {
120
+ margin-right: 24px;
121
+ }
122
+ }
123
+ }
124
+
125
+ &-image {
126
+ background: rgb(183, 126, 249);
127
+ border-radius: 8px 8px 0 0;
128
+ display: flex;
129
+
130
+ img {
131
+ border-radius: 8px 8px 0 0;
132
+ }
133
+ }
134
+ }
135
+
136
+ .Adp-listing {
137
+ position: relative;
138
+ h3 {
139
+ margin-bottom: 32px;
140
+ }
141
+
142
+ @media #{$S-only} {
143
+ .Vlt-btn--primary {
144
+ width: 100%;
145
+ }
146
+ }
147
+
148
+ .Vlt-col--3of3 {
149
+ display: flex;
150
+ justify-content: center;
151
+ }
152
+
153
+ &__platform {
154
+ .Vlt-grid {
155
+ @media #{$M-plus} {
156
+ padding: 40px 80px;
157
+ }
158
+ }
159
+ .Adp-listing__item {
160
+ margin-bottom: 0px;
161
+ }
162
+ }
163
+
164
+ &__background {
165
+ position: absolute;
166
+ width: 100%;
167
+ top: 0;
168
+ left: 0;
169
+ background: linear-gradient(90deg, #7FC6F4 4.86%, #8728FB 96.11%);
170
+ mix-blend-mode: hard-light;
171
+ opacity: 0.2;
172
+ }
173
+
174
+ &__background-glass {
175
+ position: absolute;
176
+ width: 100%;
177
+ top: 0;
178
+ left: 0;
179
+ background: rgba(255, 255, 255, 0.1);
180
+ backdrop-filter: blur(25px);
181
+ border-radius: 16px;
182
+
183
+ @media #{$S-only} {
184
+ padding: 0 15px;
185
+ }
186
+ }
187
+ }
188
+
189
+ .Adp-listing__item {
190
+ display: flex;
191
+ flex-direction: column;
192
+ margin-bottom: 24px;
193
+
194
+ &-title {
195
+ display: flex;
196
+
197
+ svg {
198
+ margin-right: 16px;
199
+ }
200
+ }
201
+
202
+ &-links {
203
+ display: flex;
204
+ flex-direction: column;
205
+ height: 100%;
206
+ padding-bottom: 24px;
207
+
208
+ &-border {
209
+ border-bottom: 1px solid $grey-700;
210
+ }
211
+
212
+ a {
213
+ justify-content: space-between;
214
+ display: flex;
215
+ margin: 0 0 8px 40px;
216
+ }
217
+ }
218
+ }
219
+
220
+ .Adp-brand-listing {
221
+ background: linear-gradient(90deg, #7FC6F4 4.86%, #8728FB 96.11%);
222
+
223
+ .container {
224
+
225
+ @media #{$S-only} {
226
+ margin: 0px auto;
227
+ }
228
+ }
229
+
230
+ @media #{$M-plus} {
231
+ height: 88px;
232
+ }
233
+
234
+ .Vlt-grid {
235
+ justify-content: space-between;
236
+ align-items: center;
237
+
238
+ // overrides volta's style, they don't work
239
+ @media #{$S-only} {
240
+ .Vlt-col--S-1of2 {
241
+ display: flex;
242
+ justify-content: center;
243
+ flex: 0 0 50%;
244
+ }
245
+ }
246
+ }
247
+
248
+ .row {
249
+ padding: 16px 95px;
250
+
251
+ @media #{$S-only} {
252
+ padding: 16px 0;
253
+ }
254
+ }
255
+ }
256
+
257
+ .Adp-documentation {
258
+ .Adp-listing__item-links {
259
+ @media #{$S-only} {
260
+ border-bottom: 1px solid $grey-700;
261
+ }
262
+ }
263
+ }
264
+
265
+ .Adp-platform__background {
266
+ background: linear-gradient(90deg, #7FC6F4 4.86%, #8728FB 96.11%);
267
+ mix-blend-mode: hard-light;
268
+ opacity: 0.2;
269
+ position: absolute;
270
+ width: 100%;
271
+ height: 285px;
272
+ top: 78px;
273
+ left: 0px;
274
+
275
+ &-glass {
276
+ @media #{$M-plus} {
277
+ background: rgba(255, 255, 255, 0.1);
278
+ backdrop-filter: blur(25px);
279
+ border-radius: 16px;
280
+ }
281
+
282
+ @media #{$S-only} {
283
+ padding: 0 15px;
284
+ }
285
+ }
286
+ }
287
+
288
+ .Adp-listing__platform {
289
+ .Adp-listing__item {
290
+ @media #{$S-only} {
291
+ background: rgba(255, 255, 255, 0.1);
292
+ backdrop-filter: blur(25px);
293
+ border-radius: 16px;
294
+ padding: 15px;
295
+
296
+ .Adp-listing__item-links {
297
+ padding: 0;
298
+ }
299
+ }
300
+ }
301
+ }
302
+
303
+ .Adp-video-listing {
304
+ .Vlt-col {
305
+ display: flex;
306
+ justify-content: center;
307
+ }
308
+
309
+ .Vlt-btn {
310
+ @media #{$S-only} {
311
+ width: 100%;
312
+ }
313
+ }
314
+ }
315
+
316
+ .Adp-hero-section__code-background {
317
+ background: #871EFF;
318
+ border-radius: 0 0 0 40px;
319
+ height: 360px;
320
+ z-index: -1;
321
+ width: 49vw;
322
+ left: -5px;
323
+ position: absolute;
324
+ top: -20px;
325
+
326
+ @media #{$S-only} {
327
+ width: 100vw;
328
+ left: 0;
329
+ margin-top: 16px;
330
+ }
331
+ }
332
+
333
+ .Adp-code-snippets-listing {
334
+ .Adp-code-snippet__title {
335
+ padding-left: 12px;
336
+
337
+ b {
338
+ color: white;
339
+ }
340
+ }
341
+
342
+ .Adp-code-snippet {
343
+ background-color: #333333;
344
+ border-radius: 15px;
345
+
346
+ code, pre {
347
+ background-color: #333333;
348
+ }
349
+
350
+ pre {
351
+ margin: 0;
352
+ padding: 16px 24px;
353
+ border-radius: 15px;
354
+ max-height: 250px;
355
+ overflow: hidden;
356
+
357
+ &:hover {
358
+ overflow: auto;
359
+ }
360
+ }
361
+
362
+ svg {
363
+ width: 16px;
364
+ height: 16px;
365
+ }
366
+
367
+ #prerequisites, #write-the-code, #run-your-code, p {
368
+ display: none;
369
+ }
370
+
371
+ .Nxd-accordion-emphasis {
372
+ display: none;
373
+ }
374
+
375
+ pre:not(.main-code) {
376
+ display: none;
377
+ }
378
+
379
+ #write-the-code ~ .code-toolbar + p {
380
+ display: flex;
381
+ font-weight: 600;
382
+
383
+ a {
384
+ color: white;
385
+ padding: 10px 35px 0px;
386
+ }
387
+ }
388
+
389
+ #run-your-code ~ .code-toolbar, #run-your-code ~ .code-toolbar + p {
390
+ display: none;
391
+ }
392
+
393
+ .Vlt-tabs__content {
394
+ margin-top: 0px;
395
+ padding-bottom: 16px;
396
+ }
397
+
398
+ .Vlt-tabs__header--bordered {
399
+ box-shadow: none;
400
+ display: flex;
401
+ justify-content: flex-start;
402
+ margin-top: 0px;
403
+ padding: 16px;
404
+ overflow: hidden;
405
+ height: 80px;
406
+
407
+ &:hover {
408
+ overflow-x: auto;
409
+ }
410
+
411
+ .Vlt-tabs__link {
412
+ border-radius: 100px;
413
+ padding: 12px;
414
+ margin: 0;
415
+ color: white;
416
+ height: 44px;
417
+
418
+ &:first-child {
419
+ margin: 0;
420
+ }
421
+ a {
422
+ display: flex;
423
+ font-size: 16px;
424
+ font-weight: 600;
425
+ }
426
+
427
+ &:after {
428
+ background: none;
429
+ }
430
+
431
+ &:active {
432
+ background-color: #333333 !important;
433
+ }
434
+ }
435
+
436
+ .Vlt-tabs__link_active {
437
+ background: #757575;
438
+ border: none;
439
+
440
+ &:before {
441
+ background: none;
442
+ }
443
+ }
444
+ }
445
+ }
446
+ }
447
+
448
+ .glide {
449
+ position: static;
450
+ max-height: 400px;
451
+
452
+ &__track {
453
+ margin-top: 40px;
454
+ }
455
+
456
+ &__bullets {
457
+ top: 20px;
458
+ left: 48px;
459
+ }
460
+
461
+ &__arrow {
462
+ border: none;
463
+ box-shadow: none;
464
+ }
465
+
466
+ &__arrow--left {
467
+ left: -25px;
468
+
469
+ @media #{$S-only} {
470
+ left: -15px;
471
+ }
472
+ }
473
+
474
+ &__arrow--right {
475
+ right: -25px;
476
+
477
+ @media #{$S-only} {
478
+ right: -15px;
479
+ }
480
+ }
481
+
482
+ *::-webkit-scrollbar-track {
483
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
484
+ background-color: #333;
485
+ border-radius: 10px;
486
+ }
487
+
488
+ *::-webkit-scrollbar {
489
+ background-color: #333;
490
+ width: 10px;
491
+ height: 10px;
492
+ }
493
+
494
+ *::-webkit-scrollbar-thumb {
495
+ border-radius: 10px;
496
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
497
+ background-color: #1a1a1a;
498
+ }
499
+ }
500
+ }