/*
Theme Name: PKWARE
Theme URI: https://www.pkware.com
Description: Minimal classic theme for pkware.com. Renders hand-authored HTML with a consolidated design system. No page builder.
Author: Bob Cristello
Author URI: https://www.pkware.com
Tags: one-column, custom-logo, custom-menu, editor-style, featured-images, translation-ready
Version: 1.10.14
Requires at least: 6.9
Tested up to: 7.1
Requires PHP: 8.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: pkware
*/

/* ==========================================================================
   TABLE OF CONTENTS

   1. Header block ................ the WordPress theme header above
   2. Font face declarations ...... self-hosted Lato
   3. Design tokens ............... brand palette, scales, custom properties
   4. Reset and normalize
   5. Base elements and typography
   6. Layout and containers
   7. Site header and navigation
   8. Ported page components ...... per page; NOT pk27- (those are a plugin)
   9. Site footer
  10. Utilities
  11. Accessibility
  12. Print

   Conventions
   -----------
   - Every colour in this file comes from the PKWARE palette in section 3.
     Borders, shadows and focus rings are derived from palette tokens via the
     -rgb triplet variables, never from new hex values.
   - Page and post content is hand-authored HTML. This stylesheet must style
     that content without assuming any wrapper markup the author did not write.
   ========================================================================== */


/* ==========================================================================
   2. FONT FACE DECLARATIONS
   --------------------------------------------------------------------------
   Lato is self-hosted from assets/fonts/ rather than loaded from Google's
   CDN. Requesting a font from fonts.gstatic.com transmits the visitor's IP
   address to a third party on every page view, which is exactly the GDPR
   exposure the site's consent-management work is intended to remove. Serving
   the files from our own origin keeps that data on our infrastructure and
   means no font request is gated behind consent.

   Drop the .woff2 files into assets/fonts/ using the names below. Until they
   are present the stack falls through to the system sans-serif; nothing
   breaks. font-display: swap renders fallback text immediately rather than
   blocking paint.
   ========================================================================== */

@font-face {
	font-family: 'Lato';
	src: url('assets/fonts/lato-400.woff2') format('woff2');
	font-weight: 400;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: 'Lato';
	src: url('assets/fonts/lato-400-italic.woff2') format('woff2');
	font-weight: 400;
	font-style: italic;
	font-display: swap;
}

@font-face {
	font-family: 'Lato';
	src: url('assets/fonts/lato-700.woff2') format('woff2');
	font-weight: 700;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: 'Lato';
	src: url('assets/fonts/lato-900.woff2') format('woff2');
	font-weight: 900;
	font-style: normal;
	font-display: swap;
}


/* ==========================================================================
   3. DESIGN TOKENS
   --------------------------------------------------------------------------
   The official PKWARE brand palette, and nothing outside it. If a value is
   needed that is not here, derive it from these tokens - do not add a hex.

   The -rgb triplets exist so translucent borders, shadows and overlays can be
   built with rgba() while still being palette colours. This is the only
   sanctioned way to produce a semi-transparent brand colour.
   ========================================================================== */

:root {

	/* --- Brand palette ------------------------------------------------- */
	--pk-navy: #1e3074;
	--pk-frost: #0fe4a2;
	--pk-cyan: #09bcef;
	--pk-white: #FFFFFF;
	--pk-deep-purple: #25275c;
	--pk-blue: #1152be;
	--pk-tech-purple: #273074;
	--pk-silicone: #47494c;
	--pk-slate: #4c5c68;
	--pk-coral: #f95557;
	--pk-web-purple: #616bce;
	--pk-grey: #f1f5fa;

	/* --- Palette RGB triplets, for rgba() derivation ------------------- */
	--pk-navy-rgb: 30, 48, 116;
	--pk-frost-rgb: 15, 228, 162;
	--pk-cyan-rgb: 9, 188, 239;
	--pk-white-rgb: 255, 255, 255;
	--pk-deep-purple-rgb: 37, 39, 92;
	--pk-blue-rgb: 17, 82, 190;
	--pk-tech-purple-rgb: 39, 48, 116;
	--pk-silicone-rgb: 71, 73, 76;
	--pk-slate-rgb: 76, 92, 104;
	--pk-coral-rgb: 249, 85, 87;
	--pk-web-purple-rgb: 97, 107, 206;
	--pk-grey-rgb: 241, 245, 250;

	/* --- Semantic assignments ------------------------------------------ */
	--pk-color-text: var(--pk-silicone);
	--pk-color-heading: var(--pk-navy);
	--pk-color-link: var(--pk-blue);
	--pk-color-link-hover: var(--pk-navy);
	--pk-color-bg: var(--pk-white);
	--pk-color-bg-alt: var(--pk-grey);
	--pk-color-accent: var(--pk-frost);

	/* Derived, not new colours */
	--pk-color-border: rgba(var(--pk-slate-rgb), 0.18);
	--pk-color-border-strong: rgba(var(--pk-navy-rgb), 0.32);
	--pk-color-focus: var(--pk-cyan);
	--pk-shadow-sm: 0 1px 2px rgba(var(--pk-navy-rgb), 0.08);
	--pk-shadow-md: 0 4px 12px rgba(var(--pk-navy-rgb), 0.12);
	--pk-shadow-lg: 0 12px 32px rgba(var(--pk-navy-rgb), 0.18);
	--pk-overlay: rgba(var(--pk-deep-purple-rgb), 0.72);

	/* --- Spacing scale ------------------------------------------------- */
	--pk-space-3xs: 0.25rem;
	--pk-space-2xs: 0.5rem;
	--pk-space-xs: 0.75rem;
	--pk-space-sm: 1rem;
	--pk-space-md: 1.5rem;
	--pk-space-lg: 2rem;
	--pk-space-xl: 3rem;
	--pk-space-2xl: 4rem;
	--pk-space-3xl: 6rem;

	/* --- Type scale ---------------------------------------------------- */
	--pk-font-sans: 'Lato', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
	--pk-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

	--pk-text-xs: 0.75rem;
	--pk-text-sm: 0.875rem;
	--pk-text-base: 1rem;
	--pk-text-lg: 1.125rem;
	--pk-text-xl: 1.375rem;
	--pk-text-2xl: 1.75rem;
	--pk-text-3xl: 2.25rem;
	--pk-text-4xl: 3rem;
	--pk-text-5xl: 3.75rem;

	--pk-leading-tight: 1.15;
	--pk-leading-snug: 1.35;
	--pk-leading-normal: 1.6;
	--pk-leading-loose: 1.8;

	--pk-weight-regular: 400;
	--pk-weight-bold: 700;
	--pk-weight-black: 900;

	/* --- Layout -------------------------------------------------------- */
	--pk-container-max: 1200px;
	--pk-container-narrow: 780px;
	--pk-container-pad: var(--pk-space-md);
	--pk-header-height: 5rem;

	/* --- Border radius ------------------------------------------------- */
	--pk-radius-none: 0;
	--pk-radius-sm: 2px;
	--pk-radius-md: 6px;
	--pk-radius-lg: 12px;
	--pk-radius-pill: 999px;

	/* --- Transition timing --------------------------------------------- */
	--pk-duration-fast: 120ms;
	--pk-duration-base: 200ms;
	--pk-duration-slow: 320ms;
	--pk-ease: cubic-bezier(0.4, 0, 0.2, 1);
	--pk-transition: var(--pk-duration-base) var(--pk-ease);

	/* --- Elevation ----------------------------------------------------- */
	--pk-z-header: 100;
	--pk-z-nav: 200;
	--pk-z-skiplink: 300;

	/* --- Page edge inset ----------------------------------------------
	   THE SINGLE SOURCE OF THE HORIZONTAL PAGE INSET. Added 2026-08-12 for Bob:
	   "can we consistently left align all work to the header at 1300px, leaving
	   padding for tablet and mobile please?"

	   Three containers consume it - .pk-header__inner, .pk-crumbs__wrap and
	   #pkw .wrap - and all three are capped at 1300px. Because they share both the
	   cap and this inset, their left edges are identical at every viewport. Change
	   THIS, not the individual rules, or they drift apart again.

	   Zero on desktop is deliberate and is what makes the alignment work: with a
	   1300px cap and no padding, every container's left edge is (V - 1300) / 2. Add
	   padding at that width and the container moves inward while the header does not.
	   Below 1300px the cap stops applying, so the inset below is the only thing
	   keeping content off the window edge - which is why it is not zero there.

	   It must live on :root, NOT #pkw. The header and breadcrumb render outside #pkw,
	   and a var() whose token is out of scope invalidates the whole declaration
	   silently. See --maxw, which is #pkw-scoped for exactly the opposite reason.

	   Overrides are in the two media queries immediately after this block. */
	--pk-edge: 0px;
}

/* The only two overrides of --pk-edge. Kept adjacent to the definition on purpose:
   an inset scattered across four section-specific media queries is how the header,
   breadcrumb and page content drifted apart in the first place.

   1340px, not 1300px: at exactly 1300px a 1300px-capped container would sit edge to
   edge with nothing to spare, so the inset starts a little before the cap binds. */
@media (max-width: 1340px) {
	:root { --pk-edge: 20px; }
}
@media (max-width: 480px) {
	:root { --pk-edge: 12px; }
}


/* ==========================================================================
   4. RESET AND NORMALIZE
   ========================================================================== */

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

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

body,
h1, h2, h3, h4, h5, h6,
p, figure, blockquote, dl, dd {
	margin: 0;
}

ul[class],
ol[class] {
	list-style: none;
	margin: 0;
	padding: 0;
}

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

iframe,
embed,
object {
	max-width: 100%;
}

input,
button,
textarea,
select {
	font: inherit;
	color: inherit;
}

button {
	background: none;
	border: 0;
	padding: 0;
	cursor: pointer;
}

table {
	border-collapse: collapse;
	width: 100%;
}


/* ==========================================================================
   5. BASE ELEMENTS AND TYPOGRAPHY
   ========================================================================== */

html {
	scroll-behavior: smooth;
}

body {
	background-color: var(--pk-color-bg);
	color: var(--pk-color-text);
	font-family: var(--pk-font-sans);
	font-size: var(--pk-text-base);
	font-weight: var(--pk-weight-regular);
	line-height: var(--pk-leading-normal);
	min-height: 100vh;
	text-rendering: optimizeSpeed;
}

h1, h2, h3, h4, h5, h6 {
	color: var(--pk-color-heading);
	font-weight: var(--pk-weight-bold);
	line-height: var(--pk-leading-tight);
	margin-block-end: var(--pk-space-sm);
}

h1 { font-size: var(--pk-text-4xl); font-weight: var(--pk-weight-black); }
h2 { font-size: var(--pk-text-3xl); }
h3 { font-size: var(--pk-text-2xl); }
h4 { font-size: var(--pk-text-xl); }
h5 { font-size: var(--pk-text-lg); }
h6 { font-size: var(--pk-text-base); text-transform: uppercase; letter-spacing: 0.06em; }

p {
	margin-block-end: var(--pk-space-sm);
}

a {
	color: var(--pk-color-link);
	text-decoration: underline;
	text-underline-offset: 0.15em;
	transition: color var(--pk-transition);
}

a:hover,
a:focus {
	color: var(--pk-color-link-hover);
}

strong, b { font-weight: var(--pk-weight-bold); }

small { font-size: var(--pk-text-sm); }

hr {
	border: 0;
	border-block-start: 1px solid var(--pk-color-border);
	margin-block: var(--pk-space-xl);
}

blockquote {
	border-inline-start: 3px solid var(--pk-color-accent);
	padding-inline-start: var(--pk-space-md);
	margin-block: var(--pk-space-lg);
	color: var(--pk-slate);
}

code, kbd, samp, pre {
	font-family: var(--pk-font-mono);
	font-size: var(--pk-text-sm);
}

code {
	background-color: var(--pk-color-bg-alt);
	border-radius: var(--pk-radius-sm);
	padding: 0.1em 0.35em;
}

pre {
	background-color: var(--pk-color-bg-alt);
	border-radius: var(--pk-radius-md);
	overflow-x: auto;
	padding: var(--pk-space-sm);
}

pre code {
	background: none;
	padding: 0;
}

th, td {
	border-block-end: 1px solid var(--pk-color-border);
	padding: var(--pk-space-2xs) var(--pk-space-xs);
	text-align: start;
}

th {
	color: var(--pk-color-heading);
	font-weight: var(--pk-weight-bold);
}

figcaption {
	color: var(--pk-slate);
	font-size: var(--pk-text-sm);
	margin-block-start: var(--pk-space-3xs);
}


/* ==========================================================================
   6. LAYOUT AND CONTAINERS
   ========================================================================== */

.pk-container {
	margin-inline: auto;
	max-width: var(--pk-container-max);
	padding-inline: var(--pk-container-pad);
	width: 100%;
}

.pk-container--narrow {
	max-width: var(--pk-container-narrow);
}

/* Top padding only. The ported header is sticky, so main needs a little
   clearance below it; the footer supplies its own top padding, so a bottom value
   here would double up. Set explicitly per Bob 2026-08-10 - the literal values
   are intentional rather than tokens, and the zeroes are written out so nothing
   inherits a surprise. */
.site-main {
	display: block;
	padding-top: 20px;
	padding-left: 0px;
	padding-right: 0px;
	padding-bottom: 0px;
}

.entry-header {
	margin-block-end: var(--pk-space-lg);
}

.entry-meta {
	color: var(--pk-slate);
	font-size: var(--pk-text-sm);
}

/* Hand-authored content owns its own layout. Only spacing rhythm is applied
   here - no width constraint, no assumed wrappers. */
.entry-content > * + * {
	margin-block-start: var(--pk-space-sm);
}

.post-list {
	display: grid;
	gap: var(--pk-space-lg);
	list-style: none;
	margin: 0;
	padding: 0;
}

.post-list__item {
	border-block-end: 1px solid var(--pk-color-border);
	padding-block-end: var(--pk-space-lg);
}

.post-list__item:last-child {
	border-block-end: 0;
}

.pagination {
	display: flex;
	flex-wrap: wrap;
	gap: var(--pk-space-2xs);
	margin-block-start: var(--pk-space-xl);
}

.pagination .page-numbers {
	border: 1px solid var(--pk-color-border);
	border-radius: var(--pk-radius-md);
	padding: var(--pk-space-3xs) var(--pk-space-2xs);
	text-decoration: none;
}

.pagination .page-numbers.current {
	background-color: var(--pk-navy);
	border-color: var(--pk-navy);
	color: var(--pk-white);
}


/* ==========================================================================
   7. SITE HEADER AND NAVIGATION
   --------------------------------------------------------------------------
   PORTED FROM PRODUCTION - 2026-08-10.
   Source: incoming/sticky-light-header/sticky-light-header.css

   Header variant: STICKY LIGHT. This is the first of three headers; when the
   others arrive, each gets its own delimited block here and its own partial in
   template-parts/.

   Markup: template-parts/header-sticky-light.php, rendered at body level by
   header.php. Behaviour: assets/js/navigation.js.

   Desktop dropdowns and the three-level flyouts are pure CSS :hover and
   :focus-within. JavaScript only handles the mobile burger, the mobile
   accordion, the search panel, and the stuck shadow.

   CHANGES FROM THE SOURCE FILE
   ---------------------------------------------------------------------------
   1. Two Avada-only rules removed - they targeted .fusion-fullwidth and
      nav.fusion-breadcrumbs, neither of which exists in this theme. Zero
      fusion- references remain.
   2. Three local custom properties deleted because they redeclared section 3
      tokens with identical values: --pk-navy, --pk-cyan, --pk-white. They now
      inherit from :root, so there is one definition per colour.
   3. --pk-hover-bg and --pk-max repointed at var(--pk-grey) and
      var(--pk-container-max), whose values they were duplicating.

   KNOWN EXCEPTION TO THE PALETTE RULE
   ---------------------------------------------------------------------------
   Section 3 states no colour outside the brand palette may be introduced. This
   ported block breaks that, and the values are left verbatim on purpose -
   rewriting production colours by eye during a port makes a porting mistake
   indistinguishable from a deliberate change. Map them to tokens as a separate
   reviewable pass. The off-palette values are --pk-ink (#292929), --pk-active
   (#0a58ca), the search input background, the mega icon hover, and a number of
   rgba(0,0,0,...) shadows and hairline borders.
   ========================================================================== */

/* ============================================================
   PKWARE header - styles
   Three-level cascading flyouts. Everything scoped under
   .pk-header / .pk-nav / .pk-search
   ============================================================ */

.pk-header {
  --pk-ink:         #292929;
  --pk-active:      #0a58ca;
  --pk-hover-bg:    var(--pk-grey);   /* palette: --pk-grey */
  --pk-radius:      12px;
  --pk-gap:         18px;
  --pk-font:        18px;
  --pk-sub-font:    16px;
  --pk-row-pad-y:   12px;
  --pk-row-pad-x:   20px;
  --pk-panel-pad-y: 8px;
  --pk-logo-w:      200px;
  --pk-max:         var(--pk-container-max);
  --pk-h:           84px;

  position: sticky;
  top: 0;
  z-index: 999999;
  background: var(--pk-white);
  font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  transition: box-shadow .2s ease;
}
.pk-header.is-stuck { box-shadow: 0 2px 14px rgba(0,0,0,.10); }
.pk-header *, .pk-header *::before, .pk-header *::after { box-sizing: border-box; }

/* Bob's values, 2026-08-12. max-width was ALREADY 1300px - what actually changed is
   padding 0 20px -> 0.

   That is the meaningful edit, not the max-width: .pk-header sets box-sizing:border-box
   two rules up, so the 20px was subtracted from the 1300px and the header CONTENT was
   spanning 1260px. Removing it makes the box genuinely 1300px, which also lines the
   header up with .pkbc-container (1300px, no padding).

   The 480px block further down still sets padding: 0 12px, so phones keep an inset.
   BETWEEN 481px AND 1300px THERE IS NOW NO HORIZONTAL INSET - the logo and hamburger
   sit flush against the window edge. That is the literal consequence of padding 0,
   left as asked rather than silently guarded. */
.pk-header__inner {
  max-width: calc(1300px + 2 * var(--pk-edge));
  margin: 0 auto;
  padding: 0 var(--pk-edge);
  min-height: var(--pk-h);
  display: flex;
  align-items: center;
  gap: 24px;
}

/* ---------- logo ---------- */
.pk-header__logo { flex: 0 0 auto; line-height: 0; }
.pk-header__logo img { width: var(--pk-logo-w); max-width: 100%; height: auto; display: block; }

/* ---------- panel wrapper ---------- */
.pk-header__panel {
  flex: 1 1 auto;
  display: flex;
  align-items: center;
  gap: 24px;
}

/* ---------- level 1 ---------- */
.pk-nav { flex: 1 1 auto; }

.pk-nav__l1 {
  list-style: none; margin: 0; padding: 0;
  display: flex; align-items: center; justify-content: flex-start;
  gap: var(--pk-gap);
}

.pk-nav__item { position: relative; }

.pk-nav__item > a {
  display: block;
  padding: 10px 2px;
  font-size: var(--pk-font);
  font-weight: 400;
  line-height: 1.2;
  color: var(--pk-ink);
  text-decoration: none;
  white-space: nowrap;
  transition: color .15s ease;
}
.pk-nav__item > a:hover,
.pk-nav__item > a:focus-visible,
.pk-nav__item.is-open > a { color: var(--pk-active); }

/* down caret on level-1 parents */
.pk-nav__item--parent > a::after {
  content: "";
  display: inline-block;
  width: 6px; height: 6px;
  margin-left: 8px;
  vertical-align: 3px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  border-radius: 1px;
  transform: rotate(45deg);
  transform-origin: 60% 60%;
  transition: transform .15s ease;
}
.pk-nav__item--parent:hover > a::after,
.pk-nav__item--parent:focus-within > a::after,
.pk-nav__item--parent.is-open > a::after { transform: rotate(-135deg); }

.pk-nav__toggle { display: none; background: none; border: 0; cursor: pointer; }

/* ---------- level 2 panel ---------- */
.pk-nav__panel {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 10;
  min-width: 280px;
  padding: var(--pk-panel-pad-y) 0;
  background: var(--pk-navy);
  border-radius: var(--pk-radius);
  box-shadow: 0 12px 32px rgba(0,0,0,.18);
}
.pk-nav__item:hover > .pk-nav__panel,
.pk-nav__item:focus-within > .pk-nav__panel,
.pk-nav__item.is-open > .pk-nav__panel,
.pk-nav__panel:hover { display: block; }

.pk-nav__l2, .pk-nav__l3 { list-style: none; margin: 0; padding: 0; }

.pk-nav__sub { position: relative; }

/* shared row styling for links and non-link group labels */
.pk-nav__l2 > li > a,
.pk-nav__l3 > li > a,
.pk-nav__row {
  display: block;
  padding: var(--pk-row-pad-y) var(--pk-row-pad-x);
  font-size: var(--pk-sub-font);
  line-height: 1.35;
  color: var(--pk-white);
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: background .12s ease, color .12s ease;
}

/* hover state: light background, cyan text */
.pk-nav__l2 > li > a:hover,
.pk-nav__l2 > li > a:focus-visible,
.pk-nav__l3 > li > a:hover,
.pk-nav__l3 > li > a:focus-visible,
.pk-nav__sub--parent:hover > .pk-nav__row,
.pk-nav__sub--parent:focus-within > .pk-nav__row {
  background: var(--pk-hover-bg);
  color: var(--pk-cyan);
}

/* right caret on level-2 parents */
.pk-nav__sub--parent > .pk-nav__row::after {
  content: "";
  position: absolute;
  right: var(--pk-row-pad-x);
  top: 50%;
  width: 6px; height: 6px;
  margin-top: -3px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  border-radius: 1px;
  transform: rotate(-45deg);
}
.pk-nav__sub--parent > .pk-nav__row { padding-right: calc(var(--pk-row-pad-x) * 2 + 8px); }

/* ---------- level 3 flyout ---------- */
.pk-nav__l3 {
  display: none;
  position: absolute;
  left: 100%;
  top: calc(var(--pk-panel-pad-y) * -1);
  z-index: 11;
  min-width: 260px;
  padding: var(--pk-panel-pad-y) 0;
  background: var(--pk-navy);
  border-radius: var(--pk-radius);
  box-shadow: 0 12px 32px rgba(0,0,0,.18);
}
.pk-nav__sub--parent:hover > .pk-nav__l3,
.pk-nav__sub--parent:focus-within > .pk-nav__l3,
.pk-nav__sub--parent.is-open > .pk-nav__l3,
.pk-nav__l3:hover { display: block; }

/* flip the flyout to the left if it would run off the right edge */
.pk-nav__item:nth-last-child(-n+3) .pk-nav__l3 { left: auto; right: 100%; }

/* ---------- actions ---------- */
.pk-header__actions { flex: 0 0 auto; display: flex; align-items: center; gap: 14px; }

.pk-header__search-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; padding: 0;
  background: none; border: 0; border-radius: 50%;
  color: var(--pk-ink); cursor: pointer;
  transition: color .15s ease, background .15s ease;
}
.pk-header__search-btn svg { fill: currentColor; }
.pk-header__search-btn:hover,
.pk-header__search-btn[aria-expanded="true"] { color: var(--pk-active); background: rgba(0,0,0,.05); }

.pk-header__cta {
  display: inline-block;
  padding: 16px 20px;
  background: var(--pk-cyan);
  color: #000;
  font-size: 16px; font-weight: 700; line-height: 1;
  text-transform: uppercase; text-decoration: none;
  border: 1px solid transparent;
  white-space: nowrap;
  transition: filter .15s ease, border-color .15s ease;
}
.pk-header__cta:hover, .pk-header__cta:focus-visible {
  filter: brightness(.92); border-color: var(--pk-white); color: #000;
}
/* Avada resets button radius, so force the pill with raised specificity */
.pk-header .pk-header__actions a.pk-header__cta,
.pk-header .pk-header__actions a.pk-header__cta:hover,
.pk-header .pk-header__actions a.pk-header__cta:focus-visible {
  border-radius: 200px !important;
}

/* ---------- search ---------- */
.pk-search { border-top: 1px solid rgba(0,0,0,.08); background: var(--pk-white); }
.pk-search[hidden] { display: none; }
.pk-search__form {
  max-width: var(--pk-max); margin: 0 auto; padding: 18px 20px;
  display: flex; align-items: center; gap: 10px;
}
.pk-search__input {
  flex: 1 1 auto; min-width: 0;
  padding: 12px 16px; font-size: 18px;
  color: var(--pk-ink); background: #f5f7fa;
  border: 1px solid rgba(0,0,0,.12); border-radius: 8px;
}
.pk-search__input:focus { outline: 2px solid var(--pk-cyan); outline-offset: 1px; }
.pk-search__submit, .pk-search__close {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; padding: 0; border: 0; border-radius: 8px; cursor: pointer;
}
.pk-search__submit { background: var(--pk-cyan); color: #000; }
.pk-search__close  { background: transparent; color: var(--pk-ink); }
.pk-search__submit svg, .pk-search__close svg { fill: currentColor; }
.pk-search__close:hover { background: rgba(0,0,0,.06); }

/* ---------- burger ---------- */
.pk-header__burger {
  display: none; flex: 0 0 auto; margin-left: auto;
  width: 44px; height: 44px; padding: 10px;
  background: none; border: 0; cursor: pointer;
}
.pk-header__burger-bar {
  display: block; height: 2px; background: var(--pk-ink); border-radius: 2px;
  transition: transform .2s ease, opacity .2s ease;
}
.pk-header__burger-bar + .pk-header__burger-bar { margin-top: 5px; }
.pk-header__burger[aria-expanded="true"] .pk-header__burger-bar:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.pk-header__burger[aria-expanded="true"] .pk-header__burger-bar:nth-child(2) { opacity: 0; }
.pk-header__burger[aria-expanded="true"] .pk-header__burger-bar:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* ============================================================
   MOBILE / TABLET - single tree, reflowed as a nested accordion
   ============================================================ */
@media (max-width: 1200px) {

  .pk-header__inner { gap: 12px; flex-wrap: wrap; }
  .pk-header__burger { display: block; }

  .pk-header__panel {
    flex: 0 0 100%;
    flex-direction: column; align-items: stretch; gap: 0;
    max-height: 0; overflow: hidden; visibility: hidden;
    transition: max-height .28s ease, visibility .28s;
  }
  .pk-header__panel.is-open {
    max-height: calc(100vh - var(--pk-h));
    overflow-y: auto; visibility: visible; padding-bottom: 20px;
  }

  .pk-nav__l1 { flex-direction: column; align-items: stretch; gap: 0; }
  .pk-nav__item { border-bottom: 1px solid rgba(0,0,0,.08); }
  .pk-nav__item > a { padding: 16px 4px; font-size: 18px; white-space: normal; }

  /* level-1 rows become label + toggle */
  .pk-nav__item--parent { display: grid; grid-template-columns: 1fr 48px; align-items: center; }
  .pk-nav__item--parent > a { grid-column: 1; }
  .pk-nav__item--parent > a::after { content: none; }

  /* level-2 parents likewise */
  .pk-nav__sub--parent { display: grid; grid-template-columns: 1fr 48px; align-items: center; }
  .pk-nav__sub--parent > .pk-nav__row { grid-column: 1; }
  .pk-nav__sub--parent > .pk-nav__row::after { content: none; }
  .pk-nav__sub--parent > .pk-nav__row { padding-right: var(--pk-row-pad-x); }

  .pk-nav__toggle {
    display: block; grid-column: 2;
    width: 48px; height: 48px; position: relative;
  }
  .pk-nav__toggle::before, .pk-nav__toggle::after {
    content: ""; position: absolute; top: 50%; left: 50%;
    width: 14px; height: 2px; background: var(--pk-ink);
    transform: translate(-50%,-50%); transition: transform .2s ease;
  }
  .pk-nav__toggle::after { transform: translate(-50%,-50%) rotate(90deg); }
  .pk-nav__toggle[aria-expanded="true"]::after { transform: translate(-50%,-50%) rotate(0deg); }
  /* level-2 toggle bars sit on the navy panel */
  .pk-nav__toggle--sub::before, .pk-nav__toggle--sub::after { background: var(--pk-white); }

  /* panels become in-flow, driven only by .is-open */
  .pk-nav__panel, .pk-nav__l3 {
    display: none;
    position: static;
    grid-column: 1 / -1;
    min-width: 0;
    box-shadow: none;
    border-radius: 8px;
    z-index: auto;
    left: auto; right: auto; top: auto;
  }
  .pk-nav__panel { margin: 0 0 12px; }
  .pk-nav__l3    { margin: 0; border-radius: 0; background: rgba(0,0,0,.18); }

  .pk-nav__item:hover > .pk-nav__panel,
  .pk-nav__item:focus-within > .pk-nav__panel,
  .pk-nav__panel:hover,
  .pk-nav__sub--parent:hover > .pk-nav__l3,
  .pk-nav__sub--parent:focus-within > .pk-nav__l3,
  .pk-nav__l3:hover { display: none; }

  .pk-nav__item.is-open > .pk-nav__panel,
  .pk-nav__sub--parent.is-open > .pk-nav__l3 { display: block; }

  .pk-nav__l2 > li > a,
  .pk-nav__l3 > li > a,
  .pk-nav__row { white-space: normal; }

  .pk-nav__item--wide .pk-nav__panel { width: auto; max-width: none; }

  /* actions stay in the header row, centred between logo and burger */
  .pk-header__logo    { order: 1; }
  .pk-header__actions { order: 2; margin-left: auto; margin-right: auto; gap: 10px; }
  .pk-header__burger  { order: 3; margin-left: 0; }
  .pk-header__panel   { order: 4; }

  .pk-header__cta { padding: 10px 16px; font-size: 13px; }
  .pk-header__search-btn { width: 34px; height: 34px; }
  .pk-header__search-btn svg { width: 19px; height: 19px; }
}

@media (max-width: 480px) {
  .pk-header { --pk-logo-w: 132px; --pk-h: 68px; }
  /* Horizontal padding removed - it now comes from --pk-edge, which is 12px at this
     width. Hardcoding it here would put the header back out of step with the
     breadcrumb and page content. */
  .pk-header__inner { gap: 8px; }
  .pk-header__actions { gap: 6px; }
  .pk-header__cta { padding: 9px 12px; font-size: 11px; }
  .pk-header__search-btn { width: 30px; height: 30px; }
  .pk-header__search-btn svg { width: 17px; height: 17px; }
  .pk-search__form { flex-wrap: wrap; }
  .pk-search__input { flex: 1 1 100%; order: 1; }
}
/* ============================================================
   v3 - SECTION ONE: PLATFORM NAVY MEGA PANEL
   Reworks ONLY the Platform dropdown into a headed two-column
   card grid on the SAME navy panel. Scoped to .pk-nav__panel--mega
   so the other dropdowns are untouched. Icons use
   stroke:currentColor -> same SVGs go light on navy / dark on a
   future white panel (only .pk-mega__ico color flips).
   ============================================================ */
.pk-nav__panel--mega { left: 0; min-width: 640px; padding: 22px; }
.pk-mega__head { margin: 0 0 8px; padding: 0 12px; font-size: 11px; font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: rgba(255,255,255,.55); }
.pk-mega__head--spaced { margin-top: 18px; }
.pk-mega__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2px 20px; }
.pk-mega__link { display: flex; align-items: flex-start; gap: 12px; padding: 11px 12px; border-radius: 10px; text-decoration: none; transition: background .15s ease, color .15s ease; }
.pk-mega__link--compact { align-items: center; padding: 9px 12px; }
.pk-mega__ico { flex: 0 0 auto; width: 34px; height: 34px; display: grid; place-items: center; border-radius: 9px; background: rgba(255,255,255,.10); color: var(--pk-white); transition: background .15s ease, color .15s ease; }
.pk-mega__ico svg { width: 18px; height: 18px; display: block; }
.pk-mega__body { display: block; min-width: 0; }
.pk-mega__title { display: flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 700; line-height: 1.35; color: var(--pk-white); }
.pk-mega__desc { display: block; margin-top: 2px; font-size: 13px; line-height: 1.45; color: rgba(255,255,255,.62); white-space: normal; }
.pk-mega__tag { flex: 0 0 auto; font-style: normal; font-weight: 700; font-size: 9.5px; letter-spacing: .08em; text-transform: uppercase; padding: 3px 8px; border-radius: 999px; color: var(--pk-cyan); background: rgba(9,188,239,.16); }
/* hover: light-surface flip, matching the existing navy-dropdown hover */
.pk-mega__link:hover, .pk-mega__link:focus-visible { background: var(--pk-hover-bg); }
.pk-mega__link:hover .pk-mega__title, .pk-mega__link:focus-visible .pk-mega__title { color: var(--pk-active); }
.pk-mega__link:hover .pk-mega__desc, .pk-mega__link:focus-visible .pk-mega__desc { color: var(--pk-ink); }
.pk-mega__link:hover .pk-mega__ico, .pk-mega__link:focus-visible .pk-mega__ico { background: #e7f0f9; color: var(--pk-navy); }
.pk-mega__link:hover .pk-mega__tag, .pk-mega__link:focus-visible .pk-mega__tag { color: var(--pk-navy); background: rgba(30,48,116,.12); }
@media (max-width: 1200px) {
  .pk-nav__panel--mega { min-width: 0; padding: 4px 0 10px; }
  .pk-nav__panel--mega .pk-mega__grid { grid-template-columns: 1fr; gap: 0; }
  .pk-nav__panel--mega .pk-mega__head { padding: 12px 4px 4px; }
  .pk-nav__panel--mega .pk-mega__link { padding: 12px 4px; }
  .pk-nav__panel--mega .pk-mega__link:hover, .pk-nav__panel--mega .pk-mega__link:focus-visible { background: rgba(255,255,255,.06); }
  .pk-nav__panel--mega .pk-mega__link:hover .pk-mega__title, .pk-nav__panel--mega .pk-mega__link:focus-visible .pk-mega__title { color: var(--pk-cyan); }
  .pk-nav__panel--mega .pk-mega__link:hover .pk-mega__desc, .pk-nav__panel--mega .pk-mega__link:focus-visible .pk-mega__desc { color: rgba(255,255,255,.7); }
  .pk-nav__panel--mega .pk-mega__link:hover .pk-mega__ico, .pk-nav__panel--mega .pk-mega__link:focus-visible .pk-mega__ico { background: rgba(255,255,255,.12); color: var(--pk-white); }
  .pk-nav__panel--mega .pk-mega__link:hover .pk-mega__tag, .pk-nav__panel--mega .pk-mega__link:focus-visible .pk-mega__tag { color: var(--pk-cyan); background: rgba(9,188,239,.16); }
}
/* ==========================================================================
   8. PORTED PAGE COMPONENTS
   --------------------------------------------------------------------------
   CSS ported from real production pages, in delimited blocks that name their
   source page.

   This section was originally reserved for the pk27- component styles and
   marked "intentionally empty". Both of those are now wrong, and the header
   is renamed so nobody ports by the old instruction:

   - It is not empty. It holds the home page's #pkw block and .promo.
   - pk27- rules do NOT belong here. They are printed by the PKWARE
     Shortcodes plugin, from pk27_styles(), pk27f_styles(), pk27e_styles()
     and pk27s_styles(). Putting them here creates two sources for the same
     selectors, which already happened once - see the .pk27-grid note further
     down this section.

   Rely on the tokens in section 3 rather than reintroducing literal hex
   values. The one documented exception: colours arriving verbatim in a port
   are left exactly as ported and recorded, so a porting mistake stays
   distinguishable from a deliberate change.
   ========================================================================== */

/* --- begin ported page components --- */

/*
 * PORTED FROM PRODUCTION - 2026-08-10
 * -------------------------------------------------------------------------
 * Source: the live home page, https://staging.pkware.com/ (page id 6),
 * extracted to outgoing/home/. That page's rendered document loads 17 CSS
 * sources; only three are bespoke AND referenced by the hand-authored markup.
 * The other fourteen are Avada, Formidable and Complianz framework and were
 * deliberately NOT ported:
 *
 *   ported:
 *     block [14]  #pkw ...........  36,523 bytes  home page content styles
 *     block [15]  .pk27-grid ......   2,361 bytes  pk27 component
 *     block [12]  .promo ..........     692 bytes
 *
 *   present in production but NOT ported, and why:
 *     block [13]  .pk-header / .pk-nav      the mega menu - no markup for it
 *                                           yet; arrives with the menu port
 *     block [16]  .pk-footer                same, for the site footer
 *     block [17]  .embeddedMessaging*       Salesforce chat widget overrides
 *     block [11]  .with_frm_style           Formidable form overrides
 *     fusion-dynamic-css, formidable-css, cmplz-*, child-style-css,
 *     css-fb-visibility ......... 1.23 MB of framework being retired
 *
 * KNOWN EXCEPTION TO THE PALETTE RULE
 * -------------------------------------------------------------------------
 * Section 3 states that no colour outside the brand palette may be introduced.
 * This ported block breaks that rule: it carries 39 distinct hex values, of
 * which 33 are off-palette (one more, #fff, is simply shorthand for white).
 *
 * They are left verbatim ON PURPOSE. Rewriting production values by eye during
 * a port would change the rendering and make it impossible to tell a porting
 * mistake from a deliberate colour change. Map them to tokens as a separate,
 * reviewable pass once the page is confirmed rendering correctly.
 *
 * SCOPE NOTE
 * -------------------------------------------------------------------------
 * Block [14] is scoped entirely under #pkw and applies to one page, but ships
 * in the site-wide stylesheet, so every page downloads ~36 KB it does not use.
 * The alternative is leaving it inline in that page's content. Kept here for
 * now because it is easier to review in one place.
 */

/* =========== PROMO BAR =========== */
.promo{background:linear-gradient(90deg,#09BCEF,#0FE4A2);color:#082b52;
  font-weight:700;font-size:14.5px;text-align:center;padding:11px 20px;position:relative;z-index:60}
.promo .wrap{display:flex;gap:14px;align-items:center;justify-content:center;flex-wrap:wrap;padding:0 26px}
.promo .pill{display:inline-flex;align-items:center;gap:8px;background:#1E3074;color:#fff;
  padding:8px 18px;border-radius:999px;font-size:13px;transition:transform .28s,background .28s}
.promo .pill:hover{transform:translateY(-1px);background:#152357}
.promo .pill svg{width:14px;height:14px}

/* Google Fonts: Lato (body/UI). Georgia is a system serif, no load needed. */
@import url('https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap');

/* ============================================================
   PKWARE.com - Homepage
   Scoped under #pkw. Georgia (display) + Lato (body/UI) only.
   Dark-and-luminous default; .pkw-light / .pkw-grey remap tokens.
   ============================================================ */
#pkw *,#pkw *::before,#pkw *::after{box-sizing:border-box}
#pkw{
  --navy:#1E3074; --cyan:#09BCEF; --cyan-700:#057FA3; --frost:#0FE4A2; --frost-deep:#0B6E4E; --coral:#F95557;
  /* light-forward default */
  --bg:#FFFFFF; --bg-2:#F4F8FD; --bg-3:#EDF4FB; --panel:#FFFFFF;
  --tx:#3D4457; --tx-2:#5C6472; --tx-3:#8A93A8;
  --head:#1E3074; --eb:var(--frost-deep);
  --brd:#E7EAF1; --brd-2:#D8DEE9;
  --glass:#F7F9FC; --glass-2:#FFFFFF;
  --frost-glow:rgba(15,228,162,.40); --cyan-glow:rgba(9,188,239,.42);
  --card-shadow:0 20px 50px -28px rgba(30,48,116,.26);
  --serif:Georgia,"Times New Roman",serif;
  --sans:"Lato",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
  --maxw:calc(1300px + 2 * var(--pk-edge)); --gutter:26px;
  font-family:var(--sans); color:var(--tx); background:var(--bg);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  font-size:18px; line-height:1.7; position:relative; overflow-x:clip;
}
#pkw h1,#pkw h2,#pkw h3,#pkw h4{font-family:var(--serif);font-weight:400;color:var(--head);margin:0;letter-spacing:-.01em}
#pkw p{margin:0}
#pkw a{color:inherit;text-decoration:none}
#pkw img{max-width:100%;display:block}
#pkw ul{margin:0;padding:0;list-style:none}
#pkw button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit}
#pkw :focus-visible{outline:2px solid var(--frost);outline-offset:3px;border-radius:6px}

/* ---- section shells & rhythm ---- */
#pkw .sec{position:relative;padding:118px 0;background-color:var(--bg)}
/* ALIGNED TO THE HEADER 2026-08-12. --maxw went 1240px -> 1300px and the horizontal
   padding moved from --gutter (26px) to --pk-edge, which is 0 on desktop. Both were
   needed: the narrower cap contributed 30px of the misalignment and the gutter the
   other 26px, for the 56px indent Bob saw on home, products and why-pk-protect.
   --gutter is left defined at 26px because it is a #pkw token other ports may still
   reach for; it simply no longer sets the page edge. */
#pkw .wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--pk-edge);position:relative;z-index:2}
#pkw .pkw-light{background-color:#FFFFFF;color:#484848;
  --head:#1E3074; --tx:#484848; --tx-2:#5C6472; --tx-3:#8A93A8;
  --eb:var(--frost-deep); --brd:#E7EAF1; --brd-2:#D8DEE9;
  --glass:#F7F9FC; --glass-2:#FFFFFF;}
#pkw .pkw-grey{background-color:#EDF4FB;
  background-image:radial-gradient(1100px 460px at 82% -12%,rgba(9,188,239,.09),transparent 60%),radial-gradient(900px 420px at 8% 118%,rgba(15,228,162,.07),transparent 60%);
  color:#484848;
  --head:#1E3074; --tx:#484848; --tx-2:#5C6472; --tx-3:#8A93A8;
  --eb:var(--frost-deep); --brd:#E1E7F1; --brd-2:#D2DAE7;
  --glass:#FFFFFF; --glass-2:#FFFFFF;}
/* strategic dark anchor sections */
#pkw .pkw-dark{background-color:#070C24;color:#EEF2FF;
  --bg:#070C24; --head:#FFFFFF; --tx:#EEF2FF; --tx-2:#AEB8DC; --tx-3:#8791B8;
  --eb:var(--frost); --brd:rgba(255,255,255,.10); --brd-2:rgba(255,255,255,.17);
  --glass:rgba(255,255,255,.045); --glass-2:rgba(255,255,255,.07);}
#pkw .pkw-dark .eyebrow::before{background:var(--frost);box-shadow:0 0 10px var(--frost-glow)}
#pkw .pkw-dark .frost-word{color:var(--frost)}
#pkw .pkw-dark .card{box-shadow:0 24px 60px -34px rgba(0,0,0,.7)}
/* light soft wash atmosphere */
#pkw .wash{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#pkw .wash::before{content:"";position:absolute;width:780px;height:780px;border-radius:50%;top:-340px;right:-180px;
  background:radial-gradient(circle,rgba(9,188,239,.22),transparent 62%)}
#pkw .wash::after{content:"";position:absolute;width:640px;height:640px;border-radius:50%;bottom:-320px;left:-160px;
  background:radial-gradient(circle,rgba(15,228,162,.17),transparent 62%)}
#pkw .pkw-light .card,#pkw .pkw-grey .card{box-shadow:0 16px 44px -24px rgba(30,48,116,.28)}

/* ---- eyebrow / label ---- */
#pkw .eyebrow{display:inline-flex;align-items:center;gap:9px;font-family:var(--sans);
  font-weight:700;font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--eb);margin:0 0 22px}
#pkw .eyebrow::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--frost);
  box-shadow:0 0 10px var(--frost-glow)}
#pkw .pkw-light .eyebrow::before,#pkw .pkw-grey .eyebrow::before{background:var(--frost-deep);box-shadow:none}

/* ---- type helpers ---- */
#pkw .h1{font-size:clamp(38px,5vw,62px);line-height:1.08}
#pkw .h2{font-size:clamp(30px,3.5vw,46px);line-height:1.16}
#pkw .h3{font-size:clamp(24px,2.4vw,36px);line-height:1.28}
#pkw .lead{font-size:20px;line-height:1.7;color:var(--tx-2);max-width:56ch}
#pkw .frost-word{color:var(--frost-deep)}
#pkw .pkw-light .frost-word{color:var(--frost-deep)}
#pkw .kicker-num{font-family:var(--serif);color:var(--frost)}

/* ---- buttons ---- */
#pkw .btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--sans);font-weight:700;
  font-size:15.5px;line-height:1;padding:15px 26px;border-radius:999px;transition:all .28s cubic-bezier(.4,0,.2,1);
  border:1.5px solid transparent;white-space:nowrap}
#pkw .btn svg{width:16px;height:16px;transition:transform .28s ease}
#pkw .btn-green{background:var(--frost);color:#062B20}
#pkw .btn-green:hover{transform:translateY(-2px);box-shadow:0 14px 34px -12px var(--frost-glow);filter:brightness(1.06)}
#pkw .btn-cyan{background:var(--cyan);color:#fff}
#pkw .btn-cyan:hover{background:var(--navy);transform:translateY(-2px)}
#pkw .btn-outline{border-color:var(--brd-2);color:var(--head)}
#pkw .btn-outline:hover{background:var(--cyan);border-color:var(--cyan);color:#fff;transform:translateY(-2px)}
#pkw .btn:hover svg{transform:translateX(4px)}
#pkw .btn-lg{padding:18px 32px;font-size:16.5px}
#pkw .tlink{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:15.5px;color:var(--eb)}
#pkw .tlink svg{width:15px;height:15px;transition:transform .28s ease}
#pkw .tlink:hover svg{transform:translateX(5px)}

/* ---- chips ---- */
#pkw .chip{display:inline-flex;align-items:center;gap:7px;font-family:var(--sans);font-weight:700;
  font-size:12px;letter-spacing:.06em;text-transform:uppercase;padding:8px 14px;border-radius:999px;
  border:1px solid var(--brd-2);color:var(--tx-2);background:var(--glass)}

/* ---- generic card ---- */
#pkw .card{background:linear-gradient(180deg,var(--glass-2),var(--glass));border:1px solid var(--brd);
  border-radius:18px;transition:transform .28s cubic-bezier(.4,0,.2,1),border-color .28s,box-shadow .28s}

/* ---- aurora atmosphere (dark sections) ---- */
#pkw .aurora{position:absolute;inset:0;overflow:hidden;z-index:0;pointer-events:none}
#pkw .blob{position:absolute;border-radius:50%;filter:blur(80px);opacity:.5;mix-blend-mode:screen}
#pkw .blob.b1{width:640px;height:640px;background:radial-gradient(circle,var(--cyan),transparent 62%);top:-220px;right:-160px;animation:drift1 38s ease-in-out infinite}
#pkw .blob.b2{width:560px;height:560px;background:radial-gradient(circle,var(--frost),transparent 62%);bottom:-240px;left:-140px;opacity:.34;animation:drift2 44s ease-in-out infinite}
#pkw .blob.b3{width:420px;height:420px;background:radial-gradient(circle,var(--navy),transparent 60%);top:30%;left:40%;opacity:.6;animation:drift1 32s ease-in-out infinite}
/* atmospheric depth - film grain + soft light, no AI grid */
#pkw .grain{position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.045;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
#pkw .sweep{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#pkw .sweep::before{content:"";position:absolute;top:-40%;left:-10%;width:52%;height:180%;
  background:linear-gradient(105deg,transparent,rgba(9,188,239,.05) 45%,rgba(15,228,162,.06) 55%,transparent);
  transform:rotate(8deg);filter:blur(6px)}
@keyframes drift1{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-60px,50px) scale(1.12)}}
@keyframes drift2{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(70px,-40px) scale(1.1)}}

/* ---- reveal on scroll ---- */
#pkw .reveal{opacity:0;transform:translateY(26px);transition:opacity .8s cubic-bezier(.2,.6,.2,1),transform .8s cubic-bezier(.2,.6,.2,1)}
#pkw .reveal.in{opacity:1;transform:none}


/* =========== HERO =========== */
#pkw .hero{padding:0px 0 104px;position:relative;overflow:hidden;background-color:var(--bg)}
#pkw .hero-grid{display:grid;grid-template-columns:1.02fr .98fr;gap:56px;align-items:center}
#pkw .hero-badge{display:inline-flex;align-items:center;gap:9px;padding:8px 16px;border-radius:999px;
  background:var(--glass);border:1px solid var(--brd-2);font-weight:700;font-size:13px;color:var(--tx-2);margin-bottom:26px}
#pkw .hero-badge .dot{width:8px;height:8px;border-radius:50%;background:var(--frost);box-shadow:0 0 10px var(--frost-glow)}
#pkw .hero h1{font-size:clamp(38px,5vw,62px);line-height:1.07;margin-bottom:24px;text-wrap:balance}
#pkw .hero .frost-word{color:var(--cyan-700)}
#pkw .hero .lead{margin-bottom:34px}
#pkw .hero-cta{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
#pkw .hero-cta .micro{font-size:13.5px;color:var(--tx-3);flex-basis:100%;margin-top:2px}
#pkw .hero-trust{margin-top:36px;padding-top:24px;border-top:1px solid var(--brd)}
#pkw .hero-trust .lbl{display:block;font-weight:700;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--tx-3);margin-bottom:16px}
#pkw .hero-stats{display:flex;align-items:stretch;gap:32px;flex-wrap:wrap}
#pkw .hs{display:flex;flex-direction:column;gap:5px}
#pkw .hs-n{font-family:var(--serif);font-size:28px;color:var(--tx);line-height:1;display:flex;align-items:baseline;gap:7px}
#pkw .hs-n em{font-style:normal;font-size:13px;color:var(--tx-3);font-family:var(--sans);font-weight:700;letter-spacing:.02em}
#pkw .hs-l{font-size:13px;color:var(--tx-3);font-weight:700}
#pkw .hs-div{width:1px;background:var(--brd-2);flex:none;align-self:stretch}
#pkw .award{display:inline-flex;align-items:center;gap:18px;margin-bottom:24px;padding:14px 22px 14px 16px;border-radius:16px;background:var(--glass);border:1px solid var(--brd-2)}
#pkw .award img{width:92px;height:92px;flex:none}
#pkw .award .aw-t{font-family:var(--serif);font-size:18px;line-height:1.28;color:var(--head);max-width:22ch}
#pkw .award .aw-t em{display:block;font-family:var(--sans);font-style:normal;font-weight:800;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--frost-deep);margin-bottom:6px}

/* staggered hero rise */
#pkw .rise{opacity:0;transform:translateY(22px);animation:rise .9s cubic-bezier(.2,.6,.2,1) forwards}
#pkw .rise.d1{animation-delay:.05s}#pkw .rise.d2{animation-delay:.17s}#pkw .rise.d3{animation-delay:.29s}
#pkw .rise.d4{animation-delay:.41s}#pkw .rise.d5{animation-delay:.53s}
@keyframes rise{to{opacity:1;transform:none}}

/* =========== COVERAGE PANEL (signature) =========== */
#pkw .cov-stage{perspective:1600px;position:relative}
#pkw .cov-stage{perspective:1600px;position:relative}
#pkw .cov-stage::before{content:"";position:absolute;z-index:0;inset:-8% -12%;pointer-events:none;
  background:radial-gradient(56% 52% at 66% 32%,rgba(9,188,239,.32),transparent 70%),radial-gradient(46% 46% at 34% 82%,rgba(15,228,162,.26),transparent 72%)}
#pkw .cov-art{position:absolute;z-index:1;pointer-events:none;width:132%;right:-15%;top:-72px;
  filter:drop-shadow(0 34px 62px rgba(9,188,239,.42));
  -webkit-mask:linear-gradient(180deg,#000 76%,transparent);mask:linear-gradient(180deg,#000 76%,transparent);
  animation:artfloat 7.5s ease-in-out infinite}
@keyframes artfloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-11px)}}
#pkw .cov{z-index:2;position:relative;margin:122px auto 0;max-width:86%;background:linear-gradient(165deg,rgba(19,28,72,.95),rgba(10,16,44,.99));
  border:1px solid var(--brd-2);border-radius:20px;padding:22px;overflow:hidden;
  box-shadow:0 64px 120px -44px rgba(6,12,40,.9),0 24px 48px -28px rgba(9,188,239,.35),0 0 0 1px rgba(255,255,255,.04) inset;
  transform:rotateY(-10deg) rotateX(5deg);transition:transform .6s cubic-bezier(.2,.7,.2,1)}
#pkw .cov-stage:hover .cov{transform:rotateY(-4deg) rotateX(2deg) translateY(-4px)}

/* ---------- hero art with no coverage panel ---------------------------------
   Added 2026-08-12. Bob: "That imagery on the right, on only these two pages, is too
   low, can it align with the Headline please? Most of the PKWARE OLD Created pages
   have this image in that spot."

   WHY IT SAT LOW. .cov-art is position:absolute, so it contributes no height. On the
   HOME page that is fine because .cov-stage also holds .cov - the live-coverage panel -
   which is in normal flow and gives the stage real height. On products and
   why-pk-protect the stage holds ONLY the absolute image, so it is a ZERO-HEIGHT box.
   .hero-grid is align-items:center, so that empty box gets centred against the tall
   text column and the art's top:-72px is measured from the middle of the headline
   block rather than the top of it.

   So the condition is not "which page" - it is "does this stage have an in-flow panel".
   :has() expresses that exactly and needs no markup change, which matters because more
   old pages are coming with this same structure and will be fixed automatically.

   If :has() is unsupported the whole selector is dropped and the art simply renders as
   before - degrades to the old look, never to a broken one. Supported in Chrome 105+,
   Safari 15.4+, Firefox 121+; all shipping since late 2023.

   These are the only :has() selectors in the stylesheet.

   WHY top IS 30px AND NOT 0. Bob, after seeing top:0: "I think this is too high by about
   30px, the thing moves a bit, and needs room to breathe." The movement is real - .cov-art
   carries `animation: artfloat`, whose keyframes are translateY(0) -> translateY(-11px) at
   50%. So the art drifts 11px UPWARD mid-cycle, and at top:0 it was overshooting the top of
   the hero on every pass. At 30px it rests 30px down and peaks at 19px, so there is always
   clearance. If this value is retuned, keep it above 11px or the float will clip again.

   MIN-WIDTH 1241px IS DELIBERATE. These rules only make sense where .cov-art is absolutely
   positioned. Below 1241px the responsive block turns it static and stacks it under the
   copy, and `top` does not apply to a static element - so this would be harmless there
   anyway, but the media query says so explicitly rather than relying on that. It also
   stops these selectors, which outrank the tablet rule on specificity (1,3,0 vs 1,1,0),
   from being something a future edit has to reason about. */
@media (min-width: 1241px) {
  #pkw .hero-grid > .cov-stage:not(:has(.cov)) { align-self: start; }
  #pkw .cov-stage:not(:has(.cov)) > .cov-art { top: 30px; }
}
#pkw .cov::after{content:"";position:absolute;left:0;right:0;top:0;height:2px;
  background:linear-gradient(90deg,transparent,var(--frost),var(--cyan),transparent);
  box-shadow:0 0 18px var(--frost-glow);animation:scan 4.5s ease-in-out infinite;z-index:5}
@keyframes scan{0%{top:0;opacity:0}8%{opacity:1}92%{opacity:1}100%{top:100%;opacity:0}}
#pkw .cov-head{display:flex;align-items:center;gap:11px;padding-bottom:16px;border-bottom:1px solid var(--brd);margin-bottom:16px}
#pkw .cov-live{width:9px;height:9px;border-radius:50%;background:var(--frost);box-shadow:0 0 0 0 var(--frost-glow);animation:pulse 2.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 var(--frost-glow)}70%{box-shadow:0 0 0 9px transparent}100%{box-shadow:0 0 0 0 transparent}}
#pkw .cov-head .ttl{font-weight:700;font-size:14px;color:#fff}
#pkw .cov-head .sub{font-size:12px;color:var(--tx-3);margin-left:auto}
#pkw .cov-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}
#pkw .cov-stat{background:rgba(255,255,255,.03);border:1px solid var(--brd);border-radius:13px;padding:15px}
#pkw .cov-stat .k{font-weight:700;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--tx-3)}
#pkw .cov-stat .v{font-family:var(--serif);font-size:34px;color:#fff;line-height:1;margin-top:9px;display:flex;align-items:baseline;gap:8px}
#pkw .cov-stat .v small{font-family:var(--sans);font-size:13px;font-weight:700;color:var(--frost)}
#pkw .ring{position:relative;width:56px;height:56px;flex:none}
#pkw .ring svg{transform:rotate(-90deg)}
#pkw .ring .pct{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--serif);font-size:15px;color:#fff}
#pkw .cov-stat.ringcell .v{align-items:center;gap:13px;font-size:26px}
#pkw .cov-rows{display:flex;flex-direction:column;gap:8px}
#pkw .cov-row{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:11px;
  background:rgba(255,255,255,.025);border:1px solid var(--brd)}
#pkw .cov-row.mf{background:linear-gradient(90deg,rgba(9,188,239,.1),rgba(255,255,255,.02));border-color:rgba(9,188,239,.28)}
#pkw .cov-row .srf{font-weight:700;font-size:13.5px;color:#fff;display:flex;align-items:center;gap:8px;min-width:96px}
#pkw .cov-row .srf svg{width:15px;height:15px;color:var(--cyan)}
#pkw .badge-mf{font-family:var(--sans);font-weight:700;font-size:8.5px;letter-spacing:.06em;text-transform:uppercase;
  padding:2px 6px;border-radius:5px;color:var(--cyan);background:rgba(9,188,239,.16);border:1px solid rgba(9,188,239,.35)}
#pkw .cov-chips{display:flex;gap:6px;margin-left:auto;flex-wrap:nowrap;justify-content:flex-end}
#pkw .dchip{font-family:var(--sans);font-weight:700;font-size:10px;letter-spacing:.04em;padding:4px 9px;border-radius:999px;
  color:var(--frost);background:rgba(15,228,162,.11);border:1px solid rgba(15,228,162,.3);
  opacity:0;transform:scale(.85);transition:opacity .3s,transform .3s}
#pkw .cov.armed .dchip{opacity:1;transform:none}
#pkw .cov-cap{text-align:center;font-size:11px;color:var(--tx-3);margin-top:14px}

/* =========== TRUST / GARTNER =========== */
#pkw .marquee{overflow:hidden;position:relative;margin-top:8px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
#pkw .marquee-track{display:flex;align-items:center;gap:70px;width:max-content;animation:marq 36s linear infinite}
#pkw .marquee:hover .marquee-track{animation-play-state:paused}
#pkw .marquee .lg-img{height:34px;width:auto;opacity:.55;filter:brightness(0) saturate(0);transition:opacity .3s}
#pkw .marquee .lg-img:nth-child(4n+3){height:28px}
#pkw .marquee .lg-img:nth-child(4n){height:40px}
#pkw .marquee .lg-img:hover{opacity:.9}

/* ---------- trust strip, the [pkware_trust_logos] component ------------------
   Added 2026-08-12. Two rules, and both exist to REPLACE inline style attributes
   that the hand-pasted version of this block carried on every page:

       <p class="eyebrow reveal" style="justify-content:center;display:flex">
       <div class="marquee reveal" style="margin-top:22px">

   Per Bob's standing rule - "Eliminate inline style as much as possible" - they are
   classed instead. Scoped under .trust-strip rather than given new element classes so
   .eyebrow and .marquee stay the shared components they already are; this only carries
   the two deltas.

   22px, not the .marquee default of 8px, because the strip sits directly under its own
   label here rather than under a section heading. */
#pkw .trust-strip .eyebrow { display: flex; justify-content: center; }
#pkw .trust-strip .marquee { margin-top: 22px; }
@keyframes marq{to{transform:translateX(-50%)}}
#pkw .trust-proof{font-family:var(--serif);font-size:clamp(22px,2.4vw,30px);line-height:1.4;text-align:center;color:var(--tx);max-width:24ch;margin:0 auto}
#pkw .trust-proof b{color:var(--frost-deep);font-weight:700}
#pkw .gart{margin:16px auto 0;max-width:560px;border:1px solid var(--brd);border-radius:18px;padding:24px 28px;
  background:var(--glass);min-height:118px;display:flex;align-items:center;justify-content:center;gap:16px}
#pkw .gart-ph{display:flex;align-items:center;gap:14px;color:var(--tx-3);font-size:14px}
#pkw .gart-ph .spin{width:18px;height:18px;border:2px solid var(--brd-2);border-top-color:var(--frost);border-radius:50%;animation:spin 1s linear infinite}
#pkw .gart-cap{text-align:center;font-size:12.5px;color:var(--tx-3);margin-top:14px}
#pkw .gart-cap a{color:var(--cyan-700);font-weight:700}
#pkw .gpi-snip{display:block;border-radius:16px;overflow:hidden;border:1px solid var(--brd);
  box-shadow:0 24px 56px -30px rgba(30,48,116,.4);transition:transform .3s,box-shadow .3s}
#pkw .gpi-snip:hover{transform:translateY(-4px);box-shadow:0 34px 68px -32px rgba(30,48,116,.5)}
#pkw .gpi-snip img{width:100%;display:block}
#pkw .gpi-card{display:block;background-color:var(--navy);border-radius:16px;overflow:hidden;padding:32px 34px;box-shadow:0 24px 56px -30px rgba(30,48,116,.4);transition:transform .3s,box-shadow .3s;text-decoration:none}
#pkw .gpi-card:hover{transform:translateY(-4px);box-shadow:0 34px 68px -32px rgba(30,48,116,.5)}
#pkw .gpi-prod{font-family:var(--sans);font-weight:700;font-size:15px;color:rgba(255,255,255,.72);margin:0 0 12px}
#pkw .gpi-quote{font-family:var(--serif);font-size:clamp(20px,2.1vw,25px);line-height:1.32;color:#fff;margin:0}
#pkw .gpi-stars{display:flex;gap:5px;margin:16px 0 12px;color:#f5a623}
#pkw .gpi-stars svg{width:22px;height:22px;fill:currentColor}
#pkw .gpi-attr{font-family:var(--serif);font-style:italic;font-size:16px;color:rgba(255,255,255,.85);margin:0}
@keyframes spin{to{transform:rotate(360deg)}}

/* =========== STAT GRID / cards ===== */
#pkw .stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
#pkw .stat{padding:26px;border-radius:16px;border:1px solid var(--brd);background:var(--glass)}
#pkw .stat .n{font-family:var(--serif);font-size:clamp(34px,4vw,48px);line-height:1;color:var(--head)}
#pkw .stat .l{font-size:14px;color:var(--tx-2);margin-top:10px;font-weight:700}

/* two-col narrative */
#pkw .two-col{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:start}

/* =========== PROCESS - animated pipeline =========== */
#pkw .pipe{position:relative;margin-top:30px}
#pkw .flow{position:relative;display:flex;align-items:center;justify-content:center;gap:0;margin-top:40px;flex-wrap:nowrap}
#pkw .flow-seq{display:flex;align-items:center;gap:0}
#pkw .fstep{position:relative;width:74px;flex:none;display:flex;justify-content:center}
#pkw .fnode{width:74px;height:74px;border-radius:22px;display:grid;place-items:center;position:relative;
  background:#fff;border:1.5px solid var(--brd-2);color:var(--frost-deep);
  box-shadow:0 16px 32px -20px rgba(30,48,116,.5);transition:transform .3s,box-shadow .3s,border-color .3s;
  animation:nodepop 4s ease-in-out infinite}
#pkw .flow-seq .fstep:nth-child(3) .fnode{animation-delay:.9s}
#pkw .fnode svg{width:30px;height:30px}
#pkw .fnode .pk{position:absolute;top:-10px;right:-10px;width:27px;height:27px;border-radius:50%;background:var(--navy);color:#fff;
  font-family:var(--serif);font-size:12.5px;display:grid;place-items:center;border:2px solid #fff}
#pkw .fstep:hover .fnode{transform:translateY(-6px);border-color:var(--frost);box-shadow:0 24px 42px -20px rgba(15,228,162,.5)}
#pkw .fcap{position:absolute;top:86px;left:50%;transform:translateX(-50%);width:124px;text-align:center;font-size:13px;color:var(--tx-2);line-height:1.45}
#pkw .fcap b{display:block;font-family:var(--sans);font-weight:900;font-size:17px;color:var(--head);margin-bottom:6px}
#pkw .fconn{width:64px;height:2px;flex:none;position:relative;background:var(--brd-2);border-radius:2px}
#pkw .fconn::after{content:"";position:absolute;top:-3px;left:0;width:8px;height:8px;border-radius:50%;background:var(--frost);box-shadow:0 0 12px var(--frost-glow);animation:conndot 3s ease-in-out infinite}
@keyframes conndot{0%{left:0;opacity:0}12%{opacity:1}82%{opacity:1}100%{left:calc(100% - 8px);opacity:0}}
#pkw .flow-join{width:44px;height:2px;flex:none;background:var(--frost-deep);opacity:.45;border-radius:2px}
#pkw .flow-branch{position:relative;display:flex;flex-direction:column;gap:16px;flex:none;width:314px;height:268px;padding-left:34px}
#pkw .flow-branch::before{content:"";position:absolute;left:0;top:27px;bottom:27px;width:2px;border-radius:2px;background:var(--frost-deep);opacity:.4}
#pkw .branch-head{position:absolute;top:-30px;left:34px;font-weight:800;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--frost-deep)}
#pkw .bstep{position:relative;flex:1;display:flex;align-items:center;gap:13px;padding:0 18px;border-radius:16px;
  background:#fff;border:1.5px solid var(--brd);box-shadow:0 12px 30px -22px rgba(30,48,116,.5);transition:transform .3s,box-shadow .3s,border-color .3s}
#pkw .bstep::before{content:"";position:absolute;left:-34px;top:50%;width:34px;height:2px;margin-top:-1px;background:var(--frost-deep);opacity:.4}
#pkw .bstep:hover{border-color:var(--frost);transform:translateX(5px);box-shadow:0 18px 34px -20px rgba(15,228,162,.45)}
#pkw .bicon{width:42px;height:42px;border-radius:12px;flex:none;display:grid;place-items:center;color:var(--frost-deep);
  background:linear-gradient(145deg,rgba(15,228,162,.15),rgba(9,188,239,.12))}
#pkw .bicon svg{width:22px;height:22px}
#pkw .btxt b{display:block;font-family:var(--sans);font-weight:900;font-size:16px;color:var(--head);margin-bottom:2px}
#pkw .btxt span{font-size:13px;color:var(--tx-2);line-height:1.4}@keyframes nodepop{0%,22%,100%{border-color:var(--brd-2);box-shadow:0 16px 32px -20px rgba(30,48,116,.5)}
  8%{border-color:var(--frost);box-shadow:0 0 0 7px rgba(15,228,162,.13),0 20px 38px -18px rgba(15,228,162,.55)}}
#pkw .pipe-io{display:flex;justify-content:space-between;margin:64px 4% 0;gap:48px}
#pkw .pipe-io .io{display:flex;align-items:center;gap:12px;font-size:14px;color:var(--tx-2);max-width:38ch}
#pkw .pipe-io .io b{font-weight:900;color:var(--head)}
#pkw .pipe-io .io .dot{width:9px;height:9px;border-radius:50%;flex:none}
#pkw .pipe-io .io .dot.raw{background:var(--coral)}
#pkw .pipe-io .io .dot.safe{background:var(--frost-deep)}

/* =========== product cards =========== */
#pkw .prod-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
#pkw .prod{padding:36px;border-radius:20px;position:relative;overflow:hidden}
#pkw .prod .tag{margin-bottom:18px}
#pkw .prod h3{font-size:30px;margin-bottom:6px}
#pkw .prod .q{font-family:var(--serif);font-style:italic;font-size:19px;color:var(--head);margin:14px 0 12px;line-height:1.4}
#pkw .prod p{font-size:15.5px;color:var(--tx-2);line-height:1.6}
#pkw .prod .surf{display:flex;gap:8px;flex-wrap:wrap;margin:20px 0 24px}
#pkw .prod .surf .chip{font-size:11px;padding:6px 11px;color:var(--tx-2)}

/* =========== bento =========== */
#pkw .bento{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;gap:18px}
#pkw .bento .card{padding:30px;position:relative;overflow:hidden}
#pkw .bento .card:hover{transform:translateY(-4px);border-color:var(--brd-2)}
#pkw .bento .feat{grid-column:span 2;grid-row:span 2}
#pkw .bento .card h4{font-family:var(--serif);font-size:24px;color:#fff;margin-bottom:10px}
#pkw .bento .card p{font-size:15px;color:var(--tx-2);line-height:1.6}
#pkw .bento .ico{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;margin-bottom:18px;
  background:var(--glass-2);border:1px solid var(--brd);color:var(--frost)}
#pkw .bento .ico svg{width:22px;height:22px}

/* mini mainframe viz */
#pkw .mf-viz{margin-top:22px;display:flex;flex-direction:column;gap:7px}
#pkw .mf-bar{display:flex;align-items:center;gap:12px}
#pkw .mf-bar .nm{font-weight:700;font-size:12.5px;color:var(--tx-2);min-width:92px;display:flex;align-items:center;gap:7px}
#pkw .mf-bar .track{flex:1;height:9px;border-radius:999px;background:rgba(255,255,255,.06);overflow:hidden}
#pkw .mf-bar .fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--cyan),var(--frost));width:0;transition:width 1.1s cubic-bezier(.3,.7,.2,1)}
#pkw .mf-bar.dim .fill{background:linear-gradient(90deg,#3a4780,#586099)}
#pkw .mf-bar .pc{font-weight:700;font-size:12px;color:var(--tx-3);min-width:38px;text-align:right}

/* =========== screenshot frame =========== */
#pkw .shot-frame{border-radius:16px;overflow:hidden;border:1px solid var(--brd-2);
  box-shadow:0 40px 90px -40px rgba(0,0,0,.7);background:#0a1130}
#pkw .shot-bar{display:flex;align-items:center;gap:7px;padding:12px 16px;background:rgba(255,255,255,.04);border-bottom:1px solid var(--brd)}
#pkw .shot-bar i{width:11px;height:11px;border-radius:50%;background:var(--brd-2);display:block}
#pkw .shot-bar .ttl{margin-left:10px;font-size:12.5px;color:var(--tx-3);font-weight:700}
#pkw .shot-frame img{width:100%;display:block}
#pkw .pkw-grey .shot-frame,#pkw .pkw-light .shot-frame{background:#fff;border-color:#D8DEE9;box-shadow:0 44px 96px -44px rgba(30,48,116,.4)}
#pkw .pkw-grey .shot-bar,#pkw .pkw-light .shot-bar{background:#EEF2F8;border-bottom-color:#E1E7F1}
#pkw .pkw-grey .shot-bar i,#pkw .pkw-light .shot-bar i{background:#C6CFDE}
#pkw .pkw-grey .shot-bar .ttl,#pkw .pkw-light .shot-bar .ttl{color:#8A93A8}

/* =========== testimonial =========== */
#pkw .quote-big{font-family:var(--serif);font-size:clamp(26px,3.4vw,42px);line-height:1.32;color:#fff;max-width:100%;margin:0 auto;text-align:center;text-wrap:balance}
#pkw .quote-mark{font-family:var(--serif);font-size:90px;line-height:.6;color:var(--frost);opacity:.5;height:44px}
#pkw .quote-attr{text-align:center;margin-top:34px}
#pkw .quote-attr .nm{font-weight:700;color:#fff;font-size:16px}
#pkw .quote-attr .ro{font-size:14px;color:var(--tx-3);margin-top:3px}

/* =========== persona =========== */
#pkw .persona-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
#pkw .persona{padding:28px;border-radius:16px;transition:transform .28s,border-color .28s}
#pkw .persona:hover{transform:translateY(-4px)}
#pkw .persona .ico{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;margin-bottom:20px;
  background:rgba(30,48,116,.06);border:1px solid var(--brd-2);color:var(--navy)}
#pkw .persona .ico svg{width:23px;height:23px}
#pkw .persona h4{font-family:var(--serif);font-size:21px;color:var(--head);margin-bottom:7px}
#pkw .persona p{font-size:14px;color:var(--tx-2);line-height:1.5;margin-bottom:16px}

/* =========== FAQ =========== */
#pkw .faq{max-width:860px;margin:0 auto;border-top:1px solid var(--brd)}
#pkw .faq-item{border-bottom:1px solid var(--brd)}
#pkw .faq-q{width:100%;display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:26px 4px;text-align:left;font-family:var(--serif);font-size:21px;color:var(--head)}
#pkw .faq-q .ic{flex:none;width:28px;height:28px;border-radius:50%;border:1px solid var(--brd-2);display:grid;place-items:center;transition:transform .3s,background .3s;color:var(--eb)}
#pkw .faq-q .ic svg{width:14px;height:14px}
#pkw .faq-item.open .faq-q .ic{transform:rotate(45deg);background:var(--frost);color:#062B20;border-color:var(--frost)}
#pkw .faq-a{max-height:0;overflow:hidden;transition:max-height .4s cubic-bezier(.4,0,.2,1)}
#pkw .faq-a p{padding:0 4px 26px;font-size:16.5px;color:var(--tx-2);line-height:1.65;max-width:70ch}

/* =========== final CTA =========== */
#pkw .cta-final{text-align:center;position:relative;overflow:hidden}
#pkw .cta-final h2{margin-bottom:18px;text-wrap:balance}
#pkw .cta-final .lead{margin:0 auto 32px;text-align:center}
#pkw .cta-final .btns{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
#pkw .cta-final .trust-line{margin-top:30px;font-size:14px;color:var(--tx-3)}

/* ---- Fiserv quote card with cover shot ---- */
#pkw .fiserv-quote{display:grid;grid-template-columns:1fr 288px;gap:48px;align-items:center}
#pkw .fiserv-cover{display:flex;flex-direction:column;gap:18px}
#pkw .fiserv-cover .cov-img{display:block;border-radius:12px;overflow:hidden;border:1px solid #D8DEE9;
  box-shadow:0 34px 64px -30px rgba(30,48,116,.55);transition:transform .3s,box-shadow .3s}
#pkw .fiserv-cover .cov-img:hover{transform:translateY(-5px);box-shadow:0 46px 80px -32px rgba(30,48,116,.62)}
#pkw .fiserv-cover .cov-img img{width:100%;display:block}
#pkw .fiserv-cover .read{justify-content:center;font-size:16px}

/* ---- Why PKWARE - coverage matrix ---- */
#pkw .why-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:22px;align-items:stretch}
#pkw .why-feat{padding:38px;display:flex;flex-direction:column}
#pkw .why-feat h4{font-family:var(--serif);font-size:26px;color:var(--head);margin-bottom:12px}
#pkw .why-feat p.d{font-size:15.5px;color:var(--tx-2);line-height:1.6;max-width:52ch}
#pkw .why-side{display:flex;flex-direction:column;gap:22px}
#pkw .why-side .card{padding:30px;flex:1;display:flex;flex-direction:column;justify-content:center}
#pkw .why-side .card h4{font-family:var(--serif);font-size:21px;color:var(--head);margin-bottom:9px}
#pkw .why-side .card p{font-size:14.5px;color:var(--tx-2);line-height:1.55}
#pkw .why-side .ico,#pkw .why-feat .ico{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;margin-bottom:16px;
  background:rgba(9,188,239,.09);border:1px solid rgba(9,188,239,.22);color:var(--cyan-700)}
#pkw .why-side .ico svg,#pkw .why-feat .ico svg{width:22px;height:22px}
#pkw .cmatrix{margin-top:26px;border-top:1px solid var(--brd);padding-top:22px}
#pkw .cmx{display:grid;grid-template-columns:118px repeat(5,1fr);gap:9px 4px;align-items:center}
#pkw .cmx .col{text-align:center;font-weight:700;font-size:9.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--tx-3);line-height:1.25}
#pkw .cmx .col.mf{color:var(--cyan-700)}
#pkw .cmx .rlabel{font-weight:700;font-size:13px;color:var(--tx);display:flex;align-items:center;gap:7px}
#pkw .cmx .rlabel.dim{color:var(--tx-3)}
#pkw .cmx .rlabel .pkdot{width:8px;height:8px;border-radius:50%;background:var(--frost);box-shadow:0 0 8px var(--frost-glow);flex:none}
#pkw .cmx .cell{display:grid;place-items:center;height:32px}
#pkw .cmx .yes{width:26px;height:26px;border-radius:50%;background:rgba(15,228,162,.18);border:1px solid rgba(11,110,78,.45);display:grid;place-items:center;color:var(--frost-deep)}
#pkw .cmx .yes svg{width:14px;height:14px}
#pkw .cmx .yes.cy{background:rgba(9,188,239,.16);border-color:rgba(5,127,163,.5);color:var(--cyan-700)}
#pkw .cmx .no{width:20px;height:2px;border-radius:2px;background:var(--brd-2)}
#pkw .cmx-cap{margin-top:16px;font-size:12.5px;color:var(--tx-3);display:flex;align-items:center;gap:8px}
#pkw .cmx-cap b{color:var(--cyan-700);font-weight:700}

/* ---- Trust section flow ---- */
#pkw .trust-flow{display:grid;grid-template-columns:1fr 1fr;gap:52px;align-items:center;margin-top:54px}
#pkw .trust-proof-l{font-family:var(--serif);font-size:clamp(25px,2.7vw,36px);line-height:1.3;color:var(--tx);max-width:15ch}
#pkw .trust-proof-l b{color:var(--frost-deep);font-weight:700}
#pkw .trust-flow .gart{margin:0;max-width:none}
#pkw .trust-flow .gart-cap{text-align:left;margin-top:12px}

/* =========== latest publications =========== */
#pkw .pub-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px}
#pkw .pub{display:flex;flex-direction:column}
#pkw .pub-thumb{position:relative;aspect-ratio:16/10;border-radius:14px;overflow:hidden;border:1px solid var(--brd);
  box-shadow:0 18px 44px -26px rgba(30,48,116,.4);transition:transform .3s,box-shadow .3s}
#pkw .pub:hover .pub-thumb{transform:translateY(-6px);box-shadow:0 30px 58px -28px rgba(30,48,116,.52)}
#pkw .pub-thumb>img{width:100%;height:100%;object-fit:cover;display:block}
#pkw .pub-blog{padding:26px 28px;display:flex;flex-direction:column;justify-content:center;color:#fff}
#pkw .pub-blog.g1{background:linear-gradient(120deg,var(--cyan),var(--frost))}
#pkw .pub-blog.g2{background:linear-gradient(125deg,var(--navy),var(--cyan))}
#pkw .pub-mark{position:absolute;top:20px;right:22px;height:17px;width:auto;opacity:.96}
#pkw .pub-blog-word{font-family:var(--serif);font-size:42px;color:#fff;line-height:1;margin-bottom:16px}
#pkw .pub-auth{font-size:12px;line-height:1.45;color:rgba(255,255,255,.92);max-width:26ch}
#pkw .pub-auth b{font-weight:700;font-size:13.5px;font-style:normal}
#pkw .pub-case{background:#0A1130}
#pkw .pub-case .pub-cover{width:100%;height:100%;object-fit:cover;object-position:top center}
#pkw .pub-case::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(7,12,36,.6),transparent 42%)}
#pkw .pub-case-label{position:absolute;top:16px;left:20px;z-index:2;font-weight:700;font-size:13px;color:#fff;letter-spacing:.02em}
#pkw .pub-chip{margin:20px 0 14px;align-self:flex-start;font-size:11px;color:var(--frost-deep);border-color:var(--frost-deep);background:rgba(11,110,78,.06)}
#pkw .pub-title{font-family:var(--serif);font-size:22px;color:var(--head);line-height:1.32;transition:color .2s}
#pkw .pub:hover .pub-title{color:var(--cyan-700)}

/* =========== responsive =========== */
@media(max-width:1240px){
  #pkw .hero-grid{grid-template-columns:1fr;gap:44px}
  #pkw .why-grid,#pkw .fiserv-quote,#pkw .trust-flow{grid-template-columns:1fr;gap:32px}
  #pkw .fiserv-cover{max-width:320px}
  #pkw .bento{grid-template-columns:1fr 1fr}
  #pkw .bento .feat{grid-column:span 2;grid-row:auto}
  #pkw .stat-grid{grid-template-columns:1fr 1fr}
  #pkw .persona-grid{grid-template-columns:1fr 1fr}
  #pkw .pub-grid{grid-template-columns:1fr 1fr}
  #pkw .flow{flex-direction:column;gap:44px}
  #pkw .flow-join{display:none}
  #pkw .cov-art{width:106%;right:-3%;top:-40px}
  #pkw .cov{margin-top:78px;max-width:520px}
  #pkw .flow-branch{flex-direction:row;width:auto;height:auto;padding-left:0;gap:16px}
  #pkw .flow-branch::before{display:none}
  #pkw .bstep{flex:1 1 0;min-width:0}
  #pkw .bstep::before{display:none}
  #pkw .branch-head{top:-26px;left:50%;transform:translateX(-50%)}
  #pkw .fcap{position:static;transform:none;width:auto;margin-top:12px}
  #pkw .fstep{width:auto;flex-direction:column}
  #pkw .pipe-io{flex-direction:column;align-items:flex-start;gap:12px;margin-top:24px}
}
@media(max-width:820px){
  #pkw .sec{padding:76px 0}
  #pkw .two-col,#pkw .prod-grid{grid-template-columns:1fr;gap:28px}
  #pkw .flow-branch{flex-direction:column;width:100%;max-width:360px}
  #pkw .bstep{flex:none}
  #pkw .branch-head{position:static;transform:none;text-align:left;margin-bottom:4px}
  #pkw .hero-copy{text-align:center}
  #pkw .hero-copy .hero-badge,#pkw .hero-copy .eyebrow{justify-content:center}
  #pkw .hero-cta{justify-content:center}
  #pkw .hero-stats{justify-content:center}
  #pkw .award{margin-left:auto;margin-right:auto}
  #pkw .two-col .reveal{text-align:center}
  #pkw .two-col .eyebrow{justify-content:center}
  #pkw .trust-flow{text-align:center}
  #pkw .trust-flow .eyebrow{justify-content:center}
  #pkw .trust-proof-l{max-width:none}
}
@media(max-width:560px){
  #pkw .bento,#pkw .stat-grid,#pkw .persona-grid{grid-template-columns:1fr}
  #pkw .pub-grid{grid-template-columns:1fr}
  #pkw .cov-stats{grid-template-columns:1fr}
  #pkw .hero-stats{flex-wrap:nowrap;gap:14px;align-items:flex-start}
  #pkw .hs{flex:0 1 auto}
  #pkw .hs-n{font-size:19px;white-space:nowrap}
  #pkw .hs-l{font-size:11px}
  #pkw .flow{gap:0;align-items:stretch}
  #pkw .flow-seq{flex-direction:column;gap:0;width:100%;align-items:stretch}
  #pkw .fconn{display:none}
  #pkw .fstep{width:100%;flex-direction:row;align-items:center;justify-content:flex-start;gap:16px;padding:14px 0}
  #pkw .fnode{flex:none}
  #pkw .fcap{text-align:left;margin-top:0;width:auto}
  #pkw .fcap b{margin-bottom:2px}
  #pkw .flow-branch{max-width:none;width:100%;gap:12px;margin:8px 0}
  #pkw .branch-head{margin-bottom:8px}
  #pkw .award .aw-t{font-size:16px}
  #pkw .award img{width:76px;height:76px}
}
@media(prefers-reduced-motion:reduce){
  #pkw *{animation:none!important;transition:none!important}
  #pkw .reveal{opacity:1!important;transform:none!important}
  #pkw .rise{opacity:1!important;transform:none!important}
  #pkw .cov{transform:none!important}
}

/* --------------------------------------------------------------------------
   pk27 GRID CSS DELIBERATELY NOT HERE - removed 2026-08-10.

   It was duplicated. pk27_styles() prints the same rules inline as
   <style id="pk27-styles"> the first time a [2027_Get_Posts] shortcode
   renders. Having both meant two sources of truth for one component, with the
   inline copy silently winning because it comes later in the document.

   That function lived in the theme's functions.php when this note was first
   written, then in inc/shortcodes.php. As of theme 1.5.0 it lives in the
   PKWARE Shortcodes plugin. So this is no longer a judgement call about where
   to put CSS - the rules are not the theme's to hold. Pasting them back here
   would resurrect the duplicate AND recouple the theme to a plugin.

   It matches pk27f_styles(), pk27e_styles() and pk27s_styles() - none of which
   were ever in this stylesheet, so all four shortcode families behave the same
   way.

   Why the plugin prints its own CSS rather than shipping a stylesheet: only a
   handful of pages use these shortcodes, so site-wide delivery made ~83 pages
   download ~2.4 KB they never used. pk27_styles() has a static guard and emits
   once per page, only where a grid actually renders. That choice is also what
   let the shortcodes move out cleanly - markup, behaviour and styles travel
   together.
   -------------------------------------------------------------------------- */



/* --- begin why-pk-protect (page 48094), ported 2026-08-11 --------------------

   Two logo strips for the platform-integration section. Second row runs the
   other way.

   THIS REPLACES 134 KB OF JAVASCRIPT. Production built these with jQuery
   (87,553 bytes) + Slick (42,862) + a 4,113-byte inline script that injected the
   logos with innerHTML and then called .slick() on each row. The Slick config it
   passed was:

       arrows:false  autoplay:true  autoplaySpeed:0  speed:5000
       cssEase:'linear'  pauseOnHover:true  rtl:isOpposite  infinite:true

   No arrows, no dots, no paging, no interaction - a continuous linear scroll
   that pauses on hover, with the second row reversed. That is a CSS marquee
   described in JavaScript, so it is now the marquee already in this stylesheet.
   The logos are authored into the markup instead of injected at runtime, which
   also means they are in the HTML for crawlers and for anyone with JS off.

   The Slick responsive breakpoints (slidesToShow 8/6/5/3/2) have no equivalent
   here and need none - they existed to recompute slide widths. A marquee just
   scrolls, and shows however many logos fit.
   -------------------------------------------------------------------------- */

#pkw .pk-plat .marquee-track { gap: 46px; animation-duration: 48s; }
#pkw .pk-plat--rev .marquee-track { animation-direction: reverse; }
#pkw .plat-img { height: 52px; width: auto; opacity: .9; transition: opacity .3s, transform .3s; }
#pkw .plat-img:hover { opacity: 1; transform: translateY(-2px); }

/* Reduced motion. A strip that never stops moving is a vestibular trigger, and
   Slick offered nothing here - this is a genuine improvement on what production
   does, not just a smaller version of it.

   The track is width:max-content with the logo set duplicated, so simply
   stopping the animation would leave a clipped row. Wrapping it instead keeps
   every logo reachable. */
@media (prefers-reduced-motion: reduce) {
  #pkw .marquee-track { animation: none; }
  #pkw .pk-plat .marquee-track { flex-wrap: wrap; justify-content: center; width: auto; row-gap: 22px; }
}
/* --- end why-pk-protect ---------------------------------------------------- */


/* --- begin stacked hero art, 2026-08-11 --------------------------------------
   Fixes the hero image on tablet: it was clipped, undersized, and crowding the
   CTA buttons.

   CAUSE. #pkw .cov-art is position:absolute with width:132%, right:-15% and
   top:-72px - deliberately overhanging its grid column in the desktop side-by-side
   layout. #pkw .cov-stage is only 'perspective + position:relative', so it has NO
   HEIGHT of its own; the art is meant to spill out of it and the row height comes
   from the copy column instead.

   That works while .hero-grid is two columns. At 1240px it collapses to 1fr, and
   the art is then absolutely positioned out of a zero-height block, pulled UPWARDS
   by its negative top, and clipped by #pkw .hero's overflow:hidden. Hence an image
   that overlaps the buttons above it and is cut off below.

   FIX. In the stacked range, let the art be a normal block: static position, full
   width, no negative offsets, and no bottom mask. It then gives .cov-stage real
   height, sits below the buttons with the grid gap between them, and is not clipped.

   perspective is dropped too - it exists for the 3D tilt of the desktop composition
   and does nothing useful once the art is a flat full-width block.

   Below 768px the whole container is display:none (see the block after this), so
   this range is effectively 769-1240px.
   -------------------------------------------------------------------------- */
@media (max-width: 1240px) {
  #pkw .cov-stage { perspective: none; }
  #pkw .cov-art {
    position: static;
    width: 100%;
    right: auto;
    top: auto;
    margin-top: 16px;
    -webkit-mask: none;
    mask: none;
  }
}
/* --- end stacked hero art -------------------------------------------------- */

/* --- begin mobile image suppression, 2026-08-11 -------------------------------
   Bob: "I want to remove these images on mobile only... These are extraneous as it
   is." Hides the two decorative image containers on phones:

     .cov-stage    the hero art panel
     .shot-frame   the browser-chrome screenshot frames

   768px because it is already a breakpoint in this file and it sits just under the
   820px where .two-col stacks - so between 768 and 820 the layout is stacked WITH
   the screenshot, and below 768 the screenshot goes. .hero-grid stacks at 1240px,
   so the hero art is stacked well before it disappears.

   NOTE ON THE SELECTORS. Bob supplied these from devtools as
   '.reveal.shot-frame.in' and '.cov-stage.rise.d3'. The extra classes are NOT part
   of the identity of these elements and are deliberately dropped here:
     .in       added at runtime by components.js when the IntersectionObserver fires
     .rise .d1-d5  hero entry-animation timing classes
   Matching on those would make the rule depend on whether an animation had run,
   which on a fast scroll or with reduced motion is a coin toss. Targeting
   .shot-frame and .cov-stage directly is what was actually meant.
   -------------------------------------------------------------------------- */
@media (max-width: 768px) {
  #pkw .cov-stage,
  #pkw .shot-frame { display: none; }
}
/* --- end mobile image suppression ------------------------------------------ */

/* --- begin battle cards, added 2026-08-11 ------------------------------------

   THE COMPETITOR COMPARISON PAGES. /pkware-vs-spirion, /pkware-vs-varonis,
   /pkware-vs-bigid, and any that follow.

   SPIRION IS THE CANONICAL DESIGN, NOT THE HOME PAGE. Bob, 2026-08-11: "I did not
   want these three pages to be modeled on the home page that I gave you, period. I
   wanted all three to be modeled exactly on the PKware versus Spirian version so
   that all formatting and styling would be consistent among these three cards."

   So this is spirion's own stylesheet, moved out of page content and renamed from
   .pks- to .pkbc-. RENDERED VALUES ARE UNTOUCHED - every colour, size and spacing
   computes to exactly what staging serves.

   TOKENISED 2026-08-12. The brand colours are now var(--pk-*) rather than literal
   hex: 80 declarations across six values - cyan, frost, navy, grey, coral, white.
   The values did not change; only how they are written. Verified by substituting
   every token back to its literal and diffing against the original block, which
   matched exactly. Comments keep their literals on purpose, so the palette this
   was ported from stays readable.

   Safe because all six are defined on :root, unconditionally, at the top level of
   this file, with exactly one value each site-wide. THAT IS THE PRECONDITION - a
   var() whose token is out of scope invalidates the entire declaration, silently.
   The breadcrumb block learned this the hard way: it used #pkw-scoped tokens while
   rendering outside #pkw, and every one of them was dead. Do NOT introduce a
   #pkw-scoped token here. --tx is exactly such a token, which is why #484848 is
   still a literal below rather than var(--tx).

   Still literal, with no :root equivalent: #E5E5E7 and #E4EAF2 (two near-identical
   border greys, one from spirion and one from varonis - unifying them is a visual
   decision, not a mechanical one), #484848 body text, #55489D purple, #6E6E73,
   #B5651D.

   Do NOT wrap these pages in #pkw. The rules below scope under .pkbc-page, which is
   how spirion's original scoped under .pks-page. Wrapping in #pkw would silently
   pull in the home page's design tokens, which is the thing being avoided.

   WHY THERE IS NO JAVASCRIPT. Bob: "I would always prefer to reuse JavaScript or CSS
   if it is ever possible." The three pages shipped ~4.7 KB of inline script between
   them doing a scroll fade and an FAQ accordion. assets/js/components.js already does
   both, so the FAQ and fade adopt the class names it listens for and the scripts are
   simply gone:

     .pks-faq__item      -> .faq-item        JS does closest('.faq-item'), toggles .open
     .pks-faq__q         -> .faq-q           JS click target, sets aria-expanded
     .pks-faq__a         -> .faq-a           JS sets style.maxHeight from scrollHeight
     .pks-faq__a-inner   -> .pkbc-faq__inner
     .pks-fade           -> .reveal          JS IntersectionObserver adds .in
     .pks-fade.is-visible-> .reveal.in

   That substitution only works because spirion's CSS was already shaped for exactly
   this: .pks-faq__a was max-height:0 / overflow:hidden / transition:max-height, and
   the +/- indicator is keyed on [aria-expanded="true"] - which the theme's JS sets.

   AND components.js HAS TO KNOW ABOUT .pkbc-page. An earlier version of this comment
   said its selectors were "global, not #pkw-scoped". That was wrong and it cost a
   render: the selector strings are unprefixed, but they were queried against
   getElementById('pkw'), behind an early return. On these pages #pkw does not exist,
   so the script bailed, .reveal never got .in, and all three cards rendered BLANK -
   opacity 0 from top to bottom. Fixed in 1.10.2 by giving the script both scopes.

   So the CSS below and assets/js/components.js are coupled. If .pkbc-page is ever
   renamed, the selector at the top of that file must change with it.

   THE TAIL OF THIS BLOCK is the handful of utilities only bigid and varonis had, with
   no spirion equivalent - btn-icon, the fade-dN stagger delays, matrix-wrap, narrow,
   cta. Per Bob: where those two have something spirion does not, their own treatment
   is the model. Taken from bigid's stylesheet, renamed the same way.
   -------------------------------------------------------------------------- */
/* ---------- RESET (scoped) ---------- */
.pkbc-page .pkbc-page,
.pkbc-page * { box-sizing: border-box; }
.pkbc-page { 
  font-family: 'Lato', sans-serif;
  color: #484848;
  line-height: 1.7;
  font-size: 20px;
  background: var(--pk-white);
}
.pkbc-page p { margin: 0 0 1.25em 0; }
.pkbc-page a { color: var(--pk-cyan); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color .15s ease; }
.pkbc-page a:hover { border-bottom-color: var(--pk-cyan); }
.pkbc-page ul, .pkbc-page ol { margin: 0 0 1.25em 1.25em; padding: 0; }
.pkbc-page li { margin-bottom: .5em; }

/* ---------- TYPOGRAPHY ---------- */
.pkbc-page .pkbc-h1 {
  font-family: Georgia, serif;
  font-size: 52px;
  line-height: 1.1;
  font-weight: 700;
  color: var(--pk-navy);
  margin: 0 0 .6em 0;
  letter-spacing: -0.01em;
}
.pkbc-page .pkbc-h2 {
  font-family: Georgia, serif;
  font-size: 46px;
  line-height: 1.2;
  font-weight: 700;
  color: var(--pk-navy);
  margin: 0 0 .6em 0;
  letter-spacing: -0.01em;
}
.pkbc-page .pkbc-h3 {
  font-family: Georgia, serif;
  font-size: 36px;
  line-height: 1.3;
  font-weight: 700;
  color: var(--pk-navy);
  margin: 0 0 .6em 0;
}
.pkbc-page .pkbc-h4 {
  font-family: Georgia, serif;
  font-size: 28px;
  line-height: 1.4;
  font-weight: 700;
  color: var(--pk-navy);
  margin: 0 0 .5em 0;
}
.pkbc-page .pkbc-eyebrow {
  display: inline-block;
  font-family: 'Lato', sans-serif;
  font-size: 20px;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--pk-cyan);
  margin: 0 0 24px 0;
  padding-bottom: 8px;
  border-bottom: 2px solid var(--pk-cyan);
}
.pkbc-page .pkbc-lead {
  font-size: 22px;
  line-height: 1.55;
  color: #484848;
  max-width: 760px;
}

/* ---------- LAYOUT ---------- */
/* Horizontal padding on --pk-edge, 2026-08-12, so the battle cards share one page inset
   with the header, breadcrumb and #pkw content instead of carrying their own 24px. On
   desktop it resolves to 0 and .pkbc-container's 1300px cap plus auto margins do the
   positioning - which is why these pages were already aligned with the header. Below
   1300px the cap stops binding and this becomes the only thing holding content off the
   window edge. Vertical rhythm is spirion's, untouched. */
.pkbc-page .pkbc-section {
  padding: 96px var(--pk-edge);
}
.pkbc-page .pkbc-section--hero { padding: 20px var(--pk-edge) 112px; }
.pkbc-page .pkbc-section--alt { background: var(--pk-grey); }
.pkbc-page .pkbc-section--dark { background: var(--pk-navy); }
.pkbc-page .pkbc-container {
  max-width: 1300px;
  margin: 0 auto;
}

/* ---------- BUTTONS (pill-shaped per brand) ---------- */
.pkbc-page .pkbc-btn {
  display: inline-block;
  font-family: 'Lato', sans-serif;
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 0.02em;
  padding: 16px 32px;
  border-radius: 999px;
  border: 2px solid transparent;
  cursor: pointer;
  transition: background .15s ease, color .15s ease, border-color .15s ease, transform .15s ease;
  text-align: center;
  line-height: 1.2;
}
.pkbc-page .pkbc-btn:hover { border-bottom: 2px solid transparent; }
.pkbc-page .pkbc-btn--primary {
  background: var(--pk-cyan);
  color: var(--pk-white);
}
.pkbc-page .pkbc-btn--primary:hover {
  background: var(--pk-navy);
  color: var(--pk-white);
  border-color: var(--pk-navy);
}
.pkbc-page .pkbc-btn--green {
  background: var(--pk-frost);
  color: var(--pk-navy);
}
.pkbc-page .pkbc-btn--green:hover {
  background: var(--pk-white);
  color: var(--pk-navy);
}
.pkbc-page .pkbc-btn--outline {
  background: transparent;
  color: var(--pk-navy);
  border-color: var(--pk-navy);
}
.pkbc-page .pkbc-btn--outline:hover {
  background: var(--pk-cyan);
  color: var(--pk-white);
  border-color: var(--pk-cyan);
}
.pkbc-page .pkbc-btn--text {
  background: transparent;
  color: var(--pk-navy);
  padding: 16px 8px;
  border-radius: 0;
  border: none;
  border-bottom: 2px solid var(--pk-navy);
}
.pkbc-page .pkbc-btn--text:hover {
  color: var(--pk-cyan);
  border-bottom-color: var(--pk-cyan);
}
.pkbc-page .pkbc-btn-row {
  display: flex;
  gap: 20px;
  flex-wrap: wrap;
  align-items: center;
  margin-top: 8px;
}

/* ---------- HERO ---------- */
.pkbc-page .pkbc-hero__intro { max-width: 920px; margin-bottom: 64px; }
.pkbc-page .pkbc-hero__sub {
  font-size: 22px;
  line-height: 1.55;
  color: #484848;
  max-width: 760px;
  margin-bottom: 40px;
}
.pkbc-page .pkbc-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 48px;
  margin-top: 80px;
  border-top: 1px solid #E5E5E7;
  padding-top: 56px;
}
.pkbc-page .pkbc-stat__num {
  font-family: Georgia, serif;
  font-size: 56px;
  line-height: 1;
  font-weight: 700;
  color: var(--pk-navy);
  display: block;
  margin-bottom: 16px;
}
.pkbc-page .pkbc-stat__label {
  font-size: 17px;
  line-height: 1.5;
  color: #484848;
}

/* ---------- PROBLEM CARDS ---------- */
.pkbc-page .pkbc-card-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 40px;
  margin: 56px 0;
}
.pkbc-page .pkbc-card {
  padding: 40px;
  background: var(--pk-white);
  border: 1px solid #E5E5E7;
}
.pkbc-page .pkbc-section--alt .pkbc-card { background: var(--pk-white); }
.pkbc-page .pkbc-card__label {
  font-family: 'Lato', sans-serif;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--pk-cyan);
  margin-bottom: 16px;
}
.pkbc-page .pkbc-card__title {
  font-family: Georgia, serif;
  font-size: 24px;
  line-height: 1.3;
  font-weight: 700;
  color: var(--pk-navy);
  margin-bottom: 16px;
}
.pkbc-page .pkbc-callout {
  margin-top: 24px;
  padding: 40px;
  border-left: 4px solid var(--pk-cyan);
  background: var(--pk-white);
}
.pkbc-page .pkbc-section--alt .pkbc-callout { background: var(--pk-white); }
.pkbc-page .pkbc-callout p { font-size: 22px; line-height: 1.55; color: var(--pk-navy); margin: 0; }

/* ---------- MATRIX TABLE ---------- */
.pkbc-page .pkbc-matrix-intro { max-width: 800px; margin-bottom: 56px; }
.pkbc-page .pkbc-matrix-group { margin-bottom: 56px; }
.pkbc-page .pkbc-matrix-group__title {
  font-family: Georgia, serif;
  font-size: 22px;
  font-weight: 700;
  color: var(--pk-navy);
  margin-bottom: 16px;
  padding-bottom: 8px;
  border-bottom: 2px solid var(--pk-cyan);
}
.pkbc-page .pkbc-matrix {
  width: 100%;
  border-collapse: collapse;
  font-size: 17px;
}
.pkbc-page .pkbc-matrix thead th {
  text-align: left;
  font-family: 'Lato', sans-serif;
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--pk-navy);
  padding: 18px 20px;
  border-bottom: 2px solid var(--pk-navy);
  background: transparent;
}
.pkbc-page .pkbc-matrix thead th:nth-child(2),
.pkbc-page .pkbc-matrix thead th:nth-child(3) {
  text-align: center;
  width: 160px;
}
.pkbc-page .pkbc-matrix thead th .pkbc-col-badge {
  display: inline-block;
  padding: 6px 14px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.08em;
}
.pkbc-page .pkbc-matrix thead th .pkbc-col-badge--pk {
  background: var(--pk-frost);
  color: var(--pk-navy);
}
.pkbc-page .pkbc-matrix thead th .pkbc-col-badge--rival {
  background: var(--pk-grey);
  color: var(--pk-navy);
}
.pkbc-page .pkbc-matrix tbody tr { border-bottom: 1px solid #E5E5E7; }
.pkbc-page .pkbc-matrix tbody td {
  padding: 20px;
  vertical-align: middle;
  color: #484848;
  line-height: 1.5;
}
.pkbc-page .pkbc-matrix tbody td:nth-child(2),
.pkbc-page .pkbc-matrix tbody td:nth-child(3) {
  text-align: center;
  font-weight: 700;
  font-size: 22px;
}
.pkbc-page .pkbc-matrix .pkbc-yes { color: var(--pk-frost); font-size: 26px; line-height: 1; }
.pkbc-page .pkbc-matrix .pkbc-no { color: var(--pk-coral); font-size: 26px; line-height: 1; }
.pkbc-page .pkbc-matrix .pkbc-partial {
  display: inline-block;
  font-size: 14px;
  letter-spacing: 0.05em;
  font-weight: 700;
  color: #B5651D;
  text-transform: uppercase;
}

.pkbc-page .pkbc-matrix-footnote {
  font-size: 15px;
  line-height: 1.6;
  color: #6E6E73;
  margin-top: 40px;
  max-width: 900px;
  font-style: italic;
}

.pkbc-page .pkbc-note {
  margin-top: 64px;
  padding: 48px;
  background: var(--pk-white);
  border: 1px solid #E5E5E7;
  border-left: 4px solid #55489D;
}
.pkbc-page .pkbc-section--alt .pkbc-note { background: var(--pk-white); }
.pkbc-page .pkbc-note__label {
  font-family: 'Lato', sans-serif;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: #55489D;
  margin-bottom: 16px;
}
.pkbc-page .pkbc-note__title {
  font-family: Georgia, serif;
  font-size: 28px;
  font-weight: 700;
  color: var(--pk-navy);
  margin-bottom: 24px;
  line-height: 1.3;
}

/* ---------- COMPLIANCE CARDS ---------- */
.pkbc-page .pkbc-compliance-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 32px;
  margin-top: 56px;
}
.pkbc-page .pkbc-compliance-card {
  padding: 40px;
  background: var(--pk-white);
  border: 1px solid #E5E5E7;
}
.pkbc-page .pkbc-section--alt .pkbc-compliance-card { background: var(--pk-white); }
.pkbc-page .pkbc-compliance-card__framework {
  font-family: 'Lato', sans-serif;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--pk-cyan);
  margin-bottom: 12px;
}
.pkbc-page .pkbc-compliance-card__rule {
  font-family: Georgia, serif;
  font-size: 22px;
  font-weight: 700;
  color: var(--pk-navy);
  line-height: 1.3;
  margin-bottom: 20px;
}
.pkbc-page .pkbc-compliance-card p {
  font-size: 17px;
  line-height: 1.6;
}

/* ---------- ARGUMENT NARRATIVE ---------- */
.pkbc-page .pkbc-argument {
  max-width: 800px;
}
.pkbc-page .pkbc-argument p { font-size: 20px; line-height: 1.7; margin-bottom: 1.5em; }
.pkbc-page .pkbc-argument .pkbc-pullout {
  font-family: Georgia, serif;
  font-size: 28px;
  font-weight: 700;
  color: var(--pk-navy);
  line-height: 1.3;
  margin: 1.5em 0;
  padding-left: 32px;
  border-left: 4px solid var(--pk-cyan);
}

/* ---------- STEPS (Evaluation) ---------- */
.pkbc-page .pkbc-steps {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 40px;
  margin-top: 56px;
}
.pkbc-page .pkbc-step__num {
  font-family: Georgia, serif;
  font-size: 18px;
  font-weight: 700;
  color: var(--pk-cyan);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 16px;
}
.pkbc-page .pkbc-step__title {
  font-family: Georgia, serif;
  font-size: 26px;
  font-weight: 700;
  color: var(--pk-navy);
  margin-bottom: 16px;
  line-height: 1.3;
}
.pkbc-page .pkbc-step p { font-size: 17px; line-height: 1.6; margin: 0; }

/* ---------- FAQ ACCORDION ---------- */
.pkbc-page .pkbc-faq { margin-top: 56px; max-width: 920px; }
.pkbc-page .faq-item { border-bottom: 1px solid #E5E5E7; }
.pkbc-page .faq-item:first-child { border-top: 1px solid #E5E5E7; }
.pkbc-page .faq-q {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 24px;
  padding: 28px 0;
  background: none;
  border: none;
  font-family: Georgia, serif;
  font-size: 22px;
  font-weight: 700;
  color: var(--pk-navy);
  text-align: left;
  cursor: pointer;
  line-height: 1.3;
  font-style: normal;
}
.pkbc-page .faq-q:hover { color: var(--pk-cyan); }
.pkbc-page .faq-q::after {
  content: "+";
  display: inline-block;
  font-family: 'Lato', sans-serif;
  font-size: 32px;
  font-weight: 400;
  color: var(--pk-cyan);
  line-height: 1;
  flex-shrink: 0;
  transition: transform .2s ease;
}
.pkbc-page .faq-q[aria-expanded="true"]::after { content: "−"; }
.pkbc-page .faq-a {
  max-height: 0;
  overflow: hidden;
  transition: max-height .3s ease;
}
.pkbc-page .pkbc-faq__inner {
  padding: 0 0 28px 0;
  max-width: 800px;
  font-size: 18px;
  line-height: 1.7;
  color: #484848;
}

/* ---------- DARK CTA ---------- */
.pkbc-page .pkbc-section--dark .pkbc-h2,
.pkbc-page .pkbc-section--dark .pkbc-eyebrow { color: var(--pk-white); }
.pkbc-page .pkbc-section--dark .pkbc-eyebrow { border-bottom-color: var(--pk-frost); color: var(--pk-frost); }
.pkbc-page .pkbc-section--dark p { color: rgba(255,255,255,0.88); }
.pkbc-page .pkbc-section--dark .pkbc-cta-text {
  font-size: 22px;
  line-height: 1.55;
  max-width: 760px;
  margin-bottom: 40px;
}
.pkbc-page .pkbc-section--dark .pkbc-cta-footnote {
  font-size: 15px;
  color: rgba(255,255,255,0.7);
  margin-top: 24px;
}

/* ---------- ANIMATION (scroll fade-in) ---------- */
.pkbc-page .reveal {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity .5s ease-out, transform .5s ease-out;
}
.pkbc-page .reveal.in {
  opacity: 1;
  transform: translateY(0);
}
@media (prefers-reduced-motion: reduce) {
  .pkbc-page .reveal { opacity: 1; transform: none; transition: none; }
}

/* ---------- RESPONSIVE ---------- */
@media (max-width: 980px) {
  .pkbc-page .pkbc-h1 { font-size: 40px; }
  .pkbc-page .pkbc-h2 { font-size: 34px; }
  .pkbc-page .pkbc-h3 { font-size: 28px; }
  .pkbc-page .pkbc-section { padding: 72px var(--pk-edge); }
  /* Top padding cut 80px -> 26px, 2026-08-12. Spirion authored 80px for a page with
     NO breadcrumb above it; with one, it renders as a tall empty white band between
     the crumbs and the eyebrow on a phone. 26px is not arbitrary - it is the value
     #pkw .hero already uses at 640px for exactly this problem, so the two families
     now agree instead of differing 3x. Bottom stays 80px (desktop is 112px). */
  .pkbc-page .pkbc-section--hero { padding: 26px var(--pk-edge) 80px; }
  .pkbc-page .pkbc-card-grid,
  .pkbc-page .pkbc-compliance-grid,
  .pkbc-page .pkbc-steps { grid-template-columns: 1fr; gap: 24px; }
  .pkbc-page .pkbc-stats { grid-template-columns: 1fr; gap: 32px; padding-top: 40px; margin-top: 56px; }
  .pkbc-page .pkbc-stat__num { font-size: 44px; }
  .pkbc-page .pkbc-matrix { font-size: 15px; }
  .pkbc-page .pkbc-matrix thead th { padding: 14px 12px; font-size: 11px; }
  .pkbc-page .pkbc-matrix tbody td { padding: 14px 12px; }
  .pkbc-page .pkbc-matrix thead th:nth-child(2),
  .pkbc-page .pkbc-matrix thead th:nth-child(3) { width: 90px; }
  .pkbc-page .pkbc-note,
  .pkbc-page .pkbc-card,
  .pkbc-page .pkbc-compliance-card,
  .pkbc-page .pkbc-callout { padding: 28px; }
  .pkbc-page .pkbc-argument p,
  .pkbc-page .pkbc-argument .pkbc-pullout { font-size: 18px; }
  .pkbc-page .pkbc-argument .pkbc-pullout { font-size: 22px; padding-left: 20px; }
  .pkbc-page .faq-q { font-size: 18px; padding: 22px 0; }
  .pkbc-page .pkbc-hero__sub,
  .pkbc-page .pkbc-section--dark .pkbc-cta-text { font-size: 18px; }
}
.pkbc-page span.pkbc-stat__num.pkbc-frost {
    color: var(--pk-frost);
}

/* ---- utilities present only on bigid and varonis ---------------------------
   bigid declared a --pkv-* custom-property layer; spirion does not - it uses 83
   literal hex values and zero var(). Rather than import a token system the canonical
   design does not use, bigid's tokens are resolved to their literal values here:
     --pkv-navy #1E3074   --pkv-cyan #09BCEF   --pkv-frost #0FE4A2
     --pkv-white #FFFFFF  --pkv-border #E4EAF2
   Same rendered result, one convention instead of two.
   -------------------------------------------------------------------------- */
.pkbc-page .pkbc-cta .pkbc-btn--green { background: var(--pk-frost); color: var(--pk-navy); padding: 20px 40px; font-size: 15px; }
.pkbc-page .pkbc-cta .pkbc-btn--green:hover { background: var(--pk-white); color: var(--pk-navy); }
.pkbc-page .pkbc-cta .pkbc-eyebrow { color: var(--pk-frost); }
.pkbc-page .pkbc-cta .pkbc-eyebrow::before { background: var(--pk-frost); }
.pkbc-page .pkbc-cta { padding: 72px 0; }
.pkbc-page .pkbc-cta h2 { color: var(--pk-white); max-width: 820px; }
.pkbc-page .pkbc-cta p.pkbc-cta-text { color: rgba(255,255,255,0.85); font-size: 19px; max-width: 620px; margin-bottom: 36px; }
.pkbc-page .pkbc-cta p.pkbc-cta-footnote { color: rgba(255,255,255,0.85); font-size: 15px; margin-top: 20px; line-height: 1.5; }
.pkbc-page .reveal.pkbc-d1 { transition-delay: 0.08s; }
.pkbc-page .reveal.pkbc-d2 { transition-delay: 0.16s; }
.pkbc-page .reveal.pkbc-d3 { transition-delay: 0.24s; }
.pkbc-page .pkbc-narrow { max-width: 820px; }
.pkbc-page .pkbc-btn-icon { color: var(--pk-navy); font-weight: 700; font-size: 15px; letter-spacing: 0.02em;
  text-transform: none; padding: 16px 0; border-bottom: 2px solid var(--pk-navy); border-radius: 0;
  display: inline-flex; align-items: center; gap: 8px; }
.pkbc-page .pkbc-btn-icon:hover { color: var(--pk-cyan); border-color: var(--pk-cyan); }
/* ---------- CTA ---------- */
.pkbc-page .pkbc-cta { background: var(--pk-navy); padding: 112px 0; }
/* ---------- MATRIX ---------- */
.pkbc-page .pkbc-matrix td.pkbc-cell-c { text-align: center; }
.pkbc-page .pkbc-matrix-wrap { overflow-x: auto; border: 1px solid #E4EAF2; margin-bottom: 24px; }

/* Matrix group header ROW. varonis and bigid put their capability groups in one table
   with a full-width header row; spirion instead uses a separate .pkbc-matrix-group
   div plus an h3 per group. There is no spirion equivalent, so per Bob these two keep
   their own treatment - values lifted from varonis with --pkv-* resolved to literals.

   It needs a distinct class from .pkbc-matrix-group. The first version reused that
   name, which put a container's `margin` on a <tr> - where margin does not apply -
   and the row rendered completely unstyled. Same class, two different structural
   roles, is exactly the collision this vocabulary exists to prevent. */
.pkbc-page .pkbc-matrix tbody tr.pkbc-matrix-grouprow td {
  background: var(--pk-grey); padding: 12px 24px; font-family: 'Lato', sans-serif;
  font-size: 11px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--pk-navy); border-bottom: 1px solid #E4EAF2;
}
/* --- end battle cards ------------------------------------------------------ */

/* --- begin breadcrumbs (inc/breadcrumbs.php), added 2026-08-11 ---------------
   Rendered by the THEME, above the content, so it lives OUTSIDE the #pkw wrapper.

   THAT IS THE WHOLE REASON THIS BLOCK LOOKS THE WAY IT DOES. Read before editing.

   The first version of this used --gutter, --bg-2, --brd, --tx-2, --tx-3, --head
   and --cyan-700. Every one of those is defined on #pkw, not :root. Outside #pkw
   they resolve to nothing, and a var() with no fallback makes the whole declaration
   invalid - so 'padding: 12px var(--gutter)' silently became no padding at all and
   the trail sat hard against the left edge, unstyled.

   Checking that a token is DEFINED is not enough. It has to be in SCOPE. So:

     - colours come from the :root --pk-* palette, which is always in scope
     - layout keeps the #pkw names but carries a literal fallback, so it matches the
       content container today and would still track it if those tokens ever move to
       :root

   --maxw is 1240px and --gutter 26px on #pkw; the fallbacks mirror them exactly so
   the trail lines up with .wrap rather than being inset by 20px.
   -------------------------------------------------------------------------- */
/* No background and no bottom border, per Bob - it read as a grey bar with an <hr>
   under it. The trail now sits on the page with only whitespace separating it from
   the hero. margin-bottom stays: the hero carries padding-top:0, so without it the
   badge pill butts straight against the trail.

   Brand colours, all three from the :root palette:
     links        --pk-navy
     hover/focus  --pk-frost
     current page --pk-cyan

   The underline on hover is kept deliberately. --pk-frost is #0fe4a2, which is about
   1.8:1 on white - not readable on its own - so the underline is what actually
   signals the hover, with the colour as reinforcement rather than the only cue. */
/* Bob's values, 2026-08-12, applied globally. The negative top margin pulls the
   breadcrumb up toward the header rather than letting it sit in its own band. Note
   the 640px block below still zeroes margin-bottom, so on mobile this is
   -30px top / 0 bottom - the top pull carries into mobile because only the bottom
   is overridden. */
.pk-crumbs { margin-bottom: 10px; margin-top: -30px; }
/* ALIGNED TO THE HEADER, 2026-08-12, at Bob's request: "can they left align with the
   header please?"

   It was max-width var(--maxw, 1240px) with padding 12px var(--gutter, 26px), which put
   its left edge 56px right of the logo at any viewport >= 1300px:

       header left edge     (V - 1300) / 2
       crumbs left edge     (V - 1240) / 2 + 26
       difference           30 + 26 = 56px

   The horizontal inset comes from --pk-edge, shared with .pk-header__inner and
   #pkw .wrap, so the three cannot drift apart. Only the VERTICAL padding is local to
   the breadcrumb. Do not hardcode a horizontal value here. */
.pk-crumbs__wrap { max-width: calc(1300px + 2 * var(--pk-edge)); margin: 0 auto; padding: 12px var(--pk-edge); }
.pk-crumbs__list { display: flex; flex-wrap: wrap; align-items: center; margin: 0; padding: 0; list-style: none; font-size: var(--pk-text-sm); line-height: var(--pk-leading-snug); }
.pk-crumbs__item { display: inline-flex; align-items: center; color: var(--pk-navy); }
.pk-crumbs__item + .pk-crumbs__item::before { content: '>'; margin: 0 9px; color: var(--pk-navy); opacity: .45; }
.pk-crumbs__item a { color: var(--pk-navy); text-decoration: none; }
.pk-crumbs__item a:hover, .pk-crumbs__item a:focus-visible { color: var(--pk-frost); text-decoration: underline; }
.pk-crumbs__item--current { color: var(--pk-cyan); font-weight: var(--pk-weight-bold); }

@media (max-width: 640px) {
  .pk-crumbs { margin-bottom: 0; }
  /* Vertical tighten only. The horizontal value stays on --pk-edge - a literal here
     is what broke alignment on tablets before. */
  .pk-crumbs__wrap { padding: 10px var(--pk-edge); }
  .pk-crumbs__list { font-size: var(--pk-text-xs); }

  /* On mobile the hero badge pill needs room to breathe. #pkw .hero carries
     padding-top:0 by Bob's setting, which is right on desktop where the pill has the
     full section to itself - but at this width the pill ends up crowded under the
     breadcrumb. Giving the space to the HERO rather than the breadcrumb keeps it
     inside the hero's background, so the gap is part of the panel instead of a white
     strip above it. The breadcrumb's own margin drops to 0 here to compensate. */
  #pkw .hero { padding-top: 26px; }
}

/* --- end breadcrumbs ------------------------------------------------------- */

/* ==========================================================================
   9. SITE FOOTER
   --------------------------------------------------------------------------
   PORTED FROM PRODUCTION - 2026-08-10.
   Source: incoming/global-footer/global-footer.css

   Footer variant: GLOBAL. Markup: template-parts/footer-global.php.
   Behaviour: assets/js/footer.js (mobile accordion only).

   Desktop and tablet layouts are pure CSS. The group headings are <button>
   elements made inert above 768px with pointer-events: none, so no breakpoint
   check is needed in JavaScript.

   CHANGES FROM THE SOURCE FILE
   ---------------------------------------------------------------------------
   1. Four local custom properties deleted because they redeclared section 3
      tokens with identical values: --pk-navy, --pk-cyan, --pk-frost,
      --pk-white. They now inherit from :root. Note that --pk-navy and
      --pk-frost were declared but never referenced in this block.
   2. The .pk-sr rule was removed - it was declared identically here and in
      section 7. One definition now lives in section 11 with the other
      screen-reader utility.
   3. A source comment describing the Avada wrapper this used to sit inside was
      rewritten to name the partial instead.

   --pk-max IS LEFT LITERAL AT 1300px ON PURPOSE. It does not match
   --pk-container-max (1200px), so aliasing it would silently narrow the footer.

   KNOWN EXCEPTION TO THE PALETTE RULE
   ---------------------------------------------------------------------------
   The background gradient uses #314593 and #0c132c, and the search field uses
   #292929, #6b7280 and #000. None are in the brand palette. Left verbatim for
   the same reason as sections 7 and 8: rewriting production colours by eye
   during a port makes a porting mistake indistinguishable from a deliberate
   change. The rgba(255,255,255,...) values are white at alpha and are
   palette-consistent in intent.
   ========================================================================== */

/* ============================================================
   PKWARE footer - single responsive tree
   Rendered by template-parts/footer-global.php
   Desktop: brand column + 4-column link grid (2 rows)
   Tablet:  brand full width + 2-column link grid
   Mobile:  brand full width + collapsible link groups
   ============================================================ */

.pk-footer {
  /* palette */

  /* semantic */
  --pk-fg:        rgba(255,255,255,.86);
  --pk-fg-strong: #ffffff;
  --pk-fg-hover:  var(--pk-cyan);
  --pk-rule:      rgba(255,255,255,.16);
  --pk-chip-bg:   rgba(255,255,255,.07);

  /* metrics */
  --pk-max:       1300px;
  --pk-pad-x:     20px;
  --pk-logo-w:    186px;

  position: relative;
  background: radial-gradient(circle at center top, #314593 0%, #0c132c 100%);
  color: var(--pk-fg);
  font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-size: 16px;
  line-height: 1.6;
}
.pk-footer *, .pk-footer *::before, .pk-footer *::after { box-sizing: border-box; }

.pk-footer a { color: var(--pk-fg); text-decoration: none; transition: color .15s ease; }
.pk-footer a:hover, .pk-footer a:focus-visible { color: var(--pk-fg-hover); }

.pk-footer ul { list-style: none; margin: 0; padding: 0; }
.pk-footer p  { margin: 0; }

/* ---------- shell ---------- */
.pk-footer__inner {
  max-width: var(--pk-max);
  margin: 0 auto;
  padding: 64px var(--pk-pad-x) 48px;
  display: grid;
  grid-template-columns: minmax(240px, 1fr) 3fr;
  gap: 48px;
}

/* ---------- brand column ---------- */
.pk-footer__logo { display: block; line-height: 0; margin-bottom: 22px; }
.pk-footer__logo img { width: var(--pk-logo-w); max-width: 100%; height: auto; display: block; }

.pk-footer__blurb { font-size: 15px; line-height: 1.65; max-width: 34ch; }

/* search: one form, real submit button */
.pk-footer__search {
  display: flex;
  align-items: stretch;
  gap: 0;
  margin: 26px 0 0;
  max-width: 320px;
  background: var(--pk-white);
  border-radius: 200px;
  overflow: hidden;
}
.pk-footer__search-input {
  flex: 1 1 auto;
  min-width: 0;
  padding: 12px 6px 12px 18px;
  font: inherit;
  font-size: 15px;
  color: #292929;
  background: transparent;
  border: 0;
}
.pk-footer__search-input::placeholder { color: #6b7280; }
.pk-footer__search-input:focus { outline: 0; }
.pk-footer__search:focus-within { box-shadow: 0 0 0 2px var(--pk-cyan); }

.pk-footer__search-btn {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 46px;
  margin: 4px;
  padding: 0;
  color: #000;
  background: var(--pk-cyan);
  border: 0;
  border-radius: 200px;
  cursor: pointer;
  transition: filter .15s ease;
}
.pk-footer__search-btn svg { fill: currentColor; }
.pk-footer__search-btn:hover { filter: brightness(.92); }

.pk-footer__follow {
  margin: 34px 0 14px;
  font-size: 21px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--pk-fg-strong);
}

.pk-footer__social {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: var(--pk-chip-bg);
  border-radius: 10px;
}
.pk-footer__social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px; height: 34px;
  color: var(--pk-fg-strong);
  border-radius: 8px;
  transition: color .15s ease, background .15s ease;
}
.pk-footer__social svg { fill: currentColor; }
.pk-footer__social a:hover,
.pk-footer__social a:focus-visible {
  color: var(--pk-cyan);
  background: rgba(255,255,255,.10);
}

/* ---------- link grid ---------- */
.pk-footer__links {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 40px 28px;
  align-content: start;
}

.pk-footer__heading {
  margin: 0 0 12px;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--pk-fg-strong);
}
/* the button is only a control on mobile; inert text on larger screens */
.pk-footer__toggle {
  display: block;
  width: 100%;
  padding: 0;
  font: inherit;
  color: inherit;
  text-align: left;
  background: none;
  border: 0;
  cursor: default;
  pointer-events: none;
}

.pk-footer__group ul li + li { margin-top: 7px; }
.pk-footer__group a { font-size: 15px; }

/* ---------- bottom bar ---------- */
.pk-footer__bottom { border-top: 1px solid var(--pk-rule); }
.pk-footer__bottom-inner {
  max-width: var(--pk-max);
  margin: 0 auto;
  padding: 22px var(--pk-pad-x);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  flex-wrap: wrap;
}
.pk-footer__copy  { font-size: 15px; }
.pk-footer__legal { display: flex; gap: 22px; }
.pk-footer__legal a { font-size: 15px; }

/* ============================================================
   TABLET - 1200px and below: brand full width, 2-column links
   ============================================================ */
@media (max-width: 1200px) {
  .pk-footer__inner {
    grid-template-columns: 1fr;
    gap: 44px;
    padding: 52px var(--pk-pad-x) 40px;
  }
  .pk-footer__blurb { max-width: 62ch; }
  .pk-footer__links { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 34px 32px; }
}

/* ============================================================
   MOBILE - 768px and below: collapsible link groups
   ============================================================ */
@media (max-width: 768px) {
  .pk-footer__inner { padding: 40px var(--pk-pad-x) 28px; gap: 34px; }
  .pk-footer__links { grid-template-columns: 1fr; gap: 0; }

  .pk-footer__group { border-bottom: 1px solid var(--pk-rule); }
  .pk-footer__group:first-child { border-top: 1px solid var(--pk-rule); }

  .pk-footer__heading { margin: 0; }

  .pk-footer__toggle {
    position: relative;
    padding: 16px 44px 16px 0;
    cursor: pointer;
    pointer-events: auto;
  }
  .pk-footer__toggle::before,
  .pk-footer__toggle::after {
    content: "";
    position: absolute;
    right: 14px; top: 50%;
    width: 13px; height: 2px;
    background: currentColor;
    transform: translateY(-50%);
    transition: transform .2s ease, opacity .2s ease;
  }
  .pk-footer__toggle::after { transform: translateY(-50%) rotate(90deg); }
  .pk-footer__toggle[aria-expanded="true"]::after { transform: translateY(-50%) rotate(0deg); opacity: 0; }

  .pk-footer__group ul { display: none; padding: 0 0 16px; }
  .pk-footer__group.is-open ul { display: block; }
  .pk-footer__group ul li + li { margin-top: 10px; }
  .pk-footer__group a { display: block; padding: 3px 0; }

  .pk-footer__search { max-width: none; }
  .pk-footer__follow { margin-top: 28px; font-size: 19px; }

  .pk-footer__bottom-inner {
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
    padding: 20px var(--pk-pad-x);
  }
}

@media (max-width: 480px) {
  .pk-footer { --pk-logo-w: 156px; --pk-pad-x: 16px; }
  .pk-footer__blurb { font-size: 14px; }
  .pk-footer__legal { gap: 16px; }
}

@media (prefers-reduced-motion: reduce) {
  .pk-footer, .pk-footer * { transition: none !important; }
}
/* ==========================================================================
   10. UTILITIES
   ========================================================================== */

.pk-bg-navy { background-color: var(--pk-navy); color: var(--pk-white); }
.pk-bg-grey { background-color: var(--pk-grey); }
.pk-bg-deep-purple { background-color: var(--pk-deep-purple); color: var(--pk-white); }

.pk-text-navy { color: var(--pk-navy); }
.pk-text-slate { color: var(--pk-slate); }
.pk-text-white { color: var(--pk-white); }

.pk-text-center { text-align: center; }
.pk-text-start { text-align: start; }

.pk-mt-0 { margin-block-start: 0; }
.pk-mb-0 { margin-block-end: 0; }
.pk-section { padding-block: var(--pk-space-2xl); }

.pk-flow > * + * { margin-block-start: var(--pk-space-sm); }

.pk-radius-md { border-radius: var(--pk-radius-md); }
.pk-shadow-md { box-shadow: var(--pk-shadow-md); }

/* Deferred reveal. deferred.js sets opacity to 1 when the element enters the
   viewport. The transition lives here so the script stays behavioural only. */
.deferred-container {
	opacity: 0;
	transition: opacity var(--pk-duration-slow) var(--pk-ease);
}


/* --- WordPress content classes -------------------------------------------
 *
 * These are emitted by WORDPRESS, not by hand-authored markup, and they are the
 * reason this block exists at all. It looks like block-theme boilerplate; it is
 * not.
 *
 * The theme runs the CLASSIC editor. The moment anyone uses Add Media and picks an
 * alignment or types a caption, the editor writes .alignleft / .aligncenter /
 * .wp-caption / .wp-caption-text into the content. Marking a post sticky adds
 * .sticky via post_class(). Without these rules that output renders unstyled -
 * captions as loose paragraphs, alignments ignored.
 *
 * Verified before adding: none of these eight class names appear anywhere else in
 * this stylesheet or in the ported page content, so there is nothing to collide
 * with. In particular .sticky is safe - the header uses the position: sticky
 * DECLARATION, never a .sticky selector.
 * ------------------------------------------------------------------------- */

.alignleft {
	float: left;
	margin-block-end: var(--pk-space-sm);
	margin-inline-end: var(--pk-space-md);
}

.alignright {
	float: right;
	margin-block-end: var(--pk-space-sm);
	margin-inline-start: var(--pk-space-md);
}

.aligncenter {
	clear: both;
	display: block;
	margin-inline: auto;
	margin-block-end: var(--pk-space-sm);
}

.alignnone {
	margin-block-end: var(--pk-space-sm);
}

/* Captions. The editor wraps an image and its caption in .wp-caption with an
   inline width, so max-width keeps it from overflowing a narrow column. */
.wp-caption {
	margin-block-end: var(--pk-space-md);
	max-width: 100%;
}

.wp-caption img {
	display: block;
	height: auto;
	max-width: 100%;
}

.wp-caption-text,
.gallery-caption {
	color: var(--pk-slate);
	font-size: var(--pk-text-sm);
	line-height: var(--pk-leading-snug);
	margin-block-start: var(--pk-space-3xs);
	text-align: center;
}

/* Sticky posts. post_class() adds this on archive listings. Kept subtle - a left
   rule rather than a background, so it reads as emphasis not as an alert. */
.sticky {
	border-inline-start: 3px solid var(--pk-color-accent);
	padding-inline-start: var(--pk-space-sm);
}

/* Galleries. The classic editor emits .gallery with .gallery-item children and a
   gallery-columns-N class; this makes them a grid rather than floats. */
.gallery {
	display: grid;
	gap: var(--pk-space-sm);
	margin-block-end: var(--pk-space-md);
}

.gallery-columns-2 { grid-template-columns: repeat(2, 1fr); }
.gallery-columns-3 { grid-template-columns: repeat(3, 1fr); }
.gallery-columns-4 { grid-template-columns: repeat(4, 1fr); }
.gallery-columns-5 { grid-template-columns: repeat(5, 1fr); }

.gallery-item img {
	display: block;
	height: auto;
	width: 100%;
}

@media (max-width: 640px) {

	.gallery-columns-3,
	.gallery-columns-4,
	.gallery-columns-5 {
		grid-template-columns: repeat(2, 1fr);
	}

	/* Floats in a narrow column produce unreadable text wraps. */
	.alignleft,
	.alignright {
		float: none;
		display: block;
		margin-inline: auto;
	}
}


/* ==========================================================================
   11. ACCESSIBILITY
   ========================================================================== */

.skip-link {
	background-color: var(--pk-navy);
	color: var(--pk-white);
	inset-block-start: -100%;
	inset-inline-start: var(--pk-space-2xs);
	padding: var(--pk-space-2xs) var(--pk-space-sm);
	position: absolute;
	text-decoration: none;
	z-index: var(--pk-z-skiplink);
}

.skip-link:focus {
	inset-block-start: var(--pk-space-2xs);
}

/* .pk-sr - the ported header and footer markup uses this name for the same
   thing. Defined once here rather than in both component blocks, so it
   survives swapping either variant out. */
.pk-sr,
.screen-reader-text {
	border: 0;
	clip-path: inset(50%);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	white-space: nowrap;
	width: 1px;
}

.screen-reader-text:focus {
	background-color: var(--pk-white);
	clip-path: none;
	color: var(--pk-navy);
	height: auto;
	padding: var(--pk-space-2xs) var(--pk-space-sm);
	width: auto;
	z-index: var(--pk-z-skiplink);
}

:focus-visible {
	outline: 3px solid var(--pk-color-focus);
	outline-offset: 2px;
}

/* Respect a stated preference for reduced motion. The deferred reveal
   becomes instant rather than being removed, so content is never hidden. */
@media (prefers-reduced-motion: reduce) {

	html {
		scroll-behavior: auto;
	}

	*,
	*::before,
	*::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
	}

	.deferred-container {
		opacity: 1;
	}
}


/* ==========================================================================
   12. PRINT
   ========================================================================== */

@media print {

	.pk-header,
	.pk-header-sentinel,
	.pk-search,
	.pk-footer,
	.skip-link,
	.pagination {
		display: none !important;
	}

	body {
		background: var(--pk-white);
		color: var(--pk-silicone);
		font-size: 12pt;
		line-height: var(--pk-leading-snug);
	}

	.deferred-container {
		opacity: 1 !important;
	}

	a {
		text-decoration: underline;
	}

	/* Surface destinations that will not survive on paper. */
	.entry-content a[href^='http']::after {
		content: ' (' attr(href) ')';
		font-size: 10pt;
		word-break: break-all;
	}

	h1, h2, h3, h4, h5, h6 {
		break-after: avoid;
	}

	pre, blockquote, table, figure {
		break-inside: avoid;
	}
}
