diff --git a/.claude/skills/critique/scripts/detect-antipatterns-browser.js b/.claude/skills/critique/scripts/detect-antipatterns-browser.js
index c35dcff9d..662166638 100644
--- a/.claude/skills/critique/scripts/detect-antipatterns-browser.js
+++ b/.claude/skills/critique/scripts/detect-antipatterns-browser.js
@@ -151,6 +151,60 @@ const ANTIPATTERNS = [
description:
'Dark backgrounds with colored box-shadow glows are the default "cool" look of AI-generated UIs. Use subtle, purposeful lighting instead — or skip the dark theme entirely.',
},
+ {
+ id: 'line-length',
+ name: 'Line length too long',
+ description:
+ 'Text lines wider than ~80 characters are hard to read. The eye loses its place tracking back to the start of the next line. Add a max-width (65ch to 75ch) to text containers.',
+ },
+ {
+ id: 'cramped-padding',
+ name: 'Cramped padding',
+ description:
+ 'Text is too close to the edge of its container. Add at least 8px (ideally 12-16px) of padding inside bordered or colored containers.',
+ },
+ {
+ id: 'tight-leading',
+ name: 'Tight line height',
+ description:
+ 'Line height below 1.3x the font size makes multi-line text hard to read. Use 1.5 to 1.7 for body text so lines have room to breathe.',
+ },
+ {
+ id: 'small-target',
+ name: 'Small touch target',
+ description:
+ 'Interactive elements should be at least 44x44px to be comfortably tappable. Small targets cause misclicks and frustrate users, especially on touch devices.',
+ },
+ {
+ id: 'skipped-heading',
+ name: 'Skipped heading level',
+ description:
+ 'Heading levels should not skip (e.g. h1 then h3 with no h2). Screen readers use heading hierarchy for navigation. Skipping levels breaks the document outline.',
+ },
+ {
+ id: 'justified-text',
+ name: 'Justified text',
+ description:
+ 'Justified text without hyphenation creates uneven word spacing ("rivers of white"). Use text-align: left for body text, or enable hyphens: auto if you must justify.',
+ },
+ {
+ id: 'tiny-text',
+ name: 'Tiny body text',
+ description:
+ 'Body text below 12px is hard to read, especially on high-DPI screens. Use at least 14px for body content, 16px is ideal.',
+ },
+ {
+ id: 'all-caps-body',
+ name: 'All-caps body text',
+ description:
+ 'Long passages in uppercase are hard to read. We recognize words by shape (ascenders and descenders), which all-caps removes. Reserve uppercase for short labels and headings.',
+ },
+ {
+ id: 'wide-tracking',
+ name: 'Wide letter spacing on body text',
+ description:
+ 'Letter spacing above 0.05em on body text disrupts natural character groupings and slows reading. Reserve wide tracking for short uppercase labels only.',
+ },
];
// ─── Section 2: Color Utilities ─────────────────────────────────────────────
@@ -711,6 +765,128 @@ function checkElementAIPaletteDOM(el) {
return findings;
}
+const QUALITY_TEXT_TAGS = new Set(['p', 'li', 'td', 'th', 'dd', 'blockquote', 'figcaption']);
+const QUALITY_INTERACTIVE_TAGS = new Set(['button', 'a', 'input', 'select', 'textarea']);
+
+function checkElementQualityDOM(el) {
+ const tag = el.tagName.toLowerCase();
+ const style = getComputedStyle(el);
+ const findings = [];
+
+ const hasDirectText = [...el.childNodes].some(n => n.nodeType === 3 && n.textContent.trim().length > 10);
+ const textLen = el.textContent?.trim().length || 0;
+ const fontSize = parseFloat(style.fontSize) || 16;
+ const rect = el.getBoundingClientRect();
+
+ // --- Line length too long ---
+ // Only flag if text is long enough to actually fill the line (>80 chars)
+ if (hasDirectText && QUALITY_TEXT_TAGS.has(tag) && rect.width > 0 && textLen > 80) {
+ const charsPerLine = rect.width / (fontSize * 0.5);
+ if (charsPerLine > 85) {
+ findings.push({ id: 'line-length', snippet: `~${Math.round(charsPerLine)} chars/line (aim for <80)` });
+ }
+ }
+
+ // --- Cramped padding ---
+ if (hasDirectText && textLen > 10) {
+ const borders = {
+ top: parseFloat(style.borderTopWidth) || 0,
+ right: parseFloat(style.borderRightWidth) || 0,
+ bottom: parseFloat(style.borderBottomWidth) || 0,
+ left: parseFloat(style.borderLeftWidth) || 0,
+ };
+ // Need at least 2 borders (a container), or a non-transparent background
+ const borderCount = Object.values(borders).filter(w => w > 0).length;
+ const hasBg = style.backgroundColor && style.backgroundColor !== 'rgba(0, 0, 0, 0)';
+ if (borderCount >= 2 || hasBg) {
+ // Only check padding on sides that have borders or where bg creates containment
+ const paddings = [];
+ if (hasBg || borders.top > 0) paddings.push(parseFloat(style.paddingTop) || 0);
+ if (hasBg || borders.right > 0) paddings.push(parseFloat(style.paddingRight) || 0);
+ if (hasBg || borders.bottom > 0) paddings.push(parseFloat(style.paddingBottom) || 0);
+ if (hasBg || borders.left > 0) paddings.push(parseFloat(style.paddingLeft) || 0);
+ if (paddings.length > 0) {
+ const minPad = Math.min(...paddings);
+ if (minPad < 8) {
+ findings.push({ id: 'cramped-padding', snippet: `${minPad}px padding (need >=8px)` });
+ }
+ }
+ }
+ }
+
+ // --- Tight line height ---
+ if (hasDirectText && textLen > 50 && !['h1','h2','h3','h4','h5','h6'].includes(tag)) {
+ const lineHeight = parseFloat(style.lineHeight);
+ if (lineHeight && lineHeight !== NaN) {
+ const ratio = lineHeight / fontSize;
+ if (ratio < 1.3 && ratio > 0) {
+ findings.push({ id: 'tight-leading', snippet: `line-height ${ratio.toFixed(2)}x (need >=1.3)` });
+ }
+ }
+ }
+
+ // --- Small touch targets ---
+ if (QUALITY_INTERACTIVE_TAGS.has(tag) || el.hasAttribute('tabindex') || el.getAttribute('role') === 'button') {
+ if (rect.width > 0 && rect.height > 0 && (rect.width < 44 || rect.height < 44)) {
+ if (style.display !== 'none' && style.visibility !== 'hidden') {
+ findings.push({ id: 'small-target', snippet: `${Math.round(rect.width)}x${Math.round(rect.height)}px (need 44x44)` });
+ }
+ }
+ }
+
+ // --- Justified text (without hyphens) ---
+ if (hasDirectText && style.textAlign === 'justify') {
+ const hyphens = style.hyphens || style.webkitHyphens || '';
+ if (hyphens !== 'auto') {
+ findings.push({ id: 'justified-text', snippet: 'text-align: justify without hyphens: auto' });
+ }
+ }
+
+ // --- Tiny body text ---
+ if (hasDirectText && textLen > 20 && fontSize < 12) {
+ if (!['sub', 'sup', 'code', 'kbd', 'samp', 'var'].includes(tag)) {
+ findings.push({ id: 'tiny-text', snippet: `${fontSize}px body text` });
+ }
+ }
+
+ // --- All-caps body text ---
+ if (hasDirectText && textLen > 30 && style.textTransform === 'uppercase') {
+ if (!['h1','h2','h3','h4','h5','h6'].includes(tag)) {
+ findings.push({ id: 'all-caps-body', snippet: `text-transform: uppercase on ${textLen} chars of body text` });
+ }
+ }
+
+ // --- Wide letter spacing on body text ---
+ if (hasDirectText && textLen > 20) {
+ const tracking = parseFloat(style.letterSpacing);
+ if (tracking > 0 && style.textTransform !== 'uppercase') {
+ const trackingEm = tracking / fontSize;
+ if (trackingEm > 0.05) {
+ findings.push({ id: 'wide-tracking', snippet: `letter-spacing: ${trackingEm.toFixed(2)}em on body text` });
+ }
+ }
+ }
+
+ return findings;
+}
+
+function checkPageQualityDOM() {
+ const findings = [];
+
+ // --- Skipped heading levels ---
+ const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
+ let prevLevel = 0;
+ for (const h of headings) {
+ const level = parseInt(h.tagName[1]);
+ if (prevLevel > 0 && level > prevLevel + 1) {
+ findings.push({ type: 'skipped-heading', detail: `h${prevLevel} followed by h${level} (missing h${prevLevel + 1})` });
+ }
+ prevLevel = level;
+ }
+
+ return findings;
+}
+
// Node adapters — take pre-extracted jsdom computed style
function checkElementBorders(tag, style) {
@@ -1042,6 +1218,18 @@ if (IS_BROWSER) {
const LABEL_BG = 'oklch(55% 0.25 350)';
const OUTLINE_COLOR = 'oklch(60% 0.25 350)';
+ // Inject hover styles via CSS (more reliable than JS event listeners)
+ const styleEl = document.createElement('style');
+ styleEl.textContent = `
+ .impeccable-overlay { pointer-events: auto; }
+ .impeccable-overlay .impeccable-tooltip { display: none; }
+ .impeccable-overlay .impeccable-label { display: block; }
+ .impeccable-overlay:hover { border-color: transparent !important; }
+ .impeccable-overlay:hover .impeccable-tooltip { display: block; }
+ .impeccable-overlay:hover .impeccable-label { display: none; }
+ `;
+ (document.head || document.documentElement).appendChild(styleEl);
+
const overlays = [];
const TYPE_LABELS = {};
for (const ap of ANTIPATTERNS) {
@@ -1057,14 +1245,14 @@ if (IS_BROWSER) {
top: `${rect.top + scrollY - 2}px`, left: `${rect.left + scrollX - 2}px`,
width: `${rect.width + 4}px`, height: `${rect.height + 4}px`,
border: `2px solid ${OUTLINE_COLOR}`, borderRadius: '4px',
- pointerEvents: 'none', zIndex: '99999', boxSizing: 'border-box',
+ zIndex: '99999', boxSizing: 'border-box',
});
const label = document.createElement('div');
label.className = 'impeccable-label';
label.textContent = findings.map(f => TYPE_LABELS[f.type || f.id] || f.type || f.id).join(', ');
Object.assign(label.style, {
- position: 'absolute', top: '-20px', left: '0',
+ position: 'absolute', top: '-22px', left: '0',
background: LABEL_BG, color: 'white',
fontSize: '11px', fontFamily: 'system-ui, sans-serif', fontWeight: '600',
padding: '2px 8px', borderRadius: '3px', whiteSpace: 'nowrap',
@@ -1076,25 +1264,14 @@ if (IS_BROWSER) {
tooltip.className = 'impeccable-tooltip';
tooltip.innerHTML = findings.map(f => f.detail || f.snippet).join('
');
Object.assign(tooltip.style, {
- position: 'absolute', bottom: '-28px', left: '0',
+ position: 'absolute', top: '-22px', left: '0',
background: 'rgba(0,0,0,0.85)', color: '#e5e5e5',
fontSize: '11px', fontFamily: 'ui-monospace, monospace',
- padding: '4px 8px', borderRadius: '3px', whiteSpace: 'nowrap',
- lineHeight: '16px', display: 'none', zIndex: '100000',
+ padding: '2px 8px', borderRadius: '3px', whiteSpace: 'nowrap',
+ lineHeight: '16px', letterSpacing: '0.02em', zIndex: '100000',
});
outline.appendChild(tooltip);
- outline.addEventListener('mouseenter', () => {
- outline.style.pointerEvents = 'auto';
- tooltip.style.display = 'block';
- outline.style.background = 'oklch(60% 0.25 350 / 0.08)';
- });
- outline.addEventListener('mouseleave', () => {
- outline.style.pointerEvents = 'none';
- tooltip.style.display = 'none';
- outline.style.background = 'none';
- });
-
document.body.appendChild(outline);
overlays.push(outline);
};
@@ -1165,6 +1342,7 @@ if (IS_BROWSER) {
...checkElementMotionDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
...checkElementGlowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
...checkElementAIPaletteDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
+ ...checkElementQualityDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
];
if (findings.length > 0) {
@@ -1187,6 +1365,13 @@ if (IS_BROWSER) {
allFindings.push({ el, findings: [f] });
}
+ // Page-level quality checks (headings, etc.)
+ const qualityFindings = checkPageQualityDOM();
+ if (qualityFindings.length > 0) {
+ showPageBanner(qualityFindings);
+ allFindings.push({ el: document.body, findings: qualityFindings });
+ }
+
// Regex-on-HTML checks (shared with Node)
const htmlPatternFindings = checkHtmlPatterns(document.documentElement.outerHTML);
if (htmlPatternFindings.length > 0) {
diff --git a/bun.lock b/bun.lock
index 3a1a28d92..9b6f342e4 100644
--- a/bun.lock
+++ b/bun.lock
@@ -10,27 +10,53 @@
"playwright": "^1.57.0",
},
"devDependencies": {
+ "jsdom": "^29.0.0",
+ "puppeteer": "^24.39.1",
"wrangler": "^4.71.0",
},
},
},
"packages": {
+ "@asamuzakjp/css-color": ["@asamuzakjp/css-color@5.0.1", "", { "dependencies": { "@csstools/css-calc": "^3.1.1", "@csstools/css-color-parser": "^4.0.2", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0", "lru-cache": "^11.2.6" } }, "sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw=="],
+
+ "@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@7.0.3", "", { "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.2.7" } }, "sha512-Q6mU0Z6bfj6YvnX2k9n0JxiIwrCFN59x/nWmYQnAqP000ruX/yV+5bp/GRcF5T8ncvfwJQ7fgfP74DlpKExILA=="],
+
+ "@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="],
+
+ "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="],
+
+ "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="],
+
+ "@bramus/specificity": ["@bramus/specificity@2.4.2", "", { "dependencies": { "css-tree": "^3.0.0" }, "bin": { "specificity": "bin/cli.js" } }, "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw=="],
+
"@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.2", "", {}, "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ=="],
"@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.15.0", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": "1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0" }, "optionalPeers": ["workerd"] }, "sha512-EGYmJaGZKWl+X8tXxcnx4v2bOZSjQeNI5dWFeXivgX9+YCT69AkzHHwlNbVpqtEUTbew8eQurpyOpeN8fg00nw=="],
- "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260301.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-+kJvwociLrvy1JV9BAvoSVsMEIYD982CpFmo/yMEvBwxDIjltYsLTE8DLi0mCkGsQ8Ygidv2fD9wavzXeiY7OQ=="],
+ "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260317.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-8hjh3sPMwY8M/zedq3/sXoA2Q4BedlGufn3KOOleIG+5a4ReQKLlUah140D7J6zlKmYZAFMJ4tWC7hCuI/s79g=="],
- "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260301.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-PPIetY3e67YBr9O4UhILK8nbm5TqUDl14qx4rwFNrRSBOvlzuczzbd4BqgpAtbGVFxKp1PWpjAnBvGU/OI/tLQ=="],
+ "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260317.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-M/MnNyvO5HMgoIdr3QHjdCj2T1ki9gt0vIUnxYxBu9ISXS/jgtMl6chUVPJ7zHYBn9MyYr8ByeN6frjYxj0MGg=="],
- "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260301.1", "", { "os": "linux", "cpu": "x64" }, "sha512-Gu5vaVTZuYl3cHa+u5CDzSVDBvSkfNyuAHi6Mdfut7TTUdcb3V5CIcR/mXRSyMXzEy9YxEWIfdKMxOMBjupvYQ=="],
+ "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260317.1", "", { "os": "linux", "cpu": "x64" }, "sha512-1ltuEjkRcS3fsVF7CxsKlWiRmzq2ZqMfqDN0qUOgbUwkpXsLVJsXmoblaLf5OP00ELlcgF0QsN0p2xPEua4Uug=="],
- "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260301.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-igL1pkyCXW6GiGpjdOAvqMi87UW0LMc/+yIQe/CSzuZJm5GzXoAMrwVTkCFnikk6JVGELrM5x0tGYlxa0sk5Iw=="],
+ "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260317.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-3QrNnPF1xlaNwkHpasvRvAMidOvQs2NhXQmALJrEfpIJ/IDL2la8g499yXp3eqhG3hVMCB07XVY149GTs42Xtw=="],
- "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260301.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Q0wMJ4kcujXILwQKQFc1jaYamVsNvjuECzvRrTI8OxGFMx2yq9aOsswViE4X1gaS2YQQ5u0JGwuGi5WdT1Lt7A=="],
+ "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260317.1", "", { "os": "win32", "cpu": "x64" }, "sha512-MfZTz+7LfuIpMGTa3RLXHX8Z/pnycZLItn94WRdHr8LPVet+C5/1Nzei399w/jr3+kzT4pDKk26JF/tlI5elpQ=="],
"@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="],
+ "@csstools/color-helpers": ["@csstools/color-helpers@6.0.2", "", {}, "sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q=="],
+
+ "@csstools/css-calc": ["@csstools/css-calc@3.1.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ=="],
+
+ "@csstools/css-color-parser": ["@csstools/css-color-parser@4.0.2", "", { "dependencies": { "@csstools/color-helpers": "^6.0.2", "@csstools/css-calc": "^3.1.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw=="],
+
+ "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@4.0.0", "", { "peerDependencies": { "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w=="],
+
+ "@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.1.1", "", { "peerDependencies": { "css-tree": "^3.2.1" }, "optionalPeers": ["css-tree"] }, "sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w=="],
+
+ "@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="],
+
"@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="],
@@ -85,6 +111,8 @@
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="],
+ "@exodus/bytes": ["@exodus/bytes@1.15.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ=="],
+
"@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="],
"@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="],
@@ -151,20 +179,34 @@
"@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="],
+ "@puppeteer/browsers": ["@puppeteer/browsers@2.13.0", "", { "dependencies": { "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.4", "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA=="],
+
"@sindresorhus/is": ["@sindresorhus/is@7.2.0", "", {}, "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw=="],
"@speed-highlight/core": ["@speed-highlight/core@1.2.14", "", {}, "sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA=="],
+ "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="],
+
+ "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="],
+
+ "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="],
+
"abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="],
- "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
+ "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
- "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
+ "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+
+ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
"archiver": ["archiver@7.0.1", "", { "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", "buffer-crc32": "^1.0.0", "readable-stream": "^4.0.0", "readdir-glob": "^1.1.2", "tar-stream": "^3.0.0", "zip-stream": "^6.0.1" } }, "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ=="],
"archiver-utils": ["archiver-utils@5.0.2", "", { "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", "is-stream": "^2.0.1", "lazystream": "^1.0.0", "lodash": "^4.17.15", "normalize-path": "^3.0.0", "readable-stream": "^4.0.0" } }, "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA=="],
+ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
+
+ "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="],
+
"async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="],
"b4a": ["b4a@1.8.0", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg=="],
@@ -185,6 +227,10 @@
"base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
+ "basic-ftp": ["basic-ftp@5.2.0", "", {}, "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw=="],
+
+ "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="],
+
"blake3-wasm": ["blake3-wasm@2.1.5", "", {}, "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g=="],
"brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
@@ -193,6 +239,12 @@
"buffer-crc32": ["buffer-crc32@1.0.0", "", {}, "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w=="],
+ "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
+
+ "chromium-bidi": ["chromium-bidi@14.0.0", "", { "dependencies": { "mitt": "^3.0.1", "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" } }, "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw=="],
+
+ "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
+
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
@@ -203,46 +255,104 @@
"core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="],
+ "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="],
+
"crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="],
"crc32-stream": ["crc32-stream@6.0.0", "", { "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^4.0.0" } }, "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g=="],
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
+ "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="],
+
+ "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="],
+
+ "data-urls": ["data-urls@7.0.0", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0" } }, "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA=="],
+
+ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+
+ "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="],
+
+ "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="],
+
"detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
+ "devtools-protocol": ["devtools-protocol@0.0.1581282", "", {}, "sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ=="],
+
"eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="],
- "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
+ "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
+
+ "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
+
+ "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="],
+
+ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
+
+ "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="],
"error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="],
"esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="],
+ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
+
+ "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="],
+
+ "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
+
+ "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
+
+ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
+
"event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="],
"events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="],
"events-universal": ["events-universal@1.0.1", "", { "dependencies": { "bare-events": "^2.7.0" } }, "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw=="],
+ "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="],
+
"fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="],
+ "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="],
+
"foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="],
- "framer-motion": ["framer-motion@12.23.26", "", { "dependencies": { "motion-dom": "^12.23.23", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA=="],
+ "framer-motion": ["framer-motion@12.38.0", "", { "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g=="],
"fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="],
+ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
+
+ "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="],
+
+ "get-uri": ["get-uri@6.0.5", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg=="],
+
"glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
+ "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="],
+
+ "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="],
+
+ "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
+
"ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
+ "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
+
"inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
+ "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="],
+
+ "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
+
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
+ "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="],
+
"is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
"isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
@@ -251,30 +361,60 @@
"jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
+ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
+
+ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
+
+ "jsdom": ["jsdom@29.0.0", "", { "dependencies": { "@asamuzakjp/css-color": "^5.0.1", "@asamuzakjp/dom-selector": "^7.0.2", "@bramus/specificity": "^2.4.2", "@csstools/css-syntax-patches-for-csstree": "^1.1.1", "@exodus/bytes": "^1.15.0", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.2.7", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.1", "undici": "^7.24.3", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.1", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-9FshNB6OepopZ08unmmGpsF7/qCjxGPbo3NbgfJAnPeHXnsODE9WWffXZtRFRFe0ntzaAOcSKNJFz8wiyvF1jQ=="],
+
+ "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
+
"kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
"lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="],
+ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
+
"lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="],
- "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
+ "lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="],
- "miniflare": ["miniflare@4.20260301.1", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "7.18.2", "workerd": "1.20260301.1", "ws": "8.18.0", "youch": "4.1.0-beta.10" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-fqkHx0QMKswRH9uqQQQOU/RoaS3Wjckxy3CUX3YGJr0ZIMu7ObvI+NovdYi6RIsSPthNtq+3TPmRNxjeRiasog=="],
+ "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="],
+
+ "miniflare": ["miniflare@4.20260317.0", "", { "dependencies": { "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "7.24.4", "workerd": "1.20260317.1", "ws": "8.18.0", "youch": "4.1.0-beta.10" }, "bin": { "miniflare": "bootstrap.js" } }, "sha512-xuwk5Kjv+shi5iUBAdCrRl9IaWSGnTU8WuTQzsUS2GlSDIMCJuu8DiF/d9ExjMXYiQG5ml+k9SVKnMj8cRkq0w=="],
"minimatch": ["minimatch@5.1.9", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw=="],
"minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
- "motion": ["motion@12.23.26", "", { "dependencies": { "framer-motion": "^12.23.26", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-Ll8XhVxY8LXMVYTCfme27WH2GjBrCIzY4+ndr5QKxsK+YwCtOi2B/oBi5jcIbik5doXuWT/4KKDOVAZJkeY5VQ=="],
+ "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="],
- "motion-dom": ["motion-dom@12.23.23", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA=="],
+ "motion": ["motion@12.38.0", "", { "dependencies": { "framer-motion": "^12.38.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w=="],
- "motion-utils": ["motion-utils@12.23.6", "", {}, "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ=="],
+ "motion-dom": ["motion-dom@12.38.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA=="],
+
+ "motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="],
+
+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
+
+ "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="],
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
+ "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
+
+ "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="],
+
+ "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="],
+
"package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
+ "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
+
+ "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
+
+ "parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="],
+
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
"path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
@@ -283,20 +423,46 @@
"pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="],
- "playwright": ["playwright@1.57.0", "", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="],
+ "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="],
- "playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="],
+ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
+
+ "playwright": ["playwright@1.58.2", "", { "dependencies": { "playwright-core": "1.58.2" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A=="],
+
+ "playwright-core": ["playwright-core@1.58.2", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg=="],
"process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="],
"process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="],
+ "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="],
+
+ "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="],
+
+ "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
+
+ "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="],
+
+ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
+
+ "puppeteer": ["puppeteer@24.39.1", "", { "dependencies": { "@puppeteer/browsers": "2.13.0", "chromium-bidi": "14.0.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1581282", "puppeteer-core": "24.39.1", "typed-query-selector": "^2.12.1" }, "bin": { "puppeteer": "lib/cjs/puppeteer/node/cli.js" } }, "sha512-68Zc9QpcVvfxp2C+3UL88TyUogEAn5tSylXidbEuEXvhiqK1+v65zeBU5ubinAgEHMGr3dcSYqvYrGtdzsPI3w=="],
+
+ "puppeteer-core": ["puppeteer-core@24.39.1", "", { "dependencies": { "@puppeteer/browsers": "2.13.0", "chromium-bidi": "14.0.0", "debug": "^4.4.3", "devtools-protocol": "0.0.1581282", "typed-query-selector": "^2.12.1", "webdriver-bidi-protocol": "0.4.1", "ws": "^8.19.0" } }, "sha512-AMqQIKoEhPS6CilDzw0Gd1brLri3emkC+1N2J6ZCCuY1Cglo56M63S0jOeBZDQlemOiRd686MYVMl9ELJBzN3A=="],
+
"readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="],
"readdir-glob": ["readdir-glob@1.1.3", "", { "dependencies": { "minimatch": "^5.1.0" } }, "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA=="],
+ "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
+
+ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
+
+ "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
+
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
+ "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="],
+
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
"sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
@@ -307,45 +473,95 @@
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
+ "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
+
+ "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="],
+
+ "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="],
+
+ "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
+
+ "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
+
"streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="],
- "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
+ "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
- "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
+ "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="],
+ "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="],
+
+ "tar-fs": ["tar-fs@3.1.2", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw=="],
+
"tar-stream": ["tar-stream@3.1.8", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ=="],
"teex": ["teex@1.0.1", "", { "dependencies": { "streamx": "^2.12.5" } }, "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg=="],
"text-decoder": ["text-decoder@1.2.7", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ=="],
+ "tldts": ["tldts@7.0.26", "", { "dependencies": { "tldts-core": "^7.0.26" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ=="],
+
+ "tldts-core": ["tldts-core@7.0.26", "", {}, "sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew=="],
+
+ "tough-cookie": ["tough-cookie@6.0.1", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw=="],
+
+ "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="],
+
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
- "undici": ["undici@7.18.2", "", {}, "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw=="],
+ "typed-query-selector": ["typed-query-selector@2.12.1", "", {}, "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA=="],
+
+ "undici": ["undici@7.24.4", "", {}, "sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w=="],
+
+ "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
"unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="],
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
+ "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="],
+
+ "webdriver-bidi-protocol": ["webdriver-bidi-protocol@0.4.1", "", {}, "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw=="],
+
+ "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="],
+
+ "whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="],
+
+ "whatwg-url": ["whatwg-url@16.0.1", "", { "dependencies": { "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", "webidl-conversions": "^8.0.1" } }, "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw=="],
+
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
- "workerd": ["workerd@1.20260301.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260301.1", "@cloudflare/workerd-darwin-arm64": "1.20260301.1", "@cloudflare/workerd-linux-64": "1.20260301.1", "@cloudflare/workerd-linux-arm64": "1.20260301.1", "@cloudflare/workerd-windows-64": "1.20260301.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-oterQ1IFd3h7PjCfT4znSFOkJCvNQ6YMOyZ40YsnO3nrSpgB4TbJVYWFOnyJAw71/RQuupfVqZZWKvsy8GO3fw=="],
+ "workerd": ["workerd@1.20260317.1", "", { "optionalDependencies": { "@cloudflare/workerd-darwin-64": "1.20260317.1", "@cloudflare/workerd-darwin-arm64": "1.20260317.1", "@cloudflare/workerd-linux-64": "1.20260317.1", "@cloudflare/workerd-linux-arm64": "1.20260317.1", "@cloudflare/workerd-windows-64": "1.20260317.1" }, "bin": { "workerd": "bin/workerd" } }, "sha512-ZuEq1OdrJBS+NV+L5HMYPCzVn49a2O60slQiiLpG44jqtlOo+S167fWC76kEXteXLLLydeuRrluRel7WdOUa4g=="],
- "wrangler": ["wrangler@4.71.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.2", "@cloudflare/unenv-preset": "2.15.0", "blake3-wasm": "2.1.5", "esbuild": "0.27.3", "miniflare": "4.20260301.1", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20260301.1" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20260226.1" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-j6pSGAncOLNQDRzqtp0EqzYj52CldDP7uz/C9cxVrIgqa5p+cc0b4pIwnapZZAGv9E1Loa3tmPD0aXonH7KTkw=="],
+ "wrangler": ["wrangler@4.75.0", "", { "dependencies": { "@cloudflare/kv-asset-handler": "0.4.2", "@cloudflare/unenv-preset": "2.15.0", "blake3-wasm": "2.1.5", "esbuild": "0.27.3", "miniflare": "4.20260317.0", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", "workerd": "1.20260317.1" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@cloudflare/workers-types": "^4.20260317.1" }, "optionalPeers": ["@cloudflare/workers-types"], "bin": { "wrangler": "bin/wrangler.js", "wrangler2": "bin/wrangler.js" } }, "sha512-Efk1tcnm4eduBYpH1sSjMYydXMnIFPns/qABI3+fsbDrUk5GksNYX8nYGVP4sFygvGPO7kJc36YJKB5ooA7JAg=="],
- "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
+ "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
"wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
- "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="],
+ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
+
+ "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="],
+
+ "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="],
+
+ "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="],
+
+ "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
+
+ "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="],
+
+ "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
+
+ "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="],
"youch": ["youch@4.1.0-beta.10", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@poppinss/dumper": "^0.6.4", "@speed-highlight/core": "^1.2.7", "cookie": "^1.0.2", "youch-core": "^0.3.3" } }, "sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ=="],
@@ -353,30 +569,34 @@
"zip-stream": ["zip-stream@6.0.1", "", { "dependencies": { "archiver-utils": "^5.0.0", "compress-commons": "^6.0.2", "readable-stream": "^4.0.0" } }, "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA=="],
+ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
+
+ "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
+
+ "@isaacs/cliui/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
+
+ "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
+
"glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="],
"lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
- "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
+ "miniflare/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="],
- "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
+ "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
- "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
+ "proxy-agent/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="],
- "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
+ "yauzl/buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="],
- "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
+ "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
- "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
+ "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
+
+ "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
"lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],
"lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="],
-
- "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
-
- "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
-
- "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
}
}
diff --git a/public/css/styles.css b/public/css/styles.css
index fc57404b0..8cd5da87c 100644
--- a/public/css/styles.css
+++ b/public/css/styles.css
@@ -1,3981 +1,2 @@
/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
-.split-container::before {
- content: '';
- position: absolute;
- inset: 0;
- background-image: linear-gradient(var(--color-mist) 1px, transparent 1px), linear-gradient(90deg, var(--color-mist) 1px, transparent 1px);
- background-size: 20px 20px;
- opacity: 0.3;
- pointer-events: none;
-}
-.split-container::after {
- content: '← Drag →';
- position: absolute;
- bottom: 12px;
- left: 50%;
- transform: translateX(-50%);
- font-size: 0.625rem;
- font-weight: 600;
- letter-spacing: 0.1em;
- text-transform: uppercase;
- color: var(--color-ash);
- background: var(--color-paper);
- padding: 4px 12px;
- border-radius: 4px;
- opacity: 0.8;
- transition: opacity 0.3s ease;
- z-index: 10;
-}
-.split-container:hover::after {
- opacity: 0;
-}
-.split-after .impeccable-card {
- box-shadow: 0 10px 40px rgba(0,0,0,0.08);
-}
-@keyframes splitEntry {
- from {
- opacity: 0;
- transform: translateX(-50%) skewX(-10deg) scaleY(0.8);
- }
- to {
- opacity: 1;
- transform: translateX(-50%) skewX(-10deg) scaleY(1);
- }
-}
-.split-divider {
- animation: splitEntry 0.6s var(--ease-out) 0.3s backwards;
-}
-.split-label-item {
- transition: color var(--duration-fast) var(--ease-out);
- cursor: default;
-}
-.split-label-item:hover {
- color: var(--color-text);
-}
-.split-label-item[data-point="after"]:hover .split-label-dot--accent {
- transform: scale(1.3);
-}
-.split-label-dot {
- transition: transform var(--duration-fast) var(--ease-spring);
-}
-.split-badge {
- position: absolute;
- top: 10px;
- font-size: 0.625rem;
- font-weight: 600;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- padding: 3px 8px;
- border-radius: 3px;
- z-index: 5;
- pointer-events: none;
-}
-.split-badge--before {
- left: 10px;
- color: var(--color-ash);
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
-}
-.split-badge--after {
- right: 10px;
- color: var(--color-paper);
- background: var(--color-accent);
-}
-@media (hover: none) {
- .split-container::after {
- content: '← Swipe →';
- }
-}
-@media (max-width: 600px) {
- .split-label {
- font-size: 0.5625rem;
- padding: 4px 10px;
- }
-}
-.commands-section {
- position: relative;
- padding: var(--spacing-xl) 0;
- background: var(--color-paper);
-}
-.commands-gallery {
- display: block;
-}
-.commands-container {
- display: grid;
- grid-template-columns: 1fr 1.2fr;
- gap: var(--spacing-2xl);
- align-items: start;
-}
-@media (max-width: 900px) {
- .commands-container {
- grid-template-columns: 1fr;
- }
-}
-.command-manual {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-sm);
- padding-bottom: 20vh;
-}
-.command-category-header {
- font-family: var(--font-display);
- font-size: 0.875rem;
- font-weight: 600;
- color: var(--color-accent);
- text-transform: uppercase;
- letter-spacing: 0.1em;
- padding: var(--spacing-lg) var(--spacing-lg) var(--spacing-sm);
- margin-top: var(--spacing-md);
- border-bottom: 1px solid var(--color-mist);
-}
-.command-category-header:first-child {
- margin-top: 0;
-}
-.manual-entry {
- position: relative;
- padding: var(--spacing-lg);
- padding-left: calc(var(--spacing-lg) + 16px);
- border-left: 2px solid var(--color-mist);
- transition: border-color 0.4s var(--ease-out), opacity 0.4s var(--ease-out), background 0.4s var(--ease-out), transform 0.4s var(--ease-out);
- opacity: 0.4;
- cursor: pointer;
- transform: translateX(-16px);
-}
-.manual-entry:hover {
- opacity: 0.7;
-}
-.manual-entry.active {
- border-left-color: var(--color-accent);
- opacity: 1;
- transform: translateX(0);
- background: linear-gradient(to right, var(--color-bg), transparent);
-}
-.manual-cmd-name {
- font-family: var(--font-mono);
- font-size: 1.5rem;
- margin: 0 0 var(--spacing-sm);
- color: var(--color-ink);
- font-weight: 500;
-}
-.beta-badge {
- font-family: var(--font-body);
- font-size: 0.55rem;
- font-weight: 600;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- color: var(--color-accent);
- border: 1px solid var(--color-accent);
- border-radius: 3px;
- padding: 1px 5px;
- vertical-align: middle;
- margin-left: 6px;
-}
-.manual-cmd-desc {
- font-size: 1rem;
- line-height: 1.6;
- color: var(--color-charcoal);
- margin: 0;
-}
-.manual-cmd-rel {
- font-size: 0.8125rem;
- color: var(--color-ash);
- margin-top: var(--spacing-sm);
- display: flex;
- align-items: center;
- gap: 0.5ch;
- flex-wrap: wrap;
-}
-.manual-cmd-rel .rel-icon {
- color: var(--color-accent);
- font-weight: 600;
-}
-.manual-cmd-rel code {
- font-family: var(--font-mono);
- font-size: 0.75rem;
- background: var(--color-mist);
- padding: 2px 6px;
- border-radius: 3px;
- color: var(--color-ink);
-}
-.glass-terminal-wrapper {
- position: sticky;
- top: var(--spacing-xl);
- height: calc(100vh - var(--spacing-xl) * 2);
- max-height: 800px;
- min-height: 500px;
-}
-.terminal-stack {
- position: relative;
- height: 100%;
- perspective: 1200px;
-}
-.terminal-stack-tabs {
- position: absolute;
- top: -31px;
- right: 8px;
- display: flex;
- gap: 4px;
- z-index: 10;
-}
-.terminal-stack-tab {
- font-family: var(--font-mono);
- font-size: 0.75rem;
- padding: 5px 12px;
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- border-bottom: none;
- border-radius: 6px 6px 0 0;
- color: var(--color-ash);
- cursor: pointer;
- transition: all 0.2s ease;
-}
-.terminal-stack-tab:hover {
- background: var(--color-paper);
- color: var(--color-charcoal);
-}
-.terminal-stack-tab.active {
- background: var(--color-paper);
- color: var(--color-ink);
- border-color: var(--color-mist);
-}
-.terminal-window {
- position: absolute;
- inset: 0;
- transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s ease, filter 0.3s ease;
- transform-origin: center bottom;
-}
-.terminal-window--demo {
- z-index: 2;
-}
-.terminal-window--demo.is-back {
- transform: translateY(16px) translateX(12px) scale(0.96);
- opacity: 0.6;
- filter: brightness(0.92);
- pointer-events: none;
- z-index: 1;
-}
-.terminal-window--source {
- z-index: 1;
- transform: translateY(16px) translateX(12px) scale(0.96);
- opacity: 0.6;
- filter: brightness(0.92);
- pointer-events: none;
-}
-.terminal-window--source.is-front {
- transform: translateY(0) translateX(0) scale(1);
- opacity: 1;
- filter: brightness(1);
- pointer-events: auto;
- z-index: 2;
-}
-.source-window {
- background: var(--color-paper);
- backdrop-filter: blur(12px);
- -webkit-backdrop-filter: blur(12px);
- border: 1px solid var(--color-mist);
- border-radius: 8px;
- box-shadow: 0 20px 60px -10px rgba(0,0,0,0.15);
- height: 100%;
- display: flex;
- flex-direction: column;
- overflow: hidden;
-}
-.source-header {
- background: var(--color-cream);
- padding: 12px 16px;
- display: flex;
- align-items: center;
- gap: 8px;
- border-bottom: 1px solid var(--color-mist);
- flex-shrink: 0;
-}
-.source-title {
- font-family: var(--font-mono);
- font-size: 0.875rem;
- color: var(--color-ink);
- font-weight: 500;
-}
-.source-body {
- flex: 1;
- padding: var(--spacing-md);
- font-family: var(--font-mono);
- font-size: 0.75rem;
- line-height: 1.5;
- color: var(--color-charcoal);
- overflow-y: auto;
- overscroll-behavior: contain;
- white-space: pre-wrap;
- word-break: break-word;
- background: var(--color-cream);
-}
-.source-loading {
- color: var(--color-ash);
- font-style: italic;
-}
-@media (max-width: 900px) {
- .glass-terminal-wrapper {
- display: none;
- }
-}
-.glass-terminal {
- background: var(--color-paper);
- backdrop-filter: blur(12px);
- -webkit-backdrop-filter: blur(12px);
- border: 1px solid var(--color-mist);
- border-radius: 8px;
- box-shadow: 0 20px 60px -10px rgba(0,0,0,0.15);
- height: 100%;
- display: flex;
- flex-direction: column;
- overflow: hidden;
-}
-.terminal-header {
- background: var(--color-cream);
- padding: 12px 16px;
- display: flex;
- align-items: center;
- gap: 8px;
- border-bottom: 1px solid var(--color-mist);
-}
-.terminal-dot {
- width: 10px;
- height: 10px;
- border-radius: 50%;
-}
-.terminal-dot.red {
- background: #ff5f56;
-}
-.terminal-dot.yellow {
- background: #ffbd2e;
-}
-.terminal-dot.green {
- background: #27c93f;
-}
-.terminal-title {
- margin-left: auto;
- font-family: var(--font-mono);
- font-size: 0.75rem;
- color: var(--color-ash);
-}
-.terminal-body {
- flex: 1;
- padding: var(--spacing-md);
- font-family: var(--font-mono);
- font-size: 0.9375rem;
- color: var(--color-ink);
- overflow-y: auto;
- display: flex;
- flex-direction: column;
- min-height: 0;
-}
-.terminal-line {
- margin-bottom: var(--spacing-sm);
- display: flex;
- gap: var(--spacing-sm);
- line-height: 1.5;
-}
-.terminal-prompt {
- color: var(--color-accent);
- user-select: none;
- font-weight: bold;
-}
-.terminal-cursor {
- display: inline-block;
- width: 8px;
- height: 1.2em;
- background: var(--color-accent);
- vertical-align: middle;
- animation: blink 1s step-end infinite;
-}
-.terminal-output {
- color: var(--color-ash);
- margin-bottom: var(--spacing-md);
- white-space: pre-wrap;
-}
-@media (max-height: 800px) {
- .terminal-output {
- display: none;
- }
-}
-.terminal-cmd {
- color: var(--color-accent);
- font-weight: 600;
-}
-.terminal-step {
- color: var(--color-charcoal);
-}
-.terminal-done {
- color: var(--color-success, #22c55e);
- font-weight: 500;
-}
-.terminal-preview {
- background: var(--color-paper);
- margin: var(--spacing-sm) 0;
- flex: 1;
- min-height: 0;
- overflow: hidden;
- border-radius: 12px;
-}
-.terminal-cursor-line {
- flex-shrink: 0;
- margin-top: var(--spacing-sm) !important;
-}
-.terminal-preview .demo-split-comparison {
- display: flex;
- flex-direction: column;
- height: 100%;
-}
-.terminal-preview .demo-split-comparison .split-container {
- position: relative;
- flex: 1;
- min-height: 0;
- overflow: hidden;
- cursor: ew-resize;
- user-select: none;
- background: var(--color-cream);
-}
-.terminal-preview .demo-split-comparison .split-before, .terminal-preview .demo-split-comparison .split-after {
- position: absolute;
- inset: 0;
- display: flex;
- align-items: center;
- justify-content: center;
- padding: var(--spacing-md);
-}
-.terminal-preview .demo-split-comparison .split-before {
- z-index: 1;
- background: var(--color-cream);
-}
-.terminal-preview .demo-split-comparison .split-after {
- z-index: 2;
- background: var(--color-paper);
- clip-path: polygon(58% 0%, 100% 0%, 100% 100%, 42% 100%);
-}
-.terminal-preview .demo-split-comparison .split-content {
- width: 100%;
- max-width: 280px;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
-}
-.terminal-preview .demo-split-comparison .split-divider {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 50%;
- width: 2px;
- background: var(--color-accent);
- transform: translateX(-50%) skewX(-10deg);
- pointer-events: none;
- z-index: 3;
- box-shadow: 0 0 12px rgba(0,0,0,0.1);
-}
-.terminal-preview .demo-split-comparison .split-label {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%) skewX(10deg);
- font-size: 0.5625rem;
- font-weight: 600;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- color: var(--color-paper);
- background: var(--color-accent);
- padding: 4px 10px;
- border-radius: 3px;
- white-space: nowrap;
-}
-.terminal-preview .demo-split-comparison .demo-caption {
- flex-shrink: 0;
- font-size: 0.75rem;
- color: var(--color-ash);
- text-align: center;
- padding: var(--spacing-sm) var(--spacing-md);
-}
-@keyframes blink {
- 50% {
- opacity: 0;
- }
-}
-.casestudies-section {
- position: relative;
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.transformations-tabbed {
- margin-top: var(--spacing-xl);
-}
-.transformation-tabs {
- display: flex;
- gap: var(--spacing-xs);
- border-bottom: 1px solid var(--color-mist);
- margin-bottom: var(--spacing-lg);
-}
-.transformation-tab {
- font-family: var(--font-display);
- font-size: 0.9375rem;
- font-weight: 500;
- color: var(--color-ash);
- background: none;
- border: none;
- padding: var(--spacing-sm) var(--spacing-md);
- cursor: pointer;
- position: relative;
- transition: color 0.2s ease;
-}
-.transformation-tab:hover {
- color: var(--color-charcoal);
-}
-.transformation-tab.active {
- color: var(--color-ink);
-}
-.transformation-tab.active::after {
- content: '';
- position: absolute;
- bottom: -1px;
- left: 0;
- right: 0;
- height: 2px;
- background: var(--color-accent);
-}
-.transformation-panels {
- position: relative;
-}
-.transformation-panel {
- display: none;
- flex-direction: column;
- gap: var(--spacing-lg);
- animation: fadeInPanel 0.3s ease;
-}
-.transformation-panel.active {
- display: flex;
-}
-@keyframes fadeInPanel {
- from {
- opacity: 0;
- transform: translateY(8px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-.transformation-images {
- display: flex;
- align-items: center;
- gap: var(--spacing-md);
-}
-.transformation-before, .transformation-after {
- flex: 1;
- margin: 0;
-}
-.transformation-before img, .transformation-after img, .transformation-placeholder {
- width: 100%;
- aspect-ratio: 16 / 10;
- object-fit: cover;
- border-radius: 8px;
- border: 1px solid var(--color-mist);
- cursor: pointer;
- transition: transform 0.2s ease, box-shadow 0.2s ease;
-}
-.transformation-before img:hover, .transformation-after img:hover, .transformation-placeholder:hover {
- transform: scale(1.02);
- box-shadow: 0 8px 24px -4px rgba(0,0,0,0.15);
-}
-.transformation-placeholder {
- background: linear-gradient(135deg, var(--color-mist) 0%, var(--color-cream) 100%);
- display: flex;
- align-items: center;
- justify-content: center;
- color: var(--color-ash);
- font-size: 0.8125rem;
- font-style: italic;
-}
-.transformation-before figcaption, .transformation-after figcaption {
- font-size: 0.75rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.05em;
- color: var(--color-ash);
- margin-top: var(--spacing-xs);
- text-align: center;
-}
-.transformation-arrow {
- font-size: 1.5rem;
- color: var(--color-accent);
- font-weight: 300;
- flex-shrink: 0;
-}
-.transformation-info {
- max-width: 600px;
-}
-.transformation-title {
- font-family: var(--font-display);
- font-size: 1.25rem;
- font-weight: 600;
- color: var(--color-ink);
- margin: 0 0 var(--spacing-xs);
-}
-.transformation-desc {
- font-size: 0.9375rem;
- color: var(--color-charcoal);
- line-height: 1.6;
- margin: 0 0 var(--spacing-sm);
-}
-.transformation-commands {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
-}
-.transformation-command {
- font-family: var(--font-mono);
- font-size: 0.75rem;
- background: var(--color-mist);
- color: var(--color-charcoal);
- padding: 4px 10px;
- border-radius: 4px;
-}
-.lightbox {
- position: fixed;
- inset: 0;
- background: rgba(0, 0, 0, 0.9);
- display: flex;
- align-items: center;
- justify-content: center;
- z-index: 1000;
- opacity: 0;
- visibility: hidden;
- transition: opacity 0.3s ease, visibility 0.3s ease;
-}
-.lightbox.active {
- opacity: 1;
- visibility: visible;
-}
-.lightbox-close {
- position: absolute;
- top: 20px;
- right: 24px;
- background: none;
- border: none;
- color: white;
- font-size: 2.5rem;
- cursor: pointer;
- opacity: 0.7;
- transition: opacity 0.2s ease;
- line-height: 1;
-}
-.lightbox-close:hover {
- opacity: 1;
-}
-.lightbox-image {
- max-width: 90vw;
- max-height: 85vh;
- object-fit: contain;
- border-radius: 8px;
- box-shadow: 0 20px 60px rgba(0,0,0,0.5);
-}
-@media (max-width: 768px) {
- .transformation-images {
- flex-direction: column;
- }
- .transformation-arrow {
- transform: rotate(90deg);
- }
- .transformation-before, .transformation-after {
- width: 100%;
- }
-}
-.hero-version-link {
- font-size: 0.8125rem;
- color: var(--color-ash);
- margin-top: var(--spacing-sm);
-}
-.hero-version-link a {
- color: var(--color-ash);
- text-decoration: none;
- border-bottom: 1px solid transparent;
- transition: color 0.2s ease, border-color 0.2s ease;
-}
-.hero-version-link a:hover {
- color: var(--color-accent);
- border-bottom-color: var(--color-accent);
-}
-.changelog-section {
- position: relative;
- padding: var(--spacing-xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.changelog-list {
- display: flex;
- flex-direction: column;
- gap: 0;
-}
-.changelog-entry {
- padding: var(--spacing-md) 0;
- border-bottom: 1px solid var(--color-mist);
-}
-.changelog-entry:first-child {
- border-top: 1px solid var(--color-mist);
-}
-.changelog-version-header {
- display: flex;
- align-items: baseline;
- gap: var(--spacing-sm);
- margin-bottom: var(--spacing-sm);
-}
-.changelog-version {
- font-family: var(--font-mono);
- font-size: 1.125rem;
- font-weight: 600;
- color: var(--color-ink);
-}
-.changelog-date {
- font-size: 0.8125rem;
- color: var(--color-ash);
-}
-.changelog-items {
- margin: 0;
- padding-left: var(--spacing-md);
- color: var(--color-charcoal);
- line-height: 1.7;
-}
-.changelog-items li {
- margin-bottom: var(--spacing-xs);
-}
-.changelog-items code {
- font-family: var(--font-mono);
- font-size: 0.875em;
- background: var(--color-mist);
- padding: 2px 6px;
- border-radius: 3px;
- color: var(--color-ink);
-}
-.faq-section {
- position: relative;
- padding: var(--spacing-xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.faq-list {
- display: flex;
- flex-direction: column;
- gap: 0;
-}
-.faq-item {
- border-bottom: 1px solid var(--color-mist);
-}
-.faq-item:first-child {
- border-top: 1px solid var(--color-mist);
-}
-.faq-question {
- font-family: var(--font-display);
- font-size: 1.125rem;
- font-weight: 500;
- color: var(--color-ink);
- padding: var(--spacing-md) 0;
- cursor: pointer;
- list-style: none;
- display: flex;
- align-items: center;
- justify-content: space-between;
- transition: color 0.2s ease;
-}
-.faq-question::-webkit-details-marker {
- display: none;
-}
-.faq-question::after {
- content: '+';
- font-family: var(--font-body);
- font-size: 1.5rem;
- font-weight: 300;
- color: var(--color-accent);
- transition: transform 0.3s var(--ease-out);
-}
-.faq-item[open] .faq-question::after {
- transform: rotate(45deg);
-}
-.faq-question:hover {
- color: var(--color-accent);
-}
-.faq-answer {
- padding: 0 0 var(--spacing-md);
- color: var(--color-charcoal);
- line-height: 1.7;
- animation: faqFadeIn 0.3s var(--ease-out);
-}
-.faq-answer p {
- margin: 0 0 var(--spacing-sm);
-}
-.faq-answer p:last-child {
- margin-bottom: 0;
-}
-.faq-answer ul {
- margin: var(--spacing-sm) 0;
- padding-left: var(--spacing-md);
-}
-.faq-answer li {
- margin-bottom: var(--spacing-xs);
-}
-.faq-answer code {
- font-family: var(--font-mono);
- font-size: 0.875em;
- background: var(--color-mist);
- padding: 2px 6px;
- border-radius: 3px;
- color: var(--color-ink);
-}
-.faq-answer a {
- color: var(--color-accent);
- text-decoration: none;
- border-bottom: 1px solid transparent;
- transition: border-color 0.2s ease;
-}
-.faq-answer a:hover {
- border-bottom-color: var(--color-accent);
-}
-@keyframes faqFadeIn {
- from {
- opacity: 0;
- transform: translateY(-8px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-.skills-section {
- position: relative;
- padding: var(--spacing-xl) 0;
- overflow: hidden;
- background: var(--color-bg);
-}
-.skills-gallery {
- display: block;
- position: relative;
-}
-.gallery-track {
- display: flex;
- gap: var(--spacing-lg);
- overflow-x: auto;
- scroll-snap-type: x mandatory;
- padding: var(--spacing-md) var(--spacing-lg) var(--spacing-xl);
- -webkit-overflow-scrolling: touch;
- scrollbar-width: none;
- cursor: grab;
-}
-.gallery-track:active {
- cursor: grabbing;
-}
-.gallery-track::-webkit-scrollbar {
- display: none;
-}
-.gallery-frame {
- flex: 0 0 80vw;
- max-width: 1100px;
- scroll-snap-align: center;
- position: relative;
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 20px 50px -10px rgba(0, 0, 0, 0.1);
- border-radius: 2px;
- overflow: hidden;
- opacity: 0.4;
- transform: scale(0.95);
- transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out), box-shadow 0.6s var(--ease-out);
-}
-.gallery-frame.active {
- opacity: 1;
- transform: scale(1);
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 40px 100px -20px rgba(0, 0, 0, 0.2);
- border-color: var(--color-charcoal);
- border-width: 1px;
-}
-.gallery-content {
- display: grid;
- grid-template-columns: 1.2fr 1fr;
- height: 600px;
-}
-@media (max-width: 900px) {
- .gallery-frame {
- flex: 0 0 90vw;
- }
- .gallery-content {
- grid-template-columns: 1fr;
- height: auto;
- min-height: 600px;
- }
-}
-.gallery-visual {
- background: var(--color-cream);
- border-right: 1px solid var(--color-mist);
- position: relative;
- overflow: hidden;
- display: flex;
- align-items: center;
- justify-content: center;
- padding: var(--spacing-lg);
-}
-.gallery-info {
- padding: var(--spacing-xl);
- display: flex;
- flex-direction: column;
- overflow-y: auto;
-}
-.gallery-header {
- margin-bottom: var(--spacing-lg);
-}
-.gallery-title {
- font-family: var(--font-display);
- font-size: 2.5rem;
- font-style: italic;
- margin: 0 0 var(--spacing-xs);
- color: var(--color-ink);
-}
-.gallery-meta {
- font-family: var(--font-mono);
- font-size: 0.75rem;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- color: var(--color-ash);
-}
-.gallery-desc {
- font-size: 1.125rem;
- line-height: 1.6;
- color: var(--color-charcoal);
- margin-bottom: var(--spacing-xl);
- max-width: 45ch;
-}
-.gallery-tags {
- display: flex;
- flex-wrap: wrap;
- gap: var(--spacing-xs);
- margin-top: auto;
-}
-.gallery-tag {
- padding: 6px 12px;
- border: 1px solid var(--color-mist);
- border-radius: 4px;
- font-size: 0.8125rem;
- color: var(--color-ash);
-}
-.gallery-map {
- display: flex;
- justify-content: center;
- gap: 8px;
- margin-top: var(--spacing-lg);
-}
-.gallery-dot {
- width: 40px;
- height: 2px;
- background: var(--color-mist);
- cursor: pointer;
- transition: all 0.3s ease;
- position: relative;
- border: none;
- padding: 0;
- font: inherit;
-}
-.gallery-dot::after {
- content: '';
- position: absolute;
- top: -10px;
- bottom: -10px;
- left: 0;
- right: 0;
-}
-.gallery-dot:focus-visible {
- outline: 2px solid var(--color-accent);
- outline-offset: 4px;
- border-radius: 1px;
-}
-.gallery-dot.active {
- background: var(--color-accent);
- height: 4px;
-}
-.demo-tabbed-container {
- display: flex;
- flex-direction: column;
-}
-.demo-tabs {
- display: flex;
- gap: 0;
- margin-bottom: 0;
- justify-content: center;
- background: var(--color-paper);
- border-bottom: 1px solid var(--color-mist);
-}
-.demo-tab {
- padding: var(--spacing-sm) var(--spacing-lg);
- background: transparent;
- border: none;
- border-bottom: 2px solid transparent;
- font-family: var(--font-mono);
- font-size: 0.75rem;
- font-weight: 500;
- letter-spacing: 0.05em;
- text-transform: uppercase;
- color: var(--color-ash);
- cursor: pointer;
- transition: all var(--duration-fast) var(--ease-out);
-}
-.demo-tab:hover {
- color: var(--color-text);
- background: var(--color-cream);
-}
-.demo-tab.active {
- color: var(--color-accent);
- border-bottom-color: var(--color-accent);
- background: var(--color-accent-dim);
-}
-.demo-panels {
- flex: 1;
-}
-.demo-panel {
- display: none;
-}
-.demo-panel.active {
- display: block;
- animation: fadeSlideIn 0.3s var(--ease-out);
-}
-@keyframes fadeSlideIn {
- from {
- opacity: 0;
- transform: translateY(10px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-.demo-container {
- background: var(--color-paper);
- border: none;
- border-radius: 0;
- overflow: hidden;
-}
-.demo-header {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: var(--spacing-sm) var(--spacing-md);
- background: var(--color-paper);
- border-bottom: 1px solid var(--color-mist);
- min-height: 48px;
-}
-.demo-toggle {
- display: flex;
- align-items: center;
- gap: var(--spacing-md);
-}
-.demo-toggle-label {
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.08em;
- color: var(--color-ash);
- transition: color var(--duration-fast) var(--ease-out);
- cursor: pointer;
-}
-.demo-toggle-label:hover {
- color: var(--color-text);
-}
-.demo-toggle-label.active {
- color: var(--color-accent);
-}
-.demo-toggle-switch {
- position: relative;
- width: 44px;
- height: 24px;
- background: var(--color-mist);
- border-radius: 12px;
- cursor: pointer;
- transition: background var(--duration-fast) var(--ease-out);
- border: 1px solid transparent;
- padding: 0;
- font: inherit;
-}
-.demo-toggle-switch:focus-visible {
- outline: 2px solid var(--color-accent);
- outline-offset: 2px;
-}
-.demo-toggle-switch:hover {
- border-color: var(--color-ash);
-}
-.demo-toggle-switch::after {
- content: '';
- position: absolute;
- top: 3px;
- left: 3px;
- width: 16px;
- height: 16px;
- background: var(--color-paper);
- border-radius: 50%;
- box-shadow: 0 1px 4px rgba(0,0,0,0.15);
- transition: transform var(--duration-base) var(--ease-spring);
-}
-.demo-toggle-switch.active {
- background: var(--color-accent);
-}
-.demo-toggle-switch.active::after {
- transform: translateX(20px);
-}
-.demo-viewport {
- padding: var(--spacing-xl);
- display: flex;
- align-items: center;
- justify-content: center;
- min-height: 280px;
- background: var(--color-cream);
- transition: background var(--duration-base) var(--ease-out);
-}
-.demo-viewport[data-state="after"] {
- background: var(--color-paper);
-}
-.demo-caption {
- padding: var(--spacing-sm) var(--spacing-md);
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- letter-spacing: 0.03em;
- color: var(--color-ash);
- background: var(--color-paper);
- text-align: center;
-}
-.uxw-demo {
- width: 100%;
- max-width: 320px;
- padding: var(--spacing-lg);
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 6px;
- text-align: center;
-}
-.uxw-error-icon {
- font-size: 2rem;
- margin-bottom: var(--spacing-sm);
-}
-.uxw-error-title {
- font-weight: 600;
- color: #c00;
- margin-bottom: var(--spacing-xs);
-}
-.uxw-error-text {
- font-size: 0.875rem;
- color: var(--color-ash);
-}
-.uxw-error-action {
- margin-top: var(--spacing-sm);
- font-size: 0.875rem;
- color: var(--color-accent);
- cursor: pointer;
- text-decoration: underline;
-}
-.uxw-error-after .uxw-error-icon {
- color: var(--color-accent);
-}
-.uxw-error-after .uxw-error-title {
- color: var(--color-text);
-}
-.uxw-error-after .uxw-error-text {
- color: var(--color-charcoal);
-}
-.uxw-button-context {
- font-size: 0.875rem;
- color: var(--color-charcoal);
- margin-bottom: var(--spacing-md);
- font-weight: 500;
-}
-.uxw-button-row {
- display: flex;
- gap: var(--spacing-sm);
- justify-content: center;
-}
-.uxw-btn {
- padding: var(--spacing-xs) var(--spacing-md);
- border-radius: 4px;
- font-size: 0.875rem;
- font-weight: 500;
- cursor: pointer;
- border: none;
-}
-.uxw-btn-primary {
- background: var(--color-text);
- color: var(--color-paper);
-}
-.uxw-btn-secondary {
- background: transparent;
- color: var(--color-ash);
- border: 1px solid var(--color-mist);
-}
-.uxw-btn-danger {
- background: #c00;
- color: white;
-}
-.uxw-empty-icon {
- font-size: 2.5rem;
- margin-bottom: var(--spacing-sm);
- opacity: 0.4;
-}
-.uxw-empty-title {
- font-weight: 500;
- color: var(--color-ash);
-}
-.uxw-empty-text {
- font-size: 0.875rem;
- color: var(--color-charcoal);
- margin-top: var(--spacing-xs);
-}
-.uxw-empty-action {
- margin-top: var(--spacing-md);
-}
-.uxw-empty-after .uxw-empty-icon {
- opacity: 1;
-}
-.uxw-empty-after .uxw-empty-title {
- color: var(--color-text);
-}
-.spatial-demo {
- width: 100%;
- max-width: 340px;
- padding: var(--spacing-md);
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 6px;
-}
-.spatial-grid-before {
- display: flex;
- flex-wrap: wrap;
- gap: 6px;
-}
-.spatial-grid-after {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: var(--spacing-sm);
-}
-.spatial-card-item {
- padding: var(--spacing-sm);
- background: var(--color-bg);
- border: 1px solid var(--color-mist);
- border-radius: 4px;
- font-size: 0.8125rem;
- color: var(--color-charcoal);
- text-align: center;
-}
-.spatial-grid-after .spatial-card-item {
- width: auto !important;
-}
-.spatial-hierarchy-before .spatial-h-title, .spatial-hierarchy-before .spatial-h-subtitle, .spatial-hierarchy-before .spatial-h-cta, .spatial-hierarchy-before .spatial-h-link {
- font-size: 0.9375rem;
- margin-bottom: var(--spacing-xs);
- color: var(--color-charcoal);
-}
-.spatial-hierarchy-after .spatial-h-title {
- font-family: var(--font-display);
- font-size: 1.75rem;
- font-weight: 300;
- font-style: italic;
- margin-bottom: var(--spacing-xs);
- color: var(--color-text);
-}
-.spatial-hierarchy-after .spatial-h-subtitle {
- font-size: 0.6875rem;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- color: var(--color-ash);
- margin-bottom: var(--spacing-md);
-}
-.spatial-hierarchy-after .spatial-h-cta {
- display: inline-block;
- padding: var(--spacing-sm) var(--spacing-lg);
- background: var(--color-text);
- color: var(--color-paper);
- font-size: 0.875rem;
- font-weight: 500;
- border-radius: 4px;
- margin-bottom: var(--spacing-sm);
-}
-.spatial-hierarchy-after .spatial-h-link {
- font-size: 0.75rem;
- color: var(--color-ash);
-}
-.spatial-whitespace-before {
- padding: var(--spacing-xs) !important;
-}
-.spatial-whitespace-before .spatial-ws-title {
- font-size: 1rem;
- font-weight: 600;
- margin-bottom: 2px;
-}
-.spatial-whitespace-before .spatial-ws-price {
- font-size: 0.875rem;
- color: var(--color-ash);
- margin-bottom: 4px;
-}
-.spatial-whitespace-before .spatial-ws-features {
- font-size: 0.75rem;
- color: var(--color-ash);
- margin-bottom: 6px;
-}
-.spatial-whitespace-before .spatial-ws-btn {
- width: 100%;
- padding: 6px;
- font-size: 0.75rem;
- background: var(--color-text);
- color: var(--color-paper);
- border: none;
- border-radius: 3px;
- cursor: pointer;
-}
-.spatial-whitespace-after {
- padding: var(--spacing-lg) !important;
-}
-.spatial-whitespace-after .spatial-ws-title {
- font-family: var(--font-display);
- font-size: 1.5rem;
- font-weight: 400;
- margin-bottom: var(--spacing-sm);
-}
-.spatial-whitespace-after .spatial-ws-price {
- font-size: 1.25rem;
- font-weight: 600;
- color: var(--color-text);
- margin-bottom: var(--spacing-sm);
-}
-.spatial-whitespace-after .spatial-ws-features {
- font-size: 0.8125rem;
- color: var(--color-ash);
- margin-bottom: var(--spacing-lg);
- line-height: 1.6;
-}
-.spatial-whitespace-after .spatial-ws-btn {
- width: 100%;
- padding: var(--spacing-sm);
- font-size: 0.875rem;
- background: var(--color-text);
- color: var(--color-paper);
- border: none;
- border-radius: 4px;
- cursor: pointer;
- font-weight: 500;
-}
-.motion-demo {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: var(--spacing-sm);
- width: 100%;
- max-width: 280px;
-}
-.motion-stagger-demo {
- align-items: stretch;
-}
-.motion-list-item {
- display: flex;
- align-items: center;
- gap: var(--spacing-sm);
- padding: var(--spacing-sm) var(--spacing-md);
- background: var(--color-bg);
- border: 1px solid var(--color-mist);
- border-radius: 4px;
- font-size: 0.875rem;
- color: var(--color-charcoal);
-}
-.motion-dot {
- width: 8px;
- height: 8px;
- background: var(--color-accent);
- border-radius: 50%;
-}
-.demo-viewport[data-state="after"] .motion-list-item {
- opacity: 0;
- transform: translateY(12px);
- animation: staggerIn 0.35s cubic-bezier(0.16, 1, 0.3, 1) forwards;
-}
-.demo-viewport[data-state="after"] .motion-list-item:nth-child(1) {
- animation-delay: 0s;
-}
-.demo-viewport[data-state="after"] .motion-list-item:nth-child(2) {
- animation-delay: 0.05s;
-}
-.demo-viewport[data-state="after"] .motion-list-item:nth-child(3) {
- animation-delay: 0.1s;
-}
-.demo-viewport[data-state="after"] .motion-list-item:nth-child(4) {
- animation-delay: 0.15s;
-}
-@keyframes staggerIn {
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-.motion-btn {
- padding: 12px 24px;
- font-size: 0.9375rem;
- font-weight: 500;
- border: none;
- border-radius: 4px;
- cursor: pointer;
-}
-.motion-btn-before {
- background: var(--color-charcoal);
- color: var(--color-paper);
-}
-.motion-btn-after {
- background: var(--color-text);
- color: var(--color-paper);
- transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.2s ease;
-}
-.motion-btn-after:hover {
- transform: translateY(-2px);
- box-shadow: 0 4px 12px rgba(0,0,0,0.15);
-}
-.motion-btn-after:active {
- transform: translateY(0) scale(0.98);
-}
-.motion-card {
- padding: var(--spacing-md);
- background: var(--color-bg);
- border: 1px solid var(--color-mist);
- border-radius: 6px;
- text-align: center;
- min-width: 140px;
-}
-.motion-card-icon {
- font-size: 1.5rem;
- margin-bottom: var(--spacing-xs);
-}
-.motion-card-text {
- font-size: 0.8125rem;
- color: var(--color-charcoal);
-}
-.motion-card-after {
- transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
-}
-.demo-viewport[data-state="after"] .motion-card-after {
- background: var(--color-accent);
- @supports (color: color-mix(in lab, red, red)) {
- background: color-mix(in oklch, var(--color-accent) 10%, var(--color-paper));
- }
- border-color: var(--color-accent);
-}
-.demo-viewport[data-state="after"] .motion-card-after .motion-card-icon {
- animation: checkPop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
-}
-@keyframes checkPop {
- 50% {
- transform: scale(1.3);
- }
-}
-.typo-demo {
- width: 100%;
- max-width: 320px;
- text-align: left;
-}
-.typo-pairing-before {
- font-family: 'Inter', system-ui, sans-serif;
-}
-.typo-pairing-before .typo-heading {
- font-size: 1.5rem;
- font-weight: 600;
- margin-bottom: var(--spacing-xs);
-}
-.typo-pairing-before .typo-body {
- font-size: 0.9375rem;
- line-height: 1.5;
- color: var(--color-ash);
-}
-.typo-pairing-after .typo-heading {
- font-family: var(--font-display);
- font-size: 2rem;
- font-weight: 300;
- font-style: italic;
- letter-spacing: -0.02em;
- margin-bottom: var(--spacing-sm);
- color: var(--color-text);
-}
-.typo-pairing-after .typo-body {
- font-family: var(--font-body);
- font-size: 0.9375rem;
- line-height: 1.7;
- color: var(--color-charcoal);
-}
-.typo-hierarchy-before .typo-h1 {
- font-size: 1.125rem;
- font-weight: 600;
- margin-bottom: 4px;
-}
-.typo-hierarchy-before .typo-meta {
- font-size: 0.9375rem;
- color: var(--color-ash);
- margin-bottom: var(--spacing-xs);
-}
-.typo-hierarchy-before .typo-p {
- font-size: 0.875rem;
- line-height: 1.5;
- color: var(--color-charcoal);
-}
-.typo-hierarchy-after .typo-h1 {
- font-family: var(--font-display);
- font-size: 2.25rem;
- font-weight: 300;
- letter-spacing: -0.03em;
- margin-bottom: 2px;
- line-height: 1.1;
-}
-.typo-hierarchy-after .typo-meta {
- font-size: 0.6875rem;
- text-transform: uppercase;
- letter-spacing: 0.12em;
- color: var(--color-accent);
- margin-bottom: var(--spacing-md);
-}
-.typo-hierarchy-after .typo-p {
- font-size: 0.9375rem;
- line-height: 1.7;
- color: var(--color-ash);
-}
-.int-demo {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-md);
- width: 100%;
- max-width: 280px;
-}
-.int-states-demo {
- gap: var(--spacing-lg);
-}
-.int-state-row {
- display: flex;
- align-items: center;
- gap: var(--spacing-md);
-}
-.int-state-label {
- font-size: 0.6875rem;
- text-transform: uppercase;
- letter-spacing: 0.08em;
- color: var(--color-ash);
- width: 40px;
-}
-.int-btn {
- flex: 1;
- padding: var(--spacing-sm) var(--spacing-md);
- font-size: 0.875rem;
- font-weight: 500;
- border-radius: 4px;
- cursor: pointer;
-}
-.int-btn-poor {
- background: var(--color-charcoal);
- color: var(--color-paper);
- border: none;
-}
-.int-btn-good {
- background: var(--color-text);
- color: var(--color-paper);
- border: 2px solid transparent;
- transition: all 0.15s ease;
-}
-.int-btn-good:hover {
- background: var(--color-charcoal);
-}
-.int-btn-good:focus {
- outline: none;
- border-color: var(--color-accent);
- box-shadow: 0 0 0 3px var(--color-accent);
- @supports (color: color-mix(in lab, red, red)) {
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 25%, transparent);
- }
-}
-.int-btn-good:active {
- transform: scale(0.98);
-}
-.int-aff-item {
- padding: var(--spacing-sm) var(--spacing-md);
- border-radius: 4px;
- font-size: 0.875rem;
- cursor: pointer;
-}
-.int-aff-poor {
- color: var(--color-charcoal);
-}
-.int-aff-good {
- color: var(--color-accent);
- text-decoration: underline;
- text-underline-offset: 2px;
-}
-.int-aff-good::after {
- content: ' →';
-}
-.int-affordance-after .int-aff-item {
- background: var(--color-bg);
- border: 1px solid var(--color-mist);
- color: var(--color-accent);
- text-decoration: underline;
- text-underline-offset: 2px;
- transition: background 0.15s ease;
-}
-.int-affordance-after .int-aff-item:hover {
- background: var(--color-accent);
- @supports (color: color-mix(in lab, red, red)) {
- background: color-mix(in oklch, var(--color-accent) 5%, var(--color-paper));
- }
-}
-.int-affordance-after .int-aff-item::after {
- content: ' →';
-}
-.int-feedback-before, .int-feedback-after {
- display: flex;
- align-items: center;
- gap: var(--spacing-md);
- flex-direction: row;
-}
-.int-fb-btn {
- width: 48px;
- height: 48px;
- border-radius: 50%;
- border: none;
- cursor: pointer;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-.int-fb-btn svg {
- width: 22px;
- height: 22px;
-}
-.int-fb-silent {
- background: var(--color-mist);
- color: var(--color-ash);
-}
-.int-fb-active {
- background: var(--color-charcoal);
- color: var(--color-paper);
- transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
-}
-.int-fb-active:hover {
- transform: scale(1.1);
-}
-.int-fb-active:active {
- transform: scale(0.95);
-}
-.int-fb-active.liked {
- background: var(--color-accent);
- animation: heartPop 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
-}
-@keyframes heartPop {
- 50% {
- transform: scale(1.25);
- }
-}
-.int-fb-label {
- font-size: 0.875rem;
- color: var(--color-charcoal);
-}
-.color-demo {
- width: 100%;
- max-width: 300px;
-}
-.color-palette-before, .color-palette-after {
- display: flex;
- flex-wrap: wrap;
- gap: var(--spacing-xs);
- padding: var(--spacing-md);
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 6px;
-}
-.color-swatch {
- width: 40px;
- height: 40px;
- border-radius: 4px;
- transition: background 0.2s ease;
-}
-.color-card {
- width: 100%;
- margin-top: var(--spacing-sm);
- padding: var(--spacing-sm);
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 4px;
- display: flex;
- flex-direction: column;
- gap: 4px;
-}
-.color-card span {
- font-size: 0.8125rem;
- font-weight: 500;
- transition: color 0.2s ease;
-}
-.color-card button {
- padding: 6px;
- border: none;
- border-radius: 3px;
- font-size: 0.75rem;
- font-weight: 500;
- cursor: pointer;
- transition: all 0.2s ease;
-}
-.color-palette-before .swatch-1 {
- background: #ff6b6b;
-}
-.color-palette-before .swatch-2 {
- background: #4ecdc4;
-}
-.color-palette-before .swatch-3 {
- background: #ffe66d;
-}
-.color-palette-before .swatch-4 {
- background: #95e1d3;
-}
-.color-palette-before .swatch-5 {
- background: #f38181;
-}
-.color-palette-before .card-title {
- color: #ff6b6b;
-}
-.color-palette-before .card-subtitle {
- color: #4ecdc4;
-}
-.color-palette-before .card-btn {
- background: #ffe66d;
- color: #333;
-}
-.color-palette-after .swatch-1 {
- background: var(--color-text);
-}
-.color-palette-after .swatch-2 {
- background: var(--color-charcoal);
-}
-.color-palette-after .swatch-3 {
- background: var(--color-ash);
-}
-.color-palette-after .swatch-4 {
- background: var(--color-mist);
-}
-.color-palette-after .swatch-5 {
- background: var(--color-accent);
-}
-.color-palette-after .card-title {
- color: var(--color-text);
-}
-.color-palette-after .card-subtitle {
- color: var(--color-ash);
-}
-.color-palette-after .card-btn {
- background: var(--color-accent);
- color: var(--color-paper);
-}
-.color-accent-card {
- padding: var(--spacing-md);
- border-radius: 6px;
-}
-.color-accent-before .color-accent-card {
- background: #f5f5f5;
- border: 1px solid #e0e0e0;
-}
-.color-accent-before .color-accent-title {
- font-weight: 600;
- color: #333;
- margin-bottom: 4px;
-}
-.color-accent-before .color-accent-text {
- font-size: 0.8125rem;
- color: #666;
- margin-bottom: var(--spacing-sm);
-}
-.color-accent-before .color-accent-btn {
- width: 100%;
- padding: var(--spacing-xs);
- background: #333;
- color: white;
- border: none;
- border-radius: 4px;
- font-size: 0.8125rem;
- cursor: pointer;
-}
-.color-accent-after .color-accent-card {
- background: var(--color-accent);
- @supports (color: color-mix(in lab, red, red)) {
- background: color-mix(in oklch, var(--color-accent) 8%, var(--color-paper));
- }
- border: 1px solid var(--color-accent);
- @supports (color: color-mix(in lab, red, red)) {
- border: 1px solid color-mix(in oklch, var(--color-accent) 20%, var(--color-paper));
- }
-}
-.color-accent-after .color-accent-title {
- font-weight: 600;
- color: var(--color-text);
- margin-bottom: 4px;
-}
-.color-accent-after .color-accent-text {
- font-size: 0.8125rem;
- color: var(--color-ash);
- margin-bottom: var(--spacing-sm);
-}
-.color-accent-after .color-accent-btn {
- width: 100%;
- padding: var(--spacing-xs);
- background: var(--color-accent);
- color: var(--color-paper);
- border: none;
- border-radius: 4px;
- font-size: 0.8125rem;
- font-weight: 500;
- cursor: pointer;
-}
-.color-contrast-static {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-sm);
-}
-.contrast-example {
- padding: var(--spacing-md);
- border-radius: 6px;
- text-align: center;
-}
-.contrast-fail {
- background: #f0f0f0;
- color: #a0a0a0;
-}
-.contrast-pass {
- background: var(--color-charcoal);
- color: var(--color-paper);
-}
-.contrast-badge {
- display: inline-block;
- font-size: 0.5625rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- padding: 2px 6px;
- border-radius: 2px;
- margin-bottom: 4px;
-}
-.contrast-fail .contrast-badge {
- background: #ddd;
-}
-.contrast-pass .contrast-badge {
- background: var(--color-accent);
- color: var(--color-paper);
-}
-.contrast-text {
- font-size: 1rem;
- font-weight: 500;
- margin-bottom: 2px;
-}
-.contrast-ratio {
- font-size: 0.6875rem;
- opacity: 0.7;
-}
-.resp-demo {
- width: 100%;
- max-width: 340px;
-}
-.resp-touch-demo {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-lg);
-}
-.resp-touch-row {
- display: flex;
- align-items: center;
- gap: var(--spacing-md);
-}
-.resp-label {
- font-size: 0.6875rem;
- text-transform: uppercase;
- letter-spacing: 0.08em;
- color: var(--color-ash);
- width: 70px;
-}
-.resp-touch-targets {
- display: flex;
- gap: 4px;
-}
-.resp-touch-targets button {
- border: none;
- border-radius: 4px;
- cursor: pointer;
- font-weight: 500;
-}
-.resp-touch-bad button {
- width: 24px;
- height: 24px;
- font-size: 0.75rem;
- background: var(--color-mist);
- color: var(--color-ash);
-}
-.resp-touch-good button {
- width: 44px;
- height: 44px;
- font-size: 1rem;
- background: var(--color-text);
- color: var(--color-paper);
-}
-.resp-fluid-demo {
- padding: var(--spacing-md);
- background: var(--color-bg);
- border: 1px solid var(--color-mist);
- border-radius: 6px;
-}
-.resp-fluid-container {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-md);
-}
-.resp-fluid-fixed, .resp-fluid-adaptive {
- font-size: 0.75rem;
- color: var(--color-ash);
-}
-.resp-fluid-fixed span, .resp-fluid-adaptive span {
- display: block;
- margin-bottom: 4px;
-}
-.resp-fluid-bar {
- height: 24px;
- background: var(--color-mist);
- border-radius: 4px;
-}
-.resp-fluid-adaptive .resp-fluid-bar {
- background: var(--color-accent);
-}
-.resp-adapt-demo {
- display: flex;
- gap: var(--spacing-sm);
- align-items: flex-end;
-}
-.resp-device {
- text-align: center;
-}
-.resp-device > span {
- display: block;
- margin-top: 4px;
- font-size: 0.625rem;
- color: var(--color-ash);
- text-transform: uppercase;
- letter-spacing: 0.08em;
-}
-.resp-device-screen {
- background: var(--color-paper);
- border: 2px solid var(--color-mist);
- border-radius: 4px;
- padding: 4px;
- display: flex;
- flex-direction: column;
- gap: 3px;
-}
-.resp-device-mobile .resp-device-screen {
- width: 50px;
- height: 80px;
-}
-.resp-device-tablet .resp-device-screen {
- width: 80px;
- height: 60px;
-}
-.resp-device-desktop .resp-device-screen {
- width: 120px;
- height: 70px;
-}
-.resp-block {
- background: var(--color-mist);
- border-radius: 2px;
-}
-.resp-block-row {
- display: flex;
- gap: 3px;
- flex: 1;
-}
-.resp-header {
- height: 16px;
- background: var(--color-charcoal);
-}
-.resp-sidebar {
- width: 30%;
- background: var(--color-charcoal);
-}
-.resp-content {
- flex: 1;
-}
-@keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
-}
-@media (prefers-reduced-motion: reduce) {
- *, *::before, *::after {
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
- }
-}
-*, *::before, *::after {
- box-sizing: border-box;
-}
-* {
- margin: 0;
-}
-img, picture, video, canvas, svg {
- display: block;
- max-width: 100%;
-}
-button, input, textarea, select {
- font: inherit;
-}
-:root {
- --font-display: 'Cormorant Garamond', Georgia, serif;
- --font-body: 'Instrument Sans', system-ui, sans-serif;
- --font-mono: 'Space Grotesk', monospace;
- --spacing-xs: 8px;
- --spacing-sm: 16px;
- --spacing-md: 24px;
- --spacing-lg: 32px;
- --spacing-xl: 48px;
- --spacing-2xl: 80px;
- --spacing-3xl: 120px;
- --width-max: 1400px;
- --width-content: 900px;
- --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
- --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
- --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
- --duration-fast: 0.15s;
- --duration-base: 0.3s;
- --duration-slow: 0.6s;
- --duration-slower: 0.8s;
- --duration-slowest: 1.2s;
- --color-ink: oklch(10% 0 0);
- --color-text: oklch(10% 0 0);
- --color-paper: oklch(98% 0 0);
- --color-cream: oklch(96% 0.005 350);
- --color-charcoal: oklch(25% 0 0);
- --color-ash: oklch(55% 0 0);
- --color-mist: oklch(92% 0 0);
- --color-bg: oklch(96% 0.005 350);
- --color-accent: oklch(60% 0.25 350);
- --color-accent-hover: oklch(52% 0.25 350);
- --color-accent-dim: oklch(60% 0.25 350 / 0.15);
- --color-accent-soft: oklch(60% 0.25 350 / 0.25);
- --cat-diagnostic-bg: #fdf4ff;
- --cat-diagnostic-border: #d946ef;
- --cat-diagnostic-text: #a21caf;
- --cat-quality-bg: #f0fdf4;
- --cat-quality-border: #22c55e;
- --cat-quality-text: #15803d;
- --cat-intensity-bg: #fffbeb;
- --cat-intensity-border: #f59e0b;
- --cat-intensity-text: #b45309;
- --cat-adaptation-bg: #eff6ff;
- --cat-adaptation-border: #3b82f6;
- --cat-adaptation-text: #1d4ed8;
- --cat-enhancement-bg: #fdf2f8;
- --cat-enhancement-border: #ec4899;
- --cat-enhancement-text: #be185d;
- --cat-system-bg: #f5f5f4;
- --cat-system-border: #78716c;
- --cat-system-text: #44403c;
-}
-.skip-link {
- position: absolute;
- top: -100%;
- left: 50%;
- transform: translateX(-50%);
- z-index: 10000;
- padding: var(--spacing-sm) var(--spacing-lg);
- background: var(--color-ink);
- color: var(--color-paper);
- font-weight: 600;
- text-decoration: none;
- border-radius: 0 0 8px 8px;
- transition: top 0.2s ease;
-}
-.skip-link:focus {
- top: 0;
- outline: 2px solid var(--color-accent);
- outline-offset: 2px;
-}
-html {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-rendering: optimizeLegibility;
- overflow-x: clip;
-}
-body {
- font-family: var(--font-body);
- font-size: 16px;
- line-height: 1.625;
- color: var(--color-text);
- background: var(--color-paper);
- overflow-x: clip;
- min-height: 100vh;
- min-height: 100dvh;
-}
-h1, h2, h3, h4, h5, h6 {
- font-family: var(--font-display);
- font-weight: 400;
- line-height: 1.1;
- letter-spacing: -0.02em;
- color: var(--color-ink);
-}
-a {
- color: var(--color-accent);
- text-decoration: underline;
- text-decoration-thickness: 1px;
- text-underline-offset: 2px;
- transition: color var(--duration-fast) var(--ease-out), text-decoration-color var(--duration-fast) var(--ease-out);
-}
-a:hover {
- color: var(--color-accent-hover);
- text-decoration-thickness: 2px;
-}
-.btn, .footer-logo, [class*="nav-item"] {
- text-decoration: none;
-}
-strong {
- font-weight: 600;
- color: var(--color-ink);
-}
-code {
- font-family: var(--font-mono);
- font-size: 0.9em;
- padding: 0.15em 0.4em;
- background: var(--color-accent-dim);
- color: var(--color-accent);
- border-radius: 4px;
-}
-::selection {
- background: var(--color-accent-soft);
- color: var(--color-ink);
-}
-.grain-overlay {
- position: fixed;
- inset: 0;
- pointer-events: none;
- z-index: 9999;
- opacity: 0.03;
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
- background-repeat: repeat;
-}
-.site-content {
- max-width: var(--width-max);
- margin: 0 auto;
- padding: 0 var(--spacing-lg);
-}
-@media (max-width: 768px) {
- .site-content {
- padding: 0 var(--spacing-md);
- }
-}
-.section-header {
- margin-bottom: var(--spacing-lg);
- position: relative;
-}
-.section-number {
- display: block;
- font-family: var(--font-mono);
- font-size: 0.625rem;
- font-weight: 500;
- letter-spacing: 0.05em;
- color: var(--color-ash);
- margin-bottom: var(--spacing-xs);
- text-transform: uppercase;
-}
-.section-title {
- font-size: clamp(1.75rem, 4vw, 2.5rem);
- font-weight: 400;
- line-height: 1.2;
- margin: 0;
-}
-.section-subtitle {
- font-size: 1rem;
- line-height: 1.6;
- color: var(--color-charcoal);
- margin-top: var(--spacing-sm);
- max-width: 55ch;
-}
-.cheatsheet-link {
- color: var(--color-accent);
- text-decoration: none;
- font-size: 0.875rem;
- margin-left: 0.5em;
-}
-.cheatsheet-link:hover {
- text-decoration: underline;
-}
-.section-lead {
- font-size: 1rem;
- line-height: 1.6;
- color: var(--color-charcoal);
- max-width: 55ch;
- margin-bottom: var(--spacing-lg);
-}
-.hero-combined {
- position: relative;
- display: flex;
- flex-direction: column;
- justify-content: center;
- min-height: 100vh;
- min-height: 100dvh;
- padding: var(--spacing-2xl) 0;
- background: var(--color-paper);
-}
-.github-link {
- position: absolute;
- top: var(--spacing-md);
- right: var(--spacing-lg);
- z-index: 10;
- color: var(--color-ash);
- transition: color 0.2s ease;
-}
-.github-link:hover {
- color: var(--color-ink);
-}
-.github-link svg {
- width: 28px;
- height: 28px;
-}
-.hero-combined-container {
- max-width: var(--width-max);
- margin: 0 auto;
- padding: 0 var(--spacing-lg);
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: var(--spacing-xl);
- align-items: center;
- width: 100%;
-}
-@media (max-width: 1024px) {
- .hero-combined-container {
- grid-template-columns: 1fr;
- gap: var(--spacing-lg);
- text-align: center;
- }
-}
-.hero-combined-left {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-md);
-}
-@media (max-width: 1024px) {
- .hero-combined-left {
- align-items: center;
- }
-}
-.hero-title-combined {
- font-family: var(--font-display);
- font-size: clamp(2.5rem, 7vw, 4.5rem);
- font-weight: 300;
- font-style: italic;
- line-height: 1;
- letter-spacing: -0.02em;
- margin: 0;
- color: var(--color-ink);
-}
-.hero-tagline-combined {
- font-family: var(--font-display);
- font-size: clamp(1.125rem, 2.5vw, 1.75rem);
- font-weight: 400;
- font-style: italic;
- line-height: 1.3;
- margin: 0;
- color: var(--color-charcoal);
-}
-.hero-hook-text {
- font-size: 1rem;
- line-height: 1.6;
- color: var(--color-charcoal);
- max-width: 45ch;
- margin: 0;
-}
-.hero-included-box {
- display: flex;
- flex-direction: column;
- gap: 6px;
- padding: 10px 14px;
- border: 1px solid var(--color-mist);
- background: transparent;
- max-width: 45ch;
-}
-.hero-included-title {
- font-family: var(--font-body);
- font-size: 0.5625rem;
- font-weight: 500;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- color: var(--color-ash);
-}
-.hero-included-items {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: 6px;
- font-size: 0.8125rem;
- color: var(--color-charcoal);
- line-height: 1.5;
-}
-.hero-included-items em {
- font-style: normal;
- font-family: var(--font-mono);
- font-size: 0.75rem;
-}
-.hero-included-sep {
- color: var(--color-mist);
-}
-@media (max-width: 500px) {
- .hero-included-items {
- flex-direction: column;
- align-items: flex-start;
- gap: 4px;
- }
- .hero-included-sep {
- display: none;
- }
-}
-.hero-cta-group {
- display: flex;
- align-items: center;
- gap: var(--spacing-lg);
- margin-top: var(--spacing-sm);
-}
-@media (max-width: 600px) {
- .hero-cta-group {
- flex-direction: column;
- gap: var(--spacing-md);
- }
-}
-.hero-cta-combined {
- display: inline-block;
- padding: var(--spacing-sm) var(--spacing-xl);
- font-family: var(--font-body);
- font-size: 0.9rem;
- font-weight: 500;
- letter-spacing: 0.05em;
- text-transform: uppercase;
- text-decoration: none;
- color: var(--color-paper);
- background: var(--color-ink);
- border: none;
- transition: transform 0.2s ease, background 0.2s ease;
-}
-.hero-cta-combined:hover {
- transform: translateY(-2px);
- background: var(--color-accent);
- color: var(--color-paper);
-}
-.hero-logos-inline {
- display: flex;
- align-items: center;
- gap: var(--spacing-sm);
-}
-.hero-logos-inline .hero-logos-label {
- font-size: 0.6875rem;
- color: var(--color-ash);
- letter-spacing: 0.03em;
-}
-.hero-logos-inline .hero-logos-row {
- display: flex;
- align-items: center;
- gap: 8px;
-}
-.hero-logos-inline .hero-logos-row img {
- border-radius: 4px;
- opacity: 0.7;
- transition: opacity 0.2s ease;
-}
-.hero-logos-inline .hero-logos-row img:hover {
- opacity: 1;
-}
-.hero-combined-right {
- display: flex;
- justify-content: center;
-}
-.hero-combined-right .split-comparison {
- max-width: 520px;
- width: 100%;
-}
-.hero-combined-right .split-container {
- max-width: 100%;
-}
-.hero-bias-tags {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: var(--spacing-xs);
- margin-top: var(--spacing-lg);
- padding-top: var(--spacing-md);
- border-top: 1px solid var(--color-mist);
- max-width: var(--width-max);
- margin-left: auto;
- margin-right: auto;
- width: 100%;
- padding-bottom: var(--spacing-md);
-}
-.problem-section {
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.problem-content {
- display: grid;
- gap: var(--spacing-xl);
-}
-.split-comparison {
- position: relative;
- width: 100%;
- max-width: 600px;
- margin: 0 auto;
- padding: 20px;
- margin-top: -20px;
- margin-bottom: -20px;
-}
-.split-container {
- position: relative;
- width: 100%;
- max-width: 500px;
- height: 380px;
- margin: 0 auto;
- border-radius: 12px;
- overflow: hidden;
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- cursor: ew-resize;
- user-select: none;
-}
-.split-before, .split-after {
- position: absolute;
- inset: 0;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-.split-before {
- z-index: 1;
-}
-.split-content {
- width: 100%;
- height: 100%;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-.split-after {
- clip-path: polygon(78% 0%, 100% 0%, 100% 100%, 62% 100%);
- z-index: 2;
- background: var(--color-paper);
-}
-.split-divider {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 70%;
- width: 3px;
- background: var(--color-accent);
- transform: translateX(-50%) skewX(-10deg);
- pointer-events: none;
- z-index: 3;
- box-shadow: 0 0 20px rgba(0,0,0,0.15);
-}
-.split-label {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%) skewX(10deg);
- font-size: 0.6875rem;
- font-weight: 600;
- letter-spacing: 0.08em;
- text-transform: uppercase;
- color: var(--color-paper);
- background: var(--color-accent);
- padding: 6px 14px;
- border-radius: 4px;
- white-space: nowrap;
- box-shadow: 0 2px 8px rgba(0,0,0,0.2);
-}
-.slop-card {
- width: 280px;
- height: 280px;
- background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 50%, #ddd6fe 100%);
- border-radius: 16px;
- padding: 24px;
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
- font-family: 'Inter', system-ui, sans-serif;
- display: flex;
- flex-direction: column;
-}
-.slop-header {
- display: flex;
- align-items: center;
- gap: 12px;
- margin-bottom: 16px;
-}
-.slop-avatar {
- width: 40px;
- height: 40px;
- border-radius: 50%;
- background: linear-gradient(135deg, #8b5cf6, #7c3aed);
- flex-shrink: 0;
-}
-.slop-text {
- flex: 1;
-}
-.slop-title {
- font-size: 14px;
- font-weight: 600;
- color: #1f2937;
- margin-bottom: 2px;
-}
-.slop-subtitle {
- font-size: 12px;
- color: #6b7280;
-}
-.slop-body {
- font-size: 13px;
- line-height: 1.5;
- color: #4b5563;
- margin-bottom: auto;
- flex: 1;
-}
-.slop-button {
- width: 100%;
- padding: 10px 20px;
- background: linear-gradient(135deg, #8b5cf6, #7c3aed);
- color: white;
- border: none;
- border-radius: 8px;
- font-family: 'Inter', system-ui, sans-serif;
- font-size: 13px;
- font-weight: 500;
- cursor: pointer;
- margin-top: auto;
-}
-.slop-callouts {
- position: absolute;
- inset: 0;
- pointer-events: none;
-}
-.slop-callout {
- position: absolute;
- font-size: 0.625rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.06em;
- color: var(--color-accent);
- background: var(--color-paper);
- padding: 4px 8px;
- border: 1px solid var(--color-accent);
- border-radius: 3px;
- white-space: nowrap;
- opacity: 0;
- animation: calloutFadeIn 0.4s var(--ease-out) forwards;
- box-shadow: 0 2px 8px rgba(0,0,0,0.1);
-}
-.slop-callout[data-point="font"] {
- top: 15%;
- right: 5%;
- animation-delay: 0.1s;
-}
-.slop-callout[data-point="gradient"] {
- top: 40%;
- left: 5%;
- animation-delay: 0.25s;
-}
-.slop-callout[data-point="copy"] {
- bottom: 35%;
- right: 8%;
- animation-delay: 0.4s;
-}
-.slop-callout[data-point="rounded"] {
- bottom: 12%;
- left: 10%;
- animation-delay: 0.55s;
-}
-@keyframes calloutFadeIn {
- from {
- opacity: 0;
- transform: scale(0.9);
- }
- to {
- opacity: 1;
- transform: scale(1);
- }
-}
-.impeccable-card {
- width: 280px;
- height: 300px;
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- padding: var(--spacing-lg);
- text-align: left;
- display: flex;
- flex-direction: column;
-}
-.impeccable-eyebrow {
- font-family: var(--font-mono);
- font-size: 0.625rem;
- font-weight: 500;
- letter-spacing: 0.15em;
- text-transform: uppercase;
- color: var(--color-accent);
- margin-bottom: var(--spacing-xs);
-}
-.impeccable-title {
- font-family: var(--font-display);
- font-size: 1.75rem;
- font-weight: 300;
- font-style: italic;
- color: var(--color-ink);
- margin-bottom: var(--spacing-sm);
- line-height: 1.1;
-}
-.impeccable-body {
- font-size: 0.875rem;
- line-height: 1.6;
- color: var(--color-ash);
- margin-bottom: auto;
- flex: 1;
-}
-.impeccable-button {
- display: inline-flex;
- margin-top: var(--spacing-sm);
- padding: 0.625rem 1.5rem;
- background: var(--color-ink);
- color: var(--color-paper);
- border: none;
- font-family: var(--font-body);
- font-size: 0.8125rem;
- font-weight: 500;
- letter-spacing: 0.03em;
- cursor: pointer;
- transition: all var(--duration-base) var(--ease-out);
- align-self: flex-start;
-}
-.impeccable-button:hover {
- background: var(--color-accent);
-}
-.split-labels {
- display: flex;
- justify-content: center;
- gap: var(--spacing-xl);
- margin-top: var(--spacing-md);
-}
-.split-label-item {
- display: flex;
- align-items: center;
- gap: var(--spacing-xs);
- font-size: 0.8125rem;
- color: var(--color-ash);
-}
-.split-label-dot {
- width: 8px;
- height: 8px;
- border-radius: 50%;
- background: var(--color-mist);
-}
-.split-label-dot--accent {
- background: var(--color-accent);
-}
-.solution-section {
- padding: var(--spacing-2xl) 0;
-}
-.solution-content {
- display: grid;
- gap: var(--spacing-lg);
-}
-.solution-content .section-lead {
- margin-bottom: 0;
-}
-.solution-visual {
- display: grid;
- grid-template-columns: 1fr auto 1fr;
- gap: var(--spacing-lg);
- align-items: stretch;
-}
-@media (max-width: 900px) {
- .solution-visual {
- grid-template-columns: 1fr;
- gap: var(--spacing-md);
- }
-}
-.solution-visual-interactive {
- width: 100%;
- min-height: 380px;
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 8px;
- position: relative;
- overflow: hidden;
-}
-.solution-pillar {
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- padding: var(--spacing-lg);
- transition: all var(--duration-base) var(--ease-out);
-}
-.solution-pillar:hover {
- border-color: var(--color-accent);
- transform: translateY(-4px);
- box-shadow: 0 20px 60px var(--color-accent-dim);
-}
-.pillar-header {
- text-align: center;
- margin-bottom: var(--spacing-lg);
- padding-bottom: var(--spacing-md);
- border-bottom: 1px solid var(--color-mist);
-}
-.pillar-icon {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- width: 56px;
- height: 56px;
- border-radius: 50%;
- background: var(--color-accent-dim);
- color: var(--color-accent);
- margin-bottom: var(--spacing-sm);
-}
-.pillar-title {
- font-family: var(--font-display);
- font-size: 1.75rem;
- font-weight: 400;
- margin: 0 0 var(--spacing-xs);
-}
-.pillar-subtitle {
- font-size: 0.875rem;
- color: var(--color-ash);
- margin: 0;
-}
-.pillar-content {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-sm);
-}
-.pillar-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: var(--spacing-sm);
- background: var(--color-paper);
- border-radius: 4px;
- transition: all var(--duration-fast) var(--ease-out);
-}
-.pillar-item:hover {
- background: var(--color-accent-dim);
-}
-.pillar-item-name {
- font-weight: 500;
- color: var(--color-ink);
- font-size: 0.9375rem;
-}
-.pillar-item-code {
- font-family: var(--font-mono);
- font-size: 0.875rem;
- font-weight: 500;
- color: var(--color-accent);
- background: transparent;
- padding: 0;
-}
-.pillar-item-desc {
- font-size: 0.75rem;
- color: var(--color-ash);
-}
-.pillar-item--more {
- justify-content: center;
- font-size: 0.8125rem;
- font-weight: 500;
- color: var(--color-accent);
- background: transparent;
- border: 1px dashed var(--color-mist);
-}
-.solution-connector {
- display: flex;
- align-items: center;
- justify-content: center;
-}
-.connector-plus {
- font-family: var(--font-display);
- font-size: 3rem;
- font-weight: 300;
- color: var(--color-accent);
- opacity: 0.5;
-}
-@media (max-width: 900px) {
- .solution-connector {
- padding: var(--spacing-sm) 0;
- }
- .connector-plus {
- font-size: 2rem;
- }
-}
-.skills-section {
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.skills-gallery {
- display: grid;
- grid-template-columns: 200px 1fr;
- gap: var(--spacing-xl);
- align-items: start;
-}
-@media (max-width: 968px) {
- .skills-gallery {
- grid-template-columns: 1fr;
- gap: var(--spacing-lg);
- }
-}
-.skills-nav {
- display: flex;
- flex-direction: column;
- gap: 2px;
- position: sticky;
- top: var(--spacing-lg);
-}
-@media (max-width: 968px) {
- .skills-nav {
- flex-direction: row;
- flex-wrap: wrap;
- gap: var(--spacing-xs);
- position: static;
- }
-}
-.skill-nav-item {
- padding: var(--spacing-sm) var(--spacing-md);
- background: transparent;
- border: none;
- border-left: 2px solid transparent;
- color: var(--color-ash);
- font-family: var(--font-body);
- font-size: 0.9375rem;
- font-weight: 400;
- cursor: pointer;
- transition: all 0.2s ease;
- text-align: left;
- text-decoration: none;
- display: block;
-}
-.skill-nav-item:hover {
- color: var(--color-text);
- background: var(--color-cream);
-}
-.skill-nav-item.active {
- color: var(--color-accent);
- border-left-color: var(--color-accent);
- background: var(--color-accent-dim);
- font-weight: 500;
-}
-@media (max-width: 968px) {
- .skill-nav-item {
- border-left: none;
- border-bottom: 2px solid transparent;
- padding: var(--spacing-xs) var(--spacing-md);
- }
- .skill-nav-item.active {
- border-bottom-color: var(--color-accent);
- }
-}
-.skills-showcase {
- display: grid;
- grid-template-columns: 1.2fr 1fr;
- gap: var(--spacing-lg);
- align-items: start;
-}
-@media (max-width: 1100px) {
- .skills-showcase {
- grid-template-columns: 1fr;
- }
-}
-.loading-state {
- padding: var(--spacing-xl);
- text-align: center;
- color: var(--color-ash);
- font-style: italic;
-}
-.mobile-commands-layout {
- display: none;
-}
-@media (max-width: 900px) {
- .mobile-commands-layout {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-md);
- }
- .commands-container {
- display: none;
- }
-}
-.mobile-carousel-wrapper {
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- scrollbar-width: none;
- padding: var(--spacing-xs) 0;
-}
-.mobile-carousel-wrapper::-webkit-scrollbar {
- display: none;
-}
-.mobile-carousel {
- display: flex;
- gap: var(--spacing-xs);
- padding-right: var(--spacing-md);
-}
-.mobile-cmd-pill {
- flex-shrink: 0;
- padding: var(--spacing-sm) var(--spacing-md);
- min-height: 44px;
- font-family: var(--font-mono);
- font-size: 0.8125rem;
- font-weight: 500;
- color: var(--color-ash);
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- border-radius: 100px;
- cursor: pointer;
- transition: all 0.2s ease;
- white-space: nowrap;
-}
-.mobile-cmd-pill:hover {
- color: var(--color-charcoal);
- border-color: var(--color-charcoal);
-}
-.mobile-cmd-pill.active {
- color: var(--color-paper);
- background: var(--color-ink);
- border-color: var(--color-ink);
-}
-.mobile-demo-area {
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- border-radius: 8px;
- padding: var(--spacing-sm);
-}
-.mobile-demo-area .demo-split-comparison {
- width: 100%;
-}
-.mobile-demo-area .split-container {
- width: 100%;
- max-width: 100%;
- height: 320px;
-}
-.mobile-demo-area .demo-caption {
- font-size: 0.75rem;
- margin-top: var(--spacing-sm);
-}
-.mobile-info-area {
- padding-top: var(--spacing-sm);
-}
-.mobile-cmd-info {
- display: none;
- padding: var(--spacing-sm) 0;
-}
-.mobile-cmd-info.active {
- display: block;
-}
-.mobile-cmd-name {
- font-family: var(--font-mono);
- font-size: 1.125rem;
- font-weight: 600;
- color: var(--color-ink);
- margin: 0 0 var(--spacing-xs) 0;
-}
-.mobile-cmd-desc {
- font-size: 0.875rem;
- color: var(--color-charcoal);
- line-height: 1.5;
- margin: 0;
-}
-.mobile-cmd-rel {
- margin-top: var(--spacing-xs);
- font-size: 0.75rem;
- color: var(--color-ash);
-}
-.mobile-cmd-rel code {
- font-family: var(--font-mono);
- color: var(--color-ink);
-}
-.downloads-section {
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.downloads-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
- gap: var(--spacing-lg);
-}
-.download-card {
- display: flex;
- flex-direction: column;
- align-items: center;
- text-align: center;
- padding: var(--spacing-lg);
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- transition: all var(--duration-base) var(--ease-out);
-}
-.download-card:hover {
- border-color: var(--color-accent);
- transform: translateY(-4px);
- box-shadow: 0 20px 60px var(--color-accent-dim);
-}
-.download-card-icon {
- margin-bottom: var(--spacing-sm);
-}
-.download-card-icon img {
- width: 40px;
- height: 40px;
- object-fit: contain;
- border-radius: 8px;
-}
-.download-card-title {
- font-family: var(--font-display);
- font-size: 1.25rem;
- font-weight: 400;
- margin: 0 0 var(--spacing-sm) 0;
-}
-.download-card-note {
- font-size: 0.75rem;
- color: var(--color-ash);
- margin-bottom: var(--spacing-xs);
-}
-.download-card .btn {
- margin-top: var(--spacing-xs);
-}
-.install-command {
- display: flex;
- align-items: center;
- gap: var(--spacing-xs);
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 6px;
- padding: var(--spacing-sm);
- margin-top: var(--spacing-sm);
- width: 100%;
-}
-.install-command code {
- flex: 1;
- font-family: var(--font-mono);
- font-size: 0.75rem;
- color: var(--color-ink);
- background: transparent;
- padding: 0;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.copy-btn {
- display: flex;
- align-items: center;
- justify-content: center;
- width: 28px;
- height: 28px;
- background: transparent;
- border: 1px solid var(--color-mist);
- border-radius: 4px;
- color: var(--color-ash);
- cursor: pointer;
- flex-shrink: 0;
- transition: all var(--duration-fast) var(--ease-out);
-}
-.copy-btn:hover {
- background: var(--color-accent-dim);
- border-color: var(--color-accent);
- color: var(--color-accent);
-}
-.copy-btn.copied {
- background: var(--color-accent);
- border-color: var(--color-accent);
- color: var(--color-paper);
-}
-.install-hint {
- font-size: 0.75rem;
- color: var(--color-ash);
- margin: var(--spacing-xs) 0 0 0;
-}
-.install-hint code {
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- background: var(--color-mist);
- padding: 2px 5px;
- border-radius: 3px;
-}
-.download-card-details {
- width: 100%;
- margin-top: var(--spacing-sm);
- font-size: 0.8125rem;
- text-align: left;
-}
-.download-card-details summary {
- cursor: pointer;
- color: var(--color-ash);
- font-size: 0.75rem;
- padding: var(--spacing-xs) 0;
- list-style: none;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 4px;
-}
-.download-card-details summary::before {
- content: '▶';
- font-size: 0.5rem;
- transition: transform var(--duration-fast) var(--ease-out);
-}
-.download-card-details[open] summary::before {
- transform: rotate(90deg);
-}
-.download-card-details summary::-webkit-details-marker {
- display: none;
-}
-.download-card-details ol {
- margin: var(--spacing-sm) 0;
- padding-left: var(--spacing-md);
- color: var(--color-charcoal);
- line-height: 1.6;
-}
-.download-card-details li {
- margin-bottom: 4px;
-}
-.download-card-details code {
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- background: var(--color-mist);
- padding: 2px 5px;
- border-radius: 3px;
-}
-.download-card-details a {
- color: var(--color-accent);
- text-decoration: none;
- font-size: 0.75rem;
-}
-.download-card-details a:hover {
- text-decoration: underline;
-}
-.opensource-section {
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
- text-align: center;
-}
-.opensource-content {
- max-width: 500px;
- margin: 0 auto;
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: var(--spacing-md);
-}
-.opensource-title {
- font-size: clamp(1.5rem, 4vw, 2rem);
- font-weight: 300;
-}
-.opensource-desc {
- font-size: 1.125rem;
- color: var(--color-ash);
- line-height: 1.6;
-}
-.site-footer {
- border-top: 1px solid var(--color-mist);
- padding: var(--spacing-xl) var(--spacing-lg);
- background: var(--color-cream);
-}
-.footer-content {
- max-width: var(--width-max);
- margin: 0 auto;
- display: flex;
- justify-content: space-between;
- align-items: center;
- flex-wrap: wrap;
- gap: var(--spacing-lg);
-}
-@media (max-width: 768px) {
- .footer-content {
- flex-direction: column;
- text-align: center;
- }
-}
-.footer-brand {
- display: flex;
- flex-direction: column;
- gap: var(--spacing-xs);
-}
-.footer-logo {
- font-family: var(--font-display);
- font-size: 1.25rem;
- font-weight: 400;
- color: var(--color-ink);
-}
-.footer-tagline {
- font-size: 0.875rem;
- color: var(--color-ash);
-}
-.footer-links {
- display: flex;
- gap: var(--spacing-lg);
- flex-wrap: wrap;
-}
-.footer-links a {
- font-size: 0.875rem;
- color: var(--color-ash);
- transition: color var(--duration-fast) var(--ease-out);
-}
-.footer-links a:hover {
- color: var(--color-accent);
-}
-.footer-author {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: var(--spacing-md);
- flex-wrap: wrap;
- width: 100%;
- padding-top: var(--spacing-lg);
- margin-top: var(--spacing-md);
- border-top: 1px solid var(--color-mist);
-}
-.footer-author-label {
- font-size: 0.875rem;
- color: var(--color-ash);
-}
-.footer-author-label a {
- color: var(--color-text);
- transition: color var(--duration-fast) var(--ease-out);
-}
-.footer-author-label a:hover {
- color: var(--color-accent);
-}
-.footer-author-links {
- display: flex;
- align-items: center;
- gap: var(--spacing-sm);
-}
-.footer-social-link {
- display: flex;
- align-items: center;
- justify-content: center;
- width: 36px;
- height: 36px;
- color: var(--color-ash);
- background: transparent;
- border-radius: 50%;
- transition: all var(--duration-fast) var(--ease-out);
- text-decoration: none;
-}
-.footer-social-link:hover {
- color: var(--color-accent);
- background: var(--color-accent-dim);
-}
-.footer-author-divider {
- width: 1px;
- height: 20px;
- background: var(--color-mist);
- margin: 0 var(--spacing-xs);
-}
-.footer-newsletter {
- display: inline-flex;
- align-items: center;
- gap: 6px;
- font-size: 0.875rem;
- font-weight: 500;
- color: var(--color-text);
- text-decoration: none;
- padding: 8px 14px;
- background: var(--color-paper);
- border: 1px solid var(--color-mist);
- border-radius: 100px;
- transition: all var(--duration-fast) var(--ease-out);
-}
-.footer-newsletter:hover {
- border-color: var(--color-accent);
- color: var(--color-accent);
-}
-.footer-newsletter svg {
- transition: transform var(--duration-fast) var(--ease-out);
-}
-.footer-newsletter:hover svg {
- transform: translateX(3px);
-}
-@media (max-width: 768px) {
- .footer-author {
- flex-direction: column;
- gap: var(--spacing-sm);
- }
- .footer-author-divider {
- display: none;
- }
-}
-.btn {
- display: inline-flex;
- align-items: center;
- justify-content: center;
- gap: var(--spacing-xs);
- padding: 1rem 2rem;
- font-family: var(--font-body);
- font-size: 0.9375rem;
- font-weight: 600;
- letter-spacing: 0.03em;
- border: none;
- cursor: pointer;
- transition: all var(--duration-base) var(--ease-out);
- position: relative;
- overflow: hidden;
- text-decoration: none;
-}
-.btn-primary {
- background: var(--color-ink);
- color: var(--color-paper);
-}
-.btn-primary::before {
- content: '';
- position: absolute;
- inset: 0;
- background: var(--color-accent);
- transform: translateY(100%);
- transition: transform var(--duration-base) var(--ease-out);
- z-index: 0;
-}
-.btn-primary:hover::before {
- transform: translateY(0);
-}
-.btn-primary:hover {
- color: var(--color-paper);
-}
-.btn-primary span, .btn-primary svg {
- position: relative;
- z-index: 1;
-}
-.btn-primary:not(:has(span)) {
- position: relative;
- z-index: 1;
-}
-.btn-secondary {
- background: transparent;
- color: var(--color-ink);
- border: 1px solid var(--color-ink);
-}
-.btn-secondary:hover {
- background: var(--color-ink);
- color: var(--color-paper);
-}
-.btn:focus-visible {
- outline: 2px solid var(--color-accent);
- outline-offset: 2px;
-}
-.btn-primary:focus-visible {
- outline-color: var(--color-paper);
- box-shadow: 0 0 0 4px var(--color-accent);
-}
-.btn-secondary:focus-visible {
- outline-color: var(--color-accent);
-}
-@keyframes revealUp {
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-@keyframes fadeIn {
- to {
- opacity: 1;
- }
-}
-@keyframes float {
- 0%, 100% {
- transform: translateX(-50%) translateY(0);
- }
- 50% {
- transform: translateX(-50%) translateY(-8px);
- }
-}
-@keyframes bounce {
- 0%, 100% {
- transform: translateY(0);
- }
- 50% {
- transform: translateY(4px);
- }
-}
-[data-reveal] {
- opacity: 0;
- transform: translateY(30px);
- transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
-}
-[data-reveal].revealed {
- opacity: 1;
- transform: translateY(0);
-}
-[data-reveal]:nth-child(1) {
- transition-delay: 0s;
-}
-[data-reveal]:nth-child(2) {
- transition-delay: 0.1s;
-}
-[data-reveal]:nth-child(3) {
- transition-delay: 0.2s;
-}
-[data-reveal]:nth-child(4) {
- transition-delay: 0.3s;
-}
-@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;
- }
- html {
- scroll-behavior: auto;
- }
- .hero-canvas {
- display: none;
- }
- .hero-scroll-indicator {
- animation: none;
- opacity: 1;
- }
- [data-reveal] {
- opacity: 1;
- transform: none;
- }
- .gallery-frame {
- opacity: 1;
- transform: none;
- }
-}
-.load-error {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- text-align: center;
- padding: var(--spacing-2xl) var(--spacing-lg);
- gap: var(--spacing-md);
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- border-radius: 8px;
-}
-.load-error-icon {
- font-size: 2.5rem;
- color: var(--color-accent);
-}
-.load-error-title {
- font-family: var(--font-display);
- font-size: 1.5rem;
- font-weight: 400;
- color: var(--color-ink);
- margin: 0;
-}
-.load-error-text {
- font-size: 1rem;
- color: var(--color-ash);
- max-width: 40ch;
- line-height: 1.5;
-}
-.load-error-retry {
- margin-top: var(--spacing-sm);
-}
-.bias-tags {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: var(--spacing-sm);
- margin-top: var(--spacing-lg);
-}
-.bias-tags-label {
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- font-weight: 500;
- letter-spacing: 0.1em;
- text-transform: uppercase;
- color: var(--color-ash);
-}
-.bias-tags-list {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- gap: var(--spacing-xs);
-}
-.bias-tag {
- font-size: 0.75rem;
- font-weight: 500;
- padding: 6px 12px;
- background: var(--color-cream);
- border: 1px solid var(--color-mist);
- color: var(--color-charcoal);
- transition: all var(--duration-fast) var(--ease-out);
-}
-.bias-tag:hover {
- border-color: var(--color-accent);
- color: var(--color-accent);
-}
-.antidote-section {
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.patterns-categories {
- margin-bottom: var(--spacing-xl);
-}
-.pattern-tabs {
- display: flex;
- flex-wrap: wrap;
- gap: var(--spacing-xs);
- margin-bottom: var(--spacing-lg);
-}
-.pattern-tab {
- background: none;
- border: none;
- border-bottom: 2px solid transparent;
- font-family: var(--font-body);
- font-size: 0.875rem;
- color: var(--color-ash);
- padding: var(--spacing-xs) var(--spacing-sm);
- cursor: pointer;
- transition: color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);
-}
-.pattern-tab:hover {
- color: var(--color-charcoal);
-}
-.pattern-tab.active {
- color: var(--color-ink);
- font-weight: 500;
- border-bottom-color: var(--color-accent);
-}
-.pattern-tab:focus-visible {
- outline: 2px solid var(--color-accent);
- outline-offset: 2px;
- border-radius: 4px;
-}
-.pattern-panel {
- display: none;
-}
-.pattern-panel.active {
- display: block;
-}
-.pattern-columns {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: var(--spacing-xl);
-}
-@media (max-width: 768px) {
- .pattern-columns {
- grid-template-columns: 1fr;
- gap: var(--spacing-md);
- }
-}
-.pattern-column-label {
- display: block;
- font-size: 0.6875rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- margin-bottom: var(--spacing-sm);
- color: var(--color-ash);
-}
-.pattern-column--anti .pattern-column-label {
- color: var(--color-accent);
-}
-.pattern-column--do .pattern-column-label {
- color: var(--color-success, #22c55e);
-}
-.pattern-list {
- list-style: none;
- padding: 0;
- margin: 0;
- display: flex;
- flex-direction: column;
- gap: var(--spacing-xs);
-}
-.pattern-item {
- font-size: 0.8125rem;
- padding-left: var(--spacing-md);
- position: relative;
- line-height: 1.5;
-}
-.pattern-item--anti {
- color: var(--color-ash);
-}
-.pattern-item--anti::before {
- content: '×';
- position: absolute;
- left: 0;
- color: var(--color-accent);
- font-weight: 600;
-}
-.pattern-item--do {
- color: var(--color-charcoal);
-}
-.pattern-item--do::before {
- content: '✓';
- position: absolute;
- left: 0;
- color: var(--color-success, #22c55e);
- font-weight: 600;
-}
-.contribute-inline {
- font-size: 0.875rem;
- color: var(--color-ash);
- margin-top: var(--spacing-md);
-}
-.contribute-inline a {
- color: var(--color-accent);
- text-decoration: none;
-}
-.contribute-inline a:hover {
- text-decoration: underline;
-}
-.critique-callout {
- border-top: 1px solid var(--color-mist);
- padding-top: var(--spacing-md);
- margin-bottom: var(--spacing-md);
- display: flex;
- align-items: baseline;
- gap: var(--spacing-sm);
- flex-wrap: wrap;
- font-size: 0.8125rem;
- color: var(--color-ash);
- line-height: 1.55;
-}
-.critique-callout-body {
- display: contents;
-}
-.critique-callout-title {
- display: none;
-}
-.critique-callout-text {
- color: var(--color-ash);
-}
-.critique-callout-text code {
- font-family: var(--font-mono);
- font-size: 0.8125rem;
- color: var(--color-charcoal);
-}
-.critique-callout-links {
- display: flex;
- gap: var(--spacing-sm);
- flex-shrink: 0;
-}
-.critique-callout-link {
- font-size: 0.8125rem;
- font-weight: 500;
- color: var(--color-accent);
- text-decoration: none;
- white-space: nowrap;
-}
-.critique-callout-link:hover {
- text-decoration: underline;
-}
-.critique-callout-link--secondary {
- color: var(--color-ash);
- font-weight: 400;
-}
-.critique-callout-link--secondary:hover {
- color: var(--color-charcoal);
-}
-.pillar-item--main {
- background: var(--color-accent-dim);
- border: 1px solid var(--color-accent);
-}
-.pillar-item--main .pillar-item-name {
- font-size: 1.125rem;
- font-weight: 600;
- color: var(--color-accent);
-}
-.pillar-item--ref {
- background: transparent;
- padding: var(--spacing-xs) var(--spacing-sm);
-}
-.pillar-item-label {
- font-size: 0.75rem;
- font-weight: 500;
- text-transform: uppercase;
- letter-spacing: 0.05em;
- color: var(--color-ash);
-}
-.pillar-refs {
- display: flex;
- flex-wrap: wrap;
- gap: var(--spacing-xs);
- padding: 0 var(--spacing-sm);
-}
-.pillar-ref {
- font-size: 0.6875rem;
- font-weight: 500;
- text-transform: uppercase;
- letter-spacing: 0.03em;
- padding: 4px 10px;
- background: var(--color-paper);
- color: var(--color-ash);
- border: 1px solid var(--color-mist);
- border-radius: 3px;
- transition: all var(--duration-fast) var(--ease-out);
-}
-.pillar-ref:hover {
- border-color: var(--color-accent);
- color: var(--color-accent);
-}
-.pillar-command-group {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- gap: var(--spacing-xs);
- padding: var(--spacing-sm);
- background: var(--color-paper);
- border-radius: 4px;
-}
-.pillar-group-label {
- font-size: 0.6875rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.05em;
- color: var(--color-ash);
- width: 100%;
- margin-bottom: 4px;
-}
-.pillar-command-group .pillar-item-code {
- font-size: 0.8125rem;
- padding: 4px 8px;
- background: var(--color-accent-dim);
- border-radius: 3px;
-}
-.platforms-section {
- padding: var(--spacing-2xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.platforms-section .section-subtitle {
- max-width: 60ch;
-}
-.install-terminal {
- max-width: 640px;
- margin: 0 auto var(--spacing-xl);
-}
-.install-terminal .glass-terminal {
- height: auto;
-}
-.install-terminal .terminal-body {
- padding: 0;
- display: flex;
- flex-direction: column;
-}
-.install-terminal-row {
- display: flex;
- flex-direction: column;
- gap: 6px;
- padding: var(--spacing-md) var(--spacing-lg);
-}
-.install-terminal-label {
- font-family: var(--font-mono);
- font-size: 0.625rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- color: var(--color-ash);
-}
-.install-terminal-cmd {
- display: flex;
- align-items: center;
- gap: var(--spacing-sm);
-}
-.install-terminal-cmd .terminal-prompt {
- flex-shrink: 0;
-}
-.install-terminal-cmd code {
- flex: 1;
- font-family: var(--font-mono);
- font-size: 0.9375rem;
- color: var(--color-ink);
- background: transparent;
- padding: 0;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.install-terminal-cmd .copy-btn {
- flex-shrink: 0;
-}
-.install-terminal-cmd .btn {
- padding: 0.5rem 1rem;
- font-size: 0.8125rem;
-}
-.install-terminal-note {
- font-size: 0.75rem;
- color: var(--color-ash);
- padding-left: calc(0.75rem + var(--spacing-sm));
-}
-.install-terminal-note code {
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- background: var(--color-mist);
- padding: 2px 5px;
- border-radius: 3px;
- color: var(--color-ink);
-}
-.install-terminal-divider {
- height: 1px;
- background: var(--color-mist);
- margin: 0;
-}
-@media (max-width: 600px) {
- .install-terminal-row {
- padding: var(--spacing-sm) var(--spacing-md);
- }
- .install-terminal-cmd code {
- font-size: 0.75rem;
- }
-}
-.install-providers {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: var(--spacing-sm);
- margin-top: var(--spacing-md);
-}
-.install-providers-label {
- font-size: 0.75rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.1em;
- color: var(--color-ash);
-}
-.install-providers-row {
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- gap: var(--spacing-sm);
-}
-.install-provider-badge {
- display: flex;
- align-items: center;
- gap: 6px;
- font-size: 0.8125rem;
- color: var(--color-charcoal);
-}
-.install-provider-badge img {
- border-radius: 4px;
-}
-.install-terminal-cmd--download {
- display: flex;
- align-items: center;
- gap: var(--spacing-sm);
- flex-wrap: wrap;
-}
-.prefix-toggle {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- cursor: pointer;
- padding: 6px 12px;
- background: rgba(0, 0, 0, 0.06);
- border: 1px solid rgba(0, 0, 0, 0.08);
- border-radius: 6px;
- transition: border-color var(--duration-fast) var(--ease-out);
-}
-.prefix-toggle:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.prefix-toggle input {
- position: absolute;
- opacity: 0;
- width: 0;
- height: 0;
-}
-.prefix-toggle-slider {
- position: relative;
- width: 32px;
- height: 18px;
- background: var(--color-mist);
- border-radius: 18px;
- transition: background var(--duration-fast) var(--ease-out);
- flex-shrink: 0;
-}
-.prefix-toggle-slider::after {
- content: '';
- position: absolute;
- top: 2px;
- left: 2px;
- width: 14px;
- height: 14px;
- background: var(--color-paper);
- border-radius: 50%;
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
- transition: transform var(--duration-fast) var(--ease-out);
-}
-.prefix-toggle input:checked + .prefix-toggle-slider {
- background: var(--color-accent);
-}
-.prefix-toggle input:checked + .prefix-toggle-slider::after {
- transform: translateX(14px);
-}
-.prefix-toggle input:focus-visible + .prefix-toggle-slider {
- outline: 2px solid var(--color-accent);
- outline-offset: 2px;
-}
-.prefix-toggle-label {
- font-size: 0.75rem;
- color: var(--color-charcoal);
- white-space: nowrap;
-}
-.prefix-toggle-label code {
- font-family: var(--font-mono);
- font-size: 0.6875rem;
- background: var(--color-accent-dim);
- color: var(--color-accent);
- padding: 1px 4px;
- border-radius: 3px;
-}
-.download-tip {
- font-size: 0.8125rem;
- color: var(--color-ash);
- margin-top: var(--spacing-sm);
- text-align: center;
-}
-.download-tip a {
- color: var(--color-accent);
- text-decoration: none;
-}
-.download-tip a:hover {
- text-decoration: underline;
-}
-.consulting-section {
- padding: var(--spacing-xl) 0;
- border-top: 1px solid var(--color-mist);
-}
-.consulting-content {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: var(--spacing-lg);
- flex-wrap: wrap;
-}
-.consulting-actions {
- display: flex;
- gap: var(--spacing-sm);
- flex-shrink: 0;
-}
-.consulting-text {
- flex: 1;
- min-width: 280px;
-}
-.consulting-title {
- font-size: clamp(1.5rem, 4vw, 2rem);
- font-weight: 300;
- font-style: italic;
- margin: 0 0 var(--spacing-sm) 0;
-}
-.consulting-desc {
- font-size: 1rem;
- color: var(--color-charcoal);
- line-height: 1.6;
- margin: 0;
- max-width: 45ch;
-}
-@media (max-width: 600px) {
- .consulting-content {
- flex-direction: column;
- align-items: flex-start;
- }
- .consulting-actions {
- flex-direction: column;
- width: 100%;
- }
- .consulting-actions .btn {
- width: 100%;
- justify-content: center;
- }
-}
+.split-container:before{content:"";background-image:linear-gradient(var(--color-mist) 1px, transparent 1px), linear-gradient(90deg, var(--color-mist) 1px, transparent 1px);opacity:.3;pointer-events:none;background-size:20px 20px;position:absolute;inset:0}.split-container:after{content:"← Drag →";letter-spacing:.1em;text-transform:uppercase;color:var(--color-ash);background:var(--color-paper);opacity:.8;z-index:10;border-radius:4px;padding:4px 12px;font-size:.625rem;font-weight:600;transition:opacity .3s;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.split-container:hover:after{opacity:0}.split-after .impeccable-card{box-shadow:0 10px 40px #00000014}@keyframes splitEntry{0%{opacity:0;transform:translate(-50%)skew(-10deg)scaleY(.8)}to{opacity:1;transform:translate(-50%)skew(-10deg)scaleY(1)}}.split-divider{animation:splitEntry .6s var(--ease-out) .3s backwards}.split-label-item{transition:color var(--duration-fast) var(--ease-out);cursor:default}.split-label-item:hover{color:var(--color-text)}.split-label-item[data-point=after]:hover .split-label-dot--accent{transform:scale(1.3)}.split-label-dot{transition:transform var(--duration-fast) var(--ease-spring)}.split-badge{letter-spacing:.08em;text-transform:uppercase;z-index:5;pointer-events:none;border-radius:3px;padding:3px 8px;font-size:.625rem;font-weight:600;position:absolute;top:10px}.split-badge--before{color:var(--color-ash);background:var(--color-paper);border:1px solid var(--color-mist);left:10px}.split-badge--after{color:var(--color-paper);background:var(--color-accent);right:10px}@media (hover:none){.split-container:after{content:"← Swipe →"}}@media (max-width:600px){.split-label{padding:4px 10px;font-size:.5625rem}}.commands-section{padding:var(--spacing-xl) 0;background:var(--color-paper);position:relative}.commands-gallery{display:block}.commands-container{gap:var(--spacing-2xl);grid-template-columns:1fr 1.2fr;align-items:start;display:grid}@media (max-width:900px){.commands-container{grid-template-columns:1fr}}.command-manual{gap:var(--spacing-sm);flex-direction:column;padding-bottom:20vh;display:flex}.command-category-header{font-family:var(--font-display);color:var(--color-accent);text-transform:uppercase;letter-spacing:.1em;padding:var(--spacing-lg) var(--spacing-lg) var(--spacing-sm);margin-top:var(--spacing-md);border-bottom:1px solid var(--color-mist);font-size:.875rem;font-weight:600}.command-category-header:first-child{margin-top:0}.manual-entry{padding:var(--spacing-lg);padding-left:calc(var(--spacing-lg) + 16px);border-left:2px solid var(--color-mist);transition:border-color .4s var(--ease-out), opacity .4s var(--ease-out), background .4s var(--ease-out), transform .4s var(--ease-out);opacity:.4;cursor:pointer;position:relative;transform:translate(-16px)}.manual-entry:hover{opacity:.7}.manual-entry.active{border-left-color:var(--color-accent);opacity:1;background:linear-gradient(to right, var(--color-bg), transparent);transform:translate(0)}.manual-cmd-name{font-family:var(--font-mono);margin:0 0 var(--spacing-sm);color:var(--color-ink);font-size:1.5rem;font-weight:500}.beta-badge{font-family:var(--font-body);letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent);border:1px solid var(--color-accent);vertical-align:middle;border-radius:3px;margin-left:6px;padding:1px 5px;font-size:.55rem;font-weight:600}.manual-cmd-desc{color:var(--color-charcoal);margin:0;font-size:1rem;line-height:1.6}.manual-cmd-rel{color:var(--color-ash);margin-top:var(--spacing-sm);flex-wrap:wrap;align-items:center;gap:.5ch;font-size:.8125rem;display:flex}.manual-cmd-rel .rel-icon{color:var(--color-accent);font-weight:600}.manual-cmd-rel code{font-family:var(--font-mono);background:var(--color-mist);color:var(--color-ink);border-radius:3px;padding:2px 6px;font-size:.75rem}.glass-terminal-wrapper{top:var(--spacing-xl);height:calc(100vh - var(--spacing-xl) * 2);min-height:500px;max-height:800px;position:sticky}.terminal-stack{perspective:1200px;height:100%;position:relative}.terminal-stack-tabs{z-index:10;gap:4px;display:flex;position:absolute;top:-31px;right:8px}.terminal-stack-tab{font-family:var(--font-mono);background:var(--color-cream);border:1px solid var(--color-mist);color:var(--color-ash);cursor:pointer;border-bottom:none;border-radius:6px 6px 0 0;padding:5px 12px;font-size:.75rem;transition:all .2s}.terminal-stack-tab:hover{background:var(--color-paper);color:var(--color-charcoal)}.terminal-stack-tab.active{background:var(--color-paper);color:var(--color-ink);border-color:var(--color-mist)}.terminal-window{transform-origin:bottom;transition:transform .4s cubic-bezier(.4,0,.2,1),opacity .3s,filter .3s;position:absolute;inset:0}.terminal-window--demo{z-index:2}.terminal-window--demo.is-back{opacity:.6;filter:brightness(.92);pointer-events:none;z-index:1;transform:translateY(16px)translate(12px)scale(.96)}.terminal-window--source{z-index:1;opacity:.6;filter:brightness(.92);pointer-events:none;transform:translateY(16px)translate(12px)scale(.96)}.terminal-window--source.is-front{opacity:1;filter:brightness();pointer-events:auto;z-index:2;transform:translateY(0)translate(0)scale(1)}.source-window{background:var(--color-paper);-webkit-backdrop-filter:blur(12px);border:1px solid var(--color-mist);border-radius:8px;flex-direction:column;height:100%;display:flex;overflow:hidden;box-shadow:0 20px 60px -10px #00000026}.source-header{background:var(--color-cream);border-bottom:1px solid var(--color-mist);flex-shrink:0;align-items:center;gap:8px;padding:12px 16px;display:flex}.source-title{font-family:var(--font-mono);color:var(--color-ink);font-size:.875rem;font-weight:500}.source-body{padding:var(--spacing-md);font-family:var(--font-mono);color:var(--color-charcoal);overscroll-behavior:contain;white-space:pre-wrap;word-break:break-word;background:var(--color-cream);flex:1;font-size:.75rem;line-height:1.5;overflow-y:auto}.source-loading{color:var(--color-ash);font-style:italic}@media (max-width:900px){.glass-terminal-wrapper{display:none}}.glass-terminal{background:var(--color-paper);-webkit-backdrop-filter:blur(12px);border:1px solid var(--color-mist);border-radius:8px;flex-direction:column;height:100%;display:flex;overflow:hidden;box-shadow:0 20px 60px -10px #00000026}.terminal-header{background:var(--color-cream);border-bottom:1px solid var(--color-mist);align-items:center;gap:8px;padding:12px 16px;display:flex}.terminal-dot{border-radius:50%;width:10px;height:10px}.terminal-dot.red{background:#ff5f56}.terminal-dot.yellow{background:#ffbd2e}.terminal-dot.green{background:#27c93f}.terminal-title{font-family:var(--font-mono);color:var(--color-ash);margin-left:auto;font-size:.75rem}.terminal-body{padding:var(--spacing-md);font-family:var(--font-mono);color:var(--color-ink);flex-direction:column;flex:1;min-height:0;font-size:.9375rem;display:flex;overflow-y:auto}.terminal-line{margin-bottom:var(--spacing-sm);gap:var(--spacing-sm);line-height:1.5;display:flex}.terminal-prompt{color:var(--color-accent);-webkit-user-select:none;user-select:none;font-weight:700}.terminal-cursor{background:var(--color-accent);vertical-align:middle;width:8px;height:1.2em;animation:1s step-end infinite blink;display:inline-block}.terminal-output{color:var(--color-ash);margin-bottom:var(--spacing-md);white-space:pre-wrap}@media (max-height:800px){.terminal-output{display:none}}.terminal-cmd{color:var(--color-accent);font-weight:600}.terminal-step{color:var(--color-charcoal)}.terminal-done{color:var(--color-success,#22c55e);font-weight:500}.terminal-preview{background:var(--color-paper);margin:var(--spacing-sm) 0;border-radius:12px;flex:1;min-height:0;overflow:hidden}.terminal-cursor-line{flex-shrink:0;margin-top:var(--spacing-sm)!important}.terminal-preview .demo-split-comparison{flex-direction:column;height:100%;display:flex}.terminal-preview .demo-split-comparison .split-container{cursor:ew-resize;-webkit-user-select:none;user-select:none;background:var(--color-cream);flex:1;min-height:0;position:relative;overflow:hidden}.terminal-preview .demo-split-comparison .split-before,.terminal-preview .demo-split-comparison .split-after{padding:var(--spacing-md);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.terminal-preview .demo-split-comparison .split-before{z-index:1;background:var(--color-cream)}.terminal-preview .demo-split-comparison .split-after{z-index:2;background:var(--color-paper);clip-path:polygon(58% 0%,100% 0%,100% 100%,42% 100%)}.terminal-preview .demo-split-comparison .split-content{flex-direction:column;justify-content:center;align-items:center;width:100%;max-width:280px;display:flex}.terminal-preview .demo-split-comparison .split-divider{background:var(--color-accent);pointer-events:none;z-index:3;width:2px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)skew(-10deg);box-shadow:0 0 12px #0000001a}.terminal-preview .demo-split-comparison .split-label{letter-spacing:.08em;text-transform:uppercase;color:var(--color-paper);background:var(--color-accent);white-space:nowrap;border-radius:3px;padding:4px 10px;font-size:.5625rem;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)skew(10deg)}.terminal-preview .demo-split-comparison .demo-caption{color:var(--color-ash);text-align:center;padding:var(--spacing-sm) var(--spacing-md);flex-shrink:0;font-size:.75rem}@keyframes blink{50%{opacity:0}}.casestudies-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist);position:relative}.transformations-tabbed{margin-top:var(--spacing-xl)}.transformation-tabs{gap:var(--spacing-xs);border-bottom:1px solid var(--color-mist);margin-bottom:var(--spacing-lg);display:flex}.transformation-tab{font-family:var(--font-display);color:var(--color-ash);padding:var(--spacing-sm) var(--spacing-md);cursor:pointer;background:0 0;border:none;font-size:.9375rem;font-weight:500;transition:color .2s;position:relative}.transformation-tab:hover{color:var(--color-charcoal)}.transformation-tab.active{color:var(--color-ink)}.transformation-tab.active:after{content:"";background:var(--color-accent);height:2px;position:absolute;bottom:-1px;left:0;right:0}.transformation-panels{position:relative}.transformation-panel{gap:var(--spacing-lg);flex-direction:column;animation:.3s fadeInPanel;display:none}.transformation-panel.active{display:flex}@keyframes fadeInPanel{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.transformation-images{align-items:center;gap:var(--spacing-md);display:flex}.transformation-before,.transformation-after{flex:1;margin:0}.transformation-before img,.transformation-after img,.transformation-placeholder{aspect-ratio:16/10;object-fit:cover;border:1px solid var(--color-mist);cursor:pointer;border-radius:8px;width:100%;transition:transform .2s,box-shadow .2s}.transformation-before img:hover,.transformation-after img:hover,.transformation-placeholder:hover{transform:scale(1.02);box-shadow:0 8px 24px -4px #00000026}.transformation-placeholder{background:linear-gradient(135deg, var(--color-mist) 0%, var(--color-cream) 100%);color:var(--color-ash);justify-content:center;align-items:center;font-size:.8125rem;font-style:italic;display:flex}.transformation-before figcaption,.transformation-after figcaption{text-transform:uppercase;letter-spacing:.05em;color:var(--color-ash);margin-top:var(--spacing-xs);text-align:center;font-size:.75rem;font-weight:600}.transformation-arrow{color:var(--color-accent);flex-shrink:0;font-size:1.5rem;font-weight:300}.transformation-info{max-width:600px}.transformation-title{font-family:var(--font-display);color:var(--color-ink);margin:0 0 var(--spacing-xs);font-size:1.25rem;font-weight:600}.transformation-desc{color:var(--color-charcoal);margin:0 0 var(--spacing-sm);font-size:.9375rem;line-height:1.6}.transformation-commands{flex-wrap:wrap;gap:6px;display:flex}.transformation-command{font-family:var(--font-mono);background:var(--color-mist);color:var(--color-charcoal);border-radius:4px;padding:4px 10px;font-size:.75rem}.lightbox{z-index:1000;opacity:0;visibility:hidden;background:#000000e6;justify-content:center;align-items:center;transition:opacity .3s,visibility .3s;display:flex;position:fixed;inset:0}.lightbox.active{opacity:1;visibility:visible}.lightbox-close{color:#fff;cursor:pointer;opacity:.7;background:0 0;border:none;font-size:2.5rem;line-height:1;transition:opacity .2s;position:absolute;top:20px;right:24px}.lightbox-close:hover{opacity:1}.lightbox-image{object-fit:contain;border-radius:8px;max-width:90vw;max-height:85vh;box-shadow:0 20px 60px #00000080}@media (max-width:768px){.transformation-images{flex-direction:column}.transformation-arrow{transform:rotate(90deg)}.transformation-before,.transformation-after{width:100%}}.hero-version-link{color:var(--color-ash);margin-top:var(--spacing-sm);font-size:.8125rem}.hero-version-link a{color:var(--color-ash);border-bottom:1px solid #0000;text-decoration:none;transition:color .2s,border-color .2s}.hero-version-link a:hover{color:var(--color-accent);border-bottom-color:var(--color-accent)}.changelog-section{padding:var(--spacing-xl) 0;border-top:1px solid var(--color-mist);position:relative}.changelog-list{flex-direction:column;gap:0;display:flex}.changelog-entry{padding:var(--spacing-md) 0;border-bottom:1px solid var(--color-mist)}.changelog-entry:first-child{border-top:1px solid var(--color-mist)}.changelog-version-header{align-items:baseline;gap:var(--spacing-sm);margin-bottom:var(--spacing-sm);display:flex}.changelog-version{font-family:var(--font-mono);color:var(--color-ink);font-size:1.125rem;font-weight:600}.changelog-date{color:var(--color-ash);font-size:.8125rem}.changelog-items{padding-left:var(--spacing-md);color:var(--color-charcoal);margin:0;line-height:1.7}.changelog-items li{margin-bottom:var(--spacing-xs)}.changelog-items code{font-family:var(--font-mono);background:var(--color-mist);color:var(--color-ink);border-radius:3px;padding:2px 6px;font-size:.875em}.faq-section{padding:var(--spacing-xl) 0;border-top:1px solid var(--color-mist);position:relative}.faq-list{flex-direction:column;gap:0;display:flex}.faq-item{border-bottom:1px solid var(--color-mist)}.faq-item:first-child{border-top:1px solid var(--color-mist)}.faq-question{font-family:var(--font-display);color:var(--color-ink);padding:var(--spacing-md) 0;cursor:pointer;justify-content:space-between;align-items:center;font-size:1.125rem;font-weight:500;list-style:none;transition:color .2s;display:flex}.faq-question::-webkit-details-marker{display:none}.faq-question:after{content:"+";font-family:var(--font-body);color:var(--color-accent);transition:transform .3s var(--ease-out);font-size:1.5rem;font-weight:300}.faq-item[open] .faq-question:after{transform:rotate(45deg)}.faq-question:hover{color:var(--color-accent)}.faq-answer{padding:0 0 var(--spacing-md);color:var(--color-charcoal);animation:faqFadeIn .3s var(--ease-out);line-height:1.7}.faq-answer p{margin:0 0 var(--spacing-sm)}.faq-answer p:last-child{margin-bottom:0}.faq-answer ul{margin:var(--spacing-sm) 0;padding-left:var(--spacing-md)}.faq-answer li{margin-bottom:var(--spacing-xs)}.faq-answer code{font-family:var(--font-mono);background:var(--color-mist);color:var(--color-ink);border-radius:3px;padding:2px 6px;font-size:.875em}.faq-answer a{color:var(--color-accent);border-bottom:1px solid #0000;text-decoration:none;transition:border-color .2s}.faq-answer a:hover{border-bottom-color:var(--color-accent)}@keyframes faqFadeIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.skills-section{padding:var(--spacing-xl) 0;background:var(--color-bg);position:relative;overflow:hidden}.skills-gallery{display:block;position:relative}.gallery-track{gap:var(--spacing-lg);scroll-snap-type:x mandatory;padding:var(--spacing-md) var(--spacing-lg) var(--spacing-xl);-webkit-overflow-scrolling:touch;scrollbar-width:none;cursor:grab;display:flex;overflow-x:auto}.gallery-track:active{cursor:grabbing}.gallery-track::-webkit-scrollbar{display:none}.gallery-frame{scroll-snap-align:center;background:var(--color-paper);border:1px solid var(--color-mist);opacity:.4;max-width:1100px;transition:opacity .6s var(--ease-out), transform .6s var(--ease-out), box-shadow .6s var(--ease-out);border-radius:2px;flex:0 0 80vw;position:relative;overflow:hidden;transform:scale(.95);box-shadow:0 4px 6px -1px #0000000d,0 20px 50px -10px #0000001a}.gallery-frame.active{opacity:1;border-color:var(--color-charcoal);border-width:1px;transform:scale(1);box-shadow:0 20px 25px -5px #0000001a,0 40px 100px -20px #0003}.gallery-content{grid-template-columns:1.2fr 1fr;height:600px;display:grid}@media (max-width:900px){.gallery-frame{flex:0 0 90vw}.gallery-content{grid-template-columns:1fr;height:auto;min-height:600px}}.gallery-visual{background:var(--color-cream);border-right:1px solid var(--color-mist);padding:var(--spacing-lg);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.gallery-info{padding:var(--spacing-xl);flex-direction:column;display:flex;overflow-y:auto}.gallery-header{margin-bottom:var(--spacing-lg)}.gallery-title{font-family:var(--font-display);margin:0 0 var(--spacing-xs);color:var(--color-ink);font-size:2.5rem;font-style:italic}.gallery-meta{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--color-ash);font-size:.75rem}.gallery-desc{color:var(--color-charcoal);margin-bottom:var(--spacing-xl);max-width:45ch;font-size:1.125rem;line-height:1.6}.gallery-tags{gap:var(--spacing-xs);flex-wrap:wrap;margin-top:auto;display:flex}.gallery-tag{border:1px solid var(--color-mist);color:var(--color-ash);border-radius:4px;padding:6px 12px;font-size:.8125rem}.gallery-map{margin-top:var(--spacing-lg);justify-content:center;gap:8px;display:flex}.gallery-dot{background:var(--color-mist);cursor:pointer;width:40px;height:2px;font:inherit;border:none;padding:0;transition:all .3s;position:relative}.gallery-dot:after{content:"";position:absolute;inset:-10px 0}.gallery-dot:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px;border-radius:1px}.gallery-dot.active{background:var(--color-accent);height:4px}.demo-tabbed-container{flex-direction:column;display:flex}.demo-tabs{background:var(--color-paper);border-bottom:1px solid var(--color-mist);justify-content:center;gap:0;margin-bottom:0;display:flex}.demo-tab{padding:var(--spacing-sm) var(--spacing-lg);font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--color-ash);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);background:0 0;border:none;border-bottom:2px solid #0000;font-size:.75rem;font-weight:500}.demo-tab:hover{color:var(--color-text);background:var(--color-cream)}.demo-tab.active{color:var(--color-accent);border-bottom-color:var(--color-accent);background:var(--color-accent-dim)}.demo-panels{flex:1}.demo-panel{display:none}.demo-panel.active{animation:fadeSlideIn .3s var(--ease-out);display:block}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.demo-container{background:var(--color-paper);border:none;border-radius:0;overflow:hidden}.demo-header{padding:var(--spacing-sm) var(--spacing-md);background:var(--color-paper);border-bottom:1px solid var(--color-mist);justify-content:center;align-items:center;min-height:48px;display:flex}.demo-toggle{align-items:center;gap:var(--spacing-md);display:flex}.demo-toggle-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--color-ash);transition:color var(--duration-fast) var(--ease-out);cursor:pointer;font-size:.6875rem;font-weight:600}.demo-toggle-label:hover{color:var(--color-text)}.demo-toggle-label.active{color:var(--color-accent)}.demo-toggle-switch{background:var(--color-mist);cursor:pointer;width:44px;height:24px;transition:background var(--duration-fast) var(--ease-out);font:inherit;border:1px solid #0000;border-radius:12px;padding:0;position:relative}.demo-toggle-switch:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.demo-toggle-switch:hover{border-color:var(--color-ash)}.demo-toggle-switch:after{content:"";background:var(--color-paper);width:16px;height:16px;transition:transform var(--duration-base) var(--ease-spring);border-radius:50%;position:absolute;top:3px;left:3px;box-shadow:0 1px 4px #00000026}.demo-toggle-switch.active{background:var(--color-accent)}.demo-toggle-switch.active:after{transform:translate(20px)}.demo-viewport{padding:var(--spacing-xl);background:var(--color-cream);min-height:280px;transition:background var(--duration-base) var(--ease-out);justify-content:center;align-items:center;display:flex}.demo-viewport[data-state=after]{background:var(--color-paper)}.demo-caption{padding:var(--spacing-sm) var(--spacing-md);font-family:var(--font-mono);letter-spacing:.03em;color:var(--color-ash);background:var(--color-paper);text-align:center;font-size:.6875rem}.uxw-demo{width:100%;max-width:320px;padding:var(--spacing-lg);background:var(--color-paper);border:1px solid var(--color-mist);text-align:center;border-radius:6px}.uxw-error-icon{margin-bottom:var(--spacing-sm);font-size:2rem}.uxw-error-title{color:#c00;margin-bottom:var(--spacing-xs);font-weight:600}.uxw-error-text{color:var(--color-ash);font-size:.875rem}.uxw-error-action{margin-top:var(--spacing-sm);color:var(--color-accent);cursor:pointer;font-size:.875rem;text-decoration:underline}.uxw-error-after .uxw-error-icon{color:var(--color-accent)}.uxw-error-after .uxw-error-title{color:var(--color-text)}.uxw-error-after .uxw-error-text{color:var(--color-charcoal)}.uxw-button-context{color:var(--color-charcoal);margin-bottom:var(--spacing-md);font-size:.875rem;font-weight:500}.uxw-button-row{gap:var(--spacing-sm);justify-content:center;display:flex}.uxw-btn{padding:var(--spacing-xs) var(--spacing-md);cursor:pointer;border:none;border-radius:4px;font-size:.875rem;font-weight:500}.uxw-btn-primary{background:var(--color-text);color:var(--color-paper)}.uxw-btn-secondary{color:var(--color-ash);border:1px solid var(--color-mist);background:0 0}.uxw-btn-danger{color:#fff;background:#c00}.uxw-empty-icon{margin-bottom:var(--spacing-sm);opacity:.4;font-size:2.5rem}.uxw-empty-title{color:var(--color-ash);font-weight:500}.uxw-empty-text{color:var(--color-charcoal);margin-top:var(--spacing-xs);font-size:.875rem}.uxw-empty-action{margin-top:var(--spacing-md)}.uxw-empty-after .uxw-empty-icon{opacity:1}.uxw-empty-after .uxw-empty-title{color:var(--color-text)}.spatial-demo{width:100%;max-width:340px;padding:var(--spacing-md);background:var(--color-paper);border:1px solid var(--color-mist);border-radius:6px}.spatial-grid-before{flex-wrap:wrap;gap:6px;display:flex}.spatial-grid-after{gap:var(--spacing-sm);grid-template-columns:1fr 1fr;display:grid}.spatial-card-item{padding:var(--spacing-sm);background:var(--color-bg);border:1px solid var(--color-mist);color:var(--color-charcoal);text-align:center;border-radius:4px;font-size:.8125rem}.spatial-grid-after .spatial-card-item{width:auto!important}.spatial-hierarchy-before .spatial-h-title,.spatial-hierarchy-before .spatial-h-subtitle,.spatial-hierarchy-before .spatial-h-cta,.spatial-hierarchy-before .spatial-h-link{margin-bottom:var(--spacing-xs);color:var(--color-charcoal);font-size:.9375rem}.spatial-hierarchy-after .spatial-h-title{font-family:var(--font-display);margin-bottom:var(--spacing-xs);color:var(--color-text);font-size:1.75rem;font-style:italic;font-weight:300}.spatial-hierarchy-after .spatial-h-subtitle{text-transform:uppercase;letter-spacing:.1em;color:var(--color-ash);margin-bottom:var(--spacing-md);font-size:.6875rem}.spatial-hierarchy-after .spatial-h-cta{padding:var(--spacing-sm) var(--spacing-lg);background:var(--color-text);color:var(--color-paper);margin-bottom:var(--spacing-sm);border-radius:4px;font-size:.875rem;font-weight:500;display:inline-block}.spatial-hierarchy-after .spatial-h-link{color:var(--color-ash);font-size:.75rem}.spatial-whitespace-before{padding:var(--spacing-xs)!important}.spatial-whitespace-before .spatial-ws-title{margin-bottom:2px;font-size:1rem;font-weight:600}.spatial-whitespace-before .spatial-ws-price{color:var(--color-ash);margin-bottom:4px;font-size:.875rem}.spatial-whitespace-before .spatial-ws-features{color:var(--color-ash);margin-bottom:6px;font-size:.75rem}.spatial-whitespace-before .spatial-ws-btn{background:var(--color-text);width:100%;color:var(--color-paper);cursor:pointer;border:none;border-radius:3px;padding:6px;font-size:.75rem}.spatial-whitespace-after{padding:var(--spacing-lg)!important}.spatial-whitespace-after .spatial-ws-title{font-family:var(--font-display);margin-bottom:var(--spacing-sm);font-size:1.5rem;font-weight:400}.spatial-whitespace-after .spatial-ws-price{color:var(--color-text);margin-bottom:var(--spacing-sm);font-size:1.25rem;font-weight:600}.spatial-whitespace-after .spatial-ws-features{color:var(--color-ash);margin-bottom:var(--spacing-lg);font-size:.8125rem;line-height:1.6}.spatial-whitespace-after .spatial-ws-btn{width:100%;padding:var(--spacing-sm);background:var(--color-text);color:var(--color-paper);cursor:pointer;border:none;border-radius:4px;font-size:.875rem;font-weight:500}.motion-demo{align-items:center;gap:var(--spacing-sm);flex-direction:column;width:100%;max-width:280px;display:flex}.motion-stagger-demo{align-items:stretch}.motion-list-item{align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:var(--color-bg);border:1px solid var(--color-mist);color:var(--color-charcoal);border-radius:4px;font-size:.875rem;display:flex}.motion-dot{background:var(--color-accent);border-radius:50%;width:8px;height:8px}.demo-viewport[data-state=after] .motion-list-item{opacity:0;animation:.35s cubic-bezier(.16,1,.3,1) forwards staggerIn;transform:translateY(12px)}.demo-viewport[data-state=after] .motion-list-item:first-child{animation-delay:0s}.demo-viewport[data-state=after] .motion-list-item:nth-child(2){animation-delay:50ms}.demo-viewport[data-state=after] .motion-list-item:nth-child(3){animation-delay:.1s}.demo-viewport[data-state=after] .motion-list-item:nth-child(4){animation-delay:.15s}@keyframes staggerIn{to{opacity:1;transform:translateY(0)}}.motion-btn{cursor:pointer;border:none;border-radius:4px;padding:12px 24px;font-size:.9375rem;font-weight:500}.motion-btn-before{background:var(--color-charcoal);color:var(--color-paper)}.motion-btn-after{background:var(--color-text);color:var(--color-paper);transition:transform .2s cubic-bezier(.34,1.56,.64,1),box-shadow .2s}.motion-btn-after:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000026}.motion-btn-after:active{transform:translateY(0)scale(.98)}.motion-card{padding:var(--spacing-md);background:var(--color-bg);border:1px solid var(--color-mist);text-align:center;border-radius:6px;min-width:140px}.motion-card-icon{margin-bottom:var(--spacing-xs);font-size:1.5rem}.motion-card-text{color:var(--color-charcoal);font-size:.8125rem}.motion-card-after{transition:all .3s cubic-bezier(.34,1.56,.64,1)}.demo-viewport[data-state=after] .motion-card-after{background:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.demo-viewport[data-state=after] .motion-card-after{background:color-mix(in oklch, var(--color-accent) 10%, var(--color-paper))}}.demo-viewport[data-state=after] .motion-card-after{border-color:var(--color-accent)}.demo-viewport[data-state=after] .motion-card-after .motion-card-icon{animation:.4s cubic-bezier(.34,1.56,.64,1) checkPop}@keyframes checkPop{50%{transform:scale(1.3)}}.typo-demo{text-align:left;width:100%;max-width:320px}.typo-pairing-before{font-family:Inter,system-ui,sans-serif}.typo-pairing-before .typo-heading{margin-bottom:var(--spacing-xs);font-size:1.5rem;font-weight:600}.typo-pairing-before .typo-body{color:var(--color-ash);font-size:.9375rem;line-height:1.5}.typo-pairing-after .typo-heading{font-family:var(--font-display);letter-spacing:-.02em;margin-bottom:var(--spacing-sm);color:var(--color-text);font-size:2rem;font-style:italic;font-weight:300}.typo-pairing-after .typo-body{font-family:var(--font-body);color:var(--color-charcoal);font-size:.9375rem;line-height:1.7}.typo-hierarchy-before .typo-h1{margin-bottom:4px;font-size:1.125rem;font-weight:600}.typo-hierarchy-before .typo-meta{color:var(--color-ash);margin-bottom:var(--spacing-xs);font-size:.9375rem}.typo-hierarchy-before .typo-p{color:var(--color-charcoal);font-size:.875rem;line-height:1.5}.typo-hierarchy-after .typo-h1{font-family:var(--font-display);letter-spacing:-.03em;margin-bottom:2px;font-size:2.25rem;font-weight:300;line-height:1.1}.typo-hierarchy-after .typo-meta{text-transform:uppercase;letter-spacing:.12em;color:var(--color-accent);margin-bottom:var(--spacing-md);font-size:.6875rem}.typo-hierarchy-after .typo-p{color:var(--color-ash);font-size:.9375rem;line-height:1.7}.int-demo{gap:var(--spacing-md);flex-direction:column;width:100%;max-width:280px;display:flex}.int-states-demo{gap:var(--spacing-lg)}.int-state-row{align-items:center;gap:var(--spacing-md);display:flex}.int-state-label{text-transform:uppercase;letter-spacing:.08em;color:var(--color-ash);width:40px;font-size:.6875rem}.int-btn{padding:var(--spacing-sm) var(--spacing-md);cursor:pointer;border-radius:4px;flex:1;font-size:.875rem;font-weight:500}.int-btn-poor{background:var(--color-charcoal);color:var(--color-paper);border:none}.int-btn-good{background:var(--color-text);color:var(--color-paper);border:2px solid #0000;transition:all .15s}.int-btn-good:hover{background:var(--color-charcoal)}.int-btn-good:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent);outline:none}@supports (color:color-mix(in lab, red, red)){.int-btn-good:focus{box-shadow:0 0 0 3px color-mix(in oklch, var(--color-accent) 25%, transparent)}}.int-btn-good:active{transform:scale(.98)}.int-aff-item{padding:var(--spacing-sm) var(--spacing-md);cursor:pointer;border-radius:4px;font-size:.875rem}.int-aff-poor{color:var(--color-charcoal)}.int-aff-good{color:var(--color-accent);text-underline-offset:2px;text-decoration:underline}.int-aff-good:after{content:" →"}.int-affordance-after .int-aff-item{background:var(--color-bg);border:1px solid var(--color-mist);color:var(--color-accent);text-underline-offset:2px;text-decoration:underline;transition:background .15s}.int-affordance-after .int-aff-item:hover{background:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.int-affordance-after .int-aff-item:hover{background:color-mix(in oklch, var(--color-accent) 5%, var(--color-paper))}}.int-affordance-after .int-aff-item:after{content:" →"}.int-feedback-before,.int-feedback-after{align-items:center;gap:var(--spacing-md);flex-direction:row;display:flex}.int-fb-btn{cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;width:48px;height:48px;display:flex}.int-fb-btn svg{width:22px;height:22px}.int-fb-silent{background:var(--color-mist);color:var(--color-ash)}.int-fb-active{background:var(--color-charcoal);color:var(--color-paper);transition:all .15s cubic-bezier(.34,1.56,.64,1)}.int-fb-active:hover{transform:scale(1.1)}.int-fb-active:active{transform:scale(.95)}.int-fb-active.liked{background:var(--color-accent);animation:.35s cubic-bezier(.34,1.56,.64,1) heartPop}@keyframes heartPop{50%{transform:scale(1.25)}}.int-fb-label{color:var(--color-charcoal);font-size:.875rem}.color-demo{width:100%;max-width:300px}.color-palette-before,.color-palette-after{gap:var(--spacing-xs);padding:var(--spacing-md);background:var(--color-paper);border:1px solid var(--color-mist);border-radius:6px;flex-wrap:wrap;display:flex}.color-swatch{border-radius:4px;width:40px;height:40px;transition:background .2s}.color-card{width:100%;margin-top:var(--spacing-sm);padding:var(--spacing-sm);background:var(--color-paper);border:1px solid var(--color-mist);border-radius:4px;flex-direction:column;gap:4px;display:flex}.color-card span{font-size:.8125rem;font-weight:500;transition:color .2s}.color-card button{cursor:pointer;border:none;border-radius:3px;padding:6px;font-size:.75rem;font-weight:500;transition:all .2s}.color-palette-before .swatch-1{background:#ff6b6b}.color-palette-before .swatch-2{background:#4ecdc4}.color-palette-before .swatch-3{background:#ffe66d}.color-palette-before .swatch-4{background:#95e1d3}.color-palette-before .swatch-5{background:#f38181}.color-palette-before .card-title{color:#ff6b6b}.color-palette-before .card-subtitle{color:#4ecdc4}.color-palette-before .card-btn{color:#333;background:#ffe66d}.color-palette-after .swatch-1{background:var(--color-text)}.color-palette-after .swatch-2{background:var(--color-charcoal)}.color-palette-after .swatch-3{background:var(--color-ash)}.color-palette-after .swatch-4{background:var(--color-mist)}.color-palette-after .swatch-5{background:var(--color-accent)}.color-palette-after .card-title{color:var(--color-text)}.color-palette-after .card-subtitle{color:var(--color-ash)}.color-palette-after .card-btn{background:var(--color-accent);color:var(--color-paper)}.color-accent-card{padding:var(--spacing-md);border-radius:6px}.color-accent-before .color-accent-card{background:#f5f5f5;border:1px solid #e0e0e0}.color-accent-before .color-accent-title{color:#333;margin-bottom:4px;font-weight:600}.color-accent-before .color-accent-text{color:#666;margin-bottom:var(--spacing-sm);font-size:.8125rem}.color-accent-before .color-accent-btn{width:100%;padding:var(--spacing-xs);color:#fff;cursor:pointer;background:#333;border:none;border-radius:4px;font-size:.8125rem}.color-accent-after .color-accent-card{background:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.color-accent-after .color-accent-card{background:color-mix(in oklch, var(--color-accent) 8%, var(--color-paper))}}.color-accent-after .color-accent-card{border:1px solid var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.color-accent-after .color-accent-card{border:1px solid color-mix(in oklch, var(--color-accent) 20%, var(--color-paper))}}.color-accent-after .color-accent-title{color:var(--color-text);margin-bottom:4px;font-weight:600}.color-accent-after .color-accent-text{color:var(--color-ash);margin-bottom:var(--spacing-sm);font-size:.8125rem}.color-accent-after .color-accent-btn{width:100%;padding:var(--spacing-xs);background:var(--color-accent);color:var(--color-paper);cursor:pointer;border:none;border-radius:4px;font-size:.8125rem;font-weight:500}.color-contrast-static{gap:var(--spacing-sm);flex-direction:column;display:flex}.contrast-example{padding:var(--spacing-md);text-align:center;border-radius:6px}.contrast-fail{color:#a0a0a0;background:#f0f0f0}.contrast-pass{background:var(--color-charcoal);color:var(--color-paper)}.contrast-badge{text-transform:uppercase;letter-spacing:.1em;border-radius:2px;margin-bottom:4px;padding:2px 6px;font-size:.5625rem;font-weight:600;display:inline-block}.contrast-fail .contrast-badge{background:#ddd}.contrast-pass .contrast-badge{background:var(--color-accent);color:var(--color-paper)}.contrast-text{margin-bottom:2px;font-size:1rem;font-weight:500}.contrast-ratio{opacity:.7;font-size:.6875rem}.resp-demo{width:100%;max-width:340px}.resp-touch-demo{gap:var(--spacing-lg);flex-direction:column;display:flex}.resp-touch-row{align-items:center;gap:var(--spacing-md);display:flex}.resp-label{text-transform:uppercase;letter-spacing:.08em;color:var(--color-ash);width:70px;font-size:.6875rem}.resp-touch-targets{gap:4px;display:flex}.resp-touch-targets button{cursor:pointer;border:none;border-radius:4px;font-weight:500}.resp-touch-bad button{background:var(--color-mist);width:24px;height:24px;color:var(--color-ash);font-size:.75rem}.resp-touch-good button{background:var(--color-text);width:44px;height:44px;color:var(--color-paper);font-size:1rem}.resp-fluid-demo{padding:var(--spacing-md);background:var(--color-bg);border:1px solid var(--color-mist);border-radius:6px}.resp-fluid-container{gap:var(--spacing-md);flex-direction:column;display:flex}.resp-fluid-fixed,.resp-fluid-adaptive{color:var(--color-ash);font-size:.75rem}.resp-fluid-fixed span,.resp-fluid-adaptive span{margin-bottom:4px;display:block}.resp-fluid-bar{background:var(--color-mist);border-radius:4px;height:24px}.resp-fluid-adaptive .resp-fluid-bar{background:var(--color-accent)}.resp-adapt-demo{gap:var(--spacing-sm);align-items:flex-end;display:flex}.resp-device{text-align:center}.resp-device>span{color:var(--color-ash);text-transform:uppercase;letter-spacing:.08em;margin-top:4px;font-size:.625rem;display:block}.resp-device-screen{background:var(--color-paper);border:2px solid var(--color-mist);border-radius:4px;flex-direction:column;gap:3px;padding:4px;display:flex}.resp-device-mobile .resp-device-screen{width:50px;height:80px}.resp-device-tablet .resp-device-screen{width:80px;height:60px}.resp-device-desktop .resp-device-screen{width:120px;height:70px}.resp-block{background:var(--color-mist);border-radius:2px}.resp-block-row{flex:1;gap:3px;display:flex}.resp-header{background:var(--color-charcoal);height:16px}.resp-sidebar{background:var(--color-charcoal);width:30%}.resp-content{flex:1}@keyframes fadeIn{to{opacity:1}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}*,:before,:after{box-sizing:border-box}*{margin:0}img,picture,video,canvas,svg{max-width:100%;display:block}button,input,textarea,select{font:inherit}:root{--font-display:"Cormorant Garamond", Georgia, serif;--font-body:"Instrument Sans", system-ui, sans-serif;--font-mono:"Space Grotesk", monospace;--spacing-xs:8px;--spacing-sm:16px;--spacing-md:24px;--spacing-lg:32px;--spacing-xl:48px;--spacing-2xl:80px;--spacing-3xl:120px;--width-max:1400px;--width-content:900px;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--duration-fast:.15s;--duration-base:.3s;--duration-slow:.6s;--duration-slower:.8s;--duration-slowest:1.2s;--color-ink:oklch(10% 0 0);--color-text:oklch(10% 0 0);--color-paper:oklch(98% 0 0);--color-cream:oklch(96% .005 350);--color-charcoal:oklch(25% 0 0);--color-ash:oklch(55% 0 0);--color-mist:oklch(92% 0 0);--color-bg:oklch(96% .005 350);--color-accent:oklch(60% .25 350);--color-accent-hover:oklch(52% .25 350);--color-accent-dim:oklch(60% .25 350/.15);--color-accent-soft:oklch(60% .25 350/.25);--cat-diagnostic-bg:#fdf4ff;--cat-diagnostic-border:#d946ef;--cat-diagnostic-text:#a21caf;--cat-quality-bg:#f0fdf4;--cat-quality-border:#22c55e;--cat-quality-text:#15803d;--cat-intensity-bg:#fffbeb;--cat-intensity-border:#f59e0b;--cat-intensity-text:#b45309;--cat-adaptation-bg:#eff6ff;--cat-adaptation-border:#3b82f6;--cat-adaptation-text:#1d4ed8;--cat-enhancement-bg:#fdf2f8;--cat-enhancement-border:#ec4899;--cat-enhancement-text:#be185d;--cat-system-bg:#f5f5f4;--cat-system-border:#78716c;--cat-system-text:#44403c}.skip-link{z-index:10000;padding:var(--spacing-sm) var(--spacing-lg);background:var(--color-ink);color:var(--color-paper);border-radius:0 0 8px 8px;font-weight:600;text-decoration:none;transition:top .2s;position:absolute;top:-100%;left:50%;transform:translate(-50%)}.skip-link:focus{outline:2px solid var(--color-accent);outline-offset:2px;top:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;overflow-x:clip}body{font-family:var(--font-body);color:var(--color-text);background:var(--color-paper);min-height:100dvh;font-size:16px;line-height:1.625;overflow-x:clip}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);letter-spacing:-.02em;color:var(--color-ink);font-weight:400;line-height:1.1}a{color:var(--color-accent);text-underline-offset:2px;transition:color var(--duration-fast) var(--ease-out), text-decoration-color var(--duration-fast) var(--ease-out);text-decoration:underline;text-decoration-thickness:1px}a:hover{color:var(--color-accent-hover);text-decoration-thickness:2px}.btn,.footer-logo,[class*=nav-item]{text-decoration:none}strong{color:var(--color-ink);font-weight:600}code{font-family:var(--font-mono);background:var(--color-accent-dim);color:var(--color-accent);border-radius:4px;padding:.15em .4em;font-size:.9em}::selection{background:var(--color-accent-soft);color:var(--color-ink)}.grain-overlay{pointer-events:none;z-index:9999;opacity:.03;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");background-repeat:repeat;position:fixed;inset:0}.site-content{max-width:var(--width-max);padding:0 var(--spacing-lg);margin:0 auto}@media (max-width:768px){.site-content{padding:0 var(--spacing-md)}}.section-header{margin-bottom:var(--spacing-lg);position:relative}.section-number{font-family:var(--font-mono);letter-spacing:.05em;color:var(--color-ash);margin-bottom:var(--spacing-xs);text-transform:uppercase;font-size:.625rem;font-weight:500;display:block}.section-title{margin:0;font-size:clamp(1.75rem,4vw,2.5rem);font-weight:400;line-height:1.2}.section-subtitle{color:var(--color-charcoal);margin-top:var(--spacing-sm);max-width:55ch;font-size:1rem;line-height:1.6}.cheatsheet-link{color:var(--color-accent);margin-left:.5em;font-size:.875rem;text-decoration:none}.cheatsheet-link:hover{text-decoration:underline}.section-lead{color:var(--color-charcoal);max-width:55ch;margin-bottom:var(--spacing-lg);font-size:1rem;line-height:1.6}.hero-combined{min-height:100dvh;padding:var(--spacing-2xl) 0;background:var(--color-paper);flex-direction:column;justify-content:center;display:flex;position:relative}.github-link{top:var(--spacing-md);right:var(--spacing-lg);z-index:10;color:var(--color-ash);transition:color .2s;position:absolute}.github-link:hover{color:var(--color-ink)}.github-link svg{width:28px;height:28px}.hero-combined-container{max-width:var(--width-max);padding:0 var(--spacing-lg);gap:var(--spacing-xl);grid-template-columns:1fr 1fr;align-items:center;width:100%;margin:0 auto;display:grid}@media (max-width:1024px){.hero-combined-container{gap:var(--spacing-lg);text-align:center;grid-template-columns:1fr}}.hero-combined-left{gap:var(--spacing-md);flex-direction:column;display:flex}@media (max-width:1024px){.hero-combined-left{align-items:center}}.hero-title-combined{font-family:var(--font-display);letter-spacing:-.02em;color:var(--color-ink);margin:0;font-size:clamp(2.5rem,7vw,4.5rem);font-style:italic;font-weight:300;line-height:1}.hero-tagline-combined{font-family:var(--font-display);color:var(--color-charcoal);margin:0;font-size:clamp(1.125rem,2.5vw,1.75rem);font-style:italic;font-weight:400;line-height:1.3}.hero-hook-text{color:var(--color-charcoal);max-width:45ch;margin:0;font-size:1rem;line-height:1.6}.hero-included-box{border:1px solid var(--color-mist);background:0 0;flex-direction:column;gap:6px;max-width:45ch;padding:10px 14px;display:flex}.hero-included-title{font-family:var(--font-body);text-transform:uppercase;letter-spacing:.1em;color:var(--color-ash);font-size:.5625rem;font-weight:500}.hero-included-items{color:var(--color-charcoal);flex-wrap:wrap;align-items:center;gap:6px;font-size:.8125rem;line-height:1.5;display:flex}.hero-included-items em{font-style:normal;font-family:var(--font-mono);font-size:.75rem}.hero-included-sep{color:var(--color-mist)}@media (max-width:500px){.hero-included-items{flex-direction:column;align-items:flex-start;gap:4px}.hero-included-sep{display:none}}.hero-cta-group{align-items:center;gap:var(--spacing-lg);margin-top:var(--spacing-sm);display:flex}@media (max-width:600px){.hero-cta-group{gap:var(--spacing-md);flex-direction:column}}.hero-cta-combined{padding:var(--spacing-sm) var(--spacing-xl);font-family:var(--font-body);letter-spacing:.05em;text-transform:uppercase;color:var(--color-paper);background:var(--color-ink);border:none;font-size:.9rem;font-weight:500;text-decoration:none;transition:transform .2s,background .2s;display:inline-block}.hero-cta-combined:hover{background:var(--color-accent);color:var(--color-paper);transform:translateY(-2px)}.hero-logos-inline{align-items:center;gap:var(--spacing-sm);display:flex}.hero-logos-inline .hero-logos-label{color:var(--color-ash);letter-spacing:.03em;font-size:.6875rem}.hero-logos-inline .hero-logos-row{align-items:center;gap:8px;display:flex}.hero-logos-inline .hero-logos-row img{opacity:.7;border-radius:4px;transition:opacity .2s}.hero-logos-inline .hero-logos-row img:hover{opacity:1}.hero-combined-right{justify-content:center;display:flex}.hero-combined-right .split-comparison{width:100%;max-width:520px}.hero-combined-right .split-container{max-width:100%}.hero-bias-tags{align-items:center;gap:var(--spacing-xs);margin-top:var(--spacing-lg);padding-top:var(--spacing-md);border-top:1px solid var(--color-mist);max-width:var(--width-max);width:100%;padding-bottom:var(--spacing-md);flex-direction:column;margin-left:auto;margin-right:auto;display:flex}.problem-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist)}.problem-content{gap:var(--spacing-xl);display:grid}.split-comparison{width:100%;max-width:600px;margin:-20px auto;padding:20px;position:relative}.split-container{background:var(--color-cream);border:1px solid var(--color-mist);cursor:ew-resize;-webkit-user-select:none;user-select:none;border-radius:12px;width:100%;max-width:500px;height:380px;margin:0 auto;position:relative;overflow:hidden}.split-before,.split-after{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.split-before{z-index:1}.split-content{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.split-after{clip-path:polygon(78% 0%,100% 0%,100% 100%,62% 100%);z-index:2;background:var(--color-paper)}.split-divider{background:var(--color-accent);pointer-events:none;z-index:3;width:3px;position:absolute;top:0;bottom:0;left:70%;transform:translate(-50%)skew(-10deg);box-shadow:0 0 20px #00000026}.split-label{letter-spacing:.08em;text-transform:uppercase;color:var(--color-paper);background:var(--color-accent);white-space:nowrap;border-radius:4px;padding:6px 14px;font-size:.6875rem;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)skew(10deg);box-shadow:0 2px 8px #0003}.slop-card{background:linear-gradient(135deg,#f5f3ff 0%,#ede9fe 50%,#ddd6fe 100%);border-radius:16px;flex-direction:column;width:280px;height:280px;padding:24px;font-family:Inter,system-ui,sans-serif;display:flex;box-shadow:0 4px 6px -1px #0000001a}.slop-header{align-items:center;gap:12px;margin-bottom:16px;display:flex}.slop-avatar{background:linear-gradient(135deg,#8b5cf6,#7c3aed);border-radius:50%;flex-shrink:0;width:40px;height:40px}.slop-text{flex:1}.slop-title{color:#1f2937;margin-bottom:2px;font-size:14px;font-weight:600}.slop-subtitle{color:#6b7280;font-size:12px}.slop-body{color:#4b5563;flex:1;margin-bottom:auto;font-size:13px;line-height:1.5}.slop-button{color:#fff;cursor:pointer;background:linear-gradient(135deg,#8b5cf6,#7c3aed);border:none;border-radius:8px;width:100%;margin-top:auto;padding:10px 20px;font-family:Inter,system-ui,sans-serif;font-size:13px;font-weight:500}.slop-callouts{pointer-events:none;position:absolute;inset:0}.slop-callout{text-transform:uppercase;letter-spacing:.06em;color:var(--color-accent);background:var(--color-paper);border:1px solid var(--color-accent);white-space:nowrap;opacity:0;animation:calloutFadeIn .4s var(--ease-out) forwards;border-radius:3px;padding:4px 8px;font-size:.625rem;font-weight:600;position:absolute;box-shadow:0 2px 8px #0000001a}.slop-callout[data-point=font]{animation-delay:.1s;top:15%;right:5%}.slop-callout[data-point=gradient]{animation-delay:.25s;top:40%;left:5%}.slop-callout[data-point=copy]{animation-delay:.4s;bottom:35%;right:8%}.slop-callout[data-point=rounded]{animation-delay:.55s;bottom:12%;left:10%}@keyframes calloutFadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.impeccable-card{background:var(--color-paper);border:1px solid var(--color-mist);width:280px;height:300px;padding:var(--spacing-lg);text-align:left;flex-direction:column;display:flex}.impeccable-eyebrow{font-family:var(--font-mono);letter-spacing:.15em;text-transform:uppercase;color:var(--color-accent);margin-bottom:var(--spacing-xs);font-size:.625rem;font-weight:500}.impeccable-title{font-family:var(--font-display);color:var(--color-ink);margin-bottom:var(--spacing-sm);font-size:1.75rem;font-style:italic;font-weight:300;line-height:1.1}.impeccable-body{color:var(--color-ash);flex:1;margin-bottom:auto;font-size:.875rem;line-height:1.6}.impeccable-button{margin-top:var(--spacing-sm);background:var(--color-ink);color:var(--color-paper);font-family:var(--font-body);letter-spacing:.03em;cursor:pointer;transition:all var(--duration-base) var(--ease-out);border:none;align-self:flex-start;padding:.625rem 1.5rem;font-size:.8125rem;font-weight:500;display:inline-flex}.impeccable-button:hover{background:var(--color-accent)}.split-labels{justify-content:center;gap:var(--spacing-xl);margin-top:var(--spacing-md);display:flex}.split-label-item{align-items:center;gap:var(--spacing-xs);color:var(--color-ash);font-size:.8125rem;display:flex}.split-label-dot{background:var(--color-mist);border-radius:50%;width:8px;height:8px}.split-label-dot--accent{background:var(--color-accent)}.solution-section{padding:var(--spacing-2xl) 0}.solution-content{gap:var(--spacing-lg);display:grid}.solution-content .section-lead{margin-bottom:0}.solution-visual{gap:var(--spacing-lg);grid-template-columns:1fr auto 1fr;align-items:stretch;display:grid}@media (max-width:900px){.solution-visual{gap:var(--spacing-md);grid-template-columns:1fr}}.solution-visual-interactive{background:var(--color-paper);border:1px solid var(--color-mist);border-radius:8px;width:100%;min-height:380px;position:relative;overflow:hidden}.solution-pillar{background:var(--color-cream);border:1px solid var(--color-mist);padding:var(--spacing-lg);transition:all var(--duration-base) var(--ease-out)}.solution-pillar:hover{border-color:var(--color-accent);box-shadow:0 20px 60px var(--color-accent-dim);transform:translateY(-4px)}.pillar-header{text-align:center;margin-bottom:var(--spacing-lg);padding-bottom:var(--spacing-md);border-bottom:1px solid var(--color-mist)}.pillar-icon{background:var(--color-accent-dim);width:56px;height:56px;color:var(--color-accent);margin-bottom:var(--spacing-sm);border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.pillar-title{font-family:var(--font-display);margin:0 0 var(--spacing-xs);font-size:1.75rem;font-weight:400}.pillar-subtitle{color:var(--color-ash);margin:0;font-size:.875rem}.pillar-content{gap:var(--spacing-sm);flex-direction:column;display:flex}.pillar-item{padding:var(--spacing-sm);background:var(--color-paper);transition:all var(--duration-fast) var(--ease-out);border-radius:4px;justify-content:space-between;align-items:center;display:flex}.pillar-item:hover{background:var(--color-accent-dim)}.pillar-item-name{color:var(--color-ink);font-size:.9375rem;font-weight:500}.pillar-item-code{font-family:var(--font-mono);color:var(--color-accent);background:0 0;padding:0;font-size:.875rem;font-weight:500}.pillar-item-desc{color:var(--color-ash);font-size:.75rem}.pillar-item--more{color:var(--color-accent);border:1px dashed var(--color-mist);background:0 0;justify-content:center;font-size:.8125rem;font-weight:500}.solution-connector{justify-content:center;align-items:center;display:flex}.connector-plus{font-family:var(--font-display);color:var(--color-accent);opacity:.5;font-size:3rem;font-weight:300}@media (max-width:900px){.solution-connector{padding:var(--spacing-sm) 0}.connector-plus{font-size:2rem}}.skills-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist)}.skills-gallery{gap:var(--spacing-xl);grid-template-columns:200px 1fr;align-items:start;display:grid}@media (max-width:968px){.skills-gallery{gap:var(--spacing-lg);grid-template-columns:1fr}}.skills-nav{top:var(--spacing-lg);flex-direction:column;gap:2px;display:flex;position:sticky}@media (max-width:968px){.skills-nav{gap:var(--spacing-xs);flex-flow:wrap;position:static}}.skill-nav-item{padding:var(--spacing-sm) var(--spacing-md);color:var(--color-ash);font-family:var(--font-body);cursor:pointer;text-align:left;background:0 0;border:none;border-left:2px solid #0000;font-size:.9375rem;font-weight:400;text-decoration:none;transition:all .2s;display:block}.skill-nav-item:hover{color:var(--color-text);background:var(--color-cream)}.skill-nav-item.active{color:var(--color-accent);border-left-color:var(--color-accent);background:var(--color-accent-dim);font-weight:500}@media (max-width:968px){.skill-nav-item{padding:var(--spacing-xs) var(--spacing-md);border-bottom:2px solid #0000;border-left:none}.skill-nav-item.active{border-bottom-color:var(--color-accent)}}.skills-showcase{gap:var(--spacing-lg);grid-template-columns:1.2fr 1fr;align-items:start;display:grid}@media (max-width:1100px){.skills-showcase{grid-template-columns:1fr}}.loading-state{padding:var(--spacing-xl);text-align:center;color:var(--color-ash);font-style:italic}.mobile-commands-layout{display:none}@media (max-width:900px){.mobile-commands-layout{gap:var(--spacing-md);flex-direction:column;display:flex}.commands-container{display:none}}.mobile-carousel-wrapper{-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:var(--spacing-xs) 0;overflow-x:auto}.mobile-carousel-wrapper::-webkit-scrollbar{display:none}.mobile-carousel{gap:var(--spacing-xs);padding-right:var(--spacing-md);display:flex}.mobile-cmd-pill{padding:var(--spacing-sm) var(--spacing-md);min-height:44px;font-family:var(--font-mono);color:var(--color-ash);background:var(--color-cream);border:1px solid var(--color-mist);cursor:pointer;white-space:nowrap;border-radius:100px;flex-shrink:0;font-size:.8125rem;font-weight:500;transition:all .2s}.mobile-cmd-pill:hover{color:var(--color-charcoal);border-color:var(--color-charcoal)}.mobile-cmd-pill.active{color:var(--color-paper);background:var(--color-ink);border-color:var(--color-ink)}.mobile-demo-area{background:var(--color-cream);border:1px solid var(--color-mist);padding:var(--spacing-sm);border-radius:8px}.mobile-demo-area .demo-split-comparison{width:100%}.mobile-demo-area .split-container{width:100%;max-width:100%;height:320px}.mobile-demo-area .demo-caption{margin-top:var(--spacing-sm);font-size:.75rem}.mobile-info-area{padding-top:var(--spacing-sm)}.mobile-cmd-info{padding:var(--spacing-sm) 0;display:none}.mobile-cmd-info.active{display:block}.mobile-cmd-name{font-family:var(--font-mono);color:var(--color-ink);margin:0 0 var(--spacing-xs) 0;font-size:1.125rem;font-weight:600}.mobile-cmd-desc{color:var(--color-charcoal);margin:0;font-size:.875rem;line-height:1.5}.mobile-cmd-rel{margin-top:var(--spacing-xs);color:var(--color-ash);font-size:.75rem}.mobile-cmd-rel code{font-family:var(--font-mono);color:var(--color-ink)}.downloads-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist)}.downloads-grid{gap:var(--spacing-lg);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));display:grid}.download-card{text-align:center;padding:var(--spacing-lg);background:var(--color-cream);border:1px solid var(--color-mist);transition:all var(--duration-base) var(--ease-out);flex-direction:column;align-items:center;display:flex}.download-card:hover{border-color:var(--color-accent);box-shadow:0 20px 60px var(--color-accent-dim);transform:translateY(-4px)}.download-card-icon{margin-bottom:var(--spacing-sm)}.download-card-icon img{object-fit:contain;border-radius:8px;width:40px;height:40px}.download-card-title{font-family:var(--font-display);margin:0 0 var(--spacing-sm) 0;font-size:1.25rem;font-weight:400}.download-card-note{color:var(--color-ash);margin-bottom:var(--spacing-xs);font-size:.75rem}.download-card .btn{margin-top:var(--spacing-xs)}.install-command{align-items:center;gap:var(--spacing-xs);background:var(--color-paper);border:1px solid var(--color-mist);padding:var(--spacing-sm);margin-top:var(--spacing-sm);border-radius:6px;width:100%;display:flex}.install-command code{font-family:var(--font-mono);color:var(--color-ink);white-space:nowrap;text-overflow:ellipsis;background:0 0;flex:1;padding:0;font-size:.75rem;overflow:hidden}.copy-btn{border:1px solid var(--color-mist);width:28px;height:28px;color:var(--color-ash);cursor:pointer;transition:all var(--duration-fast) var(--ease-out);background:0 0;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.copy-btn:hover{background:var(--color-accent-dim);border-color:var(--color-accent);color:var(--color-accent)}.copy-btn.copied{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-paper)}.install-hint{color:var(--color-ash);margin:var(--spacing-xs) 0 0 0;font-size:.75rem}.install-hint code{font-family:var(--font-mono);background:var(--color-mist);border-radius:3px;padding:2px 5px;font-size:.6875rem}.download-card-details{width:100%;margin-top:var(--spacing-sm);text-align:left;font-size:.8125rem}.download-card-details summary{cursor:pointer;color:var(--color-ash);padding:var(--spacing-xs) 0;justify-content:center;align-items:center;gap:4px;font-size:.75rem;list-style:none;display:flex}.download-card-details summary:before{content:"▶";transition:transform var(--duration-fast) var(--ease-out);font-size:.5rem}.download-card-details[open] summary:before{transform:rotate(90deg)}.download-card-details summary::-webkit-details-marker{display:none}.download-card-details ol{margin:var(--spacing-sm) 0;padding-left:var(--spacing-md);color:var(--color-charcoal);line-height:1.6}.download-card-details li{margin-bottom:4px}.download-card-details code{font-family:var(--font-mono);background:var(--color-mist);border-radius:3px;padding:2px 5px;font-size:.6875rem}.download-card-details a{color:var(--color-accent);font-size:.75rem;text-decoration:none}.download-card-details a:hover{text-decoration:underline}.opensource-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist);text-align:center}.opensource-content{align-items:center;gap:var(--spacing-md);flex-direction:column;max-width:500px;margin:0 auto;display:flex}.opensource-title{font-size:clamp(1.5rem,4vw,2rem);font-weight:300}.opensource-desc{color:var(--color-ash);font-size:1.125rem;line-height:1.6}.site-footer{border-top:1px solid var(--color-mist);padding:var(--spacing-xl) var(--spacing-lg);background:var(--color-cream)}.footer-content{max-width:var(--width-max);justify-content:space-between;align-items:center;gap:var(--spacing-lg);flex-wrap:wrap;margin:0 auto;display:flex}@media (max-width:768px){.footer-content{text-align:center;flex-direction:column}}.footer-brand{gap:var(--spacing-xs);flex-direction:column;display:flex}.footer-logo{font-family:var(--font-display);color:var(--color-ink);font-size:1.25rem;font-weight:400}.footer-tagline{color:var(--color-ash);font-size:.875rem}.footer-links{gap:var(--spacing-lg);flex-wrap:wrap;display:flex}.footer-links a{color:var(--color-ash);transition:color var(--duration-fast) var(--ease-out);font-size:.875rem}.footer-links a:hover{color:var(--color-accent)}.footer-author{justify-content:center;align-items:center;gap:var(--spacing-md);width:100%;padding-top:var(--spacing-lg);margin-top:var(--spacing-md);border-top:1px solid var(--color-mist);flex-wrap:wrap;display:flex}.footer-author-label{color:var(--color-ash);font-size:.875rem}.footer-author-label a{color:var(--color-text);transition:color var(--duration-fast) var(--ease-out)}.footer-author-label a:hover{color:var(--color-accent)}.footer-author-links{align-items:center;gap:var(--spacing-sm);display:flex}.footer-social-link{width:36px;height:36px;color:var(--color-ash);transition:all var(--duration-fast) var(--ease-out);background:0 0;border-radius:50%;justify-content:center;align-items:center;text-decoration:none;display:flex}.footer-social-link:hover{color:var(--color-accent);background:var(--color-accent-dim)}.footer-author-divider{background:var(--color-mist);width:1px;height:20px;margin:0 var(--spacing-xs)}.footer-newsletter{color:var(--color-text);background:var(--color-paper);border:1px solid var(--color-mist);transition:all var(--duration-fast) var(--ease-out);border-radius:100px;align-items:center;gap:6px;padding:8px 14px;font-size:.875rem;font-weight:500;text-decoration:none;display:inline-flex}.footer-newsletter:hover{border-color:var(--color-accent);color:var(--color-accent)}.footer-newsletter svg{transition:transform var(--duration-fast) var(--ease-out)}.footer-newsletter:hover svg{transform:translate(3px)}@media (max-width:768px){.footer-author{gap:var(--spacing-sm);flex-direction:column}.footer-author-divider{display:none}}.btn{justify-content:center;align-items:center;gap:var(--spacing-xs);font-family:var(--font-body);letter-spacing:.03em;cursor:pointer;transition:all var(--duration-base) var(--ease-out);border:none;padding:1rem 2rem;font-size:.9375rem;font-weight:600;text-decoration:none;display:inline-flex;position:relative;overflow:hidden}.btn-primary{background:var(--color-ink);color:var(--color-paper)}.btn-primary:before{content:"";background:var(--color-accent);transition:transform var(--duration-base) var(--ease-out);z-index:0;position:absolute;inset:0;transform:translateY(100%)}.btn-primary:hover:before{transform:translateY(0)}.btn-primary:hover{color:var(--color-paper)}.btn-primary span,.btn-primary svg,.btn-primary:not(:has(span)){z-index:1;position:relative}.btn-secondary{color:var(--color-ink);border:1px solid var(--color-ink);background:0 0}.btn-secondary:hover{background:var(--color-ink);color:var(--color-paper)}.btn:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.btn-primary:focus-visible{outline-color:var(--color-paper);box-shadow:0 0 0 4px var(--color-accent)}.btn-secondary:focus-visible{outline-color:var(--color-accent)}@keyframes revealUp{to{opacity:1;transform:translateY(0)}}@keyframes float{0%,to{transform:translate(-50%)translateY(0)}50%{transform:translate(-50%)translateY(-8px)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(4px)}}[data-reveal]{opacity:0;transition:opacity .8s var(--ease-out), transform .8s var(--ease-out);transform:translateY(30px)}[data-reveal].revealed{opacity:1;transform:translateY(0)}[data-reveal]:first-child{transition-delay:0s}[data-reveal]:nth-child(2){transition-delay:.1s}[data-reveal]:nth-child(3){transition-delay:.2s}[data-reveal]:nth-child(4){transition-delay:.3s}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}html{scroll-behavior:auto}.hero-canvas{display:none}.hero-scroll-indicator{opacity:1;animation:none}[data-reveal],.gallery-frame{opacity:1;transform:none}}.load-error{text-align:center;padding:var(--spacing-2xl) var(--spacing-lg);justify-content:center;align-items:center;gap:var(--spacing-md);background:var(--color-cream);border:1px solid var(--color-mist);border-radius:8px;flex-direction:column;display:flex}.load-error-icon{color:var(--color-accent);font-size:2.5rem}.load-error-title{font-family:var(--font-display);color:var(--color-ink);margin:0;font-size:1.5rem;font-weight:400}.load-error-text{color:var(--color-ash);max-width:40ch;font-size:1rem;line-height:1.5}.load-error-retry{margin-top:var(--spacing-sm)}.bias-tags{align-items:center;gap:var(--spacing-sm);margin-top:var(--spacing-lg);flex-direction:column;display:flex}.bias-tags-label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--color-ash);font-size:.6875rem;font-weight:500}.bias-tags-list{justify-content:center;gap:var(--spacing-xs);flex-wrap:wrap;display:flex}.bias-tag{background:var(--color-cream);border:1px solid var(--color-mist);color:var(--color-charcoal);transition:all var(--duration-fast) var(--ease-out);padding:6px 12px;font-size:.75rem;font-weight:500}.bias-tag:hover{border-color:var(--color-accent);color:var(--color-accent)}.antidote-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist)}.patterns-categories{margin-bottom:var(--spacing-xl)}.pattern-tabs{gap:var(--spacing-xs);margin-bottom:var(--spacing-lg);flex-wrap:wrap;display:flex}.pattern-tab{font-family:var(--font-body);color:var(--color-ash);padding:var(--spacing-xs) var(--spacing-sm);cursor:pointer;transition:color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out);background:0 0;border:none;border-bottom:2px solid #0000;font-size:.875rem}.pattern-tab:hover{color:var(--color-charcoal)}.pattern-tab.active{color:var(--color-ink);border-bottom-color:var(--color-accent);font-weight:500}.pattern-tab:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:4px}.pattern-panel{display:none}.pattern-panel.active{display:block}.pattern-columns{gap:var(--spacing-xl);grid-template-columns:1fr 1fr;display:grid}@media (max-width:768px){.pattern-columns{gap:var(--spacing-md);grid-template-columns:1fr}}.pattern-column-label{text-transform:uppercase;letter-spacing:.1em;margin-bottom:var(--spacing-sm);color:var(--color-ash);font-size:.6875rem;font-weight:600;display:block}.pattern-column--anti .pattern-column-label{color:var(--color-accent)}.pattern-column--do .pattern-column-label{color:var(--color-success,#22c55e)}.pattern-list{gap:var(--spacing-xs);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.pattern-item{padding-left:var(--spacing-md);font-size:.8125rem;line-height:1.5;position:relative}.pattern-item--anti{color:var(--color-ash)}.pattern-item--anti:before{content:"×";color:var(--color-accent);font-weight:600;position:absolute;left:0}.pattern-item--do{color:var(--color-charcoal)}.pattern-item--do:before{content:"✓";color:var(--color-success,#22c55e);font-weight:600;position:absolute;left:0}.contribute-inline{color:var(--color-ash);margin-top:var(--spacing-md);font-size:.875rem}.contribute-inline a{color:var(--color-accent);text-decoration:none}.contribute-inline a:hover{text-decoration:underline}.critique-callout{border-top:1px solid var(--color-mist);padding-top:var(--spacing-md);margin-bottom:var(--spacing-md);align-items:baseline;gap:var(--spacing-sm);color:var(--color-ash);flex-wrap:wrap;font-size:.8125rem;line-height:1.55;display:flex}.critique-callout-body{display:contents}.critique-callout-title{display:none}.critique-callout-text{color:var(--color-ash)}.critique-callout-text code{font-family:var(--font-mono);color:var(--color-charcoal);font-size:.8125rem}.critique-callout-links{gap:var(--spacing-sm);flex-shrink:0;display:flex}.critique-callout-link{color:var(--color-accent);white-space:nowrap;font-size:.8125rem;font-weight:500;text-decoration:none}.critique-callout-link:hover{text-decoration:underline}.critique-callout-link--secondary{color:var(--color-ash);font-weight:400}.critique-callout-link--secondary:hover{color:var(--color-charcoal)}.pillar-item--main{background:var(--color-accent-dim);border:1px solid var(--color-accent)}.pillar-item--main .pillar-item-name{color:var(--color-accent);font-size:1.125rem;font-weight:600}.pillar-item--ref{padding:var(--spacing-xs) var(--spacing-sm);background:0 0}.pillar-item-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-ash);font-size:.75rem;font-weight:500}.pillar-refs{gap:var(--spacing-xs);padding:0 var(--spacing-sm);flex-wrap:wrap;display:flex}.pillar-ref{text-transform:uppercase;letter-spacing:.03em;background:var(--color-paper);color:var(--color-ash);border:1px solid var(--color-mist);transition:all var(--duration-fast) var(--ease-out);border-radius:3px;padding:4px 10px;font-size:.6875rem;font-weight:500}.pillar-ref:hover{border-color:var(--color-accent);color:var(--color-accent)}.pillar-command-group{align-items:center;gap:var(--spacing-xs);padding:var(--spacing-sm);background:var(--color-paper);border-radius:4px;flex-wrap:wrap;display:flex}.pillar-group-label{text-transform:uppercase;letter-spacing:.05em;color:var(--color-ash);width:100%;margin-bottom:4px;font-size:.6875rem;font-weight:600}.pillar-command-group .pillar-item-code{background:var(--color-accent-dim);border-radius:3px;padding:4px 8px;font-size:.8125rem}.platforms-section{padding:var(--spacing-2xl) 0;border-top:1px solid var(--color-mist)}.platforms-section .section-subtitle{max-width:60ch}.install-terminal{max-width:640px;margin:0 auto var(--spacing-xl)}.install-terminal .glass-terminal{height:auto}.install-terminal .terminal-body{flex-direction:column;padding:0;display:flex}.install-terminal-row{padding:var(--spacing-md) var(--spacing-lg);flex-direction:column;gap:6px;display:flex}.install-terminal-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--color-ash);font-size:.625rem;font-weight:600}.install-terminal-cmd{align-items:center;gap:var(--spacing-sm);display:flex}.install-terminal-cmd .terminal-prompt{flex-shrink:0}.install-terminal-cmd code{font-family:var(--font-mono);color:var(--color-ink);white-space:nowrap;text-overflow:ellipsis;background:0 0;flex:1;padding:0;font-size:.9375rem;overflow:hidden}.install-terminal-cmd .copy-btn{flex-shrink:0}.install-terminal-cmd .btn{padding:.5rem 1rem;font-size:.8125rem}.install-terminal-note{color:var(--color-ash);padding-left:calc(.75rem + var(--spacing-sm));font-size:.75rem}.install-terminal-note code{font-family:var(--font-mono);background:var(--color-mist);color:var(--color-ink);border-radius:3px;padding:2px 5px;font-size:.6875rem}.install-terminal-divider{background:var(--color-mist);height:1px;margin:0}@media (max-width:600px){.install-terminal-row{padding:var(--spacing-sm) var(--spacing-md)}.install-terminal-cmd code{font-size:.75rem}}.install-providers{align-items:center;gap:var(--spacing-sm);margin-top:var(--spacing-md);flex-direction:column;display:flex}.install-providers-label{text-transform:uppercase;letter-spacing:.1em;color:var(--color-ash);font-size:.75rem;font-weight:600}.install-providers-row{justify-content:center;gap:var(--spacing-sm);flex-wrap:wrap;display:flex}.install-provider-badge{color:var(--color-charcoal);align-items:center;gap:6px;font-size:.8125rem;display:flex}.install-provider-badge img{border-radius:4px}.install-terminal-cmd--download{align-items:center;gap:var(--spacing-sm);flex-wrap:wrap;display:flex}.prefix-toggle{cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out);background:#0000000f;border:1px solid #00000014;border-radius:6px;align-items:center;gap:8px;padding:6px 12px;display:inline-flex}.prefix-toggle:hover{border-color:#0003}.prefix-toggle input{opacity:0;width:0;height:0;position:absolute}.prefix-toggle-slider{background:var(--color-mist);width:32px;height:18px;transition:background var(--duration-fast) var(--ease-out);border-radius:18px;flex-shrink:0;position:relative}.prefix-toggle-slider:after{content:"";background:var(--color-paper);width:14px;height:14px;transition:transform var(--duration-fast) var(--ease-out);border-radius:50%;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000026}.prefix-toggle input:checked+.prefix-toggle-slider{background:var(--color-accent)}.prefix-toggle input:checked+.prefix-toggle-slider:after{transform:translate(14px)}.prefix-toggle input:focus-visible+.prefix-toggle-slider{outline:2px solid var(--color-accent);outline-offset:2px}.prefix-toggle-label{color:var(--color-charcoal);white-space:nowrap;font-size:.75rem}.prefix-toggle-label code{font-family:var(--font-mono);background:var(--color-accent-dim);color:var(--color-accent);border-radius:3px;padding:1px 4px;font-size:.6875rem}.download-tip{color:var(--color-ash);margin-top:var(--spacing-sm);text-align:center;font-size:.8125rem}.download-tip a{color:var(--color-accent);text-decoration:none}.download-tip a:hover{text-decoration:underline}.consulting-section{padding:var(--spacing-xl) 0;border-top:1px solid var(--color-mist)}.consulting-content{justify-content:space-between;align-items:center;gap:var(--spacing-lg);flex-wrap:wrap;display:flex}.consulting-actions{gap:var(--spacing-sm);flex-shrink:0;display:flex}.consulting-text{flex:1;min-width:280px}.consulting-title{margin:0 0 var(--spacing-sm) 0;font-size:clamp(1.5rem,4vw,2rem);font-style:italic;font-weight:300}.consulting-desc{color:var(--color-charcoal);max-width:45ch;margin:0;font-size:1rem;line-height:1.6}@media (max-width:600px){.consulting-content{flex-direction:column;align-items:flex-start}.consulting-actions{flex-direction:column;width:100%}.consulting-actions .btn{justify-content:center;width:100%}}
\ No newline at end of file
diff --git a/source/skills/critique/scripts/detect-antipatterns.mjs b/source/skills/critique/scripts/detect-antipatterns.mjs
index 7d92f7a69..4b09420d1 100644
--- a/source/skills/critique/scripts/detect-antipatterns.mjs
+++ b/source/skills/critique/scripts/detect-antipatterns.mjs
@@ -149,6 +149,60 @@ const ANTIPATTERNS = [
description:
'Dark backgrounds with colored box-shadow glows are the default "cool" look of AI-generated UIs. Use subtle, purposeful lighting instead — or skip the dark theme entirely.',
},
+ {
+ id: 'line-length',
+ name: 'Line length too long',
+ description:
+ 'Text lines wider than ~80 characters are hard to read. The eye loses its place tracking back to the start of the next line. Add a max-width (65ch to 75ch) to text containers.',
+ },
+ {
+ id: 'cramped-padding',
+ name: 'Cramped padding',
+ description:
+ 'Text is too close to the edge of its container. Add at least 8px (ideally 12-16px) of padding inside bordered or colored containers.',
+ },
+ {
+ id: 'tight-leading',
+ name: 'Tight line height',
+ description:
+ 'Line height below 1.3x the font size makes multi-line text hard to read. Use 1.5 to 1.7 for body text so lines have room to breathe.',
+ },
+ {
+ id: 'small-target',
+ name: 'Small touch target',
+ description:
+ 'Interactive elements should be at least 44x44px to be comfortably tappable. Small targets cause misclicks and frustrate users, especially on touch devices.',
+ },
+ {
+ id: 'skipped-heading',
+ name: 'Skipped heading level',
+ description:
+ 'Heading levels should not skip (e.g. h1 then h3 with no h2). Screen readers use heading hierarchy for navigation. Skipping levels breaks the document outline.',
+ },
+ {
+ id: 'justified-text',
+ name: 'Justified text',
+ description:
+ 'Justified text without hyphenation creates uneven word spacing ("rivers of white"). Use text-align: left for body text, or enable hyphens: auto if you must justify.',
+ },
+ {
+ id: 'tiny-text',
+ name: 'Tiny body text',
+ description:
+ 'Body text below 12px is hard to read, especially on high-DPI screens. Use at least 14px for body content, 16px is ideal.',
+ },
+ {
+ id: 'all-caps-body',
+ name: 'All-caps body text',
+ description:
+ 'Long passages in uppercase are hard to read. We recognize words by shape (ascenders and descenders), which all-caps removes. Reserve uppercase for short labels and headings.',
+ },
+ {
+ id: 'wide-tracking',
+ name: 'Wide letter spacing on body text',
+ description:
+ 'Letter spacing above 0.05em on body text disrupts natural character groupings and slows reading. Reserve wide tracking for short uppercase labels only.',
+ },
];
// ─── Section 2: Color Utilities ─────────────────────────────────────────────
@@ -709,6 +763,128 @@ function checkElementAIPaletteDOM(el) {
return findings;
}
+const QUALITY_TEXT_TAGS = new Set(['p', 'li', 'td', 'th', 'dd', 'blockquote', 'figcaption']);
+const QUALITY_INTERACTIVE_TAGS = new Set(['button', 'a', 'input', 'select', 'textarea']);
+
+function checkElementQualityDOM(el) {
+ const tag = el.tagName.toLowerCase();
+ const style = getComputedStyle(el);
+ const findings = [];
+
+ const hasDirectText = [...el.childNodes].some(n => n.nodeType === 3 && n.textContent.trim().length > 10);
+ const textLen = el.textContent?.trim().length || 0;
+ const fontSize = parseFloat(style.fontSize) || 16;
+ const rect = el.getBoundingClientRect();
+
+ // --- Line length too long ---
+ // Only flag if text is long enough to actually fill the line (>80 chars)
+ if (hasDirectText && QUALITY_TEXT_TAGS.has(tag) && rect.width > 0 && textLen > 80) {
+ const charsPerLine = rect.width / (fontSize * 0.5);
+ if (charsPerLine > 85) {
+ findings.push({ id: 'line-length', snippet: `~${Math.round(charsPerLine)} chars/line (aim for <80)` });
+ }
+ }
+
+ // --- Cramped padding ---
+ if (hasDirectText && textLen > 10) {
+ const borders = {
+ top: parseFloat(style.borderTopWidth) || 0,
+ right: parseFloat(style.borderRightWidth) || 0,
+ bottom: parseFloat(style.borderBottomWidth) || 0,
+ left: parseFloat(style.borderLeftWidth) || 0,
+ };
+ // Need at least 2 borders (a container), or a non-transparent background
+ const borderCount = Object.values(borders).filter(w => w > 0).length;
+ const hasBg = style.backgroundColor && style.backgroundColor !== 'rgba(0, 0, 0, 0)';
+ if (borderCount >= 2 || hasBg) {
+ // Only check padding on sides that have borders or where bg creates containment
+ const paddings = [];
+ if (hasBg || borders.top > 0) paddings.push(parseFloat(style.paddingTop) || 0);
+ if (hasBg || borders.right > 0) paddings.push(parseFloat(style.paddingRight) || 0);
+ if (hasBg || borders.bottom > 0) paddings.push(parseFloat(style.paddingBottom) || 0);
+ if (hasBg || borders.left > 0) paddings.push(parseFloat(style.paddingLeft) || 0);
+ if (paddings.length > 0) {
+ const minPad = Math.min(...paddings);
+ if (minPad < 8) {
+ findings.push({ id: 'cramped-padding', snippet: `${minPad}px padding (need >=8px)` });
+ }
+ }
+ }
+ }
+
+ // --- Tight line height ---
+ if (hasDirectText && textLen > 50 && !['h1','h2','h3','h4','h5','h6'].includes(tag)) {
+ const lineHeight = parseFloat(style.lineHeight);
+ if (lineHeight && lineHeight !== NaN) {
+ const ratio = lineHeight / fontSize;
+ if (ratio < 1.3 && ratio > 0) {
+ findings.push({ id: 'tight-leading', snippet: `line-height ${ratio.toFixed(2)}x (need >=1.3)` });
+ }
+ }
+ }
+
+ // --- Small touch targets ---
+ if (QUALITY_INTERACTIVE_TAGS.has(tag) || el.hasAttribute('tabindex') || el.getAttribute('role') === 'button') {
+ if (rect.width > 0 && rect.height > 0 && (rect.width < 44 || rect.height < 44)) {
+ if (style.display !== 'none' && style.visibility !== 'hidden') {
+ findings.push({ id: 'small-target', snippet: `${Math.round(rect.width)}x${Math.round(rect.height)}px (need 44x44)` });
+ }
+ }
+ }
+
+ // --- Justified text (without hyphens) ---
+ if (hasDirectText && style.textAlign === 'justify') {
+ const hyphens = style.hyphens || style.webkitHyphens || '';
+ if (hyphens !== 'auto') {
+ findings.push({ id: 'justified-text', snippet: 'text-align: justify without hyphens: auto' });
+ }
+ }
+
+ // --- Tiny body text ---
+ if (hasDirectText && textLen > 20 && fontSize < 12) {
+ if (!['sub', 'sup', 'code', 'kbd', 'samp', 'var'].includes(tag)) {
+ findings.push({ id: 'tiny-text', snippet: `${fontSize}px body text` });
+ }
+ }
+
+ // --- All-caps body text ---
+ if (hasDirectText && textLen > 30 && style.textTransform === 'uppercase') {
+ if (!['h1','h2','h3','h4','h5','h6'].includes(tag)) {
+ findings.push({ id: 'all-caps-body', snippet: `text-transform: uppercase on ${textLen} chars of body text` });
+ }
+ }
+
+ // --- Wide letter spacing on body text ---
+ if (hasDirectText && textLen > 20) {
+ const tracking = parseFloat(style.letterSpacing);
+ if (tracking > 0 && style.textTransform !== 'uppercase') {
+ const trackingEm = tracking / fontSize;
+ if (trackingEm > 0.05) {
+ findings.push({ id: 'wide-tracking', snippet: `letter-spacing: ${trackingEm.toFixed(2)}em on body text` });
+ }
+ }
+ }
+
+ return findings;
+}
+
+function checkPageQualityDOM() {
+ const findings = [];
+
+ // --- Skipped heading levels ---
+ const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
+ let prevLevel = 0;
+ for (const h of headings) {
+ const level = parseInt(h.tagName[1]);
+ if (prevLevel > 0 && level > prevLevel + 1) {
+ findings.push({ type: 'skipped-heading', detail: `h${prevLevel} followed by h${level} (missing h${prevLevel + 1})` });
+ }
+ prevLevel = level;
+ }
+
+ return findings;
+}
+
// Node adapters — take pre-extracted jsdom computed style
function checkElementBorders(tag, style) {
@@ -1040,6 +1216,18 @@ if (IS_BROWSER) {
const LABEL_BG = 'oklch(55% 0.25 350)';
const OUTLINE_COLOR = 'oklch(60% 0.25 350)';
+ // Inject hover styles via CSS (more reliable than JS event listeners)
+ const styleEl = document.createElement('style');
+ styleEl.textContent = `
+ .impeccable-overlay { pointer-events: auto; }
+ .impeccable-overlay .impeccable-tooltip { display: none; }
+ .impeccable-overlay .impeccable-label { display: block; }
+ .impeccable-overlay:hover { border-color: transparent !important; }
+ .impeccable-overlay:hover .impeccable-tooltip { display: block; }
+ .impeccable-overlay:hover .impeccable-label { display: none; }
+ `;
+ (document.head || document.documentElement).appendChild(styleEl);
+
const overlays = [];
const TYPE_LABELS = {};
for (const ap of ANTIPATTERNS) {
@@ -1055,14 +1243,14 @@ if (IS_BROWSER) {
top: `${rect.top + scrollY - 2}px`, left: `${rect.left + scrollX - 2}px`,
width: `${rect.width + 4}px`, height: `${rect.height + 4}px`,
border: `2px solid ${OUTLINE_COLOR}`, borderRadius: '4px',
- pointerEvents: 'none', zIndex: '99999', boxSizing: 'border-box',
+ zIndex: '99999', boxSizing: 'border-box',
});
const label = document.createElement('div');
label.className = 'impeccable-label';
label.textContent = findings.map(f => TYPE_LABELS[f.type || f.id] || f.type || f.id).join(', ');
Object.assign(label.style, {
- position: 'absolute', top: '-20px', left: '0',
+ position: 'absolute', top: '-22px', left: '0',
background: LABEL_BG, color: 'white',
fontSize: '11px', fontFamily: 'system-ui, sans-serif', fontWeight: '600',
padding: '2px 8px', borderRadius: '3px', whiteSpace: 'nowrap',
@@ -1074,25 +1262,14 @@ if (IS_BROWSER) {
tooltip.className = 'impeccable-tooltip';
tooltip.innerHTML = findings.map(f => f.detail || f.snippet).join('
');
Object.assign(tooltip.style, {
- position: 'absolute', bottom: '-28px', left: '0',
+ position: 'absolute', top: '-22px', left: '0',
background: 'rgba(0,0,0,0.85)', color: '#e5e5e5',
fontSize: '11px', fontFamily: 'ui-monospace, monospace',
- padding: '4px 8px', borderRadius: '3px', whiteSpace: 'nowrap',
- lineHeight: '16px', display: 'none', zIndex: '100000',
+ padding: '2px 8px', borderRadius: '3px', whiteSpace: 'nowrap',
+ lineHeight: '16px', letterSpacing: '0.02em', zIndex: '100000',
});
outline.appendChild(tooltip);
- outline.addEventListener('mouseenter', () => {
- outline.style.pointerEvents = 'auto';
- tooltip.style.display = 'block';
- outline.style.background = 'oklch(60% 0.25 350 / 0.08)';
- });
- outline.addEventListener('mouseleave', () => {
- outline.style.pointerEvents = 'none';
- tooltip.style.display = 'none';
- outline.style.background = 'none';
- });
-
document.body.appendChild(outline);
overlays.push(outline);
};
@@ -1163,6 +1340,7 @@ if (IS_BROWSER) {
...checkElementMotionDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
...checkElementGlowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
...checkElementAIPaletteDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
+ ...checkElementQualityDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
];
if (findings.length > 0) {
@@ -1185,6 +1363,13 @@ if (IS_BROWSER) {
allFindings.push({ el, findings: [f] });
}
+ // Page-level quality checks (headings, etc.)
+ const qualityFindings = checkPageQualityDOM();
+ if (qualityFindings.length > 0) {
+ showPageBanner(qualityFindings);
+ allFindings.push({ el: document.body, findings: qualityFindings });
+ }
+
// Regex-on-HTML checks (shared with Node)
const htmlPatternFindings = checkHtmlPatterns(document.documentElement.outerHTML);
if (htmlPatternFindings.length > 0) {
diff --git a/tests/fixtures/antipatterns/quality-should-flag.html b/tests/fixtures/antipatterns/quality-should-flag.html
new file mode 100644
index 000000000..9549429c0
--- /dev/null
+++ b/tests/fixtures/antipatterns/quality-should-flag.html
@@ -0,0 +1,340 @@
+
+
+
Every example on this page has a common design quality problem.
+ + +This paragraph has no max-width constraint at all, which means on a wide monitor or ultrawide display, each line of text can stretch to 150 or even 200 characters wide. Research consistently shows that line lengths beyond 75 characters significantly reduce reading speed and comprehension. The eye has to travel too far to find the beginning of the next line, causing readers to lose their place. This is one of the most common and easily fixable typographic issues on the web, yet it persists because developers test on narrow browser windows and never see the problem. A simple max-width of 65ch to 75ch on the paragraph or its container would fix this entirely. But without that constraint, this text will just keep going and going across the full width of whatever viewport or container it finds itself in, making it genuinely unpleasant to read.
+This body text is only 10px. While this might be fine for a disclaimer or legal footnote, it's too small for primary content that users need to actually read. Accessibility guidelines generally recommend a minimum of 16px for body text, with 12px as an absolute floor.
+This is 11px body text. Still too small for comfortable reading, especially on high-DPI screens where the physical size is even smaller than the pixel count suggests.
+This paragraph has a line-height of 1.0, which means the lines are touching. Multi-line body text needs breathing room between lines for readability. A line-height of 1.5 to 1.7 is generally recommended for body text.
+This paragraph uses line-height: 16px with font-size: 16px, giving an effective ratio of 1.0. Same problem expressed differently.
+This paragraph uses text-align: justify, which forces each line to stretch to fill the full width. Without hyphenation support, this creates uneven gaps between words known as "rivers of white space" that flow vertically through the text. These rivers make the text harder to read because the inconsistent spacing disrupts the reading rhythm. Left-aligned text with a ragged right edge is almost always more readable on the web.
+Screen readers use heading levels to build a document outline. Skipping levels breaks that navigation.
+This entire paragraph is in uppercase via text-transform. While all-caps works for short labels, headings, or navigation items, longer body text in uppercase is significantly harder to read because we lose the word shape cues that come from ascenders and descenders in mixed-case text.
+This element has 5 !important declarations. It's a sign of specificity wars and unmaintainable CSS.
+This body text has letter-spacing: 0.15em applied to it. While subtle tracking adjustments can improve readability for headings or all-caps text, adding significant letter spacing to body text actually makes it harder to read by disrupting natural character groupings.
+None of these should trigger quality warnings.
+ +This paragraph has a max-width of 65ch, keeping the line length comfortable for reading. The eye can easily track from the end of one line to the beginning of the next.
+This is 16px body text with 1.6 line-height. Comfortable to read.
+This is a 12px caption. Small but appropriate for its purpose.
+No skipped levels.
+