@font-face { font-family: '365 Sans'; src: url('/wp-content/uploads/fonts/365-Sans-Regular.otf') format('opentype'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: '365 Sans'; src: url('/wp-content/uploads/fonts/365-Sans-Bold.otf') format('opentype'); font-weight: 700; font-style: normal; font-display: swap; } #scores-article-template { --primary: #3B82F6; --primary-hover: #2563EB; --page-bg: #ffffff; --surface-bg: #ffffff; --card-bg: #ffffff; --border: #F3F4F6; --text: #111827; --muted: #4B5563; --soft: #F3F4F6; --soft-hover: #E5E7EB; --shadow: rgba(15, 23, 42, 0.12); --overlay: rgba(0, 0, 0, 0.52); font-family: '365 Sans', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important; background: var(--page-bg) !important; color: var(--text) !important; min-height: 100vh !important; scroll-behavior: smooth; position: relative; z-index: 1; line-height: 1.5; } #scores-article-template.scores-dark { --page-bg: #020617; --surface-bg: #0F172A; --card-bg: #111827; --border: #1F2937; --text: #F9FAFB; --muted: #D1D5DB; --soft: #1F2937; --soft-hover: #374151; --shadow: rgba(0, 0, 0, 0.42); --overlay: rgba(0, 0, 0, 0.75); } #scores-article-template * { box-sizing: border-box !important; } #scores-article-template .scores-header { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; z-index: 99999 !important; background: var(--surface-bg); border-bottom: 1px solid var(--border); box-shadow: 0 2px 10px var(--shadow); } button.scores-next-button { width: 145px; background-color: #3b82f6; color: white; border-radius: 15px; margin-top: 30px; min-height: 40px; } .scores-header-inner { max-width: 1280px; margin: 0 auto; padding: 14px 16px; display: flex; align-items: center; gap: 16px; } .scores-nav { display: flex; gap: 8px; overflow-x: auto; flex: 1; scrollbar-width: none; } .scores-nav::-webkit-scrollbar { display: none; } .scores-nav-button { min-width: 40px; height: 40px; padding: 0 13px; border-radius: 999px; background: var(--soft); color: var(--muted); font-weight: 600; border: none; cursor: pointer; white-space: nowrap; transition: none; } .scores-nav-button.is-active { background: var(--primary); color: #fff !important; } .scores-hero { min-height: 72vh; position: relative; display: flex; align-items: center; justify-content: center; padding: 112px 16px 52px; text-align: left; color: #fff !important; background-color: #020617; overflow: hidden; } .scores-hero::after { content: ''; position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(2, 6, 23, 0.50) 0%, rgba(2, 6, 23, 0.28) 46%, rgba(2, 6, 23, 0.58) 100%); } .scores-hero-bg { position: absolute; inset: 0; background-size: cover; background-position: center 28%; z-index: 0; opacity: 1; transform: scale(1.02); overflow: hidden; } .scores-hero-bg-img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center 28%; } .scores-hero-content { position: relative; z-index: 2; width: 100%; max-width: 1180px; display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(320px, 0.88fr); gap: 34px; align-items: center; } .scores-hero-text { min-width: 0; } .scores-hero-kicker { display: inline-flex; align-items: center; width: max-content; max-width: 100%; margin-bottom: 14px; padding: 7px 12px; border-radius: 999px; background: rgba(59, 130, 246, 0.24); border: 1px solid rgba(147, 197, 253, 0.5); color: #DBEAFE !important; font-size: 12px; font-weight: 800; line-height: 1; letter-spacing: 0.08em; text-transform: uppercase; } .scores-hero-title { font-size: clamp(34px, 6.8vw, 68px) !important; font-weight: 800; margin: 0 0 14px; color: #fff !important; line-height: 1.05 !important; text-wrap: balance; } .scores-hero-subtitle { margin: 0 0 18px; font-size: clamp(18px, 2.3vw, 24px); font-weight: 700!important; color: #fff !important; text-shadow: 0 0 20px rgba(59, 130, 246, 0.85), 0 2px 10px rgba(0, 0, 0, 0.5); } .scores-hero-copy p { max-width: 720px; margin: 0; color: #E5E7EB !important; font-size: clamp(16px, 1.9vw, 19px); line-height: 1.65; } .scores-hero-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 24px; } .scores-start-button, .scores-hero-secondary-button { min-height: 46px; padding: 12px 24px; border-radius: 999px; border: 1px solid transparent; font-weight: 800; cursor: pointer; line-height: 1; } .scores-start-button { background: var(--primary); color: #fff !important; box-shadow: 0 12px 24px rgba(37, 99, 235, 0.32); } .scores-hero-secondary-button { background: rgba(255, 255, 255, 0.12); color: #fff !important; border-color: rgba(255, 255, 255, 0.26); } .scores-hero-preview { width: 100%; padding: 18px; border-radius: 24px; background: rgba(15, 23, 42, 0.72); border: 1px solid rgba(255, 255, 255, 0.18); box-shadow: 0 24px 60px rgba(0, 0, 0, 0.34); backdrop-filter: blur(12px); } .scores-hero-preview-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 14px; color: #DBEAFE !important; } .scores-hero-preview-head span { font-size: 13px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; } .scores-hero-preview-head strong { color: #fff !important; font-size: 13px; font-weight: 800; white-space: nowrap; } .scores-hero-preview-list { display: grid; gap: 10px; } .scores-hero-preview-item { width: 100%; display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 12px; align-items: center; padding: 10px; border: 1px solid rgba(255, 255, 255, 0.14); border-radius: 16px; background: rgba(2, 6, 23, 0.56); color: #fff !important; text-align: left; cursor: pointer; } .scores-hero-preview-item:hover { background: rgba(59, 130, 246, 0.22); } .scores-hero-preview-thumb, .scores-hero-preview-rank-chip { width: 58px; height: 48px; border-radius: 12px; overflow: hidden; background: rgba(59, 130, 246, 0.26); } .scores-hero-preview-thumb img { width: 100%; height: 100%; object-fit: cover; object-position: center 22%; display: block; } .scores-hero-preview-rank-chip { display: flex; align-items: center; justify-content: center; color: #fff !important; font-weight: 800; font-size: 18px; } .scores-hero-preview-text { min-width: 0; display: grid; gap: 3px; } .scores-hero-preview-rankline { color: #93C5FD !important; font-size: 12px; font-weight: 800; line-height: 1.1; } .scores-hero-preview-name { color: #fff !important; font-size: 15px; font-weight: 800; line-height: 1.2; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } @media (max-width: 760px) { .scores-hero { min-height: auto; padding: 96px 14px 34px; } .scores-hero::after { background: linear-gradient(180deg, rgba(2, 6, 23, 0.92) 0%, rgba(2, 6, 23, 0.84) 54%, rgba(2, 6, 23, 0.96) 100%); } .scores-hero-bg { opacity: 0.36; background-position: center top; } .scores-hero-content { grid-template-columns: 1fr; gap: 22px; } .scores-hero-title { font-size: clamp(30px, 9vw, 46px) !important; } .scores-hero-subtitle { font-size: 18px; margin-bottom: 14px; } .scores-hero-actions { gap: 10px; margin-top: 20px; } .scores-start-button, .scores-hero-secondary-button { flex: 1 1 150px; padding-left: 16px; padding-right: 16px; } .scores-hero-preview { padding: 14px; border-radius: 20px; } .scores-hero-preview-item { grid-template-columns: 52px minmax(0, 1fr); padding: 9px; } .scores-hero-preview-thumb, .scores-hero-preview-rank-chip { width: 52px; height: 44px; } .scores-hero-preview-name { font-size: 14px; } .scores-hero-preview-item:nth-child(n+4) { display: none; } } .scores-section-shell { min-height: 100vh; scroll-margin-top: 80px; } .scores-card { max-width: 800px; margin: 90px auto; background: var(--card-bg); border-radius: 24px; border: 1px solid var(--border); box-shadow: 0 10px 30px var(--shadow); overflow: hidden; } .scores-card-header { padding: 30px 30px 12px; border-bottom: 0; } .scores-card-header h2 { margin: 0; font-size: 28px; font-weight: 800; } .scores-card-body { padding: 10px 30px 30px; color: var(--muted); font-size: 18px; line-height: 1.7; } .scores-card-body > p:first-child { margin-top: 0; } .scores-image-wrap { width: 100%; height: 250px; background: #eee; margin: 20px 0; border-radius: 12px; overflow: hidden; } .scores-image-wrap img { width: 100%; height: 100%; object-fit: cover; object-position: var(--image-position, center 22%); } .scores-stats-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 15px; margin-top: 25px; align-items: stretch; } .scores-stats-grid.is-empty { display: none; } .scores-stats-count-1 { grid-template-columns: minmax(0, 260px); justify-content: center; } .scores-stats-count-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .scores-stats-count-3 .scores-stat:last-child { grid-column: 1 / -1; justify-self: center; width: min(100%, 260px); } .scores-stat { min-width: 0; padding: 18px 12px; background: var(--soft); border-radius: 16px; text-align: center; border: 1px solid var(--border); display: flex; flex-direction: column; align-items: center; justify-content: center; } .scores-stat-icon { width: 32px; height: 32px; margin: 0 auto 10px; color: var(--primary); display: flex; align-items: center; justify-content: center; flex: 0 0 auto; } .scores-stat-icon img { width: 100%; height: 100%; object-fit: contain; } .scores-stat.no-icon .scores-stat-value { margin-top: 0; } .scores-stat-value { font-size: 24px; font-weight: 800; color: var(--text); line-height: 1.15; margin-bottom: 4px; overflow-wrap: anywhere; } .scores-stat-label { font-size: 11px; color: var(--muted); text-transform: uppercase; font-weight: 700; letter-spacing: 0.05em; line-height: 1.3; } @media (max-width: 599px) { .scores-card { margin: 56px 12px; border-radius: 20px; } .scores-card-header { padding: 22px 18px 14px; } .scores-card-header h2 { font-size: 24px; line-height: 1.2; } .scores-card-body { padding: 8px 18px 24px; font-size: 16px; line-height: 1.65; } .scores-image-wrap { height: 230px; margin: 18px 0; } .scores-stats-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 22px; } .scores-stats-count-1 { grid-template-columns: minmax(0, 1fr); } .scores-stats-count-3 .scores-stat:last-child { grid-column: 1 / -1; justify-self: center; width: min(100%, 260px); } .scores-stat { min-height: 118px; padding: 14px 10px; } .scores-stat-icon { width: 28px; height: 28px; margin-bottom: 8px; } .scores-stat-value { font-size: 20px; line-height: 1.15; } .scores-stat-label { font-size: 10px; line-height: 1.3; } button.scores-next-button { width: 100%; margin-top: 24px; } } @media (min-width: 600px) { .scores-stats-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } .scores-stats-count-1 { grid-template-columns: minmax(0, 260px); justify-content: center; } .scores-stats-count-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); max-width: 520px; margin-left: auto; margin-right: auto; } .scores-stats-count-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: 690px; margin-left: auto; margin-right: auto; } .scores-stats-count-3 .scores-stat:last-child { grid-column: auto; justify-self: stretch; width: auto; } .scores-stats-count-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); max-width: none; } .scores-image-wrap { height: 400px; } } .scores-icon-button { background: var(--soft); border: none; width: 40px; height: 40px; border-radius: 20px; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--text); } .scores-toc-drawer { position: fixed; top: 0; right: 0; bottom: 0; width: 300px; background: var(--surface-bg); z-index: 100000; transform: translateX(100%); transition: transform 0.3s ease; padding: 20px; box-shadow: -5px 0 15px var(--shadow); overflow-y: auto; } .scores-toc-drawer.is-open { transform: translateX(0); } .scores-toc-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 99999; display: none; } .scores-toc-overlay.is-open { display: block; } .scores-hero-first-item { width: 100%; padding: 18px; border-radius: 24px; background: rgba(15, 23, 42, 0.78); border: 1px solid rgba(255, 255, 255, 0.18); box-shadow: 0 24px 60px rgba(0, 0, 0, 0.34); backdrop-filter: blur(12px); color: #fff !important; } .scores-hero-first-kicker { display: inline-flex; margin-bottom: 10px; padding: 6px 10px; border-radius: 999px; background: rgba(59, 130, 246, 0.26); color: #DBEAFE !important; font-size: 12px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; } .scores-hero-first-title { margin: 0 0 12px; color: #fff !important; font-size: clamp(22px, 3vw, 32px); font-weight: 800; line-height: 1.12; } .scores-hero-first-image { width: 100%; height: 230px; margin: 12px 0 14px; border-radius: 18px; overflow: hidden; background: rgba(255,255,255,0.1); } .scores-hero-first-image img { width: 100%; height: 100%; object-fit: cover; object-position: var(--image-position, center 22%); display: block; } .scores-hero-first-copy { display: grid; gap: 10px; } .scores-hero-first-copy p { margin: 0; color: #E5E7EB !important; font-size: 15px; line-height: 1.55; } .scores-hero-first-copy p:nth-child(2) { color: #CBD5E1 !important; } .scores-hero-first-actions { margin-top: 16px; display: flex; gap: 10px; flex-wrap: wrap; } .scores-hero-first-actions .scores-next-button { margin-top: 0; } @media (max-width: 760px) { .scores-hero-first-item { padding: 14px; border-radius: 20px; } .scores-hero-first-image { height: 190px; border-radius: 16px; } .scores-hero-first-title { font-size: 23px; } .scores-hero-first-copy p { font-size: 14px; line-height: 1.5; } } /* Traditional first-item landing variant */ .scores-hero { min-height: auto; align-items: flex-start; justify-content: center; padding: 104px 16px 56px; text-align: center; } .scores-hero::after { background: linear-gradient(180deg, rgba(2, 6, 23, 0.38) 0%, rgba(2, 6, 23, 0.30) 45%, rgba(2, 6, 23, 0.48) 100%); } .scores-hero-bg { opacity: 1; background-position: center top; } .scores-hero-bg-img { opacity: 1; } .scores-hero-content { max-width: 860px; display: flex; flex-direction: column; gap: 20px; align-items: stretch; } .scores-hero-text { text-align: center; } .scores-hero-kicker { margin-left: auto; margin-right: auto; margin-bottom: 12px; } .scores-hero-title { max-width: 820px; margin: 0 auto 12px; font-size: clamp(30px, 5.2vw, 54px) !important; line-height: 1.08 !important; } .scores-hero-copy p { max-width: 760px; margin: 0 auto; font-size: clamp(15px, 1.7vw, 18px); line-height: 1.55; } .scores-hero-actions { justify-content: center; margin-top: 2px; } .scores-hero-first-item { width: 100%; padding: 0; border-radius: 24px; background: var(--card-bg); border: 1px solid var(--border); box-shadow: 0 18px 42px rgba(0, 0, 0, 0.28); backdrop-filter: none; color: var(--text) !important; overflow: hidden; text-align: left; } .scores-hero-first-kicker { margin: 28px 30px 8px; background: rgba(59, 130, 246, 0.12); color: var(--primary) !important; } .scores-hero-first-title { margin: 0 30px 10px; color: var(--text) !important; font-size: clamp(23px, 3.2vw, 32px); line-height: 1.16; } .scores-hero-first-copy { display: block; padding: 0 30px; } .scores-hero-first-copy p { margin: 0 0 16px; color: var(--muted) !important; font-size: 17px; line-height: 1.65; } .scores-hero-first-copy p:nth-child(2) { color: var(--muted) !important; } .scores-hero-first-image { width: auto; height: 360px; margin: 16px 30px 18px; border-radius: 16px; background: #E5E7EB; } .scores-hero-first-actions { margin: 18px 30px 30px; } @media (max-width: 760px) { .scores-hero { padding: 88px 12px 34px; } .scores-hero-content { gap: 16px; } .scores-hero-title { font-size: clamp(28px, 8.4vw, 40px) !important; } .scores-hero-copy p { font-size: 15px; line-height: 1.5; } .scores-hero-first-item { border-radius: 20px; } .scores-hero-first-kicker { margin: 20px 18px 8px; } .scores-hero-first-title { margin: 0 18px 10px; font-size: 22px; line-height: 1.18; } .scores-hero-first-copy { padding: 0 18px; } .scores-hero-first-copy p { font-size: 15px; line-height: 1.55; margin-bottom: 14px; } .scores-hero-first-image { height: 210px; margin: 14px 18px 16px; border-radius: 14px; } .scores-hero-actions { display: grid; grid-template-columns: 1fr; width: 100%; } .scores-start-button, .scores-hero-secondary-button { width: 100%; } } /* Align the featured landing item title with the regular article-card layout */ .scores-hero-first-title { display: block !important; margin: 0 0 10px !important; padding: 0 30px !important; width: 100% !important; box-sizing: border-box !important; } .scores-hero-first-copy { padding-left: 30px !important; padding-right: 30px !important; } @media (max-width: 599px) { .scores-hero-first-kicker { margin: 22px 18px 8px !important; } .scores-hero-first-title { padding-left: 18px !important; padding-right: 18px !important; margin-bottom: 10px !important; font-size: 24px !important; line-height: 1.2 !important; } .scores-hero-first-copy { padding-left: 18px !important; padding-right: 18px !important; } } /* 365Scores brand blue for metric values */ .scores-stat-value, .scores-stat-card .scores-stat-value { color: #179BFF !important; } /* Prevent long metric values from looking compressed */ .scores-stat-value, .scores-stat-card .scores-stat-value { white-space: normal !important; overflow-wrap: normal !important; word-break: normal !important; hyphens: none !important; line-height: 1.12 !important; max-width: 100%; } .scores-stat-label, .scores-stat-card .scores-stat-label { white-space: normal !important; overflow-wrap: normal !important; word-break: normal !important; hyphens: none !important; } .scores-stat-value { font-size: clamp(17px, 4.4vw, 25px) !important; } @media (min-width: 700px) { .scores-stat-value { font-size: clamp(18px, 2vw, 26px) !important; } } ☰ Continuar Lendo Índice × let scoresProgrammaticScroll = false; let scoresScrollSettleTimer = null; let scoresProgrammaticFallbackTimer = null; function setActiveNavButton(id) { const activeId = String(id); const nav = document.getElementById('js-nav'); if (!nav) return; nav.querySelectorAll('.scores-nav-button').forEach(button => { button.classList.toggle('is-active', button.dataset.articleId === activeId || button.textContent.trim() === activeId); }); } function finishProgrammaticScroll() { scoresProgrammaticScroll = false; if (scoresScrollSettleTimer) window.clearTimeout(scoresScrollSettleTimer); if (scoresProgrammaticFallbackTimer) window.clearTimeout(scoresProgrammaticFallbackTimer); scoresScrollSettleTimer = null; scoresProgrammaticFallbackTimer = null; } window.addEventListener('scroll', function() { if (!scoresProgrammaticScroll) return; if (scoresScrollSettleTimer) window.clearTimeout(scoresScrollSettleTimer); scoresScrollSettleTimer = window.setTimeout(finishProgrammaticScroll, 180); }, { passive: true }); function scrollToSection(id) { scoresProgrammaticScroll = true; setActiveNavButton(id); if (scoresProgrammaticFallbackTimer) window.clearTimeout(scoresProgrammaticFallbackTimer); scoresProgrammaticFallbackTimer = window.setTimeout(finishProgrammaticScroll, 2200); const el = document.getElementById(`article-item-${id}`); if (el) { const offset = 80; const bodyRect = document.body.getBoundingClientRect().top; const elementRect = el.getBoundingClientRect().top; const elementPosition = elementRect - bodyRect; const offsetPosition = elementPosition - offset; window.scrollTo({ top: offsetPosition, behavior: 'smooth' }); } } document.addEventListener('DOMContentLoaded', function() { const data = { "logo": "365Scores", "hero": { "title": "LaLiga 2026/27: análise e power ranking dos 20 clubes", "subtitle": "", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/into%20image%20la%20liga.jpg", "copy": "Com o começa da LaLiga, trazemos nosso power ranking para a temporada 2026/27, analisando quais clubes chegam com os elencos mais fortes, melhor momento e expectativas mais realistas." }, "items": [ { "id": 20, "name": "Málaga", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-malaga", "imagePosition": "center 22%", "textTop": "O Málaga retorna à LaLiga após um triunfo emocionante nos playoffs, mas seu elenco permanece como o mais modesto entre os três promovidos. Os 24 gols de Chupe impulsionaram a arrancada pelo acesso, enquanto Juanfran Funes promoveu uma reviravolta impressionante após assumir o comando. No entanto, repetir essa eficácia ofensiva contra defensores da primeira divisão será um desafio consideravelmente maior.", "textBottom": "Fernando Calero adiciona experiência à defesa, mas as contratações da janela de meio de ano ficaram abaixo do patamar exigido para um salto competitivo tão acentuado. O Málaga deve manter a identidade aguerrida e enérgica que o conduziu nos playoffs, especialmente empurrado por um La Rosaleda lotado. Suas chances de permanência dependerão do aproveitamento de Chupe nas poucas oportunidades criadas e da rápida adaptação de sua base titular.", "stats": [ { "icon": "", "value": "4º na Segunda Divisão, promovido via playoffs", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 38,63 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Chupe", "label": "Artilheiro provável" } ] }, { "id": 19, "name": "Osasuna", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-osasuna", "imagePosition": "center 22%", "textTop": "O Osasuna garantiu a permanência no limite na última temporada, terminando em 17º lugar com apenas 42 pontos. Ante Budimir seguiu como a principal referência de gols, mas o ataque careceu de repertório e regularidade. A saída de Víctor Muñoz para o Liverpool elimina sua melhor válvula de escape em velocidade e deixa uma lacuna criativa relevante no apoio ao centroavante.", "textBottom": "Jonathan Dubasin entrega intensidade, embora não se possa exigir que supra sozinho a ausência de Muñoz. Luis Miguel Ramis assume um elenco que necessita de maior controle de posse e de presença ofensiva na área rival para apoiar Budimir. A força tradicional no El Sadar deve manter a equipe competitiva, mas a movimentação tímida no mercado torna improvável escapar de uma nova luta contra o rebaixamento.", "stats": [ { "icon": "", "value": "17º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 71,00 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Ante Budimir", "label": "Artilheiro provável" } ] }, { "id": 18, "name": "Levante", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-levante", "imagePosition": "center 22%", "textTop": "O Levante sobreviveu ao seu ano de retorno à LaLiga, mas a transferência de Carlos Espí para o Real Madrid remove o jovem atacante que transformou o setor ofensivo no segundo turno da competição. Espí oferecia movimentação, imposição física e gols decisivos. Nenhuma das opções atuais do elenco representa um substituto à altura para esse perfil.", "textBottom": "Aissa Mandi agrega bagagem à linha defensiva, enquanto Hugo Sotelo e Manu Sánchez elevam a qualidade técnica do time. A preocupação se concentra na área adversária, onde Luís Castro precisará distribuir a responsabilidade por vários jogadores. Etta Eyong ganha protagonismo no ataque, mas o Levante pode enfrentar sérias dificuldades sempre que precisar propor o jogo contra defesas fechadas em vez de explorar transições.", "stats": [ { "icon": "", "value": "16º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 83,50 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Etta Eyong", "label": "Artilheiro provável" } ] }, { "id": 17, "name": "Racing Santander", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Santander", "imagePosition": "center 22%", "textTop": "O Racing retorna à elite como campeão da Segunda Divisão com uma mescla interessante de jogadores experientes e jovens talentos. Sergio Canales tem capacidade para ditar o ritmo de jogo do time, enquanto Asier Villalibre oferece uma presença física consolidada no ataque. Jovens como Yassir Zabiri e Adrián Puerta elevam o potencial de uma equipe que chega embalada pela excelente campanha do acesso.", "textBottom": "Julen Agirrezabala e Facundo González reforçam o sistema defensivo, mas a permanência na La Liga exige um nível de regularidade que times promovidos raramente alcançam de imediato. Canales deve ajudar o Racing a controlar as partidas melhor do que a maioria dos recém-chegados, ainda que depender de um articulador veterano envolva riscos. A produtividade de Andrés Martín e a adaptação de Villalibre serão determinantes para transformar boas atuações em pontos suficientes.", "stats": [ { "icon": "", "value": "1º na Segunda Divisão", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 84,00 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Andrés Martín", "label": "Artilheiro provável" } ] }, { "id": 16, "name": "Deportivo La Coruña", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-deportivo", "imagePosition": "center 22%", "textTop": "O La Coruña encarou o retorno à elite com ambição no mercado. Pierre-Emerick Aubameyang traz experiência internacional e faro de gol na área, enquanto Angeliño garante qualidade comprovada na lateral esquerda. Jonathan Asp Jensen qualifica um setor criativo que já gira em torno do talento de Yeremay Hernández, cuja facilidade para atuar sob pressão pode tornar o Deportivo uma das equipes promovidas mais envolventes de se assistir.", "textBottom": "O desafio de Antonio Hidalgo será equilibrar essas peças ofensivas sem expor uma defesa que enfrentará um salto evidente de velocidade e exigência técnica. Como Aubameyang está na reta final da carreira, o clube precisará gerenciar sua carga de jogos para não se tornar dependente de suas finalizações. Se encontrar esse ponto de equilíbrio, a equipe galega conta com mais desequilíbrio individual do que o normal para um recém-promovido.", "stats": [ { "icon": "", "value": "2º na Segunda Divisão", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 84,15 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Pierre-Emerick Aubameyang", "label": "Artilheiro provável" } ] }, { "id": 15, "name": "Alavés", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Alaves", "imagePosition": "center 22%", "textTop": "O Alavés terminou em 14º lugar na última temporada e inicia a nova campanha mantendo a base do elenco. A intensidade física, a força no jogo aéreo e a competitividade na disputa por segundas bolas seguem como alicerces confiáveis. Contudo, a estabilidade pode se transformar em estagnação enquanto adversários diretos investiram em criatividade, opções de banco e velocidade ofensiva no mercado.", "textBottom": "Quique Sánchez Flores deve manter o time organizado e difícil de ser superado, especialmente no Mendizorrotza. Toni Martínez segue como a principal referência na área, e a base mantida compreende o nível de exigência da luta contra o rebaixamento. No entanto, a saída de Villalibre reduz as alternativas de ataque, deixando pouca margem caso Martínez enfrente instabilidades ou desfalques. Mais uma temporada focada em garantir a permanência parece o cenário mais provável.", "stats": [ { "icon": "", "value": "14º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 70,70 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Toni Martínez", "label": "Artilheiro provável" } ] }, { "id": 14, "name": "Sevilla", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Sevilla", "imagePosition": "center 22%", "textTop": "O Sevilla escapou do rebaixamento na temporada passada, mas o processo de reformulação tirou dois pilares do time. Akor Adams marcou dez gols na liga antes de se transferir para o Venezia, enquanto a saída de Juanlu Sánchez remove vigor físico e força ofensiva pelo lado direito. A maioria das peças de reposição é composta por jovens cuja constância no mais alto nível ainda precisará ser provada.", "textBottom": "Luis García Plaza já estabilizou ambientes conturbados apostando no pragmatismo, o que deve proteger o Sevilla de um colapso em campo. Alfon González, Julio Díaz e Fran González mostram potencial, e Jon Guridi acrescenta combatividade ao meio-campo. Ainda assim, o elenco carece de um substituto de peso para Adams, transferindo uma pressão alta para Isaac Romero. O Sevilla tem qualidade para se manter na primeira divisão, mas se encaminha para outro ano de alerta ligado.", "stats": [ { "icon": "", "value": "13º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 124,40 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Isaac Romero", "label": "Artilheiro provável" } ] }, { "id": 13, "name": "Elche", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Elche", "imagePosition": "center 22%", "textTop": "O Elche garantiu sua permanência com louvor após o acesso, fechando na 15ª posição ao apresentar um futebol mais propositivo que o de vários times consolidados na elite. A chegada de Facundo Buonanotte adiciona um articulador de talento capaz de receber entre as linhas, conduzir a bola sob pressão e gerar jogadas de perigo pelo centro ou pelos lados.", "textBottom": "Fer Niño assume a função de referência no ataque após as saídas de André Silva e Álvaro Rodríguez. Martín Anselmi conta com qualidade técnica para tornar a posse de bola do Elche efetiva, especialmente quando Buonanotte acionar as ultrapassagens dos companheiros. A constância do argentino será testada em uma temporada completa, mas seu potencial eleva o patamar do ataque. O Elche parece preparado para almejar posições além da simples sobrevivência.", "stats": [ { "icon": "", "value": "15º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 75,10 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Fer Niño", "label": "Artilheiro provável" } ] }, { "id": 12, "name": "Valencia", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Valencia", "imagePosition": "center 22%", "textTop": "O Valencia encerrou a temporada passada no nono lugar e manteve a maior parte da base responsável por uma campanha segura. Carlos Corberán conta com uma estrutura central confiável, jovens da base cheios de energia e um artilheiro testado em Hugo Duro. Essa continuidade oferece uma vantagem importante contra rivais que passam por profundas reformulações táticas e de elenco.", "textBottom": "Guido Rodríguez traz controle de jogo e solidez defensiva ao meio-campo, o que pode dar ao Valencia mais estabilidade em partidas fora de casa. Ainda falta ao elenco o volume e a profundidade de ataque dos tempos áureos do clube, e qualquer problema físico com Duro deixaria essa carência exposta. Disputar vaga nas competições europeias é possível se os jovens seguirem evoluindo, mas o atual grupo parece mais talhado para consolidar uma posição intermediária na tabela.", "stats": [ { "icon": "", "value": "9º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 120,20 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Hugo Duro", "label": "Artilheiro provável" } ] }, { "id": 11, "name": "Espanyol", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Espanyol", "imagePosition": "center 22%", "textTop": "O Espanyol construiu uma campanha digna e sem sustos no último ano, fechando em 11º lugar mesmo atuando com orçamento inferior ao de vários concorrentes diretos. Roberto Fernández foi uma referência eficiente no ataque, enquanto Manolo González organizou uma equipe disciplinada, que raramente dependia de longas trocas de passe. Manter a espinha dorsal intacta garante uma base sólida para seguir progredindo.", "textBottom": "Hartman oferece profundidade pela lateral esquerda, e Gabriel Moscardo traz frieza, poder de marcação e alta margem de crescimento ao meio-campo. Nenhuma das contratações muda drasticamente a identidade de jogo, mas fortalecem posições que precisavam de mais vigor físico. Sem perder nenhuma peça fundamental, o Espanyol deve seguir competitivo com chances reais de figurar na metade superior da tabela.", "stats": [ { "icon": "", "value": "11º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 115,10 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Roberto Fernández", "label": "Artilheiro provável" } ] }, { "id": 10, "name": "Rayo Vallecano", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-rayo", "imagePosition": "center 22%", "textTop": "O Rayo terminou na oitava colocação ao conciliar consistência no campeonato espanhol com uma campanha marcante em competições europeias. A marcação pressão agressiva, as transições diretas e a coragem para incomodar times superiores tecnicamente seguiram como marca registrada. Pep Chavarría foi decisivo na esquerda com profundidade, recomposição e apoio constante, mas sua provável ida ao Chelsea deixa uma lacuna difícil de preencher.", "textBottom": "Beñat San José assume uma equipe que também perdeu lideranças experientes e peças úteis de rotação. Marash Kumbulla e Nobel Mendy reforçam o setor defensivo, enquanto Raúl de Tomás surge como alternativa no ataque caso recupere o ritmo de jogo. O Rayo segue como um adversário indigesto, embora substituir a presença em duas partes do campo de Chavarría exija mais do que uma simples troca de peças.", "stats": [ { "icon": "", "value": "8º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 90,70 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Jorge de Frutos", "label": "Artilheiro provável" } ] }, { "id": 9, "name": "Getafe", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Getafe", "imagePosition": "center 22%", "textTop": "A sétima colocação do Getafe exemplificou a capacidade de José Bordalás de extrair o máximo de um elenco com opções ofensivas limitadas. Intensidade na marcação, perigo nas bolas paradas e segurança em jogos decididos no detalhe renderam a classificação para os torneios europeus. O retorno de Uche traria a força e a imprevisibilidade que faltaram ao time, mas uma grave lesão no joelho na pré-temporada o tirou de todo o ano de competições.", "textBottom": "Martín Satriano assume agora uma responsabilidade ofensiva bem maior, escoltado por Ramón Terrats e um bloco de meio-campistas combativos. As saídas de Mauro Arambarri e Luis Milla diminuíram a experiência no setor central. Bordalás manterá o time competitivo na base da organização e da entrega em campo, mas a ausência de Uche reduz sensivelmente o teto para uma temporada que prometia bastante.", "stats": [ { "icon": "", "value": "7º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 80,30 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Martín Satriano", "label": "Artilheiro provável" } ] }, { "id": 8, "name": "Celta de Vigo", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-celta", "imagePosition": "center 22%", "textTop": "O Celta alcançou a sexta colocação na última temporada com um estilo ofensivo corajoso e um ataque capaz de criar chances por diversas áreas do campo. Borja Iglesias se mantém como um finalizador inteligente na grande área, enquanto Iago Aspas continua entregando criatividade e liderança. O ponto de atenção é que ambos estão em idade avançada, tornando a gestão física cada vez mais crucial.", "textBottom": "Claudio Giráldez tem em mãos talentos como Ilaix Moriba, Javi Rodríguez e o promissor Hugo Román, oferecendo juventude técnica no suporte aos veteranos. Aleix Febas acrescenta boa retenção de bola, embora a saída de Óscar Mingueza reduza a versatilidade tática. O calendário europeu vai exigir do banco de reservas, mas o Celta conta com criatividade e padrão de jogo para se manter brigando entre os primeiros.", "stats": [ { "icon": "", "value": "6º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 167,30 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Borja Iglesias", "label": "Artilheiro provável" } ] }, { "id": 7, "name": "Athletic Bilbao", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-bilbao", "imagePosition": "center 22%", "textTop": "O Athletic vem de um decepcionante 12º lugar, em uma campanha na qual lesões e falta de regularidade impediram que as principais peças engrenassem. As permanências de Unai Simón e Nico Williams garantem duas referências técnicas em lados opostos do campo. A bagagem de Aymeric Laporte e o faro de gol de Oihan Sancet adicionam peso à espinha dorsal do time.", "textBottom": "A chegada de Edin Terzić como treinador promete um estilo mais vertical e intenso, pautado pela marcação alta e transições rápidas. Seu desafio será aumentar a produção ofensiva sem desconfigurar a solidez defensiva, marca registrada das melhores fases do Athletic. A renovação de longo prazo de Nico Williams traz estabilidade ao ambiente, e a base deve se beneficiar do histórico de Terzić no desenvolvimento de atletas. Uma boa recuperação na tabela é bem provável se os titulares não sofrerem com lesões.", "stats": [ { "icon": "", "value": "12º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 240,70 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Oihan Sancet", "label": "Artilheiro provável" } ] }, { "id": 6, "name": "Real Sociedad", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Sociedad", "imagePosition": "center 22%", "textTop": "A Real Sociedad teve um desempenho abaixo do esperado na última La Liga, terminando apenas em décimo lugar, apesar de contar com um elenco com potencial para brigar por vaga na Champions League. O título da Copa do Rey salvou a temporada e mostrou o nível de competitividade da equipe em jogos decisivos. Mikel Oyarzabal retorna de mais um grande torneio pela seleção como líder do ataque.", "textBottom": "Rino Matarazzo assume um grupo técnico que não perdeu nenhum dos seus principais astros nesta janela. Com a saída de Brais Méndez, Takefusa Kubo, Ander Barrenetxea e Oyarzabal lideram a criação de jogadas. O grande desafio será transformar o domínio da posse de bola em gols com constância. Com menos alterações em sua estrutura de jogo que a maioria dos concorrentes, voltar às zonas de classificação para competições europeias é a expectativa mínima.", "stats": [ { "icon": "", "value": "10º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 252,30 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Mikel Oyarzabal", "label": "Artilheiro provável" } ] }, { "id": 5, "name": "Real Betis", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Betis", "imagePosition": "center 22%", "textTop": "O Real Betis encerrou no quinto lugar e está de volta à Champions League pela primeira vez em mais de duas décadas. A equipe do técnico Manuel Pellegrini já esbanjava criatividade com Isco, Antony, Abde Ezzalzouli e Pablo García. A chegada de Fran García reforça a lateral esquerda com velocidade e agressividade no apoio, abrindo mais rotas de ataque contra retrancas.", "textBottom": "O calendário europeu exigirá muito da rotação de elenco, especialmente após algumas saídas no meio-campo. Cucho Hernández segue como a referência no comando de ataque, enquanto Abde e García oferecem profundidade pelos lados. O Betis pode perder alguns pontos ao conciliar a La Liga com os jogos internacionais, mas o repertório ofensivo, a estabilidade na comissão técnica e a boa fase dos jovens colocam o time forte na briga para se manter no G-5.", "stats": [ { "icon": "", "value": "5º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 234,60 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Cucho Hernández", "label": "Artilheiro provável" } ] }, { "id": 4, "name": "Villarreal", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-Villarreal", "imagePosition": "center 22%", "textTop": "O Villarreal concluiu a última temporada na terceira posição com um dos ataques mais eficientes da Espanha. Georges Mikautadze oferece movimentação e finalização precisa, Alberto Moleiro tem talento para desconstruir linhas defensivas e Renato Veiga contribui com força física e versatilidade. A velocidade de Alex Freeman garante mais uma arma pelo corredor lateral.", "textBottom": "Iñigo Pérez comanda um elenco talentoso com o desafio extra de disputar a Champions League. A saída de Dani Parejo retira um cadenciador importante do meio-campo, mas o grupo mantido tem peças para suprir a perda. Mikautadze, Moleiro e Freeman seguem em plena evolução, amparados pela experiência de Ayoze Pérez e Gerard Moreno. Se não perder mais titulares até o fim da janela, o Villarreal deve seguir figurando na prateleira de cima do futebol espanhol.", "stats": [ { "icon": "", "value": "3º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 329,70 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Georges Mikautadze", "label": "Artilheiro provável" } ] }, { "id": 3, "name": "Atlético de Madrid", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-atletico", "imagePosition": "center 22%", "textTop": "A janela de transferências do Atlético de Madrid foi marcada pelas incertezas sobre a permanência de Julián Álvarez. O argentino é o principal artilheiro e o ativo ofensivo mais importante do clube, reunindo marcação pressão, criação e finalização em nível de elite. A diretoria garantiu publicamente que ele é inegociável, mas reconquistar seu foco e comprometimento após essa novela será tão importante quanto segurá-lo no elenco.", "textBottom": "Alejandro Grimaldo, Morten Hjulmand e Kang-in Lee são excelentes reforços para o time de Diego Simeone. Grimaldo qualifica a saída pela lateral esquerda, Hjulmand impõe respeito no meio-campo e Lee adiciona criatividade entrelinhas. As contratações deixam a equipe mais versátil do que na temporada passada, quando encerrou em quarto lugar. A briga pelo título, no entanto, segue ligada ao comprometimento de Álvarez para liderar um ataque que não conta mais com Antoine Griezmann.", "stats": [ { "icon": "", "value": "4º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 644,30 mi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Julián Álvarez", "label": "Artilheiro provável" } ] }, { "id": 2, "name": "Barcelona", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-barcelona", "imagePosition": "center 22%", "textTop": "O Barcelona conquistou a La Liga com oito pontos de vantagem no ano passado, mas a transição no comando do ataque continua indefinida. Lewandowski deixou o clube após seguir marcando gols importantes aos 37 anos, enquanto Ferran Torres acertou com o Paris Saint-Germain. Ficar sem os dois compromete a presença de área e deixa Hansi Flick sem um centroavante de ofício no grupo principal.", "textBottom": "Anthony Gordon e Karim Adeyemi trazem explosão e velocidade, ao mesmo tempo em que o clube avança pela contratação de Rodri, que preferiu o projeto catalão ao do Real Madrid. As novidades somam intensidade e peso ao meio-campo ao lado de Lamine Yamal, Pedri e Gavi. O atual campeão tem talento para praticar um futebol excelente, mas a grande fartura de pontas não esconde a carência na referência do ataque. O investimento forte do rival Real Madrid não dá margem para erros de pontaria.", "stats": [ { "icon": "", "value": "1º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 1,28 bi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Lamine Yamal", "label": "Artilheiro provável" } ] }, { "id": 1, "name": "Real Madrid", "img": "https://imagescache.365scores.com/image/upload/c_limit,q_auto:eco/Magazines/Premium/EN/gettyimages-realmadrid", "imagePosition": "center 22%", "textTop": "O Real Madrid reagiu a duas temporadas sem títulos com uma reformulação agressiva de seu elenco. José Mourinho volta ao comando do clube que agora conta com os reforços de Yan Diomande, Marc Cucurella, Ibrahima Konaté, Denzel Dumfries, Bernardo Silva e Carlos Espí. A renovação de contrato de Vinícius Júnior blindou o ambiente de especulações, enquanto Kylian Mbappé segue como o goleador mais temido da liga.", "textBottom": "Konaté, Cucurella e Dumfries resolvem fragilidades que o setor defensivo apresentava, ao passo que Bernardo Silva garante controle de posse e inteligência em várias funções do meio-campo. Diomande traz imposição no um contra um e Espí surge para Mourinho como mais uma alternativa para o comando do ataque ao lado de Mbappé. Os merengues chegam com titulares de nível mundial e um banco de alto nível em quase todos os setores. Administrar um elenco repleto de estrelas exigirá precisão, mas a soma de evolução defensiva, poder ofensivo e experiência coloca o clube como o grande favorito nesta pré-temporada.", "stats": [ { "icon": "", "value": "2º", "label": "Posição na temporada passada" }, { "icon": "", "value": "€ 1,46 bi", "label": "Valor de mercado do elenco" }, { "icon": "", "value": "Kylian Mbappé", "label": "Artilheiro provável" } ] } ] }; const nav = document.getElementById('js-nav'); const sections = document.getElementById('js-sections'); const tocList = document.getElementById('js-toc-list'); // Init Hero document.getElementById('js-hero-title').textContent = data.hero.title; const heroBg = document.getElementById('js-hero-bg'); const heroImg = document.getElementById('js-hero-img'); if (heroBg) heroBg.style.backgroundImage = data.hero.img ? `url("${data.hero.img}")` : 'none'; if (heroImg) { if (data.hero.img) { heroImg.src = data.hero.img; heroImg.style.display = 'block'; } else { heroImg.removeAttribute('src'); heroImg.style.display = 'none'; } } document.getElementById('js-hero-copy').innerHTML = data.hero.copy ? `${data.hero.copy}` : ''; const heroSection = document.querySelector('.scores-hero'); const firstItem = data.items && data.items.length ? data.items[0] : null; if (heroSection && firstItem) heroSection.id = `article-item-${firstItem.id}`; const heroFirstItem = document.getElementById('js-hero-first-item'); if (heroFirstItem) { if (firstItem) { const secondItem = data.items[1] || null; const visibleStats = (firstItem.stats || []).filter(s => s && ( String(s.icon || '').trim() || String(s.value || '').trim() || String(s.label || '').trim() )); const statsHtml = visibleStats.map(s => { const hasIcon = Boolean(String(s.icon || '').trim()); const iconHtml = hasIcon ? `` : ''; return ` ${iconHtml} ${s.value || ''} ${s.label || ''} `; }).join(''); heroFirstItem.innerHTML = ` ${firstItem.id}. ${firstItem.name || ''} ${firstItem.textTop ? `${firstItem.textTop}` : ''} ${firstItem.img ? `` : ''} ${firstItem.textBottom ? `${firstItem.textBottom}` : ''} ${visibleStats.length ? `${statsHtml}` : ''} `; } else { heroFirstItem.style.display = 'none'; } } // Build article items data.items.forEach((d, index) => { const nextDriver = data.items[index + 1]; const nextId = nextDriver ? nextDriver.id : null; // Nav button const btn = document.createElement('button'); btn.className = 'scores-nav-button'; btn.textContent = d.id; btn.dataset.articleId = String(d.id); btn.onclick = () => scrollToSection(d.id); nav.appendChild(btn); // ToC entry const tocBtn = document.createElement('button'); tocBtn.style = 'display:block; width:100%; text-align:left; padding:12px; margin-bottom:8px; border:none; background:var(--soft); cursor:pointer; border-radius:12px; font-weight:700; color:var(--text);'; tocBtn.textContent = `${d.id}. ${d.name}`; tocBtn.onclick = () => { scrollToSection(d.id); toggleToC(false); }; tocList.appendChild(tocBtn); if (index === 0) return; // Stats HTML const visibleStats = (d.stats || []).filter(s => s && ( String(s.icon || '').trim() || String(s.value || '').trim() || String(s.label || '').trim() )); const statsHtml = visibleStats.map(s => { const hasIcon = Boolean(String(s.icon || '').trim()); const iconHtml = hasIcon ? `` : ''; return ` ${iconHtml} ${s.value || ''} ${s.label || ''} `; }).join(''); // Card const sect = document.createElement('section'); sect.className = 'scores-section-shell'; sect.id = `article-item-${d.id}`; sect.innerHTML = ` ${d.id}. ${d.name} ${d.textTop} ${d.img ? `` : ''} ${d.textBottom} ${visibleStats.length ? `${statsHtml}` : ''} ${nextId ? `Próximo ›` : ''} `; sections.appendChild(sect); }); // ToC controls function toggleToC(open) { document.getElementById('js-toc-drawer').classList.toggle('is-open', open); document.getElementById('js-toc-overlay').classList.toggle('is-open', open); } document.getElementById('js-toc-open').onclick = () => toggleToC(true); document.getElementById('js-toc-close').onclick = () => toggleToC(false); document.getElementById('js-toc-overlay').onclick = () => toggleToC(false); document.getElementById('js-start').onclick = () => { if (data.items.length > 1) scrollToSection(data.items[1].id); else if (data.items.length) scrollToSection(data.items[0].id); }; // Active nav highlight for manual scrolling only. Clicks set the active state immediately. const observer = new IntersectionObserver((entries) => { if (scoresProgrammaticScroll) return; entries.forEach(entry => { if (entry.isIntersecting) { const id = entry.target.id.replace('article-item-', ''); setActiveNavButton(id); } }); }, { rootMargin: '-20% 0px -70% 0px' }); const observedHero = document.querySelector('.scores-hero[id^="article-item-"]'); if (observedHero) observer.observe(observedHero); document.querySelectorAll('.scores-section-shell').forEach(s => observer.observe(s)); });