/* ==========================================================================
   Hurlyvale supplement stylesheet. Loaded only when Blocksy is the active theme
   (see novamira-sandbox/hurlyvale-assets.php). Holds only what Blocksy settings and
   CrocoBuilder classes cannot express. Every rule says why it is here.
   ========================================================================== */

/* 1. Self-hosted Montserrat (variable font, one file per subset, weights 100 to 900) */
@font-face { font-family: "Montserrat"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("/wp-content/uploads/hurlyvale-fonts/montserrat-cyrillic-ext.woff2") format("woff2");
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }
@font-face { font-family: "Montserrat"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("/wp-content/uploads/hurlyvale-fonts/montserrat-cyrillic.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }
@font-face { font-family: "Montserrat"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("/wp-content/uploads/hurlyvale-fonts/montserrat-vietnamese.woff2") format("woff2");
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; }
@font-face { font-family: "Montserrat"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("/wp-content/uploads/hurlyvale-fonts/montserrat-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Montserrat"; font-style: normal; font-weight: 100 900; font-display: swap;
  src: url("/wp-content/uploads/hurlyvale-fonts/montserrat-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }

/* 2. Blocksy variables mapped to the brand. Variables only, so no builder class loses on specificity. */
body.hv-site {
  --hv-heading-1: clamp(1.58rem, 1.51vi + 1.24rem, 3.05rem);
  --hv-heading-2: clamp(1.4rem, 1.07vi + 1.16rem, 2.44rem);
  --hv-heading-3: clamp(1.25rem, 0.73vi + 1.08rem, 1.95rem);
  --hv-heading-4: clamp(1.11rem, 0.47vi + 1rem, 1.56rem);
  --hv-heading-5: clamp(0.98rem, 0.27vi + 0.92rem, 1.25rem);
  --hv-heading-6: clamp(0.88rem, 0.13vi + 0.85rem, 1rem);
}
/* Fluid heading sizes from the Elementor kit. Blocksy's own rule reads --theme-font-size; the device values in the theme mods are the fallback. */
body.hv-site h1 { --theme-font-size: var(--hv-heading-1); }
body.hv-site h2 { --theme-font-size: var(--hv-heading-2); }
body.hv-site h3 { --theme-font-size: var(--hv-heading-3); }
body.hv-site h4 { --theme-font-size: var(--hv-heading-4); }
body.hv-site h5 { --theme-font-size: var(--hv-heading-5); }
body.hv-site h6 { --theme-font-size: var(--hv-heading-6); }

/* Blocksy gates heading and list spacing with this variable; builder documents manage their own spacing */
.crocoblocks-document { --has-theme-content-spacing: 0; }

/* 3. Builder pages are full bleed. Scoped to pages only: the header, footer, blog archive and posts keep Blocksy's containers. */
.hv-site.page #main > .ct-container,
.hv-site.page #main > .ct-container-full,
.hv-site.page #main > .ct-container-narrow { max-width: none; padding-inline: 0; padding-block: 0; }
.hv-site.page #main > .ct-container::before,
.hv-site.page #main > .ct-container::after { display: none; }
.hv-site.page #main article.page,
.hv-site.page #main article.type-page { max-width: none; width: 100%; }
.hv-site.page #main article.page > .entry-content,
.hv-site.page #main article.page > .entry-content > .crocoblocks-document { margin: 0; max-width: none; width: 100%; }
/* Lazy images are emitted without width/height; a 0x0 box is never requested */
.hv-site img[loading="lazy"] { min-width: 1px; min-height: 1px; }

/* 4. Header: top bar, sticky bar and dropdown polish (Blocksy has no option for these) */
.hv-site .ct-header [data-row*="top"] .ct-contact-info ul { flex-wrap: wrap; }
.hv-site .ct-header [data-row*="top"] .ct-contact-info a,
.hv-site .ct-header [data-row*="top"] .ct-header-text a { text-decoration: none; }
.hv-site .ct-header [data-row*="middle"] { box-shadow: 0 2px 14px rgba(8, 10, 18, 0.06); }
.hv-site .ct-header .sub-menu { border-top: 3px solid var(--theme-palette-color-1); }
/* Offcanvas contact details and socials sit below the menu with a divider */
.hv-site #offcanvas .ct-contact-info,
.hv-site #offcanvas .ct-header-socials { margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--theme-border-color, #D5E3E8); }
.hv-site #offcanvas .ct-header-socials { padding-top: 0; border-top: 0; margin-top: 0.75rem; }

/* 5. Footer: dark band, logo on a white plate (the logo artwork is designed for a light ground) */
.hv-site .ct-footer .site-logo-container img { background: #fff; padding: 0.5rem 0.9rem; border-radius: 12px; }
.hv-site .ct-footer { color: #fff; }
.hv-site .ct-footer [data-row*="middle"] { border-top: 1px solid rgba(255, 255, 255, 0.18); }
.hv-site .ct-footer [data-row*="middle"] .ct-footer-copyright { text-align: right; }
@media (max-width: 689.98px) {
  .hv-site .ct-footer [data-row*="middle"] .ct-footer-copyright { text-align: center; }
  .hv-site .ct-footer [data-row*="top"] { text-align: center; }
}

/* 6. Newsletter archive and single post */
/* Hero: photo, soft overlay and the slanted lower edge of today's site */
.hv-site .hero-section[data-type="type-2"] { clip-path: polygon(0 0, 100% 0, 100% calc(100% - 28px), 0 100%); margin-bottom: 0; }
.hv-site.archive #main,
.hv-site.single-post #main { padding-block: clamp(2rem, 1.2rem + 3vw, 4.5rem); }
.hv-site.archive .entries .entry-card,
.hv-site.archive .entries article { transition: transform 0.2s ease, box-shadow 0.2s ease; }
@media (hover: hover) and (pointer: fine) {
  .hv-site.archive .entries .entry-card:hover { transform: translateY(-4px); box-shadow: 0 14px 34px rgba(8, 10, 18, 0.12); }
}
/* The archive title carries a "Category" label span; today's hero shows only the title */
.hv-site .hero-section .ct-title-label { display: none; }
/* Darkening layer so the white archive title reads on the classroom photo (the theme overlay option only applies to featured images) */
.hv-site [data-prefix="categories"] .hero-section[data-type="type-2"],
.hv-site [data-prefix="blog"] .hero-section[data-type="type-2"] { position: relative; isolation: isolate; }
.hv-site [data-prefix="categories"] .hero-section[data-type="type-2"]::before,
.hv-site [data-prefix="blog"] .hero-section[data-type="type-2"]::before { content: ""; position: absolute; inset: 0; background: rgba(0, 0, 0, 0.38); z-index: -1; }
/* Newsletter covers are portrait: show the top of the cover, not a centred slice */
.hv-site.archive .entry-card .ct-media-container img { object-position: top center; }
/* Readable measure for post text; embedded readers (figure, iframe, .hv-* wrappers, alignwide) may use the full container */
.hv-site.single-post .entry-content > :where(p, ul, ol, h2, h3, h4, h5, h6, blockquote) { max-width: 760px; margin-inline: auto; }

/* 7. Motion */
@media (prefers-reduced-motion: reduce) {
  .hv-site.archive .entries .entry-card, .hv-site.archive .entries article { transition: none; }
  .hv-site.archive .entries .entry-card:hover { transform: none; }
}

/* 8. CrocoBuilder design system extras (hv-* classes). focusVisible does not persist on builder classes (verified by readback), so it lives here. */
.hv-button-primary:focus-visible,
.hv-button-outline:focus-visible,
.hv-tab:focus-visible { outline: 3px solid var(--hv-color-accent, #4CDBFF); outline-offset: 2px; }
/* Tab panels are shown or hidden by the page script through the hidden attribute; a display value on the class would defeat it */
.hv-tab-panel[hidden] { display: none; }
/* List items render as text elements inside the ul, so "li + li" never matches; keep the icon list spacing on the container (gap) */
.hv-icon-list > * { display: flex; }
/* Anchored tabs and sections clear the sticky header */
.hv-site [id] { scroll-margin-top: 110px; }
