/* ==========================================================================
   Alphure Core: shared design primitives used by every alphure/* block.
   Token values come from theme.json presets; fallbacks keep blocks intact if the theme changes.
   ========================================================================== */

:root {
	--alp-ink: var(--wp--preset--color--ink, #1A1F1A);
	--alp-ink-2: var(--wp--preset--color--ink-2, #2A302A);
	--alp-forest: var(--wp--preset--color--forest, #2F6B4F);
	--alp-honey: var(--wp--preset--color--honey, #E7B84A);
	--alp-canvas: var(--wp--preset--color--canvas, #EFF0EA);
	--alp-paper: var(--wp--preset--color--paper, #F8F9F4);
	--alp-white: var(--wp--preset--color--white, #FFFFFF);
	--alp-sage: var(--wp--preset--color--sage, #E3E9DF);
	--alp-sand: var(--wp--preset--color--sand, #F4ECD6);
	--alp-mint: var(--wp--preset--color--mint, #9FD3B6);
	--alp-leaf: var(--wp--preset--color--leaf, #6FAE8A);
	--alp-sage-2: #DCEBE3;
	--alp-honey-soft: #F6E7C6;
	--alp-honey-deep: #8A5A00;
	--alp-line: var(--wp--preset--color--line, #D8DCD1);
	--alp-line-soft: var(--wp--preset--color--line-soft, #E3E6DF);
	--alp-stone: var(--wp--preset--color--stone, #C9CEC4);
	--alp-muted: var(--wp--preset--color--muted, #5E665C);
	--alp-faint: var(--wp--preset--color--faint, #9AA096);
	--alp-clay: var(--wp--preset--color--clay, #C2452D);
	--alp-display: var(--wp--preset--font-family--display, 'Bricolage Grotesque', sans-serif);
	--alp-body: var(--wp--preset--font-family--body, 'Inter', sans-serif);
	--alp-spring: var(--wp--custom--ease--spring, cubic-bezier(.34,1.56,.64,1));
	--alp-out: var(--wp--custom--ease--out, cubic-bezier(.16,1,.3,1));
	--alp-in: var(--wp--custom--ease--in, cubic-bezier(.5,0,.75,0));
	--alp-hatch: repeating-linear-gradient(135deg, rgba(26,31,26,.07) 0 1px, transparent 1px 11px);
	--alp-hatch-light: repeating-linear-gradient(135deg, rgba(248,249,244,.1) 0 1px, transparent 1px 11px);
	--alp-shadow-float: 0 40px 80px -40px rgba(26,31,26,.3);
	--alp-shadow-hover: 0 30px 50px -30px rgba(26,31,26,.35);
	--alp-shadow-hero: 0 60px 120px -40px rgba(26,31,26,.55);
	--alp-gutter: 40px;
}
@media (max-width: 820px) { :root { --alp-gutter: 20px; } }

:where(.alp-block) { box-sizing: border-box; font-family: var(--alp-body); color: var(--alp-ink); }
.alp-block *, .alp-block *::before, .alp-block *::after { box-sizing: border-box; }
:where(.alp-block) a { text-decoration: none; color: inherit; }
:where(.alp-block) :where(h1, h2, h3, h4, h5, h6, p, figure, blockquote, ul, ol) { margin: 0; }
:where(.alp-block) :where(ul, ol) { padding: 0; list-style: none; }
:where(.alp-block) :where(button) { font-family: inherit; }
:where(.alp-block) :where(img) { display: block; max-width: 100%; height: auto; }

/* Layout */
.alp-wrap { max-width: 1360px; margin-inline: auto; padding-inline: var(--alp-gutter); }
.alp-wrap--1200 { max-width: 1200px; }
.alp-wrap--1100 { max-width: 1100px; }
.alp-slab { margin-inline: 16px; border-radius: 32px; }
.alp-grid12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 20px; }
.alp-tone--paper { background: var(--alp-paper); color: var(--alp-ink); }
.alp-tone--canvas { background: var(--alp-canvas); color: var(--alp-ink); }
.alp-tone--white { background: var(--alp-white); color: var(--alp-ink); }
.alp-tone--sage { background: var(--alp-sage); color: var(--alp-ink); }
.alp-tone--sand { background: var(--alp-sand); color: var(--alp-ink); }
.alp-tone--honey { background: var(--alp-honey); color: var(--alp-ink); }
.alp-tone--forest { background: var(--alp-forest); color: var(--alp-white); }
.alp-tone--ink { background: var(--alp-ink); color: var(--alp-paper); }
.alp-tone--forest .alp-eyebrow, .alp-tone--ink .alp-eyebrow { color: inherit; opacity: .6; }
.alp-tone--forest .alp-muted, .alp-tone--ink .alp-muted { color: inherit; opacity: .7; }

/* Type */
.alp-eyebrow { font: 500 13px/1.4 var(--alp-body); letter-spacing: .12em; text-transform: uppercase; color: var(--alp-muted); margin-bottom: 16px; }
.alp-display { font: 600 clamp(56px, 8.6vw, 136px)/.88 var(--alp-display); letter-spacing: -0.055em; margin: 0; text-wrap: balance; }
.alp-h1 { font: 600 clamp(52px, 7vw, 116px)/.88 var(--alp-display); letter-spacing: -0.055em; margin: 0; text-wrap: balance; }
.alp-h2 { font: 600 clamp(44px, 5.6vw, 80px)/.95 var(--alp-display); letter-spacing: -0.045em; margin: 0; text-wrap: balance; }
.alp-h3 { font: 600 clamp(24px, 2.4vw, 32px)/1.05 var(--alp-display); letter-spacing: -0.025em; margin: 0; }
.alp-h4 { font: 600 22px/1.15 var(--alp-display); letter-spacing: -0.02em; margin: 0; }
.alp-lead { font-size: 17px; line-height: 1.55; color: var(--alp-muted); text-wrap: pretty; }
.alp-muted { color: var(--alp-muted); }
.alp-block mark, .alp-block mark.is-accent { background: none; color: var(--alp-forest); }
.alp-tone--forest mark, .alp-tone--ink mark, .alp-on-dark mark { color: var(--alp-honey); }
.alp-block mark.is-hl { color: inherit; background: linear-gradient(transparent 58%, rgba(231,184,74,.6) 58%, rgba(231,184,74,.6) 92%, transparent 92%); }
.alp-block mark.is-honey { color: var(--alp-honey); }
.alp-block mark.is-ink { color: var(--alp-ink); }

/* Headline rise */
.alp-rise { display: block; overflow: hidden; padding-bottom: .14em; margin-bottom: -.14em; }
.alp-rise > span { display: block; }
@media (prefers-reduced-motion: no-preference) {
	.alp-rise > span { animation: alp-rise 1.2s var(--alp-out) both; animation-delay: calc(var(--i, 0) * .1s); }
}

/* Buttons & links */
.alp-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; font: 500 15px/1.2 var(--alp-body); padding: 16px 26px; border-radius: 99px; border: 1px solid transparent; cursor: pointer; white-space: nowrap; transition: all .4s var(--alp-out); min-height: 44px; }
.alp-btn--ink { background: var(--alp-ink); color: var(--alp-paper) !important; }
.alp-btn--ink:hover { background: var(--alp-forest); color: var(--alp-white) !important; padding-inline: 34px; }
.alp-btn--outline { border-color: var(--alp-ink); color: var(--alp-ink); background: transparent; }
.alp-btn--outline:hover { background: var(--alp-ink); color: var(--alp-paper) !important; }
.alp-btn--outline-light { border-color: rgba(248,249,244,.4); color: var(--alp-paper) !important; }
.alp-btn--outline-light:hover { background: var(--alp-paper); color: var(--alp-ink) !important; }
.alp-btn--honey { background: var(--alp-honey); color: var(--alp-ink) !important; font-weight: 600; }
.alp-btn--honey:hover { background: var(--alp-paper); transform: scale(1.04); }
.alp-btn--forest { background: var(--alp-forest); color: var(--alp-white) !important; }
.alp-btn--forest:hover { background: var(--alp-ink); }
.alp-btn--paper { background: var(--alp-paper); color: var(--alp-ink) !important; }
.alp-btn--paper:hover { background: var(--alp-honey); }
.alp-btn--sm { font-size: 14px; padding: 12px 18px; }
.alp-link { display: inline-flex; align-items: center; gap: 8px; font: 500 15px/1.3 var(--alp-body); border-bottom: 1px solid currentColor; padding-bottom: 2px; transition: color .3s, gap .4s var(--alp-spring); }
.alp-link:hover { gap: 12px; color: var(--alp-forest) !important; }
.alp-on-dark .alp-link:hover, .alp-tone--ink .alp-link:hover, .alp-tone--forest .alp-link:hover { color: var(--alp-honey) !important; }
.alp-arrow-circle { width: 48px; height: 48px; border-radius: 50%; border: 1px solid currentColor; display: grid; place-items: center; font-size: 18px; flex: none; transition: transform .5s var(--alp-out); }

/* Section head */
.alp-section-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 40px; flex-wrap: wrap; margin-bottom: 56px; }
.alp-section-head__aside { max-width: 380px; margin: 0; font-size: 16px; line-height: 1.55; color: var(--alp-muted); }

/* Hatched placeholder media */
.alp-hatch { display: grid; place-items: center; text-align: center; padding: 12px; font: 500 10px/1.4 var(--alp-body); letter-spacing: .1em; text-transform: uppercase; color: var(--alp-muted); background: var(--alp-hatch), var(--alp-canvas); }
.alp-hatch--paper { background: var(--alp-hatch), var(--alp-paper); }
.alp-hatch--white { background: var(--alp-hatch), var(--alp-white); }
.alp-hatch--sage { background: var(--alp-hatch), var(--alp-sage); }
.alp-hatch--sand { background: var(--alp-hatch), var(--alp-sand); }
.alp-hatch--honey { background: repeating-linear-gradient(135deg, rgba(26,31,26,.08) 0 1px, transparent 1px 11px), #EDC461; color: rgba(26,31,26,.6); }
.alp-hatch--forest { background: repeating-linear-gradient(135deg, rgba(255,255,255,.1) 0 1px, transparent 1px 11px), #2A6046; color: rgba(255,255,255,.7); }
.alp-hatch--forest-solid { background: var(--alp-forest); color: var(--alp-white); }
.alp-hatch--ink { background: repeating-linear-gradient(135deg, rgba(248,249,244,.08) 0 1px, transparent 1px 11px), #232923; color: rgba(248,249,244,.6); }
.alp-hatch--clear { background: var(--alp-hatch-light); border: 1px solid rgba(248,249,244,.15); color: inherit; opacity: .7; }
.alp-media--img { width: 100%; height: 100%; object-fit: cover; }

/* Live dot */
.alp-dot { position: relative; width: 8px; height: 8px; flex: none; display: inline-block; }
.alp-dot::before, .alp-dot::after { content: ""; position: absolute; inset: 0; border-radius: 50%; background: var(--dot, var(--alp-forest)); }
@media (prefers-reduced-motion: no-preference) { .alp-dot::before { animation: alp-pulse 2s var(--alp-out) infinite; } }

/* Chips / filters */
.alp-chips { display: inline-flex; flex-wrap: wrap; gap: 4px; padding: 5px; border-radius: 99px; background: var(--alp-paper); border: 1px solid var(--alp-line); }
.alp-chip { display: inline-flex; align-items: center; gap: 8px; font: 500 14px/1.2 var(--alp-body); padding: 9px 16px; min-height: 38px; border-radius: 99px; border: 0; background: transparent; color: var(--alp-ink); cursor: pointer; transition: all .35s var(--alp-spring); }
.alp-chip:hover { background: var(--alp-sage); }
.alp-chip.is-active, .alp-chip[aria-pressed="true"], .alp-chip[aria-selected="true"] { background: var(--alp-ink); color: var(--alp-paper); }
.alp-chip__dot { width: 7px; height: 7px; border-radius: 50%; background: var(--dot, var(--alp-ink)); }
.alp-tag { display: inline-flex; align-items: center; gap: 6px; font: 500 12px/1.2 var(--alp-body); padding: 7px 12px; border-radius: 99px; border: 1px solid currentColor; }

/* Spinning badge CTA */
.alp-spin-badge { position: relative; flex: none; width: 150px; height: 150px; border-radius: 50%; display: grid; place-items: center; text-align: center; font: 600 16px/1.3 var(--alp-body); transition: transform .6s var(--alp-out), background .4s, color .4s; }
.alp-spin-badge--forest { background: var(--alp-forest); color: var(--alp-white) !important; }
.alp-spin-badge--honey { background: var(--alp-honey); color: var(--alp-ink) !important; }
.alp-spin-badge--ink { background: var(--alp-ink); color: var(--alp-paper) !important; }
.alp-spin-badge:hover { transform: scale(1.08) rotate(-8deg); background: var(--alp-honey); color: var(--alp-ink) !important; }
.alp-spin-badge__ring { position: absolute; inset: -10px; border-radius: 50%; border: 1px dashed currentColor; opacity: .35; pointer-events: none; }
@media (prefers-reduced-motion: no-preference) { .alp-spin-badge__ring { animation: alp-spin 14s linear infinite; } }

/* Forms */
.alp-input, .alp-select, .alp-textarea { width: 100%; font: 400 15px/1.4 var(--alp-body); color: var(--alp-ink); padding: 14px 18px; border-radius: 14px; border: 1px solid var(--alp-line); background: var(--alp-white); transition: border-color .3s, box-shadow .3s; min-height: 48px; }
.alp-input:focus, .alp-select:focus, .alp-textarea:focus { outline: none; border-color: var(--alp-forest); box-shadow: 0 0 0 3px rgba(47,107,79,.15); }
.alp-input.is-invalid, .alp-textarea.is-invalid { border-color: var(--alp-clay); box-shadow: 0 0 0 3px rgba(194,69,45,.12); }
.alp-hint { font-size: 13px; color: var(--alp-clay); margin-top: 6px; }
.alp-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }
.alp-sr { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }

/* Reveal on scroll (only once JS is running, so content never hides without it) */
.alp-js [data-reveal] { transition: opacity 1s var(--alp-out), transform 1.2s var(--alp-out); }
.alp-js [data-reveal]:not(.is-inview) { opacity: 0; transform: translateY(40px); }
@media (prefers-reduced-motion: no-preference) {
	.alp-pop { animation: alp-pop .5s var(--alp-spring) both; animation-delay: calc(var(--i, 0) * .05s); }
}

/* Editor: previews are not interactive; clicking selects the block. */
.alp-ssr { pointer-events: none; }
.alp-ssr > .alp-block { margin: 0 !important; }

/* Keyframes */
@keyframes alp-rise { from { transform: translateY(105%); } to { transform: translateY(0); } }
@keyframes alp-pop { from { opacity: 0; transform: translateY(16px) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes alp-spin { to { transform: rotate(360deg); } }
@keyframes alp-marquee { to { transform: translateX(-50%); } }
@keyframes alp-pulse { 0% { transform: scale(1); opacity: .6; } 100% { transform: scale(3.2); opacity: 0; } }
@keyframes alp-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes alp-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes alp-sphere { from { transform: rotateX(-18deg) rotateY(0); } to { transform: rotateX(-18deg) rotateY(360deg); } }
@keyframes alp-torus { from { transform: rotateX(64deg) rotateZ(0); } to { transform: rotateX(64deg) rotateZ(360deg); } }

@media (prefers-reduced-motion: reduce) {
	.alp-block *, .alp-block *::before, .alp-block *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
	.alp-js [data-reveal]:not(.is-inview) { opacity: 1; transform: none; }
}

@media (max-width: 820px) {
	.alp-display, .alp-h1 { font-size: clamp(44px, 12vw, 72px); }
	.alp-h2 { font-size: clamp(34px, 9vw, 52px); }
	.alp-slab { margin-inline: 8px; }
	.alp-grid12 { grid-template-columns: minmax(0, 1fr); }
	.alp-grid12 > * { grid-column: auto !important; }
	.alp-section-head { margin-bottom: 40px; gap: 24px; }
}

/* Logo (LOGO.md) */
.alp-logo { display: inline-flex; align-items: baseline; font: 700 var(--alp-logo-size, 28px)/1 var(--alp-display); letter-spacing: -0.035em; color: var(--alp-ink); text-decoration: none; flex: none; white-space: nowrap; }
.alp-logo:hover { color: var(--alp-ink); }
.alp-logo--reversed, .alp-logo--reversed:hover { color: var(--alp-paper); }
.alp-logo__a { height: .71em; width: .74em; margin-right: .03em; flex: none; }
.alp-logo--mark .alp-logo__a { height: 1em; width: 1.04em; margin: 0; }
.alp-logo__l { display: inline-block; clip-path: polygon(0 25%, 100% 10%, 100% 100%, 0 100%); }
.alp-logo__p { display: inline-block; clip-path: polygon(0 0, 100% 0, 100% 86%, 0 99%); }

/* 3D line objects */
.alp-sphere { --s: min(320px, 24vw); width: var(--s); height: var(--s); perspective: 1100px; position: relative; flex: none; }
.alp-sphere__spin { position: absolute; inset: 0; transform-style: preserve-3d; transform: rotateX(-18deg); }
.alp-sphere__m, .alp-sphere__eq, .alp-sphere__lat { position: absolute; inset: 0; border-radius: 50%; border: 1px solid var(--alp-ink); opacity: .45; }
.alp-sphere__eq { border: 2px solid var(--alp-forest); opacity: 1; transform: rotateX(90deg); }
.alp-sphere__lat { inset: calc(var(--s) * .143); opacity: .4; }
.alp-sphere__lat.is-n { transform: rotateX(90deg) translateZ(calc(var(--s) * .35)); }
.alp-sphere__lat.is-s { transform: rotateX(90deg) translateZ(calc(var(--s) * -.35)); }
.alp-sphere__core { position: absolute; left: 50%; top: 50%; width: 22px; height: 22px; border-radius: 50%; background: var(--alp-honey); transform: translate(-50%, -50%); }
.alp-on-dark .alp-sphere__m, .alp-on-dark .alp-sphere__lat { border-color: var(--alp-paper); }
.alp-torus { width: 240px; height: 240px; perspective: 900px; display: grid; place-items: center; }
.alp-torus__spin { position: relative; width: 110px; height: 110px; transform-style: preserve-3d; transform: rotateX(64deg); }
.alp-torus__spin span { position: absolute; inset: 0; border-radius: 50%; border: 1px solid var(--alp-ink); opacity: .4; }
.alp-torus__spin span.is-accent { border-color: var(--alp-forest); opacity: 1; }
@media (prefers-reduced-motion: no-preference) {
	.alp-sphere__spin { animation: alp-sphere 22s linear infinite; }
	.alp-torus__spin { animation: alp-torus 16s linear infinite; }
}
