/**
 * PK Royal Commerce — Main stylesheet.
 * Requires assets/css/design-tokens.css to be enqueued first.
 *
 * Table of contents:
 *   1.  Reset & base
 *   2.  Layout shell & utilities
 *   3.  Typography
 *   4.  Buttons
 *   5.  Forms
 *   6.  Skip link & focus states
 *   7.  Announcement bar
 *   8.  Header / nav / search panel
 *   9.  Off-canvas drawer
 *   10. Hero
 *   11. Trust bar
 *   12. Collection cards
 *   13. Value grid / CTA band / panel
 *   14. Footer
 *   15. WooCommerce — product grid & card
 *   16. WooCommerce — shop archive (sidebar filters/toolbar)
 *   17. WooCommerce — single product (gallery/summary/badges/tabs)
 *   18. WooCommerce — cart
 *   19. WooCommerce — checkout
 *   20. WooCommerce — account dashboard
 *   21. WooCommerce — affiliate dashboard
 *   22. FAQ accordion
 *   23. Static page components (prose, 404, search, empty states)
 *   24. Responsive breakpoints (480 / 768 / 1024 / 1280)
 */

/* ==========================================================================
   1. Reset & base
   ========================================================================== */

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

/* Smooth-scroll only for users who haven't asked for reduced motion —
   otherwise anchor/in-page navigation jumps instantly instead of
   animating. Kept as its own rule (rather than inline on `html` below)
   since it needs to apply regardless of which `html {}` block runs. */
@media (prefers-reduced-motion: no-preference) {
	html {
		scroll-behavior: smooth;
	}
}

/* Scroll-reveal (main.js initScrollReveal()): .pkr-reveal is only ever
   added by JS, so this entire hidden-state rule is scoped inside
   no-preference too -- a reduced-motion visitor, or anyone without JS,
   never has content hidden waiting on an animation that will not run. */
@media (prefers-reduced-motion: no-preference) {
	.pkr-reveal {
		opacity: 0;
		transform: translateY(12px);
		transition: opacity 500ms ease, transform 500ms ease;
	}

	.pkr-reveal.is-revealed {
		opacity: 1;
		transform: translateY(0);
	}
}

html {
	/* Mobile browsers show a default translucent tap-highlight rectangle
	   on links/buttons unless disabled — visible as an unexpected box
	   flashing over custom-styled controls (e.g. pagination pills). Real
	   :focus-visible states (keyboard nav) are unaffected and still show
	   the intentional outline defined below. */
	-webkit-tap-highlight-color: transparent;
}

body {
	margin: 0;
	background: var(--pkr-black);
	color: var(--pkr-cream);
	font-family: var(--pkr-font-body);
	font-size: var(--pkr-font-size-base);
	line-height: var(--pkr-line-height-body);
	-webkit-font-smoothing: antialiased;
}

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

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

ul,
ol {
	margin: 0;
	padding: 0;
}

button {
	font-family: inherit;
	cursor: pointer;
}

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

/* ==========================================================================
   2. Layout shell & utilities
   ========================================================================== */

.pkr-shell {
	width: min(100% - (var(--pkr-gutter-mobile) * 2), var(--pkr-shell-max));
	margin-inline: auto;
}

.pkr-shell-narrow {
	max-width: 1040px;
}

.pkr-section {
	padding-block: var(--pkr-section-gap-mobile);
}

.pkr-section-dark {
	background: var(--pkr-panel);
}

.pkr-section-wc {
	padding-block: var(--pkr-space-6);
}

.pkr-section-head {
	margin-bottom: var(--pkr-space-4);
}

.pkr-section-head-inline {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--pkr-space-2);
	flex-wrap: wrap;
}

.pkr-section-sub {
	color: var(--pkr-muted);
	max-width: 640px;
}

.pkr-eyebrow {
	display: block;
	font-family: var(--pkr-font-display);
	font-size: 0.75rem;
	font-weight: 600;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--pkr-gold);
	margin-bottom: var(--pkr-space-1);
}

.pkr-text-gold {
	color: var(--pkr-gold);
}

.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
	white-space: nowrap;
}

.pkr-notice {
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
	color: var(--pkr-muted);
}

.pkr-notice-pending {
	border-color: var(--pkr-border);
	color: var(--pkr-cream);
}

.pkr-empty-state {
	text-align: center;
	color: var(--pkr-muted);
	padding: var(--pkr-space-6) 0;
}

/* Richer empty states (cart, shop no-results) reuse 404.php's crown /
   eyebrow / heading / CTA grammar -- centered column, gold crown glyph,
   generous vertical rhythm so an empty cart or a zero-result filter never
   just falls through to WooCommerce's bare default text. */
.pkr-empty-state-shop,
.pkr-empty-state-cart {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--pkr-space-1);
	padding: var(--pkr-space-8) var(--pkr-space-2);
}

.pkr-empty-state-shop .pkr-crown-lg,
.pkr-empty-state-cart .pkr-crown-lg {
	color: var(--pkr-gold);
	margin-bottom: var(--pkr-space-1);
}

.pkr-empty-state-shop h2,
.pkr-empty-state-cart h2 {
	margin-bottom: 0;
}

.pkr-empty-state-shop p,
.pkr-empty-state-cart p {
	max-width: 46ch;
	color: var(--pkr-muted);
}

.pkr-empty-state-shop .pkr-button-row,
.pkr-empty-state-cart .pkr-button-row,
.pkr-faq-cta .pkr-button-row {
	justify-content: center;
}

/* ==========================================================================
   3. Typography
   ========================================================================== */

h1,
h2,
h3,
h4 {
	font-family: var(--pkr-font-display);
	line-height: 1.2;
	color: var(--pkr-cream);
	margin: 0 0 var(--pkr-space-2);
}

h1 {
	font-size: var(--pkr-h1-size);
}

h2 {
	font-size: clamp(1.75rem, 3.4vw, 2.75rem);
}

h3 {
	font-size: 1.25rem;
	color: var(--pkr-gold-light);
}

p {
	margin: 0 0 var(--pkr-space-2);
}

.pkr-prose {
	max-width: 760px;
}

.pkr-prose h2 {
	margin-top: var(--pkr-space-6);
	color: var(--pkr-gold-light);
}

.pkr-prose h3 {
	margin-top: var(--pkr-space-4);
}

.pkr-prose p,
.pkr-prose li {
	color: var(--pkr-muted);
}

.pkr-prose ul,
.pkr-prose ol {
	padding-left: 1.25rem;
	margin-bottom: var(--pkr-space-2);
}

.pkr-prose li {
	margin-bottom: var(--pkr-space-1);
}

/* ==========================================================================
   4. Buttons
   ========================================================================== */

.pkr-btn,
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button,
.woocommerce #respond input#submit {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var(--pkr-space-1);
	min-height: 48px;
	padding: 0 var(--pkr-space-3);
	border-radius: var(--pkr-radius-pill);
	background: linear-gradient(135deg, var(--pkr-gold-light), var(--pkr-gold));
	color: var(--pkr-black) !important;
	font-weight: 700;
	font-size: 0.9375rem;
	border: 0;
	transition: transform var(--pkr-transition-fast), box-shadow var(--pkr-transition-fast);
	white-space: nowrap;
}

.pkr-btn:hover,
.woocommerce a.button:hover,
.woocommerce button.button:hover {
	transform: translateY(-1px);
	box-shadow: 0 10px 24px rgba(214, 177, 93, 0.28);
}

.pkr-btn svg {
	width: 18px;
	height: 18px;
}

.pkr-btn-ghost {
	background: transparent;
	color: var(--pkr-gold-light) !important;
	border: 1px solid var(--pkr-gold);
}

.pkr-btn-ghost:hover {
	background: rgba(214, 177, 93, 0.08);
}

.pkr-btn-violet {
	/* OWNER-CONFIRMED FINAL DESIGN (2026-08-14): this gradient came out of
	   a design-critique pass that found the earlier raw-historical violet
	   (#8f5fc4 -> #6D3CA3) read as flat/neon next to King's gold button --
	   see docs/HANDOFF-FRONTEND.md "Brand decision" section for the full
	   critique. Widened the lightness range (#a67fd1 -> #5c2f88) plus a
	   thin gold hairline border so it reads as a lit, curved surface
	   ("gem set in gold") instead of two similarly-dark flat stops. Shown
	   to the owner via before/after screenshots and merged as final.
	   KNOWN, WORSE ACCESSIBILITY TRADEOFF: the light-end stop (#a67fd1)
	   measures ~2.84:1 against --pkr-cream text -- below even the WCAG AA
	   large-text 3:1 minimum (previous raw-historical value was ~4.06:1).
	   This was not caught before merge; flagged to the owner after the
	   fact. Do not silently "fix" this contrast without checking with the
	   owner first, but do not assume it was a deliberate accepted
	   tradeoff either -- unlike the violet-vs-gold color choice itself,
	   this specific contrast regression has not been explicitly signed
	   off on. */
	background: linear-gradient(135deg, #a67fd1, #5c2f88);
	border: 1px solid rgba(214, 177, 93, .45);
	color: var(--pkr-cream) !important;
}

.pkr-btn-violet:hover {
	box-shadow: 0 10px 24px rgba(109, 60, 163, 0.35);
}

.pkr-btn-sm {
	min-height: 38px;
	padding: 0 var(--pkr-space-2);
	font-size: 0.8125rem;
}

.pkr-btn-block {
	width: 100%;
}

/* Turnstile-gated form submit buttons (initTurnstileGatedForms() in
   main.js) -- visible feedback while a submission is held waiting on a
   verification token, so a click is never silently unresponsive. Uses
   aria-busy rather than the native disabled attribute: a disabled submit
   button cannot be used as form.requestSubmit()'s submitter in every
   browser, and disabling it here would also fight with WooCommerce core's
   own password-strength-meter.js, which independently toggles `disabled`
   on this same button on the registration form. `pointer-events: none`
   is the actual double-submit guard (PHP Engineering Audit H-2): it
   blocks a second mouse/touch click from ever reaching the button while
   busy, without touching the `disabled` attribute that already has to
   stay free for WooCommerce's own script above. A second attempt via
   keyboard (e.g. pressing Enter again) isn't a pointer event and so
   isn't stopped by this rule -- that path is guarded separately in JS by
   initTurnstileGatedForms()'s own `submitting` flag. */
.pkr-btn[aria-busy="true"] {
	opacity: 0.75;
	cursor: wait;
	pointer-events: none;
}

.pkr-button-row {
	display: flex;
	flex-wrap: wrap;
	gap: var(--pkr-space-2);
	margin-top: var(--pkr-space-3);
}

.pkr-icon-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	border: 1px solid transparent;
	background: transparent;
	color: var(--pkr-cream);
	position: relative;
}

.pkr-icon-btn svg {
	width: 20px;
	height: 20px;
}

.pkr-icon-btn:hover {
	background: rgba(214, 177, 93, 0.1);
	color: var(--pkr-gold-light);
}

.pkr-icon-btn.is-active {
	background: rgba(214, 177, 93, 0.16);
	color: var(--pkr-gold-light);
	border-color: var(--pkr-border);
}

/* ==========================================================================
   5. Forms
   ========================================================================== */

.pkr-form-row {
	margin-bottom: var(--pkr-space-2);
}

.pkr-form-row-group {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-2);
}

.pkr-form label {
	display: block;
	margin-bottom: 6px;
	font-size: 0.875rem;
	color: var(--pkr-muted);
}

.pkr-required {
	color: var(--pkr-error);
}

.pkr-form input[aria-invalid="true"],
.pkr-form textarea[aria-invalid="true"] {
	border-color: var(--pkr-error);
}

.pkr-form input[type="text"],
.pkr-form input[type="email"],
.pkr-form input[type="tel"],
.pkr-form input[type="search"],
.pkr-form input[type="number"],
.pkr-form select,
.pkr-form textarea,
.woocommerce form .form-row input.input-text,
.woocommerce form .form-row textarea.input-text,
.woocommerce select,
.select2-container .select2-selection--single {
	width: 100%;
	background: #141414;
	color: var(--pkr-cream);
	border: 1px solid #3c3527;
	border-radius: var(--pkr-radius-sm);
	padding: 12px 14px;
	font-size: 0.9375rem;
	font-family: var(--pkr-font-body);
}

/* Select2 (bundled with WooCommerce) recolors its own inner rendered-value
   span rather than inheriting from the outer `.select2-selection--single`
   container styled above: `.select2-container--default .select2-selection--
   single .select2-selection__rendered { color: #444 }` (select2.css) is a
   3-class selector, so the 2-class container rule above never reaches the
   text node that's actually visible -- #444 on this field's #141414
   background measures 1.89:1, well under WCAG AA's 4.5:1 (audit finding 1,
   ACCESSIBILITY-AUDIT-2026-08-14.md). Match Select2's own selector shape
   (also 3 classes) so this rule wins the cascade purely on load order (main.
   css is enqueued after WooCommerce's select2.css) without needing
   `!important`. var(--pkr-cream) on #141414 measures ~16.4:1. */
.select2-container .select2-selection--single .select2-selection__rendered {
	color: var(--pkr-cream);
}

.pkr-form textarea {
	resize: vertical;
}

/* ------------------------------------------------------------------
 * WooCommerce password-strength meter -- reserved space (go-live
 * audit: registration "Create Account" button swallowed a visitor's
 * first real click, 100% reproducible). See
 * pkr_password_strength_meter_reserve() in functions.php for the full
 * root-cause writeup; this is the CSS half of that fix.
 *
 * `.pkr-password-field` wraps the password `<input>` (WooCommerce core's
 * own JS separately re-wraps it again in `.password-input` for its
 * show/hide-password toggle) and the pre-rendered
 * `.woocommerce-password-strength` placeholder as siblings, so both stay
 * inside one predictable container regardless of how WC's JS nests them.
 *
 * WooCommerce's password-strength-meter.js toggles the meter with
 * jQuery show()/hide() (an inline `display:none`/`''` toggle) once it
 * exists in the DOM. `display: block !important` overrides that so the
 * element stays laid out at all times instead of collapsing to zero
 * height on `hide()`, and `min-height` (sized to match its own padded,
 * one-line "Password strength: ..." text -- see WooCommerce core's own
 * `.woocommerce-password-strength` rule in woocommerce.css for the
 * padding/font-size this matches) reserves that same space even before
 * any state class/text has ever been set, since neither an empty <div>
 * nor min-height are affected by the show()/hide() toggle. Between
 * those two rules the element's rendered height never changes again
 * once the page has painted -- `visibility` (not `display`) is what
 * actually hides it when there's nothing to show, precisely because
 * unlike `display` it doesn't collapse the reserved space.
 *
 * This does not additionally reserve space for WooCommerce's separate
 * `.woocommerce-password-hint` text -- that element is fully removed
 * and re-inserted (not shown/hidden) on every keystroke, so a fixed
 * placeholder for it can't be kept in the DOM the same way a shown/
 * hidden node can, and reserving its worst-case height up front would
 * leave a permanent, noticeably empty gap under the password field
 * before anyone has typed anything. That narrows, but does not entirely
 * close, the same class of shift for the rarer case of a weak-password
 * hint appearing or disappearing on the exact keystroke/blur that a
 * mousedown on another control also lands on -- a materially smaller
 * window than the meter's guaranteed-every-time first insertion this
 * fix closes.
 * ------------------------------------------------------------------ */
.pkr-password-field {
	display: block;
}

.woocommerce-password-strength {
	display: block !important;
	visibility: hidden;
	min-height: 32px;
	margin-top: 6px;
}

.woocommerce-password-strength.short,
.woocommerce-password-strength.bad,
.woocommerce-password-strength.good,
.woocommerce-password-strength.strong {
	visibility: visible;
}

.pkr-form-panel {
	max-width: 480px;
}

.pkr-panel {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-4);
}

.pkr-panel-list {
	list-style: none;
	color: var(--pkr-muted);
}

.pkr-panel-list li {
	padding-left: 1.5em;
	position: relative;
	margin-bottom: var(--pkr-space-1);
}

.pkr-panel-list li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.5em;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--pkr-gold);
}

.pkr-split {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-4);
	align-items: start;
}

/* WooCommerce core ships `.woocommerce form .form-row .required { color:
   var(--wc-red) }` (#a00, ~2.55:1 against this theme's dark backgrounds --
   well under WCAG AA's 4.5:1 text minimum). That selector is three classes
   deep (0,3,0 specificity), so a plain `.required` rule here would lose the
   cascade even loading after it; match the same selector shape (plus a bare
   `.required` fallback for any required marker rendered outside a WooCommerce
   `.form-row`) so the override actually wins sitewide -- checkout, login/
   register, my-account, and anywhere else WooCommerce renders one -- without
   touching WooCommerce core files. */
.woocommerce form .form-row .required,
.required {
	color: var(--pkr-error);
}

/* WooCommerce core's own live checkout field validation (assets/js/frontend/
   checkout.js validate_field(), fires on blur/change for each required/
   email/phone field) toggles `.woocommerce-invalid` on the `.form-row` and
   sets `aria-invalid="true"` on the field, but the only visual cue that
   ships with it is `border-color: var(--wc-red)` vs. the "valid" state's
   `border-color: var(--wc-green)` -- indistinguishable for red-green
   colorblind users, the most common form of color vision deficiency, and a
   plain WCAG 1.4.1 (Use of Color) violation. WC core cannot be edited (see
   project rules), so main.js's initCheckoutFieldErrors() observes the same
   class WC already toggles and inserts a real text message (below), reusing
   the aria-invalid/aria-describedby + visible-message convention the
   contact/wholesale forms already use elsewhere on the site. This just
   supplies the icon + text treatment for that inserted message so the cue
   never depends on the border color alone. */
.pkr-checkout-field-error {
	display: flex;
	align-items: flex-start;
	gap: 5px;
	margin: 6px 0 0;
	color: var(--pkr-error);
	font-size: 0.78rem;
	line-height: 1.4;
}
.pkr-checkout-field-error::before {
	content: '!';
	flex: none;
	display: grid;
	place-items: center;
	width: 15px;
	height: 15px;
	border-radius: 50%;
	background: var(--pkr-error);
	color: var(--pkr-black);
	font-size: 0.68rem;
	font-weight: 700;
	line-height: 1;
}
.woocommerce form .form-row.woocommerce-invalid input.input-text,
.woocommerce form .form-row.woocommerce-invalid select {
	/* Thicker border is a second, non-color-dependent cue on top of the
	   icon + text message: shape/weight changes read even in grayscale. */
	border-width: 2px;
}

/* WooCommerce core also ships `.woocommerce form .form-row.woocommerce-
   invalid label { color: var(--wc-red) }` (#a00) -- against this checkout
   panel's #0a0a0a background that measures 2.55:1, below WCAG AA's 4.5:1,
   and it fires at the worst possible moment: exactly while a shopper is
   trying to read the label and correct the error (audit finding 3,
   ACCESSIBILITY-AUDIT-2026-08-14.md). Match the same selector shape (no
   `!important` in the core rule, so equal specificity + main.css's later
   load order is enough) and swap in the theme's error token instead of
   core's raw red: var(--pkr-error) (#d95c5c) on #0a0a0a measures 5.31:1,
   comfortably passing AA while still reading clearly as an error state. */
.woocommerce form .form-row.woocommerce-invalid label {
	color: var(--pkr-error);
}

/* ==========================================================================
   6. Skip link & focus states
   ========================================================================== */

.pkr-skip-link {
	position: absolute;
	left: -9999px;
	top: 0;
	z-index: var(--pkr-z-modal);
	background: var(--pkr-gold);
	color: var(--pkr-black);
	padding: 12px 20px;
	border-radius: 0 0 var(--pkr-radius-sm) 0;
	font-weight: 700;
}

.pkr-skip-link:focus {
	left: 0;
}

a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
	outline: var(--pkr-focus-ring);
	outline-offset: var(--pkr-focus-offset);
	border-radius: var(--pkr-radius-sm);
}

/* ==========================================================================
   7. Announcement bar
   ========================================================================== */

.pkr-announcement {
	padding: 10px var(--pkr-gutter-mobile);
	text-align: center;
	background: #150f06;
	color: var(--pkr-gold-light);
	font-size: 0.75rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var(--pkr-space-1);
}

.pkr-crown-glyph svg {
	width: 14px;
	height: 14px;
	color: var(--pkr-gold);
}

/* ==========================================================================
   8. Header / nav / search panel
   ========================================================================== */

.pkr-header {
	position: sticky;
	top: 0;
	z-index: var(--pkr-z-header);
	background: rgba(9, 9, 9, 0.95);
	backdrop-filter: blur(16px);
	border-bottom: 1px solid var(--pkr-border);
}

html {
	scroll-padding-top: 88px;
	overflow-x: clip;
}

.pkr-header-inner {
	min-height: 76px;
	display: flex;
	align-items: center;
	gap: var(--pkr-space-3);
}

.pkr-brand {
	display: flex;
	align-items: center;
	gap: 10px;
	min-width: max-content;
}

.pkr-brand-text strong {
	font-family: var(--pkr-font-display);
	display: block;
	color: var(--pkr-gold-light);
	letter-spacing: 0.06em;
	font-size: 1rem;
}

.pkr-brand-text small {
	display: block;
	color: var(--pkr-muted);
	font-size: 9px;
	text-transform: uppercase;
	letter-spacing: 0.14em;
}

.pkr-crown {
	color: var(--pkr-gold);
	width: 30px;
	height: 30px;
	flex-shrink: 0;
}

.pkr-brand-mark {
	/* Intentionally width-only + height:auto: the badge svg's viewBox
	   (0 0 100 158, a fixed ~0.633 ratio) drives the height, so there's a
	   single source of truth for proportions instead of hand-maintained
	   width+height pairs that can drift. The badge is a bordered rounded-
	   rectangle plaque (matching the bottle label construction: double
	   gold line frame, dark interior fill, crown/PK/divider/"Research
	   Labs" stacked inside) rather than the older open shield outline, so
	   it is taller relative to its width than the old 154x220 (0.7 ratio)
	   crest was. Rendered width is 29px (the value below was corrected
	   from an original 35px during a later design pass; that historical
	   35px no longer appears anywhere in this file, so this is the only
	   width declaration for the default header mark). Context-specific
	   variants override it deliberately: .pkr-brand-drawer .pkr-brand-mark
	   is 24px and .pkr-footer-reference-brand .pkr-brand-mark is 24px. */
	display: inline-flex;
	width: 29px;
	color: var(--pkr-gold);
	flex: 0 0 auto;
}

.pkr-brand-mark svg,
.pkr-brand-mark img {
	display: block;
	width: 100%;
	height: auto;
	object-fit: contain;
}

.pkr-crown svg {
	width: 100%;
	height: 100%;
}

.pkr-crown-lg {
	width: 56px;
	height: 56px;
}

.pkr-nav {
	flex: 1;
	display: none;
	justify-content: center;
}

.pkr-menu {
	display: flex;
	list-style: none;
	align-items: center;
	gap: 36px;
}

.pkr-menu li {
	position: relative;
}

.pkr-menu a {
	position: relative;
	font-size: 0.8125rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--pkr-muted);
	padding: 6px 2px;
	display: inline-block;
	transition: color 0.18s ease;
}

.pkr-menu a::after {
	content: '';
	position: absolute;
	left: 2px;
	right: 2px;
	bottom: -2px;
	height: 1px;
	background: var(--pkr-gold-light);
	transform: scaleX(0);
	transform-origin: center;
	transition: transform 0.2s ease;
}

.pkr-menu a:hover,
.pkr-menu a:focus-visible {
	color: var(--pkr-cream);
}

.pkr-menu a:hover::after,
.pkr-menu a:focus-visible::after {
	transform: scaleX(1);
}

.pkr-menu a:focus-visible {
	outline: 1px solid var(--pkr-gold);
	outline-offset: 4px;
}

.pkr-menu li.current-menu-item > a,
.pkr-menu li.current_page_item > a,
.pkr-menu li.current-menu-parent > a,
.pkr-menu li.current-menu-ancestor > a {
	color: var(--pkr-gold-light);
}

.pkr-menu li.current-menu-item > a::after,
.pkr-menu li.current_page_item > a::after,
.pkr-menu li.current-menu-parent > a::after,
.pkr-menu li.current-menu-ancestor > a::after {
	transform: scaleX(1);
	background: var(--pkr-gold);
}

.pkr-actions {
	display: flex;
	align-items: center;
	gap: 4px;
	margin-left: auto;
}

.pkr-cart-link {
	position: relative;
}

.pkr-cart-count {
	position: absolute;
	top: 2px;
	right: 2px;
	display: inline-grid;
	place-items: center;
	min-width: 16px;
	height: 16px;
	border-radius: 50%;
	background: var(--pkr-gold);
	color: var(--pkr-black);
	font-size: 10px;
	font-weight: 700;
	padding: 0 3px;
}

.pkr-drawer-actions .pkr-cart-count {
	position: static;
	display: inline;
	background: none;
	color: inherit;
	font-weight: 600;
}

/* Add-to-cart feedback: a brief pulse on the cart-count badge (toggled by
   main.js's initCartFeedback() when WooCommerce's added_to_cart fires) plus
   a gold-bordered toast (built entirely in JS, appended to the body) so
   the confirmation is not only a small badge tucked in the header. */
@media (prefers-reduced-motion: no-preference) {
	.pkr-cart-count.is-updated {
		animation: pkrCartPulse 600ms ease;
	}
}

@keyframes pkrCartPulse {
	0% { transform: scale(1); }
	35% { transform: scale(1.45); }
	100% { transform: scale(1); }
}

.pkr-cart-toast {
	position: fixed;
	right: 20px;
	bottom: 20px;
	/* Needs to clear .pkr-consent-banner's ad-hoc z-index:9999 (see
	   inc/analytics.php) -- higher than --pkr-z-modal (the design-token
	   scale's top layer), so an explicit value is used here instead. */
	z-index: 10000;
	display: flex;
	align-items: center;
	gap: 10px;
	max-width: min(360px, calc(100vw - 40px));
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-gold);
	border-radius: var(--pkr-radius-md);
	box-shadow: var(--pkr-shadow-card);
	padding: 14px 16px;
	color: var(--pkr-cream);
	font-size: 0.85rem;
	line-height: 1.4;
	opacity: 0;
	transform: translateY(12px);
	transition: opacity var(--pkr-transition-base), transform var(--pkr-transition-base);
	pointer-events: none;
}

.pkr-cart-toast.is-visible {
	opacity: 1;
	transform: translateY(0);
}

.pkr-cart-toast strong {
	color: var(--pkr-gold-light);
}

@media (max-width: 767px) {
	.pkr-cart-toast {
		left: 16px;
		right: 16px;
		max-width: none;
		bottom: 88px;
	}
}

.pkr-menu-toggle {
	display: flex;
	align-items: center;
	gap: 6px;
	background: transparent;
	border: 1px solid var(--pkr-border);
	color: var(--pkr-cream);
	border-radius: var(--pkr-radius-pill);
	padding: 8px 14px;
	font-size: 0.8125rem;
}

.pkr-menu-toggle svg {
	width: 18px;
	height: 18px;
}

.pkr-search-panel {
	border-top: 1px solid var(--pkr-border);
	background: var(--pkr-black);
	padding: var(--pkr-space-2) 0;
}

.pkr-search-panel[hidden] {
	display: none;
}

.pkr-search-form {
	display: flex;
	gap: var(--pkr-space-1);
	align-items: center;
}

.pkr-search-form-inline {
	max-width: 480px;
	margin-top: var(--pkr-space-3);
}

.pkr-search-input {
	flex: 1;
	background: #141414;
	border: 1px solid #3c3527;
	color: var(--pkr-cream);
	border-radius: var(--pkr-radius-pill);
	padding: 10px 18px;
}

/* ==========================================================================
   9. Off-canvas drawer
   ========================================================================== */

.pkr-drawer-overlay {
	position: fixed;
	inset: 0;
	background: var(--pkr-overlay);
	z-index: var(--pkr-z-overlay);
	opacity: 0;
	transition: opacity var(--pkr-transition-drawer);
}

.pkr-drawer-overlay[hidden] {
	display: none;
}

.pkr-drawer-overlay.is-visible {
	opacity: 1;
}

.pkr-drawer {
	position: fixed;
	top: 0;
	right: 0;
	bottom: 0;
	width: min(340px, 86vw);
	background: var(--pkr-panel);
	border-left: 1px solid var(--pkr-border);
	z-index: var(--pkr-z-drawer);
	transform: translateX(100%);
	transition: transform var(--pkr-transition-drawer);
	display: flex;
	flex-direction: column;
	overflow-y: auto;
}

.pkr-drawer.is-open {
	transform: translateX(0);
}

.pkr-drawer[aria-hidden="true"] {
	display: none;
}

.pkr-drawer-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: var(--pkr-space-3);
	border-bottom: 1px solid var(--pkr-border);
}

.pkr-brand-drawer .pkr-brand-mark {
	width: 24px;
}

.pkr-drawer-body {
	padding: var(--pkr-space-3);
}

.pkr-drawer-search {
	margin-bottom: var(--pkr-space-3);
}

.pkr-drawer-search .pkr-search-input {
	min-height: 44px;
}

.pkr-drawer-menu {
	list-style: none;
}

.pkr-drawer-menu li {
	border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}

.pkr-drawer-menu a {
	display: block;
	padding: 14px 4px;
	font-family: var(--pkr-font-display);
	font-size: 1rem;
	color: var(--pkr-cream);
}

.pkr-drawer-menu a:hover {
	color: var(--pkr-gold-light);
}

.pkr-drawer-actions {
	display: flex;
	flex-direction: column;
	gap: var(--pkr-space-2);
	margin-top: var(--pkr-space-3);
}

/* ==========================================================================
   10. Hero
   ========================================================================== */

/* `.pkr-hero` itself (this base rule) was consolidated from what used to
   be six separate, overlapping `.pkr-hero { }` blocks scattered across
   this file -- three prior patch attempts at a hero-cropping bug each
   left an earlier version live instead of replacing it, so the browser
   was silently unioning/overriding across all of them property by
   property (go-live audit, Design/Brand Audit §1, P0; see git history
   on this file for the full sequence). This is now the ONLY unconditional
   `.pkr-hero` rule; `position`/`display`/`align-items`/`border-bottom`
   below are the properties from the original version of this rule that
   were never actually superseded by later patches (which only ever
   touched min-height/padding-block/background/overflow -- see that
   history for why, and the min-height/background comment further down
   for the crop-fix reasoning specifically). Legitimate responsive
   variants remain as separate blocks: `@media (min-width:1280px)`
   immediately below (wide-desktop padding), `@media (max-width:767px)`
   near the bottom of this file (mobile), and `@media
   (orientation:landscape) and (max-height:500px)` (short landscape
   phones). */
.pkr-hero {
	position: relative;
	isolation: isolate;
	display: flex;
	align-items: center;
	min-height: max(520px, 56.28vw);
	padding-block: 54px;
	overflow: hidden;
	border-bottom: 1px solid var(--pkr-border);
	background: #030303 url('../img/royal-hero-v4-optimized.webp') left top / contain no-repeat;
}

/* Wide-desktop padding increase. Must be declared AFTER the base rule
   above (same specificity, so source order decides) -- it used to live
   much further down the file, before the base rule's own unconditional
   padding-block, which silently won the cascade at every width including
   this one and defeated this override entirely (go-live audit,
   Design/Brand Audit §1, P0). */
@media (min-width: 1280px) {
	.pkr-hero {
		padding-block: var(--pkr-space-12);
	}
}

.pkr-hero-grid {
	display: block;
}

.pkr-hero-copy {
	max-width: 660px;
	margin-left: clamp(180px, 22vw, 340px);
}

.pkr-hero-title {
	font-size: clamp(3.25rem, 6vw, 6.25rem);
	line-height: 0.96;
	letter-spacing: -0.025em;
	margin-bottom: var(--pkr-space-2);
	max-width: 700px;
}

.pkr-hero-sub {
	font-size: 1.25rem;
	line-height: 1.55;
	color: #ded9cf;
	max-width: 470px;
}

.variations_form .variations {
	width: 100%;
	margin: var(--pkr-space-3) 0;
	border-collapse: collapse;
	border-spacing: 0;
	table-layout: fixed;
}

.variations_form .variations th,
.variations_form .variations td {
	box-sizing: border-box;
	padding: 0;
	text-align: left;
	vertical-align: middle;
}

.variations_form .variations th {
	width: 130px;
	color: var(--pkr-gold-light);
	font-family: var(--pkr-font-display);
	text-transform: uppercase;
	letter-spacing: 0.04em;
	font-size: 0.82rem;
	line-height: 1.25;
	white-space: normal;
	padding-right: 8px;
}

.variations_form .variations select {
	width: 100%;
	margin-right: 0 !important;
	min-height: 48px;
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border-strong);
	border-radius: var(--pkr-radius-sm);
	color: var(--pkr-cream);
	padding: 10px 42px 10px 14px;
}

.variations_form .reset_variations {
	display: inline-block;
	margin-top: 8px;
	color: var(--pkr-gold-light);
}

@media (max-width: 560px) {
	.variations_form .variations,
	.variations_form .variations tbody,
	.variations_form .variations tr,
	.variations_form .variations th,
	.variations_form .variations td {
		display: block;
		width: 100%;
	}

	.variations_form .variations th {
		margin-bottom: 6px;
	}

	.variations_form .variations td {
		margin-bottom: var(--pkr-space-2);
	}
}

.single_variation_wrap {
	margin-top: var(--pkr-space-2);
}

/* ==========================================================================
   11. Trust bar
   ========================================================================== */

.pkr-trust-bar {
	background: var(--pkr-black);
	border-top: 1px solid var(--pkr-border);
	border-bottom: 1px solid var(--pkr-border);
	padding-block: var(--pkr-space-3);
}

.pkr-trust-bar-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
}

.pkr-trust-item {
	display: flex;
	align-items: center;
	gap: var(--pkr-space-2);
}

.pkr-trust-item svg {
	width: 28px;
	height: 28px;
	color: var(--pkr-gold);
	flex-shrink: 0;
}

.pkr-trust-item strong {
	display: block;
	font-size: 0.875rem;
	color: var(--pkr-cream);
}

.pkr-trust-item small {
	color: var(--pkr-muted);
	font-size: 0.75rem;
}

/* ==========================================================================
   12. Collection cards
   ========================================================================== */

.pkr-collection-feature-grid { display: grid; gap: var(--pkr-space-3); }
.pkr-collection-feature { position: relative; min-height: 460px; display: flex; align-items: flex-end; padding: var(--pkr-space-5); overflow: hidden; border: 1px solid var(--pkr-border); border-radius: var(--pkr-radius-md); background: radial-gradient(circle at 25% 35%, rgba(214,177,93,.18), transparent 35%), linear-gradient(145deg,#17130c,#070707); }
.pkr-collection-feature--queen { border-color: var(--pkr-border-violet); background: radial-gradient(circle at 75% 30%, rgba(112,59,160,.45), transparent 42%), linear-gradient(145deg,#160f1c,#080708); }
.pkr-collection-feature .pkr-collection-crown { width: 180px; height: 150px; top: 28px; right: 30px; opacity: .28; }
.pkr-collection-feature > div { position: relative; max-width: 520px; z-index: 1; }
.pkr-collection-feature h2 { font-size: clamp(2rem,4vw,3.5rem); }

/* .pkr-collection-crown kept: still used by .pkr-collection-feature above.
   The .pkr-collection / --king / --queen / --reserve card variants and
   .pkr-collection-ribbon/-copy that used to sit here were a superseded
   component with zero PHP references (grep-confirmed) -- removed so they
   do not confuse future work. .pkr-collection-feature itself is left
   alone; it is a separate, currently-unused block reserved for a future
   hero-area redesign pass, out of scope here. */
.pkr-collection-crown {
	position: absolute;
	top: var(--pkr-space-2);
	right: var(--pkr-space-2);
	width: 80px;
	height: 80px;
	color: var(--pkr-gold);
	opacity: 0.14;
}

/* ==========================================================================
   13. Value grid / CTA band / panel
   ========================================================================== */

.pkr-value-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
}

.pkr-value-card {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
}

.pkr-value-icon {
	display: inline-flex;
	color: var(--pkr-gold);
	width: 32px;
	height: 32px;
	margin-bottom: var(--pkr-space-1);
}

.pkr-value-card p {
	color: var(--pkr-muted);
	margin-bottom: 0;
}

.pkr-cta-band {
	background: radial-gradient(circle at 82% 30%, rgba(109, 60, 163, 0.32), transparent 40%), #100d13;
}

.pkr-section-cta {
	margin-top: var(--pkr-space-4);
	text-align: center;
}

/* ==========================================================================
   14. Footer
   ========================================================================== */

.pkr-footer {
	border-top: 1px solid var(--pkr-border);
	background: #070707;
	padding-top: var(--pkr-space-6);
}

.pkr-newsletter {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-2);
	align-items: center;
	text-align: center;
}

.pkr-newsletter .pkr-crown-lg {
	margin-inline: auto;
}

.pkr-newsletter-title {
	margin-bottom: 4px;
}

.pkr-newsletter-form {
	display: flex;
	flex-direction: column;
	gap: var(--pkr-space-1);
	max-width: 420px;
	margin-inline: auto;
	width: 100%;
}

.pkr-newsletter-input {
	background: #141414;
	border: 1px solid #3c3527;
	color: var(--pkr-cream);
	border-radius: var(--pkr-radius-pill);
	padding: 12px 18px;
}

.pkr-footer-col h3 {
	font-size: 0.875rem;
	text-transform: uppercase;
	letter-spacing: 0.1em;
	color: var(--pkr-gold-light);
	margin-bottom: var(--pkr-space-2);
}

.pkr-footer-menu {
	list-style: none;
}

.pkr-footer-menu li {
	margin-bottom: 10px;
}

.pkr-footer-menu a {
	color: var(--pkr-muted);
	font-size: 0.875rem;
}

.pkr-footer-menu a:hover {
	color: var(--pkr-gold-light);
}

.pkr-social-row { display: flex; gap: 8px; margin-top: 16px; }
.pkr-social-row a,
.pkr-social-row span { display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid #5b513c; border-radius: 50%; color: var(--pkr-cream); font-size: 12px; transition: border-color var(--pkr-transition-fast), color var(--pkr-transition-fast); }
.pkr-social-row a:hover { border-color: var(--pkr-gold); color: var(--pkr-gold-light); }
.pkr-social-row svg { width: 16px; height: 16px; }

/* Reference-style compact catalog selector on Home. */
.pkr-home-catalog-nav { background: var(--pkr-black); border-block: 1px solid var(--pkr-border); padding: 18px 0; }
.pkr-home-catalog-grid { display: grid; grid-template-columns: 1fr; border: 1px solid var(--pkr-border); }
.pkr-home-catalog-link { display: flex; align-items: center; gap: 14px; min-height: 76px; padding: 14px 18px; border-bottom: 1px solid var(--pkr-border); color: var(--pkr-cream); }
.pkr-home-catalog-link:last-child { border-bottom: 0; }
.pkr-home-catalog-link:hover { background: linear-gradient(135deg,rgba(214,177,93,.1),transparent); }
.pkr-home-catalog-icon { color: var(--pkr-gold); width: 38px; flex: 0 0 38px; }
.pkr-home-catalog-icon svg { width: 100%; height: 38px; }
.pkr-home-catalog-link strong { display: block; color: var(--pkr-gold-light); font-family: var(--pkr-font-display); font-size: .82rem; text-transform: uppercase; }
.pkr-home-catalog-link small { display: block; margin-top: 4px; color: var(--pkr-muted); font-size: .65rem; }

.pkr-trust-badges {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--pkr-space-2);
	padding-block: var(--pkr-space-3);
	border-top: 1px solid var(--pkr-border);
}

.pkr-trust-badge {
	display: flex;
	align-items: center;
	gap: 8px;
	font-size: 0.8125rem;
	color: var(--pkr-muted);
}

.pkr-trust-badge svg {
	width: 20px;
	height: 20px;
	color: var(--pkr-gold);
}

.pkr-payment-row {
	display: flex;
	gap: var(--pkr-space-2);
	padding-block: var(--pkr-space-2);
	border-top: 1px solid var(--pkr-border);
}

.pkr-payment-icon {
	color: var(--pkr-muted);
	width: 40px;
	height: 26px;
}

/* ==========================================================================
   15. WooCommerce — product grid & card
   ========================================================================== */

.woocommerce ul.products {
	display: grid !important;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
	list-style: none;
	margin: 0;
}

.woocommerce ul.products::before,
.woocommerce ul.products::after {
	display: none !important;
}

.woocommerce ul.products li.product {
	width: auto !important;
	margin: 0 !important;
	position: relative;
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-2);
	transition: border-color var(--pkr-transition-base), box-shadow var(--pkr-transition-fast);
}

/* Hover polish: the card itself no longer lifts. Only the thumbnail
   (inside its own overflow:hidden frame, see .pkr-card-media below) scales
   up, the border solidifies to full-strength gold, and a very faint crown
   watermark fades in behind the card content -- see .pkr-card-crown and
   .woocommerce-LoopProduct-link's z-index below, which keeps the real
   content stacked above the watermark. */
.woocommerce ul.products li.product:hover,
.woocommerce ul.products li.product:focus-within {
	border-color: var(--pkr-gold);
	box-shadow: var(--pkr-shadow-card);
}

/* Selector needs to out-specify the base ".woocommerce ul.products
   li.product" rule's `border` shorthand (3 classes + 2 elements) -- a bare
   ".pkr-product-card--queen" (1 class) loses the cascade and silently never
   renders, so the base selector is repeated here to win on specificity. */
.woocommerce ul.products li.product.pkr-product-card--queen {
	border-color: var(--pkr-border-violet);
}

.pkr-card-crown {
	position: absolute;
	inset: 0;
	z-index: 0;
	display: grid;
	place-items: center;
	color: var(--pkr-gold);
	opacity: 0;
	pointer-events: none;
	transition: opacity var(--pkr-transition-base);
}

.pkr-card-crown svg {
	width: 58%;
	height: 58%;
}

.woocommerce ul.products li.product:hover .pkr-card-crown,
.woocommerce ul.products li.product:focus-within .pkr-card-crown {
	opacity: 0.07;
}

.pkr-card-badge {
	position: absolute;
	top: 14px;
	left: 14px;
	z-index: 2;
	background: var(--pkr-gold);
	color: var(--pkr-black);
	font-size: 0.6875rem;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	padding: 4px 10px;
	border-radius: var(--pkr-radius-pill);
}

.pkr-card-media {
	position: relative;
	z-index: 1;
	display: block;
	overflow: hidden;
	border-radius: var(--pkr-radius-sm);
}

.woocommerce ul.products li.product img {
	border-radius: var(--pkr-radius-sm);
	background: #181818;
	aspect-ratio: 1;
	object-fit: cover;
	display: block;
	width: 100%;
	transition: transform 400ms ease;
}

.woocommerce ul.products li.product:hover .pkr-card-media img,
.woocommerce ul.products li.product:focus-within .pkr-card-media img {
	transform: scale(1.04);
}

.woocommerce ul.products li.product .woocommerce-loop-product__title {
	font-family: var(--pkr-font-display);
	color: var(--pkr-cream);
	font-size: 1rem;
	line-height: 1.3;
	margin: var(--pkr-space-1) 0 2px;
	/* Never truncate a product name: some SKUs are long composition-first
	   blend names (e.g. GHK-Cu / BPC-157 / TB-500 Blend, 70mg Total,
	   Glow) and clipping them hides compliance-relevant information.
	   Reserve two lines worth of height so short names still line up
	   across a row, but let longer names wrap past that freely; the
	   grid row default (align-items: stretch) plus the card flex
	   column (price uses margin-top: auto) keeps every price in a row
	   bottom-aligned even when a neighboring card title wraps taller. */
	min-height: calc(1.3em * 2);
}

.pkr-card-size {
	color: var(--pkr-muted);
	font-size: 0.8125rem;
	margin: 0 0 4px;
}

.woocommerce ul.products li.product .star-rating {
	font-size: 0.8125rem;
	color: var(--pkr-gold);
	margin-bottom: 4px;
}

.woocommerce ul.products li.product .price {
	color: var(--pkr-gold-light) !important;
	font-weight: 700;
	font-size: 1rem;
	display: block;
	margin-top: auto;
	margin-bottom: var(--pkr-space-1);
	/* .woocommerce-LoopProduct-link (the card's clickable wrapper) is a flex
	   column, so this bottom-aligns the price under the reserved title
	   space above instead of leaving dead space when a neighboring card's
	   longer title stretches the whole row's height (grid default
	   align-items: stretch). */
	padding-top: 6px;
}

.woocommerce ul.products li.product .button {
	width: 100%;
	min-height: 42px;
}

/* ==========================================================================
   16. WooCommerce — shop archive
   ========================================================================== */

.pkr-shop-layout {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-4);
	padding-block: var(--pkr-space-4) var(--pkr-space-8);
}

.pkr-shop-sidebar {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
	align-self: start;
}

.pkr-filter-group {
	border: 0;
	padding: 0;
	margin: 0 0 var(--pkr-space-3);
}

.pkr-filter-group legend {
	font-family: var(--pkr-font-display);
	color: var(--pkr-gold-light);
	font-size: 0.875rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	margin-bottom: var(--pkr-space-1);
	padding: 0;
}

.pkr-filter-checkbox {
	display: flex;
	align-items: center;
	gap: 8px;
	font-size: 0.875rem;
	color: var(--pkr-muted);
	margin-bottom: 8px;
}

.pkr-price-range {
	display: flex;
	align-items: center;
	gap: 8px;
}

.pkr-price-range input {
	width: 100%;
}

.pkr-filter-clear {
	display: block;
	text-align: center;
	margin-top: var(--pkr-space-2);
	color: var(--pkr-muted);
	font-size: 0.8125rem;
	text-decoration: underline;
}

.pkr-shop-toolbar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--pkr-space-2);
	margin-bottom: var(--pkr-space-3);
	padding-bottom: var(--pkr-space-2);
	border-bottom: 1px solid var(--pkr-border);
}

.pkr-shop-result-count {
	color: var(--pkr-muted);
	font-size: 0.875rem;
}

.pkr-shop-toolbar-right {
	display: flex;
	align-items: center;
	gap: var(--pkr-space-2);
	flex-wrap: wrap;
}

.woocommerce-ordering select {
	min-width: 200px;
}

.pkr-view-toggle {
	display: flex;
	gap: 4px;
}

/* WooCommerce's default archive pagination ships with no theme hook and no
   dark-mode styling, so left alone it renders as a light-gray UI chip
   sitting on this theme's black background. */
.woocommerce-pagination {
	margin-top: var(--pkr-space-4);
	text-align: center;
}

/* Specificity note: WooCommerce's own core CSS ships
   `.woocommerce nav.woocommerce-pagination ul { display: inline-block;
   border: 1px solid #cfc8d8; margin: 1px; }` — a light-lavender box
   border meant for a light theme, at (0,2,2) specificity. Prefixing our
   own rule with `.woocommerce` (present on every WC-wrapped page) brings
   it to (0,3,1), which beats theirs on class count regardless of type
   count — but CSS cascades per-property, so `display` alone winning
   doesn't touch `border`/`margin`: those still leak through from their
   rule unless explicitly reset here too, which is what caused the
   unexplained light box around the whole pagination row. */
.woocommerce .woocommerce-pagination ul.page-numbers {
	display: inline-flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 22px;
	border: 0;
	margin: 0;
	list-style: none;
	margin: 0;
	padding: 0;
}

.woocommerce-pagination .page-numbers li {
	display: inline-flex;
}

/* Minimal text pagination — no chip/pill shapes. Current page is marked
   by color + a thin underline (same "state = color, not fill" language
   used by the primary nav and account nav), not a filled badge. */
/* WooCommerce core also ships `... a:focus, ... a:hover, ... span.current
   { background: #e9e6ed; color: #816f98; }` (a light-lavender fill for a
   light theme) at (0,3,4) specificity. Our selectors below already win on
   class count for the states we touch, but the cascade is per-property —
   so `background: transparent` has to be explicitly declared on every one
   of those states here, or WooCommerce's fill quietly shows through even
   though our `color` wins. This bit us twice (border, then this). */
.woocommerce-pagination .page-numbers .page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 4px 2px;
	background: transparent;
	color: var(--pkr-muted);
	font-size: 0.9375rem;
	font-weight: 600;
	border-bottom: 2px solid transparent;
	transition: color var(--pkr-transition-fast), border-color var(--pkr-transition-fast);
}

.woocommerce-pagination .page-numbers a.page-numbers:hover,
.woocommerce-pagination .page-numbers a.page-numbers:focus {
	background: transparent;
	color: var(--pkr-gold-light);
}

.woocommerce-pagination .page-numbers .page-numbers.current {
	background: transparent;
	color: var(--pkr-gold-light);
	border-bottom-color: var(--pkr-gold);
}

/* Prev/Next are actions, not page numbers — plain gold text with an
   arrow, no border/pill, matching the rest of this minimal treatment. */
.woocommerce-pagination .page-numbers .page-numbers.next,
.woocommerce-pagination .page-numbers .page-numbers.prev {
	color: var(--pkr-gold-light);
	letter-spacing: 0.02em;
}

.woocommerce-pagination .page-numbers a.page-numbers.next:hover,
.woocommerce-pagination .page-numbers a.page-numbers.next:focus,
.woocommerce-pagination .page-numbers a.page-numbers.prev:hover,
.woocommerce-pagination .page-numbers a.page-numbers.prev:focus {
	background: transparent;
	color: var(--pkr-gold);
	border-bottom-color: var(--pkr-gold);
}

/* ==========================================================================
   17. WooCommerce — single product
   ========================================================================== */

.woocommerce div.product {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-4);
	padding-bottom: var(--pkr-space-8);
}

.woocommerce div.product .woocommerce-product-gallery {
	position: relative;
	width: 100% !important;
	max-width: 520px;
}

.woocommerce div.product .summary {
	width: 100% !important;
}

.woocommerce div.product .woocommerce-tabs,
.woocommerce div.product .related {
	grid-column: 1 / -1;
}

@media (min-width: 1024px) {
	/* auto-fit + minmax(0,1fr) with no items-count baked in: the row always
	   divides evenly across however many .pkr-home-catalog-link children are
	   rendered, so it can't silently leave a gap again if links are added or
	   removed (was hardcoded to 5 tracks while markup only emits 3). */
	.pkr-home-catalog-grid { grid-template-columns: repeat(auto-fit,minmax(0,1fr)); }
	.pkr-home-catalog-link { border-bottom: 0; border-right: 1px solid var(--pkr-border); }
	.pkr-home-catalog-link:last-child { border-right: 0; }
	.pkr-collection-feature-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
	.pkr-newsletter {
		grid-template-columns: 1fr 360px minmax(300px, 420px);
	}

	.pkr-newsletter > div:first-child { grid-column: 1; }
	.pkr-newsletter-form { grid-column: 3; }
	.woocommerce div.product .woocommerce-product-gallery {
		position: sticky;
		top: 100px;
		align-self: start;
	}
}

.woocommerce div.product .woocommerce-product-gallery__image {
	border-radius: var(--pkr-radius-md);
	overflow: hidden;
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border);
}

.woocommerce div.product .flex-control-thumbs {
	display: flex;
	gap: 10px;
	margin-top: 10px;
	list-style: none;
}

.woocommerce div.product .flex-control-thumbs li {
	width: 64px;
}

.woocommerce div.product .flex-control-thumbs img {
	border-radius: var(--pkr-radius-sm);
	border: 1px solid var(--pkr-border);
	opacity: 0.6;
}

.woocommerce div.product .flex-control-thumbs img.flex-active,
.woocommerce div.product .flex-control-thumbs img:hover {
	opacity: 1;
	border-color: var(--pkr-gold);
}

.woocommerce div.product .product_title {
	margin-bottom: 4px;
}

.woocommerce div.product p.price,
.woocommerce div.product span.price {
	color: var(--pkr-gold-light) !important;
	font-size: 1.5rem;
	font-weight: 700;
}

.woocommerce div.product .woocommerce-product-rating {
	margin-bottom: var(--pkr-space-2);
}

.pkr-product-badges {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: var(--pkr-space-2);
	margin: var(--pkr-space-2) 0;
	padding: var(--pkr-space-2);
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
}

.pkr-product-badge {
	display: flex;
	align-items: center;
	gap: 6px;
	font-size: 0.8125rem;
	color: var(--pkr-cream);
}

.pkr-product-badge svg {
	width: 20px;
	height: 20px;
	color: var(--pkr-gold);
}

.woocommerce div.product form.cart {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--pkr-space-2);
	margin-top: var(--pkr-space-3);
}

.woocommerce div.product .quantity {
	display: inline-flex;
	align-items: center;
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-pill);
	overflow: hidden;
}

.woocommerce div.product .quantity .qty {
	width: 48px;
	text-align: center;
	border: 0;
	background: transparent;
	color: var(--pkr-cream);
	padding: 10px 0;
}

.pkr-qty-btn {
	min-width: 44px;
	min-height: 44px;
	border: 0;
	background: transparent;
	color: var(--pkr-gold-light);
	font-size: 1.125rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.pkr-qty-btn:hover {
	background: rgba(214, 177, 93, 0.1);
}

.pkr-buy-now {
	order: 1;
}

.pkr-tab-panel {
	padding-top: var(--pkr-space-2);
}

.pkr-tab-subhead {
	margin-top: var(--pkr-space-4);
	color: var(--pkr-gold-light);
}

.pkr-doc-list {
	list-style: none;
}

.pkr-doc-list-item {
	display: flex;
	align-items: center;
	gap: var(--pkr-space-2);
	padding: var(--pkr-space-2);
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	margin-bottom: var(--pkr-space-1);
	flex-wrap: wrap;
}

.pkr-doc-icon {
	width: 28px;
	height: 28px;
	color: var(--pkr-gold);
	flex-shrink: 0;
}

.pkr-doc-meta {
	flex: 1;
	display: flex;
	flex-direction: column;
}

.pkr-doc-meta small {
	color: var(--pkr-muted);
	font-size: 0.75rem;
}

.woocommerce-tabs ul.tabs {
	display: none;
}

.woocommerce-tabs .panel {
	border-top: 1px solid var(--pkr-border);
	padding-top: var(--pkr-space-3);
	margin-top: var(--pkr-space-3);
}

/* Sticky mobile add-to-cart bar below 768px */
.pkr-sticky-add-to-cart {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: var(--pkr-z-header);
	background: var(--pkr-panel);
	border-top: 1px solid var(--pkr-border);
	padding: var(--pkr-space-1) var(--pkr-gutter-mobile);
	display: none;
	align-items: center;
	justify-content: space-between;
	gap: var(--pkr-space-2);
}

/* ==========================================================================
   18. WooCommerce — cart
   ========================================================================== */

.woocommerce table.shop_table,
.pkr-cart-table,
.pkr-orders-table {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	overflow: hidden;
}

.woocommerce table.shop_table th,
.woocommerce table.shop_table td {
	border-color: var(--pkr-border);
	padding: 14px;
}

.pkr-cart-row .product-thumbnail img {
	width: 64px;
	border-radius: var(--pkr-radius-sm);
}

.pkr-cart-remove {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 44px;
	min-height: 44px;
	padding: 4px;
	color: var(--pkr-error);
	font-size: 1.25rem;
	line-height: 1;
}

/* WooCommerce core ships `.woocommerce a.remove { color: var(--wc-red)
   !important }` (#a00) (woocommerce.css) -- the `!important` beats the
   `color: var(--pkr-error)` above regardless of selector order or
   specificity, so the unstyled core red (2.42:1 against this row's #121212
   background, below WCAG AA's 3:1 large-text minimum) is what actually
   renders (audit finding 2, ACCESSIBILITY-AUDIT-2026-08-14.md). Beat it with
   a selector of higher specificity than core's `.woocommerce a.remove`
   (adds the `.pkr-cart-remove` class core doesn't know about) plus a
   matching `!important`. var(--pkr-error) (#d95c5c) on #121212 measures
   5.03:1, passing AA comfortably while staying on the theme's existing
   error token instead of core's raw red. */
.woocommerce a.remove.pkr-cart-remove {
	color: var(--pkr-error) !important;
}

.pkr-coupon-row {
	display: flex;
	gap: 8px;
	margin-top: 4px;
}

.pkr-coupon-row input {
	flex: 1;
}

.cart-collaterals .cart_totals {
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
	margin-top: var(--pkr-space-4);
}

.cart-collaterals .cart_totals table {
	border: 0;
}

.cart-collaterals .cart_totals th,
.cart-collaterals .cart_totals td {
	border-color: var(--pkr-border);
	padding: 10px 0;
	color: var(--pkr-muted);
}

.cart-collaterals .wc-proceed-to-checkout a.checkout-button {
	width: 100%;
	margin-top: var(--pkr-space-2);
}

.pkr-cart-continue {
	margin-top: var(--pkr-space-4);
}

/* ==========================================================================
   19. WooCommerce — checkout
   ========================================================================== */

.woocommerce-checkout #order_review {
	background: var(--pkr-panel);
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
}

/* ==========================================================================
   20. WooCommerce — account dashboard
   ========================================================================== */

.woocommerce-account .woocommerce {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--pkr-space-4);
	align-items: start;
	padding-block: var(--pkr-space-4) var(--pkr-space-8);
}

.woocommerce-account .woocommerce-MyAccount-navigation,
.woocommerce-account .woocommerce-MyAccount-content {
	min-width: 0;
	max-width: 100%;
}

.pkr-account-nav {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-2);
}

.pkr-account-nav ul {
	list-style: none;
}

.pkr-account-nav a {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 12px 10px;
	border-radius: var(--pkr-radius-sm);
	color: var(--pkr-muted);
	font-size: 0.875rem;
}

.pkr-account-nav a svg {
	width: 18px;
	height: 18px;
}

.pkr-account-nav li.is-active a,
.pkr-account-nav a:hover {
	background: rgba(214, 177, 93, 0.12);
	color: var(--pkr-gold-light);
}

.pkr-account-welcome {
	margin-bottom: var(--pkr-space-3);
}

.pkr-account-id {
	color: var(--pkr-muted);
	font-size: 0.8125rem;
}

.pkr-stat-grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--pkr-space-2);
	margin-bottom: var(--pkr-space-4);
}

.pkr-stat-card {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-2);
}

.pkr-stat-card--accent {
	background: linear-gradient(135deg, rgba(214, 177, 93, 0.18), transparent);
	border-color: var(--pkr-gold);
}

.pkr-stat-label {
	display: block;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--pkr-muted);
	margin-bottom: 6px;
}

.pkr-stat-value {
	display: block;
	font-family: var(--pkr-font-display);
	font-size: 1.5rem;
	color: var(--pkr-cream);
}

.pkr-stat-value-sm {
	font-size: 1rem;
}

.pkr-stat-badge {
	display: inline-block;
	background: var(--pkr-gold);
	color: var(--pkr-black);
	font-weight: 700;
	font-size: 0.8125rem;
	padding: 4px 12px;
	border-radius: var(--pkr-radius-pill);
}

.pkr-order-status {
	display: inline-block;
	padding: 3px 10px;
	border-radius: var(--pkr-radius-pill);
	background: rgba(76, 175, 130, 0.15);
	color: var(--pkr-success);
	font-size: 0.75rem;
}

.pkr-order-status--pending,
.pkr-order-status--on-hold {
	background: rgba(214, 177, 93, 0.15);
	color: var(--pkr-gold-light);
}

.pkr-order-status--cancelled,
.pkr-order-status--failed,
.pkr-order-status--refunded {
	background: rgba(217, 92, 92, 0.15);
	color: var(--pkr-error);
}

/* --------------------------------------------------------------------
   20a. WooCommerce — Addresses (myaccount/my-address.php) and
   Account Details (myaccount/form-edit-address.php,
   myaccount/form-edit-account.php). Native WooCommerce templates
   themed to match the .pkr-panel / .pkr-stat-card / .pkr-eyebrow
   account language above, instead of rendering unstyled core markup.
   -------------------------------------------------------------------- */

.pkr-account-addresses .pkr-section-head {
	margin-bottom: var(--pkr-space-3);
}

.pkr-address-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
}

.pkr-address-card {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
}

.pkr-address-card__head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--pkr-space-2);
	margin-bottom: var(--pkr-space-2);
}

.pkr-address-card__head h3 {
	margin: 0;
	font-size: 1.05rem;
	color: var(--pkr-gold-light);
}

.pkr-address-card address {
	font-style: normal;
	color: var(--pkr-muted);
	line-height: 1.65;
}

.pkr-address-empty {
	display: block;
	color: var(--pkr-muted);
	font-style: normal;
}

/* Edit-address / edit-account forms share this panel + form-row-group
   treatment. Labels adopt the gold-light uppercase style already used
   by the support-ticket form (.pkr-ticket-create-form label) so the
   two native-template forms read as the same product as the ticket
   form and dashboard. */
.pkr-account-form-panel {
	max-width: 720px;
}

.pkr-account-form-panel .pkr-section-head {
	margin-bottom: var(--pkr-space-3);
}

.pkr-form-row-group {
	display: grid;
	grid-template-columns: 1fr;
	gap: 0 var(--pkr-space-2);
}

.pkr-account-form-panel .form-row {
	margin: 0 0 var(--pkr-space-2);
	float: none;
	width: auto;
}

.pkr-account-form-panel label,
.pkr-account-form-panel legend {
	display: block;
	margin-bottom: 7px;
	color: var(--pkr-gold-light);
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.05em;
	text-transform: uppercase;
}

/* Matches the same specificity as the sitewide `.woocommerce form
   .form-row .required` override above -- that selector is 3 classes PLUS
   the `form` element type (0,3,1), so a 3-classes-only selector here would
   still lose to it. Add the `form` element type here too so this
   intentional brand-gold accent in the account panel isn't silently
   outranked; both rules live in main.css, so on the resulting specificity
   tie this one (declared later) wins for elements inside
   .pkr-account-form-panel. */
form .pkr-account-form-panel .form-row .required {
	color: var(--pkr-gold);
}

.pkr-account-form-panel .optional {
	color: var(--pkr-muted);
	font-weight: 400;
	text-transform: none;
	letter-spacing: 0;
}

.pkr-account-form-panel .description {
	display: block;
	margin-top: 6px;
	color: var(--pkr-muted);
	font-size: 0.78rem;
}

.pkr-account-form-panel fieldset {
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
	margin: var(--pkr-space-3) 0;
}

.pkr-account-form-panel fieldset .form-row:last-child {
	margin-bottom: 0;
}

@media (min-width: 600px) {
	.pkr-address-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.pkr-form-row-group--2col {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	/* Fields WooCommerce marks form-row-wide (company, address lines,
	   country, city, postcode, etc.) still span the full row inside the
	   2-column grid; only the paired form-row-first/form-row-last
	   fields (e.g. first/last name) sit side by side. */
	.pkr-form-row-group--2col .form-row-wide {
		grid-column: 1 / -1;
	}
}

/* ==========================================================================
   21. WooCommerce — affiliate dashboard
   ========================================================================== */

.pkr-affiliate-earnings-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var(--pkr-space-2);
	margin-bottom: var(--pkr-space-2);
}

.pkr-stat-grid--metrics {
	grid-template-columns: repeat(3, 1fr);
}

.pkr-affiliate-referral {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-2);
	margin: var(--pkr-space-3) 0;
}

.pkr-referral-field label {
	display: block;
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
	color: var(--pkr-muted);
	margin-bottom: 6px;
}

.pkr-copy-field {
	display: flex;
	gap: 8px;
}

.pkr-copy-input {
	flex: 1;
	background: #141414;
	border: 1px solid #3c3527;
	color: var(--pkr-cream);
	border-radius: var(--pkr-radius-sm);
	padding: 10px 12px;
	font-family: monospace;
}

.pkr-copy-btn.is-copied {
	background: rgba(76, 175, 130, 0.15);
	color: var(--pkr-success) !important;
	border-color: var(--pkr-success);
}

.pkr-affiliate-footer {
	margin-top: var(--pkr-space-3);
}

.pkr-affiliate-empty {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-4);
}

.pkr-stat-band,
.pkr-affiliate-overview {
	padding-block: var(--pkr-space-4);
	background: linear-gradient(135deg, #171208, #080808);
	border-block: 1px solid var(--pkr-border-strong);
}

.pkr-stat-band-grid,
.pkr-affiliate-overview-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--pkr-space-2);
}

.pkr-stat-band-grid strong,
.pkr-affiliate-overview-grid strong { display: block; color: var(--pkr-cream); margin-top: 8px; }
.pkr-affiliate-rules-grid { display: grid; gap: var(--pkr-space-4); align-items: center; }
.pkr-check-list { list-style: none; display: grid; gap: 12px; }
.pkr-check-list li { position: relative; padding-left: 24px; color: var(--pkr-muted); }
.pkr-check-list li::before { content: '◆'; position: absolute; left: 0; color: var(--pkr-gold); }

/* ==========================================================================
   21b. WooCommerce — account security (opt-in customer two-factor auth)
   Styling for woocommerce/myaccount/security.php. The Authenticator App
   card also re-skins the Two Factor plugin's own unmodified
   Two_Factor_Totp::user_two_factor_options() widget markup (QR code,
   secret key, code field, "Reset authenticator app" button) — see
   PKRC_Account_Security::render_totp_setup_widget() and the doc comment
   at the top of security.php for why that markup is reused as-is rather
   than rebuilt.
   ========================================================================== */

.pkr-security-status {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
	margin-bottom: var(--pkr-space-2);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var(--pkr-space-2);
}

.pkr-security-status p {
	margin: 0;
	color: var(--pkr-cream);
}

.pkr-security-status--on {
	border-color: var(--pkr-border-strong);
}

.pkr-security-status form {
	margin: 0;
}

.pkr-btn-danger {
	background: transparent;
	color: var(--pkr-error) !important;
	border: 1px solid var(--pkr-error);
}

.pkr-btn-danger:hover {
	background: rgba(217, 92, 92, 0.1);
	box-shadow: none;
	transform: none;
}

.pkr-security-methods {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
	margin-top: var(--pkr-space-3);
}

@media (min-width: 900px) {
	.pkr-security-methods {
		grid-template-columns: 1fr 1fr;
		align-items: start;
	}
}

.pkr-security-method-card {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
}

.pkr-security-method-card--active {
	border-color: var(--pkr-gold);
	box-shadow: 0 0 0 1px rgba(214, 177, 93, 0.25);
}

.pkr-security-method-card .pkr-section-head--left {
	margin-bottom: var(--pkr-space-2);
}

.pkr-security-method-card h3 {
	margin-bottom: 4px;
}

.pkr-security-method-card p {
	color: var(--pkr-muted);
	font-size: 0.9rem;
}

.pkr-security-active-badge {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	color: var(--pkr-success) !important;
	font-weight: 700;
	font-size: 0.85rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
}

/* Re-skin of the Two Factor plugin's own TOTP widget markup — see block
   comment above. */
.pkr-security-method-card--totp #two-factor-totp-options ol.totp-steps {
	list-style: decimal;
	padding-left: 1.1rem;
	color: var(--pkr-muted);
	display: grid;
	gap: var(--pkr-space-2);
}

.pkr-security-method-card--totp #two-factor-qr-code {
	background: var(--pkr-cream);
	border-radius: var(--pkr-radius-sm);
	padding: var(--pkr-space-2);
	display: inline-block;
	margin: 8px 0;
}

.pkr-security-method-card--totp #two-factor-totp-options code {
	background: #141414;
	border: 1px solid var(--pkr-border);
	color: var(--pkr-gold-light);
	border-radius: var(--pkr-radius-sm);
	padding: 3px 8px;
	letter-spacing: 0.06em;
}

.pkr-security-method-card--totp #two-factor-totp-authcode,
.pkr-security-method-card--totp input[type="text"] {
	background: #141414;
	border: 1px solid var(--pkr-border);
	color: var(--pkr-cream);
	border-radius: var(--pkr-radius-sm);
	padding: 10px 12px;
	letter-spacing: 0.3em;
	text-align: center;
	font-size: 1.1rem;
	max-width: 220px;
	margin-top: 6px;
}

.pkr-security-method-card--totp .totp-submit,
.pkr-security-method-card--totp input[type="submit"] {
	margin-top: var(--pkr-space-2);
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 44px;
	padding: 0 var(--pkr-space-3);
	border-radius: var(--pkr-radius-pill);
	background: linear-gradient(135deg, var(--pkr-gold-light), var(--pkr-gold));
	color: var(--pkr-black) !important;
	font-weight: 700;
	border: 0;
	cursor: pointer;
}

.pkr-security-method-card--totp .reset-totp-key,
.pkr-security-method-card--totp .button-secondary {
	margin-top: 8px;
	background: transparent;
	color: var(--pkr-gold-light) !important;
	border: 1px solid var(--pkr-gold);
	border-radius: var(--pkr-radius-pill);
	padding: 8px 18px;
	min-height: 40px;
	cursor: pointer;
}

.pkr-security-method-card--totp .success {
	color: var(--pkr-success);
}

.pkr-security-method-card--totp #totp-setup-error {
	color: var(--pkr-error);
	margin-top: 8px;
	font-size: 0.85rem;
}

/* Dashboard nudge toward opt-in two-factor authentication (see
   PKRC_Two_Factor_Prompt). Deliberately calmer than .pkr-notice's alert
   styling -- no error/warning color, just the house gold accent -- this is
   a gentle suggestion, not a security warning. */
.pkr-2fa-nudge {
	display: flex;
	align-items: flex-start;
	gap: var(--pkr-space-2);
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-left: 3px solid var(--pkr-gold);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-2) var(--pkr-space-3);
	margin-bottom: var(--pkr-space-3);
}

.pkr-2fa-nudge-icon {
	flex: 0 0 auto;
	width: 28px;
	height: 28px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--pkr-gold);
}

.pkr-2fa-nudge-icon svg {
	width: 22px;
	height: 22px;
}

.pkr-2fa-nudge-body {
	flex: 1 1 auto;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--pkr-space-2);
}

.pkr-2fa-nudge-body p {
	margin: 0;
	color: var(--pkr-cream);
	flex: 1 1 320px;
}

.pkr-2fa-nudge-dismiss {
	flex: 0 0 auto;
	margin: 0;
}

.pkr-2fa-nudge-close {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	background: transparent;
	border: 0;
	border-radius: 50%;
	color: var(--pkr-muted);
	cursor: pointer;
}

.pkr-2fa-nudge-close:hover,
.pkr-2fa-nudge-close:focus-visible {
	color: var(--pkr-cream);
	background: rgba(214, 177, 93, 0.12);
}

.pkr-2fa-nudge-close svg {
	width: 14px;
	height: 14px;
}

@media (max-width: 600px) {
	.pkr-2fa-nudge {
		flex-wrap: wrap;
	}

	.pkr-2fa-nudge-body {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* ==========================================================================
   22. FAQ accordion
   ========================================================================== */

.pkr-faq-intro {
	max-width: 760px;
	margin-bottom: var(--pkr-space-3);
}

@media (min-width: 768px) {
	/* Flow whole topic groups (not individual questions) into 2 balanced
	   columns, so 5 groups don't stack into one long single-file column
	   on a wide desktop viewport with empty space on either side. */
	.pkr-faq-groups-flow {
		column-count: 2;
		column-gap: var(--pkr-space-4);
	}
}

.pkr-faq-group {
	break-inside: avoid;
	-webkit-column-break-inside: avoid;
}

.pkr-faq-jump {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin-bottom: var(--pkr-space-5);
}

.pkr-faq-jump-pill {
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-pill, 999px);
	padding: 8px 18px;
	font-size: 0.85rem;
	font-weight: 600;
	color: var(--pkr-gold-light);
	background: var(--pkr-panel);
	transition: border-color var(--pkr-transition-base), color var(--pkr-transition-base);
}

.pkr-faq-jump-pill:hover,
.pkr-faq-jump-pill:focus-visible {
	border-color: var(--pkr-gold);
	color: var(--pkr-gold);
}

.pkr-faq-group {
	margin-bottom: var(--pkr-space-4);
	scroll-margin-top: 100px;
}

.pkr-faq-group-title {
	color: var(--pkr-gold-light);
	font-size: 1.125rem;
	margin-bottom: var(--pkr-space-2);
}

/* Long-form prose card treatment: each <h2>-delimited section is wrapped
   server-side (see pkr_wrap_content_sections_in_panels() in functions.php)
   into its own bordered panel, so this reads as a series of cards instead
   of one long, undifferentiated block of text. Opt-in per template by
   pairing .pkr-prose with .pkr-quality-prose — used by page-about.php,
   page-quality.php, and the long-form policy/utility pages (Shipping,
   Returns & Refunds, Terms & Conditions, Privacy, Research-Use,
   Accessibility; Track Your Order uses the wrap function without this
   class, see page-track-order.php). Any other template using plain
   .pkr-prose alone keeps the simpler, non-panelled treatment. */
.pkr-quality-prose {
	max-width: none;
}

@media (min-width: 768px) {
	/* A flowing 2-column layout (not a strict grid) so panels of very
	   different heights — a 3-sentence panel next to the multi-step COA
	   process — pack together without leaving large gaps, and a full-width
	   single column leaves the wide desktop viewport mostly empty. */
	.pkr-quality-prose {
		column-count: 2;
		column-gap: var(--pkr-space-3);
	}
}

.pkr-quality-panel {
	scroll-margin-top: 100px;
	break-inside: avoid;
	-webkit-column-break-inside: avoid;
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-4);
	margin-bottom: var(--pkr-space-3);
}

.pkr-quality-panel h2 {
	margin-top: 0;
}

.pkr-quality-panel > *:last-child {
	margin-bottom: 0;
}

.pkr-quality-prose ol {
	list-style: none;
	padding-left: 0;
	counter-reset: pkr-step;
	display: grid;
	gap: 12px;
	margin: var(--pkr-space-2) 0 var(--pkr-space-3);
}

.pkr-quality-prose ol li {
	counter-increment: pkr-step;
	position: relative;
	padding: 14px 16px 14px 56px;
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	background: var(--pkr-panel);
}

.pkr-quality-prose ol li::before {
	content: counter(pkr-step);
	position: absolute;
	left: 16px;
	top: 50%;
	transform: translateY(-50%);
	width: 26px;
	height: 26px;
	border-radius: 50%;
	background: linear-gradient(135deg, var(--pkr-gold-light), var(--pkr-gold));
	color: var(--pkr-black);
	font-weight: 700;
	font-size: 0.8125rem;
	display: flex;
	align-items: center;
	justify-content: center;
}

.pkr-quality-prose ul {
	list-style: none;
	padding-left: 0;
	display: grid;
	gap: 12px;
	margin: var(--pkr-space-2) 0 var(--pkr-space-3);
}

.pkr-quality-prose ul li {
	position: relative;
	padding-left: 26px;
}

.pkr-quality-prose ul li::before {
	content: '◆';
	position: absolute;
	left: 0;
	top: 1px;
	color: var(--pkr-gold);
	font-size: 0.75rem;
}

.pkr-quality-prose ul li strong {
	display: block;
	color: var(--pkr-cream);
	margin-bottom: 2px;
}

.pkr-accordion-item {
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	margin-bottom: 10px;
	background: var(--pkr-panel);
	overflow: hidden;
}

.pkr-accordion-trigger {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--pkr-space-2);
	padding: var(--pkr-space-2) var(--pkr-space-3);
	cursor: pointer;
	list-style: none;
	font-weight: 600;
}

.pkr-accordion-trigger::-webkit-details-marker {
	display: none;
}

.pkr-accordion-icon {
	width: 20px;
	height: 20px;
	color: var(--pkr-gold);
	transition: transform var(--pkr-transition-base);
	flex-shrink: 0;
}

.pkr-accordion-item[open] .pkr-accordion-icon {
	transform: rotate(180deg);
}

.pkr-accordion-panel {
	padding: 0 var(--pkr-space-3) var(--pkr-space-3);
	color: var(--pkr-muted);
}

.pkr-faq-cta {
	text-align: center;
	border: 1px solid var(--pkr-border);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-4);
	margin-top: var(--pkr-space-4);
}

/* ==========================================================================
   23. Static page components
   ========================================================================== */

.pkr-page-hero {
	padding-block: var(--pkr-space-6);
	background: linear-gradient(120deg, #111, #16110a);
	border-bottom: 1px solid var(--pkr-border);
}

.pkr-page-hero-sub {
	color: var(--pkr-muted);
	max-width: 640px;
	margin-top: var(--pkr-space-1);
}

.pkr-wc-page-title {
	margin-bottom: var(--pkr-space-3);
}

.pkr-contact-list {
	list-style: none;
}

.pkr-contact-list li {
	margin-bottom: var(--pkr-space-1);
	color: var(--pkr-muted);
}

.pkrc-honeypot {
	position: absolute !important;
	left: -10000px !important;
	width: 1px !important;
	height: 1px !important;
	overflow: hidden !important;
}

.pkrc-form-success,
.pkrc-form-error {
	margin: 0 0 var(--pkr-space-2);
	padding: 10px 14px;
	border-radius: var(--pkr-radius-sm, 4px);
	font-size: 0.8rem;
	line-height: 1.4;
}

.pkrc-form-success {
	border: 1px solid rgba(214, 177, 93, 0.4);
	background: rgba(214, 177, 93, 0.1);
	color: var(--pkr-gold-light);
}

.pkrc-form-error {
	border: 1px solid rgba(217, 92, 92, 0.4);
	background: rgba(217, 92, 92, 0.1);
	color: var(--pkr-error);
}

.pkr-footer-dispatch .pkrc-form-success,
.pkr-footer-dispatch .pkrc-form-error {
	font-size: 0.7rem;
	padding: 8px 12px;
}

.pkrc-human-confirm label {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	color: var(--pkr-muted);
	font-size: 0.875rem;
}

.pkrc-human-confirm input {
	width: auto;
	margin-top: 3px;
}

.pkr-archive-search-panel {
	margin: var(--pkr-space-4) 0;
}

.pkr-archive-notice {
	border-top: 1px solid var(--pkr-border);
	padding-top: var(--pkr-space-4);
	margin-top: var(--pkr-space-4);
}

.pkr-article-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
}

.pkr-article-card {
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	border-radius: var(--pkr-radius-md);
	padding: var(--pkr-space-3);
}

.pkr-article-thumb img {
	border-radius: var(--pkr-radius-sm);
	margin-bottom: var(--pkr-space-1);
}

.pkr-404 {
	text-align: center;
}

.pkr-404-inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var(--pkr-space-1);
}

.pkr-404-inner .pkr-crown-lg {
	color: var(--pkr-gold);
	margin-bottom: var(--pkr-space-1);
}

.pkr-search-results {
	display: grid;
	grid-template-columns: 1fr;
	gap: var(--pkr-space-3);
}

.pkr-search-result-type {
	color: var(--pkr-gold);
	font-size: 0.75rem;
	text-transform: uppercase;
	letter-spacing: 0.06em;
}

/* ==========================================================================
   24. Responsive breakpoints — 480 / 768 / 1024 / 1280
   ========================================================================== */

@media (min-width: 480px) {
	.pkr-trust-bar-grid {
		grid-template-columns: repeat(2, 1fr);
	}

	.pkr-value-grid {
		grid-template-columns: repeat(2, 1fr);
	}

	.pkr-trust-badges {
		grid-template-columns: repeat(4, 1fr);
	}
}

@media (min-width: 768px) {
	/* 3 equal columns instead of 2, so an odd card count (e.g. 3 cards)
	   fills one clean row instead of leaving an empty gap beside the
	   last, orphaned card. */
	.pkr-value-grid-3 {
		grid-template-columns: repeat(3, 1fr);
	}

	.woocommerce ul.products {
		grid-template-columns: repeat(2, 1fr);
	}

	.pkr-article-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (min-width: 768px) {
	.pkr-shell {
		width: min(100% - (var(--pkr-gutter-desktop)), var(--pkr-shell-max));
	}

	.pkr-newsletter {
		grid-template-columns: auto 1fr auto;
		text-align: left;
	}

	.pkr-newsletter .pkr-crown-lg {
		margin-inline: 0;
	}

	.pkr-newsletter-form {
		margin-inline: 0;
	}

	.pkr-form-row-group {
		grid-template-columns: 1fr 1fr;
	}

	.pkr-split {
		grid-template-columns: 1.2fr 0.8fr;
	}

	.woocommerce ul.products {
		grid-template-columns: repeat(3, 1fr);
	}

	.woocommerce div.product {
		grid-template-columns: 1fr 1fr;
	}

	.pkr-stat-grid {
		grid-template-columns: repeat(4, 1fr);
	}

	.woocommerce-account .woocommerce {
		grid-template-columns: 240px 1fr;
	}

	.pkr-sticky-add-to-cart {
		display: none !important;
	}
}

@media (max-width: 767px) {
	.home .woocommerce ul.products,
	.single-product .related ul.products { display: flex !important; overflow-x: auto; scroll-snap-type: x mandatory; gap: 12px; padding-bottom: 10px; scrollbar-width: thin; }
	.home .woocommerce ul.products li.product,
	.single-product .related ul.products li.product { flex: 0 0 calc(100% - 34px); scroll-snap-align: start; }

	/* .pkr-hero itself is deliberately not restated here -- this was one
	   of several superseded `.pkr-hero { }` blocks left behind by earlier
	   patch attempts at the hero-cropping bug (go-live audit, Design/
	   Brand Audit §1). The current mobile treatment lives in the later,
	   more specific `@media (max-width:767px) { .pkr-hero {...} }` block
	   near the bottom of this file (search "background-size:100% auto"),
	   which already fully overrides every property this one used to set.
	   .pkr-hero-copy/-title/-sub below are untouched -- out of scope for
	   this cleanup, which was specifically about the base `.pkr-hero`
	   rule. */
	.pkr-hero-copy {
		max-width: 330px;
		margin-left: 0;
	}

	.pkr-hero-title {
		font-size: clamp(2.7rem, 13vw, 3.9rem);
	}

	.pkr-hero-sub {
		font-size: 1rem;
		max-width: 290px;
	}
}

/* ==========================================================================
   Complete resource, archive, affiliate, support, and checkout experience
   ========================================================================== */

.pkr-section-head--left {
	align-items: flex-start;
	text-align: left;
}

.pkr-section-head--left p {
	max-width: 62ch;
}

.pkr-archive-section {
	background: radial-gradient(circle at 85% 8%, rgba(214, 177, 93, .07), transparent 28%), #050606;
}

.pkr-archive-workspace {
	display: grid;
	gap: 24px;
}

.pkr-archive-search-panel,
.pkr-archive-guide {
	margin: 0;
	padding: clamp(20px, 3vw, 34px);
	border: 1px solid var(--pkr-border);
	background: linear-gradient(145deg, #101111, #080909);
}

.pkr-archive-search-panel .pkrc-document-search {
	margin-top: 22px;
}

.pkr-archive-guide {
	height: fit-content;
	background: linear-gradient(160deg, rgba(214, 177, 93, .12), #0c0c0c 42%);
}

.pkr-archive-guide-icon,
.pkr-resource-card-icon {
	display: grid;
	place-items: center;
	width: 48px;
	height: 48px;
	margin-bottom: 18px;
	color: var(--pkr-gold-light);
}

.pkr-archive-guide-icon svg,
.pkr-resource-card-icon svg {
	width: 100%;
	height: 100%;
}

.pkr-number-list {
	display: grid;
	gap: 16px;
	margin: 22px 0;
	padding: 0;
	counter-reset: archive-step;
	list-style: none;
}

.pkr-number-list li {
	position: relative;
	display: grid;
	gap: 3px;
	min-height: 42px;
	padding-left: 50px;
	counter-increment: archive-step;
}

.pkr-number-list li::before {
	content: counter(archive-step, decimal-leading-zero);
	position: absolute;
	left: 0;
	top: 0;
	display: grid;
	place-items: center;
	width: 36px;
	height: 36px;
	border: 1px solid var(--pkr-gold);
	border-radius: 50%;
	color: var(--pkr-gold-light);
	font: 700 .7rem var(--pkr-font-display);
}

.pkr-number-list span,
.pkr-archive-guide > p {
	color: var(--pkr-muted);
	font-size: .82rem;
}

.pkr-archive-trust-grid {
	display: grid;
	gap: 1px;
	margin-top: 24px;
	border: 1px solid var(--pkr-border);
	background: var(--pkr-border);
}

.pkr-archive-trust-grid article {
	display: flex;
	gap: 14px;
	padding: 20px;
	background: #090a0a;
}

.pkr-archive-trust-grid article > span {
	flex: 0 0 34px;
	color: var(--pkr-gold);
}

.pkr-archive-trust-grid svg {
	width: 34px;
	height: 34px;
}

.pkr-archive-trust-grid h3,
.pkr-archive-trust-grid p {
	margin: 0;
}

.pkr-archive-trust-grid p {
	margin-top: 4px;
	color: var(--pkr-muted);
	font-size: .78rem;
}

.pkr-resources-hero,
.pkr-shop-hero {
	background: radial-gradient(circle at 84% 28%, rgba(214, 177, 93, .12), transparent 24%), linear-gradient(110deg, #11100d, #080909 62%);
}

.pkr-about-hero {
	background: radial-gradient(circle at 82% 34%, rgba(214, 177, 93, .16), transparent 26%), linear-gradient(115deg, #121110, #0a0a09 66%);
}

.pkr-wholesale-hero {
	background: radial-gradient(circle at 85% 30%, rgba(214, 177, 93, .18), transparent 26%), linear-gradient(115deg, #131109, #0a0908 66%);
}

.pkr-resources-hero-grid,
.pkr-shop-hero-grid,
.pkr-resource-support-grid {
	display: grid;
	align-items: center;
	gap: 24px;
}

.pkr-resource-jump {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 10px;
}

.pkr-resource-jump a {
	display: grid;
	place-items: center;
	gap: 8px;
	min-height: 112px;
	padding: 16px;
	border: 1px solid var(--pkr-border-strong);
	background: rgba(4, 5, 5, .72);
	color: var(--pkr-cream);
	font: 700 .82rem var(--pkr-font-display);
	text-align: center;
}

.pkr-resource-jump a:hover,
.pkr-resource-jump a:focus-visible {
	border-color: var(--pkr-gold-light);
	background: rgba(214, 177, 93, .12);
}

.pkr-resource-jump svg {
	width: 28px;
	height: 28px;
	color: var(--pkr-gold);
}

.pkr-resource-directory {
	background: #050606;
}

.pkr-resource-card-grid {
	display: grid;
	gap: 14px;
}

.pkr-resource-card {
	position: relative;
	display: flex;
	min-height: 290px;
	flex-direction: column;
	align-items: flex-start;
	padding: clamp(22px, 3vw, 34px);
	overflow: hidden;
	border: 1px solid var(--pkr-border);
	background: linear-gradient(145deg, #111212, #090a0a);
	color: var(--pkr-cream);
}

.pkr-resource-card--featured {
	border-color: var(--pkr-gold);
	background: radial-gradient(circle at 90% 10%, rgba(214, 177, 93, .3), transparent 38%), linear-gradient(145deg, #17140f, #090a0a);
}

.pkr-resource-card:hover,
.pkr-resource-card:focus-visible {
	border-color: var(--pkr-gold);
	transform: translateY(-2px);
}

.pkr-resource-card-index {
	position: absolute;
	right: 22px;
	top: 18px;
	color: rgba(214, 177, 93, .28);
	font: 700 2.5rem var(--pkr-font-display);
}

.pkr-resource-card h3,
.pkr-resource-card p {
	margin: 0;
}

.pkr-resource-card p {
	margin-top: 10px;
	color: var(--pkr-muted);
}

.pkr-resource-card strong {
	margin-top: auto;
	padding-top: 22px;
	color: var(--pkr-gold-light);
	font-size: .78rem;
	text-transform: uppercase;
	letter-spacing: .05em;
}

.pkr-resource-support-band {
	border-top: 1px solid var(--pkr-border);
	background: linear-gradient(90deg, #13100a, #090a0a 62%);
}

.pkr-resource-support-grid h2,
.pkr-resource-support-grid p {
	margin: 0;
}

.pkr-resource-support-grid p {
	max-width: 68ch;
	margin-top: 8px;
	color: var(--pkr-muted);
}

.pkr-affiliate-hero {
	background: radial-gradient(circle at 83% 38%, rgba(214, 177, 93, .22), transparent 28%), linear-gradient(115deg, #15130d, #0a0908 68%);
}

.pkr-page-hero-grid,
.pkr-affiliate-hero-grid,
.pkr-affiliate-apply-grid,
.pkr-affiliate-standards-grid {
	display: grid;
	align-items: center;
	gap: clamp(28px, 5vw, 72px);
}

.pkr-hero-preview,
.pkr-affiliate-preview {
	padding: 22px;
	border: 1px solid var(--pkr-border-strong);
	border-radius: var(--pkr-radius-md);
	background: linear-gradient(165deg, rgba(214, 177, 93, .14), rgba(10, 8, 13, .92));
	box-shadow: 0 28px 70px rgba(0, 0, 0, .4);
}

.pkr-hero-preview-top,
.pkr-affiliate-preview-top {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	padding: 16px 18px;
	border-radius: calc(var(--pkr-radius-md) - 4px);
	border: 1px solid rgba(214, 177, 93, .35);
	background: linear-gradient(90deg, rgba(214, 177, 93, .28), rgba(214, 177, 93, .1));
}

.pkr-hero-preview-top span,
.pkr-hero-preview-grid small,
.pkr-affiliate-preview-top span,
.pkr-affiliate-preview-grid small {
	color: var(--pkr-muted);
	font-size: .65rem;
	letter-spacing: .05em;
}

.pkr-hero-preview-top strong,
.pkr-affiliate-preview-top strong {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: var(--pkr-gold-light);
	font-size: 1rem;
}

.pkr-status-dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: #6fd88a;
	box-shadow: 0 0 0 3px rgba(111, 216, 138, .25), 0 0 10px rgba(111, 216, 138, .7);
}

.pkr-hero-preview-grid,
.pkr-affiliate-preview-grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px;
	margin-top: 12px;
}

.pkr-hero-preview-grid > span,
.pkr-affiliate-preview-grid > span {
	display: grid;
	gap: 8px;
	padding: 16px 12px;
	border-radius: calc(var(--pkr-radius-md) - 4px);
	border: 1px solid var(--pkr-border);
	background: var(--pkr-panel);
	transition: border-color var(--pkr-transition-fast);
}

.pkr-hero-preview-grid > span:hover,
.pkr-affiliate-preview-grid > span:hover {
	border-color: var(--pkr-gold);
}

.pkr-hero-preview-icon,
.pkr-affiliate-preview-icon {
	display: inline-flex;
	width: 22px;
	height: 22px;
	color: var(--pkr-gold);
}

.pkr-hero-preview-icon svg,
.pkr-affiliate-preview-icon svg {
	width: 100%;
	height: 100%;
}

.pkr-hero-preview-grid strong,
.pkr-affiliate-preview-grid strong {
	color: var(--pkr-cream);
	font-size: .78rem;
}

.pkr-affiliate-path {
	background: #050606;
}

.pkr-affiliate-payouts-note {
	max-width: 640px;
	margin-top: var(--pkr-space-4);
}

.pkr-step-grid,
.pkr-affiliate-step-grid {
	display: grid;
	gap: 14px;
}

.pkr-step-grid article,
.pkr-affiliate-step-grid article {
	position: relative;
	min-height: 220px;
	padding: 28px;
	border: 1px solid var(--pkr-border);
	background: #0d0e0e;
}

.pkr-step-grid article > span,
.pkr-affiliate-step-grid article > span {
	display: grid;
	place-items: center;
	width: 42px;
	height: 42px;
	margin-bottom: 28px;
	border: 1px solid var(--pkr-gold);
	border-radius: 50%;
	color: var(--pkr-gold-light);
	font: 700 .75rem var(--pkr-font-display);
}

.pkr-step-grid h3,
.pkr-step-grid p,
.pkr-affiliate-step-grid h3,
.pkr-affiliate-step-grid p {
	margin: 0;
}

.pkr-step-grid p,
.pkr-affiliate-step-grid p {
	margin-top: 9px;
	color: var(--pkr-muted);
}

.pkr-affiliate-apply-copy {
	align-self: start;
}

.pkr-affiliate-apply-copy h2 {
	margin-top: 7px;
}

.pkr-affiliate-apply-copy > p {
	color: var(--pkr-muted);
}

.pkr-affiliate-apply-note {
	display: grid;
	gap: 5px;
	margin-top: 24px;
	padding: 18px;
	border-left: 3px solid var(--pkr-gold);
	background: rgba(214, 177, 93, .08);
}

.pkr-affiliate-apply-note span {
	color: var(--pkr-muted);
	font-size: .82rem;
}

.pkr-affiliate-form-shell {
	padding: clamp(20px, 3vw, 34px);
}

.pkr-new-ticket-panel {
	display: grid;
	gap: 24px;
	margin-top: 28px;
	padding: clamp(20px, 3vw, 30px);
	border: 1px solid var(--pkr-border);
	background: radial-gradient(circle at 100% 0, rgba(214, 177, 93, .1), transparent 32%), #0d0e0e;
}

.pkr-new-ticket-copy h3,
.pkr-new-ticket-copy p {
	margin: 0;
}

.pkr-new-ticket-copy p {
	margin-top: 8px;
	color: var(--pkr-muted);
}

.pkr-ticket-create-form > p,
.pkr-ticket-create-form .pkr-form-grid p {
	margin: 0 0 16px;
}

.pkr-ticket-create-form label,
.pkrc-form-label {
	display: block;
	margin-bottom: 7px;
	color: var(--pkr-gold-light);
	font-size: .72rem;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
}

.pkr-ticket-create-form small {
	display: block;
	margin-top: 7px;
	color: var(--pkr-muted);
}

.pkrc-turnstile-wrap {
	min-width: 0;
	margin: 0 0 18px;
}

.cf-turnstile {
	width: 100%;
	min-height: 65px;
}

/* Stripe lives in an iframe; the supported appearance config inherits these dark fields. */
.woocommerce-checkout #payment,
.woocommerce-checkout #payment div.payment_box,
.woocommerce-checkout .payment_box.payment_method_stripe,
.woocommerce-checkout .wc-stripe-upe-element,
.woocommerce-checkout .wc-stripe-upe-form {
	border-color: var(--pkr-border-strong) !important;
	background: #0b0c0c !important;
	color: var(--pkr-cream) !important;
}

.woocommerce-checkout #payment ul.payment_methods {
	padding: 0 !important;
	border: 0 !important;
}

.woocommerce-checkout #payment li.wc_payment_method {
	padding: 0;
	border: 0;
	background: transparent;
}

.woocommerce-checkout #payment li.wc_payment_method > label {
	display: flex;
	align-items: center;
	min-height: 48px;
	padding: 12px 14px;
	border: 1px solid var(--pkr-border-strong);
	background: #101111;
	color: var(--pkr-cream);
	font-weight: 700;
}

.woocommerce-checkout #payment div.payment_box {
	margin: 0 !important;
	padding: 16px !important;
	border: 1px solid var(--pkr-border-strong) !important;
	border-top: 0 !important;
}

/* Stripe's own payment_fields() prints a raw sandbox instructional line
   ("Test mode: use card 4242 4242 4242 4242...") directly into the
   checkout markup whenever the gateway's testmode setting is on -- see
   WC_Stripe_UPE_Payment_Gateway::payment_fields(). It isn't routed through
   a filter, so it can't be trimmed server-side like the Authorize.net
   banner (pkrc_hide_sandbox_test_copy() in pk-royal-core.php); hiding the
   node here is the supported, non-vendor-editing option. Sandbox/test mode
   itself is untouched -- this is presentation-only. */
.woocommerce-checkout #payment .testmode-info {
	display: none !important;
}

/* Mirrored checkout error (see initCheckoutPaymentErrorRecovery() in
   main.js) -- same .woocommerce-error look, just placed right above the
   Place Order button instead of only at the top of the page. */
.pkr-checkout-payment-error {
	margin: 0 0 16px !important;
}

@media (min-width: 768px) {
	.pkr-archive-trust-grid,
	.pkr-step-grid,
	.pkr-affiliate-step-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.pkr-resources-hero-grid,
	.pkr-shop-hero-grid,
	.pkr-resource-support-grid {
		grid-template-columns: minmax(0, 1fr) auto;
	}

	.pkr-resource-card-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.pkr-page-hero-grid,
	.pkr-affiliate-hero-grid,
	.pkr-affiliate-apply-grid,
	.pkr-affiliate-standards-grid {
		grid-template-columns: minmax(0, 1.05fr) minmax(380px, .95fr);
	}

	.pkr-new-ticket-panel {
		grid-template-columns: minmax(210px, .65fr) minmax(0, 1.35fr);
	}

	.pkr-ticket-create-form .pkr-form-grid {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 12px;
	}
}

@media (min-width: 1100px) {
	.pkr-archive-workspace {
		grid-template-columns: minmax(0, 1.55fr) minmax(300px, .45fr);
		align-items: start;
	}

	.pkr-archive-guide {
		position: sticky;
		top: 118px;
	}
}

@media (max-width: 767px) {
	.pkr-resource-jump {
		grid-template-columns: 1fr;
	}

	.pkr-resource-jump a {
		min-height: 72px;
		grid-template-columns: 30px 1fr;
		justify-items: start;
		text-align: left;
	}

	.pkr-resource-card {
		min-height: 250px;
	}

	.pkr-hero-preview-grid,
	.pkr-affiliate-preview-grid {
		grid-template-columns: 1fr;
	}

	.pkr-hero-preview-top,
	.pkr-affiliate-preview-top {
		align-items: flex-start;
		flex-direction: column;
	}

	.pkr-archive-search-panel,
	.pkr-archive-guide,
	.pkr-new-ticket-panel {
		padding: 18px;
	}
}

@media (max-width: 767px) {
	.pkr-header-inner {
		gap: 8px;
	}

	.pkr-header-inner.pkr-shell {
		width: calc(100% - 32px);
	}

	.pkr-brand {
		min-width: 0;
	}

	.pkr-brand-text strong {
		font-size: 0.75rem;
	}

	.pkr-brand-text small {
		display: none;
	}

	.pkr-crown {
		width: 24px;
		height: 24px;
	}

	.pkr-actions > .pkr-icon-btn,
	.pkr-actions > .pkr-cart-link {
		display: none;
	}

	.pkr-menu-toggle {
		padding: 8px;
	}

	.pkr-menu-toggle-label {
		display: none;
	}

	.pkr-sticky-add-to-cart.is-visible {
		display: flex;
	}

	body.pkr-has-sticky-cart .pkr-section:last-of-type {
		padding-bottom: var(--pkr-space-8);
	}
}

@media (min-width: 768px) {
	.woocommerce-account .woocommerce {
		display: grid;
		grid-template-columns: 260px minmax(0, 1fr);
		gap: var(--pkr-space-6);
		align-items: start;
	}

	.woocommerce-account .woocommerce-MyAccount-navigation,
	.woocommerce-account .woocommerce-MyAccount-content {
		float: none;
		width: auto;
	}
	.woocommerce-account .woocommerce-MyAccount-navigation { grid-column:1; grid-row:1; }
	.woocommerce-account .woocommerce-MyAccount-content { grid-column:2; grid-row:1; }
}

@media (min-width: 1024px) {
	.pkr-stat-band-grid,
	.pkr-affiliate-overview-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	.pkr-affiliate-rules-grid { grid-template-columns: 1fr 1fr; }

	/* At 2 columns, each item's icon+text pair is far narrower than its
	   half-width cell, so it sits flush left with a large empty gap
	   trailing it — one row of 4 evenly-spaced items reads as deliberate
	   instead of sparse, and matches the bordered category-tiles row
	   directly beneath it. Held off until 1024px (rather than the 768px
	   used elsewhere) because 4 columns is noticeably tight at 768px. */
	.pkr-trust-bar-grid {
		grid-template-columns: repeat(4, 1fr);
		gap: var(--pkr-space-4);
	}

	.pkr-nav {
		display: flex;
	}

	.pkr-menu-toggle {
		display: none;
	}

	.pkr-drawer,
	.pkr-drawer-overlay {
		display: none;
	}

	.pkr-shop-layout {
		grid-template-columns: 260px 1fr;
	}

	.woocommerce ul.products {
		grid-template-columns: repeat(3, 1fr);
	}
}

@media (min-width: 1280px) {
	.woocommerce ul.products {
		grid-template-columns: repeat(4, 1fr);
	}

	/* .pkr-hero's own wide-desktop padding override moved next to its
	   base rule in section "10. Hero" near the top of this file -- it
	   used to live here, but the base rule's own unconditional
	   padding-block (introduced by a later hero-cropping patch, same
	   specificity, declared further down in the file) silently won the
	   cascade for every width including this one, defeating this
	   override entirely (go-live audit, Design/Brand Audit §1, P0: "one
	   confirmed-live bug (desktop >=1280px padding) results from this
	   fragility"). Declaring it after the base rule instead of before it
	   is what actually lets it take effect again. */
}

/* ==========================================================================
   Reference-board fidelity overrides
   ========================================================================== */

.pkr-product-primary { display: grid; gap: 28px; align-items: start; }
.pkr-product-gallery,
.pkr-product-information { min-width: 0; }
.pkr-product-gallery .woocommerce-product-gallery { width: 100% !important; float: none !important; }
.pkr-product-gallery .woocommerce-product-gallery__trigger { display: none !important; }
.pkr-product-gallery .woocommerce-product-gallery__wrapper { margin: 0; border: 1px solid var(--pkr-border-strong); background: radial-gradient(circle at 50% 40%,#2a210f,#050505 68%); }
.pkr-product-gallery .woocommerce-product-gallery__image { overflow:hidden; }
.pkr-product-gallery .woocommerce-product-gallery__image img { width: 100%; aspect-ratio: 1/1; object-fit: cover; transition:transform .28s ease; }
.pkr-product-gallery .woocommerce-product-gallery__image { cursor: default !important; }
.pkr-reference-thumbnails { display: grid; grid-template-columns: repeat(4,1fr); gap: 8px; margin-top: 10px; }
.pkr-reference-thumb { display:block; overflow:hidden; padding: 3px; border: 1px solid var(--pkr-border); background: #0b0b0b; cursor:pointer; }
.pkr-reference-thumb.is-active { border-color: var(--pkr-gold); }
.pkr-reference-thumb img { display: block; width: 100%; aspect-ratio: 1/1; object-fit: cover; }
.pkr-reference-thumb:only-child { grid-column:span 1; max-width:96px; }
.pkr-actions .pkr-icon-btn,
.pkr-menu-toggle,
#pkr-drawer-close { min-width:44px; min-height:44px; }
.pkr-filter-toggle { display:none; width:100%; min-height:48px; border:1px solid var(--pkr-gold); background:#0b0b0b; color:var(--pkr-gold-light); font-weight:700; text-transform:uppercase; }
.pkr-filter-checkbox { min-height:44px; align-items:center; }
.pkr-price-range input,
.pkr-icon-btn { min-height:44px; min-width:44px; }
.pkr-product-information { padding: 10px 0; }
.pkr-product-information .product_title { font-size: clamp(1.8rem,3vw,2.8rem); }
/* Composition-first blend names (e.g. "GHK-Cu / BPC-157 / TB-500 / KPV
   Blend (Klow)") are 45-51 characters -- the default clamp above was
   tuned for 1-2 word names and wraps 3-4 lines at that length, pushing
   price/variant selector/CTA down the page. title.php adds this modifier
   class once the title exceeds ~30 characters. */
.pkr-product-information .product_title.pkr-product-title--long { font-size: clamp(1.4rem,2.1vw,2rem); line-height: 1.25; }
.pkr-product-information .price { font-size: 1.7rem; }
.pkr-product-information .woocommerce-product-details__short-description { font-size: .9rem; line-height: 1.55; color: var(--pkr-muted); }
.pkr-product-information form.cart { display: flex; flex-wrap: wrap; gap: 10px; align-items: flex-end; }
.pkr-product-information form.cart .variations { flex: 1 0 100%; margin: 8px 0; }
.pkr-product-information form.cart .quantity { width: 122px; }
.pkr-product-information .single_add_to_cart_button,
.pkr-product-information .pkr-buy-now { min-height: 48px; border-radius: 2px; }
.pkr-product-details { grid-column: 1/-1; margin-top: 10px; }
.pkr-product-details .woocommerce-tabs { width: 100%; }
.pkr-product-details .woocommerce-tabs .panel { margin: 0; padding: 18px 12px; border: 1px solid var(--pkr-border); border-bottom: 0; }
.pkr-product-details .woocommerce-tabs .panel:last-child { border-bottom: 1px solid var(--pkr-border); }
.pkr-product-details .woocommerce-tabs .panel > h2:first-child { margin: 0; font-size: .88rem; letter-spacing: .08em; text-transform: uppercase; }
.pkr-product-information .woocommerce-tabs { margin-top: 22px; }
.pkr-product-information .woocommerce-tabs ul.tabs { display: none; }
.pkr-product-accordion-toggle { display: flex; align-items: center; justify-content: space-between; width: 100%; min-height: 48px; padding: 0 12px; border: 0; border-top: 1px solid var(--pkr-border); background: transparent; color: var(--pkr-cream); font: 600 .75rem var(--pkr-font-body); letter-spacing: .04em; text-align: left; text-transform: uppercase; cursor: pointer; }
.pkr-product-accordion-toggle:last-of-type { border-bottom: 1px solid var(--pkr-border); }
.pkr-product-accordion-toggle span:last-child { color: var(--pkr-gold); font-size: 1.2rem; }
.pkr-product-information .woocommerce-tabs .panel { margin: 0; padding: 14px 12px; border: 1px solid var(--pkr-border); border-top: 0; font-size: .78rem; }

.woocommerce-cart .woocommerce { display: grid; gap: 22px; }
.woocommerce-cart .woocommerce-cart-form { min-width: 0; }
.woocommerce-cart .cart-collaterals { min-width: 0; }
.woocommerce-cart .cart-collaterals .cart_totals { width: 100%; float: none; margin: 0; border-radius: 2px; }
.pkr-cart-summary h2 { font-size: 1.35rem; }
.pkr-cart-secure-action { margin-top: 12px; }
.pkr-secure-checkout-note { display: flex; align-items: center; justify-content: center; gap: 6px; color: var(--pkr-gold-light); font-size: .78rem; text-align: center; }
.pkr-secure-checkout-icon { display: inline-flex; flex: 0 0 auto; width: 14px; height: 14px; }
.pkr-secure-checkout-icon svg { width: 100%; height: 100%; }
.pkr-checkout-assurances { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 14px; list-style: none; color: var(--pkr-muted); font-size: .68rem; }
.pkr-cart-row .product-thumbnail img { width: 82px; height: 82px; object-fit: cover; }

/* Checkout is a single continuous form (one <form>, one "Place order"
   button) -- this nav is an in-page table-of-contents / jump-link outline
   to the sections below, not a multi-step wizard, so it deliberately avoids
   numbered "step 1 of 4" circles or a connecting progress line. Each link
   is a real same-page anchor (href="#id"); main.js's initCheckoutSteps()
   IntersectionObserver only adds/removes .is-active on .pkr-checkout-outline-item
   as the matching section scrolls into view -- it does not gate navigation
   or submission in any way. #customer_details and #order_review_heading
   (the only two headed sections that exist in the checkout markup) get
   their scroll offset from the sticky header via the global
   `html { scroll-padding-top }` rule near the top of this file (same
   pattern used by .pkr-faq-jump-pill). */
.pkr-checkout-outline-nav { margin: 0 0 24px; }
.pkr-checkout-outline { display: flex; flex-wrap: wrap; gap: 4px; list-style: none; padding: 0; margin: 0; border-bottom: 1px solid var(--pkr-border); }
.pkr-checkout-outline-item { margin: 0; }
.pkr-checkout-outline-link { display: inline-flex; align-items: center; min-height: 44px; padding: 0 14px; border-bottom: 2px solid transparent; color: var(--pkr-muted); font-size: .72rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; text-decoration: none; transition: color var(--pkr-transition-base), border-color var(--pkr-transition-base); }
.pkr-checkout-outline-link:hover { color: var(--pkr-gold-light); }
.pkr-checkout-outline-link:focus-visible { outline: 2px solid var(--pkr-gold); outline-offset: 2px; color: var(--pkr-gold-light); }
.pkr-checkout-outline-item.is-active .pkr-checkout-outline-link { color: var(--pkr-gold); border-color: var(--pkr-gold); }

@media (max-width: 767px) {
	.pkr-checkout-outline { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
	.pkr-checkout-outline-link { padding: 0 12px; font-size: .68rem; white-space: nowrap; }
}
#customer_details,
#order_review_heading { scroll-margin-top: 100px; }
.pkr-checkout-layout { display: grid; gap: 24px; align-items: start; }
.pkr-checkout-customer,
.pkr-checkout-order { min-width: 0; border: 1px solid var(--pkr-border); background: #0a0a0a; padding: 20px; }
.pkr-checkout-order { position: sticky; top: 24px; }
.pkr-checkout-customer h2,
.pkr-checkout-order h2 { font-size: 1.2rem; }
.pkr-checkout-customer .col2-set .col-1,
.pkr-checkout-customer .col2-set .col-2 { float: none; width: 100%; }
.woocommerce-checkout #order_review { padding: 0; border: 0; background: transparent; }
.woocommerce-checkout .woocommerce-form-coupon-toggle .woocommerce-info { background: #0e0e0e; color: var(--pkr-muted); border-color: var(--pkr-border); }

.pkr-account-quick-actions { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 10px; margin: 18px 0; }
.pkr-account-action { padding: 14px; border: 1px solid var(--pkr-border); background: #0d0d0d; }
.pkr-account-action strong { display: block; color: var(--pkr-gold-light); font-family: var(--pkr-font-display); }
.pkr-account-action span { color: var(--pkr-muted); font-size: .72rem; }
.pkr-account-dashboard .pkr-stat-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }
.pkr-account-recent-orders { border: 1px solid var(--pkr-border); padding: 16px; }

@media (min-width: 768px) {
	.pkr-product-primary { grid-template-columns: minmax(0,.9fr) minmax(0,1.1fr); }
	.pkr-checkout-layout { grid-template-columns: minmax(0,1.35fr) minmax(340px,.75fr); }
	.woocommerce-cart .woocommerce { grid-template-columns: minmax(0,2fr) minmax(300px,.8fr); align-items: start; }
	.woocommerce-cart .woocommerce > .woocommerce-notices-wrapper,
	.woocommerce-cart .woocommerce > .pkr-cart-continue { grid-column: 1/-1; }
}

@media (min-width: 1024px) {
	.post-type-archive-product .woocommerce ul.products,
	.tax-product_cat .woocommerce ul.products,
	.post-type-archive-product ul.products,
	.tax-product_cat ul.products { grid-template-columns: repeat(3,minmax(0,1fr)) !important; }
}

.pkr-strength-buttons { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; }
.pkr-strength-button { min-width:64px; min-height:44px; padding:8px 14px; border:1px solid var(--pkr-border-strong); background:#0b0b0b; color:var(--pkr-cream); font-weight:700; cursor:pointer; }
.pkr-strength-button:hover,
.pkr-strength-button:focus-visible,
.pkr-strength-button.is-selected { border-color:var(--pkr-gold); background:var(--pkr-gold); color:#050505; }
.pkr-product-information .variations select.pkr-has-strength-buttons { position:absolute!important; width:1px!important; height:1px!important; overflow:hidden!important; clip:rect(0 0 0 0)!important; white-space:nowrap!important; }
.pkr-product-information .woocommerce-variation-description { display:none; }

/* Keep the universal footer dense like the reference board. */
.pkr-footer { padding-top:28px; }
.pkr-footer-menu li { margin-bottom:6px; }
.pkr-footer-menu a { font-size:.78rem; }

@media (max-width: 767px) {
	.pkr-footer { padding-top:22px; }
	.pkr-newsletter { gap:10px; }
	.pkr-newsletter-title { font-size:1.55rem; line-height:1; }
	.pkr-newsletter p { margin:6px 0; font-size:.75rem; }
	.pkr-newsletter-input,
	.pkr-newsletter-form .pkr-btn { min-height:44px; padding-block:8px; }
	.pkr-social-row { display:none; }
	.pkr-footer-col h3 { margin-bottom:6px; font-size:.72rem; }
	.pkr-footer-menu li { margin-bottom:4px; line-height:1.25; }
	.pkr-footer-menu li:nth-child(n+4) { display:none; }
	.pkr-footer-menu a { font-size:.68rem; }
	.pkr-trust-badges { grid-template-columns:repeat(3,minmax(0,1fr)); gap:6px; padding-block:10px; }
	.pkr-trust-badge { font-size:.63rem; }
	.pkr-trust-badge svg { width:15px; height:15px; }
	.pkr-payment-row { padding-block:10px; font-size:.7rem; }
}

/* Shop archive filter sidebar collapses in lockstep with the primary nav
   (see the `.pkr-nav`/`.pkr-menu-toggle` min-width:1024px block above) so
   there's no dead zone where the header has already switched to the mobile
   hamburger but the filter sidebar is still rendering in its full,
   always-expanded desktop form with no toggle (was previously max-width:767px,
   leaving 768-1023px broken). `.pkr-shop-layout` itself only becomes a
   260px-sidebar + grid two-column layout at min-width:1024px too, so below
   that the sidebar is always a full-width stacked block and needs the
   toggle/collapse behavior regardless of exact width. */
@media (max-width: 1023px) {
	.pkr-filter-toggle { display:block; grid-column:1/-1; }
	.pkr-shop-sidebar { display:none; grid-column:1/-1; }
	.pkr-shop-sidebar.is-open { display:block; }
}

@media (max-width: 767px) {
	.pkr-checkout-order { position:static; }
	.pkr-home-catalog-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
	.pkr-home-catalog-link { min-height: 68px; padding: 10px; border-right: 1px solid var(--pkr-border); }
	.pkr-home-catalog-link:last-child { grid-column: 1/-1; }
	.pkr-home-catalog-link strong { font-size: .68rem; }
	.pkr-footer-menu li:nth-child(n+5) { display: none; }
	.pkr-product-information form.cart { display: grid; grid-template-columns: 1fr 1fr; }
	.pkr-product-information form.cart .variations { grid-column: 1/-1; }
	.pkr-product-information form.cart .quantity { width: 100%; }
	.pkr-product-information .single_add_to_cart_button,
	.pkr-product-information .pkr-buy-now { width: 100%; }
	.pkr-checkout-customer,
	.pkr-checkout-order { padding: 14px; }
}

/* ==========================================================================
   Reference board correction pass — shared shell, hero, notices, footer
   ========================================================================== */

html,
body { background:#050606 !important; color:var(--pkr-cream); }

.pkr-brand-text strong { font-size:.9rem; letter-spacing:.045em; text-transform:uppercase; }
.pkr-brand-text small { font-size:7px; letter-spacing:.11em; }

/* This rule went through several rounds of narrow-band cover-crop fixes
   (a flat min-height, then a min() correction for 768-924px, then a
   separate clamp() with an 840px ceiling for 1680px+) because
   background-size:cover is crop-by-definition any time the container's
   aspect ratio doesn't exactly match the source photo's (1672x941,
   ~1.7768:1) -- and the lion statue's mane touches the photo's own
   top-left edge, so ANY crop off the top or left is immediately visible.
   No amount of per-breakpoint patching of a crop-based approach can
   guarantee zero crop at literally every width, so this uses
   background-size:contain instead: the full photo (lion, bottle, crown)
   is always entirely visible, at every viewport width, with zero
   cropping -- ever.
   min-height is deliberately UNCAPPED and always exactly tracks the
   photo's own aspect ratio (56.28vw = 100vw / 1.7768, only floored at
   520px -- unchanged from the original design -- below ~924px so the
   narrow-tablet band doesn't get too short). That keeps the container's
   aspect ratio matched to the photo's at every width from ~924px up, so
   contain renders the image at exactly the container's full width with
   ZERO letterbox/pillarbox, at any width, including ultra-wide/4K/
   ultrawide monitors -- not just up to some tuned ceiling. An earlier
   version of this rule capped min-height at an 840px ceiling to avoid an
   very tall hero on ultra-wide screens; that decoupled the rendered
   image's width from the viewport width past ~1493px, and because
   .pkr-hero-copy is positioned inside the horizontally-centered
   .pkr-shell (which keeps growing with viewport width via
   --pkr-shell-max), the copy drifted rightward into the now-static-width
   image and started overlapping the bottle past ~2200px viewport width.
   Removing the ceiling keeps the image's width in lockstep with the
   viewport at every size, which is the same invariant the original
   cover-based design (and .pkr-hero-copy's margin-left tuning) already
   relied on, so it's crop-free AND overlap-free everywhere, at the cost
   of a hero section that grows tall on very wide/ultra-wide viewports --
   an explicit, deliberate trade-off in favor of the photo (and the copy
   layered over it) always rendering correctly. background-position is
   left/top (not center) so the lion stays anchored to the container's
   left edge, matching .pkr-hero-copy's own left-anchored layout, and the
   lion's mane -- which already sits flush against the photo's own top
   edge -- stays flush against the top of the hero too.

   (This comment explains the isolation/min-height/padding-block/
   background/overflow values on the consolidated `.pkr-hero` base rule
   itself, which now lives with the rest of section "10. Hero" near the
   top of this file -- kept here, next to `.pkr-hero-copy`'s own
   margin-left reasoning right below, since both were tuned together
   against the same measurements.) */
.pkr-hero::before {
	content:'';
	position:absolute;
	inset:0;
	z-index:-1;
	background:linear-gradient(90deg,rgba(0,0,0,.05) 0%,rgba(0,0,0,.08) 19%,rgba(0,0,0,.84) 31%,rgba(0,0,0,.76) 56%,rgba(0,0,0,.04) 73%);
	pointer-events:none;
}
/* margin-left needs to clear the lion's mane, which -- now that
   background-size:contain shows it uncropped -- has its bright/detailed
   edge at a measured, fairly constant ~24% of .pkr-hero's own rendered
   width (verified across 768-1000px via direct pixel sampling) for as
   long as the image spans the full section width (roughly 768px up to
   --pkr-shell-max, 1680px). The previous clamp(200px,25vw,365px) was
   tuned against the OLD cover-cropped view, which showed less of the
   mane and needed less clearance; against the now fully-visible mane it
   undershoots by up to ~20px through most of that range. 27vw with a
   215px floor keeps a comfortable buffer over the measured ~24% edge at
   every width in that range; the 440px cap is deliberately loose because
   past --pkr-shell-max .pkr-shell itself becomes centered and narrower
   than the viewport, which shifts .pkr-hero-copy (a shell child) away
   from the mane (an absolutely-positioned-relative-to-the-viewport
   background) even faster than the margin itself grows -- verified
   crop/overlap-free up to 3440px. */
.pkr-hero-copy { max-width:520px; margin-left:clamp(215px,27vw,440px); }
.pkr-hero-title { font-size:clamp(2.8rem,4.8vw,4.8rem); max-width:560px; }
/* Each line is a deliberate, intentional break ("The King's" / "Standard" /
   "in Research") set by the markup itself (three separate spans), not a
   natural text wrap. Without white-space:nowrap, "in Research" — the only
   two-word line — can wrap a second time on its own at wide viewports
   where the clamped font-size makes it wider than max-width, turning the
   intended 3-line heading into 4 with "in" stranded alone on its own line. */
.pkr-hero-title-line { display:block; text-transform:uppercase; white-space:nowrap; }
.pkr-hero-copy > .pkr-eyebrow { display:flex; align-items:center; gap:10px; }
.pkr-hero-copy > .pkr-eyebrow::before { content:''; width:38px; height:1px; background:var(--pkr-gold); }
.pkr-hero-sub { font-size:1rem; max-width:390px; }

/* No wide-viewport override needed here anymore: .pkr-hero's own
   min-height:max(520px, 56.28vw) above is deliberately uncapped, so it
   already scales smoothly across every width -- including past
   --pkr-shell-max (1680px) and on ultra-wide (2560px+/3440px+) monitors
   -- with zero crop (background-size:contain) and zero letterbox/
   pillarbox (the aspect ratio always matches once past the 520px floor).
   See the base .pkr-hero rule's comment for the full reasoning, including
   why an earlier capped version of this formula caused a copy/image
   overlap bug at ultra-wide widths. */

/* .pkr-shell (the shared container for the header, footer, and every
   in-page section -- including the shop archive's .pkr-shop-layout) hard-
   caps at --pkr-shell-max (1680px). That's fine up to ~1920px, but on true
   ultra-wide monitors (2560px+) the fixed 1680px column leaves two equal,
   ever-growing black gutters (roughly a third of the viewport combined at
   2560px) that -- against this theme's near-black page background -- are
   easy to misread as broken/unstyled rather than intentional margin,
   especially on content-dense pages like /shop/ that have no full-bleed
   imagery of their own to visually anchor the edges the way the homepage
   hero does. Let the shell itself grow slower than the viewport past this
   point so wide monitors are put to better use, capped so it never
   approaches full-bleed on the very widest displays. Threshold matches
   where .pkr-hero above starts its own wide-viewport scaling; the 0.55
   growth rate is deliberately less than 1:1 so centered margins remain
   visible (never reads as full-bleed) at any width. */
@media (min-width: 1920px) {
	:root {
		--pkr-shell-max: min(2200px, calc(1680px + (100vw - 1920px) * 0.55));
	}
}

.woocommerce-message,
.woocommerce-info,
.woocommerce-error {
	background:#0b0c0c !important;
	color:var(--pkr-cream) !important;
	border:1px solid var(--pkr-border-strong) !important;
	box-shadow:none !important;
}
.woocommerce-message::before,
.woocommerce-info::before { color:var(--pkr-gold) !important; }
.woocommerce-error::before { color:var(--pkr-error) !important; }
.woocommerce-message a.button,
.woocommerce-info a.button { background:var(--pkr-gold) !important; color:#080808 !important; }

/* WooCommerce core floats the notice's action button right (wc-forward,
   e.g. "Confirm email address"); on narrow viewports that leaves too
   little width for the message text to wrap beside it, so unfloat and
   stack instead. */
@media (max-width: 560px) {
	.woocommerce-message,
	.woocommerce-info,
	.woocommerce-error { padding: 1em 1.25em 1.25em 3.5em; }
	.woocommerce-message .button,
	.woocommerce-info .button,
	.woocommerce-error .button {
		float: none;
		display: block;
		width: 100%;
		margin: 0.75em 0 0;
		text-align: center;
	}
}
.woocommerce-checkout h1.entry-title { margin-bottom:20px; }

.pkr-footer-reference { padding:12px 0 0; border:1px solid var(--pkr-border-strong); border-radius:0 0 28px 28px; background:#050707; }
.pkr-footer-reference-grid { position:relative; z-index:0; display:grid; gap:12px; align-items:start; padding-bottom:10px; }
.pkr-footer-dispatch h2 { margin:0 0 5px; font-size:1.15rem; white-space:nowrap; }
.pkr-footer-dispatch p,
.pkr-footer-reference-brand p,
.pkr-footer-assurance p { margin:0 0 9px; color:var(--pkr-muted); font-size:.8125rem; line-height:1.45; }
.pkr-footer-dispatch-form { display:flex; flex-direction:column; gap:6px; }
.pkr-footer-dispatch-label { display:block; font-size:.75rem; color:var(--pkr-muted); }
.pkr-footer-dispatch-form-row { display:flex; }
.pkr-footer-dispatch-form input { min-width:0; width:100%; height:38px; padding:7px 10px; border:1px solid var(--pkr-border); border-radius:2px 0 0 2px; background:#0d0e0e; color:var(--pkr-cream); font-size:.8125rem; }
.pkr-footer-dispatch-form .pkr-btn { min-height:38px; padding:7px 15px; border-radius:0 2px 2px 0; font-size:.75rem; }
/* Visual order only (source order is unchanged — PKRC_Forms::render_contact_antispam()
   is shared by several forms and its honeypot/timing fields must stay adjacent to the
   nonce, so we don't reorder the markup itself). The email input + Subscribe button
   should read as the primary action, with the anti-spam challenge (Turnstile widget or
   the local math fallback) appearing underneath it, not above. The honeypot field is
   always visually hidden via .pkrc-honeypot (position:absolute, off-screen) regardless
   of flex order, so its position here has no visible effect. */
.pkr-footer-dispatch-form > .pkr-footer-dispatch-label { order: 1; }
.pkr-footer-dispatch-form > .pkr-footer-dispatch-form-row { order: 2; }
.pkr-footer-dispatch-form > .pkrc-turnstile-wrap,
.pkr-footer-dispatch-form > .pkrc-form-row,
.pkr-footer-dispatch-form > p.pkrc-form-error {
	order: 3;
	margin: 8px 0 0;
}
/* Retired photoreal footer-crown-v2 (3D crown/marble render, propped up
   with a mix-blend-mode:screen hack against the near-black footer bg) in
   favor of the same master flat-line crown used in the announcement bar,
   scaled up as a faint watermark, and paints low-opacity behind the
   sibling footer content -- which is why it needs a stacking context on
   the grid (see .pkr-footer-reference-grid) to keep z-index:-1 scoped to
   the footer instead of falling behind the page background.

   align-self:stretch (overriding the grid's own align-items:start) makes
   this cell's height track its row's tallest sibling -- e.g. the brand
   column's wrapped copy on the 2-col mobile layout, or the longest nav
   column on wider layouts -- instead of sitting fixed at min-height:84px
   while a much taller absolutely-positioned+centered SVG (its rendered
   height tracks width, which is unconstrained past ~415px viewport) blows
   out past that 84px box symmetrically top and bottom. Previously that
   overflow was `visible`, so on viewports roughly 420-767px wide -- where
   the row's actual height (set by the brand column's copy) still left
   less slack below the crown's own 84px box than the SVG overflowed by --
   the crown's lower half painted directly over the "Shop" nav column
   sitting in the very next grid row. overflow:hidden here clips the
   watermark to its own row's real bounds at every width, so it can only
   ever appear behind/within its own cell, never bleed into a sibling. */
.pkr-footer-crown { position:relative; align-self:stretch; min-height:84px; overflow:hidden; pointer-events:none; }
.pkr-footer-crown svg {
	position:absolute;
	top:50%;
	left:50%;
	width:240px;
	height:auto;
	transform:translate(-50%,-50%);
	color:var(--pkr-gold);
	opacity:.1;
	z-index:-1;
}
.pkr-footer-reference-brand .pkr-brand { margin-bottom:7px; }
.pkr-footer-reference-brand .pkr-brand-mark { width:24px; }
.pkr-footer-reference .pkr-social-row { margin-top:8px; gap:5px; }
.pkr-footer-reference .pkr-social-row a,
.pkr-footer-reference .pkr-social-row span { width:24px; height:24px; font-size:9px; }
.pkr-footer-reference .pkr-social-row svg { width:13px; height:13px; }
.pkr-footer-reference .pkr-footer-col h3 { margin:0 0 2px; font-size:.75rem; }
.pkr-footer-reference .pkr-footer-menu li { margin:0; line-height:1.1; }
.pkr-footer-reference .pkr-footer-menu a { display:inline-flex; align-items:center; min-height:24px; font-size:.75rem; }
.pkr-footer-assurance { padding-left:12px; border-left:1px solid var(--pkr-border); text-align:center; }
.pkr-footer-assurance h3 { margin:0 0 4px; color:var(--pkr-gold-light); font-size:.78rem; text-transform:uppercase; }
.pkr-footer-assurance-items { display:grid; grid-template-columns:repeat(3,1fr); gap:7px; margin-top:10px; }
.pkr-footer-assurance-items span { display:grid; place-items:center; gap:4px; color:var(--pkr-gold); }
.pkr-footer-assurance-items svg { width:20px; height:20px; }
.pkr-footer-assurance-items small { color:var(--pkr-muted); font-size:.75rem; text-transform:uppercase; }
.pkr-footer-reference-bottom { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; padding-block:7px; border-top:1px solid var(--pkr-border); color:#8f8b83; font-size:.75rem; }
.pkr-footer-reference-bottom span:nth-child(2) { text-align:center; }
.pkr-footer-reference-bottom span:last-child { text-align:right; }

@media (min-width:1100px) {
	.pkr-footer-reference-grid { grid-template-columns:1.55fr .9fr 1.35fr repeat(4,.75fr) 1.35fr; }
}

@media (min-width:768px) and (max-width:1099px) {
	.pkr-footer-reference-grid { grid-template-columns:repeat(4,minmax(0,1fr)); }
	.pkr-footer-assurance { grid-column:auto; padding-left:10px; }
}

/* background-position no longer needs a tablet-band override here --
   background-size:contain (set on the base .pkr-hero rule) never crops,
   so there's no crop framing left to compensate for at this width. The
   old margin-left:102px override is gone too: it was tuned against the
   OLD cover-cropped lion, which showed less mane and needed less
   clearance. Against the fully-visible mane, 102px overlapped it badly
   (confirmed by screenshot at 768-900px). Falling through to
   .pkr-hero-copy's own clamp(215px,27vw,440px) (see its comment) clears
   the mane correctly at this band too, since that formula was verified
   across this exact width range. The max-width/font-size narrowing
   below is unrelated to the crop fix and still applies, since this band
   is narrow enough to need its own tighter layout regardless of the
   hero image treatment. */
@media (min-width:768px) and (max-width:900px) {
	.pkr-hero::before { background:linear-gradient(90deg,rgba(0,0,0,.05) 0%,rgba(0,0,0,.1) 16%,rgba(0,0,0,.9) 28%,rgba(0,0,0,.86) 57%,rgba(0,0,0,.08) 72%); }
	.pkr-hero-copy { max-width:330px; }
	.pkr-hero-title { max-width:330px; font-size:2.35rem; }
	.pkr-hero-sub { max-width:310px; font-size:.84rem; }
	.pkr-hero .pkr-btn { padding:10px 14px; font-size:.7rem; }
}

/* .pkr-hero-sub's base max-width (390px, set above) is safe from ~1200px
   viewport width up, but not below it: the bottle/crown's own leading
   edge is a measured, constant ~63.5% of .pkr-hero's rendered width (same
   pixel-sampling method used for the mane), and margin-left (see its own
   comment) has to keep growing through this range to stay clear of the
   mane on the other side -- so from ~901px (where the tablet band above
   stops narrowing the copy column) up to ~1199px, margin-left + 390px
   overruns the bottle before the two constraints separate enough to
   share a comfortable column with no override at all (confirmed by
   screenshot: the word "shown" ran into the bottle/crown at 1000px).
   Reusing the tablet band's own 310px keeps the paragraph in the same
   visual family as 768-900px and is comfortably narrow enough to clear
   the bottle throughout this gap band too. */
@media (min-width:901px) and (max-width:1199px) {
	.pkr-hero-sub { max-width:300px; }
}

@media (max-width:767px) {
	.pkr-header { top:0; }
	.pkr-hero {
		min-height:640px;
		padding:28px 0 260px;
		align-items:flex-start;
		background-color:#030303;
		background-position:center bottom;
		background-size:100% auto;
		background-repeat:no-repeat;
	}
	.pkr-hero::before { background:linear-gradient(180deg,#030303 0%,rgba(3,3,3,.96) 51%,rgba(3,3,3,.12) 76%); }
	.pkr-hero-copy { max-width:none; margin-left:0; }
	/* Desktop deliberately forces white-space:nowrap on each title line
	   (see .pkr-hero-title-line) so "in Research" can't auto-wrap a
	   second time at wide viewports. At mobile widths the clamped
	   font-size still produces lines wider than the viewport, and
	   nowrap has no fallback — it just overflows the box horizontally
	   instead of wrapping, which silently inflates .pkr-hero's own
	   rendered width far past the viewport and corrupts every
	   percentage-based background-size calculation on it (the hero
	   photo was rendering ~3x too large and cropped to a single zoomed
	   sliver as a result). Restore normal wrapping here so an
	   over-length line just breaks onto a second line instead. */
	.pkr-hero-title-line { white-space:normal; }
	.pkr-hero-title { font-size:clamp(2.3rem,11.5vw,3.35rem); line-height:.98; }
	.pkr-hero-sub { max-width:330px; font-size:.9rem; }
	.pkr-hero .pkr-button-row { display:grid; grid-template-columns:1fr; max-width:270px; }
	.pkr-footer-reference { border-radius:0 0 20px 20px; padding-top:12px; }
	.pkr-footer-reference-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
	.pkr-footer-dispatch,
	.pkr-footer-assurance { grid-column:1/-1; }
	.pkr-footer-crown { grid-column:1; min-height:84px; }
	.pkr-footer-reference-brand { grid-column:2; }
	.pkr-footer-crown svg { width:200px; }
	.pkr-footer-reference-brand p { font-size:.75rem; line-height:1.35; }
	.pkr-footer-reference-brand .pkr-social-row { display:none; }
	.pkr-footer-assurance { padding:12px 0 0; border-left:0; border-top:1px solid var(--pkr-border); }
	.pkr-footer-reference .pkr-footer-menu li:nth-child(n+5) { display:none; }
	.pkr-footer-reference-bottom { grid-template-columns:1fr; gap:4px; }
	.pkr-footer-reference-bottom span,
	.pkr-footer-reference-bottom span:nth-child(2),
	.pkr-footer-reference-bottom span:last-child { text-align:left; }
}

.pkr-royal-collections { padding:44px 0 52px; border-bottom:1px solid var(--pkr-border); background:radial-gradient(circle at 50% 0,rgba(214,177,93,.08),transparent 45%),#080909; }
.pkr-royal-collections-head { display:grid; justify-items:center; gap:5px; margin-bottom:24px; text-align:center; }
.pkr-royal-collections-head h2 { margin:0; color:var(--pkr-gold-light); }
.pkr-royal-collections-head p { margin:0; color:var(--pkr-muted); }
.pkr-crown-divider { width:28px; color:var(--pkr-gold); }
.pkr-crown-divider svg { width:100%; }
.pkr-royal-collection-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:18px; }
.pkr-royal-collection-card { position:relative; display:grid; grid-template-columns:1.1fr .9fr; min-height:260px; overflow:hidden; border:1px solid var(--pkr-border-strong); background:linear-gradient(120deg,#111 0%,#080808 65%); color:var(--pkr-cream); }
.pkr-royal-collection-card::before { content:''; position:absolute; inset:0; background:linear-gradient(90deg,rgba(0,0,0,.05),rgba(0,0,0,.3)); pointer-events:none; }
/* Queen's Collection keeps its own violet identity -- gold is the house
   accent everywhere else (including King's Collection), but Queen's
   branding (this card, its CTA button, and its product-card border in the
   shop grid) is intentionally the exception. */
.pkr-royal-collection-card-queen {
  background:
    radial-gradient(circle at 68% 62%, rgba(214, 177, 93, .07), transparent 18%),
    radial-gradient(circle at 84% 16%, rgba(74, 34, 107, .32), transparent 26%),
    linear-gradient(120deg, #1b1022, #09090b 68%);
}
.pkr-royal-collection-copy { position:relative; z-index:1; display:flex; flex-direction:column; justify-content:center; align-items:flex-start; gap:10px; padding:30px; text-align:center; }
.pkr-royal-collection-copy strong { width:100%; color:var(--pkr-gold-light); font:600 1.35rem var(--pkr-font-display); text-transform:uppercase; }
.pkr-royal-collection-card-queen .pkr-royal-collection-copy strong { color:#ead2f5; }
.pkr-royal-collection-copy small { width:100%; color:var(--pkr-muted); font-size:.78rem; line-height:1.5; }
.pkr-royal-collection-copy .pkr-btn { align-self:center; margin-top:6px; }
.pkr-royal-collection-card img { align-self:end; width:100%; height:100%; object-fit:cover; object-position:center; mix-blend-mode:screen; }
.pkr-royal-collection-card:hover { border-color:var(--pkr-gold); }

@media (max-width:767px) {
	.pkr-royal-collections { padding:32px 0 38px; }
	.pkr-royal-collection-grid { grid-template-columns:1fr; }
	.pkr-royal-collection-card { min-height:230px; }
	.pkr-royal-collection-copy { padding:20px; }
	.pkr-royal-collection-copy strong { font-size:1.05rem; }
	.pkr-royal-collection-copy .pkr-btn { padding:9px 12px; font-size:.65rem; }
}

/* ==========================================================================
   Fluid storefront shell and clearer product-option flow
   ========================================================================== */

html,
body,
.pkr-main {
	width: 100%;
	min-height: 100%;
	background: #050606 !important;
}

body,
.pkr-main {
	overflow-x: clip;
}

/* The footer is a true edge-to-edge band; its content still follows the
 * responsive shell so it grows and contracts with the viewport. */
.pkr-footer-reference {
	width: 100%;
	max-width: none;
	margin: 0;
	border-right: 0;
	border-left: 0;
	border-radius: 0;
}

.pkr-strength-row-enhanced {
	display: block;
}

.variations_form .variations .pkr-strength-row-enhanced th {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
}

.variations_form .variations .pkr-strength-row-enhanced td {
	display: block;
	width: 100%;
}

.pkr-strength-picker {
	padding: 14px;
	border: 1px solid var(--pkr-border);
	background: linear-gradient(145deg, #101111, #080909);
}

.pkr-strength-heading {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 10px;
	color: var(--pkr-gold-light);
	font-family: var(--pkr-font-display);
	font-size: .8rem;
	font-weight: 700;
	letter-spacing: .08em;
	text-transform: uppercase;
}

.pkr-strength-status {
	color: var(--pkr-muted);
	font-family: var(--pkr-font-body);
	font-size: .67rem;
	font-weight: 500;
	letter-spacing: 0;
	text-transform: none;
}

.pkr-strength-buttons {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));
	gap: 8px;
	margin: 0;
}

.pkr-strength-button {
	position: relative;
	display: grid;
	gap: 2px;
	min-width: 0;
	min-height: 62px;
	padding: 10px 34px 10px 12px;
	border: 1px solid #4a402c;
	border-radius: 3px;
	background: #090a0a;
	color: var(--pkr-cream);
	text-align: left;
	transition: border-color var(--pkr-transition-fast), background var(--pkr-transition-fast), transform var(--pkr-transition-fast);
}

.pkr-strength-button:hover,
.pkr-strength-button:focus-visible {
	border-color: var(--pkr-gold);
	background: #151208;
	color: var(--pkr-cream);
	transform: translateY(-1px);
}

.pkr-strength-button.is-selected {
	border-color: var(--pkr-gold-light);
	background: linear-gradient(145deg, rgba(214, 177, 93, .22), rgba(214, 177, 93, .06));
	color: var(--pkr-cream);
	box-shadow: inset 0 0 0 1px rgba(240, 213, 139, .18);
}

.pkr-strength-value {
	color: var(--pkr-gold-light);
	font: 700 1rem var(--pkr-font-display);
}

.pkr-strength-caption {
	color: var(--pkr-muted);
	font-size: .66rem;
	font-weight: 500;
}

.pkr-strength-check {
	position: absolute;
	top: 50%;
	right: 12px;
	display: grid;
	place-items: center;
	width: 18px;
	height: 18px;
	border: 1px solid var(--pkr-border-strong);
	border-radius: 50%;
	color: transparent;
	font-size: .65rem;
	transform: translateY(-50%);
}

.pkr-strength-button.is-selected .pkr-strength-check {
	border-color: var(--pkr-gold);
	background: var(--pkr-gold);
	color: #050505;
}

.pkr-strength-button:disabled {
	opacity: .45;
	cursor: not-allowed;
}

/* Reference-style product cards: the card content is the action. */
.woocommerce ul.products li.pkr-product-card {
	display: flex;
	flex-direction: column;
}

.woocommerce ul.products li.pkr-product-card .woocommerce-LoopProduct-link {
	position: relative;
	z-index: 1;
	display: flex;
	flex: 1;
	flex-direction: column;
}

.woocommerce ul.products li.pkr-product-card .woocommerce-LoopProduct-link:focus-visible {
	outline: 2px solid var(--pkr-gold-light);
	outline-offset: 5px;
}

.pkr-product-information form.cart .quantity {
	display: inline-flex !important;
	flex: 0 0 132px;
	flex-wrap: nowrap;
	align-items: stretch;
	width: 132px;
	min-height: 48px;
	margin: 0 !important;
	overflow: hidden;
	border: 1px solid var(--pkr-border-strong);
	border-radius: 3px;
	background: #090a0a;
}

.pkr-product-information .woocommerce-variation-add-to-cart {
	display: flex;
	flex-wrap: wrap;
	align-items: stretch;
	gap: 10px;
}

.pkr-product-information form.cart .quantity .qty {
	flex: 1 1 auto;
	width: 44px;
	min-width: 0;
	height: 46px;
	margin: 0 !important;
	padding: 0 !important;
	border: 0 !important;
	border-right: 1px solid var(--pkr-border) !important;
	border-left: 1px solid var(--pkr-border) !important;
	border-radius: 0;
	background: #0d0e0e !important;
	color: var(--pkr-cream) !important;
	text-align: center;
}

.pkr-product-information form.cart .pkr-qty-btn {
	display: grid;
	flex: 0 0 44px;
	place-items: center;
	width: 44px;
	height: 46px;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--pkr-gold-light);
}

@media (max-width: 767px) {
	.pkr-strength-picker {
		padding: 12px;
	}

	.pkr-strength-heading {
		align-items: flex-start;
		flex-direction: column;
		gap: 2px;
	}

	.pkr-product-information form.cart .quantity {
		grid-column: 1 / -1;
		flex-basis: 100%;
		width: 100%;
	}

	.pkr-product-information .woocommerce-variation-add-to-cart {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		width: 100%;
	}

	.pkr-product-information form.cart .single_variation_wrap {
		grid-column: 1 / -1;
		width: 100%;
	}
}

.pkr-footer-reference-brand,
.pkr-footer-reference-brand .pkr-brand,
.pkr-footer-reference-brand .pkr-brand-text {
	min-width: 0;
}

@media (min-width: 768px) and (max-width: 1099px) {
	.pkr-footer-reference-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.pkr-footer-assurance {
		grid-column: 2 / 4;
	}
}

/* ==========================================================================
   Account support tickets
   ========================================================================== */

.pkr-ticket-account-note {
	margin: 0 0 18px;
	padding: 12px 14px;
	border-left: 3px solid var(--pkr-gold);
	background: rgba(214, 177, 93, .08);
	color: var(--pkr-muted);
	font-size: .82rem;
}

.pkr-ticket-account-note a,
.pkr-ticket-back {
	color: var(--pkr-gold-light);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.pkr-support-tickets {
	min-width: 0;
}

.pkr-ticket-page-head,
.pkr-ticket-detail-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
	margin-bottom: 22px;
}

.pkr-ticket-page-head h2,
.pkr-ticket-detail-head h2 {
	margin: 0;
}

.pkr-ticket-empty,
.pkr-ticket-resolved-note {
	padding: 28px;
	border: 1px solid var(--pkr-border);
	background: #0d0e0e;
}

.pkr-ticket-empty p,
.pkr-ticket-resolved-note p {
	margin: 6px 0 0;
	color: var(--pkr-muted);
}

.pkr-ticket-list {
	display: grid;
	gap: 8px;
}

.pkr-ticket-list-item {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto auto;
	align-items: center;
	gap: 18px;
	min-height: 72px;
	padding: 14px 16px;
	border: 1px solid var(--pkr-border);
	background: #0d0e0e;
	transition: border-color var(--pkr-transition-fast), background var(--pkr-transition-fast);
}

.pkr-ticket-list-item:hover,
.pkr-ticket-list-item:focus-visible {
	border-color: var(--pkr-gold);
	background: #141208;
}

.pkr-ticket-list-item > span:first-child {
	display: grid;
	gap: 3px;
}

.pkr-ticket-list-item strong {
	color: var(--pkr-gold-light);
	font-family: var(--pkr-font-display);
}

.pkr-ticket-list-item small,
.pkr-ticket-list-item time {
	color: var(--pkr-muted);
	font-size: .75rem;
}

.pkr-ticket-status {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-height: 30px;
	padding: 5px 10px;
	border: 1px solid var(--pkr-border-strong);
	border-radius: var(--pkr-radius-pill);
	color: var(--pkr-gold-light);
	font-size: .68rem;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
}

.pkr-ticket-status--awaiting-customer {
	border-color: var(--pkr-gold);
	background: rgba(214, 177, 93, .18);
	color: var(--pkr-gold-light);
}

.pkr-ticket-status--resolved {
	border-color: rgba(76, 175, 130, .55);
	color: #83d8ad;
}

.pkr-ticket-back {
	display: inline-flex;
	min-height: 44px;
	align-items: center;
	margin-bottom: 12px;
}

.pkr-ticket-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 10px 24px;
	margin-bottom: 18px;
	padding: 12px 14px;
	border: 1px solid var(--pkr-border);
	background: #0a0b0b;
}

.pkr-ticket-meta span {
	display: flex;
	gap: 8px;
	color: var(--pkr-muted);
	font-size: .78rem;
}

.pkr-ticket-meta strong {
	color: var(--pkr-cream);
}

.pkr-ticket-thread {
	display: grid;
	gap: 12px;
	margin-bottom: 20px;
}

.pkr-ticket-message {
	max-width: 82%;
	padding: 14px 16px;
	border: 1px solid var(--pkr-border);
	background: #101111;
}

.pkr-ticket-message--staff {
	margin-left: auto;
	border-color: var(--pkr-gold);
	background: rgba(214, 177, 93, .12);
}

.pkr-ticket-message--system {
	max-width: 100%;
	border-style: dashed;
	color: var(--pkr-muted);
	text-align: center;
}

.pkr-ticket-message header {
	display: flex;
	justify-content: space-between;
	gap: 12px;
	margin-bottom: 7px;
}

.pkr-ticket-message header strong {
	color: var(--pkr-gold-light);
	font-size: .8rem;
}

.pkr-ticket-message header time {
	color: var(--pkr-muted);
	font-size: .7rem;
}

.pkr-ticket-message p {
	margin: 0;
	color: var(--pkr-cream);
	font-size: .86rem;
}

.pkr-ticket-actions-panel {
	display: grid;
	gap: 16px;
	padding: 18px;
	border: 1px solid var(--pkr-border);
	background: #0d0e0e;
}

.pkr-ticket-reply-form label {
	display: block;
	margin-bottom: 7px;
	color: var(--pkr-gold-light);
	font-weight: 700;
}

.pkr-ticket-reply-form textarea {
	margin-bottom: 10px;
}

@media (max-width: 767px) {
	.pkr-ticket-page-head,
	.pkr-ticket-detail-head {
		align-items: flex-start;
		flex-direction: column;
	}

	.pkr-ticket-list-item {
		grid-template-columns: 1fr auto;
		gap: 8px 12px;
	}

	.pkr-ticket-list-item time {
		grid-column: 1 / -1;
	}

	.pkr-ticket-message {
		max-width: 100%;
	}

	.pkr-ticket-message header {
		flex-direction: column;
		gap: 2px;
	}
}

.pkrc-order-tracking-result a {
	color: var(--pkr-gold-light);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.pkrc-order-tracking-result a:hover {
	color: var(--pkr-gold);
}

/* ==========================================================================
   Login / Register — single centered card, one view at a time
   ========================================================================== */

.pkr-auth-shell {
	display: flex;
	justify-content: center;
	/* The account-dashboard grid (.woocommerce-account .woocommerce) reserves a
	   260px nav column via grid-template-columns at desktop widths, sized for
	   the logged-in .woocommerce-MyAccount-navigation sibling. On the logged-out
	   login/register view this is the only child, so without spanning both
	   columns it gets auto-placed into that narrow first track. */
	grid-column: 1 / -1;
}

.pkr-auth-panel {
	width: 100%;
	max-width: 460px;
	margin-top: 0;
	/* .pkr-new-ticket-panel switches to a 2-column (copy | form) grid at
	   wider viewports for the support-ticket panel it was built for; this
	   single-view auth card should always stack copy above form instead. */
	grid-template-columns: 1fr;
}

.pkr-auth-panel .pkr-new-ticket-copy p {
	max-width: none;
}

.pkr-auth-row-inline {
	display: flex;
	align-items: center;
	justify-content: space-between;
	flex-wrap: wrap;
	gap: 12px;
	margin-bottom: var(--pkr-space-3);
}

.pkr-auth-lost-link {
	color: var(--pkr-muted);
	font-size: 0.85rem;
	text-decoration: underline;
	text-underline-offset: 3px;
}

.pkr-auth-lost-link:hover {
	color: var(--pkr-gold-light);
}

.pkr-auth-switch {
	margin: var(--pkr-space-3) 0 0;
	text-align: center;
	color: var(--pkr-muted);
	font-size: 0.9rem;
}

.pkr-auth-switch-link {
	color: var(--pkr-gold-light);
	font-weight: 600;
	text-decoration: underline;
	text-underline-offset: 3px;
	margin-left: 4px;
}

.pkr-auth-switch-link:hover {
	color: var(--pkr-gold);
}

@media (max-width: 560px) {
	.pkr-form-row-group {
		grid-template-columns: 1fr;
	}
}

/* ==========================================================================
   Landscape phone handling — homepage & product pages
   ==========================================================================
   Every breakpoint above keys off *width* alone, tuned for a portrait
   phone/tablet: a landscape phone (e.g. 812x375, 926x428 -- wider than the
   767px "phone" cutoff but only 375-428px *tall*) ends up rendered like a
   portrait tablet, which is a poor fit at this height. Two concrete
   problems this causes: (1) the homepage's full-height hero plus several
   sections that are still single-column between 768-1023px (a gap between
   the 767px phone-portrait treatment and the 1024px tablet-landscape one)
   stack into far more vertical scrolling than the same content needs at a
   normal portrait phone height; (2) the product page's two-column
   gallery/info layout (see .pkr-product-primary, min-width:768px) pairs a
   short, square gallery image with a much taller info column via
   align-items:start, so once the visitor scrolls past the image's own
   height there's a large blank void beside the remaining info column
   content for the rest of the page. `orientation: landscape` combined
   with a `max-height` catches genuinely short viewports (phones held
   sideways) without touching portrait tablets/phones at the same width,
   or standard desktop windows. */
@media (orientation: landscape) and (max-height: 500px) {
	/* Hero: drop the fixed min-height so it sizes to its own (already
	   compact) copy instead of reserving 520px+ -- more than the entire
	   viewport height -- regardless of content. */
	.pkr-hero {
		min-height: 0;
		padding-block: 20px;
	}

	.pkr-hero-sub {
		margin-top: 6px;
	}

	/* Trust bar, catalog nav: one row instead of stacking two-across (trust
	   bar) or single-column (catalog nav, in the un-covered 768-1023px gap
	   between the phone and tablet-landscape breakpoints above). */
	.pkr-trust-bar-grid {
		grid-template-columns: repeat(4, 1fr);
	}

	.pkr-trust-item {
		flex-direction: column;
		align-items: flex-start;
		gap: 4px;
	}

	.pkr-home-catalog-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	/* Featured-products grid on the homepage: 2 columns (the min-width:768px
	   default) means 4 featured products stack into 2 full rows; there's
	   width to spare at 812-926px, so let it use it and finish in 1 row. */
	.home .woocommerce ul.products {
		grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
	}

	/* Product page: let the gallery column actually stretch to the row's
	   full height (matching the info column) so the sticky image below has
	   room to stick as the visitor scrolls the info column -- instead of
	   scrolling away after ~335px and leaving the rest of the row blank
	   beside the remaining info content.
	   Selector note: intentionally `.pkr-product-gallery .woocommerce-product-gallery`,
	   not the `.woocommerce div.product .woocommerce-product-gallery` pattern used
	   elsewhere in this file (e.g. the min-width:1024px sticky attempt above) --
	   wc_product_class() renders the product wrapper as an <article>, not a
	   <div>, so `div.product` never matches it and that pattern is dead on this
	   theme at any breakpoint. `.pkr-product-gallery` (the actual <section>
	   wrapper from content-single-product.php) matches regardless of the
	   wrapper's tag name. */
	.pkr-product-gallery {
		align-self: stretch;
	}

	.pkr-product-gallery .woocommerce-product-gallery {
		position: sticky;
		top: 88px;
		align-self: start;
	}
}
