@charset "UTF-8";

/* ==========================================================================
   NVector marketing site
   Palette mirrors the web app's Tailwind theme (navy / teal) so the site and
   the product feel like one thing.
   ========================================================================== */

/* ==========================================================================
   DESIGN TOKENS

   Four brand colours, each with a tint/shade ramp, then a thin semantic layer
   on top. Components reference the semantic names (--surface-*, --text-*,
   --accent-*) rather than the raw ramp, so a palette change is one edit here.

   The -rgb companions carry bare channels for rgb(... / <alpha>), which is how
   anything translucent (the glass header, hairlines, hover washes) is built —
   the alpha varies per state while the hue stays tied to the token.
   ========================================================================== */

:root {
  /* --- Brand ------------------------------------------------------------- */
  --color-primary: #000f24;
  --color-secondary: #ffffff;
  --color-tertiary: #00d2ff;
  --color-neutral: #0b192c;

  --color-primary-rgb: 0 15 36;
  --color-secondary-rgb: 255 255 255;
  --color-tertiary-rgb: 0 210 255;
  --color-neutral-rgb: 11 25 44;

  /* --- Primary ramp (deep navy -> near white) ---------------------------- */
  --primary-950: #00081a;
  --primary-900: #000f24;
  --primary-800: #10203a;
  --primary-700: #1e3050;
  --primary-600: #33466a;
  --primary-500: #556884;
  --primary-400: #7d8da6;
  --primary-300: #a4b2c6;
  --primary-200: #c6d0de;
  --primary-100: #e3e9f1;
  --primary-50: #f3f6fa;

  /* --- Tertiary ramp (cyan) ---------------------------------------------- */
  --tertiary-950: #03212b;
  --tertiary-900: #05394a;
  --tertiary-800: #076d89;
  --tertiary-700: #0895b8;
  --tertiary-600: #00b4e0;
  --tertiary-500: #00d2ff;
  --tertiary-400: #3fddff;
  --tertiary-300: #75e6ff;
  --tertiary-200: #a8efff;
  --tertiary-100: #d3f7ff;
  --tertiary-50: #edfcff;

  /* --- Neutral ramp ------------------------------------------------------ */
  --neutral-950: #060e1a;
  --neutral-900: #0b192c;
  --neutral-800: #142440;
  --neutral-700: #1f3457;
  --neutral-600: #334a73;
  --neutral-500: #4f6791;
  --neutral-400: #7789ad;
  --neutral-300: #a0aec8;
  --neutral-200: #c5cedd;
  --neutral-100: #e2e8f0;
  --neutral-50: #f4f7fa;

  /* --- Secondary ramp (white -> black) ----------------------------------- */
  --gray-950: #111111;
  --gray-900: #2b2b2b;
  --gray-800: #454545;
  --gray-700: #5e5e5e;
  --gray-600: #787878;
  --gray-500: #949494;
  --gray-400: #b0b0b0;
  --gray-300: #cbcbcb;
  --gray-200: #e0e0e0;
  --gray-100: #f0f0f0;
  --gray-50: #fafafa;

  /* --- Semantic: dark chrome (header, footer, hero) ---------------------- */
  --surface-dark: var(--color-primary);
  --surface-dark-raised: var(--neutral-900);
  --surface-dark-overlay: var(--neutral-950);

  --text-on-dark: var(--color-secondary);
  --text-on-dark-muted: rgb(var(--color-secondary-rgb) / 0.72);
  --text-on-dark-subtle: rgb(var(--color-secondary-rgb) / 0.55);

  --border-on-dark: rgb(var(--color-secondary-rgb) / 0.1);
  --border-on-dark-strong: rgb(var(--color-secondary-rgb) / 0.2);

  /* --- Semantic: accent -------------------------------------------------- */
  --accent: var(--color-tertiary);
  --accent-strong: var(--tertiary-600);
  --accent-deep: var(--tertiary-700);
  --accent-soft: rgb(var(--color-tertiary-rgb) / 0.14);
  --on-accent: var(--color-primary);

  /* Accent text and solid buttons on the page surfaces. Named "-on-light" from
     when those surfaces were light; on navy, full-strength cyan is readable as
     text and primary navy would be invisible as a button, so both point
     somewhere different now. */
  --accent-on-light: var(--accent);
  --action-on-light: var(--action-blue);
  --action-on-light-hover: var(--action-blue-hover);

  /* The CTA action blue. Not a step on any of the four ramps — it comes from
     the closing-band design, where a solid blue button is what separates the
     primary action from the navy it sits on. Kept here so it is named once. */
  --action-blue: #10439e;
  --action-blue-hover: #1553c4;

  /* --- Layout ------------------------------------------------------------
     One content rail for the whole site. Full-bleed sections stretch edge to
     edge and constrain their *contents* with these, so the hero copy lines up
     with the navbar brand above it. */
  --content-max: 1280px;
  --content-pad: clamp(1rem, 4vw, 2.5rem);

  /* One vertical rhythm for every band on the page. Sections set their own
     background and run edge to edge; this is the breathing room inside them,
     which is what replaces the old stack of shadowed cards. */
  --section-y: clamp(3.5rem, 7vw, 6rem);
  --section-y-tight: clamp(2.5rem, 5vw, 4rem);

  /* Cap on artwork inside a two-column band. Without it a screenshot grows with
     the rail and swamps the copy beside it on a large monitor. */
  --art-max: 620px;

  /* One gap for every card grid on the site, so they cannot drift apart. */
  --grid-gap: clamp(1rem, 2vw, 1.5rem);

  /* --- Semantic: page surfaces -------------------------------------------
     The site is dark throughout. Three steps, close together on purpose: on a
     dark page a large tonal jump reads as a seam, so bands are separated by
     one step plus a lit hairline rather than by contrast alone. */
  --surface-page: var(--color-primary); /* the ground */
  --surface-raised: var(--color-neutral); /* cards, alternating bands */
  --surface-sunken: var(--neutral-800); /* hover, pressed, wells */

  /* --- Typography -------------------------------------------------------- */
  /* The named faces are not self-hosted yet and `font-src 'self'` (worker/
     headers.js) blocks a CDN, so these fall through to the system stack until
     the .woff2 files land in assets/fonts. */
  --font-headline: 'Space Grotesk', 'Segoe UI', system-ui, sans-serif;
  --font-body:
    Manrope, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
    sans-serif;
  --font-label: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

  /* --- Semantic: text and structure --------------------------------------
     Short names kept from the original light palette so the section sheets did
     not all have to be rewritten; the values are the dark equivalents. */
  --ink: var(--color-secondary); /* headings */
  --body: rgb(var(--color-secondary-rgb) / 0.74); /* body copy */
  --muted: var(--neutral-300); /* supporting copy, placeholders */
  --paper: var(--color-neutral); /* card face */
  --surface: var(--neutral-800);
  --line: rgb(var(--color-secondary-rgb) / 0.1);

  --field-bg: rgb(var(--color-secondary-rgb) / 0.05);
  --field-border: rgb(var(--color-secondary-rgb) / 0.14);

  /* Status. The light-palette reds and ambers go muddy on navy, so these are
     the lifted versions. */
  --red: #ff6b6b;
  --amber: #fbbf24;

  /* Telemetry status colours, for anything that reports a state rather than
     carrying brand meaning. Named once here so the pages that show status
     chips cannot drift apart. */
  --status-ok: #10b981;
  --status-warn: #f59e0b;
  --status-bad: #ef4444;
  --status-info: #3b82f6;

  --radius: 10px;
  --radius-lg: 16px;

  /* On a dark page a soft grey shadow does nothing — depth comes from a darker
     drop plus a hairline of light along the top edge. */
  --shadow-sm: 0 1px 2px rgb(0 0 0 / 0.3), inset 0 1px 0 rgb(var(--color-secondary-rgb) / 0.04);
  --shadow-md: 0 10px 24px -6px rgb(0 0 0 / 0.45);
  --shadow-lg: 0 28px 56px -16px rgb(0 0 0 / 0.6);

  --gap: clamp(1rem, 3vw, 2.25rem);

  /* --- Legacy ------------------------------------------------------------
     Still named by a few older rules. Retired as those move onto the tokens
     above; kept dark so nothing renders a light artefact in the meantime. */
  --navy: var(--color-secondary);
  --navy-light: var(--neutral-700);
  --navy-deep: var(--primary-950);
  --teal: var(--accent);
  --teal-dark: var(--accent-strong);
  --teal-light: var(--tertiary-100);
  --amber-light: #78350f;
  --page-bg: var(--primary-950);
  --brand-navy: #071b35;
  --brand-deep: #0b1b2e;
  --brand-cyan: var(--accent);
  --brand-blue: var(--action-blue);
  --brand-ink: #dcebff;
}

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

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

body {
  margin: 0;
  font-family: var(--font-body);
  background: var(--surface-page);
  color: var(--body);

  -webkit-font-smoothing: antialiased;
}

/* --------------------------------------------------------------------------
   LARGE SCREENS
   A 1280px rail on a 2560px monitor leaves half the screen empty and makes
   every band look like a narrow column floating in space. The rail and the
   gutters both open up in two steps, and the vertical rhythm grows with them
   so the page keeps its proportions rather than just getting wider.
   -------------------------------------------------------------------------- */

@media (min-width: 1600px) {
  :root {
    --content-max: 1440px;
    --content-pad: 3rem;
    --section-y: 7rem;
    --section-y-tight: 5rem;
    --art-max: 680px;
  }
}

@media (min-width: 2100px) {
  :root {
    --content-max: 1600px;
    --content-pad: 4rem;
    --section-y: 8rem;
    --section-y-tight: 5.5rem;
    --art-max: 760px;
  }
}

/* --------------------------------------------------------------------------
   BASE TYPOGRAPHY
   Sections set their own sizes where the design calls for it; these are the
   defaults everything falls back to.
   -------------------------------------------------------------------------- */

h1,
h2,
h3,
h4 {
  margin: 0 0 0.6em;
  font-family: var(--font-headline);
  color: var(--ink);
  line-height: 1.2;
  letter-spacing: -0.02em;
  text-wrap: balance;
}

h1 {
  font-size: clamp(2rem, 4vw, 3rem);
}
h2 {
  font-size: clamp(1.6rem, 3vw, 2.25rem);
}
h3 {
  font-size: clamp(1.08rem, 1.6vw, 1.25rem);
}
h4 {
  font-size: 1rem;
}

p {
  margin: 0 0 1rem;
  line-height: 1.65;
}
p:last-child {
  margin-bottom: 0;
}

a {
  color: var(--accent-on-light);
}

/* Nothing overflows its column on a narrow screen. */
img,
svg,
video {
  max-width: 100%;
}

/* --------------------------------------------------------------------------
   ACCESSIBILITY UTILITIES
   Both of these were lost when style.css was trimmed, which left every form
   label and every spam honeypot rendering as visible text.
   -------------------------------------------------------------------------- */

/* In the page and in the accessibility tree, but not on screen. For labels and
   headings that a sighted user gets from context. */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* Spam honeypot. The endpoint rejects any submission that arrives with this
   filled in (worker/subscribe.js, worker/contact.js), so it must never be
   visible or reachable — a real person who types in it is silently discarded.
   The markup already carries aria-hidden and tabindex="-1"; this is the half
   that was missing. */
.hp-field {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
  opacity: 0;
  pointer-events: none;
}

/* The header is sticky, so an in-page jump has to clear it or the target lands
   underneath the navbar. */
:target,
section[id] {
  scroll-margin-top: calc(76px + 1rem);
}

/* The content rail. Full-bleed sections constrain their contents with the same
   two tokens directly; .container is for everything that is not full-bleed. */
.container {
  width: 100%;
  max-width: var(--content-max);
  margin-inline: auto;
  padding-inline: var(--content-pad);
}

/* ==========================================================================
   PAGE CHROME

   The primitives every inner page is written against — the page hero,
   sections, cards, buttons and form controls. None of them had any rules
   after style.css was trimmed, so those pages were rendering as bare HTML.
   Shared deliberately: the contact form and the sign-in form should not be two
   different-looking sets of inputs.
   ========================================================================== */

/* --- Page hero ------------------------------------------------------------ */

.page-hero {
  position: relative;
  padding: clamp(2.25rem, 5vw, 4rem) 0 clamp(1.75rem, 3.5vw, 2.75rem);
  background:
    radial-gradient(90% 70% at 15% 0%, rgb(var(--color-tertiary-rgb) / 0.1), transparent 60%),
    var(--surface-page);
}

.eyebrow {
  margin: 0 0 0.75rem;
  color: var(--accent);
  font-size: 0.78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.12em;
}

.page-hero h1 {
  margin: 0 0 1rem;
  max-width: 20ch;
}

.lede {
  max-width: 62ch;
  margin: 0;
  color: var(--muted);
  font-size: clamp(1rem, 1.5vw, 1.12rem);
  line-height: 1.6;
}

/* --- Sections and cards --------------------------------------------------- */

.section {
  padding: var(--section-y-tight) 0;
}

/* Alternating band, so a run of sections reads as separate topics rather than
   one continuous wall. One tonal step plus a lit seam — the same treatment the
   home page bands use. */
.section--surface {
  position: relative;
  background: var(--surface-raised);
}
.section--surface::before {
  content: '';
  position: absolute;
  inset: 0 0 auto 0;
  height: 1px;
  background: linear-gradient(
    90deg,
    transparent,
    rgb(var(--color-tertiary-rgb) / 0.22) 30%,
    rgb(var(--color-secondary-rgb) / 0.1) 60%,
    transparent
  );
  pointer-events: none;
}

.section--tight {
  padding-block: clamp(2rem, 4vw, 3rem);
}

/* The intro block above a grid: eyebrow, heading, one line of context. */
.section-head {
  max-width: 62ch;
  margin-bottom: clamp(1.5rem, 3vw, 2.25rem);
}
.section-head h2 {
  margin-bottom: 0.55rem;
}
.section-head p {
  margin-bottom: 0;
  color: var(--muted);
}

/* The link that closes a section, under whatever it summarises. */
.section-cta {
  margin: clamp(1.5rem, 3vw, 2.25rem) 0 0;
}

/* --- Card grids -----------------------------------------------------------
   The column count is in the class name, so it is stated rather than inferred
   from a minimum width — auto-fit would happily put four cards in a .grid-3 on
   a wide monitor. One gap token keeps every grid on the site in step.
   -------------------------------------------------------------------------- */

.grid {
  display: grid;
  gap: var(--grid-gap);
}

/* minmax(0, 1fr) rather than 1fr: a grid track's default minimum is its
   content, so a long unbroken string would otherwise widen the column. */
.grid-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-4 {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

/* Halve on a tablet, single column on a phone. Four goes to two rather than
   three, so the last row is never left with one orphan. */
@media (max-width: 980px) {
  .grid-3,
  .grid-4 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .grid-2,
  .grid-3,
  .grid-4 {
    grid-template-columns: minmax(0, 1fr);
  }
}

.card {
  padding: clamp(1.25rem, 2.5vw, 1.75rem);
  border-radius: 16px;
  background: var(--surface-raised);
  border: 1px solid var(--line);
  box-shadow: var(--shadow-sm);
}
.card > :last-child {
  margin-bottom: 0;
}
.card h3 {
  margin-top: 0;
}

/* Tick list. The mark is drawn with pseudo-elements rather than a character,
   so a screen reader reads the item and not "check" before every line.

   The disc and the check occupy exactly the same box — same left, same top,
   same size, all from the two variables below — and the check is a mask
   centred inside it. They previously carried independent left/top values in
   mixed units, which left the mark sitting a couple of pixels above the
   centre of its disc; sharing one box means they cannot drift apart again.
   Using a mask rather than a background image keeps the colour on the token
   instead of baking a hex into a data URI. */
.ticks {
  --tick-size: 1.15rem;
  /* Lines the disc up with the cap height of the first line of text. */
  --tick-top: 0.12em;

  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.7rem;
}
.ticks li {
  position: relative;
  padding-left: 1.85rem;
  color: var(--body);
  line-height: 1.5;
}
.ticks li::before,
.ticks li::after {
  content: '';
  position: absolute;
  left: 0;
  top: var(--tick-top);
  width: var(--tick-size);
  height: var(--tick-size);
}
.ticks li::before {
  border-radius: 50%;
  background: rgb(var(--color-tertiary-rgb) / 0.14);
  border: 1px solid rgb(var(--color-tertiary-rgb) / 0.35);
}
.ticks li::after {
  background-color: var(--accent);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.6 6.2 5 8.7 9.4 3.5'/%3E%3C/svg%3E")
    center / 0.62rem 0.62rem no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.6 6.2 5 8.7 9.4 3.5'/%3E%3C/svg%3E")
    center / 0.62rem 0.62rem no-repeat;
}

/* --- Definition lists ----------------------------------------------------- */

dl {
  margin: 0 0 1.5rem;
}
dt {
  margin-top: 1.1rem;
  color: var(--ink);
  font-weight: 600;
  font-size: 0.9rem;
}
dt:first-child {
  margin-top: 0;
}
dd {
  margin: 0.25rem 0 0;
  color: var(--muted);
}

/* --- Buttons -------------------------------------------------------------- */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  min-height: 48px;
  padding: 0 1.5rem;
  border: 1px solid transparent;
  border-radius: 10px;
  font: inherit;
  font-size: 0.97rem;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition:
    background-color 0.2s,
    border-color 0.2s,
    transform 0.2s,
    box-shadow 0.2s;
}

.btn-primary {
  background: var(--action-on-light);
  color: var(--text-on-dark);
}
.btn-primary:hover:not(:disabled) {
  background: var(--action-on-light-hover);
  color: var(--text-on-dark);
  transform: translateY(-1px);
  box-shadow: 0 12px 24px -10px rgb(0 0 0 / 0.65);
}

.btn-ghost {
  background: transparent;
  border-color: var(--border-on-dark-strong);
  color: var(--ink);
}
.btn-ghost:hover {
  background: rgb(var(--color-secondary-rgb) / 0.06);
  color: var(--ink);
}

.btn-lg {
  min-height: 54px;
  font-size: 1rem;
  font-weight: 700;
}
.btn-block {
  display: flex;
  width: 100%;
}

.btn:focus-visible {
  outline: 3px solid var(--accent);
  outline-offset: 2px;
}
.btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

/* A row of buttons. Without this the only thing between two of them is the
   whitespace character in the markup. Wraps rather than overflows, so a pair
   that no longer fits side by side stacks instead. */
.btn-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.85rem;
}
.btn-row--center {
  justify-content: center;
}

/* On a narrow phone two half-width buttons read worse than two full-width
   ones, and wrapping has already put them on separate lines by this point. */
@media (max-width: 420px) {
  .btn-row .btn {
    width: 100%;
  }
}

/* --- Forms ----------------------------------------------------------------
   The same visual language as the auth pages, so a visitor meets one set of
   inputs across the site rather than two.
   -------------------------------------------------------------------------- */

.field {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  min-width: 0;
  margin-bottom: 1.1rem;
}

/* Collapses on its own width rather than at a page breakpoint, so a paired row
   behaves wherever it is used. */
.field-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
  gap: 0 1.1rem;
}

.field label {
  font-weight: 600;
  font-size: 0.9rem;
  color: var(--ink);
}
.req {
  margin-left: 0.15rem;
  color: var(--accent);
}

.field input,
.field select,
.field textarea {
  width: 100%;
  min-width: 0;
  padding: 0.85rem 0.95rem;
  font: inherit;
  font-size: 0.95rem;
  color: var(--ink);
  background: var(--field-bg);
  border: 1px solid var(--field-border);
  border-radius: 10px;
  transition:
    border-color 0.15s,
    box-shadow 0.15s,
    background-color 0.15s;
}
.field textarea {
  resize: vertical;
  min-height: 7rem;
  line-height: 1.6;
}

.field input::placeholder,
.field textarea::placeholder {
  color: var(--muted);
}
.field input:hover,
.field select:hover,
.field textarea:hover {
  border-color: var(--neutral-600);
}
.field input:focus,
.field select:focus,
.field textarea:focus {
  outline: none;
  background: var(--surface-raised);
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgb(var(--color-tertiary-rgb) / 0.18);
}

/* The native arrow is drawn dark-on-light and vanishes on a dark field, so the
   control gets its own. */
.field select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 2.75rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none' stroke='%23a0aec8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1.5 6 6.5l5-5'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 1rem center;
  background-size: 12px 8px;
  cursor: pointer;
}
/* The options menu is painted by the OS, so it needs its own colours. */
.field select option {
  background: var(--color-neutral);
  color: var(--ink);
}

/* assets/js/main.js sets these when the endpoint rejects a field. */
.field-error input,
.field-error select,
.field-error textarea,
.field input[aria-invalid='true'],
.field textarea[aria-invalid='true'] {
  border-color: var(--red);
  box-shadow: 0 0 0 3px rgb(255 107 107 / 0.16);
}

.error-text {
  color: var(--red);
  font-size: 0.85rem;
}
.help-text {
  color: var(--muted);
  font-size: 0.85rem;
  line-height: 1.55;
}
.help-text a {
  color: var(--accent);
}

/* --- Alerts --------------------------------------------------------------- */

.alert {
  margin-bottom: 1.25rem;
  padding: 0.95rem 1.15rem;
  border-radius: 12px;
  border: 1px solid var(--line);
  background: var(--surface-raised);
  font-size: 0.93rem;
}
.alert p {
  margin: 0;
}
.alert-error {
  border-color: rgb(255 107 107 / 0.4);
  background: rgb(255 107 107 / 0.1);
  color: var(--ink);
}
.alert-success {
  border-color: rgb(var(--color-tertiary-rgb) / 0.4);
  background: rgb(var(--color-tertiary-rgb) / 0.1);
  color: var(--ink);
}

/* --- Spacing utilities ---------------------------------------------------- */

.mt-sm {
  margin-top: 0.75rem;
}
.mt-md {
  margin-top: 1.5rem;
}
.mb-0 {
  margin-bottom: 0;
}
