{"id":14154,"date":"2026-09-12T01:07:55","date_gmt":"2026-09-11T23:07:55","guid":{"rendered":"https:\/\/geopard.tech\/?page_id=14154"},"modified":"2026-09-12T02:07:33","modified_gmt":"2026-09-12T00:07:33","slug":"tuottoraportti","status":"publish","type":"page","link":"https:\/\/geopard.tech\/fin\/yield-report\/","title":{"rendered":"Automaattinen tuottoraportti: Kannattiko vaihtuva korko?"},"content":{"rendered":"\n<div class=\"gp-yr\" id=\"gp-yr\" data-theme=\"light\">\n<style>\n\/* ===== theme-chrome (ID-scoped; rule 7 precedent from \/ai). Header + footer KEPT; only the\n   duplicate WP page title (bare h1 in #simple_page > .container) is hidden. ===== *\/\n#simple_page > .container > h1{display:none !important}\n\/* full-bleed: the theme .container is FIXED 1500px + left-pinned below 1500px viewports, so\n   50%\/50vw breakout math misfires. On this takeover page the container only holds this embed. *\/\n#simple_page > .container{width:auto !important;max-width:none !important;margin:0 !important;padding:0 !important}\n#simple_page{padding:0 !important}\n\/* the site-wide WPBot chat widget collides with this page's mobile CTA bar (same call as \/ai) *\/\n.wp-chatbot-container{display:none !important}\n.qcld-chatbot-wp-container{display:none !important}\ndiv[id^=\"qcld-chatbot\"]{display:none !important}\n#wp-chatbot-ball{display:none !important}\n.wp-chatbot-ball{display:none !important}\ndiv[id^=\"wp-chatbot\"]{display:none !important}\n#qcld-chatbot-widget{display:none !important}\n\n\/* Roboto for this page at first paint and at every weight (rule 24). The theme declares Roboto 300\/400\/500\n   only, in a stylesheet Perfmatters delays until the first interaction, so headings had no real bold and the\n   first paint fell back to Helvetica. This is the variable Roboto the site's own WP.com fonts stylesheet\n   serves (fonts.wp.com, Automattic: same trust domain as the i0.wp.com images). Latin + Latin-ext only. *\/\n@font-face{font-family:\"Roboto\";font-style:normal;font-weight:100 900;font-display:swap;src:url(https:\/\/fonts.wp.com\/s\/roboto\/v51\/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2) format(\"woff2\");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}\n@font-face{font-family:\"Roboto\";font-style:normal;font-weight:100 900;font-display:swap;src:url(https:\/\/fonts.wp.com\/s\/roboto\/v51\/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2) format(\"woff2\");unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}\n\/* ===== GPR:CSS START \u2550 all rules scoped under .gp-yr (rule 5). Light theme only (rule 11).\n   Type: Roboto only, headings 700 (rule 24); 6px button radius\n   and 10px cards match the site; no pills, no uppercase spaced labels beyond small kickers. ===== *\/\n.gp-yr{\n  --gpr-font:\"Roboto\",-apple-system,\"Segoe UI\",Helvetica,Arial,sans-serif;\n  --ink:#212121; --dim:#4c6066; --accent:#15701e; --accent-dark:#145328; --accent-soft:#1b7a2a;\n  --bg:#fcfdf9; --panel:#ffffff; --panel2:#f6f9f0; --line:#e8ebe2; --line2:#d6e2c5;\n  --pass:#15701e; --pass-bg:#e9f4e7; --even:#8a5d00; --even-bg:#fff4d6; --lose:#b3261e; --lose-bg:#fdebe9;\n  --shadow:rgba(20,83,40,.08);\n  color:var(--ink);background:var(--bg);position:relative;overflow-x:clip;\n  font-family:var(--gpr-font);\n  font-size:16px;line-height:1.55;font-variant-numeric:tabular-nums;\n}\n.gp-yr h1,.gp-yr h2,.gp-yr h3,.gp-yr h4{font-family:var(--gpr-font);font-weight:700;line-height:1.16;margin:0;color:var(--ink)}\n.gp-yr p{margin:0}\n.gp-yr section{position:relative;max-width:1200px;margin:0 auto;padding:52px 32px}\n.gp-yr .gpr-kicker{font-family:var(--gpr-font);font-size:.95rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--accent);margin-bottom:14px}\n.gp-yr .gpr-accent{color:var(--accent)}\n.gp-yr .gpr-lede{color:var(--dim);font-size:1.08rem;line-height:1.65}\n.gp-yr .gpr-h2{font-size:clamp(1.9rem,3.1vw,2.8rem);font-weight:700;max-width:900px;text-wrap:balance}\n.gp-yr .gpr-sechead{text-align:center;max-width:800px;margin:0 auto 32px}\n.gp-yr .gpr-sechead .gpr-h2{margin:0 auto}\n.gp-yr .gpr-sechead .gpr-lede{margin-top:12px}\n.gp-yr .gpr-mono{font-family:var(--gpr-font);font-variant-numeric:tabular-nums}\n\n\/* ---- section-chip nav (fixed under the theme header; slides in after the hero) + mobile\n   sticky CTA bar. Both FIXED, never CSS sticky (theme overflow ancestors kill sticky). ---- *\/\n.gp-yr .gpr-secnav{position:fixed;left:0;right:0;top:0;z-index:50;background:var(--panel);border-bottom:1px solid var(--line);box-shadow:0 2px 10px var(--shadow);transform:translateY(-110%);transition:transform .3s}\n.gp-yr .gpr-secnav.is-on{transform:none}\n.gp-yr .gpr-secnav-row{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:6px 12px;max-width:1200px;margin:0 auto}\n.gp-yr .gpr-secnav-row::-webkit-scrollbar{display:none}\n.gp-yr .gpr-secnav a{flex:0 0 auto;display:inline-flex;align-items:center;min-height:44px;padding:0 14px;border-radius:6px;text-decoration:none;color:var(--dim);font-family:var(--gpr-font);font-size:.9rem;font-weight:500}\n.gp-yr .gpr-secnav a:hover{color:var(--accent)}\n.gp-yr .gpr-secnav a.is-active{color:var(--accent);background:var(--panel2)}\n@media (min-width:821px){ .gp-yr .gpr-secnav-row{justify-content:center} }\n.gp-yr .gpr-ctabar{position:fixed;left:0;right:0;bottom:0;z-index:55;display:none;gap:10px;padding:10px 14px calc(10px + env(safe-area-inset-bottom));background:var(--panel);border-top:1px solid var(--line);box-shadow:0 -4px 18px var(--shadow);transform:translateY(110%);transition:transform .3s}\n@media (max-width:820px){ .gp-yr .gpr-ctabar{display:flex} }\n.gp-yr .gpr-ctabar.is-on{transform:none}\n.gp-yr .gpr-ctabar.is-off{transform:translateY(110%)}\n.gp-yr .gpr-ctabar .gpr-btn,.gp-yr .gpr-ctabar .gpr-btn-ghost{flex:1;justify-content:center;padding:0 12px}\n\n\/* ---- hero ---- *\/\n.gp-yr .gpr-hero{text-align:center;padding-top:20px}\n.gp-yr .gpr-hero h1{font-size:clamp(2.2rem,4.8vw,4.2rem);font-weight:700;max-width:980px;margin:0 auto;letter-spacing:-0.01em;text-wrap:balance}\n.gp-yr .gpr-hero .gpr-lede{max-width:780px;margin:18px auto 0}\n.gp-yr .gpr-hero-ctas{display:flex;gap:14px;margin-top:22px;flex-wrap:wrap;justify-content:center}\n.gp-yr .gpr-btn{display:inline-flex;align-items:center;min-height:48px;background:#15701e;color:#fff;font-family:var(--gpr-font);font-weight:500;font-size:1rem;padding:0 26px;border-radius:6px;text-decoration:none;box-shadow:0 2px 8px rgba(21,112,30,.22);transition:background .15s}\n.gp-yr .gpr-btn:hover{color:#fff;background:#145328}\n.gp-yr .gpr-btn-ghost{display:inline-flex;align-items:center;min-height:48px;border:1.5px solid var(--line2);background:transparent;color:var(--ink);font-family:var(--gpr-font);font-weight:500;font-size:1rem;padding:0 24px;border-radius:6px;text-decoration:none}\n.gp-yr .gpr-btn-ghost:hover{border-color:var(--accent);color:var(--accent)}\n\n\/* ---- Arcade walkthrough (iframe injected by the script from data-arcade) ---- *\/\n.gp-yr .gpr-arcade-wrap{max-width:1080px;margin:30px auto 0;border-radius:12px;overflow:hidden;border:1px solid var(--line2);box-shadow:0 24px 70px var(--shadow);background:var(--panel);text-align:left}\n.gp-yr .gpr-arcade-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid var(--line)}\n.gp-yr .gpr-arcade-head b{font-family:var(--gpr-font);font-size:.95rem;color:var(--ink)}\n.gp-yr .gpr-arcade-head span{color:var(--dim);font-size:.9rem}\n.gp-yr .gpr-arcade{position:relative;width:100%;height:0;padding-bottom:calc(57.71% + 41px);background:#eef3e4}\n.gp-yr .gpr-arcade iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0;color-scheme:light}\n.gp-yr .gpr-arcade-fallback{position:absolute;top:0;left:0;right:0;bottom:0;display:block;text-decoration:none;color:inherit;z-index:1}\n.gp-yr .gpr-arcade-fallback img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}\n.gp-yr .gpr-arcade-open{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);display:inline-flex;align-items:center;min-height:48px;background:#15701e;color:#fff;border-radius:6px;padding:0 24px;font-family:var(--gpr-font);font-weight:500;font-size:.95rem;white-space:nowrap;box-shadow:0 10px 30px rgba(21,112,30,.35)}\n.gp-yr .gpr-arcade.has-embed .gpr-arcade-fallback{display:none}\n\n\/* ---- cards ---- *\/\n.gp-yr .gpr-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}\n.gp-yr .gpr-cards4{grid-template-columns:repeat(4,1fr)}\n.gp-yr .gpr-cards2{grid-template-columns:repeat(2,1fr)}\n.gp-yr .gpr-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:22px;box-shadow:0 1px 3px var(--shadow)}\n.gp-yr .gpr-card h3{display:block;font-size:1.1rem;font-weight:700;color:var(--ink);line-height:1.3}\n.gp-yr .gpr-card span{display:block;color:var(--dim);font-size:.95rem;line-height:1.55;margin-top:8px}\n.gp-yr .gpr-card .gpr-num{display:block;font-family:var(--gpr-font);font-weight:500;color:var(--accent);font-size:.8rem;letter-spacing:.03em;text-transform:uppercase;margin:0 0 8px}\n.gp-yr .gpr-card .gpr-chips{margin-top:12px}\n\n\/* ---- checklist (rule 22: marker is a ::before on the same <p>, hanging indent) ---- *\/\n.gp-yr .gpr-check{max-width:900px;margin:28px auto 0;background:var(--panel2);border:1px solid var(--line2);border-radius:10px;padding:20px 24px}\n.gp-yr .gpr-check h3{font-size:1rem;margin-bottom:10px}\n.gp-yr .gpr-check p{margin:0;padding-left:1.7em;text-indent:-1.7em;color:var(--dim);line-height:1.6}\n.gp-yr .gpr-check p+p{margin-top:8px}\n\/* marker drawn by CSS, INSIDE the paragraph flow (rule 22): it can never wrap away from its text, and it is not text for SEO parsers *\/\n.gp-yr .gpr-check p::before{content:\"\\2713\";color:var(--accent);font-weight:500;margin-right:.5em}\n\n\/* ---- product screenshots (server-rendered img, pre-photonized; tap to zoom) ---- *\/\n.gp-yr .gpr-shot{margin:0;border:1px solid var(--line2);border-radius:10px;overflow:hidden;background:var(--panel)}\n.gp-yr .gpr-shot img{display:block;width:100%;height:auto;cursor:zoom-in}\n.gp-yr .gpr-shot figcaption{font-size:.85rem;color:var(--dim);padding:10px 14px;border-top:1px solid var(--line)}\n.gp-yr .gpr-shot-wide{max-width:1136px;margin:0 auto}\n.gp-yr .gpr-shots2{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n.gp-yr .gpr-shots3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}\n.gp-yr .gpr-shots-gap{margin-top:24px}\n\n\/* ---- tables ---- *\/\n.gp-yr .gpr-table-wrap{overflow-x:auto}\n.gp-yr .gpr-table{width:100%;border-collapse:collapse;font-size:.95rem}\n.gp-yr .gpr-table th,.gp-yr .gpr-table td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}\n.gp-yr .gpr-table th{font-family:var(--gpr-font);font-size:.82rem;color:var(--dim);font-weight:500}\n.gp-yr .gpr-table td b{font-weight:700;color:var(--ink)}\n.gp-yr .gpr-table small{display:block;color:var(--dim);font-size:.82rem;font-family:var(--gpr-font);margin-top:2px}\n.gp-yr .gpr-pos{color:var(--pass)}\n.gp-yr .gpr-neg{color:var(--lose)}\n\n\/* ---- economics calculator ---- *\/\n.gp-yr .gpr-calc{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:28px;box-shadow:0 1px 3px var(--shadow)}\n.gp-yr .gpr-units{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;background:var(--panel2);border:1px solid var(--line2);border-radius:12px;padding:10px 14px;color:var(--dim);font-size:.95rem}\n.gp-yr .gpr-units-btn{min-height:44px;border:1px solid var(--line2);background:var(--panel);color:var(--accent);font-family:var(--gpr-font);font-weight:500;font-size:.9rem;border-radius:6px;padding:0 16px;cursor:pointer}\n.gp-yr .gpr-units-btn:hover{border-color:var(--accent)}\n.gp-yr .gpr-sample{color:var(--dim);margin-top:14px;font-size:.98rem;line-height:1.6}\n.gp-yr .gpr-sample b{color:var(--ink)}\n.gp-yr .gpr-sliders{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}\n.gp-yr .gpr-slider{background:var(--panel2);border:1px solid var(--line2);border-radius:12px;padding:14px 16px}\n.gp-yr .gpr-slider label{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-family:var(--gpr-font);font-weight:500;font-size:.95rem;color:var(--ink)}\n.gp-yr .gpr-slider output{font-family:var(--gpr-font);font-size:1.05rem;color:var(--accent);font-weight:500;white-space:nowrap}\n.gp-yr .gpr-slider input[type=range]{display:block;width:100%;margin:10px 0 0;accent-color:#15701e;height:44px;cursor:pointer;background:transparent}\n.gp-yr .gpr-slider small{display:block;color:var(--dim);font-size:.85rem;margin-top:4px}\n.gp-yr .gpr-steps{margin-top:24px}\n.gp-yr .gpr-steps h3,.gp-yr .gpr-zones h3{font-size:1.2rem}\n.gp-yr .gpr-sub{color:var(--dim);font-size:.92rem;margin:4px 0 10px}\n.gp-yr .gpr-verdict{display:inline-flex;align-items:center;min-height:30px;border-radius:6px;padding:4px 12px;font-family:var(--gpr-font);font-weight:500;font-size:.85rem;white-space:nowrap}\n.gp-yr .gpr-verdict.is-paid{background:var(--pass-bg);color:var(--pass)}\n.gp-yr .gpr-verdict.is-even{background:var(--even-bg);color:var(--even)}\n.gp-yr .gpr-verdict.is-lost{background:var(--lose-bg);color:var(--lose)}\n\/* zone economics bars: one group per zone, zero line at mid-height *\/\n.gp-yr .gpr-zones{margin-top:28px}\n.gp-yr .gpr-legend{display:flex;flex-wrap:wrap;gap:14px;color:var(--dim);font-size:.88rem;margin:6px 0 12px}\n.gp-yr .gpr-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:6px;vertical-align:-1px}\n.gp-yr .gpr-chart{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;height:220px;position:relative;border-bottom:1px solid var(--line)}\n.gp-yr .gpr-chart::before{content:\"\";position:absolute;left:0;right:0;top:50%;border-top:1px dashed var(--line2)}\n.gp-yr .gpr-group{position:relative;display:flex;justify-content:center;gap:10px}\n.gp-yr .gpr-bar{position:relative;flex:0 0 26px;display:block;cursor:help;border-radius:6px}\n.gp-yr .gpr-bar i{position:absolute;left:0;right:0;border-radius:4px;display:block;min-height:2px}\n.gp-yr .gpr-bar.is-cost i{background:#f76a0c}\n.gp-yr .gpr-bar.is-value i{background:#145328}\n.gp-yr .gpr-bar.is-net i{background:#a0d468}\n.gp-yr .gpr-bar:hover i,.gp-yr .gpr-bar:focus i{filter:brightness(1.15)}\n.gp-yr .gpr-glabels{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;text-align:center;margin-top:10px}\n.gp-yr .gpr-glabels b{display:block;font-family:var(--gpr-font);font-size:.95rem;color:var(--ink)}\n.gp-yr .gpr-glabels span{display:inline-block;margin-top:4px;border-radius:6px;padding:3px 10px;font-family:var(--gpr-font);font-size:.9rem}\n.gp-yr .gpr-glabels span.gpr-pos{background:var(--pass-bg)}\n.gp-yr .gpr-glabels span.gpr-neg{background:var(--lose-bg)}\n.gp-yr .gpr-glabels small{display:block;color:var(--dim);font-size:.82rem;margin-top:3px}\n.gp-yr .gpr-zero{color:var(--dim);font-size:.9rem;margin-top:12px}\n\/* the math, in the open *\/\n.gp-yr .gpr-math{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:26px}\n.gp-yr .gpr-math-col{background:var(--panel2);border:1px solid var(--line2);border-radius:12px;padding:18px}\n.gp-yr .gpr-math-col h4{font-size:.95rem;margin:0 0 10px}\n.gp-yr .gpr-math-col p{font-family:var(--gpr-font);font-size:.88rem;color:var(--ink);line-height:1.6}\n.gp-yr .gpr-math-col p+p{margin-top:6px}\n.gp-yr .gpr-math-note{grid-column:1 \/ -1;color:var(--dim);font-size:.92rem;line-height:1.6}\n\/* single floating tooltip (rule 17) *\/\n.gp-yr .gpr-tip{position:fixed;z-index:90;max-width:280px;background:#212121;color:#fff;border-radius:6px;padding:10px 12px;font-size:.85rem;line-height:1.45;box-shadow:0 10px 30px rgba(0,0,0,.25);pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s}\n.gp-yr .gpr-tip.is-on{opacity:1;transform:none}\n.gp-yr .gpr-tip b{display:block;font-family:var(--gpr-font);color:#fff;margin-bottom:2px}\n\n\/* ---- split rows (copy + screenshot) ---- *\/\n.gp-yr .gpr-split{display:grid;grid-template-columns:1fr 1fr;gap:36px;align-items:center}\n.gp-yr .gpr-split+.gpr-split{margin-top:44px}\n.gp-yr .gpr-split h3{font-size:clamp(1.3rem,2vw,1.7rem);font-weight:700}\n.gp-yr .gpr-split p{color:var(--dim);margin-top:10px;line-height:1.6}\n.gp-yr .gpr-chips{display:flex;flex-wrap:wrap;gap:8px}\n.gp-yr .gpr-chip{display:inline-flex;align-items:center;border:1px solid var(--line2);border-radius:6px;padding:9px 14px;font-size:.9rem;color:var(--ink);min-height:44px;background:var(--panel)}\n.gp-yr .gpr-chip.is-hot{border-color:var(--accent);color:var(--accent);font-weight:500}\n.gp-yr .gpr-center-note{text-align:center;color:var(--dim);font-size:1.02rem;margin-top:22px;max-width:760px;margin-left:auto;margin-right:auto}\n.gp-yr .gpr-center-note b{color:var(--ink)}\n\n\/* ---- bands ---- *\/\n.gp-yr .gpr-band{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:44px;box-shadow:0 1px 3px var(--shadow)}\n.gp-yr .gpr-band p{color:var(--dim);font-size:1.03rem;line-height:1.65;max-width:760px;margin-top:12px}\n.gp-yr .gpr-deep{color:var(--accent);font-weight:500;text-decoration:none;min-height:44px;display:inline-flex;align-items:center}\n.gp-yr .gpr-deep:hover{text-decoration:underline;color:var(--accent)}\n.gp-yr .gpr-linksep{display:inline-block;width:18px}\n.gp-yr .gpr-aiband{display:flex;align-items:center;gap:24px;flex-wrap:wrap;background:var(--panel2);border:1px solid var(--line2);border-radius:12px;padding:28px 32px}\n.gp-yr .gpr-aiband-txt{flex:1 1 380px}\n.gp-yr .gpr-aiband h2{font-size:clamp(1.4rem,2.2vw,2rem);font-weight:700}\n.gp-yr .gpr-aiband p{color:var(--dim);margin-top:8px;line-height:1.6}\n\n\/* ---- FAQ (native details\/summary; no JS) ---- *\/\n.gp-yr .gpr-faq{max-width:860px;margin:0 auto}\n.gp-yr .gpr-faq details{background:var(--panel);border:1px solid var(--line2);border-radius:8px;margin-top:10px;overflow:hidden}\n.gp-yr .gpr-faq summary{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;padding:14px 18px;cursor:pointer;font-family:var(--gpr-font);font-weight:500;color:var(--ink);list-style:none}\n.gp-yr .gpr-faq summary::-webkit-details-marker{display:none}\n.gp-yr .gpr-faq summary h3{font-size:1.05rem;font-weight:500;line-height:1.4;margin:0}\n.gp-yr .gpr-faq summary::after{content:\"+\";color:var(--accent);font-size:1.3rem;font-weight:500;line-height:1}\n.gp-yr .gpr-faq details[open] summary::after{content:\"\u2212\"}\n.gp-yr .gpr-faq details p{padding:0 18px 16px;color:var(--dim);font-size:.98rem;line-height:1.6}\n\n\/* ---- testimonials carousel: five public customer quotes (geopard.tech homepage), scroll-snap\n   track + prev\/next + one dot per page; autoplay only in view, never under reduced motion ---- *\/\n.gp-yr .gpr-tcar{position:relative;max-width:1136px;margin:0 auto}\n.gp-yr .gpr-ttrack{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding:4px 2px 8px;-webkit-overflow-scrolling:touch}\n.gp-yr .gpr-ttrack::-webkit-scrollbar{display:none}\n.gp-yr .gpr-ttrack:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:10px}\n.gp-yr .gpr-tcard{flex:0 0 calc((100% - 32px) \/ 3);scroll-snap-align:start;display:flex;flex-direction:column;justify-content:space-between;margin:0;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:22px;box-shadow:0 1px 3px var(--shadow)}\n.gp-yr .gpr-tcard blockquote{margin:0 0 18px;font-family:var(--gpr-font);font-size:1rem;font-weight:500;line-height:1.55;color:var(--ink)}\n.gp-yr .gpr-tperson{display:flex;align-items:center;gap:12px}\n.gp-yr .gpr-tperson img,.gp-yr .gpr-tinitials{width:48px;height:48px;border-radius:50%;object-fit:cover;flex:0 0 48px}\n.gp-yr .gpr-tinitials{display:inline-flex;align-items:center;justify-content:center;background:var(--panel2);color:var(--accent);font-family:var(--gpr-font);font-weight:500}\n.gp-yr .gpr-tperson b{display:block;font-family:var(--gpr-font);font-weight:700;color:var(--ink);font-size:.95rem}\n.gp-yr .gpr-tperson small{display:block;color:var(--dim);font-size:.85rem}\n.gp-yr .gpr-tnav{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:12px}\n.gp-yr .gpr-tbtn{width:44px;height:44px;border-radius:50%;border:1px solid var(--line2);background:var(--panel);color:var(--accent);font-size:1.15rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0}\n.gp-yr .gpr-tbtn:hover{border-color:var(--accent)}\n.gp-yr .gpr-tdots{display:flex}\n.gp-yr .gpr-tdot{width:44px;height:44px;border:0;background:transparent;padding:0;cursor:pointer;position:relative}\n.gp-yr .gpr-tdot::after{content:\"\";position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:var(--line2);transition:background .2s,transform .2s}\n.gp-yr .gpr-tdot.is-on::after{background:var(--accent);transform:scale(1.2)}\n@media (max-width:1100px){ .gp-yr .gpr-tcard{flex-basis:calc((100% - 16px) \/ 2)} }\n@media (max-width:700px){ .gp-yr .gpr-tcard{flex-basis:100%} }\n\n\/* ---- CTA ---- *\/\n.gp-yr .gpr-cta{text-align:center;padding-bottom:96px}\n.gp-yr .gpr-cta h2{font-size:clamp(1.9rem,3.2vw,2.9rem);font-weight:700;max-width:760px;margin:0 auto}\n.gp-yr .gpr-cta .gpr-lede{max-width:640px;margin:14px auto 0}\n\n\/* ---- tap-to-zoom lightbox ---- *\/\n.gp-yr .gpr-lightbox{position:fixed;top:0;left:0;right:0;bottom:0;z-index:80;display:none;align-items:center;justify-content:center;background:rgba(8,14,24,.93);padding:20px;cursor:zoom-out}\n.gp-yr .gpr-lightbox.is-open{display:flex}\n.gp-yr .gpr-lightbox img{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px;box-shadow:0 20px 80px rgba(0,0,0,.6)}\n.gp-yr .gpr-lightbox-close{position:absolute;top:16px;right:16px;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.4);background:rgba(255,255,255,.08);color:#fff;font-size:1.3rem;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer}\n\n\/* ---- craft ---- *\/\n.gp-yr ::selection{background:var(--accent-soft);color:#ffffff}\n.gp-yr a:focus-visible,.gp-yr button:focus-visible,.gp-yr [tabindex]:focus-visible,.gp-yr summary:focus-visible,.gp-yr input:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}\n@media (hover:hover) and (prefers-reduced-motion: no-preference){\n  .gp-yr .gpr-card,.gp-yr .gpr-shot{transition:transform .25s cubic-bezier(.2,.7,.2,1),box-shadow .25s}\n  .gp-yr .gpr-card:hover{transform:translateY(-3px);box-shadow:0 12px 30px var(--shadow)}\n  .gp-yr .gpr-shot:hover{transform:translateY(-3px) scale(1.005);box-shadow:0 16px 40px var(--shadow)}\n}\n@media (prefers-reduced-motion: no-preference){\n  .gp-yr.gpr-live [data-reveal]{opacity:0;transform:translateY(20px)}\n  .gp-yr.gpr-live [data-reveal].is-in{opacity:1;transform:none;transition:opacity .6s,transform .6s}\n  .gp-yr .gpr-hero h1{animation:gpr-rise .7s .05s cubic-bezier(.2,.7,.2,1) both}\n  .gp-yr .gpr-hero .gpr-lede{animation:gpr-rise .7s .26s cubic-bezier(.2,.7,.2,1) both}\n  .gp-yr .gpr-hero .gpr-hero-ctas{animation:gpr-rise .7s .36s cubic-bezier(.2,.7,.2,1) both}\n  .gp-yr .gpr-hero .gpr-arcade-wrap{animation:gpr-rise .85s .48s cubic-bezier(.2,.7,.2,1) both}\n}\n@keyframes gpr-rise{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}\n\n\/* ---- widescreen (rule 13) ---- *\/\n@media (min-width:1440px){\n  .gp-yr section{max-width:1320px}\n  .gp-yr .gpr-arcade-wrap{max-width:1180px}\n  .gp-yr .gpr-shot-wide{max-width:1240px}\n}\n\/* ---- tablet \/ mobile (rule 9) ---- *\/\n@media (max-width:980px){\n  .gp-yr .gpr-cards,.gp-yr .gpr-cards4{grid-template-columns:repeat(2,1fr)}\n  .gp-yr .gpr-split{grid-template-columns:1fr;gap:24px}\n  .gp-yr .gpr-shots3{grid-template-columns:1fr 1fr}\n}\n@media (max-width:820px){\n  .gp-yr section{padding:48px 18px}\n  \/* mobile hero: title, tagline, WALKTHROUGH, then CTAs; the lede is retold below *\/\n  .gp-yr .gpr-hero{display:flex;flex-direction:column;align-items:center}\n  .gp-yr .gpr-hero h1{order:1}\n  .gp-yr .gpr-hero .gpr-arcade-wrap{order:3;margin-top:22px;width:100%}\n  .gp-yr .gpr-hero .gpr-hero-ctas{order:4;margin-top:22px}\n  .gp-yr .gpr-hero .gpr-lede{display:none}\n  .gp-yr .gpr-sliders,.gp-yr .gpr-math{grid-template-columns:1fr}\n  .gp-yr .gpr-calc{padding:20px 16px}\n  .gp-yr .gpr-band{padding:26px 20px}\n  .gp-yr .gpr-aiband{padding:22px 18px}\n  .gp-yr .gpr-chart{height:190px;gap:10px}\n  .gp-yr .gpr-glabels{gap:10px}\n  .gp-yr .gpr-table{font-size:.9rem}\n  .gp-yr .gpr-table th,.gp-yr .gpr-table td{padding:8px 8px}\n}\n@media (max-width:600px){\n  .gp-yr .gpr-cards,.gp-yr .gpr-cards4,.gp-yr .gpr-cards2,.gp-yr .gpr-shots2,.gp-yr .gpr-shots3{grid-template-columns:1fr}\n  \/* the 5-column rate-step table scrolls inside its own wrapper instead of wrapping every cell (rule 9: deliberate scroll container) *\/\n  .gp-yr .gpr-steps .gpr-table{min-width:640px}\n  .gp-yr .gpr-steps .gpr-table td b{white-space:nowrap}\n  .gp-yr .gpr-arcade-head{padding:10px 14px}\n  .gp-yr .gpr-arcade-open{font-size:.9rem;padding:0 18px;bottom:14px}\n}\n@media (max-width:480px){\n  .gp-yr .gpr-hero{padding-top:0}\n  .gp-yr .gpr-bar{flex-basis:18px}\n  .gp-yr .gpr-glabels span{font-size:.82rem}\n}\n\/* ===== GPR:CSS END ===== *\/\n<\/style>\n\n<main class=\"gpr-main\">\n\n<section class=\"gpr-hero\" id=\"gpr-s1\">\n  <h1><span class=\"gpr-accent\">Automated Yield Report.<\/span> Did the variable rate pay?<\/h1>\n  <p class=\"gpr-lede\">See how every zone and rate step performed after harvest, then plan next season from the result.<\/p>\n  <div class=\"gpr-hero-ctas\">\n    <a class=\"gpr-btn\" href=\"https:\/\/app.geopard.tech\/auth\/sign-up?utm_source=geopard.tech&amp;utm_medium=landing&amp;utm_campaign=yield-report\">Try Yield Report free<\/a>\n    <a class=\"gpr-btn-ghost\" href=\"https:\/\/docs.geopard.tech\/geopard-tutorials\/agronomy\/yield-report\">Read documentation<\/a>\n  <\/div>\n  <div class=\"gpr-arcade-wrap\" id=\"gpr-arcade-wrap\">\n    <div class=\"gpr-arcade-head\"><b>Interactive walkthrough<\/b><span>Click through the report on a real field.<\/span><\/div>\n    <div class=\"gpr-arcade\" id=\"gpr-arcade\" data-arcade=\"https:\/\/demo.arcade.software\/SwzWASz2x8iJs9Lci6Sw?embed&amp;embed_mobile=inline&amp;embed_desktop=inline&amp;show_copy_link=false\">\n      <a class=\"gpr-arcade-fallback\" href=\"https:\/\/app.arcade.software\/share\/SwzWASz2x8iJs9Lci6Sw\">\n        <img fetchpriority=\"high\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-walkthrough-poster.png?w=1200&amp;quality=90&amp;ssl=1\" alt=\"Yield Report interactive walkthrough\" width=\"1200\" height=\"630\" decoding=\"async\" fetchpriority=\"high\">\n        <span class=\"gpr-arcade-open\">Open the interactive walkthrough<\/span>\n      <\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n<nav class=\"gpr-secnav\" id=\"gpr-secnav\" aria-label=\"Page sections\">\n  <div class=\"gpr-secnav-row\">\n    <a href=\"#gpr-s2\">What you get<\/a><a href=\"#gpr-s3\">The report<\/a><a href=\"#gpr-s4\">Economics<\/a><a href=\"#gpr-s5\">Insights<\/a><a href=\"#gpr-s6\">Workflows<\/a><a href=\"#gpr-s7\">Act<\/a><a href=\"#gpr-faq\">FAQ<\/a>\n  <\/div>\n<\/nav>\n\n<section id=\"gpr-s2\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">What you get<\/div>\n    <h2 class=\"gpr-h2\">What is in the report.<\/h2>\n    <p class=\"gpr-lede\">Field performance, zone and rate response, as well as where to act next. Open a field, then select the Yield Report tab.<\/p>\n  <\/div>\n  <div class=\"gpr-cards\">\n    <div class=\"gpr-card\" data-reveal><h3>Field KPIs<\/h3><span>Average and total yield, harvested area against field area, as well as variability (CV).<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Yield map with zones<\/h3><span>Split view or overlay. When you hover a zone, it highlights on the map, the chart, and the table.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Rate versus yield<\/h3><span>Either prescribed or applied rates against yield per zone, in five chart modes.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Economics per rate step<\/h3><span>Whether the extra product paid for itself, together with the break-even response and crop price.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Distributions and trend<\/h3><span>A yield box plot per zone, as well as a multi-year trend across crops.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Summary, suggestions, PDF<\/h3><span>A written summary, suggestions that open the next workflow, as well as a shareable PDF.<\/span><\/div>\n  <\/div>\n  <div class=\"gpr-check\" data-reveal>\n    <h3>Before you start<\/h3>\n    <p><b>One imported yield dataset.<\/b> Cleaned and calibrated versions are marked in the picker, so they are preferred by default.<\/p>\n    <p><b>A zones map or an as-applied map<\/b> from that season: prescribed rates, or the rates the machine actually put down.<\/p>\n    <p><b>For economics, a crop price and a product price.<\/b> Product prices prefill from the prescription.<\/p>\n  <\/div>\n<\/section>\n\n<section id=\"gpr-s3\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Read the report<\/div>\n    <h2 class=\"gpr-h2\">How the report is laid out.<\/h2>\n    <p class=\"gpr-lede\">GeoPard preselects the latest cleaned yield dataset as well as that season&#8217;s zones map, so the report opens ready to read.<\/p>\n  <\/div>\n    <figure class=\"gpr-shot gpr-shot-wide\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?w=2514&amp;quality=90&amp;ssl=1\" srcset=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?w=1240&amp;quality=90&amp;ssl=1 1240w, https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?w=2514&amp;quality=90&amp;ssl=1 2514w\" sizes=\"auto, (max-width: 1240px) 100vw, 1240px\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?w=2514&amp;ssl=1\" alt=\"GeoPard Yield Report: yield map and zones side by side, rates versus yield chart, and zone summary table\" width=\"2514\" height=\"1116\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>Yield map and zones side by side, together with the rate chart and the zone table.<\/figcaption>\n    <\/figure>\n  <div class=\"gpr-cards gpr-cards4 gpr-shots-gap\">\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">KPI tiles<\/span><h3>Read the field first<\/h3><span>A gap between harvested and field area points to missing passes or aggressive cleaning, while a high CV means variability worth managing.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Field map<\/span><h3>Split or overlay<\/h3><span>Split shows yield and zones at the same extent, whereas Overlay blends them with an opacity slider.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Rate chart<\/span><h3>Five ways to compare<\/h3><span>Actual, % of avg, Low-high, Rate vs Yield against either the previous rate or a base zone, and Economics.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Zone table<\/span><h3>One row per zone<\/h3><span>Area and share, rates, average, total, and delta versus the field average. Shares below 100% mean missing yield data.<\/span><\/div>\n  <\/div>\n  <div class=\"gpr-shots2 gpr-shots-gap\">\n    <figure class=\"gpr-shot\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-overlay.png?w=1120&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-overlay.png?w=1120&amp;ssl=1\" alt=\"Yield map with management zones overlaid at adjustable opacity\" width=\"1120\" height=\"922\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>Overlay at 48% zone opacity.<\/figcaption>\n    <\/figure>\n    <figure class=\"gpr-shot\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-rate-vs-yield.png?w=1248&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-rate-vs-yield.png?w=1248&amp;ssl=1\" alt=\"Applied rates versus yield by zone as percent of field average\" width=\"1248\" height=\"428\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>Rate and yield per zone as percent of the field average.<\/figcaption>\n    <\/figure>\n  <\/div>\n<\/section>\n\n<section id=\"gpr-s4\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Economics<\/div>\n    <h2 class=\"gpr-h2\">Did the extra product pay for itself?<\/h2>\n    <p class=\"gpr-lede\">Enter a crop price and a product price, then the report prices every zone and every rate step. The calculator below runs the same formulas on a sample field.<\/p>\n  <\/div>\n  <div class=\"gpr-calc\" id=\"gpr-calc\" data-reveal>\n<div class=\"gpr-units\" id=\"gpr-units\">\n      <span id=\"gpr-units-label\">Shown in metric units: t\/ha, kg\/ha, EUR.<\/span>\n      <button class=\"gpr-units-btn\" id=\"gpr-units-btn\" type=\"button\">Switch to US units<\/button>\n    <\/div>\n    <p class=\"gpr-sample\">Sample: <b>wheat<\/b>, three zones at <b id=\"gpr-rates\">70 \/ 100 \/ 130 kg\/ha<\/b> of one nitrogen product on <b id=\"gpr-area\">253 ha<\/b>, yields <b id=\"gpr-yields\">6.09 \/ 6.45 \/ 6.62 t\/ha<\/b>.<\/p>\n    <div class=\"gpr-sliders\">\n      <div class=\"gpr-slider\">\n        <label for=\"gpr-crop\"><span>Crop price<\/span><output id=\"gpr-crop-out\" for=\"gpr-crop\">200 \u20ac\/t<\/output><\/label>\n        <input type=\"range\" id=\"gpr-crop\" min=\"100\" max=\"400\" step=\"5\" value=\"200\" aria-label=\"Crop price\">\n      <\/div>\n      <div class=\"gpr-slider\">\n        <label for=\"gpr-prod\"><span>Product price<\/span><output id=\"gpr-prod-out\" for=\"gpr-prod\">0.90 \u20ac\/kg<\/output><\/label>\n        <input type=\"range\" id=\"gpr-prod\" min=\"0.3\" max=\"1.8\" step=\"0.05\" value=\"0.9\" aria-label=\"Product price\">\n      <\/div>\n    <\/div>\n    <div class=\"gpr-steps\">\n      <h3>Rate steps<\/h3>\n      <p class=\"gpr-sub\" id=\"gpr-steps-sub\">Zones are sorted by rate, so each row compares one step with the next. Other season costs are not included.<\/p>\n      <div class=\"gpr-table-wrap\">\n        <table class=\"gpr-table\" id=\"gpr-steps-table\">\n          <thead><tr><th>Rate step<\/th><th>Extra product<\/th><th>Yield response<\/th><th>Net result<\/th><th>Verdict<\/th><\/tr><\/thead>\n          <tbody id=\"gpr-steps-body\"><\/tbody>\n        <\/table>\n      <\/div>\n    <\/div>\n    <div class=\"gpr-zones\">\n      <h3>Zone economics versus the field average<\/h3>\n      <p class=\"gpr-sub\">Per <span id=\"gpr-per-area\">hectare<\/span>; hover or tap a bar for the numbers.<\/p>\n      <div class=\"gpr-legend\"><span><i style=\"background:#f76a0c\"><\/i>Product cost effect<\/span><span><i style=\"background:#145328\"><\/i>Yield value<\/span><span><i style=\"background:#a0d468\"><\/i>Net<\/span><\/div>\n      <div class=\"gpr-chart\" id=\"gpr-chart\" role=\"img\" aria-label=\"Zone economics versus the field average, three zones\"><\/div>\n      <div class=\"gpr-glabels\" id=\"gpr-glabels\"><\/div>\n      <p class=\"gpr-zero\" id=\"gpr-zero\">The zone figures add up to zero across the field, because each zone is measured against the average.<\/p>\n    <\/div>\n    <div class=\"gpr-math\">\n      <div class=\"gpr-math-col\" data-reveal>\n        <h4>Zone figures, each zone against the field average<\/h4>\n        <p>Product cost effect = (field average rate \u2212 zone rate) \u00d7 product price<\/p>\n        <p>Yield value = (zone average yield \u2212 field average yield) \u00d7 crop price<\/p>\n        <p>Net = product cost effect + yield value<\/p>\n      <\/div>\n      <div class=\"gpr-math-col\" data-reveal>\n        <h4>Rate step figures, each zone against the next lowest rate<\/h4>\n        <p>Step cost = extra product \u00d7 product price<\/p>\n        <p>Break-even yield response = step cost \u00f7 crop price<\/p>\n        <p>Net result = (actual yield response \u00d7 crop price) \u2212 step cost<\/p>\n        <p>Break-even crop price = step cost \u00f7 actual yield response<\/p>\n      <\/div>\n      <p class=\"gpr-math-note\"><b>Verdict<\/b> follows the return on the extra product: <b>+20% or more<\/b> is paid off, <b>\u221210% or worse<\/b> is did not pay, anything between is break-even. Averages are weighted by area.<\/p>\n    <\/div>\n  <\/div>\n    <figure class=\"gpr-shot gpr-shot-wide gpr-shots-gap\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-rate-steps.png?w=1236&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-rate-steps.png?w=1236&amp;ssl=1\" alt=\"Did the extra product pay for itself: rate steps with break-even response, actual response, net result, and verdict\" width=\"1236\" height=\"360\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>The rate-step table in the report, with the verdict as well as the break-even crop price.<\/figcaption>\n    <\/figure>\n<\/section>\n\n<section id=\"gpr-s5\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Insights<\/div>\n    <h2 class=\"gpr-h2\">Summary, distributions, and trend.<\/h2>\n  <\/div>\n  <div class=\"gpr-split\">\n    <div data-reveal>\n      <h3>Summary and suggestions<\/h3>\n      <p>The summary explains the comparison, then flags where to look. Suggestions open the next workflow:<\/p>\n      <div class=\"gpr-chips\"><span class=\"gpr-chip\">Create zones<\/span><span class=\"gpr-chip\">Sampling plan<\/span><span class=\"gpr-chip\">New VRA map<\/span><span class=\"gpr-chip\">Clean &amp; Calibrate<\/span><\/div>\n    <\/div>\n    <div>\n    <figure class=\"gpr-shot\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-summary.png?w=1250&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-summary.png?w=1250&amp;ssl=1\" alt=\"Written summary of zone performance with a conclusion on rate response\" width=\"1250\" height=\"738\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>One line per zone, then a conclusion on the rate response.<\/figcaption>\n    <\/figure>\n    <figure class=\"gpr-shot gpr-shots-gap\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-suggestions.png?w=1246&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-suggestions.png?w=1246&amp;ssl=1\" alt=\"Suggestions linking to Create zones and New VRA map\" width=\"1246\" height=\"318\" loading=\"lazy\" decoding=\"async\">\n    <\/figure>\n    <\/div>\n  <\/div>\n  <div class=\"gpr-split\">\n    <figure class=\"gpr-shot\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-distribution.png?w=1260&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-distribution.png?w=1260&amp;ssl=1\" alt=\"Yield distribution by zone box plot against the field average\" width=\"1260\" height=\"562\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>Minimum, quartiles, median, and maximum per zone.<\/figcaption>\n    <\/figure>\n    <div data-reveal>\n      <h3>Yield distribution by zone<\/h3>\n      <p>A tight box is a consistent zone, whereas a tall box is mixed conditions. Wide, overlapping boxes mean the zones no longer fit the field, so rebuild them from this harvest.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"gpr-split\">\n    <div data-reveal>\n      <h3>Multi-year trend<\/h3>\n      <p>One bar per season and crop, cleaned datasets first. Different units across seasons are flagged, so bars for different crops are not read as one trend.<\/p>\n    <\/div>\n    <figure class=\"gpr-shot\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-trend.png?w=1252&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-trend.png?w=1252&amp;ssl=1\" alt=\"Multi-year yield trend, one bar per season and crop\" width=\"1252\" height=\"576\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>Three seasons, three crops.<\/figcaption>\n    <\/figure>\n  <\/div>\n<\/section>\n\n<section id=\"gpr-s6\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Typical workflows<\/div>\n    <h2 class=\"gpr-h2\">Four questions the report answers.<\/h2>\n  <\/div>\n  <div class=\"gpr-cards gpr-cards2\">\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Workflow 1<\/span><h3>Did my VRA prescription work?<\/h3><span>Compare the harvest with the applied zones map in Rate vs Yield: yield rising then flattening shows where extra input stopped paying. Add prices to see whether each step paid, then confirm rate changes with trial strips before scaling them.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Workflow 2<\/span><h3>Did the machine apply what I prescribed?<\/h3><span>Run the report against the zones map, then against the as-applied map. A gap between the rate columns is an execution issue rather than an agronomic one.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Workflow 3<\/span><h3>Which fields deserve the soil sampling budget?<\/h3><span>Fields with high CV as well as zones consistently below average return the most from targeted sampling, so open a sampling plan from the suggestion.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><span class=\"gpr-num\">Workflow 4<\/span><h3>Are my zones still right?<\/h3><span>When zone distributions overlap widely, the zones no longer represent the field. Rebuild them with Create Zones from This Yield, then start the next prescription from there.<\/span><\/div>\n  <\/div>\n<\/section>\n\n<section id=\"gpr-s7\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Act on the results<\/div>\n    <h2 class=\"gpr-h2\">Report actions.<\/h2>\n  <\/div>\n  <div class=\"gpr-cards\">\n    <div class=\"gpr-card\" data-reveal><h3>Export PDF Report<\/h3><span>The full report with KPIs, maps, charts, economics, and suggestions, for grower meetings as well as landlord reporting.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Create Zones from This Yield<\/h3><span>Harvest performance becomes next season&#8217;s zones, then a new variable-rate map.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Open in Compare Layers<\/h3><span>Yield next to NDVI, soil, and topography, so you know why a zone underperformed before changing a rate.<\/span><\/div>\n  <\/div>\n    <figure class=\"gpr-shot gpr-shot-wide gpr-shots-gap\" data-reveal>\n      <img loading=\"lazy\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-actions.png?w=1186&amp;quality=90&amp;ssl=1\" data-full=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-actions.png?w=1186&amp;ssl=1\" alt=\"Report actions: Export PDF Report, Create Zones from This Yield, Open in Compare Layers\" width=\"1186\" height=\"120\" loading=\"lazy\" decoding=\"async\">\n      <figcaption>Actions at the bottom of the report.<\/figcaption>\n    <\/figure>\n  <p class=\"gpr-center-note\"><b>Getting data in:<\/b> yield and as-applied layers either sync from John Deere Operations Center or import as files. Clean and calibrate them before you run the report.<\/p>\n<\/section>\n\n<section id=\"gpr-s8\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">ROI<\/div>\n    <h2 class=\"gpr-h2\">Where ROI comes from.<\/h2>\n  <\/div>\n  <div class=\"gpr-cards\">\n    <div class=\"gpr-card\" data-reveal><h3>Input savings<\/h3><span>Find the rate steps that did not pay, then cut them where the result repeats.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Yield gains<\/h3><span>Target the zones that consistently underperform, because they carry the greatest upside.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Prioritization<\/h3><span>Use CV and zone deltas, so budget goes to the fields that respond.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Risk reduction<\/h3><span>Compare prescribed and applied rates before an execution error repeats next season.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Validation<\/h3><span>See whether the prescription worked, then plan the next one from the result.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Evidence<\/h3><span>A shareable PDF with prices and per-step results backs up rate decisions with owners as well as advisors.<\/span><\/div>\n  <\/div>\n<\/section>\n\n<section id=\"gpr-s9\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Who it is for<\/div>\n    <h2 class=\"gpr-h2\">Growers, advisors, producers, and research teams.<\/h2>\n  <\/div>\n  <div class=\"gpr-cards gpr-cards4\">\n    <div class=\"gpr-card\" data-reveal><h3>Growers and farm managers<\/h3><span>Validate variable-rate results, then set next season&#8217;s rates on evidence.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Agronomists and advisors<\/h3><span>Prepare post-harvest reviews, then share the PDF with growers.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Seed and fertilizer producers<\/h3><span>Evaluate how hybrids, varieties, and product rates performed across trial fields, with a PDF per field.<\/span><\/div>\n    <div class=\"gpr-card\" data-reveal><h3>Service providers and research teams<\/h3><span>Compare response across fields and seasons, then document trials zone by zone.<\/span><\/div>\n  <\/div>\n  <div class=\"gpr-band gpr-shots-gap\" data-reveal>\n    <div class=\"gpr-kicker\">For dealers and ag retailers<\/div>\n    <h2 class=\"gpr-h2\" style=\"font-size:clamp(1.3rem,2vw,1.8rem)\">Offer it under your own brand.<\/h2>\n    <p>The Yield Report ships in GeoPard white-label deployments, so your growers review harvests inside your brand.<\/p>\n    <p style=\"margin-top:14px\"><a class=\"gpr-deep\" href=\"https:\/\/geopard.tech\/white-labels\/\">White label solutions<\/a>\n    <span class=\"gpr-linksep\"> <\/span>\n    <a class=\"gpr-deep\" href=\"https:\/\/geopard.tech\/partner\/\">Partner program<\/a><\/p>\n  <\/div>\n<\/section>\n\n<section id=\"gpr-ai\">\n  <div class=\"gpr-aiband\" data-reveal>\n    <div class=\"gpr-aiband-txt\">\n      <h2>Ask the AI Assistant about this field.<\/h2>\n      <p>It works on the same yield, zones, and as-applied data: ask why a zone underperformed, or have it build next season&#8217;s zones. You approve every step.<\/p>\n    <\/div>\n    <a class=\"gpr-btn\" href=\"https:\/\/geopard.tech\/ai\/\">Meet the AI Assistant<\/a>\n  <\/div>\n<\/section>\n\n<section class=\"gpr-faqsec\" id=\"gpr-faq\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">FAQ<\/div>\n    <h2 class=\"gpr-h2\">Common questions.<\/h2>\n  <\/div>\n  <div class=\"gpr-faq\">\n    <details>\n      <summary><h3>Zones map or as-applied map: which should I compare against?<\/h3><\/summary>\n      <p>A zones map validates the prescription, whereas an as-applied map validates machine execution. Run both for the same operation, then compare the rate columns.<\/p>\n    <\/details>\n    <details>\n      <summary><h3>What if my zones map has no prescription rates?<\/h3><\/summary>\n      <p>The rate chart uses the zone index average instead, labeled Zone avg. You still get zone performance, distributions, summary, and suggestions; only the economics section needs rates.<\/p>\n    <\/details>\n    <details>\n      <summary><h3>Why do the area shares total less than 100%?<\/h3><\/summary>\n      <p>Only cells with both a yield value and a rate value count, so missing passes or aggressively cleaned edges drop out. The harvested-area KPI shows the same gap.<\/p>\n    <\/details>\n    <details>\n      <summary><h3>How do yield and as-applied data get into GeoPard?<\/h3><\/summary>\n      <p>Either connect John Deere Operations Center or import harvest and application files directly. Clean and calibrate the yield data, then open the Yield Report tab.\n      <a class=\"gpr-deep\" href=\"https:\/\/docs.geopard.tech\/geopard-tutorials\/agronomy\/yield-report\" target=\"_blank\" rel=\"noopener\">Read the Yield Report tutorial<\/a><\/p>\n    <\/details>\n  <\/div>\n<\/section>\n\n<section class=\"gpr-quotesec\" id=\"gpr-quote\">\n  <div class=\"gpr-sechead\">\n    <div class=\"gpr-kicker\">Customers<\/div>\n    <h2 class=\"gpr-h2\">What GeoPard users say.<\/h2>\n  <\/div>\n  <div class=\"gpr-tcar\" id=\"gpr-tcar\" data-reveal>\n    <div class=\"gpr-ttrack\" id=\"gpr-ttrack\" tabindex=\"0\" aria-label=\"Customer testimonials, use the arrow keys to move\">\n    <figure class=\"gpr-tcard\">\n      <blockquote>&#8220;GeoPard doesn&#8217;t just help us visualise data, it gives us the tools to analyse it, create solutions, and write prescriptions.&#8221;<\/blockquote>\n      <figcaption class=\"gpr-tperson\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2021\/10\/Steve-Larocque-e1633670985874.jpg?w=112&amp;ssl=1\" alt=\"Steve Larocque\" width=\"56\" height=\"56\"><span><b>Steve Larocque<\/b><small>Beyond Agronomy owner and FarmVU CEO<\/small><\/span><\/figcaption>\n    <\/figure>\n    <figure class=\"gpr-tcard\">\n      <blockquote>&#8220;A system where I store my own data and receive current satellite imagery from my fields, securely in the cloud and accessible any time. My data is only shared when I give permission.&#8221;<\/blockquote>\n      <figcaption class=\"gpr-tperson\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2021\/10\/Databoerin-Nicole-Bartelds-e1633670897845.jpg?w=112&amp;ssl=1\" alt=\"Nicole Bartelds\" width=\"56\" height=\"56\"><span><b>Nicole Bartelds<\/b><small>Databoerin<\/small><\/span><\/figcaption>\n    <\/figure>\n    <figure class=\"gpr-tcard\">\n      <blockquote>&#8220;Using GeoPard has streamlined key parts of our workflow. In seasons where time is money, we can rely on the GeoPard team to get it done.&#8221;<\/blockquote>\n      <figcaption class=\"gpr-tperson\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2021\/10\/Brendon-Friesen.jpeg?w=112&amp;ssl=1\" alt=\"Brendon Friesen\" width=\"56\" height=\"56\"><span><b>Brendon Friesen<\/b><small>PointForward, operations and technology manager<\/small><\/span><\/figcaption>\n    <\/figure>\n    <figure class=\"gpr-tcard\">\n      <blockquote>&#8220;We&#8217;re happy to have GeoPard among the platforms working with SoilOptix data, giving growers and agronomists the tools to accurately analyse and manage their fields.&#8221;<\/blockquote>\n      <figcaption class=\"gpr-tperson\"><img loading=\"lazy\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2021\/10\/Zachary-Harmer-SoilOptix%C2%AE.jpg?w=112&amp;ssl=1\" alt=\"Zachary Harmer\" width=\"56\" height=\"56\"><span><b>Zachary Harmer<\/b><small>SoilOptix<\/small><\/span><\/figcaption>\n    <\/figure>\n    <figure class=\"gpr-tcard\">\n      <blockquote>&#8220;GeoPard&#8217;s analytics make it easy for our team and farmers to use precision-ag tools effectively. Reliable analytics and steady support through the season improved our input planning.&#8221;<\/blockquote>\n      <figcaption class=\"gpr-tperson\"><span class=\"gpr-tinitials\" aria-hidden=\"true\">SB<\/span><span><b>Sergio Bassan<\/b><small>Precision agriculture agronomist, Italy<\/small><\/span><\/figcaption>\n    <\/figure>\n    <\/div>\n    <div class=\"gpr-tnav\">\n      <button class=\"gpr-tbtn\" id=\"gpr-tprev\" type=\"button\" aria-label=\"Previous testimonials\">&#8592;<\/button>\n      <div class=\"gpr-tdots\" id=\"gpr-tdots\" role=\"tablist\" aria-label=\"Testimonial pages\"><\/div>\n      <button class=\"gpr-tbtn\" id=\"gpr-tnext\" type=\"button\" aria-label=\"Next testimonials\">&#8594;<\/button>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section class=\"gpr-cta\" id=\"gpr-s10\">\n  <h2>Open the Yield Report on your fields.<\/h2>\n  <p class=\"gpr-lede\">Select the Yield Report tab on any field, as soon as a yield dataset is imported.<\/p>\n  <div class=\"gpr-hero-ctas\">\n    <a class=\"gpr-btn\" href=\"https:\/\/app.geopard.tech\/auth\/sign-up?utm_source=geopard.tech&amp;utm_medium=landing&amp;utm_campaign=yield-report\">Try Yield Report free<\/a>\n    <a class=\"gpr-btn-ghost\" href=\"https:\/\/docs.geopard.tech\/geopard-tutorials\/agronomy\/yield-report\">Read documentation<\/a>\n  <\/div>\n<\/section>\n\n<\/main>\n\n<div class=\"gpr-ctabar\" id=\"gpr-ctabar\">\n  <a class=\"gpr-btn\" href=\"https:\/\/app.geopard.tech\/auth\/sign-up?utm_source=geopard.tech&amp;utm_medium=landing&amp;utm_campaign=yield-report\">Try free<\/a>\n  <a class=\"gpr-btn-ghost\" href=\"https:\/\/docs.geopard.tech\/geopard-tutorials\/agronomy\/yield-report\">Read docs<\/a>\n<\/div>\n\n<div class=\"gpr-lightbox\" id=\"gpr-lightbox\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Enlarged screenshot\">\n  <img decoding=\"async\" id=\"gpr-lightbox-img\" src=\"\" alt=\"\">\n  <button class=\"gpr-lightbox-close\" type=\"button\" aria-label=\"Close\">&#10005;<\/button>\n<\/div>\n<div class=\"gpr-tip\" id=\"gpr-tip\" role=\"tooltip\" aria-hidden=\"true\"><\/div>\n<\/div>\n\n<script type=\"application\/ld+json\" nowprocket data-no-optimize=\"1\" data-no-defer=\"1\" data-no-minify=\"1\">\n{\"@context\":\"https:\/\/schema.org\",\"@graph\":[\n {\"@type\":\"WebPage\",\"name\":\"GeoPard Automated Yield Report: did the variable rate pay?\",\n  \"description\":\"Turn harvest yield data into zone-level decisions: validate variable-rate performance, see whether each rate step paid for itself, and plan next season from the result.\",\n  \"url\":\"https:\/\/geopard.tech\/yield-report\/\"},\n {\"@type\":\"FAQPage\",\"mainEntity\":[\n  {\"@type\":\"Question\",\"name\":\"Zones map or as-applied map: which should I compare against?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"A zones map validates the prescription, whereas an as-applied map validates machine execution. Run both for the same operation, then compare the rate columns.\"}},\n  {\"@type\":\"Question\",\"name\":\"What if my zones map has no prescription rates?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The rate chart uses the zone index average instead, labeled Zone avg. You still get zone performance, distributions, summary, and suggestions; only the economics section needs rates.\"}},\n  {\"@type\":\"Question\",\"name\":\"Why do the area shares total less than 100 percent?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Only cells with both a yield value and a rate value count, so missing passes or aggressively cleaned edges drop out. The harvested-area KPI shows the same gap.\"}},\n  {\"@type\":\"Question\",\"name\":\"How do yield and as-applied data get into GeoPard?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Either connect John Deere Operations Center or import harvest and application files directly. Clean and calibrate the yield data, then open the Yield Report tab.\"}}\n ]}\n]}\n<\/script>\n<script nowprocket data-no-optimize=\"1\" data-no-defer=\"1\" data-no-minify=\"1\">\n(function(){\n'use strict';\nvar win = window, doc = document;\nvar root = doc.getElementById('gp-yr');\nif (!root) return;\n\/* the geopard theme prints the WP page title as an extra CSS-hidden h1; remove the node so the\n   DOM carries exactly one h1 (the hero) *\/\nvar themeH1 = doc.querySelector('#simple_page > .container > h1');\n(themeH1 ? themeH1.parentNode : null) ? themeH1.parentNode.removeChild(themeH1) : null;\n\/* \u2550\u2550 Arcade walkthrough: inject the iframe from the slot's data-arcade attribute (the URL's\n   query separators live in HTML as entities, never in JS). Poster stays until the frame loads. *\/\nvar arcadeEl = doc.getElementById('gpr-arcade');\nvar ARCADE_URL = arcadeEl ? (arcadeEl.getAttribute('data-arcade') ? arcadeEl.getAttribute('data-arcade') : '') : '';\nvar arcadeDone = false;\nfunction injectArcade(){\n  if (arcadeDone) return;\n  if (!arcadeEl ? true : !ARCADE_URL) return;\n  arcadeDone = true;\n  var f = doc.createElement('iframe');\n  f.src = ARCADE_URL;\n  f.title = 'Automated Yield Report interactive walkthrough';\n  f.loading = 'lazy';\n  f.setAttribute('allow', 'clipboard-write; fullscreen');\n  f.addEventListener('load', function(){ arcadeEl.classList.add('has-embed'); });\n  arcadeEl.appendChild(f);\n  \/* if load never fires (blocked frame), reveal after a grace period anyway *\/\n  win.setTimeout(function(){ arcadeEl.classList.add('has-embed'); }, 6000);\n}\nfunction wireArcade(){\n  if (!arcadeEl ? true : !ARCADE_URL) return;\n  if (!win.IntersectionObserver) { injectArcade(); return; }\n  var io = new win.IntersectionObserver(function(entries){\n    entries.forEach(function(e){\n      if (!e.isIntersecting) return;\n      injectArcade();\n      io.disconnect();\n    });\n  }, { rootMargin: '400px' });\n  io.observe(arcadeEl);\n}\nwireArcade();\n\/* \u2550\u2550 section-chip nav + mobile CTA bar (plain IntersectionObserver). Bars slide in once the hero\n   scrolls out; the CTA bar hides again at the final CTA section. *\/\nvar secnav = doc.getElementById('gpr-secnav');\nvar ctabar = doc.getElementById('gpr-ctabar');\nvar heroEl = doc.getElementById('gpr-s1');\nvar lastSec = doc.getElementById('gpr-s10');\nfunction headerH(){\n  var h = doc.getElementById('header');\n  return h ? h.getBoundingClientRect().height : 0;\n}\nfunction placeBars(){\n  secnav ? secnav.style.top = headerH() + 'px' : null;\n}\nplaceBars();\nwin.addEventListener('resize', placeBars);\nif (win.IntersectionObserver ? (secnav ? heroEl : null) : null) {\n  var chipRow = secnav.querySelector('.gpr-secnav-row');\n  var chips = [];\n  secnav.querySelectorAll('a').forEach(function(a){ chips.push(a); });\n  var heroIO = new win.IntersectionObserver(function(es){\n    es.forEach(function(e){\n      var past = e.isIntersecting ? false : (e.boundingClientRect.bottom < 0);\n      secnav.classList.toggle('is-on', past);\n      ctabar ? ctabar.classList.toggle('is-on', past) : null;\n    });\n  });\n  heroIO.observe(heroEl);\n  if (lastSec ? ctabar : null) {\n    var endIO = new win.IntersectionObserver(function(es){\n      es.forEach(function(e){ ctabar.classList.toggle('is-off', e.isIntersecting); });\n    });\n    endIO.observe(lastSec);\n  }\n  var byId = {};\n  chips.forEach(function(a){ byId[a.getAttribute('href').slice(1)] = a; });\n  var actIO = new win.IntersectionObserver(function(es){\n    es.forEach(function(e){\n      if (!e.isIntersecting) return;\n      var act = byId[e.target.id];\n      chips.forEach(function(a){ a.classList.toggle('is-active', a === act); });\n      if (act ? chipRow : null) {\n        chipRow.scrollTo ? chipRow.scrollTo({ left: act.offsetLeft - 24, behavior: 'smooth' }) : null;\n      }\n    });\n  }, { rootMargin: '-35% 0px -55% 0px' });\n  Object.keys(byId).forEach(function(id){\n    var el = doc.getElementById(id);\n    el ? actIO.observe(el) : null;\n  });\n  chips.forEach(function(a){\n    a.addEventListener('click', function(ev){\n      var el = doc.getElementById(a.getAttribute('href').slice(1));\n      if (!el) return;\n      ev.preventDefault();\n      var y = el.getBoundingClientRect().top + win.pageYOffset - headerH() - 60;\n      win.scrollTo({ top: y, behavior: 'smooth' });\n    });\n  });\n}\n\/* \u2550\u2550 tap-to-zoom: any screenshot opens full-res in the lightbox *\/\nvar lb = doc.getElementById('gpr-lightbox');\nvar lbImg = doc.getElementById('gpr-lightbox-img');\nfunction lbClose(){\n  lb ? lb.classList.remove('is-open') : null;\n  lbImg ? lbImg.src = '' : null;\n}\nif (lb ? lbImg : null) {\n  function wireZoom(img){\n    img.addEventListener('click', function(){\n      lbImg.src = img.getAttribute('data-full') ? img.getAttribute('data-full') : (img.currentSrc ? img.currentSrc : img.src);\n      lbImg.alt = img.alt;\n      lb.classList.add('is-open');\n    });\n  }\n  doc.querySelectorAll('.gp-yr .gpr-shot img').forEach(wireZoom);\n  lb.addEventListener('click', lbClose);\n  doc.addEventListener('keydown', function(ev){ ev.key === 'Escape' ? lbClose() : null; });\n}\n\/* \u2550\u2550 reveals: mark the root live only when IO exists and motion is allowed (static tier otherwise) *\/\nvar reduced = win.matchMedia ? win.matchMedia('(prefers-reduced-motion: reduce)').matches : false;\nif (win.IntersectionObserver ? !reduced : false) {\n  root.classList.add('gpr-live');\n  var revIO = new win.IntersectionObserver(function(es){\n    es.forEach(function(e){\n      if (!e.isIntersecting) return;\n      e.target.classList.add('is-in');\n      revIO.unobserve(e.target);\n    });\n  }, { rootMargin: '0px 0px -8% 0px' });\n  doc.querySelectorAll('.gp-yr [data-reveal]').forEach(function(el){ revIO.observe(el); });\n}\n\/* \u2550\u2550 tidy the address bar: strip utm params + click ids AFTER the trackers could read them\n   (WP Rocket delays analytics until the first interaction) *\/\n(function(){\n  var qs = win.location.search;\n  var hasCampaign = qs.indexOf('utm_') >= 0 || qs.indexOf('gclid=') >= 0 || qs.indexOf('fbclid=') >= 0 || qs.indexOf('msclkid=') >= 0;\n  if (!hasCampaign) return;\n  if (!win.URLSearchParams) return;\n  if (!win.history ? true : !win.history.replaceState) return;\n  var done = false;\n  function strip(){\n    if (done) return;\n    done = true;\n    var p = new win.URLSearchParams(win.location.search);\n    var kill = [];\n    p.forEach(function(v, k){\n      (k.indexOf('utm_') === 0 || k === 'gclid' || k === 'fbclid' || k === 'msclkid') ? kill.push(k) : null;\n    });\n    kill.forEach(function(k){ p.delete(k); });\n    var rest = p.toString();\n    win.history.replaceState(null, '', win.location.pathname + (rest ? '?' + rest : '') + win.location.hash);\n  }\n  var armed = false;\n  function arm(){\n    if (armed) return;\n    armed = true;\n    win.setTimeout(strip, 4000);\n  }\n  ['pointerdown','keydown','touchstart','scroll'].forEach(function(ev){\n    win.addEventListener(ev, arm, { once: true, passive: true });\n  });\n  win.setTimeout(strip, 15000);\n})();\n\/* \u2550\u2550 economics calculator: the report's documented math on a fixed sample field \u2550\u2550\n   Locale-aware units (rule 12: browser hints only, never an IP lookup). *\/\n\/* one sample field per unit system so prescription rates read as real round rates in both\n   (the US set is the metric field converted: 1 t\/ha = 14.87 bu\/ac wheat, 1 ha = 2.4711 ac,\n   rates rounded to the 30 lb\/ac steps an operator would actually prescribe) *\/\nvar SAMPLES = {\n  metric: [\n    { name: 'Zone 70',  rate: 70,  area: 98.97, yld: 6.09 },\n    { name: 'Zone 100', rate: 100, area: 92.77, yld: 6.45 },\n    { name: 'Zone 130', rate: 130, area: 60.99, yld: 6.62 }\n  ],\n  us: [\n    { name: 'Zone 60',  rate: 60,  area: 244.6, yld: 90.6 },\n    { name: 'Zone 90',  rate: 90,  area: 229.2, yld: 95.9 },\n    { name: 'Zone 120', rate: 120, area: 150.7, yld: 98.4 }\n  ]\n};\nvar UNITS = {\n  metric: { yld: 't\/ha', rate: 'kg\/ha', area: 'ha', areaWord: 'hectare', cur: '\u20ac', cropUnit: '\u20ac\/t', prodUnit: '\u20ac\/kg',\n            cropDef: 200, cropMin: 100, cropMax: 400, cropStep: 5, cropDec: 0,\n            prodDef: 0.9, prodMin: 0.3, prodMax: 1.8, prodStep: 0.05, prodDec: 2,\n            yDec: 2, label: 'Shown in metric units: t\/ha, kg\/ha, EUR.', other: 'Switch to US units' },\n  us:     { yld: 'bu\/ac', rate: 'lb\/ac', area: 'ac', areaWord: 'acre', cur: '$', cropUnit: '$\/bu', prodUnit: '$\/lb',\n            cropDef: 6, cropMin: 3, cropMax: 12, cropStep: 0.25, cropDec: 2,\n            prodDef: 0.45, prodMin: 0.1, prodMax: 1, prodStep: 0.05, prodDec: 2,\n            yDec: 1, label: 'Shown in US units: bu\/ac, lb\/ac, USD.', other: 'Switch to metric units' }\n};\nfunction compute(u, crop, prod){\n  var key = UNITS[u] ? u : 'metric';\n  var U = UNITS[key];\n  var zones = SAMPLES[key].map(function(z){\n    return { name: z.name, rate: z.rate, area: z.area, yld: z.yld };\n  });\n  var totA = 0, sumR = 0, sumY = 0;\n  zones.forEach(function(z){ totA = totA + z.area; sumR = sumR + z.rate * z.area; sumY = sumY + z.yld * z.area; });\n  var avgR = sumR \/ totA, avgY = sumY \/ totA;\n  var sumNet = 0;\n  zones.forEach(function(z){\n    z.costEffect = (avgR - z.rate) * prod;\n    z.yieldValue = (z.yld - avgY) * crop;\n    z.net = z.costEffect + z.yieldValue;\n    z.netTotal = z.net * z.area;\n    z.share = z.area \/ totA;\n    sumNet = sumNet + z.netTotal;\n  });\n  var sorted = zones.slice().sort(function(a, b){ return a.rate - b.rate; });\n  var steps = [];\n  for (var i = 1; i < sorted.length; i++) {\n    var lo = sorted[i - 1], hi = sorted[i];\n    var extra = hi.rate - lo.rate;\n    var cost = extra * prod;\n    var resp = hi.yld - lo.yld;\n    var value = resp * crop;\n    var net = value - cost;\n    var ret = cost > 0 ? net \/ cost : 0;\n    var noResponse = resp <= 0;\n    var verdict = noResponse ? 'lost' : (ret >= 0.2 ? 'paid' : (ret <= -0.1 ? 'lost' : 'even'));\n    steps.push({ from: lo, to: hi, extra: extra, cost: cost, resp: resp,\n      beResp: crop > 0 ? cost \/ crop : 0, value: value, net: net, netTotal: net * hi.area,\n      ret: ret, bePrice: resp > 0 ? cost \/ resp : null, noResponse: noResponse, verdict: verdict });\n  }\n  return { units: key, U: U, zones: zones, steps: steps,\n    avgRate: avgR, avgYield: avgY, area: totA, sumNet: sumNet };\n}\nfunction fmt(n, d){\n  var s = Math.abs(n).toFixed(d);\n  var parts = s.split('.');\n  parts[0] = parts[0].replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ' ');\n  return (n < 0 ? '\u2212' : '') + parts.join('.');\n}\nfunction signed(n, d){ return (n > 0 ? '+' : '') + fmt(n, d); }\nfunction money(U, n, d){ return signed(n, d) + ' ' + U.cur; }\nfunction detectUnits(){\n  var nav = win.navigator ? win.navigator : null;\n  var lang = (nav ? nav.language : '') ? nav.language : '';\n  var tzName = '';\n  try { tzName = win.Intl ? win.Intl.DateTimeFormat().resolvedOptions().timeZone : ''; } catch (e) { tzName = ''; }\n  tzName = tzName ? tzName : '';\n  var US_TZ = ['America\/New_York','America\/Chicago','America\/Denver','America\/Los_Angeles','America\/Phoenix','America\/Anchorage','America\/Honolulu','America\/Detroit','America\/Boise'];\n  var isUS = lang === 'en-US' || US_TZ.indexOf(tzName) >= 0 || tzName.indexOf('America\/Indiana') === 0;\n  return isUS ? 'us' : 'metric';\n}\nvar units = detectUnits();\nvar cropEl = doc.getElementById('gpr-crop'), prodEl = doc.getElementById('gpr-prod');\nvar cropOut = doc.getElementById('gpr-crop-out'), prodOut = doc.getElementById('gpr-prod-out');\nvar stepsBody = doc.getElementById('gpr-steps-body');\nvar chartEl = doc.getElementById('gpr-chart'), glabelsEl = doc.getElementById('gpr-glabels');\nvar unitsLabel = doc.getElementById('gpr-units-label'), unitsBtn = doc.getElementById('gpr-units-btn');\nvar ratesEl = doc.getElementById('gpr-rates'), areaEl = doc.getElementById('gpr-area'), yieldsEl = doc.getElementById('gpr-yields');\nvar perAreaEl = doc.getElementById('gpr-per-area');\nvar VERDICT_TEXT = { paid: 'paid off', even: 'break-even', lost: 'did not pay' };\nfunction readPrice(el, def){\n  var v = el ? parseFloat(el.value) : NaN;\n  return isFinite(v) ? v : def;\n}\nfunction setSlider(el, U, which){\n  if (!el) return;\n  var isCrop = which === 'crop';\n  el.min = String(isCrop ? U.cropMin : U.prodMin);\n  el.max = String(isCrop ? U.cropMax : U.prodMax);\n  el.step = String(isCrop ? U.cropStep : U.prodStep);\n  el.value = String(isCrop ? U.cropDef : U.prodDef);\n}\nfunction renderCalc(){\n  var U = UNITS[units];\n  var crop = readPrice(cropEl, U.cropDef), prod = readPrice(prodEl, U.prodDef);\n  var R = compute(units, crop, prod);\n  cropOut ? cropOut.textContent = fmt(crop, U.cropDec) + ' ' + U.cropUnit : null;\n  prodOut ? prodOut.textContent = fmt(prod, U.prodDec) + ' ' + U.prodUnit : null;\n  unitsLabel ? unitsLabel.textContent = U.label : null;\n  unitsBtn ? unitsBtn.textContent = U.other : null;\n  perAreaEl ? perAreaEl.textContent = U.areaWord : null;\n  var sorted = R.zones.slice().sort(function(a, b){ return a.rate - b.rate; });\n  ratesEl ? ratesEl.textContent = sorted.map(function(z){ return fmt(z.rate, 0); }).join(' \/ ') + ' ' + U.rate : null;\n  yieldsEl ? yieldsEl.textContent = sorted.map(function(z){ return fmt(z.yld, U.yDec); }).join(' \/ ') + ' ' + U.yld : null;\n  areaEl ? areaEl.textContent = fmt(R.area, 0) + ' ' + U.area : null;\n  \/* rate-step table *\/\n  if (stepsBody) {\n    var rows = '';\n    R.steps.forEach(function(s){\n      var sub;\n      if (s.noResponse) { sub = 'no measurable yield response: cannot pay at any crop price'; }\n      else if (s.verdict === 'paid') { sub = 'pays above ' + fmt(s.bePrice, U.cropDec) + ' ' + U.cropUnit; }\n      else if (s.verdict === 'even') { sub = 'break-even near ' + fmt(s.bePrice, U.cropDec) + ' ' + U.cropUnit; }\n      else { sub = 'needs ' + fmt(s.bePrice, U.cropDec) + ' ' + U.cropUnit + ' to pay'; }\n      var netCls = s.net > 0 ? 'gpr-pos' : (s.net < 0 ? 'gpr-neg' : '');\n      rows = rows\n        + '<tr>'\n        + '<td><b>' + fmt(s.from.rate, 0) + ' \u2192 ' + fmt(s.to.rate, 0) + ' ' + U.rate + '<\/b><small>on ' + fmt(s.to.area, U.units === 'us' ? 0 : 2) + ' ' + U.area + '<\/small><\/td>'\n        + '<td class=\"gpr-mono\">' + fmt(s.extra, 0) + ' ' + U.rate + '<small>' + money(U, -s.cost, 0) + '\/' + U.area + '<\/small><\/td>'\n        + '<td class=\"gpr-mono\"><b class=\"' + (s.resp > 0 ? 'gpr-pos' : 'gpr-neg') + '\">' + signed(s.resp, U.yDec) + ' ' + U.yld + '<\/b><small>break-even ' + signed(s.beResp, U.yDec) + ' ' + U.yld + ' \u00b7 value ' + money(U, s.value, 0) + '\/' + U.area + '<\/small><\/td>'\n        + '<td class=\"gpr-mono ' + netCls + '\"><b>' + money(U, s.net, 0) + '\/' + U.area + '<\/b><small>' + money(U, s.netTotal, 0) + ' on the zone<\/small><\/td>'\n        + '<td><span class=\"gpr-verdict is-' + s.verdict + '\">' + VERDICT_TEXT[s.verdict] + '<\/span><small>' + sub + '<\/small><\/td>'\n        + '<\/tr>';\n    });\n    stepsBody.innerHTML = rows;\n  }\n  \/* zone chart: three bars per zone around a zero line *\/\n  if (chartEl ? glabelsEl : null) {\n    var maxAbs = 1;\n    R.zones.forEach(function(z){\n      maxAbs = Math.max(maxAbs, Math.abs(z.costEffect), Math.abs(z.yieldValue), Math.abs(z.net));\n    });\n    var bars = '', labels = '';\n    R.zones.forEach(function(z){\n      function bar(cls, v, title, note){\n        var pct = Math.abs(v) \/ maxAbs * 46;\n        var pos = v >= 0 ? 'bottom:50%;' : 'top:50%;';\n        var tip = z.name + ' \u00b7 ' + title + ': ' + money(U, v, 1) + '\/' + U.area + (note ? ' \u00b7 ' + note : '');\n        return '<span class=\"gpr-bar ' + cls + '\" tabindex=\"0\" role=\"img\" aria-label=\"' + tip + '\" data-tip=\"' + tip + '\"><i style=\"' + pos + 'height:' + pct.toFixed(1) + '%\"><\/i><\/span>';\n      }\n      bars = bars + '<div class=\"gpr-group\">'\n        + bar('is-cost', z.costEffect, 'Product cost effect', z.costEffect >= 0 ? 'spent less than the field average' : 'spent more than the field average')\n        + bar('is-value', z.yieldValue, 'Yield value', 'yield ' + signed(z.yld - R.avgYield, U.yDec) + ' ' + U.yld + ' vs field average')\n        + bar('is-net', z.net, 'Net', 'whole zone ' + money(U, z.netTotal, 0) + ' on ' + fmt(z.area, 0) + ' ' + U.area)\n        + '<\/div>';\n      labels = labels + '<div><b>' + z.name + '<\/b><span class=\"' + (z.net >= 0 ? 'gpr-pos' : 'gpr-neg') + '\">' + money(U, z.net, 1) + '\/' + U.area + '<\/span><small>' + money(U, z.netTotal, 0) + ' \u00b7 ' + fmt(z.area, 0) + ' ' + U.area + '<\/small><\/div>';\n    });\n    chartEl.innerHTML = bars;\n    glabelsEl.innerHTML = labels;\n  }\n  return R;\n}\nfunction setUnits(u){\n  units = UNITS[u] ? u : 'metric';\n  setSlider(cropEl, UNITS[units], 'crop');\n  setSlider(prodEl, UNITS[units], 'prod');\n  return renderCalc();\n}\ncropEl ? cropEl.addEventListener('input', renderCalc) : null;\nprodEl ? prodEl.addEventListener('input', renderCalc) : null;\nunitsBtn ? unitsBtn.addEventListener('click', function(){ setUnits(units === 'us' ? 'metric' : 'us'); }) : null;\nsetUnits(units);\n\/* \u2550\u2550 single floating tooltip for every bar (rule 17): hover + focus on desktop, tap on touch *\/\nvar tip = doc.getElementById('gpr-tip');\nvar tipFor = null;\nfunction showTip(el){\n  if (!tip) return;\n  var text = el.getAttribute('data-tip');\n  if (!text) return;\n  tipFor = el;\n  tip.textContent = '';\n  var parts = text.split(' \u00b7 ');\n  var head = doc.createElement('b');\n  head.textContent = parts.shift();\n  tip.appendChild(head);\n  tip.appendChild(doc.createTextNode(parts.join(' \u00b7 ')));\n  tip.classList.add('is-on');\n  tip.setAttribute('aria-hidden', 'false');\n  var r = el.getBoundingClientRect();\n  var tw = tip.offsetWidth ? tip.offsetWidth : 240, th = tip.offsetHeight ? tip.offsetHeight : 60;\n  var vw = win.innerWidth ? win.innerWidth : 1200;\n  var x = r.left + r.width \/ 2 - tw \/ 2;\n  x = Math.max(8, Math.min(x, vw - tw - 8));\n  var y = r.top - th - 10;\n  y = y < 8 ? r.bottom + 10 : y;\n  tip.style.left = x + 'px';\n  tip.style.top = y + 'px';\n}\nfunction hideTip(){\n  if (!tip) return;\n  tipFor = null;\n  tip.classList.remove('is-on');\n  tip.setAttribute('aria-hidden', 'true');\n}\nif (tip ? chartEl : null) {\n  chartEl.addEventListener('mouseover', function(ev){\n    var el = ev.target.closest ? ev.target.closest('[data-tip]') : null;\n    el ? showTip(el) : null;\n  });\n  chartEl.addEventListener('mouseout', function(ev){\n    var el = ev.target.closest ? ev.target.closest('[data-tip]') : null;\n    el ? hideTip() : null;\n  });\n  chartEl.addEventListener('focusin', function(ev){\n    var el = ev.target.closest ? ev.target.closest('[data-tip]') : null;\n    el ? showTip(el) : null;\n  });\n  chartEl.addEventListener('focusout', hideTip);\n  chartEl.addEventListener('click', function(ev){\n    var el = ev.target.closest ? ev.target.closest('[data-tip]') : null;\n    if (!el) return;\n    (tipFor === el ? tip.classList.contains('is-on') : false) ? hideTip() : showTip(el);\n  });\n  doc.addEventListener('click', function(ev){\n    var inside = ev.target.closest ? ev.target.closest('#gpr-chart') : null;\n    inside ? null : hideTip();\n  });\n  win.addEventListener('scroll', hideTip, { passive: true });\n}\n\/* \u2550\u2550 testimonials carousel: scroll-snap track drives position; prev\/next + dots scroll it;\n   gentle autoplay only while in view, paused on hover\/focus\/touch, never under reduced motion *\/\nvar ttrack = doc.getElementById('gpr-ttrack');\nvar tcards = ttrack ? ttrack.querySelectorAll('.gpr-tcard') : [];\nif (ttrack ? tcards.length > 1 : false) {\n  var tdots = doc.getElementById('gpr-tdots');\n  var tprev = doc.getElementById('gpr-tprev'), tnext = doc.getElementById('gpr-tnext');\n  var tIndex = 0, tPages = 1, tPaused = false, tInView = false, tHoldTimer = 0;\n  function tStep(){\n    var st = tcards[1].offsetLeft - tcards[0].offsetLeft;\n    return st > 0 ? st : (ttrack.clientWidth > 0 ? ttrack.clientWidth : 1);\n  }\n  function tPaint(){\n    tIndex = Math.min(tPages - 1, Math.max(0, Math.round(ttrack.scrollLeft \/ tStep())));\n    tdots ? tdots.querySelectorAll('.gpr-tdot').forEach(function(d, i){\n      d.classList.toggle('is-on', i === tIndex);\n      d.setAttribute('aria-selected', i === tIndex ? 'true' : 'false');\n    }) : null;\n  }\n  function tGo(i, byUser){\n    var n = tPages;\n    i = ((i % n) + n) % n;\n    ttrack.scrollTo ? ttrack.scrollTo({ left: i * tStep(), behavior: 'smooth' }) : (ttrack.scrollLeft = i * tStep());\n    byUser ? tHold() : null;\n  }\n  function tHold(){\n    tPaused = true;\n    win.clearTimeout(tHoldTimer);\n    tHoldTimer = win.setTimeout(function(){ tPaused = false; }, 12000);\n  }\n  function tLayout(){\n    var vis = Math.max(1, Math.round(ttrack.clientWidth \/ tStep()));\n    tPages = Math.max(1, tcards.length - vis + 1);\n    if (tdots) {\n      var d = '';\n      for (var i = 0; i < tPages; i++) {\n        d = d + '<button class=\"gpr-tdot\" type=\"button\" role=\"tab\" aria-label=\"Testimonials ' + (i + 1) + ' of ' + tPages + '\"><\/button>';\n      }\n      tdots.innerHTML = d;\n      tdots.querySelectorAll('.gpr-tdot').forEach(function(b, i){ b.addEventListener('click', function(){ tGo(i, true); }); });\n    }\n    \/* re-snap to the current card after a resize or orientation change (the old scroll offset\n       lands between snap points when the card width changes) *\/\n    ttrack.scrollLeft = Math.min(tIndex, tPages - 1) * tStep();\n    tPaint();\n  }\n  tprev ? tprev.addEventListener('click', function(){ tGo(tIndex - 1, true); }) : null;\n  tnext ? tnext.addEventListener('click', function(){ tGo(tIndex + 1, true); }) : null;\n  ttrack.addEventListener('scroll', tPaint, { passive: true });\n  ttrack.addEventListener('keydown', function(ev){\n    ev.key === 'ArrowRight' ? tGo(tIndex + 1, true) : (ev.key === 'ArrowLeft' ? tGo(tIndex - 1, true) : null);\n  });\n  ttrack.addEventListener('pointerenter', function(){ tPaused = true; });\n  ttrack.addEventListener('pointerleave', function(){ tPaused = false; });\n  ttrack.addEventListener('focusin', function(){ tPaused = true; });\n  ttrack.addEventListener('focusout', function(){ tPaused = false; });\n  ttrack.addEventListener('touchstart', tHold, { passive: true });\n  win.addEventListener('resize', tLayout);\n  tLayout();\n  if (!reduced ? win.IntersectionObserver : false) {\n    var tIO = new win.IntersectionObserver(function(es){ es.forEach(function(e){ tInView = e.isIntersecting; }); }, { threshold: 0.4 });\n    tIO.observe(ttrack);\n    win.setInterval(function(){ (tInView ? !tPaused : false) ? tGo(tIndex + 1, false) : null; }, 6000);\n  }\n}\n\/* test hooks *\/\nwin.__GPR = {\n  compute: compute,\n  units: function(){ return units; },\n  setUnits: setUnits,\n  arcadeUrl: ARCADE_URL,\n  render: renderCalc\n};\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Muuta yksi sadonkorjuu vy\u00f6hyketason p\u00e4\u00e4t\u00f6ksiksi: validoi muuttuvan m\u00e4\u00e4r\u00e4n suorituskyky, katso, maksoiko jokainen m\u00e4\u00e4r\u00e4vaihe itsens\u00e4 takaisin, ja suunnittele seuraava kausi tulosten perusteella.<\/p>","protected":false},"author":210157960,"featured_media":14155,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_eb_attr":"","content-type":"","_wpcom_ai_launchpad_about_page":false,"_wpcom_ai_launchpad_gallery_page":false,"_wpcom_ai_launchpad_contact_page":false,"_wpcom_ai_launchpad_events_page":false,"_wpcom_ai_launchpad_video_page":false,"_wpcom_ai_launchpad_portfolio_piece":false,"footnotes":"","big_sky_generated":false},"class_list":["post-14154","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Yield Report: Did the Variable Rate Pay? | GeoPard<\/title>\n<meta name=\"description\" content=\"Turn harvest yield data into zone-level decisions. See whether each rate step paid for itself, validate machine execution, and export a shareable PDF.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/geopard.tech\/fin\/tuottoraportti\/\" \/>\n<meta property=\"og:locale\" content=\"fi_FI\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Yield Report: Did the Variable Rate Pay? | GeoPard\" \/>\n<meta property=\"og:description\" content=\"Turn harvest yield data into zone-level decisions. See whether each rate step paid for itself, validate machine execution, and export a shareable PDF.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/geopard.tech\/fin\/tuottoraportti\/\" \/>\n<meta property=\"og:site_name\" content=\"GeoPard - Precision agriculture Mapping software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geopardAgriculture\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-12T00:07:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2514\" \/>\n\t<meta property=\"og:image:height\" content=\"1116\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@geopardagri\" \/>\n<meta name=\"twitter:label1\" content=\"Arvioitu lukuaika\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minuuttia\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/\",\"url\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/\",\"name\":\"Yield Report: Did the Variable Rate Pay? | GeoPard\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/geopard.tech\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/geopard.tech\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/yield-report-anatomy.png?fit=2514%2C1116&ssl=1\",\"datePublished\":\"2026-09-11T23:07:55+00:00\",\"dateModified\":\"2026-09-12T00:07:33+00:00\",\"description\":\"Turn harvest yield data into zone-level decisions. See whether each rate step paid for itself, validate machine execution, and export a shareable PDF.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/#breadcrumb\"},\"inLanguage\":\"fi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@id\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/geopard.tech\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/yield-report-anatomy.png?fit=2514%2C1116&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/geopard.tech\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/yield-report-anatomy.png?fit=2514%2C1116&ssl=1\",\"width\":2514,\"height\":1116,\"caption\":\"GeoPard - Yield Report module\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/geopard.tech\\\/yield-report\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/geopard.tech\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automated Yield Report: Did the Variable Rate Pay?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/geopard.tech\\\/#website\",\"url\":\"https:\\\/\\\/geopard.tech\\\/\",\"name\":\"GeoPard - Precision agriculture software\",\"description\":\"Precision agriculture Mapping software\",\"publisher\":{\"@id\":\"https:\\\/\\\/geopard.tech\\\/#organization\"},\"alternateName\":\"GeoPard\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/geopard.tech\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fi\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/geopard.tech\\\/#organization\",\"name\":\"GeoPard Agriculture\",\"alternateName\":\"GeoPard\",\"url\":\"https:\\\/\\\/geopard.tech\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fi\",\"@id\":\"https:\\\/\\\/geopard.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/geopard.tech\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/favicon.png?fit=200%2C200&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/geopard.tech\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/favicon.png?fit=200%2C200&ssl=1\",\"width\":200,\"height\":200,\"caption\":\"GeoPard Agriculture\"},\"image\":{\"@id\":\"https:\\\/\\\/geopard.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geopardAgriculture\\\/\",\"https:\\\/\\\/x.com\\\/geopardagri\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geopard-agriculture\\\/\",\"https:\\\/\\\/www.instagram.com\\\/geopardagriculture\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tuottoraportti: Kannattiko vaihtuvakorkoinen sijoitus? | GeoPard","description":"Muunna satom\u00e4\u00e4r\u00e4tiedot vy\u00f6hyketason p\u00e4\u00e4t\u00f6ksiksi. Katso, kannattiko jokainen m\u00e4\u00e4r\u00e4vaihe itsens\u00e4, validoi koneiden suoritus ja vie jaettava PDF-tiedosto.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/geopard.tech\/fin\/tuottoraportti\/","og_locale":"fi_FI","og_type":"article","og_title":"Yield Report: Did the Variable Rate Pay? | GeoPard","og_description":"Turn harvest yield data into zone-level decisions. See whether each rate step paid for itself, validate machine execution, and export a shareable PDF.","og_url":"https:\/\/geopard.tech\/fin\/tuottoraportti\/","og_site_name":"GeoPard - Precision agriculture Mapping software","article_publisher":"https:\/\/www.facebook.com\/geopardAgriculture\/","article_modified_time":"2026-09-12T00:07:33+00:00","og_image":[{"width":2514,"height":1116,"url":"https:\/\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@geopardagri","twitter_misc":{"Arvioitu lukuaika":"10 minuuttia"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/geopard.tech\/yield-report\/","url":"https:\/\/geopard.tech\/yield-report\/","name":"Tuottoraportti: Kannattiko vaihtuvakorkoinen sijoitus? | GeoPard","isPartOf":{"@id":"https:\/\/geopard.tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/geopard.tech\/yield-report\/#primaryimage"},"image":{"@id":"https:\/\/geopard.tech\/yield-report\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?fit=2514%2C1116&ssl=1","datePublished":"2026-09-11T23:07:55+00:00","dateModified":"2026-09-12T00:07:33+00:00","description":"Muunna satom\u00e4\u00e4r\u00e4tiedot vy\u00f6hyketason p\u00e4\u00e4t\u00f6ksiksi. Katso, kannattiko jokainen m\u00e4\u00e4r\u00e4vaihe itsens\u00e4, validoi koneiden suoritus ja vie jaettava PDF-tiedosto.","breadcrumb":{"@id":"https:\/\/geopard.tech\/yield-report\/#breadcrumb"},"inLanguage":"fi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/geopard.tech\/yield-report\/"]}]},{"@type":"ImageObject","inLanguage":"fi","@id":"https:\/\/geopard.tech\/yield-report\/#primaryimage","url":"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?fit=2514%2C1116&ssl=1","contentUrl":"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2026\/09\/yield-report-anatomy.png?fit=2514%2C1116&ssl=1","width":2514,"height":1116,"caption":"GeoPard - Yield Report module"},{"@type":"BreadcrumbList","@id":"https:\/\/geopard.tech\/yield-report\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/geopard.tech\/"},{"@type":"ListItem","position":2,"name":"Automated Yield Report: Did the Variable Rate Pay?"}]},{"@type":"WebSite","@id":"https:\/\/geopard.tech\/#website","url":"https:\/\/geopard.tech\/","name":"GeoPard - T\u00e4sm\u00e4viljelyohjelmisto","description":"Tarkkuusviljelyn kartoitusohjelmisto","publisher":{"@id":"https:\/\/geopard.tech\/#organization"},"alternateName":"GeoPard","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/geopard.tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fi"},{"@type":"Organization","@id":"https:\/\/geopard.tech\/#organization","name":"GeoPard Maatalous","alternateName":"GeoPard","url":"https:\/\/geopard.tech\/","logo":{"@type":"ImageObject","inLanguage":"fi","@id":"https:\/\/geopard.tech\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2022\/03\/favicon.png?fit=200%2C200&ssl=1","contentUrl":"https:\/\/i0.wp.com\/geopard.tech\/wp-content\/uploads\/2022\/03\/favicon.png?fit=200%2C200&ssl=1","width":200,"height":200,"caption":"GeoPard Agriculture"},"image":{"@id":"https:\/\/geopard.tech\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geopardAgriculture\/","https:\/\/x.com\/geopardagri","https:\/\/www.linkedin.com\/company\/geopard-agriculture\/","https:\/\/www.instagram.com\/geopardagriculture\/"]}]}},"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/PdiCPa-3Gi","_links":{"self":[{"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/pages\/14154","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/users\/210157960"}],"replies":[{"embeddable":true,"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/comments?post=14154"}],"version-history":[{"count":0,"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/pages\/14154\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/media\/14155"}],"wp:attachment":[{"href":"https:\/\/geopard.tech\/fin\/wp-json\/wp\/v2\/media?parent=14154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}