/* GENERATED by scripts/design-system-v2/legacy/sync.mjs — do not edit.
   Design Core tokens + windows-local theme + element-level legacy bridge. */
/* SEO Factory Design Core v2 — default tokens.
   Contract: docs/design/THEME_CONTRACT.md §2 — a theme may override VALUES of
   --ds-* properties only; this file is the single owner of names + defaults.

   v2 changes (docs/design/DESIGN-KIT-V2.md), all value-level, no new selectors:
   · fluid type scale (was fixed rem, max 2.25rem with no step up on desktop);
   · --ds-color-border-strong raised to a real UI boundary (>= 3:1 vs surfaces,
     WCAG 1.4.11 — form inputs, calculator fields, secondary buttons, table
     header rule and the media slot all paint with this token);
   · --ds-section-gap becomes a fluid rhythm instead of a flat 1.5rem;
   · block-boundary + alternate-surface tokens, so block separation stops being
     "identical hairline rule after identical hairline rule";
   · prose measure, image ratios, tabular numerals, heading weight/tracking. */

:root {
  /* color — semantic roles */
  --ds-color-bg: #f5f7fb;
  --ds-color-surface: #ffffff;
  --ds-color-raised: #ffffff;
  --ds-color-sunken: #eef1f7;
  --ds-color-text: #172033;
  --ds-color-text-muted: #4e5c75;
  --ds-color-text-inverted: #ffffff;
  --ds-color-border: #dbe2ef;
  --ds-color-border-strong: #6d7f96;
  --ds-color-accent: #1957c2;
  --ds-color-accent-hover: #1446a0;
  --ds-color-accent-soft: #e4edfb;
  --ds-color-success: #1f7a3d;
  --ds-color-warning: #8a5a00;
  --ds-color-danger: #a52a1a;
  --ds-color-focus: #1957c2;

  /* typography — fluid: first arg = 20rem viewport, last = 64rem+ */
  --ds-font-sans: system-ui, sans-serif;
  --ds-font-heading: system-ui, sans-serif;
  --ds-font-mono: ui-monospace, monospace;
  --ds-font-numeric: tabular-nums;
  --ds-text-xs: clamp(0.75rem, 0.72rem + 0.14vw, 0.8125rem);
  --ds-text-sm: clamp(0.875rem, 0.85rem + 0.14vw, 0.9375rem);
  --ds-text-base: clamp(1rem, 0.97rem + 0.14vw, 1.0625rem);
  --ds-text-lg: clamp(1.125rem, 1.04rem + 0.43vw, 1.3125rem);
  --ds-text-xl: clamp(1.3125rem, 1.23rem + 0.43vw, 1.5rem);
  --ds-text-2xl: clamp(1.5rem, 1.33rem + 0.85vw, 1.875rem);
  --ds-text-3xl: clamp(1.75rem, 1.52rem + 1.14vw, 2.25rem);
  --ds-text-4xl: clamp(2rem, 1.66rem + 1.7vw, 2.75rem);
  --ds-leading-tight: 1.18;
  --ds-leading-normal: 1.55;
  --ds-leading-loose: 1.7;
  --ds-weight-regular: 400;
  --ds-weight-medium: 500;
  --ds-weight-bold: 700;
  --ds-weight-heading: var(--ds-weight-bold);
  --ds-tracking-tight: -0.01em;
  --ds-tracking-normal: 0;
  --ds-tracking-heading: var(--ds-tracking-tight);
  --ds-prose-measure: 68ch;
  --ds-heading-measure: 30ch;

  /* spacing & layout */
  --ds-space-1: 0.25rem;
  --ds-space-2: 0.5rem;
  --ds-space-3: 0.75rem;
  --ds-space-4: 1rem;
  --ds-space-5: 1.5rem;
  --ds-space-6: 2rem;
  --ds-space-7: 3rem;
  --ds-space-8: 4rem;
  --ds-container-max: 72rem;
  --ds-container-narrow: 42rem;
  --ds-container-wide: 80rem;
  --ds-container-gutter: clamp(1rem, 0.8rem + 0.9vw, 1.75rem);
  --ds-section-gap: clamp(2.25rem, 1.6rem + 2.6vw, 3.75rem);
  --ds-block-gap: var(--ds-space-5);
  --ds-flow-gap: var(--ds-space-4);

  /* block composition (Design Core v2): separation is a value axis.
     boundary-width paints the hairline between same-surface blocks;
     alt-bg/alt-radius/alt-padding own the alternate-surface treatment. */
  --ds-block-boundary-width: 1px;
  --ds-block-alt-bg: var(--ds-color-surface);
  --ds-block-alt-radius: var(--ds-radius-lg);
  --ds-block-alt-padding: var(--ds-space-6);

  /* elevation & shape */
  --ds-radius-sm: 0.375rem;
  --ds-radius-md: 0.625rem;
  --ds-radius-lg: 1rem;
  --ds-radius-pill: 999px;
  --ds-shadow-sm: 0 1px 2px rgb(23 32 51 / 0.06);
  --ds-shadow-md: 0 4px 12px rgb(23 32 51 / 0.1);
  --ds-shadow-lg: 0 12px 32px rgb(23 32 51 / 0.14);
  --ds-border-width: 1px;

  /* imagery — one place owns every aspect ratio (MediaBlock, Gallery, cards) */
  --ds-ratio-cover: 16 / 9;
  --ds-ratio-card: 4 / 3;
  --ds-ratio-detail: 1 / 1;
  --ds-ratio-panorama: 21 / 9;

  /* mobile action bar (chrome; renders only when a phone fact exists) */
  --ds-mobile-bar-bg: var(--ds-color-accent);
  --ds-mobile-bar-fg: var(--ds-color-text-inverted);
  --ds-mobile-bar-height: 3.25rem;

  /* motion & focus */
  --ds-duration-fast: 120ms;
  --ds-duration-base: 200ms;
  --ds-duration-slow: 400ms;
  --ds-ease-standard: ease-out;
  --ds-focus-ring-width: 3px;
  --ds-focus-ring-offset: 2px;
}

/* Breakpoints are fixed Core constants (custom properties cannot be used
   in media queries): sm 36em · md 48em · lg 64em · xl 80em. Themes must
   not redefine them. See THEME_CONTRACT.md §3.2. */

@media (prefers-reduced-motion: reduce) {
  :root {
    --ds-duration-fast: 0ms;
    --ds-duration-base: 0ms;
    --ds-duration-slow: 0ms;
  }
}

/* windows-local v2 — value-only overrides of --ds-* tokens (THEME_CONTRACT.md §3/§4).
   No selectors beyond :root, no structural CSS, no component code, no content.
   Niche posture: cool light-blue daylight surfaces, rounded panels, serif-free
   headings with normal tracking — reads as a glazing company site, not a
   generic blue SEO template. Contrast numbers are computed in
   scripts/design-system-v2/check.mjs and recorded in DESIGN-KIT-V2.md.

   Token names only from Design Core v2; ratios are documented per surface. */

:root {
  --ds-color-bg: #f5f7f9;
  --ds-color-surface: #ffffff;
  --ds-color-raised: #ffffff;
  --ds-color-sunken: #e9eef3;
  --ds-color-text: #161e27;
  --ds-color-text-muted: #4f5c69;
  --ds-color-text-inverted: #ffffff;
  --ds-color-border: #d3dde6;
  --ds-color-border-strong: #6f8698;
  --ds-color-accent: #0b5c74;
  --ds-color-accent-hover: #084a5e;
  --ds-color-accent-soft: #e0eff4;
  --ds-color-success: #14603f;
  --ds-color-warning: #7a5200;
  --ds-color-danger: #a02c1c;
  --ds-color-focus: #0b5c74;

  /* consumer posture: rounder, softer, airier than Core */
  --ds-font-heading: system-ui, sans-serif;
  --ds-tracking-heading: -0.005em;
  --ds-leading-loose: 1.72;
  --ds-radius-sm: 0.5rem;
  --ds-radius-md: 0.75rem;
  --ds-radius-lg: 1.25rem;
  --ds-shadow-sm: 0 1px 2px rgb(11 92 116 / 0.08);
  --ds-shadow-md: 0 6px 18px rgb(11 92 116 / 0.11);
  --ds-shadow-lg: 0 16px 40px rgb(11 92 116 / 0.14);
  --ds-section-gap: clamp(2.5rem, 1.8rem + 2.9vw, 4rem);
  --ds-block-boundary-width: 1px;
  --ds-block-alt-bg: var(--ds-color-sunken);
  --ds-block-alt-radius: var(--ds-radius-lg);
  --ds-block-alt-padding: var(--ds-space-6);
}

/* ds-legacy.css — element-level bridge for the four pre-design-system windows
   sites (_work/{samara,ufa,voronezh,tyumen}-site). Their markup is semantic and
   carries NO classes, so the only way to design them without touching structure,
   copy or URLs is to style the tags themselves.

   Rules of engagement (DESIGN-KIT-V2.md §0/§12):
   · every value comes from a --ds-* token; nothing is hardcoded here;
   · no content is added, moved or dropped — selectors only;
   · works on the markup as it already exists: header>nav, main>section, and an
     <a> that is a direct child of a <section> is that section's action (a group
     of them is one action row) — checked against the built HTML of all 29 pages.
   Load order in BaseLayout: tokens.css → theme.css → this file. */

html {
  font-family: var(--ds-font-sans);
  color: var(--ds-color-text);
  background: var(--ds-color-bg);
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}
body {
  margin: 0;
  font-size: var(--ds-text-base);
  line-height: var(--ds-leading-normal);
}
*,
*::before,
*::after {
  box-sizing: border-box;
}

/* skip link: hidden until focused, same contract as chrome/SkipLink.astro */
body > a[href="#main"] {
  position: absolute;
  inset-inline-start: var(--ds-space-4);
  inset-block-start: -6rem;
  z-index: 100;
  background: var(--ds-color-raised);
  color: var(--ds-color-text);
  padding: var(--ds-space-3) var(--ds-space-4);
  border-radius: var(--ds-radius-sm);
  box-shadow: var(--ds-shadow-md);
  text-decoration: none;
}
body > a[href="#main"]:focus-visible {
  inset-block-start: var(--ds-space-4);
}

/* header — brand + nav on one raised band, links wrap instead of scrolling */
header {
  background: var(--ds-color-raised);
  border-block-end: var(--ds-border-width) solid var(--ds-color-border);
  padding-block: var(--ds-space-3);
  padding-inline: var(--ds-container-gutter);
}
header > * {
  max-width: var(--ds-container-max);
  margin-inline: auto;
}
header nav {
  display: flex;
  flex-wrap: wrap;
  column-gap: var(--ds-space-4);
  row-gap: var(--ds-space-1);
}
header nav a {
  display: inline-flex;
  align-items: center;
  min-block-size: 2.75rem;
  color: var(--ds-color-text);
  text-decoration: none;
  font-size: var(--ds-text-sm);
  border-radius: var(--ds-radius-sm);
}
header nav a:hover {
  color: var(--ds-color-accent);
  text-decoration: underline;
  text-underline-offset: var(--ds-space-1);
}

/* main — full-bleed alternating sections with a centred measure inside them.
   calc() against 100% (not 100vw) keeps the gutter exact when a scrollbar is
   present, which is the difference between "no horizontal overflow" and a
   15px shift on desktop QA runs. */
main {
  display: block;
}
main > section {
  padding-block: var(--ds-section-gap);
  padding-inline: max(var(--ds-container-gutter), calc((100% - var(--ds-container-max)) / 2));
}
main > section:nth-of-type(even) {
  background: var(--ds-block-alt-bg);
  border-block: var(--ds-block-boundary-width) solid var(--ds-color-border);
}
main > nav {
  padding-block: var(--ds-space-4);
  padding-inline: var(--ds-container-gutter);
  max-width: var(--ds-container-max);
  margin-inline: auto;
  font-size: var(--ds-text-sm);
  color: var(--ds-color-text-muted);
}
main > nav a {
  color: var(--ds-color-text-muted);
}

/* type */
h1,
h2,
h3,
h4 {
  font-family: var(--ds-font-heading);
  font-weight: var(--ds-weight-heading);
  line-height: var(--ds-leading-tight);
  letter-spacing: var(--ds-tracking-heading);
  max-inline-size: var(--ds-heading-measure);
  text-wrap: balance;
  margin-block: 0 var(--ds-space-4);
}
h1 {
  font-size: var(--ds-text-4xl);
  margin-block-start: 0;
}
h2 {
  font-size: var(--ds-text-2xl);
  margin-block: var(--ds-space-6) var(--ds-space-4);
}
h3 {
  font-size: var(--ds-text-xl);
  margin-block: var(--ds-space-5) var(--ds-space-3);
}
h4 {
  font-size: var(--ds-text-lg);
}
p {
  max-inline-size: var(--ds-prose-measure);
  margin-block: 0 var(--ds-flow-gap);
  line-height: var(--ds-leading-loose);
}
ul,
ol {
  max-inline-size: var(--ds-prose-measure);
  padding-inline-start: var(--ds-space-5);
  margin-block: 0 var(--ds-flow-gap);
}
li + li {
  margin-block-start: var(--ds-space-2);
}
li::marker {
  color: var(--ds-color-text-muted);
}
a {
  color: var(--ds-color-accent);
}
a:hover {
  color: var(--ds-color-accent-hover);
}
:focus-visible {
  outline: var(--ds-focus-ring-width) solid var(--ds-color-focus);
  outline-offset: var(--ds-focus-ring-offset);
  border-radius: var(--ds-radius-sm);
}
img {
  max-width: 100%;
  height: auto;
  border-radius: var(--ds-radius-md);
}
hr {
  border: 0;
  border-block-start: var(--ds-border-width) solid var(--ds-color-border);
  margin-block: var(--ds-space-6);
}

/* a link that is a direct child of a section is that section's action
   (these pages carry no classes to key on); a group of them is one action row */
main > section > a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-block-size: 2.75rem;
  padding-inline: var(--ds-space-5);
  padding-block: var(--ds-space-3);
  border-radius: var(--ds-radius-md);
  border: var(--ds-border-width) solid var(--ds-color-accent);
  background: transparent;
  color: var(--ds-color-accent);
  font-weight: var(--ds-weight-medium);
  text-decoration: none;
  margin-block-start: var(--ds-space-3);
  margin-inline-end: var(--ds-space-3);
}
main > section > a:hover {
  background: var(--ds-color-accent-soft);
}
/* the first section is the first screen: its leading action is the page's primary CTA */
main > section:first-of-type > a:first-of-type {
  background: var(--ds-color-accent);
  color: var(--ds-color-text-inverted);
  border-color: var(--ds-color-accent);
  padding-inline: var(--ds-space-6);
  font-size: var(--ds-text-lg);
}
main > section:first-of-type > a:first-of-type:hover {
  background: var(--ds-color-accent-hover);
  border-color: var(--ds-color-accent-hover);
  color: var(--ds-color-text-inverted);
}

/* FAQ — native disclosure, zero JS */
details {
  border-block-end: var(--ds-border-width) solid var(--ds-color-border);
  padding-block: var(--ds-space-3);
  max-inline-size: var(--ds-prose-measure);
}
summary {
  cursor: pointer;
  min-block-size: 2.75rem;
  display: inline-flex;
  align-items: center;
  font-weight: var(--ds-weight-medium);
  font-family: var(--ds-font-heading);
  color: var(--ds-color-text);
}
details[open] > summary {
  margin-block-end: var(--ds-space-2);
}
details p {
  color: var(--ds-color-text-muted);
  margin-block: 0 var(--ds-space-3);
}

/* forms — the calculator and any future request form */
fieldset {
  border: var(--ds-border-width) solid var(--ds-color-border);
  border-radius: var(--ds-radius-md);
  padding: var(--ds-space-4) var(--ds-space-5) var(--ds-space-5);
  margin-block: 0 var(--ds-space-5);
  background: var(--ds-color-surface);
}
legend {
  padding-inline: var(--ds-space-2);
  font-weight: var(--ds-weight-medium);
  font-size: var(--ds-text-sm);
}
label {
  display: flex;
  align-items: center;
  gap: var(--ds-space-3);
  min-block-size: 2.75rem;
  font-size: var(--ds-text-base);
}
input,
select,
textarea,
button {
  font: inherit;
  color: var(--ds-color-text);
}
input[type="number"],
input[type="text"],
input[type="email"],
input[type="tel"],
select,
textarea {
  background: var(--ds-color-bg);
  border: var(--ds-border-width) solid var(--ds-color-border-strong);
  border-radius: var(--ds-radius-sm);
  padding: var(--ds-space-3);
  min-block-size: 2.75rem;
  inline-size: min(100%, 16rem);
}
input[type="radio"],
input[type="checkbox"] {
  inline-size: 1.25rem;
  block-size: 1.25rem;
  accent-color: var(--ds-color-accent);
}
textarea {
  min-block-size: 6rem;
  inline-size: 100%;
  max-inline-size: var(--ds-prose-measure);
  resize: vertical;
}
button,
input[type="submit"] {
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-block-size: 2.75rem;
  padding-inline: var(--ds-space-5);
  border-radius: var(--ds-radius-md);
  border: var(--ds-border-width) solid transparent;
  background: var(--ds-color-accent);
  color: var(--ds-color-text-inverted);
  font-weight: var(--ds-weight-medium);
  text-decoration: none;
}
button:hover,
input[type="submit"]:hover {
  background: var(--ds-color-accent-hover);
}
output,
[role="status"] {
  font-variant-numeric: var(--ds-font-numeric);
}

/* tables — real tabular rhythm even without classes */
table {
  border-collapse: collapse;
  inline-size: 100%;
  font-size: var(--ds-text-base);
}
th,
td {
  text-align: start;
  padding: var(--ds-space-3) var(--ds-space-4);
  border-block-end: var(--ds-border-width) solid var(--ds-color-border);
}
th {
  font-weight: var(--ds-weight-medium);
  border-block-end-color: var(--ds-color-border-strong);
}
caption {
  text-align: start;
  padding-block-end: var(--ds-space-3);
  color: var(--ds-color-text-muted);
  font-size: var(--ds-text-sm);
}

/* footer */
footer {
  background: var(--ds-color-sunken);
  border-block-start: var(--ds-border-width) solid var(--ds-color-border);
  padding-block: var(--ds-space-7) var(--ds-space-5);
  margin-block-start: var(--ds-space-7);
  font-size: var(--ds-text-sm);
  color: var(--ds-color-text-muted);
  padding-inline: var(--ds-container-gutter);
}
footer > * {
  max-width: var(--ds-container-max);
  margin-inline: auto;
}
footer a {
  display: inline-flex;
  align-items: center;
  min-block-size: 2.75rem;
  color: var(--ds-color-accent);
  font-weight: var(--ds-weight-bold);
  font-variant-numeric: var(--ds-font-numeric);
  text-decoration: none;
}
footer a:hover {
  text-decoration: underline;
}

@media (max-width: 47.99em) {
  main > section {
    padding-block: var(--ds-space-7);
  }
  h1 {
    font-size: var(--ds-text-3xl);
  }
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

/* Site-local layout helpers for the windows pages.
   ds.css is generated (scripts/design-system-v2/legacy/sync.mjs — do not edit),
   and its element-level bridge has no rule for a card grid: it caps every `ul`
   and `p` at the prose measure, which is right for paragraphs and wrong for a
   row of cards. These two classes carry the only extra layout the pages need,
   and every value still comes from a --ds-* token. */

.ds-grid {
  display: grid;
  gap: var(--ds-space-4);
  grid-template-columns: repeat(auto-fit, minmax(min(19rem, 100%), 1fr));
  list-style: none;
  margin: 0;
  padding: 0;
  max-inline-size: none;
}

.ds-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--ds-space-3);
  margin-block-start: var(--ds-space-3);
}

/* --- policy gate (generated by _work/render-windows-policy.mjs) ---
   The gate must read as a standing warning, not as ordinary prose: the legal part
   is not finished until the owner confirms the operator requisites. Values come
   from real --ds-* tokens only. */
.ds-policy .gate {
  border-inline-start: 3px solid var(--ds-color-warning);
  background: var(--ds-color-sunken);
  padding: var(--ds-space-4);
  border-radius: var(--ds-radius-md);
  margin-block: var(--ds-space-4);
}

.ds-policy .gate h2 {
  margin-block-start: 0;
  font-size: var(--ds-text-lg);
  color: var(--ds-color-warning);
}
