docs(colors): Document perceptual correction algorithm in detail

Added extensive documentation explaining:
- The problem (blue goes to black, red stays red when darkened)
- Technical cause (ITU-R BT.709 luminance formula)
- Solution (threshold 0.15, correction factor)
- How to disable if needed

Status: PENDING CONSENSUS - needs team input on colors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
R.Eugenio 2025-12-30 21:35:08 +01:00
parent 0a2f02a0a4
commit 5ba0cc9f25

View file

@ -38,13 +38,67 @@ pub fn isFancy() bool {
}
// =============================================================================
// Perceptual Color Correction
// Perceptual Color Correction - Sistema de Compensación de Colores
// =============================================================================
//
// PROBLEMA A RESOLVER:
// --------------------
// Cuando se oscurecen colores para fondos de paneles (deriveDarkPalette),
// algunos colores pierden su identidad y "van a negro" más rápido que otros:
// - Panel AZUL: al oscurecerse, parece casi negro (pierde identidad)
// - Panel ROJO: al oscurecerse, sigue viéndose "rojo oscuro" (mantiene identidad)
//
// CAUSA TÉCNICA:
// --------------
// La luminosidad percibida por el ojo humano sigue la fórmula ITU-R BT.709:
// L = 0.2126*R + 0.7152*G + 0.0722*B
//
// Valores para colores puros:
// - Azul puro (0,0,255): L = 0.0722 (MUY baja)
// - Rojo puro (255,0,0): L = 0.2126 (baja pero ~3x más que azul)
// - Verde puro (0,255,0): L = 0.7152 (alta)
//
// El azul tiene la menor contribución a la luminosidad percibida, por eso
// al oscurecerlo pierde rápidamente su identidad visual.
//
// SOLUCIÓN IMPLEMENTADA:
// ----------------------
// Umbral de corrección: 0.15
// - Colores con L < 0.15 (como azul ~0.07): reciben boost
// - Colores con L >= 0.15 (como rojo ~0.21): NO se modifican
//
// El "boost" consiste en REDUCIR el porcentaje de blend hacia negro,
// dejando más del color base visible en el fondo oscurecido.
//
// Factor de corrección = max(0.75, L / 0.15)
// - Azul: max(0.75, 0.07/0.15) = max(0.75, 0.47) = 0.75
// - Rojo: L=0.21 >= 0.15, no aplica corrección (factor = 1.0)
//
// Aplicación en deriveDarkPalette:
// - focus_blend = 80% * factor (sin corrección: 80%, con: 60%)
// - unfocus_blend = 96% * factor (sin corrección: 96%, con: 72%)
//
// ESTADO ACTUAL (2025-12-30):
// ---------------------------
// - Activado por defecto (perceptual_correction_enabled = true)
// - Umbral: 0.15
// - PENDIENTE DE CONSENSO: El usuario R.Eugenio considera que necesita
// más opiniones antes de decidir si este algoritmo es el correcto.
// Los colores son subjetivos y requieren consenso del equipo.
//
// CÓMO DESACTIVAR:
// ----------------
// En runtime: Style.setPerceptualCorrection(false)
// O cambiar el default aquí abajo a false.
//
// =============================================================================
/// Enable perceptual correction for panel colors.
/// When enabled, colors with VERY low perceived luminance (e.g., blue ~0.07)
/// get a boost to avoid going to black when darkened.
/// Colors like red (~0.21) are NOT affected as they darken well naturally.
///
/// PENDIENTE DE CONSENSO - ver documentación arriba.
var perceptual_correction_enabled: bool = true;
/// Get whether perceptual correction is enabled