/* restore extras — generated by restore_04_polish.py */

/* Consent overlays: the restore ships no analytics or third-party tracking at all, so there
   is nothing to consent to. Their scripts are gone too, meaning the banner can never be
   dismissed and would cover the top of every page. Removing the markup is unreliable when a
   JS bundle re-renders it, so it is hidden here as well. */
.cookies-banner, .cookies-banner-content, .cookie-banner, .cookie-consent, .cookie-notice,
.cc-window, .cc-banner, #cookie-law-info-bar, #cookieChoiceInfo, .gdpr-banner,
#tarteaucitronRoot, .consent-overlay, .cookiebar {
  display: none !important;
}
body.cookie-banner-open, body.has-cookie-banner, html.cookies-open {
  overflow: auto !important;
}

/* Dead account/login modals left by the CMS (no backend on a static host) */
.modal-login, #loginModal, .login-modal { display: none !important; }

/* Carousel slots the platform's JS bundles would have filled at runtime: without a working
   bundle they stay as <img> elements with no src and render as broken-image icons. Nothing is
   lost by hiding them — they never had content in the restore. */
img:not([src]), img[src=""], img[src="#"] { display: none !important; }

/* The client's backlink block must read as the page's own copy. Where a theme only colours
   links inside specific containers, the anchor would otherwise look like plain text — inherit
   the surrounding colour but keep an underline so it is still visibly a link. */
.content-wraparea a { color: inherit; text-decoration: underline; }

/* A few px of horizontal overflow on phones (an absolutely-positioned login list, a wide footer
   logo) makes the whole page pannable sideways, which reads as broken.
   NB: use `clip`, never `hidden`, and never on html together with height:100%. `overflow:hidden`
   turns the element into a scroll container: on themes that set html{height:100%} it stops body's
   overflow propagating to the viewport, the window stops scrolling entirely and every
   scroll-driven behaviour (sticky nav, back-to-top, in-page anchors, PageDown/End) dies.
   `clip` suppresses the sideways pan without creating a scroll container. */
body { overflow-x: clip; }
/* ---- end generated block; anything below is preserved across re-runs ---- */

/* ---- clinicajardinsparede.pt restore: styling for the rebuilt pieces ---- */

/* policy page: it was one <br />-wall; give it the rhythm the rest of the site has */
.policy_body { margin-top: 10px; }
.policy_body h3 {
	color: #53b2b4;
	font-size: 20px;
	font-weight: 600;
	margin: 34px 0 12px;
}
.policy_body p {
	margin: 0 0 14px;
	line-height: 1.7;
}
.policy_body a { color: #53b2b4; }

/* onde_estamos: the self-hosted static OSM map replaces a fixed 350x350 Google iframe.
   The <img> carries width/height attributes (768x768) so the browser reserves the right box
   before it loads - but without max-width those same attributes burst it out of its column. */
.mapa_osm img,
.mapa_osm iframe {
	width: 100%;
	max-width: 100%;
	height: auto;
	border: 1px solid #dfe6e9;
	display: block;
}
.mapa_osm iframe { height: 340px; }
.mapa_osm a.static-map { display: block; }
.mapa_osm .mapa_link {
	margin: 6px 0 0;
	font-size: 13px;
}
.mapa_osm .mapa_link a { color: #53b2b4; }

/* booking form: the date field the site never had */
#form_marcacao .label_data {
	display: block;
	font-weight: 400;
	font-size: 14px;
	color: #7d8b91;
	margin-bottom: 4px;
}
#form_marcacao input[type="date"] { cursor: pointer; }
#form_marcacao select:disabled {
	opacity: .55;
	cursor: not-allowed;
}

/* honest placeholders where the site published a specialty but no names */
.sem_horario, .sem_medicos {
	font-size: 14px;
	font-weight: 300;
	color: #7d8b91;
	margin: 8px 0 18px;
}
.sem_horario a, .sem_medicos a { color: #53b2b4; }

/* 404 */
.lista_404 { list-style: none; padding: 0; margin: 18px 0 26px; }
.lista_404 li { margin: 0 0 10px; font-size: 16px; }
.lista_404 a { color: #53b2b4; font-weight: 600; }
.contacto_404 a { color: #53b2b4; }

/* HOME HERO AT PHONE WIDTH. The banner keeps its full-bleed photo while the copy block stays
   left-aligned, so below ~992px the sentence runs across the doctor's white coat and the grey
   text loses its contrast ("...oferece-lhe os melhores serviços" was the unreadable part in the
   390px screenshot). A soft light scrim behind the copy restores a readable ground without
   touching the layout, the photo or the type. Internal banners are centred titles only and are
   left alone.
   The scrim is painted on the BANNER, not on .conteudo: .conteudo is absolutely positioned and
   its measured height (150px) stops right where the CTA begins, so a background on it cut the
   button off. The banner is already position:relative, so one pseudo-element covers the whole
   slide and the copy simply sits above it. */
@media screen and (max-width: 992px) {
	.banner:not(.internas)::before {
		content: "";
		position: absolute;
		top: 0;
		right: 0;
		bottom: 0;
		left: 0;
		z-index: 1;
		pointer-events: none;
		/* The fade used to reach zero at 100%, but the copy block runs the FULL width of a
		   390px screen, so the last words of the first line ("...os melhores") sat where the
		   scrim was already down to ~0.3 and washed out against the white coat — the exact
		   phrase the round-4 review flagged and left open. The plateau now holds past the end
		   of the text and only the final 8% fades, so the photo still breathes at the edge. */
		background: linear-gradient(90deg,
			rgba(255, 255, 255, .88) 0%,
			rgba(255, 255, 255, .82) 70%,
			rgba(255, 255, 255, .80) 92%,
			rgba(255, 255, 255, 0) 100%);
	}
	.banner:not(.internas) .conteudo {
		z-index: 2;
	}
	.banner:not(.internas) .conteudo .descricao { color: #45545b; }
}

/* The banner title is a heading. Kill the UA's default margin, and keep line-height at the
   div's own `normal` - an explicit 1.15 made the box 58px instead of 72px and pulled everything
   below it up by 14px. Measured both ways: with these two lines the heading is pixel-identical to
   the div it replaced (50.4px/800/864x72 at 1440).
   Both tags are listed because on the 23 detail pages the band is an <h2>: there the <h1> belongs
   to the speciality or the headline, which is what the page is actually about. Bootstrap gives h1
   and h2 the same margins and .nome supplies everything else, so the two render identically. */
h1.nome,
h2.nome {
	margin-top: 0;
	line-height: normal;
}

/* The promoted subject heading on /servico/N/ and /noticia/N/. It was `<h3>` and is now the page's
   <h1>; these are exactly the declarations `.bloco h3` gave it, so the render does not move. */
.bloco h1.titulo_pagina {
	font-size: 22px;
	color: #53b2b4;
	text-transform: uppercase;
	margin: 20px 0 20px;
	line-height: 1.1;
	font-weight: 800;
	font-family: 'Open Sans', sans-serif;
}

/* the search widget is gone; stop the menu reserving its slot */
.menu_holder .menu { margin-right: 0; }

/* Font Awesome carried exactly one glyph on this site after the dead icons were removed
   (fa-caret-down / fa-caret-up, the accordion triggers). Two CSS triangles replace the whole
   font: same markup, same class swap in main.js, 604KB less to download. */
.fa {
	display: inline-block;
	vertical-align: middle;
}
.fa-caret-down,
.fa-caret-up {
	width: 0;
	height: 0;
	border-left: 5px solid transparent;
	border-right: 5px solid transparent;
}
.fa-caret-down { border-top: 6px solid currentColor; margin-bottom: -1px; }
.fa-caret-up { border-bottom: 6px solid currentColor; margin-bottom: 3px; }


/* =============================================================================================
   VISUAL FINISH PASS. Everything below fixes something that was VISIBLE on a screenshot and that
   no automated gate could see, because the archive's own render shares the defect and style
   parity only ever compares us to the archive. The site's own tokens are used throughout:
   teal #53b2b4, deep teal #1A8787, ink #003b56, body grey #555, muted #7d8b91, square corners,
   Open Sans at weights 300 / 400 / 600 / 800.
   ============================================================================================= */

/* --- SERVICE PAGES ---------------------------------------------------------------------------
   All 21 /servico/N/ pages shipped a photo, a heading and ~400px of white: the CMS's two
   `<p class="resumo">` paragraphs were empty in the capture. The body is now filled from the
   roster the site publishes on /corpo_clinico. Two structural things have to be undone for it to
   read: the theme's global `.conteudo{height:150px}` (written for the news-card excerpt) would
   clip the new copy, and the column needs its own rhythm. */
.svc_body {
	height: auto !important;
	padding-bottom: 4px;
}
.svc_body .svc_lead {
	font-size: 16px;
	font-weight: 300;
	line-height: 1.7;
	color: #555;
	margin: 0 0 26px;
}
.svc_body .svc_lead strong { font-weight: 600; color: #003b56; }
.svc_body .svc_lead a { color: #53b2b4; }
/* The speciality's own paragraph (the CMS's empty `resumo` slot, now filled). It is the only
   running copy on the page, so it gets the reading measure the rest of the site uses rather than
   the lead's slightly larger size — the lead is a one-line label above it, not a summary. */
.svc_body .svc_lead { margin-bottom: 14px; }
.svc_body .svc_desc {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.75;
	color: #555;
	max-width: 62em;
	margin: 0 0 16px;
}
.svc_body .svc_desc:last-of-type { margin-bottom: 26px; }
.svc_body .svc_desc a { color: #53b2b4; }

/* `.bloco h4 {font-size:17px;color:#111}` in the theme outranks a bare class, so scope it */
.bloco .svc_h4,
.svc_h4 {
	font-size: 14px;
	font-weight: 600;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: #003b56;
	margin: 0 0 14px;
}

.svc_equipa {
	border-top: 2px solid #53b2b4;
	padding-top: 18px;
	margin: 0 0 26px;
}
.svc_medicos {
	list-style: none;
	margin: 0;
	padding: 0;
}
.svc_medicos li {
	padding: 0 0 14px;
	margin: 0 0 14px;
	border-bottom: 1px solid #e6eef0;
}
.svc_medicos li:last-child { border-bottom: 0; margin-bottom: 6px; }
.svc_nome {
	display: block;
	font-size: 16px;
	font-weight: 600;
	color: #003b56;
}
.svc_horas {
	display: block;
	font-size: 14px;
	font-weight: 300;
	line-height: 1.6;
	color: #7d8b91;
	margin-top: 3px;
}
.svc_nota {
	font-size: 13px;
	font-weight: 300;
	color: #7d8b91;
	margin: 0;
}
.svc_nota a { color: #53b2b4; }

.svc_cta { margin: 0; }
.svc_cta button {
	color: #fff;
	background: #53b2b4;
	border: 0;
	font-size: 13px;
	font-weight: 800;
	letter-spacing: .05em;
	text-transform: uppercase;
	padding: 14px 40px;
	cursor: pointer;
}
.svc_cta button:hover { background: #1A8787; }

/* the sibling-service strip: a link list, never a bordered box with a link rattling in it */
.svc_outros {
	border-top: 1px solid #e6eef0;
	margin-top: 46px;
	padding-top: 26px;
}
.svc_outros ul {
	list-style: none;
	margin: 0;
	padding: 0;
	columns: 3;
	column-gap: 40px;
}
.svc_outros li { break-inside: avoid; margin: 0 0 9px; }
.svc_outros a {
	font-size: 14px;
	font-weight: 300;
	color: #555;
}
.svc_outros a:hover { color: #53b2b4; text-decoration: none; }
@media screen and (max-width: 992px) {
	.svc_outros ul { columns: 2; column-gap: 24px; }
	.svc_outros { margin-top: 30px; }
}
@media screen and (max-width: 560px) {
	.svc_outros ul { columns: 1; }
}

.noticia .col-md-4 img { display: block; width: 100%; }

/* Where the speciality has a long roster the copy column runs 600px past the photo and the left
   third of the page was 600px of nothing. The clinic's own NAP (published on /onde_estamos) sits
   under the photo and balances the spread; on a phone it stacks after the photo, before the copy. */
.svc_contacto {
	border-top: 2px solid #53b2b4;
	margin: 26px 0 0;
	padding-top: 16px;
}
.svc_contacto p {
	font-size: 14px;
	font-weight: 300;
	line-height: 1.7;
	color: #7d8b91;
	margin: 0 0 12px;
}
.svc_contacto p:last-child { margin-bottom: 0; }
.svc_contacto a { color: #53b2b4; }
.svc_contacto .svc_morada { color: #555; }

/* On a phone the two columns stack in DOM order, which put the address block between the photo
   and the heading it belongs under. Re-order so the page reads photo -> speciality -> contacts.
   `display:contents` drops the column's own 15px gutter, so it is restored on the two children. */
@media screen and (max-width: 992px) {
	.noticia { display: flex; flex-direction: column; }
	.noticia > .col-md-4 { display: contents; }
	.noticia > .col-md-4 > img { order: 1; padding: 0 15px; }
	.noticia > .col-md-8 { order: 2; padding-top: 22px; }
	.noticia > .col-md-4 > .svc_contacto { order: 3; margin: 8px 15px 0; }
}

/* --- HOME: SERVICE TILES ---------------------------------------------------------------------
   `.servico{min-height:380px}` is sized for the 540px-wide desktop tile. On a phone the tile is
   ~355px wide, so the photo plus its caption comes to ~300px and the rule leaves ~80px of dead
   white under every card - four visible holes down the homepage. The desktop value is untouched. */
@media screen and (max-width: 992px) {
	.holder_servicos .servico { min-height: 0; margin: 0 0 34px; }
}
/* the caption is the tile's link (it now has an href); make the whole tile respond */
.holder_servicos .servico a { display: block; }
.holder_servicos .servico a:hover h3 { color: #1A8787; text-decoration: none; }
.holder_servicos .servico h3 { margin: 14px 0 0; }

/* --- NEWS ------------------------------------------------------------------------------------
   `.conteudo{height:150px}` is a global in the theme, so the two-line excerpt on /noticias
   reserved 150px and left a gap before the SABER MAIS button that read as a missing paragraph.
   Give the excerpt its natural height and equalise the cards from the card, not the text. */
.single_noticia .conteudo { height: auto; min-height: 0; }
/* the two cards are floated columns of different natural height, so `margin-top:auto` on the
   button had nothing to push against and the two SABER MAIS buttons sat 20px apart. Stretch the
   row and the cards become equal-height siblings. */
.holder_noticia > .row {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
}
.single_noticia {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	float: none;
	margin: 25px 0 35px;
}
.single_noticia .conteudo h3 {
	font-size: 19px;
	color: #53b2b4;
	margin: 0 0 10px;
	line-height: 1.35;
}
.single_noticia .conteudo .resumo {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.6;
	color: #7d8b91;
	/* the theme's `.bloco button{margin-top:25px}` already supplies the gap to the CTA */
	margin: 0;
}
.single_noticia > a { margin-top: auto; }

/* --- FOOTER ----------------------------------------------------------------------------------
   Three things were visible in the teal band. */

/* 1. "leia mais" was `color:#000` - solid black on #53b2b4. It read as a smudge, not a link. */
.footer .holder_noticias_footer .conteudo a {
	color: #fff;
	text-decoration: underline;
	white-space: nowrap;
}
.footer .holder_noticias_footer .conteudo a:hover { color: #003b56; }

/* 2. the consent rows: a bare checkbox with no gap to its label, and a wrapped second line that
      started under the box instead of under the text, so "Privacidade." hung out on its own.
      NOT flex: the label here is a bare text node plus an <a> plus a full stop, which flex would
      break into three separately-wrapping items. A hanging indent keeps it one paragraph. */
.footer #form_newsletter .input-group .input-group {
	position: relative;
	display: block;
	padding-left: 24px;
	margin-top: 10px;
	font-size: 14px;
	font-weight: 300;
	line-height: 1.45;
	color: #fff;
}
.footer #form_newsletter .input-group .input-group input[type="checkbox"] {
	position: absolute;
	left: 0;
	top: 3px;
	width: 14px;
	height: 14px;
	margin: 0;
	padding: 0;
	border-radius: 0;
	accent-color: #1A8787;
}
.footer #form_newsletter .input-group .input-group a {
	font-size: 14px;
	text-decoration: underline;
}
/* the theme centres the whole footer below 992px. A full-width consent row then parks its
   absolutely-positioned checkbox at the far left while the label sits in the middle of the
   column - two things that clearly belong together, 40px apart. Shrink-wrap the row instead. */
@media screen and (max-width: 992px) {
	.footer #form_newsletter .input-group .input-group {
		display: inline-block;
		width: auto;
		text-align: left;
	}
}

/* 3. the ENVIAR button is absolutely positioned over the right end of a 20px-radius pill, so the
      pill's white corner showed around the button's square left edge, and a long address ran
      underneath the button. Round the button's own left side to nothing and reserve the width. */
.footer #form_newsletter > .input-group { position: relative; }
.footer #form_newsletter input[type="email"] { padding-right: 84px; }
.footer #form_newsletter button {
	border-top-left-radius: 0;
	border-bottom-left-radius: 0;
	padding: 8px 18px;
	letter-spacing: .04em;
	cursor: pointer;
}
.footer #form_newsletter button:hover { background: #0f6d6d; }

/* the copyright bar declared `border-top:1px solid #53b2b4` on a #53b2b4 ground - an invisible
   rule, so the line floated in empty teal. Use a translucent white so the band reads as designed. */
.lower_footer { border-top: 1px solid rgba(255, 255, 255, .35); }
/* only real links get the underline - the agency credit is an <a> with no href by the outbound
   policy, and underlining it makes dead text look clickable */
.lower_footer a[href] { text-decoration: underline; }
/* and close the ~90px hole the theme's trailing <br><br> left above the copyright line */
.footer #form_newsletter ~ br { display: none; }

/* --- CORPO CLÍNICO ---------------------------------------------------------------------------
   No headshot was ever archived; the site's own placeholder illustration stands in for all 22
   entries. The entries are `<p style="overflow:hidden">` with a floated 110x100 image, so the name
   sat against the picture's TOP edge and a one-line entry left ~60px of white beside a 100px tile.
   Aligned as a list it reads as an avatar system rather than as 22 pictures nobody replaced.
   Only the entries carry that inline style; `p.sem_medicos` (the Psicologia note) does not, which
   is what keeps this selector off it - it is a sentence with a link inside and flex would break it
   into separately-wrapping pieces. */
.holder_corpo_clinico p[style] {
	display: flex;
	align-items: center;
	gap: 16px;
	margin: 0 0 22px;
	font-size: 16px;
	line-height: 1.55;
}
.holder_corpo_clinico p[style] > img {
	float: none !important;
	margin: 0 !important;
	flex: 0 0 110px;
	border-radius: 3px;
	background: #d9eff0;
}
/* the entry text is wrapped in one <span> in the markup for exactly this reason: as bare siblings
   the name <a> and the ": speciality" text became two flex items and printed as two columns with
   a gap in front of the colon */
.holder_corpo_clinico p[style] > .medico_txt { flex: 1 1 auto; }
/* the theme separates entries with a bare <br>; the flex margin does that now */
.holder_corpo_clinico p[style] + br { display: none; }
.holder_corpo_clinico p[style] br { display: none; }
.holder_corpo_clinico p[style] a:hover { color: #1A8787; }

/* the 2px #1e4c64 rule between the columns is the darkest thing on a pale page and it stops in
   mid-air where the shorter column ends. Same divider, in the palette the rest of the page uses.
   Kept behind min-width because the theme drops the border entirely below 992px and this file
   loads after it - unscoped, this rule put a stray vertical line down the phone layout. */
@media screen and (min-width: 993px) {
	.holder_corpo_clinico .bordered { border-right: 1px solid #dfe6e9; }
}

/* the placeholder illustration is gone: no headshot was ever published, so each entry now carries
   a monogram tile in the clinic's own teal. It replaces an <img>, so it has to take the same
   110x100 box the flex row was built around. */
.holder_corpo_clinico .medico_avatar {
	flex: 0 0 110px;
	height: 100px;
	display: flex;
	align-items: center;
	justify-content: center;
	background: #d9eff0;
	color: #1A8787;
	font-size: 30px;
	font-weight: 600;
	letter-spacing: .06em;
	border-radius: 3px;
	user-select: none;
}

/* Three pages point the reader here for "os horários de consulta de cada médico", so the schedules
   the clinic publishes on its own pre-booking page are now printed under each name. The entry's
   own <br> is display:none above, so each line has to be its own block-level span. Smaller and
   muted so the name/speciality line stays the thing you scan for. */
.holder_corpo_clinico .medico_horas {
	display: block;
	margin-top: 5px;
	font-size: 13.5px;
	line-height: 1.5;
	color: #6a7a80;
}
.holder_corpo_clinico .medico_hora { display: block; }
/* entries are 3-7 lines tall now, so the old 22px gutter no longer separated them */
.holder_corpo_clinico p[style] { margin-bottom: 28px; align-items: flex-start; }
.holder_corpo_clinico p[style] > .medico_avatar { margin-top: 2px; }

/* the page opened straight on the two columns; one line says what the list is and what the times
   under each name are, and names the route for the specialities with no clinician published */
.corpo_intro {
	max-width: 62em;
	margin: 0 auto 34px;
	padding-bottom: 24px;
	border-bottom: 1px solid #e6eef0;
	text-align: center;
}
.corpo_intro p {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.75;
	color: #555;
	margin: 0;
}
.corpo_intro a { color: #53b2b4; }
.corpo_intro strong { font-weight: 600; color: #003b56; }

/* --- BACK LINK -------------------------------------------------------------------------------
   `javascript:window.history.go(-1)` is dead for a visitor arriving from a search result, so the
   link now names a real parent page. It was also the only bold near-black link on the site, which
   made it read as an unstyled leftover; give it the same teal the rest of the copy links use. */
.link_go_back { margin-top: 34px; }
.link_go_back a {
	font-size: 14px;
	font-weight: 400;
	color: #53b2b4;
}
.link_go_back a:hover { color: #1A8787; text-decoration: none; }

/* --- SERVIÇOS INDEX --------------------------------------------------------------------------
   The page was 21 photos and 21 links with no sentence at all. The intro gets the same measure
   and rhythm as the one on /acordos so the grid reads as a list the copy introduces. */
.servicos_intro {
	max-width: 62em;
	margin: 0 auto 34px;
	padding-bottom: 24px;
	border-bottom: 1px solid #e6eef0;
	text-align: center;
}
.servicos_intro p {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.75;
	color: #555;
	margin: 0 0 12px;
}
.servicos_intro p:last-child { margin-bottom: 0; }
.servicos_intro strong { font-weight: 600; color: #003b56; }
.servicos_intro a { color: #53b2b4; }

/* --- SERVICE PAGE: LEFT COLUMN ---------------------------------------------------------------
   Under the photo and the NAP there was still ~400px of white beside a long roster. The booking
   steps are the next thing a reader of a speciality page looks for, and they describe the form
   that is actually on /marcacao/. */
.svc_comomarcar {
	border-top: 2px solid #53b2b4;
	margin-top: 26px;
	padding-top: 16px;
}
.svc_comomarcar ol {
	margin: 0 0 12px;
	padding-left: 18px;
}
.svc_comomarcar li {
	font-size: 14px;
	font-weight: 300;
	line-height: 1.6;
	color: #7d8b91;
	margin: 0 0 8px;
}
.svc_comomarcar .svc_nota a { font-weight: 600; }
@media screen and (max-width: 992px) {
	/* the column is display:contents on a phone, so this block needs the gutter back and has to
	   be ordered after the copy like .svc_contacto is */
	.noticia > .col-md-4 > .svc_comomarcar { order: 4; margin: 18px 15px 0; }
}

/* --- NEWS ROW --------------------------------------------------------------------------------
   Two real items sat in a three-column row and left the right third empty. There is no third
   item to add and inventing one would be inventing a record, so the two take half the row each. */
.holder_noticia .single_noticia.col-md-6 img { width: 100%; display: block; }

/* --- BOOKING SELECTS -------------------------------------------------------------------------
   Médico and Horário are legitimately disabled until the field above them is answered, but they
   painted as two flat grey boxes with a one-word label and read as broken controls. The option
   text now says what they are waiting for, and the field is drawn as pending rather than dead. */
#form_marcacao select:disabled {
	opacity: 1;
	color: #9aa7ad;
	background: #f7fafa;
	border-style: dashed;
	cursor: not-allowed;
}

/* --- ACORDOS ---------------------------------------------------------------------------------
   Some insurer logos are transparent PNGs and some carry their own pale or navy plate, and each
   is a different height, so the row of captions jittered by a few pixels and half the tiles
   looked like they had a grey box behind them. One white tile of a fixed height, logo centred and
   contained, puts every mark on the same baseline. */
/* the page opens with copy now; it needs the same measure and rhythm as /quem_somos, and a rule
   under it so the ten tiles read as a list that the sentence introduces */
.acordos_intro {
	max-width: 62em;
	margin: 0 auto 38px;
	padding-bottom: 26px;
	border-bottom: 1px solid #e6eef0;
	text-align: center;
}
.acordos_intro p {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.75;
	color: #555;
	margin: 0 0 12px;
}
.acordos_intro p:last-child { margin-bottom: 0; }
.acordos_intro a { color: #53b2b4; }

.holder_acordos .acordo {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	margin: 10px 0 40px;
}
.holder_acordos .acordo .tile_logo {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	/* the column is 228px at 1440; 210 leaves a real gutter so the ten tiles read as ten cards
	   and not as one table with internal rules */
	max-width: 210px;
	height: 120px;
	padding: 12px 16px;
	background: #fff;
	border: 1px solid #e6eef0;
}
.holder_acordos .acordo .tile_logo img {
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
}
.holder_acordos .acordo .nome_acordo {
	font-size: 14px;
	font-weight: 300;
	color: #555;
	margin: 12px 0 0;
	min-height: 20px;
}

/* --- QUEM SOMOS ------------------------------------------------------------------------------
   The copy column carries an inline `padding-left:55px` written for the desktop two-up. Once the
   columns stack on a phone that indent survives and the paragraph sits 40px further right than the
   photo above it. Only an !important can reach past an inline style. */
@media screen and (max-width: 992px) {
	.bloco > .container > .col-md-6 { padding-left: 15px !important; }
}

/* --- QUEM SOMOS: THE SUMMARY PANEL ------------------------------------------------------------
   The page was four archive paragraphs beside one photo and ended above the fold, which made the
   oldest page in the nav look like the least finished one. Nothing here is new information: every
   line is a fact the site itself publishes elsewhere (the 2001 opening and the description of the
   premises are the page's own first paragraph; the counts are the length of /servicos, of the
   roster on /corpo_clinico and of the logo wall on /acordos; the NAP is /onde_estamos). It is a
   key/value list rather than more prose so it reads as a summary and hands the visitor the five
   pages they came for. Same tokens as the /servicos and /acordos intros. */
.qs_factos {
	clear: both;
	border-top: 1px solid #e6eef0;
	margin-top: 40px;
	padding-top: 44px;
}
.qs_factos h2 { margin-bottom: 26px; }
.qs_lista {
	list-style: none;
	margin: 0;
	padding: 0;
}
.qs_lista li {
	display: flex;
	align-items: baseline;
	gap: 26px;
	padding: 0 0 16px;
	margin: 0 0 16px;
	border-bottom: 1px solid #e6eef0;
}
.qs_lista li:last-child { border-bottom: 0; margin-bottom: 0; }
.qs_chave {
	flex: 0 0 220px;
	font-size: 14px;
	font-weight: 600;
	letter-spacing: .04em;
	text-transform: uppercase;
	color: #003b56;
}
.qs_valor {
	flex: 1 1 auto;
	font-size: 15px;
	font-weight: 300;
	line-height: 1.75;
	color: #555;
}
.qs_valor a { color: #53b2b4; }
/* on a phone the 220px label column would leave the sentence about 90px wide */
@media screen and (max-width: 767px) {
	.qs_lista li {
		display: block;
	}
	.qs_chave {
		display: block;
		margin-bottom: 6px;
	}
}

/* --- FORMS -----------------------------------------------------------------------------------
   Every other field shows a grey placeholder; a <select> shows its first <option> in full ink, so
   "Especialidade" read as an answered field next to unanswered ones. */
#form_marcacao select.is-empty,
#form_contactos select.is-empty { color: #999; }
#form_marcacao select option,
#form_contactos select option { color: #333; }

/* the consent row on the two real forms had the same hanging-wrap problem as the newsletter */
.check_privacidade {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	font-size: 14px;
	font-weight: 300;
	line-height: 1.5;
	color: #7d8b91;
}
/* `#form_contactos input` / `#form_marcacao input` set height:34px for the text fields and an ID
   selector outranks a class, so the consent checkbox was a 34px-tall box and its glyph sat a line
   below the sentence. Match the ID specificity rather than reach for !important. */
#form_contactos .check_privacidade input[type="checkbox"],
#form_marcacao .check_privacidade input[type="checkbox"],
.check_privacidade input[type="checkbox"] {
	width: 14px;
	height: 14px;
	min-width: 14px;
	flex: 0 0 14px;
	margin: 4px 0 0;
	padding: 0;
	border: 0;
	accent-color: #53b2b4;
}
/* bootstrap ships `label{font-weight:700}`; without this the consent sentence comes out bold and
   inks darker than the form it belongs to */
.check_privacidade label {
	font-weight: 300;
	font-size: 14px;
	line-height: 1.5;
	color: #7d8b91;
	margin: 0;
}
.check_privacidade a { color: #53b2b4; }

/* the line restore-forms.js prints after a submit. The theme's own response slots
   (#contactos_response, #newsletter_response) are empty divs with no styling of their own, so a
   confirmation dropped into them would have come out as unstyled 16px black. */
.form_nota {
	font-size: 14px;
	font-weight: 300;
	line-height: 1.55;
	margin: 14px 0 0;
	padding: 10px 14px;
	border-left: 3px solid #53b2b4;
	background: #f2fafa;
	color: #45545b;
	/* the fallback address is 32 unbreakable characters, and the footer column it lands in is
	   255px wide: without this the confirmation panel is 295px and hangs 40px out of the footer
	   grid past the nav and the copyright line. */
	overflow-wrap: anywhere;
	word-break: break-word;
}
/* the slot emptied again once the visitor has repaired every field watchRepair was complaining
   about — an empty box still carrying padding and a 3px rule would be a stray mark */
.form_nota--vazio { display: none; }
.form_nota.erro {
	border-left-color: #c0703c;
	background: #fdf5ef;
}
/* IN THE TEAL FOOTER THE NOTE HAS TO DARKEN ITS GROUND, NOT LIGHTEN IT.
   The first version washed white over the footer's #53b2b4 and an independent review measured the
   result: the error panel composited to rgb(127,198,199) and the confirmation to rgb(114,192,193),
   so white type on them ran 1.94:1 and 2.09:1 — BELOW the 2.50:1 of the ordinary footer text
   around them. The one line that must be noticed was the palest thing on the page, and the two
   states were four points of luminance apart, which is no distinction at all. A black wash instead
   puts the confirmation at 3.5:1 and the warning at 4.6:1, and makes the warning the darker of the
   two, so the states are told apart by weight and not only by the colour of a 3px rule. */
.footer .form_nota {
	background: rgba(0, 0, 0, .16);
	border-left-color: #fff;
	color: #fff;
}

/* --- MARCAÇÃO ACCORDION ----------------------------------------------------------------------
   The bars are the page's only navigation into the schedules; give the open one a state so the
   panel does not read as loose text under a stack of flat bars. */
.holder_marcacoes .marcacao .titulo:hover { background: #1A8787; }
.holder_marcacoes .marcacao .conteudo {
	border-left: 2px solid #d9eff0;
	padding: 2px 0 2px 14px;
	margin: 12px 0 22px;
	color: #555;
}
.holder_marcacoes .marcacao .conteudo strong { color: #003b56; }

/* --- MOBILE MENU -----------------------------------------------------------------------------
   .menu_holder is fixed, so the open panel sits over the hero. Against the teal band below it the
   theme's 1px teal bottom border vanishes and the panel reads as "the hero is missing" rather
   than as an overlay. A shadow separates it from whatever it happens to cover. */
@media screen and (max-width: 1095px) {
	.menu_holder { box-shadow: 0 6px 18px rgba(0, 59, 86, .12); }
	.menu_holder .menu-nav .dropdown { margin: 15px 5px; }
	.menu_holder .menu-nav .dropdown a { display: block; padding: 4px 0; }
}


/* --- SERVICE PAGE: THE SHORT RIGHT COLUMN ----------------------------------------------------
   The left column is a fixed 719px on all 21 speciality pages (photo + NAP + booking steps); the
   right column is only as tall as the roster it carries. Measured at 1440 it was 344px where the
   clinic publishes no names (Enfermagem, Fisioterapia, Psicologia), 512px with one name and
   1127px with six — so the short specialities showed up to 375px of white beside the contact
   panel. `.noticia` contains its own floats, so nothing below the row can rise into that hole: it
   has to be filled from inside the copy column. The two blocks that fill it are facts the site
   already publishes — the ten insurers listed on /acordos, and, for a speciality with no roster,
   the sentence /corpo_clinico itself prints in that case ("Marcações e informações através dos
   nossos contactos"). Same border and rhythm as .svc_equipa so the column reads as one column. */
.svc_acordos {
	border-top: 2px solid #53b2b4;
	padding-top: 18px;
	margin: 0 0 26px;
}
.svc_acordos .svc_desc:last-of-type { margin-bottom: 0; }
.svc_equipa .svc_nota { line-height: 1.7; }


/* --- HOMEPAGE: THE PUBLIC-SERVICE LINE -------------------------------------------------------
   The SOBRE A CLINICA band is teal with white copy, so a link left at the theme's #53b2b4 is
   nearly invisible on it. The band's other link (the hosted paragraph) already resolves this with
   `.content-wraparea a{color:inherit;text-decoration:underline}`; this line takes the same
   treatment so both read as links and neither outshouts the other. */
.bloco.escuro .home_publico a { color: inherit; text-decoration: underline; }


/* --- THE CONTENT PASS, 2026-08-18 ------------------------------------------------------------
   The client opened a delivered site and found the defect every gate had missed: the design was
   repaired and the copy was never written. On this site the 21 speciality pages carried ONE unique
   paragraph each and six pages carried under 900 characters of body text once the chrome is taken
   out. The rules below dress the blocks that filled them. They deliberately reuse .svc_h4, the
   .svc_desc measure and the #53b2b4 rule already used by .svc_equipa / .svc_acordos, so the longer
   page still reads as one column rather than as a stack of bolted-on sections. */

/* Indication list on the 21 speciality pages. `list-style: none` plus a drawn marker, because the
   theme resets ul globally and a browser bullet lands outside the .svc_desc measure. */
.svc_lista {
	list-style: none;
	padding: 0;
	margin: 0 0 26px;
}
.svc_lista li {
	position: relative;
	padding: 0 0 0 20px;
	margin: 0 0 9px;
	font-size: 15px;
	font-weight: 300;
	line-height: 1.7;
	color: #555;
}
.svc_lista li:before {
	content: "";
	position: absolute;
	left: 0;
	top: 10px;
	width: 7px;
	height: 7px;
	border-radius: 50%;
	background: #53b2b4;
}
.svc_lista li:last-child { margin-bottom: 0; }
.svc_lista a { color: #53b2b4; }

/* The three new sections sit between the lead and the roster; the first h4 needs the same top
   rule the roster and insurer blocks carry or the page reads as one undifferentiated column. */
.svc_quando { margin: 0 0 26px; }
.svc_quando .svc_h4:first-child {
	border-top: 2px solid #53b2b4;
	padding-top: 18px;
}
.svc_quando .svc_desc:last-of-type { margin-bottom: 0; }

/* Article body on /noticia/1/ and /noticia/2/. These are single-column pages: the container is
   ~1170px at 1440 and running text set that wide is unreadable, but constraining only the BODY
   left the headline and the lead at the container edge with half the row empty beside the article.
   The measure therefore goes on the column, so headline, lead and body share one left edge and one
   right edge, and the column is centred so the leftover space falls evenly on both sides instead
   of pooling on the right. `.noticia > .col-md-12` matches only these two article pages — the
   speciality pages put their `.col-md-12` (OUTRAS ESPECIALIDADES) outside `.noticia`. */
.noticia > .col-md-12 {
	max-width: 58em;
	margin-left: auto;
	margin-right: auto;
	float: none;
}
.art_corpo {
	margin: 26px 0 0;
}
.art_corpo p {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.8;
	color: #555;
	margin: 0 0 16px;
}
.art_corpo a { color: #53b2b4; }
.art_corpo .svc_h4 { margin-top: 26px; }
.art_corpo .svc_lista { margin-bottom: 16px; }
.art_assina { margin-top: 24px; color: #003b56; }
.art_assina strong { font-weight: 600; }

/* /acordos and /onde_estamos prose. Same measure and colour as the intro blocks above them. */
.acordos_extra {
	max-width: 62em;
	margin: 40px auto 0;
	padding-top: 30px;
	border-top: 1px solid #e6eef0;
}
.acordos_extra h3,
.onde_extra h3 {
	color: #003b56;
	font-size: 19px;
	font-weight: 600;
	margin: 26px 0 12px;
}
.acordos_extra h3:first-child,
.onde_extra h3:first-child { margin-top: 0; }
.acordos_extra p,
.onde_extra p {
	font-size: 15px;
	font-weight: 300;
	line-height: 1.8;
	color: #555;
	margin: 0 0 14px;
}
.acordos_extra a,
.onde_extra a { color: #53b2b4; }
.onde_extra {
	margin-top: 30px;
	padding-top: 24px;
	border-top: 1px solid #e6eef0;
}

/* --- /servicos GRID: THE RECOVERED 300x200 CROPS ---------------------------------------------
   The listing now loads the thumbnail the CMS actually served there (/t.php?...&h=200&w=300&zc=2)
   instead of the 635x531 upload, which is what put four photos on three pages each. The crop is
   3:2 where the upload was ~1.2:1, so a tile is ~110px shorter and the theme's
   `.servico{min-height:380px}` — sized for the homepage's 540px-wide col-md-6 tile — would leave
   ~110px of white under every caption.

   Releasing the height ALONE breaks the grid, which is how the theme's min-height was earning its
   keep: `.servico` is a float, and two of the twenty-one captions ("MEDICINA DENTARIA -
   IMPLANTOLOGIA", "- ORTODONTIA") wrap to a second line. A taller float snags the next row and
   OBSTETRICIA was left stranded in the third column with two empty cells beside it. Equal heights
   were hiding the snag rather than preventing it. Flex on the row removes floats from the
   equation entirely, so a wrapped caption can never push a tile out of its row again — and it is
   scoped to >=992px because below that breakpoint Bootstrap 3 gives `.col-md-4` no width at all,
   and flex items with auto width would sit side by side instead of stacking on a phone. */
@media (min-width: 992px) {
	.holder_servicos { display: flex; flex-wrap: wrap; }
	.holder_servicos .col-md-4.servico {
		min-height: 0;
		margin: 20px 0 30px;
		display: flex;
		flex-direction: column;
	}
	.holder_servicos .col-md-4.servico h3 { margin-top: auto; padding-top: 14px; }
}

/* Four paragraphs of centred running text is a different object from the two short centred lines
   this block held before the content pass: centred prose has no left edge for the eye to return
   to, and it shows past about three lines. The block stays centred on the page; the sentences
   inside it do not. The same now applies to /acordos, whose intro sits directly above a block of
   left-aligned prose — two measures, two alignments, one page was the worse of both. */
.servicos_intro,
.acordos_intro { text-align: left; }

/* ------------------------------------------------------- legibility gate, 2026-08-18

   Finger-sized hit areas (WCAG 2.5.8: 24px in the smaller dimension; 2.5.5 asks 44).

   Two distinct shapes here, both measured with _scripts/_legib_targets.js rather than guessed.
   First, this theme wraps block content in inline anchors - <a><button>Saiba Mais</button></a>,
   <a><h3>Cirurgia Vascular</h3></a>, <a><img id="logoimg"></a>. The button is 45px tall and looks
   perfectly tappable; the anchor that actually receives the click is the 19px line box beside it.
   inline-block makes the anchor wrap what it contains. */
.menu_holder .navbar-header a,
.conteudo > a, .conteudo > div > a,
.bloco .container > a, .center > a, .servico > a,
.lower_footer .col-md-6 > a { display: inline-block; }

/* Second, plain inline text links and form labels. Vertical padding on an inline box grows the
   rectangle the browser hit-tests and leaves the line box - so the layout - untouched. */
.holder_noticias_footer .conteudo a,
.lower_footer p a,
.home_publico a,
form label, label.label_data, form label a { padding-top: 6px; padding-bottom: 6px; }

/* The main nav sits alone on its row with room above and below, so it can have the full 44. */
.menu_holder .menu-nav .dropdown a { padding-top: 12px; padding-bottom: 12px; }

/* The burger was 35x22 - the exact defect this gate was written for. */
.menu_holder .menu-toggler {
  width: 44px; height: 44px;
  display: none;
  align-items: center;
  justify-content: center;
}
@media screen and (max-width: 1095px) { .menu_holder .menu-toggler { display: flex; } }

/* 11px footer buttons ("Marcar Consulta", "Todos os Serviços") on phones. 12 is the gate's floor
   and the client's magnifying-glass complaint starts below it. */
@media (max-width: 767px) { .bloco button, .conteudo button { font-size: 12px; } }

/* Second pass: the three the first pass did not reach. The service tiles' caption link is a block
   whose height is its <h3>'s 23px, the "voltar" links and the newsletter consent link are inline
   text at 19px. Same reasoning as above - padding grows the hit box, not the layout. */
.holder_servicos .servico a,
.link_go_back a,
#form_newsletter .input-group a { padding-top: 4px; padding-bottom: 4px; }

/* Third pass, 2026-08-19: the policy page. The RGPD text points the reader at the contact page
   twice, each time as a paragraph containing nothing but the link - the whole affordance for
   exercising a data-protection right - and the line box is 23px at 1440 and 19px at 390, the two
   remaining targets on this site under the gate's 24px hard floor. Same technique as above: the
   padding grows the rectangle the browser hit-tests, the line box and therefore the layout are
   unchanged. Both anchors in .policy_body are these links; there is no inline link inside a
   sentence here for the rule to thicken by accident. */
.policy_body p a { padding-top: 8px; padding-bottom: 8px; }

/* --- A FIELD THE FORM IS WAITING FOR ---------------------------------------------------------
   restore-forms.js turns the browser's own validation off (a form with `required` fields never
   fires `submit` while it is empty, so the handler that composes the mailto never ran and ENVIAR
   did nothing at all). Naming the missing fields in one sentence under a nine-field form still
   leaves the visitor counting boxes, so the fields themselves are marked too. */
.campo_em_falta,
input.campo_em_falta,
textarea.campo_em_falta,
select.campo_em_falta {
	border: 1px solid #c0703c !important;
	background: #fdf5ef;
	outline: none;
}
/* A BOX-SHADOW, NOT ONLY AN OUTLINE. custom-4304e88b.css carries
   `.footer #form_newsletter input { outline: none }` — an ID selector, which outranks every class
   rule here — so the outline below is never drawn on the two newsletter consent boxes and they
   were the one part of this marking that silently did not take: measured bit-identical before and
   after a failed submit, 0 of 6300 pixels different, while the e-mail input beside them changed
   5000 of 5600. box-shadow is not in that rule's way, so it draws in both places. */
input[type="checkbox"].campo_em_falta {
	outline: 2px solid #c0703c;
	outline-offset: 2px;
	box-shadow: 0 0 0 2px #c0703c;
	background: none;
}
/* the error note in the teal footer: .footer .form_nota inverts every note, and without this the
   newsletter's "faltam preencher" line would come out looking like a confirmation. The warm tint
   the note carries on white cannot be reused here - brown at 30% over #53b2b4 mixes to a muddy
   olive that reads as a rendering fault rather than as a warning - so the footer keeps the
   inverted white panel and takes its warning from the rule down its side. */
.footer .form_nota.erro {
	background: rgba(0, 0, 0, .28);
	border-left-color: #ffc9a3;
	color: #fff;
}
/* and the marks on the fields themselves have to invert too: #c0703c is nearly invisible against
   the teal, and the pale fill that flags a missing text box on white is what an empty input looks
   like down here. */
.footer .campo_em_falta,
.footer input.campo_em_falta { border: 1px solid #ffc9a3 !important; background: #fff8f2; }
.footer input[type="checkbox"].campo_em_falta {
	outline-color: #ffc9a3;
	box-shadow: 0 0 0 2px #ffc9a3;
}
