{"id":31,"date":"2025-08-27T17:30:58","date_gmt":"2025-08-27T15:30:58","guid":{"rendered":"https:\/\/integridadacademica.nubesoft.com.do\/?page_id=31"},"modified":"2026-07-02T23:18:57","modified_gmt":"2026-07-02T21:18:57","slug":"integridad-academica","status":"publish","type":"page","link":"https:\/\/integridadacademica.uapa.edu.do\/","title":{"rendered":"Integridad Acad\u00e9mica"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"31\" class=\"elementor elementor-31\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc9109f e-con-full e-flex e-con e-parent\" data-id=\"fc9109f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-16e4df7 elementor-widget elementor-widget-image\" data-id=\"16e4df7\" 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 fetchpriority=\"high\" decoding=\"async\" width=\"1900\" height=\"625\" src=\"https:\/\/integridadacademica.uapa.edu.do\/wp-content\/uploads\/2025\/08\/Banner-web-1900x625px-3.webp\" class=\"attachment-full size-full wp-image-159\" alt=\"\" srcset=\"https:\/\/integridadacademica.uapa.edu.do\/wp-content\/uploads\/2025\/08\/Banner-web-1900x625px-3.webp 1900w, https:\/\/integridadacademica.uapa.edu.do\/wp-content\/uploads\/2025\/08\/Banner-web-1900x625px-3-300x99.webp 300w, https:\/\/integridadacademica.uapa.edu.do\/wp-content\/uploads\/2025\/08\/Banner-web-1900x625px-3-1024x337.webp 1024w, https:\/\/integridadacademica.uapa.edu.do\/wp-content\/uploads\/2025\/08\/Banner-web-1900x625px-3-768x253.webp 768w, https:\/\/integridadacademica.uapa.edu.do\/wp-content\/uploads\/2025\/08\/Banner-web-1900x625px-3-1536x505.webp 1536w\" sizes=\"(max-width: 1900px) 100vw, 1900px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ca485b3 e-flex e-con-boxed e-con e-parent\" data-id=\"ca485b3\" 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-279a6a0 elementor-widget elementor-widget-html\" data-id=\"279a6a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- BOTONES HORIZONTALES GRANDES: C\u00f3mo citar \/ C\u00f3mo referenciar --> \r\n<div class=\"uapa-duo\">\r\n  <a \r\n    class=\"uapa-btn cite\" \r\n    href=\"https:\/\/integridadacademica.uapa.edu.do\/index.php\/c\/\" \r\n    aria-label=\"Ir a C\u00f3mo citar\"\r\n  >\r\n    <!-- Icono comillas -->\r\n    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n      <path d=\"M9.5 6C6.5 6 4 8.5 4 11.5S6.5 17 9.5 17c.8 0 1.5-.7 1.5-1.5S10.3 14 9.5 14c-1.1 0-2-.9-2-2s.9-2 2-2c.8 0 1.5-.7 1.5-1.5S10.3 6 9.5 6zm9 0c-3 0-5.5 2.5-5.5 5.5S15.5 17 18.5 17c.8 0 1.5-.7 1.5-1.5S19.3 14 18.5 14c-1.1 0-2-.9-2-2s.9-2 2-2c.8 0 1.5-.7 1.5-1.5S19.3 6 18.5 6z\"\/>\r\n    <\/svg>\r\n\r\n    <span>C\u00f3mo citar<\/span>\r\n  <\/a>\r\n\r\n  <a \r\n    class=\"uapa-btn ref\" \r\n    href=\"https:\/\/integridadacademica.uapa.edu.do\/index.php\/como-referenciar\/\" \r\n    aria-label=\"Ir a C\u00f3mo referenciar\"\r\n  >\r\n    <!-- Icono libro + enlace -->\r\n    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n      <path d=\"M6 3h9a3 3 0 013 3v13a2 2 0 01-2 2H6a3 3 0 01-3-3V6a3 3 0 013-3zm0 2a1 1 0 00-1 1v12a1 1 0 001 1h10V6a1 1 0 00-1-1H6zM21 7h-2v10h2V7zM8 8h6v2H8V8zm0 4h6v2H8v-2z\"\/>\r\n    <\/svg>\r\n\r\n    <span>C\u00f3mo referenciar<\/span>\r\n  <\/a>\r\n<\/div>\r\n\r\n<style>\r\n:root{\r\n  --uapa-azul: #041147;\r\n  --uapa-naranja: #ff8300;\r\n  --txt: #1c223a;\r\n}\r\n\r\n\/* CONTENEDOR HORIZONTAL *\/\r\n.uapa-duo{\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  flex-wrap: wrap;\r\n  gap: 50px;\r\n  margin: 24px 0;\r\n}\r\n\r\n\/* BOT\u00d3N BASE *\/\r\n.uapa-btn{\r\n  --bg: var(--uapa-azul);\r\n  --fg: #ffffff;\r\n\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 14px;\r\n\r\n  box-sizing: border-box;\r\n  padding: 20px 30px;\r\n  border: 3px solid transparent;\r\n  border-radius: 18px;\r\n\r\n  background: var(--bg);\r\n  color: var(--fg);\r\n  text-decoration: none;\r\n\r\n  font: 800 18px\/1.2 system-ui, -apple-system, \"Segoe UI\", Roboto, Arial;\r\n\r\n  box-shadow: 0 10px 24px rgba(4,17,71,.18);\r\n\r\n  transition:\r\n    transform .15s ease,\r\n    box-shadow .2s ease,\r\n    background .2s ease,\r\n    color .2s ease;\r\n}\r\n\r\n.uapa-btn svg{\r\n  width: 26px;\r\n  height: 26px;\r\n  fill: currentColor;\r\n  flex: 0 0 26px;\r\n}\r\n\r\n.uapa-btn span{\r\n  letter-spacing: .4px;\r\n}\r\n\r\n.uapa-btn:hover{\r\n  transform: translateY(-2px);\r\n  box-shadow: 0 14px 30px rgba(4,17,71,.25);\r\n}\r\n\r\n.uapa-btn:active{\r\n  transform: translateY(0) scale(.98);\r\n}\r\n\r\n.uapa-btn:focus-visible{\r\n  outline: none;\r\n  border-color: var(--uapa-naranja);\r\n  box-shadow: 0 0 0 6px rgba(255,131,0,.25);\r\n}\r\n\r\n\/* VARIANTES DE COLOR *\/\r\n.uapa-btn.cite{\r\n  --bg: var(--uapa-azul);\r\n  --fg: #ffffff;\r\n}\r\n\r\n.uapa-btn.cite:hover{\r\n  background: #0a2568;\r\n}\r\n\r\n.uapa-btn.ref{\r\n  --bg: var(--uapa-naranja);\r\n  --fg: #000000;\r\n}\r\n\r\n.uapa-btn.ref:hover{\r\n  background: #e67800;\r\n}\r\n\r\n\/* ADAPTACI\u00d3N M\u00d3VIL *\/\r\n@media (max-width: 480px){\r\n\r\n  .uapa-duo{\r\n    flex-direction: column;\r\n    gap: 12px;\r\n    margin: 16px 0;\r\n    padding: 0 8px;\r\n  }\r\n\r\n  .uapa-btn{\r\n    width: 100%;\r\n    max-width: 360px;\r\n    min-height: 58px;\r\n    padding: 16px 18px;\r\n    font-size: 17px;\r\n  }\r\n\r\n  .uapa-btn svg{\r\n    width: 22px;\r\n    height: 22px;\r\n    flex-basis: 22px;\r\n  }\r\n}\r\n<\/style>\r\n\r\n\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-adf2972 e-flex e-con-boxed e-con e-parent\" data-id=\"adf2972\" 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-babe3dd elementor-widget elementor-widget-template\" data-id=\"babe3dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"page\" data-elementor-id=\"500\" class=\"elementor elementor-500\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8837fc2 e-flex e-con-boxed e-con e-parent\" data-id=\"8837fc2\" 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-4e8ffa81 elementor-widget elementor-widget-html\" data-id=\"4e8ffa81\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n<section class=\"uapa-apa7\" aria-label=\"Sistema autom\u00e1tico para citas y referencias APA 7\">\r\n  <style>\r\n    .uapa-apa7{\r\n      --uapa-azul:#041147;\r\n      --uapa-naranja:#ff8300;\r\n      --uapa-blanco:#ffffff;\r\n\r\n      --bg-main:#06154d;\r\n      --bg-soft:#eef2ff;\r\n      --card:#ffffff;\r\n      --card-dark:#0a164f;\r\n      --text:#10204d;\r\n      --text-soft:#5d6b98;\r\n      --line:#d9e0fb;\r\n      --line-strong:#b9c6f3;\r\n      --chip:#edf2ff;\r\n      --output:#f7f9ff;\r\n      --shadow:0 18px 45px rgba(4,17,71,.10);\r\n      --shadow-strong:0 18px 40px rgba(4,17,71,.18);\r\n      --radius-xl:22px;\r\n      --radius-lg:18px;\r\n      --radius-md:14px;\r\n      --radius-sm:12px;\r\n\r\n      --sans:ui-sans-serif, Inter, \"Segoe UI\", Roboto, Arial, system-ui;\r\n      --mono:ui-monospace, SFMono-Regular, Menlo, Consolas, \"Liberation Mono\", monospace;\r\n    }\r\n\r\n    .uapa-apa7,\r\n    .uapa-apa7 *{box-sizing:border-box}\r\n\r\n    .uapa-apa7{\r\n      font-family:var(--sans);\r\n      color:var(--text);\r\n      padding:20px 0;\r\n      background:\r\n        radial-gradient(900px 500px at 0% 0%, rgba(255,131,0,.12), transparent 55%),\r\n        radial-gradient(1000px 600px at 100% 0%, rgba(4,17,71,.16), transparent 58%),\r\n        linear-gradient(180deg, #f7f9ff 0%, #eef3ff 100%);\r\n    }\r\n\r\n    .uapa-apa7 .wrap{\r\n      width:min(1180px, calc(100% - 24px));\r\n      margin:auto;\r\n      display:grid;\r\n      gap:18px;\r\n    }\r\n\r\n    .uapa-apa7 .card{\r\n      background:var(--card);\r\n      border:1px solid var(--line);\r\n      border-radius:var(--radius-xl);\r\n      box-shadow:var(--shadow);\r\n      overflow:hidden;\r\n    }\r\n\r\n    .uapa-apa7 .card-inner{\r\n      padding:22px;\r\n    }\r\n\r\n    .uapa-apa7 .hero{\r\n      background:\r\n        linear-gradient(135deg, rgba(4,17,71,1) 0%, rgba(10,22,79,1) 58%, rgba(255,131,0,.96) 160%);\r\n      color:#fff;\r\n      border:none;\r\n      box-shadow:var(--shadow-strong);\r\n      position:relative;\r\n      isolation:isolate;\r\n    }\r\n\r\n    .uapa-apa7 .hero::before,\r\n    .uapa-apa7 .hero::after{\r\n      content:\"\";\r\n      position:absolute;\r\n      border-radius:999px;\r\n      filter:blur(8px);\r\n      opacity:.22;\r\n      z-index:-1;\r\n    }\r\n\r\n    .uapa-apa7 .hero::before{\r\n      width:240px;height:240px;\r\n      top:-80px;right:-40px;\r\n      background:rgba(255,255,255,.28);\r\n    }\r\n\r\n    .uapa-apa7 .hero::after{\r\n      width:260px;height:260px;\r\n      left:-80px;bottom:-120px;\r\n      background:rgba(255,131,0,.35);\r\n    }\r\n\r\n    .uapa-apa7 .eyebrow{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      gap:8px;\r\n      padding:8px 14px;\r\n      border-radius:999px;\r\n      font-size:12px;\r\n      font-weight:800;\r\n      letter-spacing:.35px;\r\n      text-transform:uppercase;\r\n      background:rgba(255,255,255,.14);\r\n      color:#fff;\r\n      border:1px solid rgba(255,255,255,.18);\r\n      margin-bottom:14px;\r\n      backdrop-filter:blur(10px);\r\n    }\r\n\r\n    .uapa-apa7 .title{\r\n      margin:0;\r\n      font-size:clamp(22px, 2.2vw, 30px);\r\n      line-height:1.1;\r\n      font-weight:900;\r\n      letter-spacing:-.01em;\r\n      color:#fff;\r\n    }\r\n\r\n    .uapa-apa7 .hero-grid{\r\n      display:grid;\r\n      gap:18px;\r\n      margin-top:20px;\r\n    }\r\n\r\n    .uapa-apa7 .toolbar{\r\n      display:flex;\r\n      flex-wrap:wrap;\r\n      gap:12px;\r\n      align-items:center;\r\n    }\r\n\r\n    .uapa-apa7 .toolbar.stack{\r\n      display:grid;\r\n      grid-template-columns:1.2fr auto;\r\n      gap:12px;\r\n    }\r\n\r\n    .uapa-apa7 .pill{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      padding:8px 12px;\r\n      border-radius:999px;\r\n      background:rgba(255,255,255,.12);\r\n      border:1px solid rgba(255,255,255,.15);\r\n      color:#fff;\r\n      font-size:12px;\r\n      font-weight:800;\r\n      letter-spacing:.35px;\r\n      text-transform:uppercase;\r\n      white-space:nowrap;\r\n    }\r\n\r\n    .uapa-apa7 .input,\r\n    .uapa-apa7 .select{\r\n      width:100%;\r\n      min-height:50px;\r\n      border-radius:14px;\r\n      border:1px solid var(--line-strong);\r\n      background:#fff;\r\n      color:var(--text);\r\n      padding:13px 15px;\r\n      font:600 15px\/1.3 var(--sans);\r\n      outline:none;\r\n      transition:border-color .2s ease, box-shadow .2s ease, transform .15s ease;\r\n    }\r\n\r\n    .uapa-apa7 .hero .input,\r\n    .uapa-apa7 .hero .select{\r\n      border-color:rgba(255,255,255,.16);\r\n      background:rgba(255,255,255,.10);\r\n      color:#fff;\r\n      backdrop-filter:blur(8px);\r\n    }\r\n\r\n    .uapa-apa7 .hero .input::placeholder{\r\n      color:rgba(255,255,255,.70);\r\n    }\r\n\r\n    .uapa-apa7 .hero .select option{\r\n      color:#111;\r\n      background:#fff;\r\n    }\r\n\r\n    .uapa-apa7 .input:focus,\r\n    .uapa-apa7 .select:focus{\r\n      border-color:var(--uapa-naranja);\r\n      box-shadow:0 0 0 4px rgba(255,131,0,.14);\r\n    }\r\n\r\n    .uapa-apa7 .hero .input:focus,\r\n    .uapa-apa7 .hero .select:focus{\r\n      border-color:#fff;\r\n      box-shadow:0 0 0 4px rgba(255,255,255,.16);\r\n    }\r\n\r\n    .uapa-apa7 .btn,\r\n    .uapa-apa7 .ghost,\r\n    .uapa-apa7 .copy{\r\n      appearance:none;\r\n      border:none;\r\n      cursor:pointer;\r\n      transition:transform .15s ease, box-shadow .2s ease, background .2s ease, border-color .2s ease, color .2s ease;\r\n      font-family:var(--sans);\r\n    }\r\n\r\n    .uapa-apa7 .btn{\r\n      min-height:50px;\r\n      border-radius:14px;\r\n      padding:0 18px;\r\n      font-size:14px;\r\n      font-weight:800;\r\n      letter-spacing:.2px;\r\n      color:#fff;\r\n      background:linear-gradient(180deg, #ff9a27 0%, #ff8300 100%);\r\n      box-shadow:0 12px 24px rgba(255,131,0,.24);\r\n    }\r\n\r\n    .uapa-apa7 .btn:hover{transform:translateY(-1px); box-shadow:0 16px 30px rgba(255,131,0,.30)}\r\n    .uapa-apa7 .btn:active{transform:translateY(0)}\r\n\r\n    .uapa-apa7 .btn.secondary{\r\n      background:linear-gradient(180deg, #ff9a27 0%, #ff8300 100%);\r\n      box-shadow:0 12px 24px rgba(255,131,0,.28);\r\n    }\r\n\r\n    .uapa-apa7 .btn.secondary:hover{box-shadow:0 16px 30px rgba(255,131,0,.34)}\r\n\r\n    .uapa-apa7 .ghost{\r\n      min-height:50px;\r\n      border-radius:14px;\r\n      padding:0 18px;\r\n      font-size:14px;\r\n      font-weight:800;\r\n      color:#fff;\r\n      background:rgba(255,255,255,.08);\r\n      border:1px solid rgba(255,255,255,.18);\r\n      backdrop-filter:blur(8px);\r\n    }\r\n\r\n    .uapa-apa7 .ghost:hover{\r\n      transform:translateY(-1px);\r\n      background:rgba(255,255,255,.14);\r\n    }\r\n\r\n    .uapa-apa7 .section-head{\r\n      display:flex;\r\n      align-items:center;\r\n      justify-content:space-between;\r\n      gap:12px;\r\n      margin-bottom:18px;\r\n      flex-wrap:wrap;\r\n    }\r\n\r\n    .uapa-apa7 .section-title{\r\n      margin:0;\r\n      font-size:13px;\r\n      font-weight:900;\r\n      letter-spacing:.35px;\r\n      color:var(--uapa-azul);\r\n      text-transform:uppercase;\r\n    }\r\n\r\n    .uapa-apa7 .badge{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      gap:8px;\r\n      padding:8px 12px;\r\n      border-radius:999px;\r\n      background:var(--chip);\r\n      border:1px solid var(--line);\r\n      color:var(--text-soft);\r\n      font-size:12px;\r\n      font-weight:800;\r\n      text-transform:uppercase;\r\n    }\r\n\r\n    .uapa-apa7 .grid{\r\n      display:grid;\r\n      gap:16px;\r\n    }\r\n\r\n    .uapa-apa7 .meta-grid{\r\n      grid-template-columns:repeat(2, minmax(0,1fr));\r\n    }\r\n\r\n    .uapa-apa7 .field{\r\n      display:grid;\r\n      gap:8px;\r\n    }\r\n\r\n    .uapa-apa7 .field label{\r\n      font-size:12px;\r\n      font-weight:800;\r\n      letter-spacing:.3px;\r\n      color:var(--text-soft);\r\n      text-transform:uppercase;\r\n    }\r\n\r\n    .uapa-apa7 .output-grid{\r\n      display:grid;\r\n      gap:16px;\r\n      grid-template-columns:1fr 1fr;\r\n    }\r\n\r\n    .uapa-apa7 .output-box{\r\n      background:linear-gradient(180deg, #ffffff 0%, #f8faff 100%);\r\n      border:1px solid var(--line);\r\n      border-radius:18px;\r\n      padding:16px;\r\n      min-height:118px;\r\n      box-shadow:inset 0 1px 0 rgba(255,255,255,.7);\r\n    }\r\n\r\n    .uapa-apa7 .output-box.primary{\r\n      min-height:132px;\r\n      background:\r\n        linear-gradient(180deg, rgba(255,131,0,.05) 0%, rgba(255,255,255,1) 100%);\r\n      border-color:#ffdcb6;\r\n    }\r\n\r\n    .uapa-apa7 .out{\r\n      font:500 14px\/1.7 var(--mono);\r\n      color:var(--text);\r\n      white-space:pre-wrap;\r\n      word-break:break-word;\r\n    }\r\n\r\n    .uapa-apa7 .mini-toolbar{\r\n      display:flex;\r\n      flex-wrap:wrap;\r\n      gap:10px;\r\n      margin-top:12px;\r\n    }\r\n\r\n    .uapa-apa7 .copy{\r\n      min-height:40px;\r\n      padding:0 14px;\r\n      border-radius:12px;\r\n      border:1px solid #ffcf97;\r\n      background:#fff7ef;\r\n      color:#b15b00;\r\n      font-size:13px;\r\n      font-weight:800;\r\n    }\r\n\r\n    .uapa-apa7 .copy:hover{\r\n      transform:translateY(-1px);\r\n      background:#ffedd8;\r\n      box-shadow:0 10px 18px rgba(255,131,0,.14);\r\n    }\r\n\r\n    .uapa-apa7 .help{\r\n      background:linear-gradient(180deg, #fff9f2 0%, #fff 100%);\r\n      border:1px solid #ffd8aa;\r\n      border-left:5px solid var(--uapa-naranja);\r\n      border-radius:16px;\r\n      padding:14px 16px;\r\n      color:#7a5a29;\r\n      font-size:13px;\r\n      line-height:1.6;\r\n    }\r\n\r\n    .uapa-apa7 .footer-notes{\r\n      display:grid;\r\n      gap:10px;\r\n      font-size:13px;\r\n      color:var(--text-soft);\r\n      line-height:1.65;\r\n    }\r\n\r\n    .uapa-apa7 .footer-notes b{\r\n      color:var(--uapa-azul);\r\n    }\r\n\r\n    .uapa-apa7 .small{\r\n      font-size:12px;\r\n    }\r\n\r\n    .uapa-apa7 .field-note{\r\n      margin-top:-2px;\r\n      color:var(--text-soft);\r\n      font-size:11px;\r\n      line-height:1.45;\r\n    }\r\n\r\n    .uapa-apa7 .detect-note{\r\n      color:rgba(255,255,255,.84);\r\n      font-size:12px;\r\n      line-height:1.55;\r\n      padding:10px 12px;\r\n      border:1px solid rgba(255,255,255,.14);\r\n      border-radius:12px;\r\n      background:rgba(255,255,255,.07);\r\n    }\r\n\r\n    .uapa-apa7 .validation{\r\n      display:none;\r\n      margin-top:16px;\r\n      padding:12px 14px;\r\n      border-radius:14px;\r\n      border:1px solid #ffd8aa;\r\n      background:#fff9f2;\r\n      color:#7a5a29;\r\n      font-size:13px;\r\n      line-height:1.55;\r\n    }\r\n\r\n    .uapa-apa7 .validation.show{\r\n      display:block;\r\n    }\r\n\r\n    .uapa-apa7 .output-box.primary .out{\r\n      padding-left:1.27cm;\r\n      text-indent:-1.27cm;\r\n    }\r\n\r\n    @media (max-width: 520px){\r\n      .uapa-apa7 .output-box.primary .out{\r\n        padding-left:.7cm;\r\n        text-indent:-.7cm;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 900px){\r\n      .uapa-apa7 .toolbar.stack,\r\n      .uapa-apa7 .meta-grid,\r\n      .uapa-apa7 .output-grid{\r\n        grid-template-columns:1fr;\r\n      }\r\n\r\n      .uapa-apa7 .card-inner{\r\n        padding:18px;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"wrap\">\r\n    <header class=\"card hero\">\r\n      <div class=\"card-inner\">\r\n        <span class=\"eyebrow\"><\/span>\r\n        <h1 class=\"title\">Sistema autom\u00e1tico para citas y referencias APA 7<\/h1>\r\n\r\n        <div class=\"hero-grid\">\r\n          <div class=\"toolbar\">\r\n            <span class=\"pill\">Tipo de fuente<\/span>\r\n            <select id=\"rtype\" class=\"select\" aria-label=\"Tipo de fuente\" required>\r\n              <option value=\"\" selected disabled>Elige el tipo de fuente<\/option>\r\n              <option value=\"book\">Libro impreso o electr\u00f3nico<\/option>\r\n              <option value=\"thesisDigital\">Tesis digital<\/option>\r\n              <option value=\"thesisPrint\">Tesis impresa<\/option>\r\n              <option value=\"article\">Art\u00edculo de revista<\/option>\r\n              <option value=\"newspaper\">Art\u00edculo de prensa<\/option>\r\n              <option value=\"ai\">Inteligencia artificial<\/option>\r\n              <option value=\"web\">Sitio web<\/option>\r\n              <option value=\"blog\">Entrada de blog<\/option>\r\n              <option value=\"social\">Red social<\/option>\r\n              <option value=\"legal\">Documento jur\u00eddico<\/option>\r\n              <option value=\"audiobook\">Audiolibro<\/option>\r\n            <\/select>\r\n          <\/div>\r\n\r\n          <div class=\"toolbar stack\">\r\n            <input id=\"sourceUrl\" class=\"input\" type=\"text\" placeholder=\"https:\/\/... (opcional para detecci\u00f3n)\">\r\n            <div class=\"toolbar\">\r\n              <button id=\"detect\" class=\"btn secondary\" type=\"button\">Intentar detectar desde URL<\/button>\r\n              <button id=\"clear\" class=\"ghost\" type=\"button\">Limpiar<\/button>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div id=\"detectNote\" class=\"detect-note\" aria-live=\"polite\">\r\n            La detecci\u00f3n autom\u00e1tica es orientativa. Verifica siempre en la fuente original el autor,\r\n            la fecha, el t\u00edtulo y el tipo de recurso antes de copiar la referencia.\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/header>\r\n\r\n    <section class=\"card\">\r\n      <div class=\"card-inner\">\r\n        <div class=\"section-head\">\r\n          <h2 class=\"section-title\">Datos de la fuente<\/h2>\r\n          <span class=\"badge\">Completa los campos seg\u00fan el tipo seleccionado<\/span>\r\n        <\/div>\r\n        <div id=\"meta\" class=\"grid meta-grid\"><\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <section class=\"card\">\r\n      <div class=\"card-inner\">\r\n        <div class=\"section-head\">\r\n          <h2 class=\"section-title\">Salida APA 7<\/h2>\r\n          <span class=\"badge\">Resultado autom\u00e1tico<\/span>\r\n        <\/div>\r\n\r\n        <div class=\"field\">\r\n          <label>Referencia<\/label>\r\n          <div class=\"output-box primary\">\r\n            <div id=\"ref\" class=\"out\"><\/div>\r\n          <\/div>\r\n          <div class=\"mini-toolbar\">\r\n            <button class=\"copy\" data-copy=\"#ref\" type=\"button\">Copiar referencia<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"output-grid\" style=\"margin-top:16px;\">\r\n          <div class=\"field\">\r\n            <label>Cita en el texto (parent\u00e9tica)<\/label>\r\n            <div class=\"output-box\">\r\n              <div id=\"intext\" class=\"out\"><\/div>\r\n            <\/div>\r\n            <div class=\"mini-toolbar\">\r\n              <button class=\"copy\" data-copy=\"#intext\" type=\"button\">Copiar cita<\/button>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"field\">\r\n            <label>Cita narrativa (autor en el texto)<\/label>\r\n            <div class=\"output-box\">\r\n              <div id=\"narr\" class=\"out\"><\/div>\r\n            <\/div>\r\n            <div class=\"mini-toolbar\">\r\n              <button class=\"copy\" data-copy=\"#narr\" type=\"button\">Copiar cita narrativa<\/button>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"validationMsg\" class=\"validation\" aria-live=\"polite\"><\/div>\r\n\r\n        <div class=\"help\" style=\"margin-top:16px;\">\r\n          Para una cita directa a\u00f1ade p\u00e1gina o p\u00e1rrafo: (Autor, a\u00f1o, p. 23) o (Autor, a\u00f1o, p\u00e1rr. 4).\r\n          Si no existe autor, el t\u00edtulo pasa a la posici\u00f3n del autor en la referencia y se utiliza una\r\n          versi\u00f3n abreviada del t\u00edtulo en la cita. Revisa el resultado antes de incorporarlo al trabajo.\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <footer class=\"card\">\r\n      <div class=\"card-inner footer-notes\">\r\n        <div><b>Notas APA 7 r\u00e1pidas<\/b><\/div>\r\n        <div>En la lista de referencias se incluyen hasta 20 autores. Con 21 o m\u00e1s, se escriben los primeros 19, puntos suspensivos y el \u00faltimo autor.<\/div>\r\n        <div>Los t\u00edtulos de obras completas \u2014libros, informes, tesis, p\u00e1ginas web y videos\u2014 se presentan en cursiva. Los t\u00edtulos de art\u00edculos, cap\u00edtulos, noticias, entradas de blog, episodios y publicaciones sociales no se escriben en cursiva.<\/div>\r\n        <div>Los DOI se presentan como URL: <code>https:\/\/doi.org\/...<\/code>. No se a\u00f1ade punto final despu\u00e9s de un DOI o URL.<\/div>\r\n        <div class=\"small\">El sistema organiza los datos introducidos, pero no sustituye la revisi\u00f3n de la fuente original ni el criterio acad\u00e9mico.<\/div>\r\n      <\/div>\r\n    <\/footer>\r\n  <\/div>\r\n\r\n  <script>\r\n    (() => {\r\n      \"use strict\";\r\n\r\n      const root = document.querySelector(\".uapa-apa7\");\r\n      if (!root || root.dataset.apaGeneratorReady === \"true\") return;\r\n      root.dataset.apaGeneratorReady = \"true\";\r\n\r\n      const MONTHS = [\r\n        \"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\r\n        \"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"\r\n      ];\r\n\r\n      const MONTH_INDEX = {\r\n        enero:0, febrero:1, marzo:2, abril:3, mayo:4, junio:5,\r\n        julio:6, agosto:7, septiembre:8, setiembre:8,\r\n        octubre:9, noviembre:10, diciembre:11\r\n      };\r\n\r\n      const $ = (sel) => root.querySelector(sel);\r\n      const $$ = (sel) => Array.from(root.querySelectorAll(sel));\r\n\r\n      function clean(value){\r\n        return String(value || \"\").trim().replace(\/\\s+\/g, \" \");\r\n      }\r\n\r\n      function escapeHTML(value){\r\n        return clean(value)\r\n          .replace(\/&\/g, \"&amp;\")\r\n          .replace(\/<\/g, \"&lt;\")\r\n          .replace(\/>\/g, \"&gt;\")\r\n          .replace(\/\"\/g, \"&quot;\")\r\n          .replace(\/'\/g, \"&#039;\");\r\n      }\r\n\r\n      function decodeHTML(value){\r\n        const textarea = document.createElement(\"textarea\");\r\n        textarea.innerHTML = value || \"\";\r\n        return textarea.value;\r\n      }\r\n\r\n      function sentCase(value){\r\n        const text = clean(value);\r\n        return text ? text.charAt(0).toUpperCase() + text.slice(1) : \"\";\r\n      }\r\n\r\n      function normalizeComparable(value){\r\n        return clean(value)\r\n          .normalize(\"NFD\")\r\n          .replace(\/\\p{Diacritic}\/gu, \"\")\r\n          .replace(\/[^\\p{L}\\p{N}]+\/gu, \"\")\r\n          .toLowerCase();\r\n      }\r\n\r\n      function sameText(a, b){\r\n        return !!a && !!b && normalizeComparable(a) === normalizeComparable(b);\r\n      }\r\n\r\n      function parseDate(value){\r\n        const raw = clean(value);\r\n        if(!raw) return null;\r\n\r\n        let match = raw.match(\/\\b(\\d{4})[-\\\/.](\\d{1,2})(?:[-\\\/.](\\d{1,2}))?\\b\/);\r\n        if(match){\r\n          return {\r\n            y:Number(match[1]),\r\n            m:Number(match[2]) - 1,\r\n            d:match[3] ? Number(match[3]) : undefined\r\n          };\r\n        }\r\n\r\n        match = raw.toLowerCase().match(\/\\b(\\d{1,2})\\s*(?:de\\s*)?([a-z\u00e1\u00e9\u00ed\u00f3\u00fa\u00f1]+)\\s*(?:de\\s*)?(\\d{4})\\b\/);\r\n        if(match){\r\n          const monthKey = match[2].normalize(\"NFD\").replace(\/\\p{Diacritic}\/gu, \"\");\r\n          if(Object.prototype.hasOwnProperty.call(MONTH_INDEX, monthKey)){\r\n            return {y:Number(match[3]), m:MONTH_INDEX[monthKey], d:Number(match[1])};\r\n          }\r\n        }\r\n\r\n        match = raw.toLowerCase().match(\/\\b([a-z\u00e1\u00e9\u00ed\u00f3\u00fa\u00f1]+)\\s+(?:de\\s*)?(\\d{4})\\b\/);\r\n        if(match){\r\n          const monthKey = match[1].normalize(\"NFD\").replace(\/\\p{Diacritic}\/gu, \"\");\r\n          if(Object.prototype.hasOwnProperty.call(MONTH_INDEX, monthKey)){\r\n            return {y:Number(match[2]), m:MONTH_INDEX[monthKey]};\r\n          }\r\n        }\r\n\r\n        match = raw.match(\/\\b(19|20)\\d{2}\\b\/);\r\n        return match ? {y:Number(match[0])} : null;\r\n      }\r\n\r\n      function fmtDate(date){\r\n        if(!date || !date.y) return \"(s. f.)\";\r\n        if(Number.isInteger(date.m) && date.d){\r\n          return `(${date.y}, ${date.d} de ${MONTHS[date.m]})`;\r\n        }\r\n        if(Number.isInteger(date.m)){\r\n          return `(${date.y}, ${MONTHS[date.m]})`;\r\n        }\r\n        return `(${date.y})`;\r\n      }\r\n\r\n      function fmtYearOnly(value){\r\n        const parsed = parseDate(value);\r\n        return parsed && parsed.y ? `(${parsed.y})` : \"(s. f.)\";\r\n      }\r\n\r\n      function yearFrom(value){\r\n        const parsed = parseDate(value);\r\n        return parsed && parsed.y ? String(parsed.y) : \"s. f.\";\r\n      }\r\n\r\n      function initialsFrom(givenNames){\r\n        const tokens = clean(givenNames).match(\/[\\p{L}\u00c0-\u00ff]+(?:[-\u2019'][\\p{L}\u00c0-\u00ff]+)*\/gu) || [];\r\n        return tokens.map(token => {\r\n          if(token.includes(\"-\")){\r\n            return token.split(\"-\")\r\n              .filter(Boolean)\r\n              .map(part => part.charAt(0).toUpperCase() + \".\")\r\n              .join(\"-\");\r\n          }\r\n          return token.charAt(0).toUpperCase() + \".\";\r\n        }).join(\" \");\r\n      }\r\n\r\n      function stripHonorifics(name){\r\n        return clean(name).replace(\/\\b(Dr|Dra|Ing|Lic|Mtro|Mtra|Prof)\\.?\\s+\/gi, \"\");\r\n      }\r\n\r\n      function splitPersons(raw){\r\n        return clean(raw)\r\n          .split(\/\\s*;\\s*|\\n+\/)\r\n          .map(clean)\r\n          .filter(Boolean);\r\n      }\r\n\r\n      function parsePerson(name){\r\n        const value = stripHonorifics(name);\r\n        if(!value) return {surname:\"\", initials:\"\"};\r\n\r\n        if(value.includes(\",\")){\r\n          const comma = value.indexOf(\",\");\r\n          const surname = clean(value.slice(0, comma));\r\n          const given = clean(value.slice(comma + 1));\r\n          return {surname, initials:initialsFrom(given)};\r\n        }\r\n\r\n        const parts = value.split(\" \").filter(Boolean);\r\n        if(parts.length === 1) return {surname:parts[0], initials:\"\"};\r\n        const surname = parts.pop();\r\n        return {surname, initials:initialsFrom(parts.join(\" \"))};\r\n      }\r\n\r\n      function fmtPersonRef(name){\r\n        const person = parsePerson(name);\r\n        return person.initials ? `${person.surname}, ${person.initials}` : person.surname;\r\n      }\r\n\r\n      function fmtPersonEditor(name){\r\n        const person = parsePerson(name);\r\n        return person.initials ? `${person.initials} ${person.surname}` : person.surname;\r\n      }\r\n\r\n      function personSurname(name){\r\n        return parsePerson(name).surname;\r\n      }\r\n\r\n      function joinPersonAuthors(raw){\r\n        const formatted = splitPersons(raw).map(fmtPersonRef).filter(Boolean);\r\n        if(!formatted.length) return \"\";\r\n        if(formatted.length === 1) return formatted[0];\r\n        if(formatted.length === 2) return `${formatted[0]}, & ${formatted[1]}`;\r\n        if(formatted.length <= 20){\r\n          return `${formatted.slice(0, -1).join(\", \")}, & ${formatted.at(-1)}`;\r\n        }\r\n        return `${formatted.slice(0, 19).join(\", \")}, \u2026 ${formatted.at(-1)}`;\r\n      }\r\n\r\n      function joinEditors(raw){\r\n        const editors = splitPersons(raw).map(fmtPersonEditor).filter(Boolean);\r\n        if(!editors.length) return \"\";\r\n        const names = editors.length === 1\r\n          ? editors[0]\r\n          : `${editors.slice(0, -1).join(\", \")}, & ${editors.at(-1)}`;\r\n        return `${names} (${editors.length === 1 ? \"Ed.\" : \"Eds.\"})`;\r\n      }\r\n\r\n      function authorFields(label = \"Autor(es) u organizaci\u00f3n\", defaultType = \"person\"){\r\n        return [\r\n          {\r\n            id:\"authorType\",\r\n            label:\"Tipo de autor\",\r\n            type:\"select\",\r\n            value:defaultType,\r\n            options:[\r\n              {value:\"person\", label:\"Persona(s)\"},\r\n              {value:\"group\", label:\"Organizaci\u00f3n, instituci\u00f3n, medio o canal\"}\r\n            ]\r\n          },\r\n          {\r\n            id:\"author\",\r\n            label,\r\n            type:\"text\",\r\n            ph:\"Persona: Apellido, Nombre; Apellido, Nombre | Entidad: nombre completo\",\r\n            note:\"Separa autores personales con punto y coma. Para apellidos compuestos, usa el formato Apellido, Nombre.\"\r\n          },\r\n          {\r\n            id:\"authorAbbr\",\r\n            label:\"Sigla institucional (opcional)\",\r\n            type:\"text\",\r\n            ph:\"Ej.: UAPA\",\r\n            note:\"\u00dasala solo cuando el autor sea una organizaci\u00f3n y quieras mostrar su sigla en la primera cita.\"\r\n          }\r\n        ];\r\n      }\r\n\r\n      function refAuthor(data){\r\n        if(data.authorType === \"group\") return clean(data.author);\r\n        return joinPersonAuthors(data.author);\r\n      }\r\n\r\n      function personalSurnames(data){\r\n        return splitPersons(data.author).map(personSurname).filter(Boolean);\r\n      }\r\n\r\n      function normalizeLink(value){\r\n        let link = clean(value).replace(\/[.,;:]+$\/g, \"\");\r\n        if(!link) return \"\";\r\n        link = link.replace(\/^doi:\\s*\/i, \"\");\r\n        link = link.replace(\/^https?:\\\/\\\/(?:dx\\.)?doi\\.org\\\/\/i, \"https:\/\/doi.org\/\");\r\n        if(\/^10\\.\\d{4,9}\\\/\/i.test(link)){\r\n          link = `https:\/\/doi.org\/${link}`;\r\n        }\r\n        return link;\r\n      }\r\n\r\n      function appendLink(reference, rawLink){\r\n        const link = normalizeLink(rawLink);\r\n        const base = clean(reference).replace(\/\\s+([.,])\/g, \"$1\");\r\n        if(!link) return base.endsWith(\".\") ? base : `${base}.`;\r\n        return `${base.replace(\/[.\\s]+$\/g, \"\")}. ${escapeHTML(link)}`;\r\n      }\r\n\r\n      function withPeriod(value){\r\n        const text = clean(value);\r\n        if(!text) return \"\";\r\n        return \/[.!?]$\/.test(text) ? text : `${text}.`;\r\n      }\r\n\r\n      function titleHTML(value, italic = false){\r\n        const safe = escapeHTML(sentCase(value));\r\n        return italic ? `<i>${safe}<\/i>` : safe;\r\n      }\r\n\r\n      function firstTwentyWords(value){\r\n        const words = clean(value).split(\/\\s+\/).filter(Boolean);\r\n        if(words.length <= 20) return words.join(\" \");\r\n        return `${words.slice(0, 20).join(\" \")}\u2026`;\r\n      }\r\n\r\n      function workTitle(data, type){\r\n        if(type === \"chapter\") return data.chapter;\r\n        return data.title || \"\";\r\n      }\r\n\r\n      function titleIsStandalone(type){\r\n        return [\"web\",\"book\",\"thesisDigital\",\"thesisPrint\",\"ai\",\"legal\",\"audiobook\"].includes(type);\r\n      }\r\n\r\n      function titleIsQuotedInCitation(type){\r\n        return [\"blog\",\"article\",\"newspaper\",\"social\"].includes(type);\r\n      }\r\n\r\n      function abbreviatedTitle(value){\r\n        const words = clean(value).split(\/\\s+\/).filter(Boolean);\r\n        return words.length > 6 ? `${words.slice(0, 6).join(\" \")}\u2026` : words.join(\" \");\r\n      }\r\n\r\n      function noAuthorTitleHTML(data, type){\r\n        const title = abbreviatedTitle(workTitle(data, type)) || \"T\u00edtulo\";\r\n        if(titleIsQuotedInCitation(type)){\r\n          return `\u201c${escapeHTML(title)}\u201d`;\r\n        }\r\n        return `<i>${escapeHTML(title)}<\/i>`;\r\n      }\r\n\r\n      function parentheticalCitation(data, type){\r\n        const year = yearFrom(data.date);\r\n\r\n        if(data.authorType === \"group\" && clean(data.author)){\r\n          const group = escapeHTML(data.author);\r\n          const abbr = clean(data.authorAbbr);\r\n          return abbr\r\n            ? `(${group} [${escapeHTML(abbr)}], ${year})`\r\n            : `(${group}, ${year})`;\r\n        }\r\n\r\n        const surnames = personalSurnames(data);\r\n        if(surnames.length === 1) return `(${escapeHTML(surnames[0])}, ${year})`;\r\n        if(surnames.length === 2){\r\n          return `(${escapeHTML(surnames[0])} & ${escapeHTML(surnames[1])}, ${year})`;\r\n        }\r\n        if(surnames.length >= 3){\r\n          return `(${escapeHTML(surnames[0])} et al., ${year})`;\r\n        }\r\n\r\n        return `(${noAuthorTitleHTML(data, type)}, ${year})`;\r\n      }\r\n\r\n      function narrativeCitation(data, type){\r\n        const year = yearFrom(data.date);\r\n\r\n        if(data.authorType === \"group\" && clean(data.author)){\r\n          const group = escapeHTML(data.author);\r\n          const abbr = clean(data.authorAbbr);\r\n          return abbr\r\n            ? `${group} (${escapeHTML(abbr)}, ${year})`\r\n            : `${group} (${year})`;\r\n        }\r\n\r\n        const surnames = personalSurnames(data);\r\n        if(surnames.length === 1) return `${escapeHTML(surnames[0])} (${year})`;\r\n        if(surnames.length === 2){\r\n          return `${escapeHTML(surnames[0])} y ${escapeHTML(surnames[1])} (${year})`;\r\n        }\r\n        if(surnames.length >= 3){\r\n          return `${escapeHTML(surnames[0])} et al. (${year})`;\r\n        }\r\n\r\n        return `${noAuthorTitleHTML(data, type)} (${year})`;\r\n      }\r\n\r\n      function baseReference(data, type, title, italicTitle){\r\n        const author = refAuthor(data);\r\n        const yearOnlyTypes = [\"article\",\"book\",\"thesisDigital\",\"thesisPrint\",\"ai\",\"audiobook\"];\r\n        const date = yearOnlyTypes.includes(type)\r\n          ? fmtYearOnly(data.date)\r\n          : fmtDate(parseDate(data.date));\r\n        const formattedTitle = titleHTML(title, italicTitle);\r\n\r\n        if(author){\r\n          return `${escapeHTML(author)}. ${date}. ${formattedTitle}`;\r\n        }\r\n        return `${formattedTitle}. ${date}`;\r\n      }\r\n\r\n      const TYPES = {\r\n        book: {\r\n          label:\"Libro impreso o electr\u00f3nico\",\r\n          fields:[\r\n            ...authorFields(\"Autor(es) o entidad responsable\", \"person\"),\r\n            {id:\"date\", label:\"A\u00f1o\", type:\"text\", ph:\"Ej.: 2024\"},\r\n            {id:\"title\", label:\"T\u00edtulo del libro\", type:\"text\"},\r\n            {id:\"publisher\", label:\"Editorial\", type:\"text\"},\r\n            {id:\"url\", label:\"URL (si corresponde)\", type:\"url\"}\r\n          ],\r\n          required:[\"title\",\"publisher\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"book\", data.title, true);\r\n            if(data.publisher) reference = `${reference}. ${escapeHTML(data.publisher)}`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        thesisDigital: {\r\n          label:\"Tesis digital\",\r\n          fields:[\r\n            ...authorFields(\"Autor(es)\", \"person\"),\r\n            {id:\"date\", label:\"A\u00f1o\", type:\"text\", ph:\"Ej.: 2023\"},\r\n            {id:\"title\", label:\"T\u00edtulo de la tesis\", type:\"text\"},\r\n            {id:\"type\", label:\"Tipo de tesis\", type:\"text\", ph:\"Ej.: Tesis de maestr\u00eda\"},\r\n            {id:\"institution\", label:\"Instituci\u00f3n\", type:\"text\"},\r\n            {id:\"url\", label:\"URL\", type:\"url\"}\r\n          ],\r\n          required:[\"title\",\"type\",\"institution\",\"url\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"thesisDigital\", data.title, true);\r\n            const bracket = [data.type, data.institution].filter(Boolean).join(\", \");\r\n            if(bracket) reference = `${reference} [${escapeHTML(bracket)}]`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        thesisPrint: {\r\n          label:\"Tesis impresa\",\r\n          fields:[\r\n            ...authorFields(\"Autor(es)\", \"person\"),\r\n            {id:\"date\", label:\"A\u00f1o\", type:\"text\", ph:\"Ej.: 2023\"},\r\n            {id:\"title\", label:\"T\u00edtulo de la tesis\", type:\"text\"},\r\n            {id:\"type\", label:\"Tipo de tesis\", type:\"text\", ph:\"Ej.: Tesis de doctorado\"},\r\n            {id:\"institution\", label:\"Instituci\u00f3n\", type:\"text\"}\r\n          ],\r\n          required:[\"title\",\"type\",\"institution\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"thesisPrint\", data.title, true);\r\n            if(data.type) reference = `${reference} [${escapeHTML(data.type)}]`;\r\n            if(data.institution) reference = `${reference}. ${escapeHTML(data.institution)}`;\r\n            return withPeriod(reference);\r\n          }\r\n        },\r\n\r\n        article: {\r\n          label:\"Art\u00edculo de revista\",\r\n          fields:[\r\n            ...authorFields(\"Autor(es) del art\u00edculo\", \"person\"),\r\n            {id:\"date\", label:\"A\u00f1o\", type:\"text\", ph:\"Ej.: 2024\"},\r\n            {id:\"title\", label:\"T\u00edtulo del art\u00edculo\", type:\"text\"},\r\n            {id:\"journal\", label:\"T\u00edtulo de la revista\", type:\"text\"},\r\n            {id:\"volume\", label:\"Volumen\", type:\"text\"},\r\n            {id:\"issue\", label:\"N\u00famero\", type:\"text\"},\r\n            {id:\"pages\", label:\"P\u00e1ginas\", type:\"text\", ph:\"Ej.: 45\u201360\"},\r\n            {id:\"doi\", label:\"DOI o URL\", type:\"text\", ph:\"https:\/\/doi.org\/... o https:\/\/...\"}\r\n          ],\r\n          required:[\"title\",\"journal\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"article\", data.title, false);\r\n            const journal = data.journal ? `<i>${escapeHTML(data.journal)}<\/i>` : \"\";\r\n            const volume = data.volume ? `<i>${escapeHTML(data.volume)}<\/i>` : \"\";\r\n            const issue = data.issue ? `(${escapeHTML(data.issue)})` : \"\";\r\n            const pages = data.pages ? `, ${escapeHTML(data.pages)}` : \"\";\r\n            const source = [journal, `${volume}${issue}${pages}`].filter(Boolean).join(\", \");\r\n            if(source) reference = `${reference}. ${source}`;\r\n            return appendLink(reference, data.doi);\r\n          }\r\n        },\r\n\r\n        newspaper: {\r\n          label:\"Art\u00edculo de prensa\",\r\n          fields:[\r\n            ...authorFields(\"Autor(es) de la noticia\", \"person\"),\r\n            {id:\"date\", label:\"Fecha completa\", type:\"text\", ph:\"Ej.: 21 de mayo de 2024\"},\r\n            {id:\"title\", label:\"T\u00edtulo de la noticia\", type:\"text\"},\r\n            {id:\"newspaper\", label:\"Nombre del peri\u00f3dico\", type:\"text\"},\r\n            {id:\"url\", label:\"URL\", type:\"url\"}\r\n          ],\r\n          required:[\"title\",\"newspaper\",\"url\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"newspaper\", data.title, false);\r\n            if(data.newspaper) reference = `${reference}. <i>${escapeHTML(data.newspaper)}<\/i>`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        ai: {\r\n          label:\"Inteligencia artificial\",\r\n          fields:[\r\n            ...authorFields(\"Autor o empresa responsable\", \"group\"),\r\n            {id:\"date\", label:\"A\u00f1o\", type:\"text\", ph:\"Ej.: 2025\"},\r\n            {id:\"title\", label:\"Nombre de la herramienta o modelo\", type:\"text\", ph:\"Ej.: ChatGPT\"},\r\n            {id:\"modelType\", label:\"Descripci\u00f3n del recurso\", type:\"text\", value:\"Modelo de IA generativa\", ph:\"Modelo de IA generativa\"},\r\n            {id:\"url\", label:\"URL oficial\", type:\"url\"}\r\n          ],\r\n          required:[\"author\",\"title\",\"url\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"ai\", data.title, true);\r\n            reference = `${reference} [${escapeHTML(data.modelType || \"Modelo de IA generativa\")}]`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        web: {\r\n          label:\"Sitio web\",\r\n          fields:[\r\n            ...authorFields(\"Autor o instituci\u00f3n\", \"group\"),\r\n            {id:\"date\", label:\"Fecha\", type:\"text\", ph:\"Ej.: 14 de mayo de 2024\"},\r\n            {id:\"title\", label:\"T\u00edtulo del art\u00edculo\", type:\"text\"},\r\n            {id:\"site\", label:\"Nombre del sitio web\", type:\"text\"},\r\n            {id:\"url\", label:\"URL\", type:\"url\"}\r\n          ],\r\n          required:[\"title\",\"site\",\"url\"],\r\n          ref(data){\r\n            const author = refAuthor(data);\r\n            let reference = baseReference(data, \"web\", data.title, true);\r\n            if(data.site && !sameText(author, data.site)) reference = `${reference}. ${escapeHTML(data.site)}`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        blog: {\r\n          label:\"Entrada de blog\",\r\n          fields:[\r\n            ...authorFields(\"Autor\", \"person\"),\r\n            {id:\"date\", label:\"Fecha\", type:\"text\", ph:\"Ej.: 14 de mayo de 2024\"},\r\n            {id:\"title\", label:\"T\u00edtulo de la entrada\", type:\"text\"},\r\n            {id:\"blog\", label:\"Nombre del blog\", type:\"text\"},\r\n            {id:\"url\", label:\"URL\", type:\"url\"}\r\n          ],\r\n          required:[\"title\",\"blog\",\"url\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"blog\", data.title, false);\r\n            if(data.blog) reference = `${reference}. <i>${escapeHTML(data.blog)}<\/i>`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        social: {\r\n          label:\"Red social\",\r\n          fields:[\r\n            ...authorFields(\"Autor o instituci\u00f3n\", \"group\"),\r\n            {id:\"handle\", label:\"Usuario\", type:\"text\", ph:\"Ej.: @uniuapa\"},\r\n            {id:\"date\", label:\"Fecha\", type:\"text\", ph:\"Ej.: 14 de mayo de 2024\"},\r\n            {id:\"title\", label:\"Texto o t\u00edtulo de la publicaci\u00f3n\", type:\"text\", note:\"Se utilizar\u00e1n como m\u00e1ximo las primeras 20 palabras.\"},\r\n            {id:\"contentType\", label:\"Tipo de contenido\", type:\"text\", ph:\"Ej.: Publicaci\u00f3n, fotograf\u00eda o video\"},\r\n            {id:\"platform\", label:\"Nombre de la red social\", type:\"text\", ph:\"Ej.: Instagram\"},\r\n            {id:\"url\", label:\"URL\", type:\"url\"}\r\n          ],\r\n          required:[\"title\",\"platform\",\"url\"],\r\n          ref(data){\r\n            const author = refAuthor(data);\r\n            const handle = clean(data.handle).replace(\/^@\/, \"\");\r\n            let authorPart = author ? escapeHTML(author) : \"\";\r\n            if(handle) authorPart = authorPart ? `${authorPart} [@${escapeHTML(handle)}]` : `@${escapeHTML(handle)}`;\r\n            const caption = escapeHTML(firstTwentyWords(data.title));\r\n            let reference = authorPart\r\n              ? `${authorPart}. ${fmtDate(parseDate(data.date))}. ${caption}`\r\n              : `${caption}. ${fmtDate(parseDate(data.date))}`;\r\n            reference = `${reference} [${escapeHTML(data.contentType || \"Publicaci\u00f3n\")}]`;\r\n            if(data.platform) reference = `${reference}. ${escapeHTML(data.platform)}`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        legal: {\r\n          label:\"Documento jur\u00eddico\",\r\n          fields:[\r\n            ...authorFields(\"Entidad\", \"group\"),\r\n            {id:\"date\", label:\"Fecha completa\", type:\"text\", ph:\"Ej.: 21 de febrero de 2024\"},\r\n            {id:\"number\", label:\"N\u00famero y descripci\u00f3n del documento\", type:\"text\", ph:\"Ej.: Ley n\u00fam. 123-24 sobre...\"},\r\n            {id:\"publication\", label:\"Publicaci\u00f3n\", type:\"text\", ph:\"Ej.: Gaceta Oficial\"},\r\n            {id:\"volume\", label:\"Volumen\", type:\"text\"},\r\n            {id:\"issue\", label:\"N\u00famero\", type:\"text\"},\r\n            {id:\"pages\", label:\"P\u00e1ginas (si corresponde)\", type:\"text\", ph:\"Ej.: 15\u201322\"},\r\n            {id:\"url\", label:\"URL (si corresponde)\", type:\"url\"}\r\n          ],\r\n          required:[\"author\",\"number\",\"publication\"],\r\n          ref(data){\r\n            const author = refAuthor(data);\r\n            const date = fmtDate(parseDate(data.date));\r\n            let reference = `${escapeHTML(author)}. ${date}. ${escapeHTML(withPeriod(data.number))}`;\r\n            if(data.publication) reference += ` ${escapeHTML(data.publication)}`;\r\n            const volumeIssue = `${data.volume ? `<i>${escapeHTML(data.volume)}<\/i>` : \"\"}${data.issue ? `(${escapeHTML(data.issue)})` : \"\"}`;\r\n            if(volumeIssue) reference += `, ${volumeIssue}`;\r\n            if(data.pages) reference += `, ${escapeHTML(data.pages)}`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        },\r\n\r\n        audiobook: {\r\n          label:\"Audiolibro\",\r\n          fields:[\r\n            ...authorFields(\"Autor(es)\", \"person\"),\r\n            {id:\"date\", label:\"A\u00f1o\", type:\"text\", ph:\"Ej.: 2022\"},\r\n            {id:\"title\", label:\"T\u00edtulo\", type:\"text\"},\r\n            {id:\"narrator\", label:\"Narrador\", type:\"text\", ph:\"Apellido, Nombre\"},\r\n            {id:\"platform\", label:\"Plataforma\", type:\"text\", ph:\"Ej.: Audible\"},\r\n            {id:\"url\", label:\"URL\", type:\"url\"}\r\n          ],\r\n          required:[\"title\"],\r\n          ref(data){\r\n            let reference = baseReference(data, \"audiobook\", data.title, true);\r\n            if(data.narrator) reference += ` (${escapeHTML(fmtPersonEditor(data.narrator))}, Narr.)`;\r\n            reference += ` [Audiolibro]`;\r\n            if(data.platform) reference += `. ${escapeHTML(data.platform)}`;\r\n            return appendLink(reference, data.url);\r\n          }\r\n        }\r\n      };\r\n\r\n      function renderFields(type){\r\n        const definition = TYPES[type];\r\n        const container = $(\"#meta\");\r\n        container.innerHTML = \"\";\r\n\r\n        definition.fields.forEach(field => {\r\n          const wrapper = document.createElement(\"div\");\r\n          wrapper.className = \"field\";\r\n\r\n          const label = document.createElement(\"label\");\r\n          label.setAttribute(\"for\", field.id);\r\n          label.textContent = field.label;\r\n          wrapper.appendChild(label);\r\n\r\n          let control;\r\n          if(field.type === \"select\"){\r\n            control = document.createElement(\"select\");\r\n            control.className = \"select\";\r\n            field.options.forEach(option => {\r\n              const item = document.createElement(\"option\");\r\n              item.value = option.value;\r\n              item.textContent = option.label;\r\n              item.selected = option.value === field.value;\r\n              control.appendChild(item);\r\n            });\r\n          }else{\r\n            control = document.createElement(\"input\");\r\n            control.className = \"input\";\r\n            control.type = field.type === \"url\" ? \"url\" : \"text\";\r\n            control.placeholder = field.ph || \"\";\r\n          }\r\n\r\n          control.id = field.id;\r\n          wrapper.appendChild(control);\r\n\r\n          if(field.note){\r\n            const note = document.createElement(\"div\");\r\n            note.className = \"field-note\";\r\n            note.textContent = field.note;\r\n            wrapper.appendChild(note);\r\n          }\r\n\r\n          container.appendChild(wrapper);\r\n        });\r\n      }\r\n\r\n      function collect(type){\r\n        const data = {};\r\n        TYPES[type].fields.forEach(field => {\r\n          data[field.id] = clean($(\"#\" + field.id)?.value);\r\n        });\r\n        data.authorType = data.authorType || \"person\";\r\n        return data;\r\n      }\r\n\r\n      function validate(type, data){\r\n        const definition = TYPES[type];\r\n        const missing = (definition.required || [])\r\n          .filter(id => !clean(data[id]))\r\n          .map(id => definition.fields.find(field => field.id === id)?.label || id);\r\n\r\n        const message = $(\"#validationMsg\");\r\n        if(!missing.length){\r\n          message.className = \"validation\";\r\n          message.textContent = \"\";\r\n          return;\r\n        }\r\n\r\n        message.className = \"validation show\";\r\n        message.textContent = `Para completar la referencia, revisa: ${missing.join(\", \")}.`;\r\n      }\r\n\r\n      function updateOutputs(){\r\n        const type = $(\"#rtype\").value;\r\n\r\n        if(!type || !TYPES[type]){\r\n          $(\"#ref\").innerHTML = \"\";\r\n          $(\"#intext\").innerHTML = \"\";\r\n          $(\"#narr\").innerHTML = \"\";\r\n          $(\"#validationMsg\").className = \"validation\";\r\n          $(\"#validationMsg\").textContent = \"\";\r\n          return;\r\n        }\r\n\r\n        const data = collect(type);\r\n        const definition = TYPES[type];\r\n\r\n        $(\"#ref\").innerHTML = definition.ref(data) || \"&nbsp;\";\r\n        $(\"#intext\").innerHTML = parentheticalCitation(data, type);\r\n        $(\"#narr\").innerHTML = narrativeCitation(data, type);\r\n        validate(type, data);\r\n      }\r\n\r\n      function siteNameFromURL(url){\r\n        try{\r\n          const host = new URL(url).hostname.replace(\/^www\\.\/, \"\");\r\n          const parts = host.split(\".\").filter(Boolean);\r\n          const common = new Set([\"com\",\"org\",\"net\",\"edu\",\"gov\",\"do\",\"es\",\"mx\",\"co\",\"ar\",\"pe\",\"cl\"]);\r\n          let candidate = parts.findLast(part => !common.has(part.toLowerCase())) || parts[0] || \"\";\r\n          if(parts.includes(\"youtube\")) candidate = \"YouTube\";\r\n          return candidate\r\n            .replace(\/[-_]+\/g, \" \")\r\n            .replace(\/\\b\\w\/g, letter => letter.toUpperCase());\r\n        }catch(error){\r\n          return \"\";\r\n        }\r\n      }\r\n\r\n      function extractMetadata(markdown, sourceUrl){\r\n        const text = String(markdown || \"\");\r\n        const detectedSite = (text.match(\/^Site Name:\\s*(.+)$\/mi) || [])[1];\r\n        const site = clean(detectedSite) || siteNameFromURL(sourceUrl);\r\n\r\n        const titleCandidates = [\r\n          (text.match(\/^#\\s+(.+)$\/m) || [])[1],\r\n          (text.match(\/^Title:\\s*(.+)$\/mi) || [])[1]\r\n        ].filter(Boolean);\r\n\r\n        let title = decodeHTML(clean(titleCandidates[0] || \"\"))\r\n          .replace(\/\\[([^\\]]+)\\]\\([^)]+\\)\/g, \"$1\")\r\n          .replace(\/^#+\\s*\/, \"\");\r\n\r\n        if(title && site){\r\n          const pieces = title.split(\/\\s+[|\u2013\u2014-]\\s+\/);\r\n          const last = pieces.at(-1) || \"\";\r\n          if(pieces.length > 1 && normalizeComparable(last).includes(normalizeComparable(site))){\r\n            pieces.pop();\r\n            title = clean(pieces.join(\" - \"));\r\n          }\r\n        }\r\n\r\n        const authorCandidates = [\r\n          (text.match(\/^Author:\\s*(.+)$\/mi) || [])[1],\r\n          (text.match(\/^Byline:\\s*(.+)$\/mi) || [])[1],\r\n          (text.match(\/^(?:Written by|Escrito por|Por|By)\\s+([^\\n]{2,100})$\/mi) || [])[1]\r\n        ].filter(Boolean);\r\n\r\n        let author = clean(authorCandidates[0] || \"\")\r\n          .replace(\/\\[([^\\]]+)\\]\\([^)]+\\)\/g, \"$1\")\r\n          .replace(\/\\s+[|\u2022].*$\/, \"\");\r\n\r\n        if(\/^(staff|redacci[o\u00f3]n|equipo editorial)$\/i.test(author)){\r\n          author = sentCase(author);\r\n        }\r\n\r\n        const dateCandidates = [\r\n          (text.match(\/^Published Time:\\s*(.+)$\/mi) || [])[1],\r\n          (text.match(\/^Publication Date:\\s*(.+)$\/mi) || [])[1],\r\n          (text.match(\/\\b\\d{4}-\\d{2}-\\d{2}\\b\/) || [])[0],\r\n          (text.match(\/\\b\\d{1,2}\\s+de\\s+(?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)\\s+de\\s+\\d{4}\\b\/i) || [])[0]\r\n        ].filter(Boolean);\r\n\r\n        return {\r\n          title: clean(title),\r\n          author: clean(author),\r\n          date: clean(dateCandidates[0] || \"\"),\r\n          site\r\n        };\r\n      }\r\n\r\n      function looksLikeGroupAuthor(author){\r\n        return \/\\b(universidad|ministerio|instituto|instituci[o\u00f3]n|organizaci[o\u00f3]n|departamento|agencia|editorial|fundaci[o\u00f3]n|asociaci[o\u00f3]n|centro|equipo|staff|redacci[o\u00f3]n|canal|biblioteca)\\b\/i.test(author);\r\n      }\r\n\r\n      function setIfEmpty(id, value){\r\n        const field = $(\"#\" + id);\r\n        if(!field || !clean(value) || clean(field.value)) return false;\r\n        field.value = value;\r\n        return true;\r\n      }\r\n\r\n      async function detectFromURL(){\r\n        const sourceUrl = clean($(\"#sourceUrl\").value);\r\n        const note = $(\"#detectNote\");\r\n        const selectedType = $(\"#rtype\").value;\r\n\r\n        if(!selectedType || !TYPES[selectedType]){\r\n          note.textContent = \"Primero selecciona el tipo de fuente que deseas registrar.\";\r\n          return;\r\n        }\r\n\r\n        if(!\/^https?:\\\/\\\/\/i.test(sourceUrl)){\r\n          note.textContent = \"Ingresa una URL v\u00e1lida que comience con http:\/\/ o https:\/\/.\";\r\n          return;\r\n        }\r\n\r\n        const button = $(\"#detect\");\r\n        const originalText = button.textContent;\r\n        button.textContent = \"Detectando...\";\r\n        button.disabled = true;\r\n        note.textContent = \"Analizando metadatos visibles de la p\u00e1gina\u2026\";\r\n\r\n        try{\r\n          const readerURL = `https:\/\/r.jina.ai\/http:\/\/${sourceUrl.replace(\/^https?:\\\/\\\/\/i, \"\")}`;\r\n          const response = await fetch(readerURL, {mode:\"cors\"});\r\n          if(!response.ok) throw new Error(\"No fue posible leer la p\u00e1gina.\");\r\n\r\n          const markdown = await response.text();\r\n          const metadata = extractMetadata(markdown, sourceUrl);\r\n          const changed = [];\r\n\r\n          if(setIfEmpty(\"title\", metadata.title)) changed.push(\"t\u00edtulo\");\r\n          if(setIfEmpty(\"chapter\", metadata.title)) changed.push(\"t\u00edtulo del cap\u00edtulo\");\r\n          if(setIfEmpty(\"author\", metadata.author)){\r\n            changed.push(\"autor\");\r\n            const authorType = $(\"#authorType\");\r\n            if(authorType && looksLikeGroupAuthor(metadata.author)){\r\n              authorType.value = \"group\";\r\n            }\r\n          }\r\n          if(setIfEmpty(\"date\", metadata.date)) changed.push(\"fecha\");\r\n          if(setIfEmpty(\"site\", metadata.site)) changed.push(\"sitio\");\r\n          if(setIfEmpty(\"newspaper\", metadata.site)) changed.push(\"peri\u00f3dico\");\r\n          if(setIfEmpty(\"platform\", metadata.site)) changed.push(\"plataforma\");\r\n\r\n          if($(\"#url\") && setIfEmpty(\"url\", sourceUrl)) changed.push(\"URL\");\r\n          if($(\"#doi\") && \/doi\\.org|^https?:\\\/\\\/doi\\.\/i.test(sourceUrl) && setIfEmpty(\"doi\", sourceUrl)){\r\n            changed.push(\"DOI\");\r\n          }\r\n\r\n          updateOutputs();\r\n\r\n          note.textContent = changed.length\r\n            ? `Detecci\u00f3n orientativa completada: ${changed.join(\", \")}. Confirma cada dato en la fuente original.`\r\n            : \"No se identificaron datos confiables para completar autom\u00e1ticamente. Introduce la informaci\u00f3n de forma manual.\";\r\n        }catch(error){\r\n          note.textContent = \"No fue posible detectar los datos. Algunas p\u00e1ginas bloquean la lectura autom\u00e1tica; completa los campos manualmente.\";\r\n        }finally{\r\n          button.textContent = originalText;\r\n          button.disabled = false;\r\n        }\r\n      }\r\n\r\n      function clearAll(){\r\n        $(\"#sourceUrl\").value = \"\";\r\n        $(\"#rtype\").value = \"\";\r\n\r\n        $(\"#meta\").innerHTML = `\r\n          <div class=\"help\" style=\"grid-column:1 \/ -1;\">\r\n            Selecciona un tipo de fuente para mostrar los campos correspondientes.\r\n          <\/div>\r\n        `;\r\n\r\n        $(\"#ref\").innerHTML = \"\";\r\n        $(\"#intext\").innerHTML = \"\";\r\n        $(\"#narr\").innerHTML = \"\";\r\n\r\n        $(\"#validationMsg\").className = \"validation\";\r\n        $(\"#validationMsg\").textContent = \"\";\r\n\r\n        $(\"#detectNote\").textContent =\r\n          \"La detecci\u00f3n autom\u00e1tica es orientativa. Verifica siempre en la fuente original el autor, la fecha, el t\u00edtulo y el tipo de recurso antes de copiar la referencia.\";\r\n      }\r\n\r\n      async function copyFrom(selector, button){\r\n        const element = $(selector);\r\n        if(!element) return;\r\n\r\n        const plainText = clean(element.innerText || element.textContent);\r\n        let richHTML = element.innerHTML;\r\n\r\n        if(selector === \"#ref\"){\r\n          richHTML = `<p style=\"margin-left:0.5in;text-indent:-0.5in;line-height:2;\">${richHTML}<\/p>`;\r\n        }\r\n\r\n        try{\r\n          if(window.ClipboardItem && navigator.clipboard?.write){\r\n            const item = new ClipboardItem({\r\n              \"text\/plain\": new Blob([plainText], {type:\"text\/plain\"}),\r\n              \"text\/html\": new Blob([richHTML], {type:\"text\/html\"})\r\n            });\r\n            await navigator.clipboard.write([item]);\r\n          }else{\r\n            await navigator.clipboard.writeText(plainText);\r\n          }\r\n\r\n          const original = button.textContent;\r\n          button.textContent = \"Copiado\";\r\n          setTimeout(() => { button.textContent = original; }, 1200);\r\n        }catch(error){\r\n          try{\r\n            await navigator.clipboard.writeText(plainText);\r\n          }catch(secondError){\r\n            alert(\"No se pudo copiar. Selecciona el resultado y c\u00f3pialo manualmente.\");\r\n          }\r\n        }\r\n      }\r\n\r\n      function bindCopyButtons(){\r\n        $$(\".copy\").forEach(button => {\r\n          button.addEventListener(\"click\", () => {\r\n            copyFrom(button.getAttribute(\"data-copy\"), button);\r\n          });\r\n        });\r\n      }\r\n\r\n      function init(){\r\n        $(\"#meta\").innerHTML = `\r\n          <div class=\"help\" style=\"grid-column:1 \/ -1;\">\r\n            Selecciona un tipo de fuente para mostrar los campos correspondientes.\r\n          <\/div>\r\n        `;\r\n\r\n        $(\"#ref\").innerHTML = \"\";\r\n        $(\"#intext\").innerHTML = \"\";\r\n        $(\"#narr\").innerHTML = \"\";\r\n\r\n        $(\"#rtype\").addEventListener(\"change\", () => {\r\n          const selectedType = $(\"#rtype\").value;\r\n\r\n          if(!selectedType || !TYPES[selectedType]){\r\n            $(\"#meta\").innerHTML = `\r\n              <div class=\"help\" style=\"grid-column:1 \/ -1;\">\r\n                Selecciona un tipo de fuente para mostrar los campos correspondientes.\r\n              <\/div>\r\n            `;\r\n            updateOutputs();\r\n            return;\r\n          }\r\n\r\n          renderFields(selectedType);\r\n          updateOutputs();\r\n        });\r\n\r\n        $(\"#detect\").addEventListener(\"click\", detectFromURL);\r\n        $(\"#clear\").addEventListener(\"click\", clearAll);\r\n\r\n        root.addEventListener(\"input\", event => {\r\n          if(event.target.matches(\".input, .select\")){\r\n            updateOutputs();\r\n          }\r\n        });\r\n\r\n        root.addEventListener(\"change\", event => {\r\n          if(event.target.matches(\".select\")){\r\n            updateOutputs();\r\n          }\r\n        });\r\n\r\n        bindCopyButtons();\r\n      }\r\n\r\n      init();\r\n    })();\r\n  <\/script>\r\n<\/section>\r\n\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\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\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>C\u00f3mo citar C\u00f3mo referenciar<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-31","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/pages\/31","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":176,"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/pages\/31\/revisions"}],"predecessor-version":[{"id":1192,"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/pages\/31\/revisions\/1192"}],"wp:attachment":[{"href":"https:\/\/integridadacademica.uapa.edu.do\/index.php\/wp-json\/wp\/v2\/media?parent=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}