agent-design-skills 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import{Command as lt}from"commander";import*as w from"@clack/prompts";import k from"picocolors";import F from"pathe";import q from"fs-extra";import D from"fs-extra";import I from"pathe";import{fileURLToPath as ze}from"url";import N from"fs-extra";import te from"pathe";function Ie(e){let t=0;for(let s=0;s<e.length;s++)t=(t<<5)-t+e.charCodeAt(s),t|=0;return Math.abs(t)%7-3}function ae(e,t,s){return t==="dark"?Math.max(s==="primary"?.97:s==="secondary"?.8:.68,e):Math.min(s==="primary"?.15:s==="secondary"?.34:.44,e)}var _={"dark-obsidian-technical":{A:{display:"Geist",sans:"Instrument Sans",mono:"Geist Mono"},B:{display:"Sora",sans:"Public Sans",mono:"Fira Code"},C:{display:"Satoshi",sans:"General Sans",mono:"Space Mono"}},"swiss-typographic-grid":{A:{display:"Cabinet Grotesk",sans:"Space Grotesk",mono:"Space Mono"},B:{display:"Syne",sans:"Public Sans",mono:"Fragment Mono"},C:{display:"Sora",sans:"General Sans",mono:"DM Mono"}},"kinetic-industrial-mono":{A:{display:"JetBrains Mono",sans:"IBM Plex Sans",mono:"JetBrains Mono"},B:{display:"Fira Code",sans:"Fragment Mono",mono:"Fira Code"},C:{display:"Space Mono",sans:"Chivo",mono:"Space Mono"}},"bento-modular-system":{A:{display:"Satoshi",sans:"General Sans",mono:"Geist Mono"},B:{display:"Sora",sans:"Public Sans",mono:"Fira Code"},C:{display:"Outfit",sans:"DM Sans",mono:"JetBrains Mono"}},"spatial-glass-visionos":{A:{display:"Outfit",sans:"DM Sans",mono:"Fragment Mono"},B:{display:"Sora",sans:"Public Sans",mono:"Geist Mono"},C:{display:"Cabinet Grotesk",sans:"Switzer",mono:"Inconsolata"}},"editorial-serif-paper":{A:{display:"Newsreader",sans:"Work Sans",mono:"Fragment Mono"},B:{display:"Fraunces",sans:"Merriweather Sans",mono:"IBM Plex Mono"},C:{display:"Bespoke Serif",sans:"Switzer",mono:"Inconsolata"}},"quiet-luxury-atelier":{A:{display:"Cormorant Garamond",sans:"DM Sans",mono:"Fragment Mono"},B:{display:"Fraunces",sans:"Work Sans",mono:"IBM Plex Mono"},C:{display:"Bespoke Serif",sans:"Switzer",mono:"Space Mono"}},"warm-artisan-craft":{A:{display:"Fraunces",sans:"Cabinet Grotesk",mono:"DM Mono"},B:{display:"Source Serif 4",sans:"Public Sans",mono:"Fragment Mono"},C:{display:"Newsreader",sans:"General Sans",mono:"Space Mono"}},"japanese-minimal-zen":{A:{display:"Noto Serif Display",sans:"Work Sans",mono:"DM Mono"},B:{display:"Newsreader",sans:"Public Sans",mono:"Fragment Mono"},C:{display:"Bespoke Serif",sans:"Sora",mono:"JetBrains Mono"}},"scandinavian-warm-minimal":{A:{display:"Familjen Grotesk",sans:"DM Sans",mono:"Fragment Mono"},B:{display:"Sora",sans:"Public Sans",mono:"IBM Plex Mono"},C:{display:"Switzer",sans:"Work Sans",mono:"Space Mono"}},"neo-brutalism":{A:{display:"Space Grotesk",sans:"Syne",mono:"Space Mono"},B:{display:"Archivo Black",sans:"Archivo",mono:"DM Mono"},C:{display:"Clash Display",sans:"Cabinet Grotesk",mono:"Fragment Mono"}},"retro-tactile-analog":{A:{display:"Space Mono",sans:"Chivo",mono:"Space Mono"},B:{display:"Syne",sans:"Public Sans",mono:"Fira Code"},C:{display:"Archivo",sans:"DM Mono",mono:"DM Mono"}},"y2k-acid-cyber":{A:{display:"Syne",sans:"Chakra Petch",mono:"Space Mono"},B:{display:"Clash Display",sans:"Space Grotesk",mono:"Fira Code"},C:{display:"Cabinet Grotesk",sans:"Public Sans",mono:"JetBrains Mono"}},"playful-clay-consumer":{A:{display:"Bricolage Grotesque",sans:"Fredoka",mono:"Space Mono"},B:{display:"Outfit",sans:"DM Sans",mono:"Fragment Mono"},C:{display:"Cabinet Grotesk",sans:"Switzer",mono:"DM Mono"}},"vaporwave-crt-terminal":{A:{display:"VT323",sans:"Fira Code",mono:"Fira Code"},B:{display:"Chakra Petch",sans:"Space Mono",mono:"Space Mono"},C:{display:"Syne",sans:"DM Mono",mono:"DM Mono"}},"high-trust-fintech-clarity":{A:{display:"Sora",sans:"Public Sans",mono:"Fira Code"},B:{display:"General Sans",sans:"Instrument Sans",mono:"JetBrains Mono"},C:{display:"Cabinet Grotesk",sans:"Switzer",mono:"Space Mono"}},"clinical-biotech-precision":{A:{display:"Instrument Sans",sans:"Public Sans",mono:"IBM Plex Mono"},B:{display:"Sora",sans:"General Sans",mono:"Fragment Mono"},C:{display:"Cabinet Grotesk",sans:"Work Sans",mono:"Fira Code"}},"civic-govtech-accessible":{A:{display:"Atkinson Hyperlegible",sans:"Public Sans",mono:"Fragment Mono"},B:{display:"Sora",sans:"DM Sans",mono:"IBM Plex Mono"},C:{display:"Work Sans",sans:"General Sans",mono:"Fira Code"}}},ie={calm:{ease:"cubic-bezier(0.25, 1, 0.5, 1)",easeSpring:"cubic-bezier(0.25, 1, 0.5, 1)",durationFast:"140ms",durationNormal:"240ms"},"urgent-precise":{ease:"cubic-bezier(0.16, 1, 0.3, 1)",easeSpring:"cubic-bezier(0.16, 1, 0.3, 1)",durationFast:"110ms",durationNormal:"180ms"},"playful-tactile":{ease:"cubic-bezier(0.34, 1.56, 0.64, 1)",easeSpring:"cubic-bezier(0.22, 1.35, 0.36, 1)",durationFast:"120ms",durationNormal:"240ms"},authoritative:{ease:"cubic-bezier(0.2, 0, 0, 1)",easeSpring:"cubic-bezier(0.2, 0, 0, 1)",durationFast:"120ms",durationNormal:"200ms"}},$e={"instrument sans":"wght@400;500;600;700","space grotesk":"wght@400;500;600;700",sora:"wght@400;600",fraunces:"opsz,wght@9..144,400..700","cormorant garamond":"wght@500;600;700","jetbrains mono":"wght@400;500","fira code":"wght@400;500","ibm plex mono":"wght@400;500","ibm plex sans":"wght@400;500;600","space mono":"wght@400;700","public sans":"wght@400;500;600","dm sans":"wght@400;500;600","dm mono":"wght@400;500","work sans":"wght@400;500;600","atkinson hyperlegible":"wght@400;700","bricolage grotesque":"wght@400;600;700",syne:"wght@600;700","syne mono":"wght@400",vt323:"wght@400",newsreader:"ital,opsz,wght@0,6..72,400..700;1,6..72,400","noto serif display":"wght@400;600","familjen grotesk":"wght@400;600",geist:"wght@400;500;600;700","geist mono":"wght@400;500","chakra petch":"wght@400;600",fredoka:"wght@400;600","archivo black":"wght@400",archivo:"wght@400;600",chivo:"wght@400;600",inconsolata:"wght@400;600","merriweather sans":"wght@400;600","source serif 4":"opsz,wght@8..60,400..700"},oe={"cabinet grotesk":"cabinet-grotesk@500,700,800","general sans":"general-sans@400,500,600",satoshi:"satoshi@400,500,700",switzer:"switzer@400,500,600","bespoke serif":"bespoke-serif@400,600","clash display":"clash-display@500,600,700"};function T(e){if(!e)return"";let t=e.match(/["']([^"']+)["']/);return t?t[1]:e.split(",")[0].trim()}async function Z(e){let t=te.resolve(e,"tokens.css"),s=te.resolve(e,"tokens.json"),a=te.resolve(e,"package.json"),g,f,y,i;if(await N.pathExists(t)){let n=await N.readFile(t,"utf-8"),c=n.match(/--font-display:\s*([^;]+);/),d=n.match(/--font-sans:\s*([^;]+);/),m=n.match(/--font-mono:\s*([^;]+);/),p=n.match(/@import\s+url\(['"]?([^'")]+)['"]?\);/);if(c&&(g=c[1].trim()),d&&(f=d[1].trim()),m&&(y=m[1].trim()),p&&(i=p[1].trim()),g||f||y)return{display:g,sans:f,mono:y,importUrl:i,source:"preserved"}}if(await N.pathExists(s))try{let c=(await N.readJSON(s)).variables||{};if(c["--font-display"]||c["--font-sans"]||c["--font-mono"])return{display:c["--font-display"],sans:c["--font-sans"],mono:c["--font-mono"],source:"preserved"}}catch{}if(await N.pathExists(a))try{let n=await N.readJSON(a),c={...n.dependencies||{},...n.devDependencies||{}},d=Object.keys(c).filter(m=>m.startsWith("@fontsource/"));if(d.length>0){let m=d.map(p=>p.replace("@fontsource/","").split("-").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" "));return{display:m[0],sans:m[1]||m[0],mono:m.find(p=>p.toLowerCase().includes("mono")||p.toLowerCase().includes("code"))||"monospace",source:"package.json"}}}catch{}return null}function De(e){if(!e)return null;let t=["Geist Mono","Geist","Instrument Sans","Space Grotesk","Space Mono","Cabinet Grotesk","General Sans","Satoshi","Switzer","Bespoke Serif","Fraunces","Cormorant Garamond","Newsreader","Noto Serif Display","Source Serif 4","Familjen Grotesk","Sora","Public Sans","Work Sans","Atkinson Hyperlegible","Bricolage Grotesque","Syne Mono","Syne","JetBrains Mono","Fira Code","IBM Plex Mono","IBM Plex Sans","DM Sans","DM Mono","Outfit","VT323","Archivo"],s=e.toLowerCase();for(let a of t)if(new RegExp(`\\b(?:use|with|in|font:?)\\s+${a.toLowerCase()}\\b|\\b${a.toLowerCase()}\\s+(?:font|typography)\\b`,"i").test(e)||s.includes(`use ${a.toLowerCase()}`)){let f=/mono|code|vt323/i.test(a),y=/serif|garamond|fraunces|newsreader|cinzel/i.test(a);return f?{mono:a,source:"custom"}:y?{display:a,source:"custom"}:{sans:a,display:a,source:"custom"}}return null}function re(e,t){if(!e)return"";if(e.includes(",")&&(e.includes("serif")||e.includes("sans-serif")||e.includes("monospace")))return e;let s=e.replace(/['"]/g,"").trim(),a=s.toLowerCase(),g=t==="mono"||/mono|code|vt323|inconsolata/i.test(a),f=t==="display"&&/serif|garamond|fraunces|newsreader|cinzel/i.test(a);return g?`'${s}', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`:f?`'${s}', Georgia, "Times New Roman", serif`:`'${s}', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`}function Re(e,t,s,a){let g=[T(e),T(t),T(s)].filter(Boolean),f=Array.from(new Set(g)),y=[],i=[];for(let c of f){let d=c.toLowerCase();if(oe[d])y.push(`@import url('https://api.fontshare.com/v2/css?f[]=${oe[d]}&display=swap');`);else{if(d==="monospace"||d==="serif"||d==="sans-serif"||d==="customuserfont")continue;{let m=c.replace(/\s+/g,"+"),p=$e[d]||"wght@400;500;600;700";i.push(`family=${m}:${p}`)}}}let n=[];return a&&!n.includes(`@import url('${a}');`)&&n.push(`@import url('${a}');`),n.push(...y),i.length>0&&n.push(`@import url('https://fonts.googleapis.com/css2?${i.join("&")}&display=swap');`),n.length>0?n.join(`
3
3
  `)+`
4
4
 
5
- `:""}function le(e){let{archetype:t,feeling:s,radius:a,blur:g,projectName:f}=e,y=Ie(f),i="dark",n=250,c=.12,d=.18,m=.09,p=.28,v="oklch(0.65 0.20 250)",r="oklch(0.65 0.20 250 / 0.15)",l="oklch(0.70 0.22 250)",o=.96,u=.68,x=.52,b='"Geist", "Instrument Sans", sans-serif',C='"Geist", "Instrument Sans", sans-serif',A='"Geist Mono", "SF Mono", monospace',P=1.25;t==="editorial-serif-paper"?(i="light",n=75,c=.97,d=.99,m=.92,p=.85,v="oklch(0.48 0.18 25)",r="oklch(0.48 0.18 25 / 0.12)",l="oklch(0.42 0.20 25)",o=.2,u=.48,x=.62,b='"Newsreader", Georgia, serif',C='"Work Sans", sans-serif',A='"Fragment Mono", monospace'):t==="neo-brutalism"?(i="light",n=90,c=.97,d=1,m=.9,p=.12,v="oklch(0.85 0.28 130)",r="oklch(0.85 0.28 130 / 0.25)",l="oklch(0.88 0.30 130)",o=.12,u=.38,x=.5,b='"Space Grotesk", sans-serif',C='"Syne", sans-serif',A='"Space Mono", monospace',P=1.333):t==="swiss-typographic-grid"?(i="light",n=260,c=.98,d=1,m=.92,p=.12,v="oklch(0.55 0.22 25)",r="oklch(0.55 0.22 25 / 0.12)",l="oklch(0.50 0.24 25)",o=.12,u=.42,x=.55,b='"Cabinet Grotesk", sans-serif',C='"Space Grotesk", sans-serif',A='"Space Mono", monospace'):t==="kinetic-industrial-mono"?(i="dark",n=240,c=.1,d=.15,m=.07,p=.26,v="oklch(0.76 0.18 70)",r="oklch(0.76 0.18 70 / 0.15)",l="oklch(0.80 0.20 70)",o=.95,u=.68,x=.48,b='"JetBrains Mono", monospace',C='"IBM Plex Sans", sans-serif',A='"JetBrains Mono", monospace',P=1.2):t==="bento-modular-system"?(i="dark",n=255,c=.12,d=.17,m=.09,p=.28,v="oklch(0.64 0.22 255)",r="oklch(0.64 0.22 255 / 0.15)",l="oklch(0.68 0.24 255)",o=.96,u=.68,x=.5,b='"Satoshi", sans-serif',C='"General Sans", sans-serif',A='"Geist Mono", monospace'):t==="spatial-glass-visionos"?(i="dark",n=260,c=.1,d=.18,m=.08,p=.35,v="oklch(0.72 0.18 200)",r="oklch(0.72 0.18 200 / 0.18)",l="oklch(0.76 0.20 200)",o=.98,u=.72,x=.54,b='"Outfit", sans-serif',C='"DM Sans", sans-serif',A='"Fragment Mono", monospace'):t==="quiet-luxury-atelier"?(i="light",n=70,c=.97,d=.99,m=.92,p=.86,v="oklch(0.50 0.04 60)",r="oklch(0.50 0.04 60 / 0.12)",l="oklch(0.45 0.05 60)",o=.18,u=.46,x=.6,b='"Cormorant Garamond", serif',C='"DM Sans", sans-serif',A='"Fragment Mono", monospace'):t==="warm-artisan-craft"?(i="light",n=80,c=.96,d=.98,m=.9,p=.85,v="oklch(0.58 0.16 40)",r="oklch(0.58 0.16 40 / 0.14)",l="oklch(0.52 0.18 40)",o=.24,u=.5,x=.62,b='"Fraunces", serif',C='"Cabinet Grotesk", sans-serif',A='"DM Mono", monospace'):t==="japanese-minimal-zen"?(i="light",n=90,c=.97,d=.99,m=.91,p=.88,v="oklch(0.22 0.01 250)",r="oklch(0.22 0.01 250 / 0.10)",l="oklch(0.16 0.01 250)",o=.2,u=.48,x=.62,b='"Noto Serif Display", serif',C='"Work Sans", sans-serif',A='"DM Mono", monospace'):t==="scandinavian-warm-minimal"?(i="light",n=85,c=.97,d=.99,m=.91,p=.86,v="oklch(0.54 0.14 235)",r="oklch(0.54 0.14 235 / 0.14)",l="oklch(0.48 0.16 235)",o=.2,u=.48,x=.6,b='"Familjen Grotesk", sans-serif',C='"DM Sans", sans-serif',A='"Fragment Mono", monospace'):t==="retro-tactile-analog"?(i="dark",n=240,c=.2,d=.27,m=.14,p=.36,v="oklch(0.68 0.24 45)",r="oklch(0.68 0.24 45 / 0.18)",l="oklch(0.72 0.26 45)",o=.96,u=.72,x=.55,b='"Space Mono", monospace',C='"Chivo", sans-serif',A='"Space Mono", monospace',P=1.2):t==="y2k-acid-cyber"?(i="dark",n=290,c=.08,d=.14,m=.05,p=.3,v="oklch(0.88 0.28 135)",r="oklch(0.88 0.28 135 / 0.20)",l="oklch(0.92 0.30 135)",o=.98,u=.74,x=.55,b='"Syne", sans-serif',C='"Chakra Petch", sans-serif',A='"Space Mono", monospace',P=1.333):t==="playful-clay-consumer"?(i="light",n=280,c=.97,d=.99,m=.92,p=.88,v="oklch(0.66 0.22 295)",r="oklch(0.66 0.22 295 / 0.15)",l="oklch(0.70 0.24 295)",o=.2,u=.48,x=.6,b='"Bricolage Grotesque", sans-serif',C='"Fredoka", sans-serif',A='"Space Mono", monospace'):t==="vaporwave-crt-terminal"?(i="dark",n=290,c=.09,d=.14,m=.06,p=.28,v="oklch(0.78 0.18 200)",r="oklch(0.78 0.18 200 / 0.15)",l="oklch(0.82 0.20 200)",o=.96,u=.7,x=.5,b='"VT323", monospace',C='"Fira Code", monospace',A='"Fira Code", monospace',P=1.2):t==="high-trust-fintech-clarity"?(i="light",n=245,c=.98,d=1,m=.93,p=.86,v="oklch(0.56 0.18 245)",r="oklch(0.56 0.18 245 / 0.12)",l="oklch(0.50 0.20 245)",o=.14,u=.44,x=.58,b='"Sora", sans-serif',C='"Public Sans", sans-serif',A='"Fira Code", monospace'):t==="clinical-biotech-precision"?(i="light",n=220,c=.98,d=1,m=.92,p=.85,v="oklch(0.68 0.16 215)",r="oklch(0.68 0.16 215 / 0.12)",l="oklch(0.62 0.18 215)",o=.14,u=.42,x=.56,b='"Instrument Sans", sans-serif',C='"Public Sans", sans-serif',A='"IBM Plex Mono", monospace'):t==="civic-govtech-accessible"&&(i="light",n=260,c=.99,d=1,m=.92,p=.3,v="oklch(0.42 0.16 245)",r="oklch(0.42 0.16 245 / 0.12)",l="oklch(0.36 0.18 245)",o=.12,u=.38,x=.5,b='"Atkinson Hyperlegible", sans-serif',C='"Public Sans", sans-serif',A='"Fragment Mono", monospace');let S=((n+y)%360+360)%360,Ce=ae(o,i,"primary"),Ae=ae(i==="dark"?.8:.34,i,"secondary"),Me=ae(u,i,"muted"),U="6px",H="4px",j="4px";a==="sharp"?(U="0px",H="0px",j="0px"):a==="medium"?(U="10px",H="6px",j="6px"):a==="high"?(U="16px",H="10px",j="8px"):a==="pill"&&(U="9999px",H="9999px",j="9999px");let X="8px";g==="flat"?X="0px":g==="deep-glass"&&(X="20px");let Y=ie[s]||ie["urgent-precise"],Ee=Y.ease,Fe=Y.easeSpring,Pe=Y.durationFast,Te=Y.durationNormal,Q="0 1px 2px 0 oklch(0 0 0 / 0.45), 0 0 0 1px var(--border-hairline)",ee="0 4px 12px 0 oklch(0 0 0 / 0.50), 0 0 0 1px var(--border-hairline)";i==="light"&&t!=="neo-brutalism"?(Q="0 1px 3px 0 oklch(0.20 0.012 50 / 0.06), 0 0 0 1px var(--border-hairline)",ee="0 6px 16px -2px oklch(0.20 0.012 50 / 0.08), 0 0 0 1px var(--border-hairline)"):t==="neo-brutalism"&&(Q="3px 3px 0px 0px oklch(0.12 0.005 260)",ee="6px 6px 0px 0px oklch(0.12 0.005 260)");let $=_[t]||_["dark-obsidian-technical"],O=$.A.display,B=$.A.sans,G=$.A.mono;e.fontOverride?.source==="preserved"&&(e.fontMode==="keep"||!e.fontMode)?(e.fontOverride.display&&(O=T(e.fontOverride.display)),e.fontOverride.sans&&(B=T(e.fontOverride.sans)),e.fontOverride.mono&&(G=T(e.fontOverride.mono))):e.fontMode==="B"?(O=$.B.display,B=$.B.sans,G=$.B.mono):e.fontMode==="C"?(O=$.C.display,B=$.C.sans,G=$.C.mono):e.fontOverride&&(e.fontOverride.display&&(O=T(e.fontOverride.display)),e.fontOverride.sans&&(B=T(e.fontOverride.sans)),e.fontOverride.mono&&(G=T(e.fontOverride.mono)));let L=De(e.customDirection);L&&e.fontMode!=="keep"&&(L.display&&(O=L.display),L.sans&&(B=L.sans),L.mono&&(G=L.mono)),b=re(O,"display"),C=re(B,"sans"),A=re(G,"mono");let h={"--bg-canvas":`oklch(${c} 0.015 ${S})`,"--bg-elevated":`oklch(${d} 0.015 ${S})`,"--bg-surface-active":`oklch(${d+(i==="dark"?.04:-.04)} 0.018 ${S})`,"--bg-glass":`oklch(${d} 0.015 ${S} / 0.72)`,"--bg-sunken":`oklch(${m} 0.012 ${S})`,"--text-primary":`oklch(${Ce} 0.005 ${S})`,"--text-secondary":`oklch(${Ae} 0.010 ${S})`,"--text-muted":`oklch(${Me} 0.015 ${S})`,"--text-subtle":`oklch(${x} 0.018 ${S})`,"--text-inverse":i==="dark"?`oklch(0.12 0.015 ${S})`:`oklch(0.98 0.005 ${S})`,"--accent-primary":v,"--accent-subtle":r,"--accent-hover":l,"--border-hairline":i==="dark"?"oklch(1 0 0 / 0.07)":"oklch(0 0 0 / 0.07)","--border-subtle":i==="dark"?"oklch(1 0 0 / 0.04)":"oklch(0 0 0 / 0.04)","--border-focus":`oklch(0.65 0.20 ${S} / 0.75)`,"--highlight-specular":i==="dark"?"oklch(1 0 0 / 0.18)":"oklch(1 0 0 / 0.60)","--status-success":"oklch(0.72 0.16 145)","--status-warning":"oklch(0.78 0.14 75)","--status-danger":"oklch(0.65 0.22 25)","--status-info":"oklch(0.70 0.15 230)","--radius-outer":U,"--radius-inner":H,"--radius-badge":j,"--surface-blur":X,"--shadow-surface":Q,"--shadow-elevated":ee,"--section-py-tight":"clamp(2.5rem, 4vw, 4rem)","--section-py-normal":"clamp(4.5rem, 7vw, 6.5rem)","--section-py-breathing":"clamp(7rem, 12vw, 11rem)","--container-max":"1280px","--font-display":b,"--font-sans":C,"--font-mono":A,"--text-xs":"0.8125rem","--text-sm":"0.9375rem","--text-base":"1.0625rem","--text-lg":"1.25rem","--text-xl":`${(1.25*P).toFixed(3)}rem`,"--text-2xl":`${(1.25*Math.pow(P,2)).toFixed(3)}rem`,"--text-3xl":`${(1.25*Math.pow(P,3)).toFixed(3)}rem`,"--text-4xl":`${(1.25*Math.pow(P,4)).toFixed(3)}rem`,"--weight-heading":"600","--weight-body":"400","--weight-mono":"500","--ease-primary":Ee,"--ease-spring":Fe,"--duration-fast":Pe,"--duration-normal":Te};return{css:`${Re(O,B,G,e.fontOverride?.importUrl)}/* =============================================================================
5
+ `:""}function le(e){let{archetype:t,feeling:s,radius:a,blur:g,projectName:f}=e,y=Ie(f),i="dark",n=250,c=.12,d=.18,m=.09,p=.28,v="oklch(0.65 0.20 250)",r="oklch(0.65 0.20 250 / 0.15)",l="oklch(0.70 0.22 250)",o=.96,u=.68,x=.52,b='"Geist", "Instrument Sans", sans-serif',C='"Geist", "Instrument Sans", sans-serif',A='"Geist Mono", "SF Mono", monospace',P=1.25;t==="editorial-serif-paper"?(i="light",n=75,c=.97,d=.99,m=.92,p=.85,v="oklch(0.48 0.18 25)",r="oklch(0.48 0.18 25 / 0.12)",l="oklch(0.42 0.20 25)",o=.2,u=.48,x=.62,b='"Newsreader", Georgia, serif',C='"Work Sans", sans-serif',A='"Fragment Mono", monospace'):t==="neo-brutalism"?(i="light",n=90,c=.97,d=1,m=.9,p=.12,v="oklch(0.85 0.28 130)",r="oklch(0.85 0.28 130 / 0.25)",l="oklch(0.88 0.30 130)",o=.12,u=.38,x=.5,b='"Space Grotesk", sans-serif',C='"Syne", sans-serif',A='"Space Mono", monospace',P=1.333):t==="swiss-typographic-grid"?(i="light",n=260,c=.98,d=1,m=.92,p=.12,v="oklch(0.55 0.22 25)",r="oklch(0.55 0.22 25 / 0.12)",l="oklch(0.50 0.24 25)",o=.12,u=.42,x=.55,b='"Cabinet Grotesk", sans-serif',C='"Space Grotesk", sans-serif',A='"Space Mono", monospace'):t==="kinetic-industrial-mono"?(i="dark",n=240,c=.1,d=.15,m=.07,p=.26,v="oklch(0.76 0.18 70)",r="oklch(0.76 0.18 70 / 0.15)",l="oklch(0.80 0.20 70)",o=.95,u=.68,x=.48,b='"JetBrains Mono", monospace',C='"IBM Plex Sans", sans-serif',A='"JetBrains Mono", monospace',P=1.2):t==="bento-modular-system"?(i="dark",n=255,c=.12,d=.17,m=.09,p=.28,v="oklch(0.64 0.22 255)",r="oklch(0.64 0.22 255 / 0.15)",l="oklch(0.68 0.24 255)",o=.96,u=.68,x=.5,b='"Satoshi", sans-serif',C='"General Sans", sans-serif',A='"Geist Mono", monospace'):t==="spatial-glass-visionos"?(i="dark",n=260,c=.1,d=.18,m=.08,p=.35,v="oklch(0.72 0.18 200)",r="oklch(0.72 0.18 200 / 0.18)",l="oklch(0.76 0.20 200)",o=.98,u=.72,x=.54,b='"Outfit", sans-serif',C='"DM Sans", sans-serif',A='"Fragment Mono", monospace'):t==="quiet-luxury-atelier"?(i="light",n=70,c=.97,d=.99,m=.92,p=.86,v="oklch(0.50 0.04 60)",r="oklch(0.50 0.04 60 / 0.12)",l="oklch(0.45 0.05 60)",o=.18,u=.46,x=.6,b='"Cormorant Garamond", serif',C='"DM Sans", sans-serif',A='"Fragment Mono", monospace'):t==="warm-artisan-craft"?(i="light",n=80,c=.96,d=.98,m=.9,p=.85,v="oklch(0.58 0.16 40)",r="oklch(0.58 0.16 40 / 0.14)",l="oklch(0.52 0.18 40)",o=.24,u=.5,x=.62,b='"Fraunces", serif',C='"Cabinet Grotesk", sans-serif',A='"DM Mono", monospace'):t==="japanese-minimal-zen"?(i="light",n=90,c=.97,d=.99,m=.91,p=.88,v="oklch(0.22 0.01 250)",r="oklch(0.22 0.01 250 / 0.10)",l="oklch(0.16 0.01 250)",o=.2,u=.48,x=.62,b='"Noto Serif Display", serif',C='"Work Sans", sans-serif',A='"DM Mono", monospace'):t==="scandinavian-warm-minimal"?(i="light",n=85,c=.97,d=.99,m=.91,p=.86,v="oklch(0.54 0.14 235)",r="oklch(0.54 0.14 235 / 0.14)",l="oklch(0.48 0.16 235)",o=.2,u=.48,x=.6,b='"Familjen Grotesk", sans-serif',C='"DM Sans", sans-serif',A='"Fragment Mono", monospace'):t==="retro-tactile-analog"?(i="dark",n=240,c=.2,d=.27,m=.14,p=.36,v="oklch(0.68 0.24 45)",r="oklch(0.68 0.24 45 / 0.18)",l="oklch(0.72 0.26 45)",o=.96,u=.72,x=.55,b='"Space Mono", monospace',C='"Chivo", sans-serif',A='"Space Mono", monospace',P=1.2):t==="y2k-acid-cyber"?(i="dark",n=290,c=.08,d=.14,m=.05,p=.3,v="oklch(0.88 0.28 135)",r="oklch(0.88 0.28 135 / 0.20)",l="oklch(0.92 0.30 135)",o=.98,u=.74,x=.55,b='"Syne", sans-serif',C='"Chakra Petch", sans-serif',A='"Space Mono", monospace',P=1.333):t==="playful-clay-consumer"?(i="light",n=280,c=.97,d=.99,m=.92,p=.88,v="oklch(0.66 0.22 295)",r="oklch(0.66 0.22 295 / 0.15)",l="oklch(0.70 0.24 295)",o=.2,u=.48,x=.6,b='"Bricolage Grotesque", sans-serif',C='"Fredoka", sans-serif',A='"Space Mono", monospace'):t==="vaporwave-crt-terminal"?(i="dark",n=290,c=.09,d=.14,m=.06,p=.28,v="oklch(0.78 0.18 200)",r="oklch(0.78 0.18 200 / 0.15)",l="oklch(0.82 0.20 200)",o=.96,u=.7,x=.5,b='"VT323", monospace',C='"Fira Code", monospace',A='"Fira Code", monospace',P=1.2):t==="high-trust-fintech-clarity"?(i="light",n=245,c=.98,d=1,m=.93,p=.86,v="oklch(0.56 0.18 245)",r="oklch(0.56 0.18 245 / 0.12)",l="oklch(0.50 0.20 245)",o=.14,u=.44,x=.58,b='"Sora", sans-serif',C='"Public Sans", sans-serif',A='"Fira Code", monospace'):t==="clinical-biotech-precision"?(i="light",n=220,c=.98,d=1,m=.92,p=.85,v="oklch(0.68 0.16 215)",r="oklch(0.68 0.16 215 / 0.12)",l="oklch(0.62 0.18 215)",o=.14,u=.42,x=.56,b='"Instrument Sans", sans-serif',C='"Public Sans", sans-serif',A='"IBM Plex Mono", monospace'):t==="civic-govtech-accessible"&&(i="light",n=260,c=.99,d=1,m=.92,p=.3,v="oklch(0.42 0.16 245)",r="oklch(0.42 0.16 245 / 0.12)",l="oklch(0.36 0.18 245)",o=.12,u=.38,x=.5,b='"Atkinson Hyperlegible", sans-serif',C='"Public Sans", sans-serif',A='"Fragment Mono", monospace');let S=((n+y)%360+360)%360,Ce=ae(o,i,"primary"),Ae=ae(i==="dark"?.8:.34,i,"secondary"),Me=ae(u,i,"muted"),U="6px",H="4px",j="4px";a==="sharp"?(U="0px",H="0px",j="0px"):a==="medium"?(U="10px",H="6px",j="6px"):a==="high"?(U="16px",H="10px",j="8px"):a==="pill"&&(U="9999px",H="9999px",j="9999px");let X="8px";g==="flat"?X="0px":g==="deep-glass"&&(X="20px");let Y=ie[s]||ie["urgent-precise"],Ee=Y.ease,Fe=Y.easeSpring,Pe=Y.durationFast,Te=Y.durationNormal,Q="0 1px 2px 0 oklch(0 0 0 / 0.45), 0 0 0 1px var(--border-hairline)",ee="0 4px 12px 0 oklch(0 0 0 / 0.50), 0 0 0 1px var(--border-hairline)";i==="light"&&t!=="neo-brutalism"?(Q="0 1px 3px 0 oklch(0.20 0.012 50 / 0.06), 0 0 0 1px var(--border-hairline)",ee="0 6px 16px -2px oklch(0.20 0.012 50 / 0.08), 0 0 0 1px var(--border-hairline)"):t==="neo-brutalism"&&(Q="3px 3px 0px 0px oklch(0.12 0.005 260)",ee="6px 6px 0px 0px oklch(0.12 0.005 260)");let $=_[t]||_["dark-obsidian-technical"],O=$.A.display,B=$.A.sans,L=$.A.mono;e.fontOverride?.source==="preserved"&&(e.fontMode==="keep"||!e.fontMode)?(e.fontOverride.display&&(O=T(e.fontOverride.display)),e.fontOverride.sans&&(B=T(e.fontOverride.sans)),e.fontOverride.mono&&(L=T(e.fontOverride.mono))):e.fontMode==="B"?(O=$.B.display,B=$.B.sans,L=$.B.mono):e.fontMode==="C"?(O=$.C.display,B=$.C.sans,L=$.C.mono):e.fontOverride&&(e.fontOverride.display&&(O=T(e.fontOverride.display)),e.fontOverride.sans&&(B=T(e.fontOverride.sans)),e.fontOverride.mono&&(L=T(e.fontOverride.mono)));let G=De(e.customDirection);G&&e.fontMode!=="keep"&&(G.display&&(O=G.display),G.sans&&(B=G.sans),G.mono&&(L=G.mono)),b=re(O,"display"),C=re(B,"sans"),A=re(L,"mono");let h={"--bg-canvas":`oklch(${c} 0.015 ${S})`,"--bg-elevated":`oklch(${d} 0.015 ${S})`,"--bg-surface-active":`oklch(${d+(i==="dark"?.04:-.04)} 0.018 ${S})`,"--bg-glass":`oklch(${d} 0.015 ${S} / 0.72)`,"--bg-sunken":`oklch(${m} 0.012 ${S})`,"--text-primary":`oklch(${Ce} 0.005 ${S})`,"--text-secondary":`oklch(${Ae} 0.010 ${S})`,"--text-muted":`oklch(${Me} 0.015 ${S})`,"--text-subtle":`oklch(${x} 0.018 ${S})`,"--text-inverse":i==="dark"?`oklch(0.12 0.015 ${S})`:`oklch(0.98 0.005 ${S})`,"--accent-primary":v,"--accent-subtle":r,"--accent-hover":l,"--border-hairline":i==="dark"?"oklch(1 0 0 / 0.07)":"oklch(0 0 0 / 0.07)","--border-subtle":i==="dark"?"oklch(1 0 0 / 0.04)":"oklch(0 0 0 / 0.04)","--border-focus":`oklch(0.65 0.20 ${S} / 0.75)`,"--highlight-specular":i==="dark"?"oklch(1 0 0 / 0.18)":"oklch(1 0 0 / 0.60)","--status-success":"oklch(0.72 0.16 145)","--status-warning":"oklch(0.78 0.14 75)","--status-danger":"oklch(0.65 0.22 25)","--status-info":"oklch(0.70 0.15 230)","--radius-outer":U,"--radius-inner":H,"--radius-badge":j,"--surface-blur":X,"--shadow-surface":Q,"--shadow-elevated":ee,"--section-py-tight":"clamp(2.5rem, 4vw, 4rem)","--section-py-normal":"clamp(4.5rem, 7vw, 6.5rem)","--section-py-breathing":"clamp(7rem, 12vw, 11rem)","--container-max":"1280px","--font-display":b,"--font-sans":C,"--font-mono":A,"--text-xs":"0.8125rem","--text-sm":"0.9375rem","--text-base":"1.0625rem","--text-lg":"1.25rem","--text-xl":`${(1.25*P).toFixed(3)}rem`,"--text-2xl":`${(1.25*Math.pow(P,2)).toFixed(3)}rem`,"--text-3xl":`${(1.25*Math.pow(P,3)).toFixed(3)}rem`,"--text-4xl":`${(1.25*Math.pow(P,4)).toFixed(3)}rem`,"--weight-heading":"600","--weight-body":"400","--weight-mono":"500","--ease-primary":Ee,"--ease-spring":Fe,"--duration-fast":Pe,"--duration-normal":Te};return{css:`${Re(O,B,L,e.fontOverride?.importUrl)}/* =============================================================================
6
6
  AGENT DESIGN SKILLS \u2014 TOKEN CONTRACT (v1.1)
7
7
  Archetype: ${t}
8
8
  Polarity: ${i}
@@ -331,13 +331,13 @@ ${l}
331
331
 
332
332
  - [ ] **Tabular Alignment Check:** Ensure all numeric columns right-align with zero jitter.
333
333
  - [ ] **Keyboard Navigation:** Bind keyboard shortcut navigation for data grid rows.
334
- `}import M from"fs-extra";import E from"pathe";import{fileURLToPath as Be}from"url";async function Ge(){let e=Be(import.meta.url),t=E.dirname(e),s=[E.resolve(t,"../registry"),E.resolve(t,"../../registry"),E.resolve(t,"../../../registry"),E.resolve(process.cwd(),"registry")];for(let a of s)if(await M.pathExists(a))return a;return E.resolve(process.cwd(),"registry")}function de(e,t){return e.replace(/\{\{ARCHETYPE_NAME\}\}/g,t.archetype).replace(/\{\{TOKENS_PATH\}\}/g,"./tokens.css").replace(/\{\{DESIGN_DOC_PATH\}\}/g,"./DESIGN.md").replace(/\{\{PRODUCT_NAME\}\}/g,t.projectName).replace(/\{\{PRODUCT_BRIEF\}\}/g,t.productBrief||"High-precision operational workspace and data reconciliation platform")}async function pe(e,t,s){let a=[],f=await M.pathExists(E.resolve(e,".agents"))?".agents":".agent",y=E.resolve(e,f,"rules");await M.ensureDir(y);let i=E.resolve(y,"design-core.md"),n=`---
334
+ `}import M from"fs-extra";import E from"pathe";import{fileURLToPath as Be}from"url";async function Le(){let e=Be(import.meta.url),t=E.dirname(e),s=[E.resolve(t,"../registry"),E.resolve(t,"../../registry"),E.resolve(t,"../../../registry"),E.resolve(process.cwd(),"registry")];for(let a of s)if(await M.pathExists(a))return a;return E.resolve(process.cwd(),"registry")}function de(e,t){return e.replace(/\{\{ARCHETYPE_NAME\}\}/g,t.archetype).replace(/\{\{TOKENS_PATH\}\}/g,"./tokens.css").replace(/\{\{DESIGN_DOC_PATH\}\}/g,"./DESIGN.md").replace(/\{\{PRODUCT_NAME\}\}/g,t.projectName).replace(/\{\{PRODUCT_BRIEF\}\}/g,t.productBrief||"High-precision operational workspace and data reconciliation platform")}async function pe(e,t,s){let a=[],f=await M.pathExists(E.resolve(e,".agents"))?".agents":".agent",y=E.resolve(e,f,"rules");await M.ensureDir(y);let i=E.resolve(y,"design-core.md"),n=`---
335
335
  trigger: always_on
336
336
  description: "Always-On Core Design Governance Rule (v1.0)"
337
337
  ---
338
338
 
339
339
  ${s}
340
- `;await M.writeFile(i,n,"utf-8"),a.push(i);let c=E.resolve(e,f,"skills/design-system");await M.ensureDir(c);let d=E.resolve(c,"SKILL.md"),m=await Ge(),p=E.resolve(m,"core"),v=E.resolve(m,"archetypes",`${t.archetype}.md`),r=["00-workflow-and-scope.md","01-override-protocol.md","02-anti-slop-firewall.md","03-cross-page-unity.md","04-ux-and-ergonomics.md","05-voice-and-copy.md","06-iteration-discipline.md"];if(t.mode==="single"){let l=`---
340
+ `;await M.writeFile(i,n,"utf-8"),a.push(i);let c=E.resolve(e,f,"skills/design-system");await M.ensureDir(c);let d=E.resolve(c,"SKILL.md"),m=await Le(),p=E.resolve(m,"core"),v=E.resolve(m,"archetypes",`${t.archetype}.md`),r=["00-workflow-and-scope.md","01-override-protocol.md","02-anti-slop-firewall.md","03-cross-page-unity.md","04-ux-and-ergonomics.md","05-voice-and-copy.md","06-iteration-discipline.md"];if(t.mode==="single"){let l=`---
341
341
  name: design-system
342
342
  description: "Complete design system tokens, UX ergonomics, and archetype specifications"
343
343
  ---
@@ -456,11 +456,11 @@ Child radii must never protrude past or clash with parent borders.
456
456
  `;await V.writeFile(m,p,"utf-8"),g.push(m)}return g}import me from"fs-extra";import he from"pathe";async function ge(e,t,s){let a=he.resolve(e,"CLAUDE.md"),g=he.resolve(e,"AGENTS.md"),f=`# Design Governance & Token Contract (v4.2)
457
457
 
458
458
  ${s}
459
- `;return await me.writeFile(a,f,"utf-8"),await me.writeFile(g,f,"utf-8"),[a,g]}import Le from"fs-extra";import Ne from"pathe";async function fe(e,t,s){let a=Ne.resolve(e,"DESIGN-PROMPT.md"),g=`# Frontend Design System Guidelines (v4.2)
459
+ `;return await me.writeFile(a,f,"utf-8"),await me.writeFile(g,f,"utf-8"),[a,g]}import Ge from"fs-extra";import Ne from"pathe";async function fe(e,t,s){let a=Ne.resolve(e,"DESIGN-PROMPT.md"),g=`# Frontend Design System Guidelines (v4.2)
460
460
  Target Environments: v0, Lovable, Bolt, Replit
461
461
 
462
462
  ${s}
463
- `;return await Le.writeFile(a,g,"utf-8"),a}async function Ue(){let e=ze(import.meta.url),t=I.dirname(e),s=[I.resolve(t,"../registry"),I.resolve(t,"../../registry"),I.resolve(t,"../../../registry"),I.resolve(process.cwd(),"registry")];for(let a of s)if(await D.pathExists(a))return a;return I.resolve(process.cwd(),"registry")}function He(e){let{archetype:t}=e;return`# Always-On Design Governance Rule (v1.1)
463
+ `;return await Ge.writeFile(a,g,"utf-8"),a}async function Ue(){let e=ze(import.meta.url),t=I.dirname(e),s=[I.resolve(t,"../registry"),I.resolve(t,"../../registry"),I.resolve(t,"../../../registry"),I.resolve(process.cwd(),"registry")];for(let a of s)if(await D.pathExists(a))return a;return I.resolve(process.cwd(),"registry")}function He(e){let{archetype:t}=e;return`# Always-On Design Governance Rule (v1.1)
464
464
 
465
465
  You are the design governance engine for this codebase. Every UI decision must preserve geometric unity, copy honesty, and visual calm across every turn.
466
466
 
@@ -548,6 +548,7 @@ You are the design governance engine for this codebase. Every UI decision must p
548
548
  - **Comfortable Secondary Text (\`14px\u201315px\`):** Sub-labels (metadata beneath headings, secondary descriptions beneath primary titles), navigation tabs, and buttons MUST be \`0.875rem\u20130.9375rem\` (\`14px\u201315px\`) in high-contrast \`var(--text-secondary)\`\u2014never \`11px\` dim gray.
549
549
  - **Prominent Card Titles (\`18px\u201320px\`):** Primary item titles inside rows or cards (e.g., entity names, item titles) must be \`1.125rem\u20131.25rem\` (\`18px\u201320px\`, \`font-weight: 600\`) so they anchor the row clearly.
550
550
  - **Never Combine Small Size + Low Opacity:** If text is \`13px\u201314px\`, it MUST use \`var(--text-secondary)\` (high contrast) and \`font-weight: 500\`, never low-opacity \`opacity-40\` / \`opacity-50\` or \`text-zinc-500\`.
551
+ - **Universal Ban on Unrequested Kicker / Eyebrow Micro-Labels:** Never place small uppercase tracking labels (e.g., \`SYSTEM 01\`, \`CORE FOUNDATION\`, \`FEATURED MODULE\`, \`OVERVIEW\`, \`STEP 01\`) above section headings, hero headlines, or card titles unless explicitly provided in the user's copy. A heading or card title must stand on its own without a decorative uppercase prefix above it.
551
552
  - **Banned Numbered Eyebrows:** Never put numbered labels (\`01 / ...\`, \`02 / ...\`) or redundant category eyebrows above \`<h1>\` page titles. Eyebrows are prohibited if they merely paraphrase the heading or add decorative numbering.
552
553
  - **Workspace vs. Marketing Font Routing:** Never override a user's existing project fonts in \`tokens.css\`. When \`--font-display\` is an editorial/high-contrast serif, reserve \`var(--font-display)\` strictly for marketing heroes and editorial reading views; inside functional application workspaces, data tables, and settings consoles, style \`h1\u2013h4\` headings with \`var(--font-sans)\` so dense UI remains crisp.
553
554
  - **Typesetting:**
@@ -612,7 +613,7 @@ You are the design governance engine for this codebase. Every UI decision must p
612
613
  - **Fix-Forward:** Resolve visual or ergonomic issues by updating \`./tokens.css\` or removing clutter\u2014**never** by adding wrapper elements, extra containers, or ad-hoc overrides.
613
614
  - **Revision Budget:** Maximum **2 iterative revision passes** per feature. Track each pass in \`DESIGN.md\` Section 6.
614
615
  - Log non-blocking enhancements into \`DESIGN.md\` Section 8 (**Polish Backlog**) rather than burning turns on infinite micro-tweaks.`}async function se(e){let{targetDir:t,agents:s}=e;if(await D.ensureDir(t),!e.fontOverride){let p=await Z(t);p&&(!e.fontMode||e.fontMode==="keep")&&(e={...e,fontMode:"keep",fontOverride:p})}let a=[],{css:g,json:f}=le(e),y=I.resolve(t,"tokens.css"),i=I.resolve(t,"tokens.json");await D.writeFile(y,g,"utf-8"),a.push(y),await D.writeJSON(i,f,{spaces:2}),a.push(i);let n=I.resolve(t,"DESIGN.md"),c;await D.pathExists(n)&&(c=await D.readFile(n,"utf-8"));let d=ce(e,c);if(await D.writeFile(n,d,"utf-8"),a.push(n),e.starterKit){let p=await Ue(),v=I.resolve(p,"starter-kits",e.starterKit,"template.html");if(await D.pathExists(v)){let r=I.resolve(t,"starter-preview.html");await D.copy(v,r),a.push(r)}}let m=He(e);for(let p of s)if(p==="antigravity"){let v=await pe(t,e,m);a.push(...v)}else if(p==="cursor"){let v=await ue(t,e,m);a.push(...v)}else if(p==="claude-codex"){let v=await ge(t,e,m);a.push(...v)}else if(p==="web-builders"){let v=await fe(t,e,m);a.push(v)}return{createdFiles:a}}import ke from"fs-extra";import J from"pathe";import R from"fs-extra";import K from"pathe";import je from"crypto";var ne=".design-skills.lock";async function ye(e){let t=await R.readFile(e,"utf-8");return je.createHash("sha256").update(t).digest("hex")}async function ve(e){let t=["tokens.css","tokens.json","DESIGN.md","DESIGN-PROMPT.md",".agent/rules/design-core.md",".agents/rules/design-core.md",".agent/skills/design-system/SKILL.md",".agents/skills/design-system/SKILL.md",".cursor/rules/00-design-core.mdc",".cursor/rules/design-core.mdc","CLAUDE.md","AGENTS.md"],s={};for(let f of t){let y=K.resolve(e,f);await R.pathExists(y)&&(s[f]=await ye(y))}let a={version:"1.1.0",generatedAt:new Date().toISOString(),hashes:s},g=K.resolve(e,ne);return await R.writeJSON(g,a,{spaces:2}),a}async function be(e){let t=K.resolve(e,ne);return await R.pathExists(t)?(await R.remove(t),!0):!1}async function we(e){let t=K.resolve(e,ne);if(!await R.pathExists(t))return{locked:!1,valid:!0,modifiedFiles:[]};let s=await R.readJSON(t),a=[];for(let[g,f]of Object.entries(s.hashes)){let y=K.resolve(e,g);if(!await R.pathExists(y)){a.push(`${g} (deleted)`);continue}await ye(y)!==f&&a.push(g)}return{locked:!0,valid:a.length===0,modifiedFiles:a}}var _e=["hover to reveal","click here","smooth animations","built with react","powered by react","ai-powered","supercharge","one-click","magical","say goodbye to"],Ve=/[\u{1F300}-\u{1F5FF}\u{1F600}-\u{1F64F}\u{1F680}-\u{1F6FF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}\u{1F900}-\u{1F9FF}\u{1FA70}-\u{1FAFF}]/u,We=/#(?:[0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{4}|[0-9a-fA-F]{3})(?=[;,\s)'"`}\]]|$)/g,Ke=/\b(?:rgba?|hsla?|oklch)\s*\(/i,qe=/(?:from-purple|to-pink|from-indigo.*to-purple|from-cyan.*to-purple|radial-gradient\([^)]*(?:purple|#7[0-9a-f]{5}|oklch\([^)]*290\)))/i,Ye=/\[(PRO|BETA|v\d+\.\d+)\]/i,Ze=/\b(SUB-\d+MS|TEMPORAL ENGINE|MASTER CHRONOMETER|CHRONO SYNC|LOCAL REFERENCE|\d+\s*FPS|EPOCH)\b/i,Je=/\b(NOW PLAYING|•\s*PLAYING|HD\s*1080P|4K\s*HDR|120\s*FPS|HI-RES\s*AUDIO|LIVE\s*CINEMATIC|BESTSELLER|HOT\s*SALE|LIMITED\s*TIME)\b/i,Xe=/\babsolute\b[^"']*\b(?:top-(?:1|2|3|4|5|6|8)|top-\[[^\]]+\])\b[^"']*\b(?:left|right)-(?:1|2|3|4|5|6|8)\b|\babsolute\b[^"']*\b(?:left|right)-(?:1|2|3|4|5|6|8)\b[^"']*\b(?:top-(?:1|2|3|4|5|6|8)|top-\[[^\]]+\])\b/i,Qe=/\b(rounded-full|uppercase|tracking-[a-z0-9_-]+|text-xs|badge|pill|chip)\b/i,et=/slashed-zero|font-feature-settings:[^;]*["']zero["']\s*1/i,tt=/class(?:Name)?=["'][^"']*\b(badge|pill|chip|tag-chip|status-badge|header-badge)\b[^"']*["']/i,at=/(?:class(?:Name)?=["'][^"']*\buppercase\b[^"']*\btracking-[^"']*["']|class(?:Name)?=["'][^"']*\btracking-[^"']*\buppercase\b[^"']*["']|\btext-transform:\s*uppercase\b[^;]*letter-spacing)/i,rt=/(?:\btext-\[(?:8|9|10|11)px\]|\bfont-size:\s*(?:8|9|10|11)px\b)/i,st=/\b(text-zinc-500|text-slate-500|text-gray-500|opacity-30|opacity-40)\b/i,nt=/https?:\/\/[^\s"'`]+\.(?:png|jpe?g|webp|avif|svg)(?:\?[^\s"'`]*)?|https?:\/\/(?:images\.)?unsplash\.com\/[^\s"'`]+/gi;function it(e){let t=e.match(/(?:premium_)?photo-[a-zA-Z0-9_-]+/i);return t?t[0].toLowerCase():e.split("?")[0].split("#")[0].toLowerCase()}async function xe(e){let t=[],s=0,a=await we(e);if(a.locked&&!a.valid)for(let y of a.modifiedFiles)t.push({file:y,rule:"freeze/hash-integrity",line:1,snippet:y,message:`File was modified without running unfreeze: ${y}`,severity:"error"});let g=[".html",".css",".js",".ts",".jsx",".tsx",".vue",".svelte"];async function f(y){let i=await ke.readdir(y,{withFileTypes:!0});for(let n of i){let c=J.resolve(y,n.name);if(n.isDirectory()){if(["node_modules",".git","dist",".gemini",".turbo"].includes(n.name))continue;await f(c)}else if(n.isFile()){let d=J.extname(n.name).toLowerCase();g.includes(d)&&(await ot(c,e,t),s++)}}}return await f(e),{targetDir:e,violations:t,filesScanned:s,passed:t.filter(y=>y.severity==="error").length===0}}async function ot(e,t,s){let a=J.relative(t,e),g=J.basename(e)==="tokens.css",f=e.includes(".agent")||e.includes(".cursor")||e.includes("DESIGN.md")||e.includes("README.md")||e.includes("core"),i=(await ke.readFile(e,"utf-8")).split(`
615
- `),n=!1,c=0,d=0,m="",p=new Map;for(let v=0;v<i.length;v++){let r=i[v],l=v+1,o=r.trim();/<(?:header|nav)\b/i.test(r)&&(n=!0),/<\/(?:header|nav)>/i.test(r)&&(n=!1);let u=r.includes("/* @design-exception")||r.includes("/* @design-signature")||r.includes("// @design-exception")||r.includes("// @design-signature");if(!g&&!u){Ke.test(r)&&s.push({file:a,rule:"tokens/no-hardcoded-color-radius",line:l,snippet:o,message:"Hardcoded color function (rgb, hsl, oklch) found outside tokens.css without @design-exception",severity:"error"});let b=r.match(We);if(b)for(let C of b){let A=r.indexOf(C);A>0&&/[a-zA-Z0-9_-]/.test(r[A-1])||s.push({file:a,rule:"tokens/no-hardcoded-color-radius",line:l,snippet:o,message:`Hardcoded hex color '${C}' found outside tokens.css without @design-exception`,severity:"error"})}}r.includes("animate-ping")&&s.push({file:a,rule:"slop/no-animate-ping",line:l,snippet:o,message:'Banned attention-seeking animation "animate-ping" detected',severity:"error"}),qe.test(r)&&!u&&s.push({file:a,rule:"slop/no-ai-gradient",line:l,snippet:o,message:"Banned AI clich\xE9 gradient (purple/pink mesh) detected",severity:"error"});let x=r.toLowerCase();for(let b of _e)if(x.includes(b)&&!r.includes("rule")&&!r.includes("banned")){s.push({file:a,rule:"copy/banned-phrases-and-leakage",line:l,snippet:o,message:`Self-referential or marketing copy clich\xE9 detected: "${b}"`,severity:"error"});break}if(!r.includes("regex")&&!r.includes("banned")&&!r.includes("Banned")&&!r.includes("Rule")&&(/^\s*0[1-9]\s*\/\s*[A-Z]/.test(o)||/>?\s*0[1-9]\s*\/\s*[A-Z]/.test(r))&&s.push({file:a,rule:"copy/banned-phrases-and-leakage",line:l,snippet:o,message:'Numbered slash eyebrow (e.g. "01 / ...") detected above headings or in UI markup',severity:"error"}),n&&tt.test(r)&&!u&&!f&&s.push({file:a,rule:"slop/no-decorative-badges",line:l,snippet:o,message:"Banned decorative badge/pill/chip detected inside <header> or <nav>",severity:"error"}),!u&&!f&&!r.includes("rule")&&!r.includes("banned")&&(Ye.test(r)?s.push({file:a,rule:"slop/no-fake-telemetry-cosplay",line:l,snippet:o,message:"Fake product tier/version badge (e.g. [PRO v2.4], [BETA]) detected",severity:"error"}):Ze.test(r)&&s.push({file:a,rule:"slop/no-fake-telemetry-cosplay",line:l,snippet:o,message:"Fake hardware telemetry or sci-fi cosplay copy detected",severity:"error"})),!u&&!f&&!r.includes("rule")&&!r.includes("banned")&&!r.includes("ban")){let b=Je.test(r),C=Xe.test(r)&&Qe.test(r);(b||C)&&s.push({file:a,rule:"slop/no-image-corner-badges",line:l,snippet:o,message:b?"Banned media/product overlay badge text detected. Keep media uncluttered without floating corner status pills.":"Floating corner badge/pill overlay detected. Never place floating status pills on top of cards, media, or product images.",severity:"error"})}if(!u&&!f&&!r.includes("rule")&&!r.includes("banned")){let b=r.match(nt);if(b)for(let C of b){let A=it(C);if(p.has(A)){let P=p.get(A);s.push({file:a,rule:"data/no-duplicate-image-urls",line:l,snippet:o,message:`Duplicate image asset detected ("${A}", originally defined on line ${P}). Every distinct record in a UI dataset must have a unique visual asset/URL.`,severity:"warning"})}else p.set(A,l)}}et.test(r)&&!u&&!r.includes('"zero" 0')&&!g&&!f&&s.push({file:a,rule:"slop/no-slashed-zero",line:l,snippet:o,message:'Banned slashed-zero numeric styling detected. Use open-oval zeros with "zero" 0',severity:"error"}),!g&&!f&&!u&&(rt.test(r)&&s.push({file:a,rule:"a11y/no-micro-text",line:l,snippet:o,message:"Unreadable micro-text detected (< 13px). Maintain minimum 13px (0.8125rem) floor for human readability.",severity:"error"}),st.test(r)&&s.push({file:a,rule:"a11y/no-micro-text",line:l,snippet:o,message:"Low-contrast dim text class detected. Use high-contrast var(--text-secondary) or var(--text-muted) instead of raw gray or low opacity.",severity:"error"})),Ve.test(r)&&!u&&!r.includes("no \u{1F680}")&&!r.includes("Banned")&&s.push({file:a,rule:"slop/no-emoji-icons",line:l,snippet:o,message:"Emoji character used as UI icon detected",severity:"error"}),at.test(r)&&!u&&!f&&(c++,d||(d=l,m=o))}c>3&&s.push({file:a,rule:"slop/excessive-uppercase-labels",line:d,snippet:m,message:`Excessive uppercase micro-labels detected (${c} occurrences, maximum allowed is 3). Cure UPPERCASE MICRO-LABEL disease by using normal sentence case.`,severity:"warning"})}import{fileURLToPath as dt}from"url";var z=new lt;z.name("agent-design-skills").description("v1.1 CLI and design-governance registry eliminating AI UI slop and enforcing cross-page unity").version("1.1.2");async function Se(e){let t=[];return(await q.pathExists(F.resolve(e,".agent"))||await q.pathExists(F.resolve(e,".agents")))&&t.push("antigravity"),await q.pathExists(F.resolve(e,".cursor"))&&t.push("cursor"),(await q.pathExists(F.resolve(e,"CLAUDE.md"))||await q.pathExists(F.resolve(e,"AGENTS.md")))&&t.push("claude-codex"),t.length>0?t:["antigravity"]}var ct=[{value:"dark-obsidian-technical",label:"Dark Obsidian Technical",hint:"1px hairlines, carbon hue 250, forensic developer/settlement console"},{value:"swiss-typographic-grid",label:"Swiss Typographic Grid",hint:"Light, exposed 1px grid lines, Cabinet Grotesk / Space Grotesk"},{value:"kinetic-industrial-mono",label:"Kinetic Industrial Mono",hint:"Dark, tabular telemetry, JetBrains Mono, amber accents"},{value:"bento-modular-system",label:"Bento Modular System",hint:"Adaptive 12-col bento cells, Satoshi / General Sans"},{value:"spatial-glass-visionos",label:"Spatial Glass VisionOS",hint:"Translucent optical blur, Outfit / DM Sans, specular highlights"},{value:"editorial-serif-paper",label:"Editorial Serif Paper",hint:"Warm bone paper, broadsheet typography, high-craft publication"},{value:"quiet-luxury-atelier",label:"Quiet Luxury Atelier",hint:"Whisper-quiet prestige, Cormorant Garamond / DM Sans, warm ivory"},{value:"warm-artisan-craft",label:"Warm Artisan Craft",hint:"Earthy linen, Fraunces / Cabinet Grotesk, terracotta accents"},{value:"japanese-minimal-zen",label:"Japanese Minimal Zen",hint:"Ma negative space, Noto Serif Display / Work Sans, washi mist"},{value:"scandinavian-warm-minimal",label:"Scandinavian Warm Minimal",hint:"Oat/birch canvas, Familjen Grotesk / DM Sans, spruce accents"},{value:"neo-brutalism",label:"Neo-Brutalist Studio",hint:"Hard 2px borders, stark offset shadows, raw tactile accents"},{value:"retro-tactile-analog",label:"Retro Tactile Analog",hint:"Physical bevels, Space Mono / DM Sans, Teenage Engineering vibe"},{value:"y2k-acid-cyber",label:"Y2K Acid Cyber",hint:"Electric chartreuse on pitch black, VT323 / Syne Mono"},{value:"playful-clay-consumer",label:"Playful Clay Consumer",hint:"Tactile dual-layer shadows, Bricolage Grotesque / Plus Sans"},{value:"vaporwave-crt-terminal",label:"Vaporwave CRT Terminal",hint:"Phosphorescent cyan & magenta on indigo void, scanlines"},{value:"high-trust-fintech-clarity",label:"High-Trust Fintech Clarity",hint:"Enterprise navy, Sora / Public Sans, tabular numbers"},{value:"clinical-biotech-precision",label:"Clinical Biotech Precision",hint:"Sterile lab white, Geist / Space Mono, cold cyan"},{value:"civic-govtech-accessible",label:"Civic Govtech Accessible",hint:"WCAG AAA contrast, Atkinson Hyperlegible / DM Sans"}];z.command("init",{isDefault:!0}).description("Scaffold a design token contract, starter kit, and agent governance rules").option("-a, --agents <agents>",'Target agents (comma-separated or "all": antigravity, cursor, claude-codex, web-builders)').option("-f, --fast","Fast mode with sensible defaults (dark-obsidian-technical, antigravity)").option("-t, --archetype <archetype>","Canonical archetype ID").option("-s, --starter-kit <kit>","Pre-baked starter kit: dashboard, landing-waitlist, mobile-app, data-tool").option("-m, --mode <mode>","Installation mode: modular or single","modular").option("-F, --fonts <mode>",'Font selection mode: A, B, C, keep, or comma-separated "Display,Sans,Mono"').option("-d, --dir <dir>","Target directory",".").option("-y, --yes","Accept defaults without interactive prompts").action(async e=>{let t=F.resolve(process.cwd(),e.dir||"."),s=F.basename(t)||"my-project",a,g;if(e.fonts){let r=e.fonts.trim(),l=r.toUpperCase();if(l==="A"||l==="B"||l==="C")a=l;else if(r.toLowerCase()==="keep")a="keep";else if(r.includes(",")){let o=r.split(",").map(u=>u.trim());a="custom",g={display:o[0]||void 0,sans:o[1]||void 0,mono:o[2]||void 0,source:"user"}}else a="custom",g={display:r,sans:r,source:"user"}}let f=null;if(e.agents&&(e.agents.toLowerCase()==="all"?f=["antigravity","cursor","claude-codex","web-builders"]:f=e.agents.split(",").map(r=>r.trim())),e.fast||e.yes){w.intro(`${k.bgWhite(k.black(" \u26A1 agent-design-skills "))} ${k.dim("v1.1.0 [EXPRESS MODE]")}`);let r=w.spinner();r.start(`Compiling design system in ${t}...`);let l=e.starterKit||"dashboard",o=f||await Se(t),u={projectName:s,targetDir:t,agents:o,archetype:e.archetype||"dark-obsidian-technical",feeling:"urgent-precise",radius:"subtle",blur:"subtle-frost",mode:e.mode||"modular",starterKit:l,fontMode:a,fontOverride:g,customDirection:"Needs to feel like a high-precision developer settlement console, crisp 1px hairlines, zero marketing fluff",productBrief:"High-precision operational workspace and data reconciliation platform",fast:!0},x=await se(u);r.stop(`Scaffolded ${x.createdFiles.length} files successfully.`);for(let b of x.createdFiles)console.log(` ${k.green("\u2714")} ${k.dim(F.relative(t,b))}`);w.outro(k.green(`\u2728 Initialization complete for ${u.agents.join(", ")}. Token contract & starter preview active.`));return}console.clear(),w.intro(`${k.bgWhite(k.black(" \u26A1 agent-design-skills "))} ${k.dim("v1.1.0")}`);let y=await Se(t),i=await Z(t),n=await w.group({agents:()=>f?Promise.resolve(f):w.multiselect({message:"Which AI coding agent(s) are you using?",options:[{value:"antigravity",label:"Antigravity",hint:".agent/rules/ & .agent/skills/"},{value:"cursor",label:"Cursor",hint:".cursor/rules/"},{value:"claude-codex",label:"Codex / Claude Code",hint:"CLAUDE.md / AGENTS.md"},{value:"web-builders",label:"Web Builders (v0 / Bolt / Lovable)",hint:"DESIGN-PROMPT.md"}],initialValues:y,required:!0}),archetype:()=>e.archetype?Promise.resolve(e.archetype):w.select({message:"Choose a human-crafted design archetype:",options:ct}),typography:async({results:r})=>{if(a||g)return a||"custom";let l=r.archetype||e.archetype||"dark-obsidian-technical",o=_[l]||_["dark-obsidian-technical"],u=[];if(i&&(i.display||i.sans||i.mono)){let x=[i.display,i.sans,i.mono].filter(Boolean).map(T).join(" / ");u.push({value:"keep",label:"Keep existing project fonts",hint:x})}return u.push({value:"A",label:`Pairing A (Default): ${o.A.display} + ${o.A.sans} + ${o.A.mono}`,hint:"Archetype primary pairing"},{value:"B",label:`Pairing B: ${o.B.display} + ${o.B.sans} + ${o.B.mono}`,hint:"Alternative character"},{value:"C",label:`Pairing C: ${o.C.display} + ${o.C.sans} + ${o.C.mono}`,hint:"Alternative character"},{value:"custom",label:"Custom font families (specify Display, Sans, Mono)",hint:"Type custom Google Fonts or Fontshare families"}),w.select({message:"Select typography & font pairing:",options:u,initialValue:i&&(i.display||i.sans||i.mono)?"keep":"A"})},starterKit:()=>w.select({message:"Choose a token-wired starter kit preview:",options:[{value:"dashboard",label:"High-Density Workspace Dashboard",hint:"Workspace shell, summary strip, data table, drawer"},{value:"landing-waitlist",label:"Editorial Landing & Waitlist",hint:"Narrative hero, live preview artifact, waitlist form"},{value:"mobile-app",label:"Mobile-First Application",hint:"375px\u2013430px frame, thumb nav, bottom sheet"},{value:"data-tool",label:"Split-Pane Query Explorer & Tool",hint:"Split query/inspector, \u2318K command bar, tabular nums"},{value:"none",label:"None (Blank Token Contract)",hint:"Pure tokens and governance rules only"}]}),mode:()=>w.select({message:"Installation mode for skills & rules:",options:[{value:"modular",label:"Modular Skills (Recommended)",hint:"Core rules + task-scoped reference guides"},{value:"single",label:"Single Master File",hint:"Combined master reference file"}]}),feeling:()=>w.select({message:"Select sensory motion & timing vector:",options:[{value:"urgent-precise",label:"Urgent & Precise (110ms / 180ms)",hint:"Forensic, snappy, zero bounce"},{value:"calm",label:"Calm & Measured (140ms / 240ms)",hint:"Literary ease, smooth"},{value:"playful-tactile",label:"Playful & Tactile (80ms / 150ms)",hint:"Punchy press states"},{value:"authoritative",label:"Authoritative (120ms / 200ms)",hint:"Institutional stability"}]}),radius:()=>w.select({message:"Select geometric corner radius scale:",options:[{value:"subtle",label:"Subtle (6px outer / 4px inner)",hint:"Standard technical scale"},{value:"sharp",label:"Sharp (0px outer / 0px inner)",hint:"Zero radius / architectural"},{value:"medium",label:"Medium (10px outer / 6px inner)",hint:"Soft modern SaaS"},{value:"high",label:"High (16px outer / 10px inner)",hint:"Friendly consumer scale"},{value:"pill",label:"Pill (9999px)",hint:"Capsule components"}]}),blur:()=>w.select({message:"Select surface blur depth:",options:[{value:"subtle-frost",label:"Subtle Frost (8px)",hint:"Hairline glass backdrops"},{value:"flat",label:"Flat (0px)",hint:"Zero blur, pure solid fills"},{value:"deep-glass",label:"Deep Glass (20px)",hint:"Heavy frosted glass"}]}),customDirection:()=>w.text({message:"Custom Creative Direction & Anti-Drift Mandate (Section 0):",placeholder:"Needs to feel like a high-precision developer settlement console, crisp 1px hairlines, zero marketing fluff",initialValue:"Needs to feel like a high-precision developer settlement console, crisp 1px hairlines, zero marketing fluff"})},{onCancel:()=>{w.cancel("Setup cancelled."),process.exit(0)}}),c=a||n.typography||"A",d=g;if(n.typography==="keep"&&!d&&i)d=i;else if(n.typography==="custom"&&!d){let r=await w.text({message:'Enter --font-display family (e.g. "Cabinet Grotesk" or "Cormorant Garamond"):',placeholder:"Sora",validate:u=>u?.trim()?void 0:"Display font family is required"});w.isCancel(r)&&(w.cancel("Setup cancelled."),process.exit(0));let l=await w.text({message:'Enter --font-sans family (e.g. "Instrument Sans" or "Public Sans"):',placeholder:"Instrument Sans",validate:u=>u?.trim()?void 0:"Sans font family is required"});w.isCancel(l)&&(w.cancel("Setup cancelled."),process.exit(0));let o=await w.text({message:'Enter --font-mono family (e.g. "Geist Mono" or "JetBrains Mono"):',placeholder:"JetBrains Mono",validate:u=>u?.trim()?void 0:"Mono font family is required"});w.isCancel(o)&&(w.cancel("Setup cancelled."),process.exit(0)),d={display:r.trim(),sans:l.trim(),mono:o.trim(),source:"user"}}let m=w.spinner();m.start("Compiling tokens and governance contract...");let p={projectName:s,targetDir:t,agents:n.agents||f||y,archetype:n.archetype,feeling:n.feeling,radius:n.radius,blur:n.blur,fontMode:c,fontOverride:d,mode:n.mode,starterKit:n.starterKit!=="none"?n.starterKit:void 0,customDirection:n.customDirection},v=await se(p);m.stop(`Compiled ${v.createdFiles.length} files successfully.`);for(let r of v.createdFiles)console.log(` ${k.green("\u2714")} ${k.dim(F.relative(t,r))}`);w.outro(`${k.green("\u2714")} Initialized ${k.bold(p.archetype)} for ${k.cyan(p.agents.join(", "))}`)});z.command("lint [dir]").description("Lint directory for hardcoded colors, AI slop, banned copy, and hash freeze integrity").action(async e=>{let t=F.resolve(process.cwd(),e||".");console.log(`${k.bgBlue(k.black(" LINT "))} Scanning ${k.bold(t)}...
616
+ `),n=!1,c=0,d=0,m="",p=new Map;for(let v=0;v<i.length;v++){let r=i[v],l=v+1,o=r.trim();/<(?:header|nav)\b/i.test(r)&&(n=!0),/<\/(?:header|nav)>/i.test(r)&&(n=!1);let u=r.includes("/* @design-exception")||r.includes("/* @design-signature")||r.includes("// @design-exception")||r.includes("// @design-signature");if(!g&&!u){Ke.test(r)&&s.push({file:a,rule:"tokens/no-hardcoded-color-radius",line:l,snippet:o,message:"Hardcoded color function (rgb, hsl, oklch) found outside tokens.css without @design-exception",severity:"error"});let b=r.match(We);if(b)for(let C of b){let A=r.indexOf(C);A>0&&/[a-zA-Z0-9_-]/.test(r[A-1])||s.push({file:a,rule:"tokens/no-hardcoded-color-radius",line:l,snippet:o,message:`Hardcoded hex color '${C}' found outside tokens.css without @design-exception`,severity:"error"})}}r.includes("animate-ping")&&s.push({file:a,rule:"slop/no-animate-ping",line:l,snippet:o,message:'Banned attention-seeking animation "animate-ping" detected',severity:"error"}),qe.test(r)&&!u&&s.push({file:a,rule:"slop/no-ai-gradient",line:l,snippet:o,message:"Banned AI clich\xE9 gradient (purple/pink mesh) detected",severity:"error"});let x=r.toLowerCase();for(let b of _e)if(x.includes(b)&&!r.includes("rule")&&!r.includes("banned")){s.push({file:a,rule:"copy/banned-phrases-and-leakage",line:l,snippet:o,message:`Self-referential or marketing copy clich\xE9 detected: "${b}"`,severity:"error"});break}if(!r.includes("regex")&&!r.includes("banned")&&!r.includes("Banned")&&!r.includes("Rule")&&(/^\s*0[1-9]\s*\/\s*[A-Z]/.test(o)||/>?\s*0[1-9]\s*\/\s*[A-Z]/.test(r))&&s.push({file:a,rule:"copy/banned-phrases-and-leakage",line:l,snippet:o,message:'Numbered slash eyebrow (e.g. "01 / ...") detected above headings or in UI markup',severity:"error"}),n&&tt.test(r)&&!u&&!f&&s.push({file:a,rule:"slop/no-decorative-badges",line:l,snippet:o,message:"Banned decorative badge/pill/chip detected inside <header> or <nav>",severity:"error"}),!u&&!f&&!r.includes("rule")&&!r.includes("banned")&&(Ye.test(r)?s.push({file:a,rule:"slop/no-fake-telemetry-cosplay",line:l,snippet:o,message:"Fake product tier/version badge (e.g. [PRO v2.4], [BETA]) detected",severity:"error"}):Ze.test(r)&&s.push({file:a,rule:"slop/no-fake-telemetry-cosplay",line:l,snippet:o,message:"Fake hardware telemetry or sci-fi cosplay copy detected",severity:"error"})),!u&&!f&&!r.includes("rule")&&!r.includes("banned")&&!r.includes("ban")){let b=Je.test(r),C=Xe.test(r)&&Qe.test(r);(b||C)&&s.push({file:a,rule:"slop/no-image-corner-badges",line:l,snippet:o,message:b?"Banned media/product overlay badge text detected. Keep media uncluttered without floating corner status pills.":"Floating corner badge/pill overlay detected. Never place floating status pills on top of cards, media, or product images.",severity:"error"})}if(!u&&!f&&!r.includes("rule")&&!r.includes("banned")){let b=r.match(nt);if(b)for(let C of b){let A=it(C);if(p.has(A)){let P=p.get(A);s.push({file:a,rule:"data/no-duplicate-image-urls",line:l,snippet:o,message:`Duplicate image asset detected ("${A}", originally defined on line ${P}). Every distinct record in a UI dataset must have a unique visual asset/URL.`,severity:"warning"})}else p.set(A,l)}}et.test(r)&&!u&&!r.includes('"zero" 0')&&!g&&!f&&s.push({file:a,rule:"slop/no-slashed-zero",line:l,snippet:o,message:'Banned slashed-zero numeric styling detected. Use open-oval zeros with "zero" 0',severity:"error"}),!g&&!f&&!u&&(rt.test(r)&&s.push({file:a,rule:"a11y/no-micro-text",line:l,snippet:o,message:"Unreadable micro-text detected (< 13px). Maintain minimum 13px (0.8125rem) floor for human readability.",severity:"error"}),st.test(r)&&s.push({file:a,rule:"a11y/no-micro-text",line:l,snippet:o,message:"Low-contrast dim text class detected. Use high-contrast var(--text-secondary) or var(--text-muted) instead of raw gray or low opacity.",severity:"error"})),Ve.test(r)&&!u&&!r.includes("no \u{1F680}")&&!r.includes("Banned")&&s.push({file:a,rule:"slop/no-emoji-icons",line:l,snippet:o,message:"Emoji character used as UI icon detected",severity:"error"}),at.test(r)&&!u&&!f&&(c++,d||(d=l,m=o))}c>3&&s.push({file:a,rule:"slop/excessive-uppercase-labels",line:d,snippet:m,message:`Excessive uppercase micro-labels detected (${c} occurrences, maximum allowed is 3). Cure UPPERCASE MICRO-LABEL disease by using normal sentence case.`,severity:"warning"})}import{fileURLToPath as dt}from"url";var z=new lt;z.name("agent-design-skills").description("v1.1 CLI and design-governance registry eliminating AI UI slop and enforcing cross-page unity").version("1.1.3");async function Se(e){let t=[];return(await q.pathExists(F.resolve(e,".agent"))||await q.pathExists(F.resolve(e,".agents")))&&t.push("antigravity"),await q.pathExists(F.resolve(e,".cursor"))&&t.push("cursor"),(await q.pathExists(F.resolve(e,"CLAUDE.md"))||await q.pathExists(F.resolve(e,"AGENTS.md")))&&t.push("claude-codex"),t.length>0?t:["antigravity"]}var ct=[{value:"dark-obsidian-technical",label:"Dark Obsidian Technical",hint:"1px hairlines, carbon hue 250, forensic developer/settlement console"},{value:"swiss-typographic-grid",label:"Swiss Typographic Grid",hint:"Light, exposed 1px grid lines, Cabinet Grotesk / Space Grotesk"},{value:"kinetic-industrial-mono",label:"Kinetic Industrial Mono",hint:"Dark, tabular telemetry, JetBrains Mono, amber accents"},{value:"bento-modular-system",label:"Bento Modular System",hint:"Adaptive 12-col bento cells, Satoshi / General Sans"},{value:"spatial-glass-visionos",label:"Spatial Glass VisionOS",hint:"Translucent optical blur, Outfit / DM Sans, specular highlights"},{value:"editorial-serif-paper",label:"Editorial Serif Paper",hint:"Warm bone paper, broadsheet typography, high-craft publication"},{value:"quiet-luxury-atelier",label:"Quiet Luxury Atelier",hint:"Whisper-quiet prestige, Cormorant Garamond / DM Sans, warm ivory"},{value:"warm-artisan-craft",label:"Warm Artisan Craft",hint:"Earthy linen, Fraunces / Cabinet Grotesk, terracotta accents"},{value:"japanese-minimal-zen",label:"Japanese Minimal Zen",hint:"Ma negative space, Noto Serif Display / Work Sans, washi mist"},{value:"scandinavian-warm-minimal",label:"Scandinavian Warm Minimal",hint:"Oat/birch canvas, Familjen Grotesk / DM Sans, spruce accents"},{value:"neo-brutalism",label:"Neo-Brutalist Studio",hint:"Hard 2px borders, stark offset shadows, raw tactile accents"},{value:"retro-tactile-analog",label:"Retro Tactile Analog",hint:"Physical bevels, Space Mono / DM Sans, Teenage Engineering vibe"},{value:"y2k-acid-cyber",label:"Y2K Acid Cyber",hint:"Electric chartreuse on pitch black, VT323 / Syne Mono"},{value:"playful-clay-consumer",label:"Playful Clay Consumer",hint:"Tactile dual-layer shadows, Bricolage Grotesque / Plus Sans"},{value:"vaporwave-crt-terminal",label:"Vaporwave CRT Terminal",hint:"Phosphorescent cyan & magenta on indigo void, scanlines"},{value:"high-trust-fintech-clarity",label:"High-Trust Fintech Clarity",hint:"Enterprise navy, Sora / Public Sans, tabular numbers"},{value:"clinical-biotech-precision",label:"Clinical Biotech Precision",hint:"Sterile lab white, Geist / Space Mono, cold cyan"},{value:"civic-govtech-accessible",label:"Civic Govtech Accessible",hint:"WCAG AAA contrast, Atkinson Hyperlegible / DM Sans"}];z.command("init",{isDefault:!0}).description("Scaffold a design token contract, starter kit, and agent governance rules").option("-a, --agents <agents>",'Target agents (comma-separated or "all": antigravity, cursor, claude-codex, web-builders)').option("-f, --fast","Fast mode with sensible defaults (dark-obsidian-technical, antigravity)").option("-t, --archetype <archetype>","Canonical archetype ID").option("-s, --starter-kit <kit>","Pre-baked starter kit: dashboard, landing-waitlist, mobile-app, data-tool").option("-m, --mode <mode>","Installation mode: modular or single","modular").option("-F, --fonts <mode>",'Font selection mode: A, B, C, keep, or comma-separated "Display,Sans,Mono"').option("-d, --dir <dir>","Target directory",".").option("-y, --yes","Accept defaults without interactive prompts").action(async e=>{let t=F.resolve(process.cwd(),e.dir||"."),s=F.basename(t)||"my-project",a,g;if(e.fonts){let r=e.fonts.trim(),l=r.toUpperCase();if(l==="A"||l==="B"||l==="C")a=l;else if(r.toLowerCase()==="keep")a="keep";else if(r.includes(",")){let o=r.split(",").map(u=>u.trim());a="custom",g={display:o[0]||void 0,sans:o[1]||void 0,mono:o[2]||void 0,source:"user"}}else a="custom",g={display:r,sans:r,source:"user"}}let f=null;if(e.agents&&(e.agents.toLowerCase()==="all"?f=["antigravity","cursor","claude-codex","web-builders"]:f=e.agents.split(",").map(r=>r.trim())),e.fast||e.yes){w.intro(`${k.bgWhite(k.black(" \u26A1 agent-design-skills "))} ${k.dim("v1.1.0 [EXPRESS MODE]")}`);let r=w.spinner();r.start(`Compiling design system in ${t}...`);let l=e.starterKit||"dashboard",o=f||await Se(t),u={projectName:s,targetDir:t,agents:o,archetype:e.archetype||"dark-obsidian-technical",feeling:"urgent-precise",radius:"subtle",blur:"subtle-frost",mode:e.mode||"modular",starterKit:l,fontMode:a,fontOverride:g,customDirection:"Needs to feel like a high-precision developer settlement console, crisp 1px hairlines, zero marketing fluff",productBrief:"High-precision operational workspace and data reconciliation platform",fast:!0},x=await se(u);r.stop(`Scaffolded ${x.createdFiles.length} files successfully.`);for(let b of x.createdFiles)console.log(` ${k.green("\u2714")} ${k.dim(F.relative(t,b))}`);w.outro(k.green(`\u2728 Initialization complete for ${u.agents.join(", ")}. Token contract & starter preview active.`));return}console.clear(),w.intro(`${k.bgWhite(k.black(" \u26A1 agent-design-skills "))} ${k.dim("v1.1.0")}`);let y=await Se(t),i=await Z(t),n=await w.group({agents:()=>f?Promise.resolve(f):w.multiselect({message:"Which AI coding agent(s) are you using?",options:[{value:"antigravity",label:"Antigravity",hint:".agent/rules/ & .agent/skills/"},{value:"cursor",label:"Cursor",hint:".cursor/rules/"},{value:"claude-codex",label:"Codex / Claude Code",hint:"CLAUDE.md / AGENTS.md"},{value:"web-builders",label:"Web Builders (v0 / Bolt / Lovable)",hint:"DESIGN-PROMPT.md"}],initialValues:y,required:!0}),archetype:()=>e.archetype?Promise.resolve(e.archetype):w.select({message:"Choose a human-crafted design archetype:",options:ct}),typography:async({results:r})=>{if(a||g)return a||"custom";let l=r.archetype||e.archetype||"dark-obsidian-technical",o=_[l]||_["dark-obsidian-technical"],u=[];if(i&&(i.display||i.sans||i.mono)){let x=[i.display,i.sans,i.mono].filter(Boolean).map(T).join(" / ");u.push({value:"keep",label:"Keep existing project fonts",hint:x})}return u.push({value:"A",label:`Pairing A (Default): ${o.A.display} + ${o.A.sans} + ${o.A.mono}`,hint:"Archetype primary pairing"},{value:"B",label:`Pairing B: ${o.B.display} + ${o.B.sans} + ${o.B.mono}`,hint:"Alternative character"},{value:"C",label:`Pairing C: ${o.C.display} + ${o.C.sans} + ${o.C.mono}`,hint:"Alternative character"},{value:"custom",label:"Custom font families (specify Display, Sans, Mono)",hint:"Type custom Google Fonts or Fontshare families"}),w.select({message:"Select typography & font pairing:",options:u,initialValue:i&&(i.display||i.sans||i.mono)?"keep":"A"})},starterKit:()=>w.select({message:"Choose a token-wired starter kit preview:",options:[{value:"dashboard",label:"High-Density Workspace Dashboard",hint:"Workspace shell, summary strip, data table, drawer"},{value:"landing-waitlist",label:"Editorial Landing & Waitlist",hint:"Narrative hero, live preview artifact, waitlist form"},{value:"mobile-app",label:"Mobile-First Application",hint:"375px\u2013430px frame, thumb nav, bottom sheet"},{value:"data-tool",label:"Split-Pane Query Explorer & Tool",hint:"Split query/inspector, \u2318K command bar, tabular nums"},{value:"none",label:"None (Blank Token Contract)",hint:"Pure tokens and governance rules only"}]}),mode:()=>w.select({message:"Installation mode for skills & rules:",options:[{value:"modular",label:"Modular Skills (Recommended)",hint:"Core rules + task-scoped reference guides"},{value:"single",label:"Single Master File",hint:"Combined master reference file"}]}),feeling:()=>w.select({message:"Select sensory motion & timing vector:",options:[{value:"urgent-precise",label:"Urgent & Precise (110ms / 180ms)",hint:"Forensic, snappy, zero bounce"},{value:"calm",label:"Calm & Measured (140ms / 240ms)",hint:"Literary ease, smooth"},{value:"playful-tactile",label:"Playful & Tactile (80ms / 150ms)",hint:"Punchy press states"},{value:"authoritative",label:"Authoritative (120ms / 200ms)",hint:"Institutional stability"}]}),radius:()=>w.select({message:"Select geometric corner radius scale:",options:[{value:"subtle",label:"Subtle (6px outer / 4px inner)",hint:"Standard technical scale"},{value:"sharp",label:"Sharp (0px outer / 0px inner)",hint:"Zero radius / architectural"},{value:"medium",label:"Medium (10px outer / 6px inner)",hint:"Soft modern SaaS"},{value:"high",label:"High (16px outer / 10px inner)",hint:"Friendly consumer scale"},{value:"pill",label:"Pill (9999px)",hint:"Capsule components"}]}),blur:()=>w.select({message:"Select surface blur depth:",options:[{value:"subtle-frost",label:"Subtle Frost (8px)",hint:"Hairline glass backdrops"},{value:"flat",label:"Flat (0px)",hint:"Zero blur, pure solid fills"},{value:"deep-glass",label:"Deep Glass (20px)",hint:"Heavy frosted glass"}]}),customDirection:()=>w.text({message:"Custom Creative Direction & Anti-Drift Mandate (Section 0):",placeholder:"Needs to feel like a high-precision developer settlement console, crisp 1px hairlines, zero marketing fluff",initialValue:"Needs to feel like a high-precision developer settlement console, crisp 1px hairlines, zero marketing fluff"})},{onCancel:()=>{w.cancel("Setup cancelled."),process.exit(0)}}),c=a||n.typography||"A",d=g;if(n.typography==="keep"&&!d&&i)d=i;else if(n.typography==="custom"&&!d){let r=await w.text({message:'Enter --font-display family (e.g. "Cabinet Grotesk" or "Cormorant Garamond"):',placeholder:"Sora",validate:u=>u?.trim()?void 0:"Display font family is required"});w.isCancel(r)&&(w.cancel("Setup cancelled."),process.exit(0));let l=await w.text({message:'Enter --font-sans family (e.g. "Instrument Sans" or "Public Sans"):',placeholder:"Instrument Sans",validate:u=>u?.trim()?void 0:"Sans font family is required"});w.isCancel(l)&&(w.cancel("Setup cancelled."),process.exit(0));let o=await w.text({message:'Enter --font-mono family (e.g. "Geist Mono" or "JetBrains Mono"):',placeholder:"JetBrains Mono",validate:u=>u?.trim()?void 0:"Mono font family is required"});w.isCancel(o)&&(w.cancel("Setup cancelled."),process.exit(0)),d={display:r.trim(),sans:l.trim(),mono:o.trim(),source:"user"}}let m=w.spinner();m.start("Compiling tokens and governance contract...");let p={projectName:s,targetDir:t,agents:n.agents||f||y,archetype:n.archetype,feeling:n.feeling,radius:n.radius,blur:n.blur,fontMode:c,fontOverride:d,mode:n.mode,starterKit:n.starterKit!=="none"?n.starterKit:void 0,customDirection:n.customDirection},v=await se(p);m.stop(`Compiled ${v.createdFiles.length} files successfully.`);for(let r of v.createdFiles)console.log(` ${k.green("\u2714")} ${k.dim(F.relative(t,r))}`);w.outro(`${k.green("\u2714")} Initialized ${k.bold(p.archetype)} for ${k.cyan(p.agents.join(", "))}`)});z.command("lint [dir]").description("Lint directory for hardcoded colors, AI slop, banned copy, and hash freeze integrity").action(async e=>{let t=F.resolve(process.cwd(),e||".");console.log(`${k.bgBlue(k.black(" LINT "))} Scanning ${k.bold(t)}...
616
617
  `);let s=await xe(t);if(s.violations.length===0)console.log(`${k.green("\u2714 Pass:")} Scanned ${s.filesScanned} files. Zero design slop or token contract violations found!
617
618
  `),process.exit(0);else{console.log(`${k.red("\u2716 Violations detected:")} (${s.violations.length} total)
618
619
  `);for(let a of s.violations){let g=a.severity==="error"?k.bgRed(k.black(" ERR ")):k.bgYellow(k.black(" WARN "));console.log(`${g} ${k.bold(a.file)}:${a.line} [${k.cyan(a.rule)}]`),console.log(` ${k.dim(a.message)}`),a.snippet&&console.log(` ${k.dim(">")} ${a.snippet.slice(0,80)}`),console.log("")}console.log(`${k.red("Lint failed.")} Please resolve all errors or annotate with /* @design-exception: [reason] */.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-design-skills",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "v1.1 CLI and design-governance registry eliminating AI UI slop and enforcing cross-page unity",
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,6 +28,7 @@ Generative models produce predictable UI clichés that compromise professional c
28
28
  | **3-Equal-Card Rows** | 3 identical-width stat/KPI cards placed in a row across a workspace | Compact inline horizontal metric strip with 1px vertical dividers (`var(--border-hairline)`) or asymmetric 2-pane split |
29
29
  | **Marketing in App UI** | Static compliance badges (SOC2/ISO) or marketing throughput claims inside active console workspaces | Operational workspace data only (real batch volumes, pending counts, active deltas); reserve marketing claims for landing/onboarding |
30
30
  | **Numbered & Decorative Eyebrows**| Numbered slash labels (`01 / ...`, `02 / ...`) or decorative pills placed above `<h1>` titles | Banned: never put numbered prefixes or category flair above headings; reserve badges strictly for record status in data views |
31
+ | **Unrequested Kickers & Eyebrows** | Small uppercase tracking labels (e.g., `SYSTEM 01`, `CORE FOUNDATION`, `FEATURED MODULE`, `OVERVIEW`, `STEP 01`) above headings/cards | Banned: never place small uppercase tracking labels above section headings, hero headlines, or card titles unless explicitly provided in user copy |
31
32
  | **Fake Status Dots** | Green/amber/red static colored dots in headers or footers as decorative accents | Colored status dots (static or animated) are banned unless wired to a real, user-toggleable connection state |
32
33
  | **Emoji Icons** | Using emojis (🚀, 💡, 🔥, ✨, 🧠, ⚡) inside buttons, cards, or titles | Crisp inline SVGs or clean monospaced characters from `var(--font-mono)` |
33
34
  | **Floating Orbs** | Blurred colored circles floating in the background without layout purpose | Grounded, structured architectural grid surfaces aligned to `--container-max` |
@@ -43,6 +44,9 @@ Generative models produce predictable UI clichés that compromise professional c
43
44
  ### Universal Asset Uniqueness in Sample Data
44
45
  - **Unique Assets Per Record:** Every distinct record in a UI dataset must have a unique visual asset/URL (e.g., distinct Unsplash photo IDs for different avatars, albums, products, or articles) — never lazily duplicate or copy-paste the exact same image URL across multiple records in sample data fixtures.
45
46
 
47
+ ### Universal Ban on Unrequested Kicker / Eyebrow Micro-Labels
48
+ - **Universal Ban on Unrequested Kicker / Eyebrow Micro-Labels:** Never place small uppercase tracking labels (e.g., `SYSTEM 01`, `CORE FOUNDATION`, `FEATURED MODULE`, `OVERVIEW`, `STEP 01`) above section headings, hero headlines, or card titles unless explicitly provided in the user's copy. A heading or card title must stand on its own without a decorative uppercase prefix above it.
49
+
46
50
  ---
47
51
 
48
52
  ## 2. Animation & Motion Sanity
@@ -118,6 +118,7 @@ Every generated screen must respect these strict viewport budgets:
118
118
  3. **Prominent Card Titles (`18px–20px`):** Primary item titles inside rows or cards (e.g., entity names, item titles) must be `1.125rem–1.25rem` (`18px–20px`, `font-weight: 600`) so they anchor the row clearly.
119
119
  4. **Never Combine Small Size + Low Opacity:** If text is `13px–14px`, it MUST use `var(--text-secondary)` (high contrast) and `font-weight: 500`, never low-opacity `opacity-40` / `opacity-50` or `text-zinc-500`.
120
120
  - **Numeric & Tabular Typography Law:** NEVER use coding monospace fonts (`--font-mono`) or `slashed-zero` on hero numbers, counters, or KPI figures. Always use `var(--font-display)` or `var(--font-sans)` with `font-variant-numeric: tabular-nums lining-nums; font-feature-settings: "tnum" 1, "lnum" 1, "zero" 0;` so digits have clean, open-oval zeros (`0`) with zero horizontal jitter. Reserve `var(--font-mono)` strictly for code snippets, file paths, or git hashes.
121
+ - **Universal Ban on Unrequested Kicker / Eyebrow Micro-Labels:** Never place small uppercase tracking labels (e.g., `SYSTEM 01`, `CORE FOUNDATION`, `FEATURED MODULE`, `OVERVIEW`, `STEP 01`) above section headings, hero headlines, or card titles unless explicitly provided in the user's copy. A heading or card title must stand on its own without a decorative uppercase prefix above it.
121
122
  - **Banned Numbered Eyebrows:** Never put numbered labels (`01 / ...`, `02 / ...`) or redundant category eyebrows above `<h1>` page titles. Eyebrows are prohibited if they merely paraphrase the heading or add decorative numbering.
122
123
  - **Typography Heading Law:** In functional application workspaces, tables, and settings consoles, use `--font-sans` for `<h1>–<h4>` headings when `--font-display` is a decorative/editorial serif; reserve serif `--font-display` for marketing heroes and editorial articles.
123
124