/* Inner-page furniture. Loaded after home.css and deliberately built on its utilities: .sb-wrap,
   .sb-pad, .sb-grid, .sb-card, .sb-button, .sb-text-link, .sb-badge, .sb-chip, .sb-dark,
   .sb-size-card, .sb-blog-card, .sb-stats and the design tokens in :root.
   Each block's own rules now live in storagbogota-blocks/<block>/style.css; what stays here is
   what more than one block shares. */

/* Storag Bogota sections are full-bleed bands that carry their own .sb-wrap gutter, so they opt out
   of the 760px prose measure style.css applies to ordinary page content (same rule the homepage
   gets from .sb-home > .sb-section). Works whether or not the block is set to full width. */
.sb-content > .sb-section{width:100%;max-width:none;margin-inline:0}
/* Inside a Columns row (the quote form beside its rail) the column is already the gutter, so the
   block's own .sb-wrap measure would double it. */
.wp-block-column .sb-section .sb-wrap{width:100%;padding-inline:0}
.wp-block-column .sb-section .sb-pad-small{padding-block:0}
/* The rail sits beside the heading, not stretched to the form's height (reference lg:items-start). */
.sb-content > .wp-block-columns{align-items:flex-start}
.wp-block-column .sb-p-page-intro+.sb-p-quote-form .sb-wrap{padding-top:0}
/* ---- shared page furniture ---------------------------------------------------------------- */
/* Reference `text-3xl` (app/globals.css --t-3xl): the same fluid ramp h2 already uses. */
.sb-section h1{font-size:clamp(1.75rem,1.4rem + 1.7vw,2.5rem);line-height:1.1}
/* Every inner-page section is py-14 / md:py-20 in the reference, never the homepage's py-24, so the
   measure is set once here instead of per block. Phones keep home.css's 56px (py-14); the blocks with
   their own rhythm override this further down, where the cascade puts them last. */
@media(min-width:768px){:where(.sb-section[class*="sb-p-"]) .sb-pad{padding-block:80px}}
/* Blocks the reference pads on the bottom only; the block above owns the gap. */
.sb-p-size-compare .sb-pad{padding-top:0}
.sb-p-sede-gallery .sb-pad-small,.sb-p-faq-hub .sb-pad-small{padding-top:0}
.sb-h2-small{font-size:clamp(1.4rem,1.25rem + .8vw,1.75rem)!important;max-width:34ch}
.sb-prose{display:flex;flex-direction:column;gap:16px;max-width:65ch;margin-top:20px;font-size:16px;line-height:1.625}
.sb-prose p{color:var(--sb-ink-2)}
.sb-sede-custom-content .sb-prose{margin-top:0}
.sb-sede-custom-content .sb-prose a{color:var(--sb-primary);text-decoration:underline;text-underline-offset:3px}
.sb-sede-custom-content .sb-prose ul{padding-left:24px;list-style:disc}
.sb-sede-custom-content .sb-prose ol{padding-left:24px;list-style:decimal}
.sb-tinted{background:var(--sb-soft)!important}
.sb-icon-well{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:var(--sb-r-md);background:var(--sb-soft);color:var(--sb-primary)}
.sb-tinted>.sb-icon-well,.sb-tinted .sb-card-body>.sb-icon-well{border:1px solid var(--sb-line);background:#fff}
.sb-icon-well .sb-icon{width:24px;height:24px}
.sb-chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:20px;padding:0;list-style:none}
.sb-chip-row li{border:1px solid var(--sb-line);border-radius:99px;background:var(--sb-bg);padding:8px 16px;font-size:15px;color:var(--sb-ink-2)}
.sb-check-list{display:flex;flex-direction:column;gap:8px;margin-top:8px!important;padding:0;list-style:none;font-size:15px;line-height:1.45;color:var(--sb-ink-2)}
.sb-check-list li{display:flex;align-items:flex-start;gap:8px}
.sb-check-list .sb-icon{width:16px;height:16px;flex-shrink:0;margin-top:3px;color:var(--sb-primary)}
/* Two unequal columns: heading rail left, the working cell right (SizeRecommender, AccessSecurity). */
.sb-split,.sb-split-photo{display:grid;gap:32px}
@media(min-width:1024px){
.sb-split{grid-template-columns:1fr 1.7fr;gap:56px}
/* AccessSecurity.tsx is the one 1fr/1.1fr split; the recommender and the availability list are 1fr/1.7fr. */
    .sb-p-access-security .sb-split{grid-template-columns:1fr 1.1fr}
.sb-split-photo{grid-template-columns:1.15fr 1fr;gap:56px}
}
.sb-framed-photo{border:1px solid var(--sb-line);border-radius:var(--sb-r-lg);overflow:hidden;box-shadow:var(--sb-sh-2)}
.sb-framed-photo img{width:100%;height:100%;object-fit:cover;aspect-ratio:4/3}
@media(min-width:1024px){
.sb-framed-photo img{aspect-ratio:auto;min-height:380px}
}
.sb-menu-list{display:flex;flex-direction:column}
.sb-menu-list li+li{border-top:1px solid var(--sb-line)}
.sb-menu-list a{width:100%;justify-content:space-between;padding-block:10px}
.sb-menu-chips{display:flex;flex-wrap:wrap;gap:8px}
.sb-menu-chips a:hover span{text-decoration:none}
.sb-crumbs .sb-icon{width:12px;height:12px}
/* ---- PageIntro.tsx ------------------------------------------------------------------------ */

/* ---- AxisChooser.tsx (sede rows) --------------------------------------------------------- */
.sb-p-axis-sizes h2,.sb-p-axis-sedes h2,.sb-p-included-grid h2,.sb-p-faq-accordion h2{max-width:24ch}
.sb-p-axis-sizes .sb-intro,.sb-p-axis-sedes .sb-intro{max-width:65ch;margin-top:12px!important;font-size:15px;line-height:1.5}
/* AxisChooser's SizeCards: an `aspect-[16/10]` plate over a body on `p-5 md:p-6`, where the
   homepage SizeStrip the shared .sb-size-card is written for has a 4:3 plate and a flat `p-6`.
   Same split SizesAtSede.tsx has, and the block states it the same way. */
.sb-p-axis-sizes .sb-size-art{aspect-ratio:16/10}
.sb-p-axis-sizes .sb-card-body{padding:20px}
@media(min-width:768px){.sb-p-axis-sizes .sb-card-body{padding:24px}}
.sb-sede-row>.sb-icon{flex-shrink:0;width:16px;height:16px;color:var(--sb-primary);transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-sede-row:hover>.sb-icon{transform:translateX(4px)}
.sb-service-lead .sb-card-body{display:flex;flex:1;flex-direction:row!important;align-items:flex-start;gap:16px;padding:24px}
.sb-service-lead .sb-card-body>.sb-icon{width:26px;height:26px;flex-shrink:0;margin-top:4px;color:var(--sb-primary)}
.sb-service-axis .sb-card{transition:transform var(--sb-d) var(--sb-ease),box-shadow var(--sb-d) var(--sb-ease),border-color var(--sb-d) var(--sb-ease)}
.sb-service-axis .sb-card:hover{transform:translateY(calc(-1 * var(--sb-hover-lift)));border-color:var(--sb-muted-2);box-shadow:var(--sb-sh-2)}
.sb-service-axis .sb-card:hover h3{color:var(--sb-primary)}
.sb-service-axis .sb-text-link{min-height:0;margin-top:auto;padding-top:16px;font-size:14px;line-height:21px;color:var(--sb-primary)}
.sb-service-axis .sb-text-link .sb-icon{width:14px;height:14px;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-service-axis .sb-card:hover .sb-text-link{color:var(--sb-primary-deep)}
.sb-service-axis .sb-card:hover .sb-text-link .sb-icon{transform:translateX(4px)}
@media(min-width:768px){
.sb-service-lead .sb-card-body{padding:28px}
}
.sb-p-axis-services .sb-intro{margin-top:12px!important;max-width:65ch;font-size:15px;line-height:1.5}
.sb-p-axis-services .sb-pad>h2,.sb-p-axis-services .sb-pad>.sb-intro{transform:translateY(12px)}
.sb-included-lead .sb-icon-well{width:64px;height:64px}
.sb-included-lead .sb-icon-well .sb-icon{width:32px;height:32px}
.sb-section .sb-price-link{display:inline-flex;align-items:center;gap:6px;min-height:44px;border-radius:2px;font-size:15px;font-weight:500;color:var(--sb-primary);transition:color var(--sb-d-fast) var(--sb-ease)}
.sb-price-link .sb-icon{width:15px;height:15px;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-price-link:hover .sb-icon{transform:translateX(4px)}
/* Pillar-page sections use py-14 on phones and py-20 from md, rather than homepage py-24. */
@media(min-width:768px){
    .sb-p-price-band .sb-pad-small{padding-block:64px}
}
.sb-bridge .sb-button{margin-top:28px}
.sb-use-cases .sb-chip-row{margin-top:0}
.sb-p-m3-guide .sb-intro{margin-top:12px!important;max-width:65ch;font-size:15px;line-height:1.5}
.sb-guide-grid .sb-check-list li{line-height:1.375}
.sb-p-m3-guide .sb-text-link{margin-top:24px;color:var(--sb-primary)}
/* ---- SizeRecommender.tsx / AvailabilityBySede.tsx: one white cell of rows ------------------ */
.sb-row-list{padding:0 24px;margin:0;list-style:none;border:1px solid var(--sb-line);border-radius:var(--sb-r-lg);background:#fff;box-shadow:var(--sb-sh-1)}
.sb-row-list>li+li{border-top:1px solid var(--sb-line)}
.sb-row-list a{display:flex;align-items:center;gap:16px;padding-block:20px;border-radius:var(--sb-r-md)}
.sb-row-main{display:flex;flex:1;min-width:0;flex-direction:column;gap:4px}
.sb-row-head{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px}
.sb-row-head h3{margin:0;font-size:18px;font-weight:600}
.sb-row-head small{font-size:15px;font-weight:500;color:var(--sb-muted)}
.sb-row-list a:hover .sb-row-head h3{color:var(--sb-primary)}
.sb-row-body{max-width:52ch;font-size:15px;line-height:1.6;color:var(--sb-ink-2)}
.sb-row-list .sb-icon{flex-shrink:0;width:16px;height:16px;color:var(--sb-primary);transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-row-list a:hover .sb-row-action{color:var(--sb-primary-deep)}
.sb-row-list a:hover .sb-icon{transform:translateX(4px)}
.sb-feature-rows{display:flex;flex-direction:column;gap:12px;padding:0;margin:0;list-style:none}
.sb-feature-rows>li{display:flex;align-items:center;gap:12px;padding:14px 16px;border:1px solid var(--sb-line);border-radius:var(--sb-r-md);background:var(--sb-surface);font-size:15px;font-weight:500;color:var(--sb-ink)}
.sb-feature-rows .sb-icon{flex-shrink:0;width:20px;height:20px;color:var(--sb-primary)}
.sb-feature-rows-light .sb-icon-well{width:44px;height:44px}
.sb-feature-rows-light .sb-icon-well .sb-icon{width:22px;height:22px}
.sb-teaser-rows .sb-icon{flex-shrink:0;width:22px;height:22px;color:var(--sb-primary)}
.sb-teaser-rows .sb-icon:last-child{width:16px;height:16px;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-teaser-rows a:hover .sb-icon:last-child{transform:translateX(4px)}
/* ---- SedesHero.tsx / SedeLocation.tsx: the Leaflet cell ---------------------------------- */
/* The shared .sb-map-shell carries the homepage's 540px min-height; page maps set their own. */
/* align-self so the fixed-height map is not stretched to the taller cards column, which would
   leave the shell's background showing under the tiles. */
.sb-p-sedes-hero .sb-map-shell,.sb-p-sede-location .sb-map-shell{min-height:0;align-self:start}
/* Leaflet's internal panes run z-index 400-1000, so without a stacking context of its own the map
   paints over the caption above it (globals.css:243-249 does the same on the reference). */
.sb-page-map{height:340px;border-radius:var(--sb-r-lg);background:#30343c;position:relative;z-index:0;isolation:isolate}
@media(min-width:768px){
.sb-page-map{height:440px}
}
.sb-p-sede-location .sb-sede-tiles{filter:grayscale(1) contrast(.9) brightness(.9)}
.sb-page-map-pin{display:block;width:100%;height:100%;border:2px solid var(--sb-bg-deep);border-radius:50%;background:var(--sb-yellow);box-shadow:0 0 0 4px rgba(239,230,53,.18);transition:transform var(--sb-d) var(--sb-ease),box-shadow var(--sb-d) var(--sb-ease)}
.sb-page-map-pin-featured{border-width:3px;box-shadow:0 0 0 6px rgba(239,230,53,.25)}
@keyframes sb-page-pin-pulse{50%{transform:scale(1.45)}}
.sb-page-pin-pulse{animation:sb-page-pin-pulse 1.2s var(--sb-ease) .6s 1}
.sb-p-sede-location .sb-sede-arc{stroke:var(--sb-yellow);stroke-opacity:.35;stroke-dasharray:4 6}
/* Leaflet popup, ported from the reference globals.css:251-266. There the map cell is itself a
   `.dark-cell` (SedeMap.tsx:42), so the popup inherits the dark surface/ink and the logo yellow for
   links; the same local scope is declared here rather than on the markup, which would mean a block
   rebuild. min-height on the links is the 44px tap target the reference sets. */
.sb-page-map{--sb-surface:#1b1e26;--sb-ink:#f5f6f8;--sb-line:rgba(255,255,255,.12)}
.sb-page-map .leaflet-popup-content-wrapper,.sb-page-map .leaflet-popup-tip{background:var(--sb-surface);color:var(--sb-ink)}
.sb-page-map .leaflet-popup-content-wrapper{border-radius:var(--sb-r-md);box-shadow:var(--sb-sh-3)}
.sb-page-map .leaflet-popup-content a{display:inline-flex;align-items:center;min-height:44px;color:var(--sb-yellow);font-weight:500}
.sb-page-map .leaflet-bar a{background:var(--sb-surface);border-color:var(--sb-line);color:var(--sb-ink)}
/* --sb-on-brand, not --sb-ink: the reference pairs the yellow chip with --on-accent (#14161b), and
   --sb-ink is re-scoped to near-white inside the map above, which washed the chip's text out. */
.leaflet-tooltip.sb-map-tag{padding:4px 10px;border:0;border-radius:999px;background:var(--sb-yellow);color:var(--sb-on-brand);font-size:12px;font-weight:500;text-align:center;box-shadow:var(--sb-sh-1)}
.leaflet-tooltip.sb-map-tag:before{display:none}
.leaflet-tooltip.sb-map-tag strong{display:block;font-weight:600}
@media(min-width:1024px){
.sb-map-shell-wide .sb-page-map{height:460px}
}
.sb-p-sedes-hero .sb-pad-small{padding-top:8px;padding-bottom:40px}
.sb-p-sedes-hero .sb-intro{margin-top:12px!important;max-width:65ch;font-size:16px;line-height:1.625}
@media(min-width:1024px){
.sb-location-split-multi{grid-template-columns:1.6fr 1fr}
}
.sb-point-links .sb-text-link{color:var(--sb-primary)}
@media(min-width:768px){
.sb-location-split:not(.sb-location-split-multi) .sb-point-list>li{display:flex;align-items:center;justify-content:space-between;gap:24px}
}
.sb-p-sede-featured .sb-pad-small{padding-top:0;padding-bottom:48px}
@media(min-width:768px){
.sb-p-sede-featured .sb-pad-small{padding-bottom:64px}
}
.sb-featured-map-link .sb-icon{width:16px;height:16px;flex-shrink:0}
.sb-sede-cell .sb-card-body{padding:20px;align-items:stretch}
.sb-sede-cell address .sb-icon{width:15px;height:15px;flex-shrink:0;color:var(--sb-primary)}
.sb-sede-cell .sb-text-link{margin-top:auto;padding-top:20px;color:var(--sb-primary)}
.sb-sede-cell .sb-text-link .sb-icon{transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-sede-cell:hover .sb-text-link{color:var(--sb-primary-deep)}
.sb-sede-cell:hover .sb-text-link .sb-icon{transform:translateX(4px)}
@media(min-width:768px){
.sb-sede-cell .sb-card-body{padding:24px}
}
.sb-p-sede-grid .sb-pad-small{padding-top:0;padding-bottom:56px}
@media(min-width:768px){
.sb-p-sede-grid .sb-pad-small{padding-bottom:80px}
}
.sb-p-sede-grid .sb-h2-small{font-size:24px!important;line-height:1.15}
/* ---- CoverageProse.tsx ------------------------------------------------------------------- */
.sb-p-coverage-prose .sb-pad{padding-block:56px}
@media(min-width:768px){
.sb-p-coverage-prose .sb-pad{padding-top:80px;padding-bottom:67px}
}
.sb-p-coverage-prose .sb-split-photo>div{transform:translateY(12px)}
@media(min-width:1024px){
.sb-p-coverage-prose .sb-framed-photo{height:450px;align-self:start}
}
.sb-coverage-link .sb-icon{width:15px;height:15px;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-coverage-link:hover .sb-icon{transform:translateX(4px)}
.sb-sede-meta .sb-icon{width:18px;height:18px;flex-shrink:0;color:var(--sb-primary)}
.sb-p-sede-hero .sb-buttons{margin-top:24px}
/* ---- SizesAtSede.tsx / SizeCompareStrip.tsx ---------------------------------------------- */
.sb-p-sizes-at-sede .sb-cards{margin-top:32px}
.sb-size-foot .sb-icon{width:16px;height:16px;color:var(--sb-primary);transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-size-card:hover .sb-size-foot .sb-icon{transform:translateX(4px)}
.sb-compare-head:first-child:has(.sb-icon:first-child){justify-content:flex-start}
.sb-compare-card .sb-icon{width:16px;height:16px;flex-shrink:0;color:var(--sb-primary);transition:transform var(--sb-d-fast) var(--sb-ease)}
/* The previous card's arrow points back. */
.sb-compare-head .sb-icon:first-child{transform:rotate(180deg)}
a.sb-compare-card:hover .sb-compare-head .sb-icon:first-child{transform:rotate(180deg) translateX(4px)}
a.sb-compare-card:hover .sb-compare-head .sb-icon:last-child{transform:translateX(4px)}
.sb-compare-card .sb-size-range{display:block;margin-top:4px;font-size:15px;font-weight:600;color:var(--sb-ink-2)}
.sb-compare-current .sb-badge{align-self:flex-start;margin-bottom:12px}
.sb-size-card-current{border:2px solid var(--sb-primary);background:var(--sb-primary-select);box-shadow:var(--sb-sh-2)}
.sb-size-card-current .sb-badge{margin-bottom:8px}
.sb-hours-well .sb-icon{width:22px;height:22px;flex-shrink:0;margin-top:2px;color:var(--sb-primary)}
.sb-p-zones-served .sb-chip-row{margin-top:20px}
.sb-p-zones-served .sb-chip-row li{background:#fff;padding:4px 12px;font-size:14px}
.sb-zone-links-row .sb-text-link{color:var(--sb-primary)}
.sb-zone-links-row .sb-text-link:hover{color:var(--sb-primary-deep)}
.sb-price-table .sb-text-link{gap:6px;font-size:15px;line-height:22.5px;color:var(--sb-primary)}
.sb-price-table .sb-text-link .sb-icon{width:15px;height:15px;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-price-table .sb-text-link:hover{color:var(--sb-primary-deep)}
.sb-price-table .sb-text-link:hover .sb-icon{transform:translateX(4px)}
.sb-p-price-table .sb-intro{margin-top:12px!important;max-width:65ch;font-size:15px;line-height:1.5}
.sb-p-price-table .sb-pad>h2,.sb-p-price-table .sb-pad>.sb-intro,.sb-p-price-table .sb-price-table{transform:translateY(12px)}
.sb-p-price-factors .sb-pad>h2{transform:translateY(12px)}
.sb-included-split .sb-check-list{margin-top:24px!important;gap:16px;font-size:15px;line-height:1.625;color:var(--sb-ink)}
.sb-included-split .sb-icon{width:22px;height:22px;margin-top:1px}
.sb-check-list-plus .sb-icon{color:var(--sb-muted)}
.sb-included-split .sb-small{margin-top:auto;padding-top:24px;font-size:14px;line-height:1.5;color:var(--sb-muted)}
.sb-security-lead .sb-card-body{display:flex;flex-direction:row;align-items:flex-start;gap:16px;padding:28px}
@media(min-width:768px){
.sb-security-lead .sb-card-body{padding:32px}
}
.sb-p-security-features .sb-text-link{margin-top:24px;color:var(--sb-primary)}
.sb-faq-index .sb-icon{width:16px;height:16px;color:var(--sb-primary);transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-faq-index a:hover .sb-icon{transform:translateY(2px)}
.sb-faq-group .sb-faq-list{margin-top:24px;max-width:880px}
/* ---- ContactRail.tsx / TrustRail.tsx: dark side rails ------------------------------------ */
/* Designed to sit in a column beside the quote form, so they carry no gutter of their own.
   Dropped straight onto a page they would go edge to edge, so a direct child gets the .sb-wrap
   measure; inside a Columns block this selector no longer matches and the rail fills its column. */
.sb-content > .sb-p-contact-rail,.sb-content > .sb-p-trust-rail,.sb-content > .sb-p-faq-index{width:min(100%,1280px);margin-inline:auto;padding-inline:40px}
@media(max-width:1023px){
.sb-content > .sb-p-contact-rail,.sb-content > .sb-p-trust-rail,.sb-content > .sb-p-faq-index{padding-inline:32px}
}
@media(max-width:767px){
.sb-content > .sb-p-contact-rail,.sb-content > .sb-p-trust-rail,.sb-content > .sb-p-faq-index{padding-inline:20px}
}
.sb-rail{padding:24px;box-shadow:var(--sb-sh-3)}
.sb-rail h2{font-family:"Bricolage Grotesque",sans-serif;font-size:clamp(1.3rem,1.2rem + .6vw,1.5rem)}
.sb-rail>ul{display:grid;gap:20px;margin-top:24px;padding:0;list-style:none}
.sb-rail>ul li{display:flex;align-items:flex-start;gap:16px}
.sb-rail-icon .sb-icon{width:22px;height:22px}
.sb-rail small{display:block;font-size:13px;color:var(--sb-muted)}
.sb-rail a,.sb-rail strong{display:block;font-size:17px;font-weight:600;word-break:break-word}
.sb-rail a:hover{color:var(--sb-yellow)}
.sb-rail small:last-child{margin-top:2px;font-size:14px}
/* TrustRail.tsx: five figures in two columns, the first spanning both so none is left orphaned,
   then the security capability line under a rule. */
.sb-trust-rail .sb-stats{grid-template-columns:repeat(2,1fr);column-gap:24px;row-gap:20px;margin-top:24px;text-align:left}
.sb-trust-rail .sb-stats>div{align-items:flex-start}
.sb-trust-rail .sb-stats>div:first-child{grid-column:1/-1}
.sb-trust-rail .sb-stats>div:last-child{grid-column:auto}
.sb-trust-rail .sb-stats strong{font-size:clamp(1.75rem,1.4rem + 1.7vw,2.5rem)}
.sb-rail-note .sb-icon{width:22px;height:22px;flex-shrink:0;margin-top:2px;color:var(--sb-yellow)}
@media(min-width:768px){
.sb-rail{padding:32px}
}
@media(min-width:1024px){
.sb-rail{position:sticky;top:112px}
}
.sb-legal .sb-prose{margin-top:12px}
.sb-legal .sb-h2-small{font-size:clamp(1.15rem,1.05rem + .5vw,1.35rem)!important}
/* ---- BlogIndex.tsx: category filter over the shared article card ------------------------- */
.sb-blog-index-head{display:flex;flex-direction:column;gap:20px}
.sb-p-blog-index .sb-blog-card[hidden]{display:none!important}
.sb-p-blog-index .sb-pad{padding-top:0;padding-bottom:56px}
@media(min-width:768px){
.sb-p-blog-index .sb-pad{padding-bottom:80px}
}
.sb-p-blog-index .sb-blog-featured .sb-blog-photo{aspect-ratio:16/10}
.sb-p-blog-index .sb-blog-featured .sb-card-body{padding:24px}
.sb-p-blog-index .sb-blog-featured .sb-blog-more{padding-top:24px}
.sb-blog-pagination{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;margin-top:32px}
.sb-blog-pagination a{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 14px;border:1px solid var(--sb-line);border-radius:999px;background:var(--sb-surface);font-size:14px;font-weight:500;color:var(--sb-ink-2);transition:color var(--sb-d-fast) var(--sb-ease),border-color var(--sb-d-fast) var(--sb-ease)}
.sb-blog-pagination a:hover{border-color:var(--sb-ink);color:var(--sb-ink)}
.sb-blog-pagination a[aria-current=page]{border-color:var(--sb-primary);background:var(--sb-primary);color:#fff}
@media(min-width:768px){
.sb-p-blog-index .sb-blog-featured .sb-card-body{padding:32px}
}
@media(min-width:1024px){
.sb-p-blog-index .sb-blog-featured .sb-blog-photo{height:100%;min-height:380px;aspect-ratio:auto}
.sb-p-blog-index .sb-blog-featured .sb-card-body{justify-content:center;padding:40px}
}
@media(min-width:768px){
.sb-blog-index-head{flex-direction:row;align-items:flex-end;justify-content:space-between;gap:32px}
}
.sb-article-cta{font-weight:500;color:var(--sb-ink)!important}
/* ArticleRoute.tsx: article header, reading column and sticky table of contents. */
.sb-article-main{background:var(--sb-bg)}
/* home.css scopes the focus ring to `.sb-section`, and the article body, its table of contents and
   the closing band sit outside one, so keyboard focus had no visible ring. --sb-ring is the logo
   yellow inside .sb-dark, which is what the reference's `ring-ring` resolves to there too. */
.sb-article-page a:focus-visible,.sb-article-page summary:focus-visible,.sb-article-next a:focus-visible{outline:2px solid var(--sb-ring);outline-offset:2px}
/* The article crumb is the shared breadcrumb block now (single.php). The trail wraps rather than
   truncating, the way Breadcrumb.tsx does: its ol is flex-wrap and an article title is long. */
.sb-article-header{padding-top:16px!important}
.sb-article-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin:0!important;color:var(--sb-muted);font-size:13px;line-height:1.5}
/* ArticleHeader.tsx chip: `bg-accent px-2.5 py-0.5 text-[12px] font-medium text-on-accent` — --accent
   is the logo's kraft #866a41 with white text, not the yellow CTA fill (yellow is --brand). */
.sb-article-meta .sb-badge{padding:2px 10px;font-size:12px;font-weight:500;line-height:1.5;background:var(--sb-accent);color:var(--sb-on-accent)}
.sb-article-header h1{max-width:26ch;margin:16px 0 0!important;font-size:clamp(1.75rem,1.4rem + 1.7vw,2.5rem)!important;line-height:1.1!important;letter-spacing:-.02em}
.sb-article-lead{max-width:60ch;margin:20px 0 0!important;color:var(--sb-ink-2);font-size:18px!important;line-height:1.625!important}
.sb-article-cover{position:relative;width:100%;margin-top:40px;aspect-ratio:16/10;overflow:hidden;border:1px solid var(--sb-line);border-radius:var(--sb-r-lg);box-shadow:var(--sb-sh-2)}
.sb-article-cover img{display:block;width:100%;height:100%;object-fit:cover}
/* Photo.tsx `tint`: the --primary-soft multiply wash every reference photo carries, so the cover
   reads as part of the same set instead of a rawer, cooler plate. */
.sb-article-cover::after{content:"";position:absolute;inset:0;background:var(--sb-soft);opacity:.25;mix-blend-mode:multiply;pointer-events:none}
/* ArticleBody.tsx puts `text-[17px]` on the grid itself, so its `minmax(0,65ch)` column is measured
   in 17px characters. Inheriting 16px here made the reading column ~50px narrower than the source. */
.sb-article-layout{display:grid;gap:32px;padding-top:40px!important;padding-bottom:40px!important;font-size:17px}
.sb-article-content{order:2;max-width:65ch;color:var(--sb-ink-2);font-size:17px;line-height:1.625}
.sb-article-content>*:first-child{margin-top:0}
/* The reference column is a flex stack with no trailing margin; a block-flow margin-bottom on the
   last paragraph cannot collapse out of the grid item, and padded the band 20px down. */
.sb-article-content>*:last-child{margin-bottom:0}
.sb-article-content p{margin:20px 0}
.sb-article-content h2{margin:48px 0 0;scroll-margin-top:112px;color:var(--sb-ink);font-size:clamp(1.25rem,1.15rem + .5vw,1.5rem);line-height:1.15;letter-spacing:-.02em}
.sb-article-content h2+p{margin-top:20px}
/* ArticleBody.tsx: `ul` is a flex column on gap-3, each row `flex gap-3` behind a 20px Phosphor
   glyph — a check, or an X on the "qué no se puede guardar" list. No browser bullets. */
.sb-article-content ol{margin:20px 0;padding-left:24px}
.sb-article-content ol li{margin:10px 0;padding-left:2px}
.sb-article-content ul{display:flex;flex-direction:column;gap:12px;margin:20px 0;padding:0;list-style:none}
.sb-article-content ul li{display:flex;gap:12px;margin:0;padding:0}
.sb-article-content ul li::before{content:"";flex:0 0 20px;width:20px;height:20px;margin-top:3px;background:currentColor;color:var(--sb-ink);-webkit-mask:var(--sb-list-mark) center/20px 20px no-repeat;mask:var(--sb-list-mark) center/20px 20px no-repeat}
.sb-article-content ul{--sb-list-mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'>%3Cpath d='M229.66 77.66l-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69 218.34 66.34a8 8 0 0 1 11.32 11.32Z'/%3E%3C/svg%3E")}
.sb-article-list-x{--sb-list-mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='%23000'>%3Cpath d='M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128 50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z'/%3E%3C/svg%3E")}
.sb-article-list-x li::before{color:var(--sb-muted)}
.sb-article-content a{color:var(--sb-ink);font-weight:500;text-decoration:underline;text-decoration-color:var(--sb-muted-2);text-decoration-thickness:1px;text-underline-offset:5px}
/* ArticleBody.tsx prose link: only the underline deepens on hover (`hover:decoration-ink`); the text
   colour stays --ink, so a paragraph does not change colour under the cursor. */
.sb-article-content p a,.sb-article-content li a{transition:text-decoration-color var(--sb-d-fast) var(--sb-ease)}
.sb-article-content a:hover{text-decoration-color:var(--sb-ink)}
.sb-article-inline-cta{display:flex;flex-direction:column;align-items:flex-start;gap:16px;margin:40px 0 20px;padding:24px;border:1px solid var(--sb-line);border-radius:var(--sb-r-lg);background:var(--sb-soft)}
.sb-article-inline-cta p{max-width:40ch;margin:0!important;color:var(--sb-ink);font-size:16px;font-weight:500;line-height:1.4}
/* The reference column is a flex stack, where the CTA's `mb-5` and the next heading's `mt-12` add up
   (68px). In this block flow they collapse to 48px, so the gap is restored explicitly. */
.sb-article-inline-cta+h2{margin-top:68px}
/* InlineCta.tsx gives the button `shrink-0`: without it the row squeezes it and the label wraps
   to two lines, which makes the cell 18px taller than the reference. */
.sb-article-inline-cta .sb-button{text-decoration:none;flex-shrink:0}
@media(min-width:640px){
.sb-article-inline-cta{flex-direction:row;align-items:center;justify-content:space-between;padding:28px}
}
.sb-article-toc{order:1}
.sb-article-toc-mobile{border:1px solid var(--sb-line);border-radius:var(--sb-r-lg);background:var(--sb-surface);box-shadow:var(--sb-sh-1)}
.sb-article-toc-mobile summary{display:flex;align-items:center;min-height:52px;padding:0 20px;gap:12px;cursor:pointer;font-size:15px;font-weight:600;color:var(--sb-ink);list-style:none}
.sb-article-toc-mobile summary::-webkit-details-marker{display:none}
/* ArticleToc.tsx summary: Phosphor ListBullets at 18px beside the label, CaretDown at 16px that
   flips when the card opens. */
.sb-article-toc-mobile summary>span{display:flex;align-items:center;gap:8px}
.sb-article-toc-mobile summary>span .sb-icon{width:18px;height:18px;flex-shrink:0}
.sb-article-toc-mobile summary b{display:inline-flex;margin-left:auto;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-article-toc-mobile summary b .sb-icon{width:16px;height:16px}
.sb-article-toc-mobile[open] summary b{transform:rotate(180deg)}
.sb-article-toc ol{margin:0;padding:0;list-style:none;border-left:1px solid var(--sb-line)}
.sb-article-toc li{margin:0}
/* ArticleToc.tsx rows carry `rounded-sm`, so the 2px marker curves at both ends instead of reading
   as a straight bar. */
.sb-article-toc a{display:flex;align-items:center;min-height:44px;margin-left:-1px;padding:8px 0 8px 16px;border-left:2px solid transparent;border-radius:var(--sb-r-sm);color:var(--sb-ink-2);font-size:14px;line-height:1.35;text-decoration:none;transition:color var(--sb-d-fast) var(--sb-ease),border-color var(--sb-d-fast) var(--sb-ease)}
.sb-article-toc a:hover{border-color:var(--sb-ink);color:var(--sb-ink)}
.sb-article-toc-mobile ol{padding:0 20px 14px}
.sb-article-toc-desktop{display:none}
.sb-article-toc-desktop strong{display:block;margin-bottom:12px;color:var(--sb-ink);font-size:14px;font-weight:600}
.sb-article-toc a[aria-current=location]{border-color:var(--sb-ink);color:var(--sb-ink);font-weight:500}
.sb-article-next{padding-bottom:64px!important}
@media(min-width:768px){.sb-article-next{padding-bottom:96px!important}}
.sb-article-next-links{display:flex;flex-direction:column;gap:12px;margin:0;padding:0;list-style:none}
.sb-article-next-links li{margin:0}
.sb-article-next>.sb-card{display:grid;gap:28px;max-width:1040px;margin-inline:auto;padding:28px!important;border-radius:var(--sb-r-xl)!important;box-shadow:var(--sb-sh-3)}
.sb-article-next .sb-dark>div>p:first-child{margin:0;color:var(--sb-accent);font-size:14px;font-weight:500;line-height:1.5}
.sb-article-next h2{max-width:22ch;margin:8px 0 0!important;font-size:clamp(1.75rem,1.4rem + 1.7vw,2.5rem)!important;line-height:1.1;letter-spacing:-.02em}
.sb-article-next .sb-dark>div>p:last-child{max-width:52ch;margin:12px 0 0;color:var(--sb-ink-2);font-size:16px;line-height:1.625}
.sb-article-next a{display:flex;align-items:center;justify-content:space-between;min-height:56px;gap:16px;padding:16px 20px;line-height:1.5;border:1px solid var(--sb-line);border-radius:var(--sb-r-md);background:var(--sb-surface);color:var(--sb-ink);font-size:16px;font-weight:600;text-decoration:none;transition:border-color var(--sb-d-fast) var(--sb-ease)}
/* NextStepBand.tsx row: `hover:border-accent`, the 18px ArrowRight in --accent stepping 4px, and
   the shared link-draw underline under the label (home.css selector list). */
.sb-article-next a:hover{border-color:var(--sb-accent)}
.sb-article-next a .sb-icon{width:18px;height:18px;flex-shrink:0;color:var(--sb-accent);transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-article-next a:hover .sb-icon{transform:translateX(4px)}
@media(min-width:768px){
.sb-article-cover{aspect-ratio:21/9}
.sb-article-layout{padding-top:56px!important;padding-bottom:56px!important}
.sb-article-next{padding-bottom:96px!important}
.sb-article-next>.sb-card{padding:40px!important}
}
@media(min-width:1024px){
.sb-article-layout{grid-template-columns:minmax(0,65ch) 260px;justify-content:space-between;gap:48px}
.sb-article-content{order:1}
.sb-article-toc{order:2}
.sb-article-toc-mobile{display:none}
.sb-article-toc-desktop{position:sticky;top:112px;display:block}
.sb-article-layout-no-toc{grid-template-columns:minmax(0,65ch);justify-content:start}
.sb-article-next>.sb-card{grid-template-columns:1.2fr 1fr;align-items:center;gap:48px}
}
.sb-social-row .sb-text-link{margin-top:auto;padding-top:16px;color:var(--sb-primary)}
.sb-social-row .sb-text-link .sb-icon{transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-social-row a:hover .sb-text-link .sb-icon{transform:translateX(4px)}
.sb-chip-choices .sb-chip{cursor:pointer}
.sb-chip-choices .sb-chip:has(input:checked){border-width:2px;border-color:var(--sb-primary);background:var(--sb-primary-select)}
.sb-chip-choices .sb-chip:has(input:focus-visible){outline:2px solid var(--sb-ring);outline-offset:2px}
.sb-page-quote .sb-small{color:var(--sb-muted)}
.wp-block-columns:has(.sb-p-quote-form) .sb-p-quote-form .sb-wrap{width:auto;padding:0}
.sb-quote-calc-link .sb-icon{width:14px;height:14px;transition:transform var(--sb-d-fast) var(--sb-ease)}
.sb-quote-calc-link:hover .sb-icon{transform:translateX(4px)}
.sb-page-quote .sb-button{width:100%;justify-content:center}
/* A sticky element can only travel inside its containing block, and the block wrapper around the
   rail shrink-wraps to the rail itself, so the two were the same height and it never stuck. The
   column is a flex column, so the wrapper has to grow to fill it before the rail has anywhere to go
   (the reference gets this for free: its aside is a direct grid child of the full-height row). */
.wp-block-columns:has(.sb-p-quote-form) .wp-block-column>.sb-p-trust-rail{flex:1}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail{position:sticky;top:112px;padding:32px;border:0}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail h2{font-size:24px;line-height:1.15}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail-icon{width:44px;height:44px}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail small{line-height:1.5}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail a{display:inline-flex;align-items:center;min-height:44px;line-height:1.5}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail strong{line-height:1.5}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail li:last-child strong{font-size:15px;font-weight:500;line-height:1.5}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail small:last-child{line-height:1.5}
.wp-block-columns:has(.sb-p-quote-form) .sb-p-contact-rail{display:flex;flex:1;align-items:flex-start;padding:8px 0 80px}
.wp-block-columns:has(.sb-p-quote-form)+.sb-p-sede-location{margin-top:-28px}
.sb-p-sede-location .sb-map-shell{align-self:stretch}
.sb-p-sede-location .sb-point-links .sb-text-link{gap:6px;margin-top:0!important;font-size:15px;line-height:1.5}
.sb-p-sede-location .sb-point-links .sb-text-link{transition:color var(--sb-d-fast) var(--sb-ease)}
.sb-p-sede-location .sb-point-links .sb-text-link:hover{color:var(--sb-primary-deep)}
@media(min-width:1024px){
.sb-p-sede-location .sb-page-map{height:100%;min-height:480px}
}
/* ---- mobile ---------------------------------------------------------------------------- */
/* Rules for block-owned classes (.sb-security-teaser, .sb-page-quote, .sb-sede-row…) live in that
   block's style.css: build/blocks.css is enqueued after this sheet, so a media query here loses to
   the block's own unqualified declaration. Only classes this sheet owns stay. */
@media(max-width:767px){
    .sb-row-list{padding-inline:20px}
    .sb-rail,.sb-calc-panel{padding:22px}
    .sb-security-lead .sb-card-body{padding:22px}
    .sb-sede-thumb{width:64px;height:64px}
    .sb-trust-rail .sb-stats>div:last-child{grid-column:1/-1}
}

/* ---------------------------------------------------------------------------
   Conversion chrome (/cotizar/, /calculadora-de-espacio/)
   Mirrors app/(conversion)/layout.tsx: logo + phone header, NAP-band-only
   footer, no pop-ups, sticky bar with Llamar only. See inc/conversion.php.
   --------------------------------------------------------------------------- */
.sb-conversion-header{border-bottom:1px solid var(--sb-line);background:var(--sb-surface)}
.sb-conversion-header .sb-wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:12px;padding-bottom:12px}
.sb-conversion-brand{display:inline-flex;align-items:center}
.sb-conversion-brand img{height:56px;width:auto}
.sb-conversion-phone{display:inline-flex;align-items:center;gap:8px;min-height:44px;font-size:15px;font-weight:500;color:var(--sb-ink);transition:color var(--sb-d-fast) var(--sb-ease)}
/* ConversionHeader.tsx: `hover:text-primary-deep`. This read --sb-yellow-deep, a token that does not
   exist, so it fell back to --sb-yellow: brand yellow on white, about 1.4:1, invisible on hover. */
.sb-conversion-phone:hover{color:var(--sb-primary-deep)}
.sb-conversion-phone .sb-icon{width:18px;height:18px}
@media(max-width:600px){.sb-conversion-phone-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}}

/* Dialogs the footer block prints for every page. The privacy one stays: the consent checkbox
   beside the submit button opens it. */
.sb-conversion #sb-calculator,.sb-conversion #sb-quote,.sb-conversion #sb-newsletter,.sb-conversion #sb-exit-offer{display:none}
/* "Cotizar" in the mobile bar would point at the page you are already on. */
.sb-conversion .sb-mobile-cta a:first-child{display:none}
.sb-conversion .sb-mobile-cta a{flex:1}
/* The header no longer sticks, so the rail pins at the reference's own offset instead of clearing
   a 114px bar that is not there. */
.sb-conversion .wp-block-columns:has(.sb-p-quote-form) .sb-rail{top:24px}
/* Trust rail metrics, measured against the reference TrustRail: the figure is text-3xl on a 1.1
   leading with the label tight beneath it (flex-col-reverse, no gap), and the security line keeps
   the full mt-6. Without these the rail runs 75px taller than the design and pushes its own
   sticky travel out of step with the form beside it. */
.wp-block-columns:has(.sb-p-quote-form) .sb-stats strong{line-height:1.1}
.wp-block-columns:has(.sb-p-quote-form) .sb-stats span{margin-top:0;line-height:1.5}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail-note{margin-top:24px;padding-top:24px}
/* The reference puts pt-2 on the two-column row, so the rail's top edge lines up with the h1. Here
   the left column gets that 8px from the intro block itself, so only the rail needs it. */
.wp-block-columns:has(.sb-p-quote-form) .wp-block-column>.sb-p-trust-rail{padding-top:8px}
/* The conversion footer is the NAP band alone, so the gap that separated it from the nav columns
   has nothing left to separate (reference: py-10 around the band and nothing else). The phone in
   the header is a plain link there, not an underlined one. */
.sb-conversion .sb-footer-reference-nap{margin-top:0}
.sb-conversion-phone{text-decoration:none}
.sb-conversion-phone:hover{text-decoration:none}
/* Reference conversion footer: py-10 around the band (pb-24 on phones for the sticky bar), against
   the full footer's 48/100 which was sized for the nav columns above it. */
.sb-conversion .sb-footer-reference{padding:40px 0}
@media(max-width:767px){.sb-conversion .sb-footer-reference{padding-bottom:96px}}

/* ---------------------------------------------------------------------------
   Quote form, measured against QuoteForm.tsx + lib/controls.ts.
   Scoped to .sb-page-quote so the quote dialog keeps its own compact sizing.
   --------------------------------------------------------------------------- */
/* Radio cards carry the same well as the fields (answerClass({well:true})). */
.sb-page-quote .sb-quote-sizes label{background:var(--sb-soft-2,#f5f6f8)}
.sb-page-quote .sb-quote-size-hint{font-weight:400}
/* Chips: 15px on a 2px border, the padding coming from the 44px min-height. */
.sb-page-quote .sb-chip{padding:0 16px;border-width:2px;font-size:15px}
.sb-page-quote .sb-chip span{font-size:15px}
/* Consent: 13px in a rounded-sm well, so the box is 70px rather than 98px. */
.sb-page-quote .sb-button[type=submit]{font-weight:500}
/* Reference TrustRail figures are font-display with the display tracking (-0.02em at 40px). */
.wp-block-columns:has(.sb-p-quote-form) .sb-stats strong{letter-spacing:-0.8px}
.wp-block-columns:has(.sb-p-quote-form) .sb-rail-note{line-height:1.625}
/* ---- buscador y 404 ----------------------------------------------------------------------
   Las dos páginas a las que se llega por accidente. Usan las mismas piezas que el resto del
   sitio (migas, intro, tarjetas del blog, paginación); lo único propio es el campo de búsqueda. */
.sb-search-form{display:flex;flex-wrap:wrap;gap:12px;max-width:560px}
.sb-search-form input[type=search]{flex:1 1 220px;min-height:48px;padding:12px 16px;border:2px solid var(--sb-line);border-radius:var(--sb-r-md);background:var(--sb-bg);color:var(--sb-ink);font:inherit;font-size:15px}
.sb-search-form input[type=search]:hover{border-color:var(--sb-muted-2)}
.sb-search-form input[type=search]:focus{outline:none;border-color:var(--sb-primary);background:var(--sb-surface)}
.sb-search-form .sb-button{flex-shrink:0}
.sb-p-search .sb-blog-cards{margin-top:32px!important}
.sb-p-search .sb-blog-card h2{margin-top:12px;font:600 20px/28px "Bricolage Grotesque",sans-serif;letter-spacing:-.02em;transition:color var(--sb-d-fast) var(--sb-ease)}
.sb-p-search .sb-blog-card:hover h2{color:var(--sb-primary-deep)}
.sb-search-empty{margin-top:32px}
.sb-search-empty h2{font-size:clamp(1.25rem,1.15rem + .5vw,1.5rem);letter-spacing:-.02em}
.sb-search-empty p{margin-top:12px;max-width:60ch;color:var(--sb-ink-2)}
.sb-search-empty .sb-buttons,.sb-404-links{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}
