/* 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 ---- */

/* ==== restored by _scripts/alg_02_content.py — clinicaortopedicaalgodeia.pt ==================
   Everything below replaces behaviour the archive could not preserve. It is written against the
   theme's own class names so the rebuilt blocks inherit the site's palette and type. */

/* --- static service grid (was 6 empty admin-ajax portfolio loaders in a dead slick slider) --- */
.algServiceGrid .bt_bb_masonry_portfolio_grid_content{
  display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:24px; }
.algServiceGrid .bt_bb_grid_item{ width:auto !important; padding:0 !important;
  position:static !important; left:auto !important; top:auto !important; }
.algServiceGrid .bt_bb_grid_item_inner{ display:flex; flex-direction:column; height:100%;
  background:#fff; box-shadow:0 2px 14px rgba(51,81,73,.10); overflow:hidden; }
.algServiceGrid .bt_bb_grid_item_post_thumbnail{ display:block; line-height:0; }
.algServiceGrid .bt_bb_grid_item_post_thumbnail img{ width:100%; height:auto; display:block;
  transition:transform .4s ease; }
.algServiceGrid .bt_bb_grid_item_inner:hover .bt_bb_grid_item_post_thumbnail img{
  transform:scale(1.04); }
.algServiceGrid .bt_bb_grid_item_post_content{ padding:22px 22px 26px; display:flex;
  flex-direction:column; flex:1 1 auto; background:transparent !important; }
.algServiceGrid .bt_bb_grid_item_category{ color:#f5a95d; letter-spacing:.08em;
  text-transform:uppercase; font-size:11px; margin:0 0 6px; }
.algServiceGrid .bt_bb_grid_item_post_title{ margin:0 0 10px; font-size:22px; line-height:1.2; }
.algServiceGrid .bt_bb_grid_item_post_title a{ color:#518073; }
.algServiceGrid .bt_bb_grid_item_post_title a:hover{ color:#f5a95d; }
.algServiceGrid .bt_bb_grid_item_post_excerpt{ flex:1 1 auto; }
.algServiceGrid .bt_bb_grid_item_post_excerpt p{ margin:0 0 16px; }
.algServiceGrid .algMore{ align-self:flex-start; margin:0; }
@media (max-width:991px){ .algServiceGrid .bt_bb_masonry_portfolio_grid_content{
  grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:600px){ .algServiceGrid .bt_bb_masonry_portfolio_grid_content{
  grid-template-columns:1fr; } }

/* --- insurer logos (was a slick carousel with a poisoned driver and 6 dead images) ---------- */
.algLogoStrip{ list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap;
  justify-content:center; align-items:center; gap:14px 34px; }
.algLogoStrip .algLogo{ margin:0; padding:0; flex:0 0 auto; }
.algLogoStrip img{ display:block; max-height:56px; width:auto; max-width:150px;
  filter:grayscale(1); opacity:.72; transition:filter .25s ease, opacity .25s ease; }
.algLogoStrip img:hover{ filter:grayscale(0); opacity:1; }
@media (max-width:600px){ .algLogoStrip{ gap:12px 22px; }
  .algLogoStrip img{ max-height:40px; max-width:104px; } }

/* --- before/after comparison (its stylesheet was in the poisoned crawl minute) -------------- */
.algBA{ margin:0 auto; max-width:100%; }
.algBA__frame{ position:relative; overflow:hidden; line-height:0; touch-action:pan-y; }
.algBA__frame img{ display:block; width:100%; height:auto; }
.algBA__after{ position:absolute; inset:0; overflow:hidden; width:var(--pos); }
.algBA__after img{ position:absolute; top:0; left:0; height:100%; width:auto;
  max-width:none; min-width:100%; object-fit:cover; }
.algBA__line{ position:absolute; top:0; bottom:0; left:var(--pos); width:2px; background:#fff;
  box-shadow:0 0 0 1px rgba(51,81,73,.35); pointer-events:none; }
.algBA__line:after{ content:""; position:absolute; top:50%; left:50%; width:44px; height:44px;
  margin:-22px 0 0 -22px; border-radius:50%; background:#f5a95d;
  box-shadow:0 2px 10px rgba(0,0,0,.28); }
/* the grip: two solid triangles pointing apart, so the control reads as "drag sideways" */
.algBA__line:before{ content:""; position:absolute; top:50%; left:50%; margin:-6px 0 0 -13px;
  width:26px; height:12px; z-index:1;
  background:#fff;
  clip-path:polygon(0 50%, 9px 0, 9px 100%, 100% 50%, 17px 0, 17px 100%); }
.algBA__range{ position:absolute; inset:0; width:100%; height:100%; margin:0; opacity:0;
  cursor:ew-resize; -webkit-appearance:none; appearance:none; background:transparent; }
.algBA__range::-webkit-slider-thumb{ -webkit-appearance:none; width:48px; height:100vh;
  cursor:ew-resize; }
.algBA__range::-moz-range-thumb{ width:48px; height:100vh; border:0; background:transparent;
  cursor:ew-resize; }
.algBA__range:focus-visible{ outline:3px solid #518073; outline-offset:3px; }
.algBA__tag{ position:absolute; bottom:16px; z-index:2; font-family:"Quicksand",sans-serif;
  font-size:12px; letter-spacing:.09em; text-transform:uppercase; color:#fff; line-height:1;
  background:rgba(51,81,73,.82); padding:8px 13px; border-radius:2px; }
.algBA__tag--l{ left:16px; } .algBA__tag--r{ right:16px; }
.algBA__cap{ text-align:center; padding:18px 0 0; }
.algBA__capTitle{ display:block; font-family:"Abhaya Libre",serif; font-size:26px; color:#518073; }
.algBA__capSub{ display:block; font-family:"Quicksand",sans-serif; color:#f5a95d;
  letter-spacing:.05em; }

/* --- scrim under text that sits on a full-bleed photo --------------------------------------
   Applied by alg_02_content.py to any boldSection with a background photo that is not a
   btPageHeadline band. The homepage hero's own artwork was never archived and the archived
   Parque da Algodeia photo stands in for it; a photograph is far brighter than whatever was
   there, so without this the amber headline and the dark-grey subtitle are both unreadable. */
.boldSection.algScrim{ position:relative; }
.boldSection.algScrim > .port{ position:relative; z-index:2; }
/* display:block is load-bearing - the theme ships `.boldSection:before{display:table}` as a
   clearfix, and a table box with inset:0 computes to height 0, so the scrim was invisible while
   every other property looked right. */
.boldSection.algScrim:before{ content:""; display:block; position:absolute; inset:0; z-index:1;
  pointer-events:none;
  background:linear-gradient(100deg, rgba(33,53,47,.90) 0%, rgba(33,53,47,.74) 40%,
    rgba(33,53,47,.34) 80%, rgba(33,53,47,.20) 100%); }
.boldSection.algScrim, .boldSection.algScrim p, .boldSection.algScrim .btSubTitle,
.boldSection.algScrim .btSuperTitle, .boldSection.algScrim h1, .boldSection.algScrim h2,
.boldSection.algScrim h3, .boldSection.algScrim .headline{ color:#f7f5f0; }
.boldSection.algScrim .headline strong{ color:#f5a95d; }
@media (max-width:767px){
  .boldSection.algScrim:before{ background:rgba(33,53,47,.80); } }

/* --- map: a self-hosted OSM raster replaces the OSM iframe --------------------------------- */
/* The live embed had to go, and no attribute on our side could have saved it. The OSM embed
   reads only bbox/layer/marker/theme/position/anchor/type/color/intensity/resampling from its
   query string - there is no locale parameter - and its bundle sets the language from the VIEWER:
       navigator.languages ? OSM.i18n.locale = navigator.languages[0] : ...
   so this Portuguese clinic printed "Повідомити про проблему | © Учасники OpenStreetMap … Умови
   користування вебсайтом та API" under its map for a Cyrillic-locale reader, and would print
   Japanese for a Japanese one. The document is cross-origin, so nothing we write can reach it.
   The image is built by _scripts/o4_static_map.py and cropped so the clinic POI is the EXACT
   centre pixel; cover always scales about the centre, which is what lets one 1120x1120 asset
   serve a 565x480 desktop box and a 390x320 phone box with the pin still on the building. */
/* the Google embed this block replaces was width="800" height="800"; keep it near-square so it
   still balances the form beside it instead of collapsing to a 320px strip */
.algMap{ position:relative; width:100%; height:480px; line-height:0; overflow:hidden; }
/* !important for the same reason the iframe rule needed it: the theme sizes media inside
   .btContentHolder itself and wins on specificity, which used to leave the map 565x318 in a
   565x560 box with empty ground beside it */
.algMap .algMap__img{ position:absolute !important; inset:0 !important; display:block;
  width:100% !important; height:100% !important; max-width:none; border:0;
  object-fit:cover; object-position:50% 50%; }
/* The raster is inert where the iframe was at least routable, so the image and its pin sit inside
   a link to the same POI the crop is centred on. It is stretched over the whole box rather than
   wrapped around the credit, so the obvious gesture - tapping the map - opens the location, while
   the ODbL credit keeps its own anchor and its own click. */
.algMap .algMap__link{ position:absolute; inset:0; display:block; z-index:1; }
/* tip of the pin, not its middle, is what must land on the centre pixel */
.algMap .algMap__pin{ position:absolute; left:50%; top:50%; width:32px; height:44px;
  transform:translate(-50%,-100%); pointer-events:none; }
/* ODbL requires the attribution to travel with the tiles; it is ours to render, so it is in
   Portuguese and cannot come back in the reader's language the way the embed's bar did */
/* above .algMap__link, or the whole-box map link would swallow the attribution's own click */
.algMap .algMap__credit{ position:absolute; right:0; bottom:0; z-index:2; margin:0; padding:3px 9px;
  font-family:"Quicksand",sans-serif; font-size:11px; line-height:1.6; letter-spacing:0;
  color:#21352f; background:rgba(255,255,255,.84); }
.algMap .algMap__credit a{ color:#21352f; text-decoration:underline; }
@media (max-width:767px){ .algMap{ height:320px; } }

/* --- 404 ---------------------------------------------------------------------------------- */
.alg404{ text-align:center; padding:70px 0 90px; }
.alg404 .alg404__code{ font-family:"Abhaya Libre",serif; font-size:120px; line-height:1;
  color:#f5a95d; margin:0 0 6px; }
.alg404 ul{ list-style:none; margin:26px 0 0; padding:0; display:flex; flex-wrap:wrap;
  justify-content:center; gap:10px 14px; }
.alg404 ul a{ display:inline-block; border:1px solid rgba(81,128,115,.35); border-radius:40px;
  padding:9px 20px; color:#518073; }
.alg404 ul a:hover{ background:#518073; color:#fff; border-color:#518073; }

/* --- phone: the info bar in the logo area is a disclosure, not a stack of frozen rows ------ */
@media (max-width:1199px){
  .topBarInLogoArea .topBarInLogoAreaCell{ display:none; }
  .topBarInLogoArea.on .topBarInLogoAreaCell{ display:block; }
}

/* --- legal pages: the site's own header band, a readable measure, a usable table -------------
   Added by _scripts/alg_05_legal.py. See that file for what was wrong. */
body.algLegal .btContent .btText{ max-width:900px; }
body.algLegal .btContent .btText p,
body.algLegal .btContent .btText li{ font-size:14px; line-height:1.8; }
body.algLegal .btContent .btText > ul > li > b,
body.algLegal .btContent .btText > ul > li > strong{ font-family:"Abhaya Libre",serif;
  font-size:22px; color:#518073; font-weight:400; }
body.algLegal .btContent .btText > ul:has(> li > b){ list-style:none; padding:0;
  margin:34px 0 10px; }
body.algLegal .algTableWrap{ max-width:900px; overflow-x:auto; margin:22px 0 30px;
  -webkit-overflow-scrolling:touch; }
body.algLegal .algTableWrap table{ width:100%; min-width:560px; border-collapse:collapse; }
body.algLegal .algTableWrap th{ background:#518073; color:#fff; text-align:left;
  font-family:"Quicksand",sans-serif; font-size:13px; letter-spacing:.04em; padding:12px 14px; }
body.algLegal .algTableWrap td{ padding:12px 14px; font-size:13px; line-height:1.7;
  border-bottom:1px solid rgba(81,128,115,.18); vertical-align:top; }
body.algLegal .algTableWrap tr:nth-child(even) td{ background:rgba(81,128,115,.05); }
/* the source table has no <th>: its header row is a normal <tr> whose cells hold <b>. Style
   that row as a header (after the zebra rule, so it wins) rather than rewriting the markup. */
body.algLegal .algTableWrap tr:first-child td{ background:#518073; color:#fff;
  font-family:"Quicksand",sans-serif; font-size:13px; letter-spacing:.04em; }
body.algLegal .algTableWrap tr:first-child td b,
body.algLegal .algTableWrap tr:first-child td strong,
body.algLegal .algTableWrap tr:first-child td span{ color:#fff; }
body.algLegal .algLegalHead .headline{ color:#335149; }

/* ==== second-pass review fixes ================================================================
   Each block below answers one located defect from _recon/visual_clinicaortopedicaalgodeia.pt.json
   and is written in the site's own tokens (sage #518073, amber #f5a95d, cream #f7f5f0). */

/* --- insurer wall ---------------------------------------------------------------------------
   The sources are 110x110 square PNGs and the old rule capped them at max-height:56px, which is
   why "Future Healthcare", "Saúde Prime", "Generali" and "Victoria" were unreadable: a wordmark
   inside a square canvas only gets ~40px of usable width at that cap. They also sat in two
   centred flex rows of 12 and 8 that lined up with nothing. A fixed 5-column grid of white tiles
   gives every mark the same frame, so the ones drawn on a dark ground stop reading as broken
   images and the pale ones stop looking half-loaded; grayscale is dropped for the same reason —
   an insurer mark is recognised by its colour. */
/* FLEX, not grid, and the column width is computed rather than 1fr. There are 19 insurers and no
   column count divides 19, so a grid always leaves the last row anchored left with a hole beside
   it — at five columns that hole sat next to the pale Multicare tile and the row read as two
   missing logos rather than one short row. Flex with justify-content:center fills every full row
   exactly as the grid did and centres only the short one, which reads as the end of a list
   instead of a gap. The -1px in each basis absorbs sub-pixel rounding: without it a row of five
   can total 100.01% and drop its last tile to the next line. */
.algLogoStrip{ display:flex; flex-wrap:wrap; justify-content:center; align-items:stretch;
  gap:14px; list-style:none; margin:0; padding:0; }
.algLogoStrip .algLogo{ margin:0; padding:0; display:flex;
  flex:0 0 calc((100% - 4*14px - 1px)/5); }
.algLogoStrip .algLogo{ background:#fff; border:1px solid rgba(81,128,115,.14); border-radius:10px;
  align-items:center; justify-content:center; padding:12px; min-height:104px;
  transition:border-color .25s ease, box-shadow .25s ease; }
.algLogoStrip .algLogo:hover{ border-color:rgba(245,169,93,.65);
  box-shadow:0 4px 16px rgba(51,81,73,.12); }
/* 18 of the 19 marks are square 110x110 canvases and cap on height at 86px, so the width cap
   binds on one file only: Multicare, whose wordmark is a wide lockup that had to leave its square
   canvas to be readable at all (see below). 150px keeps it in scale with its neighbours instead
   of running the full width of its tile. */
.algLogoStrip img{ display:block; width:auto; height:auto; max-height:86px; max-width:150px;
  filter:none; opacity:1; }
@media (max-width:1199px){
  .algLogoStrip .algLogo{ flex:0 0 calc((100% - 3*14px - 1px)/4); } }
@media (max-width:767px){ .algLogoStrip{ gap:10px; }
  .algLogoStrip .algLogo{ flex:0 0 calc((100% - 2*10px - 1px)/3); min-height:84px; padding:9px; }
  .algLogoStrip img{ max-height:64px; max-width:118px; } }
@media (max-width:430px){
  .algLogoStrip .algLogo{ flex:0 0 calc((100% - 10px - 1px)/2); } }

/* --- testimonials ---------------------------------------------------------------------------
   The theme's body colour is a pale blue-grey meant for a white ground; on the amber fill the
   quotes were barely legible while the bold author names underneath were not, so the block read
   as unfinished. The four quotes are also of very different lengths, which left a ragged hole
   above the button. Putting each quote on a cream card fixes both: dark ink on cream is readable,
   and stretched flex items end level. */
/* The theme lays these columns out with floats, so the four cards ended at four different
   heights. Every level between the row and the card has to become a flex item for the cards to
   stretch level, hence the chain below; !important because the theme's own float/display rules
   are more specific. */
/* scoped to .col-md-3: the section's other two rows are single col-md-12 items (the heading and
   the button) and must keep the theme's own block layout. flex-basis 25% with border-box because
   the theme's columns are content-box with gutter padding, so as flex items they overflow the row
   and get shrunk to two thirds of their column width. */
.algTestimonials .boldRow > .boldRowInner:has(> .rowItem.col-md-3){ display:flex;
  flex-wrap:wrap; align-items:stretch; }
.algTestimonials .boldRow > .boldRowInner > .rowItem.col-md-3{ float:none; display:flex;
  box-sizing:border-box; flex:0 0 25%; max-width:25%; }
.algTestimonials .boldRow > .boldRowInner > .rowItem.col-md-3 > .rowItemContent{ display:flex;
  flex-direction:column; width:100%; }
/* below the column the theme's own block layout is left alone - only the height is chained down,
   because turning these into flex items too collapsed the card to half its column width */
.algTestimonials .rowItem.col-md-3 .boldInnerRow{ flex:1 1 auto; display:block; }
.algTestimonials .rowItem.col-md-3 .boldInnerRow,
.algTestimonials .rowItem.col-md-3 .boldInnerRow > .boldRowInner,
.algTestimonials .rowItem.col-md-3 .rowInnerItem{ height:100%; }
/* block-level flex container (not a flex ITEM - as an item it collapsed to half the column) so
   the cream card can take the full height the stretched column now has */
.algTestimonials .rowItem.col-md-3 .rowInnerItem{ display:flex; }
.algTestimonials .rowInnerItem > .rowItemContent{ background:#f7f5f0; border-radius:14px;
  padding:24px 24px 20px; flex:1 1 auto; box-shadow:0 3px 14px rgba(51,81,73,.10); }
/* the theme's body ink is a pale blue-grey meant for a white ground; on cream it is the quote
   that must read, not just the bold name under it */
.algTestimonials .rowInnerItem .btText,
.algTestimonials .rowInnerItem .btText p,
.algTestimonials .rowInnerItem .btText p.p1,
.algTestimonials .rowInnerItem .btText span{ color:#413b33 !important; }
.algTestimonials .rowInnerItem .btText p.p1{ font-size:14px; line-height:1.75; }
.algTestimonials .rowInnerItem .btText p b{ color:#518073 !important; }
.algTestimonials .rowInnerItem .btIcoHolder{ color:#f5a95d; }
@media (max-width:991px){
  .algTestimonials .boldRow > .boldRowInner:has(> .rowItem.col-md-3){ display:block; }
  .algTestimonials .boldRow > .boldRowInner > .rowItem.col-md-3{ display:block; float:left;
    flex:none; max-width:none; }
  .algTestimonials .rowInnerItem > .rowItemContent{ margin-bottom:20px; } }

/* --- homepage "Serviços" menu panel ---------------------------------------------------------
   Five plain links on an amber slab with no affordance at all, and on phone the slab sat flush
   against the green card below it while every other pair had a gutter. */
.algServicesPanel .menu li{ list-style:none; margin:0; border-top:1px solid rgba(255,255,255,.42); }
.algServicesPanel .menu li:last-child{ border-bottom:1px solid rgba(255,255,255,.42); }
.algServicesPanel .menu a{ display:block; padding:11px 26px 11px 0; position:relative;
  color:#3d2c17; font-family:"Quicksand",sans-serif; letter-spacing:.02em;
  transition:color .2s ease, padding .2s ease; }
.algServicesPanel .menu a:after{ content:"›"; position:absolute; right:6px; top:50%;
  transform:translateY(-52%); font-size:20px; line-height:1; color:#fff; opacity:.75; }
.algServicesPanel .menu a:hover{ color:#fff; padding-left:6px; }
.algServicesPanel .menu a:hover:after{ opacity:1; right:2px; }
@media (max-width:991px){ .algServicesPanel{ margin-bottom:24px; } }

/* --- portfolio item sidebar ------------------------------------------------------------------
   The right column carried one two-line <dl> and then ~1500px of nothing beside the article.
   It is filled from the site's own contactos page (the same two numbers, address and email it
   publishes there) and from the service menu — no invented facts. */
.algAside{ text-align:left; position:sticky; top:96px; }
.algAside .btArticleMeta{ margin:0 0 22px; }
.algAsideCard{ background:#f7f5f0; border-radius:14px; padding:20px 22px; margin:0 0 18px; }
.algAsideCard h4{ font-family:"Abhaya Libre",serif; font-size:21px; color:#518073;
  margin:0 0 12px; }
.algAsideCard p{ margin:0 0 12px; font-size:14px; line-height:1.5; }
.algAsideCard p span{ display:block; font-size:12px; letter-spacing:.05em;
  text-transform:uppercase; color:#8ba49b; }
.algAsideCard a{ color:#518073; word-break:break-word; }
.algAsideCard a:hover{ color:#f5a95d; }
.algAsideCard ul{ list-style:none; margin:0; padding:0; }
.algAsideCard ul li{ border-top:1px solid rgba(81,128,115,.18); }
.algAsideCard ul li:first-child{ border-top:0; }
.algAsideCard ul a{ display:block; padding:9px 0; font-size:14px; }
.algAsideCard .btBtn{ margin:6px 0 0; }
@media (max-width:767px){ .algAside{ position:static; } }

/* --- body links need to look like links ------------------------------------------------------
   The theme only colours links inside its own widgets, so the outbound sentence to the
   Sociedade Portuguesa de Ortopedia was indistinguishable from the paragraph around it. */
.btContent .btText p a:not(.btBtn){ color:#518073; text-decoration:underline;
  text-underline-offset:2px; }
.btContent .btText p a:not(.btBtn):hover{ color:#f5a95d; }
.btDarkSkin .btText p a:not(.btBtn){ color:#f5a95d; }
/* the client's weave paragraph keeps the surrounding colour by design (rule near the top) */
.content-wraparea a{ color:inherit; }

/* --- RGPD consent row ------------------------------------------------------------------------
   Contact Form 7 ships the checkbox and its label as inline spans; the theme's `input{display:block}`
   put the box on its own line with the text stranded underneath, at both widths. */
.algConsent{ display:flex; align-items:flex-start; gap:10px; font-weight:400; cursor:pointer; }
.algConsent input[type="checkbox"]{ display:inline-block; flex:0 0 auto; width:20px; height:20px;
  margin:2px 0 0; padding:0; appearance:none; -webkit-appearance:none; background:#fff;
  border:1px solid rgba(81,128,115,.45); border-radius:5px; cursor:pointer;
  transition:background .18s ease, border-color .18s ease; }
.algConsent input[type="checkbox"]:checked{ background:#518073; border-color:#518073; }
.algConsent input[type="checkbox"]:checked:after{ content:"✓"; display:block; color:#fff;
  font-size:14px; line-height:18px; text-align:center; }
.algConsent input[type="checkbox"]:focus-visible{ outline:2px solid #f5a95d; outline-offset:2px; }
.algConsent .wpcf7-list-item-label{ font-size:14px; line-height:1.5; }
.algConsent .wpcf7-list-item-label a{ color:#518073; text-decoration:underline; }
.algConsent .wpcf7-list-item-label a:hover{ color:#f5a95d; }

/* --- staff monograms -------------------------------------------------------------------------
   The generator picks one of three grounds from the name's checksum, and one of them is the same
   sage the corpo-clinico section is painted in, so that card lost its edges and read as a hole.
   A hairline frame gives every monogram the same card silhouette whichever ground it drew.

   Put that frame on `.bpgPhoto`, NOT on the <img>. The theme sets `.bpgPhoto{overflow:hidden}`
   and the image fills it exactly, so a box-shadow declared on the image paints entirely outside
   its border box and is clipped away by the parent — it shows up in the computed style and zero
   pixels of it ever reach the screen, which is how the first attempt at this fix passed review
   as "present" while the tile still had no edges. A shadow on the clipping element itself is
   outside its own clip and paints normally. */
.btImage img[src*="alg-avatar-"]{ border-radius:8px; }
.bpgPhoto:has(img[src*="alg-avatar-"]){ border-radius:8px;
  box-shadow:0 0 0 1px rgba(247,245,240,.55), 0 8px 20px rgba(33,53,47,.16); }

/* --- page-headline band ----------------------------------------------------------------------
   The band artwork is 1920x620; with `cover` and no explicit position a short phone header
   cropped it through the middle of an arch, so the motif read as a half-drawn graphic that the
   desktop view did not show at all. Anchor it to its own bottom edge, where the arcade is
   drawn, and give the band a floor height so both viewports show the same complete shape.

   SCOPE THIS TO THE ARTWORK. Written unscoped, it caught every `.btPageHeadline.wBackground`
   on the site — and three of those bands are photographs, not artwork. `100% auto` + bottom on
   a 1920x720 photo inside a 332px band pushes the subject's head out of the top of the frame:
   /corpo-clinico/ and /404.html became four headless torsos and /contactos/ became a strip of
   lawn. The `-band.jpg` attribute match selects exactly the five alg-*-band.jpg arcades
   (/servicos/, /arbitragem/, /politica-privacidade/ and the five /portfolio/* pages) and leaves
   photographs on the theme's own `cover`, which is what they want. */
.boldSection.btPageHeadline.wBackground[style*="-band.jpg"]{ background-position:center bottom;
  background-size:100% auto; background-repeat:no-repeat; }
@media (max-width:1023px){
  .boldSection.btPageHeadline.wBackground[style*="-band.jpg"]{ background-size:cover;
    background-position:center bottom; min-height:168px; } }

/* The photographic bands crop from a fixed anchor instead of the middle, because in both photos
   the subject sits away from centre: the therapists are a cut-out standing on the image's bottom
   edge, so the band must hold their heads (top); the park is shot down a slope, so the lake and
   the trees sit above the middle and a centred crop would still be mostly lawn. */
.boldSection.btPageHeadline.wBackground[style*="Fisioterapeu"]{ background-size:cover;
  background-position:center top; }
.boldSection.btPageHeadline.wBackground[style*="parque-da-algodeia"]{ background-size:cover;
  background-position:center 38%; }

/* The theme prints "; " after every <dd> of an article meta list, because it was written for a
   blog post whose meta list carries Categoria, Autor and Data and needs a separator BETWEEN the
   rows. A portfolio entry on this site carries one row only, so the separator has nothing to
   separate and the rendered line ends "Fisiatria, Serviços;" with a semicolon dangling off it on
   all five /portfolio/* pages. A separator belongs between items, never after the last one. */
.btArticleMeta dd:last-of-type:after{ content:""; }

/* --- HIT AREA AND MINIMUM TYPE SIZE ------------------------------------------------------------
   The client's two words for this were "magnifying glass": copy too small to read and controls too
   small to hit. WCAG 2.5.8 puts the floor at 24x24 CSS px and 2.5.5 the standard at 44.

   Almost every failure here is one shape. A standalone link set `display:inline` has a border box
   the height of its glyphs - the footer's legal links are 133x16 - even though the line box around
   them is 22px. Vertical padding on an INLINE box grows the border box, and so the hit target,
   without changing the height of the line box, so nothing on the page moves and no spacing is
   redesigned. That is why these are padding and not line-height or min-height.

   The exceptions are the three real controls: the top-bar social icons (27x18), the service-card
   icon links (21x21) and the footer menu, which is display:block and so is given the same 24px
   floor the honest way.
   --------------------------------------------------------------------------------------------- */
.btText p a,
.btText li a { padding-block: 5px; }
a.btIconWidget { padding-block: 5px; }
.servicesItem .btIcoHolder { min-width: 24px; min-height: 24px; }
/* The theme's own footer-menu rule loads from an inline <style> after this file, so this
   one is marked important rather than left to lose the cascade silently. */
.menu-bottom-footer-menu-container #menu-bottom-footer-menu li a {
  padding-top: 3px !important; padding-bottom: 3px !important;
}
/* OpenStreetMap requires the attribution to stay legible; 11px is below the floor a person can
   read and its link was 172x14. 12px keeps the credit unobtrusive and readable. */
.algMap .algMap__credit { font-size: 12px; }
.algMap .algMap__credit a { padding-block: 5px; }
/* The portfolio pages carry a contact aside whose phone and e-mail links are 93x18 and 230x18 -
   the same inline-link shape as the footer, on a template the first pass did not sample. */
.algAside .algAsideCard p a { padding-block: 4px; }
