// L'ora come colore, i minuti come ampiezza, i secondi come respiro.
// Niente cifre: dopo tre giorni la si legge senza pensarci.

function disegna(ctx, lato) {
  const ora = new Date();
  const h = ora.getHours() + ora.getMinutes() / 60;
  const m = ora.getMinutes() + ora.getSeconds() / 60;
  const s = ora.getSeconds() + ora.getMilliseconds() / 1000;

  // 24 ore distribuite sul giro completo delle tinte:
  // mezzanotte blu profondo, mezzogiorno giallo pieno
  const tinta = (220 + (h / 24) * 360) % 360;
  const luce = 12 + Math.sin((h / 24) * Math.PI) * 46;

  ctx.fillStyle = `hsl(${tinta} 55% ${luce}%)`;
  ctx.fillRect(0, 0, lato, lato);

  // i minuti aprono e chiudono l'arco
  const r = lato * 0.3;
  const apertura = (m / 60) * Math.PI * 2;
  ctx.strokeStyle = `hsl(${(tinta + 180) % 360} 80% ${luce > 40 ? 20 : 86}%)`;
  ctx.lineWidth = lato * 0.045;
  ctx.lineCap = "round";
  ctx.beginPath();
  ctx.arc(lato / 2, lato / 2, r, -Math.PI / 2, -Math.PI / 2 + apertura);
  ctx.stroke();

  // i secondi: il disco centrale respira, così si vede che è vivo
  const respiro = 1 + Math.sin((s / 60) * Math.PI * 2) * 0.08;
  ctx.fillStyle = `hsl(${(tinta + 180) % 360} 80% ${luce > 40 ? 20 : 86}%)`;
  ctx.beginPath();
  ctx.arc(lato / 2, lato / 2, lato * 0.07 * respiro, 0, 6.2832);
  ctx.fill();

  requestAnimationFrame(() => disegna(ctx, lato));
}

Orologio che non dice l'ora

Un orologio che mostra il tempo come colore e come forma, e che si legge a colpo d'occhio senza numeri. Dalla collezione di apertura.

Strumento
Claude
Modello
Opus 5
Tipo
Codice
Data
Licenza
Uso libero citando l'autore

Prompt

Scrivi un orologio in HTML e JavaScript senza lancette né cifre: il tempo deve essere leggibile soltanto dal colore e dalla forma, in modo che dopo qualche giorno si impari a leggerlo di istinto.