/** * Estilos del frontend - Bloques en Transición * * Variables CSS personalizables desde el theme o CSS personalizado: * --bloques-primary: color principal * --bloques-secondary: color secundario * --bloques-accent: color de acento (naranja) * --bloques-text: color del texto * --bloques-text-light: color texto secundario * --bloques-bg: color de fondo * --bloques-radius: radio de bordes */ :root { --bloques-primary: #1E6B52; --bloques-secondary: #2A9D8F; --bloques-accent: #F97316; --bloques-text: #1f2937; --bloques-text-light: #6b7280; --bloques-bg: #f9fafb; --bloques-border: #e5e7eb; --bloques-radius: 12px; --bloques-shadow: 0 1px 3px rgba(0,0,0,0.1); --bloques-transition: 0.2s ease; } /* ========================================================================== CONTENEDOR PRINCIPAL ========================================================================== */ .bloques-listado { margin: 0; } /* ========================================================================== FILTROS - Estilo Botonera (unificado con mapa) ========================================================================== */ .bloques-filters { margin-bottom: 1.5rem; } .bloques-search-wrapper { margin-bottom: 1rem; } .bloques-search-input { width: 100%; max-width: 400px; padding: 12px 16px; border: 1px solid var(--bloques-border); border-radius: 8px; font-size: 0.95rem; background: white; transition: border-color var(--bloques-transition), box-shadow var(--bloques-transition); } .bloques-search-input:focus { outline: none; border-color: var(--bloques-accent); box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.1); } .bloques-filter-group { margin-bottom: 1rem; } .bloques-filter-label { display: block; font-size: 0.875rem; font-weight: 500; color: var(--bloques-text-light); margin-bottom: 0.75rem; } .bloques-filter-buttons { display: flex; flex-wrap: wrap; gap: 0.5rem; } .bloques-filter-btn { display: inline-flex; align-items: center; gap: 6px; padding: 8px 16px; border: 1px solid var(--bloques-border); border-radius: 50px; background: white; color: var(--bloques-text); font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all var(--bloques-transition); white-space: nowrap; } .bloques-filter-btn:hover { border-color: var(--bloques-accent); color: var(--bloques-accent); } .bloques-filter-btn.active { background: var(--btn-active-color, var(--bloques-accent)); border-color: var(--btn-active-color, var(--bloques-accent)); color: white; } .bloques-filter-icon { width: 18px; height: 18px; object-fit: contain; } .bloques-filter-btn.active .bloques-filter-icon { filter: brightness(0) invert(1); } .bloques-filters-footer { display: flex; align-items: center; gap: 1rem; padding-top: 1rem; margin-top: 0.5rem; font-size: 0.9rem; color: var(--bloques-text-light); } .bloques-results-count { display: flex; align-items: center; gap: 0.25rem; } .bloques-results-number { color: var(--bloques-text); } /* ========================================================================== GRID DE ITEMS ========================================================================== */ .bloques-items { display: grid; gap: 1.5rem; } .bloques-cols-1 { grid-template-columns: 1fr; } .bloques-cols-2 { grid-template-columns: repeat(2, 1fr); } .bloques-cols-3 { grid-template-columns: repeat(3, 1fr); } .bloques-cols-4 { grid-template-columns: repeat(4, 1fr); } @media (max-width: 1024px) { .bloques-cols-4 { grid-template-columns: repeat(3, 1fr); } } @media (max-width: 768px) { .bloques-cols-3, .bloques-cols-4 { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 480px) { .bloques-cols-2, .bloques-cols-3, .bloques-cols-4 { grid-template-columns: 1fr; } } /* ========================================================================== CARDS - Estilo unificado para recursos y noticias ========================================================================== */ .bloques-card { background: white; border-radius: var(--bloques-radius); border: 1px solid var(--bloques-border); overflow: hidden; transition: box-shadow var(--bloques-transition), transform var(--bloques-transition); } .bloques-card:hover { box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); transform: translateY(-2px); } .bloques-card-link { display: block; text-decoration: none; color: inherit; } .bloques-card-thumbnail { position: relative; aspect-ratio: 16/10; overflow: hidden; background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); } .bloques-card-thumbnail img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--bloques-transition); } .bloques-card:hover .bloques-card-thumbnail img { transform: scale(1.05); } .bloques-card-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%); } .bloques-card-placeholder-text { font-size: 1.5rem; font-weight: 700; letter-spacing: 4px; color: rgba(255, 255, 255, 0.15); text-transform: uppercase; } .bloques-card-badge { position: absolute; top: 12px; right: 12px; padding: 4px 10px; border-radius: 6px; font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; background: var(--bloques-accent); color: white; } .bloques-card-content { padding: 1rem 1.25rem 1.25rem; } .bloques-card-title { font-size: 1rem; font-weight: 600; line-height: 1.4; margin: 0 0 0.5rem; color: var(--bloques-text); } .bloques-card-excerpt { font-size: 0.875rem; color: var(--bloques-text-light); line-height: 1.5; margin: 0 0 0.75rem; } .bloques-card-meta { display: flex; align-items: center; gap: 0.5rem; font-size: 0.8rem; color: var(--bloques-text-light); margin-bottom: 0.75rem; } .bloques-card-meta svg { opacity: 0.6; } .bloques-card-date { font-size: 0.8rem; color: var(--bloques-text-light); } .bloques-card-footer { display: flex; align-items: center; gap: 0.75rem; margin-top: auto; } /* Card horizontal */ .bloques-card-horizontal { display: flex; flex-direction: row; } .bloques-card-horizontal .bloques-card-thumbnail { width: 200px; flex-shrink: 0; aspect-ratio: auto; } @media (max-width: 600px) { .bloques-card-horizontal { flex-direction: column; } .bloques-card-horizontal .bloques-card-thumbnail { width: 100%; aspect-ratio: 16/10; } } /* ========================================================================== BOTONES ========================================================================== */ .bloques-btn-outline { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border: 1px solid var(--bloques-border); border-radius: 8px; background: white; color: var(--bloques-text); font-size: 0.875rem; font-weight: 500; text-decoration: none; cursor: pointer; transition: all var(--bloques-transition); } .bloques-btn-outline:hover { border-color: var(--bloques-accent); color: var(--bloques-accent); } .bloques-btn-outline svg { opacity: 0.7; } .bloques-btn-load-more { display: inline-flex; align-items: center; gap: 8px; padding: 12px 28px; border: 2px solid var(--bloques-accent); border-radius: 50px; background: transparent; color: var(--bloques-accent); font-size: 0.95rem; font-weight: 600; cursor: pointer; transition: all var(--bloques-transition); } .bloques-btn-load-more:hover { background: var(--bloques-accent); color: white; } .bloques-load-more-wrapper { display: flex; justify-content: center; margin-top: 2rem; padding-top: 1rem; } /* ========================================================================== BLOQUES CON HEADER (Novedades, Agenda) ========================================================================== */ .bloques-block { margin: 2rem 0; } .bloques-block-header { display: flex; align-items: flex-start; gap: 1rem; margin-bottom: 1.5rem; } .bloques-block-icon { width: 40px; height: 40px; border-radius: 8px; background: #f3f4f6; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--bloques-text); } .bloques-block-icon-agenda { background: #FFF7ED; color: var(--bloques-accent); } .bloques-block-titles { flex: 1; } .bloques-block-title { font-size: 1.5rem; font-weight: 700; margin: 0 0 0.25rem; color: var(--bloques-text); } .bloques-block-subtitle { font-size: 0.9rem; color: var(--bloques-text-light); margin: 0; } .bloques-block-footer { margin-top: 1.25rem; } .bloques-link-more { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 0.9rem; font-weight: 500; color: var(--bloques-accent); text-decoration: none; transition: gap var(--bloques-transition); } .bloques-link-more:hover { gap: 0.75rem; } .bloques-arrow { transition: transform var(--bloques-transition); } .bloques-link-more:hover .bloques-arrow { transform: translateX(3px); } /* ========================================================================== NOVEDADES - Lista compacta ========================================================================== */ .bloques-novedades-list .bloques-items { display: flex; flex-direction: column; gap: 0; } .bloques-novedad-item { padding: 1.25rem 0; border-bottom: 1px solid var(--bloques-border); } .bloques-novedad-item:first-child { padding-top: 0; } .bloques-novedad-item:last-child { border-bottom: none; } .bloques-novedad-meta { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.5rem; } .bloques-novedad-category { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 11px; font-weight: 600; color: white; } .bloques-novedad-date { font-size: 0.85rem; color: var(--bloques-text-light); } .bloques-novedad-title { font-size: 1rem; font-weight: 600; margin: 0 0 0.5rem; line-height: 1.4; } .bloques-novedad-title a { color: var(--bloques-text); text-decoration: none; transition: color var(--bloques-transition); } .bloques-novedad-title a:hover { color: var(--bloques-primary); } .bloques-novedad-excerpt { font-size: 0.9rem; color: var(--bloques-text-light); margin: 0; line-height: 1.5; } /* ========================================================================== AGENDA - Lista de eventos ========================================================================== */ .bloques-agenda-list .bloques-items { display: flex; flex-direction: column; gap: 0.75rem; } .bloques-agenda-item { display: flex; align-items: stretch; background: white; border-radius: var(--bloques-radius); overflow: hidden; border: 1px solid var(--bloques-border); transition: box-shadow var(--bloques-transition), transform var(--bloques-transition); } .bloques-agenda-item:hover { box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); transform: translateY(-1px); } .bloques-agenda-fecha { width: 60px; min-height: 70px; background: var(--bloques-accent); color: white; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 0.75rem 0.5rem; flex-shrink: 0; } .bloques-agenda-mes { font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; opacity: 0.9; } .bloques-agenda-dia { font-size: 1.75rem; font-weight: 700; line-height: 1; } .bloques-agenda-content { flex: 1; padding: 0.875rem 1rem; display: flex; flex-direction: column; justify-content: center; } .bloques-agenda-meta { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.25rem; font-size: 0.8rem; color: var(--bloques-text-light); } .bloques-agenda-hora { font-weight: 500; } .bloques-agenda-separator { opacity: 0.5; } .bloques-agenda-ubicacion { font-weight: 500; } .bloques-agenda-ubicacion.bloques-modalidad-online { color: #1565c0; } .bloques-agenda-ubicacion.bloques-modalidad-presencial { color: #2e7d32; } .bloques-agenda-ubicacion.bloques-modalidad-hibrido { color: #ef6c00; } .bloques-agenda-title { font-size: 0.95rem; font-weight: 600; margin: 0; line-height: 1.4; color: var(--bloques-text); } /* ========================================================================== ITEM BASE (eventos, actuaciones - estilo original) ========================================================================== */ .bloques-item { background: white; border-radius: var(--bloques-radius); box-shadow: var(--bloques-shadow); overflow: hidden; transition: transform var(--bloques-transition), box-shadow var(--bloques-transition); } .bloques-item:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0,0,0,0.12); } .bloques-item.bloques-item-list { display: flex; flex-direction: row; } .bloques-item.bloques-item-list .bloques-item-thumbnail { width: 200px; flex-shrink: 0; } @media (max-width: 600px) { .bloques-item.bloques-item-list { flex-direction: column; } .bloques-item.bloques-item-list .bloques-item-thumbnail { width: 100%; } } .bloques-item-thumbnail { position: relative; aspect-ratio: 16/10; overflow: hidden; } .bloques-item-thumbnail img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--bloques-transition); } .bloques-item:hover .bloques-item-thumbnail img { transform: scale(1.05); } .bloques-item-content { padding: 1.25rem; } .bloques-item-header { margin-bottom: 0.75rem; } .bloques-item-title { font-size: 1.125rem; font-weight: 600; line-height: 1.3; margin: 0.5rem 0; } .bloques-item-title a { color: var(--bloques-text); text-decoration: none; transition: color var(--bloques-transition); } .bloques-item-title a:hover { color: var(--bloques-primary); } .bloques-item-excerpt { font-size: 0.9rem; color: var(--bloques-text-light); line-height: 1.5; margin-bottom: 1rem; } .bloques-item-footer { display: flex; align-items: center; gap: 0.75rem; margin-top: auto; padding-top: 1rem; border-top: 1px solid var(--bloques-border); } /* ========================================================================== EVENTOS ========================================================================== */ .bloques-item-evento { display: flex; gap: 1rem; } .bloques-evento-fecha { flex-shrink: 0; width: 70px; padding: 1rem; background: var(--bloques-primary); color: white; text-align: center; display: flex; flex-direction: column; justify-content: center; } .bloques-evento-dia { font-size: 2rem; font-weight: 700; line-height: 1; } .bloques-evento-mes { font-size: 0.8rem; text-transform: uppercase; letter-spacing: 1px; opacity: 0.9; } .bloques-evento-modalidad { display: inline-block; padding: 3px 10px; border-radius: 12px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .bloques-modalidad-online { background: #e3f2fd; color: #1565c0; } .bloques-modalidad-presencial { background: #e8f5e9; color: #2e7d32; } .bloques-modalidad-hibrido { background: #fff3e0; color: #ef6c00; } .bloques-evento-meta { display: flex; flex-wrap: wrap; gap: 1rem; margin-bottom: 0.75rem; } .bloques-evento-meta-item { display: flex; align-items: center; gap: 6px; font-size: 0.85rem; color: var(--bloques-text-light); } /* ========================================================================== TAXONOMÍAS / TAGS ========================================================================== */ .bloques-item-taxonomies { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 0.5rem; } .bloques-tag { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border-radius: 20px; font-size: 11px; font-weight: 500; background: var(--tag-color, var(--bloques-primary)); color: white; } .bloques-tag-icon { width: 14px; height: 14px; } .bloques-tag-linea { background: transparent; border: 1px solid var(--tag-color, var(--bloques-secondary)); color: var(--tag-color, var(--bloques-secondary)); } /* ========================================================================== ICONOS ========================================================================== */ .bloques-icon { display: inline-block; width: 16px; height: 16px; background-size: contain; background-repeat: no-repeat; background-position: center; } .bloques-icon-location { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z'/%3E%3C/svg%3E"); } .bloques-icon-calendar { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11zM9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2z'/%3E%3C/svg%3E"); } .bloques-icon-clock { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%236b7280'%3E%3Cpath d='M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z'/%3E%3C/svg%3E"); } /* ========================================================================== INICIATIVAS Y LÍNEAS ========================================================================== */ .bloques-iniciativas, .bloques-lineas { display: grid; gap: 1.5rem; } .bloques-iniciativa-card { background: white; border-radius: var(--bloques-radius); box-shadow: var(--bloques-shadow); padding: 1.5rem; border-left: 4px solid var(--iniciativa-color, var(--bloques-primary)); transition: transform var(--bloques-transition); } .bloques-iniciativa-card:hover { transform: translateY(-4px); } .bloques-iniciativa-icono { width: 60px; height: 60px; margin-bottom: 1rem; } .bloques-iniciativa-icono img { width: 100%; height: 100%; object-fit: contain; } .bloques-iniciativa-titulo { font-size: 1.125rem; font-weight: 600; margin: 0 0 0.5rem; } .bloques-iniciativa-titulo a { color: var(--bloques-text); text-decoration: none; } .bloques-iniciativa-titulo a:hover { color: var(--iniciativa-color, var(--bloques-primary)); } .bloques-iniciativa-descripcion { font-size: 0.9rem; color: var(--bloques-text-light); line-height: 1.5; margin-bottom: 0.75rem; } .bloques-iniciativa-ubicacion { font-size: 0.85rem; color: var(--bloques-text-light); display: flex; align-items: center; gap: 6px; margin-bottom: 0.5rem; } .bloques-iniciativa-estado { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 11px; font-weight: 500; background: var(--iniciativa-color, var(--bloques-primary)); color: white; } .bloques-linea-item { background: white; border-radius: var(--bloques-radius); box-shadow: var(--bloques-shadow); padding: 1.25rem; text-align: center; transition: transform var(--bloques-transition); } .bloques-linea-item:hover { transform: translateY(-4px); } .bloques-linea-icono { width: 50px; height: 50px; margin: 0 auto 0.75rem; padding: 10px; border-radius: 50%; background: var(--linea-color, var(--bloques-bg)); } .bloques-linea-icono img { width: 100%; height: 100%; object-fit: contain; } .bloques-linea-titulo { font-size: 1rem; font-weight: 600; margin: 0 0 0.5rem; } .bloques-linea-titulo a { color: var(--bloques-text); text-decoration: none; } .bloques-linea-titulo a:hover { color: var(--linea-color, var(--bloques-primary)); } .bloques-linea-descripcion { font-size: 0.8rem; color: var(--bloques-text-light); line-height: 1.4; } /* ========================================================================== BOTONES LEGACY ========================================================================== */ .bloques-btn { display: inline-flex; align-items: center; gap: 6px; padding: 10px 20px; border-radius: 25px; font-size: 0.9rem; font-weight: 500; text-decoration: none; transition: all var(--bloques-transition); cursor: pointer; border: none; background: var(--bloques-primary); color: white; } .bloques-btn:hover { background: var(--bloques-secondary); color: white; } .bloques-btn-secondary { background: transparent; border: 2px solid var(--bloques-primary); color: var(--bloques-primary); } .bloques-btn-secondary:hover { background: var(--bloques-primary); color: white; } /* ========================================================================== ESTADOS ========================================================================== */ .bloques-no-results { text-align: center; padding: 3rem; color: var(--bloques-text-light); font-size: 1rem; grid-column: 1 / -1; } .bloques-loading { position: relative; min-height: 200px; opacity: 0.6; pointer-events: none; } .bloques-loading::after { content: ''; position: absolute; top: 50%; left: 50%; width: 40px; height: 40px; margin: -20px 0 0 -20px; border: 3px solid var(--bloques-bg); border-top-color: var(--bloques-accent); border-radius: 50%; animation: bloques-spin 0.8s linear infinite; } @keyframes bloques-spin { to { transform: rotate(360deg); } } /* ========================================================================== RESPONSIVE ========================================================================== */ @media (max-width: 600px) { .bloques-block-header { flex-direction: column; gap: 0.75rem; } .bloques-agenda-fecha { width: 50px; min-height: 60px; } .bloques-agenda-dia { font-size: 1.5rem; } .bloques-agenda-content { padding: 0.75rem; } .bloques-novedad-meta { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .bloques-filter-buttons { flex-direction: column; align-items: flex-start; } .bloques-filter-btn { width: 100%; justify-content: center; } }