/* plugpress.co — base: reset, type, rhythm, buttons. Tokens only, no raw hex. */

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

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

body {
	margin: 0;
	background: var(--bg);
	color: var(--ink);
	font-family: var(--font-sans);
	font-size: var(--text-body);
	line-height: 1.65;
	-webkit-font-smoothing: antialiased;
}

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

/* re-anchors a section to the brand blue inside a product-accent scope;
   --surface is the white token (restores on-accent text where a page-level
   override, like Waggle's ink-on-gold, is active) */
.accent-reset { --accent: var(--blue); --on-accent: var(--surface); }

/* in-page anchors clear the 56px sticky menu bar */
[id] { scroll-margin-top: calc(56px + var(--space-4)); }
/* product pages stack the 32px wp-admin bar + 56px product bar (46px ≤782px) */
.pp-product-page [id] { scroll-margin-top: calc(32px + 56px + var(--space-4)); }
@media (max-width: 782px) {
	.pp-product-page [id] { scroll-margin-top: calc(46px + 56px + var(--space-4)); }
}

/* touch: no double-tap zoom delay, no gray tap flash — :active + focus rings carry the feedback */
a, button, summary { touch-action: manipulation; -webkit-tap-highlight-color: transparent; }

h1, h2, h3 {
	font-family: var(--font-display);
	font-weight: 600;
	line-height: 1.1;
	margin: 0 0 var(--space-4);
	letter-spacing: -0.015em;
	text-wrap: balance;
}
h1 { font-size: var(--text-h1); line-height: 1.02; letter-spacing: -0.025em; font-weight: 700; }
h2 { font-size: var(--text-h2); }
h3 { font-size: var(--text-h3); }

p { margin: 0 0 var(--space-4); }
p:last-child { margin-bottom: 0; }
p, li, figcaption { text-wrap: pretty; }

a { color: var(--blue); text-decoration: none; }
a:hover { text-decoration: underline; text-underline-offset: 3px; }

:focus-visible {
	outline: 2px solid var(--blue);
	outline-offset: 2px;
	border-radius: 2px;
}

::selection { background: var(--marker); color: var(--ink); }

/* mono = the artifact voice: filenames, versions, counts, real data only */
.mono {
	font-family: var(--font-mono);
	font-size: var(--text-mono);
	letter-spacing: 0;
}

.muted { color: var(--ink-soft); }

/* highlighter — founder-note emphasis only, hand-drawn skew */
mark {
	background: linear-gradient(100deg,
		transparent 1%, var(--marker) 4%,
		var(--marker) 96%, transparent 99%);
	color: inherit;
	padding: 0.05em 0.25em;
	margin-inline: -0.05em;
	border-radius: 2px;
	display: inline;
	box-decoration-break: clone;
	-webkit-box-decoration-break: clone;
}

/* layout */
.container {
	max-width: var(--container);
	margin-inline: auto;
	padding-inline: clamp(1.25rem, 4vw, 2rem);
}
.container--narrow { max-width: var(--container-narrow); }
.container--wide { max-width: var(--container-wide); }

/* Vertical rhythm: every section pads exactly --space-section; sections
   separate by band alternation, never ad-hoc margins. Dotted hairlines are
   component-internal only (marquee rails, table rows, signature, desk edge). */
.section { padding-block: var(--space-section); }

.section-head { max-width: 34em; margin-bottom: var(--space-7); }
.section-head p { color: var(--ink-soft); }
/* centered variant — sections whose content is centered (pricing cards) */
.section-head--center { text-align: center; margin-inline: auto; }
/* a lead section opens the page (no hero banner above it) — extra top
   breathing room where the banner used to be; the h1 keeps its normal scale
   but gets hero width so it breaks like a headline, not a paragraph */
.section-head--lead { padding-top: var(--space-6); max-width: 44rem; }

/* selecting text = the founder's highlighter */
::selection { background: var(--marker); color: var(--ink); }

.eyebrow {
	font-family: var(--font-mono);
	font-size: var(--text-label);
	letter-spacing: 0.02em;
	color: var(--ink-soft);
	display: block;
	margin-bottom: var(--space-4);
}
/* a link inside the mono eyebrow (post byline → author archive): inherits the
   muted ink, underline is the non-colour cue */
.eyebrow a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
.eyebrow a:hover { color: var(--ink); }

/* buttons — liquid-glass pills (Fahim, 2026-07-28): translucent fills over a
   backdrop blur + a top-light inset gloss, and a 1px ink border on every
   variant. Quiet at rest; a 1px lift + soft tinted glow on hover, a fast
   press on :active. CTAs say what happens next. */
.btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5em;
	height: 40px;
	padding-inline: 1.25rem;
	border-radius: 999px;
	border: 1px solid var(--ink);
	font: 500 0.875rem/1 var(--font-sans);
	letter-spacing: -0.006em;
	cursor: pointer;
	-webkit-backdrop-filter: blur(12px) saturate(1.5);
	backdrop-filter: blur(12px) saturate(1.5);
	box-shadow: inset 0 1px 0 color-mix(in srgb, var(--surface) 45%, transparent);
	transition: background-color .15s ease, border-color .15s ease,
		translate .15s var(--ease-out), box-shadow .15s ease;
}
.btn:hover { text-decoration: none; translate: 0 -1px; }
.btn:active { translate: 0 0; transition-duration: .06s; }

/* --on-accent pairs with --accent, NOT with --blue. A product that sets
   on_accent => 'ink' (Waggle, whose gold needs ink) would otherwise paint ink
   on the blue fill — 2.6:1. Blue surfaces take --surface directly.
   Fills stay ≥92% opaque — enough see-through for the glass to read on a
   canvas, not enough to drop the label below AA. */
.btn--primary { background: color-mix(in srgb, var(--blue) 92%, transparent); color: var(--surface); }
.btn--primary:hover {
	background: color-mix(in srgb, var(--blue-hover) 94%, transparent);
	box-shadow:
		inset 0 1px 0 color-mix(in srgb, var(--surface) 45%, transparent),
		0 6px 16px -6px color-mix(in srgb, var(--blue) 40%, transparent);
}

.btn--ghost { background: color-mix(in srgb, var(--surface) 55%, transparent); color: var(--ink); }
.btn--ghost:hover {
	background: color-mix(in srgb, var(--surface) 75%, transparent);
	box-shadow:
		inset 0 1px 0 color-mix(in srgb, var(--surface) 45%, transparent),
		0 2px 8px color-mix(in srgb, var(--ink) 6%, transparent);
}

/* accent (product headers/CTA bands) — inherits per-product --accent */
.btn--accent { background: color-mix(in srgb, var(--accent) 92%, transparent); color: var(--on-accent); }
.btn--accent:hover {
	filter: brightness(1.1);
	box-shadow:
		inset 0 1px 0 color-mix(in srgb, var(--surface) 45%, transparent),
		0 6px 16px -6px color-mix(in srgb, var(--accent) 40%, transparent);
}

/* inverted — frosted white pill for use on accent/canvas bands */
.btn--invert { background: color-mix(in srgb, var(--surface) 70%, transparent); color: var(--ink); }
.btn--invert:hover { background: color-mix(in srgb, var(--surface) 90%, transparent); }

/* pending — checkout not open yet (B6). Reads as a real control that is off,
   not as a washed-out ghost: the label stays at full --ink-soft (5.5:1 on
   --surface-alt) so it's readable, and the cursor says it won't respond.
   The one variant without the ink border — a disabled control must not
   present as the strongest button on screen. */
.btn--pending {
	background: var(--surface-alt);
	color: var(--ink-soft);
	border-color: var(--line);
	cursor: not-allowed;
}
.btn--pending:hover { translate: 0 0; }

.btn--small { height: 32px; padding-inline: 0.9rem; font-size: var(--text-mono); }
.btn--large { height: 44px; padding-inline: 1.4rem; font-size: var(--text-small); }

/* hero CTAs — 20px/500 (Fahim, 2026-07-28); the pill grows with the label.
   Placed after --small/--large so it wins on hero buttons carrying those. */
.hero .btn,
.desktop__intro .btn {
	height: 52px;
	padding-inline: 1.6rem;
	font-size: var(--text-btn-hero);
	font-weight: 500;
}

.btn__glyph { width: 1.05em; height: 1.05em; flex: none; fill: currentColor; }

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

/* price note under a CTA row — prices are data, so mono. Keeps button labels verb-first. */
.btn-footnote {
	margin-top: var(--space-3);
	font-family: var(--font-mono);
	font-size: var(--text-mono);
	color: var(--ink-soft);
}

/* card — the one surface primitive: hairline, card radius, no shadow */
.card {
	background: var(--surface);
	border: 1px solid var(--line);
	border-radius: var(--r-card);
}

/* dotted hairline — the heyclicky separator */
.rule-dotted { border: 0; border-top: 1px dotted var(--line-strong); margin: 0; }

/* ---------- section bands ---------- */
.band { background: var(--bg); padding-block: var(--space-section); }
.band--gray { background: var(--band); }
.band--tint { background: color-mix(in srgb, var(--accent) 7%, var(--surface)); }
.band--blue {
	background: linear-gradient(180deg, var(--blue-deep-a), var(--blue-deep-b));
	color: var(--surface); /* blue fill — see the .btn--primary note above */
}
.band--blue h2, .band--blue .section-head p { color: var(--surface); }

/* ---------- scroll reveal ---------- */
@media (prefers-reduced-motion: no-preference) {
	.pp-js .reveal { opacity: 0; transform: translateY(16px); transition: opacity .5s ease, transform .5s ease; }
	.pp-js .reveal.is-visible { opacity: 1; transform: none; }
}

/* honest placeholder slots — pending content is labeled, never faked */
.placeholder-slot {
	display: grid;
	place-items: center;
	min-height: 200px;
	border: 1.5px dashed var(--line);
	border-radius: var(--r-inner);
	background: var(--tint);
	color: var(--ink-soft);
	font-family: var(--font-mono);
	font-size: var(--text-mono);
	text-align: center;
	padding: var(--space-5);
}

/* accessibility */
.screen-reader-text {
	position: absolute;
	clip-path: inset(50%);
	width: 1px; height: 1px;
	overflow: hidden;
	white-space: nowrap;
}

.skip-link {
	position: absolute;
	left: var(--space-4);
	top: -100px;
	z-index: 100;
	background: var(--ink);
	color: var(--bg);
	padding: var(--space-2) var(--space-4);
	border-radius: 0 0 var(--r-inner) var(--r-inner);
}
.skip-link:focus { top: 0; }

@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
}
