itube-specs 0.0.1012 → 0.0.1017

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/SITE_UPDATES.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Что сделать в сайтах после обновления слоя
2
2
 
3
3
  Только то, что каждый сайт должен сделать у себя после `npm run spec`: объявить новую сущность, поправить
4
- свою логику, удалить файлы, переехавшие в слой. Описание изменений слоя — в истории git, не здесь.
4
+ свою логику, удалить файлы, переехавшие в слой. Сюда же — правки, сделанные в одном сайте, которые нужны
5
+ остальным (образец — коммит того сайта). Описание изменений слоя — в истории git, не здесь.
5
6
 
6
7
  Сайт после `npm run spec` видит записи между своей прошлой и новой версией:
7
8
  `node node_modules/itube-specs/scripts/site-updates.mjs`.
@@ -10,6 +11,30 @@
10
11
  коммиты до бампа); `npm run patch` сам проставит ей номер версии. Формат пункта: что сделать и где,
11
12
  кому именно (всем / сайтам с N), что будет, если не сделать.
12
13
 
14
+ ## 0.0.1013 — 2026-10-07
15
+
16
+ - **Всем сайтам — чистка своих переводов (`i18n/locales/*.json`, во всех локалях):** образец —
17
+ videosection-redesign, коммит `018ea41`.
18
+ - Удалить ключи, которые слой нигде не читает: `interesting_gay_categories`, `footer_top_categories_title`,
19
+ `h1_categories`, `channel_popular_models`, `model_footer_models_title`, `porn_video_categories`,
20
+ `popular_models_by_letter`, `top_porn_channels`, `top_porn_video_categories`, а также группы
21
+ `meta.categories-slug` (мета страницы категории приходит из API) и `meta.playlists-playlistId` (такой
22
+ страницы нет).
23
+ - В `meta.models.*` и `meta.models-letter-slug.*` убрать `{secondText}`, `{thirdText}`, `{fourText}`: эти
24
+ страницы их не передают, подстановка всегда пустая. Вместе с плейсхолдером убрать и то, что к нему
25
+ прилипло: двойной пробел, пробел перед запятой, частицу в ja/ko/zh (`{thirdText}に新作…` → `新作…`,
26
+ `{thirdText}에…`, `{thirdText}的…`, `{thirdText}里…`).
27
+
28
+ Если этого не сделать: в title и H1 страниц моделей останутся двойные пробелы, description на ja/ko/zh
29
+ будет начинаться с оторванной частицы, а переводчик будет переводить ключи, которые нигде не показываются.
30
+
31
+ - **Сайтам с несколькими нишами:** короткие заголовки, где упомянута ниша (`related_videos`,
32
+ `main_categories`, `recent_searches`, `category_top_models_title`, `channels_popular_models`,
33
+ `categories_popular_models`, `navigation.gay_models`), подхватывают вариант `<key>_<niche>` только из
34
+ `nicheTextKeys`. Добавить их туда и завести варианты, как в `config/niches.config.ts` videosection-redesign.
35
+ Если этого не сделать: на `/gays` и `/shemales` эти заголовки будут показываться текстом дефолтной ниши.
36
+ Сайтам с одной нишей делать ничего не нужно.
37
+
13
38
  ## 0.0.1008 — 2026-10-07
14
39
 
15
40
  - **Сайтам с несколькими нишами (в `SiteConfig.niches` больше одной), где нет нишевых переводов** — проверить и
@@ -389,16 +389,25 @@ $language-description: $color-zinc-500;
389
389
  $language-empty-text: $color-zinc-300;
390
390
 
391
391
  // ─── Niche ───
392
+ $niche-trigger-bg: $color-zinc-800-50;
393
+ $niche-trigger-bg--hover: $color-zinc-700;
392
394
  $niche-trigger-text: $color-zinc-400;
393
- $niche-angle--hover: $color-white;
394
- $niche-title: $color-zinc-500;
395
- $niche-value-text: $color-white;
395
+ $niche-trigger-text--hover: $color-white;
396
+ $niche-value-text: $color-zinc-200;
396
397
  $niche-menu-bg: $color-night;
397
398
  $niche-menu-border: $color-zinc-800;
399
+ $niche-menu-shadow: 0 20px 25px -5px #{$mono-black-10}, 0 8px 10px -6px #{$mono-black-10};
398
400
  $niche-item-text: $color-zinc-300;
399
401
  $niche-item-bg--hover: $color-zinc-800;
402
+ $niche-item-icon: $color-zinc-400;
403
+ $niche-item-check: $color-white;
400
404
  $niche-item-text--current: $color-white;
401
405
  $niche-item-bg--current: $color-zinc-700;
406
+ $niche-switch-bg: $color-zinc-800;
407
+ $niche-switch-text: $color-zinc-400;
408
+ $niche-switch-text--hover: $color-white;
409
+ $niche-switch-bg--checked: $color-zinc-700;
410
+ $niche-switch-text--checked: $color-white;
402
411
 
403
412
  // ─── Footer language ───
404
413
  $footer-language-bg: $color-zinc-800-50;
@@ -438,6 +447,8 @@ $header-burger-icon: $color-zinc-200;
438
447
  $header-user-icon: $color-zinc-500;
439
448
  $header-language-trigger: $color-zinc-400;
440
449
  $header-language-trigger--hover: $color-white;
450
+ $header-language-trigger-bg: transparent;
451
+ $header-language-trigger-bg--hover: transparent;
441
452
  $header-language-badge-bg: $color-zinc-800;
442
453
  $header-language-badge-text: $color-zinc-200;
443
454
  $header-language-menu-bg: $color-night;
@@ -445,16 +445,25 @@ $language-description: $color-gray-500;
445
445
  $language-empty-text: $color-gray-400;
446
446
 
447
447
  // ─── Niche ───
448
- $niche-trigger-text: $color-gray-500;
449
- $niche-angle--hover: $color-gray-300;
450
- $niche-title: $color-gray-400;
451
- $niche-value-text: $color-white;
448
+ $niche-trigger-bg: $color-slate-750;
449
+ $niche-trigger-bg--hover: $color-slate-700;
450
+ $niche-trigger-text: $color-gray-400;
451
+ $niche-trigger-text--hover: $color-white;
452
+ $niche-value-text: $color-gray-200;
452
453
  $niche-menu-bg: $color-slate-850;
453
454
  $niche-menu-border: $color-white-10;
455
+ $niche-menu-shadow: 0 20px 25px -5px #{$mono-black-25}, 0 8px 10px -6px #{$mono-black-25};
454
456
  $niche-item-text: $color-gray-300;
455
457
  $niche-item-bg--hover: $color-slate-750;
458
+ $niche-item-icon: $color-gray-400;
459
+ $niche-item-check: $color-white;
456
460
  $niche-item-text--current: $color-white;
457
- $niche-item-bg--current: $color-indigo-soft;
461
+ $niche-item-bg--current: $color-slate-700;
462
+ $niche-switch-bg: $color-slate-750;
463
+ $niche-switch-text: $color-gray-400;
464
+ $niche-switch-text--hover: $color-white;
465
+ $niche-switch-bg--checked: $color-slate-700;
466
+ $niche-switch-text--checked: $color-white;
458
467
 
459
468
  // ─── Footer language ───
460
469
  $footer-language-bg: $color-slate-750;
@@ -492,9 +501,11 @@ $burger-item-child-icon: $color-gray-400;
492
501
  $header-bg: $color-slate-800;
493
502
  $header-burger-icon: $color-gray-200;
494
503
  $header-user-icon: $color-gray-500;
495
- $header-language-trigger: $color-gray-500;
496
- $header-language-trigger--hover: $color-gray-300;
497
- $header-language-badge-bg: $color-slate-750;
504
+ $header-language-trigger: $color-white;
505
+ $header-language-trigger--hover: $color-white;
506
+ $header-language-trigger-bg: $color-slate-750;
507
+ $header-language-trigger-bg--hover: $color-slate-700;
508
+ $header-language-badge-bg: $color-slate-850;
498
509
  $header-language-badge-text: $color-white;
499
510
  $header-language-menu-bg: $color-slate-850;
500
511
  $header-language-menu-border: $color-white-10;
@@ -19,6 +19,11 @@
19
19
  />
20
20
  </button>
21
21
  <div class="layout-burger__wrapper">
22
+ <LayoutNiche
23
+ burger
24
+ class="layout-burger__niche"
25
+ />
26
+
22
27
  <div class="layout-burger__buttons">
23
28
  <NuxtLink
24
29
  v-if="isAuthorized && data"
@@ -69,11 +74,6 @@
69
74
  </div>
70
75
  </nav>
71
76
 
72
- <LayoutNiche
73
- class="layout-burger__niche"
74
- icon-size="20"
75
- />
76
-
77
77
  <LayoutLanguage
78
78
  burger
79
79
  class="layout-burger__language"
@@ -76,8 +76,9 @@ function handler() {
76
76
  column-gap: 8px;
77
77
  align-items: center;
78
78
  flex-wrap: nowrap;
79
- padding: 6px 12px;
80
- border-radius: $radius;
79
+ height: 36px;
80
+ padding: 0 12px;
81
+ border-radius: $radius-md;
81
82
  background-color: $footer-language-bg;
82
83
  color: $footer-language-text;
83
84
 
@@ -57,23 +57,17 @@ $breakpoint-footer: sm;
57
57
 
58
58
  .layout-footer__middle {
59
59
  display: flex;
60
- flex-direction: column;
61
- row-gap: 16px;
60
+ column-gap: 8px;
62
61
  align-items: center;
63
62
 
64
63
  @include from-br($breakpoint-footer) {
65
- flex-direction: row;
66
- column-gap: 24px;
67
64
  margin: 0 auto;
68
65
  }
69
66
  }
70
67
 
71
68
  .layout-footer__niche .layout-niche__list {
72
- @include from-br($breakpoint-footer) {
73
- top: -8px;
74
- bottom: auto;
75
- transform: translateY(-100%);
76
- }
69
+ top: auto;
70
+ bottom: calc(100% + 8px);
77
71
  }
78
72
 
79
73
  .layout-footer__copyright {
@@ -10,15 +10,15 @@
10
10
  glow
11
11
  class="layout-header__logo"
12
12
  />
13
- <LayoutNotifications
14
- v-if="featureFlags.FeatureFollowEnabled"
15
- class="layout-header__notifications"
16
- />
17
13
 
18
14
  <LayoutNiche
19
15
  class="layout-header__niche _from-sd"
20
16
  icon-size="20"
21
17
  />
18
+ <LayoutNotifications
19
+ v-if="featureFlags.FeatureFollowEnabled"
20
+ class="layout-header__notifications"
21
+ />
22
22
 
23
23
  <div
24
24
  ref="languageRef"
@@ -127,7 +127,7 @@ function closeLanguage() {
127
127
  width: 100%;
128
128
 
129
129
  @include from-br($brkpnt-burger) {
130
- grid-template-columns: auto minmax(0, 1fr) auto auto auto auto;
130
+ grid-template-columns: auto auto minmax(0, 1fr) auto auto auto;
131
131
  }
132
132
 
133
133
  /* поиск | лого | колокольчик | бургер — 1fr держит лого по центру */
@@ -139,7 +139,7 @@ function closeLanguage() {
139
139
 
140
140
  .layout-header.--no-notifications {
141
141
  @include from-br($brkpnt-burger) {
142
- grid-template-columns: auto minmax(0, 1fr) auto auto auto;
142
+ grid-template-columns: auto auto minmax(0, 1fr) auto auto;
143
143
  }
144
144
 
145
145
  @include to-br($brkpnt-burger) {
@@ -147,12 +147,6 @@ function closeLanguage() {
147
147
  }
148
148
  }
149
149
 
150
- .layout-header.--no-notifications .layout-header__niche {
151
- @include from-br($brkpnt-burger) {
152
- grid-column: 3;
153
- }
154
- }
155
-
156
150
  .layout-header.--no-notifications .layout-header__language {
157
151
  @include from-br($brkpnt-burger) {
158
152
  grid-column: 4;
@@ -200,16 +194,15 @@ function closeLanguage() {
200
194
 
201
195
  /**
202
196
  * Поиск стоит строго по центру ШАПКИ, а не по центру свободного места: он растянут
203
- * на всю строку сетки и центрирован `justify-self`. Иначе центр уезжал влево —
204
- * правая группа (колокольчик, ниша, язык, вход) шире логотипа, и с добавлением
205
- * переключателя ниш перекос дошёл до сотни пикселей.
197
+ * на всю строку сетки и центрирован `justify-self`. Иначе центр уезжал бы к более
198
+ * узкой группе: левая (лого + ниша) и правая (колокольчик, язык, вход) разной ширины.
206
199
  *
207
200
  * Наезжать при этом не на что: по обе стороны резервируется `--header-side-space`
208
- * — ширина более широкой (правой) группы: колокольчик, ниша 54, язык и вход.
201
+ * — ширина более широкой группы (сейчас левая: лого + ниша ~340, правая ~290).
209
202
  * Считается БЕЗ бокового паддинга шапки, потому что `100%` у поиска — это уже
210
203
  * контентная ширина. Не хватило места — поиск сужается, а боковые группы остаются
211
204
  * на своих местах. Значение вынесено в переменную: у сайта без переключателя ниш
212
- * правая группа уже, и он может его уменьшить.
205
+ * левая группа уже, и он может его уменьшить.
213
206
  */
214
207
  .layout-header__search {
215
208
  --header-side-space: 358px;
@@ -246,8 +239,9 @@ function closeLanguage() {
246
239
 
247
240
  .layout-header__niche {
248
241
  @include from-br($brkpnt-burger) {
249
- grid-column: 4;
242
+ grid-column: 2;
250
243
  grid-row: 1;
244
+ margin-left: 4px;
251
245
  }
252
246
  }
253
247
 
@@ -259,7 +253,7 @@ function closeLanguage() {
259
253
 
260
254
  .layout-header__notifications {
261
255
  @include from-br($brkpnt-burger) {
262
- grid-column: 3;
256
+ grid-column: 4;
263
257
  grid-row: 1;
264
258
  }
265
259
  }
@@ -272,18 +266,22 @@ function closeLanguage() {
272
266
  }
273
267
  }
274
268
 
275
- .layout-header__language-trigger{
269
+ .layout-header__language-trigger {
276
270
  @include from-br($brkpnt-burger) {
277
271
  display: flex;
278
272
  flex-wrap: nowrap;
279
273
  align-items: center;
280
- padding: 6px 8px;
281
- gap: 6px;
274
+ column-gap: 8px;
275
+ height: 36px;
276
+ padding: 0 12px;
282
277
  color: $header-language-trigger;
278
+ background-color: $header-language-trigger-bg;
279
+ border-radius: $radius-md;
283
280
  }
284
281
 
285
- @include hover(color) {
282
+ @include hover(color, background-color) {
286
283
  color: $header-language-trigger--hover;
284
+ background-color: $header-language-trigger-bg--hover;
287
285
  }
288
286
  }
289
287
 
@@ -0,0 +1,90 @@
1
+ <template>
2
+ <div
3
+ :aria-label="$t('niche')"
4
+ class="layout-niche-list"
5
+ role="listbox"
6
+ >
7
+ <button
8
+ v-for="item in niches"
9
+ :key="`niche-${item.name}`"
10
+ :class="{'--current': item.name === current}"
11
+ :aria-selected="item.name === current"
12
+ class="layout-niche-list__item"
13
+ role="option"
14
+ type="button"
15
+ @click="$emit('select', item.name)"
16
+ >
17
+ <UiIcon
18
+ :name="item.icon"
19
+ class="layout-niche-list__icon"
20
+ size="20"
21
+ />
22
+ <span class="layout-niche-list__text">{{ $t(item.label) }}</span>
23
+ <UiIcon
24
+ v-if="item.name === current"
25
+ class="layout-niche-list__check"
26
+ name="check"
27
+ size="20"
28
+ />
29
+ </button>
30
+ </div>
31
+ </template>
32
+
33
+ <script setup lang="ts">
34
+ import type { Niche } from '../../runtime';
35
+ import type { INicheItem } from '../../composables/use-niches';
36
+
37
+ defineProps<{
38
+ niches: INicheItem[]
39
+ current: Niche
40
+ }>();
41
+
42
+ defineEmits<{
43
+ select: [name: Niche]
44
+ }>();
45
+ </script>
46
+
47
+ <style lang="scss">
48
+ .layout-niche-list {
49
+ display: flex;
50
+ flex-direction: column;
51
+ row-gap: 4px;
52
+ }
53
+
54
+ .layout-niche-list__item {
55
+ @include font-sm;
56
+
57
+ display: flex;
58
+ align-items: center;
59
+ column-gap: 12px;
60
+ width: 100%;
61
+ padding: 10px 8px;
62
+ color: $niche-item-text;
63
+ text-align: start;
64
+ border-radius: $radius-md;
65
+
66
+ @include hover(background-color) {
67
+ background-color: $niche-item-bg--hover;
68
+ }
69
+ }
70
+
71
+ .layout-niche-list__item.--current {
72
+ color: $niche-item-text--current;
73
+ background-color: $niche-item-bg--current;
74
+ pointer-events: none;
75
+ }
76
+
77
+ .layout-niche-list__icon {
78
+ flex-shrink: 0;
79
+ color: $niche-item-icon;
80
+ }
81
+
82
+ .layout-niche-list__text {
83
+ flex: 1;
84
+ }
85
+
86
+ .layout-niche-list__check {
87
+ flex-shrink: 0;
88
+ color: $niche-item-check;
89
+ }
90
+ </style>
@@ -1,13 +1,33 @@
1
1
  <template>
2
2
  <div
3
- v-if="niches.length > 1"
3
+ v-if="niches.length > 1 && burger"
4
+ :aria-label="$t('niche')"
5
+ class="layout-niche --burger"
6
+ role="radiogroup"
7
+ >
8
+ <button
9
+ v-for="item in niches"
10
+ :key="`niche-${item.name}`"
11
+ :class="{'--checked': item.name === currentNiche.name}"
12
+ :aria-checked="item.name === currentNiche.name"
13
+ class="layout-niche__option"
14
+ role="radio"
15
+ type="button"
16
+ @click="changeNiche(item.name)"
17
+ >
18
+ {{ $t(item.label) }}
19
+ </button>
20
+ </div>
21
+ <div
22
+ v-else-if="niches.length > 1"
4
23
  ref="nicheRef"
5
24
  class="layout-niche"
6
25
  >
7
26
  <button
8
27
  :class="{'--open': isOpen}"
9
28
  :aria-expanded="isOpen"
10
- :aria-label="$t('niche')"
29
+ :aria-label="`${$t('niche')}: ${$t(currentNiche.label)}`"
30
+ aria-haspopup="listbox"
11
31
  class="layout-niche__trigger"
12
32
  type="button"
13
33
  @click="isOpen = !isOpen"
@@ -17,55 +37,56 @@
17
37
  :size="iconSize"
18
38
  class="layout-niche__icon"
19
39
  />
20
- <span class="layout-niche__current _to-sd">
21
- <span>{{ $t('niche') }}:&nbsp;</span>
22
- <span class="layout-niche__text">{{ $t(currentNiche.label) }}</span>
23
- </span>
40
+ <span class="layout-niche__text">{{ $t(currentNiche.label) }}</span>
24
41
  <UiIcon
25
42
  class="layout-niche__angle"
26
43
  name="angle-down"
27
44
  size="12"
28
45
  />
29
46
  </button>
30
- <ul
31
- v-if="isOpen"
32
- class="layout-niche__list"
33
- >
34
- <li
35
- v-for="item in niches"
36
- :key="`niche-${item.name}`"
47
+ <transition mode="out-in">
48
+ <UiPopup
49
+ v-if="isBurgerMenu && isOpen"
50
+ v-model="isOpen"
51
+ sheet
37
52
  >
38
- <button
39
- :class="{'--current': item.name === currentNiche.name}"
40
- :aria-current="item.name === currentNiche.name ? 'true' : undefined"
41
- class="layout-niche__item"
42
- type="button"
43
- @click="select(item.name)"
44
- >
45
- <UiIcon
46
- :name="item.icon"
47
- class="layout-niche__item-icon"
48
- size="20"
49
- />
50
- {{ $t(item.label) }}
51
- </button>
52
- </li>
53
- </ul>
53
+ <template #title>{{ $t('model.orientation') }}</template>
54
+ <LayoutNicheList
55
+ :niches="niches"
56
+ :current="currentNiche.name"
57
+ class="layout-niche__sheet"
58
+ @select="select"
59
+ />
60
+ </UiPopup>
61
+ </transition>
62
+ <LayoutNicheList
63
+ v-if="!isBurgerMenu && isOpen"
64
+ :niches="niches"
65
+ :current="currentNiche.name"
66
+ class="layout-niche__list"
67
+ @select="select"
68
+ />
54
69
  </div>
55
70
  </template>
56
71
 
57
72
  <script setup lang="ts">
58
73
  import type { Niche } from '../../runtime';
74
+ import { checkDeviceWidth } from '../../runtime';
75
+ import { CSS_BREAKPOINTS } from '../../config/css-breakpoints';
59
76
 
60
77
  withDefaults(defineProps<{
61
78
  iconSize?: string
79
+ burger?: boolean
62
80
  }>(), {
63
- iconSize: '20'
81
+ iconSize: '20',
82
+ burger: false
64
83
  }
65
84
  );
66
85
 
67
86
  const { niches, currentNiche, changeNiche } = useNiches();
68
87
 
88
+ const { isBurgerMenu } = checkDeviceWidth(CSS_BREAKPOINTS);
89
+
69
90
  const nicheRef = ref<HTMLElement>();
70
91
  const isOpen = ref(false);
71
92
 
@@ -81,97 +102,93 @@ function select(name: Niche) {
81
102
 
82
103
  <style lang="scss">
83
104
  .layout-niche {
105
+ position: relative;
84
106
  display: grid;
107
+ justify-content: start;
108
+ }
109
+
110
+ .layout-niche.--burger {
111
+ display: flex;
112
+ column-gap: 4px;
113
+ width: 100%;
114
+ padding: 4px;
115
+ background-color: $niche-switch-bg;
116
+ border-radius: $radius-md;
117
+ }
118
+
119
+ .layout-niche__option {
120
+ @include font-sm;
85
121
 
86
- @include from-br($brkpnt-burger) {
87
- position: relative;
122
+ display: flex;
123
+ flex: 1;
124
+ align-items: center;
125
+ justify-content: center;
126
+ height: 36px;
127
+ color: $niche-switch-text;
128
+ font-weight: 500;
129
+ border-radius: $radius-6;
130
+
131
+ @include hover(color) {
132
+ color: $niche-switch-text--hover;
88
133
  }
89
134
  }
90
135
 
136
+ .layout-niche__option.--checked {
137
+ color: $niche-switch-text--checked;
138
+ background-color: $niche-switch-bg--checked;
139
+ }
140
+
91
141
  .layout-niche__trigger {
92
- display: grid;
93
- grid-auto-flow: column;
142
+ @include font-sm;
143
+
144
+ display: flex;
94
145
  align-items: center;
95
- justify-content: start;
96
- column-gap: 6px;
97
- padding: 6px 8px;
146
+ column-gap: 8px;
147
+ height: 36px;
148
+ padding: 0 12px;
98
149
  color: $niche-trigger-text;
150
+ background-color: $niche-trigger-bg;
151
+ border-radius: $radius-md;
99
152
 
100
- @include to-br($brkpnt-burger) {
101
- grid-template-columns: auto 1fr auto;
102
- width: 100%;
103
- padding: 10px 16px;
104
- column-gap: 16px;
153
+ @include hover(background-color, color) {
154
+ color: $niche-trigger-text--hover;
155
+ background-color: $niche-trigger-bg--hover;
105
156
  }
106
157
  }
107
158
 
108
- .layout-niche__current {
109
- @include font-sm;
110
-
111
- display: grid;
112
- grid-template-columns: auto 1fr;
113
- color: $niche-title;
159
+ .layout-niche__icon {
160
+ flex-shrink: 0;
114
161
  }
115
162
 
116
163
  .layout-niche__text {
117
164
  color: $niche-value-text;
118
165
  font-weight: 500;
166
+ line-height: 1;
119
167
  }
120
168
 
121
169
  .layout-niche__angle {
122
170
  pointer-events: none;
123
- transition: transform var(--transition), color var(--transition);
124
- }
125
-
126
- .layout-niche__trigger:hover .layout-niche__angle {
127
- color: $niche-angle--hover;
171
+ transition: transform var(--transition);
128
172
  }
129
173
 
130
174
  .layout-niche__trigger.--open .layout-niche__angle {
131
175
  transform: rotate(180deg);
132
176
  }
133
177
 
134
- .layout-niche__list {
135
- display: grid;
136
-
137
- @include from-br($brkpnt-burger) {
138
- position: absolute;
139
- right: 0;
140
- bottom: -8px;
141
- z-index: $z-index-plus;
142
- min-width: 180px;
143
- padding: 8px;
144
- background-color: $niche-menu-bg;
145
- border: 1px solid $niche-menu-border;
146
- border-radius: $radius-xl;
147
- transform: translateY(100%);
148
- }
149
- }
150
-
151
- .layout-niche__item {
152
- @include font-sm;
153
-
154
- display: grid;
155
- grid-template-columns: 20px 1fr;
156
- align-items: center;
157
- column-gap: 12px;
158
- width: 100%;
159
- padding: 10px 16px;
160
- color: $niche-item-text;
161
- text-align: start;
162
- border-radius: $radius-lg;
163
-
164
- @include hover(background-color) {
165
- background-color: $niche-item-bg--hover;
166
- }
167
-
168
- @include from-br($brkpnt-burger) {
169
- padding: 8px 10px;
170
- }
178
+ .layout-niche__sheet {
179
+ padding: 12px 12px calc(12px + env(safe-area-inset-bottom));
171
180
  }
172
181
 
173
- .layout-niche__item.--current {
174
- color: $niche-item-text--current;
175
- background-color: $niche-item-bg--current;
182
+ .layout-niche__list {
183
+ position: absolute;
184
+ top: calc(100% + 8px);
185
+ left: 0;
186
+ z-index: $z-index-plus;
187
+ width: 192px;
188
+ padding: 8px;
189
+ background-color: $niche-menu-bg;
190
+ border: 1px solid $niche-menu-border;
191
+ border-radius: $radius-xl;
192
+ box-shadow: $niche-menu-shadow;
176
193
  }
177
194
  </style>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.1012",
4
+ "version": "0.0.1017",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {