/* Espazo · ollie-espazo theme · design system v4 (tokens in theme.json; here only what theme.json does not cover).
   Reference: prototipo/tokens.css of the v1.5 package. No external dependencies. */

/* Metric-matched fallbacks (full audit 29/09, B2-02): while the web fonts load, text is drawn with a local font
   resized to the same width and line metrics, so nothing moves when they arrive (the cookie notice anchored to the
   bottom, the hero text). Values measured with fontTools on the theme's files against Arial/Liberation Sans, with
   Portuguese sample text (display: uppercase headings). Measured on dev, fonts delayed 1.5 s, 390 px:
   CLS /contactos/ 0.076 → 0.001, /self-storage/ 0.063 → 0.001. Used only from theme.json's font stacks. */
@font-face {
	font-family: "Open Sans Fallback";
	src: local("Arial"), local("ArialMT"), local("Liberation Sans"), local("Roboto");
	size-adjust: 103.7%;
	ascent-override: 103.07%;
	descent-override: 28.25%;
	line-gap-override: 0%;
}
@font-face {
	font-family: "Barlow Condensed Fallback";
	font-weight: 500 700;
	src: local("Arial Bold"), local("Arial-BoldMT"), local("Liberation Sans Bold"), local("Roboto Bold");
	size-adjust: 67.54%;
	ascent-override: 148.06%;
	descent-override: 29.61%;
	line-gap-override: 0%;
}

:root {
	/* Brand v12: logo ink (= neutral-700). Only for the logo; never on text, buttons or backgrounds (headings: navy). */
	--brand-ink: var(--wp--custom--brand-ink, #313B4F);
	--espazo-focus: 2px solid var(--wp--custom--focus--color, #56637A); /* neutral-500: ≥ 3:1 on white and on the light backgrounds (neutral-50/100, green-50, mint); was #7D91B5, 2.6–2.9:1 there (audit 17/10, FE-05) */
	--espazo-frame: var(--wp--custom--radius--frame, 10px);
	--espazo-ease: var(--wp--custom--ease--standard, cubic-bezier(0.2, 0, 0.2, 1));
	--espazo-header-h: var(--wp--custom--header--height, 72px);
	--espazo-text-2: var(--wp--preset--color--neutral-600);
	--espazo-text-3: var(--wp--preset--color--neutral-500);
	--espazo-border: var(--wp--preset--color--neutral-200);
	--espazo-border-subtle: var(--wp--preset--color--neutral-100);
	--espazo-field-border: var(--wp--preset--color--neutral-400); /* form fields: the border is their only edge on white, so ≥ 3:1 (WCAG 1.4.11; #7D91B5 = 3.2:1; neutral-200 was 1.6:1; audit 17/10, FE-02) */
}

/* Scroll padding of the jumps to an anchor: what stays fixed at the top once the page has moved — the header, the
   section bar (--espazo-section-bar-h, set by espazo/table-of-contents «Section bar»; 0 without one) and the admin
   bar of a logged-in visitor. The header highlights of espazo-banner (--espazo-banner-h) are not added: from 8 px of
   scroll they fold away (body.is-scrolled, D16), so a jump always ends with the header at its own height. */
html { scroll-padding-top: calc(var(--espazo-header-h) + var(--espazo-section-bar-h, 0px) + var(--wp-admin--admin-bar--height, 0px) + 16px); }
/* Header, content and footer flush (no global blockGap between the template parts) */
.wp-site-blocks > * { margin-block-start: 0; }
body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
::selection { background: #CBE592; color: var(--wp--preset--color--navy); }
:focus-visible { outline: var(--espazo-focus); outline-offset: 2px; }
/* Focus ring on dark or coloured backgrounds: the grey ring (#56637A) falls to 1.7–2.2:1 there; white or navy keeps
   ≥ 3:1 (WCAG 1.4.11; full audit 29/09, B1-06). */
.has-navy-background-color :focus-visible,
.is-style-section-dark :focus-visible,
.espazo-banner--top :focus-visible,
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) :focus-visible { outline-color: #fff; }
.espazo-banner--band :focus-visible { outline-color: var(--wp--preset--color--navy); }

/* ——— Headings: one highlighted word (<em>), not italic ——— */
:where(h1, h2, h3, h4) em { font-style: normal; color: var(--wp--preset--color--green-title); }
.has-navy-background-color :where(h1, h2, h3, h4) em,
.is-style-section-dark :where(h1, h2, h3, h4) em { color: var(--wp--preset--color--green-400); background: none; padding: 0; }
.has-navy-background-color, .is-style-section-dark { color: var(--wp--preset--color--white); }

/* ——— Section label (spec-label) and A·nn plate label ——— */
/* The label itself is the «Section label» style of the Paragraph block in theme.json (with the A·nn plate); here only its
   colours inside dark sections. */
.has-navy-background-color .is-style-spec-label, .is-style-section-dark .is-style-spec-label { color: rgba(255,255,255,.72); }
.has-navy-background-color .is-style-spec-label[data-plate],
.is-style-section-dark .is-style-spec-label[data-plate] { color: #fff; }
.has-navy-background-color .is-style-spec-label[data-plate]::before,
.is-style-section-dark .is-style-spec-label[data-plate]::before { background: var(--wp--preset--color--green-500); color: var(--wp--preset--color--navy); }

/* ——— Green rule (Separator) ——— */
/* Full column width with a 40 px rule on the left (it lines up with the text in any layout): the «Green rule» style of the
   Separator block in theme.json. */
hr.wp-block-separator.is-style-green-rule { margin-block: 20px 24px; } /* here: the section heads reset their children's margins with the same weight as theme.json */

/* ——— Slanted ribbon at the top of dark sections: off in the approved design (W109); the block style has no effect until G8 ——— */
.is-style-ribbon-top { position: relative; }

/* ——— Menta ——— */
/* «Mint» style of the Group block: theme.json. */

/* ——— Frames: a single radius ——— */
/* «Frame» style of the Group block: theme.json. */
/* Images have no radius by default (theme.json gives core/image none): the frame radius is set where the design shows a
   standalone photo (services, shop, location page) or by the «Frame» block style. Until 04/10 theme.json gave it to every
   Image block and 10 rules here took it off again. */

/* ——— Buttons ——— */
.wp-block-button__link { min-height: 48px; display: inline-flex; align-items: center; justify-content: center; gap: 10px; white-space: nowrap;
	transition: background-color 200ms var(--espazo-ease), border-color 200ms var(--espazo-ease), color 200ms var(--espazo-ease); }
.wp-block-button__link:active { transform: scale(.98); transition-duration: 120ms; }
/* The button styles (Secondary, Outline, Outline on dark, Text link) and their hover are in theme.json; here what theme.json
   cannot weigh against the base rule above (min-height). */
.wp-block-button.is-style-text-link .wp-block-button__link { min-height: 0; }
.wp-block-button.is-style-text-link .wp-block-button__link:hover { color: var(--wp--preset--color--green-400); } /* also here: the theme.json hover (in :where) loses to the colour of the footer links */
.wp-block-button.is-size-sm .wp-block-button__link { min-height: 40px; padding: 0 14px; font-size: 14px; }

/* ——— Mono ——— */
.is-mono, .has-mono-font-family { font-family: var(--wp--preset--font-family--mono); font-feature-settings: "tnum"; }

/* ——— Section entrance (only below the fold; the JS adds .is-in) ——— */
.js .reveal { opacity: 0; transform: translateY(16px); transition: opacity 640ms var(--espazo-ease), transform 640ms var(--espazo-ease); }
.js .reveal.is-in { opacity: 1; transform: none; }
@media print { .js .reveal { opacity: 1; transform: none; } } /* print shows everything (audit 17/10, FE-04) */
@media (prefers-reduced-motion: reduce) {
	.js .reveal { opacity: 1; transform: none; transition: none; }
	*, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}

/* ===================================================================== Header */
.espazo-header { position: fixed; top: 0; left: 0; right: 0; z-index: 50; background: rgba(255,255,255,.97);
	border-bottom: 1px solid var(--espazo-border-subtle); transition: background-color 200ms var(--espazo-ease), border-color 200ms var(--espazo-ease); }
.admin-bar .espazo-header { top: var(--wp-admin--admin-bar--height, 32px); }
.espazo-header__bar { min-height: var(--espazo-header-h); max-width: 1320px; margin: 0 auto; gap: 24px; }
.espazo-header > * { margin-block: 0; } /* no blockGap (24 px) between the bar and the banner bands, as in the prototype (Phase 5) */
/* Side margin like the prototype's .container: 40 px, and 24 px up to 760 px inclusive (before clamp(24px, 5.2vw, 40px), which gave 39.5 px at 760 px and broke the 2-column grids; Phase 5). */
@media (max-width: 760px) { html body { --wp--custom--gutter: 24px; } }
.espazo-header .espazo-logo { margin: 0; line-height: 0; }
.espazo-header .espazo-logo img { height: 40px; width: auto; }
.espazo-header .espazo-logo--light { display: none; }
/* Transparent over dark heroes, until there is scroll or an open menu */
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) { background: transparent; border-bottom-color: transparent; }
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-logo--light { display: block; }
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-logo--dark { display: none; }
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-nav .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content { color: rgba(255,255,255,.75); text-shadow: 0 1px 3px rgba(8,11,20,.6); } /* shadow: legibility over light areas of the photo (full audit 29/09, B1-03; the measured contrast needs the hero gradient decision) */
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-nav .wp-block-navigation__container > .current-menu-item > .wp-block-navigation-item__content,
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-nav .wp-block-navigation__container > .current-menu-ancestor > .wp-block-navigation-item__content,
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-nav .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content:hover { color: #fff; }
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-nav .wp-block-navigation__submenu-icon { color: rgba(255,255,255,.75); }
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .wp-block-navigation__responsive-container-open { color: #fff; border-color: rgba(255,255,255,.3); }
/* Transparent over light heroes too (A Espazo, Newsletter, legal pages: body class from functions.php), with the dark
   logo and menu, until 8 px of scroll or an open menu — prototype Nav (audit 30/09 F8). */
body.has-light-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) { background: transparent; border-bottom-color: transparent; }

.espazo-nav { gap: 32px; }
.espazo-nav .wp-block-navigation-item__content { color: var(--espazo-text-2); font-size: 14px; font-weight: 500; padding-bottom: 2px; border-bottom: 1.5px solid transparent; transition: color 120ms var(--espazo-ease); }
.espazo-nav .wp-block-navigation-item__content:hover { color: var(--wp--preset--color--navy); }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > .current-menu-item > .wp-block-navigation-item__content,
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > .current-menu-ancestor > .wp-block-navigation-item__content, /* «Locations» on the location pages (F16) */
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content[aria-current="page"] { color: var(--wp--preset--color--navy); font-weight: 600; border-bottom-color: var(--wp--preset--color--green-500); }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__submenu-container .current-menu-item > .wp-block-navigation-item__content { background: var(--wp--preset--color--neutral-50); font-weight: 600; }
/* W202 (João, 06/10): no underline in the desktop menu, hover included (the `:hover` underline of core/navigation links in
   theme.json stays for the other navigations). The green line marks the item under the pointer or holding the keyboard
   focus (its submenu included, so «Locations» keeps it while the pointer is in the panel); on the current item it grows
   from 1.5 to 3 px (a shadow under the border: nothing moves). The dropdown items keep their background on hover. */
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation-item__content:hover { text-decoration: none; }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > .wp-block-navigation-item:is(:hover, :focus-within) > .wp-block-navigation-item__content { border-bottom-color: var(--wp--preset--color--green-500); }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > :is(.current-menu-item, .current-menu-ancestor):is(:hover, :focus-within) > .wp-block-navigation-item__content,
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > .wp-block-navigation-item:is(:hover, :focus-within) > .wp-block-navigation-item__content[aria-current="page"] { box-shadow: 0 1.5px 0 var(--wp--preset--color--green-500); }

/* «Locations» submenu (items of the espazo-locations plugin: name + municipality as the link description): 460 px, 2 columns.
   Scoped to the closed menu, like every desktop rule of the menu: the phone panel has its own rules below. */
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu > .wp-block-navigation__submenu-container {
	width: 460px; left: -48px; z-index: 20; line-height: var(--wp--custom--line-height--snug); top: calc(100% + 14px); padding: 16px; gap: 2px;
	display: grid; grid-template-columns: 1fr 1fr; background: #fff; color: var(--wp--preset--color--navy);
	border: 1px solid var(--espazo-border); border-radius: var(--wp--custom--radius--menu, 10px); box-shadow: 0 16px 40px rgba(13,17,30,.18);
}
/* «Locations» is the last item of the menu (W177): the dropdown hangs from its right edge so it cannot leave the screen at 900–1100 px (from the left edge it reached 1066 px at 1024 px). */
@media (max-width: 1199px) { .espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .wp-block-navigation__container > .espazo-locations-menu:last-child > .wp-block-navigation__submenu-container { left: auto; right: -24px; } } /* wide screens: as before (review 30/09) */
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu .wp-block-navigation__submenu-container .wp-block-navigation-item { width: 100%; }
/* Hover bridge: the dropdown hangs 14 px below «Centros» (top: calc(100% + 14px)); in that gap the cursor left the item's :hover
   and the core closed the dropdown before it could be reached (João, 01/10). The bridge belongs to the dropdown, so it only exists
   while the dropdown is open, and it is limited to the desktop menu. */
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu > .wp-block-navigation__submenu-container::before { content: ""; position: absolute; left: 0; right: 0; top: -15px; height: 15px; }
/* Close delay (the usual remedy for diagonal paths): from «Centros» to a location in the far column the cursor can leave the item
   sideways before reaching the bridge (measured at 1024 px, panel anchored right). Hidden only by visibility/opacity, so the panel
   keeps its size while it fades; it closes 0.35 s after the cursor leaves and opens with no delay. visibility: hidden keeps it
   out of reach of the pointer and of screen readers. */
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu > .wp-block-navigation__submenu-container { height: auto; overflow: visible; transition: opacity .1s linear .25s, visibility 0s linear .35s; }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu:hover > .wp-block-navigation__submenu-container,
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu > [aria-expanded="true"] ~ .wp-block-navigation__submenu-container { transition-delay: 0s, 0s; }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
	display: flex; justify-content: space-between; gap: 8px; width: 100%; padding: 10px 12px; border: 0; border-radius: 6px;
	color: var(--wp--preset--color--navy); font-size: 14px; font-weight: 500;
}
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover { background: var(--wp--preset--color--neutral-50); }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu .wp-block-navigation-item__description { display: block; align-self: center; font-family: var(--wp--preset--font-family--mono); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--espazo-text-3); }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu .espazo-menu-all { grid-column: 1 / -1; margin-top: 8px; border-top: 1px solid var(--espazo-border-subtle); }
.espazo-nav .wp-block-navigation__responsive-container:not(.is-menu-open) .espazo-locations-menu .espazo-menu-all .wp-block-navigation-item__content { font-size: 13px; font-weight: 600; padding: 12px; } /* navy, like the other links (the green here never applied on desktop) */

.espazo-header__cta .wp-block-button__link { min-height: 40px; padding: 0 14px; font-size: 14px; }

/* Mobile menu from 900 px (core uses 600 px): ☰ on the right, after the CTA */
.espazo-nav .wp-block-navigation__responsive-container-open { background: transparent; color: var(--wp--preset--color--navy); padding: 0; }
body.has-dark-hero:not(.is-scrolled) .espazo-header:not(:has(.is-menu-open)) .espazo-nav .wp-block-navigation__responsive-container-open { background: transparent; }
@media (max-width: 899px) {
	.espazo-header__bar > .espazo-nav { order: 3; flex: none; }
	.espazo-header__bar > .espazo-header__cta { order: 2; margin-left: auto; }
	.espazo-header__bar { gap: 12px; }
	.espazo-nav .wp-block-navigation__responsive-container-open:not(.always-shown) { display: flex; width: 44px; height: 44px; align-items: center; justify-content: center; border: 1px solid var(--espazo-border); border-radius: 6px; }
	.espazo-nav .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) { display: none; }
}
/* Mobile panel = core «Navigation overlay» (W177). The header's Navigation block has overlay="navigation-overlay": core
   renders parts/navigation-overlay.html inside .wp-block-navigation__overlay-container (class disable-default-overlay on the
   container, white background set here; the header's own list is hidden by core while the panel is open). The menu in the
   panel is a second Navigation block without ref (the same published menu, W107) with submenuVisibility "always": core renders
   «Centros» as a plain link plus an always-visible list, with no toggle button and no aria-expanded. The rules of the panel are
   all scoped to .espazo-nav-overlay; the desktop rules above are scoped to the closed menu
   (.wp-block-navigation__responsive-container:not(.is-menu-open)), so the two never compete (backlog §3g, 04/10). Without
   the overlay part core uses its default panel: the three rules with :not(.disable-default-overlay) keep it readable. */
.espazo-nav .wp-block-navigation__responsive-container.is-menu-open:not(.disable-default-overlay) { padding: 16px var(--wp--custom--gutter) 24px; }
.espazo-nav .is-menu-open:not(.disable-default-overlay) .wp-block-navigation-item__content { font-size: 17px; font-weight: 600; color: var(--wp--preset--color--navy); border: 0; }
.espazo-nav .is-menu-open:not(.disable-default-overlay) .espazo-locations-menu > .wp-block-navigation__submenu-container { position: static; width: auto; box-shadow: none; border: 0; padding: 4px 0 0; }
.espazo-nav .wp-block-navigation__responsive-container.disable-default-overlay.is-menu-open { padding: 0; background: var(--wp--preset--color--white); color: var(--wp--preset--color--navy); }
.espazo-nav .espazo-nav-overlay { padding: 0; } /* no padding inherited from the Group with a background (review 30/09) */
.espazo-nav .espazo-nav-overlay > * { margin-block: 0; }
/* Admin bar: core only moves its default panel down (navigation/style.css, :not(.disable-default-overlay)); the same for this one. */
.has-modal-open .admin-bar .espazo-nav .is-menu-open.disable-default-overlay .wp-block-navigation__responsive-dialog { margin-top: 46px; }
@media (min-width: 782px) { .has-modal-open .admin-bar .espazo-nav .is-menu-open.disable-default-overlay .wp-block-navigation__responsive-dialog { margin-top: 32px; } }
.espazo-nav .espazo-nav-overlay .espazo-nav-overlay__bar { box-sizing: border-box; min-height: var(--espazo-header-h); gap: 24px; border-bottom: 1px solid var(--espazo-border); }
.espazo-nav .espazo-nav-overlay .espazo-logo { margin: 0; line-height: 0; }
.espazo-nav .espazo-nav-overlay .espazo-nav-overlay__close { flex: none; width: 44px; height: 44px; padding: 0; border: 1px solid var(--espazo-border); border-radius: 6px; background: transparent; color: var(--wp--preset--color--navy); }
.espazo-nav .espazo-nav-overlay .espazo-nav-overlay__close svg { width: 20px; height: 20px; }
.espazo-nav .espazo-nav-overlay .espazo-nav-overlay__menu:not(.wp-block-navigation__container) { box-sizing: border-box; padding: 8px var(--wp--custom--gutter) 32px; } /* core also puts the block classes on the <ul> */
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container { flex-direction: column; align-items: stretch; width: 100%; gap: 5px; }
.espazo-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content { gap: 24px; }
/* Items of the panel: rounded, with a faint tint on the current page and under the finger (approved look; until 04/10 from Ollie). */
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content { border-radius: 5px; -webkit-tap-highlight-color: transparent; }
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container > .current-menu-item > .wp-block-navigation-item__content,
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container > .wp-block-navigation-item:not(:has(.wp-block-navigation__submenu-container:hover)):hover > .wp-block-navigation-item__content { transition: .3s ease; background: color-mix(in srgb, currentColor, transparent 97%); } /* the 5 px and 24 px gaps of the panel as approved (they came from Ollie until 04/10) */
.espazo-nav .espazo-nav-overlay .wp-block-navigation-item { width: 100%; }
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container > .wp-block-navigation-item > .wp-block-navigation-item__content { display: block; width: 100%; box-sizing: border-box; padding: 14px 0; border-bottom: 1px solid var(--espazo-border); font-size: 17px; font-weight: 600; line-height: 1.6; color: var(--wp--preset--color--navy); }
.espazo-nav .espazo-nav-overlay .wp-block-navigation-item .wp-block-navigation-item__description { display: none; } /* municipality/region: desktop dropdown only */
/* «Centros»: a label (mono, caps) over an always-open 2-column list */
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container > .espazo-locations-menu { display: block; margin-top: 20px; }
.espazo-nav .espazo-nav-overlay .wp-block-navigation__container > .espazo-locations-menu > .wp-block-navigation-item__content { display: block; padding: 2px 0 6px; border: 0; font-family: var(--wp--preset--font-family--mono); font-size: 12px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; line-height: 1.4; color: var(--espazo-text-3); }
.espazo-nav .espazo-nav-overlay .espazo-locations-menu .wp-block-navigation__submenu-container > .wp-block-navigation-item { align-items: stretch; } /* a name that wraps (320 px) keeps the row borders aligned */
.espazo-nav .espazo-nav-overlay .espazo-locations-menu > .wp-block-navigation__submenu-container { position: static; display: grid; grid-template-columns: 1fr 1fr; gap: 5px; align-items: flex-start; width: 100%; margin: 0; padding: 0; border: 0; box-shadow: none; background: transparent; }
.espazo-nav .espazo-nav-overlay .espazo-locations-menu .wp-block-navigation__submenu-container > .wp-block-navigation-item > .wp-block-navigation-item__content { display: block; width: 100%; box-sizing: border-box; padding: 12px 0; border-bottom: 1px solid var(--espazo-border); font-size: 15px; font-weight: 400; line-height: 1.5; color: var(--wp--preset--color--navy); }
.espazo-nav .espazo-nav-overlay .espazo-locations-menu .wp-block-navigation__submenu-container > .espazo-menu-all { grid-column: 1 / -1; margin-top: 20px; border-top: 0; }
.espazo-nav .espazo-nav-overlay .espazo-locations-menu .wp-block-navigation__submenu-container > .espazo-menu-all > .wp-block-navigation-item__content { padding: 12px 0; border: 0; font-size: 14px; font-weight: 600; color: var(--wp--preset--color--green-700); }
.espazo-nav .espazo-nav-overlay .espazo-locations-menu .wp-block-navigation-item__content:hover { background: transparent; text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 420px) { .espazo-header .wp-block-buttons.espazo-header__cta { display: none; } }


/* ======================================================================= Footer */
.espazo-footer { font-size: 14px; }
.espazo-footer .espazo-footer__grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 48px; }
/* The grid gap is the only spacing between the columns: the 24 px blockGap of the flow layout put columns 2–4 24 px
   lower on desktop and 72 px between the groups in mobile, 48 in the prototype (audit 30/09 M4). */
.espazo-footer .espazo-footer__grid > * { margin-block: 0; }
@media (max-width: 820px) { .espazo-footer .espazo-footer__grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .espazo-footer .espazo-footer__grid { grid-template-columns: 1fr; } }
.espazo-footer .espazo-footer__label, .espazo-footer .espazo-footer__low { font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.72); }
.espazo-footer .espazo-footer__label { margin: 0 0 16px; font-weight: 500; line-height: 1.2; } /* h2 (heading order, Lighthouse), with the look of the old h6 */
.espazo-footer .espazo-footer__list, .espazo-footer .espazo-footer__list .wp-block-post-template { list-style: none; margin: 0; padding: 0; }
/* 5 px above and below the 24 px link (WCAG 2.5.8, below): a 34 px step, the prototype's (6 + 21.7 + 6 px; with 6 px
   it was 36, audit 30/09 M4). */
.espazo-footer .espazo-footer__list > *, .espazo-footer .espazo-footer__list li { margin: 0; padding: 5px 0; color: rgba(255,255,255,.8); }
.espazo-footer .espazo-footer__list .wp-block-post-title { font-family: var(--wp--preset--font-family--sans); font-size: 14px; font-weight: 400; text-transform: none; letter-spacing: 0; line-height: 1.55; margin: 0; }
.espazo-footer .espazo-footer__list.is-mono > * { font-family: var(--wp--preset--font-family--mono); font-size: 13px; }
.espazo-footer a:hover { color: var(--wp--preset--color--green-400); }
/* WCAG 2.5.8 (full audit B1-11): links in the footer and the directory at least 24 px tall (and wide); the submenu
   toggle gets a 24 px target without moving its icon. */
.espazo-footer a, .espazo-footer .wp-block-button.is-style-text-link .wp-block-button__link, .espazo-directory a { display: inline-flex; align-items: center; min-height: 24px; min-width: 24px; }
.wp-block-navigation-submenu__toggle { min-width: 24px; min-height: 24px; justify-content: center; margin-inline: -8px; }
.espazo-footer hr.wp-block-separator.espazo-footer__rule { width: 32px; height: 2px; margin: 24px 0 20px; border: 0; background: var(--wp--preset--color--green-500); }
.espazo-footer .espazo-footer__bottom { border-top: 1px solid rgba(255,255,255,.1); }
.espazo-footer .espazo-footer__bottom .wp-block-buttons { gap: 8px 24px; }
.espazo-footer .espazo-footer__bottom .wp-block-button__link { font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.72); font-weight: 400; }
/* ADR note: 820 px of text, aligned to the left of the 1240 px grid (prototype Sections.jsx). In margin, 100% is the width of the footer; in padding too, so the old padding squeezed the text on wide screens. */
.espazo-footer .espazo-footer__adr { box-sizing: border-box; max-width: 820px; margin-left: max(0px, calc((100% - 1240px) / 2)) !important; margin-right: auto !important; /* !important: the constrained layout of core centres its children with margin-left/right: auto !important */ font-size: 13px; line-height: 1.6; color: rgba(255,255,255,.72); }
.espazo-footer .espazo-footer__adr a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
/* Company phone in the opening-hours column (W173): the call cost under the number (DL 59/2021, art. 3) in the same light
   grey as the other small print of the footer; .espazo-phone-note is dark grey for white backgrounds. Spacing as the lines above. */
.espazo-footer .espazo-footer__phone .espazo-phone-note { color: rgba(255,255,255,.72); }
.espazo-seal img { width: auto; }
/* W209 · Portugal Sou Eu (official files; «Manual de comportamento técnico e normas básicas», pp. 13–24, and «Manual de
   Utilização do Selo», p. 25–30). The seal with the white cut-out plate is the version for photographs and backgrounds that are
   neither white nor black; its minimum is 28 mm = 106 CSS px high (1 mm = 3.78 px), so 112 px. The horizontal variant is for
   communication supports (not the seal), colour version on white, minimum 5 mm = 19 px: 32 px. Clear space around both:
   at least the height of the P's bowl (about 2/3 of the horizontal variant's height). */
.espazo-footer .espazo-seal { margin-top: 32px; }
.espazo-footer .espazo-seal img { height: 112px; }
/* Trust line (W209: nationality, seniority, location), white in the footer to stand out from the company details below it. */
.espazo-footer .espazo-footer__trust { color: #fff; }
.espazo-section-head > .espazo-trust { margin-top: 28px; gap: 24px; } /* 24 px: the clear space of the mark (≥ the height of the P's bowl, about 21 px at 32 px), also when the text wraps below it */
.espazo-trust .espazo-trust__mark { margin: 0; flex: none; }
.espazo-trust .espazo-trust__mark img { display: block; height: 32px; width: auto; }
.espazo-trust .espazo-trust__text { margin: 0; max-width: 520px; font-family: var(--wp--preset--font-family--mono); font-size: 12px; line-height: 1.7; letter-spacing: .08em; text-transform: uppercase; color: var(--wp--preset--color--neutral-600); }

/* ================================================= UI headings (docs/DECISAO-TITULOS.md) */
.wp-block-heading.has-h-3-large-font-size { line-height: 1.2; }
h2.legal-h, .legal-h { font-family: var(--wp--preset--font-family--sans); font-weight: 600; text-transform: none; letter-spacing: -0.01em; line-height: 1.25; font-size: var(--wp--preset--font-size--legal); }

/* ======================================================= Phase 2 · sections and patterns (prototype v1.5) */
/* Space of banner A/B in the header (measured by the espazo/banner block) */
main.espazo-main { padding-top: calc(var(--espazo-header-h) + var(--espazo-banner-h, 0px)); }
body.has-dark-hero main.espazo-main, body.has-light-hero main.espazo-main { padding-top: 0; }
/* Templates whose content starts right under the solid header (404, archive): the header, then 120 px — the space the
   prototype leaves above the first text of the page heroes (legal pages and PageHero: 72 + 120 px), at every width.
   Their padding-top was the section's alone (clamp(72px, 10vw, 128px)), in the block's style, so it replaced the
   header's: at 390 px the 404 label started at 72 px, under the header; 56 px below it on desktop (audit 30/09 F19). */
main.espazo-main.espazo-main--page { padding-top: calc(var(--espazo-header-h) + var(--espazo-banner-h, 0px) + 120px); }

.espazo-section { padding-block: var(--wp--preset--spacing--section); }
.espazo-section.espazo-section--96 { padding-block: clamp(72px, 7.5vw, 96px); }
.espazo-section.espazo-section--top-96 { padding-top: clamp(72px, 7.5vw, 96px); }
.espazo-section > * + * { margin-block-start: 64px; }
/* Usable width of the prototype: .container of 920/880 px minus 2 × 40 px of margin (FAQ 840, form 800; Phase 5). */
.espazo-section--narrow > * { max-width: 840px; }
#contacto.espazo-section--narrow > * { max-width: 800px; }
.espazo-main > .wp-block-post-content > .alignfull:first-child, .espazo-main > .alignfull:first-child { margin-block-start: 0; }
.wp-block-post-content > .alignfull { margin-block: 0; }

/* Section head */
.espazo-section-head > * { margin-block: 0; }
.espazo-section-head > .wp-block-heading { max-width: 900px; }
.espazo-section-head > .espazo-lede, .espazo-lede { margin-top: 24px; max-width: 640px; font-size: 17px; line-height: 1.6; color: var(--espazo-text-2); text-wrap: pretty; }
.is-style-section-dark .espazo-lede, .has-navy-background-color .espazo-lede { color: rgba(255,255,255,.72); }
.espazo-section-head-split { display: flex; align-items: flex-end; justify-content: space-between; gap: 40px; flex-wrap: wrap; }
.espazo-section-head-split > .espazo-section-head { flex: 0 1 auto; } /* width of the heading itself, as in the prototype: the text only goes down when it does not fit beside it (Phase 5) */
.espazo-section-head-split > .espazo-section-head-split__text { flex: 0 1 360px; margin: 0; font-size: 16px; }
.espazo-section > .espazo-section-head--second { margin-block-start: 96px; }

/* Grelhas simples */
.espazo-grid { display: grid; gap: 24px; }
.wp-block-group.espazo-grid > * { margin-block: 0; } /* The spacing is the gap; the blockGap of the «flow» layout moved the 2nd card by 24 px. */
/* 2 → 1 columns with fixed breakpoints (README §3.5: never auto-fit), at the same points where the prototype's auto-fit(320 px) changes:
   2 × 320 + gap fits in the usable width (width − 2 × 24 px). Services: gap 48 → 736 px; offers: 24 → 712 px. */
.espazo-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 735px) { .espazo-grid--2.espazo-services { grid-template-columns: 1fr; } }
@media (max-width: 711px) { .espazo-grid--2 { grid-template-columns: 1fr; } }
.espazo-services { gap: 48px; }

/* Photographs: 3:2 ratio (approved design, W109) */
.espazo-photo { margin: 0; }
.espazo-photo img { display: block; width: 100%; object-fit: cover; aspect-ratio: 3 / 2; height: auto; }

/* Etiquetas mono, chips, «mais →» */
.espazo-mono-label { margin: 0; font-family: var(--wp--preset--font-family--mono); font-size: 12px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; color: var(--espazo-text-3); }
.espazo-mono-label--green { color: var(--wp--preset--color--green-700); }
.espazo-chip { display: inline-flex; margin: 0; padding: 4px 8px; border-radius: var(--wp--custom--radius--tag, 3px); background: var(--wp--preset--color--mint); color: var(--wp--preset--color--teal); font-family: var(--wp--preset--font-family--mono); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; line-height: 1.4; }
.espazo-chips { gap: 6px; }
.espazo-more { margin: 0; font-size: 14px; font-weight: 600; color: var(--wp--preset--color--green-700); }
.espazo-more--neutral { font-size: 13px; font-weight: 500; color: var(--espazo-text-2); }
.espazo-emphasis { margin: 0; font-size: 16px; font-weight: 600; line-height: 1.5; color: var(--wp--preset--color--green-700); }
.espazo-small-note { font-size: 13px; color: var(--espazo-text-3); }
.espazo-label-row { gap: 12px; }

/* Card with a stretched link: the heading has the link; the whole card is clickable */
.espazo-linked-card { position: relative; }
.espazo-linked-card .espazo-card__title a { color: inherit; text-decoration: none; }
.espazo-linked-card .espazo-card__title a::after { content: ""; position: absolute; inset: 0; z-index: 1; }
/* Focus ring drawn inside the card, above the photo and the link overlay: an outside outline is clipped by the grid
   (overflow: hidden, 1 px gaps) and was invisible (audit 30/09 F6, WCAG 2.4.7). */
.espazo-linked-card:focus-within::before { content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; outline: var(--espazo-focus); outline-offset: -2px; }
.espazo-linked-card .espazo-card__title a:focus-visible { outline: none; }

/* ——— Heros ——— */
/* Dark hero: Cover block with the «Hero» style — the frame and the content are in the espazo-hero plugin (assets/hero.css). */

/* Hero claro (A Espazo, legais) */
.espazo-hero-light .espazo-hero-light__body { padding-top: calc(var(--espazo-header-h) + 88px); padding-bottom: 96px; }
.espazo-hero-light :where(.espazo-hero-light__body > *) { margin-block: 0; } /* lowest weight: the margins of the title, lede, tabs and date below win without !important (A13) */
.espazo-hero-light h1 { margin-top: 32px; max-width: 1200px; font-size: clamp(48px, 8vw, 104px); line-height: .98; }
.espazo-hero-light .espazo-hero-light__lede { margin-top: 40px; max-width: 640px; font-size: 20px; line-height: 1.55; color: var(--espazo-text-2); }
.espazo-hero-light--legal .espazo-hero-light__body { padding-top: calc(var(--espazo-header-h) + 48px); padding-bottom: 64px; }
.espazo-hero-light--legal h1 { margin-top: 28px; font-size: clamp(40px, 6vw, 72px); line-height: 1.06; }
/* Under the transparent header (F8) the hero starts at y = 0 and its padding holds the header (and a header highlight):
   the text stays where it was — prototype: 72 + 160 px (A Espazo), 72 + 120 px (legal pages). */
body.has-light-hero .espazo-hero-light .espazo-hero-light__body { padding-top: calc(var(--espazo-header-h) + var(--espazo-banner-h, 0px) + 160px); }
body.has-light-hero .espazo-hero-light--legal .espazo-hero-light__body { padding-top: calc(var(--espazo-header-h) + var(--espazo-banner-h, 0px) + 120px); }
.espazo-legal__title::after { content: "."; }
.espazo-legal__lede { margin-top: 24px; max-width: 640px; font-size: 18px; line-height: 1.6; color: var(--espazo-text-2); }
.espazo-legal__lede p { margin: 0; }
.espazo-legal__tabs { margin-top: 32px; gap: 8px; }
.espazo-legal__tabs .wp-block-button__link { min-height: 36px; padding: 8px 12px; border-radius: 6px; background: #fff; font-family: var(--wp--preset--font-family--mono); font-size: 12px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--espazo-text-2); border-color: var(--espazo-border); }
.espazo-legal__tabs .wp-block-button__link[aria-current="page"] { background: var(--wp--preset--color--navy); border-color: var(--wp--preset--color--navy); color: #fff; }
.espazo-legal__tabs .wp-block-button__link:not([aria-current]):hover { background: var(--wp--preset--color--neutral-50); border-color: var(--wp--preset--color--neutral-300); } /* the Outline hover; not on the current tab (it went white on white before 04/10) */
.espazo-legal__date { margin-top: 24px; gap: 6px; }
.espazo-legal__date .wp-block-post-date { font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--espazo-text-3); }

/* ——— Services (homepage) ——— */
.espazo-service > * { margin-block: 0; }
.espazo-service .espazo-photo img { border-radius: var(--espazo-frame); }
.espazo-service .espazo-chip { margin-top: 28px; padding: 5px 9px; font-size: 12px; letter-spacing: .08em; }
.espazo-service h3 { margin-top: 16px; }
.espazo-service p:not([class*="espazo-"]) { margin-top: 12px; font-size: 16px; line-height: 1.6; color: var(--espazo-text-2); }
.espazo-service .espazo-more { margin-top: 16px; }
/* Marker of the service cards (prototype ThreeThings.jsx): Group block styles (B7, 27 Sep 2026); no style = key fact (the chip). */
.espazo-services { counter-reset: espazo-service; }
.espazo-services .espazo-service { counter-increment: espazo-service; }
.is-style-services-number .espazo-service .espazo-chip,
.is-style-services-roman .espazo-service .espazo-chip,
.is-style-services-none .espazo-service .espazo-chip { display: none; }
.is-style-services-none .espazo-service h3,
.is-style-services-number .espazo-service h3,
.is-style-services-roman .espazo-service h3 { margin-top: 28px; }
.is-style-services-number .espazo-service h3::before {
	content: counter(espazo-service, decimal-leading-zero); display: block; margin-bottom: 16px; padding-left: 30px;
	background: linear-gradient(currentColor, currentColor) left center / 20px 1px no-repeat;
	font-family: var(--wp--preset--font-family--mono); font-size: 12px; font-weight: 400; line-height: 1.55; letter-spacing: .08em;
	color: var(--wp--preset--color--green-700);
}
.is-style-services-roman .espazo-service h3::before {
	content: counter(espazo-service, upper-roman); display: block; margin-bottom: 16px;
	font-family: var(--wp--preset--font-family--display); font-size: 48px; font-weight: 700; line-height: 1; letter-spacing: 0;
	color: var(--wp--preset--color--green-500);
}
/* 96 px from the title to the services grid, as the prototype (ThreeThings: marginTop 96, at every width); the section's
   64 px gave 32 px less (audit 30/09 M4; B7 had kept the 64 px of the old «Services» block, where the 96 px rule never
   applied). */
.espazo-section > .espazo-services { margin-block-start: 96px; }

/* ——— Centros: mapa + grelha ——— */
.espazo-section > .espazo-locations-map { margin-block-start: 80px; }
.espazo-section > .espazo-locations-map + .espazo-locations-list { margin-block-start: 24px; }
/* Order buttons between the map and the grid (espazo/locations-order, W163): printed hidden and shown by its script, so
   the grid keeps its 24 px when the buttons stay hidden (no JavaScript). */
.espazo-section > .espazo-locations-map + .wp-block-espazo-locations-order { margin-block-start: 24px; }
.espazo-section > .wp-block-espazo-locations-order + .espazo-locations-list { margin-block-start: 16px; }
.espazo-section > .wp-block-espazo-locations-order[hidden] + .espazo-locations-list { margin-block-start: 24px; }
.espazo-locations-list__grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--espazo-border); border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); overflow: hidden; }
@media (max-width: 900px) { .espazo-locations-list__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.espazo-locations-list__grid > li { margin: 0; display: flex; }
.espazo-location-card { flex: 1; display: flex; flex-direction: column; background: #fff; transition: background-color 200ms var(--espazo-ease); }
.espazo-location-card:hover { background: var(--wp--preset--color--neutral-25); }
.espazo-location-card > * { margin: 0; }
.espazo-location-card__photo { position: relative; }
.espazo-location-card__photo .wp-block-post-featured-image { margin: 0; }
.espazo-location-card__photo img { width: 100%; aspect-ratio: 3 / 2; object-fit: cover; }
/* «New» on the photographs: ribbon in the lower left corner (tag ribbon B; approved design on 27 Sep 2026, W109 —
   before, it was the «Tag ribbon» option of Appearance › Espazo, through a body class). */
.espazo-tag {
	position: absolute; top: auto; right: auto; left: 0; bottom: 16px; margin: 0; padding: .45em 1.3em .45em .9em; border-radius: 0;
	clip-path: polygon(0 0, 100% 0, calc(100% - .7em) 100%, 0 100%);
	background: var(--wp--preset--color--green-500); color: var(--wp--preset--color--forest);
	font-family: var(--wp--preset--font-family--display); font-size: 17px; font-weight: 700; letter-spacing: .02em; line-height: 1; text-transform: uppercase;
}
.espazo-location-card__body { flex: 1; display: flex; flex-direction: column; padding: 24px 24px 28px; }
.espazo-location-card__body > * { margin: 0; }
.espazo-location-card__top { gap: 12px; align-items: baseline; }
.espazo-location-card__top .wp-block-post-title { margin: 0; font-size: var(--wp--preset--font-size--h-3); }
.espazo-location-card__area { margin: 0; flex: none; font-size: 13px; color: var(--espazo-text-3); }
.espazo-location-card__address { margin-top: 16px; font-size: 14px; line-height: 1.55; color: var(--espazo-text-2); }
.espazo-location-card__contacts { margin-top: 12px; font-size: 12px; line-height: 1.7; color: var(--espazo-text-2); }
.espazo-location-card__note { margin-top: 8px; font-size: 13px; color: var(--espazo-text-3); }
.espazo-location-card .espazo-chips { margin-top: 16px; }
.espazo-location-card .espazo-more { margin-top: auto; padding-top: 20px; }
/* Separator between the street and the postcode: only for the compact list below (the address is on one line there). */
.espazo-location-card__sep { display: none; }
/* Compact list of the locations below 782 px (W165, approved by João 30 Sep 2026): one row per location — name and area
   on the first line, the address on one line under it, no photograph, chips or «See location»; 1 px rules between the
   rows, no card background or radius. The whole row stays one link (the stretched link of .espazo-linked-card) and its
   focus ring (.espazo-linked-card:focus-within::before, above) keeps drawing inside the row. Written on the classes of the
   pattern, not on the section id, so every locations grid of Self-Storage (home and Self-Storage page) gets it. Wide
   screens are untouched.
   No !important (A13, 03/10): the same selectors as the rules above, later in the sheet, or more specific ones. */
@media (max-width: 781px) {
	.espazo-locations-list__grid { grid-template-columns: 1fr; gap: 0; background: transparent; border: 0; border-radius: 0; overflow: visible; }
	.espazo-locations-list__grid > li { border-top: 1px solid var(--espazo-border); }
	.espazo-locations-list__grid > li:last-child { border-bottom: 1px solid var(--espazo-border); }
	.espazo-location-card, .espazo-location-card:hover { background: transparent; }
	.espazo-location-card .espazo-chips, .espazo-location-card .espazo-more { display: none; }
	/* W183 (João, 03/10): no photo in the compact list, but the «Novo» tag (inside the photo group) stays, above the name —
	   otherwise the new location comes first with nothing saying why. The group shows only when it has the tag. */
	.espazo-location-card .espazo-location-card__photo .wp-block-post-featured-image { display: none; }
	.espazo-location-card .espazo-location-card__photo:not(:has(.espazo-tag)) { display: none; }
	.espazo-location-card .espazo-location-card__photo { padding-top: 14px; }
	.espazo-location-card .espazo-location-card__photo .espazo-tag { position: static; display: inline-block; font-size: 14px; }
	.espazo-location-card .espazo-location-card__photo:has(.espazo-tag) + .espazo-location-card__body { padding-top: 8px; }
	.espazo-location-card__body { gap: 2px; padding: 14px 16px; }
	.espazo-location-card .espazo-location-card__top { flex-wrap: wrap; column-gap: 12px; row-gap: 0; }
	.espazo-location-card__top .espazo-card__title { font-size: 22px; line-height: 1.2; }
	.espazo-location-card__address { margin-top: 0; font-size: 14px; line-height: 1.4; color: var(--espazo-text-3); }
	/* The break after the address is hidden only where the separator is (the location card patterns print it, with the address). */
	.espazo-location-card__address .espazo-location-card__sep { display: inline; }
	.espazo-location-card__address .espazo-location-card__sep + br { display: none; }
	/* Self-Storage page: phone, call cost and e-mail stay (the page is where the numbers are), closer to the address. */
	.espazo-location-card__contacts { margin-top: 4px; }
	.espazo-location-card__note { margin-top: 4px; }
	/* «Nearest first» (espazo/locations-order): the distance stays visible under the title row, without its own margin. */
	.wp-block-post .espazo-location-card__body > .espazo-locations-order__distance { margin-top: 0; }
}

/* ——— Fact sheet (dark section) ——— */
.espazo-section.is-style-section-dark .espazo-section-head h2, .espazo-section.is-style-section-dark h3 { color: #fff; }
.espazo-section > .espazo-specs { margin-block-start: 80px; }
.espazo-specs { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 1px; background: rgba(255,255,255,.1); border: 1px solid rgba(255,255,255,.1); border-radius: var(--espazo-frame); overflow: hidden; }
@media (max-width: 1100px) { .espazo-specs { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 600px) { .espazo-specs { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.espazo-specs__cell { margin: 0; min-height: 140px; box-sizing: border-box; padding: 32px 24px; display: flex; flex-direction: column; justify-content: space-between; gap: 16px; background: var(--wp--preset--color--navy); }
.espazo-specs__cell > * { margin: 0; }
.espazo-specs__label { font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.72); }
.espazo-specs__value { font-size: 20px; font-weight: 700; letter-spacing: -0.01em; color: #fff; }


/* ——— Contact: the section around the form. The form's own look is in espazo-forms (blocks/form/style.css, A12). ——— */
.espazo-section > .espazo-form-section { margin-block-start: 56px; }
/* Form fields shared by the contact form (espazo-forms) and the newsletter block (espazo-newsletter). */
.espazo-field { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.espazo-field--wide { grid-column: 1 / -1; }
.espazo-field__label { font-family: var(--wp--preset--font-family--mono); font-size: 12px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; color: var(--espazo-text-3); }
.espazo-required { color: var(--wp--preset--color--green-700); }

/* ——— O conceito ——— */
.espazo-concept { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 64px; align-items: start; }
@media (max-width: 860px) { .espazo-concept { grid-template-columns: 1fr; gap: 32px; } }
.espazo-concept > * { margin: 0; }
.espazo-concept__body > * { margin: 0; }
.espazo-concept__text { font-size: 18px; line-height: 1.65; color: var(--espazo-text-2); text-wrap: pretty; }
.espazo-concept__note { margin-top: 20px; font-size: 16px; line-height: 1.6; color: var(--espazo-text-3); }

/* ——— Vantagens 4 → 2 → 1 ——— */
.espazo-section > .espazo-benefits { margin-block-start: 80px; }
.espazo-benefits { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--espazo-border); border-left: 1px solid var(--espazo-border); }
@media (max-width: 1100px) { .espazo-benefits { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .espazo-benefits { grid-template-columns: 1fr; } }
.espazo-benefit { margin: 0; background: #fff; border-right: 1px solid var(--espazo-border); border-bottom: 1px solid var(--espazo-border); }
.espazo-benefit__body { padding: 32px; }
.espazo-benefit__body > * { margin: 0; }
.espazo-benefit__body h3 { margin: 24px 0 12px; }
.espazo-benefit__body p:not([class*="espazo-"]) { font-size: 15px; line-height: 1.6; color: var(--espazo-text-2); }

/* ——— Unidades + loja ——— */
.espazo-section > .espazo-unit-cards { margin-block-start: 80px; }
.espazo-unit-card { margin: 0; display: flex; flex-direction: column; overflow: hidden; background: #fff; border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); }
.espazo-unit-card__body { padding: 32px; }
.espazo-unit-card__body > * { margin: 0; }
.espazo-unit-card__body h3 { margin: 20px 0 8px; }
.espazo-unit-card__body p:not([class*="espazo-"]) { margin-top: 16px; font-size: 15px; line-height: 1.65; color: var(--espazo-text-2); }
.espazo-unit-card__area { margin: 0; font-size: 13px; font-weight: 600; color: var(--wp--preset--color--navy); }
.espazo-section > .espazo-shop { margin-block-start: 24px; }
.espazo-shop { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 48px; padding: 40px; background: var(--wp--preset--color--neutral-25); border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); }
@media (max-width: 860px) { .espazo-shop { grid-template-columns: 1fr; gap: 24px; padding: 28px; } }
.espazo-shop > * { margin: 0; }
.espazo-shop__intro > * { margin: 0; }
.espazo-shop__intro h3 { margin: 20px 0 8px; }
.espazo-shop__intro .espazo-shop__where { margin-top: 8px; font-weight: 600; } /* W216: «À venda em todos os centros» (equipa e João, 09/10) */
.espazo-shop__intro .espazo-photo { margin-top: 24px; }
.espazo-shop__intro .espazo-photo img { border-radius: var(--espazo-frame); }
/* W205 (06/10): every item has its rule above and below, and overlaps the one above by 1 px, so each column has the same
   lines (the list's own top rule ran across the column gaps; the items' rules did not). */
.espazo-shop__list { list-style: none; margin: 0; padding: 1px 0 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); column-gap: 32px; align-content: start; }
.espazo-shop__list li { margin: -1px 0 0; padding: 12px 0; border-block: 1px solid var(--espazo-border); font-size: 15px; }
/* W206 (João, 06/10: «equilibrar as 2 colunas»): side by side (> 860 px), the list in 2 columns and the photo taking the
   height left under the intro text (cover crop, at least 140 px), so both columns end on the same line. The photo no longer
   sets the height (absolute img: no intrinsic size); the taller of text + 140 px and the list does. Stacked: unchanged. */
@media (min-width: 861px) {
	.espazo-shop__list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.espazo-shop__intro { display: flex; flex-direction: column; }
	.espazo-shop__intro .espazo-photo { flex: 1 1 auto; min-height: 140px; position: relative; }
	.espazo-shop__intro .espazo-photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
}


/* ——— Ofertas Self-Offices ——— */
.espazo-offer { margin: 0; display: flex; flex-direction: column; overflow: hidden; background: #fff; border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); }
.espazo-offer__body { flex: 1; display: flex; flex-direction: column; padding: 36px; }
.espazo-offer__body > * { margin: 0; }
.espazo-offer__body .espazo-emphasis { margin-top: 12px; }
.espazo-price { margin: 28px 0 20px; padding-bottom: 24px; border-bottom: 1px solid var(--espazo-border); display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.espazo-price__from { font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--espazo-text-3); }
.espazo-price__value { font-size: 48px; font-weight: 700; letter-spacing: -0.03em; line-height: 1; white-space: nowrap; }
.espazo-price__period { font-size: 14px; color: var(--espazo-text-3); white-space: nowrap; }
.espazo-dot-list { list-style: none; margin: 0; padding: 0; }
.espazo-dot-list li { display: flex; gap: 12px; margin: 0; padding: 10px 0; border-bottom: 1px solid var(--espazo-border-subtle); font-size: 15px; line-height: 1.5; }
.espazo-dot-list li::before { content: ""; flex: none; width: 6px; height: 6px; margin-top: 8px; border-radius: 50%; background: var(--wp--preset--color--green-500); }
.espazo-dot-list--optional li { color: var(--espazo-text-2); }
.espazo-dot-list--optional li::before { background: var(--wp--preset--color--neutral-300); }
.espazo-offer__optional { margin-top: 24px; }
.espazo-offer__body .espazo-dot-list--optional { margin-top: 4px; }
.espazo-offer__body .espazo-small-note { margin-top: 16px; }
.espazo-offer__cta { margin-top: auto; padding-top: 32px; }

/* ——— Onde estamos (Self-Offices) ——— */
.espazo-offices__grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; background: var(--espazo-border); border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); overflow: hidden; }
@media (max-width: 700px) { .espazo-offices__grid { grid-template-columns: 1fr; } }
.espazo-offices__grid > li { margin: 0; display: flex; }
.espazo-office { flex: 1; display: flex; flex-direction: column; background: #fff; }
.espazo-office > * { margin: 0; }
.espazo-office .wp-block-post-featured-image img { aspect-ratio: 3 / 2; object-fit: cover; }
.espazo-office__body { flex: 1; display: flex; flex-direction: column; gap: 16px; padding: 28px; }
.espazo-office__body > * { margin: 0; }
.espazo-office__body .wp-block-post-title { font-size: var(--wp--preset--font-size--h-3); }
.espazo-office__address { font-size: 15px; line-height: 1.6; }
.espazo-office__contact { font-size: 13px; line-height: 1.7; margin-top: -12px; }
.espazo-office__contact a, .espazo-directory a, .espazo-contacts a { color: inherit; }
.espazo-office__buttons { margin-top: auto; gap: 8px; }
.espazo-hours--compact .espazo-hours__list { border-top-color: var(--espazo-border-subtle); }
.espazo-hours--compact .espazo-hours__row { padding: 8px 0; border-bottom-color: var(--espazo-border-subtle); font-family: var(--wp--preset--font-family--mono); font-size: 12px; }
.espazo-hours--compact dd { font-size: 12px; }

/* ——— Linha temporal 3 → 2 → 1 ——— */
.espazo-timeline { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--espazo-border); border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); overflow: hidden; }
@media (max-width: 900px) { .espazo-timeline { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .espazo-timeline { grid-template-columns: 1fr; } }
.espazo-milestone { margin: 0; min-height: 260px; box-sizing: border-box; padding: 28px; background: #fff; }
.espazo-milestone > * { margin: 0; }
.espazo-milestone__year { font-family: var(--wp--preset--font-family--mono); font-size: 28px; font-weight: 700; letter-spacing: -0.02em; color: var(--wp--preset--color--green-700); }
.espazo-milestone h3 { margin: 12px 0; }
.espazo-milestone p:not([class*="espazo-"]) { font-size: 14px; line-height: 1.6; color: var(--espazo-text-2); }
.espazo-milestone--today { background: var(--wp--preset--color--navy); grid-column: 1 / -1; min-height: 0; } /* W216: 7.º marco (Self-Offices) — «Hoje» ocupa a linha inteira */
.espazo-milestone--today .espazo-milestone__year { color: var(--wp--preset--color--green-400); }
.espazo-milestone--today h3 { color: #fff; }
.espazo-milestone--today p:not([class*="espazo-"]) { color: rgba(255,255,255,.75); }

/* ——— Quote ——— */
.espazo-quote { max-width: 880px; margin-inline: auto; text-align: center; }
.espazo-quote > * { margin: 0; }
.espazo-quote__text { margin: 0; padding: 0; border: 0; }
.espazo-quote__text p { margin: 0; font-family: var(--wp--preset--font-family--display); font-weight: 600; text-transform: uppercase; font-size: clamp(28px, 3.6vw, 44px); line-height: 1.1; color: var(--wp--preset--color--navy); }
.espazo-quote__author { margin-top: 32px; }

/* ——— Directory (Contacts) ——— */
.espazo-section > .espazo-directory { margin-block-start: 40px; }
.espazo-directory__list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--wp--preset--color--neutral-300); }
.espazo-directory__list > li { margin: 0; }
.espazo-directory__row { display: grid; grid-template-columns: 1.1fr 1.6fr 1fr 1.3fr; gap: 16px; align-items: baseline; padding: 20px 0; border-bottom: 1px solid var(--espazo-border); }
@media (max-width: 900px) { .espazo-directory__row { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .espazo-directory__row { grid-template-columns: 1fr; gap: 6px; } }
.espazo-directory__row > * { margin: 0; }
/* Name and tag (opening hours, «New») always on two lines: side by side, the tag only fitted short names and the rows differed (Alvalade vs Parque das Nações; the prototype also wrapped). */
.espazo-directory__col-name { display: flex; flex-direction: column; gap: 4px; align-items: flex-start; }
.espazo-directory__col-name > * { margin: 0; }
.espazo-directory__name, .espazo-directory__name.wp-block-post-title { font-family: var(--wp--preset--font-family--sans); font-size: 17px; font-weight: 600; text-transform: none; letter-spacing: 0; line-height: 1.4; }
.espazo-directory__tag { font-family: var(--wp--preset--font-family--mono); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--wp--preset--color--green-700); }
.espazo-directory__address, .espazo-directory__email { font-size: 15px; color: var(--espazo-text-2); overflow-wrap: anywhere; }
.espazo-directory__phone { font-size: 14px; }
.espazo-section > .espazo-directory__footer { margin-block-start: 64px; gap: 12px 32px; font-size: 15px; color: var(--espazo-text-2); }
.espazo-directory__footer p { margin: 0; }
.espazo-directory__footer a { color: var(--wp--preset--color--navy); text-decoration: underline; text-underline-offset: 3px; }

/* ——— Location page ——— */
.espazo-location-page .espazo-location-hero { position: relative; overflow: hidden; padding-top: calc(var(--espazo-header-h) + 120px + var(--espazo-banner-h, 0px)); padding-bottom: 64px; }
.espazo-location-page .espazo-location-hero::after { content: ""; position: absolute; inset: 0; pointer-events: none; opacity: .05; background-image: linear-gradient(to right, #fff 1px, transparent 1px), linear-gradient(to bottom, #fff 1px, transparent 1px); background-size: 80px 80px; }
.espazo-location-hero > * { position: relative; z-index: 1; }
.espazo-breadcrumb { margin: 0; font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.72); }
.espazo-breadcrumb a { color: inherit; }
/* Touch targets of 44 px on phones (full audit M1, João 30 Sep 2026): the links of the trail were 16 px high. The padding
   makes the hit area and the negative margin gives it back, so the trail keeps its line and the hero does not move. */
@media (max-width: 781px) { .espazo-breadcrumb a { display: inline-block; padding-block: 13px; margin-block: -13px; } }
.espazo-location-hero__head { margin-top: 24px; display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 32px; }
@media (max-width: 900px) { .espazo-location-hero__head { grid-template-columns: 1fr; } }
.espazo-location-hero__head > * { margin: 0; }
.espazo-location-hero__name > * { margin: 0; }
.espazo-location-hero__title { margin-top: 24px; font-size: clamp(44px, 7vw, 84px); color: #fff; }
.espazo-location-hero__title::after { content: "."; }
.espazo-location-hero__address { font-size: 16px; line-height: 1.6; color: #fff; }
.espazo-location-hero__photo { margin-top: 56px; }
/* W180 (João, 01/10, option B): the contacts of the location — phone with the call cost, e-mail, today's hours,
   directions — sit in the hero, between the address and the photo, so they show without scrolling (phone, desktop). */
.espazo-location-hero .espazo-location-hero__contacts { margin-top: 32px; padding-top: 24px; border-top: 1px solid rgba(255, 255, 255, .15); grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px 32px; }
.espazo-location-hero__contacts .espazo-mono-label { color: rgba(255, 255, 255, .64); }
.espazo-location-hero__contacts .espazo-contacts__value { display: block; margin-top: 6px; font-size: 17px; color: #fff; } /* display: block for the opening-hours span (W180). */
.espazo-location-hero__contacts .espazo-contacts__value a, .espazo-location-hero__contacts .espazo-hours__today { color: #fff; text-decoration: underline; text-decoration-color: rgba(255, 255, 255, .4); text-underline-offset: 4px; }
.espazo-location-hero__contacts .espazo-contacts__value a:hover { text-decoration-color: currentColor; }
.espazo-location-hero__contacts .espazo-contacts__note { color: rgba(255, 255, 255, .72); }
.espazo-location-hero__contacts + .espazo-location-hero__photo { margin-top: 32px; }
@media (max-width: 900px) { .espazo-location-hero .espazo-location-hero__contacts { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 16px; } }
@media (max-width: 781px) {
	.espazo-location-hero .espazo-location-hero__contacts { margin-top: 20px; padding-top: 16px; }
	.espazo-location-hero__contacts .espazo-contacts__value { font-size: 16px; overflow-wrap: anywhere; }
	.espazo-location-hero__contacts + .espazo-location-hero__photo { margin-top: 24px; }
	/* W180: menos folga no topo para o primeiro ecrã mostrar morada, horário, telefone e «Como chegar». */
	.espazo-location-page .espazo-location-hero { padding-top: calc(var(--espazo-header-h) + 24px + var(--espazo-banner-h, 0px)); }
	.espazo-location-hero__head { margin-top: 16px; }
	.espazo-location-hero__title { margin-top: 16px; }
	/* W182 (João, 01/10): the photo keeps the 3:2 of the centre photos instead of a 342 × 440 portrait that cut half of the facade.
	   Same specificity as .espazo-location-hero .wp-block-post-featured-image img (440 px), declared later. */
	.espazo-location-hero .espazo-location-hero__photo img { height: auto; aspect-ratio: 3 / 2; }
}
/* W181 (João, 01/10): narrow phones (Android 360, iPhone SE/mini 375): compact top and no «A·01 Self-Storage · Region» label, so that
   address, today's hours, phone with the call-cost note and «Como chegar» fit above the fixed bar (360 × 640 and 375 × 667: 9/9). */
@media (max-width: 380px) {
	.espazo-location-page .espazo-location-hero { padding-top: calc(var(--espazo-header-h) + 16px + var(--espazo-banner-h, 0px)); }
	.espazo-location-hero__head { margin-top: 12px; }
	.espazo-location-hero__name .is-style-spec-label { display: none; }
	.espazo-location-hero__title { font-size: 36px; margin-top: 0; }
	.espazo-location-hero .espazo-location-hero__contacts { margin-top: 16px; padding-top: 14px; gap: 14px 12px; }
}
/* W181: at 320 px the phone takes the whole row and never breaks inside the number («913 178 / 287»). */
@media (max-width: 359px) {
	.espazo-location-hero__contacts > .espazo-contacts__item:has(a[href^="tel:"]) { grid-column: 1 / -1; }
	.espazo-location-hero__contacts a[href^="tel:"] { white-space: nowrap; }
}
.espazo-location-hero__photo img { width: 100%; height: 440px; object-fit: cover; border-radius: var(--espazo-frame); }
.espazo-contacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 32px; }
.espazo-contacts__item > * { margin: 0; }
.espazo-contacts__value { margin-top: 8px; font-size: 18px; font-weight: 600; letter-spacing: -0.01em; color: var(--wp--preset--color--navy); }
.espazo-contacts__value a { text-decoration: none; }
.espazo-contacts__value a:hover { text-decoration: underline; }
.espazo-contacts__note { margin-top: 4px; font-size: 12px; color: var(--espazo-text-3); }
/* Call cost next to each phone number in the lists (mandatory: DL 59/2021, art. 3; W26), like the note on the location page */
.espazo-phone-note { font-family: var(--wp--preset--font-family--sans); font-size: 12px; font-weight: 400; letter-spacing: 0; text-transform: none; line-height: 1.5; color: var(--espazo-text-3); }
.espazo-location-columns { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); gap: 64px; }
@media (max-width: 900px) { .espazo-location-columns { grid-template-columns: 1fr; } }
.espazo-location-columns > * { margin: 0; }
.espazo-location-columns > * > * + * { margin-block-start: 40px; }
.espazo-location-columns .espazo-at-this-location { margin-block-start: 40px; }
.espazo-location-columns .espazo-at-this-location + .espazo-chips { margin-block-start: 12px; }
.espazo-location-columns .espazo-chip { padding: 6px 10px; font-size: 12px; }
.espazo-location-columns .wp-block-espazo-location-map + .wp-block-buttons { margin-block-start: 16px; }
.espazo-cells { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--espazo-border); border: 1px solid var(--espazo-border); border-radius: var(--espazo-frame); overflow: hidden; }
@media (max-width: 1100px) { .espazo-cells { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .espazo-cells { grid-template-columns: 1fr; } }
/* Three cells (location without warehouses, 07/10): three columns, and at two columns the last one spans the row. */
.espazo-cells:has(> :nth-child(3):last-child) { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 1100px) { .espazo-cells:has(> :nth-child(3):last-child) { grid-template-columns: repeat(2, minmax(0, 1fr)); } .espazo-cells > :last-child:nth-child(odd) { grid-column: 1 / -1; } }
@media (max-width: 560px) { .espazo-cells:has(> :nth-child(3):last-child) { grid-template-columns: 1fr; } }
.espazo-section > .espazo-cells { margin-block-start: 48px; }
.espazo-section > .espazo-cells + .wp-block-buttons { margin-block-start: 24px; }
.espazo-cell { margin: 0; padding: 28px; background: #fff; }
.espazo-cell > * { margin: 0; }
.espazo-cell h3 { margin: 14px 0 8px; }
.espazo-cell p:not([class*="espazo-"]) { font-size: 14px; line-height: 1.6; color: var(--espazo-text-2); }
.espazo-section > .wp-block-espazo-nearby-locations { margin-block-start: 48px; }

/* ——— Legal pages ——— */
.espazo-legal__section { padding-top: 72px; }
.espazo-legal__grid { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 64px; align-items: start; }
@media (max-width: 900px) { .espazo-legal__grid { grid-template-columns: minmax(0, 1fr); gap: 32px; } }
.espazo-legal__grid > * { margin: 0; }
.espazo-legal__body { max-width: 760px; counter-reset: legal; }
.espazo-legal__body > * { margin-block: 0 16px; }
.espazo-legal__body > h2.legal-h { counter-increment: legal; margin: 40px 0 20px; padding-top: 40px; border-top: 1px solid var(--espazo-border-subtle); scroll-margin-top: calc(var(--espazo-header-h) + 24px); }
.espazo-legal__body > h2.legal-h:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.espazo-legal__body > h2.legal-h::before { content: counter(legal, decimal-leading-zero); display: block; margin-bottom: 8px; font-family: var(--wp--preset--font-family--mono); font-size: 12px; font-weight: 500; letter-spacing: .08em; color: var(--wp--preset--color--green-700); }
.espazo-legal__body p, .espazo-legal__body li { font-size: 16px; line-height: 1.7; color: var(--espazo-text-2); text-wrap: pretty; }
.espazo-legal__body ul { padding-left: 20px; }
.espazo-legal__body li { margin: 0; padding: 2px 0; } /* no 16 px under each item; prototype UL: 2 px (audit 30/09 M4) */
.espazo-legal__body a { color: var(--wp--preset--color--navy); text-decoration: underline; text-underline-offset: 3px; }
.espazo-pending { padding: 2px 6px; border-radius: 3px; background: #FBF1DD; color: #7A4F0E; font-family: var(--wp--preset--font-family--mono); font-size: 12px; letter-spacing: .04em; }
.espazo-legal__body .wp-block-espazo-cookie-list { margin-bottom: 16px; }

/* ——— Fixed bar on mobile ——— */
.wp-block-buttons.espazo-mobile-bar { display: none; }
@media (max-width: 760px) {
	.wp-block-buttons.espazo-mobile-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; display: flex; flex-wrap: nowrap; gap: 8px; margin: 0; padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); background: #fff; border-top: 1px solid var(--espazo-border); transition: transform 220ms var(--espazo-ease); }
	.espazo-mobile-bar.is-hidden { transform: translateY(110%); visibility: hidden; transition: transform 220ms var(--espazo-ease), visibility 0s linear 220ms; } /* hidden for the keyboard and screen readers too, after the slide (audit 17/10, FE-01) */
	/* Two equal halves that may shrink (min-width: 0) and wrap their text: with the call cost note, the 1:2 split
	   pushed «Request a quote» off screen below 414 px (measured 29/09: right edge 398–412 px at 320–390 px). */
	.espazo-mobile-bar .wp-block-button { flex: 1 1 0; min-width: 0; }
	.espazo-mobile-bar .wp-block-button__link { width: 100%; white-space: normal; text-align: center; padding: 10px 8px; }
	/* DL 59/2021: call price next to the number («Call» dials the location or the general line). */
	.wp-block-buttons.espazo-mobile-bar { align-items: stretch; }
	.espazo-mobile-bar .wp-block-button { display: flex; }
	.espazo-mobile-bar .wp-block-button__link { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; }
	.espazo-call-note { display: block; margin-top: 2px; font-size: 11px; font-weight: 400; line-height: 1.2; letter-spacing: 0; text-transform: none; opacity: .8; }
	:root { --espazo-bottom-bar-h: 100px; } /* read by espazo-consent: the first-visit notice sits above the bar on short screens */
	body { padding-bottom: 100px; } /* height of the bar with the call cost note on 2 lines (98 px, measured at 320–414 px) */
	/* WCAG 2.2 · 2.4.11: a focused element is not hidden under the bar (request of the Banners session, C34). */
	html:has(.espazo-mobile-bar) { scroll-padding-bottom: calc(100px + env(safe-area-inset-bottom) + 16px); }
	/* W202: on the homepage the hero's «Request a quote» repeats the bar's (same action, same screen): only the bar keeps it,
	   so «See the nine locations» rises into the first screen (measured 06/10: at 360 × 740 it ended 63 px under the bar). */
	body:has(.espazo-mobile-bar) .is-style-espazo-hero-home .espazo-hero__ctas .espazo-cta-quote { display: none; }
}
/* Children of the cards without the blockGap of the flow layout */
.espazo-benefit > *, .espazo-unit-card > *, .espazo-offer > *, .espazo-service > *, .espazo-milestone > *, .espazo-cell > * { margin-block: 0; }
.espazo-dot-list li { margin-block: 0; } /* .espazo-shop__list li keeps its -1 px (W205) */
/* Location and legal templates: flush sections (no blockGap of main) */
main.espazo-location-page > *, main.espazo-legal > * { margin-block: 0; }
.espazo-contacts > * { margin: 0; }

/* ------------------------------------------------------------------ Newsletter: the section of the page. The card and the form belong to the espazo/newsletter block (espazo-newsletter plugin, blocks/newsletter/style.css). */
/* Prototype Newsletter.html: the card 168 px from the top of the page (72 of the header + 96) and 128 px above the footer,
   at every width (audit 30/09 F18: it was 72 + clamp(48px, 9vh, 96px) and clamp(64px, 12vh, 128px), 15 px higher and
   20 px shorter at 1440 × 900). Under the transparent header (F8) the section starts at y = 0 and holds the header. */
.espazo-newsletter-section { background: var(--wp--preset--color--neutral-25); padding-block: 96px 128px; }
body.has-light-hero .espazo-newsletter-section { padding-top: calc(var(--espazo-header-h) + var(--espazo-banner-h, 0px) + 96px); }
.espazo-nowrap { white-space: nowrap; }

/* Footer · link to the newsletter (NEWSLETTER.md §2): Open Sans 600 14 px, white, 1.5 px green underline at 2 px; hover green-400. */
.espazo-footer .espazo-footer-nl a { display: inline-block; padding-bottom: 2px; border-bottom: 1.5px solid var(--wp--preset--color--green-500); font-family: var(--wp--preset--font-family--sans); font-size: 14px; font-weight: 600; line-height: 1.4; color: var(--wp--preset--color--white); text-decoration: none; transition: color 120ms var(--espazo-ease); }
.espazo-footer .espazo-footer-nl a:hover { color: var(--wp--preset--color--green-400); }

/* The area of a location is empty when its municipality is the name itself (Odivelas, Albufeira; W169 revised 01/10):
   cards saved before the pattern hid it (hideIfEmpty) keep an empty paragraph. */
.espazo-location-card__area:empty { display: none; }

/* W184 (João, 03/10): directions in Google Maps, Waze and Apple Maps. No brand logos (each brand asks for approval);
   the same generic navigation pictogram (ours) before each name, drawn with a mask so it takes the text colour. */
.espazo-directions__label { margin: 24px 0 10px; }
.espazo-directions { gap: 12px; }
.espazo-directions__label + .espazo-directions { margin-top: 0; } /* no block gap between the label and its buttons */
.espazo-office__body > .espazo-directions__label { margin: 8px 0 -6px; } /* the Self-Offices card body is a flex column with a 16 px gap: same 24 px above and 10 px below */
.espazo-directions .wp-block-button__link { display: inline-flex; align-items: center; gap: 8px; }
.espazo-directions .wp-block-button__link::before { content: ""; flex: none; width: 18px; height: 18px; background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.5 3.5 3.5 10.6l7 2.2 2.2 7z' fill='none' stroke='%23000' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.5 3.5 3.5 10.6l7 2.2 2.2 7z' fill='none' stroke='%23000' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E") center / contain no-repeat; }
@media (max-width: 781px) {
	.espazo-directions { flex-direction: column; align-items: stretch; }
	.espazo-directions .wp-block-button, .espazo-directions .wp-block-button__link { width: 100%; }
}
/* W185b: «How to get there» screen of the short links (/ir/<location>/, template location-directions): the location
   hero, narrow (720 px), with the three apps as the main action; phone (with the call cost) and the location page below. */
.espazo-go .espazo-location-hero { min-height: calc(100svh - var(--espazo-banner-h, 0px)); padding-bottom: 56px; }
.espazo-go__head > * { margin: 0; }
.espazo-go__head .espazo-location-hero__address { margin-top: 16px; }
.espazo-go__hours { display: block; margin-top: 8px; font-size: 16px; color: rgba(255, 255, 255, .85); }
.espazo-go .espazo-directions__label { margin: 32px auto 12px; color: rgba(255, 255, 255, .64); } /* auto: the label is a child of the constrained hero (720 px), like the rest */
.espazo-go .espazo-directions { flex-direction: column; align-items: stretch; }
.espazo-go .espazo-directions .wp-block-button, .espazo-go .espazo-directions .wp-block-button__link { width: 100%; justify-content: center; }
.espazo-go .espazo-directions .wp-block-button__link { min-height: 56px; font-size: 17px; }
.espazo-location-hero .espazo-go__contacts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
