{"id":5974,"date":"2026-06-20T12:02:41","date_gmt":"2026-06-20T15:02:41","guid":{"rendered":"https:\/\/fisicatumi.fica.unsl.edu.ar\/?page_id=5974"},"modified":"2026-06-21T22:11:21","modified_gmt":"2026-06-22T01:11:21","slug":"fb_estatica_grua","status":"publish","type":"page","link":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/","title":{"rendered":"FB_estatica_grua"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5974\" class=\"elementor elementor-5974\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-37bf195 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"37bf195\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-db8bf97\" data-id=\"db8bf97\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-622691c elementor-widget elementor-widget-html\" data-id=\"622691c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- Simulador de Equilibrio Est\u00e1tico \u2014 Gr\u00faa Torre (WordPress) -->\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=JetBrains+Mono:wght@300;400;500;600;700&family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600;9..40,700;9..40,800;9..40,900&display=swap\" rel=\"stylesheet\">\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\">\r\n<style>\r\n\/* Si los <link> no cargan, descoment\u00e1 estas dos l\u00edneas:\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=JetBrains+Mono:wght@300;400;500;600;700&family=DM+Sans:opsz,wght@9..40,300;9..40,400;9..40,500;9..40,600;9..40,700;9..40,800;9..40,900&display=swap');\r\n@import url('https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css');\r\n*\/\r\n.grua-sim *,.grua-sim *::before,.grua-sim *::after{box-sizing:border-box;margin:0;padding:0}\r\n.grua-sim{min-height:700px;min-height:70vh;min-height:70dvh;overflow:auto;display:flex;flex-direction:column;font-family:'DM Sans',sans-serif;background:#0D1117;color:#E6EDF3;transition:background .3s,color .3s;position:relative;z-index:1;\r\n  --bg:#0D1117;--bg2:#161B22;--bg3:#1C2128;--border:#30363D;\r\n  --text:#E6EDF3;--label:#C8CED6;--muted:#9DA5AE;--unit:#7D8590;\r\n  --accent:#F0883E;--accent-bg:rgba(240,136,62,.12);\r\n  --safe:#3FB950;--safe-bg:rgba(63,185,80,.12);\r\n  --warn:#D29922;--warn-bg:rgba(210,153,34,.12);\r\n  --danger:#F85149;--danger-bg:rgba(248,81,73,.12);\r\n  --shadow:0 4px 24px rgba(0,0,0,.4);--radius:10px;--radius-sm:6px;\r\n  --input-border:#4A5568;--input-focus-glow:rgba(240,136,62,0.25);\r\n  --font-mono:'JetBrains Mono',monospace;\r\n}\r\n.grua-sim > p{display:none}\r\n.grua-sim[data-theme=\"light\"]{\r\n  --bg:#F0F2F5;--bg2:#FFF;--bg3:#F6F8FA;--border:#D0D7DE;\r\n  --text:#1F2328;--label:#3D444D;--muted:#57606A;--unit:#636C76;\r\n  --accent-bg:rgba(240,136,62,.08);\r\n  --safe-bg:rgba(35,134,54,.08);--warn-bg:rgba(187,146,17,.08);--danger-bg:rgba(218,54,51,.08);\r\n  --shadow:0 4px 24px rgba(0,0,0,.08);\r\n  --input-border:#B8C1CA;--input-focus-glow:rgba(240,136,62,0.18);\r\n}\r\n.grua-sim ::-webkit-scrollbar{width:6px}.grua-sim ::-webkit-scrollbar-track{background:var(--bg)}.grua-sim ::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}\r\n.grua-sim header{height:52px;min-height:52px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;background:var(--bg2);border-bottom:1px solid var(--border);z-index:10}\r\n.grua-sim .header-left{display:flex;align-items:center;gap:10px}\r\n.grua-sim .header-left svg{width:26px;height:26px;flex-shrink:0}\r\n.grua-sim .header-left h1{font-size:1.05rem;font-weight:800;letter-spacing:-.02em}\r\n.grua-sim .header-left .sub{font-size:.75rem;color:var(--muted);font-weight:500}\r\n.grua-sim .header-right{display:flex;gap:5px}\r\n.grua-sim .hdr-btn{width:34px;height:34px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg3);color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.85rem;transition:all .2s}\r\n.grua-sim .hdr-btn:hover,.grua-sim .hdr-btn.active{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}\r\n.grua-sim main{flex:1;min-height:0;display:flex;overflow:hidden}\r\n.grua-sim .canvas-wrap{flex:1;position:relative;overflow:hidden;background:var(--bg);border-right:1px solid var(--border)}\r\n.grua-sim .canvas-wrap canvas{position:absolute;top:0;left:0;width:100%;height:100%;display:block}\r\n.grua-sim .canvas-legend{position:absolute;bottom:8px;left:8px;background:rgba(13,17,23,.88);border:1px solid var(--border);border-radius:var(--radius-sm);padding:7px 11px;font-size:.68rem;color:var(--muted);pointer-events:none;line-height:1.65}\r\n.grua-sim[data-theme=\"light\"] .canvas-legend{background:rgba(255,255,255,.92)}\r\n.grua-sim .legend-item{display:flex;align-items:center;gap:5px}\r\n.grua-sim .legend-dot{width:9px;height:9px;border-radius:2px;flex-shrink:0}\r\n.grua-sim .panel{width:360px;min-width:360px;display:flex;flex-direction:column;background:var(--bg2);overflow:hidden}\r\n.grua-sim .mode-toggle{display:flex;padding:6px 10px;gap:4px;border-bottom:1px solid var(--border);flex-shrink:0}\r\n.grua-sim .mode-btn{flex:1;padding:5px 8px;border-radius:var(--radius-sm);border:1px solid var(--border);background:transparent;color:var(--muted);font-family:'DM Sans',sans-serif;font-size:.75rem;font-weight:600;cursor:pointer;transition:all .2s}\r\n.grua-sim .mode-btn:hover{color:var(--text)}.grua-sim .mode-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}\r\n.grua-sim .panel-scroll{flex:1;overflow-y:auto;padding:8px 10px}\r\n.grua-sim .ctrl-group{margin-bottom:12px}\r\n.grua-sim .ctrl-group-title{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--label);margin-bottom:6px;display:flex;align-items:center;gap:5px}\r\n.grua-sim .ctrl-group-title i{font-size:.65rem;color:var(--accent)}\r\n.grua-sim .ctrl-row{display:flex;align-items:center;gap:6px;margin-bottom:5px}\r\n.grua-sim .ctrl-row label{width:82px;font-size:.74rem;color:var(--label);flex-shrink:0;font-weight:500}\r\n.grua-sim .ctrl-row input[type=\"range\"]{flex:1;min-width:0}\r\n.grua-sim .num-input{width:58px;padding:4px 5px;border-radius:var(--radius-sm);border:1.5px solid var(--input-border);background:var(--bg3);color:var(--text);font-family:var(--font-mono);font-size:.74rem;font-weight:600;text-align:center;outline:none;transition:border-color .2s,box-shadow .2s}\r\n.grua-sim .num-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--input-focus-glow)}\r\n.grua-sim .ctrl-row .unit{font-size:.72rem;color:var(--unit);width:18px;flex-shrink:0;font-weight:500}\r\n.grua-sim .ctrl-hint{font-size:.62rem;color:var(--muted);margin-top:-2px;margin-bottom:5px;padding-left:88px;font-style:italic}\r\n.grua-sim input[type=\"range\"]{-webkit-appearance:none;appearance:none;height:4px;border-radius:2px;background:var(--border);outline:none;cursor:pointer;background-image:linear-gradient(to right,var(--accent) 0%,var(--accent) var(--fill,50%),var(--border) var(--fill,50%),var(--border) 100%)}\r\n.grua-sim input[type=\"range\"]::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;border:2px solid var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.3);cursor:pointer}\r\n.grua-sim input[type=\"range\"]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:2px solid var(--accent);cursor:pointer}\r\n.grua-sim .sep{height:1px;background:var(--border);margin:10px 0}\r\n.grua-sim .results-grid{display:grid;grid-template-columns:1fr 1fr;gap:3px 10px}\r\n.grua-sim .res-item{display:flex;justify-content:space-between;align-items:center;padding:3px 0;border-bottom:1px solid rgba(48,54,61,.35)}\r\n.grua-sim .res-label{font-size:.7rem;color:var(--label);font-weight:500}\r\n.grua-sim .res-value{font-family:var(--font-mono);font-size:.74rem;font-weight:700;color:var(--text)}\r\n.grua-sim .res-value.positive{color:var(--safe)}.grua-sim .res-value.negative{color:var(--danger)}.grua-sim .res-value.neutral{color:var(--warn)}\r\n.grua-sim .res-item.struct-row{background:var(--bg);margin:0 -6px;padding:3px 6px;border-radius:var(--radius-sm);border-bottom:none}\r\n.grua-sim .indicator{padding:10px;border-radius:var(--radius);margin-top:8px;text-align:center;font-weight:700;font-size:.85rem;transition:all .4s}\r\n.grua-sim .indicator.safe{background:var(--safe-bg);color:var(--safe);border:1px solid var(--safe)}\r\n.grua-sim .indicator.warn{background:var(--warn-bg);color:var(--warn);border:1px solid var(--warn)}\r\n.grua-sim .indicator.danger{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger)}\r\n.grua-sim .indicator .ind-icon{font-size:1.2rem;margin-right:5px}\r\n.grua-sim .indicator .ind-sub{font-size:.68rem;font-weight:400;margin-top:3px;opacity:.85;color:inherit}\r\n.grua-sim .scenarios-bar{height:42px;min-height:42px;display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:0 14px;background:var(--bg2);border-top:1px solid var(--border);overflow-x:auto}\r\n.grua-sim .sc-btn{padding:4px 12px;border-radius:16px;border:1px solid var(--border);background:var(--bg3);color:var(--label);font-family:'DM Sans',sans-serif;font-size:.72rem;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap;flex-shrink:0}\r\n.grua-sim .sc-btn:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}\r\n.grua-sim .equations-panel{background:var(--bg2);border-top:1px solid var(--border);max-height:0;overflow:hidden;transition:max-height .4s ease;flex-shrink:0}\r\n.grua-sim .equations-panel.open{max-height:600px;overflow-y:auto}\r\n.grua-sim .eq-inner{padding:14px 18px}\r\n.grua-sim .eq-section{margin-bottom:14px}\r\n.grua-sim .eq-section-title{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:6px;display:flex;align-items:center;gap:5px}\r\n.grua-sim .eq-block{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 14px;font-family:var(--font-mono);font-size:.74rem;line-height:1.75;color:var(--text);white-space:pre-wrap;overflow-x:auto}\r\n.grua-sim .eq-block .eq-label{color:var(--label)}.grua-sim .eq-block .eq-val{color:var(--accent);font-weight:600}.grua-sim .eq-block .eq-result{color:var(--safe);font-weight:700}.grua-sim .eq-block .eq-bad{color:var(--danger);font-weight:700}.grua-sim .eq-block .eq-struct{color:#A78BFA;font-weight:600}\r\n.grua-sim .eq-explain{font-size:.8rem;line-height:1.65;color:var(--label);padding:8px 12px;background:var(--bg);border-left:3px solid var(--accent);border-radius:0 var(--radius-sm) var(--radius-sm) 0}\r\n.grua-sim .toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(100px);padding:8px 20px;border-radius:16px;font-size:.8rem;font-weight:600;background:var(--bg3);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow);transition:transform .3s ease;z-index:100;pointer-events:none}\r\n.grua-sim .toast.show{transform:translateX(-50%) translateY(0)}.grua-sim .toast.success{border-color:var(--safe);color:var(--safe)}\r\n@keyframes gs-ps{0%,100%{box-shadow:0 0 0 0 rgba(63,185,80,.3)}50%{box-shadow:0 0 0 5px rgba(63,185,80,0)}}\r\n@keyframes gs-pw{0%,100%{box-shadow:0 0 0 0 rgba(210,153,34,.3)}50%{box-shadow:0 0 0 5px rgba(210,153,34,0)}}\r\n@keyframes gs-pd{0%,100%{box-shadow:0 0 0 0 rgba(248,81,73,.4)}50%{box-shadow:0 0 0 7px rgba(248,81,73,0)}}\r\n.grua-sim .indicator.safe{animation:gs-ps 2s infinite}.grua-sim .indicator.warn{animation:gs-pw 1.5s infinite}.grua-sim .indicator.danger{animation:gs-pd 1s infinite}\r\n@media(max-width:900px){\r\n  .grua-sim main{flex-direction:column}\r\n  .grua-sim .canvas-wrap{height:40vh;min-height:220px}\r\n  .grua-sim .panel{width:100%;min-width:0;max-height:40vh}\r\n  .grua-sim .scenarios-bar{height:auto;min-height:36px;flex-wrap:nowrap;padding:6px 10px}\r\n}\r\n@media(prefers-reduced-motion:reduce){.grua-sim *,.grua-sim *::before,.grua-sim *::after{animation-duration:.01ms!important;transition-duration:.01ms!important}}\r\n<\/style>\r\n\r\n<div class=\"grua-sim\" data-theme=\"dark\">\r\n\r\n<header>\r\n  <div class=\"header-left\">\r\n    <svg viewBox=\"0 0 32 32\" fill=\"none\"><rect x=\"14\" y=\"4\" width=\"4\" height=\"20\" rx=\"1\" fill=\"var(--accent)\"\/><rect x=\"0\" y=\"22\" width=\"32\" height=\"3\" rx=\"1\" fill=\"var(--accent)\" opacity=\".5\"\/><rect x=\"0\" y=\"4\" width=\"16\" height=\"2.5\" rx=\"1\" fill=\"#E8651A\"\/><rect x=\"16\" y=\"4\" width=\"16\" height=\"2.5\" rx=\"1\" fill=\"#E8651A\" opacity=\".8\"\/><rect x=\"0\" y=\"6.5\" width=\"4\" height=\"5\" rx=\".5\" fill=\"#6E7681\"\/><line x1=\"26\" y1=\"6.5\" x2=\"26\" y2=\"14\" stroke=\"#8B949E\" stroke-width=\"1\"\/><circle cx=\"26\" cy=\"15\" r=\"2\" fill=\"#E3B341\"\/><line x1=\"16\" y1=\"0\" x2=\"2\" y2=\"4\" stroke=\"#8B949E\" stroke-width=\".8\"\/><line x1=\"16\" y1=\"0\" x2=\"30\" y2=\"4\" stroke=\"#8B949E\" stroke-width=\".8\"\/><\/svg>\r\n    <div><h1>Equilibrio Est\u00e1tico<\/h1><span class=\"sub\">Simulador de Gr\u00faa Torre<\/span><\/div>\r\n  <\/div>\r\n  <div class=\"header-right\">\r\n    <button class=\"hdr-btn active\" id=\"btnPlay\" title=\"Reproducir \/ Pausar\"><i class=\"fas fa-pause\"><\/i><\/button>\r\n    <button class=\"hdr-btn\" id=\"btnDark\" title=\"Modo oscuro\/claro\"><i class=\"fas fa-moon\"><\/i><\/button>\r\n    <button class=\"hdr-btn\" id=\"btnScreenshot\" title=\"Captura\"><i class=\"fas fa-camera\"><\/i><\/button>\r\n  <\/div>\r\n<\/header>\r\n\r\n<main>\r\n  <div class=\"canvas-wrap\" id=\"canvasWrap\">\r\n    <canvas id=\"cv\"><\/canvas>\r\n    <div class=\"canvas-legend\">\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#E3B341\"><\/div>Peso de la carga<\/div>\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#6E7681\"><\/div>Peso del contrapeso<\/div>\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#A78BFA\"><\/div>Peso estructural<\/div>\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#3FB950\"><\/div>Reacci\u00f3n del suelo<\/div>\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#F0883E\"><\/div>Momento estabilizante<\/div>\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#F85149\"><\/div>Momento desestabilizante<\/div>\r\n      <div class=\"legend-item\"><div class=\"legend-dot\" style=\"background:#58A6FF;border-radius:50%\"><\/div>Centro de gravedad<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <aside class=\"panel\">\r\n    <div class=\"mode-toggle\">\r\n      <button class=\"mode-btn active\" data-mode=\"student\"><i class=\"fas fa-user-graduate\" style=\"margin-right:3px\"><\/i>Estudiante<\/button>\r\n      <button class=\"mode-btn\" data-mode=\"teacher\"><i class=\"fas fa-chalkboard-teacher\" style=\"margin-right:3px\"><\/i>Docente<\/button>\r\n    <\/div>\r\n    <div class=\"panel-scroll\">\r\n      <div class=\"ctrl-group\">\r\n        <div class=\"ctrl-group-title\"><i class=\"fas fa-weight-hanging\"><\/i>Contrapeso<\/div>\r\n        <div class=\"ctrl-row\"><label>Masa<\/label><input type=\"range\" id=\"sMcw\" min=\"5\" max=\"40\" step=\"0.5\" value=\"15\"><input type=\"number\" class=\"num-input\" id=\"nMcw\" min=\"5\" max=\"40\" step=\"0.5\" value=\"15\"><span class=\"unit\">t<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"ctrl-group\">\r\n        <div class=\"ctrl-group-title\"><i class=\"fas fa-box\"><\/i>Carga suspendida<\/div>\r\n        <div class=\"ctrl-row\"><label>Masa<\/label><input type=\"range\" id=\"sMl\" min=\"0\" max=\"30\" step=\"0.5\" value=\"10\"><input type=\"number\" class=\"num-input\" id=\"nMl\" min=\"0\" max=\"30\" step=\"0.5\" value=\"10\"><span class=\"unit\">t<\/span><\/div>\r\n        <div class=\"ctrl-row\"><label>Posici\u00f3n<\/label><input type=\"range\" id=\"sPos\" min=\"0\" max=\"60\" step=\"0.5\" value=\"40\"><input type=\"number\" class=\"num-input\" id=\"nPos\" min=\"0\" max=\"60\" step=\"0.5\" value=\"40\"><span class=\"unit\">m<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"ctrl-group\">\r\n        <div class=\"ctrl-group-title\"><i class=\"fas fa-ruler-horizontal\"><\/i>Geometr\u00eda del brazo<\/div>\r\n        <div class=\"ctrl-row\"><label>Brazo izq.<\/label><input type=\"range\" id=\"sBi\" min=\"10\" max=\"40\" step=\"1\" value=\"20\"><input type=\"number\" class=\"num-input\" id=\"nBi\" min=\"10\" max=\"40\" step=\"1\" value=\"20\"><span class=\"unit\">m<\/span><\/div>\r\n        <div class=\"ctrl-row\"><label>Brazo der.<\/label><input type=\"range\" id=\"sBd\" min=\"20\" max=\"90\" step=\"1\" value=\"60\"><input type=\"number\" class=\"num-input\" id=\"nBd\" min=\"20\" max=\"90\" step=\"1\" value=\"60\"><span class=\"unit\">m<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"ctrl-group\">\r\n        <div class=\"ctrl-group-title\"><i class=\"fas fa-truck\"><\/i>Carro<\/div>\r\n        <div class=\"ctrl-row\"><label>Masa<\/label><input type=\"range\" id=\"sMt\" min=\"0.5\" max=\"5\" step=\"0.1\" value=\"2\"><input type=\"number\" class=\"num-input\" id=\"nMt\" min=\"0.5\" max=\"5\" step=\"0.1\" value=\"2\"><span class=\"unit\">t<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"ctrl-group\">\r\n        <div class=\"ctrl-group-title\"><i class=\"fas fa-building\"><\/i>Estructura<\/div>\r\n        <div class=\"ctrl-row\"><label>Masa torre<\/label><input type=\"range\" id=\"sMs\" min=\"10\" max=\"80\" step=\"1\" value=\"30\"><input type=\"number\" class=\"num-input\" id=\"nMs\" min=\"10\" max=\"80\" step=\"1\" value=\"30\"><span class=\"unit\">t<\/span><\/div>\r\n        <div class=\"ctrl-hint\">Torre + base + cabrestante. Act\u00faa en x = 0 (pivote).<\/div>\r\n      <\/div>\r\n      <div class=\"sep\"><\/div>\r\n      <div class=\"ctrl-group\">\r\n        <div class=\"ctrl-group-title\"><i class=\"fas fa-calculator\"><\/i>Resultados<\/div>\r\n        <div class=\"results-grid\">\r\n          <div class=\"res-item\"><span class=\"res-label\">P. contrapeso<\/span><span class=\"res-value\" id=\"rPc\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">P. carga<\/span><span class=\"res-value\" id=\"rPl\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">P. carro<\/span><span class=\"res-value\" id=\"rPt\">\u2014<\/span><\/div>\r\n          <div class=\"res-item struct-row\"><span class=\"res-label\">P. estructura<\/span><span class=\"res-value\" id=\"rPs\" style=\"color:#A78BFA\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\" style=\"grid-column:1\/-1;border-bottom:1px solid var(--border);padding-bottom:5px\"><span class=\"res-label\" style=\"font-weight:700\">Peso total \u2193<\/span><span class=\"res-value\" id=\"rPtot\" style=\"font-size:.8rem\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\" style=\"grid-column:1\/-1\"><span class=\"res-label\">Reacci\u00f3n N \u2191<\/span><span class=\"res-value\" id=\"rN\" style=\"color:var(--safe)\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">M. contrap.<\/span><span class=\"res-value\" id=\"rMc\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">M. carga<\/span><span class=\"res-value\" id=\"rMl\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">M. carro<\/span><span class=\"res-value\" id=\"rMtc\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">M. neto<\/span><span class=\"res-value\" id=\"rMtot\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">&Sigma;Fy<\/span><span class=\"res-value\" id=\"rSF\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\"><span class=\"res-label\">&Sigma;M<\/span><span class=\"res-value\" id=\"rSM\">\u2014<\/span><\/div>\r\n          <div class=\"res-item\" style=\"grid-column:1\/-1\"><span class=\"res-label\">Factor equilibrio<\/span><span class=\"res-value\" id=\"rFE\" style=\"font-size:.85rem\">\u2014<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"indicator safe\" id=\"indS\"><span class=\"ind-icon\">&#x1F7E2;<\/span>Seguro<div class=\"ind-sub\">La gr\u00faa se mantiene estable<\/div><\/div>\r\n      <div class=\"indicator safe\" id=\"indE\" style=\"margin-top:6px\"><span class=\"ind-icon\">&#x2705;<\/span>Equilibrado<div class=\"ind-sub\">Los momentos se compensan<\/div><\/div>\r\n    <\/div>\r\n  <\/aside>\r\n<\/main>\r\n\r\n<div class=\"scenarios-bar\">\r\n  <button class=\"sc-btn\" data-sc=\"balanced\"><i class=\"fas fa-balance-scale\" style=\"margin-right:3px\"><\/i>Equilibrada<\/button>\r\n  <button class=\"sc-btn\" data-sc=\"unstable\"><i class=\"fas fa-exclamation-triangle\" style=\"margin-right:3px\"><\/i>Inestable<\/button>\r\n  <button class=\"sc-btn\" data-sc=\"maxload\"><i class=\"fas fa-arrow-up\" style=\"margin-right:3px\"><\/i>Carga m\u00e1xima<\/button>\r\n  <button class=\"sc-btn\" data-sc=\"noload\"><i class=\"fas fa-times-circle\" style=\"margin-right:3px\"><\/i>Sin carga<\/button>\r\n  <button class=\"sc-btn\" data-sc=\"cwonly\"><i class=\"fas fa-cube\" style=\"margin-right:3px\"><\/i>Solo contrapeso<\/button>\r\n  <button class=\"sc-btn\" data-sc=\"reset\"><i class=\"fas fa-undo\" style=\"margin-right:3px\"><\/i>Restablecer<\/button>\r\n<\/div>\r\n\r\n<section class=\"equations-panel\" id=\"eqPanel\">\r\n  <div class=\"eq-inner\">\r\n    <div class=\"eq-section\">\r\n      <div class=\"eq-section-title\"><i class=\"fas fa-project-diagram\"><\/i>Diagrama de cuerpo libre<\/div>\r\n      <div class=\"eq-explain\">El sistema aislado es la gr\u00faa completa. Act\u00faan sobre ella 5 fuerzas: peso del contrapeso (Pc) hacia abajo en el extremo del brazo izquierdo, peso de la carga (Pl) y del carro (Pt) hacia abajo en la posici\u00f3n del carro, peso estructural (Pe) hacia abajo en el pivote (x = 0), y la reacci\u00f3n normal del suelo (N) hacia arriba en la base de la torre.<\/div>\r\n    <\/div>\r\n    <div class=\"eq-section\">\r\n      <div class=\"eq-section-title\"><i class=\"fas fa-superscript\"><\/i>Ecuaciones de equilibrio<\/div>\r\n      <div class=\"eq-block\" id=\"eqBlock\">Cargando...<\/div>\r\n    <\/div>\r\n    <div class=\"eq-section\">\r\n      <div class=\"eq-section-title\"><i class=\"fas fa-lightbulb\"><\/i>An\u00e1lisis conceptual<\/div>\r\n      <div class=\"eq-explain\" id=\"eqExplain\">Cargando...<\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<div class=\"toast\" id=\"toast\"><\/div>\r\n\r\n<\/div><!-- \/.grua-sim -->\r\n\r\n<script>\r\n(function(){\r\n  \"use strict\";\r\n  var container = document.querySelector('.grua-sim');\r\n  if (!container) return;\r\n\r\n  \/* mS = masa estructural (torre+base+cabrestante), act\u00faa en x=0 *\/\r\n  var S = { mCw:15, mL:10, pos:40, bi:20, bd:60, mt:2, mS:30, g:9.81, teacher:false, dark:true, play:true };\r\n  var TH=30, TW=2.2, BH=1.0, CHW=2.8, CHH=2.8, CRW=2.0, CRH=1.2, CL=13, CATH=4.2, BW=5.5, BHH=1.0;\r\n  var V = { sc:1, ox:0, oy:0, cw:0, ch:0, tilt:0, fs:12 };\r\n  var anim = 0, lastTs = 0;\r\n\r\n  var bldgs = [];\r\n  for (var i=0; i<45; i++) bldgs.push({ x:-120+Math.random()*260, w:6+Math.random()*16, h:8+Math.random()*38, s:0.03+Math.random()*0.06 });\r\n\r\n  var cv = document.getElementById('cv');\r\n  var cx = cv.getContext('2d');\r\n  var C = {\r\n    mCw:{s:document.getElementById('sMcw'),n:document.getElementById('nMcw')},\r\n    mL:{s:document.getElementById('sMl'),n:document.getElementById('nMl')},\r\n    pos:{s:document.getElementById('sPos'),n:document.getElementById('nPos')},\r\n    bi:{s:document.getElementById('sBi'),n:document.getElementById('nBi')},\r\n    bd:{s:document.getElementById('sBd'),n:document.getElementById('nBd')},\r\n    mt:{s:document.getElementById('sMt'),n:document.getElementById('nMt')},\r\n    mS:{s:document.getElementById('sMs'),n:document.getElementById('nMs')}\r\n  };\r\n  var R = {\r\n    Pc:document.getElementById('rPc'), Pl:document.getElementById('rPl'),\r\n    Pt:document.getElementById('rPt'), Ps:document.getElementById('rPs'),\r\n    Ptot:document.getElementById('rPtot'), N:document.getElementById('rN'),\r\n    Mc:document.getElementById('rMc'), Ml:document.getElementById('rMl'),\r\n    Mtc:document.getElementById('rMtc'), Mtot:document.getElementById('rMtot'),\r\n    SF:document.getElementById('rSF'), SM:document.getElementById('rSM'),\r\n    FE:document.getElementById('rFE')\r\n  };\r\n\r\n  \/* ================================================================\r\n     C\u00c1LCULO \u2014 todas las fuerzas y momentos expl\u00edcitos\r\n     ================================================================ *\/\r\n  function calc() {\r\n    \/* Pesos en kN (m en t \u2192 kg \u00d7 g \/ 1000) *\/\r\n    var Pc  = S.mCw * 1000 * S.g \/ 1000;\r\n    var Pl  = S.mL  * 1000 * S.g \/ 1000;\r\n    var Pt  = S.mt  * 1000 * S.g \/ 1000;\r\n    var Pe  = S.mS  * 1000 * S.g \/ 1000;   \/* peso estructural *\/\r\n    var Ptot = Pc + Pl + Pt + Pe;\r\n\r\n    \/* Momentos respecto al pivote (x=0) *\/\r\n    var Mc   = Pc * S.bi;          \/* estabilizante (+) *\/\r\n    var Ml   = Pl * S.pos;         \/* desestabilizante (-) *\/\r\n    var Mtc  = Pt * S.pos;         \/* desestabilizante (-) *\/\r\n    \/* Pe act\u00faa en x=0 \u2192 momento nulo *\/\r\n    var Me   = Mc;                  \/* momento estabilizante total *\/\r\n    var Md   = Ml + Mtc;           \/* momento desestabilizante total *\/\r\n    var Mnet = Md - Me;             \/* >0 \u21d2 gana el desestabilizante *\/\r\n\r\n    \/* Reacci\u00f3n del suelo: \u03a3Fy = 0  \u21d2  N = Pc + Pl + Pt + Pe *\/\r\n    var N   = Ptot;\r\n    \/* Verificaci\u00f3n: \u03a3Fy = N - Pc - Pl - Pt - Pe (debe ser 0) *\/\r\n    var sFy = N - Pc - Pl - Pt - Pe;\r\n    \/* Verificaci\u00f3n: \u03a3M = Md - Me (debe ser 0 para equilibrio) *\/\r\n    var sM  = Mnet;\r\n\r\n    \/* Factor de equilibrio = M_estab \/ M_dest *\/\r\n    var fe  = Md > 0.01 ? Me \/ Md : (Me > 0.01 ? 1e9 : 0);\r\n\r\n    \/* Centro de gravedad total (masa en t, distancias en m) *\/\r\n    var mTotal = S.mCw + S.mL + S.mt + S.mS;\r\n    var cgX    = mTotal > 0\r\n      ? (-S.mCw * S.bi + (S.mL + S.mt) * S.pos + S.mS * 0) \/ mTotal\r\n      : 0;\r\n\r\n    \/* Clasificaci\u00f3n de estabilidad *\/\r\n    var sl, st, ss;\r\n    if (fe >= 1.15)      { sl='safe';  st='Seguro';              ss='La gr\u00faa se mantiene estable'; }\r\n    else if (fe >= 1.0)  { sl='warn';  st='Cercano al l\u00edmite';   ss='Margen de seguridad reducido'; }\r\n    else                 { sl='danger'; st='Riesgo de volcado';    ss='El momento de la carga supera al del contrapeso'; }\r\n\r\n    \/* Clasificaci\u00f3n de equilibrio de momentos *\/\r\n    var mx = Math.max(Me, Md, 1), rt = Math.abs(Mnet) \/ mx;\r\n    var el, et, es;\r\n    if (rt < 0.05)       { el='safe';  et='Equilibrado';       es='Los momentos se compensan'; }\r\n    else if (rt < 0.15)  { el='warn';  et='Casi equilibrado';  es='Existe un peque\u00f1o desbalance'; }\r\n    else                 { el='danger'; et='No equilibrado';    es='Los momentos no se compensan'; }\r\n\r\n    return {\r\n      Pc:Pc, Pl:Pl, Pt:Pt, Pe:Pe, Ptot:Ptot,\r\n      Mc:Mc, Ml:Ml, Mtc:Mtc, Me:Me, Md:Md, Mnet:Mnet,\r\n      N:N, sFy:sFy, sM:sM, fe:fe,\r\n      cgX:cgX, mTotal:mTotal,\r\n      sl:sl, st:st, ss:ss, el:el, et:et, es:es\r\n    };\r\n  }\r\n\r\n  \/* ================================================================\r\n     COORDENADAS MUNDO \u2192 CANVAS\r\n     ================================================================ *\/\r\n  function wc(x,y){ return [V.ox + x*V.sc, V.oy + y*V.sc]; }\r\n  function wcr(x,y){\r\n    var c=Math.cos(V.tilt), s=Math.sin(V.tilt);\r\n    return wc(x*c - y*s, x*s + y*c);\r\n  }\r\n\r\n  function setupView() {\r\n    V.cw = cv.clientWidth;\r\n    V.ch = cv.clientHeight;\r\n    if (V.cw < 50) V.cw = Math.max(300, cv.parentElement.clientWidth || 400);\r\n    if (V.ch < 50) V.ch = Math.max(250, cv.parentElement.clientHeight || 350);\r\n    var dpr = window.devicePixelRatio || 1;\r\n    cv.width  = V.cw * dpr;\r\n    cv.height = V.ch * dpr;\r\n    cx.setTransform(dpr, 0, 0, dpr, 0, 0);\r\n    var mg=4, wL=-S.bi-CHW-mg, wR=S.bd+mg;\r\n    var wT=-CATH-mg, loadH=S.mL>0?1.5+S.mL*0.07:0;\r\n    var wB=TH+BHH+CL+CRH+loadH+mg;\r\n    var ww=wR-wL, wh=wB-wT;\r\n    V.sc = Math.min(V.cw\/ww, V.ch\/wh)*0.88;\r\n    V.sc = Math.max(1, Math.min(V.sc, 14));\r\n    V.ox = -wL*V.sc + (V.cw - ww*V.sc)\/2;\r\n    V.oy = -wT*V.sc + (V.ch - wh*V.sc)\/2;\r\n    V.fs = Math.max(0.9, Math.min(1.6, Math.sqrt(V.cw*V.cw + V.ch*V.ch) \/ 1200));\r\n  }\r\n\r\n  \/* ================================================================\r\n     PRIMITIVAS DE DIBUJO\r\n     ================================================================ *\/\r\n  function ln(x1,y1,x2,y2,col,w,rot){\r\n    var fn=rot?wcr:wc, a=fn(x1,y1), b=fn(x2,y2);\r\n    cx.strokeStyle=col; cx.lineWidth=Math.max(0.5,w); cx.lineCap='round';\r\n    cx.beginPath(); cx.moveTo(a[0],a[1]); cx.lineTo(b[0],b[1]); cx.stroke();\r\n  }\r\n  function rc(x,y,w,h,fill,str,lw,rot){\r\n    var fn=rot?wcr:wc, a=fn(x,y), pw=w*V.sc, ph=h*V.sc;\r\n    if(fill){cx.fillStyle=fill;cx.fillRect(a[0],a[1],pw,ph);}\r\n    if(str){cx.strokeStyle=str;cx.lineWidth=Math.max(0.5,lw||1);cx.strokeRect(a[0],a[1],pw,ph);}\r\n  }\r\n  function crc(wx,wy,r,fill,str,lw,rot){\r\n    var fn=rot?wcr:wc, a=fn(wx,wy), pr=Math.max(1,r*V.sc);\r\n    if(fill){cx.fillStyle=fill;cx.beginPath();cx.arc(a[0],a[1],pr,0,Math.PI*2);cx.fill();}\r\n    if(str){cx.strokeStyle=str;cx.lineWidth=Math.max(0.5,lw||1);cx.beginPath();cx.arc(a[0],a[1],pr,0,Math.PI*2);cx.stroke();}\r\n  }\r\n  function txt(s,wx,wy,size,weight,col,al,bl,rot){\r\n    var fn=rot?wcr:wc, a=fn(wx,wy);\r\n    var fs=Math.round(size*V.fs);\r\n    cx.fillStyle=col; cx.font=(weight||'bold')+' '+fs+'px \"JetBrains Mono\"';\r\n    cx.textAlign=al||'center'; cx.textBaseline=bl||'middle';\r\n    cx.fillText(s,a[0],a[1]);\r\n  }\r\n  function label(s,px,py,size,weight,col,al,bl){\r\n    var fs=Math.round(size*V.fs);\r\n    cx.font=(weight||'bold')+' '+fs+'px \"JetBrains Mono\"';\r\n    cx.textAlign=al||'center'; cx.textBaseline=bl||'middle';\r\n    var m=cx.measureText(s), pad=4*V.fs;\r\n    var lx=al==='left'?px:al==='right'?px-m.width:px-m.width\/2;\r\n    var ly=py-fs\/2-pad, lw=m.width+pad*2, lh=fs+pad*2, br=3*V.fs;\r\n    cx.fillStyle=S.dark?'rgba(13,17,23,0.88)':'rgba(255,255,255,0.9)';\r\n    cx.beginPath();cx.moveTo(lx+br,ly);cx.lineTo(lx+lw-br,ly);cx.quadraticCurveTo(lx+lw,ly,lx+lw,ly+br);\r\n    cx.lineTo(lx+lw,ly+lh-br);cx.quadraticCurveTo(lx+lw,ly+lh,lx+lw-br,ly+lh);\r\n    cx.lineTo(lx+br,ly+lh);cx.quadraticCurveTo(lx,ly+lh,lx,ly+lh-br);\r\n    cx.lineTo(lx,ly+br);cx.quadraticCurveTo(lx,ly,lx+br,ly);cx.closePath();cx.fill();\r\n    cx.strokeStyle=S.dark?'rgba(48,54,61,0.6)':'rgba(200,210,220,0.6)';cx.lineWidth=0.8;cx.stroke();\r\n    cx.fillStyle=col; cx.fillText(s,px,py);\r\n  }\r\n  function arrow(x,y,len,ang,col,lab){\r\n    len=Math.max(12,Math.min(len,130));\r\n    var hl=Math.min(12,len*0.28),ha=0.45;\r\n    var ex=x+Math.cos(ang)*len, ey=y+Math.sin(ang)*len;\r\n    var sx=x+Math.cos(ang)*3,  sy=y+Math.sin(ang)*3;\r\n    cx.strokeStyle=col; cx.fillStyle=col; cx.lineWidth=3; cx.lineCap='round';\r\n    cx.beginPath(); cx.moveTo(sx,sy); cx.lineTo(ex-Math.cos(ang)*hl*0.5,ey-Math.sin(ang)*hl*0.5); cx.stroke();\r\n    cx.beginPath(); cx.moveTo(ex,ey);\r\n    cx.lineTo(ex-hl*Math.cos(ang-ha),ey-hl*Math.sin(ang-ha));\r\n    cx.lineTo(ex-hl*0.35*Math.cos(ang),ey-hl*0.35*Math.sin(ang));\r\n    cx.lineTo(ex-hl*Math.cos(ang+ha),ey-hl*Math.sin(ang+ha));\r\n    cx.closePath(); cx.fill();\r\n    if(lab){\r\n      var off=12*V.fs;\r\n      var lx=ex+off*Math.cos(ang+Math.PI\/2), ly=ey+off*Math.sin(ang+Math.PI\/2);\r\n      label(lab,lx,ly,12,'bold',col,'left','middle');\r\n    }\r\n  }\r\n  function arcA(px,py,r,sa,ea,ccw,col,lw,lab){\r\n    r=Math.max(14,r); var steps=36;\r\n    cx.strokeStyle=col; cx.lineWidth=lw; cx.lineCap='round'; cx.beginPath();\r\n    for(var i=0;i<=steps;i++){\r\n      var t=i\/steps, a=sa+(ea-sa)*t, x=px+r*Math.cos(a), y=py+r*Math.sin(a);\r\n      i===0?cx.moveTo(x,y):cx.lineTo(x,y);\r\n    }\r\n    cx.stroke();\r\n    var ta=ccw?ea-Math.PI\/2:ea+Math.PI\/2;\r\n    var hx=px+r*Math.cos(ea), hy=py+r*Math.sin(ea), hl=9, hha=0.5;\r\n    cx.fillStyle=col; cx.beginPath(); cx.moveTo(hx,hy);\r\n    cx.lineTo(hx-hl*Math.cos(ta-hha),hy-hl*Math.sin(ta-hha));\r\n    cx.lineTo(hx-hl*Math.cos(ta+hha),hy-hl*Math.sin(ta+hha));\r\n    cx.closePath(); cx.fill();\r\n    if(lab){\r\n      var ma=(sa+ea)\/2;\r\n      var lx=px+(r+22*V.fs)*Math.cos(ma), ly=py+(r+22*V.fs)*Math.sin(ma);\r\n      label(lab,lx,ly,11,'bold',col,'center','middle');\r\n    }\r\n  }\r\n  function drawArm(x1,x2,col,dk,lt,rot){\r\n    var hh=BH\/2;\r\n    ln(x1,-hh,x2,-hh,col,2.2,rot); ln(x1,hh,x2,hh,col,2.2,rot);\r\n    var n=Math.max(2,Math.floor(Math.abs(x2-x1)\/2.5));\r\n    for(var i=0;i<=n;i++){\r\n      var x=x1+(x2-x1)*i\/n;\r\n      ln(x,-hh,x,hh,dk,0.7,rot);\r\n      if(i<n){\r\n        var nx=x1+(x2-x1)*(i+1)\/n;\r\n        ln(x,-hh,nx,hh,lt,0.4,rot); ln(x,hh,nx,-hh,lt,0.4,rot);\r\n      }\r\n    }\r\n  }\r\n\r\n  \/* ================================================================\r\n     DIBUJO COMPLETO\r\n     ================================================================ *\/\r\n  function draw(res) {\r\n    try { setupView(); } catch(e) { return; }\r\n    var dk=S.dark, W=V.cw, H=V.ch;\r\n\r\n    \/* Cielo *\/\r\n    var sky=cx.createLinearGradient(0,0,0,H);\r\n    if(dk){sky.addColorStop(0,'#080E18');sky.addColorStop(0.6,'#0F1923');sky.addColorStop(1,'#151E2B');}\r\n    else{sky.addColorStop(0,'#B8D4E8');sky.addColorStop(0.6,'#D4E4F0');sky.addColorStop(1,'#E8EEF2');}\r\n    cx.fillStyle=sky; cx.fillRect(0,0,W,H);\r\n\r\n    \/* Suelo *\/\r\n    var gy=wc(0,TH+BHH)[1];\r\n    var grd=cx.createLinearGradient(0,gy,0,H);\r\n    if(dk){grd.addColorStop(0,'#1A2010');grd.addColorStop(1,'#0D1208');}\r\n    else{grd.addColorStop(0,'#8BA87A');grd.addColorStop(1,'#6B8A5A');}\r\n    cx.fillStyle=grd; cx.fillRect(0,gy,W,H-gy);\r\n    cx.strokeStyle=dk?'#2A3520':'#5A7A4A'; cx.lineWidth=2;\r\n    cx.beginPath(); cx.moveTo(0,gy); cx.lineTo(W,gy); cx.stroke();\r\n\r\n    \/* Edificios de fondo *\/\r\n    for(var i=0;i<bldgs.length;i++){\r\n      var b=bldgs[i], bx=wc(b.x,0)[0], bw=b.w*V.sc, bh=b.h*V.sc*0.55;\r\n      cx.fillStyle=dk?'rgba(200,210,220,'+b.s+')':'rgba(100,120,140,'+(b.s+0.04)+')';\r\n      cx.fillRect(bx,gy-bh,bw,bh);\r\n      if(bw>6&&bh>12){\r\n        var ws=Math.max(1.5,bw*0.07), gp=ws*2.5;\r\n        for(var wy=gy-bh+gp;wy<gy-gp;wy+=gp)\r\n          for(var wx=bx+gp;wx<bx+bw-gp;wx+=gp){\r\n            cx.fillStyle=dk?'rgba(255,220,120,0.12)':'rgba(255,255,255,0.35)';\r\n            cx.fillRect(wx,wy,ws,ws);\r\n          }\r\n      }\r\n    }\r\n\r\n    \/* Grilla sutil *\/\r\n    cx.strokeStyle=dk?'rgba(255,255,255,0.018)':'rgba(0,0,0,0.035)'; cx.lineWidth=0.5;\r\n    for(var gx=-120;gx<=200;gx+=10){\r\n      var gxc=wc(gx,0)[0];\r\n      if(gxc>0&&gxc<W){cx.beginPath();cx.moveTo(gxc,0);cx.lineTo(gxc,H);cx.stroke();}\r\n    }\r\n\r\n    \/* Inclinaci\u00f3n visual *\/\r\n    var tt=Math.max(-3.5,Math.min(3.5,(res.Mnet\/90000)*3.5))*Math.PI\/180;\r\n    V.tilt+=(tt-V.tilt)*0.04;\r\n\r\n    \/* Colores *\/\r\n    var cM=dk?'#E8651A':'#D05515', cD=dk?'#B84D12':'#A04010', cL=dk?'#F4985A':'#E87840';\r\n    var cCW=dk?'#4A5568':'#718096', cCD=dk?'#2D3748':'#4A5568', cCb=dk?'#8B949E':'#718096';\r\n    var cStr=dk?'#A78BFA':'#7C3AED';\r\n\r\n    \/* Zona de base (estabilidad) *\/\r\n    var zL=wc(-BW\/2,0)[0], zR=wc(BW\/2,0)[0], zY=wc(0,-BH\/2-1.5)[1];\r\n    cx.fillStyle=dk?'rgba(63,185,80,0.05)':'rgba(63,185,80,0.08)';\r\n    cx.fillRect(zL,zY,zR-zL,5*V.sc);\r\n    cx.strokeStyle=dk?'rgba(63,185,80,0.18)':'rgba(63,185,80,0.35)';\r\n    cx.lineWidth=1; cx.setLineDash([3,3]); cx.strokeRect(zL,zY,zR-zL,5*V.sc); cx.setLineDash([]);\r\n\r\n    \/* Torre (reticulado) *\/\r\n    var hw=TW\/2, nS=Math.floor(TH\/2.5);\r\n    ln(-hw,0,-hw,TH,cM,2.5,true); ln(hw,0,hw,TH,cM,2.5,true); ln(0,0,0,TH,cM,1.2,true);\r\n    for(i=0;i<=nS;i++){\r\n      var y=TH*i\/nS;\r\n      ln(-hw,y,hw,y,cD,0.9,true);\r\n      if(i<nS){var ny=TH*(i+1)\/nS; ln(-hw,y,hw,ny,cL,0.5,true); ln(hw,y,-hw,ny,cL,0.5,true);}\r\n    }\r\n\r\n    \/* Base *\/\r\n    ln(-hw,TH,-BW\/2,TH+BHH,cM,2.5,true); ln(hw,TH,BW\/2,TH+BHH,cM,2.5,true);\r\n    ln(-BW\/2,TH+BHH,BW\/2,TH+BHH,cM,2,true); ln(-BW\/2,TH+BHH,BW\/2,TH,cM,1,true);\r\n\r\n    \/* Cabrestante *\/\r\n    var chw=hw*0.7;\r\n    ln(-chw,0,0,-CATH,cM,2.5,true); ln(chw,0,0,-CATH,cM,2.5,true); ln(-chw,0,chw,0,cM,2,true);\r\n\r\n    \/* Cables de soporte *\/\r\n    cx.globalAlpha=0.55;\r\n    ln(0,-CATH,-S.bi,-BH\/2,cCb,1.2,true); ln(0,-CATH,S.bd,-BH\/2,cCb,1.2,true); ln(0,-CATH,S.bd*0.5,-BH\/2,cCb,0.8,true);\r\n    cx.globalAlpha=1;\r\n\r\n    \/* Brazos con reticulado *\/\r\n    drawArm(-S.bi,0,cM,cD,cL,true); drawArm(0,S.bd,cM,cD,cL,true);\r\n\r\n    \/* Contrapeso *\/\r\n    var cxX=-S.bi-CHW\/2, cxY=-BH\/2-CHH;\r\n    rc(cxX,cxY,CHW,CHH,cCW,cCD,1.5,true);\r\n    cx.save(); var rp=wcr(cxX,cxY), rpw=CHW*V.sc, rph=CHH*V.sc;\r\n    cx.beginPath(); cx.rect(rp[0],rp[1],rpw,rph); cx.clip();\r\n    cx.strokeStyle=dk?'rgba(255,255,255,0.05)':'rgba(0,0,0,0.06)'; cx.lineWidth=0.7;\r\n    for(var li=-CHH;li<CHW+CHH;li+=3.5){\r\n      var l1=wcr(cxX+li,cxY), l2=wcr(cxX+li-CHH,cxY+CHH);\r\n      cx.beginPath(); cx.moveTo(l1[0],l1[1]); cx.lineTo(l2[0],l2[1]); cx.stroke();\r\n    }\r\n    cx.restore();\r\n    label(S.mCw.toFixed(1)+' t',wcr(cxX+CHW\/2,cxY+CHH\/2)[0],wcr(cxX+CHW\/2,cxY+CHH\/2)[1],13,'bold',dk?'#CBD5E0':'#2D3748','center','middle');\r\n\r\n    \/* Carro *\/\r\n    var crX=S.pos-CRW\/2, crY=BH\/2;\r\n    rc(crX,crY,CRW,CRH,dk?'#C05621':'#B84D12',cD,1.2,true);\r\n    crc(crX+0.4,crY,0.28,dk?'#2D3748':'#4A5568',null,0,true);\r\n    crc(crX+CRW-0.4,crY,0.28,dk?'#2D3748':'#4A5568',null,0,true);\r\n\r\n    \/* Cable *\/\r\n    var cs=wcr(S.pos,BH\/2+CRH), csX=cs[0], csY=cs[1], ceY=csY+CL*V.sc;\r\n    var vibA=S.play?(0.18+Math.abs(V.tilt)*12):0;\r\n    cx.strokeStyle=cCb; cx.lineWidth=1.5; cx.beginPath(); cx.moveTo(csX,csY);\r\n    for(i=1;i<=20;i++){\r\n      var t=i\/20, cy=csY+t*(ceY-csY);\r\n      var vib=S.play?Math.sin(anim*5+t*10)*vibA*V.sc*t*(1-t)*4:0;\r\n      cx.lineTo(csX+vib,cy);\r\n    }\r\n    cx.stroke();\r\n\r\n    \/* Gancho *\/\r\n    var hSw=S.play?Math.sin(anim*2.5)*0.05*(S.mL>0?1:0.3):0;\r\n    var hCX=csX+Math.sin(hSw)*CL*V.sc*0.25, hCY=ceY, hR=Math.max(3,0.55*V.sc);\r\n    cx.strokeStyle=dk?'#A0AEC0':'#718096'; cx.lineWidth=Math.max(1.5,2*V.sc*0.25);\r\n    cx.beginPath(); cx.arc(hCX,hCY+hR,hR,0,Math.PI,false); cx.stroke();\r\n    cx.beginPath(); cx.moveTo(hCX,hCY); cx.lineTo(hCX,hCY+hR*0.5); cx.stroke();\r\n\r\n    \/* Carga *\/\r\n    var loadBot=hCY+hR*2;\r\n    if(S.mL>0){\r\n      var lw=1.4+S.mL*0.07, lh=1.4+S.mL*0.07;\r\n      var lx=hCX-lw*V.sc\/2, ly=hCY+hR*2, lsw=lw*V.sc, lsh=lh*V.sc;\r\n      cx.fillStyle=dk?'rgba(0,0,0,0.3)':'rgba(0,0,0,0.12)'; cx.fillRect(lx+2,ly+2,lsw,lsh);\r\n      var lg=cx.createLinearGradient(lx,ly,lx,ly+lsh);\r\n      lg.addColorStop(0,dk?'#E3B341':'#D4A030'); lg.addColorStop(1,dk?'#B8860B':'#A07020');\r\n      cx.fillStyle=lg; cx.fillRect(lx,ly,lsw,lsh);\r\n      cx.strokeStyle=dk?'#8B6914':'#7A5A10'; cx.lineWidth=1; cx.strokeRect(lx,ly,lsw,lsh);\r\n      label(S.mL.toFixed(1)+' t',lx+lsw\/2,ly+lsh\/2,12,'bold',dk?'#FFF8E1':'#3E2C00','center','middle');\r\n      loadBot=ly+lsh;\r\n    }\r\n\r\n    \/* Pivote *\/\r\n    var pv=wc(0,0);\r\n    cx.fillStyle=dk?'#F0883E':'#D06020'; cx.beginPath(); cx.arc(pv[0],pv[1],Math.max(5,V.sc*0.5),0,Math.PI*2); cx.fill();\r\n    cx.strokeStyle=dk?'#FFB070':'#E08040'; cx.lineWidth=2; cx.beginPath(); cx.arc(pv[0],pv[1],Math.max(5,V.sc*0.5),0,Math.PI*2); cx.stroke();\r\n\r\n    \/* Escala m\u00e9trica *\/\r\n    var rfs=Math.round(Math.max(10,11*V.fs));\r\n    cx.font=rfs+'px \"JetBrains Mono\"'; cx.textAlign='center';\r\n    cx.strokeStyle=dk?'rgba(139,148,158,0.4)':'rgba(100,110,120,0.4)';\r\n    cx.fillStyle=dk?'rgba(139,148,158,0.65)':'rgba(100,110,120,0.65)';\r\n    cx.lineWidth=1;\r\n    for(var d=0;d<=S.bd;d+=5){\r\n      var rp2=wcr(d,BH\/2+0.4), mj=d%10===0, th=mj?7:4;\r\n      cx.beginPath(); cx.moveTo(rp2[0],rp2[1]); cx.lineTo(rp2[0],rp2[1]+th); cx.stroke();\r\n      if(mj&&d>0) cx.fillText(d+'m',rp2[0],rp2[1]+th+10);\r\n    }\r\n\r\n    \/* Cota de posici\u00f3n *\/\r\n    if(S.pos>1){\r\n      var d1=wcr(0,-BH\/2-3.5), d2=wcr(S.pos,-BH\/2-3.5);\r\n      cx.strokeStyle=dk?'rgba(240,136,62,0.5)':'rgba(200,100,30,0.5)'; cx.lineWidth=1.2;\r\n      cx.setLineDash([5,3]); cx.beginPath(); cx.moveTo(d1[0],d1[1]); cx.lineTo(d2[0],d2[1]); cx.stroke(); cx.setLineDash([]);\r\n      [d1[0],d2[0]].forEach(function(mx){cx.beginPath();cx.moveTo(mx,d1[1]-5);cx.lineTo(mx,d1[1]+5);cx.stroke();});\r\n      label(S.pos.toFixed(1)+' m',(d1[0]+d2[0])\/2,d1[1]-10,14,'bold',dk?'#F0883E':'#D06020','center','middle');\r\n    }\r\n\r\n    \/* ---- FLECHAS DE FUERZAS ---- *\/\r\n    var maxArr=85, forces=[res.Pc, res.Pl+res.Pt, res.Pe, res.N];\r\n    var maxF=Math.max(forces[0],forces[1],forces[2],forces[3],1), aSc=maxArr\/maxF;\r\n\r\n    \/* Peso contrapeso \u2193 *\/\r\n    if(res.Pc>0.1){ var ap=wcr(-S.bi,0); arrow(ap[0],ap[1],res.Pc*aSc,Math.PI\/2,'#6E7681',res.Pc.toFixed(1)+' kN'); }\r\n    \/* Peso carga+carro \u2193 *\/\r\n    if(res.Pl+res.Pt>0.1) arrow(hCX,loadBot,(res.Pl+res.Pt)*aSc,Math.PI\/2,'#E3B341',(res.Pl+res.Pt).toFixed(1)+' kN');\r\n    \/* Peso estructural \u2193 (en el pivote, levemente desplazado para verse) *\/\r\n    if(res.Pe>0.1){\r\n      var ep=wc(0.8,0);\r\n      arrow(ep[0],ep[1],res.Pe*aSc,Math.PI\/2,cStr,'Pe='+res.Pe.toFixed(1)+' kN');\r\n    }\r\n    \/* Reacci\u00f3n N \u2191 *\/\r\n    if(res.N>0.1){ var an=wc(0,TH+BHH); arrow(an[0],an[1],res.N*aSc,-Math.PI\/2,'#3FB950','N='+res.N.toFixed(1)+' kN'); }\r\n\r\n    \/* ---- ARCOS DE MOMENTOS ---- *\/\r\n    var maxArc=125*Math.PI\/180, minArc=18*Math.PI\/180, bR=Math.max(22,V.sc*3);\r\n    if(res.Me>0.1){\r\n      var sp=minArc+(maxArc-minArc)*Math.min(1,res.Me\/Math.max(res.Me,res.Md,1));\r\n      arcA(pv[0],pv[1],bR,-Math.PI\/2-sp\/2,-Math.PI\/2+sp\/2,true,'#F0883E',3,'Me='+res.Me.toFixed(0)+' kN\\u00B7m');\r\n    }\r\n    if(res.Md>0.1){\r\n      var sp2=minArc+(maxArc-minArc)*Math.min(1,res.Md\/Math.max(res.Me,res.Md,1));\r\n      arcA(pv[0],pv[1],bR+14,Math.PI\/2-sp2\/2,Math.PI\/2+sp2\/2,false,'#F85149',3,'Md='+res.Md.toFixed(0)+' kN\\u00B7m');\r\n    }\r\n\r\n    \/* Centro de gravedad *\/\r\n    var cg=wc(res.cgX,0), cgr=6*V.fs;\r\n    cx.fillStyle='#58A6FF'; cx.beginPath();\r\n    cx.moveTo(cg[0],cg[1]-cgr); cx.lineTo(cg[0]+cgr,cg[1]);\r\n    cx.lineTo(cg[0],cg[1]+cgr); cx.lineTo(cg[0]-cgr,cg[1]); cx.closePath(); cx.fill();\r\n    cx.strokeStyle='rgba(88,166,255,0.45)'; cx.lineWidth=2.5;\r\n    cx.beginPath(); cx.arc(cg[0],cg[1],cgr+4,0,Math.PI*2); cx.stroke();\r\n    label('CG='+res.cgX.toFixed(2)+'m',cg[0],cg[1]-cgr-14*V.fs,12,'bold','#58A6FF','center','middle');\r\n  }\r\n\r\n  \/* ================================================================\r\n     ACTUALIZAR PANEL DE RESULTADOS\r\n     ================================================================ *\/\r\n  function updateUI(res) {\r\n    R.Pc.textContent   = res.Pc.toFixed(2)+' kN';\r\n    R.Pl.textContent   = res.Pl.toFixed(2)+' kN';\r\n    R.Pt.textContent   = res.Pt.toFixed(2)+' kN';\r\n    R.Ps.textContent   = res.Pe.toFixed(2)+' kN';\r\n    R.Ptot.textContent = res.Ptot.toFixed(2)+' kN';\r\n    R.N.textContent    = res.N.toFixed(2)+' kN';\r\n    R.Mc.textContent   = res.Me.toFixed(1)+' kN\\u00B7m';\r\n    R.Ml.textContent   = res.Ml.toFixed(1)+' kN\\u00B7m';\r\n    R.Mtc.textContent  = res.Mtc.toFixed(1)+' kN\\u00B7m';\r\n    R.Mtot.textContent = res.Mnet.toFixed(1)+' kN\\u00B7m';\r\n\r\n    \/* \u03a3Fy \u2014 debe ser \u2248 0 *\/\r\n    R.SF.textContent = res.sFy.toFixed(4)+' kN';\r\n    R.SF.className = 'res-value ' + (Math.abs(res.sFy) < 0.01 ? 'positive' : 'neutral');\r\n\r\n    \/* \u03a3M *\/\r\n    R.SM.textContent = res.sM.toFixed(1)+' kN\\u00B7m';\r\n    R.SM.className = 'res-value '+(res.Mnet>1?'negative':res.Mnet<-1?'positive':'neutral');\r\n    R.Mtot.className = 'res-value '+(res.Mnet>1?'negative':res.Mnet<-1?'positive':'neutral');\r\n\r\n    \/* Factor de equilibrio *\/\r\n    if(res.fe>1e8){R.FE.textContent='\\u221E';R.FE.className='res-value positive';}\r\n    else if(res.fe<0.001){R.FE.textContent='0.000';R.FE.className='res-value negative';}\r\n    else{R.FE.textContent=res.fe.toFixed(3);R.FE.className='res-value '+(res.fe>=1.15?'positive':res.fe>=1?'neutral':'negative');}\r\n\r\n    \/* Indicadores *\/\r\n    var si={safe:'\\u{1F7E2}',warn:'\\u{1F7E1}',danger:'\\u{1F534}'};\r\n    document.getElementById('indS').className='indicator '+res.sl;\r\n    document.getElementById('indS').innerHTML='<span class=\"ind-icon\">'+si[res.sl]+'<\/span>'+res.st+'<div class=\"ind-sub\">'+res.ss+'<\/div>';\r\n    var ei={safe:'\\u2705',warn:'\\u26A0\\uFE0F',danger:'\\u274C'};\r\n    document.getElementById('indE').className='indicator '+res.el;\r\n    document.getElementById('indE').innerHTML='<span class=\"ind-icon\">'+ei[res.el]+'<\/span>'+res.et+'<div class=\"ind-sub\">'+res.es+'<\/div>';\r\n\r\n    if(S.teacher) updateEq(res);\r\n  }\r\n\r\n  \/* ================================================================\r\n     PANEL DE ECUACIONES (MODO DOCENTE)\r\n     ================================================================ *\/\r\n  function updateEq(res) {\r\n    var f=function(v,d){return v.toFixed(d===undefined?2:d);};\r\n    var mCw=S.mCw, mL=S.mL, pos=S.pos, bi=S.bi, mt=S.mt, mS=S.mS, g=S.g;\r\n\r\n    document.getElementById('eqBlock').innerHTML =\r\n      '<span class=\"eq-label\">Datos:<\/span>\\n'+\r\n      '  m_contrapeso = <span class=\"eq-val\">'+f(mCw,1)+'<\/span> t  (= '+f(mCw*1000,0)+' kg)\\n'+\r\n      '  m_carga     = <span class=\"eq-val\">'+f(mL,1)+'<\/span> t  (= '+f(mL*1000,0)+' kg)\\n'+\r\n      '  m_carro     = <span class=\"eq-val\">'+f(mt,1)+'<\/span> t  (= '+f(mt*1000,0)+' kg)\\n'+\r\n      '  m_estructura= <span class=\"eq-struct\">'+f(mS,1)+'<\/span> t  (= '+f(mS*1000,0)+' kg)\\n'+\r\n      '  d_contrapeso= <span class=\"eq-val\">'+f(bi,1)+'<\/span> m\\n'+\r\n      '  d_carga     = <span class=\"eq-val\">'+f(pos,1)+'<\/span> m\\n'+\r\n      '  g           = <span class=\"eq-val\">'+g+'<\/span> m\/s\\u00B2\\n\\n'+\r\n\r\n      '<span class=\"eq-label\">Pesos (P = m\\u00B7g \/ 1000):<\/span>\\n'+\r\n      '  Pc = '+f(mCw*1000,0)+' \\u00D7 '+g+'\/1000 = <span class=\"eq-val\">'+f(res.Pc)+'<\/span> kN\\n'+\r\n      '  Pl = '+f(mL*1000,0)+' \\u00D7 '+g+'\/1000 = <span class=\"eq-val\">'+f(res.Pl)+'<\/span> kN\\n'+\r\n      '  Pt = '+f(mt*1000,0)+' \\u00D7 '+g+'\/1000 = <span class=\"eq-val\">'+f(res.Pt)+'<\/span> kN\\n'+\r\n      '  Pe = '+f(mS*1000,0)+' \\u00D7 '+g+'\/1000 = <span class=\"eq-struct\">'+f(res.Pe)+'<\/span> kN\\n\\n'+\r\n\r\n      '<span class=\"eq-label\">Peso total:<\/span>\\n'+\r\n      '  \\u03A3P = Pc + Pl + Pt + Pe\\n'+\r\n      '     = '+f(res.Pc)+' + '+f(res.Pl)+' + '+f(res.Pt)+' + '+f(res.Pe)+'\\n'+\r\n      '     = <span class=\"eq-val\">'+f(res.Ptot)+'<\/span> kN\\n\\n'+\r\n\r\n      '<span class=\"eq-label\">Momentos respecto al pivote (x = 0):<\/span>\\n'+\r\n      '  M_estab.  = Pc \\u00D7 d_cw     = '+f(res.Pc)+' \\u00D7 '+f(bi,1)+' = <span class=\"eq-val\">'+f(res.Me,1)+'<\/span> kN\\u00B7m\\n'+\r\n      '  M_dest.(c)= Pl \\u00D7 d         = '+f(res.Pl)+' \\u00D7 '+f(pos,1)+' = <span class=\"eq-val\">'+f(res.Ml,1)+'<\/span> kN\\u00B7m\\n'+\r\n      '  M_dest.(t)= Pt \\u00D7 d         = '+f(res.Pt)+' \\u00D7 '+f(pos,1)+' = <span class=\"eq-val\">'+f(res.Mtc,1)+'<\/span> kN\\u00B7m\\n'+\r\n      '  M_dest.tot= '+f(res.Ml,1)+' + '+f(res.Mtc,1)+'           = <span class=\"eq-val\">'+f(res.Md,1)+'<\/span> kN\\u00B7m\\n'+\r\n      '  M_estruct.= Pe \\u00D7 0         = <span class=\"eq-struct\">0.0<\/span> kN\\u00B7m  (act\\u00FAa en x=0)\\n\\n'+\r\n\r\n      '<span class=\"eq-label\">Ecuaciones de equilibrio est\\u00E1tico:<\/span>\\n\\n'+\r\n      '  <span class=\"eq-label\">1) \\u03A3Fy = 0<\/span>\\n'+\r\n      '     N \\u2212 Pc \\u2212 Pl \\u2212 Pt \\u2212 Pe = 0\\n'+\r\n      '     N = '+f(res.Pc)+' + '+f(res.Pl)+' + '+f(res.Pt)+' + '+f(res.Pe)+'\\n'+\r\n      '     N = <span class=\"eq-result\">'+f(res.N)+'<\/span> kN  \\u2713\\n'+\r\n      '     Verif: '+f(res.N)+' \\u2212 '+f(res.Ptot)+' = <span class=\"eq-result\">'+f(res.sFy,4)+'<\/span> kN  \\u2713\\n\\n'+\r\n\r\n      '  <span class=\"eq-label\">2) \\u03A3M\\u2080 = 0<\/span>\\n'+\r\n      '     M_dest \\u2212 M_estab = 0\\n'+\r\n      '     '+f(res.Md,1)+' \\u2212 '+f(res.Me,1)+' = <span class=\"'+(Math.abs(res.Mnet)<1?'eq-result':'eq-bad')+'\">'+f(res.Mnet,1)+'<\/span> kN\\u00B7m  '+(Math.abs(res.Mnet)<res.Me*0.05?'\\u2713':'\\u2717')+'\\n\\n'+\r\n\r\n      '  <span class=\"eq-label\">3) Factor de seguridad:<\/span>\\n'+\r\n      '     FS = M_estab \/ M_dest = '+f(res.Me,1)+' \/ '+f(res.Md,1)+'\\n'+\r\n      '        = <span class=\"'+(res.fe>=1?'eq-result':'eq-bad')+'\">'+(res.fe>1e8?'\\u221E':f(res.fe,3))+'<\/span>  '+(res.fe>=1.15?'\\u2713 Seguro':res.fe>=1?'\\u26A0 L\\u00EDmite':'\\u2717 Volcado')+'\\n\\n'+\r\n\r\n      '  <span class=\"eq-label\">4) Centro de gravedad:<\/span>\\n'+\r\n      '     CG_x = (\\u2212'+f(mCw,1)+'\\u00D7'+f(bi,1)+' + ('+f(mL,1)+'+'+f(mt,1)+')\\u00D7'+f(pos,1)+' + '+f(mS,1)+'\\u00D70) \/ '+f(res.mTotal,1)+'\\n'+\r\n      '          = <span class=\"eq-val\">'+f(res.cgX,3)+'<\/span> m\\n'+\r\n      '     Base: \\u00B1'+f(BW\/2,1)+' m  \\u2192  '+(Math.abs(res.cgX)<=BW\/2?'<span class=\"eq-result\">Dentro de la base \\u2713<\/span>':'<span class=\"eq-bad\">Fuera de la base \\u2717<\/span>');\r\n\r\n    var ex='';\r\n    if(res.fe>=1.15)\r\n      ex='El momento estabilizante ('+f(res.Me,1)+' kN\\u00B7m) supera al desestabilizante ('+f(res.Md,1)+' kN\\u00B7m) con un factor de '+f(res.fe,3)+'. El contrapeso podr\\u00EDa soportar hasta un '+((res.fe-1)*100).toFixed(1)+'% m\\u00E1s de momento. La fuerza total descendente es '+f(res.Ptot,1)+' kN (contrapeso '+f(res.Pc,1)+' + carga '+f(res.Pl,1)+' + carro '+f(res.Pt,1)+' + estructura '+f(res.Pe,1)+'), perfectamente compensada por la reacci\\u00F3n N = '+f(res.N,1)+' kN (\\u03A3Fy = '+f(res.sFy,4)+' kN). El CG a '+f(res.cgX,2)+' m est\\u00E1 dentro de la base (\\u00B1'+f(BW\/2,1)+' m). La gr\\u00FAa es estable.';\r\n    else if(res.fe>=1)\r\n      ex='El momento estabilizante ('+f(res.Me,1)+' kN\\u00B7m) apenas supera al desestabilizante ('+f(res.Md,1)+' kN\\u00B7m). Factor de seguridad: '+f(res.fe,3)+'. Aunque \\u03A3Fy = '+f(res.sFy,4)+' kN (equilibrio vertical perfecto), el margen de momento es m\\u00EDnimo. Cualquier aumento de carga, viento o movimiento del carro podr\\u00EDa provocar el vuelco. Se recomienda reducir la carga o acercarla al pivote.';\r\n    else\r\n      ex='El momento desestabilizante ('+f(res.Md,1)+' kN\\u00B7m) EXCEDE al estabilizante ('+f(res.Me,1)+' kN\\u00B7m). Factor: '+f(res.fe,3)+' < 1. La gr\\u00FAa VOLCAR\\u00CDA. El equilibrio vertical se mantiene (\\u03A3Fy = '+f(res.sFy,4)+' kN, N = '+f(res.N,1)+' kN), pero el equilibrio rotacional falla: \\u03A3M = '+f(res.Mnet,1)+' kN\\u00B7m \\u2260 0. El CG a '+f(res.cgX,2)+' m est\\u00E1 fuera de la base (\\u00B1'+f(BW\/2,1)+' m), violando la condici\\u00F3n necesaria de estabilidad.';\r\n\r\n    document.getElementById('eqExplain').textContent = ex;\r\n  }\r\n\r\n  \/* ================================================================\r\n     CONTROLES\r\n     ================================================================ *\/\r\n  function bindC(key,sk){\r\n    var s=C[key].s, n=C[key].n;\r\n    var u=function(v){\r\n      v=parseFloat(v); if(isNaN(v))return;\r\n      v=Math.max(parseFloat(s.min),Math.min(parseFloat(s.max),v));\r\n      S[sk]=v; s.value=v; n.value=v;\r\n      s.style.setProperty('--fill',((v-s.min)\/(s.max-s.min)*100)+'%');\r\n      if(key==='bd')updPM();\r\n      if(key==='bd'&&S.pos>S.bd){S.pos=S.bd;C.pos.s.value=S.pos;C.pos.n.value=S.pos;C.pos.s.style.setProperty('--fill',((S.pos-C.pos.s.min)\/(C.pos.s.max-C.pos.s.min)*100)+'%');}\r\n    };\r\n    s.addEventListener('input',function(){u(s.value);});\r\n    n.addEventListener('input',function(){u(n.value);});\r\n    n.addEventListener('change',function(){u(n.value);});\r\n    s.style.setProperty('--fill',((s.value-s.min)\/(s.max-s.min)*100)+'%');\r\n  }\r\n  function updPM(){C.pos.s.max=S.bd;C.pos.n.max=S.bd;}\r\n\r\n  container.querySelectorAll('.sc-btn').forEach(function(b){b.addEventListener('click',function(){applySc(b.dataset.sc);showToast('Escenario: '+b.textContent.trim());});});\r\n  container.querySelectorAll('.mode-btn').forEach(function(b){b.addEventListener('click',function(){container.querySelectorAll('.mode-btn').forEach(function(x){x.classList.remove('active');});b.classList.add('active');S.teacher=b.dataset.mode==='teacher';document.getElementById('eqPanel').classList.toggle('open',S.teacher);});});\r\n  document.getElementById('btnPlay').addEventListener('click',function(){S.play=!S.play;this.innerHTML=S.play?'<i class=\"fas fa-pause\"><\/i>':'<i class=\"fas fa-play\"><\/i>';this.classList.toggle('active',S.play);showToast(S.play?'Animaciones reanudadas':'Animaciones pausadas');});\r\n  document.getElementById('btnDark').addEventListener('click',function(){S.dark=!S.dark;container.setAttribute('data-theme',S.dark?'dark':'light');this.innerHTML=S.dark?'<i class=\"fas fa-moon\"><\/i>':'<i class=\"fas fa-sun\"><\/i>';});\r\n  document.getElementById('btnScreenshot').addEventListener('click',function(){var a=document.createElement('a');a.download='grua-'+Date.now()+'.png';a.href=cv.toDataURL('image\/png');a.click();showToast('Captura guardada','success');});\r\n\r\n  function showToast(m,t){var e=document.getElementById('toast');e.textContent=m;e.className='toast show'+(t==='success'?' success':'');clearTimeout(e._t);e._t=setTimeout(function(){e.className='toast';},2500);}\r\n\r\n  function applySc(sc){\r\n    var p={\r\n      balanced:{mCw:14,mL:5,pos:40,bi:20,bd:60,mt:2,mS:30},\r\n      unstable:{mCw:8,mL:25,pos:55,bi:20,bd:60,mt:2,mS:30},\r\n      maxload:{mCw:40,mL:30,pos:45,bi:30,bd:70,mt:3,mS:35},\r\n      noload:{mCw:15,mL:0,pos:40,bi:20,bd:60,mt:2,mS:30},\r\n      cwonly:{mCw:25,mL:0,pos:0,bi:20,bd:60,mt:2,mS:30},\r\n      reset:{mCw:15,mL:10,pos:40,bi:20,bd:60,mt:2,mS:30}\r\n    };\r\n    var v=p[sc]; if(!v)return;\r\n    var map={mCw:'mCw',mL:'mL',pos:'pos',bi:'bi',bd:'bd',mt:'mt',mS:'mS'};\r\n    Object.keys(v).forEach(function(k){S[k]=v[k];var ck=map[k];if(ck&&C[ck]){C[ck].s.value=v[k];C[ck].n.value=v[k];C[ck].s.style.setProperty('--fill',((v[k]-C[ck].s.min)\/(C[ck].s.max-C[ck].s.min)*100)+'%');}});\r\n    updPM();\r\n    if(S.pos>S.bd){S.pos=S.bd;C.pos.s.value=S.pos;C.pos.n.value=S.pos;C.pos.s.style.setProperty('--fill',((S.pos-C.pos.s.min)\/(C.pos.s.max-C.pos.s.min)*100)+'%');}\r\n  }\r\n\r\n  \/* ================================================================\r\n     LOOP DE ANIMACI\u00d3N\r\n     ================================================================ *\/\r\n  function loop(ts){\r\n    if(!lastTs)lastTs=ts; var dt=(ts-lastTs)\/1000; lastTs=ts;\r\n    if(S.play)anim+=dt;\r\n    var res=calc(); draw(res); updateUI(res);\r\n    requestAnimationFrame(loop);\r\n  }\r\n\r\n  bindC('mCw','mCw'); bindC('mL','mL'); bindC('pos','pos');\r\n  bindC('bi','bi');   bindC('bd','bd');  bindC('mt','mt'); bindC('mS','mS');\r\n\r\n  if(window.ResizeObserver){var ro=new ResizeObserver(function(){});ro.observe(document.getElementById('canvasWrap'));}\r\n\r\n  requestAnimationFrame(loop);\r\n})();\r\n<\/script>\r\n\r\n<style>\r\n  .btn-guia {\r\n    position: fixed;\r\n    bottom: 24px;\r\n    left: 24px;\r\n    z-index: 999;\r\n    background: #3fb950;\r\n    color: #0d1117;\r\n    font-family: 'Space Grotesk', sans-serif;\r\n    font-size: 0.82rem;\r\n    font-weight: 700;\r\n    letter-spacing: 1px;\r\n    text-transform: uppercase;\r\n    padding: 10px 18px;\r\n    border-radius: 8px;\r\n    border: none;\r\n    cursor: pointer;\r\n    box-shadow: 0 4px 20px rgba(63,185,80,0.35);\r\n    transition: transform 0.2s, box-shadow 0.2s;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n  }\r\n  .btn-guia:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 6px 24px rgba(63,185,80,0.5);\r\n  }\r\n  .btn-guia svg { width: 15px; height: 15px; flex-shrink: 0; }\r\n  .guia-panel {\r\n    position: fixed;\r\n    bottom: 72px;\r\n    left: 24px;\r\n    width: 400px;\r\n    max-height: 70vh;\r\n    z-index: 1000;\r\n    background: #ffffff;\r\n    border: 1px solid #d0d7de;\r\n    border-radius: 12px;\r\n    box-shadow: 0 16px 48px rgba(0,0,0,0.4);\r\n    display: none;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    font-family: 'Space Grotesk', sans-serif;\r\n  }\r\n  .guia-panel.visible { display: flex; }\r\n  .guia-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    padding: 12px 16px;\r\n    border-bottom: 1px solid #d0d7de;\r\n    flex-shrink: 0;\r\n    background: #f6f8fa;\r\n  }\r\n  .guia-header-title {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    font-size: 0.85rem;\r\n    font-weight: 700;\r\n    color: #1f2328;\r\n  }\r\n  .guia-header-title svg { width: 15px; height: 15px; color: #3fb950; }\r\n  .guia-close {\r\n    background: none;\r\n    border: none;\r\n    color: #636c76;\r\n    font-size: 1rem;\r\n    cursor: pointer;\r\n    padding: 2px 7px;\r\n    border-radius: 4px;\r\n    transition: color 0.2s, background 0.2s;\r\n    line-height: 1;\r\n  }\r\n  .guia-close:hover { color: #1f2328; background: rgba(0,0,0,0.06); }\r\n  .guia-body {\r\n    overflow-y: auto;\r\n    padding: 18px 18px 20px;\r\n    color: #1f2328;\r\n    font-size: 0.83rem;\r\n    line-height: 1.65;\r\n    background: #ffffff;\r\n  }\r\n  .guia-body::-webkit-scrollbar { width: 5px; }\r\n  .guia-body::-webkit-scrollbar-track { background: transparent; }\r\n  .guia-body::-webkit-scrollbar-thumb { background: #d0d7de; border-radius: 3px; }\r\n  .guia-section-title {\r\n    font-size: 1rem;\r\n    font-weight: 700;\r\n    color: #1f2328;\r\n    margin: 0 0 12px 0;\r\n    padding-bottom: 8px;\r\n    border-bottom: 1px solid #d0d7de;\r\n  }\r\n  .guia-block { margin-bottom: 14px; }\r\n  .guia-label {\r\n    font-size: 0.72rem;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1px;\r\n    color: #636c76;\r\n    margin-bottom: 4px;\r\n  }\r\n  .guia-text { color: #1f2328; }\r\n  .guia-formula {\r\n    background: #f6f8fa;\r\n    border: 1px solid #d0d7de;\r\n    border-radius: 6px;\r\n    padding: 10px 14px;\r\n    text-align: center;\r\n    font-family: 'JetBrains Mono', monospace;\r\n    font-size: 0.88rem;\r\n    color: #0550ae;\r\n    margin: 10px 0;\r\n  }\r\n  .guia-steps { list-style: none; margin: 0; padding: 0; counter-reset: steps; }\r\n  .guia-steps li {\r\n    counter-increment: steps;\r\n    display: flex;\r\n    gap: 10px;\r\n    margin-bottom: 8px;\r\n    align-items: flex-start;\r\n    color: #1f2328;\r\n  }\r\n  .guia-steps li::before {\r\n    content: counter(steps);\r\n    background: #dafbe1;\r\n    color: #1a7f37;\r\n    font-size: 0.72rem;\r\n    font-weight: 700;\r\n    width: 20px;\r\n    height: 20px;\r\n    border-radius: 50%;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    flex-shrink: 0;\r\n    margin-top: 1px;\r\n    border: 1px solid #1a7f37;\r\n  }\r\n  .guia-result {\r\n    background: #dafbe1;\r\n    border-left: 3px solid #1a7f37;\r\n    border-radius: 0 6px 6px 0;\r\n    padding: 10px 14px;\r\n    color: #1f2328;\r\n    font-size: 0.82rem;\r\n    margin-top: 10px;\r\n  }\r\n  .guia-params {\r\n    background: #f6f8fa;\r\n    border: 1px solid #d0d7de;\r\n    border-radius: 6px;\r\n    padding: 10px 14px;\r\n    font-size: 0.8rem;\r\n    color: #1f2328;\r\n  }\r\n  .guia-params span { color: #0550ae; font-family: 'JetBrains Mono', monospace; }\r\n  .var { font-family: 'JetBrains Mono', monospace; }\r\n  .var.pos { color: #cf222e; }\r\n  .var.neg { color: #0550ae; }\r\n  .var.neu { color: #7d4e00; }\r\n  .var.ok  { color: #1a7f37; }\r\n<\/style>\r\n\r\n<div class=\"guia-panel\" id=\"guiaPanel\">\r\n  <div class=\"guia-header\">\r\n    <div class=\"guia-header-title\">\r\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"\/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"\/><\/svg>\r\n      Gu\u00eda de uso\r\n    <\/div>\r\n    <button class=\"guia-close\" onclick=\"toggleGuia()\">\u2715<\/button>\r\n  <\/div>\r\n\r\n  <div class=\"guia-body\">\r\n\r\n    <!--\u2605 BORRAR DESDE AQUI \u2605-->\r\n\r\n\r\n<div style=\"font-family: Arial, sans-serif; line-height: 1.6; color: #333;\">\r\n<h3 style=\"color: #0056b3;\"> <span style=\"color: #000080;\"><strong><span style=\"font-size: 16px;\">Laboratorio de Mec\u00e1nica: Est\u00e1tica y equilibrio en una gr\u00faa <\/span><\/strong><\/span><strong><span style=\"font-size: 16px; color: #000080;\"> <\/span><\/strong><\/h3>\r\n<strong>Objetivo:<\/strong> Analizar las condiciones de equilibrio est\u00e1tico de un cuerpo r\u00edgido mediante el estudio de las fuerzas y momentos de torsi\u00f3n (torques) que act\u00faan sobre la estructura de una gr\u00faa torre.\r\n\r\n<strong>Descripci\u00f3n breve:<\/strong> Simulaci\u00f3n interactiva que permite explorar el comportamiento de un sistema estructural sometido a diferentes cargas. Facilita la comprensi\u00f3n de la primera y segunda condici\u00f3n de equilibrio, permitiendo calcular la tensi\u00f3n en los cables de soporte y las fuerzas de reacci\u00f3n en el eje o punto de apoyo de la pluma:\r\n<div style=\"text-align: center; margin: 20px 0; background: #f0f4f8; padding: 10px; border-radius: 5px;\">[latex] \\sum \\vec{F} = 0 \\quad \\rightarrow \\quad \\sum \\vec{\\tau} = 0 \\quad \\text{donde} \\quad \\tau = F \\cdot d \\cdot \\sin(\\theta) [\/latex]<\/div>\r\n<strong>C\u00f3mo usar (pasos):<\/strong>\r\n<ul style=\"margin-left: 20px;\">\r\n \t<li>Modificar la posici\u00f3n y la masa del bloque de carga suspendido a lo largo del brazo horizontal (pluma).<\/li>\r\n \t<li>Ajustar la masa y ubicaci\u00f3n del contrapeso en el extremo opuesto para estabilizar la estructura.<\/li>\r\n \t<li>Variar el \u00e1ngulo de inclinaci\u00f3n del cable tensor o de la pluma para observar c\u00f3mo se redistribuyen los esfuerzos mec\u00e1nicos.<\/li>\r\n \t<li>Activar el diagrama de cuerpo libre (DCL) en tiempo real para visualizar los vectores de peso, tensi\u00f3n y las componentes de la fuerza de reacci\u00f3n en la base.<\/li>\r\n \t<li>Registrar los valores de las distancias y fuerzas para verificar anal\u00edticamente que la suma de momentos respecto a cualquier punto de pivote sea igual a cero.<\/li>\r\n<\/ul>\r\n<strong>Par\u00e1metros ajustables:<\/strong> Masa de la carga ([latex]kg[\/latex]), masa del contrapeso, longitud de los brazos de la gr\u00faa ([latex]m[\/latex]), posici\u00f3n de los componentes y \u00e1ngulo del cable.\r\n<p style=\"background-color: #f8f9fa; padding: 15px; border-left: 5px solid #0056b3;\"><strong>Resultados esperados \/ observaciones:<\/strong> Se comprueba que para mantener la estabilidad, a mayor distancia de la carga respecto al eje (mayor brazo de palanca), se requiere un contrapeso mayor o situado a mayor distancia en el lado opuesto. Si la suma de los torques no se anula, el sistema experimenta una aceleraci\u00f3n angular, rompiendo el estado de equilibrio est\u00e1tico.<\/p>\r\n\r\n<\/div>\r\n\r\n   <!--\u2605 BORRAR HASTA AQUI \u2605-->\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<button class=\"btn-guia\" onclick=\"toggleGuia()\">\r\n  <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"\/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"\/><\/svg>\r\n  Gu\u00eda de uso\r\n<\/button>\r\n\r\n<script>\r\n  function toggleGuia() {\r\n    document.getElementById('guiaPanel').classList.toggle('visible');\r\n  }\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Equilibrio Est\u00e1tico Simulador de Gr\u00faa Torre Peso de la carga Peso del contrapeso Peso estructural Reacci\u00f3n del suelo Momento estabilizante Momento desestabilizante Centro de gravedad&hellip;<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-5974","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>FB_estatica_grua - F\u00edsica TUMI<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FB_estatica_grua - F\u00edsica TUMI\" \/>\n<meta property=\"og:description\" content=\"Equilibrio Est\u00e1tico Simulador de Gr\u00faa Torre Peso de la carga Peso del contrapeso Peso estructural Reacci\u00f3n del suelo Momento estabilizante Momento desestabilizante Centro de gravedad&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/\" \/>\n<meta property=\"og:site_name\" content=\"F\u00edsica TUMI\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-22T01:11:21+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/\",\"url\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/\",\"name\":\"FB_estatica_grua - F\u00edsica TUMI\",\"isPartOf\":{\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/#website\"},\"datePublished\":\"2026-06-20T15:02:41+00:00\",\"dateModified\":\"2026-06-22T01:11:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/#breadcrumb\"},\"inLanguage\":\"es-AR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FB_estatica_grua\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/#website\",\"url\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/\",\"name\":\"F\u00edsica TUMI\",\"description\":\"FICA - UNSL\",\"publisher\":{\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es-AR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/#organization\",\"name\":\"SAC- Secretar\u00eda General FICA\",\"url\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es-AR\",\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/wp-content\/uploads\/2021\/11\/SG-Logo.png\",\"contentUrl\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/wp-content\/uploads\/2021\/11\/SG-Logo.png\",\"width\":4483,\"height\":1231,\"caption\":\"SAC- Secretar\u00eda General FICA\"},\"image\":{\"@id\":\"https:\/\/fisicatumi.fica.unsl.edu.ar\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"FB_estatica_grua - F\u00edsica TUMI","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/","og_locale":"es_ES","og_type":"article","og_title":"FB_estatica_grua - F\u00edsica TUMI","og_description":"Equilibrio Est\u00e1tico Simulador de Gr\u00faa Torre Peso de la carga Peso del contrapeso Peso estructural Reacci\u00f3n del suelo Momento estabilizante Momento desestabilizante Centro de gravedad&hellip;","og_url":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/","og_site_name":"F\u00edsica TUMI","article_modified_time":"2026-06-22T01:11:21+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/","url":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/","name":"FB_estatica_grua - F\u00edsica TUMI","isPartOf":{"@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/#website"},"datePublished":"2026-06-20T15:02:41+00:00","dateModified":"2026-06-22T01:11:21+00:00","breadcrumb":{"@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/#breadcrumb"},"inLanguage":"es-AR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/fb_estatica_grua\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/fisicatumi.fica.unsl.edu.ar\/"},{"@type":"ListItem","position":2,"name":"FB_estatica_grua"}]},{"@type":"WebSite","@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/#website","url":"https:\/\/fisicatumi.fica.unsl.edu.ar\/","name":"F\u00edsica TUMI","description":"FICA - UNSL","publisher":{"@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fisicatumi.fica.unsl.edu.ar\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-AR"},{"@type":"Organization","@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/#organization","name":"SAC- Secretar\u00eda General FICA","url":"https:\/\/fisicatumi.fica.unsl.edu.ar\/","logo":{"@type":"ImageObject","inLanguage":"es-AR","@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/#\/schema\/logo\/image\/","url":"https:\/\/fisicatumi.fica.unsl.edu.ar\/wp-content\/uploads\/2021\/11\/SG-Logo.png","contentUrl":"https:\/\/fisicatumi.fica.unsl.edu.ar\/wp-content\/uploads\/2021\/11\/SG-Logo.png","width":4483,"height":1231,"caption":"SAC- Secretar\u00eda General FICA"},"image":{"@id":"https:\/\/fisicatumi.fica.unsl.edu.ar\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages\/5974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/comments?post=5974"}],"version-history":[{"count":13,"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages\/5974\/revisions"}],"predecessor-version":[{"id":5989,"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/pages\/5974\/revisions\/5989"}],"wp:attachment":[{"href":"https:\/\/fisicatumi.fica.unsl.edu.ar\/index.php\/wp-json\/wp\/v2\/media?parent=5974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}