From 5c3d3371f061e8fbc6af6ad25b025e63062e82a6 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 7 Sep 2026 21:54:20 +0200 Subject: [PATCH] Textos legales, fuentes propias y ajustes de botones MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cinco páginas legales en /legal, enlazadas desde el pie de todas las páginas: información legal, condiciones de uso, privacidad, cookies y condiciones de venta. Son borradores con los datos del titular marcados entre corchetes y un aviso de que hace falta revisión de un abogado antes de vender: cubren lo que pide la ley española, no son un documento validado. La política de cookies y la de privacidad están escritas mirando el código, no copiadas de una plantilla: dos cookies, las dos necesarias, y dos terceros —Stripe y Resend— que reciben lo imprescindible. Y eran tres, porque las tipografías venían de Google: cada visita mandaba la IP del visitante a un tercero sin pedirlo y sin que aportara nada. Ahora se sirven desde el propio dominio. Cargar la web ya no contacta con ningún dominio ajeno, y hay una prueba que lo comprueba. Aparte: el símbolo de marca registrada en el aviso de derechos, los botones de reproducir de las tarjetas pasan de 48 a 36 píxeles —eran casi una quinta parte de la portada, y cambiaban de proporción según la tarjeta— y el de ver el carrito solo aparece cuando hay algo dentro. De paso se arregla un fallo de tipos que estaba latente: `resolve()` tiene una sobrecarga por ruta y no acepta una unión, así que la navegación dejaba de compilar en cuanto se añadían rutas. Ahora se resuelve en `site.ts`, una a una. Co-Authored-By: Claude Opus 5 (1M context) --- e2e/responsive.e2e.ts | 13 +- e2e/sindicacion.e2e.ts | 56 ++++++ src/app.css | 22 +++ src/app.html | 6 - src/content/legal/aviso-legal.md | 67 +++++++ src/content/legal/condiciones-de-uso.md | 67 +++++++ src/content/legal/condiciones-de-venta.md | 75 ++++++++ src/content/legal/cookies.md | 38 ++++ src/content/legal/privacidad.md | 72 ++++++++ src/fuentes.css | 150 ++++++++++++++++ src/lib/components/Cabecera.svelte | 2 +- src/lib/components/PieDePagina.svelte | 35 +++- src/lib/components/TarjetaAlbum.svelte | 2 +- src/lib/components/TarjetaCancion.svelte | 2 +- src/lib/components/TarjetaEstilo.svelte | 2 +- src/lib/content/index.ts | 17 ++ src/lib/content/schema.ts | 11 ++ src/lib/site.ts | 23 ++- src/lib/types.ts | 17 ++ src/routes/legal/+page.svelte | 80 +++++++++ src/routes/legal/+page.ts | 5 + src/routes/legal/[slug]/+page.svelte | 170 ++++++++++++++++++ src/routes/legal/[slug]/+page.ts | 9 + src/routes/sitemap.xml/+server.ts | 5 +- static/fuentes/archivo-400-latin-ext.woff2 | Bin 0 -> 32608 bytes static/fuentes/archivo-400-latin.woff2 | Bin 0 -> 34928 bytes static/fuentes/archivo-500-latin-ext.woff2 | Bin 0 -> 32608 bytes static/fuentes/archivo-500-latin.woff2 | Bin 0 -> 34928 bytes static/fuentes/archivo-600-latin-ext.woff2 | Bin 0 -> 32608 bytes static/fuentes/archivo-600-latin.woff2 | Bin 0 -> 34928 bytes static/fuentes/newsreader-300-latin-ext.woff2 | Bin 0 -> 86608 bytes static/fuentes/newsreader-300-latin.woff2 | Bin 0 -> 132000 bytes static/fuentes/newsreader-400-latin-ext.woff2 | Bin 0 -> 86608 bytes static/fuentes/newsreader-400-latin.woff2 | Bin 0 -> 132000 bytes static/fuentes/newsreader-500-latin-ext.woff2 | Bin 0 -> 86608 bytes static/fuentes/newsreader-500-latin.woff2 | Bin 0 -> 132000 bytes 36 files changed, 922 insertions(+), 24 deletions(-) create mode 100644 src/content/legal/aviso-legal.md create mode 100644 src/content/legal/condiciones-de-uso.md create mode 100644 src/content/legal/condiciones-de-venta.md create mode 100644 src/content/legal/cookies.md create mode 100644 src/content/legal/privacidad.md create mode 100644 src/fuentes.css create mode 100644 src/routes/legal/+page.svelte create mode 100644 src/routes/legal/+page.ts create mode 100644 src/routes/legal/[slug]/+page.svelte create mode 100644 src/routes/legal/[slug]/+page.ts create mode 100644 static/fuentes/archivo-400-latin-ext.woff2 create mode 100644 static/fuentes/archivo-400-latin.woff2 create mode 100644 static/fuentes/archivo-500-latin-ext.woff2 create mode 100644 static/fuentes/archivo-500-latin.woff2 create mode 100644 static/fuentes/archivo-600-latin-ext.woff2 create mode 100644 static/fuentes/archivo-600-latin.woff2 create mode 100644 static/fuentes/newsreader-300-latin-ext.woff2 create mode 100644 static/fuentes/newsreader-300-latin.woff2 create mode 100644 static/fuentes/newsreader-400-latin-ext.woff2 create mode 100644 static/fuentes/newsreader-400-latin.woff2 create mode 100644 static/fuentes/newsreader-500-latin-ext.woff2 create mode 100644 static/fuentes/newsreader-500-latin.woff2 diff --git a/e2e/responsive.e2e.ts b/e2e/responsive.e2e.ts index e674ab6..21548ab 100644 --- a/e2e/responsive.e2e.ts +++ b/e2e/responsive.e2e.ts @@ -202,11 +202,16 @@ test.describe('Contraste del dorado', () => { // estaban: el dorado a 16px y el de al lado a 14. await page.goto('/'); + // Los botones de página. El de la esquina de una tarjeta queda fuera a + // propósito: es un adorno accionable sobre una portada y tiene su propio + // tamaño, más pequeño y fijo. const tamanos = await page .locator('a.btn, button.solido') - .evaluateAll((es) => [ - ...new Set(es.map((e) => `${getComputedStyle(e).fontSize} ${getComputedStyle(e).padding}`)) - ]); - expect(tamanos).toHaveLength(1); + .evaluateAll((es) => + es + .filter((e) => !e.closest('.tarjeta')) + .map((e) => `${getComputedStyle(e).fontSize} ${getComputedStyle(e).padding}`) + ); + expect([...new Set(tamanos)]).toHaveLength(1); }); }); diff --git a/e2e/sindicacion.e2e.ts b/e2e/sindicacion.e2e.ts index 59a485d..3ad3422 100644 --- a/e2e/sindicacion.e2e.ts +++ b/e2e/sindicacion.e2e.ts @@ -98,3 +98,59 @@ test.describe('Imagen al compartir', () => { expect(respuesta.headers()['content-type']).toContain('image/jpeg'); }); }); + +test.describe('Legal', () => { + test('las cinco páginas están y se enlazan desde el pie', async ({ page }) => { + await page.goto('/'); + + const pie = page.getByRole('navigation', { name: 'Legal' }); + for (const titulo of [ + 'Información legal', + 'Condiciones de uso', + 'Política de privacidad', + 'Política de cookies', + 'Condiciones de venta' + ]) { + await expect(pie.getByRole('link', { name: titulo })).toBeVisible(); + } + }); + + test('cada texto legal dice cuándo se revisó', async ({ page }) => { + // Un aviso legal sin fecha no sirve: quien lo lee necesita saber a qué + // versión se está acogiendo. + await page.goto('/legal/privacidad'); + + await expect(page.getByRole('heading', { level: 1 })).toHaveText('Política de privacidad'); + await expect(page.getByText(/Última revisión/)).toBeVisible(); + }); + + test('desde un texto legal se llega a los demás', async ({ page }) => { + await page.goto('/legal/cookies'); + + const lateral = page.getByRole('navigation', { name: 'Textos legales' }); + await expect(lateral.getByRole('link', { name: 'Política de cookies' })).toHaveAttribute( + 'aria-current', + 'page' + ); + await lateral.getByRole('link', { name: 'Condiciones de venta' }).click(); + await expect(page).toHaveURL('/legal/condiciones-de-venta'); + }); +}); + +test.describe('Sin terceros', () => { + test('cargar la web no contacta con ningún dominio ajeno', async ({ page }) => { + // Las tipografías se sirven desde aquí. Cargarlas de Google mandaba la IP + // de cada visitante a un tercero en cada página, sin pedirlo. + const ajenos = new Set(); + page.on('request', (r) => { + const host = new URL(r.url()).host; + if (!host.startsWith('localhost') && !host.startsWith('127.0.0.1')) ajenos.add(host); + }); + + for (const ruta of ['/', '/musica', '/canciones/dorina', '/entrar']) { + await page.goto(ruta); + } + + expect([...ajenos]).toEqual([]); + }); +}); diff --git a/src/app.css b/src/app.css index fe52225..0656b36 100644 --- a/src/app.css +++ b/src/app.css @@ -1,3 +1,4 @@ +@import './fuentes.css'; /* * --------------------------------------------------------------------------- * DIRECCIÓN VISUAL @@ -705,6 +706,27 @@ a.chip:focus-visible { transform: none; } +/* + * El botón de una tarjeta va a su propio tamaño, y no al de los botones de + * página. Medía 48px sobre portadas de 280 —casi una quinta parte de la + * imagen— y encima cambiaba de proporción según la tarjeta fuera cuadrada o + * apaisada. Aquí es siempre el mismo, y sigue por encima del mínimo para + * acertarle con el dedo. + */ +/* + * El selector lleva `.tarjeta` delante a propósito: los estilos del botón + * vienen de un componente y Svelte les añade su clase de ámbito, así que con + * menos peso no se aplicarían. Y nada de `:global()`, que aquí no es sintaxis + * válida —esto es CSS normal— y hace que se descarte la regla entera sin avisar. + */ +.tarjeta .tarjeta__flotante button { + min-width: 2.25rem; + min-height: 2.25rem; + width: 2.25rem; + height: 2.25rem; + padding: 0; +} + /* * En pantallas táctiles no hay puntero que lo revele, y un botón invisible * pero pulsable es peor que ninguno: ahí se queda siempre a la vista. Sin diff --git a/src/app.html b/src/app.html index f3ee0b1..bb34063 100644 --- a/src/app.html +++ b/src/app.html @@ -30,12 +30,6 @@ la hoja de estilos y las fuentes viven en dominios distintos, y sin él la letra tarda una vuelta de más en aparecer. --> - - - **Pendiente de completar.** Los datos entre corchetes los tiene que rellenar +> el titular, y un abogado debería revisar este texto antes de vender nada. Lo +> que sigue es un borrador que cubre lo que exige la ley española, no un +> documento validado. + +## Titular del sitio + +En cumplimiento del artículo 10 de la Ley 34/2002 de servicios de la sociedad +de la información y de comercio electrónico: + +- **Titular:** [nombre y apellidos o razón social] +- **NIF / CIF:** [documento] +- **Domicilio:** [dirección completa] +- **Correo electrónico:** hola@senzapaura.com +- **Actividad:** creación musical y venta de fonogramas en formato digital +- **Registro mercantil:** [si es sociedad: registro, tomo, folio, hoja] + +## Marca + +**Senza Paura®** es una marca registrada. [Número de registro y oficina —OEPM, +EUIPO— que lo concede.] + +El nombre, el logotipo y los elementos gráficos de este sitio están protegidos. +No se pueden usar sin autorización escrita del titular, ni siquiera citando la +fuente. + +## Propiedad intelectual + +Las letras, las composiciones, las grabaciones y los textos del taller son obra +del titular y están protegidos por el Real Decreto Legislativo 1/1996, de +Propiedad Intelectual. + +**Comprar una canción da derecho a escucharla y conservarla, no a explotarla.** +Concretamente, la compra no autoriza a reproducirla en público, a incorporarla +a otra obra, a distribuirla, ni a usarla en ninguna producción audiovisual o +publicitaria. Para cualquiera de esas cosas hay que pedir licencia: los +identificadores de registro (ISWC, ISRC, entidad de gestión) están publicados +en la ficha de cada tema precisamente para poder localizarla y negociarla. + +Citar un fragmento de una letra con fines de crítica, reseña o docencia está +amparado por el derecho de cita del artículo 32, siempre que se indique el +autor y la fuente. + +## Responsabilidad + +El titular procura que la información publicada sea exacta y esté al día, pero +no garantiza que el sitio esté disponible sin interrupciones ni libre de +errores. + +Los enlaces a sitios ajenos —plataformas de escucha, redes— se ofrecen por +comodidad. Lo que haya al otro lado no depende del titular ni es +responsabilidad suya. + +## Ley aplicable + +Esta relación se rige por la ley española. Para cualquier controversia, las +partes se someten a los juzgados y tribunales del domicilio del titular, salvo +cuando la persona usuaria tenga la condición de consumidora, en cuyo caso será +competente el tribunal de su propio domicilio, según lo dispuesto en la +normativa de consumo. diff --git a/src/content/legal/condiciones-de-uso.md b/src/content/legal/condiciones-de-uso.md new file mode 100644 index 0000000..67e3948 --- /dev/null +++ b/src/content/legal/condiciones-de-uso.md @@ -0,0 +1,67 @@ +--- +titulo: 'Condiciones de uso' +resumen: 'Qué puedes hacer en esta web y qué no.' +actualizada: 2026-09-07 +orden: 2 +--- + +> **Pendiente de revisión legal.** Es un borrador razonable, no un documento +> validado por un abogado. + +Usar esta web supone aceptar estas condiciones. Si no estás de acuerdo con +alguna, no la uses. + +## La cuenta + +Para comprar hace falta una cuenta, y para crearla basta un correo electrónico +al que llega un código. **No hay contraseña**: cada vez que entras se envía un +código nuevo. Eso significa que quien tenga acceso a tu correo tiene acceso a +tu cuenta, así que protégelo. + +Al crear la cuenta te comprometes a usar una dirección **tuya**. Escribir la de +otra persona para que le lleguen los códigos es un uso indebido, y el sistema +lo limita activamente. + +Puedes pedir que se cierre tu cuenta cuando quieras escribiendo a +hola@senzapaura.com. Las compras y los datos de facturación se conservan el +tiempo que obliga la ley, según se explica en la +[política de privacidad](/legal/privacidad). + +## Lo que suena y lo que se compra + +En la web **suena un fragmento** de cada tema, no la canción entera. Es una +muestra para que decidas. + +Al comprar recibes el archivo completo en MP3, con todas sus versiones +alternativas, y queda vinculado a tu cuenta: puedes volver a descargarlo desde +ella siempre que quieras. + +## Lo que no se puede hacer + +Con las canciones compradas: + +- Redistribuirlas, subirlas a ninguna plataforma ni compartirlas públicamente. +- Usarlas en vídeos, anuncios, espectáculos o cualquier producción. +- Incorporarlas a otra obra o hacer versiones para explotarlas. + +Todo eso requiere una licencia aparte. Los identificadores de registro están en +la ficha de cada tema para poder pedirla. + +Con la web: + +- Intentar acceder a partes que no te corresponden, o a los archivos completos + sin haberlos comprado. +- Automatizar peticiones de forma que degraden el servicio. +- Usar el formulario de acceso o el de contacto para molestar a terceros. + +## El taller de letras + +Los textos del taller se publican para leerlos y aprender. Puedes usarlos para +escribir tus propias canciones —para eso están— pero no republicarlos como +propios ni venderlos. + +## Cambios + +Estas condiciones pueden cambiar. La fecha de arriba dice cuándo se revisaron +por última vez, y lo que se aplica a una compra son las condiciones vigentes en +el momento de hacerla. diff --git a/src/content/legal/condiciones-de-venta.md b/src/content/legal/condiciones-de-venta.md new file mode 100644 index 0000000..89a3437 --- /dev/null +++ b/src/content/legal/condiciones-de-venta.md @@ -0,0 +1,75 @@ +--- +titulo: 'Condiciones de venta' +resumen: 'Qué se vende, a qué precio, cómo se entrega y qué pasa si te arrepientes.' +actualizada: 2026-09-07 +orden: 5 +--- + +> **Pendiente de completar y revisar.** El tratamiento del IVA y el derecho de +> desistimiento son las dos partes que más conviene que mire un abogado antes +> de vender. + +## Qué se vende + +Fonogramas en formato digital: canciones en MP3, con todas sus versiones +alternativas, para descargar y conservar. + +No se vende un servicio de suscripción ni un acceso temporal: lo que compras es +un archivo, y sigue siendo tuyo. + +## Precio + +Las canciones se venden en **packs cerrados de 10 por 1,50 €**. No hay precio +por tema suelto, y el pago no se puede completar hasta cerrar un pack. + +[**Pendiente:** indicar si el precio incluye IVA. Vender contenido digital a +particulares en la Unión Europea obliga a repercutir el IVA del país del +comprador. Stripe Tax lo resuelve, pero hay que activarlo y decidirlo.] + +## Pago + +Se paga con tarjeta a través de **Stripe**. Los datos de la tarjeta se escriben +en la pasarela de Stripe y **no pasan por esta web en ningún momento**. + +El pedido se confirma cuando Stripe confirma el cobro. + +## Entrega + +La entrega es **inmediata y digital**: en cuanto se confirma el pago, las +canciones quedan disponibles para descargar desde tu cuenta, sin límite de +descargas ni caducidad mientras la cuenta exista. + +No hay envío físico ni gastos de envío. + +## Derecho de desistimiento + +Aquí hay una particularidad que conviene entender antes de comprar. + +En una compra a distancia tienes catorce días naturales para desistir sin dar +explicaciones. Pero el artículo 103.m del texto refundido de la Ley General +para la Defensa de los Consumidores establece una excepción para el **contenido +digital sin soporte material**: el derecho se pierde cuando la ejecución +comienza con tu consentimiento previo y expreso, sabiendo que al hacerlo lo +pierdes. + +En la práctica: **descargar una canción consume el derecho de desistimiento +sobre esa canción**. Mientras no la descargues, sigues teniendo los catorce +días. + +[**Pendiente:** el proceso de compra debe recoger ese consentimiento de forma +explícita antes de la primera descarga. Está sin implementar.] + +Para desistir dentro de plazo, escribe a hola@senzapaura.com indicando el +pedido. La devolución se hace por el mismo medio de pago. + +## Si algo va mal + +Si un archivo no se descarga, está corrupto o no corresponde a lo comprado, +escribe a hola@senzapaura.com y se resuelve. Si no quedas conforme, puedes +acudir a la plataforma de resolución de litigios en línea de la Comisión +Europea. + +## Facturación + +Puedes indicar tus datos de facturación en tu cuenta antes de comprar, y +descargar el justificante de cada pedido desde ahí. diff --git a/src/content/legal/cookies.md b/src/content/legal/cookies.md new file mode 100644 index 0000000..fd5f44a --- /dev/null +++ b/src/content/legal/cookies.md @@ -0,0 +1,38 @@ +--- +titulo: 'Política de cookies' +resumen: 'Dos cookies, las dos necesarias, ninguna de seguimiento.' +actualizada: 2026-09-07 +orden: 4 +--- + +Esta web usa **dos cookies, y las dos son necesarias para que funcione**. No +hay cookies de analítica, ni de publicidad, ni de terceros. + +Por eso no verás un aviso pidiéndote permiso: la normativa solo exige +consentimiento para las que no son imprescindibles, y aquí no hay ninguna. + +## Las que hay + +| Nombre | Para qué | Cuánto dura | +| --------- | ----------------------------------------------------------------------------------- | --------------------------------- | +| `sesion` | Mantener la sesión abierta cuando entras con tu cuenta | Hasta que cierras sesión o caduca | +| `carrito` | Recordar el carrito antes de que entres, para que no se pierda al cambiar de página | Mientras dure el carrito | + +Las dos van marcadas como `HttpOnly` y `SameSite`, lo que significa que ningún +script puede leerlas y que no viajan a otros sitios. + +## Lo que se guarda en tu navegador, que no son cookies + +Hay dos preferencias que se quedan **solo en tu equipo** y no se envían a +ninguna parte: + +- El **tema** que elijas, claro u oscuro. +- El **volumen** del reproductor. + +Se borran vaciando los datos del sitio en tu navegador. + +## Cómo quitarlas + +Puedes borrar y bloquear las cookies desde tu navegador. Ten en cuenta que si +bloqueas las dos de arriba **no podrás entrar en tu cuenta ni comprar**, porque +son justamente las que sostienen esas dos cosas. diff --git a/src/content/legal/privacidad.md b/src/content/legal/privacidad.md new file mode 100644 index 0000000..f5326f7 --- /dev/null +++ b/src/content/legal/privacidad.md @@ -0,0 +1,72 @@ +--- +titulo: 'Política de privacidad' +resumen: 'Qué datos se recogen, para qué, cuánto se guardan y cómo pedir que se borren.' +actualizada: 2026-09-07 +orden: 3 +--- + +> **Pendiente de completar.** Los datos entre corchetes los tiene que rellenar +> el titular, y un abogado debería revisarlo antes de vender. Lo que sí es +> exacto es la descripción técnica: está escrita mirando lo que hace el código, +> no copiada de una plantilla. + +## Quién trata tus datos + +- **Responsable:** [nombre y apellidos o razón social] +- **NIF:** [documento] +- **Domicilio:** [dirección completa] +- **Contacto:** hola@senzapaura.com + +## Qué se recoge y para qué + +Esta web pide **lo mínimo para funcionar**. No hay analítica, ni píxeles de +seguimiento, ni perfilado, ni publicidad. + +| Qué | Para qué | Base jurídica | Cuánto se guarda | +| ------------------------------- | ---------------------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------- | +| Tu correo electrónico | Crear la cuenta y enviarte el código de acceso | Ejecución del contrato | Mientras tengas cuenta | +| Códigos de acceso | Verificar que el correo es tuyo | Ejecución del contrato | Caducan a los pocos minutos | +| Carrito y compras | Venderte las canciones y darte acceso a ellas | Ejecución del contrato | Las compras, mientras tengas cuenta; los datos de facturación, 6 años (obligación fiscal) | +| Favoritos y valoraciones | Funciones de la cuenta | Ejecución del contrato | Mientras tengas cuenta | +| Dirección IP y correo, contados | Limitar los envíos de códigos | Interés legítimo | Entre un minuto y un día, según el contador | + +Ese último merece explicación. El formulario de acceso manda un correo a la +dirección que se escriba, **sea o no de quien lo escribe**. Sin un límite, +cualquiera podría usarlo para llenar el buzón de otra persona. Por eso se +cuentan los intentos por dirección y por correo durante ventanas cortas. No se +guarda un historial: solo un contador que caduca. + +## Con quién se comparten + +Solo con dos empresas, y solo lo imprescindible: + +- **Stripe Payments Europe, Ltd.** (Irlanda) procesa los pagos. Los datos de la + tarjeta **no pasan por esta web en ningún momento**: se escriben directamente + en la pasarela de Stripe. +- **Resend** envía los correos con los códigos de acceso, y para eso recibe la + dirección de destino. + +**Nada más sale de aquí.** Las tipografías se sirven desde este mismo dominio y +no desde Google, precisamente para que tu dirección IP no llegue a un tercero +solo por abrir una página. Los vídeos de YouTube no cargan nada hasta que +pulsas el botón de reproducir: hasta ese momento lo que se ve es una imagen +servida desde aquí. + +## Cuánto se guardan + +Lo dicho en la tabla. Los datos de facturación se conservan seis años aunque +cierres la cuenta, porque lo exige el Código de Comercio. + +## Tus derechos + +Puedes pedir acceso a tus datos, su rectificación, su supresión, la limitación +del tratamiento, la portabilidad y oponerte al tratamiento. Escribiendo a +hola@senzapaura.com desde la dirección de tu cuenta, con [plazo de respuesta]. + +Si crees que no se han atendido bien, puedes reclamar ante la **Agencia +Española de Protección de Datos** (aepd.es). + +## Menores + +Este servicio no está dirigido a menores de 14 años y no se recogen sus datos a +sabiendas. diff --git a/src/fuentes.css b/src/fuentes.css new file mode 100644 index 0000000..9330194 --- /dev/null +++ b/src/fuentes.css @@ -0,0 +1,150 @@ +/* + * Las fuentes se sirven desde aquí, no desde Google. + * + * Cargarlas de fonts.googleapis.com manda la IP de cada visitante a un tercero + * en cada carga de página, sin haberlo pedido y sin que aporte nada. Servidas + * desde el propio dominio no sale nada fuera, la política de privacidad se + * queda en una línea y encima llegan antes: se ahorran dos conexiones nuevas + * —DNS, TLS— antes de poder empezar a descargarlas. + * + * Generado a partir del CSS de Google, conservando solo los subconjuntos + * latinos. Si se cambian los pesos, hay que volver a generarlo. + */ + +@font-face { + font-family: 'Archivo'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/fuentes/archivo-400-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Archivo'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/fuentes/archivo-400-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Archivo'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/fuentes/archivo-500-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Archivo'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/fuentes/archivo-500-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Archivo'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('/fuentes/archivo-600-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Archivo'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('/fuentes/archivo-600-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Newsreader'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url('/fuentes/newsreader-300-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Newsreader'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url('/fuentes/newsreader-300-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Newsreader'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/fuentes/newsreader-400-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Newsreader'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/fuentes/newsreader-400-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'Newsreader'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/fuentes/newsreader-500-latin-ext.woff2') format('woff2'); + unicode-range: + U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, + U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, + U+A720-A7FF; +} + +@font-face { + font-family: 'Newsreader'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/fuentes/newsreader-500-latin.woff2') format('woff2'); + unicode-range: + U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, + U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/src/lib/components/Cabecera.svelte b/src/lib/components/Cabecera.svelte index 1493ffd..3711dec 100644 --- a/src/lib/components/Cabecera.svelte +++ b/src/lib/components/Cabecera.svelte @@ -101,7 +101,7 @@