{"id":5427,"date":"2026-05-20T21:07:13","date_gmt":"2026-05-20T19:07:13","guid":{"rendered":"https:\/\/lifehaya.pefc.es\/cns-simulator-beech-beech-hetre\/"},"modified":"2026-05-21T20:56:12","modified_gmt":"2026-05-21T18:56:12","slug":"cns-simulator-beech","status":"publish","type":"page","link":"https:\/\/lifehaya.pefc.es\/en\/cns-simulator-beech\/","title":{"rendered":"CNS Simulator &#8211; Beech"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5427\" class=\"elementor elementor-5427 elementor-5296\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ae28c5 e-flex e-con-boxed e-con e-parent\" data-id=\"6ae28c5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-febc61f elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"febc61f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<body>\r\n<div class=\"app cns-simulator\">\r\n\r\n  <div class=\"header\">\r\n    <div style=\"display:flex;align-items:center;gap:12px\">\r\n      <img decoding=\"async\" src=\"https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/selviaula.png\" alt=\"Selviaula\" style=\"height:52px;width:auto\">\r\n      <div style=\"width:1px;height:40px;background:var(--f-border)\"><\/div>\r\n      <img decoding=\"async\" src=\"https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/logo-life-haya.png\" alt=\"Life HAYA\" style=\"height:44px;width:auto\">\r\n    <\/div>\r\n    <div style=\"text-align:center;flex:1;min-width:200px\">\r\n      <div class=\"header-title\" id=\"h-title\"><\/div>\r\n      <div class=\"header-sub\" id=\"h-sub\"><\/div>\r\n    <\/div>\r\n    <div>\r\n      <img decoding=\"async\" id=\"life-eu-logo\" src=\"https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/es_life_co-founded_by_the_UE.png\" alt=\"Cofinanciado por la Uni\u00f3n Europea\" style=\"height:44px;width:auto\">\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"top-bar\">\r\n    <div class=\"tabs\" id=\"main-tabs\">\r\n      <button class=\"tab active\" onclick=\"switchTab('instrucciones')\" id=\"tab-instr\"><\/button>\r\n      <button class=\"tab\" onclick=\"switchTab('subcapitalizado')\" id=\"tab-sub\"><\/button>\r\n      <button class=\"tab\" onclick=\"switchTab('equilibrio')\" id=\"tab-eq\"><\/button>\r\n      <button class=\"tab\" onclick=\"switchTab('capitalizado')\" id=\"tab-cap\"><\/button>\r\n    <\/div>\r\n    <div class=\"lang-switcher\">\r\n      <button class=\"lang-btn active\" onclick=\"setLang('es')\">ES<\/button>\r\n      <button class=\"lang-btn\" onclick=\"setLang('en')\">EN<\/button>\r\n      <button class=\"lang-btn\" onclick=\"setLang('fr')\">FR<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- INSTRUCCIONES -->\r\n  <div id=\"panel-instrucciones\" class=\"panel active\">\r\n\r\n    <!-- SELECTOR DE SITUACI\u00d3N -->\r\n    <div class=\"card\" style=\"margin-bottom:1.25rem;border-top-color:#2980B9\">\r\n      <h3 id=\"i-sel-title\" style=\"color:#1A5276\"><\/h3>\r\n      <p style=\"font-size:13px;color:var(--f-text-sec);line-height:1.6;margin-bottom:1.25rem\" id=\"i-sel-desc\"><\/p>\r\n      <div class=\"sel-grid\">\r\n        <button onclick=\"switchTab('subcapitalizado')\"\r\n          style=\"min-width:0;width:100%;background:#EBF5FB;border:2px solid #2980B9;border-radius:8px;padding:16px 12px;cursor:pointer;text-align:left;transition:all 0.2s\"\r\n          onmouseover=\"this.style.background='#D6EAF8'\"\r\n          onmouseout=\"this.style.background='#EBF5FB'\">\r\n          <div style=\"font-size:22px;margin-bottom:6px\">\ud83c\udf31<\/div>\r\n          <div style=\"font-size:13px;font-weight:600;color:#1A5276;margin-bottom:4px\" id=\"sel-m1-title\"><\/div>\r\n          <div style=\"font-size:11px;color:#5D6D7E;line-height:1.5;white-space:normal;word-break:break-word;overflow-wrap:break-word\" id=\"sel-m1-desc\"><\/div>\r\n          <div style=\"margin-top:8px;font-size:11px;font-weight:600;color:#2980B9\" id=\"sel-m1-range\"><\/div>\r\n        <\/button>\r\n        <button onclick=\"switchTab('equilibrio')\"\r\n          style=\"min-width:0;width:100%;background:var(--f-green-bg);border:2px solid var(--f-green-mid);border-radius:8px;padding:16px 12px;cursor:pointer;text-align:left;transition:all 0.2s\"\r\n          onmouseover=\"this.style.background='#D5F5E3'\"\r\n          onmouseout=\"this.style.background='var(--f-green-bg)'\">\r\n          <div style=\"font-size:22px;margin-bottom:6px\">\ud83c\udf32<\/div>\r\n          <div style=\"font-size:13px;font-weight:600;color:var(--f-green-dark);margin-bottom:4px\" id=\"sel-m2-title\"><\/div>\r\n          <div style=\"font-size:11px;color:var(--f-text-sec);line-height:1.5;white-space:normal;word-break:break-word;overflow-wrap:break-word\" id=\"sel-m2-desc\"><\/div>\r\n          <div style=\"margin-top:8px;font-size:11px;font-weight:600;color:var(--f-green-mid)\" id=\"sel-m2-range\"><\/div>\r\n        <\/button>\r\n        <button onclick=\"switchTab('capitalizado')\"\r\n          style=\"min-width:0;width:100%;background:var(--f-brown-bg);border:2px solid var(--f-brown-mid);border-radius:8px;padding:16px 12px;cursor:pointer;text-align:left;transition:all 0.2s\"\r\n          onmouseover=\"this.style.background='#F5CBA7'\"\r\n          onmouseout=\"this.style.background='var(--f-brown-bg)'\">\r\n          <div style=\"font-size:22px;margin-bottom:6px\">\ud83c\udf33<\/div>\r\n          <div style=\"font-size:13px;font-weight:600;color:var(--f-brown-dark);margin-bottom:4px\" id=\"sel-m3-title\"><\/div>\r\n          <div style=\"font-size:11px;color:var(--f-text-sec);line-height:1.5;white-space:normal;word-break:break-word;overflow-wrap:break-word\" id=\"sel-m3-desc\"><\/div>\r\n          <div style=\"margin-top:8px;font-size:11px;font-weight:600;color:var(--f-brown-mid)\" id=\"sel-m3-range\"><\/div>\r\n        <\/button>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"grid2\" style=\"margin-bottom:1.25rem\">\r\n      <div class=\"card\">\r\n        <h3 id=\"i-what-title\"><\/h3>\r\n        <p style=\"font-size:13px;color:var(--f-text-sec);line-height:1.7;margin-bottom:0.75rem\" id=\"i-what-p1\"><\/p>\r\n        <p style=\"font-size:13px;color:var(--f-text-sec);line-height:1.7\" id=\"i-what-p2\"><\/p>\r\n        <div class=\"info-strip\" style=\"margin-top:0.85rem;margin-bottom:0\" id=\"i-note\"><\/div>\r\n      <\/div>\r\n      <div class=\"card brown-top\">\r\n        <h3 id=\"i-how-title\"><\/h3>\r\n        <div style=\"font-size:13px;color:var(--f-text-sec);line-height:1.8\">\r\n          <div style=\"margin-bottom:8px\"><span class=\"step-num\">1<\/span><span id=\"i-s1\"><\/span><\/div>\r\n          <div style=\"margin-bottom:8px\"><span class=\"step-num\">2<\/span><span id=\"i-s2\"><\/span><\/div>\r\n          <div style=\"margin-bottom:8px\"><span class=\"step-num\">3<\/span><span id=\"i-s3\"><\/span><\/div>\r\n          <div><span class=\"step-num\">4<\/span><span id=\"i-s4\"><\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"card\" style=\"margin-bottom:1.25rem\">\r\n      <h3 id=\"i-logic-title\"><\/h3>\r\n      <div class=\"logic-grid\">\r\n        <!-- M\u00f3dulo 1 -->\r\n        <div style=\"border-left:3px solid #2980B9;padding-left:12px\">\r\n          <h4 style=\"color:#1A5276;margin-bottom:8px;font-size:13px\" id=\"i-mod1-title\"><\/h4>\r\n          <p style=\"font-size:12px;color:var(--f-text-sec);line-height:1.7;margin-bottom:8px\" id=\"i-mod1-p1\"><\/p>\r\n          <div class=\"info-strip\" style=\"margin-bottom:0;background:#EBF5FB;border-color:#AED6F1\" id=\"i-mod1-tip\"><\/div>\r\n        <\/div>\r\n        <!-- M\u00f3dulo 2 -->\r\n        <div style=\"border-left:3px solid var(--f-green-mid);padding-left:12px\">\r\n          <h4 style=\"color:var(--f-green-dark);margin-bottom:8px;font-size:13px\" id=\"i-mod2-title\"><\/h4>\r\n          <p style=\"font-size:12px;color:var(--f-text-sec);line-height:1.7;margin-bottom:8px\" id=\"i-mod2-p1\"><\/p>\r\n          <div class=\"info-strip\" style=\"margin-bottom:0\" id=\"i-mod2-tip\"><\/div>\r\n        <\/div>\r\n        <!-- M\u00f3dulo 3 -->\r\n        <div style=\"border-left:3px solid var(--f-brown-mid);padding-left:12px\">\r\n          <h4 style=\"color:var(--f-brown-dark);margin-bottom:8px;font-size:13px\" id=\"i-mod3-title\"><\/h4>\r\n          <p style=\"font-size:12px;color:var(--f-text-sec);line-height:1.7;margin-bottom:8px\" id=\"i-mod3-p1\"><\/p>\r\n          <div style=\"font-size:11px;line-height:1.9;color:var(--f-text-sec)\">\r\n            <div><span style=\"display:inline-block;width:8px;height:8px;background:var(--f-cut);border-radius:1px;margin-right:5px;vertical-align:middle\"><\/span><span id=\"i-cut-init\"><\/span><\/div>\r\n            <div><span style=\"display:inline-block;width:8px;height:8px;background:var(--f-cut-adv);border-radius:1px;margin-right:5px;vertical-align:middle\"><\/span><span id=\"i-cut-adv\"><\/span><\/div>\r\n            <div><span style=\"display:inline-block;width:8px;height:8px;background:var(--f-cut-eq);border-radius:1px;margin-right:5px;vertical-align:middle\"><\/span><span id=\"i-cut-eq\"><\/span><\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"card brown-top\">\r\n      <h3 id=\"i-glossary-title\"><\/h3>\r\n      <div class=\"glossary-grid\">\r\n        <div>\r\n          <div style=\"margin-bottom:12px\"><div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-ab-t\"><\/div><div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-ab-d\"><\/div><\/div>\r\n          <div style=\"margin-bottom:12px\"><div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-h0-t\"><\/div><div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-h0-d\"><\/div><\/div>\r\n          <div style=\"margin-bottom:12px\"><div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-ff-t\"><\/div><div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-ff-d\"><\/div><\/div>\r\n          <div><div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-c-t\"><\/div><div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-c-d\"><\/div><\/div>\r\n        <\/div>\r\n        <div>\r\n          <div style=\"margin-bottom:12px\">\r\n            <div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-diam-t\"><\/div>\r\n            <div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-diam-d\"><\/div>\r\n            <div style=\"font-size:11px;color:var(--f-text-sec);line-height:1.9;margin-top:4px\">\r\n              <span style=\"display:inline-block;width:8px;height:8px;background:#C8DFA8;border-radius:1px;margin-right:4px;vertical-align:middle\"><\/span><strong>SW<\/strong> \u2014 <span id=\"g-sw\"><\/span><br>\r\n              <span style=\"display:inline-block;width:8px;height:8px;background:#7AAD52;border-radius:1px;margin-right:4px;vertical-align:middle\"><\/span><strong>MW<\/strong> \u2014 <span id=\"g-mw\"><\/span><br>\r\n              <span style=\"display:inline-block;width:8px;height:8px;background:#4A7C2F;border-radius:1px;margin-right:4px;vertical-align:middle\"><\/span><strong>LW<\/strong> \u2014 <span id=\"g-lw\"><\/span><br>\r\n              <span style=\"display:inline-block;width:8px;height:8px;background:#2D5016;border-radius:1px;margin-right:4px;vertical-align:middle\"><\/span><strong>VLW<\/strong> \u2014 <span id=\"g-vlw\"><\/span>\r\n            <\/div>\r\n          <\/div>\r\n          <div style=\"margin-bottom:12px\"><div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-dist-t\"><\/div><div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-dist-d\"><\/div><\/div>\r\n          <div><div style=\"font-size:12px;font-weight:500;color:var(--f-green-dark);margin-bottom:3px\" id=\"g-lim-t\"><\/div><div style=\"font-size:12px;color:var(--f-text-sec);line-height:1.6\" id=\"g-lim-d\"><\/div><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- SUBCAPITALIZADO (M\u00d3DULO 1) -->\r\n  <div id=\"panel-subcapitalizado\" class=\"panel\">\r\n    <div class=\"grid2\">\r\n      <div class=\"card\">\r\n        <h3 id=\"sub-params-title\"><\/h3>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"sub-p-species\"><\/span>\r\n          <span style=\"font-size:13px;font-weight:500;color:var(--f-green-dark)\"><span id=\"sub-species-name\">Haya<\/span> <em style=\"font-weight:400;color:var(--f-text-sec)\">(Fagus sylvatica)<\/em><\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"sub-p-h0\"><\/span>\r\n          <input type=\"range\" id=\"sub-h0\" min=\"14\" max=\"38\" step=\"1\" value=\"20\" oninput=\"updateSub()\">\r\n          <span class=\"param-val\" id=\"sub-h0-val\">20 m<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"sub-p-ab0\"><\/span>\r\n          <input type=\"range\" id=\"sub-ab0\" min=\"0.5\" max=\"13.9\" step=\"0.5\" value=\"8\" oninput=\"updateSub()\">\r\n          <span class=\"param-val\" id=\"sub-ab0-val\">8.0<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"sub-p-growth\"><\/span>\r\n          <input type=\"range\" id=\"sub-crec\" min=\"0.2\" max=\"2\" step=\"0.1\" value=\"0.8\" oninput=\"updateSub()\">\r\n          <span class=\"param-val\" id=\"sub-crec-val\">0.8<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"sub-p-years\"><\/span>\r\n          <input type=\"range\" id=\"sub-years\" min=\"20\" max=\"200\" step=\"10\" value=\"80\" oninput=\"updateSub()\">\r\n          <span class=\"param-val\" id=\"sub-years-val\">80<\/span>\r\n        <\/div>\r\n        <div class=\"divider\"><\/div>\r\n        <div class=\"info-strip\" id=\"sub-info-strip\"><\/div>\r\n        <div style=\"display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px\">\r\n          <span id=\"sub-status\" class=\"badge-warn\"><\/span>\r\n          <span style=\"font-size:12px;color:var(--f-text-sec)\"><span id=\"sub-p-range\"><\/span>: <strong style=\"color:var(--f-green-dark)\">14<\/strong> m\u00b2\/ha<\/span>\r\n          <span style=\"font-size:12px;color:var(--f-text-sec)\"><span id=\"sub-p-ff\"><\/span>: <strong id=\"sub-ff\" style=\"color:var(--f-green-dark)\">9.4<\/strong> m\u00b3\/m\u00b2<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"card brown-top\">\r\n        <h3 id=\"sub-metrics-title\"><\/h3>\r\n        <div class=\"grid4\" style=\"margin-bottom:1rem\">\r\n          <div class=\"metric\">\r\n            <div class=\"metric-label\" id=\"sub-m-yreq\"><\/div>\r\n            <div class=\"metric-val\" id=\"sub-yreq\">\u2014<\/div>\r\n            <div class=\"metric-sub\" id=\"sub-m-yr\"><\/div>\r\n          <\/div>\r\n          <div class=\"metric\">\r\n            <div class=\"metric-label\" id=\"sub-m-yreq2\"><\/div>\r\n            <div class=\"metric-val\" id=\"sub-yr-eq\">\u2014<\/div>\r\n            <div class=\"metric-sub\" id=\"sub-m-yr2\"><\/div>\r\n          <\/div>\r\n          <div class=\"metric\">\r\n            <div class=\"metric-label\" id=\"sub-m-deficit\"><\/div>\r\n            <div class=\"metric-val\" id=\"sub-deficit\">\u2014<\/div>\r\n            <div class=\"metric-sub\">m\u00b2\/ha<\/div>\r\n          <\/div>\r\n          <div class=\"metric\">\r\n            <div class=\"metric-label\" id=\"sub-m-carbon\"><\/div>\r\n            <div class=\"metric-val\" id=\"sub-carb\">\u2014<\/div>\r\n            <div class=\"metric-sub\">tn C\/ha<\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <h4 id=\"sub-progress-title\" style=\"margin-bottom:6px\"><\/h4>\r\n        <div style=\"background:var(--f-surface);border-radius:6px;height:28px;border:1px solid var(--f-border);overflow:hidden;position:relative;margin-bottom:6px\">\r\n          <div id=\"sub-progress-bar\" style=\"height:100%;background:linear-gradient(90deg,#2980B9,#1ABC9C);border-radius:6px;transition:width 0.4s;width:0%\"><\/div>\r\n          <span id=\"sub-progress-label\" style=\"position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:11px;font-weight:500;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,0.4)\">0%<\/span>\r\n        <\/div>\r\n        <div style=\"display:flex;justify-content:space-between;font-size:10px;color:var(--f-text-hint)\">\r\n          <span id=\"sub-bar-lo\"><\/span><span id=\"sub-bar-hi\"><\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"card\" style=\"margin-bottom:1.25rem\">\r\n      <h3 id=\"sub-chart-title\"><\/h3>\r\n      <div class=\"legend-row\">\r\n        <span><span class=\"legend-dot\" style=\"background:#2980B9\"><\/span><span id=\"sub-leg-ab\"><\/span><\/span>\r\n        <span style=\"display:flex;align-items:center;gap:4px\"><span style=\"width:18px;border-top:2px dashed #C0392B;display:inline-block\"><\/span><span id=\"sub-leg-sup\"><\/span><\/span>\r\n        <span style=\"display:flex;align-items:center;gap:4px\"><span style=\"width:18px;border-top:2px dashed #8B6335;display:inline-block\"><\/span><span id=\"sub-leg-inf\"><\/span><\/span>\r\n        <span><span class=\"legend-dot\" style=\"background:#1A5276;border-radius:50%\"><\/span><span id=\"sub-leg-lim\"><\/span><\/span>\r\n        <span><span class=\"legend-dot\" style=\"background:var(--f-cut-eq);border-radius:50%\"><\/span><span id=\"sub-leg-eq\"><\/span><\/span>\r\n      <\/div>\r\n      <div style=\"position:relative;width:100%;height:300px\">\r\n        <canvas id=\"sub-chart\" role=\"img\" aria-label=\"Evoluci\u00f3n AB subcapitalizado\"><\/canvas>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"card brown-top\">\r\n      <h3 id=\"sub-reg-title\"><\/h3>\r\n      <div style=\"display:flex;gap:14px;font-size:11px;color:var(--f-text-sec);margin-bottom:0.5rem;flex-wrap:wrap\">\r\n        <span><span style=\"display:inline-block;width:10px;height:10px;background:rgba(41,128,185,0.2);border-radius:2px;margin-right:4px;vertical-align:middle\"><\/span><span id=\"sub-leg-lim-row\"><\/span><\/span>\r\n        <span><span style=\"display:inline-block;width:10px;height:10px;background:rgba(26,107,58,0.1);border-radius:2px;margin-right:4px;vertical-align:middle\"><\/span><span id=\"sub-leg-eq-row\"><\/span><\/span>\r\n      <\/div>\r\n      <div class=\"table-wrap\">\r\n        <table>\r\n          <thead><tr id=\"sub-thead\"><\/tr><\/thead>\r\n          <tbody id=\"sub-table\"><\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>  <!-- EQUILIBRIO -->\r\n  <div id=\"panel-equilibrio\" class=\"panel\">\r\n    <div class=\"grid2\">\r\n      <div class=\"card\">\r\n        <h3 id=\"eq-params-title\"><\/h3>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"eq-p-species\"><\/span>\r\n          <span style=\"font-size:13px;font-weight:500;color:var(--f-green-dark)\"><span id=\"eq-species-name\">Haya<\/span> <em style=\"font-weight:400;color:var(--f-text-sec)\">(Fagus sylvatica)<\/em><\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"eq-p-h0\"><\/span>\r\n          <input type=\"range\" id=\"eq-h0\" min=\"14\" max=\"38\" step=\"1\" value=\"20\" oninput=\"updateEq()\">\r\n          <span class=\"param-val\" id=\"eq-h0-val\">20 m<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"eq-p-ab0\"><\/span>\r\n          <input type=\"range\" id=\"eq-ab0\" min=\"14\" max=\"21\" step=\"0.5\" value=\"18\" oninput=\"updateEq()\">\r\n          <span class=\"param-val\" id=\"eq-ab0-val\">18.0<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"eq-p-growth\"><\/span>\r\n          <input type=\"range\" id=\"eq-crec\" min=\"0.2\" max=\"2\" step=\"0.1\" value=\"0.8\" oninput=\"updateEq()\">\r\n          <span class=\"param-val\" id=\"eq-crec-val\">0.8<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"eq-p-pct\"><\/span>\r\n          <input type=\"range\" id=\"eq-pct\" min=\"5\" max=\"30\" step=\"1\" value=\"16\" oninput=\"updateEq()\">\r\n          <span class=\"param-val\" id=\"eq-pct-val\">16%<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"eq-p-years\"><\/span>\r\n          <input type=\"range\" id=\"eq-years\" min=\"20\" max=\"200\" step=\"10\" value=\"60\" oninput=\"updateEq()\">\r\n          <span class=\"param-val\" id=\"eq-years-val\">60<\/span>\r\n        <\/div>\r\n        <div class=\"divider\"><\/div>\r\n        <div style=\"display:flex;gap:8px;align-items:center;flex-wrap:wrap\">\r\n          <span id=\"eq-status\" class=\"badge-ok\"><\/span>\r\n          <span style=\"font-size:12px;color:var(--f-text-sec)\"><span id=\"eq-p-range\"><\/span>: <strong id=\"eq-lims\" style=\"color:var(--f-green-dark)\">14\u201321<\/strong> m\u00b2\/ha<\/span>\r\n          <span style=\"font-size:12px;color:var(--f-text-sec)\"><span id=\"eq-p-ff\"><\/span>: <strong id=\"eq-ff\" style=\"color:var(--f-green-dark)\">9.4<\/strong> m\u00b3\/m\u00b2<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"card brown-top\">\r\n        <h3 id=\"eq-dist-title\"><\/h3>\r\n        <div class=\"info-strip\" id=\"eq-dist-info\"><\/div>\r\n        <div class=\"dist-bar\">\r\n          <div class=\"dist-seg\" style=\"width:16.66%;background:#C8DFA8;color:#2D5016\">SW 17%<\/div>\r\n          <div class=\"dist-seg\" style=\"width:33.33%;background:#7AAD52;color:#fff\">MW 33%<\/div>\r\n          <div class=\"dist-seg\" style=\"width:33.33%;background:#4A7C2F;color:#fff\">LW 33%<\/div>\r\n          <div class=\"dist-seg\" style=\"width:16.66%;background:#2D5016;color:#C8DFA8\">VLW 17%<\/div>\r\n        <\/div>\r\n        <div class=\"legend-row\" style=\"margin-top:8px;margin-bottom:0\">\r\n          <span><span class=\"legend-dot\" style=\"background:#C8DFA8\"><\/span>SW 17.5\u201327.5 cm<\/span>\r\n          <span><span class=\"legend-dot\" style=\"background:#7AAD52\"><\/span>MW 27.5\u201347.5 cm<\/span>\r\n          <span><span class=\"legend-dot\" style=\"background:#4A7C2F\"><\/span>LW 47.5\u201367.5 cm<\/span>\r\n          <span><span class=\"legend-dot\" style=\"background:#2D5016\"><\/span>VLW >67.5 cm<\/span>\r\n        <\/div>\r\n        <div class=\"divider\"><\/div>\r\n        <h4 id=\"eq-cycle-title\"><\/h4>\r\n        <div style=\"display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:0.75rem\">\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"eq-m-cycle\"><\/div><div class=\"metric-val\" id=\"eq-ciclo\">\u2014<\/div><div class=\"metric-sub\" id=\"eq-m-years\"><\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"eq-m-abcut\"><\/div><div class=\"metric-val\" id=\"eq-ab-ext\">\u2014<\/div><div class=\"metric-sub\">m\u00b2\/ha<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"eq-m-vol\"><\/div><div class=\"metric-val\" id=\"eq-vol\">\u2014<\/div><div class=\"metric-sub\">m\u00b3\/ha<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"eq-m-cuts\"><\/div><div class=\"metric-val\" id=\"eq-ncortas\">\u2014<\/div><div class=\"metric-sub\" id=\"eq-m-in60\"><\/div><\/div>\r\n        <\/div>\r\n        <div style=\"display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:0\">\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"eq-m-carbon\"><\/div><div class=\"metric-val\" id=\"eq-carb\">\u2014<\/div><div class=\"metric-sub\">tn C\/ha<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"eq-m-carbon-cut\"><\/div><div class=\"metric-val\" id=\"eq-carb-cut\">\u2014<\/div><div class=\"metric-sub\">tn C\/ha\/<span id=\"eq-m-cut-unit\"><\/span><\/div><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"card\" style=\"margin-bottom:1.25rem\">\r\n      <h3 id=\"eq-chart-title\"><\/h3>\r\n      <div class=\"legend-row\">\r\n        <span><span class=\"legend-dot\" style=\"background:#4A7C2F\"><\/span><span id=\"eq-leg-ab\"><\/span><\/span>\r\n        <span style=\"display:flex;align-items:center;gap:4px\"><span style=\"width:18px;border-top:2px dashed #C0392B;display:inline-block\"><\/span><span id=\"eq-leg-sup\"><\/span><\/span>\r\n        <span style=\"display:flex;align-items:center;gap:4px\"><span style=\"width:18px;border-top:2px dashed #8B6335;display:inline-block\"><\/span><span id=\"eq-leg-inf\"><\/span><\/span>\r\n        <span><span class=\"legend-dot\" style=\"background:#C0392B;border-radius:50%\"><\/span><span id=\"eq-leg-cut\"><\/span><\/span>\r\n      <\/div>\r\n      <div style=\"position:relative;width:100%;height:280px\">\r\n        <canvas id=\"eq-chart\" role=\"img\" aria-label=\"Evoluci\u00f3n AB equilibrio\">Gr\u00e1fico de evoluci\u00f3n del \u00e1rea basim\u00e9trica.<\/canvas>\r\n      <\/div>\r\n    <\/div>\r\n    <div class=\"card brown-top\">\r\n      <h3 id=\"eq-reg-title\"><\/h3>\r\n      <div style=\"display:flex;gap:14px;font-size:11px;color:var(--f-text-sec);margin-bottom:0.5rem;flex-wrap:wrap\">\r\n        <span><span style=\"display:inline-block;width:10px;height:10px;background:rgba(26,107,58,0.2);border-radius:2px;margin-right:4px;vertical-align:middle\"><\/span><span id=\"eq-leg-cut-row\"><\/span><\/span>\r\n      <\/div>\r\n      <div class=\"table-wrap\">\r\n        <table>\r\n          <thead><tr id=\"eq-thead\"><\/tr><\/thead>\r\n          <tbody id=\"eq-table\"><\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- CAPITALIZADO -->\r\n  <div id=\"panel-capitalizado\" class=\"panel\">\r\n    <div class=\"grid2\">\r\n\r\n      <div class=\"card\">\r\n        <h3 id=\"cap-params-title\"><\/h3>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-species\"><\/span>\r\n          <span style=\"font-size:13px;font-weight:500;color:var(--f-green-dark)\"><span id=\"cap-species-name\">Haya<\/span> <em style=\"font-weight:400;color:var(--f-text-sec)\">(Fagus sylvatica)<\/em><\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-h0\"><\/span>\r\n          <input type=\"range\" id=\"cap-h0\" min=\"14\" max=\"38\" step=\"1\" value=\"20\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" id=\"cap-h0-val\">20 m<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-ab0\"><\/span>\r\n          <input type=\"range\" id=\"cap-ab0\" min=\"22\" max=\"80\" step=\"0.5\" value=\"32\" oninput=\"syncCapAB()\">\r\n          <span class=\"param-val\" id=\"cap-ab0-val\">32.0<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-growth\"><\/span>\r\n          <input type=\"range\" id=\"cap-crec\" min=\"0.2\" max=\"2\" step=\"0.1\" value=\"0.8\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" id=\"cap-crec-val\">0.8<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-n\"><\/span>\r\n          <input type=\"range\" id=\"cap-n\" min=\"20\" max=\"60\" step=\"5\" value=\"20\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" id=\"cap-n-val\">20<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-years\"><\/span>\r\n          <input type=\"range\" id=\"cap-years\" min=\"20\" max=\"60\" step=\"5\" value=\"40\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" id=\"cap-years-val\">60<\/span>\r\n        <\/div>\r\n        <div class=\"divider\"><\/div>\r\n\r\n        <h4 style=\"margin-bottom:8px;color:var(--f-text-sec)\" id=\"cap-int-title\"><\/h4>\r\n        <div class=\"info-strip\" id=\"cap-int-info\" style=\"margin-bottom:10px\"><\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-cut1\"><\/span>\r\n          <input type=\"range\" id=\"cap-pct1\" min=\"15\" max=\"40\" step=\"1\" value=\"28\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" style=\"color:var(--f-cut)\" id=\"cap-pct1-val\">28%<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-cut2\"><\/span>\r\n          <input type=\"range\" id=\"cap-pct2\" min=\"10\" max=\"35\" step=\"1\" value=\"22\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" style=\"color:var(--f-cut-adv)\" id=\"cap-pct2-val\">22%<\/span>\r\n        <\/div>\r\n        <div class=\"param-row\">\r\n          <span class=\"param-label\" id=\"cap-p-cut3\"><\/span>\r\n          <input type=\"range\" id=\"cap-pct3\" min=\"5\" max=\"25\" step=\"1\" value=\"20\" oninput=\"updateCap()\">\r\n          <span class=\"param-val\" style=\"color:var(--f-cut-eq)\" id=\"cap-pct3-val\">20%<\/span>\r\n        <\/div>\r\n        <div class=\"divider\"><\/div>\r\n\r\n        <!-- Resultados Pa y R calculados -->\r\n        <div style=\"background:var(--f-green-bg);border:1px solid var(--f-green-pale);border-radius:6px;padding:10px 12px;margin-bottom:8px\">\r\n          <div style=\"font-size:11px;color:var(--f-moss);margin-bottom:4px\" id=\"cap-pa-label\"><\/div>\r\n          <div style=\"font-size:14px;font-weight:500;color:var(--f-green-dark)\" id=\"cap-pa-result\"><\/div>\r\n          <div style=\"font-size:11px;color:var(--f-moss);margin-top:6px;margin-bottom:4px\" id=\"cap-r-label\"><\/div>\r\n          <div style=\"font-size:13px;color:var(--f-green-dark)\" id=\"cap-r-result\"><\/div>\r\n        <\/div>\r\n        <div style=\"display:flex;gap:8px;align-items:center;flex-wrap:wrap\">\r\n          <span id=\"cap-status\" class=\"badge-ok\"><\/span>\r\n          <span style=\"font-size:12px;color:var(--f-text-sec)\"><span id=\"cap-p-limsup\"><\/span>: <strong id=\"cap-limsup\" style=\"color:var(--f-green-dark)\">21<\/strong> m\u00b2\/ha<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"card brown-top\">\r\n        <h3 id=\"cap-dist-title\"><\/h3>\r\n        <div class=\"param-row\"><span class=\"param-label\">SW (17.5\u201327.5 cm) m\u00b2\/ha<\/span><input type=\"range\" id=\"cap-sw\" min=\"0\" max=\"20\" step=\"0.5\" value=\"4\" oninput=\"updateCapDist()\"><span class=\"param-val\" id=\"cap-sw-val\">4.0<\/span><\/div>\r\n        <div class=\"param-row\"><span class=\"param-label\">MW (27.5\u201347.5 cm) m\u00b2\/ha<\/span><input type=\"range\" id=\"cap-mw\" min=\"0\" max=\"25\" step=\"0.5\" value=\"8\" oninput=\"updateCapDist()\"><span class=\"param-val\" id=\"cap-mw-val\">8.0<\/span><\/div>\r\n        <div class=\"param-row\"><span class=\"param-label\">LW (47.5\u201367.5 cm) m\u00b2\/ha<\/span><input type=\"range\" id=\"cap-lw\" min=\"0\" max=\"30\" step=\"0.5\" value=\"14\" oninput=\"updateCapDist()\"><span class=\"param-val\" id=\"cap-lw-val\">14.0<\/span><\/div>\r\n        <div class=\"param-row\"><span class=\"param-label\">VLW (>67.5 cm) m\u00b2\/ha<\/span><input type=\"range\" id=\"cap-vlw\" min=\"0\" max=\"15\" step=\"0.5\" value=\"6\" oninput=\"updateCapDist()\"><span class=\"param-val\" id=\"cap-vlw-val\">6.0<\/span><\/div>\r\n        <div id=\"cap-dist-bar\" class=\"dist-bar\"><\/div>\r\n        <div class=\"divider\"><\/div>\r\n        <div class=\"grid4\" style=\"margin-bottom:0\">\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"cap-m-ab\"><\/div><div class=\"metric-val\" id=\"cap-abtotal\">32.0<\/div><div class=\"metric-sub\">m\u00b2\/ha<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"cap-m-c\"><\/div><div class=\"metric-val\" id=\"cap-carb\">134.7<\/div><div class=\"metric-sub\">tn C\/ha<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"cap-m-eq\"><\/div><div class=\"metric-val\" id=\"cap-yrseq\">\u2014<\/div><div class=\"metric-sub\" id=\"cap-m-yr\"><\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-label\" id=\"cap-m-vol\"><\/div><div class=\"metric-val\" id=\"cap-voltot\">\u2014<\/div><div class=\"metric-sub\">m\u00b3\/ha<\/div><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"card\" style=\"margin-bottom:1.25rem\">\r\n      <h3 id=\"cap-chart-title\"><\/h3>\r\n      <div class=\"legend-row\">\r\n        <span><span class=\"legend-dot\" style=\"background:#4A7C2F\"><\/span><span id=\"cap-leg-ab\"><\/span><\/span>\r\n        <span style=\"display:flex;align-items:center;gap:4px\"><span style=\"width:18px;border-top:2px dashed #C0392B;display:inline-block\"><\/span><span id=\"cap-leg-sup\"><\/span><\/span>\r\n        <span style=\"display:flex;align-items:center;gap:4px\"><span style=\"width:18px;border-top:2px dashed #8B6335;display:inline-block\"><\/span><span id=\"cap-leg-inf\"><\/span><\/span>\r\n        <span><span class=\"legend-dot\" style=\"background:#C0392B;border-radius:50%\"><\/span><span id=\"cap-leg-init\"><\/span><\/span>\r\n        <span><span class=\"legend-dot\" style=\"background:#D68910;border-radius:50%\"><\/span><span id=\"cap-leg-adv\"><\/span><\/span>\r\n        <span><span class=\"legend-dot\" style=\"background:#1A6B3A;border-radius:50%\"><\/span><span id=\"cap-leg-eq-leg\"><\/span><\/span>\r\n      <\/div>\r\n      <div style=\"position:relative;width:100%;height:300px\">\r\n        <canvas id=\"cap-chart\" role=\"img\" aria-label=\"Evoluci\u00f3n AB capitalizado\">Gr\u00e1fico de transici\u00f3n capitalizado a equilibrio.<\/canvas>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"card brown-top\">\r\n      <h3 id=\"cap-reg-title\"><\/h3>\r\n      <div style=\"display:flex;gap:14px;font-size:11px;color:var(--f-text-sec);margin-bottom:0.5rem;flex-wrap:wrap\">\r\n        <span><span style=\"display:inline-block;width:10px;height:10px;background:rgba(192,57,43,0.15);border-radius:2px;margin-right:4px;vertical-align:middle\"><\/span><span id=\"cap-leg-init-row\"><\/span><\/span>\r\n        <span><span style=\"display:inline-block;width:10px;height:10px;background:rgba(214,137,16,0.15);border-radius:2px;margin-right:4px;vertical-align:middle\"><\/span><span id=\"cap-leg-adv-row\"><\/span><\/span>\r\n        <span><span style=\"display:inline-block;width:10px;height:10px;background:rgba(26,107,58,0.1);border-radius:2px;margin-right:4px;vertical-align:middle\"><\/span><span id=\"cap-leg-eq-row\"><\/span><\/span>\r\n      <\/div>\r\n      <div class=\"table-wrap\">\r\n        <table>\r\n          <thead><tr id=\"cap-thead\"><\/tr><\/thead>\r\n          <tbody id=\"cap-table\"><\/tbody>\r\n        <\/table>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n\r\n<\/div>\r\n\r\n<div style=\"margin-top:2rem;padding-top:1rem;border-top:1px solid var(--f-green-pale);text-align:center\">\r\n  <a href=\"https:\/\/selviaula.com\/\" target=\"_blank\" rel=\"noopener noreferrer\"\r\n     style=\"font-size:13px;color:var(--f-green-mid);text-decoration:none;display:inline-flex;align-items:center;gap:6px\">\r\n    <span id=\"footer-text\"><\/span>\r\n    <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n      <path d=\"M2 11L11 2M11 2H5M11 2V8\" stroke=\"#4A7C2F\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n    <\/svg>\r\n  <\/a>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.js\"><\/script>\r\n<script>\r\nconst T={\r\n  es:{\r\n    title:'Simulador CNS \u2014 Close-to-Nature Silviculture',subtitle:'Modelizaci\u00f3n de \u00e1rea basim\u00e9trica \u2014 Haya (Fagus sylvatica)',\r\n    life_eu_logo:'https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/es_life_co-founded_by_the_UE.png',\r\n    life_eu_logo_alt:'Cofinanciado por la Uni\u00f3n Europea',\r\n    tab_instr:'Instrucciones',\r\n    i_what_title:'\u00bfQu\u00e9 es este simulador?',\r\n    i_what_p1:'Esta herramienta modela la evoluci\u00f3n del \u00e1rea basim\u00e9trica (AB) de un rodal de haya (Fagus sylvatica) bajo los principios de la silvicultura de cubierta continua (CNS), tambi\u00e9n conocida como Close-to-Nature Silviculture.',\r\n    i_what_p2:'El modelo simula a\u00f1o a a\u00f1o el crecimiento del rodal y aplica cortas autom\u00e1ticas seg\u00fan los par\u00e1metros definidos, manteniendo el bosque dentro de los rangos de equilibrio biol\u00f3gico y econ\u00f3mico establecidos para la especie.',\r\n    i_note:'Nota metodol\u00f3gica: se trata de un simulador simplificado de apoyo a la decisi\u00f3n. No predice con precisi\u00f3n la din\u00e1mica real del rodal; representa escenarios a partir de AB, crecimiento anual constante, umbrales de referencia y reglas de intervenci\u00f3n.',\r\n    i_what_p3:'La herramienta tiene dos m\u00f3dulos: M\u00f3dulo 1 \u2014 Situaci\u00f3n de equilibrio (rodal ya dentro del rango \u00f3ptimo, corta autom\u00e1tica al superar el l\u00edmite) y M\u00f3dulo 2 \u2014 Capitalizaci\u00f3n \u2192 Equilibrio (rodal con exceso de madera, usa la metodolog\u00eda Pa\/R para planificar la transici\u00f3n en un n\u00famero de a\u00f1os definido por el gestor).',\r\n    i_how_title:'C\u00f3mo usar la app',\r\n    i_s1:'Selecciona el m\u00f3dulo en las pesta\u00f1as superiores',\r\n    i_s2:'Ajusta los par\u00e1metros de entrada con los sliders seg\u00fan las caracter\u00edsticas reales del rodal',\r\n    i_s3:'El gr\u00e1fico se actualiza en tiempo real mostrando la evoluci\u00f3n del AB durante el horizonte seleccionado',\r\n    i_s4:'Las m\u00e9tricas resumen el ciclo de corta, el volumen extra\u00eddo y el n\u00famero de intervenciones',\r\n    i_s5:'La tabla inferior detalla cada corta con su a\u00f1o, AB extra\u00edda y volumen',\r\n    i_logic_title:'L\u00f3gica del modelo CNS',\r\n    i_mod1_title:'M\u00f3dulo 1 \u2014 Situaci\u00f3n de equilibrio',\r\n    i_mod1_p1:'Se parte de un rodal cuyo AB se encuentra dentro del rango de equilibrio de la especie (14\u201321 m\u00b2\/ha para haya). El modelo crece el rodal cada a\u00f1o de forma proporcional entre los grupos diam\u00e9tricos.',\r\n    i_mod1_p2:'Cuando el AB supera el l\u00edmite superior, se aplica autom\u00e1ticamente la corta con el porcentaje indicado, devolviendo el rodal al rango de equilibrio.',\r\n    i_mod1_tip:'El porcentaje de corta recomendado es \u2264 20%. Porcentajes m\u00e1s altos pueden desestabilizar la estructura del rodal.',\r\n    i_mod2_title:'M\u00f3dulo 2 \u2014 Capitalizaci\u00f3n \u2192 Equilibrio',\r\n    i_mod2_p1:'Se parte de un rodal capitalizado (AB superior al l\u00edmite de la especie). El modelo usa la metodolog\u00eda Pa\/R basada en dos f\u00f3rmulas: Pa = Acc + (Ci\u2212Cn)\/n calcula la tala anual necesaria para alcanzar el equilibrio en n a\u00f1os; R = P\/Pa calcula la rotaci\u00f3n (a\u00f1os entre cortas) seg\u00fan el porcentaje de corta elegido. Hay tres fases seg\u00fan la calidad de la madera:',\r\n    i_cut_init:'Fase inicial (3 primeras cortas)',i_cut_init_d:'Madera de baja calidad \u2014 extraer m\u00e1s (25-30%). R fijo calculado con el AB inicial.',\r\n    i_cut_adv:'Fase avanzada',i_cut_adv_d:'Madera de calidad intermedia \u2014 reducir intensidad (20-25%). R din\u00e1mico recalculado en cada corta.',\r\n    i_cut_eq:'Fase equilibrio',i_cut_eq_d:'Madera de alta calidad \u2014 intervenci\u00f3n m\u00ednima (\u226420%). Una vez en el rango de equilibrio, el modelo funciona igual que el M\u00f3dulo 1.',\r\n    i_cut_none:'Sin corta',i_cut_none_d:'AB dentro del rango de equilibrio \u2014 solo crecimiento.',\r\n    i_glos_title:'Glosario de t\u00e9rminos',\r\n    g_ab_t:'AB \u2014 \u00c1rea basim\u00e9trica (m\u00b2\/ha)',g_ab_d:'Suma de las secciones transversales de todos los \u00e1rboles con dbh > 17.5 cm a 1.3 m de altura, expresada por hect\u00e1rea.',\r\n    g_h0_t:'H\u2080 \u2014 Altura dominante (m)',g_h0_d:'Altura media de los 100 \u00e1rboles m\u00e1s gruesos por hect\u00e1rea. Se usa para determinar el factor de forma y estimar el volumen de madera.',\r\n    g_ff_t:'Factor de forma (m\u00b3\/m\u00b2)',g_ff_d:'Coeficiente que convierte el AB en volumen de madera (m\u00b3\/ha). Para haya a H\u2080 = 20 m, el valor es 9.4 m\u00b3\/m\u00b2.',\r\n    g_c_t:'Carbono (tn C\/ha)',g_c_d:'Carbono fijado estimado en la biomasa del rodal. Para haya el factor es 4.208 tn C\/ha por m\u00b2 de AB.',\r\n    g_diam_t:'Grupos diam\u00e9tricos',g_diam_d:'Clasificaci\u00f3n de los \u00e1rboles seg\u00fan su di\u00e1metro normal (dbh) a 1.3 m:',\r\n    g_sw:'Madera peque\u00f1a: 17.5\u201327.5 cm',g_mw:'Madera media: 27.5\u201347.5 cm',g_lw:'Madera grande: 47.5\u201367.5 cm',g_vlw:'Madera muy grande: > 67.5 cm',\r\n    g_dist_t:'Distribuci\u00f3n diam\u00e9trica objetivo',g_dist_d:'En equilibrio CNS para haya: SW 16.7% \u00b7 MW 33.3% \u00b7 LW 33.3% \u00b7 VLW 16.7%.',\r\n    g_lim_t:'L\u00edmites de AB para haya',g_lim_d:'L\u00edmite superior: 21 m\u00b2\/ha \u2014 por encima se aplica corta. L\u00edmite inferior: 14 m\u00b2\/ha \u2014 por debajo el rodal est\u00e1 sub-densificado.',\r\n    species_name:'Haya',\r\n    p_params:'Par\u00e1metros de entrada',p_species:'Especie',p_h0:'Altura dominante H\u2080 (m)',p_ab0:'AB inicial (m\u00b2\/ha)',p_growth:'Crecimiento anual (m\u00b2\/ha\/a\u00f1o)',p_pct:'Porcentaje de corta (%)',\r\n    p_years:'Horizonte de simulaci\u00f3n (a\u00f1os)',p_range:'Rango especie',p_ff:'Factor forma',p_limsup:'L\u00edm. superior',\r\n    p_cut1:'% corta inicial (3 primeras, madera baja calidad)',p_cut2:'% corta avanzada (calidad intermedia)',p_cut3:'% corta equilibrio (alta calidad, \u226420%)',\r\n    cap_p_n:'A\u00f1os de transici\u00f3n hasta equilibrio (n)',cap_int_title:'% de corta por fase (determina R)',cap_int_info:'Mayor % \u2192 m\u00e1s extracci\u00f3n por corta \u2192 m\u00e1s a\u00f1os entre intervenciones (R mayor)',cap_pa_lbl:'Pa = Acc + (Ci\u2212Cn)\/n \u2014 tala anual necesaria',cap_r_lbl:'R = P\/Pa \u2014 rotaci\u00f3n (a\u00f1os entre cortas) por fase',sit_cut:'Corta',sit_adv:'Transici\u00f3n avanzada',sit_init:'Transici\u00f3n inicial',sit_growth:'Crecimiento',sit_eq_auto:'Equilibrio \u2014 corta autom\u00e1tica',sit_eq_growth:'Equilibrio \u2014 crecimiento',\r\n    dist_title:'Distribuci\u00f3n diam\u00e9trica objetivo',dist_info:'Distribuci\u00f3n \u00f3ptima en equilibrio (Close-to-Nature)',\r\n    cycle_title:'M\u00e9tricas del ciclo (60 a\u00f1os)',cap_init_dist:'Distribuci\u00f3n diam\u00e9trica inicial del rodal',\r\n    chart_eq_title:'Evoluci\u00f3n del \u00e1rea basim\u00e9trica (60 a\u00f1os)',chart_cap_title:'Evoluci\u00f3n del \u00e1rea basim\u00e9trica \u2014 transici\u00f3n (60 a\u00f1os)',\r\n    reg_eq_title:'Registro anual',leg_cut_row:'A\u00f1o de corta',reg_cap_title:'Registro anual',leg_init_row:'Corta inicial',leg_adv_row:'Corta avanzada',leg_eq_row:'Corta equilibrio',leg_rest_row:'Descanso post-corta',\r\n    m_cycle:'Ciclo',m_years:'a\u00f1os',m_abcut:'AB\/corta',m_vol:'Volumen',m_cuts:'Cortas',m_in60:'en 60 a\u00f1os',m_carbon:'Carbono actual',m_carbon_cut:'C fijado\/corta',m_cut_unit:'corta',\r\n    m_ab:'AB total',m_carbon:'Carbono',m_eq:'1er equilibrio',m_yr:'a\u00f1o',m_voltot:'Vol. extra\u00eddo',\r\n    leg_ab:'AB total',leg_sup:'L\u00edmite superior',leg_inf:'L\u00edmite inferior',leg_cut:'Corta',\r\n    leg_init:'Corta inicial',leg_adv:'Corta avanzada',leg_eq:'Corta equilibrio',\r\n    th_yr:'A\u00f1o',th_carbon_eq:'Carbono (tn C\/ha)',th_ab_b:'AB antes (m&sup2;\/ha)',th_ab_c:'AB extra&iacute;da (m&sup2;\/ha)',th_ab_a:'AB despu&eacute;s (m&sup2;\/ha)',th_pct:'% extra\u00eddo',th_vol:'Volumen (m&sup3;\/ha)',th_vol_ste:'V. estereo (m&sup3;\/ha)',\r\n    th_pa:'Pa (m&sup2;\/ha\/a\u00f1o)',th_r:'R (a\u00f1os)',th_carbon:'Carbono (tn C\/ha)',th_sit:'Situaci&oacute;n',th_ab_t:'AB total (m&sup2;\/ha)',leg_grow_row:'Crecimiento',leg_cut_cap:'Corta (Pa)',\r\n    st_eq:'\u2713 En equilibrio',st_cap:'\u2713 Capitalizado',st_low:'\u26a0 Por debajo del m\u00ednimo',st_ncap:'\u26a0 No capitalizado',\r\n    sit_init:'Transici\u00f3n inicial',sit_mod:'Transici\u00f3n moderada',sit_adv:'Transici\u00f3n avanzada',sit_rest:'Descanso post-corta',sit_eq:'Crecimiento',\r\n\r\n    \/\/ Tabs renombrados\r\n    tab_sub:'M\u00f3dulo 1 \u2014 Subcapitalizado',\r\n    tab_eq:'M\u00f3dulo 2 \u2014 Equilibrio',\r\n    tab_cap:'M\u00f3dulo 3 \u2014 Capitalizado',\r\n    \/\/ Selector de situaci\u00f3n\r\n    i_sel_title:'\u00bfEn qu\u00e9 situaci\u00f3n est\u00e1 tu rodal?',\r\n    i_sel_desc:'Elige la situaci\u00f3n que mejor describe el estado actual de tu rodal para acceder directamente al m\u00f3dulo de simulaci\u00f3n adecuado.',\r\n    sel_m1_title:'Subcapitalizado',\r\n    sel_m1_desc:'El rodal tiene poco arbolado o est\u00e1 en recuperaci\u00f3n. AB por debajo del umbral m\u00ednimo. Solo crecimiento, sin extracciones.',\r\n    sel_m1_range:'AB < 14 m\u00b2\/ha',\r\n    sel_m2_title:'En equilibrio',\r\n    sel_m2_desc:'El rodal ya est\u00e1 en el rango \u00f3ptimo. El crecimiento anual supera el l\u00edmite superior y se aplica una corta autom\u00e1tica.',\r\n    sel_m2_range:'14 \u2264 AB \u2264 21 m\u00b2\/ha',\r\n    sel_m3_title:'Capitalizado',\r\n    sel_m3_desc:'El rodal tiene exceso de madera. Se planifica una transici\u00f3n gradual hacia el equilibrio mediante la metodolog\u00eda Pa\/R.',\r\n    sel_m3_range:'AB > 21 m\u00b2\/ha',\r\n    \/\/ Instrucciones \u2014 What\r\n\r\n    \/\/ Logic module labels (new keys)\r\n    i_m1_title:'M\u00f3dulo 1 \u2014 Subcapitalizaci\u00f3n \u2192 Equilibrio',\r\n    i_m1_p1:'El rodal est\u00e1 por debajo del l\u00edmite inferior de la especie (AB < 14 m\u00b2\/ha). La \u00fanica actuaci\u00f3n es dejar crecer el rodal sin ning\u00fan tipo de intervenci\u00f3n o extracci\u00f3n. El simulador calcula cu\u00e1ntos a\u00f1os se necesitan para alcanzar el l\u00edmite inferior (14 m\u00b2\/ha) y el l\u00edmite superior del rango de equilibrio (21 m\u00b2\/ha) con el crecimiento anual indicado.',\r\n    i_m1_tip:'No se aplica ninguna corta durante la fase de recuperaci\u00f3n. Al superar 21 m\u00b2\/ha, se activa la l\u00f3gica de mantenimiento en equilibrio.',\r\n    i_m2_title:'M\u00f3dulo 2 \u2014 Situaci\u00f3n de Equilibrio',\r\n    i_m2_p1:'El rodal ya est\u00e1 dentro del rango \u00f3ptimo (14\u201321 m\u00b2\/ha). Cada a\u00f1o crece con la tasa Acc indicada. Cuando supera 21 m\u00b2\/ha, se aplica autom\u00e1ticamente una corta con el porcentaje elegido, devolviendo el rodal al rango de equilibrio. El simulador muestra la evoluci\u00f3n a\u00f1o a a\u00f1o y el ciclo de corta resultante.',\r\n    i_m2_tip:'Porcentaje de corta recomendado \u2264 20%. Valores mayores pueden desestabilizar la estructura diam\u00e9trica del rodal.',\r\n    i_m3_title:'M\u00f3dulo 3 \u2014 Capitalizaci\u00f3n \u2192 Equilibrio',\r\n    i_m3_p1:'El rodal tiene m\u00e1s madera de la \u00f3ptima (AB > 21 m\u00b2\/ha). Se usa la metodolog\u00eda Pa\/R para planificar la transici\u00f3n: Pa = Acc + (Ci\u2212Cn)\/n calcula la tala anual necesaria; R = P\/Pa calcula la rotaci\u00f3n (a\u00f1os entre cortas). Hay tres fases seg\u00fan la calidad de la madera extra\u00edda:',\r\n    i_cut_init_full:'Corta inicial (3 primeras): madera de menor calidad \u2014 intensidad mayor (25\u201330%)',\r\n    i_cut_adv_full:'Corta avanzada: madera de calidad intermedia \u2014 intensidad moderada (20\u201325%)',\r\n    i_cut_eq_full:'Corta de equilibrio: madera de alta calidad \u2014 intensidad m\u00ednima (\u226420%)',\r\n    \/\/ Sub module new metric\r\n    sub_m_yreq:'A\u00f1os hasta l\u00edmite inferior',\r\n    sub_m_yreq2:'A\u00f1os hasta l\u00edmite superior',\r\n    sep_eq_label:'\u2b07 INICIO FASE DE EQUILIBRIO',\r\n\r\n    i_mod3_title:'M\\u00f3dulo 3 \\u2014 Subcapitalizaci\\u00f3n \\u2192 Equilibrio',\r\n    i_mod3_p1:'Se parte de un rodal subdenso cuyo AB est\\u00e1 por debajo del l\\u00edmite inferior de la especie (< 14 m\\u00b2\/ha para haya). El objetivo es dejar crecer el rodal hasta alcanzar el rango de equilibrio. Durante esta fase no se programan cortas; solo se representa el crecimiento hasta alcanzar los umbrales de referencia.',\r\n    sub_p_params:'Par\\u00e1metros de entrada',sub_p_species:'Especie',sub_p_h0:'Altura dominante H\\u2080 (m)',\r\n    sub_p_ab0:'AB inicial (m\\u00b2\/ha)',sub_p_growth:'Crecimiento anual (m\\u00b2\/ha\/a\\u00f1o)',\r\n    sub_p_pct:'Sin cortas en fase subcapitalizada',sub_p_years:'Horizonte de simulaci\\u00f3n (a\\u00f1os)',\r\n    sub_p_range:'L\\u00edm. inferior',sub_p_ff:'Factor forma',\r\n    sub_info:'El rodal est\\u00e1 por debajo del umbral m\\u00ednimo. Se recomienda no cortar hasta alcanzar AB \\u2265 14 m\\u00b2\/ha.',\r\n    sub_info_cut:'No se aplican cortas durante la fase subcapitalizada.',\r\n    sub_metrics_title:'M\\u00e9tricas de recuperaci\\u00f3n',\r\n    sub_m_yreq:'A\u00f1os hasta l\u00edmite inferior',sub_m_deficit:'D\\u00e9ficit AB',\r\n    sub_m_carbon:'Carbono actual',sub_m_ff:'Factor forma',\r\n    sub_m_yr:'a\\u00f1o estimado',sub_progress_title:'Progreso de recuperaci\\u00f3n',\r\n    sub_bar_lo:'AB actual',sub_bar_hi:'L\u00edmite inferior (14 m\\u00b2\/ha)',\r\n    sub_chart_title:'Evoluci\\u00f3n del \\u00e1rea basim\\u00e9trica \\u2014 recuperaci\\u00f3n',\r\n    sub_leg_ab:'AB (m\\u00b2\/ha)',sub_leg_sup:'L\\u00edm. superior (21)',sub_leg_inf:'L\\u00edm. inferior (14)',\r\n    sub_leg_lim:'Alcanza l\\u00edm. inferior',sub_leg_eq:'Alcanza l\u00edmite superior',\r\n    sub_reg_title:'Registro anual',\r\n    sub_leg_lim_row:'Cruza l\\u00edmite inferior (14 m\\u00b2\/ha)',\r\n    sub_leg_eq_row:'Cruza l\\u00edmite superior (21 m\u00b2\/ha)',\r\n    sub_leg_cut_row:'Corta autom\u00e1tica al superar 21 m\u00b2\/ha',\r\n    sub_st:'\\u26a0 Subcapitalizado \\u2014 por debajo del m\\u00ednimo',\r\n    sub_sep_lim:'\\u2193 ALCANZA L\\u00cdMITE INFERIOR (14 m\\u00b2\/ha)',\r\n    sub_sep_eq:'\\u2193 ALCANZA L\\u00cdMITE SUPERIOR DEL RANGO DE EQUILIBRIO (21 m\\u00b2\/ha)',\r\n    sub_sit_growth:'Crecimiento',sub_sit_cut:'Corta autom\u00e1tica',\r\n    sub_sit_lim:'Cruza l\\u00edm. inf.',sub_sit_eq:'Cruza l\\u00edm. sup.',\r\n    th_sub_yr:'A\\u00f1o',th_sub_sit:'Situaci\\u00f3n',th_sub_ab:'AB (m\\u00b2\/ha)',\r\n    th_sub_ext:'AB extra\\u00edda (m\\u00b2\/ha)',th_sub_pct:'%',\r\n    th_sub_carbon:'Carbono (tn C\/ha)',th_sub_vol:'Volumen (m\\u00b3\/ha)',th_sub_deficit:'D\\u00e9ficit (m\\u00b2\/ha)',\r\n    yr_axis:'A\u00f1o',p_years:'Horizonte de simulaci\u00f3n (a\u00f1os)',footer:'Para saber m\u00e1s visita la web de Selviaula'\r\n  },\r\n  en:{\r\n    title:'CNS Simulator \u2014 Close-to-Nature Silviculture',subtitle:'Basal area modelling \u2014 Beech (Fagus sylvatica)',\r\n    life_eu_logo:'https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/en_life_co-founded_by_the_UE.png',\r\n    life_eu_logo_alt:'Co-funded by the European Union',\r\n    tab_instr:'Instructions',\r\n    i_what_title:'What is this simulator?',\r\n    i_what_p1:'This tool models the evolution of the basal area (BA) of a beech (Fagus sylvatica) stand under the principles of Close-to-Nature Silviculture (CNS), also known as continuous cover forestry.',\r\n    i_what_p2:'The model simulates year-by-year stand growth and automatically applies thinnings based on the defined parameters, keeping the forest within the biological and economic equilibrium range for the species.',\r\n    i_note:'Methodological note: this is a simplified decision-support simulator. It does not precisely predict real stand dynamics; it represents scenarios based on BA, constant annual growth, reference thresholds and intervention rules.',\r\n    i_what_p3:'The tool has two modules: Module 1 \u2014 Equilibrium state (stand already within the optimal range, automatic thinning when the upper limit is exceeded) and Module 2 \u2014 Capitalisation \u2192 Equilibrium (stand with excess timber, uses the Pa\/R methodology to plan the transition over a number of years defined by the manager).',\r\n    i_how_title:'How to use the app',\r\n    i_s1:'Select the module using the tabs above',\r\n    i_s2:'Adjust the input parameters using the sliders according to the real stand characteristics',\r\n    i_s3:'The chart updates in real time showing BA evolution over the selected horizon',\r\n    i_s4:'The metrics summarise the cutting cycle, extracted volume and number of interventions',\r\n    i_s5:'The table below details each cut with its year, extracted BA and volume',\r\n    i_logic_title:'CNS model logic',\r\n    i_mod1_title:'Module 1 \u2014 Equilibrium state',\r\n    i_mod1_p1:'Starting from a stand whose BA is within the species equilibrium range (14\u201321 m\u00b2\/ha for beech). The model grows the stand each year proportionally across diameter groups.',\r\n    i_mod1_p2:'When BA exceeds the upper limit, the thinning is automatically applied at the indicated percentage, returning the stand to the equilibrium range.',\r\n    i_mod1_tip:'Recommended thinning percentage is \u2264 20%. Higher percentages may destabilise stand structure.',\r\n    i_mod2_title:'Module 2 \u2014 Capitalisation \u2192 Equilibrium',\r\n    i_mod2_p1:'Starting from a capitalised stand (BA above the species upper limit). The model uses the Pa\/R methodology based on two formulas: Pa = Acc + (Ci\u2212Cn)\/n calculates the annual thinning needed to reach equilibrium in n years; R = P\/Pa calculates the rotation (years between thinnings) based on the chosen thinning percentage. There are three phases based on timber quality:',\r\n    i_cut_init:'Initial phase (first 3 thinnings)',i_cut_init_d:'Low quality timber \u2014 extract more (25-30%). Fixed R calculated with initial BA.',\r\n    i_cut_adv:'Advanced phase',i_cut_adv_d:'Intermediate quality timber \u2014 reduce intensity (20-25%). Dynamic R recalculated at each thinning.',\r\n    i_cut_eq:'Equilibrium phase',i_cut_eq_d:'High quality timber \u2014 minimum intervention (\u226420%). Once in equilibrium range, the model works exactly like Module 1.',\r\n    i_cut_none:'No thinning',i_cut_none_d:'BA within equilibrium range \u2014 growth only.',\r\n    i_glos_title:'Glossary',\r\n    g_ab_t:'BA \u2014 Basal area (m\u00b2\/ha)',g_ab_d:'Sum of the cross-sectional areas of all trees with dbh > 17.5 cm at 1.3 m height, expressed per hectare.',\r\n    g_h0_t:'H\u2080 \u2014 Dominant height (m)',g_h0_d:'Mean height of the 100 thickest trees per hectare. Used to determine the form factor and estimate timber volume.',\r\n    g_ff_t:'Form factor (m\u00b3\/m\u00b2)',g_ff_d:'Coefficient converting BA to timber volume (m\u00b3\/ha). For beech at H\u2080 = 20 m: 9.4 m\u00b3\/m\u00b2.',\r\n    g_c_t:'Carbon (tn C\/ha)',g_c_d:'Estimated carbon fixed in stand biomass. For beech the factor is 4.208 tn C\/ha per m\u00b2 of BA.',\r\n    g_diam_t:'Diameter groups',g_diam_d:'Classification of trees by normal diameter (dbh) at 1.3 m:',\r\n    g_sw:'Small wood: 17.5\u201327.5 cm',g_mw:'Medium wood: 27.5\u201347.5 cm',g_lw:'Large wood: 47.5\u201367.5 cm',g_vlw:'Very large wood: > 67.5 cm',\r\n    g_dist_t:'Target diameter distribution',g_dist_d:'CNS equilibrium for beech: SW 16.7% \u00b7 MW 33.3% \u00b7 LW 33.3% \u00b7 VLW 16.7%.',\r\n    g_lim_t:'BA limits for beech',g_lim_d:'Upper limit: 21 m\u00b2\/ha \u2014 above this thinning is applied. Lower limit: 14 m\u00b2\/ha \u2014 below this the stand is under-stocked.',\r\n    species_name:'Beech',\r\n    p_params:'Input parameters',p_species:'Species',p_h0:'Dominant height H\u2080 (m)',p_ab0:'Initial BA (m\u00b2\/ha)',p_growth:'Annual growth (m\u00b2\/ha\/yr)',p_pct:'Thinning percentage (%)',\r\n    p_years:'Simulation horizon (years)',p_range:'Species range',p_ff:'Form factor',p_limsup:'Upper limit',\r\n    p_cut1:'% initial thinning (first 3, low quality timber)',p_cut2:'% advanced thinning (intermediate quality)',p_cut3:'% equilibrium thinning (high quality, \u226420%)',\r\n    cap_p_n:'Transition years to equilibrium (n)',cap_int_title:'Thinning % by phase (determines R)',cap_int_info:'Higher % \u2192 more extraction per thinning \u2192 more years between interventions (higher R)',cap_pa_lbl:'Pa = Acc + (Ci\u2212Cn)\/n \u2014 annual thinning needed',cap_r_lbl:'R = P\/Pa \u2014 rotation (years between thinnings) by phase',sit_cut:'Thinning',sit_adv:'Advanced transition',sit_init:'Initial transition',sit_growth:'Growth',sit_eq_auto:'Equilibrium \u2014 automatic thinning',sit_eq_growth:'Equilibrium \u2014 growth',\r\n    dist_title:'Target diameter distribution',dist_info:'Optimal distribution at equilibrium (Close-to-Nature)',\r\n    cycle_title:'Cycle metrics (60 years)',cap_init_dist:'Initial stand diameter distribution',\r\n    chart_eq_title:'Basal area evolution (60 years)',chart_cap_title:'Basal area evolution \u2014 transition (60 years)',\r\n    reg_eq_title:'Annual register',leg_cut_row:'Thinning year',reg_cap_title:'Annual register',leg_init_row:'Initial thinning',leg_adv_row:'Advanced thinning',leg_eq_row:'Equilibrium thinning',leg_rest_row:'Post-thinning rest',\r\n    m_cycle:'Cycle',m_years:'years',m_abcut:'BA\/cut',m_vol:'Volume',m_cuts:'Cuts',m_in60:'in 60 yrs',m_carbon:'Current carbon',m_carbon_cut:'C fixed\/cut',m_cut_unit:'cut',\r\n    m_ab:'Total BA',m_carbon:'Carbon',m_eq:'1st equilib.',m_yr:'year',m_voltot:'Extracted vol.',\r\n    leg_ab:'Total BA',leg_sup:'Upper limit',leg_inf:'Lower limit',leg_cut:'Thinning',\r\n    leg_init:'Initial thinning',leg_adv:'Advanced thinning',leg_eq:'Equilibrium thinning',\r\n    th_yr:'Year',th_carbon_eq:'Carbon (tn C\/ha)',th_ab_b:'BA before (m&sup2;\/ha)',th_ab_c:'BA extracted (m&sup2;\/ha)',th_ab_a:'BA after (m&sup2;\/ha)',th_pct:'% extracted',th_vol:'Volume (m&sup3;\/ha)',th_vol_ste:'Stereo vol. (m&sup3;\/ha)',\r\n    th_pa:'Pa (m&sup2;\/ha\/yr)',th_r:'R (years)',th_carbon:'Carbon (tn C\/ha)',th_sit:'Situation',th_ab_t:'Total BA (m&sup2;\/ha)',leg_grow_row:'Growth',leg_cut_cap:'Thinning (Pa)',\r\n    st_eq:'\u2713 In equilibrium',st_cap:'\u2713 Capitalised',st_low:'\u26a0 Below minimum',st_ncap:'\u26a0 Not capitalised',\r\n    sit_init:'Initial thinning',sit_mod:'Moderate thinning',sit_adv:'Advanced thinning',sit_rest:'Post-thinning rest',sit_eq:'Growth',\r\n\r\n    tab_sub:'Module 1 \u2014 Undercapitalised',\r\n    tab_eq:'Module 2 \u2014 Equilibrium',\r\n    tab_cap:'Module 3 \u2014 Capitalised',\r\n    i_sel_title:'What is the current state of your stand?',\r\n    i_sel_desc:'Choose the situation that best describes your stand to access the appropriate simulation module directly.',\r\n    sel_m1_title:'Undercapitalised',\r\n    sel_m1_desc:'The stand has little timber or is recovering. BA below the minimum threshold. Growth only, no extractions.',\r\n    sel_m1_range:'BA < 14 m\u00b2\/ha',\r\n    sel_m2_title:'At equilibrium',\r\n    sel_m2_desc:'The stand is already in the optimal range. Annual growth exceeds the upper limit and an automatic thinning is applied.',\r\n    sel_m2_range:'14 \u2264 BA \u2264 21 m\u00b2\/ha',\r\n    sel_m3_title:'Capitalised',\r\n    sel_m3_desc:'The stand has excess timber. A gradual transition towards equilibrium is planned using the Pa\/R methodology.',\r\n    sel_m3_range:'BA > 21 m\u00b2\/ha',\r\n\r\n    i_m1_title:'Module 1 \u2014 Undercapitalisation \u2192 Equilibrium',\r\n    i_m1_p1:'The stand is below the species lower limit (BA < 14 m\u00b2\/ha). The only action is to let the stand grow with no intervention or extraction of any kind. The simulator calculates how many years are needed to reach the lower limit (14 m\u00b2\/ha) and the upper limit of the equilibrium range (21 m\u00b2\/ha) at the indicated annual growth rate.',\r\n    i_m1_tip:'No thinning is applied during the recovery phase. When BA exceeds 21 m\u00b2\/ha, the equilibrium maintenance logic is activated.',\r\n    i_m2_title:'Module 2 \u2014 Equilibrium State',\r\n    i_m2_p1:'The stand is already within the optimal range (14\u201321 m\u00b2\/ha). It grows each year at the indicated Acc rate. When BA exceeds 21 m\u00b2\/ha, a thinning is automatically applied at the chosen percentage, returning the stand to equilibrium. The simulator shows year-by-year evolution and the resulting cutting cycle.',\r\n    i_m2_tip:'Recommended thinning percentage \u2264 20%. Higher values may destabilise the diameter structure of the stand.',\r\n    i_m3_title:'Module 3 \u2014 Capitalisation \u2192 Equilibrium',\r\n    i_m3_p1:'The stand has more timber than optimal (BA > 21 m\u00b2\/ha). The Pa\/R methodology is used: Pa = Acc + (Ci\u2212Cn)\/n calculates the annual thinning needed; R = P\/Pa calculates the rotation (years between thinnings). Three phases based on extracted timber quality:',\r\n    i_cut_init_full:'Initial thinning (first 3): lower quality timber \u2014 higher intensity (25\u201330%)',\r\n    i_cut_adv_full:'Advanced thinning: intermediate quality timber \u2014 moderate intensity (20\u201325%)',\r\n    i_cut_eq_full:'Equilibrium thinning: high quality timber \u2014 minimum intensity (\u226420%)',\r\n    sub_m_yreq:'Years to lower limit',\r\n    sub_m_yreq2:'Years to upper limit',\r\n    sep_eq_label:'\u2b07 EQUILIBRIUM PHASE BEGINS',\r\n\r\n    i_mod3_title:'Module 3 \\u2014 Undercapitalisation \\u2192 Equilibrium',\r\n    i_mod3_p1:'Starting from an understocked stand whose BA is below the species lower limit (< 14 m\\u00b2\/ha for beech). The aim is to let the stand grow until it reaches the equilibrium range. No thinnings are scheduled during this phase; the model only represents growth until the reference thresholds are reached.',\r\n    sub_p_params:'Input parameters',sub_p_species:'Species',sub_p_h0:'Dominant height H\\u2080 (m)',\r\n    sub_p_ab0:'Initial BA (m\\u00b2\/ha)',sub_p_growth:'Annual growth (m\\u00b2\/ha\/yr)',\r\n    sub_p_pct:'No thinning in undercapitalised phase',sub_p_years:'Simulation horizon (years)',\r\n    sub_p_range:'Lower limit',sub_p_ff:'Form factor',\r\n    sub_info:'The stand is below the minimum threshold. It is recommended not to thin until BA \\u2265 14 m\\u00b2\/ha.',\r\n    sub_info_cut:'No thinnings are applied during the undercapitalised phase.',\r\n    sub_metrics_title:'Recovery metrics',\r\n    sub_m_yreq:'Years to lower limit',sub_m_deficit:'BA deficit',\r\n    sub_m_carbon:'Current carbon',sub_m_ff:'Form factor',\r\n    sub_m_yr:'estimated year',sub_progress_title:'Recovery progress',\r\n    sub_bar_lo:'Current BA',sub_bar_hi:'Lower limit (14 m\\u00b2\/ha)',\r\n    sub_chart_title:'Basal area evolution \\u2014 recovery',\r\n    sub_leg_ab:'BA (m\\u00b2\/ha)',sub_leg_sup:'Upper limit (21)',sub_leg_inf:'Lower limit (14)',\r\n    sub_leg_lim:'Reaches lower limit',sub_leg_eq:'Reaches upper limit',\r\n    sub_reg_title:'Annual register',\r\n    sub_leg_lim_row:'Crosses lower limit (14 m\\u00b2\/ha)',\r\n    sub_leg_eq_row:'Crosses upper limit (21 m\u00b2\/ha)',\r\n    sub_leg_cut_row:'Automatic thinning above 21 m\u00b2\/ha',\r\n    sub_st:'\\u26a0 Undercapitalised \\u2014 below minimum',\r\n    sub_sep_lim:'\\u2193 REACHES LOWER LIMIT (14 m\\u00b2\/ha)',\r\n    sub_sep_eq:'\\u2193 REACHES THE UPPER LIMIT OF THE EQUILIBRIUM RANGE (21 m\\u00b2\/ha)',\r\n    sub_sit_growth:'Growth',sub_sit_cut:'Automatic thinning',\r\n    sub_sit_lim:'Crosses low. limit',sub_sit_eq:'Crosses upp. limit',\r\n    th_sub_yr:'Year',th_sub_sit:'Phase',th_sub_ab:'BA (m\\u00b2\/ha)',\r\n    th_sub_ext:'BA extracted (m\\u00b2\/ha)',th_sub_pct:'%',\r\n    th_sub_carbon:'Carbon (tn C\/ha)',th_sub_vol:'Volume (m\\u00b3\/ha)',th_sub_deficit:'Deficit (m\\u00b2\/ha)',\r\n    yr_axis:'Year',p_years:'Simulation horizon (years)',footer:'To learn more visit the Selviaula website'\r\n  },\r\n  fr:{\r\n    title:'Simulateur CNS \u2014 Sylviculture \u00e0 couvert continu',subtitle:'Mod\u00e9lisation de la surface terri\u00e8re \u2014 H\u00eatre (Fagus sylvatica)',\r\n    life_eu_logo:'https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/fr_life_co-founded_by_the_UE.png',\r\n    life_eu_logo_alt:'Cofinanc\u00e9 par l\\'Union Europ\u00e9enne',\r\n    tab_instr:'Instructions',\r\n    i_what_title:'Qu\\'est-ce que ce simulateur ?',\r\n    i_what_p1:'Cet outil mod\u00e9lise l\\'\u00e9volution de la surface terri\u00e8re (ST) d\\'un peuplement de h\u00eatre (Fagus sylvatica) selon les principes de la sylviculture \u00e0 couvert continu (CNS).',\r\n    i_what_p2:'Le mod\u00e8le simule ann\u00e9e par ann\u00e9e la croissance du peuplement et applique des \u00e9claircies automatiques selon les param\u00e8tres d\u00e9finis, en maintenant la for\u00eat dans les plages d\\'\u00e9quilibre \u00e9tablies pour l\\'esp\u00e8ce.',\r\n    i_note:'Note m\u00e9thodologique : il s\u2019agit d\u2019un simulateur simplifi\u00e9 d\u2019aide \u00e0 la d\u00e9cision. Il ne pr\u00e9dit pas pr\u00e9cis\u00e9ment la dynamique r\u00e9elle du peuplement ; il repr\u00e9sente des sc\u00e9narios \u00e0 partir de la ST, d\u2019une croissance annuelle constante, de seuils de r\u00e9f\u00e9rence et de r\u00e8gles d\u2019intervention.',\r\n    i_what_p3:'L\\'outil comporte deux modules : Situation d\\'\u00e9quilibre (peuplement dans la plage optimale) et Capitalisation \u2192 \u00c9quilibre (peuplement avec exc\u00e8s de bois amen\u00e9 progressivement \u00e0 l\\'\u00e9quilibre).',\r\n    i_how_title:'Comment utiliser l\\'application',\r\n    i_s1:'S\u00e9lectionner le module dans les onglets sup\u00e9rieurs',\r\n    i_s2:'Ajuster les param\u00e8tres d\\'entr\u00e9e avec les curseurs selon les caract\u00e9ristiques r\u00e9elles du peuplement',\r\n    i_s3:'Le graphique se met \u00e0 jour en temps r\u00e9el montrant l\\'\u00e9volution de la ST sur 60 ans',\r\n    i_s4:'Les m\u00e9triques r\u00e9sument le cycle d\\'\u00e9claircie, le volume extrait et le nombre d\\'interventions',\r\n    i_s5:'Le tableau inf\u00e9rieur d\u00e9taille chaque \u00e9claircie avec son ann\u00e9e, ST extraite et volume',\r\n    i_logic_title:'Logique du mod\u00e8le CNS',\r\n    i_mod1_title:'Module 1 \u2014 Situation d\\'\u00e9quilibre',\r\n    i_mod1_p1:'On part d\\'un peuplement dont la ST se trouve dans la plage d\\'\u00e9quilibre (14\u201321 m\u00b2\/ha pour le h\u00eatre). Le mod\u00e8le fait cro\u00eetre le peuplement chaque ann\u00e9e proportionnellement entre les groupes diam\u00e9triques.',\r\n    i_mod1_p2:'Lorsque la ST d\u00e9passe la limite sup\u00e9rieure, l\\'\u00e9claircie est automatiquement appliqu\u00e9e au pourcentage indiqu\u00e9.',\r\n    i_mod1_tip:'Le pourcentage d\\'\u00e9claircie recommand\u00e9 est \u2264 20%. Des pourcentages plus \u00e9lev\u00e9s peuvent d\u00e9stabiliser la structure du peuplement.',\r\n    i_mod2_title:'Module 2 \u2014 Capitalisation \u2192 \u00c9quilibre',\r\n    i_mod2_p1:'On part d\\'un peuplement capitalis\u00e9 (ST sup\u00e9rieure \u00e0 la limite). Le mod\u00e8le utilise la m\u00e9thodologie Pa\/R bas\u00e9e sur deux formules : Pa = Acc + (Ci\u2212Cn)\/n calcule la coupe annuelle n\u00e9cessaire pour atteindre l\\'\u00e9quilibre en n ans ; R = P\/Pa calcule la rotation (ans entre \u00e9claircies) selon le pourcentage d\\'\u00e9claircie choisi. Il y a trois phases selon la qualit\u00e9 du bois :',\r\n    i_cut_init:'Phase initiale (3 premi\u00e8res \u00e9claircies)',i_cut_init_d:'Bois de faible qualit\u00e9 \u2014 extraire plus (25-30%). R fixe calcul\u00e9 avec la ST initiale.',\r\n    i_cut_adv:'Phase avanc\u00e9e',i_cut_adv_d:'Bois de qualit\u00e9 interm\u00e9diaire \u2014 r\u00e9duire l\\'intensit\u00e9 (20-25%). R dynamique recalcul\u00e9 \u00e0 chaque \u00e9claircie.',\r\n    i_cut_eq:'Phase \u00e9quilibre',i_cut_eq_d:'Bois de haute qualit\u00e9 \u2014 intervention minimale (\u226420%). Une fois dans la plage d\\'\u00e9quilibre, le mod\u00e8le fonctionne comme le Module 1.',\r\n    i_cut_none:'Sans \u00e9claircie',i_cut_none_d:'ST dans la plage d\\'\u00e9quilibre \u2014 croissance seulement.',\r\n    i_glos_title:'Glossaire',\r\n    g_ab_t:'ST \u2014 Surface terri\u00e8re (m\u00b2\/ha)',g_ab_d:'Somme des sections transversales de tous les arbres avec dhp > 17.5 cm \u00e0 1.3 m de hauteur, exprim\u00e9e par hectare.',\r\n    g_h0_t:'H\u2080 \u2014 Hauteur dominante (m)',g_h0_d:'Hauteur moyenne des 100 arbres les plus gros par hectare. Utilis\u00e9e pour d\u00e9terminer le facteur de forme et estimer le volume de bois.',\r\n    g_ff_t:'Facteur de forme (m\u00b3\/m\u00b2)',g_ff_d:'Coefficient convertissant la ST en volume de bois. Pour le h\u00eatre \u00e0 H\u2080 = 20 m : 9.4 m\u00b3\/m\u00b2.',\r\n    g_c_t:'Carbone (tn C\/ha)',g_c_d:'Carbone fix\u00e9 estim\u00e9 dans la biomasse du peuplement. Pour le h\u00eatre : 4.208 tn C\/ha par m\u00b2 de ST.',\r\n    g_diam_t:'Groupes diam\u00e9triques',g_diam_d:'Classification des arbres selon leur diam\u00e8tre normal (dhp) \u00e0 1.3 m :',\r\n    g_sw:'Petit bois : 17.5\u201327.5 cm',g_mw:'Bois moyen : 27.5\u201347.5 cm',g_lw:'Gros bois : 47.5\u201367.5 cm',g_vlw:'Tr\u00e8s gros bois : > 67.5 cm',\r\n    g_dist_t:'Distribution diam\u00e9trique cible',g_dist_d:'\u00c9quilibre CNS pour le h\u00eatre : SW 16.7% \u00b7 MW 33.3% \u00b7 LW 33.3% \u00b7 VLW 16.7%.',\r\n    g_lim_t:'Limites de ST pour le h\u00eatre',g_lim_d:'Limite sup\u00e9rieure : 21 m\u00b2\/ha \u2014 \u00e9claircie appliqu\u00e9e au-dessus. Limite inf\u00e9rieure : 14 m\u00b2\/ha \u2014 peuplement sous-dense en dessous.',\r\n    species_name:'H\u00eatre',\r\n    p_params:'Param\u00e8tres d\\'entr\u00e9e',p_species:'Esp\u00e8ce',p_h0:'Hauteur dominante H\u2080 (m)',p_ab0:'ST initiale (m\u00b2\/ha)',p_growth:'Croissance annuelle (m\u00b2\/ha\/an)',p_pct:'Pourcentage d\\'\u00e9claircie (%)',\r\n    p_years:'Horizon de simulation (ans)',p_range:'Plage esp\u00e8ce',p_ff:'Facteur forme',p_limsup:'Limite sup.',\r\n    p_cut1:'% \u00e9claircie initiale (3 premi\u00e8res, bois basse qualit\u00e9)',p_cut2:'% \u00e9claircie avanc\u00e9e (qualit\u00e9 interm\u00e9diaire)',p_cut3:'% \u00e9claircie \u00e9quilibre (haute qualit\u00e9, \u226420%)',\r\n    cap_p_n:'Ann\\u00e9es de transition vers l\\'\\u00e9quilibre (n)',cap_int_title:'Intensit\\u00e9s d\\'\\u00e9claircie par phase (d\\u00e9termine R)',cap_int_info:'% plus \\u00e9lev\\u00e9 \\u2192 plus d\\'extraction par \\u00e9claircie \\u2192 plus d\\'ann\\u00e9es entre interventions (R plus grand)',cap_pa_lbl:'Pa = Acc + (Ci\\u2212Cn)\/n \\u2014 coupe annuelle n\\u00e9cessaire',cap_r_lbl:'R = P\/Pa \\u2014 rotation (ans entre \\u00e9claircies) par phase',sit_cut:'\\u00c9claircie',sit_adv:'Transition avanc\\u00e9e',sit_init:'Transition initiale',sit_growth:'Croissance',sit_eq_auto:'\\u00c9quilibre \\u2014 \\u00e9claircie automatique',sit_eq_growth:'\\u00c9quilibre \\u2014 croissance',\r\n    dist_title:'Distribution diam\u00e9trique cible',dist_info:'Distribution optimale \u00e0 l\\'\u00e9quilibre (Close-to-Nature)',\r\n    cycle_title:'M\u00e9triques du cycle (60 ans)',cap_init_dist:'Distribution diam\u00e9trique initiale du peuplement',\r\n    chart_eq_title:'\u00c9volution de la surface terri\u00e8re (60 ans)',chart_cap_title:'\u00c9volution de la surface terri\u00e8re \u2014 transition (60 ans)',\r\n    reg_eq_title:'Registre annuel',leg_cut_row:'Ann\\u00e9e d\\u2019\\u00e9claircie',reg_cap_title:'Registre annuel',leg_init_row:'\\u00c9claircie initiale',leg_adv_row:'\\u00c9claircie avanc\\u00e9e',leg_eq_row:'\\u00c9claircie \\u00e9quilibre',leg_rest_row:'Repos post-\\u00e9claircie',\r\n    m_cycle:'Cycle',m_years:'ans',m_abcut:'ST\/\u00e9claircie',m_vol:'Volume',m_cuts:'\u00c9claircies',m_in60:'en 60 ans',m_carbon:'Carbone actuel',m_carbon_cut:'C fix\u00e9\/\u00e9claircie',m_cut_unit:'\u00e9claircie',\r\n    m_ab:'ST totale',m_carbon:'Carbone',m_eq:'1er \u00e9quilib.',m_yr:'ann\u00e9e',m_voltot:'Vol. extrait',\r\n    leg_ab:'ST totale',leg_sup:'Limite sup\u00e9rieure',leg_inf:'Limite inf\u00e9rieure',leg_cut:'\u00c9claircie',\r\n    leg_init:'\u00c9claircie initiale',leg_adv:'\u00c9claircie avanc\u00e9e',leg_eq:'\u00c9claircie \u00e9quilibre',\r\n    th_yr:'Ann\u00e9e',th_carbon_eq:'Carbone (tn C\/ha)',th_ab_b:'ST avant (m&sup2;\/ha)',th_ab_c:'ST extraite (m&sup2;\/ha)',th_ab_a:'ST apr&egrave;s (m&sup2;\/ha)',th_pct:'% extrait',th_vol:'Volume (m&sup3;\/ha)',th_vol_ste:'Vol. st\u00e8re (m&sup3;\/ha)',\r\n    th_pa:'Pa (m&sup2;\/ha\/an)',th_r:'R (ans)',th_carbon:'Carbone (tn C\/ha)',th_sit:'Situation',th_ab_t:'ST totale (m&sup2;\/ha)',leg_grow_row:'Croissance',leg_cut_cap:'\u00c9claircie (Pa)',\r\n    st_eq:'\u2713 En \u00e9quilibre',st_cap:'\u2713 Capitalis\u00e9',st_low:'\u26a0 En dessous du minimum',st_ncap:'\u26a0 Non capitalis\u00e9',\r\n    sit_init:'\u00c9claircie initiale',sit_mod:'\u00c9claircie mod\u00e9r\u00e9e',sit_adv:'\u00c9claircie avanc\u00e9e',sit_rest:'Repos post-\u00e9claircie',sit_eq:'Croissance',\r\n    i_mod3_title:'Module 3 \u2014 Sous-capitalisation \u2192 \u00c9quilibre',\r\n    i_mod3_p1:'On part d\\'un peuplement sous-dense dont la ST est inf\u00e9rieure \u00e0 la limite inf\u00e9rieure (< 14 m\u00b2\/ha pour le h\u00eatre). L\\'objectif est de laisser cro\u00eetre le peuplement jusqu\\'\u00e0 la plage d\\'\u00e9quilibre. Aucune \u00e9claircie n\\'est programm\u00e9e pendant cette phase ; le mod\u00e8le repr\u00e9sente uniquement la croissance jusqu\\'aux seuils de r\u00e9f\u00e9rence.',\r\n    sub_p_params:'Param\u00e8tres d\\'entr\u00e9e',sub_p_species:'Esp\u00e8ce',sub_p_h0:'Hauteur dominante H\u2080 (m)',\r\n    sub_p_ab0:'ST initiale (m\u00b2\/ha)',sub_p_growth:'Croissance annuelle (m\u00b2\/ha\/an)',\r\n    sub_p_pct:'Aucune \u00e9claircie en phase sous-capitalis\u00e9e',sub_p_years:'Horizon de simulation (ans)',\r\n    sub_p_range:'Limite inf.',sub_p_ff:'Facteur forme',\r\n    sub_info:'Le peuplement est sous le seuil minimum. Ne pas \u00e9claircir avant ST \u2265 14 m\u00b2\/ha.',\r\n    sub_info_cut:'Aucune \u00e9claircie n\\'est appliqu\u00e9e pendant la phase sous-capitalis\u00e9e.',\r\n    sub_metrics_title:'M\u00e9triques de r\u00e9cup\u00e9ration',\r\n    sub_m_yreq:'Ans jusqu\\'\u00e0 la limite inf\u00e9rieure',sub_m_deficit:'D\u00e9ficit ST',\r\n    sub_m_carbon:'Carbone actuel',sub_m_ff:'Facteur forme',\r\n    sub_m_yr:'ann\u00e9e estim\u00e9e',sub_progress_title:'Progression de la r\u00e9cup\u00e9ration',\r\n    sub_bar_lo:'ST actuelle',sub_bar_hi:'Limite inf\u00e9rieure (14 m\u00b2\/ha)',\r\n    sub_chart_title:'\u00c9volution ST \u2014 r\u00e9cup\u00e9ration',\r\n    sub_leg_ab:'ST (m\u00b2\/ha)',sub_leg_sup:'Limite sup. (21)',sub_leg_inf:'Limite inf. (14)',\r\n    sub_leg_lim:'Atteint limite inf.',sub_leg_eq:'Atteint limite sup\u00e9rieure',\r\n    sub_reg_title:'Registre annuel',\r\n    sub_leg_lim_row:'Franchit la limite inf\u00e9rieure (14 m\u00b2\/ha)',\r\n    sub_leg_eq_row:'Franchit la limite sup\u00e9rieure (21 m\u00b2\/ha)',\r\n    sub_leg_cut_row:'\u00c9claircie automatique au-dessus de 21 m\u00b2\/ha',\r\n    sub_st:'\u26a0 Sous-capitalis\u00e9 \u2014 en dessous du minimum',\r\n    sub_sep_lim:'\u2193 ATTEINT LA LIMITE INF\u00c9RIEURE (14 m\u00b2\/ha)',\r\n    sub_sep_eq:'\u2193 ATTEINT LA LIMITE SUP\u00c9RIEURE DE LA PLAGE D\\'\u00c9QUILIBRE (21 m\u00b2\/ha)',\r\n    sub_sit_growth:'Croissance',sub_sit_cut:'\u00c9claircie automatique',\r\n    sub_sit_lim:'Franchit lim. inf.',sub_sit_eq:'Franchit lim. sup.',\r\n    th_sub_yr:'Ann\u00e9e',th_sub_sit:'Phase',th_sub_ab:'ST (m\u00b2\/ha)',\r\n    th_sub_ext:'ST extraite (m\u00b2\/ha)',th_sub_pct:'%',\r\n    th_sub_carbon:'Carbone (tn C\/ha)',th_sub_vol:'Volume (m\u00b3\/ha)',th_sub_deficit:'D\u00e9ficit (m\u00b2\/ha)',\r\n\r\n    tab_sub:'Module 1 \u2014 Sous-capitalis\u00e9',\r\n    tab_eq:'Module 2 \u2014 \u00c9quilibre',\r\n    tab_cap:'Module 3 \u2014 Capitalis\u00e9',\r\n    i_sel_title:'Quelle est la situation actuelle de votre peuplement ?',\r\n    i_sel_desc:'Choisissez la situation qui d\u00e9crit le mieux votre peuplement pour acc\u00e9der directement au module de simulation adapt\u00e9.',\r\n    sel_m1_title:'Sous-capitalis\u00e9',\r\n    sel_m1_desc:'Le peuplement a peu de bois ou est en r\u00e9cup\u00e9ration. ST en dessous du seuil minimum. Croissance uniquement, sans extraction.',\r\n    sel_m1_range:'ST < 14 m\u00b2\/ha',\r\n    sel_m2_title:'\u00c0 l\\'\u00e9quilibre',\r\n    sel_m2_desc:'Le peuplement est dans la plage optimale. La croissance annuelle d\u00e9passe la limite sup\u00e9rieure et une \u00e9claircie automatique est appliqu\u00e9e.',\r\n    sel_m2_range:'14 \u2264 ST \u2264 21 m\u00b2\/ha',\r\n    sel_m3_title:'Capitalis\u00e9',\r\n    sel_m3_desc:'Le peuplement a un exc\u00e8s de bois. Une transition graduelle vers l\\'\u00e9quilibre est planifi\u00e9e avec la m\u00e9thodologie Pa\/R.',\r\n    sel_m3_range:'ST > 21 m\u00b2\/ha',\r\n\r\n    i_m1_title:'Module 1 \u2014 Sous-capitalisation \u2192 \u00c9quilibre',\r\n    i_m1_p1:'Le peuplement est en dessous de la limite inf\u00e9rieure (ST < 14 m\u00b2\/ha). La seule action est de laisser cro\u00eetre le peuplement sans aucune intervention ni extraction. Le simulateur calcule le nombre d\\'ann\u00e9es n\u00e9cessaires pour atteindre la limite inf\u00e9rieure (14 m\u00b2\/ha) et la limite sup\u00e9rieure de la plage d\\'\u00e9quilibre (21 m\u00b2\/ha).',\r\n    i_m1_tip:'Aucune \u00e9claircie n\\'est appliqu\u00e9e pendant la phase de r\u00e9cup\u00e9ration. Lorsque la ST d\u00e9passe 21 m\u00b2\/ha, la logique de maintien en \u00e9quilibre est activ\u00e9e.',\r\n    i_m2_title:'Module 2 \u2014 Situation d\\'\u00c9quilibre',\r\n    i_m2_p1:'Le peuplement est d\u00e9j\u00e0 dans la plage optimale (14\u201321 m\u00b2\/ha). Il cro\u00eet chaque ann\u00e9e au taux Acc indiqu\u00e9. Lorsque la ST d\u00e9passe 21 m\u00b2\/ha, une \u00e9claircie automatique est appliqu\u00e9e, ramenant le peuplement \u00e0 l\\'\u00e9quilibre.',\r\n    i_m2_tip:'Pourcentage d\\'\u00e9claircie recommand\u00e9 \u2264 20%. Des valeurs plus \u00e9lev\u00e9es peuvent d\u00e9stabiliser la structure diam\u00e9trique.',\r\n    i_m3_title:'Module 3 \u2014 Capitalisation \u2192 \u00c9quilibre',\r\n    i_m3_p1:'Le peuplement a plus de bois que l\\'optimal (ST > 21 m\u00b2\/ha). La m\u00e9thodologie Pa\/R est utilis\u00e9e : Pa = Acc + (Ci\u2212Cn)\/n calcule la coupe annuelle n\u00e9cessaire ; R = P\/Pa calcule la rotation (ans entre \u00e9claircies). Trois phases selon la qualit\u00e9 du bois extrait :',\r\n    i_cut_init_full:'\u00c9claircie initiale (3 premi\u00e8res) : bois de moindre qualit\u00e9 \u2014 intensit\u00e9 plus \u00e9lev\u00e9e (25\u201330%)',\r\n    i_cut_adv_full:'\u00c9claircie avanc\u00e9e : bois de qualit\u00e9 interm\u00e9diaire \u2014 intensit\u00e9 mod\u00e9r\u00e9e (20\u201325%)',\r\n    i_cut_eq_full:'\u00c9claircie d\\'\u00e9quilibre : bois de haute qualit\u00e9 \u2014 intensit\u00e9 minimale (\u226420%)',\r\n    sub_m_yreq:'Ans jusqu\\'\u00e0 la limite inf\u00e9rieure',\r\n    sub_m_yreq2:'Ans jusqu\\'\u00e0 la limite sup\u00e9rieure',\r\n    sep_eq_label:'\u2b07 D\u00c9BUT PHASE \u00c9QUILIBRE',\r\n    yr_axis:'Ann\u00e9e',p_years:'Horizon de simulation (ans)',footer:'Pour en savoir plus visitez le site de Selviaula'\r\n  }\r\n};\r\n\r\nlet lang='es';\r\n\r\nfunction applyLang(){\r\n  const t=T[lang];\r\n  const set=(id,val)=>{const el=document.getElementById(id);if(el&&val!==undefined)el.textContent=val;};\r\n  set('h-title',t.title);set('h-sub',t.subtitle);\r\n  const lifeEuLogo = document.getElementById('life-eu-logo');\r\n  lifeEuLogo.src = t.life_eu_logo;\r\n  lifeEuLogo.alt = t.life_eu_logo_alt;\r\n  set('tab-instr',t.tab_instr);set('tab-sub',t.tab_sub);set('tab-eq',t.tab_eq);set('tab-cap',t.tab_cap);\r\n  \/\/ Situation selector\r\n  set('i-sel-title',t.i_sel_title);set('i-sel-desc',t.i_sel_desc);\r\n  set('sel-m1-title',t.sel_m1_title);set('sel-m1-desc',t.sel_m1_desc);set('sel-m1-range',t.sel_m1_range);\r\n  set('sel-m2-title',t.sel_m2_title);set('sel-m2-desc',t.sel_m2_desc);set('sel-m2-range',t.sel_m2_range);\r\n  set('sel-m3-title',t.sel_m3_title);set('sel-m3-desc',t.sel_m3_desc);set('sel-m3-range',t.sel_m3_range);\r\n  set('i-what-title',t.i_what_title);set('i-what-p1',t.i_what_p1);set('i-what-p2',t.i_what_p2);set('i-note',t.i_note);\r\n  set('i-how-title',t.i_how_title);set('i-s1',t.i_s1);set('i-s2',t.i_s2);set('i-s3',t.i_s3);set('i-s4',t.i_s4);\r\n  set('i-logic-title',t.i_logic_title);\r\n  set('i-mod1-title',t.i_m1_title);set('i-mod1-p1',t.i_m1_p1);set('i-mod1-tip',t.i_m1_tip);\r\n  set('i-mod2-title',t.i_m2_title);set('i-mod2-p1',t.i_m2_p1);set('i-mod2-tip',t.i_m2_tip);\r\n  set('i-mod3-title',t.i_m3_title);set('i-mod3-p1',t.i_m3_p1);\r\n  set('i-cut-init',t.i_cut_init_full);set('i-cut-adv',t.i_cut_adv_full);set('i-cut-eq',t.i_cut_eq_full);\r\n\r\n\r\n  set('i-glossary-title',t.i_glos_title);\r\n  set('g-ab-t',t.g_ab_t);set('g-ab-d',t.g_ab_d);set('g-h0-t',t.g_h0_t);set('g-h0-d',t.g_h0_d);\r\n  set('g-ff-t',t.g_ff_t);set('g-ff-d',t.g_ff_d);set('g-c-t',t.g_c_t);set('g-c-d',t.g_c_d);\r\n  set('g-diam-t',t.g_diam_t);set('g-diam-d',t.g_diam_d);set('g-sw',t.g_sw);set('g-mw',t.g_mw);set('g-lw',t.g_lw);set('g-vlw',t.g_vlw);\r\n  set('g-dist-t',t.g_dist_t);set('g-dist-d',t.g_dist_d);set('g-lim-t',t.g_lim_t);set('g-lim-d',t.g_lim_d);\r\n  set('eq-species-name',t.species_name);set('cap-species-name',t.species_name);\r\n  ['eq','cap'].forEach(p=>{\r\n    set(p+'-params-title',t.p_params);set(p+'-p-species',t.p_species);set(p+'-p-h0',t.p_h0);set(p+'-p-growth',t.p_growth);\r\n  });\r\n  set('eq-p-ab0',t.p_ab0);set('eq-p-pct',t.p_pct);set('eq-p-years',t.p_years);set('eq-p-range',t.p_range);set('eq-p-ff',t.p_ff);set('cap-p-years',t.p_years);set('cap-p-ab0',t.p_ab0);\r\n  set('eq-dist-title',t.dist_title);set('eq-dist-info',t.dist_info);set('eq-cycle-title',t.cycle_title);\r\n  set('eq-m-cycle',t.m_cycle);set('eq-m-years',t.m_years);set('eq-m-abcut',t.m_abcut);set('eq-m-vol',t.m_vol);set('eq-m-cuts',t.m_cuts);set('eq-m-in60',t.m_in60);\r\n  set('eq-m-carbon',t.m_carbon);set('eq-m-carbon-cut',t.m_carbon_cut);set('eq-m-cut-unit',t.m_cut_unit);\r\n  set('eq-chart-title',t.chart_eq_title);set('eq-reg-title',t.reg_eq_title);set('eq-leg-cut-row',t.leg_cut_row);\r\n  set('eq-leg-ab',t.leg_ab);set('eq-leg-sup',t.leg_sup);set('eq-leg-inf',t.leg_inf);set('eq-leg-cut',t.leg_cut);\r\n  document.getElementById('eq-thead').innerHTML=`<th>${t.th_yr}<\/th><th>${t.th_ab_b}<\/th><th>SW (m\u00b2\/ha)<\/th><th>MW (m\u00b2\/ha)<\/th><th>LW (m\u00b2\/ha)<\/th><th>VLW (m\u00b2\/ha)<\/th><th>${t.th_ab_c}<\/th><th>${t.th_ab_a}<\/th><th>${t.th_pct}<\/th><th>${t.th_carbon_eq}<\/th><th>${t.th_vol}<\/th>`;\r\n  set('cap-p-n',t.cap_p_n);set('cap-p-limsup',t.p_limsup);set('cap-p-years-unit',t.m_years);\r\n  set('cap-int-title',t.cap_int_title);set('cap-int-info',t.cap_int_info);\r\n  set('cap-p-cut1',t.p_cut1);set('cap-p-cut2',t.p_cut2);set('cap-p-cut3',t.p_cut3);\r\n  set('cap-pa-label',t.cap_pa_lbl);set('cap-r-label',t.cap_r_lbl);\r\n  set('cap-dist-title',t.cap_init_dist);set('cap-leg-cut',t.sit_cut);set('cap-leg-grow-row',t.leg_grow_row);set('cap-leg-cut-row',t.leg_cut_cap);\r\n  set('cap-m-ab',t.m_ab);set('cap-m-c',t.m_carbon);set('cap-m-eq',t.m_eq);set('cap-m-yr',t.m_yr);set('cap-m-vol',t.m_voltot);\r\n  set('cap-chart-title',t.chart_cap_title);set('cap-reg-title',t.reg_cap_title);\r\n  set('cap-leg-ab',t.leg_ab);set('cap-leg-sup',t.leg_sup);set('cap-leg-inf',t.leg_inf);\r\n  set('cap-leg-init',t.sit_init);set('cap-leg-adv',t.sit_adv);set('cap-leg-eq-leg',t.sit_eq);\r\n  set('cap-leg-init-row',t.sit_init);set('cap-leg-adv-row',t.sit_adv);set('cap-leg-eq-row',t.sit_eq);\r\n  set('cap-leg-ab',t.leg_ab);set('cap-leg-sup',t.leg_sup);set('cap-leg-init',t.leg_init);set('cap-leg-adv',t.leg_adv);set('cap-leg-eq',t.leg_eq);\r\n  \/\/ Cap table: always includes Pa and R columns and volume stereo\r\n  document.getElementById('cap-thead').innerHTML=`<th>${t.th_yr}<\/th><th>${t.th_sit}<\/th><th>${t.th_ab_t}<\/th><th>${t.th_pa}<\/th><th>${t.th_r}<\/th><th>${t.th_ab_c}<\/th><th>${t.th_pct}<\/th><th>${t.th_carbon}<\/th><th>${t.th_vol}<\/th><th>${t.th_vol_ste||'Estereo (m\u00b3\/ha)'}<\/th>`;\r\n  \/\/ Eq table: includes diameter groups\r\n  document.getElementById('eq-thead').innerHTML=`<th>${t.th_yr}<\/th><th>${t.th_ab_b}<\/th><th>SW (m\u00b2\/ha)<\/th><th>MW (m\u00b2\/ha)<\/th><th>LW (m\u00b2\/ha)<\/th><th>VLW (m\u00b2\/ha)<\/th><th>${t.th_ab_c}<\/th><th>${t.th_ab_a}<\/th><th>${t.th_pct}<\/th><th>${t.th_carbon_eq}<\/th><th>${t.th_vol}<\/th>`;\r\n  \/\/ Subcap panel labels\r\n  ['sub'].forEach(p=>{\r\n    set(p+'-params-title',t.sub_p_params);set(p+'-p-species',t.sub_p_species||t.p_species);\r\n    set(p+'-p-h0',t.sub_p_h0||t.p_h0);set(p+'-p-growth',t.sub_p_growth||t.p_growth);\r\n    set(p+'-species-name',t.species_name);\r\n  });\r\n  set('sub-p-ab0',t.sub_p_ab0);set('sub-p-pct',t.sub_p_pct);set('sub-p-years',t.sub_p_years||t.p_years);\r\n  set('sub-p-range',t.sub_p_range);set('sub-p-ff',t.sub_p_ff||t.p_ff);\r\n  set('sub-info-strip',t.sub_info);\r\n  set('sub-metrics-title',t.sub_metrics_title);\r\n  set('sub-m-yreq',t.sub_m_yreq);set('sub-m-yreq2',t.sub_m_yreq2);set('sub-m-yr2',t.m_years);set('sub-m-deficit',t.sub_m_deficit);\r\n  set('sub-m-carbon',t.sub_m_carbon);set('sub-m-ff',t.sub_m_ff);set('sub-m-yr',t.sub_m_yr);\r\n  set('sub-progress-title',t.sub_progress_title);\r\n  set('sub-bar-lo',t.sub_bar_lo);set('sub-bar-hi',t.sub_bar_hi);\r\n  set('sub-chart-title',t.sub_chart_title);\r\n  set('sub-leg-ab',t.sub_leg_ab);set('sub-leg-sup',t.sub_leg_sup);set('sub-leg-inf',t.sub_leg_inf);\r\n  set('sub-leg-lim',t.sub_leg_lim);set('sub-leg-eq',t.sub_leg_eq);\r\n  set('sub-reg-title',t.sub_reg_title);\r\n  set('sub-leg-lim-row',t.sub_leg_lim_row);set('sub-leg-eq-row',t.sub_leg_eq_row);set('sub-leg-cut-row',t.sub_leg_cut_row);\r\n  document.getElementById('sub-thead').innerHTML=`<th>${t.th_sub_yr}<\/th><th>${t.th_sub_sit}<\/th><th>${t.th_sub_ab}<\/th><th>${t.th_sub_deficit}<\/th><th>${t.th_sub_ext||'AB extra\\u00edda'}<\/th><th>${t.th_sub_carbon}<\/th><th>${t.th_vol||'Volumen (m\\u00b3\/ha)'}<\/th><th>${t.th_vol_ste||'V. estereo (m\\u00b3\/ha)'}<\/th>`;\r\n  document.title='CNS \\u2014 '+t.title.split('\\u2014')[0].trim();\r\n  set('footer-text',t.footer);\r\n}\r\n\r\nfunction setLang(l){\r\n  lang=l;\r\n  document.querySelectorAll('.lang-btn').forEach((b,i)=>b.classList.toggle('active',['es','en','fr'][i]===l));\r\n  applyLang();updateEq();updateCap();updateSub();\r\n}\r\n\r\nconst DB={europeanbeech:{limSup:21,limInf:14,carbono:4.208323,ff:{14:5.6,16:7,18:8.2,20:9.4,22:10.4,24:11.7,26:12.9,28:14,30:15.3,32:16.7,34:18,36:19.1,38:20}}};\r\n\r\nfunction getFF(h0){\r\n  const t=DB.europeanbeech.ff;const ks=Object.keys(t).map(Number).sort((a,b)=>a-b);\r\n  if(h0<=ks[0])return t[ks[0]];if(h0>=ks[ks.length-1])return t[ks[ks.length-1]];\r\n  for(let i=0;i<ks.length-1;i++){if(h0>=ks[i]&&h0<=ks[i+1]){const r=(h0-ks[i])\/(ks[i+1]-ks[i]);return t[ks[i]]+(t[ks[i+1]]-t[ks[i]])*r;}}\r\n  return 9.4;\r\n}\r\n\r\n\/\/ \u2500\u2500 M\u00d3DULO 1: Situaci\u00f3n de equilibrio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\/\/ Incluye grupos diam\u00e9tricos proporcionales al AB total (crecimiento ponderado)\r\nfunction simEq(ab0,crec,pct,years=60){\r\n  const d=DB.europeanbeech;\r\n  const rows=[];\r\n  \/\/ Distribuci\u00f3n inicial proporcional al objetivo de equilibrio\r\n  let sw=ab0*0.1666, mw=ab0*0.3333, lw=ab0*0.3333, vlw=ab0*0.1666;\r\n  for(let yr=1;yr<=years;yr++){\r\n    \/\/ 1. Crecimiento proporcional al peso de cada grupo\r\n    const tot=sw+mw+lw+vlw;\r\n    sw+=crec*sw\/tot; mw+=crec*mw\/tot; lw+=crec*lw\/tot; vlw+=crec*vlw\/tot;\r\n    let ab=sw+mw+lw+vlw, extAB=0, extPct=0, proc='g';\r\n    \/\/ 2. Corta autom\u00e1tica si supera l\u00edmite superior\r\n    if(ab>d.limSup){\r\n      extAB=ab*pct\/100; extPct=pct; proc='c';\r\n      const f=1-pct\/100; sw*=f; mw*=f; lw*=f; vlw*=f; ab=sw+mw+lw+vlw;\r\n    }\r\n    rows.push({yr,proc,ab,sw,mw,lw,vlw,extAB,extPct});\r\n  }\r\n  return{rows,ls:d.limSup,li:d.limInf};\r\n}\r\n\r\n\/\/ \u2500\u2500 M\u00d3DULO 2: Capitalizaci\u00f3n \u2192 Equilibrio  (Metodolog\u00eda Pa\/R) \u2500\u2500\r\n\/\/ Pa FIJA calculada con Ci (AB inicial). Una sola vez al inicio.\r\n\/\/ R recalculado DIN\u00c1MICAMENTE en cada corta con el AB actual en ese momento.\r\n\/\/ Tres % de corta: p1=inicial (primeras 3 cortas), p2=avanzada, p3=equilibrio\r\nfunction simCap(sw0,mw0,lw0,vlw0,acc,n,p1,p2,p3,years=60){\r\n  const d=DB.europeanbeech;\r\n  const Cn=d.limSup;\r\n  const Ci=sw0+mw0+lw0+vlw0;\r\n\r\n  \/\/ Pa FIJA \u2014 calculada una vez con Ci. No puede ser menor que Acc.\r\n  const Pa=Math.max(acc+(Ci-Cn)\/n, acc);\r\n\r\n  const tableRows=[];\r\n  const chartRows=[];\r\n  let sw=sw0, mw=mw0, lw=lw0, vlw=vlw0;\r\n  let numCortas=0;\r\n  let nextCutYr=1;\r\n  let enEquilibrio=false;\r\n\r\n  for(let yr=1;yr<=years;yr++){\r\n    let ab=sw+mw+lw+vlw;\r\n    let extAB=0, sit='growth', pct=0, R=0;\r\n\r\n    if(!enEquilibrio){\r\n      \/\/ \u2500\u2500 FASE TRANSICI\u00d3N: aplica corta si toca el a\u00f1o y AB>Cn \u2500\u2500\r\n      if(yr===nextCutYr && ab>Cn){\r\n        let fase;\r\n        if(numCortas<3){\r\n          \/\/ Primeras 3 cortas \u2192 % inicial (madera baja calidad)\r\n          fase='init'; pct=p1;\r\n        } else if(ab>Cn*1.05){\r\n          \/\/ AB supera >5% el l\u00edmite \u2192 % avanzado\r\n          fase='adv'; pct=p2;\r\n        } else {\r\n          \/\/ Cerca del l\u00edmite \u2192 % equilibrio\r\n          fase='eq'; pct=p3;\r\n        }\r\n        \/\/ P = AB_actual \u00d7 %_corta\r\n        const P=ab*(pct\/100);\r\n        \/\/ R recalculado din\u00e1micamente con AB actual y Pa fija\r\n        R=Math.max(Math.round(P\/Pa), 1);\r\n        extAB=P;\r\n        const f=(ab-extAB)\/ab;\r\n        sw*=f; mw*=f; lw*=f; vlw*=f;\r\n        ab=sw+mw+lw+vlw;\r\n        numCortas++;\r\n        nextCutYr=yr+R;\r\n        sit=fase;\r\n        tableRows.push({yr,sit,abBefore:ab+extAB,ab,sw,mw,lw,vlw,extAB,pct,Pa,R,isCut:true});\r\n        if(ab<=Cn) enEquilibrio=true;\r\n      } else {\r\n        if(ab<=Cn) enEquilibrio=true;\r\n        tableRows.push({yr,sit:'growth',ab,sw,mw,lw,vlw,extAB:0,pct:0,Pa,R:0,isCut:false});\r\n      }\r\n    } else {\r\n      \/\/ \u2500\u2500 FASE EQUILIBRIO: l\u00f3gica id\u00e9ntica al M\u00f3dulo 1 \u2500\u2500\r\n      if(ab>Cn){\r\n        extAB=ab*(p3\/100);\r\n        const f=(ab-extAB)\/ab; sw*=f; mw*=f; lw*=f; vlw*=f; ab=sw+mw+lw+vlw;\r\n        sit='eq_auto';\r\n        tableRows.push({yr,sit:'eq_auto',abBefore:ab+extAB,ab,sw,mw,lw,vlw,extAB,pct:p3,Pa:null,R:null,isCut:true});\r\n      } else {\r\n        tableRows.push({yr,sit:'eq_growth',ab,sw,mw,lw,vlw,extAB:0,pct:0,Pa:null,R:null,isCut:false});\r\n      }\r\n    }\r\n\r\n    \/\/ Crecimiento proporcional (siempre al final del a\u00f1o)\r\n    const tot2=sw+mw+lw+vlw;\r\n    sw+=acc*sw\/tot2; mw+=acc*mw\/tot2; lw+=acc*lw\/tot2; vlw+=acc*vlw\/tot2;\r\n    chartRows.push({yr,ab:sw+mw+lw+vlw,isCut:extAB>0,fase:sit,enEquilibrio});\r\n  }\r\n  return{tableRows,chartRows,ls:Cn,Pa,Ci};\r\n}\r\n\r\nlet eqChart=null,capChart=null;\r\n\r\nfunction updateEq(){\r\n  const t=T[lang];const d=DB.europeanbeech;\r\n  const h0=+document.getElementById('eq-h0').value;\r\n  const ab0=+document.getElementById('eq-ab0').value;\r\n  const crec=+document.getElementById('eq-crec').value;\r\n  const pct=+document.getElementById('eq-pct').value;\r\n  const years=+document.getElementById('eq-years').value;\r\n  document.getElementById('eq-h0-val').textContent=h0+' m';\r\n  document.getElementById('eq-ab0-val').textContent=ab0.toFixed(1);\r\n  document.getElementById('eq-crec-val').textContent=crec.toFixed(1);\r\n  document.getElementById('eq-pct-val').textContent=pct+'%';\r\n  document.getElementById('eq-years-val').textContent=years+' '+t.m_years;\r\n  const ff=getFF(h0);\r\n  document.getElementById('eq-ff').textContent=ff.toFixed(1);\r\n  const st=document.getElementById('eq-status');\r\n  if(ab0>=d.limInf&&ab0<=d.limSup){st.className='badge-ok';st.textContent=t.st_eq;}\r\n  else if(ab0>d.limSup){st.className='badge-warn';st.textContent=t.st_cap;}\r\n  else{st.className='badge-warn';st.textContent=t.st_low;}\r\n  document.getElementById('eq-carb').textContent=(ab0*d.carbono).toFixed(1);\r\n  const{rows,ls,li}=simEq(ab0,crec,pct,years);\r\n  const cortas=rows.filter(r=>r.proc==='c');\r\n  const ciclo=cortas.length>1?Math.round((cortas[cortas.length-1].yr-cortas[0].yr)\/(cortas.length-1)):cortas.length===1?cortas[0].yr:'\u2014';\r\n  const avgExt=cortas.length?cortas.reduce((s,r)=>s+r.extAB,0)\/cortas.length:0;\r\n  const avgCarbonCut=avgExt*d.carbono;\r\n  document.getElementById('eq-ciclo').textContent=typeof ciclo==='number'?ciclo:'\u2014';\r\n  document.getElementById('eq-ab-ext').textContent=avgExt?avgExt.toFixed(1):'\u2014';\r\n  document.getElementById('eq-vol').textContent=avgExt?(avgExt*ff).toFixed(0):'\u2014';\r\n  document.getElementById('eq-ncortas').textContent=cortas.length;\r\n  document.getElementById('eq-carb-cut').textContent=avgCarbonCut?avgCarbonCut.toFixed(1):'\u2014';\r\n  document.getElementById('eq-m-in60').textContent=t.m_in60.replace('60',years);\r\n  document.getElementById('eq-chart-title').textContent=t.chart_eq_title.replace('60',years);\r\n  const ptC=rows.map(r=>r.proc==='c'?'#C0392B':'rgba(0,0,0,0)');\r\n  const ptR=rows.map(r=>r.proc==='c'?5:0);\r\n  if(eqChart)eqChart.destroy();\r\n  eqChart=new Chart(document.getElementById('eq-chart'),{type:'line',data:{labels:rows.map(r=>r.yr),datasets:[\r\n    {label:t.leg_ab,data:rows.map(r=>+r.ab.toFixed(2)),borderColor:'#4A7C2F',borderWidth:2,fill:true,backgroundColor:'rgba(74,124,47,0.07)',tension:0.2,pointRadius:ptR,pointBackgroundColor:ptC,pointBorderColor:ptC},\r\n    {label:t.leg_sup,data:rows.map(()=>ls),borderColor:'#C0392B',borderWidth:1.5,borderDash:[6,4],fill:false,pointRadius:0},\r\n    {label:t.leg_inf,data:rows.map(()=>li),borderColor:'#8B6335',borderWidth:1.5,borderDash:[4,4],fill:false,pointRadius:0}\r\n  ]},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{display:false},tooltip:{callbacks:{label:ctx=>ctx.dataset.label+': '+ctx.parsed.y.toFixed(2)+' m\u00b2\/ha'}}},scales:{x:{ticks:{maxTicksLimit:Math.min(years\/5,20),font:{size:11}},grid:{color:'rgba(0,0,0,0.04)'},title:{display:true,text:t.yr_axis,font:{size:11}}},y:{min:Math.max(0,d.limInf-5),max:d.limSup+8,title:{display:true,text:'m\u00b2\/ha',font:{size:11}},ticks:{font:{size:11}},grid:{color:'rgba(0,0,0,0.04)'}}}}});\r\n  const tbody=document.getElementById('eq-table');tbody.innerHTML='';\r\n  rows.forEach(r=>{\r\n    const isCut=r.proc==='c';\r\n    const cls=isCut?'corta-row':'';\r\n    const abBefore=(r.ab+r.extAB).toFixed(2);       \/\/ AB before cut\/growth = post-grow + extracted\r\n    const abAfter=r.ab.toFixed(2);                   \/\/ AB after cut (or after growth if no cut)\r\n    const abExt=isCut?r.extAB.toFixed(2):'';\r\n    const pctExt=isCut?r.extPct.toFixed(0)+'%':'';\r\n    const vol=isCut?(r.extAB*ff).toFixed(1):'';\r\n    const carb=(r.ab*d.carbono).toFixed(1);\r\n    \/\/ Diameter groups \u2014 always show (post-cut values)\r\n    const swS=r.sw.toFixed(2), mwS=r.mw.toFixed(2), lwS=r.lw.toFixed(2), vlwS=r.vlw.toFixed(2);\r\n    tbody.innerHTML+=`<tr class=\"${cls}\"><td>${r.yr}<\/td><td>${isCut?abBefore:abAfter}<\/td><td>${swS}<\/td><td>${mwS}<\/td><td>${lwS}<\/td><td>${vlwS}<\/td><td>${abExt}<\/td><td>${abAfter}<\/td><td>${pctExt}<\/td><td>${carb}<\/td><td>${vol}<\/td><\/tr>`;\r\n  });\r\n}\r\n\r\nfunction updateCapDist(){\r\n  const sw=+document.getElementById('cap-sw').value;\r\n  const mw=+document.getElementById('cap-mw').value;\r\n  const lw=+document.getElementById('cap-lw').value;\r\n  const vlw=+document.getElementById('cap-vlw').value;\r\n  const tot=sw+mw+lw+vlw;\r\n  document.getElementById('cap-sw-val').textContent=sw.toFixed(1);\r\n  document.getElementById('cap-mw-val').textContent=mw.toFixed(1);\r\n  document.getElementById('cap-lw-val').textContent=lw.toFixed(1);\r\n  document.getElementById('cap-vlw-val').textContent=vlw.toFixed(1);\r\n  document.getElementById('cap-ab0').value=tot.toFixed(1);\r\n  document.getElementById('cap-ab0-val').textContent=tot.toFixed(1);\r\n  updateCap();\r\n}\r\n\r\nfunction syncCapAB(){\r\n  const ab0=+document.getElementById('cap-ab0').value;\r\n  document.getElementById('cap-ab0-val').textContent=ab0.toFixed(1);\r\n  const sw=+document.getElementById('cap-sw').value;\r\n  const mw=+document.getElementById('cap-mw').value;\r\n  const lw=+document.getElementById('cap-lw').value;\r\n  const vlw=+document.getElementById('cap-vlw').value;\r\n  const tot=sw+mw+lw+vlw;\r\n  if(tot>0){\r\n    const f=ab0\/tot;\r\n    document.getElementById('cap-sw').value=(sw*f).toFixed(1);\r\n    document.getElementById('cap-mw').value=(mw*f).toFixed(1);\r\n    document.getElementById('cap-lw').value=(lw*f).toFixed(1);\r\n    document.getElementById('cap-vlw').value=(vlw*f).toFixed(1);\r\n    document.getElementById('cap-sw-val').textContent=(sw*f).toFixed(1);\r\n    document.getElementById('cap-mw-val').textContent=(mw*f).toFixed(1);\r\n    document.getElementById('cap-lw-val').textContent=(lw*f).toFixed(1);\r\n    document.getElementById('cap-vlw-val').textContent=(vlw*f).toFixed(1);\r\n  } else {\r\n    const def=[0.125,0.25,0.4375,0.1875];\r\n    ['cap-sw','cap-mw','cap-lw','cap-vlw'].forEach((id,i)=>{\r\n      document.getElementById(id).value=(ab0*def[i]).toFixed(1);\r\n      document.getElementById(id+'-val').textContent=(ab0*def[i]).toFixed(1);\r\n    });\r\n  }\r\n  updateCap();\r\n}\r\n\r\nfunction updateCap(){\r\n  const t=T[lang];const d=DB.europeanbeech;\r\n  const h0=+document.getElementById('cap-h0').value;\r\n  const crec=+document.getElementById('cap-crec').value;\r\n  const n=+document.getElementById('cap-n').value;\r\n  const p1=+document.getElementById('cap-pct1').value;\r\n  const p2=+document.getElementById('cap-pct2').value;\r\n  const p3=+document.getElementById('cap-pct3').value;\r\n  const years=+document.getElementById('cap-years').value;\r\n  const sw0=+document.getElementById('cap-sw').value;\r\n  const mw0=+document.getElementById('cap-mw').value;\r\n  const lw0=+document.getElementById('cap-lw').value;\r\n  const vlw0=+document.getElementById('cap-vlw').value;\r\n  document.getElementById('cap-h0-val').textContent=h0+' m';\r\n  document.getElementById('cap-crec-val').textContent=crec.toFixed(1);\r\n  document.getElementById('cap-n-val').textContent=n+' '+t.m_years;\r\n  document.getElementById('cap-pct1-val').textContent=p1+'%';\r\n  document.getElementById('cap-pct2-val').textContent=p2+'%';\r\n  document.getElementById('cap-pct3-val').textContent=p3+'%';\r\n  document.getElementById('cap-years-val').textContent=years+' '+t.m_years;\r\n  document.getElementById('cap-sw-val').textContent=sw0.toFixed(1);\r\n  document.getElementById('cap-mw-val').textContent=mw0.toFixed(1);\r\n  document.getElementById('cap-lw-val').textContent=lw0.toFixed(1);\r\n  document.getElementById('cap-vlw-val').textContent=vlw0.toFixed(1);\r\n  const ff=getFF(h0);\r\n  const totalInit=sw0+mw0+lw0+vlw0;\r\n  document.getElementById('cap-abtotal').textContent=totalInit.toFixed(1);\r\n  document.getElementById('cap-carb').textContent=(totalInit*d.carbono).toFixed(1);\r\n  const st=document.getElementById('cap-status');\r\n  if(totalInit>d.limSup){st.className='badge-ok';st.textContent=t.st_cap;}\r\n  else{st.className='badge-warn';st.textContent=t.st_ncap;}\r\n  if(totalInit>0){\r\n    const s=(sw0\/totalInit*100).toFixed(1),m=(mw0\/totalInit*100).toFixed(1),l=(lw0\/totalInit*100).toFixed(1),v=(vlw0\/totalInit*100).toFixed(1);\r\n    document.getElementById('cap-dist-bar').innerHTML=`<div class=\"dist-seg\" style=\"width:${s}%;background:#C8DFA8;color:#2D5016\">${s}%<\/div><div class=\"dist-seg\" style=\"width:${m}%;background:#7AAD52;color:#fff\">${m}%<\/div><div class=\"dist-seg\" style=\"width:${l}%;background:#4A7C2F;color:#fff\">${l}%<\/div><div class=\"dist-seg\" style=\"width:${v}%;background:#2D5016;color:#C8DFA8\">${v}%<\/div>`;\r\n  }\r\n  const{tableRows,chartRows,ls,Pa,Ci}=simCap(sw0,mw0,lw0,vlw0,crec,n,p1,p2,p3,years);\r\n  \/\/ Pa FIJA calculada con Ci \u2014 mostrar f\u00f3rmula\r\n  document.getElementById('cap-pa-result').textContent=\r\n    crec.toFixed(2)+' + ('+Ci.toFixed(2)+'\u2212'+d.limSup+')\/'+n+' = '+Pa.toFixed(3)+' m\u00b2\/ha\/a\u00f1o';\r\n  \/\/ R ejemplo por fase (con AB inicial respectivo estimado)\r\n  const R1=Math.max(Math.round(Ci*(p1\/100)\/Pa),1);\r\n  const R2=Math.max(Math.round(Ci*(1-p1\/100)*(p2\/100)\/Pa),1);\r\n  const R3=Math.max(Math.round(d.limSup*(p3\/100)\/Pa),1);\r\n  document.getElementById('cap-r-result').innerHTML=\r\n    '<span style=\"color:var(--f-cut)\">'+t.sit_init+'<\/span>: R='+R1+' '+t.m_years+\r\n    ' &nbsp;|&nbsp; <span style=\"color:var(--f-cut-adv)\">'+t.sit_adv+'<\/span>: R\u2248'+R2+' '+t.m_years+\r\n    ' &nbsp;|&nbsp; <span style=\"color:var(--f-cut-eq)\">'+t.sit_eq+'<\/span>: R\u2248'+R3+' '+t.m_years;\r\n  const firstEq=tableRows.find(r=>r.ab<=d.limSup);\r\n  document.getElementById('cap-yrseq').textContent=firstEq?firstEq.yr:'\u2014';\r\n  const cortas=tableRows.filter(r=>r.isCut);\r\n  document.getElementById('cap-voltot').textContent=cortas.reduce((s,r)=>s+r.extAB*ff,0).toFixed(0);\r\n  document.getElementById('cap-chart-title').textContent=t.chart_cap_title.replace('60',years);\r\n  const ptC=chartRows.map(r=>{\r\n    if(!r.isCut) return 'rgba(0,0,0,0)';\r\n    if(r.fase==='init') return '#C0392B';\r\n    if(r.fase==='adv') return '#D68910';\r\n    return '#1A6B3A';\r\n  });\r\n  const ptR2=chartRows.map(r=>r.isCut?6:0);\r\n  if(capChart)capChart.destroy();\r\n  capChart=new Chart(document.getElementById('cap-chart'),{type:'line',data:{labels:chartRows.map(r=>r.yr),datasets:[\r\n    {label:t.leg_ab,data:chartRows.map(r=>+r.ab.toFixed(2)),borderColor:'#4A7C2F',borderWidth:2,fill:true,backgroundColor:'rgba(74,124,47,0.07)',tension:0.2,pointRadius:ptR2,pointBackgroundColor:ptC,pointBorderColor:ptC},\r\n    {label:t.leg_sup,data:chartRows.map(()=>ls),borderColor:'#C0392B',borderWidth:1.5,borderDash:[6,4],fill:false,pointRadius:0},\r\n    {label:t.leg_inf,data:chartRows.map(()=>d.limInf),borderColor:'#8B6335',borderWidth:1.5,borderDash:[4,4],fill:false,pointRadius:0}\r\n  ]},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{display:false},tooltip:{callbacks:{label:ctx=>ctx.dataset.label+': '+ctx.parsed.y.toFixed(2)+' m\u00b2\/ha'}}},scales:{x:{ticks:{maxTicksLimit:Math.min(years\/5,20),font:{size:11}},grid:{color:'rgba(0,0,0,0.04)'},title:{display:true,text:t.yr_axis,font:{size:11}}},y:{min:0,max:Math.max(totalInit,ls)+10,title:{display:true,text:'m\u00b2\/ha',font:{size:11}},ticks:{font:{size:11}},grid:{color:'rgba(0,0,0,0.04)'}}}}});\r\n  const tbody=document.getElementById('cap-table');tbody.innerHTML='';\r\n  let eqSepDone=false;\r\n  tableRows.forEach(r=>{\r\n    const sitMap={\r\n      init:t.sit_init, adv:t.sit_adv,\r\n      eq:t.sit_eq, eq_auto:t.sit_eq_auto, eq_growth:t.sit_eq_growth,\r\n      growth:t.sit_growth\r\n    };\r\n    const sitL=sitMap[r.sit]||r.sit;\r\n    \/\/ Insert separator row when equilibrium phase begins\r\n    const isEqPhase=(r.sit==='eq_auto'||r.sit==='eq_growth');\r\n    if(isEqPhase && !eqSepDone){\r\n      eqSepDone=true;\r\n      tbody.innerHTML+=`<tr style=\"background:var(--f-green-mid)\"><td colspan=\"9\" style=\"color:#fff;font-size:11px;font-weight:500;text-align:center;padding:4px 8px;letter-spacing:0.05em\">${t.sep_eq_label||'\u2b07 EQUILIBRIUM PHASE'}<\/td><\/tr>`;\r\n    }\r\n    const cls=r.isCut?(r.sit==='init'?'corta-init-row':r.sit==='adv'?'corta-adv-row':'corta-row'):'';\r\n    const carb=(r.ab*d.carbono).toFixed(1);\r\n    \/\/ Pa: only show in transition phase (not null)\r\n    const paStr=r.Pa!==null?r.Pa.toFixed(3):'';\r\n    \/\/ R: only show if it was a cut with R value\r\n    const rStr=(r.R!==null&&r.R!==undefined&&r.R>0)?r.R:'';\r\n    const abDisp=r.isCut?r.abBefore.toFixed(2):r.ab.toFixed(2);\r\n    const volRound=r.isCut?(r.extAB*ff).toFixed(1):'';\r\n    const volStereo=r.isCut?((r.extAB*ff)*1.493).toFixed(1):'';\r\n    tbody.innerHTML+=`<tr class=\"${cls}\"><td>${r.yr}<\/td><td>${sitL}<\/td><td>${abDisp}<\/td><td style=\"font-family:monospace\">${paStr}<\/td><td>${rStr}<\/td><td>${r.isCut?r.extAB.toFixed(2):''}<\/td><td>${r.isCut?r.pct+'%':''}<\/td><td>${carb}<\/td><td>${volRound}<\/td><td>${volStereo}<\/td><\/tr>`;\r\n  });\r\n}\r\n\r\nfunction switchTab(t){\r\n  const tabs=['instrucciones','subcapitalizado','equilibrio','capitalizado'];\r\n  document.querySelectorAll('.tab').forEach((b,i)=>b.classList.toggle('active',tabs[i]===t));\r\n  document.querySelectorAll('.panel').forEach((p,i)=>p.classList.toggle('active','panel-'+tabs[i]==='panel-'+t));\r\n}\r\n\r\n\r\nlet subChart=null;\r\n\r\n\/\/ \u2500\u2500 M\u00d3DULO 3: Subcapitalizaci\u00f3n \u2192 Equilibrio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\/\/ Rodal por debajo del l\u00edmite inferior. Crece hasta alcanzar el equilibrio.\r\n\/\/ Sin cortas durante la fase subcapitalizada.\r\n\/\/ \u2500\u2500 M\u00d3DULO 1: Subcapitalizaci\u00f3n \u2192 Equilibrio (solo crecimiento, sin cortas) \u2500\u2500\r\n\/\/ El rodal est\u00e1 por debajo del l\u00edmite inferior. Crece libremente hasta alcanzar\r\n\/\/ el rango de equilibrio (14 m\u00b2\/ha) y despu\u00e9s el l\u00edmite superior del rango de equilibrio (21 m\u00b2\/ha).\r\n\/\/ No se aplica ninguna corta durante la fase de recuperaci\u00f3n.\r\n\/\/ \u2500\u2500 M\u00d3DULO 1: Subcapitalizaci\u00f3n \u2192 Equilibrio \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\/\/ Fase 1 (AB < 14): crecimiento libre, sin ninguna intervenci\u00f3n.\r\n\/\/ Fase 2 (14 \u2264 AB \u2264 21): ya en equilibrio, sigue creciendo hasta 21.\r\n\/\/ Fase 3 (AB > 21): se activa autom\u00e1ticamente la l\u00f3gica de mantenimiento en equilibrio\r\n\/\/   \u2192 corta autom\u00e1tica con el % por defecto del equilibrio (20%) cada vez\r\n\/\/      que AB supera 21, exactamente con una corta autom\u00e1tica al superar el umbral superior.\r\nfunction simSub(ab0, crec, years){\r\n  const d=DB.europeanbeech;\r\n  const rows=[];\r\n  let ab=ab0;\r\n  const eqPct=0.20; \/\/ corta autom\u00e1tica de mantenimiento cuando AB supera 21 m\u00b2\/ha\r\n  for(let yr=1;yr<=years;yr++){\r\n    const abPrev=ab;\r\n    ab=+(ab+crec).toFixed(4);\r\n    let sit='growth', limCrossed=false, eqCrossed=false, extAB=0;\r\n    \/\/ Hito: cruza el l\u00edmite inferior\r\n    if(ab>=d.limInf && abPrev<d.limInf){ limCrossed=true; sit='lim'; }\r\n    \/\/ Hito: cruza el l\u00edmite superior por primera vez\r\n    if(ab>=d.limSup && abPrev<d.limSup){ eqCrossed=true; sit='eq'; }\r\n    \/\/ Fase equilibrio: corta autom\u00e1tica igual que M\u00f3dulo 2\r\n    if(ab>d.limSup){\r\n      extAB=+(ab*eqPct).toFixed(4);\r\n      ab=+(ab-extAB).toFixed(4);\r\n      if(!eqCrossed) sit='eq_auto';\r\n    }\r\n    const deficit=+Math.max(0,d.limInf-ab).toFixed(3);\r\n    rows.push({yr,ab,extAB,sit,limCrossed,eqCrossed,deficit});\r\n  }\r\n  return rows;\r\n}\r\n\r\nfunction updateSub(){\r\n  const t=T[lang]; const d=DB.europeanbeech;\r\n  const h0=+document.getElementById('sub-h0').value;\r\n  const ab0=+document.getElementById('sub-ab0').value;\r\n  const crec=+document.getElementById('sub-crec').value;\r\n  const years=+document.getElementById('sub-years').value;\r\n  document.getElementById('sub-h0-val').textContent=h0+' m';\r\n  document.getElementById('sub-ab0-val').textContent=ab0.toFixed(1);\r\n  document.getElementById('sub-crec-val').textContent=crec.toFixed(1);\r\n  document.getElementById('sub-years-val').textContent=years;\r\n  const ff=getFF(h0);\r\n  document.getElementById('sub-ff').textContent=ff.toFixed(1);\r\n  \/\/ sub-ff shown in params already\r\n  \/\/ Status badge\r\n  const st=document.getElementById('sub-status');\r\n  st.className='badge-warn'; st.textContent=t.sub_st||'\u26a0 Subcapitalizado';\r\n  \/\/ Deficit and carbon\r\n  const deficit=Math.max(0,d.limInf-ab0).toFixed(2);\r\n  document.getElementById('sub-deficit').textContent=deficit;\r\n  document.getElementById('sub-carb').textContent=(ab0*d.carbono).toFixed(1);\r\n  \/\/ Years to lower limit (pure growth, no cuts)\r\n  const yToLim=crec>0?Math.ceil((d.limInf-ab0)\/crec):'\u221e';\r\n  const yToEq=crec>0?Math.ceil((d.limSup-ab0)\/crec):'\u221e';\r\n  document.getElementById('sub-yreq').textContent=(typeof yToLim==='number'&&yToLim>0)?yToLim:'\u2014';\r\n  document.getElementById('sub-yr-eq').textContent=(typeof yToEq==='number'&&yToEq>0)?yToEq:'\u2014';\r\n  \/\/ Progress bar: 0% = 0, 100% = limInf\r\n  const progress=Math.max(0,Math.min(100,(ab0\/d.limInf)*100));\r\n  document.getElementById('sub-progress-bar').style.width=progress+'%';\r\n  document.getElementById('sub-progress-label').textContent=progress.toFixed(0)+'%';\r\n  \/\/ Run simulation\r\n  const rows=simSub(ab0,crec,years);\r\n  \/\/ Chart data\r\n  const labels=rows.map(r=>r.yr);\r\n  const abData=rows.map(r=>r.ab);\r\n  const ptBg=rows.map(r=>{\r\n    if(r.limCrossed)          return '#1A5276';   \/\/ cruza 14\r\n    if(r.eqCrossed)           return '#1A6B3A';   \/\/ cruza 21 por primera vez\r\n    if(r.sit==='eq_auto')     return '#27AE60';   \/\/ corta autom\u00e1tica equilibrio\r\n    return 'rgba(0,0,0,0)';\r\n  });\r\n  const ptR=rows.map(r=>(r.limCrossed||r.eqCrossed||r.sit==='eq_auto')?5:0);\r\n  if(subChart)subChart.destroy();\r\n  subChart=new Chart(document.getElementById('sub-chart'),{type:'line',data:{labels,datasets:[\r\n    {label:t.sub_leg_ab,data:abData,borderColor:'#2980B9',borderWidth:2,fill:true,\r\n     backgroundColor:'rgba(41,128,185,0.07)',tension:0.2,pointRadius:ptR,\r\n     pointBackgroundColor:ptBg,pointBorderColor:ptBg},\r\n    {label:t.sub_leg_sup,data:labels.map(()=>d.limSup),borderColor:'#C0392B',borderWidth:1.5,borderDash:[6,4],fill:false,pointRadius:0},\r\n    {label:t.sub_leg_inf,data:labels.map(()=>d.limInf),borderColor:'#8B6335',borderWidth:1.5,borderDash:[4,4],fill:false,pointRadius:0}\r\n  ]},options:{responsive:true,maintainAspectRatio:false,\r\n    plugins:{legend:{display:false},tooltip:{callbacks:{label:ctx=>ctx.dataset.label+': '+ctx.parsed.y.toFixed(2)+' m\u00b2\/ha'}}},\r\n    scales:{\r\n      x:{ticks:{maxTicksLimit:Math.min(years\/5,20),font:{size:11}},grid:{color:'rgba(0,0,0,0.04)'},title:{display:true,text:t.yr_axis,font:{size:11}}},\r\n      y:{min:0,max:d.limSup+6,title:{display:true,text:'m\u00b2\/ha',font:{size:11}},ticks:{font:{size:11}},grid:{color:'rgba(0,0,0,0.04)'}}\r\n    }}});\r\n  \/\/ Table\r\n  const tbody=document.getElementById('sub-table');tbody.innerHTML='';\r\n  let sepLimDone=false, sepEqDone=false;\r\n  rows.forEach(r=>{\r\n    if(r.limCrossed&&!sepLimDone){\r\n      sepLimDone=true;\r\n      tbody.innerHTML+=`<tr style=\"background:#1A5276\"><td colspan=\"8\" style=\"color:#fff;font-size:11px;font-weight:500;text-align:center;padding:4px 8px;letter-spacing:0.05em\">${t.sub_sep_lim||'\u2193 ALCANZA L\u00cdMITE INFERIOR (14 m\u00b2\/ha)'}<\/td><\/tr>`;\r\n    }\r\n    if(r.eqCrossed&&!sepEqDone){\r\n      sepEqDone=true;\r\n      tbody.innerHTML+=`<tr style=\"background:var(--f-green-mid)\"><td colspan=\"8\" style=\"color:#fff;font-size:11px;font-weight:500;text-align:center;padding:4px 8px;letter-spacing:0.05em\">${t.sub_sep_eq||'\u2193 ALCANZA EQUILIBRIO PLENO (21 m\u00b2\/ha)'}<\/td><\/tr>`;\r\n    }\r\n    const sitMap={growth:t.sub_sit_growth,lim:t.sub_sit_lim,eq:t.sub_sit_eq,eq_auto:t.sit_eq_auto};\r\n    const sitL=sitMap[r.sit]||r.sit;\r\n    const cls=r.limCrossed?'sub-lim-row':r.eqCrossed?'sub-eq-row':'';\r\n    const carb=(r.ab*d.carbono).toFixed(1);\r\n    const extStr=(r.extAB>0)?r.extAB.toFixed(2):'';\r\n    const volStr=(r.extAB>0)?(r.extAB*ff).toFixed(1):'';\r\n    const volSteStr=(r.extAB>0)?(r.extAB*ff*0.7).toFixed(1):'';\r\n    tbody.innerHTML+=`<tr class=\"${cls}\"><td>${r.yr}<\/td><td>${sitL}<\/td><td>${r.ab.toFixed(2)}<\/td><td>${r.deficit>0?r.deficit.toFixed(2):''}<\/td><td>${extStr}<\/td><td>${carb}<\/td><td>${volStr}<\/td><td>${volSteStr}<\/td><\/tr>`;\r\n  });\r\n}\r\n\r\nsetLang('en');\r\n<\/script>\r\n<\/body>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4c3c661 e-flex e-con-boxed e-con e-parent\" data-id=\"4c3c661\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f0dd5d8 elementor-widget__width-initial elementor-widget-tablet__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"f0dd5d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>LIFE HFH has been funded by the EC through the call 2023 of the LIFE Programme with the Grant Agreement n\u00ba 101114227<\/p><p>Funded by the European Union. Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or CINEA. Neither the European Union nor the granting authority can be held responsible for them.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-997c15f elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget-tablet__width-inherit elementor-widget elementor-widget-image\" data-id=\"997c15f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"477\" height=\"100\" src=\"https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/en_life_co-founded_by_the_UE_white.png\" class=\"attachment-medium_large size-medium_large wp-image-5461\" alt=\"\" srcset=\"https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/en_life_co-founded_by_the_UE_white.png 477w, https:\/\/lifehaya.pefc.es\/wp-content\/uploads\/2026\/05\/en_life_co-founded_by_the_UE_white-300x63.png 300w\" sizes=\"(max-width: 477px) 100vw, 477px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-014fc2b e-flex e-con-boxed e-con e-child\" data-id=\"014fc2b\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-737c2f8 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-heading\" data-id=\"737c2f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">\u00a9 2026 \u2013 ALL RIGHTS RESERVED<\/p>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-353a106 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"353a106\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">|<\/p>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cde5df8 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-heading\" data-id=\"cde5df8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/ec-innova.es\/\">DEVELOPED BY  EC-INNOVA<\/a><\/p>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Interactive silvicultural simulator for beech forests based on the principles of continuous cover forestry focused on the individual tree (CNS \u2013 close-to-nature silviculture). Based on basal area, dominant height, and stand growth, it models stand evolution and plans thinning interventions according to the stand\u2019s condition: understocked and in recovery, in equilibrium, or overstocked and transitioning towards equilibrium.<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-5427","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/pages\/5427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/comments?post=5427"}],"version-history":[{"count":36,"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/pages\/5427\/revisions"}],"predecessor-version":[{"id":5504,"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/pages\/5427\/revisions\/5504"}],"wp:attachment":[{"href":"https:\/\/lifehaya.pefc.es\/en\/wp-json\/wp\/v2\/media?parent=5427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}