testio-tailwind 3.5.0 → 3.7.0

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 (27) hide show
  1. package/.eleventy.js +2 -1
  2. package/package.json +1 -1
  3. package/src/_includes/example-header-agenticqa.njk +70 -0
  4. package/src/_layouts/page-example-agenticqa.njk +19 -0
  5. package/src/assets/{stylesheets/components/fonts → fonts}/testio.eot +0 -0
  6. package/src/assets/{stylesheets/components/fonts → fonts}/testio.svg +349 -226
  7. package/src/assets/{stylesheets/components/fonts → fonts}/testio.ttf +0 -0
  8. package/src/assets/{stylesheets/components/fonts → fonts}/testio.woff +0 -0
  9. package/src/assets/fonts/testio.woff2 +0 -0
  10. package/src/assets/stylesheets/app.css +4 -0
  11. package/src/assets/stylesheets/components/agenticqa/agenticqa_header.css +37 -0
  12. package/src/assets/stylesheets/components/agenticqa/agenticqa_sidebar.css +12 -0
  13. package/src/assets/stylesheets/components/iconfont.css +528 -140
  14. package/src/assets/stylesheets/components/icons.css +12 -0
  15. package/src/assets/stylesheets/components/layout.css +11 -1
  16. package/src/assets/stylesheets/components/list_item.css +2 -2
  17. package/src/assets/stylesheets/components/splitview.css +63 -16
  18. package/src/assets/stylesheets/components/tabs.css +14 -5
  19. package/src/assets/stylesheets/plugin_themes/pagy.css +23 -0
  20. package/src/assets/stylesheets/tailwind_config.css +3 -0
  21. package/src/assets/stylesheets/tailwind_custom_utilities.css +18 -1
  22. package/src/assets/stylesheets/tailwind_theme_dark.css +21 -3
  23. package/src/pages/agenticqa/header.haml +77 -0
  24. package/src/pages/components/pagination.haml +20 -0
  25. package/src/pages/components/splitview_item_collapsable.haml +1 -1
  26. package/src/pages/examples/agenticqa.haml +38 -0
  27. package/src/assets/stylesheets/components/fonts/testio.woff2 +0 -0
@@ -100,6 +100,18 @@
100
100
  @apply text-danger;
101
101
  }
102
102
 
103
+ .icon.blocked {
104
+ @apply text-blocked;
105
+ }
106
+
107
+ .icon.pending {
108
+ @apply text-pending;
109
+ }
110
+
111
+ .icon.empty {
112
+ @apply text-chart-empty;
113
+ }
114
+
103
115
  /*///// Status Icons /////*/
104
116
 
105
117
  .status-icon {
@@ -1,5 +1,9 @@
1
+ html, body {
2
+ @apply h-full;
3
+ }
4
+
1
5
  .app-body {
2
- @apply grid h-screen max-h-screen w-full overflow-hidden bg-appbody text-appbody-textcolor;
6
+ @apply grid h-screen max-h-full w-full overflow-hidden bg-appbody text-appbody-textcolor;
3
7
  grid-template-areas: "header header header"
4
8
  "sidebar test-header test-header"
5
9
  "sidebar main aside"
@@ -34,4 +38,10 @@
34
38
  @apply pb-lg;
35
39
  }
36
40
 
41
+ .main-content.centered {
42
+ @apply flex justify-center;
43
+ }
37
44
 
45
+ .centered-content {
46
+ @apply w-full max-w-centered-content;
47
+ }
@@ -142,7 +142,7 @@ a.listitem:hover {
142
142
  }
143
143
 
144
144
  .listitem-card {
145
- @apply relative mb-md p-sm bg-appbody rounded last:mb-0;
145
+ @apply relative mb-md p-sm bg-appbody dark:bg-gray-750 rounded last:mb-0;
146
146
  }
147
147
 
148
148
  .listitem-card img {
@@ -154,7 +154,7 @@ a.listitem:hover {
154
154
  }
155
155
 
156
156
  .listitem-subheadline {
157
- @apply mb-xs text-label font-semibold uppercase;
157
+ @apply mb-xs text-label font-semibold uppercase dark:uppercase dark:text-label-color;
158
158
  }
159
159
 
160
160
  .listitem[open] > .listitem-header .listitem-actions .btn,
@@ -67,8 +67,6 @@
67
67
  }
68
68
  .splitview-list {
69
69
  display: block;
70
- /* grid-row-start: 3;
71
- grid-row-end: 5; */
72
70
  }
73
71
  }
74
72
 
@@ -113,7 +111,7 @@
113
111
  /*///// Splitview Details /////*/
114
112
 
115
113
  .splitview-details {
116
- @apply grid overflow-hidden h-full max-h-full min-h-0 max-w-full min-w-0 lg:border-l-2 border-bordercolor;
114
+ @apply grid overflow-hidden h-full max-h-full min-h-0 max-w-full min-w-0 lg:border-l-2 border-bordercolor dark:border-none;
117
115
  grid-area: splitview-details;
118
116
  grid-template-areas: "details-content details-metasidebar"
119
117
  "details-actionbar details-actionbar";
@@ -131,7 +129,7 @@
131
129
  }
132
130
 
133
131
  .splitview-details-title {
134
- @apply text-heading-3;
132
+ @apply text-heading-3 dark:text-card-header;
135
133
  }
136
134
 
137
135
  .splitview-details-header .btn-close-detailview {
@@ -215,20 +213,14 @@
215
213
  /*///// Splitview item /////*/
216
214
 
217
215
  .splitview-item {
218
- @apply grid p-xs pr-spacing -mx-xs cursor-pointer;
216
+ @apply relative grid p-xs pr-spacing -mx-xs dark:mx-0 dark:mb-1px cursor-pointer dark:bg-listitem dark:rounded;
219
217
  grid-template-areas: "split-check split-icon split-text split-status";
220
218
  grid-template-columns: auto auto 1fr auto;
221
219
  }
222
220
 
223
221
  .splitview-item.selected {
224
- @apply text-white bg-info;
225
- .splitview-item-icon,
226
- .splitview-item-metainfo {
227
- @apply text-white;
228
- }
229
- .status-icon {
230
- @apply bg-white;
231
- }
222
+ @apply text-white bg-info dark:bg-listitem dark:border-r-4 border-link-hover;
223
+
232
224
  .splitview-item-checkbox input {
233
225
  @apply border-white;
234
226
  }
@@ -240,6 +232,16 @@
240
232
  }
241
233
  }
242
234
 
235
+ body:not(.dark) .splitview-item.selected {
236
+ .splitview-item-icon,
237
+ .splitview-item-metainfo {
238
+ @apply text-white;
239
+ }
240
+ .status-icon {
241
+ @apply bg-white;
242
+ }
243
+ }
244
+
243
245
  .splitview-item:hover {
244
246
  @apply text-white bg-link-hover;
245
247
 
@@ -259,6 +261,9 @@
259
261
  .splitview-item-checkbox input[type=checkbox]:checked::after {
260
262
  @apply bg-info;
261
263
  }
264
+ .splitview-item-status {
265
+ @apply text-white;
266
+ }
262
267
  }
263
268
 
264
269
  .splitview-item-checkbox {
@@ -280,7 +285,7 @@
280
285
  }
281
286
 
282
287
  .splitview-item-title {
283
- overflow: hidden;
288
+ @apply dark:text-heading-5 dark:font-headings overflow-hidden;
284
289
  display: -webkit-box;
285
290
  -webkit-box-orient: vertical;
286
291
  line-clamp: 4;
@@ -293,7 +298,7 @@
293
298
  }
294
299
 
295
300
  .splitview-item-status {
296
- @apply flex flex-col items-end w-spacing;
301
+ @apply flex flex-col items-end w-spacing dark:w-auto dark:text-label-color;
297
302
  grid-area: split-status;
298
303
  }
299
304
 
@@ -305,8 +310,27 @@
305
310
  @apply mt-xxs;
306
311
  }
307
312
 
313
+ .splitview-item.unread::after {
314
+ @apply absolute w-xxs h-xxs bg-purple rounded-full;
315
+ content: "";
316
+ top: 7px;
317
+ right: 7px;
318
+ }
319
+
320
+ .splitview-item:hover::after {
321
+ @apply bg-white;
322
+ }
323
+
308
324
  /*///// Collapsable splitview item/group /////*/
309
325
 
326
+ .splitview-group {
327
+ @apply dark:mb-xs dark:last:mb-0;
328
+ }
329
+
330
+ .splitview-group summary.splitview-item {
331
+ @apply dark:pl-lg;
332
+ }
333
+
310
334
  .splitview-group > summary::before {
311
335
  @apply inline-block w-icon h-icon mr-xxs bg-primary;
312
336
  content: "";
@@ -314,6 +338,14 @@
314
338
  mask-image: url("/assets/images/icons/triangle-centered-right.svg");
315
339
  }
316
340
 
341
+ .dark .splitview-group > summary::before {
342
+ @apply absolute top-xs left-md bg-label-color;
343
+ }
344
+
345
+ .splitview-group[open] > summary {
346
+ @apply rounded-b-none;
347
+ }
348
+
317
349
  .splitview-group[open] > summary::before {
318
350
  mask-image: url("/assets/images/icons/triangle-centered-down.svg");
319
351
  }
@@ -323,5 +355,20 @@
323
355
  }
324
356
 
325
357
  .splitview-group .splitview-item:not(summary) {
326
- padding-left: 65px;
358
+ @apply pl-[65px] dark:pl-lg dark:rounded-none dark:last:rounded-b;
359
+ }
360
+
361
+
362
+ /*///// Grid split /////*/
363
+
364
+ .grid-splitview {
365
+ @apply grid grid-cols-2 lg:grid-cols-5 gap-grid-gutter;
327
366
  }
367
+
368
+ .grid-splitview .splitview-list {
369
+ @apply col-span-1 lg:col-span-2 overflow-y-visible;
370
+ }
371
+
372
+ .grid-splitview .splitview-details {
373
+ @apply flex flex-col col-span-1 lg:col-span-3 overflow-y-visible;
374
+ }
@@ -6,7 +6,7 @@
6
6
  }
7
7
 
8
8
  .nav-tabs {
9
- @apply border-b border-bordercolor;
9
+ @apply border-b border-bordercolor dark:border-none dark:-ml-sm;
10
10
  }
11
11
 
12
12
  .nav-tabs::after {
@@ -15,6 +15,16 @@
15
15
  background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 90%);
16
16
  }
17
17
 
18
+ .dark .nav-tabs::after {
19
+ @apply hidden;
20
+ }
21
+
22
+ .dark .nav-tabs .navlink.active::after {
23
+ @apply absolute block left-sm right-sm bottom-0 bg-link-hover;
24
+ content: '';
25
+ height: 2px;
26
+ }
27
+
18
28
  .nav-tabs::-webkit-scrollbar,
19
29
  .nav-pills::-webkit-scrollbar,
20
30
  .nav-tabs .navlinks::-webkit-scrollbar {
@@ -25,17 +35,16 @@
25
35
 
26
36
  .nav-tabs .navlink,
27
37
  .nav-tabs .nav-link {
28
- @apply inline-flex items-start whitespace-nowrap mr-md h-spacing text-primary text-heading-5 font-headings border-b border-link-hover rounded-none cursor-pointer;
29
- margin-bottom: -1px;
38
+ @apply relative inline-flex items-start dark:items-center mr-md dark:mr-0 -mb-1px dark:mb-0 h-spacing dark:h-[34px] text-primary dark:text-label-color dark:px-sm dark:rounded-full whitespace-nowrap text-heading-5 font-headings dark:uppercase border-b border-link-hover dark:border-none rounded-none cursor-pointer;
30
39
  line-height: 1;
31
40
  user-select: none;
32
41
 
33
42
  &.active {
34
- @apply border-b-4 border-info;
43
+ @apply border-b-4 dark:border-b-2 border-info dark:border-none dark:text-white;
35
44
  }
36
45
 
37
46
  &:hover, &:focus {
38
- @apply text-link-hover border-b-4 border-link-hover;
47
+ @apply text-link-hover border-b-4 dark:border-none border-link-hover dark:bg-link-hover dark:text-white;
39
48
  }
40
49
 
41
50
  &.disabled, &.disabled:hover, &.disabled:focus {
@@ -0,0 +1,23 @@
1
+ /* uses the pagy gem https://ddnexus.github.io/pagy/extras/tailwind#gsc.tab=0 */
2
+
3
+ .pagy-bootstrap .pagination {
4
+ @apply flex justify-center mt-md;
5
+ }
6
+
7
+ .pagy-bootstrap .page-item {
8
+ @apply mr-xxs last:mr-0;
9
+ }
10
+
11
+ .pagy-bootstrap .page-link {
12
+ @apply inline-flex justify-center items-center w-btn-sm h-btn-sm text-primary border border-primary rounded hover:text-white hover:bg-link-hover hover:border-link-hover;
13
+ }
14
+
15
+ .pagy-bootstrap .page-item.active .page-link {
16
+ @apply bg-primary text-white dark:text-appbody hover:bg-link-hover;
17
+ }
18
+
19
+ .pagy-bootstrap .page-item.disabled .page-link,
20
+ .pagy-bootstrap .page-item:disabled .page-link,
21
+ .pagy-bootstrap .page-item[disabled] .page-link {
22
+ @apply bg-transparent bg-pattern-disabled-bright dark:bg-pattern-disabled-dark text-disabled border-disabled cursor-not-allowed
23
+ }
@@ -11,6 +11,7 @@
11
11
  --color-gray-500: #888888;
12
12
  --color-gray-600: #5f656d;
13
13
  --color-gray-700: #343A40;
14
+ --color-gray-750: #2E2E2E;
14
15
  --color-gray-800: #262626;
15
16
  --color-gray-900: #222222;
16
17
  --color-gray-lightest: #f2f2f2;
@@ -203,6 +204,7 @@
203
204
  --spacing-card-md: 17.5rem;
204
205
  --spacing-card-sm: 11.25rem;
205
206
  --spacing-card-xs: 5rem;
207
+ --card-padding: 30px;
206
208
  --spacing-1px: 1px;
207
209
  --spacing-modal-lg: 75rem;
208
210
  --spacing-modal-md: 43.75rem;
@@ -277,6 +279,7 @@
277
279
  --max-w-card-sm: 11.25rem;
278
280
  --max-w-card-xs: 5rem;
279
281
  --max-w-capped: 43.75rem;
282
+ --max-w-centered-content: 1600px;
280
283
  --shadow-DEFAULT: 0 3px 6px 0 rgba(0, 0, 0, 0.2), 0 0px 0px 0 rgba(0, 0, 0, 0.05);
281
284
 
282
285
  /*//// Grid ////*/
@@ -101,6 +101,11 @@
101
101
  @utility text-purple-light { color: var(--color-purple-light); }
102
102
  @utility text-purple-500 { color: var(--color-purple-500); }
103
103
  @utility text-purple { color: var(--color-purple-DEFAULT); }
104
+ @utility text-blocked { color: var(--color-blocked); }
105
+ @utility text-pending { color: var(--color-pending); }
106
+ @utility text-chart-empty { color: var(--color-chart-empty); }
107
+
108
+
104
109
 
105
110
  @utility border-transparent { border-color: var(--color-transparent); }
106
111
  @utility border-current { border-color: var(--color-current); }
@@ -183,9 +188,18 @@
183
188
  @utility text-display-3 { font-size: var(--font-size-display-3); }
184
189
  @utility text-display-4 { font-size: var(--font-size-display-4); }
185
190
  @utility text-hidden { font-size: var(--font-size-hidden); }
191
+ @utility text-card-header {
192
+ font-size: var(--fontsize-card-header);
193
+ font-weight: var( --font-weight-headings);
194
+ text-transform: uppercase;
195
+ }
196
+
186
197
 
198
+ /* Padding */
199
+ @utility p-card-padding { padding: var(--card-padding); }
187
200
 
188
- /* Spacing classes */
201
+
202
+ /* min width */
189
203
  @utility min-w-auto { min-width: var(--min-w-auto); }
190
204
  @utility min-w-btn { min-width: var(--min-w-btn); }
191
205
  @utility min-w-btn-sm { min-width: var(--min-w-btn-sm); }
@@ -235,6 +249,8 @@
235
249
  @utility min-h-lg { min-height: var(--min-h-lg); }
236
250
  @utility min-h-xl { min-height: var(--min-h-xl); }
237
251
  @utility min-h-xxl { min-height: var(--min-h-xxl); }
252
+
253
+ /* max width */
238
254
  @utility max-w-1/2 { max-width: var(--max-w-1/2); }
239
255
  @utility max-w-2/3 { max-width: var(--max-w-2/3); }
240
256
  @utility max-w-8 { max-width: var(--max-w-8); }
@@ -250,6 +266,7 @@
250
266
  @utility max-w-card-sm { max-width: var(--max-w-card-sm); }
251
267
  @utility max-w-card-xs { max-width: var(--max-w-card-xs); }
252
268
  @utility max-w-capped { max-width: var(--max-w-capped); }
269
+ @utility max-w-centered-content { max-width: var(--max-w-centered-content); }
253
270
 
254
271
  /* Grid classes */
255
272
  @utility grid-cols-3-1 { grid-template-columns: var(--grid-cols-3-1); }
@@ -2,22 +2,40 @@
2
2
  @layer theme {
3
3
  .dark {
4
4
  /* Colors */
5
- --color-appbody: #1d1d1d;
5
+ --color-appbody: #181818;
6
6
  --color-appbody-textcolor: #f2f2f2;
7
+ --color-header: #1d1d1d;
7
8
  --color-actionbar: #343A40;
8
9
  --color-metasidebar: #262626;
9
10
  --color-primary: #78eac1;
10
11
  --color-link: #8988eb;
11
12
  --color-link-hover: #7954ff;
12
- --color-bordercolor: #343A40;
13
+ --color-bordercolor: #2E2E2E;
13
14
  --color-card: #262626;
14
15
  --color-disabled: #5f656d;
15
16
  --color-listitem: #343A40;
16
17
  --color-placeholder: #5f656d;
17
18
  --color-tag: #5f656d;
18
- --color-label-color: #bfc1c5;
19
+ --color-label-color: #888888;
20
+ --color-success: #33BA9E;
21
+ --color-danger: #FF3131;
22
+ --color-blocked: #F48D21;
23
+ --color-pending: #888888;
24
+ --color-chart-empty: #2E2E2E;
25
+ --color-info: #326dd1;
26
+ --color-dark: #222222;
27
+ --color-card: #1D1D1D;
28
+ --color-listitem: #262626;
19
29
 
20
30
  /*//// Border radius ////*/
21
31
  --radius: 12px;
32
+
33
+ /*//// Spacing ////*/
34
+ --card-padding: 30px;
35
+ --spacing-grid-gutter: 40px;
36
+
37
+
38
+ /*//// Fontsize ////*/
39
+ --fontsize-card-header: 18px;
22
40
  }
23
41
  }
@@ -0,0 +1,77 @@
1
+ ---
2
+ tags: agenticqa
3
+ title: Header
4
+ ---
5
+
6
+ %nav.header.agenticqa
7
+ .header-wrapper
8
+ .navlinks.logo-wrapper
9
+ %a.navlink.header-logo{href:'#'}
10
+ .navlinks.left
11
+ %a.navlink.active{href:'#'} Navlink active
12
+ %a.navlink{href:'#'} Navlink
13
+ %a.navlink{href:'#'}
14
+ %span.icon.icon-check-circle-filled
15
+ %span Navlink
16
+ %details.header-dropdown
17
+ %summary.navlink Collapsable
18
+ .dropdown-menu
19
+ %a.navlink{href:'#'}
20
+ %span.icon.icon-user
21
+ Dropdown-item
22
+ %a.navlink{href:'#'}
23
+ %span.icon.icon-cog
24
+ Dropdown-item
25
+ %a.navlink{href:'#'}
26
+ %span.icon.icon-shutdown
27
+ Dropdown-item with a longer text to see how things break and behave
28
+ %a.navlink.responsive-label{href:'#'}
29
+ %span.icon.icon-check-circle-filled
30
+ %span Responsive label
31
+ %details.mobile-links
32
+ %summary.mobile-menu-btn
33
+ .navlink
34
+ %span.sr-only Open main menu
35
+ %span.icon.icon-menu
36
+ .mobile-menu.sidebar
37
+ %a.navlink.active{href:'#'}
38
+ %span.navlink-badge.icon.icon-home
39
+ Navlink active
40
+ %a.navlink{href:'#'}
41
+ %span.navlink-badge.icon.icon-plus
42
+ Add project
43
+ %details
44
+ %summary.navlink
45
+ %span.icon.icon-product
46
+ Collapsable
47
+ %a.navlink{href:'#'}
48
+ %span.icon.icon-test
49
+ Navlink child
50
+ %a.navlink{href:'#'}
51
+ %span.icon.icon-test
52
+ Navlink child
53
+ %a.navlink{href:'#'}
54
+ %span.icon.icon-test
55
+ Navlink child
56
+ %a.navlink.active{href:'#'}
57
+ %span.icon.icon-test
58
+ Active child
59
+ .navlinks.right
60
+ %details.header-dropdown.user-menu
61
+ %summary.btn-profile.navlink
62
+ %span.sr-only Open user menu
63
+ %img.user-profile{src:'/assets/images/placeholders/profile_supergirl.png'}
64
+ .user-details
65
+ .profile-role Admin
66
+ .profile-name Anja Berger
67
+ .dropdown-menu.profile-dropdown
68
+ %a.dropdown-link{href:'#'}
69
+ %span.icon.icon-user
70
+ Your Profile
71
+ %a.dropdown-link{href:'#'}
72
+ %span.icon.icon-cog
73
+ Settings
74
+ %a.dropdown-link{href:'#'}
75
+ %span.icon.icon-shutdown
76
+ Sign out
77
+
@@ -0,0 +1,20 @@
1
+ ---
2
+ tags: components
3
+ title: Pagination
4
+ ---
5
+
6
+ %p.mb-3
7
+ This component uses the pagy ruby gem:
8
+ %a{href:"https://ddnexus.github.io/pagy"} https://ddnexus.github.io/pagy
9
+ %nav.pagy-bootstrap.nav
10
+ %ul.pagination
11
+ %li.page-item.prev
12
+ %a.page-link{href:"#"} <
13
+ %li.page-item
14
+ %a.page-link{href:"#"} 1
15
+ %li.page-item.active
16
+ %a.page-link{href:"#"} 2
17
+ %li.page-item
18
+ %a.page-link{href:"#"} 3
19
+ %li.page-item.next.disabled
20
+ %a.page-link{href:"#"} >
@@ -37,7 +37,7 @@ title: Splitview item collapsable
37
37
  .splitview-list
38
38
  %details.splitview-group
39
39
  %summary.splitview-item
40
- .splitview-item-icon.icon.icon-circle.danger
40
+ .splitview-item-icon.icon.icon-circle-empty
41
41
  .splitview-item-text
42
42
  .splitview-item-title Splitview group title / Test Case title
43
43
  .splitview-item-metainfo
@@ -0,0 +1,38 @@
1
+ ---
2
+ layout: page-example-agenticqa.njk
3
+ title: "Agentic QA"
4
+ tags: "examples"
5
+ ---
6
+
7
+ %main.main-content.centered#ds-splitview-demo
8
+ .centered-content
9
+ .grid-splitview
10
+ .card.p-card-padding.splitview-list
11
+ %nav.nav-tabs
12
+ .navlink.active{href:""} 11 Pages
13
+ .navlink{href:""} 6 Checks
14
+ %details.splitview-group
15
+ %summary.splitview-item.unread
16
+ .splitview-item-icon.icon.icon-circle-empty.text-chart-empty
17
+ .splitview-item-text
18
+ .splitview-item-title Splitview group title / Test Case title
19
+ .splitview-item-status
20
+ .text-with-icon
21
+ .icon.icon-sync
22
+ executing checks
23
+ .splitview-item.selected#ds-splitview-demo-item
24
+ .splitview-item-icon.icon.icon-cross-circle-filled.danger
25
+ .splitview-item-text Check title
26
+ .splitview-item.unread
27
+ .splitview-item-icon.icon.icon-check-circle-filled.success
28
+ .splitview-item-text Check title with a lot of lorem ipsum
29
+ .splitview-item.unread
30
+ .splitview-item-icon.icon.icon-blocked.blocked
31
+ .splitview-item-text Check title with a lot of lorem ipsum
32
+ .splitview-item.unread
33
+ .splitview-item-icon.icon.icon-sync.pending
34
+ .splitview-item-text Check title with a lot of lorem ipsum
35
+ .card.p-card-padding.splitview-details
36
+ .splitview-details-header
37
+ %h3.splitview-details-title Splitview-details-title
38
+