/* HashCMS page-builder base styles — the utility classes block views rely on
   (measures, prose, semantic surfaces). Themes may override anything here. */
.mx-auto{margin-left:auto;margin-right:auto}
.w-full{width:100%}
.max-w-none{max-width:none}
.max-w-3xl{max-width:48rem}
.max-w-7xl{max-width:80rem}
.max-w-screen-2xl{max-width:1536px}
.px-4{padding-left:1rem;padding-right:1rem}
@media (min-width:640px){.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}
@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}

/* Rich text (subset of @tailwindcss/typography's prose-sm). */
.prose{color:var(--pb-color-text,#64748b);max-width:65ch;line-height:1.75}
.prose-sm{font-size:0.875rem;line-height:1.7142857}
.prose :where(p){margin-top:1.1428571em;margin-bottom:1.1428571em}
.prose :where(p:first-child){margin-top:0}
.prose :where(p:last-child){margin-bottom:0}
.prose :where(h1,h2,h3,h4){color:var(--pb-color-heading,#0f172a);font-weight:700;line-height:1.25}
.prose :where(h1){font-size:2.1428571em;margin:0 0 .8em}
.prose :where(h2){font-size:1.4285714em;margin:1.6em 0 .8em}
.prose :where(h3){font-size:1.2857143em;margin:1.5555556em 0 .4444444em}
.prose :where(h4){margin:1.4285714em 0 .5714286em}
.prose :where(h1,h2,h3,h4):first-child{margin-top:0}
.prose :where(a){color:var(--pb-color-primary,#00a1e8);text-decoration:underline}
.prose :where(strong){font-weight:600;color:inherit}
.prose :where(ul){list-style:disc;padding-inline-start:1.5714286em;margin:1.1428571em 0}
.prose :where(ol){list-style:decimal;padding-inline-start:1.5714286em;margin:1.1428571em 0}
.prose :where(li){margin:.2857143em 0}
.prose :where(blockquote){border-inline-start:.25rem solid var(--pb-color-border,#e2e8f0);padding-inline-start:1em;font-style:italic;margin:1.3333333em 0}
.prose :where(img,video){max-width:100%;height:auto;margin:1.7142857em 0}
.prose :where(code){font-size:.875em;background:var(--pb-color-muted,#f8fafc);padding:.15em .35em;border-radius:.25rem}
.prose :where(pre){background:#0f172a;color:#e2e8f0;padding:.8571429em 1.1428571em;border-radius:.375rem;overflow-x:auto}
.prose :where(pre code){background:none;padding:0;color:inherit}
.prose :where(hr){border:0;border-top:1px solid var(--pb-color-border,#e2e8f0);margin:2.8571429em 0}
.prose :where(table){width:100%;border-collapse:collapse;font-size:.875em}
.prose :where(th,td){padding:.5714286em;border-bottom:1px solid var(--pb-color-border,#e2e8f0);text-align:start}
.dark .prose-invert{color:var(--pb-color-text,#cbd5e1)}

/* Semantic surfaces. */
.pb-alert{border-radius:.5rem;padding:.875rem 1rem;border-width:1px;border-style:solid}
.pb-alert-info{background:#eff6ff;border-color:#bfdbfe;color:#1e40af}
.pb-alert-success{background:#f0fdf4;border-color:#bbf7d0;color:#166534}
.pb-alert-warning{background:#fffbeb;border-color:#fde68a;color:#92400e}
.pb-alert-error{background:#fef2f2;border-color:#fecaca;color:#991b1b}
.dark .pb-alert-info{background:rgb(30 58 138 / .35);border-color:rgb(30 64 175 / .6);color:#dbeafe}
.dark .pb-alert-success{background:rgb(20 83 45 / .35);border-color:rgb(22 101 52 / .6);color:#bbf7d0}
.dark .pb-alert-warning{background:rgb(120 53 15 / .35);border-color:rgb(146 64 14 / .6);color:#fde68a}
.dark .pb-alert-error{background:rgb(127 29 29 / .35);border-color:rgb(153 27 27 / .6);color:#fecaca}
.pb-rating-star{color:#f59e0b}
.dark .pb-rating-star{color:#fbbf24}
.pb-accent-surface{background:#eefafe}
.dark .pb-accent-surface{background:rgb(14 165 233 / .15)}

/* Code blocks (highlighted output uses .shiki-compatible classes). */
.pb-code pre{margin:0;padding:1rem;overflow-x:auto;font-size:.8125rem;line-height:1.6}
.pb-code-numbered pre code{counter-reset:pb-line}
.pb-code-numbered pre code .line{counter-increment:pb-line}
.pb-code-numbered pre code .line::before{content:counter(pb-line);display:inline-block;width:1.5rem;margin-inline-end:1rem;text-align:end;color:rgb(148 163 184 / .6)}

/* CSS-only tooltip bubble. */
.pb-tooltip .pb-tooltip-bubble{position:absolute;z-index:60;visibility:hidden;opacity:0;transition:opacity 120ms;white-space:normal;width:max-content;max-width:min(18rem,80vw);text-align:center;padding:.3rem .55rem;border-radius:.375rem;background:#0f172a;color:#f8fafc;font-size:.75rem;pointer-events:none}
.pb-tooltip:hover .pb-tooltip-bubble,.pb-tooltip:focus .pb-tooltip-bubble,.pb-tooltip:focus-within .pb-tooltip-bubble{visibility:visible;opacity:1}
.pb-tooltip[data-pos="top"] .pb-tooltip-bubble{bottom:100%;left:50%;transform:translate(-50%,-.35rem)}
.pb-tooltip[data-pos="bottom"] .pb-tooltip-bubble{top:100%;left:50%;transform:translate(-50%,.35rem)}
.pb-tooltip[data-pos="left"] .pb-tooltip-bubble{right:100%;top:50%;transform:translate(-.35rem,-50%)}
.pb-tooltip[data-pos="right"] .pb-tooltip-bubble{left:100%;top:50%;transform:translate(.35rem,-50%)}
@media (max-width:640px){.pb-tooltip[data-pos="left"] .pb-tooltip-bubble,.pb-tooltip[data-pos="right"] .pb-tooltip-bubble{left:50%;right:auto;top:auto;bottom:100%;transform:translate(-50%,-.35rem)}}

/* Responsive grids: Columns, Container (grid), Dynamic list and Repeater carry
   data-pb-cols; galleries data-pb-gallery-cols. Three or more columns become
   two on tablets, everything stacks on phones (galleries keep two). */
@media (max-width:1024px){[data-pb-cols="3"],[data-pb-cols="4"],[data-pb-cols="5"],[data-pb-cols="6"],[data-pb-cols="7"],[data-pb-cols="8"]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  /* Grid spans (gridColumn/gridRow) are desktop-only: once the grid collapses they would overflow it. */
  [data-pb-cols="3"]>*,[data-pb-cols="4"]>*,[data-pb-cols="5"]>*,[data-pb-cols="6"]>*,[data-pb-cols="7"]>*,[data-pb-cols="8"]>*{grid-column:auto!important;grid-row:auto!important}}
@media (max-width:640px){[data-pb-cols]{grid-template-columns:repeat(1,minmax(0,1fr))!important}[data-pb-cols]>*{grid-column:auto!important;grid-row:auto!important}[data-pb-gallery-cols]{grid-template-columns:repeat(2,minmax(0,1fr))!important}[data-pb-nowrap]{flex-wrap:wrap!important}}

/* Image frames and hover zoom (image block: frame / hoverZoom). */
.pb-img-frame-outline{outline:1px solid var(--pb-color-border,#e2e8f0);outline-offset:8px}
.pb-img-frame-offset{box-shadow:12px 12px 0 0 var(--pb-color-primary,#00a1e8)}
.pb-img-frame-shadow{box-shadow:0 24px 48px -20px rgba(15,23,42,.35)}
[data-pb-zoom] img{transition:transform .6s cubic-bezier(.22,1,.36,1)}
[data-pb-zoom]:hover img{transform:scale(1.05)}

/* Blocks that paint a light surface inline restore the theme ink inside a dark band. */
[data-pb-node-id][data-pb-type="card"],[data-pb-node-id][data-pb-type="pricing"],[data-pb-node-id][data-pb-type="searchBar"],[data-pb-node-id][data-pb-type="contactForm"],[data-pb-node-id][data-pb-type="table"],[data-pb-node-id][data-pb-type="code"],[data-pb-node-id][data-pb-type="alert"]{--pb-color-heading:var(--pb-base-color-heading);--pb-color-text:var(--pb-base-color-text);color:var(--pb-base-color-text)}

/* Logo strip: grey until hovered. */
[data-pb-logos="grey"] img{filter:grayscale(1);opacity:.7;transition:filter .3s,opacity .3s}
[data-pb-logos="grey"] a:hover img,[data-pb-logos="grey"] span:hover img{filter:none;opacity:1}

/* Default rhythm inside a Column: stacked blocks get breathing room without the
   author setting margins. The column's blocks sit in an inner flex div (public
   renderer and editor canvas alike), hence the `>*>` hop. :where() keeps
   specificity at zero, so a block's own margin (its per-node class) and theme
   rules always win. */
:where([data-pb-type="column"]>*)>:where([data-pb-node-id])+:where([data-pb-node-id]){margin-top:1rem}
:where([data-pb-type="column"]>*)>:where([data-pb-type="heading"])+:where([data-pb-node-id]){margin-top:.75rem}
:where([data-pb-type="column"]>*)>:where([data-pb-node-id])+:where([data-pb-type="button"],[data-pb-type="buttonGroup"]){margin-top:1.5rem}

/* Tab panels and carousel slides the runtime has hidden stay hidden whatever
   the theme does to [hidden]. */
[data-pbx-panel][hidden],[data-pbx-slide][hidden]{display:none!important}

/* Long words and URLs never widen their block. */
.prose,[data-pb-type="heading"],[data-pb-type="text"],[data-pb-type="iconBox"],[data-pb-type="card"],[data-pb-type="alert"]{overflow-wrap:anywhere}

/* Per-breakpoint content variants. */
@media (max-width:1024px){.pb-bp-desktop{display:none!important}}
@media (min-width:1025px),(max-width:640px){.pb-bp-tablet{display:none!important}}
@media (min-width:641px){.pb-bp-mobile{display:none!important}}

/* Interactions runtime. */
.pb-int-hidden{display:none!important}
