{"id":119,"date":"2026-06-03T18:45:08","date_gmt":"2026-06-03T18:45:08","guid":{"rendered":"https:\/\/atlahuilco.gob.mx\/portal\/?p=119"},"modified":"2026-06-03T18:48:06","modified_gmt":"2026-06-03T18:48:06","slug":"obra-publica","status":"publish","type":"post","link":"https:\/\/atlahuilco.gob.mx\/portal\/obra-publica\/","title":{"rendered":"OBRA PUBLICA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"119\" class=\"elementor elementor-119\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-676a00b e-flex e-con-boxed e-con e-parent\" data-id=\"676a00b\" 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-b4a3ff7 elementor-widget elementor-widget-shortcode\" data-id=\"b4a3ff7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><!-- FONT AWESOME -->\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\">\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\r\n\r\n<style>\r\n:root{\r\n  --superficie:#FFFFFF;\r\n  --superficie-suave:#FAFBFC;\r\n  --primario:#4F6F73;\r\n  --primario-hover:#3F5B5F;\r\n  --primario-claro:#EDF3F4;\r\n  --texto:#2F3437;\r\n  --texto-suave:#6B7377;\r\n  --borde:#E4E6E8;\r\n  --borde-suave:#F0F2F4;\r\n  --verde:#2E7D32;\r\n  --rojo:#C62828;\r\n  --gris:#9AA0A6;\r\n  --sombra-suave:0 4px 14px rgba(0,0,0,.05);\r\n}\r\n\r\n#obras{\r\n  padding:24px;\r\n  font-family:Arial,sans-serif;\r\n}\r\n\r\n#obras h2{\r\n  text-align:center;\r\n  color:var(--texto);\r\n  margin:10px 0 26px;\r\n  font-size:28px;\r\n  font-weight:700;\r\n}\r\n\r\n#obras h2::after{\r\n  content:\"\";\r\n  display:block;\r\n  width:90px;\r\n  height:4px;\r\n  background:linear-gradient(90deg,#4F6F73,#89A6AA);\r\n  margin:10px auto 0;\r\n  border-radius:999px;\r\n}\r\n\r\n#obras .bloque{\r\n  border:1px solid var(--borde);\r\n  margin-bottom:18px;\r\n  background:#FFFFFF;\r\n  padding:10px;\r\n  border-radius:16px;\r\n  box-shadow:var(--sombra-suave);\r\n  overflow:hidden;\r\n}\r\n\r\n#obras .accordion{\r\n  background:linear-gradient(135deg,#4F6F73,#3F5B5F) !important;\r\n  color:#FFFFFF !important;\r\n  padding:15px 20px;\r\n  cursor:pointer;\r\n  border:none;\r\n  width:100%;\r\n  text-align:left;\r\n  font-size:16px;\r\n  font-weight:600;\r\n  border-radius:12px;\r\n  outline:none !important;\r\n}\r\n\r\n#obras .accordion:hover,\r\n#obras .accordion:focus,\r\n#obras .accordion:active{\r\n  background:linear-gradient(135deg,#3F5B5F,#4F6F73) !important;\r\n  color:#FFFFFF !important;\r\n}\r\n\r\n#obras .panel{\r\n  max-height:0;\r\n  overflow:hidden;\r\n  transition:max-height .35s ease;\r\n}\r\n\r\n#obras .tipo{\r\n  margin:12px 0;\r\n  padding:12px;\r\n  border-left:4px solid #4F6F73;\r\n  background:#FFFFFF;\r\n  border-radius:10px;\r\n  box-shadow:0 2px 8px rgba(0,0,0,.04);\r\n}\r\n\r\n#obras .tipo strong{\r\n  color:var(--texto);\r\n  font-size:15px;\r\n}\r\n\r\n#obras .doc{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  padding:9px 6px;\r\n  border-bottom:1px dashed var(--borde);\r\n  gap:12px;\r\n  color:var(--texto);\r\n  font-size:14px;\r\n}\r\n\r\n#obras .doc:last-child{\r\n  border-bottom:none;\r\n}\r\n\r\n#obras .doc > div:last-child{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:8px;\r\n}\r\n\r\n#obras .estado{\r\n  padding:5px 10px;\r\n  border-radius:20px;\r\n  color:#FFFFFF;\r\n  font-size:12px;\r\n  font-weight:600;\r\n  white-space:nowrap;\r\n}\r\n\r\n#obras .ok{\r\n  background:#2E7D32;\r\n}\r\n\r\n#obras .no{\r\n  background:#C62828;\r\n}\r\n\r\n#obras .btn,\r\n#obras .btn:link,\r\n#obras .btn:visited,\r\n#obras .btn:hover,\r\n#obras .btn:active,\r\n#obras .btn:focus,\r\n#obras a.btn,\r\n#obras a.btn:link,\r\n#obras a.btn:visited,\r\n#obras a.btn:hover,\r\n#obras a.btn:active,\r\n#obras a.btn:focus{\r\n  background:#4F6F73 !important;\r\n  color:#FFFFFF !important;\r\n  padding:6px 12px;\r\n  border-radius:8px;\r\n  text-decoration:none !important;\r\n  font-size:13px;\r\n  font-weight:600;\r\n  border:none !important;\r\n  outline:none !important;\r\n  display:inline-flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  min-width:48px;\r\n}\r\n\r\n#obras .btn:hover,\r\n#obras a.btn:hover{\r\n  background:#4F6F73 !important;\r\n  color:#FFFFFF !important;\r\n  transform:translateY(-1px);\r\n}\r\n\r\n#obras .disabled,\r\n#obras a.disabled,\r\n#obras .btn.disabled,\r\n#obras a.btn.disabled{\r\n  background:#9AA0A6 !important;\r\n  color:#FFFFFF !important;\r\n  pointer-events:none;\r\n}\r\n\r\n@media (max-width:1024px){\r\n  #obras h2{\r\n    font-size:24px;\r\n  }\r\n\r\n  #obras .accordion{\r\n    font-size:15px;\r\n    padding:13px 16px;\r\n  }\r\n\r\n  #obras .doc{\r\n    font-size:14px;\r\n  }\r\n}\r\n\r\n@media (max-width:768px){\r\n  #obras{\r\n    padding:16px;\r\n  }\r\n\r\n  #obras h2{\r\n    font-size:20px;\r\n    margin:20px 0;\r\n  }\r\n\r\n  #obras .bloque{\r\n    padding:8px;\r\n  }\r\n\r\n  #obras .accordion{\r\n    font-size:14px;\r\n    padding:11px 14px;\r\n  }\r\n\r\n  #obras .tipo{\r\n    padding:10px;\r\n  }\r\n\r\n  #obras .doc{\r\n    flex-direction:column;\r\n    align-items:flex-start;\r\n    gap:8px;\r\n  }\r\n\r\n  #obras .doc > div:last-child{\r\n    width:100%;\r\n    display:flex;\r\n    justify-content:space-between;\r\n    align-items:center;\r\n  }\r\n\r\n  #obras .estado{\r\n    font-size:11px;\r\n    padding:4px 8px;\r\n  }\r\n\r\n  #obras .btn,\r\n  #obras a.btn{\r\n    font-size:12px;\r\n    padding:5px 10px;\r\n  }\r\n}\r\n\r\n@media (max-width:480px){\r\n  #obras h2{\r\n    font-size:18px;\r\n  }\r\n\r\n  #obras .accordion{\r\n    font-size:13px;\r\n    padding:10px 12px;\r\n  }\r\n\r\n  #obras .btn,\r\n  #obras a.btn{\r\n    font-size:11px;\r\n    padding:4px 8px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<div id=\"obras\">\r\n  <h2>Obras<\/h2>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n\r\nconst url = \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vT_bXkOodCvq8A0GeAgadDbO4VgWLd1iVsUrQLVG4cA0oB3SWh1GZD1miAtz2bCfg\/pub?output=csv\";\r\n\r\nasync function cargar(){\r\n\r\n  const res = await fetch(url);\r\n  const text = await res.text();\r\n  const data = Papa.parse(text,{header:true}).data;\r\n\r\n  const limpio = data.filter(r => r.A\u00f1o && r.Tipo && r.Periodo);\r\n\r\n  const estructura = {};\r\n\r\n  limpio.forEach(r=>{\r\n    const a\u00f1o = r.A\u00f1o;\r\n    const tipo = r.Tipo;\r\n    const periodo = r.Periodo.toUpperCase();\r\n\r\n    if(!estructura[a\u00f1o]) estructura[a\u00f1o]={};\r\n    if(!estructura[a\u00f1o][tipo]) estructura[a\u00f1o][tipo]={ANUAL:null, TRIM:[]};\r\n\r\n    if(periodo === \"ANUAL\"){\r\n      estructura[a\u00f1o][tipo].ANUAL = r;\r\n    }else{\r\n      estructura[a\u00f1o][tipo].TRIM.push(r);\r\n    }\r\n  });\r\n\r\n  const cont = document.getElementById(\"obras\");\r\n\r\n  Object.keys(estructura).sort((a,b)=>b-a).forEach(a\u00f1o=>{\r\n\r\n    let html = \"\";\r\n\r\n    Object.keys(estructura[a\u00f1o]).forEach(tipo=>{\r\n\r\n      const bloque = estructura[a\u00f1o][tipo];\r\n\r\n      html += `<div class=\"tipo\"><strong>${tipo}<\/strong>`;\r\n\r\n      if(bloque.ANUAL){\r\n        const ok = bloque.ANUAL.Archivo;\r\n\r\n        html += `\r\n        <div class=\"doc\">\r\n          <div>Anual: ${bloque.ANUAL.Nombre}<\/div>\r\n          <div>\r\n            <span class=\"estado ${ok?'ok':'no'}\">${ok?'Disponible':'No disponible'}<\/span>\r\n            <a href=\"${ok?bloque.ANUAL.Archivo:'#'}\" target=\"_blank\"\r\n              class=\"btn ${!ok?'disabled':''}\">Ver<\/a>\r\n          <\/div>\r\n        <\/div>`;\r\n      }\r\n\r\n      bloque.TRIM.forEach(t=>{\r\n        const ok = t.Archivo;\r\n\r\n        html += `\r\n        <div class=\"doc\">\r\n          <div>${t.Periodo}: ${t.Nombre}<\/div>\r\n          <div>\r\n            <span class=\"estado ${ok?'ok':'no'}\">${ok?'Disponible':'No disponible'}<\/span>\r\n            <a href=\"${ok?t.Archivo:'#'}\" target=\"_blank\"\r\n              class=\"btn ${!ok?'disabled':''}\">Ver<\/a>\r\n          <\/div>\r\n        <\/div>`;\r\n      });\r\n\r\n      html += `<\/div>`;\r\n    });\r\n\r\n    cont.innerHTML += `\r\n      <div class=\"bloque\">\r\n        <button class=\"accordion\">${a\u00f1o}<\/button>\r\n        <div class=\"panel\">${html}<\/div>\r\n      <\/div>\r\n    `;\r\n  });\r\n\r\n  document.querySelectorAll(\".accordion\").forEach(b=>{\r\n    b.onclick=()=>{\r\n      const p=b.nextElementSibling;\r\n      p.style.maxHeight=p.style.maxHeight?null:p.scrollHeight+\"px\";\r\n    };\r\n  });\r\n\r\n}\r\n\r\ncargar();\r\n\r\n})();\r\n<\/script><\/div>\n\t\t\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":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-119","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/posts\/119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/comments?post=119"}],"version-history":[{"count":0,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/posts\/119\/revisions"}],"wp:attachment":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/media?parent=119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/categories?post=119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/tags?post=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}