diff --git a/src/app.css b/src/app.css index cb9037b..1852206 100644 --- a/src/app.css +++ b/src/app.css @@ -62,7 +62,8 @@ * elige, que es su trabajo en el resto del sitio. */ --c-dato: oklch(0.74 0.09 198); - --c-dato-tenue: oklch(0.5 0.06 205); + /* El mismo tono, más flojo: «también se canta aquí», no otro dato. */ + --c-dato-tenue: oklch(0.55 0.075 198); --c-dato-vacio: oklch(0.29 0.03 255); --c-danger: oklch(0.72 0.16 22); @@ -214,7 +215,8 @@ /* En claro se invierten: el dato pintado tiene que ser oscuro sobre papel. */ --c-dato: oklch(0.5 0.085 200); - --c-dato-tenue: oklch(0.78 0.05 200); + /* El mismo tono, más flojo: «también se canta aquí», no otro dato. */ + --c-dato-tenue: oklch(0.68 0.07 200); --c-dato-vacio: oklch(0.93 0.012 255); --c-danger: oklch(0.5 0.17 25); diff --git a/src/lib/components/MapaDeGeneros.svelte b/src/lib/components/MapaDeGeneros.svelte index 703d28d..d408835 100644 --- a/src/lib/components/MapaDeGeneros.svelte +++ b/src/lib/components/MapaDeGeneros.svelte @@ -51,9 +51,25 @@ return espana ? [espana, ...resto] : resto; }); - /** El ancho de un encuadre, para medir con él lo que se dibuja encima. */ + /** El ancho de un encuadre, en unidades del mapa. */ const anchoDe = (encuadre: string) => Number(encuadre.split(' ')[2]); + /* + * El radio del punto, en píxeles de pantalla. + * + * No basta con hacerlo proporcional al encuadre: los dos mapas se dibujan a + * anchos distintos —América ocupa una columna y la Península menos de la + * mitad—, así que el mismo porcentaje daba un punto la mitad de grande en + * España. Se mide lo que ocupa cada lienzo y se convierte. + */ + const PUNTO_PX = 7; + + let anchoAmerica = $state(0); + let anchoPeninsula = $state(0); + + const radio = (anchoDelEncuadre: number, anchoEnPantalla: number) => + anchoEnPantalla > 0 ? (PUNTO_PX * anchoDelEncuadre) / anchoEnPantalla : 0; + const enAmerica = PAISES.filter((p) => !IBERIA.includes(p.codigo)); const enIberia = PAISES.filter((p) => IBERIA.includes(p.codigo)); @@ -89,9 +105,14 @@ - + {#each enAmerica as p (p.codigo)} - {@render pais(p, anchoDe(ENCUADRE))} + {@render pais(p, radio(anchoDe(ENCUADRE), anchoAmerica))} {/each} @@ -108,9 +129,10 @@ viewBox={ENCUADRE_IBERIA} role="group" aria-label="Géneros en la Península" + bind:clientWidth={anchoPeninsula} > {#each enIberia as p (p.codigo)} - {@render pais(p, anchoDe(ENCUADRE_IBERIA))} + {@render pais(p, radio(anchoDe(ENCUADRE_IBERIA), anchoPeninsula))} {/each} @@ -149,7 +171,7 @@ -{#snippet pais(p: (typeof PAISES)[number], anchoDelLienzo: number)} +{#snippet pais(p: (typeof PAISES)[number], r: number)} {@const suyo = porPais[p.codigo]} {#if suyo} - + {:else}