1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="debug" content="disabled"> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <title>综åä¸çè¯æå¾çå ¸å¦ä¹ ç½(2026.1.1)</title> 10 11 <!-- å±è½å¼åè å·¥å · --> 12
12<script> 13 (function() { 14 'use strict'; 15 16 document.addEventListener('keydown', function(e) { 17 if (e.key === 'F12') { 18 e.preventDefault(); 19 return false; 20 } 21 if ((e.ctrlKey || e.metaKey) && e.shiftKey && (e.key === 'I' || e.key === 'i')) { 22 e.preventDefault(); 23 return false; 24 } 25 if ((e.ctrlKey || e.metaKey) && e.shiftKey && (e.key === 'J' || e.key === 'j')) { 26 e.preventDefault(); 27 return false; 28 } 29 if ((e.ctrlKey || e.metaKey) && e.shiftKey && (e.key === 'C' || e.key === 'c')) { 30 e.preventDefault(); 31 return false; 32 } 33 if ((e.ctrlKey || e.metaKey) && (e.key === 'U' || e.key === 'u')) { 34 e.preventDefault(); 35 return false; 36 } 37 if ((e.ctrlKey || e.metaKey) && (e.key === 'S' || e.key === 's')) { 38 e.preventDefault(); 39 return false; 40 } 41 }); 42 43 document.addEventListener('contextmenu', function(e) { 44 var tag = e.target.tagName.toLowerCase(); 45 if (tag !== 'input' && tag !== 'textarea' && tag !== 'a') { 46 e.preventDefault(); 47 return false; 48 } 49 }); 50 51 var devtoolsThreshold = 160; 52 var detectDevTools = function() { 53 var widthDiff = window.outerWidth - window.innerWidth; 54 var heightDiff = window.outerHeight - window.innerHeight; 55 if (widthDiff > devtoolsThreshold || heightDiff > devtoolsThreshold) { 56 console.clear(); 57 } 58 }; 59 setInterval(detectDevTools, 1000); 60 61 if (window.outerWidth - window.innerWidth > devtoolsThreshold || 62 window.outerHeight - window.innerHeight > devtoolsThreshold) { 63 console.clear(); 64 } 65 66 console.log('å¼åè å·¥å ·é²æ¤å·²å¯ç¨'); 67 })(); 68 </script>
68 69 70 <!-- ä¸»æ ·å¼ --> 71 <link rel="stylesheet" href="css/app.css?v=20260509"> 72 73 <!-- å¼¹çªæ ·å¼è¡¥å --> 74 <style> 75 /* ç¡®ä¿å¼¹çªæåéçå¤§å° */ 76 #itemPopup { 77 position: fixed; 78 top: 50%; 79 left: 50%; 80 transform: translate(-50%, -50%); 81 background-color: white; 82 border: 2px solid #ccc; 83 border-radius: 10px; 84 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); 85 display: none; 86 z-index: 10000; 87 min-width: 200px; 88 width: auto !important; 89 height: auto !important; 90 } 91 .popup-content { 92 flex-direction: column; 93 padding: 20px; 94 position: relative; 95 min-width: 180px; 96 } 97 .popup-content .close-btn { 98 font-size: 18px; 99 cursor: pointer; 100 position: absolute; 101 top: 5px; 102 right: 10px; 103 } 104 .popup-content .operate { 105 display: flex; 106 flex-wrap: wrap; 107 justify-content: center; 108 gap: 10px; 109 margin-top: 10px; 110 } 111 .buttonpop { 112 padding: 5px 15px; 113 margin: 2px; 114 background-color: #006400; 115 color: #fff; 116 font-size: 14px; 117 border: none; 118 border-radius: 6px; 119 cursor: pointer; 120 transition: background-color 0.3s; 121 width: auto; 122 min-width: 80px; 123 height: 36px; 124 } 125 .buttonpop:hover { 126 background-color: purple; 127 } 128 </style> 129 130<base target="_blank"> 131<base target="_blank"> 132</head> 133<body> 134 <div class="container" id="main-container"> 135 <div class="title_bar" id="title"> 136 综åä¸çè¯æå¾çå ¸ 137 <br> 138 <div>SINTEZA ILUSTRITA VORTARO ÄEÄ</div> 139 <div>ç¼çºï¼çå´è³</div> 140 </div> 141 142 <div class="operate"> 143 <input type="text" class="input" id="searchInput" placeholder="è¯·å¨æ¤è¾å ¥æ¥è¯¢ï¼Tajpu kaj ek!" style="width: 500px; height: 15px; margin: 1px;" oninput="getSuggestions()"> 144 </div> 145 146 <div class="operate"> 147 <button class="button" onclick="exampleSearch()">å ¨ææ£ç´¢</button> 148 <button class="button" onclick="showPopupWithContent('tutorial')">ä¸çè¯æç¨</button> 149 <button class="button" onclick="LoadEsperantoFile('Gramatiko/PEG2025.html')">ä¸çè¯è¯æ³</button> 150 <button class="button" onclick="LoadEsperantoFile('Gramatiko/Ekzemploj.html')">ä¸çè¯ä¾å¥</button> 151 <button class="button" onclick="vortoremoru('Lernadoj/vorto.html')">åè¯è®°å¿</button> 152 <button class="button" onclick="showPopupWithContent('appendix')">çå ¸éä»¶</button> 153 <button class="button" onclick="LoadEsperantoFile('Softvaroj/softvaroj.html')">弿°è½¯ä»¶</button> 154 <button class="button" onclick="showGuestbookPopup()">ð çè¨æ¿</button> 155 </div> 156 157 <div class="flex-container"> 158 <div class="list-box" id="listBox"></div> 159 <div class="web-browser" id="webBrowser"></div> 160 </div> 161 162 <div class="copyright"> ç¨åºè®¾è®¡: æ¯èªèµ(Anteo), çå¿å½±(Frostelo)ï¼ è¯æ¡å½é³ï¼èµµå»ºå¹³ï¼ åè¯è®°å¿ï¼éå¨ä¼ï¼SAIè¯é³ï¼Doniben</div> 163 <div class="copyright"> 西å®ä¸çè¯åä¼ çå¶</div> 164 <div class="beian_hao">åæ é¾æ¥ï¼<a href="https://vortaro.net" target="_blank">PIV 2020</a> <a href="https://retavortaro.de" target="_blank">RetaVortaro</a> <a href="https://sai.esperanto.co" target="_blank">SAI</a> <a href="https://shop.kongfz.com/34008" target="_blank">西å®ä¸çè¯ä¹¦åº</a></div> 165 <div class="beian_hao"> 166 <a href="#" onclick="showAdminPopup();return false;" style="color:#006400;text-decoration:underline;">çè¨ç®¡ç</a> 167 | 168 <a href="https://beian.miit.gov.cn" target="_blank">éICPå¤2024041503å·</a> 169</div> 170 </div> 171 172 <div id="message-view"> 173 <div class="message"> 174 <div class="icon"><img src="./icon" height="20" width="20"></div> 175 <div><div style="margin-bottom:10px;">æç¤º</div><div id="message"></div></div> 176 <div class="close-btn" onclick="closeMessage()">Ã</div> 177 </div> 178 </div> 179 180 <div class="beian_hao"><div id="log"></div></div> 181 182 <!-- ç»ä¸çå¼¹çªï¼å 容卿åå --> 183 <div id="itemPopup"> 184 <div class="popup-content" id="popupContent">
185 <span class="close-btn" onclick="closePopup()">â</span> 186 <div class="operate" id="popupButtons"> 187 <!-- æé®ä¼å¨æå¡«å --> 188 </div> 189 </div> 190 </div> 191 192 <div id="audioPlayerContainer" class="audio-player-container hidden"> 193 <div class="audio-player"> 194 <audio id="hmrbPlayer" controls></audio> 195 <button class="close-audio-btn" onclick="closeAudioPlayer()">Ã</button> 196 </div> 197 </div> 198 199 <!-- çè¨æ¿å¼¹çªï¼å¯æå¨ + ååºå¼ï¼ --> 200<div id="guestbookPopup" style="display:none;position:fixed;z-index:99999;background:#fff;border:2px solid #006400;border-radius:10px;box-shadow:0 4px 30px rgba(0,0,0,0.3);width:560px;max-width:92vw;max-height:85vh;overflow:hidden;font-family:inherit;top:50%;left:50%;transform:translate(-50%,-50%);min-width:300px;min-height:350px;"> 201 <div id="guestbookHeader" style="background:#006400;color:#fff;padding:12px 18px;font-weight:bold;font-size:18px;display:flex;justify-content:space-between;align-items:center;border-radius:8px 8px 0 0;cursor:move;user-select:none;touch-action:none;min-height:44px;"> 202 <span style="font-size:16px;line-height:1.4;">ð çè¨æ¿</span> 203 <span onclick="closeGuestbookPopup()" style="cursor:pointer;font-size:28px;padding:0 8px;border-radius:4px;line-height:1;" onmouseover="this.style.background='rgba(255,255,255,0.2)'" onmouseout="this.style.background='transparent';">×</span> 204 </div> 205 <div style="padding:16px 18px;max-height:calc(85vh - 56px);overflow-y:auto;-webkit-overflow-scrolling:touch;" id="guestbookContent"> 206 <!-- çè¨è¡¨å --> 207 <form id="guestbookForm" onsubmit="submitGuestbook(event)" enctype="multipart/form-data"> 208 <div style="margin-bottom:12px;"> 209 <label style="display:block;font-weight:bold;margin-bottom:4px;font-size:14px;">çè¨ä¸»é¢ <span style="color:#c00;">*</span></label> 210 <input type="text" id="gbSubject" required style="width:100%;padding:10px 12px;border:1px solid #ccc;border-radius:6px;font-size:16px;box-sizing:border-box;-webkit-appearance:none;" placeholder="请è¾å ¥çè¨ä¸»é¢"> 211 </div> 212 <div style="margin-bottom:12px;"> 213 <label style="display:block;font-weight:bold;margin-bottom:4px;font-size:14px;">详ç»å 容 <span style="color:#c00;">*</span></label> 214 <textarea id="gbContent" required rows="4" style="width:100%;padding:10px 12px;border:1px solid #ccc;border-radius:6px;font-size:16px;resize:vertical;box-sizing:border-box;-webkit-appearance:none;font-family:inherit;" placeholder="请è¾å ¥è¯¦ç»å 容"></textarea> 215 </div> 216 <div style="margin-bottom:12px;"> 217 <label style="display:block;font-weight:bold;margin-bottom:4px;font-size:14px;">ä¸ä¼ å¾ç</label> 218 <input type="file" id="gbImage" accept="image/*" style="width:100%;padding:8px 0;font-size:14px;"> 219 <div style="font-size:12px;color:#999;margin-top:4px;">æ¯æ JPGãPNGãGIFï¼æå¤§ 5MB</div> 220 </div> 221 <div style="display:flex;gap:10px;margin-top:6px;flex-wrap:wrap;"> 222 <button type="submit" style="flex:1;padding:12px 16px;background:#006400;color:#fff;border:none;border-radius:6px;font-size:16px;cursor:pointer;min-height:48px;min-width:80px;">æäº¤çè¨</button> 223 <button type="button" onclick="closeGuestbookPopup()" style="flex:1;padding:12px 16px;background:#ccc;color:#333;border:none;border-radius:6px;font-size:16px;cursor:pointer;min-height:48px;min-width:80px;">åæ¶</button> 224 </div> 225 <div id="gbMessage" style="margin-top:10px;font-size:14px;text-align:center;"></div> 226 </form> 227 <hr style="margin:16px 0;border:0;border-top:1px solid #eee;"> 228 <!-- çè¨å表 --> 229 <div id="guestbookList" style="max-height:250px;overflow-y:auto;-webkit-overflow-scrolling:touch;"> 230 <div style="text-align:center;color:#999;padding:15px;font-size:14px;">å è½½çè¨ä¸...</div> 231 </div> 232 </div> 233</div> 234 235<style> 236/* ææºç«¯éé */ 237@media (max-width: 768px) { 238 #guestbookPopup { 239 width: 94vw !important; 240 max-width: 94vw !important; 241 min-width: unset !important; 242 min-height: 300px !important; 243 max-height: 92vh !important; 244 top: 4vh !important; 245 left: 3vw !important; 246 transform: none !important; 247 border-radius: 12px !important; 248 } 249 #guestbookPopup #guestbookHeader { 250 padding: 14px 16px !important; 251 font-size: 17px !important; 252 min-height: 50px !important; 253 border-radius: 12px 12px 0 0 !important; 254 } 255 #guestbookPopup #guestbookContent { 256 padding: 14px 16px !important; 257 max-height: calc(92vh - 58px) !important; 258 } 259 #guestbookPopup input, 260 #guestbookPopup textarea { 261 font-size: 16px !important; /* 鲿¢ iOS èªå¨ç¼©æ¾ */ 262 padding: 12px !important; 263 } 264 #guestbookPopup button { 265 font-size: 16px !important; 266 padding: 14px !important; 267 min-height: 50px !important; 268 } 269 #guestbookPopup #guestbookList { 270 max-height: 200px !important; 271 } 272} 273
274/* å°å±ææºï¼å®½åº¦ < 400pxï¼ */ 275@media (max-width: 400px) { 276 #guestbookPopup { 277 width: 96vw !important; 278 max-width: 96vw !important; 279 left: 2vw !important; 280 top: 2vh !important; 281 max-height: 96vh !important; 282 border-radius: 10px !important; 283 } 284 #guestbookPopup #guestbookHeader { 285 padding: 10px 14px !important; 286 font-size: 15px !important; 287 min-height: 44px !important; 288 } 289 #guestbookPopup #guestbookContent { 290 padding: 12px 14px !important; 291 max-height: calc(96vh - 52px) !important; 292 } 293 #guestbookPopup .operate-btn { 294 flex-direction: column !important; 295 gap: 8px !important; 296 } 297 #guestbookPopup button { 298 width: 100% !important; 299 flex: none !important; 300 } 301} 302</style> 303 304<!-- 管çååå°å¼¹çªï¼å¯æå¨ + ååºå¼ï¼ --> 305<div id="adminPopup" style="display:none;position:fixed;z-index:99999;background:#fff;border:2px solid #006400;border-radius:10px;box-shadow:0 4px 30px rgba(0,0,0,0.3);width:800px;max-width:92vw;max-height:85vh;overflow:hidden;font-family:inherit;top:50%;left:50%;transform:translate(-50%,-50%);min-width:320px;min-height:280px;"> 306 <div id="adminHeader" style="background:#006400;color:#fff;padding:12px 18px;font-weight:bold;font-size:18px;display:flex;justify-content:space-between;align-items:center;border-radius:8px 8px 0 0;cursor:move;user-select:none;touch-action:none;min-height:44px;"> 307 <span style="font-size:16px;line-height:1.4;">ð çè¨ç®¡çåå°</span> 308 <span onclick="closeAdminPopup()" style="cursor:pointer;font-size:28px;padding:0 8px;border-radius:4px;line-height:1;" onmouseover="this.style.background='rgba(255,255,255,0.2)'" onmouseout="this.style.background='transparent';">×</span> 309 </div> 310 <div style="padding:15px 18px;max-height:calc(85vh - 56px);overflow-y:auto;-webkit-overflow-scrolling:touch;" id="adminContent"> 311 <div style="margin-bottom:12px;display:flex;gap:10px;flex-wrap:wrap;"> 312 <input type="password" id="adminPassword" placeholder="请è¾å ¥ç®¡çå¯ç " style="flex:1;padding:10px 12px;border:1px solid #ccc;border-radius:6px;font-size:16px;min-width:120px;-webkit-appearance:none;"> 313 <button onclick="loadAdminPanel()" style="padding:10px 24px;background:#006400;color:#fff;border:none;border-radius:6px;font-size:15px;cursor:pointer;min-height:44px;">ç»å½ç®¡ç</button> 314 <button onclick="closeAdminPopup()" style="padding:10px 24px;background:#ccc;color:#333;border:none;border-radius:6px;font-size:15px;cursor:pointer;min-height:44px;">å ³é</button> 315 </div> 316 <div id="adminList" style="max-height:450px;overflow-y:auto;-webkit-overflow-scrolling:touch;font-size:14px;"></div> 317 </div> 318</div> 319 320<style> 321/* 管çååå° - ææºç«¯éé */ 322@media (max-width: 768px) { 323 #adminPopup { 324 width: 94vw !important; 325 max-width: 94vw !important; 326 min-width: unset !important; 327 min-height: 200px !important; 328 max-height: 92vh !important; 329 top: 4vh !important; 330 left: 3vw !important; 331 transform: none !important; 332 border-radius: 12px !important; 333 } 334 #adminPopup #adminHeader { 335 padding: 14px 16px !important; 336 font-size: 17px !important; 337 min-height: 50px !important; 338 border-radius: 12px 12px 0 0 !important; 339 } 340 #adminPopup #adminContent { 341 padding: 14px 16px !important; 342 max-height: calc(92vh - 58px) !important; 343 } 344 #adminPopup input, 345 #adminPopup button { 346 font-size: 16px !important; 347 padding: 12px !important; 348 min-height: 48px !important; 349 } 350 #adminPopup #adminList { 351 max-height: 300px !important; 352 font-size: 13px !important; 353 } 354 #adminPopup .admin-buttons { 355 flex-direction: column !important; 356 } 357 #adminPopup .admin-buttons button { 358 width: 100% !important; 359 } 360} 361 362@media (max-width: 400px) { 363 #adminPopup { 364 width: 96vw !important; 365 max-width: 96vw !important; 366 left: 2vw !important; 367 top: 2vh !important; 368 max-height: 96vh !important; 369 } 370 #adminPopup #adminHeader { 371 padding: 10px 14px !important; 372 font-size: 15px !important; 373 min-height: 44px !important; 374 } 375 #adminPopup #adminContent { 376 padding: 12px 14px !important; 377 max-height: calc(96vh - 52px) !important; 378 } 379 #adminPopup #adminList { 380 max-height: 200px !important; 381 font-size: 12px !important; 382 } 383} 384</style> 385 386
386<script> 387 // ==================== å¼¹çªå 容å®ä¹ ==================== 388 389 // å¼¹çªå 容é ç½® 390 var popupConfig = { 391 tutorial: { 392 title: 'ä¸çè¯æç¨', 393 buttons: [ 394 { text: 'å级', onclick: function() { LoadEsperantoFile('Lernadoj/VEJDO_E.html'); closePopup(); } }, 395 { text: 'ä¸çº§', onclick: function() { LoadEsperantoFile('Lernadoj/WANGCF_M.html'); closePopup(); } } 396 ] 397 }, 398 appendix: { 399 title: 'çå ¸éä»¶', 400 buttons: [ 401 { text: 'åè¨', onclick: function() { LoadEsperantoFile('Apendicoj/åè¨.html'); closePopup(); } }, 402 { text: 'å¡ä¾', onclick: function() { LoadEsperantoFile('Apendicoj/å¡ä¾.html'); closePopup(); } }, 403 { text: 'åè®°', onclick: function() { LoadEsperantoFile('Apendicoj/åè®°.html'); closePopup(); } }, 404 ] 405 }, 406 frostelo: { 407 title: '弿°è½¯ä»¶', 408 buttons: [ 409 { text: 'å è´¹å ¬çç', onclick: function() { LoadEsperantoFile('Apendicoj/åè¨.html'); closePopup(); } }, 410 { text: 'ä¸ä¸è¯ç¨ç', onclick: function() { LoadEsperantoFile('Apendicoj/å¡ä¾.html'); closePopup(); } }, 411 ] 412 } 413 }; 414 415 /** 416 * æ¾ç¤ºå¼¹çªï¼å¨æå¡«å å å®¹ï¼ 417 * @param {string} type - å¼¹çªç±»å ('tutorial' æ 'appendix') 418 */ 419 function showPopupWithContent(type) { 420 var config = popupConfig[type]; 421 if (!config) return; 422 423 var buttonsContainer = document.getElementById('popupButtons'); 424 if (!buttonsContainer) return; 425 426 // æ¸ ç©ºç°ææé® 427 buttonsContainer.innerHTML = ''; 428 429 // 卿å建æé® 430 config.buttons.forEach(function(btn) { 431 var button = document.createElement('button'); 432 button.className = 'buttonpop'; 433 button.textContent = btn.text; 434 button.onclick = btn.onclick; 435 buttonsContainer.appendChild(button); 436 }); 437 438 // æ¾ç¤ºå¼¹çª 439 var popup = document.getElementById('itemPopup'); 440 if (popup) popup.style.display = 'block'; 441 } 442 443 /** 444 * å ³éå¼¹çªï¼ä¿æåæå½æ°ï¼ 445 */ 446 window.closePopup = function() { 447 var p = document.getElementById('itemPopup'); 448 if (p) p.style.display = 'none'; 449 }; 450 451 /** 452 * åæ showPopup 彿°ï¼ä¿çå ¼å®¹æ§ï¼ä½å»ºè®®ä½¿ç¨æ°çï¼ 453 */ 454 window.showPopup = function() { 455 // é»è®¤æ¾ç¤ºæç¨å¼¹çª 456 showPopupWithContent('tutorial'); 457 }; 458 459 // ç¹å»å¼¹çªå¤å ³éï¼å¯éï¼ 460 window.addEventListener('click', function(e) { 461 var popup = document.getElementById('itemPopup'); 462 if (popup && popup.style.display === 'block') { 463 // 妿ç¹å»çæ¯é®ç½©å±æå¼¹çªå¤åºå 464 if (!popup.contains(e.target)) { 465 // ä¸èªå¨å ³éï¼è®©ç¨æ·ç¹å»å ³éæé® 466 // 妿éè¦ç¹å»å¤é¨å ³éï¼åæ¶æ³¨éä¸é¢ç代ç 467 // closePopup(); 468 } 469 } 470 }); 471 472 // ESC é®å ³éå¼¹çª 473 document.addEventListener('keydown', function(e) { 474 if (e.key === 'Escape') { 475 closePopup(); 476 } 477 }); 478 479 console.log('å¼¹çªæ¨¡åå·²å è½½'); 480 481 // ===== URL Hash ç´æ¥æ¥è¯¢ ===== 482function handleHashQuery() { 483 var hash = window.location.hash; 484 if (hash && hash.length > 1) { 485 // 廿 # å·ï¼è§£ç URL ç¼ç 486 var query = decodeURIComponent(hash.substring(1)); 487 // å»é¤æ«å°¾å¯è½åå¨ç _kd åç¼ï¼PIV 飿 ¼ï¼ 488 if (query.endsWith('_kd')) { 489 query = query.substring(0, query.length - 3); 490 } 491 // å¡«å ¥æç´¢æ¡å¹¶æ§è¡æ¥è¯¢ 492 var searchInput = document.getElementById('searchInput'); 493 if (searchInput) { 494 searchInput.value = query; 495 // 触åè¾å ¥äºä»¶ï¼èªå¨è¡¥å ¨ï¼ 496 var event = new Event('input', { bubbles: true });
497 searchInput.dispatchEvent(event); 498 // å»¶è¿æ§è¡ç²¾ç¡®æç´¢ 499 setTimeout(function() { 500 window.exactSearch(); 501 }, 300); 502 } 503 } 504} 505 506// 页é¢å è½½å®æåæ§è¡ 507setTimeout(handleHashQuery, 500); 508 509// çå¬ hash ååï¼ç¨æ·æå¨ä¿®æ¹å°åæ # åé¢å å®¹ï¼ 510window.addEventListener('hashchange', function() { 511 // æ¸ ç©ºæ§ç»æ 512 var listBox = document.getElementById('listBox'); 513 if (listBox) listBox.innerHTML = ''; 514 handleHashQuery(); 515}); 516 </script>
516 517 518
518<script src="js/security.js?v=20260509"></script>
518 519
519<script src="js/copy-guard.js?v=20260509"></script>
519 520
520<script src="js/ai-tts.js?v=20260509"></script>
520 521
521<script src="js/app.js?v=20260805"></script>
521 522
522<script src="js/lookup-popup.js?v=20260803"></script>
522 523 524 525<!-- PIV2020 å¼¹çª --> 526<div id="piv2020Popup" style="display:none;position:fixed;z-index:99999;top:100px;left:100px;background:#fff;border:2px solid #006400;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,0.3);width:700px;max-width:94vw;height:500px;max-height:80vh;overflow:hidden;font-family:monospace;font-size:14px;line-height:1.6;resize:both;min-width:280px;min-height:200px;"> 527 <div id="piv2020Header" style="background:#006400;color:#fff;padding:8px 12px;font-weight:bold;font-size:16px;display:flex;justify-content:space-between;align-items:center;border-radius:6px 6px 0 0;cursor:move;user-select:none;touch-action:none;"> 528 <span id="piv2020Title">PIV2020</span> 529 <span style="cursor:pointer;padding:2px 6px;border-radius:4px;" onmouseover="this.style.background='rgba(255,255,255,0.2)'" onmouseout="this.style.background='transparent'" onclick="closePiv2020Popup()">✖</span> 530 </div> 531 <div id="piv2020Content" style="padding:0;height:calc(100% - 40px);width:100%;box-sizing:border-box;"> 532 <div style="color:#999;padding:20px;text-align:center;">å è½½ä¸...</div> 533 </div> 534</div> 535 536</body> 537</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.