/*
  STATESHARDWARE — site stylesheet
  Based on the approved cream-direction tokens from the handoff (design-tokens.css).
  Edit colors, type and spacing via the custom properties in :root.
*/

/* ---------- Fonts (self-hosted, SIL OFL 1.1; licences in /assets/fonts/) ----------
   Files are Google Fonts' own woff2 subsets (Bodoni Moda v28, Libre Baskerville v24).
   Browsers download a latin-ext file only if a page uses one of its characters. */
@font-face {
  font-family: "Bodoni Moda";
  font-style: normal;
  font-weight: 500 600;
  font-display: swap;
  src: url("/assets/fonts/bodoni-moda-v28-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;
}
@font-face {
  font-family: "Bodoni Moda";
  font-style: normal;
  font-weight: 500 600;
  font-display: swap;
  src: url("/assets/fonts/bodoni-moda-v28-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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Libre Baskerville";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/libre-baskerville-v24-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;
}
@font-face {
  font-family: "Libre Baskerville";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/assets/fonts/libre-baskerville-v24-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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: "Libre Baskerville";
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/libre-baskerville-italic-v24-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;
}
@font-face {
  font-family: "Libre Baskerville";
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/libre-baskerville-italic-v24-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-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root {
  color-scheme: light;

  --sh-color-page: #fbf6f0;
  --sh-color-ink: #2b1a12;
  --sh-color-muted: #6f5d4e;
  --sh-color-bronze: #83613c;
  --sh-color-button: #65472b;
  --sh-color-button-hover: #4e351f;
  --sh-color-button-text: #fff9f0;
  --sh-color-rule: #9b8d80;
  --sh-color-stone: #ded4c6;
  --sh-color-focus: #7c5831;

  --sh-font-display: "Bodoni Moda", "Libre Baskerville", Georgia, serif;
  --sh-font-body: "Libre Baskerville", Georgia, "Times New Roman", serif;

  --sh-type-nav: clamp(1rem, 0.1568rem + 1.44vw, 1.625rem);
  --sh-type-eyebrow: clamp(0.75rem, 0.2058rem + 0.84vw, 1.0625rem);
  --sh-type-hero: clamp(3rem, 0.5243rem + 4.815vw, 5.25rem);
  --sh-type-hero-copy: clamp(1.125rem, 0.1666rem + 1.53vw, 1.75rem);
  --sh-type-cta: clamp(1.25rem, 0.1862rem + 1.71vw, 1.875rem);
  --sh-type-category: clamp(0.6875rem, 0.1441rem + 0.833vw, 1rem);
  --sh-type-timeline: clamp(1rem, 0.1715rem + 1.575vw, 1.75rem);
  --sh-type-contact: clamp(1rem, 0.1421rem + 1.305vw, 1.5rem);
  --sh-type-social: clamp(0.875rem, 0.539rem + 0.55vw, 1.125rem);
  --sh-type-story: clamp(1.0625rem, 0.637rem + 0.65vw, 1.3125rem);
  --sh-type-story-title: clamp(1.875rem, 0.3136rem + 2.88vw, 3.25rem);

  --sh-leading-hero: 1;
  --sh-tracking-hero: -0.035em;
  --sh-tracking-eyebrow: 0.22em;
  --sh-tracking-category: 0.25em;

  --sh-container-max: 92rem;
  --sh-page-gutter: clamp(1.25rem, 3.125vw, 3.5rem);
  --sh-hero-gap: clamp(3rem, 5.2vw, 5.5rem);
  --sh-story-column: 68ch;
  --sh-image-strip-ratio: 2.6 / 1;
  --sh-image-gap: 3px;
}

/* ---------- Base ---------- */
*, *::before, *::after { box-sizing: border-box; }

html {
  background: var(--sh-color-page);
  color: var(--sh-color-ink);
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

body {
  margin: 0;
  background: var(--sh-color-page);
  font-family: var(--sh-font-body);
  font-weight: 400;
  line-height: 1.65;
  text-rendering: optimizeLegibility;
  /* Scale fallback fonts to the web font's x-height so text doesn't jump when the fonts swap in. */
  font-size-adjust: from-font;
}

/* Even line lengths on short headings; fewer one-word last lines in running text. */
h1, h2, .sh-story-closing__standard { text-wrap: balance; }
main p { text-wrap: pretty; }

img, svg { display: block; max-inline-size: 100%; }
img { block-size: auto; }
picture { display: contents; }
a { color: inherit; }

a:focus-visible {
  outline: 3px solid var(--sh-color-focus);
  outline-offset: 4px;
}

.sh-skip-link {
  position: absolute;
  inset-block-start: 0.5rem;
  inset-inline-start: 0.5rem;
  z-index: 10;
  padding: 0.75rem 1rem;
  background: var(--sh-color-button);
  color: var(--sh-color-button-text);
  text-decoration: none;
  transform: translateY(-200%);
}
.sh-skip-link:focus-visible { transform: none; }

.sh-container {
  inline-size: calc(100% - 2 * var(--sh-page-gutter));
  max-inline-size: var(--sh-container-max);
  margin-inline: auto;
}

/* ---------- Header ---------- */
.sh-site-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.75rem 2rem;
  padding-block: 0.875rem;
  border-block-end: 1px solid var(--sh-color-rule);
}

.sh-brand {
  display: block;
  flex: 0 1 auto;
  min-inline-size: 0;
  text-decoration: none;
}

/* The build trims the PNG's transparent padding, so the image is the lockup itself. */
.sh-brand__logo {
  inline-size: clamp(16rem, 31.5vw, 31rem);
  max-inline-size: 100%;
}

.sh-main-nav ul {
  display: flex;
  align-items: center;
  gap: clamp(1.5rem, 3.4vw, 3.25rem);
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: var(--sh-type-nav);
  line-height: 1.3;
}

.sh-main-nav a {
  display: inline-flex;
  align-items: center;
  min-block-size: 2.75rem;
  text-decoration: none;
}

.sh-main-nav a:hover,
.sh-main-nav a[aria-current="page"],
.sh-contact-links a:hover,
.sh-social-list a:hover {
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
}

/* ---------- Shared type ---------- */
.sh-eyebrow {
  margin: 0 0 1.5rem;
  font-size: var(--sh-type-eyebrow);
  line-height: 1.5;
  letter-spacing: var(--sh-tracking-eyebrow);
  text-transform: uppercase;
}

.sh-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  inline-size: 21.875rem;
  max-inline-size: 100%;
  min-block-size: 3.8125rem;
  padding: 0.625rem 1.75rem;
  border: 1px solid var(--sh-color-button);
  border-radius: 0;
  background: var(--sh-color-button);
  color: var(--sh-color-button-text);
  font-size: var(--sh-type-cta);
  line-height: 1.2;
  text-align: center;
  text-decoration: none;
  transition: background-color 160ms ease, border-color 160ms ease;
}

.sh-button:hover {
  border-color: var(--sh-color-button-hover);
  background: var(--sh-color-button-hover);
}

/* ---------- Home: hero ---------- */
.sh-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
  align-items: start;
  column-gap: var(--sh-hero-gap);
  padding-block-start: clamp(1.5rem, 1.85vw, 1.875rem);
}

.sh-hero__copy, .sh-hero__media { min-inline-size: 0; }
.sh-hero__copy { padding-block-start: 0.25rem; }

.sh-hero__title {
  margin: 0;
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: var(--sh-type-hero);
  font-weight: 600;
  font-optical-sizing: auto;
  line-height: var(--sh-leading-hero);
  letter-spacing: var(--sh-tracking-hero);
}

.sh-hero__title > span { display: block; }

.sh-hero__description {
  max-inline-size: 34ch;
  margin: 1.75rem 0 0;
  font-size: var(--sh-type-hero-copy);
  line-height: 1.4;
}

.sh-hero__actions { margin-block-start: 2rem; }

.sh-category-line {
  margin: 1.25rem 0 0;
  font-size: var(--sh-type-category);
  line-height: 1.6;
  letter-spacing: var(--sh-tracking-category);
  text-transform: uppercase;
}

.sh-hero__media {
  margin: 0;
  overflow: clip;
  aspect-ratio: 4 / 3;
  background: var(--sh-color-stone);
}

.sh-hero__media img {
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
}

/* ---------- Heritage line ---------- */
.sh-heritage-line {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: clamp(1rem, 1.8vw, 1.75rem);
  max-inline-size: 50rem;
  margin: 0 auto;
  padding-block: clamp(1.25rem, 1.75vw, 1.75rem);
  font-size: var(--sh-type-timeline);
  font-style: italic;
  line-height: 1.35;
  letter-spacing: 0.04em;
}

.sh-heritage-line__date { flex: none; white-space: nowrap; }

.sh-heritage-line__rule {
  flex: 1;
  min-inline-size: 1rem;
  /* A border rather than a background, so the rule survives Windows High Contrast (forced colors). */
  border-block-start: 1px solid currentColor;
  opacity: 0.55;
}

/* ---------- Product strip ---------- */
.sh-product-strip {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--sh-image-gap);
  margin: 0;
  padding: 0;
  list-style: none;
}

.sh-product-strip li { min-inline-size: 0; }

.sh-product-strip img {
  inline-size: 100%;
  aspect-ratio: var(--sh-image-strip-ratio);
  object-fit: cover;
  background: var(--sh-color-stone);
}

/* Keep each subject recognizable inside the low strip crop. */
.sh-product-strip img[data-key="cylinder"] { object-position: 50% 62%; }
.sh-product-strip img[data-key="hinge"]    { object-position: 50% 50%; }
.sh-product-strip img[data-key="mortise"]  { object-position: 50% 52%; }

/* ---------- Footer ---------- */
.sh-site-footer {
  margin-block-start: 1.25rem;
  padding-block: 0.625rem 1.25rem;
  border-block-start: 1px solid var(--sh-color-rule);
}

.sh-footer-heading {
  margin: 0.5rem 0 0.25rem;
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: clamp(1.5rem, 0.2156rem + 1.98vw, 2.125rem);
  font-weight: 600;
  line-height: 1.2;
}

.sh-footer-row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 1rem 2rem;
}

.sh-service-label {
  margin: 0;
  font-size: clamp(0.9375rem, 0.4704rem + 0.72vw, 1.1875rem);
  font-style: italic;
  line-height: 1.4;
}

.sh-contact-links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0 clamp(1.25rem, 3vw, 3rem);
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: var(--sh-type-contact);
  line-height: 1.4;
}

.sh-contact-links li { min-inline-size: 0; }
.sh-contact-links li + li {
  padding-inline-start: clamp(1.25rem, 3vw, 3rem);
  border-inline-start: 1px solid var(--sh-color-rule);
}

.sh-contact-links a,
.sh-social-list a,
.sh-social-list .sh-social-item {
  display: inline-flex;
  align-items: center;
  gap: 0.65em;
  min-block-size: 2.75rem;
  text-decoration: none;
}

.sh-contact-links a { overflow-wrap: anywhere; }

.sh-contact-links svg,
.sh-social-list svg {
  flex: none;
  inline-size: 1.15em;
  block-size: 1.15em;
}

.sh-social-list {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0 clamp(0.875rem, 1.6vw, 1.75rem);
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: var(--sh-type-social);
  line-height: 1.4;
}

.sh-social-list svg { inline-size: 1.2em; block-size: 1.2em; }

@media (width > 68.75em) {
  .sh-social-list {
    padding-inline-start: clamp(0.875rem, 1.6vw, 1.75rem);
    border-inline-start: 1px solid var(--sh-color-rule);
  }
  .sh-social-list li + li {
    padding-inline-start: clamp(0.875rem, 1.6vw, 1.75rem);
    border-inline-start: 1px solid var(--sh-color-rule);
  }
  .sh-social-list li { line-height: 1; }
}

/* ---------- About page ---------- */
.sh-story-header {
  padding-block: clamp(3rem, 6vw, 6rem);
  border-block-end: 1px solid var(--sh-color-rule);
}

.sh-story-header h1 {
  max-inline-size: 16ch;
  margin: 0;
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: clamp(2.75rem, 0.588rem + 5.4vw, 6.25rem);
  font-weight: 600;
  font-optical-sizing: auto;
  line-height: 1;
  letter-spacing: var(--sh-tracking-hero);
}

.sh-story-introduction {
  max-inline-size: 52ch;
  margin-block-start: 2.25rem;
  font-size: clamp(1.1875rem, 0.4042rem + 1.2375vw, 1.625rem);
  line-height: 1.55;
}

.sh-story-introduction p { margin: 0 0 0.9em; }
.sh-story-introduction p:last-child { margin: 0; }

.sh-story-chapter {
  display: grid;
  grid-template-columns: minmax(9rem, 0.34fr) minmax(0, 1fr);
  gap: clamp(2rem, 5vw, 5rem);
  padding-block: clamp(2.5rem, 5vw, 5rem);
  border-block-end: 1px solid var(--sh-color-rule);
}

.sh-story-chapter__meta { min-inline-size: 0; color: var(--sh-color-muted); }

.sh-story-chapter__label {
  margin: 0 0 1.25rem;
  font-size: 0.8125rem;
  font-weight: 700;
  letter-spacing: 0.13em;
  line-height: 1.6;
  text-transform: uppercase;
}

.sh-story-chapter__years {
  display: grid;
  gap: 0.25rem;
  margin: 0;
  padding: 0;
  list-style: none;
  color: var(--sh-color-bronze);
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: clamp(2.25rem, 0.4312rem + 3.96vw, 4.5rem);
  font-weight: 500;
  font-optical-sizing: auto;
  line-height: 1.05;
}

.sh-story-chapter__content {
  max-inline-size: var(--sh-story-column);
  min-inline-size: 0;
  font-size: var(--sh-type-story);
  line-height: 1.75;
}

.sh-story-chapter h2,
.sh-story-invitation h2 {
  margin: 0 0 1.5rem;
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: var(--sh-type-story-title);
  font-weight: 600;
  font-optical-sizing: auto;
  line-height: 1.15;
  letter-spacing: -0.02em;
}

.sh-story-chapter p,
.sh-story-invitation p { margin: 0 0 1.25em; }
.sh-story-chapter p:last-child { margin-block-end: 0; }

.sh-story-closing {
  padding-block: clamp(3rem, 6vw, 6rem) clamp(2.5rem, 5vw, 4.5rem);
  border-block-end: 1px solid var(--sh-color-rule);
  text-align: center;
}

.sh-story-closing__standard {
  margin: 0 0 1.5rem;
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: clamp(2.5rem, 0.49rem + 4.5vw, 5rem);
  font-weight: 600;
  font-optical-sizing: auto;
  line-height: 1.05;
  letter-spacing: var(--sh-tracking-hero);
}

.sh-story-closing__text {
  margin-block-start: 1.25rem;
  font-size: clamp(1.1875rem, 0.4042rem + 1.2375vw, 1.625rem);
  line-height: 1.55;
}
.sh-story-closing__text p { margin: 0 0 0.4em; }

.sh-story-invitation {
  padding-block: clamp(3rem, 6vw, 6rem);
}

.sh-story-invitation__inner { max-inline-size: var(--sh-story-column); }

.sh-story-invitation p {
  font-size: var(--sh-type-story);
  line-height: 1.75;
}

.sh-story-invitation .sh-button { margin-block-start: 0.75rem; }

/* ---------- 404 ---------- */
.sh-not-found { padding-block: clamp(4rem, 10vw, 8rem); }
.sh-not-found h1 {
  margin: 0 0 1.5rem;
  font-family: var(--sh-font-display);
  font-size-adjust: none; /* keep Bodoni Moda's optical sizing exactly as approved */
  font-size: clamp(2.5rem, 0.49rem + 4.5vw, 4.5rem);
  font-weight: 600;
  line-height: 1.05;
  letter-spacing: var(--sh-tracking-hero);
}
.sh-not-found p { font-size: var(--sh-type-story); }

/* ---------- Tablet ----------
   Breakpoints are in em (16px each at default settings: 48em = 768px, 68.75em = 1100px)
   so the layout follows a larger browser text size instead of assuming 16px. */
@media (48em <= width <= 68.75em) {
  :root {
    --sh-hero-gap: 2rem;
    --sh-type-hero: clamp(2.65rem, 1.008rem + 3.675vw, 3.65rem);
    --sh-type-hero-copy: clamp(1.0625rem, 0.592rem + 0.925vw, 1.375rem);
    --sh-tracking-category: 0.16em;
  }
  .sh-eyebrow { margin-block-end: 1.25rem; }
  .sh-hero__description { margin-block-start: 1.25rem; }
  .sh-hero__actions { margin-block-start: 1.5rem; }
  .sh-button { inline-size: 18rem; min-block-size: 3.25rem; }
  .sh-footer-row { flex-direction: column; align-items: flex-start; gap: 0.5rem; }
}

/* ---------- Mobile ---------- */
@media (width < 48em) {
  :root {
    --sh-page-gutter: 1.25rem;
    --sh-type-hero: clamp(2.125rem, 0.7678rem + 7.35vw, 3rem);
    --sh-type-hero-copy: clamp(1.125rem, 0.5972rem + 2.45vw, 1.25rem);
    --sh-type-cta: 1.25rem;
    --sh-type-eyebrow: 0.6875rem;
    --sh-type-category: 0.6875rem;
    --sh-type-timeline: clamp(0.9375rem, 0.4387rem + 1.8vw, 1.25rem);
    --sh-tracking-eyebrow: 0.17em;
    --sh-tracking-category: 0.15em;
    --sh-image-strip-ratio: 4 / 3;
    --sh-leading-hero: 1.02;
  }

  .sh-site-header {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.25rem;
    padding-block: 1rem 0.25rem;
  }

  .sh-brand__logo { inline-size: min(100%, 20rem); }
  .sh-main-nav ul { gap: 2rem; font-size: 1rem; }

  .sh-hero {
    grid-template-columns: minmax(0, 1fr);
    row-gap: 2rem;
    padding-block-start: 1.75rem;
  }

  .sh-eyebrow { margin-block-end: 1.125rem; }
  .sh-hero__description { margin-block-start: 1.25rem; }
  .sh-hero__actions { margin-block-start: 1.5rem; }
  .sh-button { inline-size: 100%; min-block-size: 3.25rem; }
  .sh-category-line { margin-block-start: 1rem; }

  .sh-heritage-line { gap: 0.75rem; padding-block: 1.5rem; letter-spacing: 0.02em; }

  .sh-site-footer { padding-block: 1rem 1.5rem; }
  .sh-footer-row { flex-direction: column; align-items: flex-start; gap: 0.75rem; }
  .sh-contact-links { flex-direction: column; align-items: flex-start; }
  .sh-contact-links li + li { padding-inline-start: 0; border-inline-start: 0; }
  .sh-social-list { gap: 0 1.25rem; }

  .sh-story-chapter { grid-template-columns: minmax(0, 1fr); gap: 1.25rem; }
  .sh-story-chapter__years { display: flex; flex-wrap: wrap; gap: 0.25rem 1rem; }
}

/* At very narrow widths, stack the products as complete panoramic crops. */
@media (width <= 26.25em) {
  .sh-product-strip { grid-template-columns: minmax(0, 1fr); }
  .sh-product-strip img { aspect-ratio: 2.6 / 1; }
}

/* Cross-fade between Home and About in supporting browsers. Only opted in when the visitor
   hasn't asked for reduced motion; everyone else gets a normal instant page load. */
@media (prefers-reduced-motion: no-preference) {
  @view-transition { navigation: auto; }
}

.sh-story-header h1 > span { display: block; }
