Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
HTML
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        * {
    <title>Release Notes</title>
</head>
<body style="margin:0; padding:0; font-family: Arial, Helvetica, sans-serif; background:#ffffff;">
  <div style="max-width:1200px; margin:0 auto; padding:16px;">
    <div style="border:1px solid #dfe1e6; marginborder-radius:8px; 0overflow:hidden;">
           <div style="background:#0052CC; color:#fff; padding:14px 016px;">
        <div    box-sizing: border-box;
  id="page-title" style="font-size:18px; font-weight:700;">Dicionário de Dados</div>
      }</div>

      <div  
        body {
            font-family: 'Segoe UI', Arial, sans-serif;style="background:#f4f5f7; border-top:1px solid #dfe1e6; padding:12px 16px; display:flex; gap:12px; align-items:center; flex-wrap:wrap;">
        <div    background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);style="display:flex; gap:8px; align-items:center;">
            min-height: 100vh;<div style="font-weight:700; color:#172b4d;">Versão:</div>
            padding: 20px;
        }<div id="version-display" style="background:#fff; border:1px solid #dfe1e6; border-radius:6px; padding:4px 10px; font-weight:700; color:#172b4d;">-</div>
        
        .release-notes-wrapper {</div>

        <div style="display:flex;   max-width: 1400px;gap:8px; align-items:center;">
            margin: 0 auto;<div style="font-weight:700; color:#172b4d;">Atualizado:</div>
          <div id="last-update" style="background: white#fff;
 border:1px           solid #dfe1e6; border-radius: 12px;6px; padding:4px 10px; color:#172b4d;">-</div>
        </div>

    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
            overflow: hidden;<a id="doc-link" href="#" target="_blank" style="display:none; margin-left:auto; text-decoration:none; background:#ffffff; color:#0052CC; border:1px solid #0052CC; border-radius:6px; padding:6px 10px; font-weight:700;">
        }
  Abrir no     Drive
        .header {</a>
      </div>

      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);<div id="widget-container" style="min-height:520px; background:#ffffff;">
            color: white;<div style="padding:18px; color:#6b778c;">Carregando documento...</div>
      </div>
    </div>
  padding: 30px 40px;</div>

  <script>
  (function() {
    // Mapeamento de versões para border-radius: 0;
     arquivos no Drive (Google Docs ou .txt)
    // Pasta:  margin-bottom: 0;141aJRhZeYZca4QCBnou6-00WzRLkBYbs
    // Data: 2025-12-17 09:03:10
    // positionTotal: 79 relative;versões
    const versionToFile = {
     overflow'12.1.2411': hidden;
{ id: '1Lv47Us2UXm2UP0JjtfGFiOcVXW9cwSjS',      }type: 'txt' },
    '12.1.2411.1': {   
   id: '12KVuystA1cYiy8KyStDkuRZ6Y_bnd7vp', type: 'txt' },
     .header::before'12.1.2411.2': {
 id: '131kP3__usmuXsh-IWJX1pf2oQkHIVgd2', type: 'txt' },
    '12.1.2411.3': { id: '1rEiaQCivt3ypEuSSJjhcJwLWb8hWzTYC', contenttype: 'txt'; },
    '12.1.2411.4': { id: '16LxCYWkutU4Di6sYfjlLIPd7SBbWTJdA', type: 'txt' },
  position  '12.1.2411.5': absolute;
{ id: '1ITodeqjUDPH-T6Ve5LbNRoTfPMHa9EU9', type: 'txt' },
    '12.1.2411.6': {  topid: -50%;
   '1eoIz5qr6Yk_leeayK8kpAfGsZkZgm1_k', type: 'txt' },
    '12.1.2411.7': { id: '1NTabmPduDgwOhs2yiXaUKdE5XgDgIDP5',  right: -10%;type: 'txt' },
    '12.1.2411.8': { id: '1BO4TvdfDZIziAHo_RVTRQ_Ylt4ESBp4u', type: 'txt' },
  width: 500px;
            height: 500px;
            background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
            border-radius: 50%;
        }
        
        .header h1 {
            margin: 0;
            font-size: 32px;
            font-weight: 600;
        }
        
        .metadata {
            background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
            padding: 20px 40px;
            border-bottom: 1px solid #dee2e6;
            display: flex;
            align-items: center;
            gap: 30px;
            flex-wrap: wrap;
        }
        
        .metadata-item {
            display: flex;
            align-items: center;
            gap: 10px;
        }
        
        .metadata-item strong {
            color: #495057;
            font-weight: 600;
        }
        
        .metadata-item span {
            color: #0A2333;
            background: white;
            padding: 6px 14px;
            border-radius: 6px;
            font-weight: 600;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
        }
        
        .doc-link {
            display: inline-flex;
            align-items: center;
            gap: 8px;
            padding: 10px 20px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            text-decoration: none;
            border-radius: 8px;
            font-weight: 600;
            font-size: 14px;
            transition: all 0.3s ease;
            box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
            margin-left: auto;
        }
        
        .doc-link:hover {
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
        }
        
        .doc-link:active {
            transform: translateY(0);
        }
        
        #widget-container {
            padding: 0;
            min-height: 700px;
            background: #ffffff;
        }
        
        .message-box {
            padding: 40px;
            text-align: center '12.1.2411.9': { id: '1LUxDVYRwO7DuFkPOWzBD6YCf58wJDNJl', type: 'txt' },
    '12.1.2411.10': { id: '1HOmWcuLGW-iDEEeQmdSDCN8eRbYHzbdr', type: 'txt' },
    '12.1.2411.11': { id: '1po-iUP-p9KNqQAufsuMra5So1vBqjzTo', type: 'txt' },
    '12.1.2411.12': { id: '10Ef2MFpKsGIfpmhoswv5ys6D2A4bvzUM', type: 'txt' },
    '12.1.2411.13': { id: '1lQpU7EYwf2kwpv3gZ-yUCnpQcCmXe4kd', type: 'txt' },
    '12.1.2411.14': { id: '1OskDxjRPa6XFa-Bgue-Xk86kLEy_I0Yl', type: 'txt' },
    '12.1.2411.15': { id: '1bNHh5VsjJNzaaeHcgpD7xrxn0NsXvP4T', type: 'txt' },
    '12.1.2411.16': { id: '1jUAT3g_NLQeSMMOPAqyJTZf2sXv8x5ic', type: 'txt' },
    '12.1.2411.17': { id: '1ogZ3JPrQ_J40345zZTQCL5Uv7TOt741y', type: 'txt' },
    '12.1.2503': { id: '1AkBtHsIAFcGZ5OyBYNi5KXeAr5ssm_x6', type: 'txt' },
    '12.1.2503.1': { id: '12Ke9OpqKA4R_UYWNr6XP9k9-ukjYm_KH', type: 'txt' },
    '12.1.2503.2': { id: '1R8hPo8IEZlPxIqjyVqluyNN1JffkrNXZ', type: 'txt' },
    '12.1.2503.3': { id: '1TL4ythCv_84avpzIeSHjB3Cgxf7_zcgA', type: 'txt' },
    '12.1.2503.4': { id: '1NkcD1TAnRYxiKcJIVQ9jZ6Psq9SDmMx8', type: 'txt' },
    '12.1.2503.5': { id: '1WH6uqDCBJ8zK8_gRf8DpSiFuivfbUED_', type: 'txt' },
    '12.1.2503.6': { id: '1rksaNy4Kv-tq55VD7VS2ckoKoGZNNaXe', type: 'txt' },
    '12.1.2503.7': { id: '1pUz-j2eWuQrbhJu62nHSiyIzWC-REX2r', type: 'txt' },
    '12.1.2503.8': { id: '1yFXKrIkbEfwUwmYVDe07_QlXt9UVG62y', type: 'txt' },
    '12.1.2503.9': { id: '1mO80nVEasIRDJ2i9mrRyPM8ObylNDw4T', type: 'txt' },
    '12.1.2503.10': { id: '1VETVn5z5GzD03D1CQpvmmM4Dn0DCH3op', type: 'txt' },
    '12.1.2503.11': { id: '1yTTeMu43Q3sBaimMM6cQTvNmD6EkG9VE', type: 'txt' },
    '12.1.2503.12': { id: '10tvn9fo-QqXelPRSrb6inuulUQr7vf9g', type: 'txt' },
    '12.1.2503.13': { id: '1Pq1LsXO6SbXr16an401_FKp3yKlfhKx_', type: 'txt' },
    '12.1.2503.14': { id: '1pXbF0em-a6e0GYqOMNcbHPGpOOM09VX0', type: 'txt' },
    '12.1.2503.15': { id: '1wNBB4tvAaKOC2JLvkTzbxiIyTOgxpEjm', type: 'txt' },
    '12.1.2503.16': { id: '13mOmXGZ9HaZob2Df6t27osRxWfV138_v', type: 'txt' },
    '12.1.2507': { id: '1WdEk0hszYS2UDuOM9vE1_KngjkH74oxR', type: 'txt' },
    '12.1.2507.1': { id: '1AyMLAxejP2heuLdXWjHKXeWAkSPkVB0f', type: 'txt' },
    '12.1.2507.2': { id: '1OA878i2Izd3BiwZ0m1UR_mEXgCoxZOyh', type: 'txt' },
    '12.1.2507.3': { id: '133AZhy4WixraizeKsqSf6DvJLXyt3h2c', type: 'txt' },
    '12.1.2507.4': { id: '1n7D6J02XoWPOQzIj9sPXKo9FTdiKgFcL', type: 'txt' },
    '12.1.2507.5': { id: '1TjukYrLbIi1Uc6adUTLrIvwSP-7LLv7V', type: 'txt' },
    '12.1.2507.6': { id: '16HpmgtvM0WhxN8sr-PiMwNzzKDLocaz1', type: 'txt' },
    '12.1.2507.7': { id: '1iHJlFXGQMyS-qq6FMj-Ip4n2xLrMjtZA', type: 'txt' },
    '12.1.2507.8': { id: '1EzYgb0Cvha1FB5iX5pZ8I5nh4M8gFnxM', type: 'txt' },
    '12.1.2507.9': { id: '1rr_KlDuyyZpKlrOJeaXN-xy3AKlx-Cbu', type: 'txt' },
    '12.1.2507.10': { id: '1pptApgNcLAhk5fNIgq8a-onq-vSNWs3n', type: 'txt' },
    '12.1.2507.11': { id: '1STmDXQJDoOH5xMx3qzOd44c-t_k1y7jR', type: 'txt' },
    '12.1.2507.12': { id: '1BRHWVWAIlhWbTqyIui7VXcqvvLm7l33D', type: 'txt' },
    '12.1.2507.13': { id: '19aARCX-cSPA9QIeAxZIW5XxPNXZ3DrMr', type: 'txt' },
    '12.1.2507.14': { id: '1Kb0f1ijpnPyFLdkHKzHadRvS3FenqIqL', type: 'txt' },
    '12.1.2511': { id: '14k_1KZwT66qJGnV6mbnEw3bjV-YW7e24', type: 'txt' },
    '12.1.2511.1': { id: '1OvmZgFOtOoWNVk2zyq1XhFNibCz6pJEc', type: 'txt' },
    '12.1.2511.2': { id: '1rV53pygU6L6Ms6x3TU6-syUVsoF6bRs7', type: 'txt' },
    '12.1.2511.3': { id: '1WxDLhvrFSwdV2Fj1IDs_VHB6n7KSog8O', type: 'txt' },
    '12.1.2511.4': { id: '1lM65BjCZEzqWcTuP2E9aWaKvORK_nxL5', type: 'txt' },
    '12.1.2511.5': { id: '1SiFQs7kQFV9lgodbrigees8erNiSg54P', type: 'txt' },
    '12.1.2511.6': { id: '1mhhHU3KgpUKHVZ6JFFY2qdDkKYF1_uQ5', type: 'txt' },
    '12.1.2511.7': { id: '1yHtTXT2B0ZiTRHnBdbkqQkyEm0epeKhT', type: 'txt' },
    '12.1.2511.8': { id: '1gx-1Al9ZOW6jUTwxWrp9HciFn5jZi3d8', type: 'txt' },
    '12.1.2603': { id: '1VavQf3Ydp_ig_LlgUU-qSgKchZNuMB6P', type: 'txt' },
    '12.2.2411': { id: '1WyGG5rBNM2Uoy_j1W9DyrwFC3Oj63CJx', type: 'txt' },
    '12.2.2411.16': { id: '121oW6Mq_ivk2lT9wfORwVhpmkTk84lWL', type: 'txt' },
    '12.2.2411.17': { id: '1P8o3z3encE-72SlMTylf7t0rovGZVOJMCGado1To4Ok', type: 'doc' },
    '12.2.2503': { id: '1cIup3Z-F7J4NE9MMoFUj7CLcbpmLOQP6', type: 'txt' },
    '12.2.2503.11': { id: '1mfmpLR7h0ruGo397tQCtHpYcSCwpqn4N', type: 'txt' },
    '12.2.2503.12': { id: '1O_-1CnuKhm1XAtnVMmsb9ovSBVGWA-6G', type: 'txt' },
    '12.2.2503.13': { id: '1bwgAgWYzWRFn2E8L_2Y_xokPepLEIF6_', type: 'txt' },
    '12.2.2503.15': { id: '1vIy-eE4UtDvI0Vv7BXPZvyucO2su6KkL', type: 'txt' },
    '12.2.2507': { id: '1OGqnrdwMc0j6zwaRhMPNGG8bkuO-kECb', type: 'txt' },
    '12.2.2507.4': { id: '1I2PJINB0z4HWlcxDTiq-I9skmO0A9zc8', type: 'txt' },
    '12.2.2507.5': { id: '19kiRv3tBFyUSHnGwyvjvGMBhC5EzToXx', type: 'txt' },
    '12.2.2507.6': { id: '1L_Jw3GMjz7F_OaNZr_lzcJHRKGW76gbN', type: 'txt' },
    '12.2.2507.7': { id: '1ZDyVikOavwwz5rCByx1_s9PyF2czY_BF', type: 'txt' },
    '12.2.2507.8': { id: '1cLJ_BPltcqHslEP1Lim0iUMUBPBQrYPz', type: 'txt' },
    '12.2.2507.9': { id: '13Er9lyxm4HmPPCd3JNymTvX_Dl4-mdlj', type: 'txt' },
    '12.2.2511': { id: '1eGYnJ1I820VGvUwrpuMvWCWqlgiiWvkg', type: 'txt' },
    '12.2.2511.1': { id: '1jIW7ElN9zpUw4B-9z98O1pkpyKWXS9vW', type: 'txt' },
    '12.2.2511.2': { id: '1MCI-twulc3CVz8rfeoJNF-gXrx_B_QBy', type: 'txt' },
    '12.2.2511.3': { id: '1u49828qMI0OtX129cMPD-zysUGof4msV', type: 'txt' },
    };

    function getPageVersion() {
      const versionPattern = /(\d+\.\d+\.\d+(?:\.\d+)?)/;

      const pageTitleElement = document.querySelector('h1#title-text, .page-title, h1, [data-page-title]');
      if (pageTitleElement) {
        const titleText = (pageTitleElement.textContent || '').trim();
        const match   background: linear-gradient(135deg, #fff3cd 0%, #ffe69c 100%= titleText.match(versionPattern);
        if (match)   margin: 30pxreturn match[1];
            border-radius: 10px;}

      const metaTitle     border-left: 5px solid #ffc107= document.querySelector('meta[property="og:title"], meta[name="title"]');
      if (metaTitle) {
    box-shadow: 0 4px 12px rgba(255, 193, 7, 0.2)const titleText = metaTitle.getAttribute('content') || '';
        }
const match = titleText.match(versionPattern);
     
   if (match) return   .message-box.error {
match[1];
      }

      const titleMatch background:= linear-gradient(135deg, #fee 0%, #fcc 100%(document.title || '').match(versionPattern);
      if (titleMatch) return titleMatch[1];

      border-left-color: #dc3545return null;
    }

    const version   box-shadow: 0 4px 12px rgba(220, 53, 69, 0.2= getPageVersion();
    const container = document.getElementById('widget-container');
    const docLink   }= document.getElementById('doc-link');

    if    (!version) {
        .message-box h2 {container.innerHTML =
            color: #856404;
            margin-bottom: 15px;'<div style="padding:18px; border-left:4px solid #DE350B; background:#FFEBE6; color:#172b4d;">' +
          '<div  style="font-sizeweight: 24px;
   700; margin-bottom:6px;">Versão não identificada</div>' +
     }
     '<div>Coloque a versão 
no título da página, ex: <b>Dicionário de Dados .message-box.error h2 {12.1.2503.14</b></div>' +
        '</div>';
     color: #721c24return;
    }

    }
        document.getElementById('version-display').textContent = version;
        .message-box p {
            color: #856404document.getElementById('page-title').textContent = 'Dicionário de Dados ' + version;
    document.getElementById('last-update').textContent =       font-size: 16px;
            line-height: 1.6;
        }
        
        .message-box.error p {
            color: #721c24;
        }
        
        .message-icon {
            font-size: 48px;
            margin-bottom: 15px;
            display: block;
        }
        
        iframe {
            border: none;
            width: 100%;
            height: 800px;
            display: block;
        }
        
        .loading {
            text-align: center;
            padding: 60px 20px;
            color: #6c757d;
            font-size: 18px;
        }
        
        .loading::before {
            content: '';
            display: block;
            width: 50px;
            height: 50px;
            margin: 0 auto 20px;
            border: 4px solid #e9ecef;
            border-top-color: #667eea;
            border-radius: 50%;
            animation: spin 1s linear infinite;
        }
        
        @keyframes spin {
            from { transform: rotate(0deg); }
            to { transform: rotate(360deg); }
        }
        
        @media (max-width: 768px) {
            body {
                padding: 10px;
            }
            
            .header {
                padding: 20px;
            }
            
            .header h1 {
                font-size: 24px;
            }
            
            .metadata {
                padding: 15px 20px;
                flex-direction: column;
                align-items: flex-start;
            }
            
            .doc-link {
                margin-left: 0;
                margin-top: 10px;
                width: 100%;
                justify-content: center;
            }
        }
    </style>
</head>
<body>
    <div class="release-notes-wrapper">
        <div class="header">
            <h1 id="page-title">Dicionário de Dados</h1>
        </div>
        
        <div class="metadata">
            <div class="metadata-item">
                <strong>Versão:</strong> 
                <span id="version-display">Carregando...</span>
            </div>
            <div class="metadata-item">
                <strong>Última atualização:</strong> 
                <span id="last-update">-</span>
            </div>
            <a href="#" id="doc-link" class="doc-link" target="_blank" style="display: none;">
                <span>📄</span>
                <span>Abrir no Google Docs</span>
            </a>
        </div>
        
        <div id="widget-container">
            <div class="loading">Carregando documento...</div>
        </div>
    </div>

    <script>
        (function() {
            // Mapeamento de versões para arquivos no Drive (Google Docs ou .txt)
            // Gerado automaticamente a partir da pasta: 141aJRhZeYZca4QCBnou6-00WzRLkBYbs
            // Data: 2025-12-16 22:24:12
            // Total: 79 versões
            const versionToFile = {
                '12.1.2411': { id: '1Lv47Us2UXm2UP0JjtfGFiOcVXW9cwSjS', type: 'txt' },
                '12.1.2411.1': { id: '12KVuystA1cYiy8KyStDkuRZ6Y_bnd7vp', type: 'txt' },
                '12.1.2411.2': { id: '131kP3__usmuXsh-IWJX1pf2oQkHIVgd2', type: 'txt' },
                '12.1.2411.3': { id: '1rEiaQCivt3ypEuSSJjhcJwLWb8hWzTYC', type: 'txt' },
                '12.1.2411.4': { id: '16LxCYWkutU4Di6sYfjlLIPd7SBbWTJdA', type: 'txt' },
                '12.1.2411.5': { id: '1ITodeqjUDPH-T6Ve5LbNRoTfPMHa9EU9', type: 'txt' },
                '12.1.2411.6': { id: '1eoIz5qr6Yk_leeayK8kpAfGsZkZgm1_k', type: 'txt' },
                '12.1.2411.7': { id: '1NTabmPduDgwOhs2yiXaUKdE5XgDgIDP5', type: 'txt' },
                '12.1.2411.8': { id: '1BO4TvdfDZIziAHo_RVTRQ_Ylt4ESBp4u', type: 'txt' },
                '12.1.2411.9': { id: '1LUxDVYRwO7DuFkPOWzBD6YCf58wJDNJl', type: 'txt' },
                '12.1.2411.10': { id: '1HOmWcuLGW-iDEEeQmdSDCN8eRbYHzbdr', type: 'txt' },
                '12.1.2411.11': { id: '1po-iUP-p9KNqQAufsuMra5So1vBqjzTo', type: 'txt' },
                '12.1.2411.12': { id: '10Ef2MFpKsGIfpmhoswv5ys6D2A4bvzUM', type: 'txt' },
                '12.1.2411.13': { id: '1lQpU7EYwf2kwpv3gZ-yUCnpQcCmXe4kd', type: 'txt' },
                '12.1.2411.14': { id: '1OskDxjRPa6XFa-Bgue-Xk86kLEy_I0Yl', type: 'txt' },
                '12.1.2411.15': { id: '1bNHh5VsjJNzaaeHcgpD7xrxn0NsXvP4T', type: 'txt' },
                '12.1.2411.16': { id: '1jUAT3g_NLQeSMMOPAqyJTZf2sXv8x5ic', type: 'txt' },
                '12.1.2411.17': { id: '1ogZ3JPrQ_J40345zZTQCL5Uv7TOt741y', type: 'txt' },
                '12.1.2503': { id: '1AkBtHsIAFcGZ5OyBYNi5KXeAr5ssm_x6', type: 'txt' },
                '12.1.2503.1': { id: '12Ke9OpqKA4R_UYWNr6XP9k9-ukjYm_KH', type: 'txt' },
                '12.1.2503.2': { id: '1R8hPo8IEZlPxIqjyVqluyNN1JffkrNXZ', type: 'txt' },
                '12.1.2503.3': { id: '1TL4ythCv_84avpzIeSHjB3Cgxf7_zcgA', type: 'txt' },
                '12.1.2503.4': { id: '1NkcD1TAnRYxiKcJIVQ9jZ6Psq9SDmMx8', type: 'txt' },
                '12.1.2503.5': { id: '1WH6uqDCBJ8zK8_gRf8DpSiFuivfbUED_', type: 'txt' },
                '12.1.2503.6': { id: '1rksaNy4Kv-tq55VD7VS2ckoKoGZNNaXe', type: 'txt' },
                '12.1.2503.7': { id: '1pUz-j2eWuQrbhJu62nHSiyIzWC-REX2r', type: 'txt' },
                '12.1.2503.8': { id: '1yFXKrIkbEfwUwmYVDe07_QlXt9UVG62y', type: 'txt' },
                '12.1.2503.9': { id: '1mO80nVEasIRDJ2i9mrRyPM8ObylNDw4T', type: 'txt' },
                '12.1.2503.10': { id: '1VETVn5z5GzD03D1CQpvmmM4Dn0DCH3op', type: 'txt' },
                '12.1.2503.11': { id: '1yTTeMu43Q3sBaimMM6cQTvNmD6EkG9VE', type: 'txt' },
                '12.1.2503.12': { id: '10tvn9fo-QqXelPRSrb6inuulUQr7vf9g', type: 'txt' },
                '12.1.2503.13': { id: '1Pq1LsXO6SbXr16an401_FKp3yKlfhKx_', type: 'txt' },
                '12.1.2503.14': { id: '1pXbF0em-a6e0GYqOMNcbHPGpOOM09VX0', type: 'txt' },
                '12.1.2503.15': { id: '1wNBB4tvAaKOC2JLvkTzbxiIyTOgxpEjm', type: 'txt' },
                '12.1.2503.16': { id: '13mOmXGZ9HaZob2Df6t27osRxWfV138_v', type: 'txt' },
                '12.1.2507': { id: '1WdEk0hszYS2UDuOM9vE1_KngjkH74oxR', type: 'txt' },
                '12.1.2507.1': { id: '1AyMLAxejP2heuLdXWjHKXeWAkSPkVB0f', type: 'txt' },
                '12.1.2507.2': { id: '1OA878i2Izd3BiwZ0m1UR_mEXgCoxZOyh', type: 'txt' },
                '12.1.2507.3': { id: '133AZhy4WixraizeKsqSf6DvJLXyt3h2c', type: 'txt' },
                '12.1.2507.4': { id: '1n7D6J02XoWPOQzIj9sPXKo9FTdiKgFcL', type: 'txt' },
                '12.1.2507.5': { id: '1TjukYrLbIi1Uc6adUTLrIvwSP-7LLv7V', type: 'txt' },
                '12.1.2507.6': { id: '16HpmgtvM0WhxN8sr-PiMwNzzKDLocaz1', type: 'txt' },
                '12.1.2507.7': { id: '1iHJlFXGQMyS-qq6FMj-Ip4n2xLrMjtZA', type: 'txt' },
                '12.1.2507.8': { id: '1EzYgb0Cvha1FB5iX5pZ8I5nh4M8gFnxM', type: 'txt' },
                '12.1.2507.9': { id: '1rr_KlDuyyZpKlrOJeaXN-xy3AKlx-Cbu', type: 'txt' },
                '12.1.2507.10': { id: '1pptApgNcLAhk5fNIgq8a-onq-vSNWs3n', type: 'txt' },
                '12.1.2507.11': { id: '1STmDXQJDoOH5xMx3qzOd44c-t_k1y7jR', type: 'txt' },
                '12.1.2507.12': { id: '1BRHWVWAIlhWbTqyIui7VXcqvvLm7l33D', type: 'txt' },
                '12.1.2507.13': { id: '19aARCX-cSPA9QIeAxZIW5XxPNXZ3DrMr', type: 'txt' },
                '12.1.2507.14': { id: '1Kb0f1ijpnPyFLdkHKzHadRvS3FenqIqL', type: 'txt' },
                '12.1.2511': { id: '14k_1KZwT66qJGnV6mbnEw3bjV-YW7e24', type: 'txt' },
                '12.1.2511.1': { id: '1OvmZgFOtOoWNVk2zyq1XhFNibCz6pJEc', type: 'txt' },
                '12.1.2511.2': { id: '1rV53pygU6L6Ms6x3TU6-syUVsoF6bRs7', type: 'txt' },
                '12.1.2511.3': { id: '1WxDLhvrFSwdV2Fj1IDs_VHB6n7KSog8O', type: 'txt' },
                '12.1.2511.4': { id: '1lM65BjCZEzqWcTuP2E9aWaKvORK_nxL5', type: 'txt' },
                '12.1.2511.5': { id: '1SiFQs7kQFV9lgodbrigees8erNiSg54P', type: 'txt' },
                '12.1.2511.6': { id: '1mhhHU3KgpUKHVZ6JFFY2qdDkKYF1_uQ5', type: 'txt' },
                '12.1.2511.7': { id: '1yHtTXT2B0ZiTRHnBdbkqQkyEm0epeKhT', type: 'txt' },
                '12.1.2511.8': { id: '1gx-1Al9ZOW6jUTwxWrp9HciFn5jZi3d8', type: 'txt' },
                '12.1.2603': { id: '1VavQf3Ydp_ig_LlgUU-qSgKchZNuMB6P', type: 'txt' },
                '12.2.2411': { id: '1WyGG5rBNM2Uoy_j1W9DyrwFC3Oj63CJx', type: 'txt' },
                '12.2.2411.16': { id: '121oW6Mq_ivk2lT9wfORwVhpmkTk84lWL', type: 'txt' },
                '12.2.2411.17': { id: '1TImPbeVuRiv2fbPV9DpdIAIuJIN3jIM6', type: 'txt' },
                '12.2.2503': { id: '1cIup3Z-F7J4NE9MMoFUj7CLcbpmLOQP6', type: 'txt' },
                '12.2.2503.11': { id: '1mfmpLR7h0ruGo397tQCtHpYcSCwpqn4N', type: 'txt' },
                '12.2.2503.12': { id: '1O_-1CnuKhm1XAtnVMmsb9ovSBVGWA-6G', type: 'txt' },
                '12.2.2503.13': { id: '1bwgAgWYzWRFn2E8L_2Y_xokPepLEIF6_', type: 'txt' },
                '12.2.2503.15': { id: '1vIy-eE4UtDvI0Vv7BXPZvyucO2su6KkL', type: 'txt' },
                '12.2.2507': { id: '1OGqnrdwMc0j6zwaRhMPNGG8bkuO-kECb', type: 'txt' },
                '12.2.2507.4': { id: '1I2PJINB0z4HWlcxDTiq-I9skmO0A9zc8', type: 'txt' },
                '12.2.2507.5': { id: '19kiRv3tBFyUSHnGwyvjvGMBhC5EzToXx', type: 'txt' },
                '12.2.2507.6': { id: '1L_Jw3GMjz7F_OaNZr_lzcJHRKGW76gbN', type: 'txt' },
                '12.2.2507.7': { id: '1ZDyVikOavwwz5rCByx1_s9PyF2czY_BF', type: 'txt' },
                '12.2.2507.8': { id: '1cLJ_BPltcqHslEP1Lim0iUMUBPBQrYPz', type: 'txt' },
                '12.2.2507.9': { id: '13Er9lyxm4HmPPCd3JNymTvX_Dl4-mdlj', type: 'txt' },
                '12.2.2511': { id: '1eGYnJ1I820VGvUwrpuMvWCWqlgiiWvkg', type: 'txt' },
                '12.2.2511.1': { id: '1jIW7ElN9zpUw4B-9z98O1pkpyKWXS9vW', type: 'txt' },
                '12.2.2511.2': { id: '1MCI-twulc3CVz8rfeoJNF-gXrx_B_QBy', type: 'txt' },
                '12.2.2511.3': { id: '1u49828qMI0OtX129cMPD-zysUGof4msV', type: 'txt' },
            };
            
            // Função para extrair versão do título "Dicionário de Dados 12.1.2503.14"
            function getPageVersion() {
                const versionPattern = /(\d+\.\d+\.\d+(?:\.\d+)?)/;
                
                // Método 1: Título da página (Confluence)
                const selectors = [
                    'h1#title-text',
                    '.page-title',
                    'h1',
                    '[data-page-title]'
                ];
                
                for (const selector of selectors) {
                    const element = document.querySelector(selector);
                    if (element) {
                        const text = element.textContent.trim();
                        const match = text.match(versionPattern);
                        if (match) {
                            return match[1];
                        }
                    }
                }
                
                // Método 2: Meta tags
                const metaTitle = document.querySelector('meta[property="og:title"], meta[name="title"]');
                if (metaTitle) {
                    const titleText = metaTitle.getAttribute('content') || '';
                    const match = titleText.match(versionPattern);
                    if (match) {
                        return match[1];
                    }
                }
                
                // Método 3: document.title
                const titleMatch = document.title.match(versionPattern);
                if (titleMatch) {
                    return titleMatch[1];
                }
                
                // Método 4: URL (fallback)
                const urlParams = new URLSearchParams(window.location.search);
                const titleParam = urlParams.get('title');
                if (titleParam) {
                    const match = decodeURIComponent(titleParam).match(versionPattern);
                    if (match) {
                        return match[1];
                    }
                }
                
                return null;
            }
            
            // Obter versão
            const version = getPageVersion();
            const container = document.getElementById('widget-container');
            
            if (!version) {
                container.innerHTML = `
                    <div class="message-box error">
                        <span class="message-icon">❌</span>
                        <h2>Versão não identificada</h2>
                        <p>Certifique-se de que o título da página contém a versão no formato:<br>
                        <strong>"Dicionário de Dados 12.1.2503.14"</strong></p>
                    </div>
                `;
                return;
            }
            
            // Atualizar display
            document.getElementById('version-display').textContent = version;
            document.getElementById('page-title').textContent = `Dicionário de Dados ${version}`;
            document.getElementById('last-update').textContent = new Date().toLocaleString('pt-BR');
            
            // Obter arquivo (Google Doc ou .txt) para a versão
            const fileEntry = versionToFile[version];
            
            if (!fileEntry) {
                container.innerHTML = `
                    <div class="message-box">
                        <span class="message-icon">📋</span>
                        <h2>Release Notes ainda não foi expedido para essa versão</h2>
                        <p>O Release Notes para a versão <strong>${version}</strong> ainda não foi expedido.<br>
                        Aguarde a expedição ou verifique se a versão está correta.</p>
                    </div>
                `;
                return;
            }
            
            const fileId = fileEntry.id;
            const fileType = fileEntry.type; // 'doc' | 'txt' | 'file'
            
            // Construir URLs corretas por tipo
            const openUrl = (fileType === 'doc')
                ? `https://docs.google.com/document/d/${fileId}/edit?usp=sharing`
                : `https://drive.google.com/file/d/${fileId}/view?usp=sharing`;
            
            const previewUrl = (fileType === 'doc')
                ? `https://docs.google.com/document/d/${fileId}/preview`
                : `https://drive.google.com/file/d/${fileId}/preview`;
            
            // Adicionar link para abrir documento
            const docLink = document.getElementById('doc-link');
            if (docLink) {
                docLink.href = openUrl;
                // Ajustar texto do link conforme tipo
                const labelSpan = docLink.querySelector('span:last-child');
                if (labelSpan) {
                    labelSpan.textContent = (fileType === 'doc') ? 'Abrir no Google Docs' : 'Abrir no Google Drive';
                }
                docLink.style.display = 'inline-flex';
            }
            
            // Verificar se está em modo de edição (Confluence)
            if (window.location.href.includes('editpage.action') || window.location.href.includes('edit')) {
                // Modo de edição: mostrar código do macro Widget Connector
                const widgetCode = `<ac:structured-macro ac:name="widget" ac:schema-version="1">
  <ac:parameter ac:name="url">${openUrl}</ac:parameter>
  <ac:parameter ac:name="width">100%</ac:parameter>
  <ac:parameter ac:name="height">800</ac:parameter>
</ac:structured-macro>`;
                
                container.innerHTML = `
                    <div style="padding: 30px 40px;">
      new Date().toLocaleString('pt-BR');

    const entry = versionToFile[version];
    if (!entry) {
      container.innerHTML =
        '<div style="padding:18px; border-left:4px solid #FFAB00; background:#FFFAE6; color:#172b4d;">' +
                  '<div style="background: #f4f5f7; padding: 20px; border-radius: 8pxfont-weight:700; margin-bottom: 15px6px;">
>Documento ainda não está disponível no momento</div>' +
          '<div>O Release Notes para a versão <b>' + version + '</b> <h3 style="margin-bottom: 15px; color: #495057;">📋 Código do Widget Connector:</h3>ainda não foi expedido.</div>' +
        '</div>';
      return;
    }

          <pre style="background: white; padding: 15px; border-radius: 5px; overflow-x: auto; font-size: 13px; border: 1px solid #dee2e6;">${widgetCode}</pre>
                        </div>
                        <p style="color: #6c757d; font-size: 14px;">const fileId = entry.id;
    const fileType = entry.type;

    // Link SEMPRE para o Drive (como solicitado)
    const driveOpenUrl = 'https://drive.google.com/file/d/' + fileId + '/view?usp=sharing';
    docLink.href = driveOpenUrl;
    docLink.style.display = 'inline-block';

    // Preview: Docs preview para Google Doc; Drive preview para txt
    const previewUrl = (fileType === 'doc')
      ? ('https://docs.google.com/document/d/' + fileId     + '/preview')
      : ('https://drive.google.com/file/d/' + fileId + '/preview');

   💡 <strong>Instruções:<//strong> CopieModo ode códigoedição: acimamostrar emacro coleWidget noConnector editor(URL do ConfluenceDrive)
 usando o macro "Widget Connector".
    if (window.location.href.includes('editpage.action') || window.location.href.includes('edit')) {
      const widgetCode =
        '<ac:structured-macro ac:name="widget"   </p>ac:schema-version="1">\n' +
        '  <ac:parameter ac:name="url">' + driveOpenUrl +      '</div>ac:parameter>\n' +
        '        `;<ac:parameter ac:name="width">100%</ac:parameter>\n' +
        '  <ac:parameter  } else {
ac:name="height">800</ac:parameter>\n' +
        '</ac:structured-macro>';

      const escaped = widgetCode.replace(/</g, '<').replace(/>/ Modo de visualização: usar iframeg, '>');
      container.innerHTML =
         const iframe = document.createElement('iframe');'<div style="padding:16px;">' +
          '<div style="font-weight:700; margin-bottom:8px; color:#172b4d;">Código do  iframe.src = previewUrl;Widget Connector</div>' +
          '<pre style="white-space:pre-wrap; background:#f4f5f7; border:1px solid  iframe.width = '100%';
      #dfe1e6; padding:12px; border-radius:6px;">' + escaped + '</pre>' +
          iframe.height'<div style= '800';
          "color:#6b778c; margin-top:8px;">Copie o código acima e cole no macro <b>Widget Connector</b>.</div>' +
      iframe.allow = 'fullscreen</div>';
      return;
    }

     const iframe.title = `Dicionário de Dados ${version}`;
        document.createElement('iframe');
    iframe.src =   previewUrl;
    iframe.width = '100%';
    iframe.height = '800';
    containeriframe.style.innerHTMLborder = '0';
    iframe.setAttribute('allowfullscreen', 'true');
    iframe.title = 'Dicionário de Dados '  container.appendChild(iframe);+ version;

    container.innerHTML = '';
      }
        container.appendChild(iframe);
  })(); 
    </script>
</body>
</html>