حصل خطأ عند معالجة القالب.
Java method "com.sun.proxy.$Proxy148.getFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy148 object "com.liferay.document.library.internal.service.FriendlyURLDLFileEntryLocalServiceWrapper@14419dc0"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #return dlFileEntry.getFileEntryByUui... [in template "74588389795879#20119#FULL-SERVICE" in function "getFileEntryByUrl" at line 16, column 17]
- Reached through: @renderTopicRow iconFilename="certifi... [in template "74588389795879#20119#FULL-SERVICE" at line 296, column 17]
----
1<#assign dlFileEntry = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
2
3<#assign iconsThemePath = "/o/edetheme-theme/images/icons/" />
4
5<#function getFileEntryByUrl url>
6 <#assign urlParts = url?split("/")>
7 <#assign groupId = "">
8 <#assign uuId = "">
9
10 <#if (urlParts?size >= 6)>
11 <#assign groupId = urlParts[2]?number>
12 <#assign uuId = urlParts[5]?keep_before("?")>
13 </#if>
14
15 <#if groupId?has_content && uuId?has_content>
16 <#return dlFileEntry.getFileEntryByUuidAndGroupId(uuId, groupId)>
17 <#else>
18 <#return null>
19 </#if>
20</#function>
21
22<#macro renderSection id title siblings threshold showMoreText showLessText listCssClass="" serviceProcess=false isFaq=false>
23 <#if (siblings?size > 0) && (siblings[0].getData()?has_content) >
24 <div id="${id}">
25 <h2>${title}</h2>
26 <#--
27 <#if (serviceProcess)>
28 <h6 class="mt-4">${languageUtil.get(locale, "when-applying-through-the-website")}</h6>
29 </#if>
30 -->
31
32 <ul class="${listCssClass} ${serviceProcess?then('mb-5 mt-3', 'my-5')}">
33 <#list 0..siblings?size-1 as i>
34 <#if siblings[i].getData()?? && siblings[i].getData() != "">
35 <#assign isAnswer = isFaq && ((i + 1) % 2 == 0)>
36
37 <#if (i > threshold)>
38 <li data-hidden-li class="d-none mb-3 ${isAnswer?then('font-weight-normal', '')}">${siblings[i].getData()}</li>
39 <#else>
40 <li class="mb-3 ${isAnswer?then('font-weight-normal', '')}">${siblings[i].getData()}</li>
41 </#if>
42 </#if>
43 </#list>
44 </ul>
45
46 <#if (siblings?size > threshold + 1)>
47 <a data-toggle-show href="javascript:void(0)" class="font-weight-bold text-brand-1">
48 <span>${showMoreText}</span>
49 <span class="d-none">${showLessText}</span>
50 </a>
51 </#if>
52 <hr class="my-5">
53 </div>
54 </#if>
55</#macro>
56
57<#macro renderTopicRow iconFilename title content isResources=false isServiceFees=false withoutHr=false listCssClass="">
58 <div class="d-flex align-items-start justify-content-start">
59 <img
60 class="mr-4"
61 src="${iconsThemePath + iconFilename}"
62 />
63 <div class="row w-100">
64 <div class="col-12 col-md-5">
65 <h4 class="mb-md-0">${title}</h4>
66 </div>
67
68 <div class="col-12 col-md-7 d-flex flex-column">
69 <#if content?is_string>
70 <p class="mb-0">${content}<p>
71 <#elseif (content?is_sequence) && (isResources == false)>
72 <ul class="${listCssClass}">
73 <#list content as item>
74 <#if item.getData() != "">
75 <li class="mb-2 ${(item?is_first && isServiceFees)?then('font-weight-normal', '')}"> ${item.getData()}</li>
76 </#if>
77 </#list>
78 </ul>
79 <#elseif isResources>
80 <ul class="list-unstyled">
81 <#list content as item>
82 <#if (item.getData()??) && (item.getData() != "")>
83 <#assign fileEntry = getFileEntryByUrl(item.getData()) />
84
85 <li>
86 <a href="${item.getData()}" class="text-dark" target="_blank">
87 ${fileEntry.getFileName()?replace(serviceTitle.getData() + " - " , "")} ${(fileEntry.getSize()/1024)?round}KB
88 </a>
89 </li>
90 </#if>
91 </#list>
92
93 <#list 0..resourcePageTitle.getSiblings()?size-1 as i>
94 <#assign curPageTitle = resourcePageTitle.getSiblings()[i].getData() />
95 <#assign curPageUrl = resourcePageUrl.getSiblings()[i].getData() />
96
97 <#if (curPageTitle?has_content) && (curPageUrl?has_content)>
98 <li>
99 <a href="${curPageUrl}" class="text-dark" target="_blank">
100 ${curPageTitle}
101 </a>
102 </li>
103 </#if>
104 </#list>
105 </ul>
106 </#if>
107 </div>
108 </div>
109 </div>
110
111 <#if (withoutHr == false)>
112 <hr class="my-5">
113 </#if>
114</#macro>
115
116<div class="full-service pt-7 d-flex flex-column">
117 <div class="full-service-header-wrapper">
118 <div class="full-service-header bg-brand-2 w-100">
119 <div class="container position-relative">
120 <#if (serviceTitle.getData())?? && (serviceTitle.getData()) != "">
121 <div class="py-4">
122 <h1 class="full-service-title text-brand-1" style="font-size:2.5rem; !important">${serviceTitle.getData()}</h1>
123 </div>
124 </#if>
125 <#assign serviceUrl = startServiceLink.getData()!"" />
126
127 <#if serviceUrl?has_content && serviceUrl?contains("ede.gov.ae")>
128 <a
129 href="${serviceUrl}"
130 class="full-service-card-button start-service-btn-scrolled bg-white text-brand-1 p-3 mb-4 d-none"
131 target="_blank"
132 >
133 <h6 class="mb-0">${languageUtil.get(locale, "start-service")}</h6>
134 <img class="arrow-icon mx-3" src="${iconsThemePath}arrow-right-golden.svg" />
135 </a>
136 <#else>
137 <a
138 href="#"
139 class="full-service-card-button start-service-btn-scrolled bg-white text-brand-1 p-3 mb-4 d-none start-service-external"
140 data-service-url="${serviceUrl}"
141 target="_blank"
142 >
143 <h6 class="mb-0">${languageUtil.get(locale, "start-service")}</h6>
144 <img class="arrow-icon mx-3" src="${iconsThemePath}arrow-right-golden.svg" />
145 </a>
146 </#if>
147 <div class="full-service-card position-absolute w-100 px-3 py-4 p-md-6 row">
148 <div class="d-flex flex-column col-7 col-md-3">
149 <#if serviceUrl?has_content && serviceUrl?contains("ede.gov.ae")>
150 <a
151 href="${serviceUrl}"
152 class="full-service-card-button bg-white text-brand-1 p-3 mb-4"
153 target="_blank"
154 >
155 <h6 class="mb-0">${languageUtil.get(locale, "start-service")}</h6>
156 <img class="arrow-icon" src="${iconsThemePath}arrow-right-golden.svg" />
157 </a>
158 <#else>
159 <a
160 class="full-service-card-button bg-white text-brand-1 p-3 mb-4 start-service-external"
161 data-service-url="${serviceUrl}"
162 target="_blank"
163 >
164 <h6 class="mb-0">${languageUtil.get(locale, "start-service")}</h6>
165 <img class="arrow-icon" src="${iconsThemePath}arrow-right-golden.svg" />
166 </a>
167 </#if>
168 <#if (serviceCardFile.getData())?? && (serviceCardFile.getData() != "")>
169 <a href="${serviceCardFile.getData()}" class="full-service-card-button border border-dark text-brand-1 p-3">
170 <h6 class="mb-0">${languageUtil.get(locale, "download-service-card")}</h6>
171 <img class="download-icon" src="${iconsThemePath}download.svg" />
172 </a>
173 </#if>
174 </div>
175 <div class="d-none d-md-block col-2"></div>
176 <div class="d-flex flex-column col-5 col-md-7 d-flex justify-content-start justify-content-md-center">
177 <div class="mb-1 mb-md-4">
178 <h6 class="text-brand-1">${languageUtil.get(locale, "service-completion-duration")}</h6>
179 <#if (serviceCompletionDuration.getData())?? && (serviceCompletionDuration.getData() != "")>
180 <p>${serviceCompletionDuration.getData()}</p>
181 </#if>
182 </div>
183 <div>
184 <h6 class="text-brand-1">${languageUtil.get(locale, "service-fees")}</h6>
185 <ul class="list-unstyled service-fees-list">
186 <#list serviceFeesInfo.getSiblings() as item>
187 <#if item_index < 2 && item.getData() != "">
188 <li>${item.getData()}</li>
189 </#if>
190 </#list>
191 </ul>
192 </div>
193 </div>
194 </div>
195 </div>
196 </div>
197 </div>
198
199 <div class="full-service-content container position-relative py-2 py-sm-4 py-md-6">
200 <#if (aboutService.getData())?? && (aboutService.getData()) != "">
201 <div id="about">
202 <h2 class="mb-4">${languageUtil.get(locale, "about-the-service")}</h2>
203 <p>${aboutService.getData()}</p>
204 </div>
205 <hr class="my-5" >
206 </#if>
207
208 <@renderSection
209 id="service-process"
210 title=languageUtil.get(locale, "service-process")
211 siblings=step.getSiblings()
212 threshold=3
213 showMoreText=languageUtil.get(locale, "show-more")
214 showLessText=languageUtil.get(locale, "show-less")
215 listCssClass="list-unstyled"
216 serviceProcess=true
217 />
218
219 <@renderSection
220 id="conditions-and-requirements"
221 title=languageUtil.get(locale, "conditions-and-requirements")
222 siblings=conditionOrRequirement.getSiblings()
223 threshold=0
224 showMoreText=languageUtil.get(locale, "show-all-conditions-and-requirements")
225 showLessText=languageUtil.get(locale, "show-less")
226 listCssClass="list-unstyled"
227 />
228
229 <@renderSection
230 id="required-documents"
231 title=languageUtil.get(locale, "required-documents")
232 siblings=requiredDocument.getSiblings()
233 threshold=6
234 showMoreText=languageUtil.get(locale, "show-all-required-documents")
235 showLessText=languageUtil.get(locale, "show-less")
236 />
237
238 <@renderSection
239 id="faqs"
240 title=languageUtil.get(locale, "faqs")
241 siblings=faq.getSiblings()
242 threshold=1
243 showMoreText=languageUtil.get(locale, "show-all-faqs")
244 showLessText=languageUtil.get(locale, "show-less")
245 listCssClass="list-unstyled"
246 isFaq=true
247 />
248
249 <@renderTopicRow
250 iconFilename="clock.svg"
251 title=languageUtil.get(locale, "service-completion-duration")
252 content=serviceCompletionDuration.getData()
253 />
254
255 <@renderTopicRow
256 iconFilename="coins.svg"
257 title=languageUtil.get(locale, "service-fees")
258 content=serviceFeesInfo.getSiblings()
259 listCssClass="list-unstyled"
260 isServiceFees=true
261 />
262
263 <@renderTopicRow
264 iconFilename="globe.svg"
265 title=languageUtil.get(locale, "service-channels")
266 content=serviceChannel.getSiblings()
267 />
268
269<#--
270 <@renderTopicRow
271 iconFilename="pin.svg"
272 title=languageUtil.get(locale, "service-locations")
273 content=serviceLocation.getSiblings()
274 />
275-->
276
277 <@renderTopicRow
278 iconFilename="support.svg"
279 title=languageUtil.get(locale, "support")
280 content=support.getSiblings()
281 />
282
283 <@renderTopicRow
284 iconFilename="target.svg"
285 title=languageUtil.get(locale, "target-audience")
286 content=targetAudience.getSiblings()
287 />
288
289 <@renderTopicRow
290 iconFilename="card.svg"
291 title=languageUtil.get(locale, "payment-channels")
292 content=paymentChannel.getSiblings()
293 listCssClass="list-unstyled"
294 />
295
296 <@renderTopicRow
297 iconFilename="certificate.svg"
298 title=languageUtil.get(locale, "resources")
299 content=resource.getSiblings()
300 isResources=true
301 />
302
303<#--
304 <@renderTopicRow
305 iconFilename="board.svg"
306 title=languageUtil.get(locale, "department-name")
307 content=departmentName.getData()
308 />
309
310 <@renderTopicRow
311 iconFilename="badge.svg"
312 title=languageUtil.get(locale, "sector-name")
313 content=sectorName.getData()
314 />
315
316 <@renderTopicRow
317 iconFilename="hand.svg"
318 title=languageUtil.get(locale, "main-service")
319 content=mainService.getData()
320 />
321
322 <@renderTopicRow
323 iconFilename="code.svg"
324 title=languageUtil.get(locale, "service-code")
325 content=serviceCode.getData()
326 />
327
328 <@renderTopicRow
329 iconFilename="gears.svg"
330 title=languageUtil.get(locale, "service-classification")
331 content=serviceClassification.getData()
332 />
333
334 <@renderTopicRow
335 iconFilename="menu.svg"
336 title=languageUtil.get(locale, "service-type")
337 content=serviceTypeDescription.getData()
338 />
339
340 <@renderTopicRow
341 iconFilename="flag.svg"
342 title=languageUtil.get(locale, "sub-service-type")
343 content=subServiceType.getData()
344 />
345-->
346
347 <@renderTopicRow
348 iconFilename="message.svg"
349 title=languageUtil.get(locale, "related-services")
350 content=relatedService.getSiblings()
351 listCssClass="list-unstyled"
352 />
353
354
355<#--
356 <@renderTopicRow
357 iconFilename="stack.svg"
358 title=languageUtil.get(locale, "service-bundle")
359 content=serviceBundle.getData()
360 />
361
362 <@renderTopicRow
363 iconFilename="user.svg"
364 title=languageUtil.get(locale, "number-of-users")
365 content=numberOfUsers.getData()
366 />
367
368 <@renderTopicRow
369 iconFilename="chart.svg"
370 title=languageUtil.get(locale, "number-of-transactions")
371 content=numberOfTransactions.getData()
372 />
373
374 <@renderTopicRow
375 iconFilename="info.svg"
376 title=languageUtil.get(locale, "notes")
377 content=notes.getData()
378 withoutHr=true
379 />
380-->
381
382 </div>
383</div>
384
385<script>
386 function initFullService() {
387 const fullServiceTemplate = document.querySelector(".full-service");
388 if (!fullServiceTemplate) return;
389
390 const fullServiceHeader = fullServiceTemplate.querySelector(".full-service-header");
391
392 const handleScroll = () => {
393 const isLargeScreen = window.innerWidth >= 768;
394 const isScrolled = window.scrollY > 0;
395
396 if (!fullServiceHeader) return;
397
398 if (isLargeScreen && isScrolled) {
399 fullServiceHeader.classList.add("scrolled");
400 fullServiceHeader.parentElement.style.height = "20rem";
401 }
402
403 if (isLargeScreen && !isScrolled){
404 fullServiceHeader.classList.remove("scrolled");
405 fullServiceHeader.parentElement.style.height = "33rem";
406 }
407 };
408
409 window.addEventListener("scroll", handleScroll);
410
411 const links = fullServiceTemplate.querySelectorAll('.start-service-external');
412
413 const leave_ede_website = "Leave EDE Website";
414 const external_service_warning_1 = "You are about to leave EDE website to visit an external services portal.";
415 const external_service_warning_2 = "Do you want to proceed?";
416 const cancel = "Cancel";
417 const proceed = "Proceed";
418
419 links.forEach(function (el) {
420 // To avoid duplicate bindings when SPA reuses the DOM:
421 if (el.dataset.modalBound === "true") return;
422 el.dataset.modalBound = "true";
423
424 el.addEventListener('click', function (event) {
425 event.preventDefault();
426
427 const url = el.getAttribute('data-service-url');
428
429 if(Liferay.ThemeDisplay.getLanguageId() === "ar_SA") {
430 Liferay.Util.openModal({
431 title: 'مغادرة موقع مؤسسة الإمارات للدواء',
432 bodyHTML:
433 '<p>أنت على وشك مغادرة موقع مؤسسة الإمارات للدواء والانتقال إلى بوابة خدمات خارجية.</p>' +
434 '<p>هل ترغب في المتابعة؟</p>',
435 buttons: [
436 {
437 label: 'متابعة',
438 type: 'submit',
439 class: 'my-proceed-btn',
440 onClick: function () {
441 window.open(url, '_blank');
442 }
443 },
444 {
445 label: 'إلغاء',
446 type: 'cancel',
447 class: 'my-cancel-btn'
448 }
449 ]
450 });
451 } else {
452 Liferay.Util.openModal({
453 title: 'Leave EDE Website',
454 bodyHTML:
455 '<p>You are about to leave EDE website to visit external services portal.</p>' +
456 '<p>Do you want to proceed?</p>',
457 buttons: [
458 {
459 label: 'Proceed',
460 type: 'submit',
461 class: 'my-proceed-btn',
462 onClick: function () {
463 window.open(url, '_blank');
464 }
465 },
466 {
467 label: 'Cancel',
468 type: 'cancel',
469 class: 'my-cancel-btn'
470 }
471 ]
472 });
473 }
474 });
475 });
476 }
477
478 // Run on a normal full page load
479 document.addEventListener('DOMContentLoaded', initFullService);
480
481 // Run after SPA navigation (when you land on this page via Liferay SPA)
482 Liferay.on('endNavigate', function () {
483 initFullService();
484 });
485(function () {
486 // Prevent duplicate bindings across SPA reloads
487 if (window.__fullServiceShowMoreBound) return;
488 window.__fullServiceShowMoreBound = true;
489
490document.addEventListener("click", function (e) {
491 const anchor = e.target.closest('a[data-toggle-show]');
492 if (!anchor) return;
493
494 e.preventDefault();
495
496 // Find the nearest section container by structure, not generic div
497 const section = anchor.parentElement;
498 if (!section) return;
499
500 const list = section.querySelector("ul");
501 if (!list) return;
502
503 // Toggle hidden items
504 list.querySelectorAll("li[data-hidden-li]").forEach(li => {
505 li.classList.toggle("d-none");
506 });
507
508 // Toggle text
509 anchor.querySelectorAll("span").forEach(span => {
510 span.classList.toggle("d-none");
511 });
512});
513})();
514
515</script>
516
517
518
519<style>
520
521 .my-proceed-btn {
522 background-color: #ffffff !important; /* White */
523 border-color: #b58934 !important;
524 color: #b58934 !important;
525
526 border-style: solid;
527 border-width: 0.0625rem;
528 border-radius: 0.25rem;
529 box-shadow: none;
530 cursor: pointer;
531 display: inline-block;
532 font-size: 1rem;
533 font-weight: var(--font-weight-semi-bold, 600);
534 line-height: 1.5;
535 padding-bottom: 0.4375rem;
536 padding-right: 0.9375rem;
537 padding-left: 0.9375rem;
538 padding-top: 0.4375rem;
539 text-align: center;
540 text-transform: none;
541 transition: color 0.15s
542 ease-in-out, background-color 0.15s
543 ease-in-out, border-color 0.15s
544 ease-in-out, box-shadow 0.15s
545 ease-in-out;
546 -ms-user-select: none;
547 -moz-user-select: none;
548 -webkit-user-select: none;
549 user-select: none;
550 vertical-align: middle;
551}
552
553.my-proceed-btn:hover {
554 background-color: #b58934 !important;
555 border-color: #b58934 !important;
556 color: #fff !important;
557
558
559 border-style: solid;
560 border-width: 0.0625rem;
561 border-radius: 0.25rem;
562 box-shadow: none;
563 cursor: pointer;
564 display: inline-block;
565 font-size: 1rem;
566 font-weight: var(--font-weight-semi-bold, 600);
567 line-height: 1.5;
568 padding-bottom: 0.4375rem;
569 padding-right: 0.9375rem;
570 padding-left: 0.9375rem;
571 padding-top: 0.4375rem;
572 text-align: center;
573 text-transform: none;
574 transition: color 0.15s
575 ease-in-out, background-color 0.15s
576 ease-in-out, border-color 0.15s
577 ease-in-out, box-shadow 0.15s
578 ease-in-out;
579 -ms-user-select: none;
580 -moz-user-select: none;
581 -webkit-user-select: none;
582 user-select: none;
583 vertical-align: middle;
584}
585
586 .my-cancel-btn {
587 background-color: #ffffff !important; /* White */
588 border-color: #c9302c !important;
589 color: #ac2925 !important;
590
591 border-style: solid;
592 border-width: 0.0625rem;
593 border-radius: 0.25rem;
594 box-shadow: none;
595 cursor: pointer;
596 display: inline-block;
597 font-size: 1rem;
598 font-weight: var(--font-weight-semi-bold, 600);
599 line-height: 1.5;
600 padding-bottom: 0.4375rem;
601 padding-right: 0.9375rem;
602 padding-left: 0.9375rem;
603 padding-top: 0.4375rem;
604 text-align: center;
605 text-transform: none;
606 transition: color 0.15s
607 ease-in-out, background-color 0.15s
608 ease-in-out, border-color 0.15s
609 ease-in-out, box-shadow 0.15s
610 ease-in-out;
611 -ms-user-select: none;
612 -moz-user-select: none;
613 -webkit-user-select: none;
614 user-select: none;
615 vertical-align: middle;
616}
617
618.my-cancel-btn:hover {
619 background-color: #c9302c !important;
620 border-color: #ac2925 !important;
621 color: #fff !important;
622
623
624 border-style: solid;
625 border-width: 0.0625rem;
626 border-radius: 0.25rem;
627 box-shadow: none;
628 cursor: pointer;
629 display: inline-block;
630 font-size: 1rem;
631 font-weight: var(--font-weight-semi-bold, 600);
632 line-height: 1.5;
633 padding-bottom: 0.4375rem;
634 padding-right: 0.9375rem;
635 padding-left: 0.9375rem;
636 padding-top: 0.4375rem;
637 text-align: center;
638 text-transform: none;
639 transition: color 0.15s
640 ease-in-out, background-color 0.15s
641 ease-in-out, border-color 0.15s
642 ease-in-out, box-shadow 0.15s
643 ease-in-out;
644 -ms-user-select: none;
645 -moz-user-select: none;
646 -webkit-user-select: none;
647 user-select: none;
648 vertical-align: middle;
649}
650
651.text-brand-1 {
652--h6-font-size: 1.2rem !important;
653}
654
655 .full-service {
656 --header-height-md: 33rem;
657 --header-height-sm: 18rem;
658 --header-height-xs: 23rem;
659 --card-border-radius-desktop: 5rem;
660 --card-border-radius-mobile: 2.5rem;
661 --button-border-radius: 1rem;
662 --button-border-width: 0.13rem;
663 --spacer-6: 2.0rem !important;
664 --font-size-base: 0.5 !important;
665 }
666
667 .full-service p,
668 .full-service li {
669 font-weight: 300;
670 font-size: 1.0rem !important;
671}
672
673 .full-service .full-service-header-wrapper {
674 height: var(--header-height-md);
675 transition: height 0.3s ease;
676 }
677
678 .full-service .full-service-header {
679 height: 22rem !important;
680 transition: all 0.3s ease;
681 z-index: 1 !important;
682 }
683
684 .full-service .full-service-card {
685 background-color: #F1F2F2;
686 border-radius: var(--card-border-radius-desktop);
687 transition: border-radius 0.3s ease;
688 }
689
690 .full-service .full-service-card-button {
691 border-radius: var(--button-border-radius);
692 cursor: pointer;
693 border-width: var(--button-border-width) !important;
694 display: flex;
695 justify-content: space-between;
696 align-items: center;
697 transition: all 0.2s ease;
698 text-decoration:none;
699 }
700
701 .full-service .full-service-card-button:hover {
702 background-color: rgba(0, 0, 0, 0.05);
703 }
704
705 .d-flex {
706 justify-content: center !important;
707 }
708
709 .full-service .full-service-card-button .arrow-icon:dir(rtl) {
710 transform: rotate(180deg);
711 }
712
713 .full-service .full-service-header.scrolled {
714 height: auto !important;
715 }
716
717 .full-service .full-service-header.scrolled {
718 position: fixed !important;
719 height: auto !important;
720 z-index: 10;
721 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
722 }
723
724 .full-service .full-service-header.scrolled .container {
725 display: flex;
726 justify-content: space-between;
727 align-items: center;
728 }
729
730 .full-service .full-service-header.scrolled .full-service-card {
731 display: none;
732 }
733
734 .full-service .full-service-header.scrolled .start-service-btn-scrolled {
735 display: flex !important;
736 justify-content: space-between;
737 align-items: center;
738 text-wrap: nowrap;
739 margin-bottom: 0 !important;
740 width: 19rem;
741 transition: all 0.2s ease;
742 }
743
744 .full-service .full-service-header.scrolled .start-service-btn-scrolled:hover {
745 background-color: rgba(0, 0, 0, 0.05);
746 }
747
748 .full-service .full-service-title {
749 display: -webkit-box;
750 -webkit-line-clamp: 2;
751 -webkit-box-orient: vertical;
752 overflow: hidden;
753 text-overflow: ellipsis;
754 }
755
756 @media screen and (max-width: 767px) {
757 .full-service .full-service-header-wrapper {
758 height: var(--header-height-sm) !important;
759 }
760
761 .full-service .full-service-card {
762 border-radius: var(--card-border-radius-mobile);
763 }
764
765 .full-service .full-service-card h6 {
766 font-size: 0.875rem !important;
767 }
768
769 .full-service .full-service-card p {
770 font-size: 0.75rem !important;
771 }
772
773 .full-service .arrow-icon {
774 width: 0.6rem !important;
775 }
776
777 .full-service .full-service-card .download-icon {
778 width: 1rem !important;
779 }
780
781 .full-service .full-service-card .full-service-card-button {
782 border-width: 0.1rem !important;
783 }
784
785 .full-service .service-fees-list {
786 display: -webkit-box;
787 -webkit-line-clamp: 3;
788 -webkit-box-orient: vertical;
789 overflow: hidden;
790 text-overflow: ellipsis;
791 }
792 }
793
794 @media screen and (max-width: 575px) {
795 .full-service .full-service-header-wrapper {
796 height: var(--header-height-xs) !important;
797 }
798 }
799
800 @media screen and (max-width: 376px) {
801 .full-service .full-service-header-wrapper {
802 height: 35rem !important;
803 }
804 }
805</style>