Pueblos libres: la bala rota en horizontal, con contorno y volumen en negro

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
hacklab 2026-10-14 21:48:05 +02:00
parent 9afe769758
commit 1d0a86acbf
14 changed files with 40 additions and 34 deletions

View file

@ -56,7 +56,7 @@ Borrador para la asamblea en [`docs/ideario.md`](docs/ideario.md). Propuesta: **
2. **Dibujo** (el boceto 5, el cruce) y tres botones: Encuentra tu acampada (al mapa), Síguelas (al panel) y Monta una en tu ciudad (a cómo nos organizamos y el contacto). En móvil van en columna y a todo lo ancho.
3. **Síguelas**: un panel como el del deck, con el árbol de colectivos, una columna por acampada con sus cuentas de verdad y un mapa. Internacional en takethestreet.net y estatal en tomalacalle.net. En móvil va una acampada por fila.
4. **Dónde estamos**: cifras (ciudades, países, desde el 26/09) y un mapa que se mueve y se amplía: Leaflet 1.9.4 (copiado en `js/leaflet/`, sin CDN) con las teselas de OpenStreetMap, y botones para saltar a España o Europa, Canarias e India. Las teselas se piden a tile.openstreetmap.org, que ve la IP de quien mira el mapa. Sin JavaScript se ve un mapa SVG fijo con base de Natural Earth. El faro marca las acampadas, el círculo discontinuo las convocadas, el punto negro las grandes protestas y el gris las levantadas. Cada punto abre una ventanita con su web, cuenta o noticia y un enlace a su tarjeta en «Acampadas».
5. **Cinco ejes**: una tarjeta por eje, con un símbolo pintado con spray en su color: *Hogar*, una casa, en naranja; *Emergencia climática*, un planeta que gotea, en verde; *Rompiendo fronteras*, una valla abierta, en amarillo; *Pueblos libres*, una bala rota, en azul; *Igualdad*, el símbolo feminista, en violeta.
5. **Cinco ejes**: una tarjeta por eje, con un símbolo pintado con spray en su color: *Hogar*, una casa, en naranja; *Emergencia climática*, un planeta que gotea, en verde; *Rompiendo fronteras*, una valla abierta, en amarillo; *Pueblos libres*, una bala rota en horizontal con contorno negro, en azul; *Igualdad*, el símbolo feminista, en violeta.
6. **Quiénes somos**: dos párrafos, de Sol a todas las luchas.
7. **Acampadas**: por país en takethestreet.net y por territorio en tomalacalle.net, más «¿Y tu ciudad?».
8. **Cómo nos organizamos**, con el contacto para montar una acampada.

View file

@ -111,7 +111,7 @@
<p>Regularización, fin de las redadas racistas y de los CIE, y los mismos derechos para quien vive aquí.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Pueblos libres</h3>
<p class="lema">No a la guerra.</p>
<p>Ningún pueblo bajo las bombas ni bajo la ocupación. Más casas, menos tanques: dinero para la vida y no para la guerra, y fin del comercio de armas. Con Palestina, alto y claro.</p>

View file

@ -111,7 +111,7 @@
<p>Régularisation, fin des rafles racistes et des centres de rétention, et les mêmes droits pour toutes les personnes qui vivent ici.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Peuples libres</h3>
<p class="lema">Non à la guerre.</p>
<p>Aucun peuple sous les bombes ni sous l'occupation. Plus de logements, moins de chars&nbsp;: de l'argent pour la vie et pas pour la guerre, et fin du commerce des armes. Avec la Palestine, haut et fort.</p>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Before After
Before After

View file

@ -111,7 +111,7 @@
<p>Regularisation, an end to racist raids and detention centres, and equal rights for everyone who lives here.</p>
</article>
<article class="eje e-pueblos">
<img src="img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Free peoples</h3>
<p class="lema">No to war.</p>
<p>No people under bombs or occupation. More homes, fewer tanks: money for life, not for war, and an end to the arms trade. With Palestine, loud and clear.</p>

View file

@ -111,7 +111,7 @@
<p>Regolarizzazione, stop ai rastrellamenti razzisti e ai CPR, e gli stessi diritti per chi vive qui.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Popoli liberi</h3>
<p class="lema">No alla guerra.</p>
<p>Nessun popolo sotto le bombe né sotto occupazione. Più case, meno carri armati: soldi per la vita e non per la guerra, e stop al commercio di armi. Con la Palestina, forte e chiaro.</p>

View file

@ -111,7 +111,7 @@
<p>Regularização, fim das rusgas racistas e dos centros de detenção, e os mesmos direitos para quem cá vive.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Povos livres</h3>
<p class="lema">Não à guerra.</p>
<p>Nenhum povo debaixo das bombas nem da ocupação. Mais casas, menos tanques: dinheiro para a vida e não para a guerra, e fim do comércio de armas. Com a Palestina, alto e bom som.</p>

View file

@ -131,7 +131,7 @@
<p>Regularisation, an end to racist raids and detention centres, and equal rights for everyone who lives here.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Free peoples</h3>
<p class="lema">No to war.</p>
<p>No people under bombs or occupation. More homes, fewer tanks: money for life, not for war, and an end to the arms trade. With Palestine, loud and clear.</p>

View file

@ -131,7 +131,7 @@
<p>Régularisation, fin des rafles racistes et des centres de rétention, et les mêmes droits pour toutes les personnes qui vivent ici.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Peuples libres</h3>
<p class="lema">Non à la guerre.</p>
<p>Aucun peuple sous les bombes ni sous l'occupation. Plus de logements, moins de chars&nbsp;: de l'argent pour la vie et pas pour la guerre, et fin du commerce des armes. Avec la Palestine, haut et fort.</p>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Before After
Before After

View file

@ -131,7 +131,7 @@
<p>Regularización, fin de las redadas racistas y de los CIE, y los mismos derechos para quien vive aquí.</p>
</article>
<article class="eje e-pueblos">
<img src="img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Pueblos libres</h3>
<p class="lema">No a la guerra.</p>
<p>Ningún pueblo bajo las bombas ni bajo la ocupación. Más casas, menos tanques: dinero para la vida y no para la guerra, y fin del comercio de armas. Con Palestina, alto y claro.</p>

View file

@ -131,7 +131,7 @@
<p>Regolarizzazione, stop ai rastrellamenti razzisti e ai CPR, e gli stessi diritti per chi vive qui.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Popoli liberi</h3>
<p class="lema">No alla guerra.</p>
<p>Nessun popolo sotto le bombe né sotto occupazione. Più case, meno carri armati: soldi per la vita e non per la guerra, e stop al commercio di armi. Con la Palestina, forte e chiaro.</p>

View file

@ -131,7 +131,7 @@
<p>Regularização, fim das rusgas racistas e dos centros de detenção, e os mesmos direitos para quem cá vive.</p>
</article>
<article class="eje e-pueblos">
<img src="../img/eje-pueblos.svg?v=9db4a0b1" alt="">
<img src="../img/eje-pueblos.svg?v=2df2f144" alt="">
<h3>Povos livres</h3>
<p class="lema">Não à guerra.</p>
<p>Nenhum povo debaixo das bombas nem da ocupação. Mais casas, menos tanques: dinheiro para a vida e não para a guerra, e fim do comércio de armas. Com a Palestina, alto e bom som.</p>

View file

@ -120,27 +120,33 @@ def girar(pts, ang, ox, oy, dx, dy):
return [(ox + (x - ox) * ca - (y - oy) * sa + dx, oy + (x - ox) * sa + (y - oy) * ca + dy) for x, y in pts]
def pueblos(o, col):
# Una bala rota: la punta salta hacia un lado y el casquillo se queda, con chispas en el corte.
punta = [(70, 30), (76, 35), (81, 43), (84, 52), (85, 62), (85, 80), (78, 77), (72, 82), (64, 76), (55, 79), (55, 62), (56, 52), (59, 43), (64, 35)]
grieta_a = [(85, 80), (78, 77), (72, 82), (64, 76), (55, 79)]
casquillo = [(55, 90), (63, 86), (70, 92), (77, 86), (85, 90), (85, 128), (55, 128)]
grieta_b = [(55, 90), (63, 86), (70, 92), (77, 86), (85, 90)]
culote = [(52, 132), (88, 132), (88, 150), (52, 150)]
giro_a = lambda pts: girar(pts, -.38, 70, 80, -4, 6)
giro_b = lambda pts: girar(pts, .08, 70, 120, 6, 8)
relleno(o, giro_a(punta), col)
linea(o, giro_a(punta[10:] + punta[:6]), col, 3)
linea(o, giro_a(grieta_a), col, 3.5)
relleno(o, giro_b(casquillo), col)
relleno(o, giro_b(culote), col)
linea(o, giro_b([(55, 90), (55, 128), (52, 132), (52, 150), (88, 150), (88, 132), (85, 128), (85, 90)]), col, 3)
linea(o, giro_b(grieta_b), col, 3.5)
for a in (-.5, 0, .45):
linea(o, [(96 + 6 * math.cos(a), 92 + 6 * math.sin(a)), (96 + 20 * math.cos(a), 92 + 20 * math.sin(a))], col, 4)
for a in (2.7, 3.2):
linea(o, [(46 + 6 * math.cos(a), 96 + 6 * math.sin(a)), (46 + 18 * math.cos(a), 96 + 18 * math.sin(a))], col, 4)
for x, l in ((60, 12), (74, 18), (84, 8)):
chorreon(o, x, 160, l, col)
# Una bala rota en horizontal: el casquillo a la izquierda y la punta que salta hacia la derecha.
# Contorno y líneas de volumen en negro para que tenga relieve.
ink = "#111"
o.append('<g transform="translate(0 -30) scale(1 1.35)">')
casquillo = [(14, 74), (60, 74), (64, 80), (59, 86), (65, 93), (60, 100), (62, 106), (14, 106)]
culote = [(6, 70), (14, 70), (14, 110), (6, 110)]
punta = [(76, 77), (98, 77), (112, 79), (124, 84), (132, 91), (124, 98), (112, 103), (98, 105), (76, 105), (80, 99), (74, 92), (79, 86), (73, 80)]
giro = lambda pts: girar(pts, -.16, 76, 91, 2, -10)
relleno(o, casquillo, col)
relleno(o, culote, col)
relleno(o, giro(punta), col)
linea(o, casquillo + casquillo[:1], ink, 3)
linea(o, culote + culote[:1], ink, 3)
linea(o, giro(punta + punta[:1]), ink, 3)
# Volumen: ranura del casquillo, sombra abajo y brillo arriba
linea(o, [(20, 75), (20, 105)], ink, 2.5)
linea(o, [(24, 100), (56, 100)], ink, 2.5)
linea(o, giro([(98, 78), (98, 104)]), ink, 2.5)
linea(o, giro([(84, 100), (112, 100), (124, 95)]), ink, 2.5)
linea(o, [(26, 80), (50, 80)], "#fff", 2.5)
linea(o, giro([(86, 82), (110, 83)]), "#fff", 2.5)
# Chispas en el corte
for a in (-1.9, -1.4, 1.5, 2.0):
linea(o, [(69 + 8 * math.cos(a), 90 + 8 * math.sin(a)), (69 + 22 * math.cos(a), 90 + 22 * math.sin(a))], col, 4)
for x, l in ((24, 14), (40, 22), (54, 10)):
chorreon(o, x, 110, l, col)
o.append('</g>')
os.makedirs(OUT, exist_ok=True)
for n, (nombre, col) in enumerate(EJES.items()):