/* ===== assets/css/tokens.css ===== */
/* ══════════════════════════════════════════════════════════════════
   PA-IQ DESIGN TOKENS
   The only file that defines a raw colour, size or shadow value.
   Everything else in the site refers to these variables, so a brand
   change happens here and nowhere else.
   ══════════════════════════════════════════════════════════════════ */

:root{
  /* ── Core brand anchors, sampled from the PA-IQ logo ── */
  --paiq-navy:#004860;      /* deep navy-teal — headlines, primary buttons */
  --paiq-teal:#006c78;      /* teal — links, accents, active states        */
  --paiq-green:#2e8b3d;     /* green — the second half of the logo mark    */

  /* ── Supporting blues, extending the navy toward light ── */
  --blue-700:#0a5a8a;
  --blue-600:#1273b0;
  --blue-500:#2f92cf;
  --blue-300:#8fc6e8;
  --blue-100:#dceefa;
  --blue-050:#f0f8fd;

  /* ── Supporting greens ── */
  --green-600:#2e8b3d;
  --green-500:#43a355;
  --green-300:#9bd3a6;
  --green-100:#dff2e4;
  --green-050:#f2faf4;

  /* ── Neutrals: bright healthcare, not grey SaaS ── */
  --white:#ffffff;
  --paper:#fbfdfe;          /* page ground — a hint of blue, never flat grey */
  --mist:#f2f7fa;           /* alternating section ground                    */
  --ink:#0d2b38;            /* body text — navy-biased, never pure black     */
  --ink-2:#3f5964;          /* secondary text                                */
  --ink-3:#6b828d;          /* muted text, captions                          */
  --ink-4:#9db0b9;          /* faint text, disabled                          */
  --line:#dbe7ee;           /* hairlines and card borders                    */
  --line-soft:#eaf2f6;

  /* ── Status (used only inside application previews) ── */
  --status-ok:#2e8b3d;
  --status-watch:#c77c11;
  --status-act:#c0392f;

  /* ── Gradients ── */
  --grad-brand:linear-gradient(90deg,var(--paiq-green) 0%,var(--paiq-teal) 100%);
  --grad-wash:linear-gradient(180deg,var(--blue-050) 0%,var(--white) 60%);
  --grad-hero:linear-gradient(98deg,
      rgba(255,255,255,.94) 0%,
      rgba(255,255,255,.86) 22%,
      rgba(255,255,255,.52) 38%,
      rgba(255,255,255,.14) 50%,
      rgba(255,255,255,0) 60%);

  /* ── Type ── */
  --sans:'DM Sans',system-ui,-apple-system,'Segoe UI',sans-serif;
  --serif:'DM Serif Display',Georgia,serif;   /* editorial pull-quotes only */
  --mono:'DM Mono',ui-monospace,monospace;    /* eyebrows and small labels  */

  /* Fluid type: scales between mobile and desktop without breakpoints. */
  --fs-eyebrow:clamp(.66rem,.6rem + .2vw,.72rem);
  --fs-small:clamp(.82rem,.78rem + .2vw,.88rem);
  --fs-body:clamp(.95rem,.9rem + .25vw,1.05rem);
  --fs-lead:clamp(1.05rem,.98rem + .45vw,1.25rem);
  --fs-h3:clamp(1.15rem,1.05rem + .5vw,1.4rem);
  --fs-h2:clamp(1.7rem,1.4rem + 1.5vw,2.6rem);
  --fs-h1:clamp(2.05rem,1.65rem + 1.75vw,2.95rem);

  /* ── Spacing scale ── */
  --sp-1:.25rem;  --sp-2:.5rem;   --sp-3:.75rem;  --sp-4:1rem;
  --sp-5:1.5rem;  --sp-6:2rem;    --sp-7:3rem;    --sp-8:4rem;
  --sp-9:6rem;    --sp-10:8rem;

  /* ── Shape ── */
  --r-sm:8px; --r-md:12px; --r-lg:18px; --r-xl:26px; --r-pill:999px;

  /* ── Soft shadows: light and wide, never a dark drop ── */
  --shadow-1:0 1px 2px rgba(0,72,96,.05),0 2px 8px rgba(0,72,96,.04);
  --shadow-2:0 2px 6px rgba(0,72,96,.06),0 10px 28px rgba(0,72,96,.07);
  --shadow-3:0 4px 12px rgba(0,72,96,.07),0 24px 60px rgba(0,72,96,.10);

  /* ── Layout ── */
  --wrap:1240px;
  --wrap-narrow:900px;
  --gutter:clamp(1.15rem,4vw,2.25rem);
  --header-h:76px;

  /* ── Motion ── */
  --ease:cubic-bezier(.2,.7,.3,1);
  --t-fast:.16s; --t-med:.28s; --t-slow:.5s;
}

/* Per-application accent. Set on a card or page via data-accent, so the
   connected applications share one visual system and differ only by hue.
   Adding an application means adding a hue here and a record to
   _data/applications.json — nothing else.

   Revised 1 Sep 2026. The six hues now sit on one navy -> teal -> green arc
   taken from the logo, so the applications read as one family seen from six
   angles. The previous violet and amber sat outside the brand entirely and
   made PharmacyIQ and PorterIQ look like other companies' products. They are
   still six distinct hues — this is not a flattening to one colour. */
[data-accent="blue"] { --accent:#1273b0; --accent-soft:var(--blue-100); --accent-wash:var(--blue-050); }
[data-accent="teal"] { --accent:var(--paiq-teal); --accent-soft:#d3ecef; --accent-wash:#f0f9fa; }
[data-accent="navy"] { --accent:#0a4f74; --accent-soft:#d8e6f1; --accent-wash:#eff6fb; }
[data-accent="green"]{ --accent:var(--green-600); --accent-soft:var(--green-100); --accent-wash:var(--green-050); }
[data-accent="aqua"] { --accent:#0c7a68; --accent-soft:#d2ebe5; --accent-wash:#eff9f7; }
[data-accent="moss"] { --accent:#557d2c; --accent-soft:#e2ecd3; --accent-wash:#f4f8ee; }
/* HospitalIQ, added 28 Sep 2026. The deepest point on the same navy -> teal
   -> green arc, because HospitalIQ is the widest view in the family: the
   site above the wards. It sits below WardIQ's navy rather than beside it. */
[data-accent="deep"] { --accent:#073a52; --accent-soft:#d3e1e9; --accent-wash:#eef4f8; }

/* ===== assets/css/base.css ===== */
/* ══════════════════════════════════════════════════════════════════
   BASE — self-hosted type, reset, document rhythm, accessibility.
   No third-party requests: the fonts ship with the site.
   ══════════════════════════════════════════════════════════════════ */

@font-face{font-family:'DM Sans';font-style:normal;font-weight:400;font-display:swap;
  src:url(../fonts/7cf8a1c146c5.woff2) format('woff2')}
@font-face{font-family:'DM Sans';font-style:normal;font-weight:500;font-display:swap;
  src:url(../fonts/4a162522c119.woff2) format('woff2')}
@font-face{font-family:'DM Serif Display';font-style:normal;font-weight:400;font-display:swap;
  src:url(../fonts/3d2a435525b8.woff2) format('woff2')}
@font-face{font-family:'DM Mono';font-style:normal;font-weight:400;font-display:swap;
  src:url(../fonts/1a0430d40513.woff2) format('woff2')}
@font-face{font-family:'DM Mono';font-style:normal;font-weight:500;font-display:swap;
  src:url(../fonts/f425382cda70.woff2) format('woff2')}

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

html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}

/* The site scrolls normally. Nothing here constrains the page to one screen. */
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:var(--fs-body);
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;             /* guards against a stray wide child        */
}

h1,h2,h3,h4{
  font-family:var(--sans);       /* DM Sans leads: cleaner than the old site */
  font-weight:500;
  line-height:1.14;
  letter-spacing:-.018em;
  color:var(--paiq-navy);
  margin:0 0 var(--sp-4);
  text-wrap:balance;
}
h1{font-size:var(--fs-h1)}
h2{font-size:var(--fs-h2)}
h3{font-size:var(--fs-h3);letter-spacing:-.01em}
p{margin:0 0 var(--sp-4);text-wrap:pretty}
p:last-child{margin-bottom:0}

a{color:var(--paiq-teal);text-decoration:none}
a:hover{text-decoration:underline}

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

ul,ol{margin:0 0 var(--sp-4);padding-left:1.15em}
li{margin-bottom:var(--sp-2)}

/* ── Focus: always visible, never removed ── */
:focus-visible{
  outline:2px solid var(--paiq-teal);
  outline-offset:3px;
  border-radius:var(--r-sm);
}

/* ── Screen-reader-only text ── */
.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);
  white-space:nowrap;border:0;
}

/* ── Skip link: first tab stop on every page ── */
.skip-link{
  position:absolute;left:var(--sp-4);top:-100px;z-index:200;
  background:var(--paiq-navy);color:var(--white);
  padding:var(--sp-3) var(--sp-5);border-radius:var(--r-sm);
  font-size:var(--fs-small);font-weight:500;
  transition:top var(--t-fast) var(--ease);
}
.skip-link:focus{top:var(--sp-4);text-decoration:none}

/* ── Reduced motion: honour the system setting everywhere ──
   The old site did this well and the new one keeps it. Anything that
   moves must still be legible and complete when motion is switched off. */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.001ms!important;
    animation-iteration-count:1!important;
    transition-duration:.001ms!important;
    scroll-behavior:auto!important;
  }
  .reveal{opacity:1!important;transform:none!important}
}


/* ── Form controls inherit the page's own type ──
   Added 28 Sep 2026. A browser gives button, input, select and textarea its
   own default face — Arial or similar — instead of inheriting, so Send
   enquiry, the cookie Accept and Decline buttons, Cookie settings and every
   field on the contact form were set in a typeface that appears nowhere
   else on the site. One rule fixes all of them. `font` shorthand rather
   than font-family alone, so size, weight and line-height inherit too. */
button, input, select, textarea { font: inherit; }

/* ===== assets/css/layout.css ===== */
/* ══════════════════════════════════════════════════════════════════
   LAYOUT — page shell, section rhythm, the content wrapper.
   ══════════════════════════════════════════════════════════════════ */

.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}
.wrap--narrow{max-width:var(--wrap-narrow)}

.section{padding-block:clamp(3.5rem,7vw,var(--sp-9))}
.section--tight{padding-block:clamp(2.5rem,5vw,var(--sp-7))}
.section--mist{background:var(--mist)}
.section--wash{background:var(--grad-wash)}

/* Section heading block, used above most content sections. */
.section-head{max-width:62ch;margin-bottom:var(--sp-6)}
.section-head--centre{margin-inline:auto;text-align:center}

.eyebrow{
  font-family:var(--mono);
  font-size:var(--fs-eyebrow);
  font-weight:500;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--paiq-teal);
  margin:0 0 var(--sp-3);
}

.lead{font-size:var(--fs-lead);line-height:1.55;color:var(--ink-2)}

/* Generic responsive grid. Cards decide their own minimum width. */
.grid{display:grid;gap:var(--sp-5)}
.grid--2{grid-template-columns:repeat(auto-fit,minmax(min(100%,20rem),1fr))}
.grid--3{grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr))}
.grid--4{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr))}

/* Scroll-reveal. Starts visible and is only hidden once JS confirms it can
   animate, so the page is never blank if JS fails or is switched off. */
.js .reveal{opacity:0;transform:translateY(14px)}
.js .reveal.is-in{opacity:1;transform:none;transition:opacity .6s var(--ease),transform .6s var(--ease)}

/* A section that breaks out of the content column. Used by the application
   preview, which is a full working screen and needs the width to breathe. */
.bleed{
  width:100vw;
  margin-inline:calc(50% - 50vw);
  padding-inline:clamp(.5rem,2vw,var(--gutter));
}

/* ===== assets/css/components.css ===== */
/* ══════════════════════════════════════════════════════════════════
   COMPONENTS — header, buttons, hero, application cards, preview,
   demo CTA, footer. Every colour comes from tokens.css.
   ══════════════════════════════════════════════════════════════════ */

/* ─────────────────────────── HEADER ─────────────────────────── */

.site-header{
  position:sticky;top:0;z-index:100;
  background:rgba(255,255,255,.86);
  /* restrained glass — a blur, not a heavy frosted slab */
  backdrop-filter:saturate(150%) blur(14px);
  -webkit-backdrop-filter:saturate(150%) blur(14px);
  border-bottom:1px solid transparent;
  transition:border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease);
}
.site-header.is-stuck{border-bottom-color:var(--line-soft);box-shadow:var(--shadow-1)}

/* ── Pages with an embedded application ──
   The preview is a working screen; a header parked on top of it competes for
   attention and covers the application's own chrome. On these pages the
   header retracts as you read down and comes back the moment you scroll up,
   so navigation is always one flick away without ever sitting on the app.
   Retracting only ever happens below the fold and never while the header
   holds focus, so keyboard users never lose it. */
.has-embedded-app .site-header{
  transition:transform var(--t-med) var(--ease),
             border-color var(--t-med) var(--ease),
             box-shadow var(--t-med) var(--ease);
  will-change:transform;
}
.has-embedded-app .site-header.is-retracted{transform:translateY(-100%)}
.has-embedded-app .site-header:focus-within{transform:none}
@media (prefers-reduced-motion:reduce){
  .has-embedded-app .site-header{transition:none}
}

.site-header__inner{
  display:flex;align-items:center;justify-content:space-between;gap:var(--sp-5);
  min-height:var(--header-h);
}

.brand{display:inline-flex;align-items:center;gap:var(--sp-3);flex:none}
.brand:hover{text-decoration:none}
/* The master logo scales by height only, so its proportions are whatever
   the supplied file says they are and nothing here can distort them. */
.brand__logo{height:42px;width:auto;display:block;flex:none}
@media (max-width:62rem){.brand__logo{height:36px}}
.site-footer .brand__logo{height:46px}
.brand__mark{width:38px;height:38px;flex:none}
.brand__word{
  font-size:1.55rem;font-weight:500;letter-spacing:-.02em;
  color:var(--paiq-navy);line-height:1;
}

/* ── Desktop navigation ── */
.nav{display:flex;align-items:center;gap:clamp(.9rem,2.4vw,2.1rem)}
.nav__link{
  position:relative;
  color:var(--ink-2);font-size:var(--fs-small);font-weight:500;
  padding:var(--sp-2) 0;
  transition:color var(--t-fast) var(--ease);
}
.nav__link:hover{color:var(--paiq-navy);text-decoration:none}
.nav__link::after{
  content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;
  background:var(--grad-brand);border-radius:2px;
  transform:scaleX(0);transform-origin:left;
  transition:transform var(--t-med) var(--ease);
}
.nav__link:hover::after,
.nav__link[aria-current="page"]::after,
.nav__item.is-open > .nav__link::after{transform:scaleX(1)}
.nav__link[aria-current="page"]{color:var(--paiq-navy)}

/* ── Applications dropdown ── */
.nav__item{position:relative}
.nav__pair{display:inline-flex;align-items:center;gap:var(--sp-1)}
.nav__disclosure{
  display:inline-flex;align-items:center;justify-content:center;
  width:20px;height:20px;padding:0;
  background:none;border:0;cursor:pointer;font:inherit;
  color:var(--ink-3);border-radius:var(--r-sm);
}
.nav__disclosure:hover{color:var(--paiq-navy)}
.nav__toggle{
  display:inline-flex;align-items:center;gap:var(--sp-2);
  background:none;border:0;cursor:pointer;font:inherit;
}
.nav__chev{width:10px;height:10px;transition:transform var(--t-med) var(--ease)}
.nav__item.is-open .nav__chev{transform:rotate(180deg)}
.nav__pair .nav__link::after{right:0}

.nav__menu{
  position:absolute;top:calc(100% + 12px);left:50%;translate:-50% 0;
  min-width:270px;padding:var(--sp-3);
  background:var(--white);border:1px solid var(--line);
  border-radius:var(--r-lg);box-shadow:var(--shadow-3);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity var(--t-med) var(--ease),transform var(--t-med) var(--ease),visibility var(--t-med);
}
.nav__item.is-open .nav__menu{opacity:1;visibility:visible;transform:none}

.nav__menu-link{
  display:flex;align-items:center;gap:var(--sp-3);
  padding:var(--sp-3);border-radius:var(--r-md);
  color:var(--ink);
  transition:background var(--t-fast) var(--ease);
}
.nav__menu-link:hover{background:var(--accent-wash,var(--blue-050));text-decoration:none}
.nav__menu-name{font-weight:500;color:var(--paiq-navy);display:block;line-height:1.3}
.nav__menu-desc{font-size:.78rem;color:var(--ink-3);display:block;line-height:1.35}
.nav__menu-icon{width:32px;height:32px;flex:none;color:var(--accent,var(--paiq-teal))}

/* ── Mobile menu button (hidden on desktop) ── */
.nav-toggle{
  display:none;width:44px;height:44px;flex:none;
  align-items:center;justify-content:center;
  background:none;border:1px solid var(--line);border-radius:var(--r-md);
  cursor:pointer;color:var(--paiq-navy);
}
.nav-toggle__bar{
  display:block;width:18px;height:2px;background:currentColor;border-radius:2px;
  position:relative;transition:background var(--t-fast) var(--ease);
}
.nav-toggle__bar::before,.nav-toggle__bar::after{
  content:"";position:absolute;left:0;width:18px;height:2px;
  background:currentColor;border-radius:2px;
  transition:transform var(--t-med) var(--ease),top var(--t-med) var(--ease);
}
.nav-toggle__bar::before{top:-6px}
.nav-toggle__bar::after{top:6px}
.nav-toggle[aria-expanded="true"] .nav-toggle__bar{background:transparent}
.nav-toggle[aria-expanded="true"] .nav-toggle__bar::before{top:0;transform:rotate(45deg)}
.nav-toggle[aria-expanded="true"] .nav-toggle__bar::after{top:0;transform:rotate(-45deg)}

/* ── Header demo CTA ──
   Sits at the end of the nav on desktop and full width at the foot of the
   open menu on mobile. Uses the standard button, one size down. */
.nav__cta{padding:.5rem .95rem;font-size:var(--fs-small);flex:none}

/* ─────────────────────────── BUTTONS ─────────────────────────── */

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-3);
  padding:.82rem 1.5rem;border-radius:var(--r-pill);
  font-size:var(--fs-small);font-weight:500;line-height:1;
  border:1.5px solid transparent;cursor:pointer;
  transition:transform var(--t-fast) var(--ease),
             box-shadow var(--t-med) var(--ease),
             background var(--t-med) var(--ease),
             color var(--t-med) var(--ease);
}
.btn:hover{text-decoration:none;transform:translateY(-1px)}
.btn:active{transform:none}
.btn__arrow{width:15px;height:15px;transition:transform var(--t-med) var(--ease)}
.btn:hover .btn__arrow{transform:translateX(3px)}

.btn--primary{background:var(--paiq-navy);color:var(--white);box-shadow:var(--shadow-2)}
.btn--primary:hover{background:#00394d;box-shadow:var(--shadow-3)}

.btn--secondary{background:var(--white);color:var(--blue-600);border-color:var(--blue-300);box-shadow:var(--shadow-1)}
.btn--secondary:hover{border-color:var(--blue-600);box-shadow:var(--shadow-2)}

.btn--ghost{background:transparent;color:var(--paiq-teal);padding-inline:0}
.btn--ghost:hover{color:var(--paiq-navy)}

.btn-row{display:flex;flex-wrap:wrap;gap:var(--sp-4);align-items:center}

/* ─────────────────────────── HERO ─────────────────────────── */
/*
   The artwork is a background plate only. Headline, copy, buttons and the
   five concept labels are all live HTML, so they stay selectable, responsive,
   translatable and readable by a screen reader. Swapping the plate for a
   higher-resolution version means changing the <img> and nothing else.
*/
.hero{
  position:relative;
  isolation:isolate;
  display:flex;align-items:center;
  min-height:clamp(30rem,74vh,48rem);
  padding-block:clamp(var(--sp-7),8vw,var(--sp-9));
  overflow:hidden;
}
.hero__media{position:absolute;inset:0;z-index:-2}
.hero__media img{
  width:100%;height:100%;object-fit:cover;
  object-position:45% 50%;   /* keeps the touch point in frame as the box narrows */
}
/* Readability wash: opaque behind the headline, clear over the artwork. */
.hero__scrim{position:absolute;inset:0;z-index:-1;background:var(--grad-hero)}
/* The plate has a hard bottom edge where the section ends. This fades it
   into the page ground so the seam never shows beside the card panel. */
.hero__fade{
  position:absolute;left:0;right:0;bottom:0;height:clamp(4rem,12vh,8rem);z-index:-1;
  background:linear-gradient(180deg,rgba(251,253,254,0),var(--paper));
}

.hero__inner{position:relative;width:100%}
.hero__content{max-width:34rem}

.hero__title{margin-bottom:var(--sp-5)}
.hero__title .l1{display:block;color:var(--paiq-navy)}
.hero__title .l2{display:block}
.hero__title .l2 .g{color:var(--paiq-green)}
.hero__title .l2 .b{color:var(--blue-600)}

.hero__lead{
  font-size:var(--fs-lead);color:var(--ink-2);
  max-width:27rem;margin-bottom:var(--sp-6);
}

/* On desktop the copy sits high in the frame so the hands stay the dominant
   element. Below 60rem it stays vertically centred, which reads better when
   the artwork is cropped narrow. */
@media (min-width:60rem){
  .hero{align-items:flex-start}
  .hero__inner{padding-block-start:clamp(1.5rem,5vh,3.5rem)}
  .hero__title{margin-bottom:var(--sp-4)}
  .hero__lead{margin-bottom:var(--sp-5)}
}

/* ── The five concepts ──
   Desktop: positioned over the artwork at points that sit in its quiet areas.
   Mobile: the same markup reflows into a plain wrapped row under the buttons.
   One list, two presentations — nothing is duplicated. */
.concepts{list-style:none;margin:var(--sp-6) 0 0;padding:0;display:flex;flex-wrap:wrap;gap:var(--sp-3) var(--sp-5)}
.concept{display:flex;align-items:center;gap:var(--sp-2)}
.concept__dot{
  width:30px;height:30px;flex:none;display:grid;place-items:center;
  border-radius:50%;background:rgba(255,255,255,.9);
  border:1px solid var(--line);box-shadow:var(--shadow-1);
  color:var(--paiq-teal);
}
.concept__dot svg{width:15px;height:15px}
.concept__label{
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);
  white-space:nowrap;
}
.concept:nth-child(1) .concept__dot{color:var(--green-600)}
.concept:nth-child(2) .concept__dot{color:var(--paiq-teal)}
.concept:nth-child(3) .concept__dot{color:var(--green-500)}
.concept:nth-child(4) .concept__dot{color:var(--blue-600)}
.concept:nth-child(5) .concept__dot{color:var(--blue-600)}

@media (min-width:60rem){
  /* Over the artwork, at coordinates chosen to sit clear of both hands. */
  .concepts{position:absolute;inset:0;margin:0;display:block;pointer-events:none}
  .concept{position:absolute;flex-direction:column;gap:var(--sp-2);pointer-events:auto}
  .concept__dot{width:46px;height:46px}
  .concept__dot svg{width:21px;height:21px}
  /* Positions sit clear of the copy column (which ends near 48%) and clear
     of both hands in the artwork. Percentages, so they hold as the hero
     box changes shape between 60rem and very wide screens. */
  .concept--information{left:57%;top:13%}
  .concept--people{left:74%;top:21%}
  .concept--pathways{left:53%;top:68%}
  .concept--process{left:64%;top:76%}
  .concept--technology{left:81%;top:60%}
}

/* ─────────────────── APPLICATION FAMILY ─────────────────── */
/*
   The panel deliberately overlaps the lower edge of the hero, so PA-IQ
   visibly sits above and behind the four applications rather than beside
   them as a fifth peer.
*/
.app-family{position:relative;z-index:3;margin-top:clamp(-5.5rem,-6vw,-2.5rem)}
.app-family__panel{
  background:var(--white);
  border:1px solid var(--line-soft);
  border-radius:var(--r-xl);
  box-shadow:var(--shadow-3);
  padding:clamp(var(--sp-5),3vw,var(--sp-6));
}

.app-cards{
  display:grid;gap:0;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));
}
/* Hairline separators between cards, never around the outside. */
.app-card{
  position:relative;
  display:flex;align-items:center;gap:var(--sp-4);
  padding:var(--sp-4);border-radius:var(--r-lg);
  color:inherit;
  transition:background var(--t-med) var(--ease),transform var(--t-med) var(--ease);
}
.app-card + .app-card::before{
  content:"";position:absolute;left:0;top:14%;bottom:14%;width:1px;background:var(--line-soft);
}
.app-card:hover{background:var(--accent-wash);text-decoration:none;transform:translateY(-2px)}
.app-card:hover .app-card__arrow{transform:translateX(4px);color:var(--accent)}

.app-card__icon{
  width:56px;height:56px;flex:none;display:grid;place-items:center;
  border-radius:50%;
  background:var(--accent-soft);
  color:var(--accent);
}
.app-card__icon svg{width:26px;height:26px}
.app-card__body{flex:1 1 auto;min-width:0}
.app-card__name{
  display:block;font-weight:500;font-size:1.02rem;letter-spacing:-.01em;
  color:var(--paiq-navy);line-height:1.3;
}
.app-card__strap{
  display:block;font-size:.82rem;line-height:1.45;color:var(--ink-3);margin-top:2px;
}
.app-card__arrow{
  width:18px;height:18px;flex:none;color:var(--ink-4);
  transition:transform var(--t-med) var(--ease),color var(--t-med) var(--ease);
}

/* ── Orchestration line under the cards ── */
.orchestration{
  display:flex;align-items:center;justify-content:center;gap:var(--sp-4);
  flex-wrap:wrap;text-align:center;
  margin-top:var(--sp-5);padding-top:var(--sp-5);
  border-top:1px solid var(--line-soft);
}
.orchestration__rule{
  flex:1 1 2rem;max-width:9rem;height:1px;
  background:linear-gradient(90deg,transparent,var(--blue-300));
  position:relative;
}
.orchestration__rule:last-child{background:linear-gradient(270deg,transparent,var(--blue-300))}
.orchestration__rule::after{
  content:"";position:absolute;right:0;top:-2px;width:5px;height:5px;
  border-radius:50%;background:var(--blue-500);
}
.orchestration__rule:last-child::after{right:auto;left:0}
.orchestration__mark{width:36px;height:36px;flex:none}
.orchestration__text{font-size:var(--fs-small);color:var(--ink-2);font-weight:500}
.orchestration__text .t{color:var(--paiq-green)}
.orchestration__text .b{color:var(--blue-600)}
@media (max-width:45rem){
  .orchestration__rule{display:none}
}

/* ─────────────────── APPLICATION PAGE HERO ─────────────────── */

.app-hero{
  background:var(--grad-wash);
  border-bottom:1px solid var(--line-soft);
  padding-block:clamp(var(--sp-6),5vw,var(--sp-8));
}
.app-hero__grid{display:grid;gap:var(--sp-6);align-items:center;grid-template-columns:1fr}
@media (min-width:56rem){.app-hero__grid{grid-template-columns:1.35fr 1fr}}

.app-hero__badge{
  display:inline-flex;align-items:center;gap:var(--sp-3);
  padding:var(--sp-2) var(--sp-4) var(--sp-2) var(--sp-2);
  background:var(--white);border:1px solid var(--line);
  border-radius:var(--r-pill);box-shadow:var(--shadow-1);
  margin-bottom:var(--sp-5);
}
.app-hero__badge-icon{
  width:32px;height:32px;flex:none;display:grid;place-items:center;
  border-radius:50%;background:var(--accent-soft);color:var(--accent);
}
.app-hero__badge-icon svg{width:16px;height:16px}
.app-hero__badge-text{
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);
}
.app-hero__strap{
  font-size:var(--fs-lead);font-weight:500;color:var(--accent);
  margin-bottom:var(--sp-4);
}

/* The operational problem the application answers, stated in the hero
   before anything is claimed for the product. Set below the proposition in
   body ink and body size: it is the reader's own situation being described
   back to them, and it stops working the moment it looks like marketing.
   The rule down its left edge takes the page's own accent, so each
   application states its problem in its own colour. */
.app-hero__problem{
  max-width:64ch;margin:var(--sp-5) 0 0;
  padding-left:var(--sp-4);border-left:2px solid var(--accent);
  font-size:var(--fs-body);line-height:1.6;color:var(--ink-2);
}
.app-hero__problem-label{
  display:block;margin-bottom:var(--sp-2);
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  /* --ink-2 rather than the --ink-3 the other small labels use: at 11.5px
     uppercase, --ink-3 measures 3.96:1 against the hero wash and WCAG AA
     wants 4.5:1 for text this size. --ink-2 gives 7.29:1. */
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);
}

/* ─────────────── APPLICATION PREVIEW (integration point) ─────────────── */
/*
   This is the shell the real demonstration SPA drops into. The surrounding
   page never needs to change: the SPA mounts inside .app-preview__stage and
   owns everything below that node. See assets/js/preview/preview.js.
*/
.app-preview{
  border:1px solid var(--line);
  border-radius:var(--r-xl);
  background:var(--white);
  box-shadow:var(--shadow-2);
  overflow:hidden;
}
.app-preview__bar{
  display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;
  padding:var(--sp-3) var(--sp-4);
  background:var(--accent-wash);
  border-bottom:1px solid var(--line-soft);
}
.app-preview__dots{display:flex;gap:6px;flex:none}
.app-preview__dots i{width:9px;height:9px;border-radius:50%;background:var(--line);display:block}
.app-preview__title{
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.13em;text-transform:uppercase;color:var(--ink-3);
}
/* Best-explored-full-screen cue. Hidden on wide screens, where the embedded
   preview already has the room it needs. */
.app-preview__cue{
  display:none;
  align-items:center;gap:var(--sp-3);flex-wrap:wrap;
  padding:var(--sp-3) var(--sp-4);
  background:var(--accent-wash);
  border-bottom:1px solid var(--line-soft);
  font-size:.78rem;color:var(--ink-2);
}
.app-preview__cue .btn{padding:.55rem 1.05rem;font-size:.78rem;margin-left:auto}
@media (max-width:60rem){ .app-preview__cue{display:flex} }

/* Opens the preview on its own, for anyone who wants the full screen. */
.app-preview__open{
  margin-left:auto;display:inline-flex;align-items:center;gap:6px;
  font-family:var(--mono);font-size:.62rem;font-weight:500;
  letter-spacing:.11em;text-transform:uppercase;
  color:var(--accent);background:var(--white);
  border:1px solid var(--accent-soft);border-radius:var(--r-pill);
  padding:3px 11px;
}
.app-preview__open:hover{border-color:var(--accent);text-decoration:none}
.app-preview__open svg{width:11px;height:11px}
.app-preview__flag{
  font-family:var(--mono);font-size:.62rem;font-weight:500;
  letter-spacing:.11em;text-transform:uppercase;
  color:var(--accent);
  background:var(--white);border:1px solid var(--accent-soft);
  border-radius:var(--r-pill);padding:3px 10px;
}

/* The stage: fixed aspect on desktop so the page does not jump when a real
   SPA loads; free height on small screens where a fixed ratio is unusable. */
.app-preview__stage{
  position:relative;min-height:22rem;
  display:grid;place-items:center;
  /* Faint dot grid: signals "this is where an application appears"
     without pretending to be a screenshot of one. */
  background-color:var(--paper);
  background-image:radial-gradient(circle at 1px 1px,var(--line-soft) 1px,transparent 0);
  background-size:22px 22px;
}
@media (min-width:56rem){.app-preview__stage{aspect-ratio:16/10;min-height:0}}

/* Once a real preview has mounted it owns the whole stage: the centring and
   the dot grid are placeholder furniture and would otherwise box it in. */
.app-preview[data-preview-live] .app-preview__stage{
  display:block;background-image:none;background-color:var(--white);
}

/* ── A preview that is the whole application ──
   Mounted in an iframe, so it needs a real amount of room: these are
   full working screens, not a widget. The ratio is deliberately generous
   and the floor rises with the viewport rather than being fixed. */
.app-preview__frame{
  display:block;width:100%;height:100%;border:0;
  min-height:clamp(28rem,70vh,46rem);
  background:#f6f4ef;
}
.app-preview[data-preview-mode="frame"] .app-preview__stage{
  aspect-ratio:auto;
  height:clamp(28rem,78vh,52rem);
  min-height:0;
  padding:0;
}
/* On a phone the application's own layout is the constraint, so the frame
   gets a fixed workable height and scrolls internally rather than being
   squeezed into an unusable box. */
@media (max-width:48rem){
  .app-preview[data-preview-mode="frame"] .app-preview__stage{height:34rem}
}

/* Placeholder shown until a real SPA is registered for this product. */
.preview-placeholder{max-width:34rem;text-align:center;padding:var(--sp-6)}

/* Line beneath the homepage preview pointing at the rest of the family. */
.preview-more{
  margin-top:var(--sp-5);text-align:center;
  font-size:var(--fs-small);color:var(--ink-3);
}
.preview-more a{display:inline-flex;align-items:center;gap:.4rem;margin-left:.5rem;font-weight:500}
.preview-more svg{width:1em;height:1em}
.preview-placeholder__icon{
  width:64px;height:64px;margin:0 auto var(--sp-4);
  display:grid;place-items:center;border-radius:50%;
  background:var(--accent-soft);color:var(--accent);
}
.preview-placeholder__icon svg{width:28px;height:28px}
.preview-placeholder h3{font-size:var(--fs-h3);margin-bottom:var(--sp-3)}
.preview-placeholder p{color:var(--ink-3);font-size:var(--fs-small);margin-bottom:var(--sp-2)}
.preview-placeholder code{
  font-family:var(--mono);font-size:.74rem;
  background:var(--white);border:1px solid var(--line);
  border-radius:var(--r-sm);padding:2px 7px;color:var(--ink-2);
}

/* Static application card (Connected Intelligence page): the card is not
   itself a link, because it carries two — open the demo, or read the page. */
.product-card--static{cursor:default}
.product-card--static:hover{transform:none}
.product-card__links{display:flex;flex-wrap:wrap;gap:var(--sp-3);margin-top:auto;padding-top:var(--sp-4)}
.btn--sm{padding:.5rem .9rem;font-size:var(--fs-small)}

/* ─────────────────── HOMEPAGE DEMO BAND ───────────────────
   Replaces the embedded application on the homepage. Deliberately light
   where the closing CTA is dark, so the two asks read as two different
   things: try it yourself here, talk to us there. */

.demo-band{text-align:center;max-width:56rem;margin-inline:auto}
.demo-band h2{
  font-size:clamp(1.9rem,4.2vw,2.9rem);
  letter-spacing:-.02em;line-height:1.1;
  color:var(--paiq-navy);margin-bottom:var(--sp-6);
}
.demo-band__actions{justify-content:center}
.btn--lg{padding:.95rem 1.6rem;font-size:1.02rem}

.demo-chips{
  display:flex;flex-wrap:wrap;justify-content:center;gap:var(--sp-3);
  margin-top:var(--sp-6);
}
.demo-chip{
  display:inline-flex;align-items:center;gap:.55rem;
  padding:.5rem .9rem;
  background:var(--white);
  border:1px solid var(--line);border-radius:999px;
  font-size:var(--fs-small);font-weight:500;color:var(--ink-2);
  transition:border-color var(--t-fast) var(--ease),
             color var(--t-fast) var(--ease),
             box-shadow var(--t-fast) var(--ease),
             transform var(--t-fast) var(--ease);
}
.demo-chip:hover{
  text-decoration:none;color:var(--accent);
  border-color:var(--accent);box-shadow:var(--shadow-1);transform:translateY(-1px);
}
.demo-chip__icon{display:inline-flex;color:var(--accent)}
.demo-chip__icon svg{width:17px;height:17px}
@media (prefers-reduced-motion:reduce){.demo-chip:hover{transform:none}}

/* ─────────────────── HOMEPAGE APPLICATION PICKER ───────────────────
   The homepage reads animation → quick application choices → contact, so
   these are doors rather than cards: an icon and a name, at the same scale
   as the icons used everywhere else. One row of six on a wide screen,
   three then two as it narrows. Deliberately no descriptive text — the
   application's own page does that job. */

.app-picker{
  display:grid;gap:var(--sp-3);
  grid-template-columns:repeat(6,minmax(0,1fr));
  margin-inline:auto;padding:0;list-style:none;max-width:68rem;
}
@media (max-width:64rem){.app-picker{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:32rem){.app-picker{grid-template-columns:repeat(2,minmax(0,1fr))}}

.app-pick{
  display:flex;flex-direction:column;align-items:center;gap:.5rem;
  padding:var(--sp-4) .5rem;
  border:1px solid transparent;border-radius:var(--r-lg);
  text-align:center;
  transition:background var(--t-fast) var(--ease),
             border-color var(--t-fast) var(--ease),
             transform var(--t-fast) var(--ease);
}
.app-pick:hover,.app-pick:focus-visible{
  text-decoration:none;
  background:var(--accent-wash);border-color:var(--accent-soft);
  transform:translateY(-2px);
}
.app-pick__icon{
  width:52px;height:52px;flex:none;display:grid;place-items:center;
  border-radius:50%;
  background:var(--accent-soft);color:var(--accent);
  transition:box-shadow var(--t-fast) var(--ease);
}
.app-pick__icon svg{width:25px;height:25px}
.app-pick:hover .app-pick__icon{box-shadow:var(--shadow-1)}
.app-pick__name{
  font-size:var(--fs-small);font-weight:500;letter-spacing:-.01em;
  color:var(--paiq-navy);line-height:1.25;
}
/* The setting the application covers, in the same three or four words the
   navigation dropdown uses, so the two never drift apart. A name on its own
   told a first-time reader nothing the name had not already told them. This
   is one short line and must stay one short line — the moment it becomes a
   sentence these are cards again, and the homepage has cards nowhere. */
.app-pick__context{
  max-width:17ch;
  font-size:.735rem;line-height:1.35;color:var(--ink-3);
  text-wrap:balance;
}
@media (prefers-reduced-motion:reduce){.app-pick:hover,.app-pick:focus-visible{transform:none}}

/* ─────────────────── DEMO CONVERSION BLOCK ─────────────────── */

.demo-cta{
  margin-top:var(--sp-6);
  background:linear-gradient(120deg,var(--paiq-navy) 0%,#065a72 55%,var(--paiq-teal) 100%);
  border-radius:var(--r-xl);
  padding:clamp(var(--sp-5),4vw,var(--sp-7));
  color:var(--white);
  box-shadow:var(--shadow-2);
}
.demo-cta h2,.demo-cta h3{color:var(--white);max-width:24ch}
.demo-cta p{color:rgba(255,255,255,.82);max-width:52ch}
.demo-cta .btn--primary{background:var(--white);color:var(--paiq-navy)}
.demo-cta .btn--primary:hover{background:#eef7fa}
/* The note under the button. It used to be a one-line privacy footnote and
   was set at 60% white to stay out of the way. It now also carries the
   time-to-live statement, which is a fact a reader is meant to take away —
   and 60% white measures 3.25:1 against the teal end of the gradient behind
   it, under the 4.5:1 accessibility floor. At 82% it measures 4.70:1 over
   the teal and 7.28:1 over the navy, so it passes the whole way across the
   panel. Computed against both gradient stops, not sampled by eye. */
.demo-cta__note{
  font-size:var(--fs-small);color:rgba(255,255,255,.82);margin-top:var(--sp-4);
  max-width:52ch;
}

/* ─────────────────────────── FOOTER ─────────────────────────── */

.site-footer{
  background:var(--white);
  border-top:1px solid var(--line-soft);
  padding-block:var(--sp-7) var(--sp-5);
  margin-top:var(--sp-8);
}
.site-footer__grid{
  display:grid;gap:var(--sp-6);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));
  margin-bottom:var(--sp-6);
}
.site-footer__brandcol{grid-column:span 1}
.site-footer__coltitle{
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);
  margin-bottom:var(--sp-3);
}
.site-footer ul{list-style:none;margin:0;padding:0}
.site-footer li{margin-bottom:var(--sp-2)}
.site-footer a{color:var(--ink-2);font-size:var(--fs-small)}
.site-footer a:hover{color:var(--paiq-teal)}
.site-footer__base{
  display:flex;flex-wrap:wrap;gap:var(--sp-3) var(--sp-5);
  align-items:center;justify-content:space-between;
  padding-top:var(--sp-5);border-top:1px solid var(--line-soft);
  font-size:.78rem;color:var(--ink-4);
}

/* ── 404 ──
   A dead end should be short and offer a way out, so the page is one block
   of text and two buttons, vertically comfortable on any screen. */
.notfound{display:grid;align-items:center;min-height:52vh}
.notfound__inner{max-width:34rem}
.notfound h1{margin-bottom:var(--sp-3)}
.notfound .btn-row{margin-top:var(--sp-6)}

/* ─────────────────── COOKIE CONSENT ───────────────────
   A bar, not a modal: it does not cover the page, does not trap focus and
   cannot be dismissed by ignoring it. Both choices are real buttons and
   neither is pre-selected. */

.consent{
  position:fixed;inset:auto 0 0 0;z-index:200;
  background:var(--white);
  border-top:1px solid var(--line);
  box-shadow:0 -6px 24px rgba(10,35,45,.10);
}
.consent__inner{
  width:100%;max-width:var(--wrap);margin-inline:auto;
  padding:var(--sp-4) var(--gutter);
  display:flex;align-items:center;gap:var(--sp-5);flex-wrap:wrap;
}
.consent__text{
  margin:0;flex:1 1 26rem;min-width:0;
  font-size:var(--fs-small);color:var(--ink-2);line-height:1.5;
}
.consent__text a{white-space:nowrap}
.consent__actions{display:flex;gap:var(--sp-3);flex:none;flex-wrap:wrap}
@media (max-width:40rem){
  .consent__actions{width:100%}
  .consent__actions .btn{flex:1 1 auto;justify-content:center}
}

/* On a phone the banner was taking around 150px off the bottom of the
   screen and sitting over whatever was under it. Nothing about the consent
   itself changes — same wording, same two buttons, same explicit choice,
   same logic in consent.js, which this does not touch. It is only tighter,
   and the page now reserves room for it instead of being covered by it. */
@media (max-width:47.99rem){
  .consent__inner{padding:var(--sp-3) var(--gutter);gap:var(--sp-2)}
  .consent__text{flex:1 1 100%;font-size:.775rem;line-height:1.45}
  .consent__actions{gap:var(--sp-2)}
  .consent__actions .btn{padding-block:.5rem;font-size:.82rem}
}
body:has(.consent:not([hidden])){padding-bottom:8rem}
@media (min-width:48rem){
  body:has(.consent:not([hidden])){padding-bottom:5.5rem}
}

/* A button that has to sit in a list of links without looking like a button. */
.footer-link{
  font:inherit;font-size:inherit;color:inherit;
  background:none;border:0;padding:0;cursor:pointer;
  text-align:left;text-decoration:none;
}
.footer-link:hover{text-decoration:underline}

/* Legal pages: long-form text, so it gets room to breathe. */
.legal__address{font-style:normal;line-height:1.7}
.legal__action{margin-top:var(--sp-4)}
.legal__foot{margin-top:var(--sp-7);padding-top:var(--sp-4);border-top:1px solid var(--line-soft)}

/* ─────────────────── SMALL-SCREEN NAVIGATION ─────────────────── */

@media (max-width:62rem){
  .nav-toggle{display:inline-flex}
  .nav{
    position:fixed;inset:var(--header-h) 0 auto 0;
    flex-direction:column;align-items:stretch;gap:0;
    background:var(--white);
    border-bottom:1px solid var(--line);
    box-shadow:var(--shadow-3);
    padding:var(--sp-3) var(--gutter) var(--sp-5);
    max-height:calc(100dvh - var(--header-h));
    overflow-y:auto;
    transform:translateY(-8px);opacity:0;visibility:hidden;
    transition:opacity var(--t-med) var(--ease),transform var(--t-med) var(--ease),visibility var(--t-med);
  }
  .nav.is-open{transform:none;opacity:1;visibility:visible}
  .nav__link{padding:var(--sp-4) 0;font-size:1rem;border-bottom:1px solid var(--line-soft)}
  .nav__link::after{display:none}
  .nav__item{width:100%}
  .nav__pair{width:100%;justify-content:space-between;border-bottom:1px solid var(--line-soft)}
  .nav__pair .nav__link{border-bottom:0;flex:1}
  .nav__disclosure{width:44px;height:44px}
  .nav__toggle{width:100%;justify-content:space-between}
  .nav__menu{
    position:static;transform:none;translate:none;opacity:1;visibility:visible;
    min-width:0;box-shadow:none;border:0;border-radius:0;
    padding:0 0 var(--sp-3) var(--sp-3);
    display:none;
  }
  .nav__item.is-open .nav__menu{display:block}
  .nav__cta{width:100%;margin-top:var(--sp-4)}
}

/* ── Aside on an application page ──
   Shows PA-IQ sitting *beneath* the four applications rather than describing
   it in prose alone: four tiles above, the orchestration bar below, with
   connectors running down into it. The current application is lit. */
.app-aside{
  background:var(--white);
  border:1px solid var(--line-soft);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);
  padding:var(--sp-5);
}
.app-aside__note{font-size:.8rem;color:var(--ink-3);margin:var(--sp-4) 0 0;line-height:1.55}

.layerstack{
  list-style:none;margin:var(--sp-2) 0 0;padding:0;
  display:grid;grid-template-columns:repeat(2,1fr);gap:var(--sp-2);
}
@media (min-width:30rem){.layerstack{grid-template-columns:repeat(4,1fr);gap:6px}}

/* The li is only a grid cell; the anchor inside it is the tile, and it
   fills the cell so the whole card is the target rather than the label. */
.layerstack__cell{display:flex;margin-bottom:0}

.layerstack__tile{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:4px;width:100%;
  padding:var(--sp-3) var(--sp-2);
  border:1px solid var(--line-soft);border-radius:var(--r-md);
  background:var(--paper);
  color:var(--ink-4);
  text-decoration:none;
  transition:all var(--t-med) var(--ease);
}
/* Hover and keyboard focus land on the same treatment the current
   application already uses, so the strip reads as one set of controls.
   Focus itself is the site-wide outline from base.css — not replaced. */
.layerstack__tile:hover,
.layerstack__tile:focus-visible{
  background:var(--accent-wash);
  border-color:var(--accent-soft);
  color:var(--accent);
  box-shadow:var(--shadow-1);
  transform:translateY(-2px);
  text-decoration:none;
}
.layerstack__tile:hover .layerstack__name,
.layerstack__tile:focus-visible .layerstack__name{color:var(--paiq-navy)}
@media (prefers-reduced-motion:reduce){
  .layerstack__tile:hover,
  .layerstack__tile:focus-visible{transform:none}
}
.layerstack__tile svg{width:17px;height:17px}
.layerstack__name{
  font-size:.62rem;font-weight:500;letter-spacing:.01em;
  text-align:center;line-height:1.2;
}
/* The application whose page this is. */
.layerstack__tile.is-current{
  background:var(--accent-wash);
  border-color:var(--accent-soft);
  color:var(--accent);
  box-shadow:var(--shadow-1);
}
.layerstack__tile.is-current .layerstack__name{color:var(--paiq-navy)}

/* Connectors: four short lines dropping from the tiles into the bar. */
.layerstack__connectors{
  position:absolute;left:0;right:0;top:-11px;height:11px;
  background-image:linear-gradient(var(--blue-300),var(--blue-300));
  background-size:1px 11px;background-repeat:repeat-x;
  background-position:12.5% 0;
  opacity:.5;
}
@media (min-width:30rem){
  .layerstack__connectors{
    background-image:
      linear-gradient(var(--blue-300),var(--blue-300)),
      linear-gradient(var(--blue-300),var(--blue-300)),
      linear-gradient(var(--blue-300),var(--blue-300)),
      linear-gradient(var(--blue-300),var(--blue-300));
    background-size:1px 11px;background-repeat:no-repeat;
    background-position:12.5% 0,37.5% 0,62.5% 0,87.5% 0;
  }
}

.layerstack__base{
  position:relative;margin-top:17px;
  display:flex;align-items:center;justify-content:center;gap:var(--sp-3);
  padding:var(--sp-3) var(--sp-4);
  border-radius:var(--r-md);
  background:linear-gradient(120deg,var(--paiq-navy),#065a72 60%,var(--paiq-teal));
  box-shadow:var(--shadow-1);
}
.layerstack__base:hover{text-decoration:none;box-shadow:var(--shadow-2);filter:saturate(115%)}
.layerstack__mark{width:30px;height:30px;flex:none;filter:brightness(0) invert(1);opacity:.95}
.layerstack__baseText{
  font-family:var(--mono);font-size:.64rem;font-weight:500;
  letter-spacing:.11em;text-transform:uppercase;color:var(--white);
}

/* ═══════════════════ HOMEPAGE STORY SECTIONS ═══════════════════ */

/* ── The Question ──
   A single large statement. The rule beneath it echoes the network
   language of the hero without repeating the artwork. */
.question{text-align:center;max-width:52rem;margin-inline:auto}
.question__heading{
  font-size:clamp(1.75rem,1.2rem + 2.4vw,3rem);
  line-height:1.16;letter-spacing:-.022em;margin-bottom:var(--sp-5);
}
.question__heading .l1{display:block;color:var(--paiq-navy)}
.question__heading .l2{display:block;color:var(--blue-600)}
.question__body{font-size:var(--fs-lead);color:var(--ink-2);max-width:44rem;margin-inline:auto}
.question__rule{
  width:min(22rem,60%);height:1px;margin:var(--sp-6) auto 0;
  background:linear-gradient(90deg,transparent,var(--blue-300) 30%,var(--green-300) 70%,transparent);
  position:relative;
}
.question__rule::before,.question__rule::after{
  content:"";position:absolute;top:-2.5px;width:6px;height:6px;border-radius:50%;
}
.question__rule::before{left:30%;background:var(--blue-500)}
.question__rule::after{left:68%;background:var(--green-500)}

/* ── The Problem ──
   Three strands of knowledge that exist separately, then a resolution line
   that draws them together. The left border on each strand is the visual
   "separate"; the resolution card is the visual "joined". */
.problem__grid{display:grid;gap:var(--sp-6);align-items:start}
@media (min-width:58rem){.problem__grid{grid-template-columns:.9fr 1.1fr;gap:var(--sp-7)}}

.strands{list-style:none;margin:0;padding:0;display:grid;gap:var(--sp-3)}
.strand{
  background:var(--white);border:1px solid var(--line-soft);
  border-left:3px solid var(--line);
  border-radius:var(--r-md);padding:var(--sp-4) var(--sp-5);
  box-shadow:var(--shadow-1);
  transition:border-left-color var(--t-med) var(--ease),transform var(--t-med) var(--ease);
}
.strand:nth-child(1){border-left-color:var(--blue-500)}
.strand:nth-child(2){border-left-color:var(--paiq-teal)}
.strand:nth-child(3){border-left-color:var(--green-500)}
.strand__name{display:block;font-weight:500;color:var(--paiq-navy);margin-bottom:2px}
.strand__text{display:block;font-size:var(--fs-small);color:var(--ink-3);line-height:1.55}

.resolution{
  margin-top:var(--sp-4);
  display:flex;align-items:flex-start;gap:var(--sp-4);
  background:linear-gradient(120deg,var(--blue-050),var(--green-050));
  border:1px solid var(--line-soft);border-radius:var(--r-lg);
  padding:var(--sp-5);
}
.resolution__mark{width:34px;height:34px;flex:none;margin-top:2px}
.resolution__text{font-size:var(--fs-small);color:var(--ink);font-weight:500;line-height:1.6;margin:0}

/* ── Our Approach ──
   Five elements on one connected track. Technology sits last on purpose,
   and the track makes the order readable at a glance. */
.elements{
  list-style:none;margin:0;padding:0;position:relative;
  display:grid;gap:var(--sp-5) var(--sp-3);
  /* 9rem lets two elements sit side by side on a phone rather than five
     full-width rows, which made the section a long scroll on its own. */
  grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));
}
@media (min-width:64rem){
  .elements{gap:var(--sp-5)}
  /* The connecting track, behind the row, between the icon centres. */
  .elements::before{
    content:"";position:absolute;left:10%;right:10%;top:27px;height:1px;
    background:linear-gradient(90deg,var(--blue-300),var(--paiq-teal),var(--green-300));
    opacity:.55;
  }
}
.element{position:relative;text-align:center}
.element__icon{
  width:54px;height:54px;margin:0 auto var(--sp-3);
  display:grid;place-items:center;border-radius:50%;
  background:var(--white);border:1px solid var(--line);
  box-shadow:var(--shadow-1);color:var(--paiq-teal);
}
.element__icon svg{width:23px;height:23px}
.element:nth-child(1) .element__icon{color:var(--blue-600)}
.element:nth-child(2) .element__icon{color:var(--paiq-teal)}
.element:nth-child(3) .element__icon{color:var(--paiq-teal)}
.element:nth-child(4) .element__icon{color:var(--green-500)}
.element:nth-child(5) .element__icon{color:var(--green-600)}
.element__name{display:block;font-weight:500;color:var(--paiq-navy);margin-bottom:var(--sp-1)}
.element__text{display:block;font-size:.82rem;color:var(--ink-3);line-height:1.5}

/* ── How PA-IQ Works ──
   Numbered steps on a vertical spine. Strategic language only: what each
   move achieves, never how it is done. */
.steps{list-style:none;margin:0;padding:0;display:grid;gap:0}
.step{
  position:relative;display:flex;gap:var(--sp-5);
  padding:var(--sp-5) 0 var(--sp-5) 0;
}
.step + .step{border-top:1px solid var(--line-soft)}
.step__num{
  width:46px;height:46px;flex:none;display:grid;place-items:center;
  border-radius:50%;background:var(--white);
  border:1px solid var(--line);box-shadow:var(--shadow-1);
  font-family:var(--mono);font-size:.82rem;font-weight:500;color:var(--paiq-teal);
}
.step__body{flex:1 1 auto;min-width:0}
.step__name{font-size:var(--fs-h3);font-weight:500;color:var(--paiq-navy);margin:0 0 var(--sp-1);letter-spacing:-.01em}
.step__text{margin:0;color:var(--ink-2)}
/* A continuous spine joins the five numbers, so the order is visible
   rather than merely implied. Drawn behind the numbered discs. */
.step::before{
  content:"";position:absolute;left:23px;top:0;bottom:0;width:1px;
  background:var(--line-soft);
}
.step:first-child::before{top:var(--sp-5)}
.step:last-child::before{bottom:calc(100% - var(--sp-5) - 46px)}
.step__num{position:relative;z-index:1}
@media (min-width:58rem){
  .step{gap:var(--sp-6);padding-block:var(--sp-6)}
  .step__body{display:grid;grid-template-columns:14rem 1fr;gap:var(--sp-5);align-items:baseline}
  .step__name{margin-bottom:0}
}

/* ── Final call to action ── */
.final-cta{
  text-align:center;
  background:linear-gradient(120deg,var(--paiq-navy) 0%,#065a72 55%,var(--paiq-teal) 100%);
  border-radius:var(--r-xl);
  padding:clamp(var(--sp-6),5vw,var(--sp-8));
  color:var(--white);box-shadow:var(--shadow-2);
}
.final-cta h2{color:var(--white);max-width:20ch;margin-inline:auto}
.final-cta p{color:rgba(255,255,255,.82);max-width:48ch;margin-inline:auto;margin-bottom:var(--sp-6)}
.final-cta .btn-row{justify-content:center}
.final-cta .btn--primary{background:var(--white);color:var(--paiq-navy)}
.final-cta .btn--primary:hover{background:#eef7fa}
.final-cta .btn--secondary{background:transparent;color:var(--white);border-color:rgba(255,255,255,.45)}
.final-cta .btn--secondary:hover{border-color:var(--white);background:rgba(255,255,255,.08)}

/* The title-bar chip and the narrow-screen cue are two routes to the same
   place, so only one shows at a time. This lives at the end of the file
   deliberately: the chip's own `display:inline-flex` is declared later than
   the cue block, and at equal specificity the last rule wins — putting the
   hide inside the cue block silently did nothing. */
@media (max-width:60rem){
  .app-preview__open{display:none}
}

/* ═══════════════════════ ENQUIRY FORM ═══════════════════════ */

.enquiry{
  background:var(--white);
  border:1px solid var(--line-soft);
  border-radius:var(--r-xl);
  box-shadow:var(--shadow-2);
  padding:clamp(var(--sp-5),4vw,var(--sp-7));
  max-width:38rem;
}
.enquiry__heading{font-size:var(--fs-h3);margin-bottom:var(--sp-2)}
.enquiry__intro{color:var(--ink-2);font-size:var(--fs-small);margin-bottom:var(--sp-5)}

.field{margin-bottom:var(--sp-4)}
.field label{
  display:block;font-size:var(--fs-small);font-weight:500;
  color:var(--paiq-navy);margin-bottom:var(--sp-2);
}
.field .req{color:var(--paiq-teal);margin-left:2px}
.field .opt{font-weight:400;color:var(--ink-4);font-size:.78rem;margin-left:4px}

.field input,
.field select,
.field textarea{
  width:100%;font:inherit;font-size:var(--fs-small);color:var(--ink);
  background:var(--paper);
  border:1px solid var(--line);border-radius:var(--r-md);
  padding:.7rem .85rem;
  transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease);
}
.field textarea{resize:vertical;min-height:5.5rem}
.field select{
  /* Native arrow varies wildly between platforms; this one is ours. */
  appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b828d' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 9l7 7 7-7'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right .8rem center;background-size:14px;
  padding-right:2.4rem;
}
.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--blue-300)}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--paiq-teal);
  box-shadow:0 0 0 3px rgba(0,108,120,.14);
}
.field input[aria-invalid="true"],
.field select[aria-invalid="true"]{border-color:var(--status-act)}
.field__err{
  margin:var(--sp-2) 0 0;font-size:.78rem;color:var(--status-act);
}

/* Spam trap: out of sight, out of the tab order, still fillable by a bot. */
.enquiry__trap{
  position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;
}

.enquiry__busy{font-size:var(--fs-small);color:var(--ink-3)}
.enquiry__note{
  margin-top:var(--sp-4);font-size:.78rem;color:var(--ink-4);
}

.enquiry__result{margin:0}
.enquiry__ok{display:flex;gap:var(--sp-4);align-items:flex-start}
.enquiry__ok p{font-size:var(--fs-lead);color:var(--paiq-navy);margin:0;line-height:1.45}
.enquiry__tick{
  width:38px;height:38px;flex:none;display:grid;place-items:center;
  border-radius:50%;background:var(--green-100);color:var(--green-600);
}
.enquiry__tick svg{width:19px;height:19px}
.enquiry__fail p{color:var(--status-act);margin:0}

/* ═══════════════════════ CONTACT PAGE ═══════════════════════ */

.contact-grid{display:grid;gap:var(--sp-7);align-items:start}
@media (min-width:58rem){.contact-grid{grid-template-columns:1.15fr .85fr}}

.contact-aside h2{font-size:var(--fs-h3);margin-bottom:var(--sp-3)}
.contact-block{margin-bottom:var(--sp-6)}
.contact-block h3{
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);
  margin-bottom:var(--sp-2);
}
.contact-block p,.contact-block address{
  margin:0;font-style:normal;color:var(--ink-2);font-size:var(--fs-small);line-height:1.7;
}

/* ═══════════════════════ LEGAL PAGES ═══════════════════════ */

.legal{max-width:44rem}
.legal h2{font-size:var(--fs-h3);margin:var(--sp-7) 0 var(--sp-3)}
.legal h2:first-of-type{margin-top:0}
.legal p,.legal li{color:var(--ink-2)}
.legal__toc{
  background:var(--mist);border:1px solid var(--line-soft);
  border-radius:var(--r-lg);padding:var(--sp-5);margin-bottom:var(--sp-7);
}
.legal__toc h2{font-size:var(--fs-small);margin:0 0 var(--sp-3)}
.legal__toc ol{margin:0;padding-left:1.2em;font-size:var(--fs-small)}

/* A section whose wording is not yet settled. Deliberately conspicuous:
   nobody should be able to publish this page without noticing them. */
.todo{
  border-left:3px solid var(--status-watch);
  background:rgba(199,124,17,.06);
  border-radius:0 var(--r-md) var(--r-md) 0;
  padding:var(--sp-4) var(--sp-5);
  margin:var(--sp-3) 0 var(--sp-5);
}
.todo__tag{
  display:inline-block;font-family:var(--mono);font-size:.62rem;font-weight:500;
  letter-spacing:.12em;text-transform:uppercase;color:var(--status-watch);
  margin-bottom:var(--sp-2);
}
.todo p{margin:0 0 var(--sp-2);font-size:var(--fs-small);color:var(--ink-2)}
.todo ul{margin:var(--sp-2) 0 0;font-size:var(--fs-small)}
.todo li{margin-bottom:var(--sp-1)}

/* ═══════════════ APPLICATIONS LANDING — PRODUCT CARDS ═══════════════ */
/*
   Someone who clicks "Applications" came to see the applications, so the
   four cards sit directly under a deliberately short intro and are above
   the fold on a normal desktop. Everything explanatory goes below them.
*/

.app-lede{max-width:52rem;margin-bottom:var(--sp-5)}
.app-lede h1{margin-bottom:var(--sp-3)}
.app-lede p{font-size:var(--fs-lead);color:var(--ink-2);margin:0}

.product-grid{
  display:grid;gap:var(--sp-4);
  grid-template-columns:1fr;
}
@media (min-width:40rem){ .product-grid{grid-template-columns:repeat(2,1fr)} }
@media (min-width:78rem){ .product-grid{gap:var(--sp-5)} }

.product-card{
  display:flex;flex-direction:column;
  background:var(--white);
  border:1px solid var(--line-soft);
  border-radius:var(--r-xl);
  box-shadow:var(--shadow-1);
  padding:clamp(var(--sp-5),2.2vw,var(--sp-6));
  color:inherit;
  position:relative;
  transition:transform var(--t-med) var(--ease),
             box-shadow var(--t-med) var(--ease),
             border-color var(--t-med) var(--ease);
}
.product-card:hover{
  text-decoration:none;transform:translateY(-3px);
  box-shadow:var(--shadow-3);border-color:var(--accent-soft);
}
.product-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* A thin accent rule along the top edge, so the four read as a family that
   differs only by hue. Full width and clipped by the card's own radius —
   inset it and it detaches from the corner and reads as a floating bar. */
.product-card{overflow:hidden}
.product-card::before{
  content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:var(--accent);opacity:.9;
}

.product-card__head{display:flex;align-items:center;gap:var(--sp-4);margin-bottom:var(--sp-3)}
.product-card__icon{
  width:56px;height:56px;flex:none;display:grid;place-items:center;
  border-radius:var(--r-lg);
  background:var(--accent-soft);color:var(--accent);
}
.product-card__icon svg{width:26px;height:26px}
.product-card__name{
  font-size:clamp(1.2rem,1.05rem + .5vw,1.5rem);font-weight:500;
  letter-spacing:-.015em;color:var(--paiq-navy);line-height:1.2;margin:0;
}
.product-card__setting{
  display:block;font-family:var(--mono);font-size:.62rem;font-weight:500;
  letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4);margin-top:4px;
}

.product-card__purpose{
  font-size:var(--fs-lead);line-height:1.4;color:var(--accent);
  font-weight:500;margin:0 0 var(--sp-3);
}
.product-card__capability{
  font-size:var(--fs-small);color:var(--ink-2);margin:0 0 var(--sp-4);
  line-height:1.55;
}

.product-card__cta{
  margin-top:auto;display:inline-flex;align-items:center;gap:var(--sp-2);
  font-size:var(--fs-small);font-weight:500;color:var(--accent);
}
.product-card__cta svg{width:15px;height:15px;transition:transform var(--t-med) var(--ease)}
.product-card:hover .product-card__cta svg{transform:translateX(4px)}

/* ── The explanatory band, below the cards ── */
.app-arch{display:grid;gap:var(--sp-5);align-items:start}
@media (min-width:58rem){.app-arch{grid-template-columns:1fr 1fr;gap:var(--sp-7)}}
.app-arch__point{margin-bottom:var(--sp-5)}
.app-arch__point h3{
  font-size:var(--fs-small);font-weight:500;color:var(--paiq-navy);
  margin-bottom:var(--sp-2);
}
.app-arch__point p{font-size:var(--fs-small);color:var(--ink-2);margin:0}

/* ─────────── APPLICATION PAGE, SPA-FIRST (launch polish, 1 Sep 2026) ───────────
   The working application now sits directly under the name and the one
   line that describes it, so the hero is short by design: no button row,
   no two-column grid, nothing between the reader and the product. */
.app-hero--lean{padding-block:clamp(var(--sp-5),3.5vw,var(--sp-6))}
.app-hero--lean .app-hero__badge{margin-bottom:var(--sp-4)}
.app-hero--lean h1{margin-bottom:var(--sp-2)}
.app-hero--lean .app-hero__strap{margin-bottom:0;max-width:52ch}

/* The explanation that used to be a narrow column beside the hero. Below a
   full-width application it becomes one centred block, and the family runs
   in a single row rather than wrapping four-then-two. */
.app-intro{max-width:62ch;margin:0 auto var(--sp-6);text-align:center;color:var(--ink-2)}
.app-aside--wide{max-width:62rem;margin-inline:auto}
.app-aside--wide .eyebrow{text-align:center}
.app-aside--wide .layerstack{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (min-width:52rem){
  .app-aside--wide .layerstack{grid-template-columns:repeat(6,minmax(0,1fr))}
}

/* ─────────── APPLICATION TEASER — static product preview ───────────
   Replaced the embedded working application on 1 Sep 2026. Everything
   here styles pictures: there is no application markup on the page, so
   there is nothing to give an interactive state to. Do not add hover or
   focus affordances to the images — they are not controls, and making
   them look like controls is the one thing this block must not do. */
.teaser{margin:0 auto;max-width:1180px;padding-inline:var(--gutter)}

.teaser__shot{
  display:block;width:100%;height:auto;
  background:var(--white);
  border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-3);
}
.teaser__caption{
  margin:var(--sp-4) auto 0;max-width:54ch;
  text-align:center;
  font-size:var(--fs-lead);font-weight:500;line-height:1.35;
  color:var(--paiq-navy);
}

/* Three details from the same screen, one shape, so the row reads as a
   set rather than three unrelated crops. */
.teaser__glimpses{
  list-style:none;margin:var(--sp-6) 0 0;padding:0;
  display:grid;gap:var(--sp-4);
  grid-template-columns:repeat(3,minmax(0,1fr));
}
.teaser__glimpse img{
  display:block;width:100%;height:auto;
  background:var(--white);
  border:1px solid var(--line-soft);border-radius:var(--r-md);
  box-shadow:var(--shadow-1);
}
.teaser__glimpse span{
  display:block;margin-top:var(--sp-3);
  font-size:var(--fs-small);line-height:1.45;color:var(--ink-2);
}
@media (max-width:44rem){
  .teaser__glimpses{grid-template-columns:1fr;gap:var(--sp-5)}
}

.teaser__foot{
  margin-top:var(--sp-6);
  display:flex;flex-wrap:wrap;align-items:center;
  justify-content:space-between;gap:var(--sp-4);
}
.teaser__note{
  margin:0;max-width:46ch;
  font-size:var(--fs-small);line-height:1.5;color:var(--ink-3);
}

/* ─────────────────── TESTIMONIAL CARDS ───────────────────
   Same card as the rest of the site — white, hairline border, soft
   shadow. A placeholder is the identical shape in muted type, so a real
   quote replacing one changes nothing but the words. Not interactive. */
.quote-grid{
  list-style:none;margin:0;padding:0;
  display:grid;gap:var(--sp-4);
  grid-template-columns:repeat(3,minmax(0,1fr));
}
@media (max-width:52rem){.quote-grid{grid-template-columns:1fr;gap:var(--sp-3)}}
.quote-grid > li{margin-bottom:0;display:flex}

.quote-card{
  display:flex;flex-direction:column;gap:var(--sp-3);
  width:100%;margin:0;
  padding:var(--sp-5);
  background:var(--white);
  border:1px solid var(--line-soft);border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);
}
.quote-card__quote{
  margin:0;font-size:var(--fs-body);line-height:1.55;color:var(--ink);
}
.quote-card__by{
  margin-top:auto;padding-top:var(--sp-3);
  border-top:1px solid var(--line-soft);
  display:flex;flex-direction:column;gap:2px;
}
.quote-card__name{font-size:var(--fs-small);font-weight:500;color:var(--paiq-navy)}
.quote-card__role{font-size:var(--fs-small);color:var(--ink-3);line-height:1.4}

.quote-card--placeholder{background:var(--paper);border-style:dashed}
.quote-card__label{
  margin:0;
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-4);
}
.quote-card--placeholder .quote-card__quote{color:var(--ink-3)}

/* ─────────────────── EDITORIAL PAGE BODY ───────────────────
   POLISH PASS, 28 September 2026. Used on /about/.

   The interior layout gives every page the site's full h2, which is right
   on a page whose sections run for several paragraphs and wrong on one
   whose sections run for two. About read as a column of large headings with
   text wedged between them. This does three things and nothing else:
   drops the subheadings one step to the h3 size, puts a hairline and real
   air above each one, and lets the paragraphs set the rhythm. It is still
   prose on a page — no cards, no panels, no icons. */
.editorial > h2{
  font-size:var(--fs-h3);line-height:1.25;letter-spacing:-.015em;font-weight:500;
  color:var(--paiq-navy);
  margin:var(--sp-8) 0 var(--sp-4);
  padding-top:var(--sp-5);
  border-top:1px solid var(--line);
}
/* The first heading follows the page's own standfirst, which already
   separates it from what came before; a rule there would be a second
   divider doing the same job. */
.editorial > h2:first-of-type{border-top:0;padding-top:0;margin-top:var(--sp-6)}
.editorial > p{
  margin:0 0 var(--sp-4);
  line-height:1.7;color:var(--ink-2);max-width:66ch;
}
.editorial > p:last-of-type{margin-bottom:0}
/* A one-line paragraph immediately under a heading is the page's own
   rhetorical device — "Healthcare does not happen in neat, isolated
   systems." It earns a little more size than the prose that follows it. */
.editorial > h2 + p{
  font-size:var(--fs-lead);line-height:1.55;color:var(--ink);
}

/* ─────────────────── TEAM ───────────────────
   Compact credibility section for /about/. Initials are intentional
   placeholders for a consistent, professional presentation without relying
   on photography. */
.team-section{
  margin:var(--sp-9) 0 var(--sp-8);
  padding-top:var(--sp-7);
  border-top:1px solid var(--line);
}
.team-section__intro{max-width:48rem;margin-bottom:var(--sp-6)}
.team-section__intro .eyebrow{
  margin:0 0 var(--sp-3);
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--paiq-teal);
}
.team-section__intro h2{
  margin:0 0 var(--sp-4);
  font-size:var(--fs-h2);line-height:1.15;letter-spacing:-.02em;
  font-weight:500;color:var(--paiq-navy);
}
.team-section__intro > p:last-child{
  margin:0;max-width:66ch;
  font-size:var(--fs-lead);line-height:1.6;color:var(--ink-2);
}
.team-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:var(--sp-4);
}
.team-card{
  display:grid;
  grid-template-columns:56px 1fr;
  gap:var(--sp-4);
  align-items:start;
  padding:var(--sp-5);
  background:var(--white);
  border:1px solid var(--line-soft);
  border-radius:var(--r-lg);
  box-shadow:var(--shadow-1);
}
.team-card__mark{
  width:56px;height:56px;border-radius:50%;
  display:grid;place-items:center;
  background:linear-gradient(145deg,var(--blue-050),var(--green-050));
  border:1px solid var(--line);
  font-family:var(--mono);font-size:.8rem;font-weight:500;
  letter-spacing:.08em;color:var(--paiq-navy);
}
.team-card h3{
  margin:0 0 2px;
  font-size:var(--fs-h3);font-weight:500;color:var(--paiq-navy);
}
.team-card__role{
  margin:0 0 var(--sp-3)!important;
  font-family:var(--mono);font-size:var(--fs-eyebrow)!important;
  letter-spacing:.08em;text-transform:uppercase;color:var(--paiq-teal)!important;
}
.team-card p:last-child{
  margin:0!important;
  max-width:none!important;
  font-size:var(--fs-small)!important;
  line-height:1.6!important;color:var(--ink-2)!important;
}
.team-card:last-child{grid-column:1 / -1}
@media (min-width:64rem){
  .team-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .team-card:last-child{grid-column:auto}
}
@media (max-width:44rem){
  .team-grid{grid-template-columns:1fr}
  .team-card:last-child{grid-column:auto}
}

/* ─────────────────── CTA PANEL, REBALANCED ───────────────────
   POLISH PASS, 28 September 2026.

   The panel stacked heading, paragraph, button and note down its left side
   and left the right half of a desktop panel empty, which read as something
   unfinished rather than something composed. It is now two columns from
   56rem up: the argument on the left, the action and the time-to-live line
   on the right, both vertically centred. Below that width it stacks exactly
   as it did before. No content was added to fill the space — everything in
   the panel was already there. */
@media (min-width:56rem){
  .demo-cta{
    display:grid;grid-template-columns:1.3fr 1fr;
    gap:var(--sp-7);align-items:center;
  }
  .demo-cta__text > h2{max-width:20ch}
}
.demo-cta__text > h2{font-size:var(--fs-h2);margin:0 0 var(--sp-4)}
.demo-cta__text > p{margin:0}
.demo-cta__action{display:flex;flex-direction:column;gap:var(--sp-4);align-items:flex-start}
.demo-cta__action .btn-row{margin:0}
.demo-cta__action .demo-cta__note{margin:0}
@media (max-width:55.99rem){
  .demo-cta__action{margin-top:var(--sp-5)}
}

/* ===== assets/css/connected-intelligence.css ===== */
/* ══════════════════════════════════════════════════════════════════
   CONNECTED INTELLIGENCE — the animated hero.

   The artwork is a single raster plate. Everything that moves is an SVG
   overlay sharing the plate's coordinate space (viewBox 0 0 1672 941), so
   the two scale together and the motion stays welded to the picture at
   every width. Nothing here is interactive and nothing is explained in
   words — the picture and the motion do the work.

   One 20s cycle carries the three named journeys, one at a time, so a
   visitor can follow each. Ambient movement runs on its own shorter loops.
   ══════════════════════════════════════════════════════════════════ */

.ci-hero{position:relative;width:100%;max-width:1672px;margin-inline:auto}
.ci-hero__plate{display:block;width:100%;height:auto}
.ci-hero__fx{
  position:absolute;inset:0;width:100%;height:100%;
  pointer-events:none;overflow:visible;
}

/* ── The routes that are not drawn in the artwork ──
   NHS 111 to virtual triage, and discharge to scan across to the virtual
   ward, are new lines. They sit at a whisper so the route reads between
   pulses without competing with the plate. */
.ci-guide{fill:none;stroke-width:2.5;stroke-linecap:round;opacity:.22}

/* ── Pulses ── two passes of the same dash: a wide soft bloom and a thin
   bright core. pathLength is normalised to 1000 on every path so one set
   of keyframes drives routes of any length. */
.ci-pulse{fill:none;stroke-linecap:round;opacity:0}
.ci-pulse--bloom{stroke-width:13;filter:url(#ciGlow);opacity:0}
.ci-inrush.ci-pulse--bloom{stroke-width:16}
.ci-inrush.ci-pulse--core{stroke-width:4}
.ci-pulse--core{stroke-width:3.5}

/* ── The light layer ──
   Blends in screen mode so it ADDS light to the artwork underneath instead
   of painting over it. This is the difference between the virtual hospital
   looking lit from within and looking like something drawn on top of it.
   Only blue lives here: over the pale left half screen mode washes out. */
.ci-hero__fx--glow{mix-blend-mode:screen}

/* Sections of the mesh illuminating and fading, each on its own period. */
.ci-mesh{
  animation-name:ciMesh;animation-iteration-count:infinite;
  animation-timing-function:cubic-bezier(.4,0,.5,1);
  opacity:0;
}
@keyframes ciMesh{
  0%,100%{opacity:.05}
  42%    {opacity:.46}
  62%    {opacity:.30}
}

/* A point of light rather than a streak: a two-unit dash, round capped. */
.ci-amb--dot{
  stroke-dasharray:2 2000;stroke-dashoffset:2004;
  stroke-width:4;stroke-linecap:round;fill:none;
  animation-name:ciAmbientDot;animation-timing-function:linear;
}
@keyframes ciAmbientDot{
  0%  {stroke-dashoffset:2004;opacity:0}
  8%  {stroke-dashoffset:1924;opacity:.95}
  92% {stroke-dashoffset:1082;opacity:.95}
  100%{stroke-dashoffset:1002;opacity:0}
}

/* An outer service surging in to the centre. Long, bright and rare: it
   waits out most of its cycle, then crosses the whole route in one go.
   The offsets must span 2320 to 1160 — the full length — or the surge
   fades out halfway and never actually reaches the orb. */
.ci-inrush{
  stroke-dasharray:160 2000;stroke-dashoffset:2320;
  animation-name:ciInrush;animation-iteration-count:infinite;
  animation-timing-function:linear;opacity:0;
}
@keyframes ciInrush{
  0%    {stroke-dashoffset:2320;opacity:0}
  70%   {stroke-dashoffset:2320;opacity:0}
  71.5% {stroke-dashoffset:2218;opacity:.9}
  85.5% {stroke-dashoffset:1263;opacity:.9}
  87%   {stroke-dashoffset:1160;opacity:0}
  100%  {stroke-dashoffset:1160;opacity:0}
}

/* ── Named journeys ─────────────────────────────────────────────── */
/* The gap is wider than the path on purpose. pathLength is 1000, so a gap
   of 2000 guarantees only ONE dash can ever sit on the route: with a gap
   smaller than the path the pattern repeats and a second pulse appears
   behind the first the moment the offset passes zero. */
.ci-flow{stroke-dasharray:80 2000;stroke-dashoffset:2160;animation-duration:44s;animation-iteration-count:infinite;animation-timing-function:linear}
.ci-flow--a{animation-name:ciFlowA}
.ci-flow--b{animation-name:ciFlowB}
.ci-flow--c{animation-name:ciFlowC}
.ci-flow--d{animation-name:ciFlowD}
.ci-flow--e{animation-name:ciFlowE}
.ci-flow--f{animation-name:ciFlowF}
.ci-flow--g{animation-name:ciFlowG}

/* Every dashoffset step is stated on the same keyframe as its opacity and
   the whole animation runs linear, so the pulse travels at a constant,
   readable speed. Leave the intermediate offsets in: without them the
   easing between keyframes distorts where the pulse actually is. */
@keyframes ciFlowA{
  0%    {stroke-dashoffset:2160;opacity:0}
  1.1364%  {stroke-dashoffset:2160;opacity:0}
  2.0455%  {stroke-dashoffset:2074;opacity:1}
  11.5909% {stroke-dashoffset:1166;opacity:1}
  12.5% {stroke-dashoffset:1080;opacity:0}
  45.4545%  {stroke-dashoffset:1080;opacity:0}
}
@keyframes ciFlowB{
  0%    {stroke-dashoffset:2160;opacity:0}
  15.9091%   {stroke-dashoffset:2160;opacity:0}
  16.3636%   {stroke-dashoffset:2077;opacity:1}
  21.3636%   {stroke-dashoffset:1164;opacity:1}
  21.8182%   {stroke-dashoffset:1080;opacity:0}
  45.4545%  {stroke-dashoffset:1080;opacity:0}
}
@keyframes ciFlowC{
  0%    {stroke-dashoffset:2160;opacity:0}
  25%   {stroke-dashoffset:2160;opacity:0}
  25.9091%   {stroke-dashoffset:2074;opacity:1}
  35.4545%   {stroke-dashoffset:1166;opacity:1}
  36.3636%   {stroke-dashoffset:1080;opacity:0}
  45.4545%  {stroke-dashoffset:1080;opacity:0}
}
/* The return leg. It occupies 82-96% of the cycle, which was the only
   stretch still empty — nothing already approved was re-timed to fit it in.
   It is a little brisker than the outward leg, which suits a journey home. */
@keyframes ciFlowD{
  0%    {stroke-dashoffset:2160;opacity:0}
  37.2727%   {stroke-dashoffset:2160;opacity:0}
  37.8182% {stroke-dashoffset:2067;opacity:1}
  43.0909% {stroke-dashoffset:1173;opacity:1}
  43.6364%   {stroke-dashoffset:1080;opacity:0}
  45.4545%  {stroke-dashoffset:1080;opacity:0}
}

/* ── The patient ──
   A figure rides the pulse on a patient journey. Information routes never
   carry one: person = a patient moving, pulse = intelligence moving, and
   the picture stops meaning anything if the two are mixed.

   Position comes from <animateMotion> on the same 20s loop as the pulse,
   so the figure travels inside its glow. Colour is the problem the shape
   does not solve: a pale figure vanishes over the pale left half and a
   dark one vanishes over the blue, so the body darkens and lightens as it
   crosses, and the halo behind it only earns its keep on the blue side. */
.ci-person{opacity:0;animation-duration:44s;animation-iteration-count:infinite;animation-timing-function:linear}
/* The figure is a stroked stick person, not a filled blob: a round head,
   a torso, arms and two legs, because that is what reads instantly at this
   size. Nothing inside #ciFigure sets stroke-width or colour — both are set
   here and inherit into the <use> shadow tree, which is the only way one
   shape can serve as both the body and the fatter halo behind it.

   The halo is not decoration either: it is the outline that keeps a dark
   figure legible once it crosses onto dark blue, and it is why the figure
   works on both grounds without needing two drawings. */
.ci-person__body{stroke-width:2.8}
.ci-person__glow{color:#e8f8ff;stroke-width:7.6;opacity:.55;filter:url(#ciSoft)}
.ci-person--c .ci-person__glow{animation:ciPersonHalo 44s linear infinite}
@keyframes ciPersonHalo{0%,34.0909%{opacity:.32}35.9091%{opacity:.95}36.9091%,45.4545%{opacity:.32}}
.ci-person--a{animation-name:ciPersonA;color:#0f5f43}
.ci-person--c{animation-name:ciPersonC;color:#0f5f43}
.ci-person--d{animation-name:ciPersonD;color:#0f5f43}
.ci-person--e{animation-name:ciPersonE;color:#0f5f43}
.ci-person--f{animation-name:ciPersonF;color:#0f5f43}
.ci-person--g{animation-name:ciPersonG;color:#0f5f43}

/* The colour change is not decoration, and it is not a green-to-blue
   gradient either. The figure has to stay READABLE, and the ground it
   crosses is pale almost the whole way: route A runs along the light band
   under the picture and finishes on the pale ring round Virtual GP. Route C
   was turned to light at the end while it landed on the ward's own label
   panel; now that it lands on the plinth below, where the plate is a mass
   of bright wireframe, a light figure disappears completely and a dark one
   reads. Both figures therefore stay dark ink end to end, cooling from
   green toward teal, and it is the light HALO — not the body — that keeps
   them legible once the ground goes blue. Checked on screen at the landing
   frame, both ways round; the light version was invisible. */
@keyframes ciPersonA{
  0%,0.8182% {opacity:0;color:#0e5b46}
  1.8182%      {opacity:1;color:#0e5b46}
  7.2727%     {color:#0e5b46}
  10.9091%     {color:#0c5a66}
  11.5909%   {opacity:1;color:#0c5a66}
  12.2727%     {opacity:0;color:#0c5a66}
  45.4545%    {opacity:0;color:#0e5b46}
}
/* The return: it starts on the deep blue of the ward and finishes on the
   pale physical side, so the ink runs the other way — teal to green. Dark
   throughout, like the other two, with the halo carrying it over the blue. */
@keyframes ciPersonD{
  0%,36.9545%{opacity:0;color:#0c5a66}
  37.7273%     {opacity:1;color:#0c5a66}
  40.9091%     {color:#0d5b58}
  42.7273%     {color:#0e5b46}
  43.4091%   {opacity:1;color:#0e5b46}
  44%   {opacity:0;color:#0e5b46}
  45.4545%    {opacity:0;color:#0c5a66}
}
/* All three cross from the physical side to the virtual one, so the ink
   runs green to teal and stays dark throughout, exactly as A, C and D do. */
@keyframes ciPersonE{
  0%,50.9% {opacity:0;color:#0e5b46}
  51.9%    {opacity:1;color:#0e5b46}
  58%      {color:#0d5b58}
  61%      {color:#0c5a66}
  61.8%    {opacity:1;color:#0c5a66}
  62.6%    {opacity:0;color:#0c5a66}
  100%     {opacity:0;color:#0e5b46}
}
@keyframes ciPersonF{
  0%,65.1% {opacity:0;color:#0e5b46}
  66.2%    {opacity:1;color:#0e5b46}
  72%      {color:#0d5b58}
  76.6%    {color:#0c5a66}
  82.4%    {opacity:1;color:#0c5a66}
  83.3%    {opacity:0;color:#0c5a66}
  100%     {opacity:0;color:#0e5b46}
}
@keyframes ciPersonG{
  0%,86%   {opacity:0;color:#0e5b46}
  87.1%    {opacity:1;color:#0e5b46}
  91%      {color:#0d5b58}
  94.5%    {color:#0c5a66}
  95.9%    {opacity:1;color:#0c5a66}
  96.8%    {opacity:0;color:#0c5a66}
  100%     {opacity:0;color:#0e5b46}
}
@keyframes ciPersonC{
  0%,24.6818%{opacity:0;color:#0e5b46}
  25.6818%   {opacity:1;color:#0e5b46}
  33.6364%     {color:#0c5a66}
  36.3636%     {opacity:1;color:#0c5a66}
  36.9091%   {opacity:0;color:#0c5a66}
  45.4545%    {opacity:0;color:#0e5b46}
}

/* ── The bed that came free ──
   The last beat of the cycle, and the only green thing on the picture that
   is not movement. It blooms once the patient has arrived back at the scan
   and is still fading as the next cycle begins, so the sequence ends on the
   point of the whole story: a physical bed came back. No text, no number —
   the green is the statement. */
.ci-bedfree{
  opacity:0;
  transform-box:fill-box;transform-origin:center;
  animation:ciBedFree 44s ease-out infinite;
}
@keyframes ciBedFree{
  0%     {opacity:0;transform:scale(.94)}
  43.18% {opacity:0;transform:scale(.94)}
  43.82% {opacity:.9;transform:scale(1.05)}
  45.5%  {opacity:.62;transform:scale(1)}
  49%    {opacity:0;transform:scale(1)}
  100%   {opacity:0;transform:scale(.94)}
}

/* ── The one label that is not in the artwork ──
   Set in the site's own face at the plate's own size and ink colour. If
   this ever stops matching the labels beside it, the font is what changed. */
.ci-relabel text{
  font-family:"DM Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  font-size:15.5px;font-weight:500;letter-spacing:.1px;
  fill:#14501f;
}

/* ══ THE THREE EXAMPLE JOURNEYS ══════════════════════════════════
   They occupy the second half of the lengthened cycle, one at a time, with
   a clear second and a half between each. The loop went from 20s to 44s to
   make room; every earlier journey still happens at exactly the second it
   did before, which was checked stop by stop rather than assumed. */

/* E · inpatient wards to community care.  22.5-27.5s */
@keyframes ciFlowE{
  0%     {stroke-dashoffset:2160;opacity:0}
  51.14% {stroke-dashoffset:2160;opacity:0}
  52.05% {stroke-dashoffset:2074;opacity:1}
  61.59% {stroke-dashoffset:1166;opacity:1}
  62.5%  {stroke-dashoffset:1080;opacity:0}
  100%   {stroke-dashoffset:1080;opacity:0}
}
/* F · NHS 111 to virtual assessment, pause, then community care.
   28.8-36.6s. The flat stretch between 76.82% and 79.55% is the pause. */
@keyframes ciFlowF{
  0%     {stroke-dashoffset:2160;opacity:0}
  65.45% {stroke-dashoffset:2160;opacity:0}
  66.36% {stroke-dashoffset:2088;opacity:1}
  76.82% {stroke-dashoffset:1259;opacity:1}
  79.55% {stroke-dashoffset:1259;opacity:1}
  82.5%  {stroke-dashoffset:1114;opacity:1}
  83.18% {stroke-dashoffset:1080;opacity:0}
  100%   {stroke-dashoffset:1080;opacity:0}
}
/* G · GP into the virtual ward.  38-42.5s */
@keyframes ciFlowG{
  0%     {stroke-dashoffset:2160;opacity:0}
  86.36% {stroke-dashoffset:2160;opacity:0}
  87.27% {stroke-dashoffset:2064;opacity:1}
  95.68% {stroke-dashoffset:1176;opacity:1}
  96.59% {stroke-dashoffset:1080;opacity:0}
  100%   {stroke-dashoffset:1080;opacity:0}
}

/* ── Ambient movement ──
   The arcs and light streams the artwork already draws. Continuous, slow,
   and deliberately dimmer than the named journeys. */
.ci-amb{stroke-dasharray:60 2000;stroke-dashoffset:2120;animation-name:ciAmbient;animation-iteration-count:infinite;animation-timing-function:linear;opacity:0}
@keyframes ciAmbient{
  0%  {stroke-dashoffset:2120;opacity:0}
  6%  {stroke-dashoffset:2056;opacity:.8}
  94% {stroke-dashoffset:1124;opacity:.8}
  100%{stroke-dashoffset:1060;opacity:0}
}

/* ── A destination brightening as a pulse lands ── */
.ci-land{opacity:0;animation-duration:44s;animation-iteration-count:infinite;animation-timing-function:ease-out}
.ci-land--a{animation-name:ciLandA}
.ci-land--b{animation-name:ciLandB}
.ci-land--c{animation-name:ciLandC}
.ci-land--d{animation-name:ciLandD}
.ci-land--e{animation-name:ciLandE}
.ci-land--fhold{animation-name:ciHoldF}
.ci-land--f{animation-name:ciLandF}
.ci-land--g{animation-name:ciLandG}
@keyframes ciLandA{0%,11.3636%{opacity:0}12.7273%{opacity:.85}17.2727%{opacity:0}45.4545%{opacity:0}}
@keyframes ciLandB{0%,20.9091%{opacity:0}22.0455%{opacity:.85}26.3636%{opacity:0}45.4545%{opacity:0}}
@keyframes ciLandC{0%,35.4545%{opacity:0}36.5909%{opacity:.85}41.3636%{opacity:0}45.4545%{opacity:0}}
@keyframes ciLandD{0%,42.7273%{opacity:0}43.8636%{opacity:.85}45.4545%{opacity:.3}}

/* ── The orb answering ──
   A ring that swells outward when a signal reaches the centre. */
.ci-orb{
  fill:none;opacity:0;
  transform-box:fill-box;transform-origin:center;
  animation-duration:44s;animation-iteration-count:infinite;animation-timing-function:cubic-bezier(.2,.7,.3,1);
}
.ci-orb--a{animation-name:ciOrbA}
.ci-orb--c{animation-name:ciOrbC}
@keyframes ciOrbA{
  0%,10.9091%{opacity:0;transform:scale(.94)}
  12.2727%{opacity:.55;transform:scale(1)}
  17.2727%{opacity:0;transform:scale(1.09)}
  45.4545%{opacity:0;transform:scale(1.09)}
}
@keyframes ciOrbC{
  0%,35%{opacity:0;transform:scale(.94)}
  36.3636%{opacity:.55;transform:scale(1)}
  41.3636%{opacity:0;transform:scale(1.09)}
  45.4545%{opacity:0;transform:scale(1.09)}
}
/* The centre answering the traffic around it. Three periods that never
   line up — a halo, a rim and a breath — so the orb is continuously alive
   without ever repeating a beat. */
.ci-orb-halo{
  transform-box:fill-box;transform-origin:center;
  animation:ciOrbHalo 4.3s ease-in-out infinite;
}
@keyframes ciOrbHalo{
  0%,100%{opacity:.45;transform:scale(.97)}
  50%    {opacity:1;transform:scale(1.04)}
}
.ci-orb-rim{
  fill:none;stroke-width:1.5;
  transform-box:fill-box;transform-origin:center;
  animation:ciOrbRim 5.1s ease-in-out infinite;
}
@keyframes ciOrbRim{
  0%,100%{opacity:.06;transform:scale(1.008)}
  50%    {opacity:.26;transform:scale(1.03)}
}

/* A slow breath under everything, so the centre is never quite still. */
.ci-orb-breath{
  fill:none;stroke-width:2;opacity:.0;
  transform-box:fill-box;transform-origin:center;
  animation:ciBreath 6.5s ease-in-out infinite;
}
@keyframes ciBreath{
  0%,100%{opacity:.10;transform:scale(1)}
  50%{opacity:.28;transform:scale(1.022)}
}

/* ── The virtual side reads as digital ──
   A field of small lights over the virtual hospital, each on its own
   rhythm. Low enough to register as shimmer rather than decoration. */
.ci-spark{animation:ciSpark 3.4s ease-in-out infinite}
@keyframes ciSpark{
  0%,100%{opacity:.12;r:1.5}
  50%{opacity:1;r:3.1}
}
.ci-veil{animation:ciVeil 11s ease-in-out infinite;opacity:.14}
@keyframes ciVeil{0%,100%{opacity:.14}50%{opacity:.40}}

/* ── Anyone who has asked for less movement gets a still picture, with
   the two undrawn routes left visible so nothing is lost. ── */
@media (prefers-reduced-motion:reduce){
  .ci-pulse,.ci-land,.ci-orb,.ci-orb-breath,.ci-orb-halo,.ci-orb-rim,.ci-spark,.ci-veil,.ci-mesh,.ci-amb--dot,.ci-person,.ci-bedfree{animation:none}
  .ci-pulse,.ci-land,.ci-orb,.ci-amb--dot{opacity:0}
  .ci-bedfree{opacity:.4}
  .ci-mesh{opacity:.16}
  .ci-veil{opacity:.2}
  .ci-orb-halo{opacity:.7}
  .ci-orb-rim{opacity:.14}
  .ci-spark{opacity:.5}
  .ci-orb-breath{opacity:.18}
  .ci-guide{opacity:.24}
}

/* ── The hero's own room on the page ──
   The plate is wide and detailed; it gets more width than the text column
   and a little air, and nothing sits on top of it. */
.ci-section{padding-block:clamp(1rem,2.5vw,2rem)}
.wrap--wide{max-width:1720px}
/* One line of copy above the application row. Both are centred on the same
   axis so the band reads as a single calm step between the animation and
   the ask, rather than a paragraph with something else beneath it. */
.ci-standfirst{max-width:56ch;margin-inline:auto;margin-bottom:var(--sp-6);text-align:center}

/* ══════════════════════════════════════════════════════════════════
   REFINEMENT PASS — 1 September 2026
   Added after reviewing the homepage at desktop, tablet and phone.
   This stylesheet loads on the homepage alone (via `extraCss` in the
   page's front matter), so every override below is scoped to this page
   and cannot reach the application pages, contact or the legal pages.
   ══════════════════════════════════════════════════════════════════ */

/* ── The page's own title ──
   The artwork carries "Connected Intelligence / Bridging physical and
   virtual care" painted into the plate. That works at full width and fails
   on a phone, where the plate renders at about a fifth of its size and
   every word inside it stops being readable. So the title exists once, as
   real text, and swaps role at the breakpoint: visible below 768px, hidden
   from sight but not from screen readers above it. */
.ci-lede{text-align:center;margin-bottom:var(--sp-4)}
.ci-lede__title{
  margin:0;
  font-size:clamp(1.95rem,1.2rem+3.4vw,2.45rem);
  line-height:1.06;letter-spacing:-.022em;
  color:var(--paiq-navy);
}
.ci-lede__sub{
  margin:.45rem auto 0;max-width:24ch;
  font-size:var(--fs-lead);line-height:1.35;color:var(--ink-2);
}
@media (min-width:48rem){
  .ci-lede{
    position:absolute;width:1px;height:1px;padding:0;margin:-1px;
    overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);
    white-space:nowrap;border:0;
  }
}

/* ── The hero inside the viewport ──
   The plate is a 1.777:1 landscape. Left to fill the column it can be
   taller than what is left of the screen under the header, and the picture
   is then cut across the middle by the fold — which reads as an accident
   rather than a decision. Capping its width by the height actually
   available keeps the whole picture on screen at any laptop size, and
   leaves the next section just showing, so it is obvious there is more.
   If a browser does not understand svh the calc is discarded and the plain
   1672px cap above still applies. */
@media (min-width:48rem){
  .ci-hero{max-width:min(1672px,calc((100svh - var(--header-h) - 7rem) * 1.7768))}
}

/* ── The phone ──
   Not the desktop picture made small. The plate is scaled up and cropped
   to the middle of itself, so what a phone shows is the orb and the two
   worlds either side of it at a size where they read. The crop takes the
   painted title out of shot, which is the point: the real <h1> above is
   carrying it now, and nothing is said twice.

   The overlay is transformed by exactly the same amount about exactly the
   same origin as the plate, so the motion stays welded to the artwork —
   the whole reason the two share a coordinate space in the first place.

   The patient figures go. At this scale a figure is about six pixels and
   reads as a speck, and a journey nobody can follow is just movement. The
   pulses, the mesh and the orb stay: information crossing between a
   physical and a virtual world is the idea, and that still reads. */
@media (max-width:47.99rem){
  .ci-hero{
    overflow:hidden;
    border-radius:var(--r-lg);
    box-shadow:var(--shadow-1);
    /* The window has to stop somewhere, and a hard edge through a row of
       service icons reads as a mistake. Zooming further to clear them cuts
       the emergency department sign on the other side instead, so the
       bottom of the crop is faded out rather than cut. */
    -webkit-mask-image:linear-gradient(180deg,#000 0,#000 86%,transparent 100%);
    mask-image:linear-gradient(180deg,#000 0,#000 86%,transparent 100%);
  }
  /* Scale and origin chosen against the plate's own coordinates, not by
     eye: the painted title ends around y=130 and the strip of small service
     labels begins around y=730, so the window lands between the two and
     shows the orb with a hospital either side of it and nothing cut. */
  .ci-hero__plate,
  .ci-hero__fx{transform:scale(1.6);transform-origin:51% 46.5%}

  .ci-person,.ci-bedfree{display:none}
  .ci-spark:nth-child(2n){display:none}
  .ci-guide{opacity:.16}
}

/* ── Proof ──
   One line, under the standfirst, in small muted type. It is a statement
   about deployments, not a headline, and it should not compete with one.
   The wording is held in _data/homepage.json under `proof`. */
.ci-standfirst{margin-bottom:var(--sp-3)}
.ci-proof{
  max-width:52ch;margin:0 auto var(--sp-5);
  text-align:center;
  font-size:var(--fs-small);line-height:1.5;color:var(--ink-3);
}

/* ── What connecting them gives you ──
   Three facts on a rule, not three cards. Cards would make this a feature
   grid and invite a fourth, a fifth and an icon each; a hairline in brand
   teal keeps it as a short list of things that are true. */
.ci-enables{
  list-style:none;margin:0 auto;padding:0;max-width:66rem;
  display:grid;gap:var(--sp-5);
  grid-template-columns:repeat(3,minmax(0,1fr));
}
.ci-enable{
  display:flex;flex-direction:column;gap:.3rem;
  padding-left:var(--sp-4);
  border-left:2px solid var(--paiq-teal);
}
.ci-enable__title{
  font-size:var(--fs-body);font-weight:500;line-height:1.3;
  letter-spacing:-.01em;color:var(--paiq-navy);
}
.ci-enable__body{font-size:var(--fs-small);line-height:1.5;color:var(--ink-2)}
@media (max-width:56rem){
  .ci-enables{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4)}
}
@media (max-width:36rem){
  .ci-enables{grid-template-columns:1fr;gap:var(--sp-3)}
}

/* ── The line under the application row ──
   Says the six are what exists today without implying they are the limit. */
.app-picker__note{
  max-width:46ch;margin:var(--sp-4) auto 0;
  text-align:center;
  font-size:var(--fs-small);line-height:1.5;color:var(--ink-3);
}

/* ── Spacing, homepage only ──
   The global rhythm was set for pages carrying several screens of content.
   On a page this short the same gaps read as empty rather than generous, so
   the homepage runs tighter. It is still nowhere near cramped: the smallest
   gap between two sections here is about 30px on a phone. */
.section--tight{padding-block:clamp(1.9rem,4vw,2.6rem)}
.ci-section{padding-block:clamp(.6rem,1.6vw,1.1rem)}
.ci-enables-section{padding-top:0}
.demo-cta{margin-top:0}

/* The virtual side's labels are blue, not the green of the physical side,
   so the re-set label matches its neighbours rather than the patch across
   the picture. Size is a shade under the plate's own so the long line fits
   inside the artwork's right edge. */
.ci-relabel--virtual text{font-size:11.5px;fill:#21467a}

/* ══════════════════════════════════════════════════════════════════
   MESSAGING PASS — 28 September 2026

   Everything below is new blocks for the rewritten homepage. No token,
   no colour, no typeface and no existing component was changed: these
   rules only place and size copy that did not exist before. This
   stylesheet loads on the homepage alone (via `extraCss` in the page's
   front matter), so nothing here can reach an application page, the
   contact page or the legal pages.
   ══════════════════════════════════════════════════════════════════ */

/* ── The proposition ──
   Centred on the same axis as everything else in the hero band, and
   capped at 24ch a line so the two halves of the sentence stay two
   halves instead of reflowing into an uneven block. */
.hero-lede-section{padding-block:clamp(2.2rem,5vw,3.4rem) clamp(1.4rem,3vw,2rem)}
.hero-lede{max-width:52rem;margin-inline:auto;text-align:center}
/* The cap is in ch, so it scales with the type rather than against it: the
   headline is a 91-character sentence and at anything under about 46ch a
   line it collapses into six short stacked fragments and stops reading as
   a sentence at all. Checked on screen at 1440, 834 and 390. */
.hero-lede__title{
  max-width:46ch;margin-inline:auto;
  font-size:clamp(1.85rem,1.2rem+2.2vw,2.6rem);
  line-height:1.12;letter-spacing:-.024em;font-weight:500;
  color:var(--paiq-navy);
  text-wrap:balance;
}
/* Each half of the sentence on its own line where there is room for it.
   Below 44rem they run together as ordinary wrapped text, which reads
   better than two short lines broken in the wrong places. */
.hero-lede__line{display:block}
@media (max-width:44rem){
  .hero-lede__line{display:inline}
  .hero-lede__line + .hero-lede__line::before{content:" "}
}
.hero-lede__body{
  max-width:58ch;margin:var(--sp-5) auto 0;
  font-size:var(--fs-lead);line-height:1.55;color:var(--ink-2);
}
.hero-lede__actions{margin-top:var(--sp-6);justify-content:center}

/* ── Proof ──
   Three facts on a single hairline, small and unemphatic. They are
   support, not a headline, and the moment they start looking like
   statistics they are making a claim nobody has approved. */
.proof-strip{
  list-style:none;margin:clamp(1.8rem,4vw,2.6rem) auto 0;padding:var(--sp-5) 0 0;
  max-width:62rem;border-top:1px solid var(--line);
  display:grid;gap:var(--sp-4);
  grid-template-columns:repeat(3,minmax(0,1fr));
}
.proof-strip__item{
  position:relative;padding-left:1.15rem;
  font-size:var(--fs-small);line-height:1.45;color:var(--ink-2);
}
/* A small teal mark rather than a tick or a bullet: a tick reads as a
   feature checklist and invites a fourth, a fifth and an icon each. */
.proof-strip__item::before{
  content:"";position:absolute;left:0;top:.5em;
  width:6px;height:6px;border-radius:50%;
  background:var(--paiq-teal);
}
@media (max-width:52rem){
  .proof-strip{grid-template-columns:1fr;gap:var(--sp-3);max-width:34rem}
}

/* ── The problem ──
   Left-aligned prose in one column, deliberately unlike the centred
   bands either side of it: this is the one place on the page that is
   reading rather than scanning, and it should feel like it. */
.problem-section{padding-block:clamp(2.2rem,5vw,3.2rem)}
.problem{max-width:62ch;margin-inline:auto}
.problem__heading{
  margin:0 0 var(--sp-5);
  font-size:var(--fs-h2);line-height:1.15;letter-spacing:-.02em;font-weight:500;
  color:var(--paiq-navy);
  text-wrap:balance;
}
.problem__body{
  margin:0 0 var(--sp-4);
  font-size:var(--fs-body);line-height:1.65;color:var(--ink-2);
}
.problem__body:last-child{margin-bottom:0}
/* The middle paragraph is the list of questions. Set slightly larger and
   in the ink of a heading, because it is the part a reader recognises
   themselves in and it should not be skimmed past. */
.problem__body:nth-child(3){
  font-size:var(--fs-lead);line-height:1.5;color:var(--ink);
  padding-left:var(--sp-4);border-left:2px solid var(--paiq-teal);
}

/* ── The turn from problem to product ── */
.transition-head{max-width:52ch;margin:0 auto var(--sp-6);text-align:center}
.transition-head__title{
  margin:0;
  font-size:var(--fs-h3);line-height:1.2;letter-spacing:-.015em;font-weight:500;
  color:var(--paiq-navy);
}
.transition-head__body{
  margin:var(--sp-3) 0 0;
  font-size:var(--fs-body);line-height:1.55;color:var(--ink-2);
}

/* ── What changes when the picture connects ──
   The three statements are unchanged; they simply have a heading over
   them now, so the section reads as an answer rather than a stray list. */
.ci-enables__heading{
  max-width:34ch;margin:0 auto var(--sp-6);text-align:center;
  font-size:var(--fs-h3);line-height:1.2;letter-spacing:-.015em;font-weight:500;
  color:var(--paiq-navy);
}

/* ── The Connected Intelligence argument ──
   Four short answers to the question a reader is holding by this point:
   how much of this do I have to take? Two columns, so it reads as a
   small set of facts rather than a feature grid. */
.ci-explain-section{padding-block:clamp(2.2rem,5vw,3.2rem)}
.ci-explain__head{margin-bottom:var(--sp-6)}
.ci-explain{
  list-style:none;margin:0 auto;padding:0;max-width:62rem;
  display:grid;gap:var(--sp-5) var(--sp-7);
  grid-template-columns:repeat(2,minmax(0,1fr));
}
.ci-explain__point{display:flex;flex-direction:column;gap:.35rem}
.ci-explain__title{
  font-size:var(--fs-body);font-weight:500;line-height:1.3;
  letter-spacing:-.01em;color:var(--paiq-navy);
}
.ci-explain__body{font-size:var(--fs-small);line-height:1.6;color:var(--ink-2)}
@media (max-width:44rem){
  .ci-explain{grid-template-columns:1fr;gap:var(--sp-4)}
}

/* The enables band used to butt straight onto the section above it,
   which was right while it had no heading of its own. It has one now. */
.ci-enables-section{padding-top:clamp(1.9rem,4vw,2.6rem)}

/* ── Enterprise capability without enterprise complexity ──
   SECOND PASS, 28 September 2026. The differentiator block. It reuses the
   existing `.ci-enable` item treatment for its four points and adds only
   the prose above them and a four-up grid; no new component, no card, no
   icon set. Understated on purpose: the moment this section looks glossier
   than the operational argument above it, cost has become the headline. */
.value-section{padding-block:clamp(2.2rem,5vw,3.2rem)}
/* Heading centred, prose left-aligned inside the same centred column.
   Three centred paragraphs stacked up read as ragged and slightly
   grandiose; the same words ranged left read as a statement of fact,
   which is what this section is for. */
.value__head{max-width:62ch;margin:0 auto var(--sp-7)}
.value__heading{text-align:center}
.value__heading{
  margin:0 0 var(--sp-5);
  font-size:var(--fs-h3);line-height:1.2;letter-spacing:-.018em;font-weight:500;
  color:var(--paiq-navy);
  text-wrap:balance;
}
.value__body{
  margin:0 0 var(--sp-4);
  font-size:var(--fs-body);line-height:1.65;color:var(--ink-2);
}
.value__body:last-child{margin-bottom:0}
/* Four across rather than the three `.ci-enables` defaults to. The
   breakpoints below override the inherited ones in the same order, so a
   phone still gets one column and a tablet two. */
.value-points{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:64rem){
  .value-points{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-5)}
}
@media (max-width:36rem){
  .value-points{grid-template-columns:1fr}
}

/* ══════════════════════════════════════════════════════════════════
   CONSOLIDATED PASS — 28 September 2026

   New blocks for the rewritten homepage: the care transitions in the
   hero, the three lead applications, the named customers, and the
   assurance strip. No token, colour, typeface or existing component was
   changed. This stylesheet loads on the homepage alone, so nothing here
   can reach an application page, contact or the legal pages.
   ══════════════════════════════════════════════════════════════════ */

/* ── A&E → Virtual ED · Bed → Home · Ward → Community ──
   The brief in six words. Real text, not an image, so it is readable at
   any size, survives with CSS off and can be translated. Set as three
   quiet pills rather than three headlines: they support the sentence
   above them and must not compete with it. */
.transitions{
  list-style:none;margin:var(--sp-5) 0 0;padding:0;
  display:flex;flex-wrap:wrap;justify-content:center;gap:var(--sp-3);
}
.transition{
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.4rem .85rem;
  background:var(--white);border:1px solid var(--line);
  border-radius:var(--r-pill);box-shadow:var(--shadow-1);
  font-size:var(--fs-small);line-height:1;white-space:nowrap;
}
.transition__from{color:var(--ink-2)}
.transition__to{color:var(--paiq-navy);font-weight:500}
.transition__arrow{display:inline-flex;color:var(--paiq-teal)}
.transition__arrow svg{width:14px;height:14px;display:block}

/* ── The Connected Intelligence architecture ── */
.architecture__lead{max-width:56ch;margin-inline:auto}

/* ── The three lead applications ──
   Bigger than the secondary row and carrying the one line that says what
   each is for, because "where do I start" is a real question and three
   equal-weight icons do not answer it. Still doors, not cards: a hairline,
   the accent on the icon, and no shadow until hover. */
.app-leads{
  list-style:none;margin:0 auto;padding:0;max-width:66rem;
  display:grid;gap:var(--sp-4);
  grid-template-columns:repeat(3,minmax(0,1fr));
}
.app-lead{
  display:flex;flex-direction:column;gap:.35rem;height:100%;
  padding:var(--sp-5);
  border:1px solid var(--line);border-top:3px solid var(--accent);
  border-radius:var(--r-md);background:var(--white);
  text-decoration:none;
  transition:box-shadow var(--t-med) var(--ease),transform var(--t-med) var(--ease);
}
.app-lead:hover,.app-lead:focus-visible{box-shadow:var(--shadow-2);transform:translateY(-2px)}
.app-lead__icon{
  width:38px;height:38px;display:grid;place-items:center;margin-bottom:var(--sp-2);
  border-radius:50%;background:var(--accent-soft);color:var(--accent);
}
.app-lead__icon svg{width:19px;height:19px}
.app-lead__name{font-size:var(--fs-h3);font-weight:500;letter-spacing:-.015em;color:var(--paiq-navy);line-height:1.15}
.app-lead__context{
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);
}
.app-lead__prop{font-size:var(--fs-small);line-height:1.55;color:var(--ink-2);margin-top:.2rem}
/* Three across down to 48rem. A tablet at 834px gives each card about 260px,
   which holds a name, a context line and one sentence without breaking —
   dropping to a single column there wasted most of the screen. Below 48rem
   they stack. */
@media (max-width:48rem){.app-leads{grid-template-columns:1fr;max-width:34rem}}

/* ── The rest of the family ──
   Smaller, quieter, and clearly a second rank — which is the point. They
   are real products and stay on the page; they are simply not where a
   first conversation starts. */
.app-secondary__heading{
  max-width:66rem;margin:var(--sp-7) auto var(--sp-4);
  font-family:var(--mono);font-size:var(--fs-eyebrow);font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);
  text-align:center;
}

/* ── Named NHS customers ──
   A list of names and nothing else: no logo, no quote, no description of
   what was deployed, no number. None of those exist in approved form and
   none may be invented. Removing a name is one line in homepage.json. */
.customers-section{padding-block:clamp(2.2rem,5vw,3.2rem)}
.customers__head{margin-bottom:var(--sp-6)}
.customers{
  list-style:none;margin:0 auto;padding:0;max-width:70rem;
  display:flex;flex-wrap:wrap;justify-content:center;
  gap:var(--sp-3) var(--sp-5);
}
.customer{
  position:relative;padding:var(--sp-3) var(--sp-5);
  border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--white);
  font-size:var(--fs-body);font-weight:500;line-height:1.3;
  letter-spacing:-.005em;color:var(--paiq-navy);
  text-align:center;
}

/* ── Assurance ──
   Deliberately the plainest block on the page. This is the section a
   governance reader scans for, and it works by being unambiguous rather
   than by being designed. The wording of each clause is exact and set by
   PA-IQ; they are separate items only so the strip can stack. */
.assurance-section{padding-block:clamp(2rem,4.5vw,2.8rem)}
.assurance__eyebrow{text-align:center;margin-bottom:var(--sp-4)}
.assurance{
  list-style:none;margin:0 auto;padding:0;max-width:74rem;
  display:flex;flex-wrap:wrap;justify-content:center;align-items:center;
  gap:.35rem var(--sp-4);
  text-align:center;
}
.assurance__item{
  font-size:var(--fs-small);line-height:1.5;color:var(--ink-2);
}
/* The separator is drawn, not typed, so no clause carries a stray character
   if an item is removed. It goes AFTER each clause rather than before the
   next one: with a leading separator, a clause that wrapped onto its own
   line started with a floating dot that read as a bullet. */
.assurance__item:not(:last-child)::after{
  content:"·";margin-left:var(--sp-4);color:var(--ink-4);
}
@media (max-width:52rem){
  .assurance{flex-direction:column;gap:var(--sp-2)}
  .assurance__item:not(:last-child)::after{content:none}
}
.assurance__hosting{
  max-width:60ch;margin:var(--sp-5) auto 0;
  text-align:center;
  font-size:var(--fs-body);line-height:1.6;color:var(--ink);
}

/* ══════════════════════════════════════════════════════════════════
   POLISH PASS — 28 September 2026
   ══════════════════════════════════════════════════════════════════ */

/* The line under the care transitions. Set between the pills and the body
   paragraph in weight as well as position: it is the bridge from the three
   movements to the explanation, and it is the one sentence a skimmer who
   reads nothing else should take away. */
.hero-lede__support{
  max-width:52ch;margin:var(--sp-4) auto 0;
  font-size:var(--fs-body);line-height:1.5;font-weight:500;
  color:var(--paiq-navy);
  text-wrap:balance;
}

/* ── Five customers, laid out as five ──
   Flex wrapping alone put four on the first row and left Swansea Bay on its
   own, which reads as an accident. A third-width basis forces 3 + 2, and
   the second row centres under the first, so the shape is obviously chosen. */
.customers{max-width:60rem}
.customer{
  flex:0 1 calc(33.333% - var(--sp-5));
  display:flex;align-items:center;justify-content:center;
  min-height:3.4rem;
}
@media (max-width:52rem){
  .customer{flex-basis:calc(50% - var(--sp-3))}
}
@media (max-width:34rem){
  .customer{flex-basis:100%}
}

/* ── The rest of the family ──
   Four items in a six-column grid left two empty cells, and three columns
   left PorterIQ alone on a second row. Four columns fits the four records
   exactly, and halves cleanly to two. Nothing about product importance
   changed — this is only how many fit on a line. */
.app-picker--secondary{grid-template-columns:repeat(4,minmax(0,1fr));max-width:52rem}
@media (max-width:64rem){.app-picker--secondary{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:44rem){.app-picker--secondary{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ── The journey strip, as text, on phones ──
   Below 48rem the artwork is cropped to its middle so the orb and the two
   worlds read, which takes the plate's own bottom strip out of shot. These
   are the same five steps in the same order, set as a list so they are
   legible, selectable and reach a screen reader. Above 48rem the picture
   has them and this is hidden. The chevrons are drawn in CSS, so nothing
   is added to the markup and nothing is read out as a stray character. */
.journey{
  display:none;
  list-style:none;margin:var(--sp-4) 0 0;padding:0;
  counter-reset:none;
}
@media (max-width:47.99rem){
  .journey{
    display:flex;flex-wrap:wrap;justify-content:center;align-items:center;
    gap:.4rem .25rem;
  }
  .journey__step{
    display:inline-flex;align-items:center;
    padding:.28rem .6rem;
    background:var(--white);border:1px solid var(--line);
    border-radius:var(--r-pill);
    /* Sized so the five steps wrap three-and-two rather than two-two-one,
       which left the last step alone in the middle of a row looking like an
       afterthought. Checked at 320, 360 and 390. */
    font-size:.78rem;line-height:1.2;color:var(--ink-2);white-space:nowrap;
  }
  .journey__step:first-child{color:var(--paiq-green);border-color:var(--green-300)}
  .journey__step:last-child{color:var(--blue-700);border-color:var(--blue-300)}
  .journey__step:not(:last-child)::after{
    content:"›";margin-left:.45rem;color:var(--ink-4);font-size:1.05em;line-height:1;
  }
}






body{padding-bottom:64px}

/* ===== homepage hero (A) + how it fits (C) — woven in ===== */
.px-eyebrow{font-family:'DM Mono',monospace;font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:#006c78;margin:0 0 18px;text-align:left}
.px-hero{padding-block:clamp(2.5rem,5vw,4rem) clamp(2rem,4vw,3rem)}
.px-hero__grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:clamp(2rem,4.5vw,3.5rem);align-items:center}
.px-hero__title{font-weight:500;font-size:clamp(2rem,3.9vw,3.15rem);line-height:1.08;letter-spacing:-.02em;color:#004860;margin:0}
.px-hero__title span{color:#2e8b3d}
.px-hero__lede{font-size:1.125rem;line-height:1.6;color:#5b6b75;margin:1.4rem 0 0;max-width:34rem}
.px-shifts{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:1.4rem 0 0;padding:0}
.px-shifts li{font-size:12.5px;border:1px solid #d9e4ea;border-radius:999px;padding:4px 11px;color:#5b6b75;background:#fff}
.px-shifts b{font-weight:500;color:#004860}
.px-hero__actions{margin-top:1.9rem;justify-content:flex-start}
.px-hero .proof-strip{margin-top:clamp(2rem,4vw,3rem)}
.px-board-wrap{margin:0}
.px-board{background:#fff;border:1px solid #d9e4ea;border-radius:18px;box-shadow:0 26px 50px -30px rgba(0,58,78,.45);overflow:hidden;text-align:left}
.px-board__top{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid #edf2f5;font-size:13px}
.px-board__top b{font-weight:500;color:#004860;font-size:14px}
.px-live{display:inline-flex;align-items:center;gap:6px;color:#5b6b75;white-space:nowrap}
.px-live::before{content:"";width:7px;height:7px;border-radius:50%;background:#2e8b3d;box-shadow:0 0 0 4px #e3f2e6}
.px-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.px-col{padding:16px 18px 18px;border-right:1px solid #edf2f5}
.px-col:last-child{border-right:0}
.px-col h3{margin:0 0 12px;font-family:'DM Mono',monospace;font-weight:500;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:#006c78}
.px-kpi{margin-bottom:14px}
.px-v{font-size:26px;font-weight:500;color:#004860;letter-spacing:-.01em;line-height:1.1}
.px-v small{font-size:13px;color:#5b6b75;font-weight:400}
.px-l{font-size:12.5px;color:#5b6b75;margin-top:2px;line-height:1.35}
.px-bar{height:5px;border-radius:5px;background:#edf2f5;margin-top:7px;overflow:hidden}
.px-bar i{display:block;height:100%;border-radius:5px;background:#006c78}
.px-bar i.px-amb{background:#d99a1e}
.px-pill{font-size:11px;font-weight:500;border-radius:999px;padding:2px 8px;vertical-align:middle;white-space:nowrap}
.px-amber{background:#fdf0d8;color:#8a5a00}.px-green{background:#e3f2e6;color:#23702f}
.px-flow{display:flex;align-items:center;gap:10px;padding:12px 18px;border-top:1px solid #edf2f5;background:#fafcfd;font-size:12.5px;color:#5b6b75}
.px-flow b{color:#004860;font-weight:500}.px-arr{color:#2e8b3d}
.px-foot{font-size:12.5px;color:#5b6b75;margin-top:12px;line-height:1.45}

.px-fits{background:linear-gradient(180deg,#fff,#f4f8fb)}
.px-fits__head{text-align:center;max-width:50rem;margin:0 auto}
.px-fits__head .px-eyebrow{text-align:center}
.px-fits__head h2{font-weight:500;font-size:clamp(1.9rem,3.6vw,2.8rem);line-height:1.1;letter-spacing:-.02em;color:#004860;margin:0}
.px-fits__head p:last-child{font-size:1.1rem;line-height:1.6;color:#5b6b75;margin:1.1rem auto 0}
.px-arch{margin-top:2.6rem;background:#fff;border:1px solid #d9e4ea;border-radius:20px;box-shadow:0 26px 50px -30px rgba(0,58,78,.45);padding:28px;display:grid;grid-template-columns:minmax(0,1fr) 80px minmax(0,1.15fr) 80px minmax(0,1fr);align-items:center;text-align:left}
.px-stack h4{margin:0 0 12px;font-family:'DM Mono',monospace;font-weight:500;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:#5b6b75}
.px-it{display:block;border:1px solid #d9e4ea;border-radius:10px;padding:10px 12px;margin-bottom:8px;font-size:14px;background:#fbfdfe;color:#0f2f3d;text-decoration:none}
.px-it small{display:block;color:#5b6b75;font-size:12px;margin-top:1px}
.px-out .px-it{border-color:#cfe3d4;background:#f6fbf7}
.px-out .px-it:hover{border-color:#2e8b3d}
.px-out .px-it b{font-weight:500;color:#004860}
.px-pipe{height:100%;position:relative}
.px-pipe svg{position:absolute;inset:0;width:100%;height:100%}
.px-core{border-radius:16px;background:linear-gradient(160deg,#004860,#006c78 60%,#2e8b3d);color:#fff;padding:24px 22px;text-align:center;position:relative}
.px-fence{position:absolute;inset:-12px;border:1.5px dashed #9fbfca;border-radius:22px;pointer-events:none}
.px-fl{position:absolute;top:-24px;left:50%;transform:translateX(-50%);background:#fff;padding:0 10px;font-family:'DM Mono',monospace;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#006c78;white-space:nowrap}
.px-core__k{font-family:'DM Mono',monospace;font-size:11px;letter-spacing:.14em;color:#a8e0b3}
.px-core h3{margin:6px 0;font-weight:500;font-size:22px;color:#fff}
.px-core p{margin:0;font-size:13.5px;line-height:1.5;color:#d9ecef}
.px-core ul{list-style:none;margin:14px 0 0;padding:0;font-size:12.5px;text-align:left;display:grid;gap:6px}
.px-core li::before{content:"✓";margin-right:8px;color:#a8e0b3}
.px-fits__note{text-align:center;font-size:14px;color:#5b6b75;margin:1.4rem 0 0}

@media (max-width:62rem){
  .px-hero__grid{grid-template-columns:1fr}
  .px-arch{grid-template-columns:1fr;gap:14px;padding:22px 18px}
  .px-pipe{height:30px}
  .px-core{margin:14px 0}
}
@media (max-width:40rem){
  .px-cols{grid-template-columns:1fr}
  .px-col{border-right:0;border-bottom:1px solid #edf2f5}
  .px-col:last-child{border-bottom:0}
}



body{padding-bottom:0!important}
.nav__menu-sep{display:block;height:1px;background:var(--line,#e3e9ed);margin:6px 10px}

/* what changes — visual cards */
.px-chg__h{text-align:center;font-weight:500;font-size:clamp(1.6rem,2.8vw,2.2rem);line-height:1.15;letter-spacing:-.015em;color:#004860;margin:0 auto 2.2rem;max-width:22ch}
.px-chg__grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}
.px-card{background:#fff;border:1px solid #d9e4ea;border-radius:18px;padding:14px 14px 22px;box-shadow:0 18px 40px -30px rgba(0,58,78,.4)}
.px-card h3{margin:18px 8px 6px;font-size:1.15rem;font-weight:500;color:#004860}
.px-card p{margin:0 8px;font-size:.98rem;line-height:1.55;color:#5b6b75}
.px-vis{height:168px;border-radius:12px;background:linear-gradient(160deg,#f2f7fa,#eaf3f1);display:flex;align-items:center;justify-content:center;padding:14px;overflow:hidden}
.px-v1{display:flex;align-items:center;width:100%}
.px-v1__src{display:grid;gap:8px;flex:none}
.px-v1__src span{font-size:12px;background:#fff;border:1px solid #d9e4ea;border-radius:8px;padding:6px 10px;color:#0f2f3d;width:92px}
.px-v1__arr{width:40px;height:90px;flex:none}
.px-v1__one{flex:1;background:#fff;border:1px solid #cfe3d4;border-radius:10px;padding:10px;display:flex;flex-wrap:wrap;gap:0}
.px-v1__one b{width:100%;font-weight:500;font-size:13px;color:#004860;margin-bottom:8px}
.px-v1__one i{display:block;height:10px}
.px-v1__one i:first-of-type{border-radius:5px 0 0 5px}.px-v1__one i:last-of-type{border-radius:0 5px 5px 0}
.px-v1__one small{width:100%;font-size:10.5px;color:#5b6b75;margin-top:7px}
.px-v2{width:100%;display:grid;gap:6px}
.px-row{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #e3eaee;border-radius:8px;padding:5px 10px;font-size:12px;color:#7a8a93}
.px-row em{margin-left:auto;font-style:normal;font-size:10.5px;font-weight:500;border-radius:999px;padding:2px 8px}
.px-dot{width:8px;height:8px;border-radius:50%;background:#c9d4da;flex:none}
.px-hot{color:#0f2f3d;border-color:#f1c9c4;box-shadow:0 6px 16px -10px rgba(192,57,43,.6)}
.px-hot .px-dot{background:#c0392b;box-shadow:0 0 0 4px #fbe4e1}.px-hot em{background:#fbe4e1;color:#a2382c}
.px-warm{color:#0f2f3d;border-color:#f0d9b8}.px-warm .px-dot{background:#d99a1e}.px-warm em{background:#fdf0d8;color:#8a5a00}
.px-v3{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;width:100%;row-gap:14px}
.px-t{font-size:12px;font-weight:500;border-radius:10px;padding:14px 10px;border:1.5px dashed #b9c7cf;color:#7a8a93;background:rgba(255,255,255,.6)}
.px-on{border:1.5px solid #004860;background:#004860;color:#fff;box-shadow:0 10px 22px -12px rgba(0,72,96,.8)}
.px-next{border-color:#2e8b3d;color:#23702f;background:#fff}
.px-v3__ln{width:26px;height:10px}
.px-v3__cap{width:100%;display:flex;justify-content:space-between;font-family:'DM Mono',monospace;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#5b6b75;padding:0 6px}
@media (max-width:62rem){.px-chg__grid{grid-template-columns:1fr;max-width:34rem;margin:0 auto}}

.px-v3{flex-direction:column;flex-wrap:nowrap;row-gap:0}
.px-v3__top{display:flex;justify-content:center}
.px-v3__tree{width:100%;height:22px;display:block}
.px-v3__row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;width:100%}
.px-v3__row .px-t,.px-v3__top .px-t{text-align:center;padding:11px 6px}
.px-v3__top .px-t{min-width:32%}
.px-v3__cap{margin-top:12px}

/* why PA-IQ — comparison band */
.px-val{background:linear-gradient(150deg,#003446 0%,#004860 45%,#0b5c63 100%);color:#fff;position:relative;overflow:hidden}
.px-val::after{content:"";position:absolute;right:-180px;top:-180px;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(46,139,61,.35),transparent 65%);pointer-events:none}
.px-val__grid{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,7fr);gap:clamp(2rem,5vw,4rem);align-items:center;position:relative;z-index:1}
.px-val__eb{color:#a8e0b3;text-align:left}
.px-val h2{font-weight:500;font-size:clamp(1.9rem,3.3vw,2.7rem);line-height:1.1;letter-spacing:-.02em;margin:0;color:#fff}
.px-val__copy p:last-child{font-size:1.05rem;line-height:1.65;color:#cfe3e8;margin:1.2rem 0 0}
.px-cmp{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:20px;padding:10px 22px 8px;backdrop-filter:blur(4px)}
.px-cmp__head,.px-cmp__row{display:grid;grid-template-columns:minmax(0,.8fr) 30px minmax(0,1.6fr);align-items:center;gap:10px}
.px-cmp__head{font-family:'DM Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:#8fb6c1;padding:10px 0 12px;border-bottom:1px solid rgba(255,255,255,.12)}
.px-cmp__head span:last-child{color:#a8e0b3}
.px-cmp ul{list-style:none;margin:0;padding:0}
.px-cmp__row{padding:16px 0;border-bottom:1px solid rgba(255,255,255,.1)}
.px-cmp__row:last-child{border-bottom:0}
.px-cmp__was{font-size:.95rem;color:#8fb6c1;text-decoration:line-through;text-decoration-color:rgba(232,120,106,.8);text-decoration-thickness:1.5px}
.px-cmp__arrow{color:#a8e0b3;font-size:18px;text-align:center}
.px-cmp__now{display:flex;gap:14px;align-items:flex-start}
.px-cmp__ic{flex:none;width:40px;height:40px;border-radius:12px;background:rgba(168,224,179,.14);border:1px solid rgba(168,224,179,.35);color:#a8e0b3;display:grid;place-items:center}
.px-cmp__ic svg{width:22px;height:22px}
.px-cmp__now b{display:block;font-weight:500;font-size:1.08rem;color:#fff;margin-bottom:3px}
.px-cmp__now small{display:block;font-size:.92rem;line-height:1.5;color:#cfe3e8}
@media (max-width:62rem){.px-val__grid{grid-template-columns:1fr}}
@media (max-width:40rem){.px-cmp{padding:6px 16px}.px-cmp__head{display:none}.px-cmp__row{grid-template-columns:1fr;gap:8px}.px-cmp__arrow{display:none}}

/* ── maturity status (app pages) ── */
.px-status{display:inline-flex;align-items:center;gap:8px;margin:.9rem 0 0;font-size:.9rem;color:#5b6b75;letter-spacing:.005em}
.px-status__dot{width:8px;height:8px;border-radius:50%;flex:none}
.px-status--live .px-status__dot{background:#2e8b3d;box-shadow:0 0 0 3px rgba(46,139,61,.16)}
.px-status--dev .px-status__dot{background:transparent;border:1.6px solid #006c78}
/* ── shared ── */
.px-more{color:#006c78;font-weight:500;text-decoration:none;white-space:nowrap}
.px-more:hover{text-decoration:underline}
.px-assure-more{text-align:center;margin:14px 0 0;font-size:.95rem}
.px-chip{display:inline-block;font-size:.85rem;border:1px solid #d9e4ea;background:#fff;border-radius:999px;padding:5px 12px;color:#0f2f3d;margin:3px 4px 3px 0}
.px-list{padding-left:1.1rem;line-height:1.8}
.px-list b{font-weight:500;color:#004860}
/* ── architecture ── */
.px-arch2{max-width:900px;margin:0 auto}
.px-layer{display:grid;grid-template-columns:40px minmax(0,1fr) minmax(0,1.3fr);gap:18px;align-items:center;background:#fff;border:1px solid #d9e4ea;border-radius:16px;padding:18px 20px;box-shadow:0 14px 30px -26px rgba(0,58,78,.5)}
.px-layer__n{width:32px;height:32px;border-radius:50%;background:#eef4f7;color:#004860;display:grid;place-items:center;font-family:'DM Mono',monospace;font-size:13px}
.px-layer h3{margin:0;font-size:1.1rem;font-weight:500;color:#004860}
.px-layer p{margin:3px 0 0;font-size:.92rem;color:#5b6b75;line-height:1.45}
.px-layer--ci{background:linear-gradient(135deg,#004860,#006c78 60%,#2e8b3d);border:0;grid-template-columns:40px 1fr}
.px-layer--ci h3{color:#fff}.px-layer--ci p{color:#d9ecef}.px-layer--ci .px-layer__n{background:rgba(255,255,255,.15);color:#fff}
.px-down{height:26px;width:2px;margin:0 auto;background:linear-gradient(#9fbfca,#a9d3b2)}
.px-env{position:relative;border:1.5px dashed #9fbfca;border-radius:22px;padding:30px 16px 16px;background:rgba(242,247,250,.6)}
.px-env__label{position:absolute;top:-11px;left:24px;background:#fff;padding:0 10px;font-family:'DM Mono',monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#006c78}
/* ── trust ── */
.px-tgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}
.px-tcard{background:#fff;border:1px solid #d9e4ea;border-radius:18px;padding:24px;box-shadow:0 14px 30px -26px rgba(0,58,78,.5)}
.px-tcard__ic{width:40px;height:40px;border-radius:12px;background:#eef4f7;color:#006c78;display:grid;place-items:center}
.px-tcard__ic svg{width:22px;height:22px}
.px-tcard h3{margin:14px 0 4px;font-family:'DM Mono',monospace;font-weight:500;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:#5b6b75}
.px-fact{margin:0 0 6px;font-size:1.25rem;font-weight:500;color:#004860}
.px-tcard p:not(.px-fact){margin:0;color:#5b6b75;line-height:1.55}
.px-notyet{margin-top:22px;border:1px solid #e3e9ed;border-left:3px solid #006c78;border-radius:12px;padding:20px 24px;background:#fafcfd}
.px-notyet h3{margin:0 0 8px;font-size:1.05rem;font-weight:500;color:#004860}
.px-notyet ul{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:8px 22px;color:#0f2f3d}
.px-notyet li::before{content:"–";margin-right:8px;color:#8a99a2}
.px-notyet p{margin:10px 0 0;color:#5b6b75;font-size:.95rem}
@media (max-width:48rem){.px-layer{grid-template-columns:32px 1fr}.px-layer__eg{grid-column:1 / -1}.px-tgrid{grid-template-columns:1fr}}

.px-status--impl .px-status__dot{background:#006c78;box-shadow:0 0 0 3px rgba(0,108,120,.14)}
.px-intro-note{font-size:1rem!important;color:#5b6b75;margin-top:.8rem}
.px-dd{text-align:center;color:#5b6b75;margin:26px auto 0;max-width:40rem;line-height:1.6}

/* second top-level menu */
.nav__menu--about{min-width:330px}
@media (min-width:62rem){.nav{gap:28px}}

/* team cards: name beside initials, biography full width */
.team-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:var(--sp-4)!important}
.team-card{align-content:start!important;grid-template-columns:52px 1fr!important;column-gap:var(--sp-4)!important;row-gap:0!important;align-items:center!important}
.team-card > div:not(.team-card__mark){display:contents}
.team-card__mark{grid-row:1 / span 2;width:52px!important;height:52px!important}
.team-card h3{grid-column:2;align-self:end}
.team-card__role{grid-column:2;align-self:start;margin-bottom:0!important}
.team-card p:last-child{grid-column:1 / -1;margin-top:var(--sp-4)!important}
.team-card:last-child{grid-column:auto!important}
@media (max-width:40rem){.team-grid{grid-template-columns:1fr!important}}

/* footer: cookie settings button matches the links beside it */
.site-footer button.footer-link,.site-footer [data-cookie-settings]{font:inherit!important;font-size:inherit!important;line-height:inherit!important;color:inherit!important;letter-spacing:inherit!important;background:none!important;border:0!important;padding:0!important;margin:0!important;cursor:pointer;text-align:left}
.site-footer button.footer-link,.site-footer [data-cookie-settings]{font-size:var(--fs-small)!important;line-height:1.65!important;color:var(--ink-2)!important}
.site-footer [data-cookie-settings]:hover{color:var(--paiq-teal)!important}

.px-buy{margin-top:22px;border:1px solid #d9e4ea;border-left:3px solid #2e8b3d;border-radius:12px;padding:20px 24px;background:#fff}
.px-buy h3{margin:0 0 6px;font-size:1.05rem;font-weight:500;color:#004860}
.px-buy p{margin:0;color:#5b6b75;line-height:1.6}

.team-card .team-card__bio{grid-column:1 / -1;margin:var(--sp-4) 0 0!important;max-width:none!important;font-size:var(--fs-small)!important;line-height:1.6!important;color:var(--ink-2)!important}
.team-card__email{grid-column:1 / -1;margin-top:var(--sp-3);font-size:var(--fs-small);color:var(--paiq-teal);text-decoration:none;justify-self:start;word-break:break-all}
.team-card__email:hover{text-decoration:underline}

/* ── EMRTS / AVT ── */
.px-emrts{background:linear-gradient(180deg,#f4f8fb,#eef5f3)}
.px-emrts__grid{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:clamp(2rem,5vw,4rem);align-items:center}
.px-emrts h2{font-weight:500;font-size:clamp(1.9rem,3.4vw,2.7rem);line-height:1.1;letter-spacing:-.02em;color:#004860;margin:0 0 1rem}
.px-emrts__lede{font-size:1.05rem;line-height:1.65;color:#5b6b75;margin:0 0 1rem}
.px-avt{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 34px minmax(0,1.15fr);align-items:center;gap:10px;background:#0f2f3d;border-radius:20px;padding:24px 22px 34px;box-shadow:0 26px 50px -28px rgba(0,40,55,.7)}
.px-avt__lbl{display:block;font-family:'DM Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:#8fb6c1;margin-bottom:10px}
.px-avt__wave{display:flex;align-items:center;gap:3px;height:56px}
.px-avt__wave i{flex:1;border-radius:3px;background:linear-gradient(#a8e0b3,#2e8b3d);opacity:.9}
.px-avt__quote{margin:12px 0 0;font-size:.88rem;line-height:1.5;color:#d9ecef;font-style:italic}
.px-avt__arrow{color:#a8e0b3;font-size:22px;text-align:center}
.px-avt__form{background:#fff;border-radius:14px;padding:14px 14px 12px}
.px-avt__form .px-avt__lbl{color:#5b6b75}
.px-avt__row{display:grid;grid-template-columns:86px 1fr;gap:8px;padding:8px 0;border-top:1px solid #edf2f5;font-size:.84rem}
.px-avt__row span{color:#7a8a93}
.px-avt__row b{font-weight:500;color:#0f2f3d}
.px-avt__confirm{display:flex;align-items:center;gap:8px;margin-top:8px;padding:7px 10px;border-radius:8px;background:#fdf0d8;color:#8a5a00;font-size:.8rem;font-weight:500}
.px-avt__dot{width:8px;height:8px;border-radius:50%;background:#d99a1e}
.px-avt__note{position:absolute;left:22px;bottom:10px;margin:0;font-size:.72rem;color:#8fb6c1}
.px-prose h2{font-weight:500;font-size:1.5rem;color:#004860;margin:0 0 .6rem}
.px-prose h2:not(:first-child){margin-top:1.6rem}
.px-prose p{color:#3d4f58;line-height:1.7;margin:0 0 1rem}
.px-prose--narrow{max-width:46rem;margin:3rem auto 0}
.px-steps{list-style:none;margin:3rem 0 0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.px-step{background:#fff;border:1px solid #d9e4ea;border-radius:16px;padding:18px;display:flex;gap:12px;align-items:flex-start}
.px-step__n{flex:none;width:30px;height:30px;border-radius:50%;background:#eef4f7;color:#004860;display:grid;place-items:center;font-family:'DM Mono',monospace;font-size:13px}
.px-step b{display:block;font-weight:500;color:#004860;margin-bottom:4px}
.px-step p{margin:0;font-size:.9rem;line-height:1.5;color:#5b6b75}
.px-aims{margin-top:3rem;background:linear-gradient(150deg,#003446,#004860 50%,#0b5c63);border-radius:20px;padding:28px 30px;color:#fff}
.px-aims h2{margin:0 0 1rem;font-weight:500;font-size:1.4rem;color:#fff}
.px-aims ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.px-aims b{display:block;font-weight:500;margin-bottom:4px;color:#a8e0b3}
.px-aims span{color:#d9ecef;font-size:.95rem;line-height:1.5}
@media (max-width:62rem){.px-emrts__grid{grid-template-columns:1fr}.px-steps{grid-template-columns:1fr 1fr}.px-aims ul{grid-template-columns:1fr}}
@media (max-width:40rem){.px-avt{grid-template-columns:1fr}.px-avt__arrow{transform:rotate(90deg)}.px-steps{grid-template-columns:1fr}}

/* innovation: top-level nav, hero announcement, band directly under hero */
.nav__link--solo{display:inline-flex;align-items:center;gap:6px}
.nav__new{font-family:'DM Mono',monospace;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;background:#e3f2e6;color:#23702f;border-radius:999px;padding:2px 7px;line-height:1.4}
.px-news{display:inline-flex;align-items:center;gap:10px;margin:0 0 20px;padding:6px 14px 6px 6px;border:1px solid #cfe3d4;background:#fff;border-radius:999px;font-size:.88rem;color:#0f2f3d;text-decoration:none;box-shadow:0 6px 16px -12px rgba(0,58,78,.5);max-width:100%}
.px-news:hover{border-color:#2e8b3d;text-decoration:none}
.px-news__tag{font-family:'DM Mono',monospace;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;background:#2e8b3d;color:#fff;border-radius:999px;padding:3px 9px;flex:none}
.px-news span[aria-hidden]{color:#2e8b3d}
.px-emrts--top{background:linear-gradient(180deg,#eef5f3,#f4f8fb);border-top:1px solid #e3ece9}
.px-inno__head{display:flex;justify-content:space-between;align-items:baseline;gap:16px;flex-wrap:wrap}
.px-inno__head .px-eyebrow{margin:0 0 18px}
@media (max-width:40rem){.px-news{font-size:.82rem;align-items:flex-start;border-radius:16px}}

/* innovation: photo + draft-record card blended */
.px-duo{position:relative;margin:0;padding-bottom:150px}
.px-duo__photo{border-radius:20px;overflow:hidden;aspect-ratio:950/690;box-shadow:0 26px 50px -30px rgba(0,40,55,.7)}
.px-duo__photo img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}
.px-duo__card{position:absolute;right:-18px;bottom:22px;width:64%;border-radius:18px;overflow:hidden;background:#fff;box-shadow:0 30px 60px -24px rgba(0,30,45,.75);border:1px solid rgba(255,255,255,.6)}
.px-duo__heard{background:#0f2f3d;padding:14px 16px 12px}
.px-duo__heard p{margin:8px 0 0;font-size:.82rem;line-height:1.45;color:#d9ecef;font-style:italic}
.px-duo__wave{height:40px}
.px-duo__form{padding:12px 16px 14px}
.px-duo__form .px-avt__lbl{color:#5b6b75;margin-bottom:6px}
.px-duo__note{position:absolute;left:4px;bottom:0;font-size:.72rem;color:#7a8a93}
.px-inno-top{padding-bottom:clamp(1.5rem,3vw,2.2rem)!important}
.px-inno-body{padding-top:clamp(1.5rem,3vw,2.5rem)!important}
@media (max-width:40rem){.px-duo{padding-bottom:26px}.px-duo__card{position:relative;right:auto;bottom:auto;width:auto;margin:-60px 12px 0}.px-duo__note{position:static;display:block;margin-top:8px}}

.px-inno-hero{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:clamp(2rem,5vw,4rem);align-items:center}
.px-inno-hero .section-head{margin:0}
.px-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(2rem,5vw,4rem)}
.px-two .px-prose h2{margin-top:0!important}
@media (max-width:62rem){.px-inno-hero,.px-two{grid-template-columns:1fr}}

/* hero teaser: live transcript types, then the question */
.px-tease{gap:10px;padding:6px 16px 6px 6px;min-height:40px}
.px-live__tag{display:inline-flex;align-items:center;gap:6px;flex:none;font-family:'DM Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;background:#0f2f3d;color:#fff;border-radius:999px;padding:4px 10px}
.px-live__dot{width:7px;height:7px;border-radius:50%;background:#e5484d;box-shadow:0 0 0 0 rgba(229,72,77,.6);animation:pxPulse 1.6s ease-out infinite}
@keyframes pxPulse{0%{box-shadow:0 0 0 0 rgba(229,72,77,.6)}100%{box-shadow:0 0 0 7px rgba(229,72,77,0)}}
.px-live__stage{position:relative;display:inline-grid;min-width:0}
.px-live__quote,.px-live__q{grid-area:1/1;transition:opacity .45s ease,transform .45s ease;white-space:nowrap}
.px-live__quote{font-style:italic;color:#3d4f58}
.px-live__q{font-weight:500;color:#004860;opacity:0;transform:translateY(6px)}
.px-tease.is-q .px-live__quote{opacity:0;transform:translateY(-6px)}
.px-tease.is-q .px-live__q{opacity:1;transform:none}
.px-live__caret{display:inline-block;width:2px;height:1em;background:#2e8b3d;margin-left:2px;vertical-align:-2px;animation:pxBlink 1s step-end infinite}
@keyframes pxBlink{50%{opacity:0}}
.px-tease.is-q .px-live__caret{display:none}
.px-live__go{color:#2e8b3d;font-size:1.05rem;transition:transform .2s}
.px-tease:hover .px-live__go{transform:translateX(3px)}
@media (max-width:40rem){.px-live__quote,.px-live__q{white-space:normal}}
@media (prefers-reduced-motion:reduce){.px-live__dot,.px-live__caret{animation:none}.px-live__caret{display:none}}

.px-news .px-live__tag{color:#fff!important}
.px-news .px-live__stage{color:inherit}

.px-tease{padding-right:6px!important}
.px-tease__strap{display:inline-flex;align-items:center;gap:8px;flex:none;margin-left:4px;padding:7px 14px 7px 16px;border-radius:999px;background:linear-gradient(135deg,#004860,#006c78 55%,#2e8b3d);color:#fff;font-weight:700;font-size:1.02rem;letter-spacing:-.005em;box-shadow:0 8px 18px -10px rgba(0,72,96,.8)}
.px-news .px-tease__strap .px-live__go{color:#a8e0b3}
.px-tease:hover .px-tease__strap{filter:brightness(1.08)}
@media (max-width:40rem){.px-tease{flex-wrap:wrap;row-gap:8px}.px-tease__strap{margin-left:0}}

.px-news .px-tease__strap,.px-news .px-tease__strap *{color:#fff!important}
.px-news .px-tease__strap .px-live__go{color:#a8e0b3!important}
.px-tease{display:grid!important;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;border-radius:22px!important;max-width:36rem}
.px-tease .px-live__stage{display:grid;min-height:2.7em;align-items:center;font-size:.9rem;line-height:1.35}
.px-tease .px-live__quote,.px-tease .px-live__q{white-space:normal}
@media (max-width:40rem){.px-tease{grid-template-columns:auto 1fr}.px-tease__strap{grid-column:1 / -1;justify-self:start}}

/* little helicopter flying over the teaser */
.px-tease{position:relative;overflow:visible}
.px-heli{position:absolute;top:-28px;left:0;pointer-events:none;animation:pxFly 11s linear infinite;will-change:transform}
.px-heli svg{display:block;animation:pxBob 1.6s ease-in-out infinite}
@keyframes pxFly{0%{transform:translateX(-50px);opacity:0}6%{opacity:1}90%{opacity:1}100%{transform:translateX(calc(36rem - 10px));opacity:0}}
@keyframes pxBob{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-3px) rotate(-5deg)}}
.px-heli__rotor{transform-origin:32px 3px;animation:pxRotor .12s linear infinite}
@keyframes pxRotor{0%{transform:scaleX(1)}50%{transform:scaleX(.25)}100%{transform:scaleX(1)}}
.px-heli__tail{transform-origin:1px 11px;animation:pxRotor .1s linear infinite}
.px-hero__copy{padding-top:6px}
@media (max-width:40rem){@keyframes pxFly{0%{transform:translateX(-50px);opacity:0}6%{opacity:1}90%{opacity:1}100%{transform:translateX(calc(100vw - 40px));opacity:0}}}
@media (prefers-reduced-motion:reduce){.px-heli{animation:none;left:auto;right:18px}.px-heli svg,.px-heli__rotor,.px-heli__tail{animation:none}}

.px-duo__photo{aspect-ratio:800/620!important}
.px-duo__photo img{object-position:center top}

.px-strap{margin:-.3rem 0 1.1rem;font-size:clamp(1.1rem,1.6vw,1.3rem);font-weight:500;color:#004860;letter-spacing:-.005em}
.px-strap b{font-weight:600;background:linear-gradient(90deg,#006c78,#2e8b3d);-webkit-background-clip:text;background-clip:text;color:transparent}
.px-bens{margin:2.2rem auto 2.6rem;max-width:1000px}
.px-bens__eb{text-align:center;margin-bottom:1rem}
.px-bens ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.px-ben{display:flex;gap:12px;align-items:flex-start;background:#fff;border:1px solid #d9e4ea;border-radius:16px;padding:18px;text-align:left}
.px-ben__ic{flex:none;width:32px;height:32px;border-radius:50%;background:#e3f2e6;color:#23702f;display:grid;place-items:center}
.px-ben__ic svg{width:18px;height:18px}
.px-ben b{display:block;font-weight:500;color:#004860;margin-bottom:4px;line-height:1.3}
.px-ben p{margin:0!important;font-size:.92rem!important;line-height:1.5!important;color:#5b6b75!important;max-width:none!important}
@media (max-width:48rem){.px-bens ul{grid-template-columns:1fr}}

/* team: who to contact for what */
.team-card__for{grid-column:1 / -1;margin-top:var(--sp-4);padding-top:var(--sp-3);border-top:1px solid var(--line-soft)}
.team-card__for span{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--paiq-teal);margin-bottom:6px}
.team-card__for ul{margin:0;padding:0;list-style:none;display:grid;gap:4px}
.team-card__for li{font-size:var(--fs-small);color:var(--ink);padding-left:16px;position:relative;line-height:1.45}
.team-card__for li::before{content:"";position:absolute;left:2px;top:.55em;width:6px;height:6px;border-radius:50%;background:#2e8b3d}
.team-card--feature{grid-column:1 / -1!important;background:linear-gradient(135deg,#f2f8fb,#eef7f1)!important;border-color:#cfe3d4!important}
.team-card--feature .team-card__mark{background:linear-gradient(135deg,#004860,#2e8b3d)!important;color:#fff!important;border:0!important}
.team-card__actions{grid-column:1 / -1;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:var(--sp-4)}
.team-card__actions > span{flex-basis:100%;font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--paiq-teal)}
.team-card__act{display:inline-flex;align-items:center;padding:9px 16px;border-radius:999px;border:1px solid #b9d6c1;background:#fff;color:var(--paiq-navy);font-size:var(--fs-small);font-weight:500;text-decoration:none;transition:border-color .15s,background .15s}
.team-card__act:hover{border-color:#2e8b3d;background:#f4faf5;text-decoration:none}
.team-card__act--primary{background:var(--paiq-navy);border-color:var(--paiq-navy);color:#fff}
.team-card__act--primary:hover{background:#003a4e;color:#fff}

/* close the gap under page-header bands */
.section--wash:has(> .wrap > .section-head:only-child){padding-bottom:clamp(1.5rem,3vw,2.25rem)!important}
.section--wash:has(> .wrap > .section-head:only-child) + .section{padding-top:clamp(1.75rem,3.5vw,2.75rem)!important}
.px-inno-top + .section{padding-top:clamp(1.75rem,3.5vw,2.75rem)!important}

.px-inno-top{padding-top:clamp(2rem,4vw,3rem)!important}

/* patient flow at a glance */
.px-board__top{align-items:flex-start!important}
.px-board__sub{display:block;font-size:12px;color:#5b6b75;font-weight:400;margin-top:3px;line-height:1.4}
.px-big{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:14px 14px 4px}
.px-big__c{border-radius:14px;padding:14px 14px 13px;display:flex;flex-direction:column;gap:2px}
.px-big__q{font-size:12.5px;font-weight:500;color:#3d4f58}
.px-big__v{font-size:clamp(30px,3.2vw,40px);font-weight:500;letter-spacing:-.02em;line-height:1.05;margin-top:4px}
.px-big__l{font-size:12.5px;color:#3d4f58;line-height:1.35}
.px-big__c--p{background:#fdf0dc}.px-big__c--p .px-big__v{color:#9a5b00}
.px-big__c--c{background:#e3f2e6}.px-big__c--c .px-big__v{color:#23702f}
.px-big__c--b{background:#fbe4e1}.px-big__c--b .px-big__v{color:#a2382c}
.px-detail{border-top:1px solid #edf2f5;margin-top:10px}
.px-detail summary{cursor:pointer;list-style:none;padding:10px 18px;font-size:12.5px;font-weight:500;color:#006c78}
.px-detail summary::-webkit-details-marker{display:none}
.px-detail summary::after{content:" ▾"}
.px-detail[open] summary::after{content:" ▴"}
@media (max-width:40rem){.px-big{grid-template-columns:1fr}}
/* patient & carer voices */
.px-themes h2,.px-share h2,.px-yst h2{font-weight:500;font-size:1.5rem;color:#004860;margin:0 0 1rem}
.px-themes ul{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
.px-themes li{background:#fff;border:1px solid #d9e4ea;border-radius:16px;padding:20px}
.px-themes b{display:block;font-weight:500;color:#004860;font-size:1.1rem;margin-bottom:6px}
.px-themes span{color:#5b6b75;line-height:1.55}
.px-steps--3{grid-template-columns:repeat(3,minmax(0,1fr))!important;margin-top:2.2rem!important}
.px-share{margin-top:2.4rem;display:grid;grid-template-columns:minmax(0,1.4fr) auto;gap:24px;align-items:center;background:linear-gradient(135deg,#f2f8fb,#eef7f1);border:1px solid #cfe3d4;border-radius:20px;padding:26px 28px}
.px-share p{margin:0;color:#3d4f58;line-height:1.6}
.px-share__acts{display:flex;flex-wrap:wrap;gap:10px}
.px-yst{margin-top:2.4rem;border-top:1px solid #e3e9ed;padding-top:2rem}
.px-yst__row{display:grid;grid-template-columns:1fr 1fr auto;gap:20px;padding:16px 0;border-bottom:1px solid #edf2f5}
.px-yst__told{font-style:italic;color:#3d4f58;margin:0}
.px-yst__did{color:#004860;margin:0}
.px-yst__when{font-family:'DM Mono',monospace;font-size:11px;color:#7a8a93}
.px-yst__empty{color:#5b6b75;margin:0}
@media (max-width:48rem){.px-themes ul,.px-steps--3{grid-template-columns:1fr!important}.px-share{grid-template-columns:1fr}.px-yst__row{grid-template-columns:1fr}}

/* how we build with you */
.px-cd{background:linear-gradient(180deg,#fff,#f4f8fb)}
.px-cd__head{max-width:46rem}
.px-cd__head h2{font-weight:500;font-size:clamp(1.8rem,3.2vw,2.5rem);line-height:1.12;letter-spacing:-.02em;color:#004860;margin:0 0 1rem}
.px-cd__head p:last-child{font-size:1.08rem;line-height:1.65;color:#3d4f58;margin:0}
.px-cd__steps{list-style:none;margin:2.2rem 0 0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;position:relative}
.px-cd__steps::before{content:"";position:absolute;left:4%;right:4%;top:22px;height:2px;background:linear-gradient(90deg,#006c78,#2e8b3d);opacity:.35}
.px-cd__s{position:relative;background:#fff;border:1px solid #d9e4ea;border-radius:16px;padding:18px 18px 20px;box-shadow:0 14px 30px -26px rgba(0,58,78,.5)}
.px-cd__n{position:absolute;top:-14px;left:18px;width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#004860,#2e8b3d);color:#fff;display:grid;place-items:center;font-family:'DM Mono',monospace;font-size:13px}
.px-cd__tag{display:block;margin-top:10px;font-family:'DM Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:#2e8b3d}
.px-cd__s b{display:block;font-weight:500;color:#004860;font-size:1.08rem;margin:4px 0 6px}
.px-cd__s p{margin:0;font-size:.93rem;line-height:1.55;color:#5b6b75}
.px-cd__foot{margin:1.6rem 0 0;color:#3d4f58;font-size:1rem}
.px-cmp__link{color:#a8e0b3;text-decoration:none;white-space:nowrap}
.px-cmp__link:hover{text-decoration:underline}
@media (max-width:62rem){.px-cd__steps{grid-template-columns:1fr 1fr;row-gap:28px}.px-cd__steps::before{display:none}}
@media (max-width:40rem){.px-cd__steps{grid-template-columns:1fr}}

.px-cd--home{background:linear-gradient(180deg,#eef6f3,#f7fbfc)}
.px-cd--home .px-cd__head h2{font-size:clamp(2rem,3.8vw,2.9rem)}
.px-cd__foot--home{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;justify-content:space-between}
.px-cd__foot--home p{margin:0;font-weight:500;color:#004860}
