function toggleNextSibling (e) { if (e.nextSibling.style.display=='none') { e.nextSibling.style.display='block'; } else { e.nextSibling.style.display='none'; } } // Globals used by SEC loader (Show.js) window.SEC_ALIAS_DIR = ""; window.RFV_MENU = [{"category":"Cover","reports":[{"label":"Cover","pos":1,"url":"R1.htm"}]},{"category":"Financial Statements","reports":[{"label":"CONDENSED CONSOLIDATED BALANCE SHEETS","pos":2,"url":"R2.htm"},{"label":"CONDENSED CONSOLIDATED BALANCE SHEETS (Parenthetical)","pos":3,"url":"R3.htm"},{"label":"CONDENSED CONSOLIDATED STATEMENTS OF OPERATIONS","pos":4,"url":"R4.htm"},{"label":"CONDENSED CONSOLIDATED STATEMENTS OF COMPREHENSIVE INCOME","pos":5,"url":"R5.htm"},{"label":"CONDENSED CONSOLIDATED STATEMENTS OF CASH FLOWS","pos":6,"url":"R6.htm"},{"label":"CONDENSED CONSOLIDATED STATEMENTS OF CASH FLOWS (Parenthetical)","pos":7,"url":"R7.htm"},{"label":"CONDENSED CONSOLIDATED STATEMENTS OF CHANGES IN EQUITY","pos":8,"url":"R8.htm"},{"label":"CONDENSED CONSOLIDATED STATEMENTS OF CHANGES IN EQUITY (Parenthetical)","pos":9,"url":"R9.htm"}]},{"category":"Notes to Financial Statements","reports":[{"label":"Basis of Presentation","pos":10,"url":"R10.htm"},{"label":"Landfill and Environmental Remediation Liabilities","pos":11,"url":"R11.htm"},{"label":"Debt and Derivatives","pos":12,"url":"R12.htm"},{"label":"Income Taxes","pos":13,"url":"R13.htm"},{"label":"Earnings Per Share","pos":14,"url":"R14.htm"},{"label":"Commitments and Contingencies","pos":15,"url":"R15.htm"},{"label":"Segment and Related Information","pos":16,"url":"R16.htm"},{"label":"Acquisitions and Divestitures","pos":17,"url":"R17.htm"},{"label":"(Gain) Loss from Divestitures, Asset Impairments and Unusual Items, Net","pos":18,"url":"R18.htm"},{"label":"Accumulated Other Comprehensive Income (Loss)","pos":19,"url":"R19.htm"},{"label":"Common Stock Repurchase Program","pos":20,"url":"R20.htm"},{"label":"Fair Value Measurements","pos":21,"url":"R21.htm"},{"label":"Variable Interest Entities","pos":22,"url":"R22.htm"},{"label":"Insider Trading Arrangements","pos":23,"url":"R23.htm"}]},{"category":"Accounting Policies","reports":[{"label":"Basis of Presentation (Policies)","pos":24,"url":"R24.htm"}]},{"category":"Notes Tables","reports":[{"label":"Landfill and Environmental Remediation Liabilities (Tables)","pos":25,"url":"R25.htm"},{"label":"Debt and Derivatives (Tables)","pos":26,"url":"R26.htm"},{"label":"Earnings Per Share (Tables)","pos":27,"url":"R27.htm"},{"label":"Segment and Related Information (Tables)","pos":28,"url":"R28.htm"},{"label":"Accumulated Other Comprehensive Income (Loss) (Tables)","pos":29,"url":"R29.htm"},{"label":"Fair Value Measurements (Tables)","pos":30,"url":"R30.htm"}]},{"category":"Notes Details","reports":[{"label":"Basis of Presentation (Details)","pos":31,"url":"R31.htm"},{"label":"Landfill and Environmental Remediation Liabilities - Liabilities for Landfill and Environmental Remediation Costs (Details)","pos":32,"url":"R32.htm"},{"label":"Landfill and Environmental Remediation Liabilities - Schedule of Changes to Landfill and Environmental Remediation Liabilities (Details)","pos":33,"url":"R33.htm"},{"label":"Debt and Derivatives - Schedule of Debt (Details)","pos":34,"url":"R34.htm"},{"label":"Debt and Derivatives - Narrative (Details)","pos":35,"url":"R35.htm"},{"label":"Income Taxes (Details)","pos":36,"url":"R36.htm"},{"label":"Earnings Per Share (Details)","pos":37,"url":"R37.htm"},{"label":"Commitments and Contingencies (Details)","pos":38,"url":"R38.htm"},{"label":"Segment and Related Information - Summary of Financial Information by Reportable Segment (Details)","pos":39,"url":"R39.htm"},{"label":"Segment and Related Information - Total Assets by Reportable Segments (Details)","pos":40,"url":"R40.htm"},{"label":"Segment and Related Information - Schedule of Operating Revenues (Details)","pos":41,"url":"R41.htm"},{"label":"Acquisitions and Divestitures (Details)","pos":42,"url":"R42.htm"},{"label":"(Gain) Loss from Divestitures, Asset Impairments and Unusual Items, Net (Details)","pos":43,"url":"R43.htm"},{"label":"Accumulated Other Comprehensive Income (Loss) - Schedule of Accumulated Other Comprehensive Income (Loss) (Details)","pos":44,"url":"R44.htm"},{"label":"Accumulated Other Comprehensive Income (Loss) - Parenthetical (Details)","pos":45,"url":"R45.htm"},{"label":"Common Stock Repurchase Program (Details)","pos":46,"url":"R46.htm"},{"label":"Fair Value Measurements - Schedule of Assets and Liabilities Measured at Fair Value (Details)","pos":47,"url":"R47.htm"},{"label":"Fair Value Measurements - Narrative (Details)","pos":48,"url":"R48.htm"},{"label":"Variable Interest Entities (Details)","pos":49,"url":"R49.htm"}]},{"allReports":{"1":"R1.htm","2":"R2.htm","3":"R3.htm","4":"R4.htm","5":"R5.htm","6":"R6.htm","7":"R7.htm","8":"R8.htm","9":"R9.htm","10":"R10.htm","11":"R11.htm","12":"R12.htm","13":"R13.htm","14":"R14.htm","15":"R15.htm","16":"R16.htm","17":"R17.htm","18":"R18.htm","19":"R19.htm","20":"R20.htm","21":"R21.htm","22":"R22.htm","23":"R23.htm","24":"R24.htm","25":"R25.htm","26":"R26.htm","27":"R27.htm","28":"R28.htm","29":"R29.htm","30":"R30.htm","31":"R31.htm","32":"R32.htm","33":"R33.htm","34":"R34.htm","35":"R35.htm","36":"R36.htm","37":"R37.htm","38":"R38.htm","39":"R39.htm","40":"R40.htm","41":"R41.htm","42":"R42.htm","43":"R43.htm","44":"R44.htm","45":"R45.htm","46":"R46.htm","47":"R47.htm","48":"R48.htm","49":"R49.htm","50":"ALL_REPORTS_SYNTHETIC"}}]; window.R_FILES_BY_POS = RFV_MENU.find(o => 'allReports' in o)?.allReports; function scrollMainContentToTop() { // Scroll to company info instead of top of page header const anchor = document.getElementById('company-info'); if (anchor) { anchor.scrollIntoView({ block: 'start', // top-align it behavior: 'auto' // no animation unless desired }); } } window.RENDERING_LOGS = RFV_MENU.find(o => 'renderingLogs' in o)?.renderingLogs; // Log viewer renders selected log into #reportDiv window.showRenderingLog = function () { const root = ensureShadow(); clearShadow(); let baseDir = (typeof window.SEC_ALIAS_DIR === 'string' && window.SEC_ALIAS_DIR.length) ? window.SEC_ALIAS_DIR.replace(/\/$/, '') : (location.pathname.replace(/\/[^/]*$/, '') || '/'); if (!baseDir.endsWith('/')) baseDir += '/'; const reportCssHref = `${baseDir}report.css`; // same folder as R1.htm const logEntries = window.RENDERING_LOGS || []; const rows = logEntries.map(entry => { const type = entry?.type || 'Info'; const text = (entry?.text || '').replace(/\r\n|\r|\n/g, '
'); const cls = type.slice(0,4).toLowerCase(); // 'erro', 'warn', 'info', etc. return `${type}: ${text}`; }).join(''); const container = document.createElement('div'); container.id = 'rfv-shadow-host'; container.innerHTML = `

Rendering Log

${rows}
The rendering log information below will not appear on the EDGAR web site.
`; root.appendChild(container); scrollMainContentToTop(); }; function decodeHtmlEntities(s) { // safest cross-browser decode const t = document.createElement('textarea'); t.innerHTML = s; return t.value; } function decodeBase64Utf8(b64) { const bin = atob(b64); const bytes = Uint8Array.from(bin, c => c.charCodeAt(0)); return new TextDecoder("utf-8").decode(bytes); } function sanitizeId(id) { return id.replace(/[^a-zA-Z0-9\._-]/g, '_'); // Replace invalid chars with underscore } /** * Normalize raw report HTML for extraction across contexts: * - SECWS: decode entity-escaped HTML (<html> → ) * - sec.gov SGML: keep full and , unwrap … safely * - Arelle/plain: pass through unchanged */ function normalizeReportHtml(raw) { let src = String(raw || ''); // If looks entity-escaped (e.g., <html>, <TEXT>, etc.), decode first const looksEscaped = /<\/?(?:html|head|body|TEXT)\b/i.test(src) || /<[a-z]/i.test(src); if (looksEscaped) { try { src = decodeHtmlEntities(src); } catch (_) {} } // If wrapped in SGML …, unwrap while preserving const hasSGML = //i.test(src) && /<\/TEXT>/i.test(src); if (hasSGML) { const start = src.search(//i); const end = src.search(/<\/TEXT>/i); if (start !== -1 && end !== -1 && end > start) { src = src.slice(start + ''.length, end); } } return src; } function ensureShadow() { const pane = document.getElementById('reportDiv'); if (!pane) return null; if (!pane.shadowRoot) pane.attachShadow({ mode: 'open' }); // mirror for any legacy code still reading _shadowRoot pane._shadowRoot = pane.shadowRoot; // make sure host is visible and not contained pane.hidden = false; pane.style.display = 'block'; pane.style.visibility = 'visible'; pane.style.contain = 'none'; return pane.shadowRoot; } function clearShadow() { const root = ensureShadow(); if (root) root.innerHTML = ''; } function renderIntoShadow(bodyHtml, links, inlineStyles, baseDir) { const root = ensureShadow(); if (!root) return; // Always clear previous report clearShadow(); // pane fades via .rfv-pending; do not change visibility to avoid header repaint const pane = document.getElementById('reportDiv'); // 1) Inline styles FIRST for immediate styling if (Array.isArray(inlineStyles)) { for (const css of inlineStyles) { if (css) { const styleEl = document.createElement('style'); styleEl.textContent = css; root.appendChild(styleEl); } } } // 2) Safety constraints (layout) const safety = document.createElement('style'); safety.textContent = ` :host { display:block; width:auto; max-width:100%; } #rfv-shadow-host { display:block; width:auto; max-width:100%; overflow:visible; } table.report { width:auto; max-width:100%; border-collapse: collapse; } img { max-width:100%; height:auto; } /* Unbeatable forced ring (wins against report CSS with !important resets) */ .rfv-force-focus, .rfv-focus-ring { outline: 3px solid #005A9C !important; outline-offset: 2px !important; box-shadow: 0 0 0 2px #fff inset !important; } :focus-visible { outline: 3px solid #005A9C !important; outline-offset: 2px !important; } `; root.appendChild(safety); // 3) Report body const container = document.createElement('div'); container.id = 'rfv-shadow-host'; container.innerHTML = bodyHtml; container.setAttribute('tabindex', '-1'); // make container focusable container.setAttribute('role', 'region'); // semantic region container.setAttribute('aria-label', 'All reports content'); // accessible name root.appendChild(container); // 4) External CSS: fetch-and-prepend, with fallback const loadExternalCss = () => { if (!Array.isArray(links) || !links.length) return Promise.resolve(); // some old R files have css includes to include/report.css but there is no include subdirectory const absHrefs = links.map(h => h.startsWith('/') // absolute → leave unchanged ? h : h.startsWith('include/') // legacy relative include/ ? `${baseDir}${h.slice(8)}` : `${baseDir}${h}` // standard relative report.css, etc. ); return Promise.allSettled( absHrefs.map(h => fetch(h).then(r => (r.ok ? r.text() : ''))) ).then(results => { const cssText = results .filter(r => r.status === 'fulfilled' && r.value) .map(r => normalizeReportHtml(r.value)) .join('\n'); const styles = document.createElement('style'); styles.textContent = cssText && cssText.length ? cssText : absHrefs.map(h => `@import url("${h}");`).join('\n'); root.insertBefore(styles, root.firstChild); }); }; // Resolve after external CSS is ready (if any) return loadExternalCss(); } // Cache of styles we've already loaded const RFV_LOADED_STYLES = new Set(); function extractLinksAndBody(fullHtml) { const doc = new DOMParser().parseFromString(fullHtml, 'text/html'); // External CSS links (e.g., ) const links = Array.from(doc.querySelectorAll('link[rel~="stylesheet"][href]')) .map(link => (link.getAttribute('href') || '').trim()) .filter(Boolean); // Inline