/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[2].use[1]!./node_modules/next/dist/build/webpack/loaders/next-font-loader/index.js??ruleSet[1].rules[14].oneOf[2].use[2]!./node_modules/next/font/google/target.css?{"path":"src/app/(marketing)/fonts.ts","import":"Montserrat","arguments":[{"subsets":["latin"],"weight":["600","700"],"variable":"--font-montserrat","display":"swap"}],"variableName":"montserrat"} ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/* cyrillic-ext */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/_next/static/media/b1f344208eb4edfe-s.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/_next/static/media/48e2044251ef3125-s.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/_next/static/media/bf24a9759715e608-s.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;
}
/* latin-ext */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/_next/static/media/1f173e5e25f3efee-s.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;
}
/* latin */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/_next/static/media/904be59b21bd51cb-s.p.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;
}
/* cyrillic-ext */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/b1f344208eb4edfe-s.woff2) format('woff2');
  unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/48e2044251ef3125-s.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/bf24a9759715e608-s.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;
}
/* latin-ext */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/1f173e5e25f3efee-s.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;
}
/* latin */
@font-face {
  font-family: '__Montserrat_4c6909';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/904be59b21bd51cb-s.p.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: '__Montserrat_Fallback_4c6909';src: local("Arial");ascent-override: 85.79%;descent-override: 22.25%;line-gap-override: 0.00%;size-adjust: 112.83%
}.__className_4c6909 {font-family: '__Montserrat_4c6909', '__Montserrat_Fallback_4c6909';font-style: normal
}.__variable_4c6909 {--font-montserrat: '__Montserrat_4c6909', '__Montserrat_Fallback_4c6909'
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[2].use[1]!./node_modules/next/dist/build/webpack/loaders/next-font-loader/index.js??ruleSet[1].rules[14].oneOf[2].use[2]!./node_modules/next/font/google/target.css?{"path":"src/app/(marketing)/fonts.ts","import":"Lato","arguments":[{"subsets":["latin"],"weight":["400","700"],"variable":"--font-lato","display":"swap"}],"variableName":"lato"} ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/* latin-ext */
@font-face {
  font-family: '__Lato_47a102';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/_next/static/media/cce080f35d014443-s.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;
}
/* latin */
@font-face {
  font-family: '__Lato_47a102';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/_next/static/media/4de1fea1a954a5b6-s.p.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;
}
/* latin-ext */
@font-face {
  font-family: '__Lato_47a102';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/39969fcf98a3026e-s.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;
}
/* latin */
@font-face {
  font-family: '__Lato_47a102';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/_next/static/media/6d664cce900333ee-s.p.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: '__Lato_Fallback_47a102';src: local("Arial");ascent-override: 101.03%;descent-override: 21.80%;line-gap-override: 0.00%;size-adjust: 97.69%
}.__className_47a102 {font-family: '__Lato_47a102', '__Lato_Fallback_47a102';font-style: normal
}.__variable_47a102 {--font-lato: '__Lato_47a102', '__Lato_Fallback_47a102'
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[14].oneOf[12].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[14].oneOf[12].use[3]!./src/app/(marketing)/marketing.css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************/
/* ============================================================
   Marketing-scoped design layer — "The Structural Record"
   ------------------------------------------------------------
   Scoped to .marketing-root (and .marketing-portal, for Radix
   portal surfaces that render outside it) so NOTHING here reaches the admin
   CRM. app/globals.css and components/ui/** are shared with the
   admin app and are fenced; see CLAUDE.md and DESIGN.md.

   Token values are normative in DESIGN.md. Do not edit them
   here without updating that file.
   ============================================================ */

:is(.marketing-root, .marketing-portal) {
  /* Brand — from docs/DINYC-BrandGuide.jpg. Do not change. */
  --m-brand-blue: #4db8f1;
  --m-brand-green: #64f85e;

  /* Grounds and ink */
  --m-ink: #171717;
  --m-ink-muted: #5c5c5c;
  --m-paper: #ffffff;
  --m-paper-dim: #f6f6f6;
  --m-hairline: #e4e4e4;
  /* A control's boundary is not a hairline. WCAG 1.4.11 asks 3:1 for the
     stroke that identifies an interactive component, and #e4e4e4 gives
     1.19:1 on paper and 1.17:1 on Sheet Tint. #878787 clears both
     (3.59:1 and 3.32:1). Rules, dividers and card edges are NOT controls
     and keep the hairline — this token is only for inputs and selects. */
  --m-control-stroke: #878787;
  /* The brand blue, darkened 35% at the same hue and saturation, for
     figures on light grounds. #4db8f1 itself is 2.06:1 on Sheet Tint and
     2.22:1 on paper — it fails even the 3:1 large-text floor. This shade
     is 3.91:1 and 4.22:1. It exists so a numeral can carry brand colour on
     a light band; it is NOT a second brand blue and must not spread to
     buttons, links or anything on ink, where #4db8f1 reads 8.06:1. */
  --m-brand-blue-deep: #0f82c0;
  --m-ink-inverse: #d4d4d4;
  --m-hairline-inverse: rgba(255, 255, 255, 0.12);

  --m-gradient: linear-gradient(135deg, #4db8f1 0%, #64f85e 100%);
  /* The same gradient with both stops lifted 20% toward white — the
     hover state the solid brand buttons use (#4db8f1 → #79caf4,
     #64f85e → #83f97e), applied to each end. */
  --m-gradient-lift: linear-gradient(135deg, #79caf4 0%, #83f97e 100%);

  /* Radius — matches the incumbent --radius scale */
  --m-r-sm: 6px;
  --m-r-md: 8px;
  --m-r-lg: 10px;
  --m-r-xl: 14px;

  --m-ease: cubic-bezier(0.4, 0, 0.2, 1);
  --m-dur: 180ms;

  color: var(--m-ink);
  font-family: var(--font-lato), system-ui, sans-serif;
}

/* ------------------------------------------------------------
   Grounds. The Band Rule: every section declares one, and
   adjacent sections must differ.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) .band-paper {
  background-color: var(--m-paper);
  color: var(--m-ink);
}

:is(.marketing-root, .marketing-portal) .band-tint {
  background-color: var(--m-paper-dim);
  color: var(--m-ink);
}

:is(.marketing-root, .marketing-portal) .band-ink {
  background-color: var(--m-ink);
  color: var(--m-paper);
}

/* A Radix portal surface carries .marketing-portal and its band class on the
   SAME element — SheetContent is `marketing-portal … band-ink`. Every rule
   above is a DESCENDANT selector, so none of them match it: the panel gets no
   ground and no inverse ink. What it does get is `color: var(--m-ink)` from
   the :is() block at the top of this file, which paints #171717 text on the
   #171717 ground the panel sets for itself.

   A `text-white` utility on the element cannot rescue it. Tailwind ships its
   utilities inside @layer utilities and this file is unlayered, and an
   unlayered declaration beats a layered one whatever the specificity. That is
   why every link in the mobile menu was invisible while the six service links
   (text-[#d4d4d4]) and the phone number were fine — those sit on descendants,
   which the :is() block never touches.

   Self-matching compounds, so a portal surface can declare a band like any
   section does. Deliberately just the three grounds: each unlayered rule here
   is one more thing that silently outranks a Tailwind utility. */
.marketing-portal.band-paper {
  background-color: var(--m-paper);
  color: var(--m-ink);
}

.marketing-portal.band-tint {
  background-color: var(--m-paper-dim);
  color: var(--m-ink);
}

.marketing-portal.band-ink {
  background-color: var(--m-ink);
  color: var(--m-paper);
}

/* Brand colour is legible only on ink. The Dark Ground Rule. */
:is(.marketing-root, .marketing-portal) .band-ink .accent {
  color: var(--m-brand-blue);
}

:is(.marketing-root, .marketing-portal) .band-ink p,
:is(.marketing-root, .marketing-portal) .band-ink li {
  color: var(--m-ink-inverse);
}

/* Opt a hero lede up to paper white. Body copy on ink is #d4d4d4 everywhere
   else and stays that way — this is only for text sitting over a PHOTOGRAPH,
   where the lede is always the binding contrast element and its colour is the
   one lever besides the scrim. Lifting it to #ffffff buys roughly 1.5x, which
   is what pays for a lighter wash over the picture.

   It has to be a rule here rather than a `text-white` utility: this file is
   unlayered and Tailwind's utilities live in @layer utilities, so the
   `.band-ink p` rule above outranks the utility whatever the specificity —
   the same trap documented at the top of this file for the mobile menu.
   Measure any hero this is applied to: scripts/ops/check_hero_contrast.mjs */
:is(.marketing-root, .marketing-portal) .band-ink p.lede-paper {
  color: var(--m-paper);
}

:is(.marketing-root, .marketing-portal) .band-ink h1,
:is(.marketing-root, .marketing-portal) .band-ink h2,
:is(.marketing-root, .marketing-portal) .band-ink h3,
:is(.marketing-root, .marketing-portal) .band-ink h4 {
  color: var(--m-paper);
}

/* ------------------------------------------------------------
   Type roles. The Five Roles Rule: every text element is
   exactly one of these.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) .t-display {
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: clamp(2.5rem, 6vw, 4.5rem);
  font-weight: 700;
  line-height: 1.05;
  letter-spacing: -0.02em;
  text-wrap: balance;
}

:is(.marketing-root, .marketing-portal) .t-headline {
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: clamp(1.875rem, 4vw, 2.75rem);
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

:is(.marketing-root, .marketing-portal) .t-title {
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: 1.25rem;
  font-weight: 600;
  line-height: 1.3;
}

:is(.marketing-root, .marketing-portal) .t-body {
  font-family: var(--font-lato), system-ui, sans-serif;
  font-size: 1.0625rem;
  font-weight: 400;
  line-height: 1.7;
  max-width: 68ch;
}

/* Body copy on ink needs a touch more leading and tracking. */
:is(.marketing-root, .marketing-portal) .band-ink .t-body {
  line-height: 1.75;
  letter-spacing: 0.005em;
}

:is(.marketing-root, .marketing-portal) .t-label {
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: 0.75rem;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* A figure that has been verified. Never applied to an
   unverified claim — see PRODUCT.md "Evidence on Hand". */
:is(.marketing-root, .marketing-portal) .t-figure {
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: clamp(2rem, 4vw, 3rem);
  font-weight: 700;
  line-height: 1;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}

/* An unverified claim: stated, never amplified. Copy is final,
   so the demotion is entirely typographic. */
:is(.marketing-root, .marketing-portal) .t-stated {
  font-family: var(--font-lato), system-ui, sans-serif;
  font-size: 1.0625rem;
  font-weight: 400;
  line-height: 1.4;
  color: var(--m-ink-muted);
}

:is(.marketing-root, .marketing-portal) .band-ink .t-stated {
  color: var(--m-ink-inverse);
}

/* ------------------------------------------------------------
   Surfaces. The No-Shadow Rule: depth is tone and hairline.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) .surface {
  background-color: var(--m-paper);
  border: 1px solid var(--m-hairline);
  border-radius: var(--m-r-lg);
  box-shadow: none;
}

:is(.marketing-root, .marketing-portal) .band-tint .surface {
  background-color: var(--m-paper);
}

:is(.marketing-root, .marketing-portal) .band-paper .surface {
  background-color: var(--m-paper-dim);
}

:is(.marketing-root, .marketing-portal) .band-ink .surface {
  background-color: transparent;
  border-color: var(--m-hairline-inverse);
}

:is(.marketing-root, .marketing-portal) .rule {
  border: 0;
  border-top: 1px solid var(--m-hairline);
}

:is(.marketing-root, .marketing-portal) .band-ink .rule {
  border-top-color: var(--m-hairline-inverse);
}

/* The brand gradient. Once per page, never a button fill — except for the
   homepage hero CTA, which Bryce made a gradient on 2026-09-01. That is the
   page's single primary action and the only button anywhere carrying it; the
   rule still holds for every other button, and "once per page" still holds
   because the hero has no .rule-brand above it. */
:is(.marketing-root, .marketing-portal) .rule-brand {
  border: 0;
  height: 3px;
  background: var(--m-gradient);
}

/* The gradient as a button fill. Sets background-image, not background, so it
   overrides Tailwind's bg-* utilities on the same element without fighting
   them; the ink text is set on the button itself since both stops are light
   (#4db8f1 is 8.06:1 against #171717, #64f85e higher still). background-image
   does not animate, so the hover swap is a cut, not a fade — consistent with
   the solid buttons only in colour, not in timing. */
:is(.marketing-root, .marketing-portal) .btn-brand-gradient {
  background-image: var(--m-gradient);
}

:is(.marketing-root, .marketing-portal) .btn-brand-gradient:hover {
  background-image: var(--m-gradient-lift);
}

/* Media frame — the building is the subject. */
:is(.marketing-root, .marketing-portal) .media-frame {
  position: relative;
  overflow: hidden;
  border-radius: var(--m-r-xl);
  background-color: var(--m-paper-dim);
}

:is(.marketing-root, .marketing-portal) .band-ink .media-frame {
  background-color: #0f0f0f;
}

/* ------------------------------------------------------------
   Focus. One visible treatment across both grounds.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) a:focus-visible,
:is(.marketing-root, .marketing-portal) button:focus-visible,
:is(.marketing-root, .marketing-portal) input:focus-visible,
:is(.marketing-root, .marketing-portal) select:focus-visible,
:is(.marketing-root, .marketing-portal) textarea:focus-visible,
:is(.marketing-root, .marketing-portal) [tabindex]:focus-visible {
  outline: 2px solid var(--m-brand-blue);
  outline-offset: 2px;
  border-radius: var(--m-r-sm);
}

:is(.marketing-root, .marketing-portal) .band-ink a:focus-visible,
:is(.marketing-root, .marketing-portal) .band-ink button:focus-visible {
  outline-color: var(--m-paper);
}

/* Browser surfaces the design still owns. */
:is(.marketing-root, .marketing-portal) ::selection {
  background-color: var(--m-brand-blue);
  color: var(--m-ink);
}

/* ------------------------------------------------------------
   Motion. WCAG 2.3.3.
   The capability marquee whose animation this section used to
   override was removed from the homepage 2026-08-28. Its @keyframes
   and .animate-marquee rule still sit in the fenced globals.css and
   cannot be deleted from here; nothing renders the class any more.
   ------------------------------------------------------------ */

@media (prefers-reduced-motion: reduce) {
  :is(.marketing-root, .marketing-portal) *,
  :is(.marketing-root, .marketing-portal) *::before,
  :is(.marketing-root, .marketing-portal) *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ------------------------------------------------------------
   Shared primitives, neutralised locally.
   components/ui/** is fenced (shared with the admin CRM), so
   its stock shadcn shadow and radius are overridden here by
   data-slot rather than by editing the primitive.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) [data-slot='card'] {
  box-shadow: none;
  border-color: var(--m-hairline);
  border-radius: var(--m-r-lg);
}

:is(.marketing-root, .marketing-portal) .band-ink [data-slot='card'] {
  background-color: transparent;
  border-color: var(--m-hairline-inverse);
  color: var(--m-paper);
}

/* Badge: the brief keeps the text, so the pill becomes a label.
   No fill, no border, no capsule — it reads as drawing annotation. */
:is(.marketing-root, .marketing-portal) [data-slot='badge'] {
  background-color: transparent;
  border-color: transparent;
  color: var(--m-ink-muted);
  padding-inline: 0;
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

:is(.marketing-root, .marketing-portal) .band-ink [data-slot='badge'] {
  color: var(--m-brand-blue);
}

/* The No-Shadow Rule reached only [data-slot='card']; every form control
   kept shadcn's `shadow-xs`. Depth is tone and hairline, everywhere. */
:is(.marketing-root, .marketing-portal) [data-slot='input'],
:is(.marketing-root, .marketing-portal) [data-slot='textarea'],
:is(.marketing-root, .marketing-portal) [data-slot='select-trigger'],
:is(.marketing-root, .marketing-portal) [data-slot='button'] {
  box-shadow: none;
}

/* Inputs: white fill, control stroke, the specced 2.75rem.
   White fill matters on a .surface (#f6f6f6) — a field must read as a field. */
:is(.marketing-root, .marketing-portal) [data-slot='input'],
:is(.marketing-root, .marketing-portal) [data-slot='textarea'],
:is(.marketing-root, .marketing-portal) [data-slot='select-trigger'] {
  background-color: var(--m-paper);
  border-color: var(--m-control-stroke);
  border-radius: var(--m-r-md);
}

:is(.marketing-root, .marketing-portal) [data-slot='input'],
:is(.marketing-root, .marketing-portal) [data-slot='select-trigger'] {
  height: 2.75rem;
}

:is(.marketing-root, .marketing-portal) [data-slot='input']::placeholder,
:is(.marketing-root, .marketing-portal) [data-slot='textarea']::placeholder,
:is(.marketing-root, .marketing-portal) [data-slot='select-trigger'] [data-slot='select-value'] {
  color: var(--m-ink-muted);
}

/* Focus: stroke to Structural Black, plus the system's one focus outline. */
:is(.marketing-root, .marketing-portal) [data-slot='input']:focus-visible,
:is(.marketing-root, .marketing-portal) [data-slot='textarea']:focus-visible,
:is(.marketing-root, .marketing-portal) [data-slot='select-trigger']:focus-visible {
  border-color: var(--m-ink);
}

/* ------------------------------------------------------------
   Base element mapping.
   Headings take Montserrat and body takes Lato without editing
   every element — the brand faces apply to the whole public
   surface, and per-element t-* classes refine from there.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) h1,
:is(.marketing-root, .marketing-portal) h2,
:is(.marketing-root, .marketing-portal) h3,
:is(.marketing-root, .marketing-portal) h4,
:is(.marketing-root, .marketing-portal) h5,
:is(.marketing-root, .marketing-portal) h6,
:is(.marketing-root, .marketing-portal) button,
:is(.marketing-root, .marketing-portal) [data-slot='button'] {
  font-family: var(--font-montserrat), system-ui, sans-serif;
}

:is(.marketing-root, .marketing-portal) h1,
:is(.marketing-root, .marketing-portal) h2 {
  letter-spacing: -0.015em;
  text-wrap: balance;
}

/* Secondary text on ink. The token classes resolve against the
   light theme, so they are remapped rather than left at a value
   that fails contrast on the dark ground. */
:is(.marketing-root, .marketing-portal) .band-ink .text-muted-foreground,
:is(.marketing-root, .marketing-portal) .band-ink .text-gray-600,
:is(.marketing-root, .marketing-portal) .band-ink .text-gray-500 {
  color: var(--m-ink-inverse);
}

/* Prose measure. The Reading rule caps body copy at 68ch;
   centred wide paragraphs were running past 90. */
:is(.marketing-root, .marketing-portal) .measure {
  max-width: 68ch;
  margin-inline: auto;
}

/* shadcn's muted-foreground is #737373, which lands at 4.4:1 on the
   Sheet Tint ground — just under AA. Remap it to Annotation Grey. */
:is(.marketing-root, .marketing-portal) .text-muted-foreground {
  color: var(--m-ink-muted);
}

:is(.marketing-root, .marketing-portal) .band-ink .text-muted-foreground {
  color: var(--m-ink-inverse);
}

/* A display heading long enough to wrap three times stops being a
   statement and becomes a wall. Over ~40 characters, step the size
   down and widen the measure so it lands in two lines. */
:is(.marketing-root, .marketing-portal) .t-display-long {
  font-size: clamp(2.25rem, 4.6vw, 3.5rem);
  line-height: 1.08;
  max-width: 24ch;
}

/* Credential line. Label face and tracking, but no text-transform:
   uppercasing a 35-character string reads as all-caps body text. */
:is(.marketing-root, .marketing-portal) .t-credential {
  font-family: var(--font-montserrat), system-ui, sans-serif;
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 0.04em;
}

/* ------------------------------------------------------------
   List primitives. These replace the checkmark-and-icon-circle
   card grids that were the site's only structural idea.
   ------------------------------------------------------------ */

:is(.marketing-root, .marketing-portal) .list-hair {
  margin: 0;
  padding: 0;
  list-style: none;
}

:is(.marketing-root, .marketing-portal) .list-hair > li {
  font-family: var(--font-lato), system-ui, sans-serif;
  font-size: 1rem;
  line-height: 1.5;
  padding: 0.75rem 0;
  border-top: 1px solid var(--m-hairline);
}

:is(.marketing-root, .marketing-portal) .list-hair > li:last-child {
  border-bottom: 1px solid var(--m-hairline);
}

:is(.marketing-root, .marketing-portal) .band-ink .list-hair > li {
  border-color: var(--m-hairline-inverse);
  color: var(--m-ink-inverse);
}

/* Numbered policy sections. The number is a COUNTER, not copy: the Privacy
   Policy and Terms carry "1." … "11." in their source wording, the Disclaimer
   and Data Security policy do not, and numbering all four by hand would mean
   inventing text on two of them. Rendering it here keeps every string verbatim
   and makes the whole legal set citable in the same way. */
:is(.marketing-root, .marketing-portal) .legal-numbered {
  counter-reset: legal-section;
}

:is(.marketing-root, .marketing-portal) .legal-numbered > section {
  counter-increment: legal-section;
}

:is(.marketing-root, .marketing-portal) .legal-numbered > section > h2::before {
  content: counter(legal-section) '. ';
}

/* A plain list for prose. .list-hair rules every item, which is right for a
   scannable index but far too busy inside a policy section — the rules compete
   with the section dividers and the page reads as a grid of fragments. This
   keeps the drawing-annotation marker and drops the rules entirely. */
:is(.marketing-root, .marketing-portal) .list-plain {
  margin: 0;
  padding: 0;
  list-style: none;
}

:is(.marketing-root, .marketing-portal) .list-plain > li {
  position: relative;
  padding-left: 1.5rem;
  font-family: var(--font-lato), system-ui, sans-serif;
  font-size: 1.0625rem;
  font-weight: 400;
  line-height: 1.7;
}

:is(.marketing-root, .marketing-portal) .list-plain > li + li {
  margin-top: 0.625rem;
}

:is(.marketing-root, .marketing-portal) .list-plain > li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.9em;
  width: 0.625rem;
  height: 1px;
  background-color: currentColor;
  opacity: 0.55;
}

/* A definition row: term over description, separated by a rule.
   Two columns of meaning, no container. */
:is(.marketing-root, .marketing-portal) .row-hair {
  border-top: 1px solid var(--m-hairline);
  padding-top: 1.5rem;
}

:is(.marketing-root, .marketing-portal) .band-ink .row-hair {
  border-color: var(--m-hairline-inverse);
}

/* The Dark Ground Rule, enforced rather than remembered.
   A figure takes its colour from the ground it sits on: the brand blue itself
   on ink (8.06:1), and its deepened shade on light (3.91:1 on Sheet Tint,
   4.22:1 on paper). The brand hex on Sheet Tint is 2.06:1 and fails even the
   3:1 large-text floor, which is why it cannot simply be reused here. */
:is(.marketing-root, .marketing-portal) .t-figure {
  color: var(--m-brand-blue-deep);
}

:is(.marketing-root, .marketing-portal) .band-ink .t-figure {
  color: var(--m-brand-blue);
}

/* Left-aligned measure. `.measure` centres its block with auto margins,
   which is wrong once the page reads left-aligned. */
:is(.marketing-root, .marketing-portal) .measure-left {
  max-width: 68ch;
}

/* Releases the measure. `.t-body` caps itself at 68ch, and a Tailwind
   `max-w-none` cannot undo that — utilities live in @layer utilities and this
   file is unlayered, so the cap wins whatever the specificity. This rule sits
   after `.t-body` at equal specificity, so it takes it off. Use sparingly: a
   68ch line is the readable one, and this exists for copy that is deliberately
   set to the container width. */
:is(.marketing-root, .marketing-portal) .measure-full {
  max-width: none;
}

/* ------------------------------------------------------------
   Print: the building report.
   EmissionsStandingLookup marks its result .print-report. When the visitor
   prints (or saves as PDF — the "Print or save PDF" button calls
   window.print() after putting .printing-report on <body>, removed on
   afterprint), only that sheet prints. Added 2026-09-03 (Bryce: an owner
   or engineer should be able to hand the sheet to the other; Costa: keep
   print, our logo top left, disclaimer at the bottom).

   Three things learned the first time it was printed (Costa, Bryce,
   2026-09-03, "it comes out six pages long", "the top is weird"):
   1. `visibility: hidden` keeps the hidden page's height, so the report
      was one sheet followed by five blank ones. Everything that is not
      the report, inside it, or an ancestor of it is display:none instead,
      and the ancestors lose their padding, margins and max-width so the
      sheet spans the page.
   2. Chrome and Safari print their own header and footer (page title,
      date, URL) INSIDE the page margin. `@page { margin: 0 }` leaves them
      nowhere to go; the sheet carries its own margin as padding, and its
      masthead carries the date and the link.
   3. Fit to one Letter sheet: type steps down in print — figures, table,
      body and the disclaimer — and the rating card narrows. Inline
      font-size on .t-figure needs !important to override.
   `:has()` is fine here: every browser that can save a PDF has it.
   ------------------------------------------------------------ */
@media print {
  @page {
    size: letter;
    margin: 0;
  }
  body.printing-report *:not(:has(.print-report)):not(.print-report):not(.print-report *) {
    display: none !important;
  }
  body.printing-report *:has(.print-report) {
    padding: 0 !important;
    margin: 0 !important;
    max-width: none !important;
    background: #fff !important;
  }
  body.printing-report .print-report {
    padding: 0.45in 0.5in !important;
    margin: 0 !important;
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    background: #fff !important;
  }
  body.printing-report .print-report .print-hide {
    display: none !important;
  }
  body.printing-report .print-report .t-title {
    font-size: 1.125rem;
    line-height: 1.25;
  }
  body.printing-report .print-report .t-body {
    font-size: 0.8125rem;
    line-height: 1.45;
  }
  body.printing-report .print-report .t-figure {
    font-size: 1.125rem !important;
  }
  body.printing-report .print-report .t-credential {
    font-size: 0.6875rem;
  }
  body.printing-report .print-report table {
    font-size: 0.75rem;
  }
  body.printing-report .print-report table th,
  body.printing-report .print-report table td {
    padding-top: 0.25rem;
    padding-bottom: 0.25rem;
  }
  /* Legal text never below 10pt in print, never lighter than ink (Bryce,
     2026-09-03: "anything under eight points reads as fine print"; the
     standard is clear and conspicuous). Applies to the disclaimer and to
     the one-line note under the fines table. */
  body.printing-report .print-report .print-legal {
    font-size: 10pt !important;
    line-height: 1.4;
    color: #171717 !important;
  }
  body.printing-report .print-report .print-disclaimer {
    max-width: none; /* the screen measure would leave it a narrow column on the sheet */
  }
  body.printing-report .print-report .print-rating {
    max-width: 180px;
  }
  body.printing-report .print-report .print-tight {
    margin-top: 0.75rem !important;
    margin-bottom: 0.75rem !important;
  }
}

