/*
  Shared design tokens for the whole site.
  Colors, fonts and easing curves pulled from the original AxureRP export's
  data/styles.css (the RP project's global style sheet) so every page stays
  visually consistent without repeating raw values.
*/

/* ==========================================================================
   SELF-HOSTED WEBFONTS — the site's only two families, served from v2/fonts/
   --------------------------------------------------------------------------
   These replaced the Google Fonts <link> tags that every page used to carry
   (owner's change, 2026-09-03), so a visitor's browser talks to nobody but
   this server and the type arrives without a third-party round trip.

   The files are google-webfonts-helper's Latin-subset STATIC cuts, one file
   per weight — not the variable fonts Google's own CSS serves — so every
   weight the site can ask for is declared below and nothing is synthesised:

       Josefin Sans   100 200 300 400 500 600 700   (the face stops at 700)
       Kumbh Sans     100 200 300 400 500 600 700 800 900

   No italic files: nothing on the site sets font-style italic (the `em`
   spans are colour-only), so none were fetched. If one is ever wanted, add
   the italic cut and a second @font-face with `font-style: italic`.

   `font-display: block`, NOT swap. With swap, every navigation painted one
   frame of Helvetica before the woff2 landed -- the wordmark wrapped to two
   lines and the rail labels changed face -- and on this site, where every
   box is measured to the glyph, a frame of the wrong face is worse than a
   frame of no text. block holds the text invisible for up to 3s while the
   file loads (in practice a few ms from cache) and never shows a fallback
   unless the file genuinely fails to arrive.

   The three faces the shared chrome uses on every page -- Josefin 400 for
   the name, Kumbh 200 for body copy and nav labels, Kumbh 400 for the tabs
   -- are also <link rel="preload">ed in every page's <head>, ahead of the
   stylesheets, so they are fetched in parallel with the CSS instead of
   after it. The two together are what make a sub-nav click land with the
   type already right. NOTE FOR THE SERVER: the preview server sends
   `Cache-Control: no-store` on everything, which re-downloads the fonts on
   every click; the production server should send a long max-age on
   /fonts/ so the block period is a cache hit and costs nothing.

   The `../fonts/` path is css/ reaching v2/fonts/, which never leaves v2.
   ========================================================================== */

@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 100; font-display: block; src: url("../fonts/josefin-sans-v34-latin-100.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 200; font-display: block; src: url("../fonts/josefin-sans-v34-latin-200.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 300; font-display: block; src: url("../fonts/josefin-sans-v34-latin-300.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 400; font-display: block; src: url("../fonts/josefin-sans-v34-latin-regular.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 500; font-display: block; src: url("../fonts/josefin-sans-v34-latin-500.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 600; font-display: block; src: url("../fonts/josefin-sans-v34-latin-600.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 700; font-display: block; src: url("../fonts/josefin-sans-v34-latin-700.woff2") format("woff2"); }

@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 100; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-100.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 200; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-200.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 300; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-300.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 400; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-regular.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 500; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-500.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 600; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-600.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 700; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-700.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 800; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-800.woff2") format("woff2"); }
@font-face { font-family: "Kumbh Sans"; font-style: normal; font-weight: 900; font-display: block; src: url("../fonts/kumbh-sans-v27-latin-900.woff2") format("woff2"); }

:root {
  --color-bg: #41556a;
  --color-white: #ffffff;
  --color-accent: #35ff00;
  --color-accent-dim: #33ff00;
  --color-case-study-blue: #3f64ce;
  --color-nav-ring: #a0aab5;
  --color-emphasis: #ffe073;   /* warm yellow used for emphasis in body copy */

  /* The second text accent. The saturated green is now reserved for NAVIGATION
     — the nav dots, the rail, the chevrons — so text that needs to stand apart
     from the body without being emphasis uses this cool blue instead. Owner's
     colour, not the original's: the source uses #35FF00 here too, which is why
     names and quote marks used to read as if they were links to somewhere on
     the site. Yellow keeps its job as in-sentence emphasis. */
  --color-accent-cool: #81d3f8;

  /* The shape kit's three gradients (see js/icons.js). Declared here as stop
     colours rather than as finished gradients because they are consumed twice:
     as CSS gradients on <ui-icon name="rect"> instances, and as SVG
     <linearGradient> stops on the drawn shapes, which cannot take a CSS
     gradient. Same numbers either way.

       sheen   the translucent left-to-right lift on the torsos, arrows and
               chart bars                       (white 9.8% -> 29.8%)
       fade    the four growing panels, which start from nothing
                                                (white 0 -> 29%)
       slate   the one solid-bodied figure      (#56687a -> #798796) */
  --kit-sheen-from: rgba(255, 255, 255, 0.098);
  --kit-sheen-to:   rgba(255, 255, 255, 0.298);
  --kit-fade-from:  rgba(255, 255, 255, 0);
  --kit-fade-to:    rgba(255, 255, 255, 0.29);
  --kit-slate-from: #56687a;
  --kit-slate-to:   #798796;

  /* The artwork's own default tint, and the hairline Axure puts inside the
     circles. Both are literal values out of the export. */
  --kit-tint: rgba(255, 255, 255, 0.498);
  --kit-hairline: rgb(121, 121, 121);
  --kit-paper: #f2f2f2;

  --font-heading: "Josefin Sans", "JosefinSans-Regular", sans-serif;
  --font-heading-light: "Josefin Sans", "JosefinSans-Light", sans-serif;
  --font-body: "Kumbh Sans", "KumbhSans-Regular", sans-serif;
  --font-body-light: "Kumbh Sans", "KumbhSans-Light", sans-serif;
  --font-body-black: "Kumbh Sans", "KumbhSans-Regular_Black", sans-serif;

  /* BODY COPY — a deliberate departure from the original, applied site-wide.

     Both numbers used to be repeated in every page stylesheet, which is why
     they are tokens now: changing the site's reading voice should be one edit,
     not seven.

       line height   30px -> 22.5px   (-25%)
       weight        400  -> 200      (Kumbh Sans Regular -> Thin)

     30px is Axure's own value and it is ABSOLUTE, not a ratio — the original
     sets the same 30px on 18px, 19px and 20px copy, so the three sizes sit on
     one leading. Keeping it in px preserves that; a unitless token would pull
     them apart. about-intro is the one page whose leading was authored as a
     ratio (1.6); it carries the same -25% as 1.2.

     The weight token is applied on `body` below, so anything that does not
     state a weight inherits it. Everything with its own weight is untouched by
     design: the 900/700 emphasis runs, the 200 nav labels and case-study
     subtitles, the 84px wordmark and the nav's own 400 chrome. The `em` spans
     ARE body weight by definition (colour only, no weight change), so they read
     the token rather than a literal 400 — at 200 they stay colour-only, which is
     the whole point of that form.

     KNOWN CONSEQUENCE of 200, accepted by the owner: body copy is now the same
     weight as the things that used to be lighter THAN it — the testimonial
     attributions, the case-study subtitles and the nav labels are all Kumbh Thin
     200. In the original those read as a lighter register against 400 body copy;
     that contrast is gone. If it needs to come back, lift those to 300 rather
     than pushing the body back up. */
  --line-height-body: 22.5px;
  --font-weight-body: 200;

  /* SUCCESS-METRIC LABELS — the copy that sits beside a Results badge, in two
     sizes. The source writes every one of them at 19px on every case study;
     these are the owner's two variants of that, and which one a page takes is a
     composition decision, not a per-row one:

       sm  19px   the source's own. For a Results section that shares its width
                  with something else — Alere puts a chart and a second column
                  of metrics to the right of its list, so the labels have to
                  stay out of their way.
       lg  26px   for a Results section with the whole page to itself. Oracle
                  has no chart and nothing in its right half, and at 19px the
                  labels read as undersized against their own 77px badges.
                  It is the size of that page's closing "Plus Oracle's buyout
                  of ATG..." line, which is what set it.

     The 120px line box the lists use is the BADGE rhythm and does not scale
     with these: a row's ink centre moves 0.35px between the two sizes, so the
     rows stay level with the badges either way (measured, not assumed). */
  --metric-label-sm: 19px;
  --metric-label-lg: 26px;

  /* Axure's two built-in easing curves used throughout the prototype's
     "slide"/"fade" interactions. */
  --ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
  --ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);

  /* Axure's two bounce curves, used by the nav chevrons. Bounce is piecewise
     and cannot be expressed as a cubic-bezier, so these are the Penner
     equations sampled at 25 points and handed to CSS linear(). */
  --ease-out-bounce: linear(0.0000, 0.0131, 0.0525, 0.1182, 0.2101, 0.3282,
    0.4727, 0.6433, 0.8403, 0.9697, 0.8754, 0.8074, 0.7656, 0.7501, 0.7609,
    0.7979, 0.8611, 0.9506, 0.9727, 0.9428, 0.9392, 0.9619, 0.9952, 0.9845, 1.0000);
  --ease-in-bounce: linear(0.0000, 0.0155, 0.0048, 0.0381, 0.0608, 0.0572,
    0.0273, 0.0494, 0.1389, 0.2021, 0.2391, 0.2499, 0.2344, 0.1926, 0.1246,
    0.0303, 0.1597, 0.3567, 0.5273, 0.6718, 0.7899, 0.8818, 0.9475, 0.9869, 1.0000);

  /* Inner pages are a FIXED-WIDTH canvas centred horizontally and aligned to
     the top — they do not stretch to fill the window. The original export sets
     `body { width: 1444px }` on every about-* page plus projects-start, birdzi
     and oracle, and every element's x-coordinate is measured against it.

     The nav bar and the page content share this one canvas, which is what keeps
     the nav's own coordinates (name at 20, tabs at 329/477/653) lined up with
     the content below it.

     Two case studies were authored wider — projects-access at 1482 and
     projects-alere at 1496. Those pages override this token; nothing else
     should need to. */
  --page-width: 1444px;

  /* The top nav's height, and now a boundary rather than just a measurement:
     the bar is sticky, so this is the line content disappears under. Stated
     once because components.css offsets the whole rail by it. */
  --nav-height: 66px;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
  background: var(--color-bg);
  color: var(--color-white);
  font-family: var(--font-body);
  font-weight: var(--font-weight-body);
  min-height: 100%;
}

a {
  color: inherit;
  text-decoration: none;
}

img,
svg {
  display: block;
  max-width: 100%;
}
