:root {
	/* Identity v1 — Cobre mineral. */
	--jm-color-bg: #f3efe7;
	--jm-color-bg-soft: #ebe4d9;
	--jm-color-surface: #fcfaf6;
	--jm-color-white: #ffffff;
	--jm-color-warm-white: #fcfaf6;
	--jm-color-text: #24292b;
	--jm-color-text-strong: #142229;
	--jm-color-text-muted: #5b6164;
	--jm-color-night: #0b1b24;
	--jm-color-night-surface: #122a34;
	--jm-color-on-dark-muted: #cad3d6;
	--jm-color-accent: #93462f;
	--jm-color-accent-hover: #713321;
	--jm-color-accent-text: #93462f;
	--jm-color-accent-soft: #f1e0d8;
	--jm-color-accent-on-dark: #e7aa92;
	--jm-color-border: #d8d0c4;
	--jm-color-border-strong: #8f857a;

	/* Compatibility aliases. They resolve to Cobre mineral, not a second identity. */
	--jm-color-sand: var(--jm-color-accent-soft);
	--jm-color-turq: var(--jm-color-accent-on-dark);

	/* Functional colors verified for WCAG AA. */
	--jm-color-success: #216747;
	--jm-color-success-soft: #e4f1ea;
	--jm-color-warning: #7a4b12;
	--jm-color-warning-soft: #f7ecd9;
	--jm-color-danger: #983f3f;
	--jm-color-danger-soft: #f7e5e3;
	--jm-color-info: #315f7a;
	--jm-color-info-soft: #e4eef3;
	--jm-color-focus: #93462f;

	/* Public local typefaces. Roboto remains a fallback only. */
	--jm-font-display: "Cormorant Garamond", Georgia, "Times New Roman", serif;
	--jm-font-body: Inter, Roboto, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
	--jm-font-mono: ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", monospace;
	--jm-font-weight-regular: 400;
	--jm-font-weight-medium: 500;
	--jm-font-weight-semibold: 600;
	--jm-font-weight-bold: 700;
	--jm-leading-tight: 0.98;
	--jm-leading-heading: 1.06;
	--jm-leading-body: 1.65;
	--jm-type-display: clamp(3.5rem, 9vw, 7rem);
	--jm-type-h1: clamp(2.75rem, 6vw, 5rem);
	--jm-type-h2: clamp(2.125rem, 4.5vw, 3.5rem);
	--jm-type-h3: clamp(1.5rem, 2.4vw, 2rem);
	--jm-type-h4: clamp(1.125rem, 1.4vw, 1.375rem);
	--jm-type-body-large: clamp(1.0625rem, 1.3vw, 1.25rem);
	--jm-type-body: 1rem;
	--jm-type-small: 0.875rem;
	--jm-type-label: 0.75rem;
	--jm-type-price: clamp(2.25rem, 4.5vw, 3.5rem);

	/* Spacing uses a 4px base rhythm. */
	--jm-space-1: 0.25rem;
	--jm-space-2: 0.5rem;
	--jm-space-3: 0.75rem;
	--jm-space-4: 1rem;
	--jm-space-5: 1.5rem;
	--jm-space-6: 2rem;
	--jm-space-7: 3rem;
	--jm-space-8: 4rem;
	--jm-space-9: 6rem;
	--jm-space-10: 8rem;
	--jm-section-space: clamp(4rem, 8vw, 7.5rem);
	--jm-gutter: clamp(1rem, 4vw, 2.5rem);

	/* Layout. Breakpoint tokens are documentary; media queries use matching values. */
	--jm-container: 72rem;
	--jm-container-wide: 80rem;
	--jm-reading-width: 62ch;
	--jm-breakpoint-sm: 30rem;
	--jm-breakpoint-md: 48rem;
	--jm-breakpoint-lg: 64rem;
	--jm-breakpoint-xl: 90rem;

	/* Shape and depth. */
	--jm-radius-sm: 0.5rem;
	--jm-radius-md: 0.75rem;
	--jm-radius-lg: 1.25rem;
	--jm-radius-pill: 999px;
	--jm-border-width: 1px;
	--jm-shadow-soft: 0 1rem 2.5rem rgba(11, 27, 36, 0.07);
	--jm-shadow-focus: 0 0 0 0.25rem rgba(147, 70, 47, 0.2);

	/* Motion and layers. */
	--jm-duration-fast: 120ms;
	--jm-duration-base: 180ms;
	--jm-duration-slow: 280ms;
	--jm-ease-standard: cubic-bezier(0.2, 0, 0, 1);
	--jm-anchor-offset: 5rem;
	--jm-z-sticky: 20;
}
