domingo, 20 de septiembre de 2026

⚡ EJEMPLOS DE ETIQUETAS ⚡

>> SYSTEM LOADING... HTML KNOWLEDGE UNLOCKED <<


🎯 ETIQUETA DE LISTA

en esta lista el orden no importa

<ul>
  <li>Manzana</li>
  <li>Banana</li>
  <li>Uva</li>
</ul>
<ul></ul> son las etiquetas de la lista
<li></li> son los que añaden los elementos de la vista

En esta lista los elementos llevan un orden

<ol>
  <li>Primero</li>
  <li>Segundo</li>
  <li>Tercero</li>
</ol>
<ol></ol> son las etiquetas de la lista ordenada
<li></li> son los que añaden los elementos de la vista

martes, 21 de julio de 2026

✨ CÓMO ALINEAR IMÁGENES EN BLOGGER

🌸 Holi, vi una notita de esto en spectrummomi.blogspot.com y lo haré paso a paso 🌸
PASO 1

🖼️ Inserta tu imagen

En la entrada que estés editando, haz clic en el ícono de imagen y súbela desde tu computadora o desde la web.

Ejemplo de imagen insertada en Blogger

📸 Así se ve tu imagen al insertarla

PASO 2

👆 Haz clic sobre la imagen

Al seleccionarla, aparecerá un pequeño menú flotante justo debajo de ella con tres opciones de alineación.

Alinear izquierda Izquierda Centrar Centrada Alinear derecha Derecha

🎯 Estos tres botoncitos son tus nuevos mejores amigos

PASO 3

🧭 Elige la alineación que prefieras

Cada opción tiene un efecto diferente en el diseño de tu entrada:

Botón ¿Qué hace? ¿Cuándo usarlo?
⬅️ Izquierda La imagen va a la izquierda y el texto la rodea por la derecha. Perfecto para textos largos.
Centrada La imagen queda en medio, sola, con texto arriba y abajo. Ideal para títulos o fotos destacadas.
➡️ Derecha La imagen va a la derecha y el texto la rodea por la izquierda. Para dar variedad en el diseño.
⬅️ Izquierda: [IMAGEN A LA IZQUIERDA] Texto que fluye a su alrededor, como un río que abraza una piedra. Se ve súper natural y bonito.
⬛ Centrada: [IMAGEN CENTRADA] — El texto queda arriba y abajo. Ideal para fotografías importantes.
➡️ Derecha: [IMAGEN A LA DERECHA] Texto que se acomoda a la izquierda, dando un efecto moderno y dinámico.
✨ TRUCO DE ORO

🌟 Recomendación estrella

🟡 Primero alinea la imagen, y después escribe el texto alrededor.

¿Por qué? Porque Blogger es más amigable cuando la imagen ya tiene su posición fija. Así puedes modificar el texto sin que la imagen se mueva de lugar. ¡Te ahorrarás muchos dolores de cabeza! 🧠💆‍♀️

domingo, 19 de julio de 2026

🎨 TUTORIAL DEL CÓDIGO DEL PAINT

Aprende a implementar este widget clásico de Paint en tu blog

📌 Código tal como está en mi blog — Copia y pega este código en tu entrada de Blogger

💡 Consejo: Copia todo el código dentro de un widget de HTML en Blogger o directamente en la vista de edición HTML de tu entrada.

contador de visitas

🌸

TUTORIAL DEL CONTADOR DE VISITAS

🌸

✨ Aprende a agregar un contador de visitas a tu blog ✨

🌸 Okurr, cabe aclarar que para tener un contador real deberá usar algún contador externo o un sistema de datos como MySQL; entonces eso es más complicado. Este gadget lo que permite es que cuente las veces que han entrado ustedes a su blog, no cuántas personas lo han visitado.

✨ Bueno, el código se lo dejaré tal como lo tengo yo en mi blog.

💜 Código 100% funcional 📱 Responsive

🌸 CÓDIGO DEL CONTADOR 🌸

📋 COPIA ESTE CÓDIGO
<style> /* === CONTADOR LILA COMPACTO PARA BLOGGER === */ .lila-counter-box { background: rgba(255, 248, 255, 0.80); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1.5px solid rgba(200, 160, 230, 0.35); border-radius: 28px; padding: 16px 14px 14px; text-align: center; max-width: 240px; width: 100%; margin: 6px auto; box-shadow: 0 8px 24px -6px rgba(130, 70, 180, 0.20); transition: all 0.3s ease; position: relative; overflow: hidden; font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; } .lila-counter-box:hover { transform: translateY(-2px); box-shadow: 0 12px 28px -8px rgba(120, 60, 190, 0.30); } /* Decoración de fondo más sutil */ .lila-counter-box::before { content: ''; position: absolute; top: -40px; right: -40px; width: 120px; height: 120px; background: radial-gradient(circle, rgba(210, 160, 255, 0.12), transparent 70%); border-radius: 50%; pointer-events: none; } .lila-counter-box::after { content: ''; position: absolute; bottom: -30px; left: -30px; width: 100px; height: 100px; background: radial-gradient(circle, rgba(230, 180, 255, 0.10), transparent 70%); border-radius: 50%; pointer-events: none; } /* HEADER más compacto */ .lila-header { display: flex; align-items: center; justify-content: center; gap: 6px; margin-bottom: 10px; position: relative; z-index: 1; flex-wrap: wrap; } .lila-icon { font-size: 16px; display: inline-block; animation: pulseLila 1.8s ease-in-out infinite; filter: drop-shadow(0 1px 4px rgba(200, 120, 220, 0.15)); } .lila-icon:last-child { animation-delay: 0.9s; } @keyframes pulseLila { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.15); } } .lila-title { font-size: 13px; font-weight: 700; color: #6b4a7a; letter-spacing: 0.5px; background: linear-gradient(135deg, #8b6b9e, #b389c9); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } /* NÚMERO más pequeño */ .lila-body { background: rgba(255, 245, 255, 0.50); backdrop-filter: blur(4px); border: 1.5px solid rgba(200, 160, 230, 0.25); border-radius: 40px; padding: 6px 14px; display: inline-block; min-width: 110px; margin-bottom: 10px; box-shadow: inset 0 1px 6px rgba(180, 140, 210, 0.08); position: relative; z-index: 1; } .lila-number { font-size: 22px; font-weight: 700; letter-spacing: 3px; color: #5a3a6a; /* SIN GRADIENTE NI NEÓN - color sólido y limpio */ font-variant-numeric: tabular-nums; } /* FOOTER más pequeño */ .lila-footer { font-size: 11px; font-weight: 600; color: #7a5f88; letter-spacing: 0.2px; background: linear-gradient(135deg, #e8daf0, #f3e8fa); padding: 4px 14px; border-radius: 40px; display: inline-block; box-shadow: inset 0 1px 3px rgba(255,255,255,0.7); position: relative; z-index: 1; border: 1px solid rgba(200, 170, 230, 0.12); } .lila-footer span { display: inline-block; } /* Puntitos decorativos más pequeños */ .lila-sparkle { position: absolute; border-radius: 50%; filter: blur(2px); pointer-events: none; z-index: 0; } </style> <!-- ====== ESTRUCTURA DEL CONTADOR ====== --> <div class="lila-counter-box"> <div class="lila-sparkle" style="top:10%; left:6%; width:8px; height:8px; background:rgba(210,170,255,0.15);"></div> <div class="lila-sparkle" style="bottom:12%; right:8%; width:10px; height:10px; background:rgba(200,150,240,0.10);"></div> <div class="lila-header"> <span class="lila-icon">🌸</span> <span class="lila-title">Visitas al Blog</span> <span class="lila-icon">🌸</span> </div> <div class="lila-body"> <span id="lila-counter-number" class="lila-number">000000</span> </div> <div class="lila-footer"> <span>✨ ¡Gracias por visitarme! ✨</span> </div> </div> <!-- ====== SCRIPT ====== --> <script> (function() { var storageKey = "blog_visitas_counter_lila"; var currentVisits = localStorage.getItem(storageKey); if (!currentVisits) { currentVisits = 100; } else { currentVisits = parseInt(currentVisits) + 1; } localStorage.setItem(storageKey, currentVisits); var formattedVisits = String(currentVisits).padStart(6, '0'); var counterElement = document.getElementById("lila-counter-number"); if (counterElement) { counterElement.innerText = formattedVisits; } })(); </script>

jueves, 16 de julio de 2026

✦ Tutorial del Código del Juego ✦

📸 Vista previa Juego de puzzle 3x3
Vista previa del juego de puzzle

👋 Holis, tuve un comentario donde me pedían tuto del jueguito de las imágenes.

📌 Bueno, no es tan complicado, pero a la hora de editarlo les recomiendo tener Sublime Text o bloc de notas.

🎨 Personalización de colores

Como verán, hay varias cosas en negritas que son los colores del gadget. Aquí hay dos tipos: # y rgba(), que son dos formas de poner color. Yo usé las dos, pero para que no tengan que inventarse colores como yo al principio, les dejaré las paletas de colores que usé:

💡 El primero es de rgba y el segundo #. Ahí pueden personalizar los colores como gusten.

🖼️ LAS IMÁGENES

En este caso usarán el vínculo de la imagen, yo las tomo de Pinterest, pueden elegir la que sea ya que se ajustará automáticamente. Es muy importante que dejen las comillas.

const IMAGES = [
  'https://i.pinimg.com/1200x/2f/b9/2f/2fb92f6a4043bea724ee60b8c90fa946.jpg',
  'https://i.pinimg.com/1200x/2f/b9/2f/2fb92f6a4043bea724ee60b8c90fa946.jpg',
  'https://i.pinimg.com/1200x/2f/b9/2f/2fb92f6a4043bea724ee60b8c90fa946.jpg'
];

🔘 LOS BOTONES

Pueden cambiar el texto pero la función se mantendrá igual y también pueden cambiar los emojis por los que ustedes gusten. En caso de que su herramienta no tenga teclado de emojis, les recomiendo este link:

💻 CÓDIGO COMPLETO DEL JUEGO

Aquí tienen el código completo para copiar y pegar en su blog:

<style>
  #puzzle-wrapper {
    max-width: 100%;
    width: 100%;
    margin: 0;
    padding: 15px 10px;
    font-family: 'Segoe UI', Arial, sans-serif;
    text-align: center;
    background: linear-gradient(145deg, #2d1b3d, #1f112b);
    border-radius: 16px;
    box-shadow: 0 4px 20px rgba(106, 13, 173, 0.5);
    border: 1px solid rgba(155, 77, 255, 0.2);
    box-sizing: border-box;
    overflow: hidden;
  }

  #puzzle-container {
    width: 100%;
    max-width: 280px;
    aspect-ratio: 1 / 1;
    margin: 0 auto 12px auto;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
    gap: 3px;
    padding: 3px;
    background-color: #1a0f24;
    border-radius: 12px;
    box-shadow: 0 4px 20px rgba(106, 13, 173, 0.5), inset 0 0 30px rgba(155, 77, 255, 0.1);
    box-sizing: border-box;
  }

  .puzzle-piece {
    width: 100%;
    height: 100%;
    background-size: 300% 300%;
    cursor: pointer;
    border-radius: 4px;
    border: 1px solid rgba(255, 255, 255, 0.1);
    box-sizing: border-box;
    transition: transform 0.1s ease, opacity 0.2s, box-shadow 0.2s;
    min-width: 0;
    min-height: 0;
  }

  .puzzle-piece:not(.empty):hover {
    transform: scale(0.92);
    opacity: 0.85;
    box-shadow: 0 0 15px rgba(155, 77, 255, 0.3);
  }

  .puzzle-piece.empty {
    background-image: none !important;
    background-color: #120a1a !important;
    border: 1px dashed #5a3a6a;
    cursor: default;
  }

  .glitter-btn {
    width: 64px;
    height: 64px;
    border: none;
    border-radius: 12px;
    margin: 4px 5px;
    font-size: 26px;
    font-weight: bold;
    cursor: pointer;
    color: white;
    text-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
    background: linear-gradient(135deg, #7b2fbe, #9b4dff, #7b2fbe);
    background-size: 300% 300%;
    box-shadow: 0 0 20px rgba(155, 77, 255, 0.5), inset 0 0 15px rgba(255, 255, 255, 0.15);
    transition: all 0.25s ease;
    position: relative;
    overflow: hidden;
    flex-shrink: 0;
  }

  .glitter-btn::before {
    content: '';
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background: radial-gradient(circle at 30% 40%, rgba(255, 255, 255, 0.3) 0%, transparent 60%),
                radial-gradient(circle at 70% 80%, rgba(255, 215, 0, 0.25) 0%, transparent 50%),
                radial-gradient(circle at 10% 90%, rgba(255, 255, 255, 0.2) 0%, transparent 40%),
                radial-gradient(circle at 90% 10%, rgba(200, 150, 255, 0.3) 0%, transparent 50%);
    background-size: 200% 200%;
    animation: glitterMove 3s linear infinite;
    pointer-events: none;
  }

  .glitter-btn::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: 
      radial-gradient(2px 2px at 20% 30%, rgba(255, 255, 255, 0.8), transparent),
      radial-gradient(2px 2px at 40% 70%, rgba(255, 255, 255, 0.6), transparent),
      radial-gradient(3px 3px at 60% 20%, rgba(255, 215, 0, 0.7), transparent),
      radial-gradient(2px 2px at 80% 50%, rgba(255, 255, 255, 0.9), transparent),
      radial-gradient(2px 2px at 10% 80%, rgba(200, 150, 255, 0.7), transparent),
      radial-gradient(3px 3px at 70% 90%, rgba(255, 255, 255, 0.5), transparent),
      radial-gradient(2px 2px at 90% 30%, rgba(255, 215, 0, 0.6), transparent);
    background-size: 150% 150%;
    animation: sparkle 4s ease-in-out infinite alternate;
    pointer-events: none;
  }

  @keyframes glitterMove {
    0% { background-position: 0% 0%; }
    50% { background-position: 100% 100%; }
    100% { background-position: 0% 0%; }
  }

  @keyframes sparkle {
    0% { opacity: 0.3; transform: scale(1); }
    100% { opacity: 1; transform: scale(1.1); }
  }

  .glitter-btn:hover {
    transform: scale(1.08) rotate(-2deg);
    box-shadow: 0 0 40px rgba(155, 77, 255, 0.9), inset 0 0 25px rgba(255, 255, 255, 0.25);
  }

  .glitter-btn:active {
    transform: scale(0.92);
  }

  #btn-group {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 8px;
    margin: 6px 0 8px 0;
    flex-wrap: wrap;
  }

  #image-counter {
    font-size: 13px;
    color: #a07bb5;
    background: rgba(26, 15, 36, 0.6);
    padding: 4px 12px;
    border-radius: 20px;
    border: 1px solid rgba(155, 77, 255, 0.15);
    display: inline-block;
    margin-top: 2px;
  }

  #message {
    font-size: 15px;
    font-weight: bold;
    min-height: 26px;
    color: #c084fc;
    text-shadow: 0 0 20px rgba(155, 77, 255, 0.5), 0 0 40px rgba(155, 77, 255, 0.2);
    margin: 4px 0 2px 0;
    padding: 6px 8px;
    background: rgba(26, 15, 36, 0.5);
    border-radius: 10px;
    border: 1px solid rgba(155, 77, 255, 0.1);
    word-wrap: break-word;
    box-sizing: border-box;
  }

  @media (max-width: 350px) {
    #puzzle-container {
      max-width: 220px;
      gap: 2px;
      padding: 2px;
    }
    .glitter-btn {
      width: 54px;
      height: 54px;
      font-size: 20px;
    }
    #puzzle-wrapper {
      padding: 10px 6px;
    }
  }

  @media (min-width: 351px) and (max-width: 450px) {
    #puzzle-container {
      max-width: 250px;
    }
    .glitter-btn {
      width: 60px;
      height: 60px;
      font-size: 24px;
    }
  }
</style>

<div id="puzzle-wrapper">
  <div id="puzzle-container"></div>
  <div id="btn-group">
    <button class="glitter-btn" onclick="shufflePuzzle()" title="Mezclar">🔀</button>
    <button class="glitter-btn" onclick="nextImage()" title="Cambiar imagen">🖼️</button>
    <button class="glitter-btn" onclick="resetPuzzle()" title="Reiniciar">🔄</button>
  </div>
  <div id="image-counter">Imagen <span id="current-img-num">1</span> de <span id="total-img-num">3</span></div>
  <div id="message"></div>
</div>

<script>
  const IMAGES = [
    'https://i.pinimg.com/1200x/2f/b9/2f/2fb92f6a4043bea724ee60b8c90fa946.jpg',
    'https://i.pinimg.com/1200x/2f/b9/2f/2fb92f6a4043bea724ee60b8c90fa946.jpg',
    'https://i.pinimg.com/1200x/2f/b9/2f/2fb92f6a4043bea724ee60b8c90fa946.jpg'
  ];

  const GRID_SIZE = 3;
  const TOTAL_PIECES = GRID_SIZE * GRID_SIZE;

  let pieces = [];
  let emptyIndex = TOTAL_PIECES - 1;
  let moves = 0;
  let gameStarted = false;
  let currentImageIndex = 0;
  let currentImageUrl = IMAGES[0];

  function initPuzzle() {
    const container = document.getElementById('puzzle-container');
    container.innerHTML = '';
    pieces = [];
    for (let i = 0; i < TOTAL_PIECES; i++) {
      pieces.push(i);
    }
    emptyIndex = TOTAL_PIECES - 1;
    moves = 0;
    gameStarted = false;
    document.getElementById('message').textContent = '';
    renderPuzzle();
  }

  function renderPuzzle() {
    const container = document.getElementById('puzzle-container');
    container.innerHTML = '';
    for (let i = 0; i < pieces.length; i++) {
      const piece = document.createElement('div');
      piece.className = 'puzzle-piece';
      if (pieces[i] === -1) {
        piece.classList.add('empty');
      } else {
        const row = Math.floor(pieces[i] / GRID_SIZE);
        const col = pieces[i] % GRID_SIZE;
        piece.style.backgroundImage = `url('${currentImageUrl}')`;
        piece.style.backgroundPosition = `-${col * 100}% -${row * 100}%`;
        piece.dataset.index = i;
        piece.addEventListener('click', () => movePiece(i));
      }
      container.appendChild(piece);
    }
    document.getElementById('current-img-num').textContent = currentImageIndex + 1;
    document.getElementById('total-img-num').textContent = IMAGES.length;
  }

  function movePiece(index) {
    if (!gameStarted) gameStarted = true;
    const emptyRow = Math.floor(emptyIndex / GRID_SIZE);
    const emptyCol = emptyIndex % GRID_SIZE;
    const pieceRow = Math.floor(index / GRID_SIZE);
    const pieceCol = index % GRID_SIZE;

    if ((Math.abs(emptyRow - pieceRow) === 1 && emptyCol === pieceCol) ||
        (Math.abs(emptyCol - pieceCol) === 1 && emptyRow === pieceRow)) {
      pieces[emptyIndex] = pieces[index];
      pieces[index] = -1;
      emptyIndex = index;
      moves++;
      renderPuzzle();
      checkWin();
    }
  }

  function nextImage() {
    currentImageIndex = (currentImageIndex + 1) % IMAGES.length;
    currentImageUrl = IMAGES[currentImageIndex];
    initPuzzle();
    shufflePuzzle();
    moves = 0;
    gameStarted = false;
    document.getElementById('message').textContent = '🖼️ Imagen cambiada';
  }

  function shufflePuzzle() {
    for (let i = 0; i < 200; i++) {
      const emptyRow = Math.floor(emptyIndex / GRID_SIZE);
      const emptyCol = emptyIndex % GRID_SIZE;
      const neighbors = [];
      if (emptyRow > 0) neighbors.push(emptyIndex - GRID_SIZE);
      if (emptyRow < GRID_SIZE - 1) neighbors.push(emptyIndex + GRID_SIZE);
      if (emptyCol > 0) neighbors.push(emptyIndex - 1);
      if (emptyCol < GRID_SIZE - 1) neighbors.push(emptyIndex + 1);
      
      const randomNeighbor = neighbors[Math.floor(Math.random() * neighbors.length)];
      pieces[emptyIndex] = pieces[randomNeighbor];
      pieces[randomNeighbor] = -1;
      emptyIndex = randomNeighbor;
    }
    moves = 0;
    gameStarted = false;
    renderPuzzle();
  }

  function resetPuzzle() {
    initPuzzle();
    shufflePuzzle();
    moves = 0;
    gameStarted = false;
    document.getElementById('message').textContent = '';
  }

  function checkWin() {
    let win = true;
    for (let i = 0; i < pieces.length - 1; i++) {
      if (pieces[i] !== i) { win = false; break; }
    }
    if (win && pieces[pieces.length - 1] === -1) {
      document.getElementById('message').textContent = '🎉 ¡Completado en ' + moves + ' movimientos! 🎉';
      setTimeout(function() {
        nextImage();
        document.getElementById('message').textContent = '🔄 Nueva imagen cargada. ¡A resolver!';
      }, 1500);
    }
  }

  window.onload = function() {
    initPuzzle();
    shufflePuzzle();
  };
</script>
        

💜 Y eso sería todo. Dice mi hermana que les diga que si les da flojera buscar los colores, se los pidan a la IA, pero les juro que la tortura vale la pena. ✨

💜 Hecho con cariño para la comunidad 💜

miércoles, 15 de julio de 2026

Good Day

✧ Día de hoy ✧

☕ Hola chicos, ¿cómo están? Hoy traigo otra entrada en mi diario.

Escaneo facial

Pues les cuento que el día de hoy fui a una prueba de Skinquere, donde me hicieron un escaneo facial. Me mostraron las imperfecciones de mi piel por la falta de cuidado, las cuales —según la señora— no fueron muchas, "ya que aún soy menor de edad y mi cuerpo todavía tiene juventud". 😅