CIENCIA, TECNOLOGÍA E INNOVACIÓN EN BOLIVIA - Vicerrectorado
PUBLICACIONES
Se ha producido un error al procesar la plantilla.
Unable to parse Velocity template
1<style>
2@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
3@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css');
4
5@font-face {
6font-family: 'Nexa';
7src: url('/o/umsa-theme/fonts/Nexa-Bold.otf') format('opentype');
8font-weight: normal;
9font-style: normal;
10}
11
12.lib-struct-section {
13width: 100%;
14margin: 20px 0;
15box-sizing: border-box;
16}
17
18.lib-struct-card {
19background-color: #ffffff;
20border-radius: 18px;
21border: 1px solid #dbeafe;
22box-shadow: 0 6px 25px rgba(2, 73, 102, 0.06);
23overflow: hidden;
24display: flex;
25flex-direction: row;
26padding: 24px;
27gap: 24px;
28transition: all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
29box-sizing: border-box;
30}
31
32.lib-struct-card:hover {
33box-shadow: 0 16px 35px rgba(2, 73, 102, 0.15);
34border-color: #024966;
35}
36
37.lib-struct-img-container {
38width: 390px;
39min-width: 390px;
40height: 540px;
41background-color: #f0f4f8;
42display: flex;
43align-items: center;
44justify-content: center;
45overflow: hidden;
46position: relative;
47padding: 10px;
48box-sizing: border-box;
49border-radius: 12px;
50border: 1px solid #e2e8f0;
51cursor: pointer;
52}
53
54.lib-struct-img-container img.lib-struct-img {
55max-width: 100% !important;
56max-height: 100% !important;
57width: auto !important;
58height: auto !important;
59object-fit: cover !important;
60display: block !important;
61border-radius: 8px !important;
62transition: transform 0.5s ease !important;
63}
64
65.lib-struct-img-container:hover .lib-struct-img {
66transform: scale(1.05);
67}
68
69.lib-struct-content {
70display: flex;
71flex-direction: column;
72flex-grow: 1;
73background: transparent;
74}
75
76.lib-struct-title {
77font-family: 'Nexa', 'Inter', sans-serif;
78font-size: 2.15rem;
79font-weight: 700;
80line-height: 1.45;
81margin-bottom: 14px;
82}
83
84.lib-struct-title a {
85color: #024966;
86text-decoration: none;
87transition: color 0.2s ease;
88display: block;
89background-image: linear-gradient(currentColor, currentColor);
90background-position: 0% 100%;
91background-repeat: no-repeat;
92background-size: 0% 2px;
93transition: background-size 0.3s, color 0.3s;
94cursor: pointer;
95}
96
97.lib-struct-title a:hover {
98color: #be1f24;
99background-size: 100% 2px;
100text-decoration: none;
101}
102
103.lib-struct-details-wrapper {
104font-family: 'Inter', sans-serif;
105font-size: 1.58rem;
106color: #024966;
107line-height: 1.65;
108display: flex;
109flex-direction: column;
110gap: 14px;
111margin-top: 10px;
112}
113
114.lib-struct-desc {
115text-align: justify;
116color: #024966;
117font-size: 1.58rem;
118}
119
120.lib-struct-desc .img-umsa-wrapper {
121position: relative;
122display: block;
123margin: 20px auto;
124max-width: 100%;
125width: fit-content;
126overflow: hidden;
127border-radius: 12px;
128background-color: #ffffff;
129border: 1px solid #dbeafe;
130box-shadow: 0 4px 15px rgba(2, 73, 102, 0.1);
131padding: 12px;
132transition: all 0.3s ease;
133cursor: pointer;
134}
135
136.lib-struct-desc .img-umsa-wrapper:hover {
137box-shadow: 0 8px 25px rgba(2, 73, 102, 0.2);
138border-color: #024966;
139transform: translateY(-2px);
140}
141
142.lib-struct-desc img {
143display: block;
144max-width: 100% !important;
145height: auto !important;
146border-radius: 10px !important;
147margin: 0 auto !important;
148object-fit: contain !important;
149transition: transform 0.5s ease !important;
150}
151
152.lib-struct-desc .img-umsa-wrapper:hover img {
153transform: scale(1.02);
154}
155
156.lib-struct-meta-group {
157display: flex;
158flex-direction: column;
159gap: 4px;
160margin-top: 4px;
161}
162
163.lib-struct-label {
164font-family: 'Nexa', 'Inter', sans-serif;
165color: #024966;
166font-weight: 700;
167font-size: 1.58rem;
168}
169
170.lib-struct-value {
171color: #024966;
172font-size: 1.58rem;
173}
174
175.lib-struct-footer {
176display: flex;
177align-items: center;
178gap: 15px;
179margin-top: 20px;
180padding-top: 16px;
181border-top: 2px solid #edf2f7;
182flex-wrap: wrap;
183}
184
185.lib-struct-btn {
186text-decoration: none;
187color: #ffffff;
188background-color: #024966;
189padding: 14px 28px;
190border-radius: 30px;
191font-weight: 700;
192font-size: 1.42rem;
193transition: all 0.3s ease;
194box-shadow: 0 4px 12px rgba(2, 73, 102, 0.25);
195display: inline-flex;
196align-items: center;
197gap: 10px;
198font-family: 'Inter', sans-serif;
199}
200
201.lib-struct-btn:hover {
202background-color: #01364d;
203transform: translateY(-2px);
204box-shadow: 0 6px 18px rgba(2, 73, 102, 0.35);
205color: #ffffff;
206text-decoration: none;
207}
208
209.lib-modal-umsa {
210display: none;
211position: fixed;
212z-index: 9999;
213left: 0;
214top: 0;
215width: 100%;
216height: 100%;
217background-color: rgba(0, 0, 0, 0.9);
218align-items: center;
219justify-content: center;
220}
221
222.lib-modal-umsa img {
223max-width: 90%;
224max-height: 90%;
225border-radius: 10px;
226object-fit: contain;
227box-shadow: 0 5px 30px rgba(0,0,0,0.5);
228}
229
230@media screen and (max-width: 768px) {
231.lib-struct-card {
232flex-direction: column;
233align-items: center;
234padding: 20px;
235text-align: center;
236}
237.lib-struct-img-container {
238width: 240px;
239min-width: 240px;
240height: 330px;
241margin-bottom: 10px;
242}
243.lib-struct-content {
244width: 100%;
245}
246.lib-struct-details-wrapper {
247text-align: center !important;
248}
249.lib-struct-desc {
250text-align: center !important;
251}
252.lib-struct-footer {
253justify-content: center;
254}
255}
256</style>
257
258<section class="lib-struct-section">
259<div class="lib-struct-card">
260#if ($img_portada && $img_portada.getData() != "")
261 #set($imgPortadaVal = $img_portada.getData())
262#else
263 #set($imgPortadaVal = "https://placehold.co/600x400/024966/FFFFFF?text=Sin+Imagen")
264#end
265
266<div class="lib-struct-img-container" onclick="openLibModal('$imgPortadaVal')">
267 <img class="lib-struct-img" src="$imgPortadaVal" alt="$reserved-article-title.getData()" onerror="this.onerror=null;this.src='https://placehold.co/600x400/024966/FFFFFF?text=Imagen+No+Disponible';" />
268</div>
269
270<div class="lib-struct-content">
271 #set ($articleTitle = "")
272 #if ($validator.isNotNull($reserved-article-title.getData()))
273 #set ($articleTitle = $reserved-article-title.getData())
274 #end
275
276 #set ($articleId = "")
277 #if ($validator.isNotNull($reserved-article-id.getData()))
278 #set ($articleId = $reserved-article-id.getData())
279 #end
280
281 <h3 class="lib-struct-title">
282 <a href="javascript:;" class="enl_$articleId">$articleTitle</a>
283 </h3>
284
285 <div class="lib-struct-details-wrapper" id="$articleId">
286 #if ($descripcion_lib && $descripcion_lib.getData() != "")
287 <div class="lib-struct-desc">
288 #set($htmlRaw = $descripcion_lib.getData())
289 #set($htmlWrapped = $htmlRaw.replaceAll('<img([^>]+)src="([^"]+)"([^>]*)>', '<div class="img-umsa-wrapper" onclick="openLibModal(\'$2\')"><img$1src="$2"$3></div>'))
290 $htmlWrapped
291 </div>
292 #end
293
294 #if ($autor_lib && $autor_lib.getData() != "")
295 <div class="lib-struct-meta-group">
296 <div class="lib-struct-label">Autor(es)</div>
297 <div class="lib-struct-value">$autor_lib.getData()</div>
298 </div>
299 #end
300
301 #if ($FechaDePublicacion && $FechaDePublicacion.getData() != "")
302 #set ($FechaDePublicacion_Data = $getterUtil.getString($FechaDePublicacion.getData()))
303 #if ($validator.isNotNull($FechaDePublicacion_Data))
304 #set ($FechaDePublicacion_DateObj = $dateUtil.parseDate("yyyy-MM-dd", $FechaDePublicacion_Data, $locale))
305 <div class="lib-struct-meta-group">
306 <div class="lib-struct-label">Fecha de publicación:</div>
307 <div class="lib-struct-value">$dateUtil.getDate($FechaDePublicacion_DateObj, "yyyy", $locale)</div>
308 </div>
309 #end
310 #end
311
312 <div class="lib-struct-footer">
313 #if ($enlace_lib && $enlace_lib.getData() != "")
314 <a class="lib-struct-btn" href="$enlace_lib.getData()" target="_blank">
315 <i class="fa-solid fa-external-link-alt"></i> Ver Enlace
316 </a>
317 #end
318
319 #if ($documento_lib && $documento_lib.getData() != "")
320 <a class="lib-struct-btn" href="$documento_lib.getData()" target="_blank">
321 <i class="fa-solid fa-download"></i> $languageUtil.format($locale, "download-x","")
322 </a>
323 #end
324 </div>
325 </div>
326</div>
327</div>
328</section>
329
330<div id="libModalGlobal" class="lib-modal-umsa" onclick="closeLibModal()">
331 <img id="libModalImg" src="" alt="Imagen Ampliada">
332</div>
333
334<script>
335function openLibModal(imgSrc) {
336 var modal = document.getElementById('libModalGlobal');
337 var modalImg = document.getElementById('libModalImg');
338 modalImg.src = imgSrc;
339 modal.style.display = 'flex';
340}
341
342function closeLibModal() {
343 var modal = document.getElementById('libModalGlobal');
344 modal.style.display = 'none';
345}
346
347$(document).ready(function(){
348 $(".enl_$articleId").click(function () {
349 $("#$articleId").toggle("slow");
350 });
351});
352</script>