/* =========================================================================
   Squareposh v2 CHROME: tokens, frame, type, buttons, announcement,
   header, footer + footer reveal. Loaded on EVERY page (inc/v2.php), also on
   the plugin pages that still use style.css, so every token is --hv-* and
   every rule is scoped to hv- classes.
   Ruled editorial grid, Instrument Serif display with italic accents,
   NeulisAlt (brand sans) for every functional word.
   ========================================================================= */
@font-face{font-family:'NeulisAlt';src:url('../fonts/neulisalt-regular.otf') format('opentype');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'NeulisAlt';src:url('../fonts/neulisalt-medium.otf') format('opentype');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'NeulisAlt';src:url('../fonts/neulisalt-semibold.otf') format('opentype');font-weight:600;font-style:normal;font-display:swap}

:root{
  --hv-paper:#F5EFE9;
  --hv-well:#EAE1D8;
  --hv-greige:#E0D4CC;
  --hv-stone:#BCA898;
  --hv-espresso:#2B211B;
  --hv-ink:#1C1714;
  --hv-mute:#62574F;
  --hv-rule:#1C1714;
  --hv-rule-soft:rgba(28,23,20,.16);
  --hv-rule-dark:rgba(245,239,233,.22);
  --hv-display:'Instrument Serif','Times New Roman',Georgia,serif;
  --hv-sans:'NeulisAlt','Helvetica Neue',Arial,sans-serif;
  --hv-frame:1440px;
  --hv-pad:clamp(20px,2.4vw,36px);
}

/* Chrome elements carry their own small reset, so they look the same on
   style.css pages (plugin gallery/landing) as on v2 pages. */
.hv-announce,.hv-head,.hv-foot{font-family:var(--hv-sans);color:var(--hv-ink);-webkit-font-smoothing:antialiased;line-height:1.5}
:where(.hv-announce,.hv-head,.hv-foot) :is(h2,p,ul,nav){margin:0}
:where(.hv-announce,.hv-head,.hv-foot) img{display:block;max-width:100%;height:auto}
:where(.hv-announce,.hv-head,.hv-foot,.hv-pill,.hv-link) svg{width:1.05em;height:1.05em;flex-shrink:0}
:where(.hv-announce,.hv-head,.hv-foot) a{color:inherit}
.hv-skip{position:absolute;left:12px;top:-60px;z-index:100;background:var(--hv-ink);color:var(--hv-paper);padding:10px 16px;border-radius:999px;text-decoration:none;font-family:var(--hv-sans)}
.hv-skip:focus{top:12px}
:where(.hv-announce,.hv-head,.hv-foot) :focus-visible{outline:2px solid currentColor;outline-offset:3px}
/* The frame: every section sits inside one ruled column, like a printed page. */
.hv-frame{max-width:var(--hv-frame);margin:0 auto;border-left:1px solid var(--hv-rule);border-right:1px solid var(--hv-rule);border-bottom:1px solid var(--hv-rule);position:relative}
@media (max-width:1480px){.hv-frame{border-left:0;border-right:0}}

/* ---------- Type ---------- */
.hv-h1,.hv-h2,.hv-state,.hv-way__title,.hv-tpl__name,.hv-tpl__price,.hv-svc__name,.hv-proj__name,.hv-slide__title,.hv-big,.hv-rev blockquote,.hv-foot__line,.hv-mail,.hv-steps h3,.hv-faq summary{font-family:var(--hv-display);font-weight:400;letter-spacing:-.01em}
.hv-h1{font-size:clamp(3.2rem,5.6vw,5.9rem);line-height:.92;padding-bottom:.08em}
.hv-h2{padding-bottom:.06em}
.hv-h2{font-size:clamp(2.5rem,4.4vw,4.3rem);line-height:.95}
.hv-h2--xl{font-size:clamp(3rem,6vw,6rem)}
.hv-kicker,.hv-label{font:600 .8125rem/1.3 var(--hv-sans);letter-spacing:.14em;text-transform:uppercase}
.hv-label{display:block;margin-bottom:1.1rem}

/* ---------- Buttons ---------- */
.hv-pill{display:inline-flex;align-items:center;gap:.6em;min-height:48px;padding:.7em 1.5em;border-radius:999px;border:1px solid currentColor;font:500 .9375rem/1 var(--hv-sans);letter-spacing:.02em;text-decoration:none;cursor:pointer;background:none;color:inherit;transition:background .25s,color .25s,border-color .25s;white-space:nowrap}
.hv-pill--ink{background:var(--hv-ink);border-color:var(--hv-ink);color:var(--hv-paper)!important}
.hv-pill--ink:hover{background:transparent;color:var(--hv-ink)!important}
.hv-pill--line:hover{background:var(--hv-ink);color:var(--hv-paper)}
.hv-pill--light{border-color:var(--hv-paper);color:var(--hv-paper)}
.hv-pill--light:hover{background:var(--hv-paper);color:var(--hv-espresso)}
.hv-link{display:inline-flex;align-items:center;gap:.55em;font:500 .9375rem/1 var(--hv-sans);letter-spacing:.02em;text-decoration:none;border-bottom:1px solid currentColor;padding-bottom:.4em}
.hv-link svg{transition:transform .25s}
a:hover .hv-link svg,.hv-link:hover svg{transform:translateX(4px)}

/* ---------- Announcement ---------- */
.hv-announce{background:var(--hv-paper);font:500 .8125rem/1.3 var(--hv-sans);letter-spacing:.12em;text-transform:uppercase}
.hv-announce__in{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:11px var(--hv-pad)}
.hv-announce a{display:inline-flex;align-items:center;gap:.5em;text-decoration:none}
.hv-announce a:hover{text-decoration:underline}
@media (max-width:1000px){.hv-announce__mid{display:none}}
@media (max-width:560px){.hv-announce__in>span:first-child{display:none}.hv-announce__in{justify-content:center}}

/* ---------- Header ---------- */
.hv-head{position:sticky;top:0;z-index:50;background:var(--hv-paper)}
.hv-head__in{display:flex;align-items:center;gap:clamp(20px,3vw,48px);padding:0 var(--hv-pad);min-height:68px}
.hv-brand{display:block;flex-shrink:0;font:400 1.8rem/1 var(--hv-display);text-decoration:none}
.hv-brand img{width:clamp(130px,11vw,158px);height:auto}
.hv-nav{display:flex;gap:clamp(18px,2.2vw,34px);font:500 .9375rem/1 var(--hv-sans)}
.hv-nav a{text-decoration:none;padding:8px 0;border-bottom:1px solid transparent}
.hv-nav a:hover{border-bottom-color:currentColor}
.hv-nav__only-menu{display:none}
.hv-head__cta{margin-left:auto;display:flex;align-items:center;gap:22px}
.hv-signin{font:500 .9375rem/1 var(--hv-sans);text-decoration:none}
.hv-signin:hover{text-decoration:underline}
.hv-head .hv-pill{min-height:42px;padding:.6em 1.25em}
.hv-menu{display:none;font:500 .9375rem/1 var(--hv-sans);background:none;border:1px solid var(--hv-ink);border-radius:999px;padding:.7em 1.2em;color:var(--hv-ink);cursor:pointer;min-height:42px}
@media (max-width:1060px){
  .hv-menu{display:inline-flex}
  .hv-signin{display:none}
  .hv-nav{position:absolute;left:0;right:0;top:100%;flex-direction:column;gap:0;background:var(--hv-paper);border-top:1px solid var(--hv-rule);border-bottom:1px solid var(--hv-rule);padding:8px var(--hv-pad) 18px;display:none;font:400 2rem/1.1 var(--hv-display)}
  .hv-nav.is-open{display:flex}
  .hv-nav a{padding:12px 0;border-bottom:1px solid var(--hv-rule-soft)}
  .hv-nav__only-menu{display:block}
}
@media (max-width:520px){.hv-head .hv-pill--ink{display:none}}

/* ---------- Footer ---------- */
.hv-foot{background:var(--hv-ink);color:var(--hv-paper)}
.hv-foot .hv-frame{border-color:var(--hv-rule-dark);border-bottom:0}
.hv-foot__grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr}
.hv-foot__grid>*{padding:clamp(34px,4vw,54px) var(--hv-pad)}
.hv-foot__grid>*+*{border-left:1px solid var(--hv-rule-dark)}
.hv-foot__line{font-size:clamp(1.5rem,1.9vw,1.85rem);line-height:1.1;max-width:15em}
.hv-foot__logo{width:clamp(150px,13vw,200px);height:auto}
.hv-foot__col{display:flex;flex-direction:column;align-items:flex-start;gap:12px;font-size:.9375rem}
.hv-foot__col h2{font:600 .8125rem/1.3 var(--hv-sans);letter-spacing:.14em;text-transform:uppercase;margin-bottom:6px;color:rgba(245,239,233,.72)}
.hv-foot__col a{text-decoration:none}
.hv-foot__col a:hover{text-decoration:underline}
.hv-foot__col p{color:rgba(245,239,233,.78)}
.hv-foot__mark{border-top:1px solid var(--hv-rule-dark);border-bottom:1px solid var(--hv-rule-dark);padding:clamp(30px,4vw,56px) var(--hv-pad);display:flex;justify-content:center}
.hv-foot__mark img{width:min(70%,380px);height:auto;opacity:.95}
.hv-foot__mark span{font:400 clamp(4rem,14vw,12rem)/.9 var(--hv-display)}
.hv-foot__bottom{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px 24px;padding:20px var(--hv-pad) 26px;font-size:.875rem;color:rgba(245,239,233,.78)}
.hv-foot__bottom nav{display:flex;gap:22px}
.hv-foot__bottom a{text-decoration:none}
.hv-foot__bottom a:hover{text-decoration:underline}
@media (max-width:960px){
  .hv-foot__grid{grid-template-columns:1fr 1fr}
  .hv-foot__grid>*+*{border-left:0}
  .hv-foot__grid>*{border-bottom:1px solid var(--hv-rule-dark)}
  .hv-foot__grid>*:nth-child(odd){border-right:1px solid var(--hv-rule-dark)}
  .hv-foot__grid>*:nth-last-child(-n+2){border-bottom:0}
}
@media (max-width:560px){.hv-foot__grid{grid-template-columns:1fr}.hv-foot__grid>*{border-right:0!important;border-bottom:1px solid var(--hv-rule-dark)!important}.hv-foot__grid>*:last-child{border-bottom:0!important}}

.hv-foot{color:var(--hv-paper)}
.hv-foot__brand{display:flex;flex-direction:column;align-items:flex-start;gap:22px}

/* ---------- Footer reveal ----------
   Pure CSS: .hv-page (opaque, z-index 2) scrolls up over the footer, which is
   sticky to the bottom of the window beneath it. Works at any window height
   and needs no JS. Nothing animates, so it stays on for reduced motion. */
.hv-page{position:relative;z-index:2;background:var(--hv-paper)}
.hv-legacy .hv-page{background:var(--bone,#F8F4F4)}
.hv-foot{position:sticky;bottom:0;z-index:1}
/* The page lifting off the (equally dark) footer needs an edge to read. */
.hv-page{box-shadow:0 26px 50px -18px rgba(0,0,0,.55)}

/* ---------- Legacy (style.css) pages: the old header was fixed and
   transparent, so their first sections pad for it. The new one is sticky
   and takes its own room. */
.hv-legacy .pagetop{padding-top:clamp(56px,7vw,100px)}
.hv-legacy .startpage{padding-top:clamp(40px,5vw,70px)}
.hv-legacy .hv-announce,.hv-legacy .hv-head{background:var(--hv-paper)}
.hv-legacy .hv-frame{border-color:var(--hv-rule)}