# ACRIB — Asociación Casa Românească de las Islas Baleares

![ACRIB](https://acrib.es/wp-content/uploads/2026/05/constitucion-acrib.jpg)

**Website:** [acrib.es](https://acrib.es)
**Stack:** WordPress 6.9.4 · PHP 8.5 · Kadence theme (free) · Polylang 3.8.4 · Contact Form 7 · WP Super Cache

---

## Overview

ACRIB is the association of Romanian entrepreneurs and professionals in the Balearic Islands. The site is trilingual (Spanish, Romanian, English) and serves as the public face of the association — presenting its history, benefits, events, and a membership contact form.

---

## Architecture

| Layer | Detail |
|---|---|
| Hosting | aaPanel / BT-Panel, Nginx, PHP 8.5 FPM |
| Server access | Tailscale VPN → `root@maagar` |
| WP root | `/www/wwwroot/acrib.es/` |
| WP-CLI | `/usr/local/bin/wp --allow-root` |
| Cache | WP Super Cache — purge: `rm -rf wp-content/cache/supercache/` |
| Git remote | SSH key at `/root/.ssh/id_ed25519` |

### Polylang language setup

| Language | Slug | Front page ID | About page ID | Nav menu ID |
|---|---|---|---|---|
| Spanish (es) | `/` | 5 | 29 | Primary (default) |
| Romanian (ro) | `/ro/` | 33 | 69 | Nav RO (ID 16) |
| English (en) | `/en/` | 34 | 70 | Nav EN (ID 17) |

Language switcher: flags-only, injected as a custom nav menu item in each menu.

---

## MU-Plugin: `acrib-core.php`

Location: `wp-content/mu-plugins/acrib-core.php` — always-on, no activation required.

**Current version:** 1.4

### Features

- **Transparent header on homepage + translations** — `body_class` filter at priority 999 removes Kadence's `non-transparent-header` class and adds `transparent-header` / `mobile-transparent-header`. Detects Polylang-translated front pages via `pll_get_post_translations()`.
- **Full-width / title-hide CSS** — reads `_kadence_post_layout` post meta and injects page-specific CSS to hide the Kadence title section and remove content padding (Kadence free workaround).
- **Homepage critical CSS** — injected via `wp_head` for all front-page variants (ES/RO/EN). Positions header absolutely over the hero, removes Kadence content margins.
- **Custom footer** — replaces Kadence's default copyright footer with ACRIB branding, legal links (Aviso Legal, Privacidad, Cookies), Facebook icon link, and "Hosted by Cloud Host" credit.
- **Security hardening** — `X-Frame-Options`, `X-Content-Type-Options`, `Referrer-Policy`, `Permissions-Policy` headers; XML-RPC disabled; REST API user enumeration blocked; generator tag removed.
- **Performance** — emoji scripts removed (~20 KB saving); post revisions capped at 3.

---

## Pages

| ID | Slug | Language | Description |
|---|---|---|---|
| 5 | `/` | ES | Spanish homepage (hero, sections, CF7 form) |
| 33 | `/ro/` | RO | Romanian homepage |
| 34 | `/en/` | EN | English homepage |
| 29 | `/sobre-acrib/` | ES | History timeline (10 milestones) |
| 69 | `/ro/despre-acrib/` | RO | Romanian timeline translation |
| 70 | `/en/about-acrib/` | EN | English timeline translation |

### Homepage sections (all three languages)

1. **Hero** — full-viewport cover block with transparent header overlay
2. **La Asociación / Asociația / The Association** — mission statement
3. **Pilares / Piloni / Pillars** — three-column values
4. **Beneficios / Beneficii / Benefits** — membership advantages
5. **Eventos / Evenimente / Events** — upcoming events placeholder
6. **Miembros / Membri / Members** — founding member logos
7. **Hazte Socio / Devino Membru / Join** — CTA with membership tiers
8. **Contacto / Contact / Contact** — Contact Form 7 shortcode

Contact forms: ES form ID 6 (`acrib-contact`), RO form ID 61 (`acrib-contact-ro`), EN form ID 62 (`acrib-contact-en`).

---

## History Timeline (`/sobre-acrib/`)

The timeline is embedded as a `<!-- wp:html -->` block with self-contained CSS and a vanilla-JS lightbox. All three language versions share identical HTML structure.

### CSS layout

- Alternating left/right cards, 40% wide, 10% margin each side
- Center timeline line with gradient (navy → gold → burgundy)
- Cards: flex layout — thumbnail (130×110 px, `object-fit:cover`) + text
  - Odd items (left-side cards): `flex-direction:row-reverse` → thumbnail on the right (toward timeline), text on the left
  - Even items: thumbnail left, text right
- Thumbnails are clickable (lightbox via `#acrib-lb` overlay)
- Mobile (≤640px): single-column, full-width images

### Lightbox

Vanilla JS, no dependencies. Overlay div `#acrib-lb` injected into each timeline page's `wp:html` block. Opens on thumbnail click, closes on overlay click or `Escape` key. Locks body scroll while open.

### Timeline milestones (ES, newest → oldest)

| Date | Event |
|---|---|
| Jan–Mar 2026 | Tres Primeros Eventos del Club |
| 3 Dec 2025 | Proyección de Cine Rumano (ICR Madrid) |
| Nov 2025 | Bandera Rumana en el Paseo Sagrera |
| Autumn 2025 | Seminario Emil Racoviță — Cuevas del Drach |
| Oct 2025 | El Atlas de la Belleza — Mihaela Noroc |
| 2025 | Evento Nostalgia |
| Dec 2024–2025 | Constitución Oficial de ACRIB |
| 29 Nov–2 Dec 2024 | La Bandera Rumana Ondea en Mallorca |
| 26 Mar 2024 | **La Semilla de ACRIB** — Jornada en la Cambra de Comerç *(founding event — burgundy dot)* |
| 2023–2024 | Los Primeros Pasos (meetings with PIMEM, Palma Activa) |

---

## Media Library

Key uploaded images (all in `wp-content/uploads/2026/05/`):

| File | WP ID | Used in |
|---|---|---|
| `nostalgia-acrib.jpg` | 65 | Timeline: Nostalgia event |
| `atlas-belleza-acrib.jpg` | 66 | Timeline: Atlas de la Belleza |
| `racovita-acrib.jpg` | 67 | Timeline: Emil Racoviță seminar |
| `bandera-acrib.jpg` | 75 | Timeline: Bandera Nov 2024 + Nov 2025 Paseo Sagrera |
| `palma-activa-acrib.jpg` | 76 | Timeline: Primeros Pasos |
| `cambra-acrib.png` | 77 | Timeline: La Semilla / Cambra de Comerç |
| `eventos-2026-acrib.jpg` | 78 | Timeline: Tres Primeros Eventos 2026 |
| `cine-acrib.jpg` | 79 | Timeline: Proyección Cine Rumano |
| `constitucion-acrib.jpg` | 80 | Timeline: Constitución Oficial |

> **Note:** Facebook CDN URLs expire (the `oe=` parameter is a Unix timestamp). Always download Facebook images to the server and upload to WP Media Library before using them in content.

---

## Common Operations

### Deploy a PHP script to WordPress
```bash
scp -i /root/.ssh/id_ed25519 script.php root@maagar:/tmp/
ssh -i /root/.ssh/id_ed25519 root@maagar \
  "/usr/local/bin/wp --path=/www/wwwroot/acrib.es --allow-root eval-file /tmp/script.php"
```

> **Tip:** Do not embed large strings (CSS, JS, HTML) directly in scripts run via `eval-file`. PHP's `eval()` silently fails on large single-quoted strings. Use `file_get_contents('/tmp/file.txt')` instead.

### Purge cache
```bash
ssh root@maagar "rm -rf /www/wwwroot/acrib.es/wp-content/cache/supercache/"
```

### WP-CLI examples
```bash
# Get post content
wp --path=/www/wwwroot/acrib.es --allow-root post get 29 --field=post_content

# Update post
wp --path=/www/wwwroot/acrib.es --allow-root post update 29 --post_content="$(cat file.html)"

# Run arbitrary PHP
wp --path=/www/wwwroot/acrib.es --allow-root eval 'echo get_bloginfo("url");'
```

### Update MU-plugin
```bash
scp -i /root/.ssh/id_ed25519 acrib-core.php \
  root@maagar:/www/wwwroot/acrib.es/wp-content/mu-plugins/acrib-core.php
```

---

## Git History

| Commit | Description |
|---|---|
| `1473d34` | fix: timeline full-width single-column layout + RO language files |
| `b235608` | feat: RO/EN timeline translations, Facebook page link, real ACRIB history |
| `34714e9` | feat: multilingual support — RO/EN translations and menu fixes |
| `0e03636` | fix: extend Kadence title-section hide to all pages with title:hide meta |
| `430defd` | feat: hero fix, Kadence footer removal, Sobre ACRIB timeline, Novedades blog, Polylang |

---

## Facebook

ACRIB Facebook page: [facebook.com/profile.php?id=61583585888787](https://www.facebook.com/profile.php?id=61583585888787)
Linked in the site footer via SVG icon (injected by MU-plugin `wp_footer` action).

---

*Site built and maintained by [Cloud Host](https://cloudhost.es)*
