Herramientas de usuario

Herramientas del sitio


otros:contacto

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
otros:contacto [2026/05/06 10:40] jesusotros:contacto [2026/05/06 17:39] (actual) jesus
Línea 2: Línea 2:
 <html> <html>
 <style> <style>
-  .pcw-page-container { background:#000b00; font-family:'Courier New', monospace; padding:20px; color:#00ff00; }+  .pcw-page-container { background:#000b00; font-family:'Courier New', monospace; padding:10px; color:#00ff00; }
      
-  /* --- HARDWARE MODEM PCWWIKI --- */+  /* --- HARDWARE MODEM PCWWIKI (RESPONSIVE) --- */
   .modem-chassis {   .modem-chassis {
-    background: #1a1a1a; width: 440px; margin: 0 auto 35px; border-radius: 6px; padding: 18px; position: relative;+    background: #1a1a1a;  
 +    width: 95%; /* Ancho flexible para móvil */ 
 +    max-width: 440px; /* Límite para PC */ 
 +    margin: 0 auto 35px; border-radius: 6px; padding: 15px; position: relative;
     border: 1.5px solid #333; border-top: 2px solid #444;     border: 1.5px solid #333; border-top: 2px solid #444;
     box-shadow: 0 0 1px rgba(255,255,255,0.1), 0 15px 40px rgba(0,0,0,0.9);     box-shadow: 0 0 1px rgba(255,255,255,0.1), 0 15px 40px rgba(0,0,0,0.9);
-    display: flex; align-items: center; justify-content: space-between; gap: 15px;+    display: flex; align-items: center; justify-content: space-between; gap: 10px; 
 +    box-sizing: border-box; /* Evita que el padding rompa el ancho */
   }   }
 +  
 +  .sch-brand-white { 
 +    color: #ffffff; font-family: Arial, sans-serif; font-weight: 900; 
 +    font-size: 13px; letter-spacing: 1px; white-space: nowrap;
 +  }
 +
   .led-bezel {   .led-bezel {
-    background: #0a0a0a; padding: 8px 12px; border-radius: 4px; border: 1px solid #222; +    background: #0a0a0a; padding: 6px 10px; border-radius: 4px; border: 1px solid #222; 
-    display: flex; gap: 12px; box-shadow: inset 0 2px 5px rgba(0,0,0,0.5);+    display: flex; gap: 10px; box-shadow: inset 0 2px 5px rgba(0,0,0,0.5);
   }   }
-  .sch-brand-white { color: #ffffff; font-family: Arial, sans-serif; font-weight: 900; font-size: 15px; letter-spacing: 1.5px; } + 
-  .m-led { width: 11px; height: 11px; background: #200; border-radius: 50%; position: relative; border: 1px solid rgba(255,255,255,0.05); }+  .m-led { width: 10px; height: 10px; background: #200; border-radius: 50%; position: relative; border: 1px solid rgba(255,255,255,0.05); }
   .m-led span { position: absolute; top: 14px; left: 50%; transform: translateX(-50%); font-size: 7px; color: #777; font-weight: bold; }   .m-led span { position: absolute; top: 14px; left: 50%; transform: translateX(-50%); font-size: 7px; color: #777; font-weight: bold; }
      
Línea 23: Línea 33:
   .led-yellow { background:#ff0 !important; box-shadow: 0 0 10px #ff0; }   .led-yellow { background:#ff0 !important; box-shadow: 0 0 10px #ff0; }
  
-  .pwr-btn { width: 42px; height: 22px; background: #2a2a2a; border: 2px solid #444; border-radius: 4px; cursor: pointer; animation: pwr-blink 1.2s infinite; }+  .pwr-btn {  
 +    width: 40px; height: 22px; background: #2a2a2a; border: 2px solid #444;  
 +    border-radius: 4px; cursor: pointer; animation: pwr-blink 1.2s infinite;  
 +    outline: none; flex-shrink: 0; /* Evita que el botón se aplaste */ 
 +  }
   @keyframes pwr-blink { 50% { border-color:#0f0; box-shadow: 0 0 12px rgba(0,255,0,0.4); } }   @keyframes pwr-blink { 50% { border-color:#0f0; box-shadow: 0 0 12px rgba(0,255,0,0.4); } }
   .active-btn { animation:none !important; border-color:#0f0 !important; background:#040 !important; box-shadow: inset 0 2px 5px rgba(0,0,0,0.5) !important; }   .active-btn { animation:none !important; border-color:#0f0 !important; background:#040 !important; box-shadow: inset 0 2px 5px rgba(0,0,0,0.5) !important; }
  
-  .contact-box { border: 2px solid #004400; padding: 35px; background: rgba(0,10,0,0.9); min-height: 450px; display: none; } +  /* --- TERMINAL --- */ 
-  .line-in { margin-bottom: 14px; line-height: 1.6; opacity: 0; transform: translateX(-10px); transition: 0.3stext-alignjustify; }+  .contact-box {  
 +    border: 2px solid #004400; padding: 20px 
 +    background: rgba(0,10,0,0.9); min-height: 400px; display: none;  
 +    word-wrap: break-word; /* Para que el texto no se salga en móvil */ 
 +  
 +  .line-in { opacity: 0; transform: translateX(-5px); transition: 0.2sdisplay: inline; line-height: 1.6; font-size: 14px; } 
 +  .block-line { display: block; margin-bottom12px; }
   .line-visible { opacity: 1 !important; transform: translateX(0) !important; }   .line-visible { opacity: 1 !important; transform: translateX(0) !important; }
-  .email-link { color: #fff !important; font-size: 1.6em; text-decoration: none; font-weight: bold; padding: 12px 25px; border: 1px solid #0f0; display: inline-block; background: rgba(0,255,0,0.1); text-shadow: 0 0 10px #0f0; margin-top: 15px; }+   
 +  .email-link {  
 +    color: #fff !important; font-size: 1.2em; text-decoration: none;  
 +    font-weight: bold; padding: 10px 15px; border: 1px solid #0f0;  
 +    display: inline-block; background: rgba(0,255,0,0.1);  
 +    text-shadow: 0 0 10px #0f0; margin-top: 15px; max-width: 100%; box-sizing: border-box; 
 +  } 
 + 
 +  /* AJUSTE PARA PANTALLAS MUY PEQUEÑAS */ 
 +  @media (max-width: 400px) { 
 +    .sch-brand-white { font-size: 11px; } 
 +    .led-bezel { gap: 6px; padding: 5px 8px; } 
 +    .m-led { width: 8px; height: 8px; } 
 +    .pwr-btn { width: 35px; } 
 +  }
 </style> </style>
  
 <div class="pcw-page-container"> <div class="pcw-page-container">
   <div class="modem-chassis">   <div class="modem-chassis">
-    <div class="sch-brand-white">PCWWIKI <span style="font-weight:100; font-size:9px; color:#aaa;">TELECOMS</span></div>+    <div class="sch-brand-white">PCWWIKI <span style="font-weight:100; font-size:8px; color:#aaa;">TELECOMS</span></div>
     <div class="led-bezel">     <div class="led-bezel">
       <div id="mr" class="m-led"><span>MR</span></div>       <div id="mr" class="m-led"><span>MR</span></div>
Línea 55: Línea 89:
  
 const content = [ const content = [
-  {t: "ATZ", s: "cmd"}, {t: "OK", s: "status"}, {t: "ATDT 914002800", s: "cmd"}, +  {t: "ATZ", s: "cmd", b: true}, {t: "OK", s: "status", b: true}, {t: "ATDT 914002800", s: "cmd", b: true}, 
-  {t: "CONNECT 2400/V.22bis", s: "status"}, {t: "--- INCOMING DATA STREAM ---", s: "status"}, +  {t: "CONNECT 2400/V.22bis", s: "status", b: true}, {t: "--- INCOMING DATA STREAM ---", s: "status", b: true}, 
-  {t: "CARGANDO PROTOCOLO DE PRESERVACIÓN PCWWiki...", s: "text"}, +  {t: "CARGANDO PROTOCOLO DE PRESERVACIÓN PCWWiki...", s: "text", b: true}, 
-  {t: "ID_SISTEMA: Z80-PCW (MADRID/STOCKPORT)", s: "text"}, +  {t: "ID_SISTEMA: Z80-PCW (MADRID/STOCKPORT)", s: "text", b: true}, 
-  {t: "Si has detectado una anomalía en los datos, posees software que no figura en nuestros registros o quieres aportar documentación histórica para su preservación, el sistema está listo para recibir tu transmisión.", s: "text"}, +  {t: " ", s: "text", b: true}, 
-  {t: "<a href='mailto:[email protected]' class='email-link'>📧 [email protected]</a>", s: "html"}, +  {t: "Si has detectado una anomalía en los datos, ", s: "text", b: false}, 
-  {t: "NO CARRIER / SESSION END", s: "status"}+  {t: "posees software que no figura en nuestros registros ", s: "text", b: false}, 
 +  {t: "o quieres aportar documentación histórica para su preservación, ", s: "text", b: false}, 
 +  {t: "el sistema está listo para recibir tu transmisión.", s: "text", b: false}, 
 +  {t: " ", s: "text", b: true}, 
 +  {t: "<a href='mailto:[email protected]' class='email-link'>📧 [email protected]</a>", s: "html", b: true}, 
 +  {t: " ", s: "text", b: true}, 
 +  {t: "NO CARRIER / SESSION END", s: "status", b: true}
 ]; ];
  
Línea 81: Línea 121:
 } }
  
-function playDataChirp(dur, freq, gainVal) {+function playModemChirp(dur, baseFreq, gainVal) {
     if(abortComm || !aCtx) return;     if(abortComm || !aCtx) return;
     let now = aCtx.currentTime;     let now = aCtx.currentTime;
     let osc = aCtx.createOscillator(); let g = aCtx.createGain();     let osc = aCtx.createOscillator(); let g = aCtx.createGain();
-    osc.type = 'square'; osc.frequency.setValueAtTime(freq, now); +    osc.type = 'square';  
-    g.gain.setValueAtTime(gainVal, now); g.gain.linearRampToValueAtTime(0, now + dur);+    osc.frequency.setValueAtTime(baseFreq, now); 
 +    osc.frequency.linearRampToValueAtTime(baseFreq * 1.1, now + dur); 
 +    g.gain.setValueAtTime(gainVal, now); 
 +    g.gain.exponentialRampToValueAtTime(0.001, now + dur);
     osc.connect(g); g.connect(aCtx.destination);     osc.connect(g); g.connect(aCtx.destination);
     osc.start(); osc.stop(now + dur);     osc.start(); osc.stop(now + dur);
 } }
  
-async function simulateTraffic(duration) {+async function simulatePacket(duration) {
     let endTime = Date.now() + duration;     let endTime = Date.now() + duration;
     while(Date.now() < endTime && !abortComm) {     while(Date.now() < endTime && !abortComm) {
-        let isRX = Math.random() 0.3+        document.getElementById('rd').classList.add('led-yellow'); 
-        let led isRX ? document.getElementById('rd': document.getElementById('sd'); +        playModemChirp(0.06, 1200, 0.015)
-        let colorClass = isRX ? 'led-yellow' : 'led-green'+        await new Promise(r => setTimeout(r, 75)); 
-        let freq = isRX ? (1100 + Math.random() * 900: (500 + Math.random() * 500); +        document.getElementById('rd').classList.remove('led-yellow')
-        led.classList.add(colorClass); +        if(Math.random() > 0.65
-        playDataChirp(0.04 + Math.random() * 0.08freq, 0.012); +           document.getElementById('sd').classList.add('led-green'); 
-        await new Promise(r => setTimeout(r, 60 + Math.random() * 90)); +           playModemChirp(0.04, 2400, 0.012); 
-        led.classList.remove(colorClass); +           await new Promise(r => setTimeout(r, 45)); 
-        await new Promise(r => setTimeout(r, 20 + Math.random() * 40));+           document.getElementById('sd').classList.remove('led-green'); 
 +        } 
 +        await new Promise(r => setTimeout(r, 35));
     }     }
 } }
  
 function startConnectionSequence() { function startConnectionSequence() {
-    initAudio(); let now = aCtx.currentTime;+    initAudio(); if(aCtx.state === 'suspended') aCtx.resume(); 
 +    let now = aCtx.currentTime;
     abortComm = false;     abortComm = false;
     document.getElementById('mr').classList.add('led-red');     document.getElementById('mr').classList.add('led-red');
          
-    // Dial tone 
     let dt1 = aCtx.createOscillator(); let dt2 = aCtx.createOscillator(); let dg = aCtx.createGain();     let dt1 = aCtx.createOscillator(); let dt2 = aCtx.createOscillator(); let dg = aCtx.createGain();
     dt1.frequency.value = 350; dt2.frequency.value = 440; dg.gain.setValueAtTime(0.015, now);     dt1.frequency.value = 350; dt2.frequency.value = 440; dg.gain.setValueAtTime(0.015, now);
Línea 137: Línea 182:
 function handlePowerClick() { function handlePowerClick() {
     const btn = document.getElementById('pwr');     const btn = document.getElementById('pwr');
-     
     if (isFinished) {     if (isFinished) {
-        // RESET Y RE-ARRANQUE 
         document.getElementById('output').innerHTML = '';         document.getElementById('output').innerHTML = '';
-        currentLine = 0; +        currentLine = 0; isFinished = false;
-        isFinished = false;+
         ['oh','rd','sd'].forEach(id => document.getElementById(id).className = 'm-led');         ['oh','rd','sd'].forEach(id => document.getElementById(id).className = 'm-led');
         startConnectionSequence();         startConnectionSequence();
     } else if (isBooting || document.getElementById('mr').classList.contains('led-red')) {     } else if (isBooting || document.getElementById('mr').classList.contains('led-red')) {
-        // APAGADO TOTAL +        abortComm = true; isBooting = false; isFinished = false;
-        abortComm = true; +
-        isBooting = false; +
-        isFinished = false;+
         btn.classList.remove('active-btn');         btn.classList.remove('active-btn');
         document.getElementById('terminal').style.display = 'none';         document.getElementById('terminal').style.display = 'none';
Línea 156: Línea 195:
         ['mr','oh','rd','sd'].forEach(id => document.getElementById(id).className = 'm-led');         ['mr','oh','rd','sd'].forEach(id => document.getElementById(id).className = 'm-led');
     } else {     } else {
-        // ENCENDER POR PRIMERA VEZ +        isBooting = true; btn.classList.add('active-btn');
-        isBooting = true; +
-        btn.classList.add('active-btn');+
         startConnectionSequence();         startConnectionSequence();
     }     }
Línea 167: Línea 204:
         const out = document.getElementById('output');         const out = document.getElementById('output');
         const lineData = content[currentLine];         const lineData = content[currentLine];
-        const lineDiv = document.createElement('div'); +        const lineSpan = document.createElement('span'); 
-        lineDiv.className = 'line-in'; +        lineSpan.className = 'line-in' + (lineData.b ? ' block-line' : '')
-        lineDiv.innerHTML = (lineData.s === "cmd"`<span style="color:#555">> ${lineData.t}</span>` : lineData.t; +         
-        out.appendChild(lineDiv); +        if(lineData.s === "cmd"lineSpan.innerHTML = `<span style="color:#555">> ${lineData.t}</span>`
- +        else if(lineData.s === "status") lineSpan.innerHTML = `<span style="color:#fff; font-weight:bold">${lineData.t}</span>`; 
-        let trafficTime = 300 + (lineData.t.length * 10) + (Math.random() * 800); +        else lineSpan.innerHTML = lineData.t; 
-        await simulateTraffic(trafficTime); +         
 +        out.appendChild(lineSpan); 
 +        let trafficTime = 150 + (lineData.t.length * 12); 
 +        await simulatePacket(trafficTime);
         if(!abortComm) {         if(!abortComm) {
-            lineDiv.classList.add('line-visible');+            lineSpan.classList.add('line-visible');
             currentLine++;             currentLine++;
-            setTimeout(processTransmission, 200 + Math.random() * 500);+            await new Promise(r => setTimeout(r, 200 + Math.random() * 300)); 
 +            processTransmission();
         }         }
     } else if (!abortComm) {     } else if (!abortComm) {
-        isFinished = true; +        isFinished = true; isBooting = false;
-        isBooting = false;+
         document.getElementById('oh').classList.remove('led-red');         document.getElementById('oh').classList.remove('led-red');
     }     }
Línea 188: Línea 227:
 </script> </script>
 </html> </html>
 +
  
otros/contacto.1778064008.txt.gz · Última modificación: por jesus