atuq v0.4: el branding que se VE estaba en las imágenes del zip, no en el texto

Capturé la pantalla con `grim` y por fin miré lo que el usuario miraba. El diagnóstico cambió
entero: la ventana SÍ estaba —el título decía «New Tab — atuq» y el icono del lanzador era el
zorro— pero la PÁGINA mostraba el logo y la palabra «Nightly».

O sea que la v0.2 rebrandeó lo que se lee y no lo que se ve. El branding de Gecko vive en TRES
sitios y sólo uno es texto FTL:

  · `brand.ftl`        — las cadenas nuevas (título de ventana, menús). Ya estaba.
  · `brand.properties` — las cadenas VIEJAS, formato heredado. Seguía diciendo Nightly, y nadie lo
                         habría notado leyendo la receta: son 71 bytes en otra ruta del mismo zip.
  · las imágenes de `chrome/browser/content/branding/` — TODO lo visible: el favicon de las páginas
                         internas (ese orbe azul en la pestaña), el logo de about:, y el «wordmark»,
                         que es una IMAGEN con la palabra dibujada, no un texto traducible.

Se reemplazan 10 imágenes + las dos tablas de cadenas + los dos wordmarks. Cada imagen va con LAS
MISMAS DIMENSIONES que la que sustituye (192, 384, 300x236, 16/32/48/64/128): son tamaños que el CSS
del chrome da por sentados, y meter otro tamaño descoloca la página en vez de rebrandearla. El
`about.png` (300x236, no cuadrado) lleva el medallón ENCAJADO y centrado, no estirado.

El wordmark conserva el `viewBox` exacto del original (0 0 372 99) y `fill="context-fill"`, que es
la convención de Gecko para que el color lo ponga quien lo usa — así sigue el tema claro/oscuro solo
en vez de imponer un color.

La variante «private» usa el mismo medallón a propósito: inventar una segunda marca para un modo del
navegador es ruido, y ese modo ya se distingue por su propio chrome.

MÉTODO, que es lo que más vale de esta vuelta: `grim` está en el corpus (incoming-wlr), se hidrata
en el mismo rootfs y captura la pantalla real desde dentro de la jaula. Dejé de decir «mirá tu
pantalla» y pasé a mirarla yo.
This commit is contained in:
Sergio
2026-09-05 16:45:58 +00:00
parent 17a7eda1c7
commit 2660063f99
6 changed files with 64 additions and 6 deletions
+3
View File
@@ -0,0 +1,3 @@
brandShorterName=atuq
brandShortName=atuq
brandFullName=atuq
Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

+10
View File
@@ -0,0 +1,10 @@
<!-- Reemplaza a `about-wordmark.svg` y `firefox-wordmark.svg` dentro de browser/omni.ja.
- El `viewBox` se conserva EXACTO (0 0 372 99): es el del original, y cambiarlo descolocaría
- todo lo que lo posiciona desde CSS.
- `fill="context-fill"` es la convención de Gecko para que el color lo ponga quien lo usa —
- así el wordmark sigue el tema claro/oscuro solo, en vez de imponer un color. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 372 99">
<text x="186" y="76" text-anchor="middle" fill="context-fill"
font-family="system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
font-size="82" font-weight="600" letter-spacing="2">atuq</text>
</svg>

After

Width:  |  Height:  |  Size: 697 B

+51 -6
View File
@@ -179,6 +179,55 @@ def escribir_iconos():
return escritos
# ── 3.bis QUÉ SE REEMPLAZA DENTRO DE browser/omni.ja ───────────────────────────────────────────
# La v0.2 cambió sólo `brand.ftl` y el resultado se vio en pantalla: el TÍTULO de la ventana decía
# «New Tab — atuq» y la PÁGINA seguía mostrando el logo y la palabra «Nightly». La lección es que el
# branding de Gecko vive en tres sitios y sólo uno es texto FTL:
#
# · `brand.ftl` — las cadenas nuevas (título de ventana, menús). Ya estaba.
# · `brand.properties` — las cadenas VIEJAS, formato heredado. Seguía diciendo Nightly.
# · los PNG y SVG de `chrome/browser/content/branding/` — TODO lo que se ve: el favicon de las
# páginas internas (ese orbe azul en la pestaña), el logo de about:, y el «wordmark» que es una
# IMAGEN con la palabra dibujada, no un texto traducible.
#
# Cada imagen se reemplaza por otra de LAS MISMAS DIMENSIONES: son tamaños que el CSS del chrome da
# por sentados, y meter un PNG de otro tamaño descoloca la página en vez de rebrandearla.
IMAGENES = {
"chrome/browser/content/branding/icon16.png": "atuq16.png",
"chrome/browser/content/branding/icon32.png": "atuq32.png",
"chrome/browser/content/branding/icon48.png": "atuq48.png",
"chrome/browser/content/branding/icon64.png": "atuq64.png",
"chrome/browser/content/branding/icon128.png": "atuq128.png",
"chrome/browser/content/branding/about-logo.png": "atuq192.png",
"chrome/browser/content/branding/about-logo@2x.png": "atuq384.png",
# La variante «private» existe para distinguir la ventana privada. Se usa el mismo medallón a
# propósito: inventar una segunda marca para un modo del navegador es ruido, y el modo ya se
# distingue por su propio chrome.
"chrome/browser/content/branding/about-logo-private.png": "atuq192.png",
"chrome/browser/content/branding/about-logo-private@2x.png": "atuq384.png",
"chrome/browser/content/branding/about.png": "atuq-about-300x236.png",
}
def reemplazos_branding():
r = {}
for destino, fuente in IMAGENES.items():
ruta = os.path.join(OVERLAY, "branding", "icons", fuente)
if not os.path.isfile(ruta) or os.path.getsize(ruta) == 0:
fatal(f"falta o está vacío el asset {ruta}")
with open(ruta, "rb") as fh:
r[destino] = fh.read()
for destino, fuente in (
("localization/en-US/branding/brand.ftl", "brand.ftl"),
("chrome/en-US/locale/branding/brand.properties", "brand.properties"),
("chrome/browser/content/branding/about-wordmark.svg", "wordmark.svg"),
("chrome/browser/content/branding/firefox-wordmark.svg", "wordmark.svg"),
):
with open(os.path.join(OVERLAY, "branding", fuente), "rb") as fh:
r[destino] = fh.read()
return r
# ── 4.bis La extensión de sistema: página de inicio y pestaña nueva ────────────────────────────
# POR QUÉ UNA EXTENSIÓN Y NO UNA PREF. `browser.startup.homepage` acepta una URL, pero la pestaña
# NUEVA no se puede redirigir con una pref desde hace años: el único mecanismo soportado es
@@ -280,12 +329,7 @@ def main():
huella = huella_overlay()
bid = build_id(huella)
claves = rebrandear_application_ini(bid)
with open(os.path.join(OVERLAY, "branding", "brand.ftl"), "rb") as fh:
brand = fh.read()
n = repack_omni(
os.path.join(APPDIR, "browser", "omni.ja"),
{"localization/en-US/branding/brand.ftl": brand},
)
n = repack_omni(os.path.join(APPDIR, "browser", "omni.ja"), reemplazos_branding())
iconos = escribir_iconos()
binarios = renombrar_binarios()
# Después del renombrado: los ficheros ya se llaman atuq/atuq-bin.
@@ -295,6 +339,7 @@ def main():
print(f"rebrand: overlay {huella[:16]}… ⇒ BuildID {bid}")
print(f"rebrand: application.ini {sorted(claves)}")
print(f"rebrand: browser/omni.ja re-empacado, {n} entradas, orden y STORED preservados")
print(f"rebrand: branding dentro del zip — {len(IMAGENES)} imágenes + brand.ftl + brand.properties + 2 wordmarks")
print(f"rebrand: {len(iconos)} iconos escritos ({', '.join(str(s) for s in TAMANOS)} px)")
print(f"rebrand: binarios {', '.join(binarios)} (+ symlink firefox → {MARCA})")
for l in parches: