Salta al contingut principal

Disseny oficial UB

Cada peça de web.ub.edu, a punt per posar al teu projecte

Capçaleres, notícies, fitxes d'estudi, formularis de contacte, peus de pàgina... Tot el que veus al web de la Universitat, ja resolt: amb el seu codi, les seves variants i els seus criteris d'accessibilitat. Copia, enganxa i el teu projecte ja s'assembla al web oficial de la UB.

Taula de treball amb ordinador portàtil i elements de comunicació digital

Com es fa servir: obre la fitxa del component que et cal, copia el bloc "Codi HTML + Tailwind" i enganxa'l al teu projecte (o prova'l primer a Tailwind Play amb la configuració de /tokens). La franja taronja de cada fitxa t'indica quan triar-lo i què no cal reinventar. Si qui munta la pàgina és un agent d'IA, pot llegir directament llms-components.txt — el mateix catàleg, en un sol fitxer pensat perquè una IA el llegeixi d'un cop.

UbAnchorIndex

Índex d'ancoratges de pàgina

Quan i com fer-lo servir: Each `item.href` must match an `id` present on the same page (e.g. `#transferencia` on a `UbContentSection` heading); the click handler already does `scrollIntoView` and updates the URL, no extra wiring needed. Do not nest it inside a container with `overflow: hidden` - the mobile disclosure (`details`) needs to be able to grow below the button.

Correcció aplicada: Reprodueix el fragment real `frg-navigation`: en desktop és una fila d'enllaços amb separadors verticals, i en mòbil es converteix en un desplegable natiu (`details`/`summary`) amb tecla i lector de pantalla ja gestionats, en lloc del `$(...).collapse()` de jQuery de l'original.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<nav aria-label="Índex" class="">
  <div class="hidden lg:block">
    <h2 class="mb-2 mt-12 text-lg font-extrabold leading-[27px] text-ub-text">Índex</h2>
      <ul class="mb-2 flex flex-wrap">
        <li class=" pr-2.5">
          <a href="#transferencia" class="inline-flex items-center text-lg font-extrabold leading-[27px] text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue aria-[current=location]:text-ub-blue">Transferència</a>
          </li>
          <li class="border-l border-neutral-300 pl-2.5 pr-2.5">
            <a href="#emprenedoria" class="inline-flex items-center text-lg font-extrabold leading-[27px] text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue aria-[current=location]:text-ub-blue">Emprenedoria</a>
            </li>
            <li class="border-l border-neutral-300 pl-2.5 pr-2.5">
              <a href="#talent" class="inline-flex items-center text-lg font-extrabold leading-[27px] text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue aria-[current=location]:text-ub-blue">Aposta pel talent</a>
              </li>
              <li class="border-l border-neutral-300 pl-2.5 ">
                <a href="#mecenatge" class="inline-flex items-center text-lg font-extrabold leading-[27px] text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue aria-[current=location]:text-ub-blue">Mecenatge</a>
                </li>
              </ul>
            </div>
            <details class="group border-y-[3px] border-[#999999] lg:hidden">
              <summary class="flex cursor-pointer list-none items-center justify-between px-4 py-2 text-2xl font-extrabold leading-7 text-ub-text marker:hidden [&amp;::-webkit-details-marker]:hidden">Índex<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0 group-open:rotate-180">
                <path d="m5 7.5 5 5 5-5" stroke-linecap="round" stroke-linejoin="round">
                </path>
              </svg>
            </summary>
            <ul class="space-y-[18px] px-4 pb-3 pt-6 shadow-lg">
              <li>
                <a href="#transferencia" class="text-sm font-normal leading-[18px] text-ub-text hover:text-ub-blue aria-[current=location]:text-ub-blue">Transferència</a>
                </li>
                <li>
                  <a href="#emprenedoria" class="text-sm font-normal leading-[18px] text-ub-text hover:text-ub-blue aria-[current=location]:text-ub-blue">Emprenedoria</a>
                  </li>
                  <li>
                    <a href="#talent" class="text-sm font-normal leading-[18px] text-ub-text hover:text-ub-blue aria-[current=location]:text-ub-blue">Aposta pel talent</a>
                    </li>
                    <li>
                      <a href="#mecenatge" class="text-sm font-normal leading-[18px] text-ub-text hover:text-ub-blue aria-[current=location]:text-ub-blue">Mecenatge</a>
                      </li>
                    </ul>
                  </details>
                </nav>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.anchorIndex",
  "id": "index",
  "title": "Índex",
  "items": [
    {
      "label": "Transferència",
      "href": "#transferencia"
    },
    {
      "label": "Emprenedoria",
      "href": "#emprenedoria"
    },
    {
      "label": "Aposta pel talent",
      "href": "#talent"
    },
    {
      "label": "Mecenatge",
      "href": "#mecenatge"
    }
  ]
}
Props i codi font (UbAnchorIndex)
src/components/ub/UbAnchorIndex.tsx ↗
PropTipusPer defecte
titlestringÍndex
items *UbAnchorIndexItem[]
classNamestring
headingLevelenumh2

UbBreadcrumb

Fil d'Ariadna

Quan i com fer-lo servir: Use plain `href` (absolute URL), not `to` - `to` renders a react-router `Link`, which only works when the page is mounted inside a `<Router>`; every real UB breadcrumb trail is a chain of absolute `web.ub.edu` URLs anyway. The last item (current page) must have neither `href` nor `to` so it renders as inert text, not a link. Corresponds to the page-level JSON `breadcrumbs` array (see STATIC_PAGE_CONTRACT.md) - it is not itself a `sections[]` entry, so there is no `ub.*` section `type` for it.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<nav aria-label="Fil d&#x27;Ariadna" class="mb-8 text-[14px] leading-[21px] text-[#646464] font-roboto">
  <ol class="flex flex-wrap items-center gap-y-2">
    <li class="flex items-center">
      <a href="https://web.ub.edu/ca" class="text-[#646464] underline decoration-transparent hover:text-ub-blue hover:decoration-current">Universitat de Barcelona</a>
      </li>
      <li class="flex items-center">
        <span aria-hidden="true" class="mx-[12.8px] text-[#646464]">/</span>
          <a href="https://web.ub.edu/ca/web/estudis" class="text-[#646464] underline decoration-transparent hover:text-ub-blue hover:decoration-current">Estudis</a>
          </li>
          <li class="flex items-center">
            <span aria-hidden="true" class="mx-[12.8px] text-[#646464]">/</span>
              <a href="https://web.ub.edu/ca/web/estudis/graus" class="text-[#646464] underline decoration-transparent hover:text-ub-blue hover:decoration-current">Graus</a>
              </li>
              <li class="flex items-center">
                <span aria-hidden="true" class="mx-[12.8px] text-[#646464]">/</span>
                  <a href="https://web.ub.edu/ca/web/estudis/cercador-graus" class="text-[#646464] underline decoration-transparent hover:text-ub-blue hover:decoration-current">Cercador de graus</a>
                  </li>
                  <li class="flex items-center">
                    <span aria-hidden="true" class="mx-[12.8px] text-[#646464]">/</span>
                      <span aria-current="page" class="font-bold text-ub-text">Ciències Biomèdiques - G1090</span>
                      </li>
                    </ol>
                  </nav>
Props i codi font (UbBreadcrumb)
src/components/ub/UbBreadcrumb.tsx ↗
PropTipusPer defecte
items *UbBreadcrumbItem[]

UbFooter

Peu de pàgina institucional

Quan i com fer-lo servir: This example includes the complete real set (8 social networks, 5 partner logos) - not a reduced sample. Paste it as-is; do not remove any link/network/logo.

Correcció aplicada: `UbFooter` és obligatori a totes les webs de la UB, no opcional: reprodueix el peu de dues bandes (enllaços legals/recursos + destacat, després xarxes socials + logos de partners) mesurat per píxel a `afc.ub.edu`. Les graelles desktop comencen a `lg`; activar-les a 768px feia que la fila social forcés 1112px d'amplada.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/marca_peu_150.png.jpg/d1edc411-ab53-7e7d-88a5-866227bab7f2?t=1669825612958"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/Instagram.svg/7a2e1bad-0842-d3f1-065c-04899bc3f582?t=1662540803573"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/Linkedn.svg/fa29292a-02d1-824b-3f68-c5e6b1ea1c83?t=1662540803153"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/Facebook.svg/60ce83b7-72e4-4180-17d6-13c87b7230dc?t=1662540804143"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/shutterstock.png/0d86ff45-4a76-1e84-4fb7-a413ac1c814e?t=1732124049543"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2710030/2917470/tiktok-icon-color.svg/d91523b2-2bed-5bd9-161c-04fe8de712c5?t=1671698372991"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/Youtube.svg/97b61596-a3f6-1297-30f3-41bf5f9b37c3?t=1662540803381"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/ivoox.svg.png/fb63b95f-3485-4af8-2cd5-c1be31f6daa7?t=1761728930729"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/Telegram.svg/6fdf4219-5e05-a873-0237-b75a86a29d8a?t=1669209124876"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/icona+UBtv.svg/50190092-065f-cb7c-a2d9-49e3805588ae?t=1733217745138"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/charm-eu.png/acfeb475-bbbc-d633-5207-c7eb136a07f9?t=1706877758374"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/leru.svg/86b79a07-9ec5-05da-a802-594f31658595?t=1666252319789"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/xarxa-vives.svg/b88fd4f8-a2ad-a899-1082-2e122724788d?t=1669287898780"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/hr.svg/f01a0bc8-fb54-444b-e30e-2648a9e172ba?t=1666175234547"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/MicrosoftTeams-image.png/97926250-afcb-1405-173d-2ac72a9fed60?t=1677674794425"/>
<footer class="mb-4 mt-16 border-t border-ub-line bg-white text-black ">
  <div class="w-full border-b border-ub-line">
    <div class="mx-auto grid min-h-[154px] w-full max-w-[1430px] px-[15px] lg:grid-cols-[5fr_2fr_2fr_3fr]">
      <a href="https://web.ub.edu/" aria-label="Universitat de Barcelona" class="flex items-start pt-[18px]">
        <img src="https://web.ub.edu/documents/2685349/2686580/marca_peu_150.png.jpg/d1edc411-ab53-7e7d-88a5-866227bab7f2?t=1669825612958" alt="Universitat de Barcelona" width="984" height="250" class="h-auto w-[236px]"/>
      </a>
      <nav aria-label="Enllaços legals" class="contents">
        <ul class="flex flex-col gap-[15.2px] px-[15px] pt-[17px] text-base leading-4">
          <li>
            <a href="https://web.ub.edu/ca/avis-legal" class="hover:text-ub-blue">Avís legal</a>
            </li>
            <li>
              <a href="https://web.ub.edu/ca/politica-de-galetes" class="hover:text-ub-blue">Galetes</a>
              </li>
              <li>
                <a href="https://web.ub.edu/ca/accessibilitat" class="hover:text-ub-blue">Accessibilitat</a>
                </li>
                <li>
                  <a href="https://web.ub.edu/ca/contacte" class="hover:text-ub-blue">Contacte</a>
                  </li>
                </ul>
              </nav>
              <nav aria-label="Enllaços de recursos" class="contents">
                <ul class="flex flex-col gap-[15.2px] px-[15px] pt-[17px] text-base leading-4">
                  <li>
                    <a href="https://shop.ub.edu/ca" class="hover:text-ub-blue">Botiga UB</a>
                    </li>
                    <li>
                      <a href="http://www.edicions.ub.edu/ca" class="hover:text-ub-blue">Edicions UB</a>
                      </li>
                      <li>
                        <a href="http://www.ub.edu/espais/ca" class="hover:text-ub-blue">Lloguer d&#x27;espais</a>
                        </li>
                      </ul>
                    </nav>
                    <nav aria-label="Enllaços destacats" class="bg-ub-footer px-[15px] pt-[17px]">
                      <ul class="flex flex-col gap-[30.2px] text-base font-bold leading-4">
                        <li>
                          <a href="https://seu.ub.edu/ca/?lang=ca" class="hover:text-ub-blue">Seu electrònica</a>
                          </li>
                          <li>
                            <a href="https://web.ub.edu/ca/web/transparencia/" class="hover:text-ub-blue">Portal de transparència</a>
                            </li>
                            <li>
                              <a href="https://web.ub.edu/web/etica-integritat-antifrau/inici" class="hover:text-ub-blue">Bústia ètica</a>
                              </li>
                            </ul>
                          </nav>
                        </div>
                      </div>
                      <div class="w-full">
                        <div class="mx-auto grid min-h-[173px] w-full max-w-[1430px] px-[15px] pt-[27px] lg:grid-cols-[5fr_1.25fr_1.25fr_1.25fr_1.75fr_1.5fr]">
                          <nav aria-label="La Universitat a les xarxes">
                            <p class="mb-[13px] text-base leading-4">La Universitat a les xarxes</p>
                              <div class="flex flex-wrap gap-2 lg:flex-nowrap">
                                <a href="https://www.instagram.com/UniBarcelona/" aria-label="Instagram" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/Instagram.svg/7a2e1bad-0842-d3f1-065c-04899bc3f582?t=1662540803573" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://www.linkedin.com/school/university-of-barcelona/mycompany/" aria-label="LinkedIn" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/Linkedn.svg/fa29292a-02d1-824b-3f68-c5e6b1ea1c83?t=1662540803153" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://www.facebook.com/UniversitatdeBarcelona" aria-label="Facebook" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/Facebook.svg/60ce83b7-72e4-4180-17d6-13c87b7230dc?t=1662540804143" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://bsky.app/profile/ub.edu" aria-label="Bluesky" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/shutterstock.png/0d86ff45-4a76-1e84-4fb7-a413ac1c814e?t=1732124049543" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://www.tiktok.com/@unibarcelona" aria-label="TikTok" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2710030/2917470/tiktok-icon-color.svg/d91523b2-2bed-5bd9-161c-04fe8de712c5?t=1671698372991" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://www.youtube.com/user/UB" aria-label="YouTube" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/Youtube.svg/97b61596-a3f6-1297-30f3-41bf5f9b37c3?t=1662540803381" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://www.ivoox.com/podcast-l-8217-actualitat-ub-podcast_sq_f1922725_1.html" aria-label="iVoox" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/ivoox.svg.png/fb63b95f-3485-4af8-2cd5-c1be31f6daa7?t=1761728930729" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://t.me/s/unibarcelona/" aria-label="Telegram" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/Telegram.svg/6fdf4219-5e05-a873-0237-b75a86a29d8a?t=1669209124876" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                                <a href="https://www.ub.edu/ubtv/inici" aria-label="UBtv" class="block h-[41.39px] w-[41.39px] p-[3.2px]">
                                  <img src="https://web.ub.edu/documents/2685349/2686580/icona+UBtv.svg/50190092-065f-cb7c-a2d9-49e3805588ae?t=1733217745138" alt="" class="h-[35px] w-[35px]"/>
                                </a>
                              </div>
                            </nav>
                            <a href="https://web.ub.edu/web/charm-eu" class="flex flex-col items-start py-[3.2px] text-base leading-4 text-ub-muted">
                              <span class="lg:whitespace-nowrap">Fundadora de la</span>
                                <img src="https://web.ub.edu/documents/2685349/2686580/charm-eu.png/acfeb475-bbbc-d633-5207-c7eb136a07f9?t=1706877758374" alt="Charm-EU" class="mt-4 h-[65px] w-auto object-contain"/>
                              </a>
                              <a href="https://web.ub.edu/web/leru/" class="flex flex-col items-start py-[3.2px] text-base leading-4 text-ub-muted">
                                <span class="lg:whitespace-nowrap">Membre de la</span>
                                  <img src="https://web.ub.edu/documents/2685349/2686580/leru.svg/86b79a07-9ec5-05da-a802-594f31658595?t=1666252319789" alt="LERU" class="mt-4 h-[65px] w-auto object-contain"/>
                                </a>
                                <a href="https://www.vives.org/" class="flex flex-col items-start py-[3.2px] text-base leading-4 text-ub-muted">
                                  <span class="lg:whitespace-nowrap">Membre de la</span>
                                    <img src="https://web.ub.edu/documents/2685349/2686580/xarxa-vives.svg/b88fd4f8-a2ad-a899-1082-2e122724788d?t=1669287898780" alt="Xarxa Vives" class="mt-4 h-[65px] w-auto object-contain"/>
                                  </a>
                                  <a href="https://web.ub.edu/web/hr" class="flex flex-col items-start py-[3.2px] text-base leading-4 text-ub-muted">
                                    <span class="lg:whitespace-nowrap">Excel·lència Internacional</span>
                                      <img src="https://web.ub.edu/documents/2685349/2686580/hr.svg/f01a0bc8-fb54-444b-e30e-2648a9e172ba?t=1666175234547" alt="HR" class="mt-4 h-[65px] w-auto object-contain"/>
                                    </a>
                                    <a href="https://erasmus-plus.ec.europa.eu/resources-and-tools/erasmus-charter-for-higher-education" class="flex flex-col items-start py-[3.2px] text-base leading-4 text-ub-muted">
                                      <span class="lg:whitespace-nowrap">Reconeixement europeu</span>
                                        <img src="https://web.ub.edu/documents/2685349/2686580/MicrosoftTeams-image.png/97926250-afcb-1405-173d-2ac72a9fed60?t=1677674794425" alt="Charter for Higher Education" class="mt-4 h-[65px] w-auto object-contain"/>
                                      </a>
                                    </div>
                                  </div>
                                </footer>
Props i codi font (UbFooter)
src/components/ub/UbFooter.tsx ↗
PropTipusPer defecte
logo *{ href: string; src: string; alt: string; width: number; height: number; }
legalLinks *UbFooterLink[]
resourceLinks *UbFooterLink[]
highlightLinks *UbFooterLink[]
socialLinks *UbFooterSocialLink[]
partnerLogos *UbFooterPartnerLogo[]
socialHeadingstringLa Universitat a les xarxes
classNamestring

UbInstitutionalHeader

Capçalera institucional (portada UB.edu)

Quan i com fer-lo servir: `utilityLinks` and `primaryLinks` are the real, fixed sitewide navigation of all of `web.ub.edu`. When reusing this component for a new page, keep them exactly as-is - do not replace them with the new page's own topic. Only the page's own content should change.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Correcció aplicada: `UbInstitutionalHeader` cobreix la variant de portada (`/ca/`, `/ca/la-universitat`): logo, fila d'enllaços d'utilitat amb `UbLanguageSwitcher`, navegació principal ("La UB", "Aprèn", "Investiga"...) i botó de cerca. Separada de `UbSubsiteHeader` perquè cap subseu real mostra ambdues navegacions alhora.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<link rel="preload" as="image" href="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530"/>
<header class="border-b border-ub-line bg-white">
  <div class="relative mx-auto min-h-[134px] max-w-[1430px] max-md:flex max-md:min-h-0 max-md:flex-col max-md:gap-4 max-md:px-[15px] max-md:py-5">
    <a href="https://web.ub.edu/ca/" aria-label="Universitat de Barcelona" class="block w-[236px] max-md:w-[220px] md:absolute md:left-[15px] md:top-[54px]">
      <img src="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175" alt="Universitat de Barcelona" width="268" height="73" class="h-auto w-full"/>
    </a>
    <div class="hidden h-[50px] border-b border-ub-line md:ml-[318px] md:mr-[15px] md:flex md:items-stretch md:justify-end">
      <ul class="flex items-stretch text-sm font-extrabold leading-[21px]">
        <li>
          <a href="https://web.ub.edu/inici" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">UB.EDU</a>
          </li>
          <li>
            <a href="https://web.ub.edu/ca/web/directori" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
              <img src="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089" alt="" class="h-7 w-7"/>Directori</a>
            </li>
            <li>
              <a href="https://intranet.ub.edu/dyn/cms/" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
                <img src="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530" alt="" class="h-7 w-7"/>PTGAS i PDI</a>
              </li>
              <li>
                <a href="https://web.ub.edu/ca/web/estudiants" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
                  <img src="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530" alt="" class="h-7 w-7"/>Estudiants</a>
                </li>
                <li>
                  <details class="group relative ">
                    <summary class="flex h-[50px] cursor-pointer list-none items-center gap-1 px-3 text-sm text-ub-muted [&amp;::-webkit-details-marker]:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">CA<svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4 transition-transform group-open:rotate-180">
                      <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd">
                      </path>
                    </svg>
                  </summary>
                  <ul role="menu" class="absolute right-0 top-full z-10 min-w-[140px] rounded-md border border-ub-line bg-white py-2 shadow-lg">
                    <li>
                      <a lang="ca" href="#" aria-current="true" role="menuitem" class="block px-4 py-2 text-sm hover:bg-ub-panel hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue font-bold text-ub-text">Català</a>
                      </li>
                      <li>
                        <span lang="es" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">Español</span>
                        </li>
                        <li>
                          <span lang="en" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">English</span>
                          </li>
                        </ul>
                      </details>
                    </li>
                  </ul>
                </div>
                <nav aria-label="Navegació principal UB" class="md:ml-[318px] md:mr-[101px] md:flex md:h-[84px] md:items-center">
                  <ul class="flex min-h-[50px] flex-wrap items-center gap-x-6 text-base font-extrabold leading-6">
                    <li>
                      <a href="https://web.ub.edu/ca/la-universitat" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La UB</a>
                      </li>
                      <li>
                        <a href="https://web.ub.edu/ca/apren" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Aprèn</a>
                        </li>
                        <li>
                          <a href="https://web.ub.edu/ca/investiga" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Investiga</a>
                          </li>
                          <li>
                            <a href="https://web.ub.edu/ca/transferencia-emprenedoria" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Transferència i emprenedoria</a>
                            </li>
                            <li>
                              <a href="https://web.ub.edu/ca/viu-la-ub" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Viu la UB</a>
                              </li>
                              <li>
                                <a href="https://web.ub.edu/ca/treballa-collabora" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Treballa i col·labora</a>
                                </li>
                                <li>
                                  <a href="https://web.ub.edu/web/actualitat/" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Actualitat</a>
                                  </li>
                                  <li>
                                    <a href="https://www.ub.edu/575aniversari" class="inline-flex h-10 items-center text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">575è aniversari</a>
                                    </li>
                                  </ul>
                                </nav>
                                <button type="button" aria-label="Caixa de cerca" class="hidden h-[83px] w-[86px] items-center justify-center text-ub-muted hover:text-ub-blue md:absolute md:right-[15px] md:top-[51px] md:flex">
                                  <svg viewBox="0 0 42 42" aria-hidden="true" class="h-[42px] w-[42px]">
                                    <circle cx="18" cy="18" r="12" fill="none" stroke="currentColor" stroke-width="2">
                                    </circle>
                                    <path d="m27 27 10 10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
                                    </path>
                                  </svg>
                                </button>
                              </div>
                            </header>
Props i codi font (UbInstitutionalHeader)
src/components/ub/UbInstitutionalHeader.tsx ↗
PropTipusPer defecte
logo *{ href: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }
utilityLinks *UbHeaderLink[]
languageOptions *UbLanguageOption[]
primaryLinks *UbHeaderLink[]
onSearchClick(() => void)
searchLabelstringCaixa de cerca
classNamestring

UbSubsiteHeader

Capçalera de subseu (Actualitat)

2 variants

Quan i com fer-lo servir: Separate from `UbInstitutionalHeader` - no real subsite shows both navigations at once. `logo`/`utilityLinks`/`languageOptions` are the same sitewide fixed values as `UbInstitutionalHeader` - keep them as-is. Only `title`, `tone`, and `navLinks` change per subsite. Subsite names are bold display titles; keep the documented `font-extrabold` title class and do not rewrite it as normal-weight Roboto.

Quan i com fer-lo servir: Use `tone="orange"` for the Estudis subsite accent color (vs. the default `tone="blue"`). Use `childGroups` (not `children`) for a nav item whose dropdown needs multiple titled columns side by side, e.g. grouping degree links by field - `children` alone only produces a single flat column.

Capçalera de subseu (Actualitat)

Font: Actualitat UB.edu

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Correcció aplicada: El títol i la navegació secundària es veuen com Roboto-Bold a la pàgina real; en aquesta rèplica Tailwind es conserva aquest pes visual amb classes bold/extrabold encara que DevTools pugui exposar el nom de família `Roboto-Bold` de forma distinta al `font-weight` CSS. El panell desplegable d'un ítem amb submenú ocupa tot l'ample del nav amb 3 columnes i un divisor, no un dropdown estret ancorat només a l'ítem. Obrir un desplegable enfosqueix la resta de la pàgina amb una capa blanca al 80% d'opacitat (no un blur). La carcassa desktop comença a `lg`; a tablet els dropdowns es limiten a 15px de cada vora per evitar overflow.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<link rel="preload" as="image" href="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530"/>
<header class="group relative border-b border-ub-line bg-white">
  <div class="relative mx-auto min-h-[134px] max-w-[1430px] max-lg:flex max-lg:min-h-0 max-lg:flex-col max-lg:gap-4 max-lg:px-[15px] max-lg:py-5">
    <a href="https://web.ub.edu/ca/" aria-label="Universitat de Barcelona" class="block w-[236px] max-lg:w-[220px] lg:absolute lg:left-[15px] lg:top-[54px]">
      <img src="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175" alt="Universitat de Barcelona" width="268" height="73" class="h-auto w-full"/>
    </a>
    <div class="hidden h-[50px] border-b border-ub-line lg:ml-[318px] lg:mr-[15px] lg:flex lg:items-stretch lg:justify-end">
      <div class="flex items-stretch text-sm font-extrabold leading-[21px]">
        <a href="https://web.ub.edu/inici" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">UB.EDU</a>
          <a href="https://web.ub.edu/ca/web/directori" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
            <img src="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089" alt="" class="h-7 w-7"/>Directori</a>
            <a href="https://intranet.ub.edu/dyn/cms/" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
              <img src="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530" alt="" class="h-7 w-7"/>PTGAS i PDI</a>
              <a href="https://web.ub.edu/ca/web/estudiants" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
                <img src="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530" alt="" class="h-7 w-7"/>Estudiants</a>
                <details class="group relative ">
                  <summary class="flex h-[50px] cursor-pointer list-none items-center gap-1 px-3 text-sm text-ub-muted [&amp;::-webkit-details-marker]:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">CA<svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4 transition-transform group-open:rotate-180">
                    <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd">
                    </path>
                  </svg>
                </summary>
                <ul role="menu" class="absolute right-0 top-full z-10 min-w-[140px] rounded-md border border-ub-line bg-white py-2 shadow-lg">
                  <li>
                    <a lang="ca" href="#" aria-current="true" role="menuitem" class="block px-4 py-2 text-sm hover:bg-ub-panel hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue font-bold text-ub-text">Català</a>
                    </li>
                    <li>
                      <span lang="es" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">Español</span>
                      </li>
                      <li>
                        <span lang="en" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">English</span>
                        </li>
                      </ul>
                    </details>
                  </div>
                </div>
                <div class="lg:ml-[318px] lg:mr-[101px] lg:flex lg:h-[84px] lg:items-center">
                  <a href="https://web.ub.edu/ca/web/actualitat/" class="text-[44px] font-extrabold leading-[53px] text-ub-text hover:text-ub-blue max-lg:text-[36px] max-lg:leading-[42px]">Actualitat</a>
                  </div>
                  <button type="button" aria-label="Caixa de cerca" class="hidden h-[83px] w-[86px] items-center justify-center text-ub-muted hover:text-ub-blue lg:absolute lg:right-[15px] lg:top-[51px] lg:flex">
                    <svg viewBox="0 0 42 42" aria-hidden="true" class="h-[42px] w-[42px]">
                      <circle cx="18" cy="18" r="12" fill="none" stroke="currentColor" stroke-width="2">
                      </circle>
                      <path d="m27 27 10 10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
                      </path>
                    </svg>
                  </button>
                </div>
                <div class="border-t-4 bg-white border-ub-blue">
                  <nav aria-label="Navegació secundària de Actualitat" class="relative mx-auto max-w-[1430px]">
                    <div class="flex min-h-[43px] flex-wrap items-start pl-[15px] text-base font-extrabold leading-6 lg:pl-[319px]">
                      <a href="https://web.ub.edu/ca/web/actualitat/-/noticies" class="mr-6 inline-flex min-h-[43px] items-center border-b-2 py-2 text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue border-transparent">Notícies</a>
                        <a href="https://web.ub.edu/ca/web/actualitat/-/agenda" class="mr-6 inline-flex min-h-[43px] items-center border-b-2 py-2 text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue border-transparent">Agenda</a>
                          <a href="https://web.ub.edu/ca/web/actualitat/xarxes-socials" class="mr-6 inline-flex min-h-[43px] items-center border-b-2 py-2 text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue border-transparent">Xarxes socials</a>
                            <details class="group relative mr-6" name="subsite-header-nav-dropdown">
                              <summary class="flex min-h-[43px] cursor-pointer list-none items-center gap-1 border-b-2 border-transparent py-2 text-black hover:text-ub-blue [&amp;::-webkit-details-marker]:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue">Sala de premsa<svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4 transition-transform group-open:rotate-180">
                                <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd">
                                </path>
                              </svg>
                            </summary>
                            <div role="menu" class="absolute left-0 top-[43px] z-50 hidden w-[min(720px,calc(100vw-30px))] rounded-b-md border border-black/15 bg-white pb-2 pt-2 shadow group-open:block max-lg:fixed max-lg:left-[15px] max-lg:right-[15px] max-lg:top-auto max-lg:w-auto">
                              <div class="px-5 pb-[21px] text-lg font-extrabold text-ub-text">
                                <a href="https://web.ub.edu/ca/web/actualitat/notes-premsa" class="underline decoration-1 hover:text-ub-blue">Sala de premsa</a>
                                </div>
                                <div class="grid grid-cols-3 divide-x divide-black/15">
                                  <ul class="grid">
                                    <li>
                                      <a href="https://web.ub.edu/ca/web/actualitat/notes-premsa" role="menuitem" class="block px-5 pb-[3px] pt-[2px] text-base font-extrabold text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Notes de premsa</a>
                                      </li>
                                      <li>
                                        <a href="https://web.ub.edu/ca/web/actualitat/opinio-experts" role="menuitem" class="block px-5 pb-[3px] pt-[2px] text-base font-extrabold text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Opinió d&#x27;experts</a>
                                        </li>
                                      </ul>
                                      <div aria-hidden="true">
                                      </div>
                                      <div aria-hidden="true">
                                      </div>
                                    </div>
                                  </div>
                                </details>
                                <a href="https://web.ub.edu/ca/web/actualitat/comunicacio-institucional" class="mr-6 inline-flex min-h-[43px] items-center border-b-2 py-2 text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue border-transparent">La comunicació a la UB</a>
                                </div>
                              </nav>
                            </div>
                            <div aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-full z-40 h-[200vh] bg-white opacity-0 transition-opacity duration-150 group-has-[details[open]]:opacity-80">
                            </div>
                          </header>

Capçalera de subseu (Estudis, taronja + desplegable multi-columna)

Font: Estudis UB.edu

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Universitat de Barcelona
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<link rel="preload" as="image" href="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175"/>
<link rel="preload" as="image" href="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089"/>
<header class="group relative border-b border-ub-line bg-white">
  <div class="relative mx-auto min-h-[134px] max-w-[1430px] max-lg:flex max-lg:min-h-0 max-lg:flex-col max-lg:gap-4 max-lg:px-[15px] max-lg:py-5">
    <a href="https://web.ub.edu/ca/" aria-label="Universitat de Barcelona" class="block w-[236px] max-lg:w-[220px] lg:absolute lg:left-[15px] lg:top-[54px]">
      <img src="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175" alt="Universitat de Barcelona" width="268" height="73" class="h-auto w-full"/>
    </a>
    <div class="hidden h-[50px] border-b border-ub-line lg:ml-[318px] lg:mr-[15px] lg:flex lg:items-stretch lg:justify-end">
      <div class="flex items-stretch text-sm font-extrabold leading-[21px]">
        <a href="https://web.ub.edu/inici" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">UB.EDU</a>
          <a href="https://web.ub.edu/ca/web/directori" class="inline-flex h-[50px] items-center gap-1 px-3 hover:text-ub-blue">
            <img src="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089" alt="" class="h-7 w-7"/>Directori</a>
            <details class="group relative ">
              <summary class="flex h-[50px] cursor-pointer list-none items-center gap-1 px-3 text-sm text-ub-muted [&amp;::-webkit-details-marker]:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">CA<svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4 transition-transform group-open:rotate-180">
                <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd">
                </path>
              </svg>
            </summary>
            <ul role="menu" class="absolute right-0 top-full z-10 min-w-[140px] rounded-md border border-ub-line bg-white py-2 shadow-lg">
              <li>
                <a lang="ca" href="#" aria-current="true" role="menuitem" class="block px-4 py-2 text-sm hover:bg-ub-panel hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue font-bold text-ub-text">Català</a>
                </li>
                <li>
                  <span lang="es" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">Español</span>
                  </li>
                  <li>
                    <span lang="en" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">English</span>
                    </li>
                  </ul>
                </details>
              </div>
            </div>
            <div class="lg:ml-[318px] lg:mr-[101px] lg:flex lg:h-[84px] lg:items-center">
              <a href="https://web.ub.edu/ca/web/estudis" class="text-[44px] font-extrabold leading-[53px] text-ub-text hover:text-ub-blue max-lg:text-[36px] max-lg:leading-[42px]">Estudis</a>
              </div>
              <button type="button" aria-label="Caixa de cerca" class="hidden h-[83px] w-[86px] items-center justify-center text-ub-muted hover:text-ub-blue lg:absolute lg:right-[15px] lg:top-[51px] lg:flex">
                <svg viewBox="0 0 42 42" aria-hidden="true" class="h-[42px] w-[42px]">
                  <circle cx="18" cy="18" r="12" fill="none" stroke="currentColor" stroke-width="2">
                  </circle>
                  <path d="m27 27 10 10" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
                  </path>
                </svg>
              </button>
            </div>
            <div class="border-t-4 bg-white border-ub-orange">
              <nav aria-label="Navegació secundària de Estudis" class="relative mx-auto max-w-[1430px]">
                <div class="flex min-h-[43px] flex-wrap items-start pl-[15px] text-base font-extrabold leading-6 lg:pl-[319px]">
                  <details class="group relative mr-6" name="subsite-header-nav-dropdown">
                    <summary class="flex min-h-[43px] cursor-pointer list-none items-center gap-1 border-b-2 border-transparent py-2 text-black hover:text-ub-blue [&amp;::-webkit-details-marker]:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue">Graus<svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4 transition-transform group-open:rotate-180">
                      <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd">
                      </path>
                    </svg>
                  </summary>
                  <div role="menu" class="absolute left-0 top-[43px] z-50 hidden w-[min(720px,calc(100vw-30px))] border-t-4 border-ub-blue bg-white p-4 shadow-lg group-open:block max-lg:fixed max-lg:left-[15px] max-lg:right-[15px] max-lg:top-auto max-lg:w-auto">
                    <div class="grid gap-6 md:grid-cols-2 lg:grid-cols-4">
                      <section aria-label="Ciències de la salut">
                        <h3 class="mb-2 border-b border-ub-line pb-2 text-xs font-extrabold uppercase leading-4 text-ub-muted">Ciències de la salut</h3>
                          <ul class="grid gap-1">
                            <li>
                              <a href="https://web.ub.edu/ca/web/estudis/grau-medicina" role="menuitem" class="block py-2 text-sm font-extrabold leading-5 text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Medicina</a>
                              </li>
                              <li>
                                <a href="https://web.ub.edu/ca/web/estudis/grau-infermeria" role="menuitem" class="block py-2 text-sm font-extrabold leading-5 text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Infermeria</a>
                                </li>
                              </ul>
                            </section>
                            <section aria-label="Ciències socials">
                              <h3 class="mb-2 border-b border-ub-line pb-2 text-xs font-extrabold uppercase leading-4 text-ub-muted">Ciències socials</h3>
                                <ul class="grid gap-1">
                                  <li>
                                    <a href="https://web.ub.edu/ca/web/estudis/grau-ade" role="menuitem" class="block py-2 text-sm font-extrabold leading-5 text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Administració i Direcció d&#x27;Empreses</a>
                                    </li>
                                    <li>
                                      <a href="https://web.ub.edu/ca/web/estudis/grau-dret" role="menuitem" class="block py-2 text-sm font-extrabold leading-5 text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Dret</a>
                                      </li>
                                    </ul>
                                  </section>
                                </div>
                              </div>
                            </details>
                            <a href="https://web.ub.edu/ca/web/estudis/masters-postgraus" class="mr-6 inline-flex min-h-[43px] items-center border-b-2 py-2 text-black hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-ub-blue border-transparent">Màsters i postgraus</a>
                            </div>
                          </nav>
                        </div>
                        <div aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-full z-40 h-[200vh] bg-white opacity-0 transition-opacity duration-150 group-has-[details[open]]:opacity-80">
                        </div>
                      </header>
Props i codi font (UbSubsiteHeader)
src/components/ub/UbSubsiteHeader.tsx ↗
PropTipusPer defecte
logo *{ href: string; src: string; alt: string; width?: number | undefined; height?: number | undefined; }
utilityLinks *UbHeaderLink[]
languageOptions *UbLanguageOption[]
title *string
titleHrefstring
toneenumblue
navLinks *UbSubsiteNavLink[]
onSearchClick(() => void)
searchLabelstringCaixa de cerca
classNamestring

UbLanguageSwitcher

Selector d'idioma

Quan i com fer-lo servir: Internal piece of the headers (`UbInstitutionalHeader`/`UbSubsiteHeader`), not a standalone `sections[]` entry - it has no `type` of its own in the page contract. Use `disabled: true` (do not omit the option) when content does not exist in that language: it renders a non-interactive item with `aria-disabled`, never a `href="#"` that promises a translation that is not there. Mark exactly one option `current: true`; if none is, the first option is used.

CA
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<details class="group relative ">
  <summary class="flex h-[50px] cursor-pointer list-none items-center gap-1 px-3 text-sm text-ub-muted [&amp;::-webkit-details-marker]:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">CA<svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4 transition-transform group-open:rotate-180">
    <path fill-rule="evenodd" d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z" clip-rule="evenodd">
    </path>
  </svg>
</summary>
<ul role="menu" class="absolute right-0 top-full z-10 min-w-[140px] rounded-md border border-ub-line bg-white py-2 shadow-lg">
  <li>
    <a lang="ca" href="#" aria-current="true" role="menuitem" class="block px-4 py-2 text-sm hover:bg-ub-panel hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue font-bold text-ub-text">Català</a>
    </li>
    <li>
      <span lang="es" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">Español</span>
      </li>
      <li>
        <span lang="en" role="menuitem" aria-disabled="true" title="Contingut no disponible en aquest idioma" class="block cursor-not-allowed px-4 py-2 text-sm text-ub-muted">English</span>
        </li>
      </ul>
    </details>
Props i codi font (UbLanguageSwitcher)
src/components/ub/UbLanguageSwitcher.tsx ↗
PropTipusPer defecte
options *UbLanguageOption[]
classNamestring

UbNavigationCards

Targetes de navegació

2 variants

Quan i com fer-lo servir: Use this for grids of navigation cards or prominent link tiles. When a local JSON section type `ub.navigationCards` exists, map it to `UbNavigationCards`. Preserve `columns`, item order, color `tone`, optional descriptions, images and `duotone` flags. Image cards and plain color cards are both handled by this same component.

Quan i com fer-lo servir: Use `variant="solidTiles"` for a simple grid of solid-color link tiles: no images, no descriptions, centered short title, four columns on desktop. This is the `ub_tpl_tarjetasColor` pattern. Do not use the default `UbNavigationCards` style if the real page shows plain rectangular color tiles rather than taller navigation cards with descriptions or image bands.

Targetes de navegació

Font: Estudis UB.edu
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="grid gap-5 sm:grid-cols-2 lg:grid-cols-3 ">
  <li class="min-w-0">
    <a href="https://web.ub.edu/ca/web/estudis/graus" class="group flex h-full min-h-24 flex-col justify-center rounded-[3px] border px-7 py-5 text-white hover:brightness-95 bg-ub-orange border-ub-orange focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
      <span class="text-lg font-extrabold leading-7 underline decoration-transparent underline-offset-4 group-hover:decoration-current">Graus</span>
      </a>
    </li>
    <li class="min-w-0">
      <a href="https://web.ub.edu/ca/web/estudis/masters-postgraus" class="group flex h-full min-h-24 flex-col justify-center rounded-[3px] border px-7 py-5 text-white hover:brightness-95 bg-ub-orange border-ub-orange focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
        <span class="text-lg font-extrabold leading-7 underline decoration-transparent underline-offset-4 group-hover:decoration-current">Màsters i postgraus</span>
        </a>
      </li>
      <li class="min-w-0">
        <a href="https://web.ub.edu/ca/web/estudis/doctorat" class="group flex h-full min-h-24 flex-col justify-center rounded-[3px] border px-7 py-5 text-white hover:brightness-95 bg-ub-orange border-ub-orange focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
          <span class="text-lg font-extrabold leading-7 underline decoration-transparent underline-offset-4 group-hover:decoration-current">Doctorat</span>
            <span class="mt-3 text-sm leading-5 text-white/90">Programes de doctorat i recerca.</span>
            </a>
          </li>
        </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.navigationCards",
  "id": "que-estudiar",
  "title": "Què vols estudiar?",
  "columns": 3,
  "items": [
    {
      "title": "Graus",
      "href": "https://web.ub.edu/ca/web/estudis/graus",
      "tone": "orange"
    },
    {
      "title": "Màsters i postgraus",
      "href": "https://web.ub.edu/ca/web/estudis/masters-postgraus",
      "tone": "orange"
    },
    {
      "title": "Doctorat",
      "href": "https://web.ub.edu/ca/web/estudis/doctorat",
      "tone": "orange",
      "description": "Programes de doctorat i recerca."
    }
  ]
}

Targetes blaves simples

Font: Benvinguda UB
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="grid gap-6 sm:grid-cols-2 lg:grid-cols-4 ">
  <li class="min-w-0">
    <a href="https://www.ub.edu/allotjament/" class="group flex min-h-[120px] items-center justify-center border-2 border-transparent px-6 py-7 text-center text-white hover:border-ub-blue hover:bg-white hover:text-ub-blue bg-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
      <span class="text-[24px] font-bold leading-[29px] underline decoration-transparent underline-offset-4 group-hover:decoration-current">Allotjament</span>
      </a>
    </li>
    <li class="min-w-0">
      <a href="https://web.ub.edu/ca/web/portal-llengues" class="group flex min-h-[120px] items-center justify-center border-2 border-transparent px-6 py-7 text-center text-white hover:border-ub-blue hover:bg-white hover:text-ub-blue bg-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
        <span class="text-[24px] font-bold leading-[29px] underline decoration-transparent underline-offset-4 group-hover:decoration-current">Les llengües a la UB</span>
        </a>
      </li>
      <li class="min-w-0">
        <a href="https://www.ub.edu/esports/" class="group flex min-h-[120px] items-center justify-center border-2 border-transparent px-6 py-7 text-center text-white hover:border-ub-blue hover:bg-white hover:text-ub-blue bg-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
          <span class="text-[24px] font-bold leading-[29px] underline decoration-transparent underline-offset-4 group-hover:decoration-current">Esports</span>
          </a>
        </li>
        <li class="min-w-0">
          <a href="http://www.solidaritat.ub.edu/voluntariado/?lang=ca" class="group flex min-h-[120px] items-center justify-center border-2 border-transparent px-6 py-7 text-center text-white hover:border-ub-blue hover:bg-white hover:text-ub-blue bg-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
            <span class="text-[24px] font-bold leading-[29px] underline decoration-transparent underline-offset-4 group-hover:decoration-current">Voluntariat</span>
            </a>
          </li>
        </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.navigationCards",
  "id": "potser-interessa",
  "title": "Potser també t’interessa",
  "variant": "solidTiles",
  "columns": 4,
  "items": [
    {
      "title": "Allotjament",
      "href": "https://www.ub.edu/allotjament/",
      "tone": "blue"
    },
    {
      "title": "Les llengües a la UB",
      "href": "https://web.ub.edu/ca/web/portal-llengues",
      "tone": "blue"
    },
    {
      "title": "Esports",
      "href": "https://www.ub.edu/esports/",
      "tone": "blue"
    },
    {
      "title": "Voluntariat",
      "href": "http://www.solidaritat.ub.edu/voluntariado/?lang=ca",
      "tone": "blue"
    }
  ]
}
Props i codi font (UbNavigationCards)
src/components/ub/UbNavigationCards.tsx ↗
PropTipusPer defecte
items *UbNavigationCardItem[]
columnsenum3
variantenumdefault
classNamestring

UbPageHeader

Títol simple de pàgina

3 variants

Quan i com fer-lo servir: Without `intro` or `children`, no bottom border (`border-b`) or padding is drawn - it's just the `<h1>`, 24px on mobile and 45px on desktop. Don't add `eyebrow`/`intro` just to fill space if the real page doesn't have one. When DevTools reports a UB title as `Roboto-Bold`, preserve that visually as bold weight (`font-bold`/700 or the component's existing bold title class); do not downgrade it to normal Roboto just because the family name contains Roboto.

Quan i com fer-lo servir: Use the `rss` prop for listing landing pages that expose a feed, e.g. `actualitat-noticies`. The RSS icon belongs inside the `h1` next to the title; do not add a separate action bar just for RSS. If the source title uses `Roboto-Bold`, treat that as the bold visual weight of the title, not as plain normal Roboto.

Quan i com fer-lo servir: Use this variant (with `eyebrow`/`intro`/`image`) for section landing pages, not for internal content pages - those usually only use `title` (see the "Títol simple de pàgina" example). `rss` is optional and only makes sense on listing landing pages (news, agenda).

Títol simple de pàgina

Font: Aprèn

Aprèn

Correcció aplicada: Moltes pàgines internes de web.ub.edu només tenen un `<h1 class="title-page">` sol, sense entradeta, imatge ni `eyebrow` — `UbPageHeader` cobreix aquest cas ometent `intro`/`image`/`eyebrow`, sense el `border-b` que sí s'aplica quan hi ha cos.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<header class="">
  <div class="">
    <div>
      <h1 class="flex max-w-6xl flex-wrap items-center gap-3 text-2xl font-medium leading-7 text-ub-text lg:text-[45px] lg:leading-[53px]">Aprèn</h1>
      </div>
    </div>
  </header>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.pageHeader",
  "id": "titol",
  "title": "Aprèn"
}

Títol simple amb RSS

Font: Notícies Actualitat

Notícies

Correcció aplicada: Els llistats d’Actualitat com "Notícies" mostren un `<h1>` simple i, quan hi ha RSS, una icona RSS blava inline dins del mateix títol. No hi ha entradeta, imatge ni línia inferior en aquest cas.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<header class="">
  <div class="">
    <div>
      <h1 class="flex max-w-6xl flex-wrap items-center gap-3 text-2xl font-medium leading-7 text-ub-text lg:text-[45px] lg:leading-[53px]">Notícies<a href="https://web.ub.edu:443/ca/web/actualitat/noticies/-/asset_publisher/zyse/rss" aria-label="RSS" class="text-ub-blue hover:text-ub-blueDark">
        <svg aria-hidden="true" viewBox="0 0 20 20" fill="currentColor" class="h-6 w-6">
          <circle cx="4" cy="16" r="2">
          </circle>
          <path d="M3 9a8 8 0 0 1 8 8h-2.5A5.5 5.5 0 0 0 3 11.5V9Z">
          </path>
          <path d="M3 3a14 14 0 0 1 14 14h-2.5A11.5 11.5 0 0 0 3 5.5V3Z">
          </path>
        </svg>
      </a>
    </h1>
  </div>
</div>
</header>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.pageHeader",
  "id": "titol",
  "title": "Notícies",
  "rss": {
    "label": "RSS",
    "href": "https://web.ub.edu:443/ca/web/actualitat/noticies/-/asset_publisher/zyse/rss"
  }
}

Capçalera amb entradeta i imatge

Font: patró de portada

Base de disseny UB

Catàleg de components UB

Patrons visuals extrets de pàgines reals de la Universitat de Barcelona, implementats amb Tailwind.

Taula de treball amb ordinador portàtil i elements de comunicació digital
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<header class="border-b border-ub-line pb-10">
  <p class="mb-4 text-sm font-extrabold uppercase tracking-[0.06em] text-ub-muted">Base de disseny UB</p>
    <div class="grid gap-8 lg:grid-cols-[1fr_500px] lg:items-start">
      <div>
        <h1 class="flex max-w-6xl flex-wrap items-center gap-3 text-2xl font-medium leading-7 text-ub-text lg:text-[45px] lg:leading-[53px]">Catàleg de components UB</h1>
          <p class="mt-6 max-w-4xl text-pretty text-xl font-bold leading-8 text-ub-text md:text-[24px] md:leading-9">Patrons visuals extrets de pàgines reals de la Universitat de Barcelona, implementats amb Tailwind.</p>
          </div>
          <figure class="lg:pt-2">
            <img src="https://web.ub.edu/documents/8740406/0/crea.png/93cf0c19-92c8-b038-6fbd-e7aaaf696e27?t=1707737609923&amp;download=true" alt="Taula de treball amb ordinador portàtil i elements de comunicació digital" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
          </figure>
        </div>
      </header>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.pageHeader",
  "id": "titol",
  "eyebrow": "Base de disseny UB",
  "title": "Catàleg de components UB",
  "intro": "Patrons visuals extrets de pàgines reals de la Universitat de Barcelona, implementats amb Tailwind.",
  "image": {
    "src": "https://web.ub.edu/documents/8740406/0/crea.png/93cf0c19-92c8-b038-6fbd-e7aaaf696e27?t=1707737609923&download=true",
    "alt": "Taula de treball amb ordinador portàtil i elements de comunicació digital"
  }
}
Props i codi font (UbPageHeader)
src/components/ub/UbPageHeader.tsx ↗
PropTipusPer defecte
title *string
eyebrowstring
introstring
image{ src: string; alt: string; }
rss{ label: string; href: string; }

UbSearchOverlay

Modal de cerca del capçalera

Quan i com fer-lo servir: Opens when the magnifier icon in `UbInstitutionalHeader`/`UbSubsiteHeader` is clicked (`onSearchClick` prop) - not a `sections[]` entry, it is header UI state. Traps focus inside the dialog (`role="dialog"` + `aria-modal`) and returns it to the button that opened it on close; `Escape` also closes it. `quickLinks` is optional: without them only the search form shows.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="fixed inset-0 z-[60] bg-black/50 motion-safe:animate-[ub-overlay-fade-in_150ms_ease-out]">
  <div role="dialog" aria-modal="true" aria-label="Cerca" class="mx-auto max-w-[1430px] bg-white p-6 shadow-lg motion-safe:animate-[ub-overlay-panel-in_150ms_ease-out] sm:p-10">
    <div class="flex items-start justify-between gap-4">
      <h2 class="text-2xl font-extrabold leading-8 text-ub-text">Cerca</h2>
        <button type="button" aria-label="Tanca la cerca" class="flex h-11 w-11 shrink-0 items-center justify-center text-ub-muted hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
          <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-6 w-6">
            <path d="M5 5l10 10M15 5L5 15" stroke-linecap="round">
            </path>
          </svg>
        </button>
      </div>
      <form class="mt-6 flex gap-3" action="https://cercador.ub.edu/cgi-bin/search" method="get">
        <label class="relative flex-1">
          <span class="sr-only">Cerca...</span>
            <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="pointer-events-none absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-ub-muted">
              <circle cx="9" cy="9" r="6">
              </circle>
              <path d="M17 17l-3.5-3.5" stroke-linecap="round">
              </path>
            </svg>
            <input type="search" placeholder="Cerca..." class="w-full rounded-md border border-ub-line bg-white py-3 pl-10 pr-3 text-base text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="q"/>
          </label>
          <button type="submit" class="rounded-md bg-ub-blue px-6 py-3 text-sm font-bold uppercase tracking-wide text-white hover:bg-ub-blueDark focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Cerca</button>
          </form>
          <ul class="mt-8 flex flex-wrap gap-x-8 gap-y-3 border-t border-ub-line pt-6 text-base font-extrabold leading-6">
            <li>
              <a href="https://web.ub.edu/ca/web/estudis" class="text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Estudis</a>
              </li>
              <li>
                <a href="https://web.ub.edu/ca/web/actualitat" class="text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Actualitat</a>
                </li>
                <li>
                  <a href="https://web.ub.edu/ca/web/directori" class="text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Directori</a>
                  </li>
                </ul>
              </div>
            </div>
Props i codi font (UbSearchOverlay)
src/components/ub/UbSearchOverlay.tsx ↗
PropTipusPer defecte
open *boolean
onClose *() => void
actionstring
titlestringCerca
keywordNamestringq
placeholderstringCerca...
quickLinksUbSearchOverlayLink[]
closeLabelstringTanca la cerca

UbSectionHeaderWithAction

Capçalera de secció amb enllaç "Veure-ho tot"

Quan i com fer-lo servir: Internal composition piece to head a content block (listings, grids) with an action link on the right - not its own `sections[]` entry; components that already use it internally (e.g. `UbNewsList`) expose it through their own props. Use `level={3}` when the section is already a child of a higher `<h2>`, to avoid skipping heading levels.

Destaquem

Les últimes notícies de la Universitat de Barcelona.

Veure totes les notícies
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="border-b border-ub-line pb-5 ">
  <div class="flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between">
    <div>
      <h2 class="text-[30px] font-extrabold leading-9 text-ub-text">Destaquem</h2>
        <p class="mt-2 max-w-3xl text-base leading-6 text-ub-muted">Les últimes notícies de la Universitat de Barcelona.</p>
        </div>
        <a href="https://web.ub.edu/ca/web/actualitat/noticies" class="inline-flex min-h-10 items-center self-start text-sm font-extrabold leading-5 text-ub-text underline underline-offset-4 hover:text-ub-blue sm:self-auto">Veure totes les notícies</a>
        </div>
      </div>
Props i codi font (UbSectionHeaderWithAction)
src/components/ub/UbSectionHeaderWithAction.tsx ↗
PropTipusPer defecte
title *string
descriptionstring
action{ label: string; href: string; }
levelenum2
classNamestring

UbSectionTitle

Títol de secció (mides)

Quan i com fer-lo servir: Plain heading, with no bottom rule or associated action - use `UbSection` (with `title`) or `UbSectionHeaderWithAction` when that rule or a right-hand link is needed. Not a `sections[]` entry; it is the typographic piece other components use internally for their own headings (e.g. this catalog's own `/tokens` and `/standards` pages). `as` picks the HTML element (`h2` by default) independently of the visual size chosen with `size`.

Recursos

Colors semàntics

Paleta completa

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="flex flex-col gap-4">
  <h2 class="text-balance font-extrabold text-ub-text text-[32px] leading-10 ">Recursos</h2>
    <h2 class="text-balance font-extrabold text-ub-text text-2xl leading-8 ">Colors semàntics</h2>
      <h3 class="text-balance font-extrabold text-ub-text text-lg leading-7 ">Paleta completa</h3>
      </div>
Props i codi font (UbSectionTitle)
src/components/ub/UbSectionTitle.tsx ↗
PropTipusPer defecte
sizeenumlarge
asElementTypeh2
classNamestring

Contingut i text

Blocs editorials: introduccions, seccions amb text i imatge, acordions, cites destacades, llistes d'enllaços i de documents.

UbAccordion

Pestanyes plegables

Facultat de Química

Segons diversos ranquings nacionals i internacionals, la Facultat de Química de la Universitat de Barcelona és el centre de docència i recerca en química més ben valorat de tot l'Estat i un centre de recerca capdavanter en aspectes molt diversos de la química bàsica i aplicada.

Òrgans de govern de la Universitat

Els òrgans de representació i de govern de la Universitat de Barcelona són el Claustre, que representa tota la comunitat i controla la gestió, i el Consell de Govern, que defineix les línies d'actuació. La societat catalana i mundial també participa en la governança universitària mitjançant el Consell Social i la Sindicatura de Greuges.

Com s'enganxa l'adreça d'una pàgina externa?

Quan volem afegir un enllaç extern, hem de copiar l'URL sencer, amb el protocol (http:// o bé https://) inclòs.

Correcció aplicada: `UbAccordion` cobreix T6 amb `details`/`summary` natiu: teclat i lectors de pantalla ja gestionen `aria-expanded` de forma implícita. La icona +/- es substitueix per una icona pròpia i s'amaga el marcador natiu del navegador.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="border-t border-ub-line ">
  <details open="" class="group border-b border-ub-line">
    <summary class="flex cursor-pointer list-none items-center gap-3 py-4 font-bold leading-6 text-ub-text marker:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue [&amp;::-webkit-details-marker]:hidden">
      <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-5 w-5 shrink-0 text-ub-blue">
        <path d="M4 10h12">
        </path>
        <path d="M10 4v12" class="group-open:hidden">
        </path>
      </svg>
      <span>Facultat de Química</span>
      </summary>
      <div class="pb-5 pl-8 text-base leading-6 text-ub-text">
        <p>Segons diversos ranquings nacionals i internacionals, la Facultat de Química de la Universitat de Barcelona és el centre de docència i recerca en química més ben valorat de tot l&#x27;Estat i un centre de recerca capdavanter en aspectes molt diversos de la química bàsica i aplicada.</p>
        </div>
      </details>
      <details class="group border-b border-ub-line">
        <summary class="flex cursor-pointer list-none items-center gap-3 py-4 font-bold leading-6 text-ub-text marker:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue [&amp;::-webkit-details-marker]:hidden">
          <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-5 w-5 shrink-0 text-ub-blue">
            <path d="M4 10h12">
            </path>
            <path d="M10 4v12" class="group-open:hidden">
            </path>
          </svg>
          <span>Òrgans de govern de la Universitat</span>
          </summary>
          <div class="pb-5 pl-8 text-base leading-6 text-ub-text">
            <p>Els òrgans de representació i de govern de la Universitat de Barcelona són el Claustre, que representa tota la comunitat i controla la gestió, i el Consell de Govern, que defineix les línies d&#x27;actuació. La societat catalana i mundial també participa en la governança universitària mitjançant el Consell Social i la Sindicatura de Greuges.</p>
            </div>
          </details>
          <details class="group border-b border-ub-line">
            <summary class="flex cursor-pointer list-none items-center gap-3 py-4 font-bold leading-6 text-ub-text marker:hidden focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue [&amp;::-webkit-details-marker]:hidden">
              <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-5 w-5 shrink-0 text-ub-blue">
                <path d="M4 10h12">
                </path>
                <path d="M10 4v12" class="group-open:hidden">
                </path>
              </svg>
              <span>Com s&#x27;enganxa l&#x27;adreça d&#x27;una pàgina externa?</span>
              </summary>
              <div class="pb-5 pl-8 text-base leading-6 text-ub-text">
                <p>Quan volem afegir un enllaç extern, hem de copiar l&#x27;URL sencer, amb el protocol (http:// o bé https://) inclòs.</p>
                </div>
              </details>
            </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.faq",
  "id": "accordio",
  "title": "Pestanyes plegables",
  "items": [
    {
      "question": "Facultat de Química",
      "answer": "Segons diversos ranquings nacionals i internacionals, la Facultat de Química de la Universitat de Barcelona és el centre de docència i recerca en química més ben valorat de tot l'Estat i un centre de recerca capdavanter en aspectes molt diversos de la química bàsica i aplicada."
    },
    {
      "question": "Òrgans de govern de la Universitat",
      "answer": "Els òrgans de representació i de govern de la Universitat de Barcelona són el Claustre, que representa tota la comunitat i controla la gestió, i el Consell de Govern, que defineix les línies d'actuació. La societat catalana i mundial també participa en la governança universitària mitjançant el Consell Social i la Sindicatura de Greuges."
    },
    {
      "question": "Com s'enganxa l'adreça d'una pàgina externa?",
      "answer": "Quan volem afegir un enllaç extern, hem de copiar l'URL sencer, amb el protocol (http:// o bé https://) inclòs."
    }
  ]
}
Props i codi font (UbAccordion)
src/components/ub/UbAccordion.tsx ↗
PropTipusPer defecte
items *UbAccordionItem[]
classNamestring

UbContentSection

Secció amb text, imatge i enllaços relacionats

4 variants

Quan i com fer-lo servir: `imagePosition="right"` with both `image` and `asideLinks` set produces the real 3-column layout (7/12 text, image, links). `asideLinks` has no item limit - real lists of up to 14 links (e.g. "També t'interessa" on viu-la-ub) must be rendered in full, never truncated. Each section of a long page is an independent `UbContentSection` with its own anchorable `id` on `title` (to link from a `UbAnchorIndex`).

Quan i com fer-lo servir: Use `imagePosition="bottom"` when the source image sits inside the same column as the body text (not beside it, as `"right"` does). Do not apply `object-cover`/cropping to this variant - the original shows the image whole, uncropped.

Quan i com fer-lo servir: Use `imagePosition="rightWide"` for a wide split layout: `title` as a full-width heading, then an `intro`+`image` row (optionally wrapped in `introBg="muted"`), then a `children`+`secondaryImage` row below (e.g. body copy next to a logo lockup). `headingLevel="h1"` makes the title a page-level heading instead of a section heading - only meaningful combined with `rightWide`.

Quan i com fer-lo servir: Use `imagePosition="inline"` when the source places a smaller image directly beside a short intro paragraph, inside the body flow (not beside the full body text, as `"right"` does, and not stretched full-width). No `asideLinks`/`aside` alongside this variant in the real pattern.

Secció amb text, imatge i enllaços relacionats

Font: Transferència i emprenedoria

Transferència

Som líders en transferència i, a través de les nostres instal·lacions, teixim una xarxa d'excel·lència d'R+D+I.

Facilitem el contacte entre grups de recerca de tots els àmbits i les empreses que busquen millorar els productes i serveis, gràcies a l'equip de la Fundació Bosch i Gimpera. Som un ecosistema referent a tot Europa en recerca i innovació especialitzada en biociències, amb més de 100.000 m², al Parc Científic de Barcelona.

Components electrònics

Correcció aplicada: Reprodueix el fragment real `frg-articulo-list-links` (patró `apartat`): títol, entradeta i cos a la columna de 7/12, imatge a la columna de 5/12 amb un bloc "Més informació" a sota. L'entradeta NO és negreta a l'original (és `Roboto-Regular` a 22px/36px en desktop) tot i que sembla-ho al primer cop d'ull; el títol dels enllaços té un subratllat blau (`decoration-ub-blue`), no negre, i el marcador "—" és una barra CSS de 15×1px, no un caràcter de text.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<section class="border-t border-ub-line py-8 ">
  <div class="grid gap-8 lg:grid-cols-[minmax(0,834px)_542px] lg:items-start ">
    <div class="grid gap-8 md:grid-cols-2 md:items-start">
      <div>
        <h3 class="text-balance text-2xl font-bold leading-[30px] text-ub-text lg:text-[36px] lg:leading-[42px]">Transferència</h3>
          <div class="text-pretty mt-4 max-w-3xl text-base font-normal leading-[23px] text-ub-text lg:text-[22px] lg:leading-9">Som líders en transferència i, a través de les nostres instal·lacions, teixim una xarxa d&#x27;excel·lència d&#x27;R+D+I.</div>
            <div class="max-w-4xl text-ub-text [&amp;_a]:font-bold [&amp;_a]:text-ub-text [&amp;_a]:underline hover:[&amp;_a]:text-ub-blue text-sm leading-[23px] lg:text-lg lg:leading-8 mt-5">
              <p>Facilitem el contacte entre grups de recerca de tots els àmbits i les empreses que busquen millorar els productes i serveis, gràcies a l&#x27;equip de la Fundació Bosch i Gimpera. Som un ecosistema referent a tot Europa en recerca i innovació especialitzada en biociències, amb més de 100.000 m², al Parc Científic de Barcelona.</p>
              </div>
            </div>
            <figure>
              <img src="https://web.ub.edu/documents/2685349/2697083/Alumne+2.jpg/aae87202-24b9-aeee-bc2d-786bae98f3ea?t=1662708714319&amp;download=true" alt="Components electrònics" loading="lazy" class="aspect-[3/2] w-full object-cover"/>
            </figure>
          </div>
          <aside class="grid gap-6" aria-label="Transferència: informació relacionada">
            <div>
              <h4 class="mb-6 text-lg font-bold leading-[27px] text-ub-text">Més informació</h4>
                <ul class="grid gap-2.5">
                  <li class="flex items-center gap-2.5 text-base leading-6">
                    <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                    </span>
                    <a href="http://www.fbg.ub.edu/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Fundació Bosch i Gimpera</a>
                    </li>
                    <li class="flex items-center gap-2.5 text-base leading-6">
                      <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                      </span>
                      <a href="https://www.pcb.ub.edu/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Parc Científic de Barcelona</a>
                      </li>
                      <li class="flex items-center gap-2.5 text-base leading-6">
                        <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                        </span>
                        <a href="http://www.ccit.ub.edu/CA/home.html" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Centres Científics i Tecnològics</a>
                        </li>
                        <li class="flex items-center gap-2.5 text-base leading-6">
                          <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                          </span>
                          <a href="https://portalfuturub.ub.edu/projects" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Projectes destacats</a>
                          </li>
                          <li class="flex items-center gap-2.5 text-base leading-6">
                            <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                            </span>
                            <a href="http://www.ub.edu/ogrc/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Transferències amb contractes de recerca</a>
                            </li>
                            <li class="flex items-center gap-2.5 text-base leading-6">
                              <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                              </span>
                              <a href="http://www.ub.edu/centredepatents/ca/index.html" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Patents</a>
                              </li>
                            </ul>
                          </div>
                        </aside>
                      </div>
                    </section>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.contentSection",
  "id": "transferencia",
  "title": "Transferència",
  "intro": "Som líders en transferència i, a través de les nostres instal·lacions, teixim una xarxa d'excel·lència d'R+D+I.",
  "body": [
    "Facilitem el contacte entre grups de recerca de tots els àmbits i les empreses que busquen millorar els productes i serveis, gràcies a l'equip de la Fundació Bosch i Gimpera. Som un ecosistema referent a tot Europa en recerca i innovació especialitzada en biociències, amb més de 100.000 m², al Parc Científic de Barcelona."
  ],
  "image": {
    "src": "https://web.ub.edu/documents/2685349/2697083/Alumne+2.jpg/aae87202-24b9-aeee-bc2d-786bae98f3ea?t=1662708714319&download=true",
    "alt": "Components electrònics"
  },
  "asideTitle": "Més informació",
  "asideLinks": [
    {
      "label": "Fundació Bosch i Gimpera",
      "href": "http://www.fbg.ub.edu/"
    },
    {
      "label": "Parc Científic de Barcelona",
      "href": "https://www.pcb.ub.edu/"
    },
    {
      "label": "Centres Científics i Tecnològics",
      "href": "http://www.ccit.ub.edu/CA/home.html"
    },
    {
      "label": "Projectes destacats",
      "href": "https://portalfuturub.ub.edu/projects"
    },
    {
      "label": "Transferències amb contractes de recerca",
      "href": "http://www.ub.edu/ogrc/"
    },
    {
      "label": "Patents",
      "href": "http://www.ub.edu/centredepatents/ca/index.html"
    }
  ]
}

Secció amb imatge dins del text i llista llarga d’enllaços

Font: Viu la UB

També t’interessa

Disposem d'una gamma de serveis per cobrir les necessitats de la comunitat universitària, també oberta a la ciutadania, empreses i institucions.

Tens al teu abast una gran quantitat de serveis de primer nivell dedicats a fer-te la vida més agradable i assequible, des de practicar altres llengües amb parlants nadius fins a gestionar els tràmits acadèmics telemàticament.

Palau de les Heures

Correcció aplicada: Variant `imagePosition="bottom"`: aquí la imatge no va a la columna d'enllaços sinó sota el text, a mida natural (no requadrada a 4:3) i acotada a 400px d'ample, tal com fa l'original amb una imatge de 400×270px.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<section class="border-t border-ub-line py-8 ">
  <div class="grid gap-8 lg:grid-cols-[minmax(0,1fr)_542px] lg:items-start ">
    <div>
      <h3 class="text-balance text-2xl font-bold leading-[30px] text-ub-text lg:text-[36px] lg:leading-[42px]">També t’interessa</h3>
        <div class="text-pretty mt-4 max-w-3xl text-base font-normal leading-[23px] text-ub-text lg:text-[22px] lg:leading-9">Disposem d&#x27;una gamma de serveis per cobrir les necessitats de la comunitat universitària, també oberta a la ciutadania, empreses i institucions.</div>
          <div class="max-w-4xl text-ub-text [&amp;_a]:font-bold [&amp;_a]:text-ub-text [&amp;_a]:underline hover:[&amp;_a]:text-ub-blue text-sm leading-[23px] lg:text-lg lg:leading-8 mt-5">
            <p>Tens al teu abast una gran quantitat de serveis de primer nivell dedicats a fer-te la vida més agradable i assequible, des de practicar altres llengües amb parlants nadius fins a gestionar els tràmits acadèmics telemàticament.</p>
            </div>
            <figure class="mt-2 max-w-[400px]">
              <img src="https://web.ub.edu/documents/2685349/2697080/heura_petit.png/ddb90e13-c86b-e6af-1560-32d25bb90d0d?t=1667481219579&amp;download=true" alt="Palau de les Heures" loading="lazy" class="h-auto w-full"/>
            </figure>
          </div>
          <aside class="grid gap-6" aria-label="També t’interessa: informació relacionada">
            <div>
              <h4 class="mb-6 text-lg font-bold leading-[27px] text-ub-text">Més informació</h4>
                <ul class="grid gap-2.5">
                  <li class="flex items-center gap-2.5 text-base leading-6">
                    <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                    </span>
                    <a href="https://web.ub.edu/ca/serveis" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Serveis</a>
                    </li>
                    <li class="flex items-center gap-2.5 text-base leading-6">
                      <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                      </span>
                      <a href="http://www.ub.edu/carnet/ca/alumnat.html" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Carnet UB</a>
                      </li>
                      <li class="flex items-center gap-2.5 text-base leading-6">
                        <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                        </span>
                        <a href="https://www.ub.edu/sl/borsa/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Borsa d&#x27;intercanvi lingüístic</a>
                        </li>
                        <li class="flex items-center gap-2.5 text-base leading-6">
                          <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                          </span>
                          <a href="http://www.ub.edu/avantatges/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Avantatges UB</a>
                          </li>
                          <li class="flex items-center gap-2.5 text-base leading-6">
                            <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                            </span>
                            <a href="https://shop.ub.edu/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Botiga UB</a>
                            </li>
                            <li class="flex items-center gap-2.5 text-base leading-6">
                              <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                              </span>
                              <a href="https://www.ub.edu/ubtv/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">UBtv</a>
                              </li>
                              <li class="flex items-center gap-2.5 text-base leading-6">
                                <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                </span>
                                <a href="https://web.ub.edu/ca/web/socub" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">SocUB</a>
                                </li>
                                <li class="flex items-center gap-2.5 text-base leading-6">
                                  <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                  </span>
                                  <a href="https://web.ub.edu/web/atencio-estudiant/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Atenció a l’estudiant</a>
                                  </li>
                                  <li class="flex items-center gap-2.5 text-base leading-6">
                                    <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                    </span>
                                    <a href="https://www.ub.edu/575aniversari/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">575è aniversari</a>
                                    </li>
                                    <li class="flex items-center gap-2.5 text-base leading-6">
                                      <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                      </span>
                                      <a href="https://web.ub.edu/web/la-nostra-historia/edificihistoric150/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">150è aniversari de l&#x27;Edifici Històric</a>
                                      </li>
                                      <li class="flex items-center gap-2.5 text-base leading-6">
                                        <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                        </span>
                                        <a href="https://www.ub.edu/llengua-acollida/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Acollida de llengua i cultura</a>
                                        </li>
                                        <li class="flex items-center gap-2.5 text-base leading-6">
                                          <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                          </span>
                                          <a href="https://www.ub.edu/llengua-acollida/borsa-dintercanvi-linguistic/" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Borsa d&#x27;intercanvi lingüístic</a>
                                          </li>
                                          <li class="flex items-center gap-2.5 text-base leading-6">
                                            <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                            </span>
                                            <a href="https://www.ub.edu/aprenllengues/ca/catclub" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">CATclub</a>
                                            </li>
                                            <li class="flex items-center gap-2.5 text-base leading-6">
                                              <span aria-hidden="true" class="h-px w-[15px] shrink-0 bg-ub-text">
                                              </span>
                                              <a href="https://web.ub.edu/web/actualitat/xarxes-socials" class="text-ub-text underline decoration-ub-blue underline-offset-4 hover:text-ub-blue">Segueix-nos a les xarxes socials</a>
                                              </li>
                                            </ul>
                                          </div>
                                        </aside>
                                      </div>
                                    </section>

Secció ampla amb imatge i bloc secundari (rightWide)

Un ecosistema de recerca i transferència

Som líders en transferència i, a través de les nostres instal·lacions, teixim una xarxa d'excel·lència d'R+D+I.

Facilitem el contacte entre grups de recerca de tots els àmbits i les empreses que busquen millorar els productes i serveis.

Components electrònics

Som un ecosistema referent a tot Europa en recerca i innovació especialitzada en biociències, amb més de 100.000 m², al Parc Científic de Barcelona.

Universitat de Barcelona
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<section class="border-t border-ub-line py-8 ">
  <h1 class="text-balance text-[45px] font-extrabold leading-[54px] text-ub-text">Un ecosistema de recerca i transferència</h1>
    <div class="mt-10 bg-ub-panel p-8">
      <div class="grid gap-8 lg:grid-cols-[minmax(0,1fr)_566px] lg:items-start">
        <div>
          <p class="text-base leading-7 text-ub-text">Som líders en transferència i, a través de les nostres instal·lacions, teixim una xarxa d&#x27;excel·lència d&#x27;R+D+I.</p>
            <p class="mt-5 text-base leading-7 text-ub-text">Facilitem el contacte entre grups de recerca de tots els àmbits i les empreses que busquen millorar els productes i serveis.</p>
            </div>
            <figure>
              <img src="https://web.ub.edu/documents/2685349/2697083/Alumne+2.jpg/aae87202-24b9-aeee-bc2d-786bae98f3ea?t=1662708714319&amp;download=true" alt="Components electrònics" loading="lazy" class="aspect-[3/2] w-full object-cover"/>
            </figure>
          </div>
        </div>
        <div class="mt-8 grid gap-8 lg:grid-cols-[minmax(0,1fr)_566px] lg:items-start">
          <div>
            <div class="max-w-4xl text-ub-text [&amp;_a]:font-bold [&amp;_a]:text-ub-text [&amp;_a]:underline hover:[&amp;_a]:text-ub-blue text-sm leading-[23px] lg:text-lg lg:leading-8 text-base leading-7">
              <p>Som un ecosistema referent a tot Europa en recerca i innovació especialitzada en biociències, amb més de 100.000 m², al Parc Científic de Barcelona.</p>
              </div>
            </div>
            <img src="https://web.ub.edu/image/company_logo?img_id=45626902&amp;t=1782390174175" alt="Universitat de Barcelona" loading="lazy" class="h-auto w-full max-w-[380px] object-contain"/>
          </div>
        </section>

Secció amb imatge inline al costat de l’entradeta

Un campus obert a la ciutat

Més de 40 hectàrees de zona verda envolten els edificis, amb itineraris i zones d'estudi a l'aire lliure disponibles tot l'any.

El campus de Mundet acull facultats, residències i espais esportius oberts a tota la comunitat universitària.
Palau de les Heures
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<section class="border-t border-ub-line py-8 ">
  <div class=" ">
    <div>
      <h3 class="text-balance text-2xl font-bold leading-[30px] text-ub-text lg:text-[36px] lg:leading-[42px]">Un campus obert a la ciutat</h3>
        <div class="max-w-4xl text-ub-text [&amp;_a]:font-bold [&amp;_a]:text-ub-text [&amp;_a]:underline hover:[&amp;_a]:text-ub-blue text-sm leading-[23px] lg:text-lg lg:leading-8 mt-5">
          <p>Més de 40 hectàrees de zona verda envolten els edificis, amb itineraris i zones d&#x27;estudi a l&#x27;aire lliure disponibles tot l&#x27;any.</p>
          </div>
          <div class="mt-7 grid gap-8 md:grid-cols-[348px_minmax(0,387px)] md:items-start">
            <div class="text-[23px] font-bold leading-[28px] text-ub-text">El campus de Mundet acull facultats, residències i espais esportius oberts a tota la comunitat universitària.</div>
              <figure>
                <img src="https://web.ub.edu/documents/2685349/2697080/heura_petit.png/ddb90e13-c86b-e6af-1560-32d25bb90d0d?t=1667481219579&amp;download=true" alt="Palau de les Heures" loading="lazy" class="aspect-[4/3] w-full object-cover"/>
              </figure>
            </div>
          </div>
        </div>
      </section>
Props i codi font (UbContentSection)
src/components/ub/UbContentSection.tsx ↗
PropTipusPer defecte
title *string
introReactNode
imageUbContentSectionImage
imagePositionenumright
headingLevelenumh3
bodyWidthenumnormal
asideTitlestringMés informació
asideLinksUbLinkListItem[]
asideReactNode
flushbooleanfalse
classNamestring
secondaryImageUbContentSectionImage
introBgenum
introExtraReactNode

UbDocumentList

Llista de documents

Quan i com fer-lo servir: Use this for document/download lists, not for ordinary navigation links. Each item must preserve title, href, file type, optional size, description, language badges and transcript link. When a local JSON section type `ub.documentList` exists, map it to `UbDocumentList`; in no-local-JSON evals choose it when the real page shows file metadata such as PDF, DOCX, file size or available languages.

Documents

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <h3 class="mb-4 text-base font-extrabold text-ub-text">Documents</h3>
    <ul class="grid gap-4">
      <li>
        <article class="grid max-w-3xl grid-cols-[28px_1fr] gap-3">
          <div aria-hidden="true" class="mt-1 h-6 w-5 border-2 border-ub-blue bg-white before:block before:h-2 before:w-2 before:border-b-2 before:border-l-2 before:border-ub-blue before:bg-white">
          </div>
          <div>
            <h4 class="inline text-xl font-extrabold leading-7 text-ub-text">
              <a href="https://web.ub.edu/documents/2685349/0/memoria.pdf" class="underline underline-offset-4 hover:text-ub-blue">Memòria acadèmica</a>
              </h4>
              <span class="ml-2 text-xl leading-7 text-ub-muted">(PDF, 1,2 MB)</span>
                <p class="mt-3 text-base leading-6 text-ub-text">Document de síntesi amb la informació principal del curs.</p>
                  <div class="mt-1 flex flex-wrap items-center gap-x-4 gap-y-2 text-sm leading-5">
                    <ul aria-label="Idiomes disponibles" class="flex flex-wrap gap-2">
                      <li class="font-extrabold uppercase text-ub-muted">ca</li>
                        <li class="font-extrabold uppercase text-ub-muted">es</li>
                        </ul>
                      </div>
                    </div>
                  </article>
                </li>
                <li>
                  <article class="grid max-w-3xl grid-cols-[28px_1fr] gap-3">
                    <div aria-hidden="true" class="mt-1 h-6 w-5 border-2 border-ub-blue bg-white before:block before:h-2 before:w-2 before:border-b-2 before:border-l-2 before:border-ub-blue before:bg-white">
                    </div>
                    <div>
                      <h4 class="inline text-xl font-extrabold leading-7 text-ub-text">
                        <a href="https://web.ub.edu/documents/2685349/0/transcripcio.pdf" class="underline underline-offset-4 hover:text-ub-blue">Transcripció del vídeo institucional</a>
                        </h4>
                        <span class="ml-2 text-xl leading-7 text-ub-muted">(PDF)</span>
                          <div class="mt-1 flex flex-wrap items-center gap-x-4 gap-y-2 text-sm leading-5">
                            <a href="https://web.ub.edu/ca/transcripcio-video" class="font-bold text-ub-text hover:text-ub-blue">Llegeix-ne la transcripció<span class="sr-only"> de «Transcripció del vídeo institucional»</span>
                            </a>
                          </div>
                        </div>
                      </article>
                    </li>
                  </ul>
                </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.documentList",
  "id": "documents",
  "title": "Documents",
  "items": [
    {
      "title": "Memòria acadèmica",
      "href": "https://web.ub.edu/documents/2685349/0/memoria.pdf",
      "fileType": "pdf",
      "fileSize": "1,2 MB",
      "description": "Document de síntesi amb la informació principal del curs.",
      "languages": [
        "ca",
        "es"
      ]
    },
    {
      "title": "Transcripció del vídeo institucional",
      "href": "https://web.ub.edu/documents/2685349/0/transcripcio.pdf",
      "fileType": "pdf",
      "transcriptHref": "https://web.ub.edu/ca/transcripcio-video"
    }
  ]
}
Props i codi font (UbDocumentList)
src/components/ub/UbDocumentList.tsx ↗
PropTipusPer defecte
titlestring
items *UbDocumentListItem[]
classNamestring

UbIntroBlock

Fragment d'introducció

2 variants

Quan i com fer-lo servir: Use this for standalone intro copy below an existing page title or hero. In no-local-JSON evals, choose this when the real page shows a short lead paragraph or lead plus body text, not a full rich article. Use `tone="plain"` for white-background body intros and `tone="panel"` for gray callout bands.

Quan i com fer-lo servir: Use `tone="panel"` for a callout-style intro (padded, `bg-ub-panel`, larger text) instead of the default plain paragraph style. No `image` in this real pattern - the panel spans full width. In pages without local JSON, this is the documented gray text band to place immediately after a wide `UbImageBlock` when the source page has an editorial hero image followed by an introductory gray band.

Fragment d'introducció

Font: LabWeb T1

Som una universitat pública, fem formació de qualitat i recerca i tenim un compromís amb la societat.

Som la universitat líder de l'Estat tant pel que fa a l'oferta acadèmica com per a la recerca gràcies a la nostra aposta per la qualitat. Aquest lideratge s'ha vist reconegut als principals ranquings internacionals i, gràcies a la transferència i la innovació, fem arribar cada dia els nostres resultats a la societat.

Pati amb columnes de l'Edifici Històric de la Universitat de Barcelona

Correcció aplicada: `UbIntroBlock` aïlla T1 de `UbPageHeader` (que inclou eyebrow i H1 de pàgina): només entradilla en negreta, cos i imatge opcional 4:3 (500x375), per fer-se servir dins del cos d'una pàgina sota qualsevol títol existent.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid gap-8 lg:grid-cols-[1fr_500px] lg:items-start ">
  <div>
    <p class="max-w-4xl text-pretty text-lg font-medium leading-[21px] text-ub-text lg:text-[28px] lg:leading-[33px]">Som una universitat pública, fem formació de qualitat i recerca i tenim un compromís amb la societat.</p>
      <p class="mt-4 max-w-4xl text-base leading-6 text-ub-text lg:mt-12 lg:text-lg lg:leading-[32px]">Som la universitat líder de l&#x27;Estat tant pel que fa a l&#x27;oferta acadèmica com per a la recerca gràcies a la nostra aposta per la qualitat. Aquest lideratge s&#x27;ha vist reconegut als principals ranquings internacionals i, gràcies a la transferència i la innovació, fem arribar cada dia els nostres resultats a la societat.</p>
      </div>
      <figure>
        <img src="https://web.ub.edu/documents/8740406/0/500+%281%29.png/6e5d6c83-973c-f407-32bf-66f04f4c4708?t=1701938657701&amp;download=true" alt="Pati amb columnes de l&#x27;Edifici Històric de la Universitat de Barcelona" loading="lazy" class="aspect-[4/3] w-full object-cover"/>
      </figure>
    </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.intro",
  "id": "intro",
  "title": "Fragment d'introducció",
  "lead": "Som una universitat pública, fem formació de qualitat i recerca i tenim un compromís amb la societat.",
  "body": [
    "Som la universitat líder de l'Estat tant pel que fa a l'oferta acadèmica com per a la recerca gràcies a la nostra aposta per la qualitat. Aquest lideratge s'ha vist reconegut als principals ranquings internacionals i, gràcies a la transferència i la innovació, fem arribar cada dia els nostres resultats a la societat."
  ],
  "image": {
    "src": "https://web.ub.edu/documents/8740406/0/500+%281%29.png/6e5d6c83-973c-f407-32bf-66f04f4c4708?t=1701938657701&download=true",
    "alt": "Pati amb columnes de l'Edifici Històric de la Universitat de Barcelona"
  }
}

Fragment d'introducció (panell destacat)

Aquesta secció recull les preguntes més freqüents sobre el procés de preinscripció i matrícula.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid gap-8  ">
  <div>
    <p class="max-w-4xl text-pretty bg-ub-panel px-6 py-8 text-[22px] leading-10 text-black sm:px-[62px] sm:pt-12 sm:pb-6">Aquesta secció recull les preguntes més freqüents sobre el procés de preinscripció i matrícula.</p>
    </div>
  </div>
Props i codi font (UbIntroBlock)
src/components/ub/UbIntroBlock.tsx ↗
PropTipusPer defecte
lead *string
bodystring[]
image{ src: string; alt: string; }
toneenumplain
classNamestring

UbMediaCards

Targetes informatives en franja grisa

Quan i com fer-lo servir: Use `variant="info"` with `columns={4}` and `background="grayFullBleed"` for a full-viewport gray band containing four white informational image cards: top image, bold title, body copy and optional inline links. Keep source `<ul><li><a>` link lists as real bullet lists inside the card body; do not convert them to separated navigation rows. The card title is Roboto-Bold visually: use `font-bold`/weight 700, not normal Roboto. The gray band must break out of the content grid (`left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2`) while the cards stay inside the max-width container. Do not use `UbNavigationCards` for this; those are link tiles, not content cards.

Aula de la Facultat de Filologia

Sessions informatives

Coneix a fons el teu ensenyament i els passos per matricular-t'hi. És molt important que hi assisteixis!

Ordinador portàtil

Matrícula

Tens plaça a la preinscripció? Recorda que si no et matricules en la data prevista, perdràs la plaça assignada.

Claustre de Lletres

La vida a la UB

Com es viu quan s'estudia a la UB? Allotjament, esports, cultura i serveis per a l'alumnat.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="relative left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 bg-[#EBEBEB] py-10 ">
  <div class="mx-auto max-w-[1400px] px-[15px]">
    <div class="grid gap-6 ">
      <div class="grid gap-5 md:grid-cols-2 lg:grid-cols-4">
        <article class="flex h-full flex-col border border-ub-line bg-white">
          <img src="https://web.ub.edu/documents/9921631/0/foto_bloc1.jpg/5ec24081-c7f5-45da-d81f-44de8af52887?t=1687870752453&amp;download=true" alt="Aula de la Facultat de Filologia" loading="lazy" class="aspect-video w-full object-cover"/>
          <div class="flex flex-1 flex-col px-6 py-7">
            <h3 class="text-pretty text-[25px] font-bold leading-[30px] text-ub-text">Sessions informatives</h3>
              <p class="mt-4 text-base leading-7 text-ub-text">Coneix a fons el teu ensenyament i els passos per matricular-t&#x27;hi. És molt important que hi assisteixis!</p>
                <ul class="mt-4 list-disc space-y-2 pl-5 text-base leading-6 text-ub-text marker:text-ub-text">
                  <li>
                    <a href="https://www.ub.edu/futurs/activitats/comences-a-la-ub" class="font-bold text-ub-blue underline underline-offset-4 hover:text-ub-blueDark">Calendari de les sessions</a>
                    </li>
                  </ul>
                </div>
              </article>
              <article class="flex h-full flex-col border border-ub-line bg-white">
                <img src="https://web.ub.edu/documents/9921631/0/foto_bloc2.jpg/50343028-9136-d50f-ff0d-d5059b84ccb9?t=1687870751905&amp;download=true" alt="Edifici Carner de la Universitat de Barcelona" loading="lazy" class="aspect-video w-full object-cover"/>
                <div class="flex flex-1 flex-col px-6 py-7">
                  <h3 class="text-pretty text-[25px] font-bold leading-[30px] text-ub-text">Beques i ajuts</h3>
                    <p class="mt-4 text-base leading-7 text-ub-text">Informa&#x27;t de les beques i ajuts disponibles per estudiar a la Universitat de Barcelona.</p>
                      <ul class="mt-4 list-disc space-y-2 pl-5 text-base leading-6 text-ub-text marker:text-ub-text">
                        <li>
                          <a href="https://www.ub.edu/beques/grausimasters/beca%20general%20ministeri/pas-a-pas-cat-ministeri.pdf" class="font-bold text-ub-blue underline underline-offset-4 hover:text-ub-blueDark">Seguiment del calendari de la sol·licitud de beca general</a>
                          </li>
                          <li>
                            <a href="https://www.ub.edu/beques/grausimasters/beca%20general%20ministeri/establiment_MATRC_benvinguda.pdf" class="font-bold text-ub-blue underline underline-offset-4 hover:text-ub-blueDark">Establiment de matrícula condicional com a sol·licitant de beca general</a>
                            </li>
                            <li>
                              <a href="https://ovt.gencat.cat/carpetaciutadana360/mfe-main-app/#/consulta?set-locale=ca_ES" class="font-bold text-ub-blue underline underline-offset-4 hover:text-ub-blueDark">Consulta l&#x27;estat de la teva beca</a>
                              </li>
                            </ul>
                          </div>
                        </article>
                        <article class="flex h-full flex-col border border-ub-line bg-white">
                          <img src="https://web.ub.edu/documents/9921631/0/foto_bloc3.jpg/490b4ceb-1399-744d-eff2-e034b4a897a4?t=1687870751453&amp;download=true" alt="Ordinador portàtil" loading="lazy" class="aspect-video w-full object-cover"/>
                          <div class="flex flex-1 flex-col px-6 py-7">
                            <h3 class="text-pretty text-[25px] font-bold leading-[30px] text-ub-text">Matrícula</h3>
                              <p class="mt-4 text-base leading-7 text-ub-text">Tens plaça a la preinscripció? Recorda que si no et matricules en la data prevista, perdràs la plaça assignada.</p>
                              </div>
                            </article>
                            <article class="flex h-full flex-col border border-ub-line bg-white">
                              <img src="https://web.ub.edu/documents/9921631/0/foto_bloc4.jpg/d3ddffa7-d266-835f-0ec3-63acbb6868cf?t=1687870750944&amp;download=true" alt="Claustre de Lletres" loading="lazy" class="aspect-video w-full object-cover"/>
                              <div class="flex flex-1 flex-col px-6 py-7">
                                <h3 class="text-pretty text-[25px] font-bold leading-[30px] text-ub-text">La vida a la UB</h3>
                                  <p class="mt-4 text-base leading-7 text-ub-text">Com es viu quan s&#x27;estudia a la UB? Allotjament, esports, cultura i serveis per a l&#x27;alumnat.</p>
                                    <ul class="mt-4 list-disc space-y-2 pl-5 text-base leading-6 text-ub-text marker:text-ub-text">
                                      <li>
                                        <a href="https://www.ub.edu/futurs/coneix-la-ub" class="font-bold text-ub-blue underline underline-offset-4 hover:text-ub-blueDark">Coneix la UB</a>
                                        </li>
                                      </ul>
                                    </div>
                                  </article>
                                </div>
                              </div>
                            </div>
                          </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.cards",
  "id": "comences-ub",
  "title": "Comences a la UB?",
  "variant": "info",
  "background": "grayFullBleed",
  "columns": 4,
  "items": [
    {
      "title": "Sessions informatives",
      "body": "Coneix a fons el teu ensenyament i els passos per matricular-t'hi. És molt important que hi assisteixis!",
      "image": {
        "src": "https://web.ub.edu/documents/9921631/0/foto_bloc1.jpg/5ec24081-c7f5-45da-d81f-44de8af52887?t=1687870752453&download=true",
        "alt": "Aula de la Facultat de Filologia"
      },
      "links": [
        {
          "label": "Calendari de les sessions",
          "href": "https://www.ub.edu/futurs/activitats/comences-a-la-ub"
        }
      ]
    },
    {
      "title": "Beques i ajuts",
      "body": "Informa't de les beques i ajuts disponibles per estudiar a la Universitat de Barcelona.",
      "image": {
        "src": "https://web.ub.edu/documents/9921631/0/foto_bloc2.jpg/50343028-9136-d50f-ff0d-d5059b84ccb9?t=1687870751905&download=true",
        "alt": "Edifici Carner de la Universitat de Barcelona"
      },
      "links": [
        {
          "label": "Seguiment del calendari de la sol·licitud de beca general",
          "href": "https://www.ub.edu/beques/grausimasters/beca%20general%20ministeri/pas-a-pas-cat-ministeri.pdf"
        },
        {
          "label": "Establiment de matrícula condicional com a sol·licitant de beca general",
          "href": "https://www.ub.edu/beques/grausimasters/beca%20general%20ministeri/establiment_MATRC_benvinguda.pdf"
        },
        {
          "label": "Consulta l'estat de la teva beca",
          "href": "https://ovt.gencat.cat/carpetaciutadana360/mfe-main-app/#/consulta?set-locale=ca_ES"
        }
      ]
    },
    {
      "title": "Matrícula",
      "body": "Tens plaça a la preinscripció? Recorda que si no et matricules en la data prevista, perdràs la plaça assignada.",
      "image": {
        "src": "https://web.ub.edu/documents/9921631/0/foto_bloc3.jpg/490b4ceb-1399-744d-eff2-e034b4a897a4?t=1687870751453&download=true",
        "alt": "Ordinador portàtil"
      }
    },
    {
      "title": "La vida a la UB",
      "body": "Com es viu quan s'estudia a la UB? Allotjament, esports, cultura i serveis per a l'alumnat.",
      "image": {
        "src": "https://web.ub.edu/documents/9921631/0/foto_bloc4.jpg/d3ddffa7-d266-835f-0ec3-63acbb6868cf?t=1687870750944&download=true",
        "alt": "Claustre de Lletres"
      },
      "links": [
        {
          "label": "Coneix la UB",
          "href": "https://www.ub.edu/futurs/coneix-la-ub"
        }
      ]
    }
  ]
}
Props i codi font (UbMediaCards)
src/components/ub/UbMediaCards.tsx ↗
PropTipusPer defecte
backgroundenumplain
columnsenum3
introstring
items *UbMediaCardItem[]
variantenummedia
headingLevelenum3
classNamestring

UbPullQuote

Cita destacada

Quan i com fer-lo servir: Use this for pull quotes inside article/detail bodies: centered serif text, blue top/bottom rules and full-bleed horizontal treatment. In `ub.newsDetail`, prefer the `pullQuote` prop so the quote is placed in the article body; use `UbPullQuote` directly only for standalone rich-text/detail compositions.

La recerca universitària és clau per donar resposta als grans reptes socials.
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<blockquote class="my-8 border-y-2 border-ub-blue py-5 text-center font-[&#x27;Gentium_Book_Basic&#x27;,Georgia,serif] text-[30px] font-normal leading-[52px] text-black text-pretty md:-mx-[calc(50vw-50%)] ">
  <span class="mx-auto block max-w-[1430px] px-[15px]">La recerca universitària és clau per donar resposta als grans reptes socials.</span>
  </blockquote>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.pullQuote",
  "id": "cita-destacada",
  "title": "Cita destacada",
  "hideTitle": true,
  "quote": "La recerca universitària és clau per donar resposta als grans reptes socials."
}
Props i codi font (UbPullQuote)
src/components/ub/UbPullQuote.tsx ↗
PropTipusPer defecte
classNamestring

UbRichText

Cos de text ric (paràgrafs amb enllaços)

Quan i com fer-lo servir: Typographic wrapper for free-text HTML (paragraphs, bold underlined links) - it is the piece `UbContentSection` uses internally for its own body; do not duplicate it manually when already using `UbContentSection`. Use it standalone only for independent rich text (e.g. the page contract's `ub.richText` section). `size="lead"` for a page's featured intro paragraph, `bodyWidth="wide"` to drop the `max-w-4xl` cap when the parent container already controls it.

La UB combina docència i recerca capdavantera en biociències, ciències socials i humanitats. Consulta el portal de recerca per veure els projectes actius.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="max-w-4xl text-ub-text [&amp;_a]:font-bold [&amp;_a]:text-ub-text [&amp;_a]:underline hover:[&amp;_a]:text-ub-blue text-xl leading-8 md:text-2xl md:leading-9 ">
  <p>La UB combina docència i recerca capdavantera en biociències, ciències socials i humanitats. Consulta el portal de recerca per veure els projectes actius.</p>
  </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.richText",
  "title": "Sobre la recerca a la UB",
  "body": [
    "La UB combina docència i recerca capdavantera en biociències, ciències socials i humanitats. Consulta el portal de recerca per veure els projectes actius."
  ]
}
Props i codi font (UbRichText)
src/components/ub/UbRichText.tsx ↗
PropTipusPer defecte
sizeenumnormal
bodyWidthenumnormal
classNamestring

Notícies i premsa

Llistats i fitxes de notícies, mencions als mitjans, opinió d'experts i perfils/mur de xarxes socials.

UbExpertOpinionHighlight

Destacat d'opinió d'experts

Quan i com fer-lo servir: Use this for the single-featured-expert-opinion teaser seen on `actualitat/sala-de-premsa` (and similar subsite pages) - NOT for the "Opinió d'experts" full listing (`UbNewsList`) or the expert-opinion detail page (`UbNewsDetail`). Keep `action` pointing to the "Opinió d'experts" listing URL. The gray band uses the `left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2` full-bleed technique (same as `UbSearchBar`/`UbStudySearchHero`) - do not wrap this component in a `max-w-[...]` container or the band will clip/misalign; place it directly in the page flow like a header/footer.

Un infant juga amb una tauleta mentre un adult consulta el mòbil, il·lustrant la tecnoferència

Tecnoferència: quan el mòbil de l'adult interromp la conversa amb l'infant

25/06/2026

Esther Gratacòs Batlle Facultat d'Infermeria

Cada vegada som més conscients de la importància de reduir tant com puguem el temps de pantalla en la primera infància. Ens preocupa si els infants miren massa dibuixos, si agafen el mòbil massa aviat o si la tauleta s'ha convertit en una companya habitual de les estones d'espera.

Correcció aplicada: A la pàgina real "Sala de premsa" el títol "Expertesa UB" i l'enllaç "Totes les opinions" comparteixen la mateixa línia separats per una barra vertical (`::before` de l'enllaç a l'original, no un caràcter "|" - per això no apareix en cap extracció de text/`getComputedStyle` del contingut, només mesurant amplada/alçada/`background-color` del pseudo-element). Hi ha 78px de separació real entre aquesta capçalera i la banda gris. La banda gris (`#EBEBEB`) és full-bleed (ocupa tot l'ample de finestra, no el de la graella de contingut) i la foto quadrada sobresurt per sobre i per sota de la banda (mesurat amb `getBoundingClientRect`: la imatge creix proporcionalment amb el contenidor mentre el padding de la banda és fix, així que la imatge la desborda més com més ample és la pantalla - reproduït amb un marge negatiu fix en lloc del hack fràgil `position:absolute` de l'original). En mòbil, autor i facultat es mostren en dues línies separades sense separador; en escriptori comparteixen línia amb un separador "|". Contingut i imatge reals publicats a `web.ub.edu` en el moment de generar aquest exemple.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div>
  <div class="mt-6 flex flex-wrap items-center gap-x-5 gap-y-2">
    <h2 class="text-balance text-2xl font-medium leading-[28.8px] text-black md:text-[45px] md:leading-[54px]">Expertesa UB</h2>
      <span aria-hidden="true" class="h-[30px] w-px bg-black">
      </span>
      <a href="https://web.ub.edu/ca/web/actualitat/opinio-dels-experts" class="inline-flex items-center gap-3 text-base font-normal text-black hover:text-ub-blue md:gap-4 md:text-[20px]">
        <span>Totes les opinions</span>
          <svg aria-hidden="true" viewBox="0 0 10 17.49" class="h-[18px] w-[10.3px] shrink-0 fill-current">
            <path d="M18.232,14.938,11.614,8.325a1.245,1.245,0,0,1,0-1.765,1.26,1.26,0,0,1,1.77,0l7.5,7.493a1.248,1.248,0,0,1,.036,1.724l-7.53,7.545a1.25,1.25,0,0,1-1.77-1.765Z" transform="translate(-11.246 -6.196)">
            </path>
          </svg>
        </a>
      </div>
      <div class="relative left-1/2 mt-[78px] w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 bg-[#EBEBEB] px-[15px] py-6">
        <div class="mx-auto grid max-w-[1400px] gap-8 md:grid-cols-3 md:items-center md:gap-12">
          <img src="https://web.ub.edu/documents/2710030/0/file-20260615-57-7spuws+%282%29.jpg/f6608fb5-9ba9-06dd-774a-1b29c8a276af?t=1782389963151" alt="Un infant juga amb una tauleta mentre un adult consulta el mòbil, il·lustrant la tecnoferència" loading="lazy" class="relative z-10 -mt-6 mb-6 aspect-square w-2/3 object-cover mx-auto md:col-span-1 md:mx-0 md:-mt-10 md:-mb-10 md:w-full"/>
          <div class="md:col-span-2">
            <h3 class="text-balance text-xl font-medium leading-tight text-black md:text-[28px] md:leading-[33.6px]">
              <a href="https://web.ub.edu/ca/web/actualitat/w/tecnofer%C3%A8ncia-quan-el-m%C3%B2bil-de-l-adult-interromp-la-conversa-amb%E2%80%AFl-infant" class="hover:underline">Tecnoferència: quan el mòbil de l&#x27;adult interromp la conversa amb l&#x27;infant</a>
              </h3>
              <p class="mt-4 text-base text-ub-muted md:text-[22px]">25/06/2026</p>
                <div class="mt-3 flex flex-col gap-4 text-base text-[#484848] md:flex-row md:items-center md:gap-3 md:gap-y-0 md:text-[22px]">
                  <span>Esther Gratacòs Batlle</span>
                    <span class="hidden text-ub-muted md:inline" aria-hidden="true">|</span>
                      <span>Facultat d&#x27;Infermeria</span>
                      </div>
                      <p class="mt-4 text-base leading-7 text-ub-muted md:mt-5 md:text-[22px] md:leading-9">Cada vegada som més conscients de la importància de reduir tant com puguem el temps de pantalla en la primera infància. Ens preocupa si els infants miren massa dibuixos, si agafen el mòbil massa aviat o si la tauleta s&#x27;ha convertit en una companya habitual de les estones d&#x27;espera.</p>
                      </div>
                    </div>
                  </div>
                </div>
Props i codi font (UbExpertOpinionHighlight)
src/components/ub/UbExpertOpinionHighlight.tsx ↗
PropTipusPer defecte
title *string
action *{ label: string; href: string; }
href *string
articleTitle *string
date *string
author *string
faculty *string
excerpt *string
image *{ src: string; alt: string; }

UbMediaMentionList

La universitat als mitjans de comunicació

2 variants

Quan i com fer-lo servir: Pass `mediumColor="#869130"` to match the real Actualitat subsite index; omit it elsewhere to use the default category color token. `logo` is optional per item - the card reserves the same `aspect-[16/9]` box either way to avoid layout shift.

Quan i com fer-lo servir: Pass `columns={4}` for a denser 4-up grid on wide pages that have room for it; the default is `columns={3}` used above, matching the real Actualitat subsite index.

La universitat als mitjans de comunicació

Font: Actualitat UB.edu
  • Aparició de la UB als mitjans: El Periódico

    Premsa digital

    El Periódico

    Avenç per tractar la celiaquia: científics de Barcelona desenvolupen una molècula capaç de degradar el gluten.

Correcció aplicada: A l'original, el `medium` (Ràdio, Premsa escrita...) sempre es força al mateix color oliva `#869130` via `mediumColor`, no al `text-ub-research` per defecte del component. El nom del mitjà/programa entre parèntesis (p. ex. "Radio 4 (Son 4 dies)") es mostra en cursiva automàticament; la resta del títol no.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3 ">
  <li>
    <article class="flex h-full flex-col border border-ub-line">
      <img src="https://web.ub.edu/documents/2710030/46107409/ChatGPTKL26.png/8cb0f7e4-7c78-31e8-2d96-85bcf8d44a3c?t=1783001861346" alt="Aparició de la UB als mitjans: Radio 4" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
      <div class="p-6">
        <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Ràdio</p>
          <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
            <a href="https://www.rtve.es/play/audios/son-4-dies/festa-ciencia-universitat-barcelona/17071775/" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Radio 4 <i>(Son 4 dies)</i>
            </a>
          </h3>
          <p class="mt-2 text-base leading-6 text-ub-text">Entrevista sobre la Festa de la Ciència de la UB.</p>
          </div>
        </article>
      </li>
      <li>
        <article class="flex h-full flex-col border border-ub-line">
          <img src="https://web.ub.edu/documents/2710030/46107409/ChatGPTKL26.png/8cb0f7e4-7c78-31e8-2d96-85bcf8d44a3c?t=1783001861346" alt="Aparició de la UB als mitjans: La Vanguardia" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
          <div class="p-6">
            <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Premsa escrita</p>
              <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
                <a href="https://web.ub.edu/documents/d/actualitat/lavanguardia-20260505" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                  <i>La Vanguardia</i>
                  </a>
                </h3>
                <p class="mt-2 text-base leading-6 text-ub-text">La Llum de Lita Cabellut.</p>
                </div>
              </article>
            </li>
            <li>
              <article class="flex h-full flex-col border border-ub-line">
                <img src="https://web.ub.edu/documents/2710030/46107409/ChatGPTKL26.png/8cb0f7e4-7c78-31e8-2d96-85bcf8d44a3c?t=1783001861346" alt="Aparició de la UB als mitjans: El Periódico" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
                <div class="p-6">
                  <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Premsa digital</p>
                    <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
                      <a href="https://www.elperiodico.com/es/sociedad/20260514/cientificos-barcelona-molecula-gluten-celiaquia-tratamiento-130211898" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                        <i>El Periódico</i>
                        </a>
                      </h3>
                      <p class="mt-2 text-base leading-6 text-ub-text">Avenç per tractar la celiaquia: científics de Barcelona desenvolupen una molècula capaç de degradar el gluten.</p>
                      </div>
                    </article>
                  </li>
                </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.mediaMentions",
  "id": "mitjans",
  "title": "La universitat als mitjans de comunicació",
  "mediumColor": "#869130",
  "items": [
    {
      "medium": "Ràdio",
      "title": "Radio 4 (Son 4 dies)",
      "logo": {
        "src": "https://web.ub.edu/documents/2710030/46107409/ChatGPTKL26.png/8cb0f7e4-7c78-31e8-2d96-85bcf8d44a3c?t=1783001861346",
        "alt": "Aparició de la UB als mitjans: Radio 4"
      },
      "href": "https://www.rtve.es/play/audios/son-4-dies/festa-ciencia-universitat-barcelona/17071775/",
      "summary": "Entrevista sobre la Festa de la Ciència de la UB."
    },
    {
      "medium": "Premsa escrita",
      "title": "La Vanguardia",
      "logo": {
        "src": "https://web.ub.edu/documents/2710030/46107409/ChatGPTKL26.png/8cb0f7e4-7c78-31e8-2d96-85bcf8d44a3c?t=1783001861346",
        "alt": "Aparició de la UB als mitjans: La Vanguardia"
      },
      "href": "https://web.ub.edu/documents/d/actualitat/lavanguardia-20260505",
      "summary": "La Llum de Lita Cabellut."
    },
    {
      "medium": "Premsa digital",
      "title": "El Periódico",
      "logo": {
        "src": "https://web.ub.edu/documents/2710030/46107409/ChatGPTKL26.png/8cb0f7e4-7c78-31e8-2d96-85bcf8d44a3c?t=1783001861346",
        "alt": "Aparició de la UB als mitjans: El Periódico"
      },
      "href": "https://www.elperiodico.com/es/sociedad/20260514/cientificos-barcelona-molecula-gluten-celiaquia-tratamiento-130211898",
      "summary": "Avenç per tractar la celiaquia: científics de Barcelona desenvolupen una molècula capaç de degradar el gluten."
    }
  ]
}

La universitat als mitjans (4 columnes)

  • Premsa digital

    El Periódico

    Avenç per tractar la celiaquia: científics de Barcelona desenvolupen una molècula capaç de degradar el gluten.

  • Televisió

    3Cat

    Reportatge sobre recerca universitària a Catalunya.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4 ">
  <li>
    <article class="flex h-full flex-col border border-ub-line">
      <div class="aspect-[16/9] w-full bg-ub-panel" aria-hidden="true">
      </div>
      <div class="p-6">
        <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Ràdio</p>
          <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
            <a href="https://www.rtve.es/play/audios/son-4-dies/festa-ciencia-universitat-barcelona/17071775/" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Radio 4 <i>(Son 4 dies)</i>
            </a>
          </h3>
          <p class="mt-2 text-base leading-6 text-ub-text">Entrevista sobre la Festa de la Ciència de la UB.</p>
          </div>
        </article>
      </li>
      <li>
        <article class="flex h-full flex-col border border-ub-line">
          <div class="aspect-[16/9] w-full bg-ub-panel" aria-hidden="true">
          </div>
          <div class="p-6">
            <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Premsa escrita</p>
              <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
                <a href="https://web.ub.edu/documents/d/actualitat/lavanguardia-20260505" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                  <i>La Vanguardia</i>
                  </a>
                </h3>
                <p class="mt-2 text-base leading-6 text-ub-text">La Llum de Lita Cabellut.</p>
                </div>
              </article>
            </li>
            <li>
              <article class="flex h-full flex-col border border-ub-line">
                <div class="aspect-[16/9] w-full bg-ub-panel" aria-hidden="true">
                </div>
                <div class="p-6">
                  <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Premsa digital</p>
                    <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
                      <a href="https://www.elperiodico.com/es/sociedad/20260514/cientificos-barcelona-molecula-gluten-celiaquia-tratamiento-130211898" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                        <i>El Periódico</i>
                        </a>
                      </h3>
                      <p class="mt-2 text-base leading-6 text-ub-text">Avenç per tractar la celiaquia: científics de Barcelona desenvolupen una molècula capaç de degradar el gluten.</p>
                      </div>
                    </article>
                  </li>
                  <li>
                    <article class="flex h-full flex-col border border-ub-line">
                      <div class="aspect-[16/9] w-full bg-ub-panel" aria-hidden="true">
                      </div>
                      <div class="p-6">
                        <p class="text-[19px] font-bold uppercase leading-[28.5px] " style="color:#869130">Televisió</p>
                          <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text">
                            <a href="https://www.3cat.cat/" class="hover:text-ub-blue focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                              <i>3Cat</i>
                              </a>
                            </h3>
                            <p class="mt-2 text-base leading-6 text-ub-text">Reportatge sobre recerca universitària a Catalunya.</p>
                            </div>
                          </article>
                        </li>
                      </ul>
Props i codi font (UbMediaMentionList)
src/components/ub/UbMediaMentionList.tsx ↗
PropTipusPer defecte
items *UbMediaMentionItem[]
columnsenum3
mediumColorstring
headingLevelenum3
classNamestring

UbNewsDetail

Fitxa de notícia

Quan i com fer-lo servir: Use this for news, press-note and expert-opinion detail pages with a title, share links, image/media band, categories/date and article body. When a local JSON section type `ub.newsDetail` exists, map it to `UbNewsDetail`. The section owns the page H1, so do not add a separate `UbPageHeader` above it. Preserve `shareUrl`, image/caption, categories, date, summary, body paragraphs, `bodyLinks`, `pullQuote`, and optional `gallery` from the source page. `pullQuote` is rendered inside the body as the blue-rule quote block shown here. If `gallery.items` exists, render the "Galeria multimèdia" heading and the gallery grid immediately after the article body; if the source page has no gallery, omit the whole gallery block instead of leaving empty placeholders.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

La UB obre les inscripcions de la segona edició d'UB Alma Mater, el torneig universitari de League of Legends

Comparteix: in b f w
Imatge de la primera edició d'UB Alma Mater.
Imatge de la primera edició d'UB Alma Mater.
Notícia Institucional Esport

06/07/2026

La Universitat de Barcelona ha obert les inscripcions per participar en la segona edició d'UB Alma Mater, el torneig de League of Legends adreçat a tota la comunitat universitària.

Després de la primera edició, celebrada el curs 2024-2025, la Universitat consolida aquesta iniciativa amb l'objectiu de fomentar la participació i la interacció entre membres de diverses facultats i de col·lectius diferents.

La competició començarà el 9 d'octubre amb una jornada inaugural al SAGA. Totes les partides es retransmetran en directe pel canal de Twitch de la UB.

La competició començarà el 9 d'octubre i reunirà alumnat, PDI, PTGAS i Alumni en equips mixtos formats per membres de tota la comunitat UB.

Les bases de la competició, el formulari d'inscripció i tota la informació sobre UB Alma Mater es poden consultar al web del projecte.

Galeria multimèdia

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div>
  <article class="">
    <h1 class="mb-2 text-pretty font-roboto text-[45px] font-medium leading-[54px] text-black">La UB obre les inscripcions de la segona edició d&#x27;UB Alma Mater, el torneig universitari de League of Legends</h1>
      <div class="mt-4 mb-8 md:mb-[74px]">
        <div class="flex flex-wrap items-center gap-1.5">
          <span class="mr-[14px] font-roboto text-[22px] leading-[33px] text-black">Comparteix:</span>
            <a href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Finscripcions-segona-edicio-ub-alma-mater&amp;title=La%20UB%20obre%20les%20inscripcions%20de%20la%20segona%20edici%C3%B3%20d&#x27;UB%20Alma%20Mater%2C%20el%20torneig%20universitari%20de%20League%20of%20Legends" aria-label="Comparteix a LinkedIn" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#0A66C2] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">in</a>
              <a href="https://bsky.app/intent/compose?text=La%20UB%20obre%20les%20inscripcions%20de%20la%20segona%20edici%C3%B3%20d&#x27;UB%20Alma%20Mater%2C%20el%20torneig%20universitari%20de%20League%20of%20Legends%20https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Finscripcions-segona-edicio-ub-alma-mater" aria-label="Comparteix a Bluesky" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#1185FE] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">b</a>
                <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Finscripcions-segona-edicio-ub-alma-mater" aria-label="Comparteix a Facebook" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#1877F2] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">f</a>
                  <a href="https://api.whatsapp.com/send?text=La%20UB%20obre%20les%20inscripcions%20de%20la%20segona%20edici%C3%B3%20d&#x27;UB%20Alma%20Mater%2C%20el%20torneig%20universitari%20de%20League%20of%20Legends%20https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Finscripcions-segona-edicio-ub-alma-mater" aria-label="Comparteix a WhatsApp" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#10A512] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">w</a>
                  </div>
                </div>
                <div class="md:-mx-[calc(50vw-50%)] md:bg-[#ebebeb] md:px-[calc(50vw-50%)] md:py-6 lg:py-0">
                  <div class="mx-auto grid max-w-[1400px] gap-6 md:grid-cols-[5fr_7fr] lg:gap-8">
                    <div class="w-full md:-mt-[38px]">
                      <figure>
                        <img src="https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354" alt="Imatge de la primera edició d&#x27;UB Alma Mater." loading="lazy" class="aspect-video w-full object-cover"/>
                        <figcaption class="mt-2 text-sm leading-5 text-[#646464]">Imatge de la primera edició d&#x27;UB Alma Mater.</figcaption>
                        </figure>
                      </div>
                      <div class="py-0 md:py-6 md:pr-6 lg:py-8 lg:pr-8">
                        <div class="mb-2 flex flex-wrap gap-x-2 font-roboto text-[14px] font-bold uppercase leading-[21px] text-[#8f460a] md:text-[18px] md:leading-[27px]">
                          <span>Notícia<span aria-hidden="true" class="ml-2">|</span>
                          </span>
                          <span>Institucional<span aria-hidden="true" class="ml-2">|</span>
                          </span>
                          <span>Esport</span>
                          </div>
                          <p class="mb-6 font-roboto text-[18px] font-medium leading-[27px] text-[#646464] md:mb-[34px] md:text-[22px] md:leading-[33px]">06/07/2026</p>
                            <p class="font-roboto text-[16px] font-bold leading-[24px] text-black md:text-[22px] md:leading-[32px]">La Universitat de Barcelona ha obert les inscripcions per participar en la segona edició d&#x27;UB Alma Mater, el torneig de League of Legends adreçat a tota la comunitat universitària.</p>
                            </div>
                          </div>
                        </div>
                        <div class="mt-8 flex flex-col gap-0 font-roboto text-[18px] leading-[32px] text-black">
                          <p>Després de la primera edició, celebrada el curs 2024-2025, la Universitat consolida aquesta iniciativa amb l&#x27;objectiu de fomentar la participació i la interacció entre membres de diverses facultats i de col·lectius diferents.</p>
                            <p>La competició començarà el 9 d&#x27;octubre amb una jornada inaugural al SAGA. Totes les partides es retransmetran en directe pel canal de Twitch de la UB.</p>
                              <blockquote class="my-8 border-y-2 border-ub-blue py-5 text-center font-[&#x27;Gentium_Book_Basic&#x27;,Georgia,serif] text-[30px] font-normal leading-[52px] text-black text-pretty md:-mx-[calc(50vw-50%)] ">
                                <span class="mx-auto block max-w-[1430px] px-[15px]">La competició començarà el 9 d&#x27;octubre i reunirà alumnat, PDI, PTGAS i Alumni en equips mixtos formats per membres de tota la comunitat UB.</span>
                                </blockquote>
                                <p>Les bases de la competició, el formulari d&#x27;inscripció i tota la informació sobre UB Alma Mater es poden consultar al web del projecte.</p>
                                </div>
                              </article>
                              <section class="mt-12">
                                <h2 class="mb-6 font-roboto text-[32px] font-bold leading-[38px] text-black md:text-[36px] md:leading-[43px]">Galeria multimèdia</h2>
                                  <div class="w-full ">
                                    <div class="grid gap-5 md:grid-cols-2 lg:grid-cols-[451px_451px]">
                                      <button type="button" aria-label="Amplia la imatge" class="block aspect-video w-full overflow-hidden border border-[#ebebeb] bg-white text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-ub-blue">
                                        <img src="https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_2.png/3a2bc0a8-fdaf-5989-8f71-0b654ab53d6f?t=1783337621125" alt="Imatge de la primera edició d&#x27;UB Alma Mater." loading="lazy" class="h-full w-full object-cover"/>
                                      </button>
                                      <button type="button" aria-label="Amplia la imatge" class="block aspect-video w-full overflow-hidden border border-[#ebebeb] bg-white text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-ub-blue">
                                        <img src="https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_3.png/f5be9c84-0e72-e928-a976-800e4ad8dfec?t=1783337640007" alt="Imatge de la primera edició d&#x27;UB Alma Mater." loading="lazy" class="h-full w-full object-cover"/>
                                      </button>
                                    </div>
                                  </div>
                                </section>
                              </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.newsDetail",
  "id": "noticia",
  "title": "La UB obre les inscripcions de la segona edició d'UB Alma Mater, el torneig universitari de League of Legends",
  "shareUrl": "https://web.ub.edu/ca/web/actualitat/w/inscripcions-segona-edicio-ub-alma-mater",
  "image": {
    "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354",
    "alt": "Imatge de la primera edició d'UB Alma Mater.",
    "caption": "Imatge de la primera edició d'UB Alma Mater."
  },
  "categories": [
    "Notícia",
    "Institucional",
    "Esport"
  ],
  "date": "06/07/2026",
  "summary": "La Universitat de Barcelona ha obert les inscripcions per participar en la segona edició d'UB Alma Mater, el torneig de League of Legends adreçat a tota la comunitat universitària.",
  "body": [
    "Després de la primera edició, celebrada el curs 2024-2025, la Universitat consolida aquesta iniciativa amb l'objectiu de fomentar la participació i la interacció entre membres de diverses facultats i de col·lectius diferents.",
    "La competició començarà el 9 d'octubre amb una jornada inaugural al SAGA. Totes les partides es retransmetran en directe pel canal de Twitch de la UB.",
    "Les bases de la competició, el formulari d'inscripció i tota la informació sobre UB Alma Mater es poden consultar al web del projecte."
  ],
  "bodyLinks": [
    {
      "paragraphIndex": 2,
      "text": "web del projecte",
      "href": "https://web.ub.edu/ca/web/ub-alma-mater"
    }
  ],
  "pullQuote": "La competició començarà el 9 d'octubre i reunirà alumnat, PDI, PTGAS i Alumni en equips mixtos formats per membres de tota la comunitat UB.",
  "gallery": {
    "title": "Galeria multimèdia",
    "items": [
      {
        "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_2.png/3a2bc0a8-fdaf-5989-8f71-0b654ab53d6f?t=1783337621125",
        "alt": "Imatge de la primera edició d'UB Alma Mater."
      },
      {
        "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_3.png/f5be9c84-0e72-e928-a976-800e4ad8dfec?t=1783337640007",
        "alt": "Imatge de la primera edició d'UB Alma Mater."
      }
    ]
  }
}
Props i codi font (UbNewsDetail)
src/components/ub/UbNewsDetail.tsx ↗
PropTipusPer defecte
eyebrowstring
title *string
shareUrl *string
image{ src: string; alt: string; caption?: string; }
categories *string[]
date *string
summary *string
classNamestring

UbNewsList

Notícies (portada)

4 variants

Quan i com fer-lo servir: Do NOT precede this component with `UbSectionHeaderWithAction` for the "Actualitat" pattern - pass `title` and `titleAction` directly to `UbNewsList` instead, and set `itemsPerPage` (with more items than that number) to get the real prev/next pager in the same header row. `UbSectionHeaderWithAction` is for other sections that have no pager.

Quan i com fer-lo servir: Use `variant="compact"` with `image` set on every item (not image-less) for the "Destaquem" pattern - just omit `date`, the real block has none. `variant="grid"` (with `date`) is for the homepage "Actualitat" pattern instead.

Quan i com fer-lo servir: Use `variant="textCards"` for news/highlight carousels or grids whose cards are bordered text-only cards, with no image area at all. This is the no-local-JSON match for source blocks that show only text cards plus an optional heading/action/pager row. Pass `title`, `titleAction` and `itemsPerPage` when the real block has that row; do not use `variant="compact"` here because compact reserves an image slot.

Quan i com fer-lo servir: Use `variant="list"` for the main `actualitat-noticies` results list as well as related-news lists. Keep `summary` when the source page has it, and pass `image` only for the items that really have one; do not reserve fake image boxes for image-less news in this variant.

Notícies (portada)

Font: portada UB.edu

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Actualitat

Tota l'actualitat

Correcció aplicada: `UbNewsList` amb `title`/`titleAction` cobreix el bloc "Actualitat" complet de la portada: capçalera (títol + enllaç "Tota l'actualitat" + paginador) i graella de 4 columnes amb imatge, categoria, data i resum (`summary`). A la pàgina real, el títol, l'enllaç i el paginador comparteixen la mateixa fila — per això viuen dins de `UbNewsList`, no en un `UbSectionHeaderWithAction` separat. Les 4 notícies, imatges i resums són els reals publicats a `web.ub.edu` en el moment de generar aquest exemple. La vora de la card (`border-ub-line`) coincideix amb la real (`#EBEBEB` a `web.ub.edu`, molt propera al nostre token `ub-line` `#DEDEDE`).

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="mb-[31px] flex flex-wrap items-center justify-between gap-4">
    <div class="flex flex-wrap items-center gap-x-5 gap-y-1">
      <h2 class="text-pretty text-[45px] font-bold leading-[54px] text-black">Actualitat</h2>
        <span aria-hidden="true" class="h-[30px] w-px bg-black">
        </span>
        <a href="https://web.ub.edu/ca/web/actualitat" class="inline-flex items-center gap-1 text-[20px] font-medium leading-6 text-black hover:text-ub-blue">Tota l&#x27;actualitat<svg aria-hidden="true" viewBox="0 0 10 17.49" class="h-[18px] w-[10.3px] shrink-0 fill-current">
          <path d="M18.232,14.938,11.614,8.325a1.245,1.245,0,0,1,0-1.765,1.26,1.26,0,0,1,1.77,0l7.5,7.493a1.248,1.248,0,0,1,.036,1.724l-7.53,7.545a1.25,1.25,0,0,1-1.77-1.765Z" transform="translate(-11.246 -6.196)">
          </path>
        </svg>
      </a>
    </div>
    <div class="flex gap-2">
      <button type="button" disabled="" aria-label="Anterior" class="flex h-10 w-10 items-center justify-center rounded-full border-[3px] border-black/80 bg-white text-black disabled:cursor-not-allowed disabled:border-ub-line disabled:text-ub-muted disabled:opacity-40">
        <span aria-hidden="true" class="block h-[10px] w-[10px] border-r-[3px] border-b-[3px] border-current translate-x-[2px] rotate-[135deg]">
        </span>
      </button>
      <button type="button" aria-label="Següent" class="flex h-10 w-10 items-center justify-center rounded-full border-[3px] border-black/80 bg-white text-black disabled:cursor-not-allowed disabled:border-ub-line disabled:text-ub-muted disabled:opacity-40">
        <span aria-hidden="true" class="block h-[10px] w-[10px] border-r-[3px] border-b-[3px] border-current -translate-x-[2px] -rotate-45">
        </span>
      </button>
    </div>
  </div>
  <ul class="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
    <li>
      <article class="group relative flex h-full flex-col border border-ub-line bg-white transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.36)]">
        <img src="https://web.ub.edu/documents/2685349/6785461/notes-tall-2026.jpg/5a2dc888-ee0b-6064-4c63-cdc42b8090b3?t=1783678770145" alt="Set de les nou titulacions més demanades a Catalunya són de la Universitat de Barcelona" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
        <div class="flex flex-1 flex-col p-6">
          <div class="flex items-center justify-between gap-3">
            <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Acadèmic</p>
              <p class="text-[19px] font-medium leading-[28.5px] text-ub-muted">10-07-2026</p>
              </div>
              <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                <a href="https://web.ub.edu/ca/web/actualitat/w/universitat-mes-solicitada-primera-opcio-2026" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La Universitat de Barcelona torna a ser la universitat catalana més sol·licitada en primera opció</a>
                </h3>
                <p class="mt-3 text-base leading-6 text-ub-text">Medicina, Odontologia, Administració i Direcció d&#x27;Empreses i Psicologia, entre les preferides per l&#x27;alumnat nou.</p>
                </div>
              </article>
            </li>
            <li>
              <article class="group relative flex h-full flex-col border border-ub-line bg-white transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.36)]">
                <img src="https://web.ub.edu/documents/2685349/6785461/estatut-ub-2025.jpg/70cc4dee-0542-56b1-e438-78172d6e5e23?t=1783601510533" alt="El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
                <div class="flex flex-1 flex-col p-6">
                  <div class="flex items-center justify-between gap-3">
                    <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Institucional</p>
                      <p class="text-[19px] font-medium leading-[28.5px] text-ub-muted">09-07-2026</p>
                      </div>
                      <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                        <a href="https://web.ub.edu/ca/web/actualitat/w/nou-estatut-entra-en-vigor" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol</a>
                        </h3>
                        <p class="mt-3 text-base leading-6 text-ub-text">S&#x27;ha publicat avui al Diari Oficial de la Generalitat de Catalunya, després del vistiplau del Govern.</p>
                        </div>
                      </article>
                    </li>
                    <li>
                      <article class="group relative flex h-full flex-col border border-ub-line bg-white transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.36)]">
                        <img src="https://web.ub.edu/documents/2685349/6785461/trobada-institucions-sanitaries-2026.jpg/b229b6a9-f56e-bfad-83b8-ea5688e12d79?t=1783593314831" alt="La salut planetària i la medicina de precisió, temes de la trobada anual entre la UB i les institucions sanitàries amb què està vinculada" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
                        <div class="flex flex-1 flex-col p-6">
                          <div class="flex items-center justify-between gap-3">
                            <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Institucional</p>
                              <p class="text-[19px] font-medium leading-[28.5px] text-ub-muted">09-07-2026</p>
                              </div>
                              <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                                <a href="https://web.ub.edu/ca/web/actualitat/w/trobada-anual-institucions-sanitaries-2026" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La salut planetària i la medicina de precisió, temes de la trobada anual entre la UB i les institucions sanitàries amb què està vinculada</a>
                                </h3>
                                <p class="mt-3 text-base leading-6 text-ub-text">El rector, Joan Guàrdia, va qualificar de prioritària la relació amb aquesta xarxa hospitalària, on fan pràctiques 4.400 alumnes de la UB.</p>
                                </div>
                              </article>
                            </li>
                            <li>
                              <article class="group relative flex h-full flex-col border border-ub-line bg-white transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.36)]">
                                <img src="https://web.ub.edu/documents/2710030/46107409/charmeu-20260706.jpg/116d97ab-582e-99a6-849a-11d9ab701631?t=1783329840706" alt="La CHARM-EU obté set milions d&#x27;euros de finançament europeu per créixer fins al 2028" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
                                <div class="flex flex-1 flex-col p-6">
                                  <div class="flex items-center justify-between gap-3">
                                    <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Internacional</p>
                                      <p class="text-[19px] font-medium leading-[28.5px] text-ub-muted">09-07-2026</p>
                                      </div>
                                      <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                                        <a href="https://web.ub.edu/ca/web/actualitat/w/charmeu-financament-europeu" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La CHARM-EU obté set milions d&#x27;euros de finançament europeu per créixer fins al 2028</a>
                                        </h3>
                                        <p class="mt-3 text-base leading-6 text-ub-text">L&#x27;aliança universitària CHARM-EU ha obtingut 7,2 milions d&#x27;euros de finançament en la convocatòria Erasmus+ European Universities 2026, que li permetran consolidar i ampliar les activitats fins al 2028.</p>
                                        </div>
                                      </article>
                                    </li>
                                  </ul>
                                </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.newsList",
  "id": "actualitat",
  "title": "Actualitat",
  "action": {
    "label": "Tota l'actualitat",
    "href": "https://web.ub.edu/ca/web/actualitat"
  },
  "variant": "grid",
  "columns": 4,
  "itemsPerPage": 4,
  "items": [
    {
      "title": "La Universitat de Barcelona torna a ser la universitat catalana més sol·licitada en primera opció",
      "href": "https://web.ub.edu/ca/web/actualitat/w/universitat-mes-solicitada-primera-opcio-2026",
      "category": "Acadèmic",
      "date": "10-07-2026",
      "summary": "Medicina, Odontologia, Administració i Direcció d'Empreses i Psicologia, entre les preferides per l'alumnat nou.",
      "image": {
        "src": "https://web.ub.edu/documents/2685349/6785461/notes-tall-2026.jpg/5a2dc888-ee0b-6064-4c63-cdc42b8090b3?t=1783678770145",
        "alt": "Set de les nou titulacions més demanades a Catalunya són de la Universitat de Barcelona"
      }
    },
    {
      "title": "El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol",
      "href": "https://web.ub.edu/ca/web/actualitat/w/nou-estatut-entra-en-vigor",
      "category": "Institucional",
      "date": "09-07-2026",
      "summary": "S'ha publicat avui al Diari Oficial de la Generalitat de Catalunya, després del vistiplau del Govern.",
      "image": {
        "src": "https://web.ub.edu/documents/2685349/6785461/estatut-ub-2025.jpg/70cc4dee-0542-56b1-e438-78172d6e5e23?t=1783601510533",
        "alt": "El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol"
      }
    },
    {
      "title": "La salut planetària i la medicina de precisió, temes de la trobada anual entre la UB i les institucions sanitàries amb què està vinculada",
      "href": "https://web.ub.edu/ca/web/actualitat/w/trobada-anual-institucions-sanitaries-2026",
      "category": "Institucional",
      "date": "09-07-2026",
      "summary": "El rector, Joan Guàrdia, va qualificar de prioritària la relació amb aquesta xarxa hospitalària, on fan pràctiques 4.400 alumnes de la UB.",
      "image": {
        "src": "https://web.ub.edu/documents/2685349/6785461/trobada-institucions-sanitaries-2026.jpg/b229b6a9-f56e-bfad-83b8-ea5688e12d79?t=1783593314831",
        "alt": "La salut planetària i la medicina de precisió, temes de la trobada anual entre la UB i les institucions sanitàries amb què està vinculada"
      }
    },
    {
      "title": "La CHARM-EU obté set milions d'euros de finançament europeu per créixer fins al 2028",
      "href": "https://web.ub.edu/ca/web/actualitat/w/charmeu-financament-europeu",
      "category": "Internacional",
      "date": "09-07-2026",
      "summary": "L'aliança universitària CHARM-EU ha obtingut 7,2 milions d'euros de finançament en la convocatòria Erasmus+ European Universities 2026, que li permetran consolidar i ampliar les activitats fins al 2028.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/46107409/charmeu-20260706.jpg/116d97ab-582e-99a6-849a-11d9ab701631?t=1783329840706",
        "alt": "La CHARM-EU obté set milions d'euros de finançament europeu per créixer fins al 2028"
      }
    },
    {
      "title": "La UB obre les inscripcions de la segona edició d'UB Alma Mater, el torneig universitari de League of Legends",
      "href": "https://web.ub.edu/ca/web/actualitat/w/inscripcions-segona-edicio-ub-alma-mater",
      "category": "Esport",
      "date": "06-07-2026",
      "summary": "La Universitat de Barcelona ha obert les inscripcions per participar en la segona edició d'UB Alma Mater, el torneig de League of Legends adreçat a tota la comunitat universitària.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354",
        "alt": "La UB obre les inscripcions de la segona edició d'UB Alma Mater, el torneig universitari de League of Legends"
      }
    }
  ]
}

Destaquem (variant compacta)

Font: Actualitat UB.edu

Correcció aplicada: El bloc "Destaquem" real (un carrusel Glider.js amb fletxes anterior/següent) mostra imatge + categoria + títol + resum per targeta, però NO data - a diferència del bloc "Actualitat" de portada. `variant="compact"` sí admet `image` (reserva la mateixa caixa `aspect-[16/9]` amb `bg-ub-panel` si no se'n passa cap) - no s'ha de confondre amb "sense imatge".

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="grid grid-cols-1 divide-y divide-ub-line sm:gap-y-10 sm:divide-y-0 sm:divide-x sm:grid-cols-2 lg:grid-cols-4 ">
  <li class="py-6 first:pt-0 sm:py-0 sm:px-8 sm:first:pl-0">
    <article class="group relative flex h-full flex-col">
      <img src="https://web.ub.edu/documents/2710030/41751574/aprovaci%C3%B3estatutslider.jpg/a09c30c7-114f-01fb-bd17-427bba5f10f6?t=1764158670306" alt="El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
      <div class="mt-4">
        <div class="flex items-center justify-between gap-3">
          <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Institucional</p>
          </div>
          <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
            <a href="https://web.ub.edu/ca/web/actualitat/w/nou-estatut-entra-en-vigor" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol</a>
            </h3>
            <p class="mt-2 text-base leading-6 text-ub-text">S&#x27;ha publicat avui al Diari Oficial de la Generalitat de Catalunya, després del vistiplau del Govern.</p>
            </div>
          </article>
        </li>
        <li class="py-6 first:pt-0 sm:py-0 sm:px-8 sm:first:pl-0">
          <article class="group relative flex h-full flex-col">
            <img src="https://web.ub.edu/documents/2710030/46107409/notes-tall-2026.jpg/c687cac3-bb50-90c3-94af-c5f7da4d0212?t=1783673239311" alt="La Universitat de Barcelona torna a ser la universitat catalana més sol·licitada en primera opció" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
            <div class="mt-4">
              <div class="flex items-center justify-between gap-3">
                <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Acadèmic</p>
                </div>
                <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                  <a href="https://web.ub.edu/ca/web/actualitat/w/universitat-mes-solicitada-primera-opcio-2026" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La Universitat de Barcelona torna a ser la universitat catalana més sol·licitada en primera opció</a>
                  </h3>
                  <p class="mt-2 text-base leading-6 text-ub-text">Medicina, Odontologia, Administració i Direcció d&#x27;Empreses i Psicologia, entre les preferides per l&#x27;alumnat nou.</p>
                  </div>
                </article>
              </li>
              <li class="py-6 first:pt-0 sm:py-0 sm:px-8 sm:first:pl-0">
                <article class="group relative flex h-full flex-col">
                  <img src="https://web.ub.edu/documents/2710030/46107409/charmeu-20260706.jpg/116d97ab-582e-99a6-849a-11d9ab701631?t=1783329840706" alt="La CHARM-EU obté set milions d&#x27;euros de finançament europeu per créixer fins al 2028" loading="lazy" class="aspect-[16/9] w-full object-cover"/>
                  <div class="mt-4">
                    <div class="flex items-center justify-between gap-3">
                      <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Internacional</p>
                      </div>
                      <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                        <a href="https://web.ub.edu/ca/web/actualitat/w/charmeu-financament-europeu" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La CHARM-EU obté set milions d&#x27;euros de finançament europeu per créixer fins al 2028</a>
                        </h3>
                        <p class="mt-2 text-base leading-6 text-ub-text">L&#x27;aliança universitària CHARM-EU ha obtingut 7,2 milions d&#x27;euros de finançament en la convocatòria Erasmus+ European Universities 2026.</p>
                        </div>
                      </article>
                    </li>
                  </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.newsList",
  "id": "destaquem-compacte",
  "title": "Destaquem",
  "hideTitle": true,
  "variant": "compact",
  "columns": 4,
  "items": [
    {
      "category": "Institucional",
      "title": "El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol",
      "href": "https://web.ub.edu/ca/web/actualitat/w/nou-estatut-entra-en-vigor",
      "summary": "S'ha publicat avui al Diari Oficial de la Generalitat de Catalunya, després del vistiplau del Govern.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/41751574/aprovaci%C3%B3estatutslider.jpg/a09c30c7-114f-01fb-bd17-427bba5f10f6?t=1764158670306",
        "alt": "El nou Estatut de la Universitat de Barcelona, en vigor a partir de demà, 10 de juliol"
      }
    },
    {
      "category": "Acadèmic",
      "title": "La Universitat de Barcelona torna a ser la universitat catalana més sol·licitada en primera opció",
      "href": "https://web.ub.edu/ca/web/actualitat/w/universitat-mes-solicitada-primera-opcio-2026",
      "summary": "Medicina, Odontologia, Administració i Direcció d'Empreses i Psicologia, entre les preferides per l'alumnat nou.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/46107409/notes-tall-2026.jpg/c687cac3-bb50-90c3-94af-c5f7da4d0212?t=1783673239311",
        "alt": "La Universitat de Barcelona torna a ser la universitat catalana més sol·licitada en primera opció"
      }
    },
    {
      "category": "Internacional",
      "title": "La CHARM-EU obté set milions d'euros de finançament europeu per créixer fins al 2028",
      "href": "https://web.ub.edu/ca/web/actualitat/w/charmeu-financament-europeu",
      "summary": "L'aliança universitària CHARM-EU ha obtingut 7,2 milions d'euros de finançament en la convocatòria Erasmus+ European Universities 2026.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/46107409/charmeu-20260706.jpg/116d97ab-582e-99a6-849a-11d9ab701631?t=1783329840706",
        "alt": "La CHARM-EU obté set milions d'euros de finançament europeu per créixer fins al 2028"
      }
    }
  ]
}

Destaquem sense imatge

Font: Escola de Doctorat
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="mb-[31px] flex flex-wrap items-center justify-between gap-4">
    <div class="flex flex-wrap items-center gap-x-5 gap-y-1">
      <h2 class="text-pretty text-[45px] font-bold leading-[54px] text-black">Destaquem</h2>
        <span aria-hidden="true" class="h-[30px] w-px bg-black">
        </span>
        <a href="https://web.ub.edu/ca/web/escola-doctorat/actualitat" class="inline-flex items-center gap-1 text-[20px] font-medium leading-6 text-black hover:text-ub-blue">Tota l&#x27;actualitat<svg aria-hidden="true" viewBox="0 0 10 17.49" class="h-[18px] w-[10.3px] shrink-0 fill-current">
          <path d="M18.232,14.938,11.614,8.325a1.245,1.245,0,0,1,0-1.765,1.26,1.26,0,0,1,1.77,0l7.5,7.493a1.248,1.248,0,0,1,.036,1.724l-7.53,7.545a1.25,1.25,0,0,1-1.77-1.765Z" transform="translate(-11.246 -6.196)">
          </path>
        </svg>
      </a>
    </div>
  </div>
  <ul class="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3">
    <li>
      <article class="group relative flex h-full flex-col border border-ub-line bg-white p-6 transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.18)]">
        <div class="flex items-center justify-between gap-3">
          <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Doctorat</p>
          </div>
          <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
            <a href="https://web.ub.edu/ca/web/escola-doctorat/actualitat" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Defensa de tesis doctorals</a>
            </h3>
            <p class="mt-3 text-base leading-6 text-ub-text">Consulta les properes defenses de tesis doctorals i les novetats de l’Escola de Doctorat.</p>
            </article>
          </li>
          <li>
            <article class="group relative flex h-full flex-col border border-ub-line bg-white p-6 transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.18)]">
              <div class="flex items-center justify-between gap-3">
                <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Convocatòries</p>
                </div>
                <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                  <a href="https://web.ub.edu/ca/web/escola-doctorat/actualitat" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Ajuts i tràmits per a doctorands</a>
                  </h3>
                  <p class="mt-3 text-base leading-6 text-ub-text">Informació sobre terminis, beques, ajuts i gestions acadèmiques vinculades al doctorat.</p>
                  </article>
                </li>
                <li>
                  <article class="group relative flex h-full flex-col border border-ub-line bg-white p-6 transition-shadow hover:shadow-[0_3px_6px_rgba(0,0,0,0.18)]">
                    <div class="flex items-center justify-between gap-3">
                      <p class="text-[19px] font-bold uppercase leading-[28.5px] text-ub-research">Recerca</p>
                      </div>
                      <h3 class="mt-2 text-pretty text-[22px] font-bold leading-[26.4px] text-ub-text group-hover:text-ub-blue">
                        <a href="https://web.ub.edu/ca/web/escola-doctorat/actualitat" class="after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Activitats formatives transversals</a>
                        </h3>
                        <p class="mt-3 text-base leading-6 text-ub-text">Sessions i recursos adreçats a estudiants de doctorat de tots els àmbits de coneixement.</p>
                        </article>
                      </li>
                    </ul>
                  </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.newsList",
  "id": "destaquem",
  "title": "Destaquem",
  "action": {
    "label": "Tota l'actualitat",
    "href": "https://web.ub.edu/ca/web/escola-doctorat/actualitat"
  },
  "variant": "textCards",
  "columns": 3,
  "itemsPerPage": 3,
  "items": [
    {
      "category": "Doctorat",
      "title": "Defensa de tesis doctorals",
      "href": "https://web.ub.edu/ca/web/escola-doctorat/actualitat",
      "summary": "Consulta les properes defenses de tesis doctorals i les novetats de l’Escola de Doctorat."
    },
    {
      "category": "Convocatòries",
      "title": "Ajuts i tràmits per a doctorands",
      "href": "https://web.ub.edu/ca/web/escola-doctorat/actualitat",
      "summary": "Informació sobre terminis, beques, ajuts i gestions acadèmiques vinculades al doctorat."
    },
    {
      "category": "Recerca",
      "title": "Activitats formatives transversals",
      "href": "https://web.ub.edu/ca/web/escola-doctorat/actualitat",
      "summary": "Sessions i recursos adreçats a estudiants de doctorat de tots els àmbits de coneixement."
    }
  ]
}

Llistat de notícies (variant llista)

Font: Notícies Actualitat

Correcció aplicada: A la pàgina real de "Notícies", el llistat principal és una columna única separada per línies horitzontals: títol en 26px amb subratllat blau, data inline, categories sota el títol i resum en gris. Algunes entrades porten miniatura quadrada de 118px i altres no; el component admet totes dues formes.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="flex flex-col divide-y divide-ub-line ">
  <li class="pb-5 pt-[25px]">
    <article class="group relative flex flex-col gap-6 sm:flex-row">
      <img src="https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354" alt="Imatge de la primera edició d’UB Alma Mater." loading="lazy" class="h-[118px] w-[118px] shrink-0 object-cover"/>
      <div class="flex-1">
        <h3 class="text-pretty text-[26px] font-medium leading-8 text-black">
          <a href="https://web.ub.edu/ca/web/actualitat/w/inscripcions-segona-edicio-ub-alma-mater?referer=noticies" class="bg-[linear-gradient(rgba(0,0,0,0)_calc(100%-2px),#0072BC_0px)] bg-no-repeat after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">La UB obre les inscripcions de la segona edició d’UB Alma Mater, el torneig universitari de League of Legends</a>
            <span class="ml-4 text-[18px] font-medium text-ub-muted">06/07/2026</span>
            </h3>
            <p class="mt-2 flex flex-wrap gap-x-3 text-lg font-normal text-[#484848]">
              <span class="flex items-center gap-x-3">Notícia</span>
                <span class="flex items-center gap-x-3">
                  <span aria-hidden="true" class="text-ub-muted">|</span>Institucional</span>
                    <span class="flex items-center gap-x-3">
                      <span aria-hidden="true" class="text-ub-muted">|</span>Esport</span>
                      </p>
                      <p class="mt-2 text-lg font-normal leading-8 text-ub-muted">La competició començarà el 9 d’octubre i reunirà alumnat, PDI, PTGAS i Alumni en equips mixtos formats per membres de tota la comunitat UB.</p>
                      </div>
                    </article>
                  </li>
                  <li class="pb-5 pt-[25px]">
                    <article class="group relative flex flex-col gap-6 sm:flex-row">
                      <div class="flex-1">
                        <h3 class="text-pretty text-[26px] font-medium leading-8 text-black">
                          <a href="https://web.ub.edu/ca/web/actualitat/w/consell-govern-14-juliol" class="bg-[linear-gradient(rgba(0,0,0,0)_calc(100%-2px),#0072BC_0px)] bg-no-repeat after:absolute after:inset-0 after:content-[&#x27;&#x27;] focus:outline-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Consell de Govern de la UB: dimarts 14 de juliol</a>
                            <span class="ml-4 text-[18px] font-medium text-ub-muted">13/07/2026</span>
                            </h3>
                            <p class="mt-2 flex flex-wrap gap-x-3 text-lg font-normal text-[#484848]">
                              <span class="flex items-center gap-x-3">Notícia</span>
                                <span class="flex items-center gap-x-3">
                                  <span aria-hidden="true" class="text-ub-muted">|</span>Institucional</span>
                                  </p>
                                  <p class="mt-2 text-lg font-normal leading-8 text-ub-muted">El Consell de Govern de la Universitat de Barcelona es reunirà en sessió ordinària dimarts 14 de juliol.</p>
                                  </div>
                                </article>
                              </li>
                            </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.newsList",
  "id": "resultats",
  "title": "Resultats",
  "hideTitle": true,
  "variant": "list",
  "items": [
    {
      "title": "La UB obre les inscripcions de la segona edició d’UB Alma Mater, el torneig universitari de League of Legends",
      "href": "https://web.ub.edu/ca/web/actualitat/w/inscripcions-segona-edicio-ub-alma-mater?referer=noticies",
      "category": "Notícia | Institucional | Esport",
      "date": "06/07/2026",
      "summary": "La competició començarà el 9 d’octubre i reunirà alumnat, PDI, PTGAS i Alumni en equips mixtos formats per membres de tota la comunitat UB.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354",
        "alt": "Imatge de la primera edició d’UB Alma Mater."
      }
    },
    {
      "title": "Consell de Govern de la UB: dimarts 14 de juliol",
      "href": "https://web.ub.edu/ca/web/actualitat/w/consell-govern-14-juliol",
      "category": "Notícia | Institucional",
      "date": "13/07/2026",
      "summary": "El Consell de Govern de la Universitat de Barcelona es reunirà en sessió ordinària dimarts 14 de juliol."
    }
  ]
}
Props i codi font (UbNewsList)
src/components/ub/UbNewsList.tsx ↗
PropTipusPer defecte
items *UbNewsCardProps[]
variantenumgrid
columnsenum4
itemsPerPagenumber
emptyMessagestringNo hi ha notícies disponibles.
categoryColorstring
titlestring
titleActionUbNewsListHeadingAction
titleLevelenum2
classNamestring

UbSocialProfiles

Perfils institucionals

Quan i com fer-lo servir: This is the plain icon row further down the "Xarxes socials" area of Actualitat, separate from `UbSocialWall` above it and from the monochrome icon set in `UbFooter` - do not merge the three. No action link on this block in the real page. `items` has no fixed length - reproduce the real page's full icon set (12 on Actualitat), do not truncate to a handful.

Perfils institucionals

Correcció aplicada: A l'original la graella d'icones té `gap: 25px`, no una separació menor. Aquest bloc no porta cap enllaç d'acció - a diferència de "Xarxes socials" (`UbSocialWall`) just a sobre, que sí en té. La fila real té 12 icones (Instagram, LinkedIn, Facebook, Bluesky, TikTok, YouTube, iVoox, Spotify, Telegram, Twitch, Flickr, UBtv) - un exemple amb només 4 subestima el contingut real.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <h3 class="text-balance text-[36px] font-bold leading-[42px] text-ub-text">Perfils institucionals</h3>
    <ul class="mt-2 flex flex-wrap gap-[25px]">
      <li>
        <a href="https://www.instagram.com/UniBarcelona" aria-label="Instagram" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/instagram-icon-color.svg/8b1155ec-1c45-6426-6a18-7340e83a1cc5?t=1671698374050" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.linkedin.com/school/university-of-barcelona" aria-label="LinkedIn" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/linkedin-icon-color.svg/5a753282-21d3-c4d1-0796-578f6144842b?t=1671698374490" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.facebook.com/UniversitatdeBarcelona" aria-label="Facebook" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/facebook-icon-color.svg/680b995b-2e1a-0848-8982-d6bd5002f298?t=1671698372530" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://bsky.app/profile/ub.edu" aria-label="Bluesky" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/celblau.png/b7566678-3ba2-a1c9-3b9d-886f03707118?t=1760698265846" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.tiktok.com/@unibarcelona" aria-label="TikTok" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/tiktok-icon-color.svg/d91523b2-2bed-5bd9-161c-04fe8de712c5?t=1671698372991" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.youtube.com/user/UB" aria-label="YouTube" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/youtube-icon-color.svg/622fb5b8-7875-ab41-271b-c22ce615c6bb?t=1671698373523" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.ivoox.com/escuchar-audios-universitat-barcelona_al_21370237_1.html?show=programs" aria-label="iVoox" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2948544/43695706/Icono-app-iVoox.png/aa6e4f00-76e2-7d27-13a3-f8de64ef5ef8?t=1761727135839" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://open.spotify.com/show/5KJIUl6j8j5hY0Ob0FP3f1?si=99e4de35d6ba48c8" aria-label="Spotify" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/spotify-svgrepo-com.png/2936375b-ae33-654b-5007-787429fe536e?t=1767949110272" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://t.me/s/unibarcelona/" aria-label="Telegram" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/telegram-icon-color.svg/00011609-a508-a733-ccc9-60b3ed4a6e0f?t=1671698372017" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.twitch.tv/ubalmamater" aria-label="Twitch" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/22304931/0/Disseny+sense+t%C3%ADtol+%2839%29.png/034d18dc-5c56-ee8d-dc77-f325c040a8bf?t=1718092167623" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.flickr.com/photos/universitatdebarcelona/albums" aria-label="Flickr" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/flickr-icon-color.svg/d226a92b-a58d-9431-f6dd-e4eac093389b?t=1671698371498" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
      <li>
        <a href="https://www.ub.edu/ubtv" aria-label="UBtv" class="block opacity-90 hover:opacity-100">
          <img src="https://web.ub.edu/documents/2710030/2917470/icona_UBtv_quadrada.svg.png/013b6175-465f-fce5-0823-5d3b5764e9b5?t=1733217612780" alt="" loading="lazy" class="h-[46px] w-[46px]"/>
        </a>
      </li>
    </ul>
  </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.socialProfiles",
  "id": "perfils-institucionals",
  "title": "Perfils institucionals",
  "items": [
    {
      "label": "Instagram",
      "href": "https://www.instagram.com/UniBarcelona",
      "icon": "https://web.ub.edu/documents/2710030/2917470/instagram-icon-color.svg/8b1155ec-1c45-6426-6a18-7340e83a1cc5?t=1671698374050"
    },
    {
      "label": "LinkedIn",
      "href": "https://www.linkedin.com/school/university-of-barcelona",
      "icon": "https://web.ub.edu/documents/2710030/2917470/linkedin-icon-color.svg/5a753282-21d3-c4d1-0796-578f6144842b?t=1671698374490"
    },
    {
      "label": "Facebook",
      "href": "https://www.facebook.com/UniversitatdeBarcelona",
      "icon": "https://web.ub.edu/documents/2710030/2917470/facebook-icon-color.svg/680b995b-2e1a-0848-8982-d6bd5002f298?t=1671698372530"
    },
    {
      "label": "Bluesky",
      "href": "https://bsky.app/profile/ub.edu",
      "icon": "https://web.ub.edu/documents/2710030/2917470/celblau.png/b7566678-3ba2-a1c9-3b9d-886f03707118?t=1760698265846"
    },
    {
      "label": "TikTok",
      "href": "https://www.tiktok.com/@unibarcelona",
      "icon": "https://web.ub.edu/documents/2710030/2917470/tiktok-icon-color.svg/d91523b2-2bed-5bd9-161c-04fe8de712c5?t=1671698372991"
    },
    {
      "label": "YouTube",
      "href": "https://www.youtube.com/user/UB",
      "icon": "https://web.ub.edu/documents/2710030/2917470/youtube-icon-color.svg/622fb5b8-7875-ab41-271b-c22ce615c6bb?t=1671698373523"
    },
    {
      "label": "iVoox",
      "href": "https://www.ivoox.com/escuchar-audios-universitat-barcelona_al_21370237_1.html?show=programs",
      "icon": "https://web.ub.edu/documents/2948544/43695706/Icono-app-iVoox.png/aa6e4f00-76e2-7d27-13a3-f8de64ef5ef8?t=1761727135839"
    },
    {
      "label": "Spotify",
      "href": "https://open.spotify.com/show/5KJIUl6j8j5hY0Ob0FP3f1?si=99e4de35d6ba48c8",
      "icon": "https://web.ub.edu/documents/2710030/2917470/spotify-svgrepo-com.png/2936375b-ae33-654b-5007-787429fe536e?t=1767949110272"
    },
    {
      "label": "Telegram",
      "href": "https://t.me/s/unibarcelona/",
      "icon": "https://web.ub.edu/documents/2710030/2917470/telegram-icon-color.svg/00011609-a508-a733-ccc9-60b3ed4a6e0f?t=1671698372017"
    },
    {
      "label": "Twitch",
      "href": "https://www.twitch.tv/ubalmamater",
      "icon": "https://web.ub.edu/documents/22304931/0/Disseny+sense+t%C3%ADtol+%2839%29.png/034d18dc-5c56-ee8d-dc77-f325c040a8bf?t=1718092167623"
    },
    {
      "label": "Flickr",
      "href": "https://www.flickr.com/photos/universitatdebarcelona/albums",
      "icon": "https://web.ub.edu/documents/2710030/2917470/flickr-icon-color.svg/d226a92b-a58d-9431-f6dd-e4eac093389b?t=1671698371498"
    },
    {
      "label": "UBtv",
      "href": "https://www.ub.edu/ubtv",
      "icon": "https://web.ub.edu/documents/2710030/2917470/icona_UBtv_quadrada.svg.png/013b6175-465f-fce5-0823-5d3b5764e9b5?t=1733217612780"
    }
  ]
}
Props i codi font (UbSocialProfiles)
src/components/ub/UbSocialProfiles.tsx ↗
PropTipusPer defecte
titlestringPerfils institucionals
items *UbSocialProfileItem[]
asElementTypeh3
classNamestring

UbSocialWall

Xarxes socials

Quan i com fer-lo servir: This is a static replica, not a live feed - do not try to embed the real rss.app widget script. Use this component for a visual stand-in with fixed sample posts. This is distinct from `UbSocialProfiles`, which is the plain icon row further down the same page ("Perfils institucionals"), no posts.

Correcció aplicada: L'original incrusta el widget de tercers `rss.app` (`<rssapp-wall>`, script extern amb el seu propi shadow DOM) per mostrar posts en directe d'Instagram i Facebook en 2 columnes. Com que carregar aquest SDK extern queda fora d'abast d'un catàleg estàtic, `UbSocialWall` en reprodueix la intenció visual (icona + handle en blau + separador, i una graella 2x2 de targetes amb imatge i llegenda superposada) amb contingut d'exemple fix, no un feed en directe.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid gap-10 sm:grid-cols-2 ">
  <div>
    <a href="https://www.instagram.com/unibarcelona" class="inline-flex items-center gap-2 text-[22px] leading-[33px] text-ub-blue hover:underline">
      <img src="https://web.ub.edu/documents/2710030/2917470/instagram-icon-color.svg/8b1155ec-1c45-6426-6a18-7340e83a1cc5?t=1671698374050" alt="" loading="lazy" class="h-7 w-7"/>@Unibarcelona</a>
      <hr class="my-2 border-black/10"/>
      <div class="grid grid-cols-2 gap-2">
        <a href="https://www.instagram.com/unibarcelona" class="group relative block aspect-square overflow-hidden rounded">
          <img src="https://web.ub.edu/documents/d/actualitat/af_vestiu26_online_intern_webub_noticia_destacada_720x405px-jpg-1" alt="Vespres d’Estiu 2026" loading="lazy" class="h-full w-full object-cover transition-transform group-hover:scale-105 motion-reduce:transition-none motion-reduce:group-hover:scale-100"/>
          <span class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent" aria-hidden="true">
          </span>
          <span class="absolute inset-x-0 bottom-0 line-clamp-3 p-3 text-sm font-bold leading-5 text-white">🎉 Quan la música connecta, cada concert es viu d’una manera diferent. Així ho vam viure als Vespres d’Estiu!</span>
          </a>
          <a href="https://www.instagram.com/unibarcelona" class="group relative block aspect-square overflow-hidden rounded">
            <img src="https://web.ub.edu/documents/2710030/0/415x220+%2837%29.png/d21f8d5e-a9f8-d30c-2696-f0f25d48dc4c?t=1781181323827" alt="XI Festival de Teatre «Clàssics al Jardí»" loading="lazy" class="h-full w-full object-cover transition-transform group-hover:scale-105 motion-reduce:transition-none motion-reduce:group-hover:scale-100"/>
            <span class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent" aria-hidden="true">
            </span>
            <span class="absolute inset-x-0 bottom-0 line-clamp-3 p-3 text-sm font-bold leading-5 text-white">🎭 El teatre universitari omple les nits d’estiu d’històries i emocions! ✨ El cicle Clàssics al Jardí…</span>
            </a>
          </div>
        </div>
        <div>
          <a href="https://www.facebook.com/UniversitatdeBarcelona" class="inline-flex items-center gap-2 text-[22px] leading-[33px] text-ub-blue hover:underline">
            <img src="https://web.ub.edu/documents/2710030/2917470/facebook-icon-color.svg/680b995b-2e1a-0848-8982-d6bd5002f298?t=1671698372530" alt="" loading="lazy" class="h-7 w-7"/>UniversitatdeBarcelona</a>
            <hr class="my-2 border-black/10"/>
            <div class="grid grid-cols-2 gap-2">
              <a href="https://www.facebook.com/UniversitatdeBarcelona" class="group relative block aspect-square overflow-hidden rounded">
                <img src="https://web.ub.edu/documents/2710030/0/415x220+%2834%29.png/5979d2eb-938f-b98e-c456-e33a398ae7f4?t=1778234269501" alt="Estudiants a la Universitat de Barcelona" loading="lazy" class="h-full w-full object-cover transition-transform group-hover:scale-105 motion-reduce:transition-none motion-reduce:group-hover:scale-100"/>
                <span class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent" aria-hidden="true">
                </span>
                <span class="absolute inset-x-0 bottom-0 line-clamp-3 p-3 text-sm font-bold leading-5 text-white">▶️ La #UniBarcelona és la universitat catalana més demanada en primera opció. Un total…</span>
                </a>
                <a href="https://www.facebook.com/UniversitatdeBarcelona" class="group relative block aspect-square overflow-hidden rounded">
                  <img src="https://web.ub.edu/documents/d/actualitat/af_vestiu26_online_intern_webub_noticia_destacada_720x405px-jpg-1" alt="XI Festival de Teatre «Clàssics al Jardí»" loading="lazy" class="h-full w-full object-cover transition-transform group-hover:scale-105 motion-reduce:transition-none motion-reduce:group-hover:scale-100"/>
                  <span class="absolute inset-0 bg-gradient-to-t from-black/80 via-black/10 to-transparent" aria-hidden="true">
                  </span>
                  <span class="absolute inset-x-0 bottom-0 line-clamp-3 p-3 text-sm font-bold leading-5 text-white">🎭 El teatre universitari omple les nits d’estiu d’històries i emocions! ✨ El cicle Clàssics al Jardí…</span>
                  </a>
                </div>
              </div>
            </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.socialWall",
  "id": "xarxes",
  "title": "Xarxes socials",
  "action": {
    "label": "Totes les xarxes socials",
    "href": "https://web.ub.edu/ca/web/actualitat/xarxes-socials"
  },
  "profiles": [
    {
      "label": "@Unibarcelona",
      "href": "https://www.instagram.com/unibarcelona",
      "icon": "https://web.ub.edu/documents/2710030/2917470/instagram-icon-color.svg/8b1155ec-1c45-6426-6a18-7340e83a1cc5?t=1671698374050",
      "posts": [
        {
          "href": "https://www.instagram.com/unibarcelona",
          "caption": "🎉 Quan la música connecta, cada concert es viu d’una manera diferent. Així ho vam viure als Vespres d’Estiu!",
          "image": {
            "src": "https://web.ub.edu/documents/d/actualitat/af_vestiu26_online_intern_webub_noticia_destacada_720x405px-jpg-1",
            "alt": "Vespres d’Estiu 2026"
          }
        },
        {
          "href": "https://www.instagram.com/unibarcelona",
          "caption": "🎭 El teatre universitari omple les nits d’estiu d’històries i emocions! ✨ El cicle Clàssics al Jardí…",
          "image": {
            "src": "https://web.ub.edu/documents/2710030/0/415x220+%2837%29.png/d21f8d5e-a9f8-d30c-2696-f0f25d48dc4c?t=1781181323827",
            "alt": "XI Festival de Teatre «Clàssics al Jardí»"
          }
        }
      ]
    },
    {
      "label": "UniversitatdeBarcelona",
      "href": "https://www.facebook.com/UniversitatdeBarcelona",
      "icon": "https://web.ub.edu/documents/2710030/2917470/facebook-icon-color.svg/680b995b-2e1a-0848-8982-d6bd5002f298?t=1671698372530",
      "posts": [
        {
          "href": "https://www.facebook.com/UniversitatdeBarcelona",
          "caption": "▶️ La #UniBarcelona és la universitat catalana més demanada en primera opció. Un total…",
          "image": {
            "src": "https://web.ub.edu/documents/2710030/0/415x220+%2834%29.png/5979d2eb-938f-b98e-c456-e33a398ae7f4?t=1778234269501",
            "alt": "Estudiants a la Universitat de Barcelona"
          }
        },
        {
          "href": "https://www.facebook.com/UniversitatdeBarcelona",
          "caption": "🎭 El teatre universitari omple les nits d’estiu d’històries i emocions! ✨ El cicle Clàssics al Jardí…",
          "image": {
            "src": "https://web.ub.edu/documents/d/actualitat/af_vestiu26_online_intern_webub_noticia_destacada_720x405px-jpg-1",
            "alt": "XI Festival de Teatre «Clàssics al Jardí»"
          }
        }
      ]
    }
  ]
}
Props i codi font (UbSocialWall)
src/components/ub/UbSocialWall.tsx ↗
PropTipusPer defecte
profiles *UbSocialWallProfile[]
classNamestring

Agenda i esdeveniments

Agenda setmanal, llistats d'esdeveniments i la fitxa de detall d'un esdeveniment.

UbAgendaList

Agenda (línia de temps)

2 variants

Quan i com fer-lo servir: Use `variant="timeline"` for the 4-up card grid pattern used on the Actualitat agenda block; use the default `variant="list"` for a simple date-strip list elsewhere. `items` need no `image` field - agenda cards are text-only.

Quan i com fer-lo servir: Default `variant="list"` (no need to pass it explicitly): a single-column date-strip list, e.g. for a narrower sidebar instead of the 4-up timeline grid.

Agenda (línia de temps)

Font: Actualitat UB.edu

Correcció aplicada: La línia del timeline és una banda de 10px `#EBEBEB` (no un `border`/`1px`) centrada sobre els marcadors circulars, i el hover fa créixer la targeta revelant l'hora/ubicació (`grid-template-rows` de `0fr` a `1fr`), no un `display:none`/`block` sec.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="pb-16">
  <div class="relative grid items-end gap-x-[30px] gap-y-10 sm:grid-cols-2 lg:grid-cols-4">
    <div class="pointer-events-none absolute inset-x-0 -bottom-[52.5px] h-[10px] bg-[#ebebeb]" aria-hidden="true">
    </div>
    <article class="group relative flex flex-col bg-[#ebebeb] pb-7 pl-4 pr-4 pt-6">
      <time class="font-display text-ub-blue">
        <span class="block text-[42px] leading-[55px]">07</span>
          <span class="block text-2xl uppercase leading-[29px]">juliol</span>
          </time>
          <h3 class="mb-2 mt-0 text-[26px] font-bold leading-8 text-ub-text">
            <a href="https://web.ub.edu/ca/web/actualitat/-/vecinos-manue" class="hover:text-ub-blue">Els Vespres de la UB: Los Vecinos de Manué</a>
            </h3>
            <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out motion-reduce:transition-none group-hover:grid-rows-[1fr]">
              <div class="overflow-hidden">
                <p class="flex items-start gap-1.5 pt-[19px] text-base leading-6 text-ub-text">
                  <svg viewBox="0 0 24 24" class="h-6 w-6 flex-none text-ub-blue" aria-hidden="true">
                    <path fill="none" stroke="currentColor" stroke-width="1.6" d="M12 21.6s7.2-6.24 7.2-11.52A7.2 7.2 0 1 0 4.8 10.08C4.8 15.36 12 21.6 12 21.6Z">
                    </path>
                    <circle cx="12" cy="9.8" r="2.4" fill="currentColor">
                    </circle>
                  </svg>
                  <span>jardí Ferran Soldevila de l’Edifici Històric</span>
                  </p>
                </div>
              </div>
              <span class="pointer-events-none absolute -bottom-[4px] left-1/2 h-[26px] w-[26px] -translate-x-1/2 rotate-45 bg-[#ebebeb]" aria-hidden="true">
              </span>
              <span class="absolute -bottom-[61px] left-1/2 h-[27px] w-[27px] -translate-x-1/2 rounded-full border-4 border-ub-blue bg-white transition-transform duration-300 motion-reduce:transition-none group-hover:scale-150 group-hover:bg-ub-blue motion-reduce:group-hover:scale-100" aria-hidden="true">
              </span>
            </article>
            <article class="group relative flex flex-col bg-[#ebebeb] pb-7 pl-4 pr-4 pt-6">
              <time class="font-display text-ub-blue">
                <span class="block text-[42px] leading-[55px]">08</span>
                  <span class="block text-2xl uppercase leading-[29px]">juliol</span>
                  </time>
                  <h3 class="mb-2 mt-0 text-[26px] font-bold leading-8 text-ub-text">
                    <a href="https://web.ub.edu/ca/web/actualitat/-/patrocini-comunitari" class="hover:text-ub-blue">Seminari sobre patrocini comunitari</a>
                    </h3>
                    <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out motion-reduce:transition-none group-hover:grid-rows-[1fr]">
                      <div class="overflow-hidden">
                        <p class="flex items-start gap-1.5 pt-[19px] text-base leading-6 text-ub-text">
                          <svg viewBox="0 0 24 24" class="h-6 w-6 flex-none text-ub-blue" aria-hidden="true">
                            <path fill="none" stroke="currentColor" stroke-width="1.6" d="M12 21.6s7.2-6.24 7.2-11.52A7.2 7.2 0 1 0 4.8 10.08C4.8 15.36 12 21.6 12 21.6Z">
                            </path>
                            <circle cx="12" cy="9.8" r="2.4" fill="currentColor">
                            </circle>
                          </svg>
                          <span>aula Ramón y Cajal de l’Edifici Històric</span>
                          </p>
                        </div>
                      </div>
                      <span class="pointer-events-none absolute -bottom-[4px] left-1/2 h-[26px] w-[26px] -translate-x-1/2 rotate-45 bg-[#ebebeb]" aria-hidden="true">
                      </span>
                      <span class="absolute -bottom-[61px] left-1/2 h-[27px] w-[27px] -translate-x-1/2 rounded-full border-4 border-ub-blue bg-white transition-transform duration-300 motion-reduce:transition-none group-hover:scale-150 group-hover:bg-ub-blue motion-reduce:group-hover:scale-100" aria-hidden="true">
                      </span>
                    </article>
                    <article class="group relative flex flex-col bg-[#ebebeb] pb-7 pl-4 pr-4 pt-6">
                      <time class="font-display text-ub-blue">
                        <span class="block text-[42px] leading-[55px]">08-15</span>
                          <span class="block text-2xl uppercase leading-[29px]">juliol</span>
                          </time>
                          <h3 class="mb-2 mt-0 text-[26px] font-bold leading-8 text-ub-text">
                            <a href="https://web.ub.edu/ca/web/actualitat/-/xi-festival-de-teatre-ub" class="hover:text-ub-blue">XI Festival de Teatre «Clàssics al Jardí» (Memorial Ricard Salvat)</a>
                            </h3>
                            <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out motion-reduce:transition-none group-hover:grid-rows-[1fr]">
                              <div class="overflow-hidden">
                                <p class="flex items-start gap-1.5 pt-[19px] text-base leading-6 text-ub-text">
                                  <svg viewBox="0 0 24 24" class="h-6 w-6 flex-none text-ub-blue" aria-hidden="true">
                                    <path fill="none" stroke="currentColor" stroke-width="1.6" d="M12 21.6s7.2-6.24 7.2-11.52A7.2 7.2 0 1 0 4.8 10.08C4.8 15.36 12 21.6 12 21.6Z">
                                    </path>
                                    <circle cx="12" cy="9.8" r="2.4" fill="currentColor">
                                    </circle>
                                  </svg>
                                  <span>jardí Ferran Soldevila (Edifici Històric)</span>
                                  </p>
                                </div>
                              </div>
                              <span class="pointer-events-none absolute -bottom-[4px] left-1/2 h-[26px] w-[26px] -translate-x-1/2 rotate-45 bg-[#ebebeb]" aria-hidden="true">
                              </span>
                              <span class="absolute -bottom-[61px] left-1/2 h-[27px] w-[27px] -translate-x-1/2 rounded-full border-4 border-ub-blue bg-white transition-transform duration-300 motion-reduce:transition-none group-hover:scale-150 group-hover:bg-ub-blue motion-reduce:group-hover:scale-100" aria-hidden="true">
                              </span>
                            </article>
                            <article class="group relative flex flex-col bg-[#ebebeb] pb-7 pl-4 pr-4 pt-6">
                              <time class="font-display text-ub-blue">
                                <span class="block text-[42px] leading-[55px]">09</span>
                                  <span class="block text-2xl uppercase leading-[29px]">juliol</span>
                                  </time>
                                  <h3 class="mb-2 mt-0 text-[26px] font-bold leading-8 text-ub-text">
                                    <a href="https://web.ub.edu/ca/web/actualitat/-/killin-cactuz" class="hover:text-ub-blue">Els Vespres de la UB: Killin&#x27; Cactuz</a>
                                    </h3>
                                    <div class="grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out motion-reduce:transition-none group-hover:grid-rows-[1fr]">
                                      <div class="overflow-hidden">
                                        <p class="flex items-start gap-1.5 pt-[19px] text-base leading-6 text-ub-text">
                                          <svg viewBox="0 0 24 24" class="h-6 w-6 flex-none text-ub-blue" aria-hidden="true">
                                            <path fill="none" stroke="currentColor" stroke-width="1.6" d="M12 21.6s7.2-6.24 7.2-11.52A7.2 7.2 0 1 0 4.8 10.08C4.8 15.36 12 21.6 12 21.6Z">
                                            </path>
                                            <circle cx="12" cy="9.8" r="2.4" fill="currentColor">
                                            </circle>
                                          </svg>
                                          <span>jardí Ferran Soldevila de l’Edifici Històric</span>
                                          </p>
                                        </div>
                                      </div>
                                      <span class="pointer-events-none absolute -bottom-[4px] left-1/2 h-[26px] w-[26px] -translate-x-1/2 rotate-45 bg-[#ebebeb]" aria-hidden="true">
                                      </span>
                                      <span class="absolute -bottom-[61px] left-1/2 h-[27px] w-[27px] -translate-x-1/2 rounded-full border-4 border-ub-blue bg-white transition-transform duration-300 motion-reduce:transition-none group-hover:scale-150 group-hover:bg-ub-blue motion-reduce:group-hover:scale-100" aria-hidden="true">
                                      </span>
                                    </article>
                                  </div>
                                </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.agendaList",
  "id": "agenda",
  "title": "Agenda",
  "variant": "timeline",
  "items": [
    {
      "day": "07",
      "month": "juliol",
      "title": "Els Vespres de la UB: Los Vecinos de Manué",
      "href": "https://web.ub.edu/ca/web/actualitat/-/vecinos-manue",
      "location": "jardí Ferran Soldevila de l’Edifici Històric"
    },
    {
      "day": "08",
      "month": "juliol",
      "title": "Seminari sobre patrocini comunitari",
      "href": "https://web.ub.edu/ca/web/actualitat/-/patrocini-comunitari",
      "location": "aula Ramón y Cajal de l’Edifici Històric"
    },
    {
      "day": "08-15",
      "month": "juliol",
      "title": "XI Festival de Teatre «Clàssics al Jardí» (Memorial Ricard Salvat)",
      "href": "https://web.ub.edu/ca/web/actualitat/-/xi-festival-de-teatre-ub",
      "location": "jardí Ferran Soldevila (Edifici Històric)"
    },
    {
      "day": "09",
      "month": "juliol",
      "title": "Els Vespres de la UB: Killin' Cactuz",
      "href": "https://web.ub.edu/ca/web/actualitat/-/killin-cactuz",
      "location": "jardí Ferran Soldevila de l’Edifici Històric"
    }
  ]
}
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="border-t border-ub-line">
  <article class="grid gap-5 border-b border-ub-line py-5 sm:grid-cols-[92px_1fr]">
    <time class="bg-ub-panel p-4 text-center text-ub-text">
      <span class="block font-display text-[34px] leading-9">07</span>
        <span class="block font-display text-sm uppercase tracking-[0.08em] text-ub-blue">Jul</span>
        </time>
        <div>
          <h3 class="text-xl font-extrabold leading-7 text-ub-text">
            <a href="https://web.ub.edu/ca/web/actualitat/-/vecinos-manue" class="underline decoration-transparent hover:text-ub-blue hover:decoration-current">Els Vespres de la UB: Los Vecinos de Manué</a>
            </h3>
            <p class="mt-2 text-base leading-6 text-ub-muted">Jardins de la Universitat de Barcelona</p>
            </div>
          </article>
          <article class="grid gap-5 border-b border-ub-line py-5 sm:grid-cols-[92px_1fr]">
            <time class="bg-ub-panel p-4 text-center text-ub-text">
              <span class="block font-display text-[34px] leading-9">08</span>
                <span class="block font-display text-sm uppercase tracking-[0.08em] text-ub-blue">Jul</span>
                </time>
                <div>
                  <h3 class="text-xl font-extrabold leading-7 text-ub-text">
                    <a href="https://web.ub.edu/ca/web/actualitat/-/patrocini-comunitari" class="underline decoration-transparent hover:text-ub-blue hover:decoration-current">Seminari sobre patrocini comunitari</a>
                    </h3>
                    <p class="mt-2 text-base leading-6 text-ub-muted">10:00 | En línia</p>
                    </div>
                  </article>
                </div>
Props i codi font (UbAgendaList)
src/components/ub/UbAgendaList.tsx ↗
PropTipusPer defecte
items *UbAgendaItem[]
variantenumlist
headingLevelenumh3

UbAgendaPage

Agenda setmanal

Quan i com fer-lo servir: Use this for the full weekly agenda visual pattern. When a local JSON section type `ub.agendaPage` exists, map it to `UbAgendaPage`. This component is the full weekly agenda shell: suggestion link, left calendar controls, week pager, event list and results toolbar. Do not split it into separate improvised calendar/list markup.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

<

06 - 12 de juliol

>
Resultats 1-2 de 2.
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="mb-5 flex justify-end">
    <a href="https://web.ub.edu/ca/web/actualitat/bustia-activitats" class="text-base font-extrabold leading-6 text-ub-text underline hover:text-ub-blue">Suggereix-nos una activitat</a>
    </div>
    <div class="grid gap-8 lg:grid-cols-[288px_minmax(0,1fr)]">
      <aside class="lg:pt-3" aria-label="Controls de l&#x27;agenda">
        <label class="block">
          <span class="sr-only">Visualitzar</span>
            <select class="h-[62px] w-full border border-ub-line bg-white px-5 text-[25px] font-medium text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue lg:max-w-[288px]">
              <option>Vista diària</option>
                <option selected="">Vista setmanal</option>
                </select>
              </label>
              <div class="mt-10 text-xs font-bold text-ub-text">fechaDesde</div>
                <div class="mt-3 border border-ub-line bg-white px-7 py-5 lg:max-w-[288px]">
                  <div class="mb-5 grid grid-cols-[32px_1fr_32px] items-center text-center">
                    <button type="button" class="text-[28px] font-bold leading-none text-ub-text" aria-label="Mes anterior">‹</button>
                      <p class="text-[22px] font-extrabold leading-7 text-ub-text">Juliol 2026</p>
                        <button type="button" class="text-[28px] font-bold leading-none text-ub-text" aria-label="Mes següent">›</button>
                        </div>
                        <table class="w-full table-fixed text-center text-xs leading-4">
                          <caption class="sr-only">Calendari de Juliol 2026</caption>
                            <thead class="text-ub-text">
                              <tr>
                                <th scope="col" class="pb-2 font-bold">Dl</th>
                                  <th scope="col" class="pb-2 font-bold">Dt</th>
                                    <th scope="col" class="pb-2 font-bold">Dc</th>
                                      <th scope="col" class="pb-2 font-bold">Dj</th>
                                        <th scope="col" class="pb-2 font-bold">Dv</th>
                                          <th scope="col" class="pb-2 font-bold">Ds</th>
                                            <th scope="col" class="pb-2 font-bold">Dg</th>
                                            </tr>
                                          </thead>
                                          <tbody>
                                            <tr>
                                              <td class="h-[39px] font-medium text-ub-muted ">29</td>
                                                <td class="h-[39px] font-medium text-ub-muted ">30</td>
                                                  <td class="h-[39px] font-medium text-ub-text ">1</td>
                                                    <td class="h-[39px] font-medium text-ub-text ">2</td>
                                                      <td class="h-[39px] font-medium text-ub-text ">3</td>
                                                        <td class="h-[39px] font-medium text-ub-text ">4</td>
                                                          <td class="h-[39px] font-medium text-ub-text ">5</td>
                                                          </tr>
                                                          <tr>
                                                            <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">6</td>
                                                              <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">7</td>
                                                                <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">8</td>
                                                                  <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">9</td>
                                                                    <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">10</td>
                                                                      <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">11</td>
                                                                        <td class="h-[39px] font-medium text-ub-text bg-ub-blue text-white first:rounded-l-full last:rounded-r-full">12</td>
                                                                        </tr>
                                                                        <tr>
                                                                          <td class="h-[39px] font-medium text-ub-text ">13</td>
                                                                            <td class="h-[39px] font-medium text-ub-text ">14</td>
                                                                              <td class="h-[39px] font-medium text-ub-text ">15</td>
                                                                                <td class="h-[39px] font-medium text-ub-text ">16</td>
                                                                                  <td class="h-[39px] font-medium text-ub-text ">17</td>
                                                                                    <td class="h-[39px] font-medium text-ub-text ">18</td>
                                                                                      <td class="h-[39px] font-medium text-ub-text ">19</td>
                                                                                      </tr>
                                                                                      <tr>
                                                                                        <td class="h-[39px] font-medium text-ub-text ">20</td>
                                                                                          <td class="h-[39px] font-medium text-ub-text ">21</td>
                                                                                            <td class="h-[39px] font-medium text-ub-text ">22</td>
                                                                                              <td class="h-[39px] font-medium text-ub-text ">23</td>
                                                                                                <td class="h-[39px] font-medium text-ub-text ">24</td>
                                                                                                  <td class="h-[39px] font-medium text-ub-text ">25</td>
                                                                                                    <td class="h-[39px] font-medium text-ub-text ">26</td>
                                                                                                    </tr>
                                                                                                    <tr>
                                                                                                      <td class="h-[39px] font-medium text-ub-text ">27</td>
                                                                                                        <td class="h-[39px] font-medium text-ub-text ">28</td>
                                                                                                          <td class="h-[39px] font-medium text-ub-text ">29</td>
                                                                                                            <td class="h-[39px] font-medium text-ub-text ">30</td>
                                                                                                              <td class="h-[39px] font-medium text-ub-text ">31</td>
                                                                                                                <td class="h-[39px] font-medium text-ub-muted ">1</td>
                                                                                                                  <td class="h-[39px] font-medium text-ub-muted ">2</td>
                                                                                                                  </tr>
                                                                                                                  <tr>
                                                                                                                    <td class="h-[39px] font-medium text-ub-muted ">3</td>
                                                                                                                      <td class="h-[39px] font-medium text-ub-muted ">4</td>
                                                                                                                        <td class="h-[39px] font-medium text-ub-muted ">5</td>
                                                                                                                          <td class="h-[39px] font-medium text-ub-muted ">6</td>
                                                                                                                            <td class="h-[39px] font-medium text-ub-muted ">7</td>
                                                                                                                              <td class="h-[39px] font-medium text-ub-muted ">8</td>
                                                                                                                                <td class="h-[39px] font-medium text-ub-muted ">9</td>
                                                                                                                                </tr>
                                                                                                                              </tbody>
                                                                                                                            </table>
                                                                                                                          </div>
                                                                                                                          <a href="https://web.ub.edu/ca/web/actualitat/agenda" class="mt-2 flex h-9 items-center justify-center border-2 border-ub-blue px-5 text-base font-extrabold text-ub-blue hover:bg-ub-blue hover:text-white lg:max-w-[288px]">
                                                                                                                            <span>Setmana actual</span>
                                                                                                                              <span class="ml-auto text-lg leading-none" aria-hidden="true">›</span>
                                                                                                                              </a>
                                                                                                                            </aside>
                                                                                                                            <div class="min-w-0">
                                                                                                                              <div class="grid h-[77px] grid-cols-[48px_1fr_48px] items-center border border-ub-line bg-white text-center">
                                                                                                                                <a href="https://web.ub.edu/ca/web/actualitat/agenda?date=2026-06-28" class="text-2xl font-bold text-ub-text hover:text-ub-blue" aria-label="Setmana anterior">&lt;</a>
                                                                                                                                  <h2 class="text-[22px] font-extrabold leading-7 text-ub-muted">06 - 12 de juliol</h2>
                                                                                                                                    <a href="https://web.ub.edu/ca/web/actualitat/agenda?date=2026-07-12" class="text-2xl font-bold text-ub-text hover:text-ub-blue" aria-label="Setmana següent">&gt;</a>
                                                                                                                                    </div>
                                                                                                                                    <ul class="border-t border-ub-line border-t-0">
                                                                                                                                      <li class="border-b border-ub-line py-5">
                                                                                                                                        <article class="group grid grid-cols-[97px_1fr] gap-5 md:grid-cols-[196px_1fr] md:gap-6">
                                                                                                                                          <img src="https://web.ub.edu/documents/d/actualitat/vii_premi_sostenibilitat_2026b-jpg" alt="VII Premi de Pòsters de Sostenibilitat i Drets Humans" loading="lazy" class="aspect-square w-full object-cover"/>
                                                                                                                                          <div class="min-w-0">
                                                                                                                                            <p class="text-[13px] font-extrabold uppercase leading-[18px] text-ub-blue md:text-[18px] md:leading-6">Acadèmic : Solidaritat - Sostenibilitat</p>
                                                                                                                                              <h3 class="mt-1 text-base font-extrabold leading-5 text-ub-text md:text-[26px] md:leading-[31px]">
                                                                                                                                                <a href="https://web.ub.edu/ca/web/actualitat/w/vii-premi-posters-sostenibilitat-drets-humans?referer=agenda" class="underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">VII Premi de Pòsters de Sostenibilitat i Drets Humans</a>
                                                                                                                                                </h3>
                                                                                                                                                <p class="mt-2 text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">25/03/2026 - 10/07/2026</p>
                                                                                                                                                  <p class="text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">en línia</p>
                                                                                                                                                  </div>
                                                                                                                                                </article>
                                                                                                                                              </li>
                                                                                                                                              <li class="border-b border-ub-line py-5">
                                                                                                                                                <article class="group grid grid-cols-[97px_1fr] gap-5 md:grid-cols-[196px_1fr] md:gap-6">
                                                                                                                                                  <div class="aspect-square w-full bg-ub-panel" aria-hidden="true">
                                                                                                                                                  </div>
                                                                                                                                                  <div class="min-w-0">
                                                                                                                                                    <p class="text-[13px] font-extrabold uppercase leading-[18px] text-ub-blue md:text-[18px] md:leading-6">Divulgació : Salut</p>
                                                                                                                                                      <h3 class="mt-1 text-base font-extrabold leading-5 text-ub-text md:text-[26px] md:leading-[31px]">
                                                                                                                                                        <a href="https://web.ub.edu/ca/web/actualitat/w/exposicio-infermeres?referer=agenda" class="underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">Exposició «Infermeres»</a>
                                                                                                                                                        </h3>
                                                                                                                                                        <p class="mt-2 text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">12/05/2026 - 25/10/2026</p>
                                                                                                                                                          <p class="text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">Museu de l&#x27;Hospitalet - L&#x27;Harmonia</p>
                                                                                                                                                          </div>
                                                                                                                                                        </article>
                                                                                                                                                      </li>
                                                                                                                                                    </ul>
                                                                                                                                                    <div class="flex flex-wrap items-center justify-between gap-4 border-t border-ub-line pb-[15px] pt-[35px] mt-8">
                                                                                                                                                      <div class="flex flex-wrap items-center gap-x-6 gap-y-2 text-base leading-6 text-ub-muted sm:gap-x-16">
                                                                                                                                                        <label class="inline-flex items-center gap-2">
                                                                                                                                                          <select aria-label="Resultats per pàgina" class="min-h-6 border-0 bg-transparent text-base font-normal text-ub-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                                                                                                                                                            <option value="4">4</option>
                                                                                                                                                              <option value="8">8</option>
                                                                                                                                                                <option value="20" selected="">20</option>
                                                                                                                                                                  <option value="40">40</option>
                                                                                                                                                                    <option value="60">60</option>
                                                                                                                                                                    </select>
                                                                                                                                                                    <span>resultats per pàgina.</span>
                                                                                                                                                                    </label>
                                                                                                                                                                    <span>Resultats 1-2 de 2.</span>
                                                                                                                                                                    </div>
                                                                                                                                                                    <div class="flex flex-wrap items-center gap-6">
                                                                                                                                                                      <nav aria-label="Paginació" class="flex items-center gap-5 text-base leading-6 ">
                                                                                                                                                                        <a aria-label="Pàgina anterior" aria-disabled="true" tabindex="-1" class="flex h-9 w-9 items-center justify-center text-[32px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue pointer-events-none text-ub-line">
                                                                                                                                                                          <span aria-hidden="true">‹</span>
                                                                                                                                                                          </a>
                                                                                                                                                                          <ul class="flex items-center gap-5">
                                                                                                                                                                            <li>
                                                                                                                                                                              <a href="https://web.ub.edu/ca/web/actualitat/agenda?delta=20&amp;start=1" aria-current="page" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue bg-[#e5e5e5] text-ub-text">1</a>
                                                                                                                                                                              </li>
                                                                                                                                                                            </ul>
                                                                                                                                                                            <a aria-label="Pàgina següent" aria-disabled="true" tabindex="-1" class="flex h-9 w-9 items-center justify-center text-[32px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue pointer-events-none text-ub-line">
                                                                                                                                                                              <span aria-hidden="true">›</span>
                                                                                                                                                                              </a>
                                                                                                                                                                            </nav>
                                                                                                                                                                          </div>
                                                                                                                                                                        </div>
                                                                                                                                                                      </div>
                                                                                                                                                                    </div>
                                                                                                                                                                  </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.agendaPage",
  "id": "resultats",
  "title": "06 - 12 de juliol",
  "weekLabel": "06 - 12 de juliol",
  "weekStart": "2026-07-06",
  "suggestAction": {
    "label": "Suggereix-nos una activitat",
    "href": "https://web.ub.edu/ca/web/actualitat/bustia-activitats"
  },
  "events": [
    {
      "title": "VII Premi de Pòsters de Sostenibilitat i Drets Humans",
      "href": "https://web.ub.edu/ca/web/actualitat/w/vii-premi-posters-sostenibilitat-drets-humans?referer=agenda",
      "category": "Acadèmic : Solidaritat - Sostenibilitat",
      "dateLabel": "25/03/2026 - 10/07/2026",
      "location": "en línia",
      "image": {
        "src": "https://web.ub.edu/documents/d/actualitat/vii_premi_sostenibilitat_2026b-jpg",
        "alt": "VII Premi de Pòsters de Sostenibilitat i Drets Humans"
      }
    },
    {
      "title": "Exposició «Infermeres»",
      "href": "https://web.ub.edu/ca/web/actualitat/w/exposicio-infermeres?referer=agenda",
      "category": "Divulgació : Salut",
      "dateLabel": "12/05/2026 - 25/10/2026",
      "location": "Museu de l'Hospitalet - L'Harmonia"
    }
  ]
}
Props i codi font (UbAgendaPage)
src/components/ub/UbAgendaPage.tsx ↗
PropTipusPer defecte
events *UbEventCardProps[]
suggestAction *{ label: string; href: string; }
weekStart *string
weekLabel *string
classNamestring
headingLevelenumh2

UbEventCard

Targeta d'esdeveniment

Quan i com fer-lo servir: Use this only for a single event card or when composing a custom event area. For normal event lists, prefer `UbEventList`, which wraps each `UbEventCard` with the real top/bottom dividers. Preserve category, date label, time, location and optional square image; if the real event has no image, the component reserves the same square panel.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<article class="group grid grid-cols-[97px_1fr] gap-5 md:grid-cols-[196px_1fr] md:gap-6">
  <div class="aspect-square w-full bg-ub-panel" aria-hidden="true">
  </div>
  <div class="min-w-0">
    <p class="text-[13px] font-extrabold uppercase leading-[18px] text-ub-blue md:text-[18px] md:leading-6">Exposició</p>
      <h3 class="mt-1 text-base font-extrabold leading-5 text-ub-text md:text-[26px] md:leading-[31px]">
        <a href="https://web.ub.edu/ca/web/actualitat/w/exposicio-infermeres" class="underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">Exposició: Infermeres en la memòria</a>
        </h3>
        <p class="mt-2 text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">Del 14 al 30 de juliol de 2026 | 09:00</p>
          <p class="text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">Edifici Històric</p>
          </div>
        </article>
Props i codi font (UbEventCard)
src/components/ub/UbEventCard.tsx ↗
PropTipusPer defecte
title *string
href *string
category *string
dateLabel *string
timestring
locationstring
image{ src: string; alt: string; }

UbEventDetail

Fitxa d'esdeveniment

Quan i com fer-lo servir: Use this for event/detail pages with a date block, category, image, metadata rows and action links. When a local JSON section type `ub.eventDetail` exists, map it to `UbEventDetail`. The component owns the page H1 and share links, so do not add a separate `UbPageHeader`. Preserve `dateLabel`, category, image, body paragraphs, `bodyLinks`, metadata rows and action links from the source page.

VII Premi de Pòsters de Sostenibilitat i Drets Humans

Comparteix: in b f w
VII Premi Pòsters de Sostenibilitat i Drets Humans

25/03/26 - 10/07/26

Acadèmic : Solidaritat - Sostenibilitat

La Fundació Solidaritat UB convoca la setena edició del Premi de Pòsters de Sostenibilitat i Drets Humans per a estudiants de grau, postgrau o màster de la Universitat de Barcelona.

Lloc:
en línia
Organitza:
Universitat de Barcelona, Fundació Solidaritat UB i Institut de Desenvolupament Professional
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<article class="">
  <h1 class="font-roboto text-[45px] font-medium leading-[54px] text-black">VII Premi de Pòsters de Sostenibilitat i Drets Humans</h1>
    <div class="mt-8 mb-8 md:mb-[43px]">
      <div class="flex flex-wrap items-center gap-1.5">
        <span class="mr-[14px] font-roboto text-[22px] leading-[33px] text-black">Comparteix:</span>
          <a href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Fvii-premi-posters-sostenibilitat-drets-humans%3Freferer%3Dagenda&amp;title=VII%20Premi%20de%20P%C3%B2sters%20de%20Sostenibilitat%20i%20Drets%20Humans" aria-label="Comparteix a LinkedIn" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#0A66C2] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">in</a>
            <a href="https://bsky.app/intent/compose?text=VII%20Premi%20de%20P%C3%B2sters%20de%20Sostenibilitat%20i%20Drets%20Humans%20https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Fvii-premi-posters-sostenibilitat-drets-humans%3Freferer%3Dagenda" aria-label="Comparteix a Bluesky" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#1185FE] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">b</a>
              <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Fvii-premi-posters-sostenibilitat-drets-humans%3Freferer%3Dagenda" aria-label="Comparteix a Facebook" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#1877F2] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">f</a>
                <a href="https://api.whatsapp.com/send?text=VII%20Premi%20de%20P%C3%B2sters%20de%20Sostenibilitat%20i%20Drets%20Humans%20https%3A%2F%2Fweb.ub.edu%2Fca%2Fweb%2Factualitat%2Fw%2Fvii-premi-posters-sostenibilitat-drets-humans%3Freferer%3Dagenda" aria-label="Comparteix a WhatsApp" class="flex h-[30px] w-[30px] items-center justify-center rounded-full bg-[#10A512] font-roboto text-[14px] font-bold leading-none text-white hover:brightness-90">w</a>
                </div>
              </div>
              <div class="md:-mx-[calc(50vw-50%)] md:bg-[#ebebeb] md:px-[calc(50vw-50%)] md:pt-[7px] md:pb-[22px]">
                <div class="mx-auto grid max-w-[1400px] gap-8 md:grid-cols-[447px_1fr] md:gap-[47px]">
                  <div class="md:pt-[199px]">
                    <img src="https://web.ub.edu/documents/2710030/46107319/VII_premi_sostenibilitat_2026b.jpg/1095af59-0492-33d6-fea0-0f819d18a933?t=1774948245007" alt="VII Premi Pòsters de Sostenibilitat i Drets Humans" loading="lazy" class="aspect-square w-full object-cover md:max-w-[447px]"/>
                  </div>
                  <div>
                    <div class="mt-8 flex items-center gap-[25px]">
                      <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="h-[57px] w-[53px] shrink-0 text-[#0072CE]">
                        <rect x="3" y="5" width="18" height="16" rx="1">
                        </rect>
                        <path d="M3 10h18M8 3v4M16 3v4">
                        </path>
                      </svg>
                      <p class="font-roboto text-[28px] font-normal leading-[42px] text-[#484848]">25/03/26 - 10/07/26</p>
                      </div>
                      <p class="mt-10 font-roboto text-[18px] font-normal uppercase leading-[27px] text-[#8f460a]">Acadèmic : Solidaritat - Sostenibilitat</p>
                        <div class="mt-4 font-roboto text-[18px] leading-[34px] text-[#222]">
                          <p>La Fundació Solidaritat UB convoca la setena edició del Premi de Pòsters de Sostenibilitat i Drets Humans per a estudiants de grau, postgrau o màster de la Universitat de Barcelona.</p>
                          </div>
                          <dl class="mt-[35px] grid gap-0">
                            <div class="grid grid-cols-[122px_1fr] gap-4 font-roboto text-[18px] leading-[27px] text-black">
                              <dt class="font-bold">Lloc:</dt>
                                <dd>en línia</dd>
                                </div>
                                <div class="grid grid-cols-[122px_1fr] gap-4 font-roboto text-[18px] leading-[27px] text-black">
                                  <dt class="font-bold">Organitza:</dt>
                                    <dd>Universitat de Barcelona, Fundació Solidaritat UB i Institut de Desenvolupament Professional</dd>
                                    </div>
                                  </dl>
                                  <ul class="mt-[48px] flex flex-wrap items-center gap-x-5 gap-y-3">
                                    <li class="flex items-center gap-x-5">
                                      <a href="https://www.solidaritat.ub.edu/premi-posters/" class="font-roboto text-[22px] leading-[33px] hover:text-ub-blueDark text-black">Més informació</a>
                                      </li>
                                      <li class="flex items-center gap-x-5">
                                        <span aria-hidden="true" class="text-[30px] leading-none text-black">|</span>
                                          <a href="https://web.ub.edu/ca/web/actualitat/w/vii-premi-posters-sostenibilitat-drets-humans?referer=agenda" class="font-roboto text-[22px] leading-[33px] hover:text-ub-blueDark text-[#0072CE]">Afegeix-ho a la meva agenda</a>
                                          </li>
                                        </ul>
                                      </div>
                                    </div>
                                  </div>
                                </article>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.eventDetail",
  "id": "event",
  "title": "VII Premi de Pòsters de Sostenibilitat i Drets Humans",
  "shareUrl": "https://web.ub.edu/ca/web/actualitat/w/vii-premi-posters-sostenibilitat-drets-humans?referer=agenda",
  "dateLabel": "25/03/26 - 10/07/26",
  "category": "Acadèmic : Solidaritat - Sostenibilitat",
  "image": {
    "src": "https://web.ub.edu/documents/2710030/46107319/VII_premi_sostenibilitat_2026b.jpg/1095af59-0492-33d6-fea0-0f819d18a933?t=1774948245007",
    "alt": "VII Premi Pòsters de Sostenibilitat i Drets Humans"
  },
  "body": [
    "La Fundació Solidaritat UB convoca la setena edició del Premi de Pòsters de Sostenibilitat i Drets Humans per a estudiants de grau, postgrau o màster de la Universitat de Barcelona."
  ],
  "meta": [
    {
      "label": "Lloc",
      "value": "en línia"
    },
    {
      "label": "Organitza",
      "value": "Universitat de Barcelona, Fundació Solidaritat UB i Institut de Desenvolupament Professional"
    }
  ],
  "actions": [
    {
      "label": "Més informació",
      "href": "https://www.solidaritat.ub.edu/premi-posters/"
    },
    {
      "label": "Afegeix-ho a la meva agenda",
      "href": "https://web.ub.edu/ca/web/actualitat/w/vii-premi-posters-sostenibilitat-drets-humans?referer=agenda"
    }
  ]
}
Props i codi font (UbEventDetail)
src/components/ub/UbEventDetail.tsx ↗
PropTipusPer defecte
title *string
shareUrl *string
dateLabel *string
category *string
image{ src: string; alt: string; }
metaUbEventDetailMetaItem[]
actionsUbEventDetailAction[]
classNamestring

UbEventList

Llistat d'esdeveniments

Quan i com fer-lo servir: Use this for vertical agenda/event result lists: one column, horizontal dividers, each row rendered by `UbEventCard`. When a local JSON section type `ub.eventList` exists, map it to `UbEventList`. Do not use `UbAgendaList variant="timeline"` here; that is for the 4-up agenda teaser block on landing pages.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="border-t border-ub-line ">
  <li class="border-b border-ub-line py-5">
    <article class="group grid grid-cols-[97px_1fr] gap-5 md:grid-cols-[196px_1fr] md:gap-6">
      <div class="aspect-square w-full bg-ub-panel" aria-hidden="true">
      </div>
      <div class="min-w-0">
        <p class="text-[13px] font-extrabold uppercase leading-[18px] text-ub-blue md:text-[18px] md:leading-6">Exposició</p>
          <h3 class="mt-1 text-base font-extrabold leading-5 text-ub-text md:text-[26px] md:leading-[31px]">
            <a href="https://web.ub.edu/ca/web/actualitat/w/exposicio-infermeres" class="underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">Exposició: Infermeres en la memòria</a>
            </h3>
            <p class="mt-2 text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">Del 14 al 30 de juliol de 2026 | 09:00</p>
              <p class="text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">Edifici Històric</p>
              </div>
            </article>
          </li>
          <li class="border-b border-ub-line py-5">
            <article class="group grid grid-cols-[97px_1fr] gap-5 md:grid-cols-[196px_1fr] md:gap-6">
              <div class="aspect-square w-full bg-ub-panel" aria-hidden="true">
              </div>
              <div class="min-w-0">
                <p class="text-[13px] font-extrabold uppercase leading-[18px] text-ub-blue md:text-[18px] md:leading-6">Jornada</p>
                  <h3 class="mt-1 text-base font-extrabold leading-5 text-ub-text md:text-[26px] md:leading-[31px]">
                    <a href="https://web.ub.edu/ca/web/escola-doctorat/actualitat" class="underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">Sessió informativa de doctorat</a>
                    </h3>
                    <p class="mt-2 text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">22 de juliol de 2026</p>
                      <p class="text-sm font-medium leading-5 text-ub-text md:text-[24px] md:leading-[30px]">Aula Magna</p>
                      </div>
                    </article>
                  </li>
                </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.eventList",
  "id": "agenda",
  "title": "Pròxims esdeveniments",
  "items": [
    {
      "category": "Exposició",
      "title": "Exposició: Infermeres en la memòria",
      "href": "https://web.ub.edu/ca/web/actualitat/w/exposicio-infermeres",
      "dateLabel": "Del 14 al 30 de juliol de 2026",
      "time": "09:00",
      "location": "Edifici Històric"
    },
    {
      "category": "Jornada",
      "title": "Sessió informativa de doctorat",
      "href": "https://web.ub.edu/ca/web/escola-doctorat/actualitat",
      "dateLabel": "22 de juliol de 2026",
      "location": "Aula Magna"
    }
  ]
}
Props i codi font (UbEventList)
src/components/ub/UbEventList.tsx ↗
PropTipusPer defecte
items *UbEventCardProps[]
emptyMessagestringNo hi ha activitats programades.
classNamestring

Cerca i controls de llistat

Cercador de llistat, facetes de filtratge i paginació — genèrics, reutilitzats per notícies, agenda i el cercador d'estudis.

UbFacetFilters

Filtres de notícies

Quan i com fer-lo servir: Use this immediately before/alongside search results when the source page has a filter sidebar or stacked filter groups. When a local JSON section type `ub.facetFilters` exists, map it to `UbFacetFilters`. Preserve all groups/options from the source page and do not collapse or truncate long thematic category lists.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Filtra els resultats per:

Gènere
Categoria temàtica

Correcció aplicada: A la pàgina real de "Notícies", els filtres formen una columna esquerra d’uns 30% d’amplada en desktop, amb el títol "Filtra els resultats per:", grups de checkbox i un enllaç/botó "Neteja" per cada grup. En mòbil, aquesta columna passa abans del llistat.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <h2 class="mb-2 pt-[34px] text-[22px] font-medium leading-[26.4px] text-black">Filtra els resultats per:</h2>
    <div class="flex flex-col">
      <fieldset>
        <legend class="mb-3 pt-6 text-lg font-medium leading-[22px] text-ub-text">Gènere</legend>
          <ul class="flex flex-col">
            <li>
              <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Entrevista</label>
              </li>
              <li>
                <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                  <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Notícia</label>
                </li>
                <li>
                  <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                    <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Reportatge</label>
                  </li>
                </ul>
                <button type="button" class="mt-2 inline-block py-1.5 text-sm font-bold text-ub-blue underline hover:text-ub-blueDark focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Neteja</button>
                </fieldset>
                <fieldset>
                  <legend class="mb-3 pt-6 text-lg font-medium leading-[22px] text-ub-text">Categoria temàtica</legend>
                    <ul class="flex flex-col">
                      <li>
                        <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                          <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Acadèmic</label>
                        </li>
                        <li>
                          <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                            <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Art</label>
                          </li>
                          <li>
                            <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                              <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Cultura</label>
                            </li>
                            <li>
                              <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Divulgació</label>
                              </li>
                              <li>
                                <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                  <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Emprenedoria</label>
                                </li>
                                <li>
                                  <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                    <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Institucional</label>
                                  </li>
                                  <li>
                                    <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                      <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Internacional</label>
                                    </li>
                                    <li>
                                      <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                        <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Recerca</label>
                                      </li>
                                      <li>
                                        <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                          <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Salut</label>
                                        </li>
                                        <li>
                                          <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                            <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Sostenibilitat</label>
                                          </li>
                                          <li>
                                            <label class="flex items-center gap-2 py-2 text-base text-ub-muted">
                                              <input type="checkbox" class="h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>Tecnologia</label>
                                            </li>
                                          </ul>
                                          <button type="button" class="mt-2 inline-block py-1.5 text-sm font-bold text-ub-blue underline hover:text-ub-blueDark focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Neteja</button>
                                          </fieldset>
                                        </div>
                                      </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.facetFilters",
  "id": "filtres",
  "title": "Cerca i filtres",
  "hideTitle": true,
  "groups": [
    {
      "title": "Gènere",
      "options": [
        {
          "label": "Entrevista"
        },
        {
          "label": "Notícia"
        },
        {
          "label": "Reportatge"
        }
      ]
    },
    {
      "title": "Categoria temàtica",
      "options": [
        {
          "label": "Acadèmic"
        },
        {
          "label": "Art"
        },
        {
          "label": "Cultura"
        },
        {
          "label": "Divulgació"
        },
        {
          "label": "Emprenedoria"
        },
        {
          "label": "Institucional"
        },
        {
          "label": "Internacional"
        },
        {
          "label": "Recerca"
        },
        {
          "label": "Salut"
        },
        {
          "label": "Sostenibilitat"
        },
        {
          "label": "Tecnologia"
        }
      ]
    }
  ]
}
Props i codi font (UbFacetFilters)
src/components/ub/UbFacetFilters.tsx ↗
PropTipusPer defecte
headingstringFiltra els resultats per:
groups *UbFacetGroup[]
clearLabelstringNeteja
classNamestring

UbPagination

Paginació

Quan i com fer-lo servir: Use this for standalone pagination controls with previous/next chevrons and numbered pages. In most listing pages, prefer `UbResultsToolbar`, which composes result count, sorting and `UbPagination`; use `UbPagination` directly only when the source page shows just the pager.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<nav aria-label="Paginació" class="flex items-center gap-5 text-base leading-6 ">
  <a href="?page=1" aria-label="Pàgina anterior" aria-disabled="false" class="flex h-9 w-9 items-center justify-center text-[32px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-text hover:text-ub-blue">
    <span aria-hidden="true">‹</span>
    </a>
    <ul class="flex items-center gap-5">
      <li>
        <a href="?page=1" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">1</a>
        </li>
        <li>
          <a href="?page=2" aria-current="page" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue bg-[#e5e5e5] text-ub-text">2</a>
          </li>
          <li>
            <a href="?page=3" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">3</a>
            </li>
            <li>
              <a href="?page=4" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">4</a>
              </li>
              <li aria-hidden="true" class="px-1 text-ub-muted">…</li>
                <li>
                  <a href="?page=8" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">8</a>
                  </li>
                </ul>
                <a href="?page=3" aria-label="Pàgina següent" aria-disabled="false" class="flex h-9 w-9 items-center justify-center text-[32px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-text hover:text-ub-blue">
                  <span aria-hidden="true">›</span>
                  </a>
                </nav>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.pagination",
  "currentPage": 2,
  "totalPages": 8
}
Props i codi font (UbPagination)
src/components/ub/UbPagination.tsx ↗
PropTipusPer defecte
currentPage *number
totalPages *number
getHref *(page: number) => string
siblingCountnumber2
classNamestring

UbResultsToolbar

Paginació i mida de resultats

Quan i com fer-lo servir: Use this after listing/search result blocks when the source page shows result counts, page-size controls, view controls or pagination. When a local JSON section type `ub.resultsToolbar` exists, map it to `UbResultsToolbar`. `getPageHref` should expand any JSON `pageHrefTemplate` by replacing `{page}` with the page number.

1 - 20 de 135 resultats

Correcció aplicada: El peu del llistat real combina selector de resultats per pàgina, rang visible i paginació numèrica en la mateixa fila, separada del llistat per una línia superior. Els enllaços de pàgina són discretos, amb la pàgina actual sobre fons gris clar.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="flex flex-wrap items-center justify-between gap-4 border-t border-ub-line pb-[15px] pt-[35px] ">
  <div class="flex flex-wrap items-center gap-x-6 gap-y-2 text-base leading-6 text-ub-muted sm:gap-x-16">
    <label class="inline-flex items-center gap-2">
      <select aria-label="Resultats per pàgina" class="min-h-6 border-0 bg-transparent text-base font-normal text-ub-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
        <option value="4">4</option>
          <option value="8">8</option>
            <option value="20" selected="">20</option>
              <option value="40">40</option>
                <option value="60">60</option>
                </select>
                <span>resultats per pàgina.</span>
                </label>
                <span>1 - 20 de 135 resultats</span>
                </div>
                <div class="flex flex-wrap items-center gap-6">
                  <nav aria-label="Paginació" class="flex items-center gap-5 text-base leading-6 ">
                    <a aria-label="Pàgina anterior" aria-disabled="true" tabindex="-1" class="flex h-9 w-9 items-center justify-center text-[32px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue pointer-events-none text-ub-line">
                      <span aria-hidden="true">‹</span>
                      </a>
                      <ul class="flex items-center gap-5">
                        <li>
                          <a href="https://web.ub.edu/ca/web/actualitat/noticies?delta=20&amp;start=1" aria-current="page" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue bg-[#e5e5e5] text-ub-text">1</a>
                          </li>
                          <li>
                            <a href="https://web.ub.edu/ca/web/actualitat/noticies?delta=20&amp;start=2" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">2</a>
                            </li>
                            <li>
                              <a href="https://web.ub.edu/ca/web/actualitat/noticies?delta=20&amp;start=3" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">3</a>
                              </li>
                              <li aria-hidden="true" class="px-1 text-ub-muted">…</li>
                                <li>
                                  <a href="https://web.ub.edu/ca/web/actualitat/noticies?delta=20&amp;start=7" class="relative flex h-[26px] min-w-[18px] items-center justify-center rounded-md px-1 text-base font-normal before:absolute before:-inset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-muted hover:text-ub-blue">7</a>
                                  </li>
                                </ul>
                                <a href="https://web.ub.edu/ca/web/actualitat/noticies?delta=20&amp;start=2" aria-label="Pàgina següent" aria-disabled="false" class="flex h-9 w-9 items-center justify-center text-[32px] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue text-ub-text hover:text-ub-blue">
                                  <span aria-hidden="true">›</span>
                                  </a>
                                </nav>
                              </div>
                            </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.resultsToolbar",
  "id": "paginacio",
  "title": "Paginacio",
  "hideTitle": true,
  "pageSize": 20,
  "pageSizeOptions": [
    4,
    8,
    20,
    40,
    60
  ],
  "rangeLabel": "1 - 20 de 135 resultats",
  "currentPage": 1,
  "totalPages": 7,
  "pageHrefTemplate": "https://web.ub.edu/ca/web/actualitat/noticies?delta=20&start={page}"
}
Props i codi font (UbResultsToolbar)
src/components/ub/UbResultsToolbar.tsx ↗
PropTipusPer defecte
pageSize *number
pageSizeOptionsnumber[][4, 8, 20, 40, 60]
onPageSizeChange((size: number) => void)
rangeLabel *string
viewLabelstring
viewOptionsstring[]
currentPage *number
totalPages *number
getPageHref *(page: number) => string
classNamestring

UbSearchBar

Cercador de llistat

Quan i com fer-lo servir: Use this as the first section after `UbPageHeader` on listing pages such as `actualitat-noticies`; do not replace it with the global header search overlay. Keep the full-width gray band (`left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2`) so it breaks out of the page container like the real page.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Correcció aplicada: El cercador real de "Notícies" és una franja grisa a amplada de viewport que queda just sota el títol de pàgina. L’input fa 63px d’alt, porta icona de lupa a l’esquerra i el botó CTA blau queda a la dreta en desktop; en mòbil s’apila.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="relative left-1/2 -mt-6 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 bg-[#EBEBEB] ">
  <div class="px-[15px]">
    <div class="mx-auto max-w-[1400px]">
      <form class="flex flex-col gap-4 py-6 sm:flex-row sm:py-10" action="https://web.ub.edu/ca/web/actualitat/noticies" method="get">
        <label class="relative flex-1">
          <span class="sr-only">Cerca per text</span>
            <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="pointer-events-none absolute left-3 top-1/2 h-6 w-6 -translate-y-1/2 text-ub-muted">
              <circle cx="9" cy="9" r="6">
              </circle>
              <path d="m17 17-3.6-3.6" stroke-linecap="round">
              </path>
            </svg>
            <input type="search" placeholder="Cerca per text" class="h-[63px] w-full rounded-[5px] border-2 border-ub-line bg-white pl-12 pr-3 text-2xl text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="q"/>
          </label>
          <button type="submit" class="h-[63px] rounded-[5px] px-8 text-base font-bold uppercase text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue sm:min-w-[220px] sm:px-14 bg-ub-blue hover:bg-ub-blueDark">Cerca</button>
          </form>
        </div>
      </div>
    </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.searchBar",
  "id": "cercador",
  "title": "Cercador",
  "hideTitle": true,
  "placeholder": "Cerca per text",
  "buttonLabel": "Cerca",
  "formAction": "https://web.ub.edu/ca/web/actualitat/noticies"
}
Props i codi font (UbSearchBar)
src/components/ub/UbSearchBar.tsx ↗
PropTipusPer defecte
placeholderstringCerca...
buttonLabelstringCerca
actionstring
ctaToneenumblue
classNamestring

Estudis

El cercador d'estudis i la fitxa d'estudi completa: hero, navegació, dades bàsiques, taules de crèdits, contacte i formulari d'informació.

UbContactDetails

Dades de contacte

2 variants

Quan i com fer-lo servir: Use this for compact contact-details key/value blocks. When a local JSON section type `ub.contactDetails` exists, map it to `UbContactDetails`. Preserve email, phone, website label/href, address lines and notes. It renders as the same key/value table language as study facts.

Quan i com fer-lo servir: There is no separate multi-organisation contact component - when a real page's contact tab lists more than one faculty/centre (e.g. a joint degree run by two faculties), render one `<h3>` + one `UbContactDetails` instance per organisation, in source order, rather than inventing a new combined shape. Each instance keeps using its own `address`/`phone`/`email`/`website`/`notes` props.

Correu electrònic
microcred.info@il3.ub.edu
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<dl class="border-t border-ub-line ">
  <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
    <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Correu electrònic</dt>
      <dd class="px-4 py-3 leading-6 text-ub-text">
        <a href="mailto:microcred.info@il3.ub.edu" class="text-ub-blue underline underline-offset-4">microcred.info@il3.ub.edu</a>
        </dd>
      </div>
      <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
        <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Pàgina web</dt>
          <dd class="px-4 py-3 leading-6 text-ub-text">
            <a href="https://www.il3.ub.edu/" class="text-ub-blue underline underline-offset-4 break-all">Pàgina web del programa</a>
            </dd>
          </div>
        </dl>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.contactDetails",
  "id": "contacte",
  "title": "Contacte",
  "email": "microcred.info@il3.ub.edu",
  "website": {
    "label": "Pàgina web del programa",
    "href": "https://www.il3.ub.edu/"
  }
}

Diverses seus/facultats

Font: Fitxa de grau, web.ub.edu

Facultat de Biologia

Adreça
Diagonal, 643 - 08028 Barcelona
Correu electrònic
secretaria-biologia@ub.edu
Telèfon
934021087

Facultat de Medicina i Ciències de la Salut

Adreça
Casanova, 143 - 08036 Barcelona (Campus Clínic) Feixa Llarga, s/n - 08907 Hospitalet de Llobregat (Campus Bellvitge)
Pàgina web
Bústia de consultes
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid gap-8">
  <div>
    <h3 class="mb-2 text-lg font-bold text-ub-text">Facultat de Biologia</h3>
      <dl class="border-t border-ub-line ">
        <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
          <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Adreça</dt>
            <dd class="px-4 py-3 leading-6 text-ub-text">
              <span class="block">Diagonal, 643 - 08028 Barcelona</span>
              </dd>
            </div>
            <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
              <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Correu electrònic</dt>
                <dd class="px-4 py-3 leading-6 text-ub-text">
                  <a href="mailto:secretaria-biologia@ub.edu" class="text-ub-blue underline underline-offset-4">secretaria-biologia@ub.edu</a>
                  </dd>
                </div>
                <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
                  <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Telèfon</dt>
                    <dd class="px-4 py-3 leading-6 text-ub-text">
                      <a href="tel:934021087" class="text-ub-blue underline underline-offset-4">934021087</a>
                      </dd>
                    </div>
                  </dl>
                </div>
                <div>
                  <h3 class="mb-2 text-lg font-bold text-ub-text">Facultat de Medicina i Ciències de la Salut</h3>
                    <dl class="border-t border-ub-line ">
                      <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
                        <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Adreça</dt>
                          <dd class="px-4 py-3 leading-6 text-ub-text">
                            <span class="block">Casanova, 143 - 08036 Barcelona (Campus Clínic)</span>
                              <span class="block">Feixa Llarga, s/n - 08907 Hospitalet de Llobregat (Campus Bellvitge)</span>
                              </dd>
                            </div>
                            <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
                              <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Pàgina web</dt>
                                <dd class="px-4 py-3 leading-6 text-ub-text">
                                  <a href="https://www.ub.edu/dc/inici.php?id=8b4f2caecc9a80ab2349636a53c1e1895208069f" class="text-ub-blue underline underline-offset-4 break-all">Bústia de consultes</a>
                                  </dd>
                                </div>
                              </dl>
                            </div>
                          </div>
Props i codi font (UbContactDetails)
src/components/ub/UbContactDetails.tsx ↗
PropTipusPer defecte
addressstring[]
emailstring
phonestring
website{ label: string; href: string; }
notesstring
classNamestring

UbDataTable

Distribució de crèdits

2 variants

Quan i com fer-lo servir: Use for the "Distribució de crèdits"/"Relació d'assignatures" tables inside a grau/màster study-plan section. `caption` is visually hidden (`sr-only`) - always put a visible `<h3>`/`<h4>` right above the table instead of relying on it. Use `href: true` on a column whose row values are absolute URLs to render that cell as a link (e.g. a subject name linking to its pla docent) - do not hand-roll an `<a>` inside `row[column.key]` yourself.

Quan i com fer-lo servir: Real per-course subject tables are long (10+ rows per year across 4 years) - wrap each year's table in its own `UbAccordion` item (one item per curs) instead of stacking every year's table flat on the page. When a subject name links to its pla docent (visible text differs from the URL), pass a pre-built `<a>` as the cell value directly - don't use the `href: true` column flag for that, it renders the raw string value itself as the link text (only correct when the URL *is* the visible label, e.g. a bare "Consulta ... (curs 2026)" link cell).

Distribució de crèdits

Font: Fitxa de grau, web.ub.edu
Distribució de crèdits del pla d'estudis
Tipus ECTS
Formació bàsica 66
Obligatòria 138
Optativa 12
Pràctiques externes 12
Treball final de grau 12
TOTAL 240
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="overflow-x-auto ">
  <table class="w-full min-w-[480px] border-collapse text-sm text-ub-text">
    <caption class="sr-only">Distribució de crèdits del pla d&#x27;estudis</caption>
      <thead>
        <tr class="border-b border-ub-line">
          <th scope="col" class="whitespace-nowrap px-4 py-3 text-left font-bold">Tipus</th>
            <th scope="col" class="whitespace-nowrap px-4 py-3 text-left font-bold">ECTS</th>
            </tr>
          </thead>
          <tbody>
            <tr class="border-b border-ub-line">
              <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">Formació bàsica</th>
                <td class="px-4 py-3">66</td>
                </tr>
                <tr class="border-b border-ub-line">
                  <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">Obligatòria</th>
                    <td class="px-4 py-3">138</td>
                    </tr>
                    <tr class="border-b border-ub-line">
                      <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">Optativa</th>
                        <td class="px-4 py-3">12</td>
                        </tr>
                        <tr class="border-b border-ub-line">
                          <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">Pràctiques externes</th>
                            <td class="px-4 py-3">12</td>
                            </tr>
                            <tr class="border-b border-ub-line">
                              <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">Treball final de grau</th>
                                <td class="px-4 py-3">12</td>
                                </tr>
                                <tr class="border-b border-ub-line">
                                  <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">TOTAL</th>
                                    <td class="px-4 py-3">240</td>
                                    </tr>
                                  </tbody>
                                </table>
                              </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.dataTable",
  "id": "distribucio-credits",
  "title": "Distribució de crèdits",
  "hideTitle": true,
  "caption": "Distribució de crèdits del pla d'estudis",
  "columns": [
    {
      "key": "tipus",
      "label": "Tipus"
    },
    {
      "key": "ects",
      "label": "ECTS"
    }
  ],
  "rows": [
    {
      "tipus": "Formació bàsica",
      "ects": "66"
    },
    {
      "tipus": "Obligatòria",
      "ects": "138"
    },
    {
      "tipus": "Optativa",
      "ects": "12"
    },
    {
      "tipus": "Pràctiques externes",
      "ects": "12"
    },
    {
      "tipus": "Treball final de grau",
      "ects": "12"
    },
    {
      "tipus": "TOTAL",
      "ects": "240"
    }
  ]
}

Relació d'assignatures (amb enllaç a pla docent)

Font: Fitxa de grau, web.ub.edu
Assignatures de primer curs
Assignatura Semestre Tipus Crèdits
Anatomia 1r semestre Formació bàsica 6
Citologia 1r semestre Obligatòria 6
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="overflow-x-auto ">
  <table class="w-full min-w-[480px] border-collapse text-sm text-ub-text">
    <caption class="sr-only">Assignatures de primer curs</caption>
      <thead>
        <tr class="border-b border-ub-line">
          <th scope="col" class="whitespace-nowrap px-4 py-3 text-left font-bold">Assignatura</th>
            <th scope="col" class="whitespace-nowrap px-4 py-3 text-left font-bold">Semestre</th>
              <th scope="col" class="whitespace-nowrap px-4 py-3 text-left font-bold">Tipus</th>
                <th scope="col" class="whitespace-nowrap px-4 py-3 text-left font-bold">Crèdits</th>
                </tr>
              </thead>
              <tbody>
                <tr class="border-b border-ub-line">
                  <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">
                    <a href="https://www.ub.edu/guiaacademica/?codEnsenyament=TG1090&amp;curs=2026&amp;idioma=CAT" class="font-bold text-ub-blue underline decoration-1 underline-offset-4 hover:text-ub-blue-dark">Anatomia</a>
                    </th>
                    <td class="px-4 py-3">1r semestre</td>
                      <td class="px-4 py-3">Formació bàsica</td>
                        <td class="px-4 py-3">6</td>
                        </tr>
                        <tr class="border-b border-ub-line">
                          <th scope="row" class="whitespace-nowrap px-4 py-3 text-left font-bold">
                            <a href="https://www.ub.edu/guiaacademica/?codEnsenyament=TG1090&amp;curs=2026&amp;idioma=CAT" class="font-bold text-ub-blue underline decoration-1 underline-offset-4 hover:text-ub-blue-dark">Citologia</a>
                            </th>
                            <td class="px-4 py-3">1r semestre</td>
                              <td class="px-4 py-3">Obligatòria</td>
                                <td class="px-4 py-3">6</td>
                                </tr>
                              </tbody>
                            </table>
                          </div>
Props i codi font (UbDataTable)
src/components/ub/UbDataTable.tsx ↗
PropTipusPer defecte
columns *UbDataTableColumn[]
rows *Record<string, ReactNode>[]
caption *string
classNamestring

UbStudyDetailHero

Fitxa d'estudi: hero

Quan i com fer-lo servir: Use this for study/program detail hero areas with a title over or near a wide image and optional CTA. When a local JSON section type `ub.studyDetailHero` exists, map it to `UbStudyDetailHero`. It owns the study title area and optional CTA. Preserve the real hero image and CTA from the source page; do not add a separate page header above it. It uses the `left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2` full-bleed technique for its background, so it must be a top-level page section (like `ub.studyDetailNav` right after it) - never nest it inside a `ub.facetFilters` results column or a `ub.studyDetailNav` aside/main run, or the background misaligns and overlaps neighbouring content.

Microcredencial en Abordatge Integral de l'Esquizofrènia

Microcredencial en Abordatge Integral de l'Esquizofrènia: Ciència, Farmacologia i Consciència Social (2025 - 2026)

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="relative left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 bg-ub-panel">
    <div class="relative h-[280px] w-full overflow-hidden md:h-[450px]">
      <img src="https://web.ub.edu/documents/2739584/5229035/AF_AprenLlengues_1509x765.jpg/74b898ee-d169-39a6-371b-6f1cf696d0e6?t=1677678753437" alt="Microcredencial en Abordatge Integral de l&#x27;Esquizofrènia" loading="lazy" class="h-full w-full object-cover"/>
    </div>
    <div class="pointer-events-none absolute inset-0 px-[15px]">
      <div class="relative mx-auto h-full max-w-[1400px]">
        <h1 class="pointer-events-auto absolute inset-x-0 top-6 text-balance text-3xl font-bold leading-tight text-ub-text sm:top-24 sm:text-4xl">Microcredencial en Abordatge Integral de l&#x27;Esquizofrènia: Ciència, Farmacologia i Consciència Social (2025 - 2026)</h1>
          <div class="pointer-events-auto absolute inset-x-0 bottom-6">
            <a href="#informacio" class="inline-flex items-center gap-2 rounded-lg bg-ub-orange px-6 py-3 text-sm font-bold uppercase tracking-wide text-white hover:brightness-95 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Més informació<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0">
              <path d="M7 4l5 6-5 6">
              </path>
            </svg>
          </a>
        </div>
      </div>
    </div>
  </div>
</div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.studyDetailHero",
  "id": "hero",
  "title": "Microcredencial en Abordatge Integral de l'Esquizofrènia: Ciència, Farmacologia i Consciència Social (2025 - 2026)",
  "image": {
    "src": "https://web.ub.edu/documents/2739584/5229035/AF_AprenLlengues_1509x765.jpg/74b898ee-d169-39a6-371b-6f1cf696d0e6?t=1677678753437",
    "alt": "Microcredencial en Abordatge Integral de l'Esquizofrènia"
  },
  "cta": {
    "label": "Més informació",
    "href": "#informacio"
  }
}
Props i codi font (UbStudyDetailHero)
src/components/ub/UbStudyDetailHero.tsx ↗
PropTipusPer defecte
title *string
image{ src: string; alt: string; }
cta{ label: string; href: string; }
classNamestring

UbStudyDetailNav

Fitxa d'estudi: navegació

Quan i com fer-lo servir: Use this for horizontal navigation inside study/program detail pages, including dropdown groups. When a local JSON section type `ub.studyDetailNav` exists, map it to `UbStudyDetailNav`. Preserve current/active state and dropdown children. This nav normally sits immediately after `UbStudyDetailHero` and before the two-column study detail body. Below `lg`, open dropdowns are viewport-bound and wrap; do not restore fixed-width off-screen panels. It uses the `left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2` full-bleed technique for its background, so it must be a top-level page section - never nest it as one of the sections following a `ub.facetFilters`, or the background misaligns and overlaps neighbouring content.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="relative left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 bg-ub-panel ">
  <nav aria-label="Seccions de la fitxa" class="px-[15px]">
    <ul class="flex flex-wrap justify-center gap-x-8">
      <li>
        <a href="#presentacio" aria-current="page" class="flex min-h-[73px] items-center border-b-2 pb-1 text-sm font-bold focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue border-ub-orange text-ub-text">Presentació</a>
        </li>
        <li>
          <a href="#objectius" class="flex min-h-[73px] items-center border-b-2 pb-1 text-sm font-bold focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue border-transparent text-ub-text hover:text-ub-blue">Objectius i competències</a>
          </li>
          <li class="relative">
            <details class="group" name="study-detail-nav-dropdown">
              <summary class="flex min-h-[73px] cursor-pointer list-none items-center gap-1 border-b-2 border-transparent pb-1 text-sm font-bold text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Accés i admissió<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-3 w-3 shrink-0 transition-transform group-open:rotate-180">
                <path d="M5 8l5 5 5-5">
                </path>
              </svg>
            </summary>
            <ul class="absolute left-0 top-full z-10 hidden divide-x divide-ub-line border border-ub-line bg-white shadow-lg group-open:flex max-lg:fixed max-lg:left-[15px] max-lg:right-[15px] max-lg:top-auto max-lg:w-auto max-lg:flex-wrap">
              <li class="min-w-[200px] p-6">
                <a href="#informacio" class="block text-base font-bold leading-6 text-ub-text hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Preinscripció</a>
                </li>
              </ul>
            </details>
          </li>
          <li>
            <a href="#contacte" class="flex min-h-[73px] items-center border-b-2 pb-1 text-sm font-bold focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue border-transparent text-ub-text hover:text-ub-blue">Contacte</a>
            </li>
          </ul>
        </nav>
      </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.studyDetailNav",
  "id": "nav",
  "title": "Navegació de la fitxa",
  "hideTitle": true,
  "items": [
    {
      "label": "Presentació",
      "href": "#presentacio",
      "current": true
    },
    {
      "label": "Objectius i competències",
      "href": "#objectius"
    },
    {
      "label": "Accés i admissió",
      "children": [
        {
          "label": "Preinscripció",
          "href": "#informacio"
        }
      ]
    },
    {
      "label": "Contacte",
      "href": "#contacte"
    }
  ]
}
Props i codi font (UbStudyDetailNav)
src/components/ub/UbStudyDetailNav.tsx ↗
PropTipusPer defecte
items *UbStudyDetailNavItem[]
classNamestring

UbStudyFacts

Fitxa d'estudi: dades bàsiques

2 variants

Quan i com fer-lo servir: Use this for key/value fact tables. When a local JSON section type `ub.facts` exists, map it to `UbStudyFacts`. Preserve row order and `tone` (`tan` for degree-like facts, `sky` for microcredential/master own-title facts).

Quan i com fer-lo servir: Use `tone="sky"` for microcredencial/màster propi own-title fact tables, matching the real fitxa de màster propi pattern; keep `tone="tan"` for grau/màster oficial fact tables.

Fitxa d'estudi: dades bàsiques

Font: Fitxa de grau
Tipus
Grau
Centre de gestió
Facultat d'Economia i Empresa
Crèdits
240
Modalitat de docència
Presencial
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<dl class="border-t border-ub-line ">
  <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
    <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Tipus</dt>
      <dd class="px-4 py-3 leading-6 text-ub-text">Grau</dd>
      </div>
      <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
        <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Centre de gestió</dt>
          <dd class="px-4 py-3 leading-6 text-ub-text">Facultat d&#x27;Economia i Empresa</dd>
          </div>
          <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
            <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Crèdits</dt>
              <dd class="px-4 py-3 leading-6 text-ub-text">240</dd>
              </div>
              <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
                <dt class="bg-ub-tan px-4 py-3 font-bold leading-6 text-ub-text">Modalitat de docència</dt>
                  <dd class="px-4 py-3 leading-6 text-ub-text">Presencial</dd>
                  </div>
                </dl>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.facts",
  "id": "dades",
  "title": "Dades bàsiques",
  "tone": "tan",
  "items": [
    {
      "label": "Tipus",
      "value": "Grau"
    },
    {
      "label": "Centre de gestió",
      "value": "Facultat d'Economia i Empresa"
    },
    {
      "label": "Crèdits",
      "value": "240"
    },
    {
      "label": "Modalitat de docència",
      "value": "Presencial"
    }
  ]
}

Fitxa d'estudi propi: dades bàsiques (to sky)

Font: Fitxa de màster propi
Títol
Microcredencial
Centre responsable
Facultat d'Infermeria
Modalitat de docència
Presencial
Crèdits
3
Idioma de docència
Català; Espanyol
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<dl class="border-t border-ub-line ">
  <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
    <dt class="bg-ub-skyLight px-4 py-3 font-bold leading-6 text-ub-text">Títol</dt>
      <dd class="px-4 py-3 leading-6 text-ub-text">Microcredencial</dd>
      </div>
      <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
        <dt class="bg-ub-skyLight px-4 py-3 font-bold leading-6 text-ub-text">Centre responsable</dt>
          <dd class="px-4 py-3 leading-6 text-ub-text">Facultat d&#x27;Infermeria</dd>
          </div>
          <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
            <dt class="bg-ub-skyLight px-4 py-3 font-bold leading-6 text-ub-text">Modalitat de docència</dt>
              <dd class="px-4 py-3 leading-6 text-ub-text">Presencial</dd>
              </div>
              <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
                <dt class="bg-ub-skyLight px-4 py-3 font-bold leading-6 text-ub-text">Crèdits</dt>
                  <dd class="px-4 py-3 leading-6 text-ub-text">3</dd>
                  </div>
                  <div class="grid grid-cols-1 border-b border-ub-line sm:grid-cols-[240px_1fr]">
                    <dt class="bg-ub-skyLight px-4 py-3 font-bold leading-6 text-ub-text">Idioma de docència</dt>
                      <dd class="px-4 py-3 leading-6 text-ub-text">Català; Espanyol</dd>
                      </div>
                    </dl>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.facts",
  "id": "dades",
  "title": "Dades bàsiques",
  "tone": "sky",
  "items": [
    {
      "label": "Títol",
      "value": "Microcredencial"
    },
    {
      "label": "Centre responsable",
      "value": "Facultat d'Infermeria"
    },
    {
      "label": "Modalitat de docència",
      "value": "Presencial"
    },
    {
      "label": "Crèdits",
      "value": "3"
    },
    {
      "label": "Idioma de docència",
      "value": "Català; Espanyol"
    }
  ]
}
Props i codi font (UbStudyFacts)
src/components/ub/UbStudyFacts.tsx ↗
PropTipusPer defecte
items *UbStudyFactItem[]
toneenumtan
classNamestring

UbStudyInfoForm

Formulari d'informació d'estudi

Quan i com fer-lo servir: Use this for study/program information request forms. When a local JSON section type `ub.studyInfoForm` exists, map it to `UbStudyInfoForm`. It is usually rendered in the aside column of study detail pages. Preserve country/province options, consent text, labels and `formAction`.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Vull rebre més informació

Tots els camps són obligatoris

La Universitat de Barcelona tracta les teves dades per facilitar-te informació sobre aquest ensenyament.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<form class="bg-ub-panel px-6 pb-10 pt-4 sm:px-7 sm:pb-12 " method="get">
  <h3 class="mb-8 border-b-2 border-ub-orange pb-1 text-xl font-medium leading-7 text-ub-orange">Vull rebre més informació</h3>
    <p class="text-sm text-ub-muted">Tots els camps són obligatoris</p>
      <div class="mt-6 grid gap-5 sm:grid-cols-2">
        <label class="block text-base font-medium text-ub-text ">Nom<span aria-hidden="true" class="text-ub-orange"> *</span>
          <input type="text" required="" aria-required="true" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="nom"/>
        </label>
        <label class="block text-base font-medium text-ub-text ">Cognom<span aria-hidden="true" class="text-ub-orange"> *</span>
          <input type="text" required="" aria-required="true" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="cognom"/>
        </label>
        <label class="block text-base font-medium text-ub-text ">Segon cognom<input type="text" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="segonCognom"/>
      </label>
      <label class="block text-base font-medium text-ub-text sm:col-span-2">Adreça electrònica<span aria-hidden="true" class="text-ub-orange"> *</span>
        <input type="email" required="" aria-required="true" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="email"/>
      </label>
      <label class="block text-base font-medium text-ub-text ">Prefix<span aria-hidden="true" class="text-ub-orange"> *</span>
        <input type="text" required="" aria-required="true" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="prefix" value="+34"/>
      </label>
      <label class="block text-base font-medium text-ub-text ">Telèfon<span aria-hidden="true" class="text-ub-orange"> *</span>
        <input type="tel" required="" aria-required="true" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="telefon"/>
      </label>
      <label class="block text-base font-medium text-ub-text sm:col-span-2">País<span aria-hidden="true" class="text-ub-orange"> *</span>
        <select name="pais" required="" aria-required="true" class="mt-1 font-normal w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
          <option value="" disabled="" selected="">País</option>
            <option value="Espanya">Espanya</option>
              <option value="Andorra">Andorra</option>
                <option value="França">França</option>
                  <option value="Itàlia">Itàlia</option>
                    <option value="Altres">Altres</option>
                    </select>
                  </label>
                </div>
                <p class="mt-6 text-xs leading-5 text-ub-muted">La Universitat de Barcelona tracta les teves dades per facilitar-te informació sobre aquest ensenyament.</p>
                  <label class="mt-4 flex items-start gap-3 text-sm text-ub-text">
                    <input type="checkbox" required="" class="mt-1 h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>He llegit el dret d&#x27;informació i consento el tractament de les meves dades personals.</label>
                    <button type="submit" class="mt-6 w-full rounded-md bg-ub-orange px-8 py-3 text-sm font-bold uppercase tracking-wide text-white hover:brightness-95 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Envia</button>
                    </form>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.studyInfoForm",
  "id": "informacio",
  "column": "aside",
  "title": "Vull rebre més informació",
  "countryLabel": "País",
  "countryOptions": [
    "Espanya",
    "Andorra",
    "França",
    "Itàlia",
    "Altres"
  ],
  "consentText": "La Universitat de Barcelona tracta les teves dades per facilitar-te informació sobre aquest ensenyament."
}
Props i codi font (UbStudyInfoForm)
src/components/ub/UbStudyInfoForm.tsx ↗
PropTipusPer defecte
titlestringVull rebre més informació
requiredNotestringTots els camps són obligatoris
countryOptions *string[]
countryLabelstringSelecciona un país
provinceOptionsstring[]
provinceLabelstringSelecciona una província
consentTextReactNode
consentLabelstringHe llegit el dret d'informació i consento el tractament de les meves dades personals.
submitLabelstringEnvia
actionstring
classNamestring

UbStudyResultCard

Resultat d'estudi

Quan i com fer-lo servir: Use this for study/program search result rows. When a local JSON section type `ub.studyResults` exists, map the section to a list of `UbStudyResultCard` entries. Preserve status, type, center, meta order and action label for each result. Do not substitute this with a generic news card.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="border-t border-ub-line">
  <article class="flex flex-col gap-3 border-b border-ub-line py-6 sm:flex-row sm:items-start sm:justify-between sm:gap-6 ">
    <div>
      <h3 class="text-balance text-2xl font-medium leading-8 text-ub-text sm:text-[28px]">
        <a href="https://web.ub.edu/ca/web/estudis/w/masterpropi-202511135?referer=cercador-masters-postgraus" class="hover:text-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Abordatge Integral de l&#x27;Esquizofrènia: Ciència, Farmacologia i Consciència Social (2025 - 2026)</a>
        </h3>
        <p class="mt-2 text-lg font-black text-ub-orange">Matrícula oberta</p>
          <p class="mt-2 text-base text-ub-muted">Microcredencial | Facultat d&#x27;Infermeria</p>
            <p class="mt-1 text-base font-bold text-ub-text">Menys de 3 mesos | Presencial | Català i Espanyol | Inici: 09/03/2026</p>
            </div>
            <a href="https://web.ub.edu/ca/web/estudis/w/masterpropi-202511135?referer=cercador-masters-postgraus" aria-label="Ves a la fitxa: Abordatge Integral de l&#x27;Esquizofrènia: Ciència, Farmacologia i Consciència Social (2025 - 2026)" class="inline-flex shrink-0 items-center gap-2 self-start rounded-lg border-2 border-ub-orange bg-white px-5 py-2.5 text-sm font-bold uppercase tracking-wide text-ub-orange hover:bg-ub-orange hover:text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
              <span aria-hidden="true">Ves a la fitxa</span>
                <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0">
                  <path d="M7 4l5 6-5 6">
                  </path>
                </svg>
              </a>
            </article>
          </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.studyResults",
  "id": "resultats",
  "title": "Resultats",
  "items": [
    {
      "title": "Abordatge Integral de l'Esquizofrènia: Ciència, Farmacologia i Consciència Social (2025 - 2026)",
      "href": "https://web.ub.edu/ca/web/estudis/w/masterpropi-202511135?referer=cercador-masters-postgraus",
      "status": "Matrícula oberta",
      "type": "Microcredencial",
      "center": "Facultat d'Infermeria",
      "meta": [
        "Menys de 3 mesos",
        "Presencial",
        "Català i Espanyol",
        "Inici: 09/03/2026"
      ]
    }
  ]
}
Props i codi font (UbStudyResultCard)
src/components/ub/UbStudyResultCard.tsx ↗
PropTipusPer defecte
title *string
href *string
statusstring
type *string
center *string
meta *string[]
actionLabelstringVes a la fitxa
asElementTypeh3
classNamestring

UbStudySearchHero

Oferta formativa (portada)

2 variants

Quan i com fer-lo servir: This component uses `left-1/2` + `-translate-x-1/2` + `w-[calc(100vw-...)]` to paint its background across the full WINDOW width (a "full-bleed" effect), not the page's content width. It must be a direct child of `<body>` or of a container with NO `max-width` - if you wrap it in a `<div>`/`<section>` with `max-w-[...]`, the background shifts and clips incorrectly. Place it outside any width-limited wrapper, the same way the header and footer are.

Quan i com fer-lo servir: Use `backgroundTone="blue"` for full-width program search bands with a blue background, white heading, one keyword input, one select and a CTA. This covers no-local-JSON pages where the source shows a program/course search module rather than a gray listing search. Keep it full-bleed and do not replace it with `UbSearchBar`, which is the gray listing-search pattern.

Oferta formativa (portada)

Font: portada UB.edu

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Oferta formativa

Correcció aplicada: `UbStudySearchHero` AMB `image` reprodueix la banda "Oferta formativa" de la portada de UB.edu: la banda real té una imatge de fons amb superposició fosca i text blanc (`.ub-tpl-oferta-formativa.text-white`, comprovat amb `getComputedStyle` sobre la pàgina real, no assumit) — no és el panell gris pla que semblava a primer cop d'ull.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="relative left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 overflow-hidden bg-ub-panel ">
  <img src="https://web.ub.edu/documents/2685349/2690148/oferta+formativa.jpg/4eb527fa-723b-8b1f-eef4-a7f48f9f157c?t=1662555434547" alt="" loading="lazy" class="absolute inset-0 h-full w-full object-cover"/>
  <div aria-hidden="true" class="absolute inset-0 bg-black/55">
  </div>
  <div class="relative mx-auto max-w-[1400px] px-4 pb-4 pt-6 sm:px-8 lg:pb-[71px] lg:pt-[62px]">
    <h2 class="text-balance text-[32px] font-bold leading-tight sm:text-[45px] sm:leading-[54px] text-white">Oferta formativa</h2>
      <form class="mt-[18px] flex flex-col gap-[30px] lg:mt-[50px] lg:flex-row" method="get">
        <label class="relative flex-1">
          <span class="sr-only">Cerca per paraula clau</span>
            <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="pointer-events-none absolute left-6 top-1/2 h-9 w-9 -translate-y-1/2 text-ub-muted">
              <circle cx="9" cy="9" r="6">
              </circle>
              <path d="M17 17l-3.5-3.5" stroke-linecap="round">
              </path>
            </svg>
            <input type="search" placeholder="Cerca per paraula clau" class="h-[63px] w-full border border-ub-line bg-white pl-[80px] pr-4 text-2xl text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="q"/>
          </label>
          <label class="relative flex-1">
            <span class="sr-only">Tipus d&#x27;estudi</span>
              <select name="scope" class="h-[63px] w-full appearance-none border border-ub-line bg-white pl-4 pr-10 text-2xl text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                <option value="" disabled="" selected="">Tipus d&#x27;estudi</option>
                  <option value="Graus">Graus</option>
                    <option value="Màsters i postgraus">Màsters i postgraus</option>
                      <option value="Microcredencials">Microcredencials</option>
                        <option value="Doctorats">Doctorats</option>
                        </select>
                        <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="pointer-events-none absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-ub-text">
                          <path d="M5 8l5 5 5-5">
                          </path>
                        </svg>
                      </label>
                      <button type="submit" class="h-[63px] px-8 text-base font-bold uppercase text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue lg:w-[208px] lg:shrink-0 bg-ub-blue hover:bg-ub-blueDark">Cerca</button>
                      </form>
                      <div class="mt-10">
                        <p class="mb-6 text-xl font-normal leading-8 sm:text-[26px] text-white">Tots els ensenyaments de la UB</p>
                          <ul class="grid grid-cols-1 gap-[30px] sm:grid-cols-2 lg:grid-cols-4">
                            <li>
                              <a href="https://web.ub.edu/ca/web/estudis/graus" class="flex h-[63px] items-center justify-between gap-2 border-2 px-6 text-base font-bold uppercase focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 border-white text-white hover:bg-white hover:text-ub-text focus-visible:outline-white">Graus<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0">
                                <path d="M7 4l5 6-5 6">
                                </path>
                              </svg>
                            </a>
                          </li>
                          <li>
                            <a href="https://web.ub.edu/ca/web/estudis/masters-postgraus" class="flex h-[63px] items-center justify-between gap-2 border-2 px-6 text-base font-bold uppercase focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 border-white text-white hover:bg-white hover:text-ub-text focus-visible:outline-white">Màsters i postgraus<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0">
                              <path d="M7 4l5 6-5 6">
                              </path>
                            </svg>
                          </a>
                        </li>
                        <li>
                          <a href="https://web.ub.edu/ca/web/estudis/doctorats" class="flex h-[63px] items-center justify-between gap-2 border-2 px-6 text-base font-bold uppercase focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 border-white text-white hover:bg-white hover:text-ub-text focus-visible:outline-white">Doctorat<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0">
                            <path d="M7 4l5 6-5 6">
                            </path>
                          </svg>
                        </a>
                      </li>
                      <li>
                        <a href="https://web.ub.edu/ca/web/estudis/altra-oferta-formativa" class="flex h-[63px] items-center justify-between gap-2 border-2 px-6 text-base font-bold uppercase focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 border-white text-white hover:bg-white hover:text-ub-text focus-visible:outline-white">Altra oferta formativa<svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="h-4 w-4 shrink-0">
                          <path d="M7 4l5 6-5 6">
                          </path>
                        </svg>
                      </a>
                    </li>
                  </ul>
                </div>
              </div>
            </div>

Cercador de programes amb fons blau

Font: Escola de Doctorat

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Oferta de programes de doctorat

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="relative left-1/2 w-[calc(100vw-var(--sbw,0px))] -translate-x-1/2 overflow-hidden bg-ub-blue ">
  <div class="relative mx-auto max-w-[1400px] px-4 pb-4 pt-6 sm:px-8 lg:pb-[71px] lg:pt-[62px]">
    <h2 class="text-balance text-[32px] font-bold leading-tight sm:text-[45px] sm:leading-[54px] text-white">Oferta de programes de doctorat</h2>
      <form class="mt-[18px] flex flex-col gap-[30px] lg:mt-[50px] lg:flex-row" method="get">
        <label class="relative flex-1">
          <span class="sr-only">Cerca per paraula clau</span>
            <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="pointer-events-none absolute left-6 top-1/2 h-9 w-9 -translate-y-1/2 text-ub-muted">
              <circle cx="9" cy="9" r="6">
              </circle>
              <path d="M17 17l-3.5-3.5" stroke-linecap="round">
              </path>
            </svg>
            <input type="search" placeholder="Cerca per paraula clau" class="h-[63px] w-full border border-ub-line bg-white pl-[80px] pr-4 text-2xl text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="q"/>
          </label>
          <label class="relative flex-1">
            <span class="sr-only">Àmbit</span>
              <select name="scope" class="h-[63px] w-full appearance-none border border-ub-line bg-white pl-4 pr-10 text-2xl text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                <option value="" disabled="" selected="">Àmbit</option>
                  <option value="Arts i humanitats">Arts i humanitats</option>
                    <option value="Ciències">Ciències</option>
                      <option value="Ciències de la salut">Ciències de la salut</option>
                        <option value="Ciències socials i jurídiques">Ciències socials i jurídiques</option>
                        </select>
                        <svg aria-hidden="true" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="2" class="pointer-events-none absolute right-4 top-1/2 h-4 w-4 -translate-y-1/2 text-ub-text">
                          <path d="M5 8l5 5 5-5">
                          </path>
                        </svg>
                      </label>
                      <button type="submit" class="h-[63px] px-8 text-base font-bold uppercase text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue lg:w-[208px] lg:shrink-0 bg-ub-orange hover:bg-ub-orange/90">Cerca</button>
                      </form>
                    </div>
                  </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.studySearchHero",
  "id": "oferta-doctorat",
  "title": "Oferta de programes de doctorat",
  "backgroundTone": "blue",
  "keywordPlaceholder": "Cerca per paraula clau",
  "scopeLabel": "Àmbit",
  "scopeOptions": [
    "Arts i humanitats",
    "Ciències",
    "Ciències de la salut",
    "Ciències socials i jurídiques"
  ],
  "ctaLabel": "Cerca",
  "ctaTone": "orange"
}
Props i codi font (UbStudySearchHero)
src/components/ub/UbStudySearchHero.tsx ↗
PropTipusPer defecte
title *string
image{ src: string; alt: string; }
actionstring
keywordNamestringq
keywordPlaceholderstringCerca per paraula clau
scopeNamestringscope
scopeLabel *string
scopeOptions *string[]
ctaLabelstringCerca
ctaToneenumorange
backgroundToneenumpanel
quickLinksHeadingstring
quickLinksUbStudySearchQuickLink[]
asElementTypeh2
classNamestring

Multimèdia

Imatges destacades, bàners i carrusels, galeries, targetes multimèdia, vídeo incrustat i pòdcast.

UbBanner

Bàner promocional

2 variants

Quan i com fer-lo servir: Use this for standalone promotional/banner blocks. When a local JSON section type `ub.banner` exists, map it to `UbBanner`. Preserve `tone`, body paragraphs, link and optional image. Use `tone="feature"` only for the full green feature band pattern; otherwise keep the default panel treatment.

Quan i com fer-lo servir: Use `tone="feature"` with `image` set for the full-bleed green band pattern: text and CTA on one side, a real photo on the other (`lg:grid-cols-2`). Without `image`, `tone="feature"` still renders correctly - the text column simply takes the full width.

Bàner promocional

Font: Estudis UB.edu
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid grid-cols-1 gap-8 bg-ub-footer p-8 md:p-12  ">
  <div>
    <h2 class="text-2xl font-medium leading-7 text-ub-text md:text-[45px] md:leading-[54px]">Microcredencials</h2>
      <div class="mt-4 max-w-3xl text-base leading-6 text-ub-text md:mt-8 md:text-lg md:leading-8">
        <p>Formació breu i especialitzada per millorar competències professionals.</p>
        </div>
        <a href="https://web.ub.edu/ca/web/estudis/microcredencials" class="mt-4 inline-block font-bold text-ub-text underline underline-offset-4 hover:text-ub-blue">Descobreix l’oferta ›</a>
        </div>
      </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.banner",
  "id": "microcredencials",
  "title": "Microcredencials",
  "body": [
    "Formació breu i especialitzada per millorar competències professionals."
  ],
  "link": {
    "label": "Descobreix l’oferta",
    "href": "https://web.ub.edu/ca/web/estudis/microcredencials"
  }
}

Bàner promocional amb imatge (feature)

Font: Estudis UB.edu

Aprèn llengües a la UB

Cursos d’idiomes per a tota la comunitat universitària, amb tots els nivells del Marc europeu.

Consulta l’oferta de cursos
Estudiants conversant en un espai exterior del campus
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid grid-cols-1 bg-ub-greenDark text-white lg:grid-cols-2 ">
  <div class="px-8 py-10 md:px-12 lg:py-16">
    <h2 class="text-2xl font-medium leading-8 md:text-[32px] md:leading-10">Aprèn llengües a la UB</h2>
      <div class="mt-4 max-w-lg text-base leading-6">
        <p>Cursos d’idiomes per a tota la comunitat universitària, amb tots els nivells del Marc europeu.</p>
        </div>
        <a href="http://www.ub.edu/aprenllengues/ca" class="mt-6 inline-block font-bold underline underline-offset-4 hover:no-underline">Consulta l’oferta de cursos</a>
        </div>
        <img src="https://web.ub.edu/documents/2739584/5229035/AF_AprenLlengues_1509x765.jpg/74b898ee-d169-39a6-371b-6f1cf696d0e6?t=1677678753437" alt="Estudiants conversant en un espai exterior del campus" loading="lazy" class="aspect-[16/9] w-full object-cover lg:aspect-auto lg:h-full"/>
      </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.banner",
  "id": "aprenllengues",
  "title": "Aprèn llengües a la UB",
  "body": [
    "Cursos d’idiomes per a tota la comunitat universitària, amb tots els nivells del Marc europeu."
  ],
  "link": {
    "label": "Consulta l’oferta de cursos",
    "href": "http://www.ub.edu/aprenllengues/ca"
  },
  "image": {
    "src": "https://web.ub.edu/documents/2739584/5229035/AF_AprenLlengues_1509x765.jpg/74b898ee-d169-39a6-371b-6f1cf696d0e6?t=1677678753437",
    "alt": "Estudiants conversant en un espai exterior del campus"
  }
}
Props i codi font (UbBanner)
src/components/ub/UbBanner.tsx ↗
PropTipusPer defecte
title *string
bodyReactNode
link{ label: string; href: string; }
image{ src: string; alt: string; }
toneenumpanel
classNamestring
headingLevelenumh2

UbBannerSlider

Carrusel de bàners

Quan i com fer-lo servir: Use this for the large rotating banner/carousel pattern. When a local JSON section type `ub.bannerSlider` exists, map it to `UbBannerSlider`. Preserve slide order, `tone`, image and href. This is an interactive carousel pattern; do not flatten it into unrelated navigation cards unless the source page itself renders cards.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="relative overflow-hidden ">
  <div>
    <a href="http://www.ub.edu/aprenllengues/ca" class="relative flex min-h-[220px] items-center overflow-hidden sm:min-h-[347px] bg-ub-greenDark block">
      <img src="https://web.ub.edu/documents/2739584/5229035/AF_AprenLlengues_1509x765.jpg/74b898ee-d169-39a6-371b-6f1cf696d0e6?t=1677678753437" alt="" aria-hidden="true" loading="lazy" class="absolute inset-y-0 right-0 h-full w-auto max-w-[55%] object-contain object-right"/>
      <h2 class="relative px-6 text-2xl font-medium leading-8 text-white underline decoration-transparent underline-offset-4 hover:decoration-current sm:px-[66px] sm:text-[45px] sm:leading-[54px]">Aprèn llengües a la UB</h2>
      </a>
      <a href="http://www.ub.edu/beques/" aria-hidden="true" tabindex="-1" class="relative flex min-h-[220px] items-center overflow-hidden sm:min-h-[347px] bg-ub-purple hidden">
        <img src="https://web.ub.edu/documents/2739584/5229035/AF_Beques_1509x765.jpg/70d88cba-ae82-58ca-f2aa-7b94e0682e82?t=1677678784978" alt="" aria-hidden="true" loading="lazy" class="absolute inset-y-0 right-0 h-full w-auto max-w-[55%] object-contain object-right"/>
        <h2 class="relative px-6 text-2xl font-medium leading-8 text-white underline decoration-transparent underline-offset-4 hover:decoration-current sm:px-[66px] sm:text-[45px] sm:leading-[54px]">Beques i ajuts</h2>
        </a>
      </div>
      <div role="tablist" aria-label="Diapositives" class="flex items-center justify-center gap-2 py-4">
        <button type="button" role="tab" aria-selected="true" aria-label="Aprèn llengües a la UB" class="rounded-full shadow-[0_3px_6px_1px_rgba(0,0,0,0.55)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue h-[26px] w-[26px] bg-white">
        </button>
        <button type="button" role="tab" aria-selected="false" aria-label="Beques i ajuts" class="rounded-full shadow-[0_3px_6px_1px_rgba(0,0,0,0.55)] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue h-6 w-6 bg-ub-muted">
        </button>
      </div>
    </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.bannerSlider",
  "id": "enllacos",
  "title": "Més recursos per a estudiants",
  "hideTitle": true,
  "slides": [
    {
      "title": "Aprèn llengües a la UB",
      "href": "http://www.ub.edu/aprenllengues/ca",
      "tone": "greenDark",
      "image": {
        "src": "https://web.ub.edu/documents/2739584/5229035/AF_AprenLlengues_1509x765.jpg/74b898ee-d169-39a6-371b-6f1cf696d0e6?t=1677678753437",
        "alt": "Aprèn llengües a la UB"
      }
    },
    {
      "title": "Beques i ajuts",
      "href": "http://www.ub.edu/beques/",
      "tone": "purple",
      "image": {
        "src": "https://web.ub.edu/documents/2739584/5229035/AF_Beques_1509x765.jpg/70d88cba-ae82-58ca-f2aa-7b94e0682e82?t=1677678784978",
        "alt": "Beques i ajuts"
      }
    }
  ]
}
Props i codi font (UbBannerSlider)
src/components/ub/UbBannerSlider.tsx ↗
PropTipusPer defecte
slides *UbBannerSlide[]
autoPlayMsnumber6000
classNamestring
headingLevelenumh2

UbImageBlock

Imatge destacada

Quan i com fer-lo servir: Use this for a standalone linked/featured image block or the image part of an editorial hero. When a local JSON section type `ub.imageBlock` exists, map it to `UbImageBlock`. Preserve the real image URL, alt text, optional caption, link and ratio from the source page. For pages without local JSON, pair a wide `UbImageBlock ratio="21/9"` with `UbIntroBlock tone="panel"` when the real page shows a wide image followed by a gray introductory text band. Do not replace this with a generic decorative image wrapper.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<figure class="relative aspect-[16/9] ">
  <a href="https://web.ub.edu/ca/web/actualitat/w/nou-estatut-entra-en-vigor" target="_blank" rel="noreferrer" class="block h-full w-full">
    <img src="https://web.ub.edu/documents/2710030/41751574/aprovaci%C3%B3estatutslider.jpg/a09c30c7-114f-01fb-bd17-427bba5f10f6?t=1764158670306" alt="El nou Estatut de la Universitat de Barcelona" loading="lazy" class="h-full w-full object-cover"/>
  </a>
</figure>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.imageBlock",
  "id": "destaquem-visual",
  "title": "Imatge destacada",
  "hideTitle": true,
  "image": {
    "src": "https://web.ub.edu/documents/2710030/41751574/aprovaci%C3%B3estatutslider.jpg/a09c30c7-114f-01fb-bd17-427bba5f10f6?t=1764158670306",
    "alt": "El nou Estatut de la Universitat de Barcelona"
  },
  "href": "https://web.ub.edu/ca/web/actualitat/w/nou-estatut-entra-en-vigor",
  "ratio": "16/9"
}
Props i codi font (UbImageBlock)
src/components/ub/UbImageBlock.tsx ↗
PropTipusPer defecte
image *{ src: string; alt: string; }
hrefstring
caption{ title: string; link?: { label: string; href: string; }; }
ratioenum21/9
classNamestring

UbMediaBlock

Bloc de contingut amb imatge lateral

Quan i com fer-lo servir: Use this for editorial media blocks where a text column and a 4:3 image/caption column sit side by side. Use `reverse` when the image column appears on the left in desktop. Do not use this for standalone hero images (`UbImageBlock`) or article galleries (`UbMediaGallery`).

Recerca i transferència

La Universitat de Barcelona impulsa projectes de recerca i transferència en col·laboració amb institucions, empreses i grups de recerca de tots els àmbits.

Components electrònics en un laboratori
Activitat de recerca a la Universitat de Barcelona.
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<article class="grid gap-8 lg:grid-cols-[minmax(0,1fr)_320px] lg:items-start">
  <div class="">
    <h3 class="text-balance text-[28px] font-extrabold leading-9 text-ub-text">Recerca i transferència</h3>
      <div class="mt-5 max-w-3xl text-lg leading-8 text-ub-text">
        <p>La Universitat de Barcelona impulsa projectes de recerca i transferència en col·laboració amb institucions, empreses i grups de recerca de tots els àmbits.</p>
        </div>
        <div class="mt-6 max-w-md lg:hidden">
          <figure>
            <img src="https://web.ub.edu/documents/2685349/2697083/Alumne+2.jpg/aae87202-24b9-aeee-bc2d-786bae98f3ea?t=1662708714319&amp;download=true" alt="Components electrònics en un laboratori" loading="lazy" class="aspect-[4/3] w-full object-cover"/>
            <figcaption class="mt-2 text-sm leading-5 text-ub-muted">Activitat de recerca a la Universitat de Barcelona.</figcaption>
            </figure>
          </div>
        </div>
        <div class="grid gap-6 ">
          <div class="hidden lg:block">
            <figure>
              <img src="https://web.ub.edu/documents/2685349/2697083/Alumne+2.jpg/aae87202-24b9-aeee-bc2d-786bae98f3ea?t=1662708714319&amp;download=true" alt="Components electrònics en un laboratori" loading="lazy" class="aspect-[4/3] w-full object-cover"/>
              <figcaption class="mt-2 text-sm leading-5 text-ub-muted">Activitat de recerca a la Universitat de Barcelona.</figcaption>
              </figure>
            </div>
          </div>
        </article>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.media",
  "id": "recerca-transferencia",
  "title": "Recerca i transferència",
  "image": {
    "src": "https://web.ub.edu/documents/2685349/2697083/Alumne+2.jpg/aae87202-24b9-aeee-bc2d-786bae98f3ea?t=1662708714319&download=true",
    "alt": "Components electrònics en un laboratori",
    "caption": "Activitat de recerca a la Universitat de Barcelona."
  },
  "body": [
    "La Universitat de Barcelona impulsa projectes de recerca i transferència en col·laboració amb institucions, empreses i grups de recerca de tots els àmbits."
  ]
}
Props i codi font (UbMediaBlock)
src/components/ub/UbMediaBlock.tsx ↗
PropTipusPer defecte
title *string
image{ src: string; alt: string; caption?: string; }
linksReactNode
reversebooleanfalse
headingLevelenumh3

UbMediaCards

Galeria multimèdia

Quan i com fer-lo servir: Map JSON section type `ub.cards` to this component whenever items carry `embedUrl`/`image` (a plain bordered card grid, iframe or image always visible) - NOT to `UbVideoEmbed`, which is a different, unrelated shape reserved for `ub.videoEmbed` (single featured video + click-to-consent + optional `related` grid). Pass a plain YouTube URL/ID as `embedUrl` - `toEmbeddableVideoUrl` rewrites `watch`/`youtu.be` links to the `/embed/` form iframes require, don't hand-build it. Grid is 1 column on mobile, 2 on `md`, 3 on `xl` - do not force a fixed column count for a 2-item gallery, let it wrap.

Pràctiques que obren camins

Tres estudiants de la UB que han estudiat diferents graus expliquen la seva experiència fent pràctiques d'empresa en tres empreses referents de diferents sectors.

Fem formació de qualitat, i recerca, i tenim un compromís amb la societat.

Descarrega't l'app TriaUB que t'acompanyarà en l'accés als graus de la Universitat de Barcelona. Tindràs informació i consells per triar el grau, notificacions i recordatoris de les dates més importants, consells per superar les PAU, preguntes freqüents i mapes amb les ubicacions de les facultats i informació de les jornades de portes obertes.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="grid gap-6 ">
  <div class="grid gap-5 md:grid-cols-2 xl:grid-cols-3">
    <article class="flex h-full flex-col border border-ub-line bg-white">
      <div class="aspect-video w-full overflow-hidden bg-ub-panel">
        <iframe src="https://www.youtube.com/embed/xkqjhkRCxj0" title="Pràctiques que obren camins" loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen="" class="h-full w-full">
        </iframe>
      </div>
      <div class="flex flex-1 flex-col p-5">
        <h3 class="text-pretty text-xl font-extrabold leading-7 text-ub-text">Pràctiques que obren camins</h3>
          <p class="mt-3 flex-1 text-base leading-7 text-ub-text">Tres estudiants de la UB que han estudiat diferents graus expliquen la seva experiència fent pràctiques d&#x27;empresa en tres empreses referents de diferents sectors.</p>
          </div>
        </article>
        <article class="flex h-full flex-col border border-ub-line bg-white">
          <div class="aspect-video w-full overflow-hidden bg-ub-panel">
            <iframe src="https://www.youtube.com/embed/US6A1N2eHUA" title="Fem formació de qualitat, i recerca, i tenim un compromís amb la societat." loading="lazy" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen="" class="h-full w-full">
            </iframe>
          </div>
          <div class="flex flex-1 flex-col p-5">
            <h3 class="text-pretty text-xl font-extrabold leading-7 text-ub-text">Fem formació de qualitat, i recerca, i tenim un compromís amb la societat.</h3>
              <p class="mt-3 flex-1 text-base leading-7 text-ub-text">Descarrega&#x27;t l&#x27;app TriaUB que t&#x27;acompanyarà en l&#x27;accés als graus de la Universitat de Barcelona. Tindràs informació i consells per triar el grau, notificacions i recordatoris de les dates més importants, consells per superar les PAU, preguntes freqüents i mapes amb les ubicacions de les facultats i informació de les jornades de portes obertes.</p>
              </div>
            </article>
          </div>
        </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.cards",
  "id": "galeria",
  "title": "Galeria multimèdia",
  "items": [
    {
      "title": "Pràctiques que obren camins",
      "embedUrl": "https://www.youtube.com/embed/xkqjhkRCxj0",
      "body": "Tres estudiants de la UB que han estudiat diferents graus expliquen la seva experiència fent pràctiques d'empresa en tres empreses referents de diferents sectors."
    },
    {
      "title": "Fem formació de qualitat, i recerca, i tenim un compromís amb la societat.",
      "embedUrl": "https://www.youtube.com/embed/US6A1N2eHUA",
      "body": "Descarrega't l'app TriaUB que t'acompanyarà en l'accés als graus de la Universitat de Barcelona. Tindràs informació i consells per triar el grau, notificacions i recordatoris de les dates més importants, consells per superar les PAU, preguntes freqüents i mapes amb les ubicacions de les facultats i informació de les jornades de portes obertes."
    }
  ]
}
Props i codi font (UbMediaCards)
src/components/ub/UbMediaCards.tsx ↗
PropTipusPer defecte
backgroundenumplain
columnsenum3
introstring
items *UbMediaCardItem[]
variantenummedia
headingLevelenum3
classNamestring

UbMediaGallery

Galeria multimèdia

Quan i com fer-lo servir: Use this for article/detail galleries: a two-column grid of image buttons that open a modal lightbox. In `ub.newsDetail`, the gallery is normally rendered by `UbNewsDetail` from its `gallery.items`; use `UbMediaGallery` directly only when the source page has a standalone gallery block.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="w-full ">
  <div class="grid gap-5 md:grid-cols-2 lg:grid-cols-[451px_451px]">
    <button type="button" aria-label="Amplia la imatge" class="block aspect-video w-full overflow-hidden border border-[#ebebeb] bg-white text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-ub-blue">
      <img src="https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354" alt="Imatge de la competició UB Alma Mater" loading="lazy" class="h-full w-full object-cover"/>
    </button>
    <button type="button" aria-label="Amplia la imatge" class="block aspect-video w-full overflow-hidden border border-[#ebebeb] bg-white text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-ub-blue">
      <img src="https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354" alt="Detall gràfic de la competició UB Alma Mater" loading="lazy" class="h-full w-full object-cover"/>
    </button>
  </div>
</div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.mediaGallery",
  "id": "galeria",
  "items": [
    {
      "id": "alma-mater-1",
      "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354",
      "alt": "Imatge de la competició UB Alma Mater",
      "caption": "Participants en una edició anterior del torneig."
    },
    {
      "id": "alma-mater-2",
      "src": "https://web.ub.edu/documents/2710030/46107409/alma-mater-202607_1.png/22a41daa-f436-7513-9929-c0a9f0bf5254?t=1783337606354",
      "alt": "Detall gràfic de la competició UB Alma Mater"
    }
  ]
}
Props i codi font (UbMediaGallery)
src/components/ub/UbMediaGallery.tsx ↗
PropTipusPer defecte
items *UbMediaGalleryItem[]
classNamestring

UbPodcastBlock

La Universitat, en pòdcast

Quan i com fer-lo servir: The gray background wraps the whole featured block (image + text), not just one side - do not drop it based on checking `background-color` on the image or text element alone, check the outer wrapping element. `episode.image` is optional per related episode - the component reserves the same `aspect-[16/9]` box with `bg-ub-panel` when missing.

Correcció aplicada: Mesurat contra `web.ub.edu` amb `getComputedStyle`/`getBoundingClientRect`: l'episodi destacat SÍ té un fons `#EBEBEB` darrere imatge+text junts (`background-color: var(--color-gray-light) !important` a la fila `.lfr-layout-structure-item-row` que els embolcalla, no en un element intern - fàcil de perdre si només es mira el `background-color` de la imatge o del text per separat). El títol és un enllaç sempre subratllat amb una línia blava d'1px (`rgb(0, 114, 206)`), no un `hover:underline`, a 28px/33px pes mitjà; el paràgraf és 18px/32px, no 16px/24px. Les 3 targetes d'episodis relacionats (vora `1px solid #EBEBEB`) usen `padding: 24px` (Bootstrap `.p-4`), no 20px.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="grid gap-4 bg-[#ebebeb] sm:grid-cols-[2fr_1fr]">
    <div class="aspect-[16/9] w-full overflow-hidden sm:aspect-auto">
      <img src="https://web.ub.edu/documents/2710030/0/IMG_5765.png/2ccd001d-6550-cc7d-3a67-bd37f8fb0d65?version=1.0&amp;t=1782984177712" alt="Pòdcast dels Vespres d&#x27;estiu" loading="lazy" class="h-full w-full object-cover"/>
    </div>
    <div class="p-6 sm:py-10 sm:pr-10">
      <h3 class="text-[28px] font-medium leading-[33px] text-ub-text">
        <a href="https://go.ivoox.com/rf/176495814" class="underline decoration-ub-blue decoration-1 underline-offset-4 hover:decoration-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Compte enrere per als Vespres d&#x27;estiu d&#x27;enguany</a>
        </h3>
        <p class="mt-4 line-clamp-3 text-lg leading-8 text-ub-text">A la Universitat de Barcelona, l&#x27;estiu arriba quan tenim el cartell dels Vespres a punt. El compte enrere ja ha començat i els concerts seran els dies 7, 9, 14 i 16 de juliol, a les 20:00, al jardí Ferran Soldevila de l&#x27;Edifici Històric de la UB.</p>
        </div>
      </div>
      <ul class="mt-6 grid gap-6 sm:grid-cols-3">
        <li class="border border-ub-line">
          <a href="https://go.ivoox.com/rf/173901253" class="group flex h-full flex-col focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
            <span class="aspect-[16/9] w-full overflow-hidden bg-ub-panel">
              <img src="https://web.ub.edu/documents/2710030/0/415x220+%2840%29.png/510f028b-70b6-24ed-6c00-a2651b14f900?t=1781181917472" alt="L&#x27;esperanto, la llengua dels qui tenen esperança" loading="lazy" class="h-full w-full object-cover"/>
            </span>
            <span class="flex flex-1 flex-col gap-2 p-6">
              <span class="text-[22px] font-bold leading-[26.4px] text-ub-text underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">L&#x27;esperanto, la llengua dels qui tenen esperança</span>
                <span class="line-clamp-4 text-base leading-6 text-ub-text">L&#x27;esperanto és una llengua internacional pensada per ser un vehicle de comunicació neutral entre tots els pobles.</span>
                </span>
              </a>
            </li>
            <li class="border border-ub-line">
              <a href="https://go.ivoox.com/rf/175141805" class="group flex h-full flex-col focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                <span class="aspect-[16/9] w-full overflow-hidden bg-ub-panel">
                  <img src="https://web.ub.edu/documents/2710030/0/415x220+%2837%29.png/d21f8d5e-a9f8-d30c-2696-f0f25d48dc4c?t=1781181323827" alt="Un pòdcast per llepar-se els dits!" loading="lazy" class="h-full w-full object-cover"/>
                </span>
                <span class="flex flex-1 flex-col gap-2 p-6">
                  <span class="text-[22px] font-bold leading-[26.4px] text-ub-text underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">Un pòdcast per llepar-se els dits!</span>
                    <span class="line-clamp-4 text-base leading-6 text-ub-text">El canal de pòdcast de la Universitat incorpora un programa nou: Menja&#x27;t el Campus de l&#x27;Alimentació.</span>
                    </span>
                  </a>
                </li>
                <li class="border border-ub-line">
                  <a href="https://go.ivoox.com/rf/173035745" class="group flex h-full flex-col focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                    <span class="aspect-[16/9] w-full overflow-hidden bg-ub-panel">
                      <img src="https://web.ub.edu/documents/2710030/0/415x220+%2834%29.png/5979d2eb-938f-b98e-c456-e33a398ae7f4?t=1778234269501" alt="Què ens interroga, què ens interpel·la?" loading="lazy" class="h-full w-full object-cover"/>
                    </span>
                    <span class="flex flex-1 flex-col gap-2 p-6">
                      <span class="text-[22px] font-bold leading-[26.4px] text-ub-text underline decoration-transparent group-hover:text-ub-blue group-hover:decoration-current">Què ens interroga, què ens interpel·la?</span>
                        <span class="line-clamp-4 text-base leading-6 text-ub-text">Estudiants del grau en Filosofia reflexionen sobre les qüestions que avui els interroguen i els interpel·len.</span>
                        </span>
                      </a>
                    </li>
                  </ul>
                </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.podcastBlock",
  "id": "podcast-actualitat",
  "title": "La Universitat, en pòdcast",
  "featured": {
    "title": "Compte enrere per als Vespres d'estiu d'enguany",
    "description": "A la Universitat de Barcelona, l'estiu arriba quan tenim el cartell dels Vespres a punt. El compte enrere ja ha començat i els concerts seran els dies 7, 9, 14 i 16 de juliol, a les 20:00, al jardí Ferran Soldevila de l'Edifici Històric de la UB.",
    "href": "https://go.ivoox.com/rf/176495814",
    "image": {
      "src": "https://web.ub.edu/documents/2710030/0/IMG_5765.png/2ccd001d-6550-cc7d-3a67-bd37f8fb0d65?version=1.0&t=1782984177712",
      "alt": "Pòdcast dels Vespres d'estiu"
    }
  },
  "episodes": [
    {
      "title": "L'esperanto, la llengua dels qui tenen esperança",
      "href": "https://go.ivoox.com/rf/173901253",
      "description": "L'esperanto és una llengua internacional pensada per ser un vehicle de comunicació neutral entre tots els pobles.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/0/415x220+%2840%29.png/510f028b-70b6-24ed-6c00-a2651b14f900?t=1781181917472",
        "alt": "L'esperanto, la llengua dels qui tenen esperança"
      }
    },
    {
      "title": "Un pòdcast per llepar-se els dits!",
      "href": "https://go.ivoox.com/rf/175141805",
      "description": "El canal de pòdcast de la Universitat incorpora un programa nou: Menja't el Campus de l'Alimentació.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/0/415x220+%2837%29.png/d21f8d5e-a9f8-d30c-2696-f0f25d48dc4c?t=1781181323827",
        "alt": "Un pòdcast per llepar-se els dits!"
      }
    },
    {
      "title": "Què ens interroga, què ens interpel·la?",
      "href": "https://go.ivoox.com/rf/173035745",
      "description": "Estudiants del grau en Filosofia reflexionen sobre les qüestions que avui els interroguen i els interpel·len.",
      "image": {
        "src": "https://web.ub.edu/documents/2710030/0/415x220+%2834%29.png/5979d2eb-938f-b98e-c456-e33a398ae7f4?t=1778234269501",
        "alt": "Què ens interroga, què ens interpel·la?"
      }
    }
  ]
}
Props i codi font (UbPodcastBlock)
src/components/ub/UbPodcastBlock.tsx ↗
PropTipusPer defecte
featured *UbPodcastEpisode
episodes *UbPodcastEpisode[]
levelenum3
classNamestring

UbVideoEmbed

L'actualitat en vídeo

2 variants

Quan i com fer-lo servir: Pass a plain YouTube URL/ID as `embedUrl` - `toVideoThumbnailUrl`/`toEmbeddableVideoUrl` derive the poster and embed URL automatically, do not hand-build an `img.youtube.com`/`youtube.com/embed` URL yourself. Consent is click-through (no cookie banner needed): clicking the poster shows a consent message, accepting swaps in the real `<iframe>`. This only matches JSON section type `ub.videoEmbed` (single highlighted video + optional `related` grid). A generic `ub.cards` section whose items happen to carry an `embedUrl` is a DIFFERENT shape (a plain bordered card grid with an always-on `<iframe>`, no click-to-consent step, no single-featured-video layout) - use `UbMediaCards` for that, not this component. Pass `transcriptHref` when a text transcript exists for the featured video - the embedded YouTube player has its own captions (CC) toggle, but a transcript link is the accessible fallback.

Quan i com fer-lo servir: Pass `hideTitle` for a plain `aspect-video` player with no title/description box and no related grid - use this when the surrounding page (not this component) already renders the heading, e.g. a single embedded video inside a `UbContentSection` body.

L'actualitat en vídeo

Font: Actualitat UB.edu

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Quarta edició de la Nit de la Música a la Universitat de Barcelona

La UB i l'Escola Superior de Música de Catalunya (ESMUC) han tornat a unir forces per organitzar la quarta edició de la Nit de la Música.

Transcripció del vídeo

Consells de seguretat digital: Ús segur de dispositius ocasionals

Aplica mesures bàsiques: navega en mode incògnit, no sincronitzis i assegura't de tancar totes les sessions.

Arqueologia UB 2023

Nova edició de "La cuina de la ciència"

Correcció aplicada: La columna de text del vídeo destacat SÍ té fons `#EBEBEB` a l'original (a `#text-column`, no al `.text-container` intern que és transparent), estirat a l'alçada del vídeo amb `padding-top: 38px` abans del títol. Les targetes relacionades porten vora `1px solid #EBEBEB` i el títol és 20px/24px, no 22px/26.4px.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,2fr)]">
    <div class="bg-[#ebebeb] px-4 pb-6 pt-[38px]">
      <h3 class="text-balance text-[22px] font-bold leading-[26.4px] text-ub-text">Quarta edició de la Nit de la Música a la Universitat de Barcelona</h3>
        <p class="mt-3 line-clamp-4 text-lg font-medium leading-[27px] text-ub-text">La UB i l&#x27;Escola Superior de Música de Catalunya (ESMUC) han tornat a unir forces per organitzar la quarta edició de la Nit de la Música.</p>
          <p class="mt-3">
            <a href="https://web.ub.edu/ca/web/actualitat/w/nit-de-la-musica-2026-transcripcio" class="inline-block text-sm font-bold text-ub-blue underline underline-offset-2 hover:text-ub-blueDark focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Transcripció del vídeo</a>
            </p>
          </div>
          <div class="relative aspect-video w-full overflow-hidden bg-ub-black">
            <button type="button" aria-label="Quarta edició de la Nit de la Música a la Universitat de Barcelona" class="group relative flex h-full w-full items-center justify-center bg-ub-black">
              <img src="https://img.youtube.com/vi/_Js_AS3R0DM/hqdefault.jpg" alt="" loading="lazy" class="absolute inset-0 h-full w-full object-cover"/>
              <div class="absolute inset-0 bg-black/10 transition-colors group-hover:bg-black/25" aria-hidden="true">
              </div>
              <span class="relative flex h-16 w-16 items-center justify-center rounded-full bg-[#FF0000] text-white shadow-lg" aria-hidden="true">
                <svg viewBox="0 0 24 24" class="h-7 w-7" fill="currentColor">
                  <path d="M8 5v14l11-7z">
                  </path>
                </svg>
              </span>
            </button>
          </div>
        </div>
        <div class="mt-6 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
          <figure class="border border-ub-line">
            <div class="relative aspect-video w-full overflow-hidden bg-ub-black">
              <button type="button" aria-label="Consells de seguretat digital: Ús segur de dispositius ocasionals" class="group relative flex h-full w-full items-center justify-center bg-ub-black">
                <img src="https://img.youtube.com/vi/DtP3f0AFNJk/hqdefault.jpg" alt="" loading="lazy" class="absolute inset-0 h-full w-full object-cover"/>
                <div class="absolute inset-0 bg-black/10 transition-colors group-hover:bg-black/25" aria-hidden="true">
                </div>
                <span class="relative flex h-10 w-10 items-center justify-center rounded-full bg-[#FF0000] text-white shadow-lg" aria-hidden="true">
                  <svg viewBox="0 0 24 24" class="h-4 w-4" fill="currentColor">
                    <path d="M8 5v14l11-7z">
                    </path>
                  </svg>
                </span>
              </button>
            </div>
            <figcaption class="p-6">
              <h4 class="text-balance text-xl font-bold leading-6 text-ub-text">Consells de seguretat digital: Ús segur de dispositius ocasionals</h4>
                <p class="mt-1 line-clamp-2 text-base leading-6 text-ub-text">Aplica mesures bàsiques: navega en mode incògnit, no sincronitzis i assegura&#x27;t de tancar totes les sessions.</p>
                </figcaption>
              </figure>
              <figure class="border border-ub-line">
                <div class="relative aspect-video w-full overflow-hidden bg-ub-black">
                  <button type="button" aria-label="Arqueologia UB 2023" class="group relative flex h-full w-full items-center justify-center bg-ub-black">
                    <img src="https://img.youtube.com/vi/YKcsI4OYd9M/hqdefault.jpg" alt="" loading="lazy" class="absolute inset-0 h-full w-full object-cover"/>
                    <div class="absolute inset-0 bg-black/10 transition-colors group-hover:bg-black/25" aria-hidden="true">
                    </div>
                    <span class="relative flex h-10 w-10 items-center justify-center rounded-full bg-[#FF0000] text-white shadow-lg" aria-hidden="true">
                      <svg viewBox="0 0 24 24" class="h-4 w-4" fill="currentColor">
                        <path d="M8 5v14l11-7z">
                        </path>
                      </svg>
                    </span>
                  </button>
                </div>
                <figcaption class="p-6">
                  <h4 class="text-balance text-xl font-bold leading-6 text-ub-text">Arqueologia UB 2023</h4>
                  </figcaption>
                </figure>
                <figure class="border border-ub-line">
                  <div class="relative aspect-video w-full overflow-hidden bg-ub-black">
                    <button type="button" aria-label="Nova edició de &quot;La cuina de la ciència&quot;" class="group relative flex h-full w-full items-center justify-center bg-ub-black">
                      <img src="https://img.youtube.com/vi/NbGXwgZ04U8/hqdefault.jpg" alt="" loading="lazy" class="absolute inset-0 h-full w-full object-cover"/>
                      <div class="absolute inset-0 bg-black/10 transition-colors group-hover:bg-black/25" aria-hidden="true">
                      </div>
                      <span class="relative flex h-10 w-10 items-center justify-center rounded-full bg-[#FF0000] text-white shadow-lg" aria-hidden="true">
                        <svg viewBox="0 0 24 24" class="h-4 w-4" fill="currentColor">
                          <path d="M8 5v14l11-7z">
                          </path>
                        </svg>
                      </span>
                    </button>
                  </div>
                  <figcaption class="p-6">
                    <h4 class="text-balance text-xl font-bold leading-6 text-ub-text">Nova edició de &quot;La cuina de la ciència&quot;</h4>
                    </figcaption>
                  </figure>
                </div>
              </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.videoEmbed",
  "id": "video",
  "heading": "L'actualitat en vídeo",
  "title": "Quarta edició de la Nit de la Música a la Universitat de Barcelona",
  "description": "La UB i l'Escola Superior de Música de Catalunya (ESMUC) han tornat a unir forces per organitzar la quarta edició de la Nit de la Música.",
  "embedUrl": "https://www.youtube.com/embed/_Js_AS3R0DM",
  "transcriptHref": "https://web.ub.edu/ca/web/actualitat/w/nit-de-la-musica-2026-transcripcio",
  "related": [
    {
      "title": "Consells de seguretat digital: Ús segur de dispositius ocasionals",
      "description": "Aplica mesures bàsiques: navega en mode incògnit, no sincronitzis i assegura't de tancar totes les sessions.",
      "embedUrl": "https://www.youtube.com/embed/DtP3f0AFNJk"
    },
    {
      "title": "Arqueologia UB 2023",
      "embedUrl": "https://www.youtube.com/embed/YKcsI4OYd9M"
    },
    {
      "title": "Nova edició de \"La cuina de la ciència\"",
      "embedUrl": "https://www.youtube.com/embed/NbGXwgZ04U8"
    }
  ]
}

Vídeo incrustat sense caixa de títol

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="">
  <div class="relative aspect-video w-full overflow-hidden bg-ub-black">
    <button type="button" aria-label="Consells de seguretat digital" class="group relative flex h-full w-full items-center justify-center bg-ub-black">
      <img src="https://img.youtube.com/vi/DtP3f0AFNJk/hqdefault.jpg" alt="" loading="lazy" class="absolute inset-0 h-full w-full object-cover"/>
      <div class="absolute inset-0 bg-black/10 transition-colors group-hover:bg-black/25" aria-hidden="true">
      </div>
      <span class="relative flex h-16 w-16 items-center justify-center rounded-full bg-[#FF0000] text-white shadow-lg" aria-hidden="true">
        <svg viewBox="0 0 24 24" class="h-7 w-7" fill="currentColor">
          <path d="M8 5v14l11-7z">
          </path>
        </svg>
      </span>
    </button>
  </div>
</div>
Props i codi font (UbVideoEmbed)
src/components/ub/UbVideoEmbed.tsx ↗
PropTipusPer defecte
title *string
descriptionReactNode
embedUrl *string
posterSrcstring
posterAltstring
consentMessagestringPer veure el vídeo has d'acceptar les galetes de màrqueting.
acceptLabelstringAccepta
transcriptHrefstring
transcriptLabelstringTranscripció del vídeo
relatedUbRelatedVideoItem[]
hideTitlebooleanfalse
classNamestring

Subseu i dades

Peces pròpies de subseus: graelles d'icones, franges de logotips, directoris de persones, formularis i caixes de contacte.

UbFormModule

Formulari de contacte

Quan i com fer-lo servir: Use this for generic contact/request forms with labeled fields, required mark, consent checkbox and submit button. When a local JSON section type `ub.formModule` exists, map it to `UbFormModule`. Do not use it for Estudis lead-capture forms; those use `UbStudyInfoForm` with the orange study-detail treatment.

Vista prèvia estàtica (HTML sense JS): els botons d'aquí no responen. El component real sí que és interactiu.

Contacta amb la secretaria

Envia la teva consulta i et respondrem al més aviat possible.

Tots els camps són obligatoris

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<form class="bg-ub-panel px-6 pb-10 pt-6 sm:px-7 sm:pb-12 " method="get">
  <h3 class="text-balance border-b-2 border-ub-blue pb-1 text-xl font-medium leading-7 text-ub-blue">Contacta amb la secretaria</h3>
    <p class="mt-3 text-base leading-6 text-ub-text">Envia la teva consulta i et respondrem al més aviat possible.</p>
      <p class="mt-4 text-sm text-ub-muted">Tots els camps són obligatoris</p>
        <div class="mt-6 grid gap-5 sm:grid-cols-2">
          <label class="block text-base font-medium text-ub-text">Nom i cognoms<span aria-hidden="true" class="text-ub-orange"> *</span>
            <input type="text" required="" aria-required="true" class="mt-1 w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm font-normal text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="nom"/>
          </label>
          <label class="block text-base font-medium text-ub-text">Adreça electrònica<span aria-hidden="true" class="text-ub-orange"> *</span>
            <input type="email" required="" aria-required="true" class="mt-1 w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm font-normal text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue" name="email"/>
          </label>
          <label class="block text-base font-medium text-ub-text sm:col-span-2">Perfil<span aria-hidden="true" class="text-ub-orange"> *</span>
            <select name="perfil" required="" aria-required="true" class="mt-1 w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm font-normal text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
              <option value="" disabled="" selected="">Perfil</option>
                <option value="Estudiant">Estudiant</option>
                  <option value="PDI">PDI</option>
                    <option value="PTGAS">PTGAS</option>
                    </select>
                  </label>
                  <label class="block text-base font-medium text-ub-text sm:col-span-2">Missatge<span aria-hidden="true" class="text-ub-orange"> *</span>
                    <textarea name="missatge" required="" aria-required="true" rows="5" class="mt-1 w-full rounded-md border border-ub-line bg-white px-3 py-2 text-sm font-normal text-ub-text focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">
                    </textarea>
                  </label>
                </div>
                <label class="mt-4 flex items-start gap-3 text-sm text-ub-text">
                  <input type="checkbox" required="" class="mt-1 h-4 w-4 shrink-0 accent-ub-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue"/>He llegit el dret d&#x27;informació i consento el tractament de les meves dades personals.</label>
                  <button type="submit" class="mt-6 w-full rounded-md bg-ub-blue px-8 py-3 text-sm font-bold uppercase tracking-wide text-white hover:brightness-95 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue sm:w-auto">Envia</button>
                  </form>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.formModule",
  "id": "contacte",
  "title": "Contacta amb la secretaria",
  "intro": "Envia la teva consulta i et respondrem al més aviat possible.",
  "fields": [
    {
      "name": "nom",
      "label": "Nom i cognoms",
      "required": true
    },
    {
      "name": "email",
      "label": "Adreça electrònica",
      "type": "email",
      "required": true
    },
    {
      "name": "perfil",
      "label": "Perfil",
      "type": "select",
      "required": true,
      "options": [
        "Estudiant",
        "PDI",
        "PTGAS"
      ]
    },
    {
      "name": "missatge",
      "label": "Missatge",
      "type": "textarea",
      "required": true
    }
  ]
}
Props i codi font (UbFormModule)
src/components/ub/UbFormModule.tsx ↗
PropTipusPer defecte
titlestringContacta amb nosaltres
introstring
requiredNotestringTots els camps són obligatoris
fieldsUbFormModuleField[][ { name: 'nom', label: 'Nom i cognoms', required: true }, { name: 'email', label: 'Adreça electrònica', type: 'email', required: true }, { name: 'assumpte', label: 'Assumpte', required: true }, { name: 'missatge', label: 'Missatge', type: 'textarea', required: true }, ]
consentTextReactNode
consentLabelstringHe llegit el dret d'informació i consento el tractament de les meves dades personals.
submitLabelstringEnvia
actionstring
headingLevelenumh3
classNamestring

UbIconGrid

Graella d'icones

Quan i com fer-lo servir: Use this for feature grids made of large icons, headings and short descriptions. When a local JSON section type `ub.iconGrid` exists, map it to `UbIconGrid`. Preserve the source column count and tone; Estudis pages normally use `tone="orange"` while generic UB pages use the blue default.

  • Universitat líder

    La UB és una universitat pública capdavantera.

  • Projecció internacional

    Estudis connectats amb una xarxa global.

  • Campus i serveis

    Espais i recursos per a la vida universitària.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="grid grid-cols-1 gap-x-10 gap-y-12 sm:grid-cols-2 lg:grid-cols-3 ">
  <li class="flex flex-col items-center text-center">
    <img src="https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089" alt="" aria-hidden="true" loading="lazy" class="h-[120px] w-[120px] object-contain"/>
    <h3 class="mt-3 text-balance text-2xl font-extrabold leading-7 sm:text-[30px] sm:leading-9 text-ub-orange">Universitat líder</h3>
      <p class="mt-2 max-w-[575px] text-sm text-ub-muted sm:text-lg sm:leading-7">La UB és una universitat pública capdavantera.</p>
      </li>
      <li class="flex flex-col items-center text-center">
        <img src="https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530" alt="" aria-hidden="true" loading="lazy" class="h-[120px] w-[120px] object-contain"/>
        <h3 class="mt-3 text-balance text-2xl font-extrabold leading-7 sm:text-[30px] sm:leading-9 text-ub-orange">Projecció internacional</h3>
          <p class="mt-2 max-w-[575px] text-sm text-ub-muted sm:text-lg sm:leading-7">Estudis connectats amb una xarxa global.</p>
          </li>
          <li class="flex flex-col items-center text-center">
            <img src="https://web.ub.edu/documents/2685349/2686580/icona+UBtv.svg/50190092-065f-cb7c-a2d9-49e3805588ae?t=1733217745138" alt="" aria-hidden="true" loading="lazy" class="h-[120px] w-[120px] object-contain"/>
            <h3 class="mt-3 text-balance text-2xl font-extrabold leading-7 sm:text-[30px] sm:leading-9 text-ub-orange">Campus i serveis</h3>
              <p class="mt-2 max-w-[575px] text-sm text-ub-muted sm:text-lg sm:leading-7">Espais i recursos per a la vida universitària.</p>
              </li>
            </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.iconGrid",
  "id": "per-que-ub",
  "title": "Per què la UB",
  "columns": 3,
  "tone": "orange",
  "items": [
    {
      "icon": {
        "src": "https://web.ub.edu/documents/2685349/2686580/usuari.svg/e2128230-b4b2-0c9d-517b-3e4a99daa646?t=1662534668089"
      },
      "title": "Universitat líder",
      "description": "La UB és una universitat pública capdavantera."
    },
    {
      "icon": {
        "src": "https://web.ub.edu/documents/2685349/2686580/enllac-extern.svg/27e74544-80dc-a0cd-0b2d-9687cdb9415c?t=1662534667530"
      },
      "title": "Projecció internacional",
      "description": "Estudis connectats amb una xarxa global."
    },
    {
      "icon": {
        "src": "https://web.ub.edu/documents/2685349/2686580/icona+UBtv.svg/50190092-065f-cb7c-a2d9-49e3805588ae?t=1733217745138"
      },
      "title": "Campus i serveis",
      "description": "Espais i recursos per a la vida universitària."
    }
  ]
}
Props i codi font (UbIconGrid)
src/components/ub/UbIconGrid.tsx ↗
PropTipusPer defecte
items *UbIconGridItem[]
columnsenum3
toneenumblue
headingLevelenumh3
classNamestring

UbLogoStrip

Franja de logotips d'entitats

Quan i com fer-lo servir: Use this for rows/strips of partner, patron or collaborator logos. When a local JSON section type `ub.logoStrip` exists, map it to `UbLogoStrip`. Preserve `size`, item labels, hrefs and all logos from the source page; do not collapse collaborators into plain text links.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="flex flex-wrap items-start justify-center gap-x-16 gap-y-10 text-center ">
  <li class="flex flex-col items-center gap-3">
    <img src="https://web.ub.edu/documents/20860326/21581235/danine.jpg/b1b57a2a-5c2f-93af-d8a0-302cf232bc33?t=1739364562102&amp;download=true" alt="Danone" loading="lazy" class="h-20 w-auto object-contain"/>
    <a href="https://www.danone.com/" class="text-sm font-bold text-ub-text underline underline-offset-4 hover:text-ub-blue">danone.com</a>
    </li>
    <li class="flex flex-col items-center gap-3">
      <img src="https://web.ub.edu/documents/20499310/21233613/insa_ub_2.jpg/5b32d406-fb4a-518b-2ba6-742aa45dff5b?t=1713522622321" alt="INSA" loading="lazy" class="h-20 w-auto object-contain"/>
      <a href="https://insa.ub.edu/" class="text-sm font-bold text-ub-text underline underline-offset-4 hover:text-ub-blue">INSA</a>
      </li>
    </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.logoStrip",
  "id": "entitat-patrona",
  "title": "Entitat patrona",
  "size": "lg",
  "items": [
    {
      "src": "https://web.ub.edu/documents/20860326/21581235/danine.jpg/b1b57a2a-5c2f-93af-d8a0-302cf232bc33?t=1739364562102&download=true",
      "alt": "Danone",
      "label": "danone.com",
      "href": "https://www.danone.com/"
    },
    {
      "src": "https://web.ub.edu/documents/20499310/21233613/insa_ub_2.jpg/5b32d406-fb4a-518b-2ba6-742aa45dff5b?t=1713522622321",
      "alt": "INSA",
      "label": "INSA",
      "href": "https://insa.ub.edu/"
    }
  ]
}
Props i codi font (UbLogoStrip)
src/components/ub/UbLogoStrip.tsx ↗
PropTipusPer defecte
items *UbLogoStripItem[]
sizeenumsm
classNamestring

UbNewsContactBox

Caixa de contacte de notícia

Quan i com fer-lo servir: Use this for the contact block at the end of news or press-note detail pages: heading, gray panel, organization name and optional phone/email/address rows. In `ub.newsDetail`, prefer the parent detail component when the contact is part of the article data; use this directly only for standalone contact boxes.

Contacte

Oficina de Premsa de la UB

Telèfon
934 02 11 00
Correu electrònic
premsa@ub.edu
Adreça
Gran Via de les Corts Catalanes, 585
Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<section class="mt-12 border-t border-ub-line pt-12 ">
  <h2 class="text-pretty font-roboto text-[32px] font-bold leading-[38px] text-black md:text-[36px] md:leading-[43px]">Contacte</h2>
    <div class="mt-6 bg-[#ebebeb] px-6 py-6">
      <p class="font-roboto text-[18px] font-bold leading-[27px] text-black">Oficina de Premsa de la UB</p>
        <dl class="mt-4 flex flex-col gap-3">
          <div>
            <dt class="font-roboto text-[16px] font-bold leading-[24px] text-black">Telèfon</dt>
              <dd>
                <a href="tel:934021100" class="text-ub-blue underline underline-offset-4">934 02 11 00</a>
                </dd>
              </div>
              <div>
                <dt class="font-roboto text-[16px] font-bold leading-[24px] text-black">Correu electrònic</dt>
                  <dd>
                    <a href="mailto:premsa@ub.edu" class="text-ub-blue underline underline-offset-4">premsa@ub.edu</a>
                    </dd>
                  </div>
                  <div>
                    <dt class="font-roboto text-[16px] font-bold leading-[24px] text-black">Adreça</dt>
                      <dd class="text-ub-blue">Gran Via de les Corts Catalanes, 585</dd>
                      </div>
                    </dl>
                  </div>
                </section>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.newsContactBox",
  "id": "contacte-premsa",
  "title": "Contacte",
  "org": "Oficina de Premsa de la UB",
  "phone": "934 02 11 00",
  "email": "premsa@ub.edu",
  "address": "Gran Via de les Corts Catalanes, 585"
}
Props i codi font (UbNewsContactBox)
src/components/ub/UbNewsContactBox.tsx ↗
PropTipusPer defecte
titlestringContacte
org *string
phonestring
emailstring
addressstring
headingLevelenum2
classNamestring

UbPeopleList

Directori de persones

Quan i com fer-lo servir: Use this for staff/person directories with name, role, optional round photo, email, phone and profile link. When a local JSON section type `ub.peopleList` exists, map it to `UbPeopleList`. Use `columns={2}` for faculty/department directory grids; keep `columns={1}` for short stacked contact lists.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<ul class="sm:grid sm:grid-cols-2 sm:gap-x-10 ">
  <li class="flex gap-4 border-b border-ub-line py-5 first:pt-0 last:border-b-0">
    <span aria-hidden="true" class="flex h-16 w-16 shrink-0 items-center justify-center rounded-full bg-ub-panel text-xl font-bold text-ub-muted">D</span>
      <div class="min-w-0">
        <p class="text-lg font-bold leading-6 text-ub-text">
          <a href="https://web.ub.edu/ca/directori" class="text-ub-blue underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">Dra. Maria Garcia</a>
          </p>
          <p class="mt-0.5 text-sm text-ub-muted">Directora</p>
            <ul class="mt-2 flex flex-wrap gap-x-4 gap-y-1 text-sm">
              <li>
                <a href="mailto:maria.garcia@ub.edu" class="text-ub-blue underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">maria.garcia@ub.edu</a>
                </li>
                <li>
                  <a href="tel:934021100" class="text-ub-blue underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">934 02 11 00</a>
                  </li>
                </ul>
              </div>
            </li>
            <li class="flex gap-4 border-b border-ub-line py-5 first:pt-0 last:border-b-0">
              <span aria-hidden="true" class="flex h-16 w-16 shrink-0 items-center justify-center rounded-full bg-ub-panel text-xl font-bold text-ub-muted">D</span>
                <div class="min-w-0">
                  <p class="text-lg font-bold leading-6 text-ub-text">Dr. Jordi Serra</p>
                    <p class="mt-0.5 text-sm text-ub-muted">Secretari acadèmic</p>
                      <ul class="mt-2 flex flex-wrap gap-x-4 gap-y-1 text-sm">
                        <li>
                          <a href="mailto:jordi.serra@ub.edu" class="text-ub-blue underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ub-blue">jordi.serra@ub.edu</a>
                          </li>
                        </ul>
                      </div>
                    </li>
                  </ul>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.peopleList",
  "id": "equip",
  "title": "Equip",
  "columns": 2,
  "items": [
    {
      "name": "Dra. Maria Garcia",
      "role": "Directora",
      "email": "maria.garcia@ub.edu",
      "phone": "934 02 11 00",
      "href": "https://web.ub.edu/ca/directori"
    },
    {
      "name": "Dr. Jordi Serra",
      "role": "Secretari acadèmic",
      "email": "jordi.serra@ub.edu"
    }
  ]
}
Props i codi font (UbPeopleList)
src/components/ub/UbPeopleList.tsx ↗
PropTipusPer defecte
items *UbPeopleListItem[]
columnsenum1
emptyMessagestringNo hi ha persones per mostrar.
classNamestring

UbSubsiteFooterContact

Contacte de subseu

Quan i com fer-lo servir: Use this for subsite-specific contact bands with email/phone/location/social links. When a local JSON section type `ub.subsiteFooterContact` exists, map it to `UbSubsiteFooterContact`. This is separate from the global `UbFooter`, which must still be rendered after it.

Codi HTML + Tailwind

Necessita Tailwind carregat per veure's bé — la config a /tokens, provada a Tailwind Play ↗.

<div class="text-center ">
  <h2 class="text-balance text-2xl font-extrabold leading-8 text-ub-text">Contacte</h2>
    <ul class="mx-auto mt-8 grid max-w-4xl gap-8 sm:grid-cols-3">
      <li class="flex flex-col items-center gap-2">
        <span aria-hidden="true" class="text-ub-blue">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="h-9 w-9">
            <rect x="3" y="5" width="18" height="14" rx="1">
            </rect>
            <path d="m4 6.5 8 6 8-6">
            </path>
          </svg>
        </span>
        <a href="mailto:catedra.danone@ub.edu" class="font-bold leading-6 text-ub-blue underline underline-offset-2 hover:text-ub-blueDark">catedra.danone@ub.edu</a>
        </li>
        <li class="flex flex-col items-center gap-2">
          <span aria-hidden="true" class="text-ub-blue">
            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" class="h-9 w-9">
              <path d="M6.5 3h3l1.5 4.5-2.3 1.8a11.5 11.5 0 0 0 5.5 5.5l1.8-2.3L20 14v3a1.5 1.5 0 0 1-1.6 1.5A15.5 15.5 0 0 1 5 5.6 1.5 1.5 0 0 1 6.5 3Z">
              </path>
            </svg>
          </span>
          <a href="tel:939393939" class="font-bold leading-6 text-ub-blue underline underline-offset-2 hover:text-ub-blueDark">939 393 939</a>
          </li>
        </ul>
      </div>
Exemple JSON (public/data/pages/*.json)
{
  "type": "ub.subsiteFooterContact",
  "id": "contacte",
  "title": "Contacte",
  "items": [
    {
      "icon": "email",
      "heading": {
        "text": "catedra.danone@ub.edu",
        "href": "mailto:catedra.danone@ub.edu"
      }
    },
    {
      "icon": "phone",
      "heading": {
        "text": "939 393 939",
        "href": "tel:939393939"
      }
    }
  ]
}
Props i codi font (UbSubsiteFooterContact)
src/components/ub/UbSubsiteFooterContact.tsx ↗
PropTipusPer defecte
titlestringContacta amb nosaltres
items *UbSubsiteFooterContactItem[]
socialLinksUbSubsiteFooterContactSocialLink[]
asElementTypeh2
classNamestring