Whatsapp
.report-subheader { background: var(--color-surface-header, #111111); position: relative; overflow: hidden; } .rsh-glows { position: absolute; inset: 0; pointer-events: none; z-index: 0; } .rsh-glow-a { position: absolute; top: -5rem; right: -3.75rem; width: 25rem; height: 25rem; background: radial-gradient(circle, var(--color-brand-primary-glow, rgba(78,149,255,.18)) 0%, transparent 70%); } .rsh-glow-b { position: absolute; bottom: -4rem; left: 5rem; width: 16rem; height: 16rem; background: radial-gradient(circle, var(--color-brand-tertiary-glow, rgba(191,86,247,.10)) 0%, transparent 70%); } .rsh-inner { max-width: 72.5rem; margin: 0 auto; padding: 2rem var(--margin); position: relative; z-index: 1; display: flex; align-items: flex-end; justify-content: space-between; flex-wrap: wrap; gap: 1.25rem; } .rsh-client { position: relative; z-index: 1; } .rsh-name { color: rgba(255,255,255,.9); margin-bottom: .375rem; } .rsh-domain { color: rgba(255,255,255,.4); display: flex; align-items: center; gap: .4375rem; } .rsh-domain::before { content: ''; display: inline-block; width: .375rem; height: .375rem; border-radius: 50%; background: var(--color-success, #4e95ff); } .rsh-kpis { display: flex; flex-wrap: wrap; position: relative; z-index: 1; } .rsh-kpi { padding: 0 1.5rem; text-align: right; border-left: .0625rem solid rgba(255,255,255,.08); } .rsh-kpi:first-child { border-left: none; } .rsh-kpi-val { color: rgba(255,255,255,.85); line-height: 1; } .rsh-kpi-label { color: rgba(255,255,255,.3); text-transform: uppercase; margin-top: .1875rem; } .rsh-ahrefs { border-top: .0625rem solid rgba(255,255,255,.05); padding: 1.125rem 0; } .rsh-ahrefs-inner { max-width: 72.5rem; margin: 0 auto; padding: 0 var(--margin); display: grid; grid-template-columns: repeat(3, 1fr); gap: .875rem; } .rsh-ahrefs-card { background: rgba(255,255,255,.03); border: .0625rem solid rgba(255,255,255,.07); border-radius: var(--radius-md, .625rem); padding: .875rem 1.125rem; display: flex; justify-content: space-between; align-items: center; gap: .75rem; position: relative; } .rsh-ahrefs-card::after { content: 'AHREFS'; position: absolute; top: .5rem; right: .75rem; font-size: .5rem; color: rgba(255,255,255,.12); } .rsh-ahrefs-label { color: rgba(255,255,255,.3); text-transform: uppercase; margin-bottom: .25rem; } .rsh-ahrefs-val { color: rgba(255,255,255,.85); line-height: 1; margin-bottom: .25rem; } .rsh-ahrefs-delta { } .rsh-ahrefs-delta.pos { color: var(--color-success, #4e95ff); } .rsh-ahrefs-delta.neg { color: var(--color-danger, #f26161); } .content { max-width: 72.5rem; margin: 0 auto; padding: 1.75rem var(--margin) 3.5rem; } .tab-nav { display: inline-flex; background: var(--color-surface, #252525); border: .0625rem solid var(--color-border, #3a3a3a); border-radius: var(--radius-lg, .875rem); padding: .25rem; margin-bottom: 1.625rem; box-shadow: var(--shadow-sm); } .tab-btn { padding: .5625rem 1.375rem; border-radius: var(--radius-sm, .5625rem); border: none; cursor: pointer; color: var(--color-text-tertiary, #959595); background: transparent; transition: all .18s; display: flex; align-items: center; gap: .4375rem; } .tab-btn:hover:not(.active) { color: var(--color-text-secondary, #b8b8b8); background: var(--color-bg, #1d1d1d); } .tab-btn.active { background: var(--color-brand-primary, #4e95ff); color: #fff; box-shadow: 0 .125rem .625rem rgba(78,149,255,.3); } .tab-dot { width: .375rem; height: .375rem; border-radius: 50%; background: currentColor; opacity: .6; } .tab-pane { display: none; } .tab-pane.active { display: block; } .section-title { color: var(--color-text-secondary, #b8b8b8); margin-bottom: .25rem; } .section-sub { color: var(--color-text-tertiary, #959595); margin-bottom: 1.125rem; } .kpi-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.25rem; margin-bottom: 2rem; } .kpi { background: var(--color-surface, #252525); border: .0625rem solid var(--color-border, #3a3a3a); border-radius: var(--radius-lg, .875rem); padding: 1.5rem 1.375rem; box-shadow: var(--shadow-sm); position: relative; overflow: hidden; } .kpi-bar { position: absolute; top: 0; left: 0; right: 0; height: .1875rem; border-radius: var(--radius-lg, .875rem) var(--radius-lg, .875rem) 0 0; opacity: .8; } .kpi-lbl { color: var(--color-text-tertiary, #959595); text-transform: uppercase; margin-bottom: .75rem; } .kpi-val { line-height: 1; margin-bottom: .625rem; } .kpi-row { display: flex; align-items: center; gap: .375rem; flex-wrap: wrap; } .kpi-prev { color: var(--color-text-tertiary, #959595); } .delta { display: inline-flex; align-items: center; gap: .1875rem; padding: .125rem .5rem; border-radius: .3125rem; white-space: nowrap; } .delta.pos { background: var(--color-success-dim, rgba(78,149,255,.10)); color: var(--color-success, #4e95ff); } .delta.neg { background: var(--color-danger-dim, rgba(242,97,97,.10)); color: var(--color-danger, #f26161); } .delta.neu { background: rgba(255,255,255,.05); color: var(--color-text-tertiary, #959595); } .chart-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin-bottom: 1.75rem; } .chart-card { background: var(--color-surface, #252525); border: .0625rem solid var(--color-border, #3a3a3a); border-radius: var(--radius-lg, .875rem); padding: 1.25rem 1.375rem; box-shadow: var(--shadow-sm); min-width: 0; } .chart-top { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1rem; } .chart-title { color: var(--color-text-secondary, #b8b8b8); } .chart-sub { color: var(--color-text-tertiary, #959595); margin-top: .125rem; } .chart-legend { display: flex; align-items: center; gap: .375rem; color: var(--color-text-tertiary, #959595); } .legend-swatch { width: .625rem; height: .625rem; border-radius: .1875rem; flex-shrink: 0; } .chart-wrap { position: relative; height: 18.75rem; max-height: 25rem; width: 100%; } .chart-wrap canvas { display: block; width: 100% !important; height: 100% !important; } .fazit-card { background: var(--color-surface-header, #111111); border: .0625rem solid rgba(255,255,255,.06); border-radius: var(--radius-lg, .875rem); padding: 1.75rem var(--margin); margin-bottom: 1.75rem; position: relative; overflow: hidden; } .fazit-card::before { content: ''; position: absolute; top: -2.5rem; right: -2.5rem; width: 12.5rem; height: 12.5rem; background: radial-gradient(circle, rgba(78,149,255,.12) 0%, transparent 70%); pointer-events: none; } .fazit-title { color: rgba(255,255,255,.3); text-transform: uppercase; margin-bottom: .75rem; display: flex; align-items: center; gap: .5rem; } .fazit-title::before { content: ''; display: inline-block; width: .375rem; height: .375rem; border-radius: 50%; background: var(--color-success, #4e95ff); flex-shrink: 0; } .fazit-text { color: rgba(255,255,255,.72); line-height: 1.9; } .fazit-highlights { display: grid; grid-template-columns: repeat(3, 1fr); gap: .625rem; margin-top: 1.125rem; } .fazit-hl { background: rgba(255,255,255,.04); border: .0625rem solid rgba(255,255,255,.08); border-radius: var(--radius-sm, .5625rem); padding: .75rem .875rem; } .fazit-hl-val { color: rgba(255,255,255,.9); line-height: 1; margin-bottom: .1875rem; } .fazit-hl-label { color: rgba(255,255,255,.3); text-transform: uppercase; } .fazit-hl-delta { color: var(--color-success, #4e95ff); margin-top: .125rem; } .milestone-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: .75rem; margin-bottom: 1.75rem; } .milestone-card { background: var(--color-surface, #252525); border: .0625rem solid var(--color-border, #3a3a3a); border-radius: var(--radius-lg, .875rem); padding: 1.125rem 1.25rem; box-shadow: var(--shadow-sm); } .milestone-label { color: var(--color-text-tertiary, #959595); text-transform: uppercase; margin-bottom: .375rem; } .milestone-from { color: var(--color-text-tertiary, #959595); } .milestone-arrow { color: var(--color-border, #3a3a3a); margin: .25rem 0; } .milestone-to { color: var(--color-text-primary, #e2e2e2); } .milestone-delta { display: inline-flex; align-items: center; gap: .25rem; margin-top: .375rem; padding: .125rem .5625rem; border-radius: .3125rem; } .table-card { background: var(--color-surface, #252525); border: .0625rem solid var(--color-border, #3a3a3a); border-radius: var(--radius-lg, .875rem); box-shadow: var(--shadow-sm); overflow: hidden; margin-bottom: 1.75rem; } .table-head-row { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.375rem .875rem; border-bottom: .0625rem solid var(--color-border-subtle, #2f2f2f); flex-wrap: wrap; gap: .625rem; } .table-title { color: var(--color-text-secondary, #b8b8b8); } .table-subtitle { color: var(--color-text-tertiary, #959595); margin-top: .125rem; } .table-scroll { overflow-x: auto; } table { width: 100%; border-collapse: collapse; } thead th { background: var(--color-surface-raised, #2f2f2f); padding: .5625rem .875rem; text-align: left; color: var(--color-text-tertiary, #959595); text-transform: uppercase; white-space: nowrap; border-bottom: .0625rem solid var(--color-border, #3a3a3a); } thead th.r { text-align: right; } tbody tr { border-bottom: .0625rem solid var(--color-border-subtle, #2f2f2f); transition: background .1s; } tbody tr:last-child { border-bottom: none; } tbody tr:hover { background: var(--color-surface-raised, #2f2f2f); } td { padding: .625rem .875rem; vertical-align: middle; } .td-num { text-align: right; color: var(--color-text-primary, #e2e2e2); font-variant-numeric: tabular-nums; } .td-delta { text-align: right; padding-left: .25rem; } .td-url { color: var(--color-text-secondary, #b8b8b8); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 22.5rem; display: block; } .td-url:hover { color: var(--color-brand-primary, #4e95ff); } .td-rank { color: var(--color-text-disabled, #686868); width: 1.75rem; min-width: 1.75rem; } .pos-top { color: var(--color-success, #4e95ff); } .pos-mid { color: var(--color-warning, #e9651f); } .pos-low { color: var(--color-text-secondary, #b8b8b8); } .pager { display: flex; justify-content: space-between; align-items: center; padding: .75rem 1.375rem; border-top: .0625rem solid var(--color-border-subtle, #2f2f2f); flex-wrap: wrap; gap: .5rem; } .pager-info { color: var(--color-text-tertiary, #959595); } .pager-btns { display: flex; gap: .25rem; } .pager-btn { padding: .3125rem .6875rem; border-radius: var(--radius-xs, .375rem); background: transparent; border: .0625rem solid var(--color-border, #3a3a3a); color: var(--color-text-secondary, #b8b8b8); cursor: pointer; transition: all .15s; font-family: inherit; } .pager-btn:hover:not(:disabled):not(.active) { background: var(--color-brand-primary-dim, rgba(78,149,255,.12)); color: var(--color-brand-primary, #4e95ff); border-color: rgba(78,149,255,.3); } .pager-btn.active { background: var(--color-brand-primary, #4e95ff); color: #fff; border-color: var(--color-brand-primary, #4e95ff); } .pager-btn:disabled { opacity: .25; cursor: default; } .pager-ellipsis { padding: .3125rem .375rem; color: var(--color-text-disabled, #686868); display: flex; align-items: center; } .footer { border-top: .0625rem solid var(--color-border-subtle, #2f2f2f); padding-top: 1.125rem; margin-top: .625rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: .5rem; } .footer-note { color: var(--color-text-tertiary, #959595); line-height: 1.6; } .footer-brand { color: var(--color-text-tertiary, #959595); } .tab-pane.active { padding-top: 1.75rem; } .tab-pane > * + * { margin-top: 1.75rem; } .kpi-grid { margin-bottom: 2rem; } .chart-grid { margin-bottom: 1.75rem; } .table-card { margin-bottom: 1.75rem; } .milestone-grid { margin-bottom: 1.75rem; } .fazit-card { margin-bottom: 1.75rem; } .section-title { margin-top: 2rem; margin-bottom: .25rem; } .section-title:first-child { margin-top: 0; } #tab-progress .section-title { margin-top: 2.5rem; } #tab-progress > div[style*="margin-bottom"] { margin-bottom: 1.75rem !important; } @keyframes fadeUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @media (max-width: 53.75rem) { .kpi-grid { grid-template-columns: 1fr 1fr; } .rsh-ahrefs-inner { grid-template-columns: 1fr; } .fazit-highlights { grid-template-columns: 1fr 1fr; } } @media (max-width: 37.5rem) { .chart-grid { grid-template-columns: 1fr; } .milestone-grid{ grid-template-columns: 1fr; } .rsh-kpi { display: none; } } @media (max-width: 31.25rem) { .kpi-grid { grid-template-columns: 1fr; } } @media print { .fazit-card { -webkit-print-color-adjust: exact; print-color-adjust: exact; } .tab-nav { display: none; } .tab-pane { display: block !important; } .kpi, .chart-card, .table-card, .fazit-card { break-inside: avoid; box-shadow: none; } }
function switchTab(id) { document.querySelectorAll('.tab-pane').forEach(p=>p.classList.remove('active')); document.querySelectorAll('.tab-btn').forEach(b=>b.classList.remove('active')); var pane = document.getElementById('tab-'+id); if(pane) pane.classList.add('active'); var btn = document.querySelector('[data-tab="'+id+'"]'); if(btn) btn.classList.add('active'); } document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('[data-tab]').forEach(function(btn) { btn.addEventListener('click', function() { switchTab(this.getAttribute('data-tab')); }); }); }); Chart.defaults.font.family = "'Plus Jakarta Sans',sans-serif"; Chart.defaults.font.size = 11; Chart.defaults.color = '#8b93a7'; const BASE='https: const LABELS = ['Apr 25','Mai 25','Jun 25','Jul 25','Aug 25','Sep 25','Okt 25','Nov 25','Dez 25','Jan 26','Feb 26','Mär 26']; const LABELS_PROG = ['Jun 25','Jul 25','Aug 25','Sep 25','Okt 25','Nov 25','Dez 25','Jan 26','Feb 26','Mär 26']; const LABELS_AHREFS_PROG = ['Jun 25','Jul 25','Aug 25','Sep 25','Okt 25','Nov 25','Dez 25','Jan 26','Feb 26','Mär 26','Apr 26']; const G_CLICKS = [2587,1948,2392,2338,3228,3293,3807,7117,4381,4698,5155,6274]; const G_IMPR = [44135,41873,53343,43704,93803,130349,199281,457872,362167,374348,385539,476683]; const G_KEYWORDS = [151,171,182,194,460,756,792,1144,1336,1303,1218,1345]; const G_POS = [11.5,12.3,12.6,12.9,12.8,8.6,7.3,6.5,6.1,6.2,5.4,4.6]; const DR_DATA = [36,36,36,37,38,38,42,43,44,44,44,44,44]; const RD_DATA = [143,144,158,165,175,189,208,291,322,320,305,292,293]; function barOpts(yFmt) { return { responsive:true, maintainAspectRatio:false, animation:{duration:0}, plugins:{ legend:{display:false}, tooltip:{ backgroundColor:'#fff',borderColor:'#e2e5ec',borderWidth:1.5, titleColor:'#0a0a14',bodyColor:'#4a5068',padding:11,cornerRadius:9, titleFont:{size:12,weight:'700'}, callbacks:{label:ctx=>{ const v = ctx.raw; if(yFmt==='M') return ` ${v>=1000000?(v/1000000).toFixed(2)+'M':v>=1000?(v/1000).toFixed(0)+'k':v}`; if(yFmt==='k') return ` ${v>=1000?(v/1000).toFixed(1)+'k':v}`; if(yFmt==='%') return ` ${v}%`; return ` ${v}`; }} } }, scales:{ x:{grid:{display:false},border:{display:false},ticks:{font:{size:10},maxRotation:35,minRotation:20}}, y:{ grid:{color:'#f0f2f6',lineWidth:1},border:{display:false,dash:[3,3]}, ticks:{font:{size:10},callback:v=>{ if(yFmt==='M') return v>=1000000?(v/1000000).toFixed(1)+'M':v>=1000?(v/1000).toFixed(0)+'k':v; if(yFmt==='k') return v>=1000?(v/1000).toFixed(0)+'k':v; if(yFmt==='%') return v+'%'; return v; }} } } }; } function bar(id, labels, data, color, yFmt) { const ctx = document.getElementById(id); if(!ctx) return; new Chart(ctx, { type:'bar', data:{labels, datasets:[{data, backgroundColor:color, borderRadius:4, borderSkipped:false}]}, options:barOpts(yFmt) }); } function line(id, labels, data, color, yFmt, reverseY) { const ctx = document.getElementById(id); if(!ctx) return; const opts = barOpts(yFmt); opts.scales.y.reverse = reverseY||false; if(reverseY) opts.scales.y.min = 0; new Chart(ctx, { type:'line', data:{labels, datasets:[{ data, borderColor:color, borderWidth:1.5, backgroundColor:color.replace('1)','0.05)').replace('#','rgba(').replace(/([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i,(m,r,g,b)=>`rgba(${parseInt(r,16)},${parseInt(g,16)},${parseInt(b,16)},0.05)`), fill:true, tension:0.4, pointRadius:2, pointHoverRadius:5, pointBackgroundColor:'#fff', pointBorderColor:color, pointBorderWidth:2, }]}, options:opts }); } function spark(id, data, color) { const ctx = document.getElementById(id); if(!ctx) return; new Chart(ctx,{type:'line',data:{labels:data.map((_,i)=>i),datasets:[{ data,borderColor:color,borderWidth:2,backgroundColor:color+'22',fill:true,tension:0.4,pointRadius:0 }]},options:{responsive:false,animation:{duration:0},plugins:{legend:{display:false},tooltip:{enabled:false}},scales:{x:{display:false},y:{display:false}}}}); } function initCharts() { bar('cGlobalClicks', LABELS, G_CLICKS, 'rgba(75,163,245,0.85)', 'k'); bar('cGlobalImpr', LABELS, G_IMPR, 'rgba(124,58,237,0.85)', 'M'); bar('cGlobalCTR', LABELS, G_KEYWORDS, 'rgba(45,158,95,0.85)', 'k'); bar('cGlobalPos', LABELS, G_POS, 'rgba(0,82,255,0.85)', 'pos'); const P_CLICKS = [2392,2338,3228,3293,3807,7117,4381,4698,5155,6274]; const P_IMPR = [53343,43704,93803,130349,199281,457872,362167,374348,385539,476683]; const P_POS = [12.6,12.9,12.8,8.6,7.3,6.5,6.1,6.2,5.4,4.6]; const P_KEYWORDS = [182,194,460,756,792,1144,1336,1303,1218,1345]; const P_DR = [36,37,38,38,42,43,44,44,44,44,44]; const P_RD = [158,165,175,189,208,291,322,320,305,292,293]; bar('cProgClicks', LABELS_PROG, P_CLICKS, 'rgba(75,163,245,0.85)', 'k'); bar('cProgImpr', LABELS_PROG, P_IMPR, 'rgba(124,58,237,0.85)', 'M'); line('cProgDR', LABELS_AHREFS_PROG, P_DR, '#3d7bff', 'num', false); line('cProgRD', LABELS_AHREFS_PROG, P_RD, '#00b96b', 'num', false); } function initSparklines() { spark('sp1', [36,37,38,38,42,43,44,44,44,44,44], 'rgba(61,123,255,1)'); spark('sp2', [158,165,175,189,208,291,322,320,305,292,293], 'rgba(0,185,107,1)'); spark('sp3', [0,0,0,0,0,0,0,0,0,0,0,0,0], 'rgba(245,158,11,1)'); } initCharts(); initSparklines(); const GLOBAL_ROWS = [ ['/en/',613,-10.9,4151,-37.4,3.2,-31.3], ['/',380,-8.2,2943,2.1,6.06,-25.6], ['/news/equines-asthma-wenn-jeder-atemzug-zur-herausforderung-wird/',309,31.5,25492,47.9,3.88,-9.8], ['/news/spat-beim-pferd-moderne-therapieansaetze-fuer-mehr-lebensqualitaet/',278,61.6,21222,28.7,2.99,-4.8], ['/news/hautpilz-beim-pferd-ansteckungsgefahr-richtig-einschaetzen/',268,318.8,17125,204.7,3.27,-51.0], ['/news/wurmkur-beim-pferd-moderne-entwurmungsstrategien-fuer-gesunde-pferde/',242,80.6,29520,86.4,6.37,-13.5], ['/news/sarkoid-beim-pferd-behandlungsstrategien-die-funktionieren/',220,98.2,15560,80.7,4.66,-17.1], ['/clinics/',217,-3.6,3895,-9.9,4.78,-10.0], ['/news/magengeschwuere-beim-pferd-die-stille-volkskrankheit-erkennen/',213,-6.6,23093,-3.8,4.34,-3.8], ['/news/hufrollensyndrom-neue-hoffnung-durch-moderne-diagnostik/',201,50.0,13692,41.4,3.68,-8.9], ['/news/fesselgelenk-pferd-gesunde-pflege-und-haeufige-probleme-erkennen/',199,57.9,20403,28.1,4.37,-9.5], ['/news/pferd-inhalieren-effektive-methoden-zur-linderung-von-atemproblemen/',165,71.9,12053,49.2,4.75,-13.2], ['/news/kreuzverschlag-pferd-ursachen-symptome-und-behandlungsmoeglichkeiten/',164,12.3,9421,-11.9,3.9,-3.5], ['/news/kissing-spines-pferd-symptome-ursachen-und-behandlungsmoeglichkeiten/',152,24.6,17723,19.6,3.41,1.8], ['/unser-team/',145,25.0,1938,-19.4,10.35,-13.7], ['/news/periodische-augenentzuendung-pferd-symptome-ursachen-und-behandlung/',144,27.4,8986,14.3,4.77,-9.7], ['/news/equines-cushing-syndrom-ecs-so-erkennen-sie-die-symptome-rechtzeitig/',136,4.6,18573,-1.5,4.74,-3.3], ['/news/wenn-das-pferd-hustet-atemwegserkrankungen-richtig-einschaetzen/',130,85.7,20819,40.7,5.07,-11.7], ['/kliniken/',127,10.4,1884,8.0,5.54,-22.8], ['/en/unser-team/',119,-10.5,2428,2.3,4.64,-24.2], ['/news/fieber-beim-pferd-die-ursachensuche-als-detektivarbeit/',111,38.8,22051,28.1,3.09,-18.9], ['/news/angelaufene-beine-im-winter-wann-schwellungen-gefaehrlich-werden/',111,-34.7,12506,42.1,3.88,-20.7], ['/news/feuchte-hufe-im-herbst-so-erkennen-sie-hufpilz-beim-pferd-infektionen-frueh/',100,17.6,6416,25.6,7.27,-4.8], ['/news/phlegmone-beim-pferd-wenn-jede-stunde-zaehlt/',94,67.9,12496,100.1,3.01,-29.3], ['/news/hufkrebs-behandlung-von-der-diagnose-bis-zur-heilung/',92,-10.7,5610,9.5,2.77,-6.7], ['/news/mauke-beim-pferd-von-der-frueherkennung-zur-erfolgreichen-therapie/',88,2.3,16775,47.0,4.06,-17.5], ['/news/schlundverstopfung-beim-pferd-notfall-richtig-managen/',87,97.7,11396,67.4,3.66,-27.5], ['/news/kolik-pferd-anzeichen-ursachen-und-schnelle-hilfe-fuer-dein-tier/',75,-15.7,24898,10.5,4.48,2.8], ['/stellenangebote/',72,1.4,1095,-15.4,5.71,-26.8], ['/news/gewichtsverlust-beim-pferd-ursachen-systematisch-aufdecken/',69,263.2,6441,235.5,3.85,-46.1], ['/news/hufrehe-im-herbst-vermeiden-tipps-fuer-gewicht-futter-weide/',67,42.6,21051,11.0,4.92,-9.9], ['/news/osteopathie-vs-physiotherapie-beim-pferd-der-unterschied-erklaert/',67,31.4,8407,41.0,6.51,-18.9], ['/news/automatisch-gespeicherter-entwurfequines-metabolisches-syndrom-ems-bei-pferden-frueherkennung-und-management/',67,415.4,7568,286.1,7.08,-34.3], ['/news/nesselfieber-beim-pferd-allergische-reaktionen-schnell-erkennen/',58,176.2,3959,145.1,4.94,-33.0], ['/news/ausbildung-physiotherapeut-pferd-starte-deine-karriere-im-pferdesport/',57,-10.9,6292,-9.8,6.57,0.2], ['/en/altano-academy/',49,0.0,492,27.5,3.12,17.7], ['/news/die-ausbildung-tierarzt-schritte-zum-erfolgreichen-berufseinstieg/',43,10.3,14011,32.9,5.17,-15.1], ['/news/pferdegebiss-zahngesundheit-beim-pferd-mehr-als-nur-routine-kontrolle/',41,28.1,9551,36.0,4.16,1.0], ['/news/ausbildung-chiropraktiker-fuer-pferde-der-weg-zu-mehr-tiergesundheit/',41,51.9,2634,57.0,9.72,-41.4], ['/en/ueber-uns/',38,8.6,2034,-5.5,3.93,-3.7], ['/altano-academy/',38,90.0,166,41.9,3.81,-17.0], ['/en/arbeiten-bei-altano/',36,89.5,573,-6.8,4.11,-5.1], ['/en/aktuelles/altano-und-australiens-groesster-anbieter-fuer-pferdemedizin-buendeln-kraefte/',30,900.0,515,635.7,4.9,-20.2], ['/news/ausbildung-als-tierarzt-vom-traum-zum-berufdie-ausbildung-als-tierarzt-schritte-anforderungen-und-perspektiven/',29,-42.0,9095,6.5,5.92,-12.2], ['/ueber-uns/',29,20.8,1030,-10.0,3.6,-6.0], ['/en/stellenangebote/',28,12.0,426,-38.9,2.39,11.2], ['/news/sommerekzem-erfolgreich-managen-mehr-als-nur-eine-fliegendecke/',27,145.5,5594,52.1,6.19,-31.8], ['/news/karrierechancen-fuer-tiermedizinische-fachangestellte-ein-ueberblick/',21,-34.4,3986,8.4,5.89,-32.9], ['/en/studierende/',21,61.5,1057,7.6,3.98,-7.9], ['/en/aktuelles/altano-begruesst-equine-sports-medicine-esm/',18,-10.0,540,34.0,5.75,-14.6], ]; const TRACKED_ROWS = [ ['/news/equines-asthma-wenn-jeder-atemzug-zur-herausforderung-wird/',309,31.5,25492,47.9,3.88,-9.8], ['/news/spat-beim-pferd-moderne-therapieansaetze-fuer-mehr-lebensqualitaet/',278,61.6,21222,28.7,2.99,-4.8], ['/news/hautpilz-beim-pferd-ansteckungsgefahr-richtig-einschaetzen/',268,318.8,17125,204.7,3.27,-51.0], ['/news/wurmkur-beim-pferd-moderne-entwurmungsstrategien-fuer-gesunde-pferde/',242,80.6,29520,86.4,6.37,-13.5], ['/news/sarkoid-beim-pferd-behandlungsstrategien-die-funktionieren/',220,98.2,15560,80.7,4.66,-17.1], ['/news/magengeschwuere-beim-pferd-die-stille-volkskrankheit-erkennen/',213,-6.6,23093,-3.8,4.34,-3.8], ['/news/hufrollensyndrom-neue-hoffnung-durch-moderne-diagnostik/',201,50.0,13692,41.4,3.68,-8.9], ['/news/fesselgelenk-pferd-gesunde-pflege-und-haeufige-probleme-erkennen/',199,57.9,20403,28.1,4.37,-9.5], ['/news/pferd-inhalieren-effektive-methoden-zur-linderung-von-atemproblemen/',165,71.9,12053,49.2,4.75,-13.2], ['/news/kreuzverschlag-pferd-ursachen-symptome-und-behandlungsmoeglichkeiten/',164,12.3,9421,-11.9,3.9,-3.5], ['/news/kissing-spines-pferd-symptome-ursachen-und-behandlungsmoeglichkeiten/',152,24.6,17723,19.6,3.41,1.8], ['/news/periodische-augenentzuendung-pferd-symptome-ursachen-und-behandlung/',144,27.4,8986,14.3,4.77,-9.7], ['/news/equines-cushing-syndrom-ecs-so-erkennen-sie-die-symptome-rechtzeitig/',136,4.6,18573,-1.5,4.74,-3.3], ['/news/wenn-das-pferd-hustet-atemwegserkrankungen-richtig-einschaetzen/',130,85.7,20819,40.7,5.07,-11.7], ['/news/angelaufene-beine-im-winter-wann-schwellungen-gefaehrlich-werden/',111,-34.7,12506,42.1,3.88,-20.7], ['/news/fieber-beim-pferd-die-ursachensuche-als-detektivarbeit/',111,38.8,22051,28.1,3.09,-18.9], ['/news/feuchte-hufe-im-herbst-so-erkennen-sie-hufpilz-beim-pferd-infektionen-frueh/',100,17.6,6416,25.6,7.27,-4.8], ['/news/phlegmone-beim-pferd-wenn-jede-stunde-zaehlt/',94,67.9,12496,100.1,3.01,-29.3], ['/news/hufkrebs-behandlung-von-der-diagnose-bis-zur-heilung/',92,-10.7,5610,9.5,2.77,-6.7], ['/news/mauke-beim-pferd-von-der-frueherkennung-zur-erfolgreichen-therapie/',88,2.3,16775,47.0,4.06,-17.5], ['/news/schlundverstopfung-beim-pferd-notfall-richtig-managen/',87,97.7,11396,67.4,3.66,-27.5], ['/news/kolik-pferd-anzeichen-ursachen-und-schnelle-hilfe-fuer-dein-tier/',75,-15.7,24898,10.5,4.48,2.8], ['/news/gewichtsverlust-beim-pferd-ursachen-systematisch-aufdecken/',69,263.2,6441,235.5,3.85,-46.1], ['/news/hufrehe-im-herbst-vermeiden-tipps-fuer-gewicht-futter-weide/',67,42.6,21051,11.0,4.92,-9.9], ['/news/osteopathie-vs-physiotherapie-beim-pferd-der-unterschied-erklaert/',67,31.4,8407,41.0,6.51,-18.9], ['/news/nesselfieber-beim-pferd-allergische-reaktionen-schnell-erkennen/',58,176.2,3959,145.1,4.94,-33.0], ['/news/ausbildung-physiotherapeut-pferd-starte-deine-karriere-im-pferdesport/',57,-10.9,6292,-9.8,6.57,0.2], ['/news/die-ausbildung-tierarzt-schritte-zum-erfolgreichen-berufseinstieg/',43,10.3,14011,32.9,5.17,-15.1], ['/news/ausbildung-chiropraktiker-fuer-pferde-der-weg-zu-mehr-tiergesundheit/',41,51.9,2634,57.0,9.72,-41.4], ['/news/pferdegebiss-zahngesundheit-beim-pferd-mehr-als-nur-routine-kontrolle/',41,28.1,9551,36.0,4.16,1.0], ['/news/ausbildung-als-tierarzt-vom-traum-zum-berufdie-ausbildung-als-tierarzt-schritte-anforderungen-und-perspektiven/',29,-42.0,9095,6.5,5.92,-12.2], ['/news/sommerekzem-erfolgreich-managen-mehr-als-nur-eine-fliegendecke/',27,145.5,5594,52.1,6.19,-31.8], ['/news/karrierechancen-fuer-tiermedizinische-fachangestellte-ein-ueberblick/',21,-34.4,3986,8.4,5.89,-32.9], ['/news/physiotherapie-fuer-pferde-effektive-methoden-fuer-optimale-gesundheit/',4,100.0,1071,70.0,11.77,1.7], ['/news/pferdeklinik-hochwertige-versorgung-fuer-ihr-pferd-in-besten-haenden/',4,100.0,210,-2.3,7.92,-28.9] ]; const PAGE_SIZE = 50; function fmtDelta(val) { if(val===null) return `<td class="td-delta" style="text-align:right;color:var(--text-light);font-size:12px">—</td>`; const cls = val===0?'neu':val>0?'pos':'neg'; const arrow = val>0?'▲':val<0?'▼':'●'; const sign = val>0?'+':''; return `<td class="td-delta"><span class="delta ${cls}">${arrow} ${sign}${val.toFixed(1)}%</span></td>`; } function fmtPos(pos) { const cls = pos<=5?'pos-top':pos<=10?'pos-mid':'pos-low'; return `<td class="td-num ${cls}">${pos.toFixed(2)}</td>`; } function buildRows(rows, page) { if(!rows.length) return `<tr><td colspan="8" style="text-align:center;padding:40px;color:var(--text-light)">Keine Daten</td></tr>`; const start = page*PAGE_SIZE; return rows.slice(start, start+PAGE_SIZE).map((r,i)=>{ const [url,clicks,cPct,impr,iPct,pos,pPct] = r; const short = url.replace('https: return `<tr> <td class="td-rank">${start+i+1}.</td> <td><a class="td-url" href="${url.startsWith('/')?BASE+url:url}" target="_blank" rel="noopener" title="${url}">${short}</a></td> <td class="td-num">${clicks.toLocaleString('de-DE')}</td> ${fmtDelta(cPct)} <td class="td-num">${impr.toLocaleString('de-DE')}</td> ${fmtDelta(iPct)} ${fmtPos(pos)} ${fmtDelta(pPct)} </tr>`; }).join(''); } function buildPager(rows, page, bodyId, pagerId, subtitleId, label) { const total = rows.length; const pages = Math.max(1, Math.ceil(total/PAGE_SIZE)); const start = page*PAGE_SIZE+1; const end = Math.min((page+1)*PAGE_SIZE, total); document.getElementById(subtitleId).textContent = `${start}–${end} von ${total} ${label} · Seite ${page+1} von ${pages}`; let btns = `<button class="pager-btn" ${page===0?'disabled':''} onclick="goTo('${bodyId}','${pagerId}','${subtitleId}','${label}',${page-1})">‹</button>`; for(let i=0;i<pages;i++){ if(pages<=8||i===0||i===pages-1||Math.abs(i-page)<=1){ btns+=`<button class="pager-btn${i===page?' active':''}" onclick="goTo('${bodyId}','${pagerId}','${subtitleId}','${label}',${i})">${i+1}</button>`; }else if(Math.abs(i-page)===2){btns+=`<span class="pager-ellipsis">…</span>`;} } btns+=`<button class="pager-btn" ${page>=pages-1?'disabled':''} onclick="goTo('${bodyId}','${pagerId}','${subtitleId}','${label}',${page+1})">›</button>`; document.getElementById(pagerId).innerHTML=`<div class="pager-info">${start}–${end} von ${total}</div><div class="pager-btns">${btns}</div>`; } let gPage=0, tPage=0; function goTo(bodyId,pagerId,subtitleId,label,page){ const rows = bodyId==='gTableBody'?GLOBAL_ROWS:TRACKED_ROWS; if(bodyId==='gTableBody') gPage=page; else tPage=page; document.getElementById(bodyId).innerHTML=buildRows(rows,page); buildPager(rows,page,bodyId,pagerId,subtitleId,label); } document.getElementById('gTableBody').innerHTML=buildRows(GLOBAL_ROWS,0); buildPager(GLOBAL_ROWS,0,'gTableBody','gPager','gSubtitle','URLs'); document.getElementById('tTableBody').innerHTML=buildRows(TRACKED_ROWS,0); buildPager(TRACKED_ROWS,0,'tTableBody','tPager','tSubtitle','Seiten'); (function() { var PASS = "Altano"; var overlay = document.getElementById("pw-overlay"); var btn = document.getElementById("pw-btn"); var inp = document.getElementById("pw-input"); var err = document.getElementById("pw-error"); if (!overlay) return; function unlock() { if (inp.value === PASS) { overlay.classList.add("hidden"); setTimeout(function() { overlay.style.display = "none"; Object.values(Chart.instances).forEach(function(c) { c.destroy(); }); initCharts(); initSparklines(); window.dispatchEvent(new Event("resize")); }, 420); } else { err.textContent = "Falsches Passwort."; inp.value = ""; inp.focus(); setTimeout(function() { err.textContent = ""; }, 3000); } } btn.addEventListener("click", unlock); inp.addEventListener("keydown", function(e) { if (e.key === "Enter") unlock(); }); })();